` |
### 插槽
| 插槽名 | 说明 |
| --------- | -------------------- |
| `default` | 被水印覆盖的页面内容 |
### CSS 变量
| 变量名 | 默认值 |
| ----------------------------- | --------------------- |
| `--c-watermark-content-color` | `rgba(0, 0, 0, 0.15)` |
---
Document: llms/zh-CN/examples/task-calendar.md
---
Document: llms/zh-CN/guide/component-reuse.md
# Cedar / Maple 跨端代码复用调研
审计日期:2026-10-09。基于当前工作区源码(包含正在进行的 API 对齐改动),不是发布版本保证。标记规则更新:2026-09-21;已完成的完整同源与逻辑同源均有独立源码门禁。
已同源 56 组;待同源 0 组;待适配 0 组;逻辑待同源 0 组;逻辑已同源 15 组;独立 1 组。按组件族计数,包含子组件及异名 Drawer / Popup;不等于菜单条目数量。
## 菜单标记
| 标记 | 含义 | 建议顺序 |
| --- | --- | --- |
| [已同源] | 已完成对应范围的源码对齐并纳入一致性检查;两端各自维护源码 | P0:保持检查,作为后续样板 |
| [逻辑已同源] | 稳定逻辑已独立复制并纳入一致性检查;端侧展示/交互按职责保留 | P0:保持检查 |
| [待同源] | 主体适合同源复制;尚待实现对齐与双端验证,不是已完成 | P1 |
| [待适配] | 先对齐 API 或适配依赖,再同源复制主体;尚未完成 | P2 |
| [逻辑待同源] | 计划将内部逻辑同源复制为两份,保留端侧展示/交互;尚未完成 | P3 |
| [独立] | 同名但语义层级不同,不要求主体同源 | 暂缓 |
未标记表示本次没有确认跨端对应关系,或是主题/指南/指令等页面;不表示无法复用。所有候选均采用独立复制、双端同步维护;不引用同一份核心,不建立跨库运行时依赖,不通过外部模板生成组件源码。各库内部工具复用不受影响。
## 调研依据和限制
重新运行 api-contract-inventory.mjs,从 TypeScript 根入口追踪得到 Cedar 129 / Maple 119 个运行时 Props 导出,97 个同名导出可比较(包含子组件)。Props 名称相同不能证明默认值、类型、事件、插槽、方法和行为完全一致。额外检查了主体模板/TSX、事件触发、插槽、计时与弹层依赖;详细 Props 键差异见下方附录。单独登记尚未收口的能力与主体差异,不把历史根导出不对称当作当前结论。
copied-components-check.mjs 覆盖完整同源主体;copied-foundations-check.mjs 覆盖逻辑同源控制器。安装入口、主题 token、图标及端侧视图仍由两库独立维护。新增检查不会自动升级分类,须完成双端验证后更新。
初轮完成调研、菜单和文档标记;后续已完成的复制重构按同源标记维护。后续严格遵循包内复制 + 一致性检查方式:先修改并验证一端,再复制自然一致的部分至另一端,仅调整前缀、本地导入与必要端侧实现,后续两边同步修改。不抽取两端共同引用的核心实现,不共享实例或状态。
## 逐组件建议
| Cedar | Maple | 标记 | 依据 / 同源对齐前置条件 |
| --- | --- | --- | --- |
| affix | affix | 已同源 | 现有 copied-components-check 已验证主体、Props、样式及契约测试的规范化一致性;保留各库 platform、命名空间及安装入口。 |
| badge | badge | 已同源 | 现有 copied-components-check 已验证主体、Props、样式及契约测试的规范化一致性;保留各库 platform、命名空间及安装入口。 |
| card | card | 已同源 | 现有 copied-components-check 已验证主体、Props、样式及契约测试的规范化一致性;保留各库 platform、命名空间及安装入口。 |
| switch | switch | 已同源 | 现有 copied-components-check 已验证主体、Props、样式及契约测试的规范化一致性;保留各库 platform、命名空间及安装入口。 |
| space | space | 已同源 | 独立同源复制已复核:主体、Props、子节点展开、主样式、五档尺寸 token 与配对测试一致。两端默认 wrap=false、size=md、block=true;Maple 内置主题同步 Cedar 间距。不共享核心或实例,仅保留本地安装和命名空间适配。 |
| divider | divider | 已同源 | 2026-09-08 完成独立源码复制;主体、Props、关键样式和配对测试纳入一致性检查,双端组件测试及 SSR 通过。动态增删默认插槽会同步更新带文字样式;opacity=0 生效;hairline 优先于 thickness,并输出 aria-orientation。 |
| alert | alert | 已同源 | 2026-09-08 完成独立源码复制;主体、Props、关键样式和配对测试纳入一致性检查,双端组件测试及 SSR 通过。关闭按钮支持键盘操作,close 只触发一次,closed 在离场动画完成后触发。Maple 内部关闭类由 __close-icon 调整为 __close-btn;默认图标资源由各库本地适配。 |
| tag | tag | 已同源 | 2026-09-08 完成独立源码复制;主体、Props、关键样式和配对测试纳入一致性检查,双端组件测试及 SSR 通过。两端保留独立的 show/checked 状态,受控值由调用方更新;保留淡出效果,class/style 显式透传给实际标签。尺寸配置、RTL 上下文及图标资源由各库本地适配,移动端触控尺寸保留在 token 中。 |
| count-to | count-to | 已同源 | 2026-09-08 完成独立源码复制;主体、Props、关键样式和配对测试纳入一致性检查,双端组件测试及 SSR 通过。动画在卸载及 KeepAlive 停用时暂停,重新激活后恢复;各实例的数值和动画状态独立。 |
| countdown | countdown | 已同源 | 2026-09-08 完成独立源码复制;主体、Props、关键样式和配对测试纳入一致性检查,双端组件测试及 SSR 通过。SSR 输出初始格式化时间。暂停时修改 format 会更新显示;结束事件每轮只触发一次,reset 后可开始新一轮;卸载清理动画帧。 |
| statistic | statistic | 已同源 | 2026-09-08 完成独立源码复制;主体、Props、关键样式和配对测试纳入一致性检查,双端组件测试及 SSR 通过。默认插槽动态出现/消失时同步切换占位文字;动画在卸载及 KeepAlive 停用时暂停。 |
| skeleton | skeleton | 已同源 | 2026-09-08 完成独立源码复制;主体、Props、关键样式和配对测试纳入一致性检查,双端组件测试及 SSR 通过。Skeleton、SkeletonLine、SkeletonShape 均采用独立复制的源码;各库骨架主题和尺寸 token 独立维护。 |
| steps | steps | 已同源 | 2026-09-08 完成独立源码复制;主体、Props、关键样式和配对测试纳入一致性检查,双端组件测试及 SSR 通过。Steps 和 Step 的主体、Props、上下文协议与样式同源复制;注入 Symbol 分别定义在各库,不跨库共享。保留四种 type 和原有状态/事件契约。 |
| page-header | page-header | 已同源 | 2026-09-08 完成独立源码复制;主体、Props、关键样式和配对测试纳入一致性检查,双端组件测试及 SSR 通过。返回按钮统一使用原生 button,支持键盘触发并派发 back(MouseEvent)。Cedar 内部类名由 c-page-header-xxx 调整为 c-page-header__xxx;图标资源仍由本库提供。 |
| icon | icon | 已同源 | 2026-09-08 完成独立源码复制;主体、Props、关键样式和配对测试纳入一致性检查,双端组件测试及 SSR 通过。只解析本应用已注册的图标;连续切换 name 会取消过期定时器,卸载后不再执行切换。各库注册前缀和历史 spin 类由本地适配保留,图标资源不跨库引用。 |
| avatar | avatar | 已同源 | 2026-09-11 完成独立源码复制;Avatar/AvatarGroup 主体、Props、图片 load/error、文字缩放与分组折叠纳入一致性检查。size 支持 CSS 长度;ObjectFit 更名为 AvatarObjectFit。图标、Popover、安装入口与 token 前缀由各库适配。 |
| button | button | 已同源 | 共同契约补齐后选择 Maple:Button/ButtonGroup、Props、交互逻辑、样式和 12 组 demo 已复制对齐并纳入检查;注册入口和命名空间各自保留。竞赛证据见 button-race.json。 |
| breadcrumb | breadcrumb | 已同源 | 2026-09-08 完成 Breadcrumb / BreadcrumbItem 独立源码复制;主体、Props、上下文、类型、关键样式及配对测试纳入一致性检查。双端组件测试与 SSR 通过;图标、安装入口、Menu 和主题 token 本地适配。统一非空 routes 优先、分隔符优先级与 select(route, event),修复空 routes 和省略项菜单行为。 |
| collapse | collapse | 已同源 | 2026-09-15 完成独立源码复制;Collapse/CollapseItem 主体 SFC、9 项公共 Props、change/toggleAll、键盘与 destroyOnHide 纳入一致性检查。去掉 Maple elevation;默认图标与尺寸 token 由各库 platform 适配。 |
| pagination | pagination | 已同源 | 统一主体 SFC、23 项 Props、4 个事件、6 个插槽、分页状态与按钮和布局;12 组 demo 对齐。Locale、Input、Select 使用显式平台适配,480px 容器自动简洁模式;同源检查覆盖 13 个实现文件。 |
| empty | empty | 已同源 | 2026-09-15 完成独立源码复制;主体 SFC、6 项 Props、click、image/default/extra 插槽与尺寸档位纳入一致性检查。去掉 icon/inConfigProvider;ConfigProvider 空状态、默认图标、locale 与尺寸 token 由各库 platform 适配。 |
| result | result | 已同源 | 2026-09-20 完成独立源码复制:Result 主体渲染、公共 Props、状态图形、animation/imageSize、插槽与关键 token 已统一,并由 lightweight-feedback-same-source 门禁验证。两端仅保留图标资源和本地入口适配。 第二十五批:主体格式、图形及规范 Token 门禁复验,所有状态、imageSize/动画/插槽与 SSR 验证通过。 |
| link | link | 已同源 | 以 Cedar 原生链接与 hoverable 为基础,补齐键盘焦点、加载动画、动态图标插槽及禁用属性透传;主体、Props、主样式和配对测试独立复制并验证,保留本地图标和主题 token。 |
| loading | loading | 已同源 | 2026-09-20 完成独立源码复制:Loading 主体渲染、公共 Props、五类动画、数值尺寸、hideIcon、内容遮罩、插槽与关键 token 已统一,并由 lightweight-feedback-same-source 门禁验证。 第二十五批:统一格式并改为从规范 style/token.less 验证 Token,动画、数值尺寸、SSR 回归复验。 |
| grid | grid | 已同源 | Grid/GridItem/Row/Col 主体、Props、响应式逻辑、样式和契约测试已按包内复制统一;Row/Col 有独立源码、安装和样式入口,两端 demo 配对。 入口职责已分离:Grid 仅包含 Grid.Item;Row/Col 独立入口、注册、文档与 Demo,不再通过 Grid 转导出。 |
| input-number | input-number | 已同源 | 主体、19 项 Props、数值编辑/提交控制器、独立 Decimal 运算、触控长按、样式及 Token 已独立复制;14 对核心/视图/样式/测试文件和 7 对 Demo 纳入一致性门禁。两端分别接入本库表单与全局多语言,77 项测试及双端类型检查和包构建通过;Checkbox / Radio 另批处理。 |
| ellipsis | ellipsis | 已同源 | 主体、Props、样式/Token 与配对测试独立复制;统一受控 expand/defaultExpand、键盘展开、Tooltip 配置与内容回退,移除多余外壳。与 BackTop 共 12 对文件门禁,仅前缀/本地导入不同。 第二十五批:主体、样式和配对测试复验;模板与副作用导入仍严格比较,受控展开/键盘与 Tooltip 接入不漂移。 |
| progress | progress | 已同源 | 2026-10-09 主体/Props/样式/Token 独立复制,家族双端136项测试及14源/样式/测试对和5Demo门禁通过。Progress 保留 number|string size、0–100 percent,补齐 steps/buffer/track/rotate/渐变/未知进度与圆形状态图标;Group 统一 showText/#text、超额裁剪、键盘 Tooltip 和 SSR。本地安装/ConfigProvider 尺寸接线独立,真实浏览器视觉仍单列待验收。 |
| progress-group | progress-group | 已同源 | 2026-10-09 主体/Props/样式/Token 独立复制,家族双端136项测试及14源/样式/测试对和5Demo门禁通过。Progress 保留 number|string size、0–100 percent,补齐 steps/buffer/track/rotate/渐变/未知进度与圆形状态图标;Group 统一 showText/#text、超额裁剪、键盘 Tooltip 和 SSR。本地安装/ConfigProvider 尺寸接线独立,真实浏览器视觉仍单列待验收。 |
| back-top | back-top | 已同源 | 主体、Props、滚动控制器、样式/Token 和配对测试独立复制;默认监听页面,200ms/quartOut,支持动态目标、原生键盘、KeepAlive/卸载取消及 SSR。与 Ellipsis 共 12 对文件门禁,不共享运行时。 第二十五批:复制样式与规范格式,保留严格滚动/取消/SSR 契约;绑定导入排序与本地别名规范化不忽略主体。 |
| watermark | watermark | 已同源 | 2026-09-20 已完成独立同源:统一 Canvas renderer、Props/types、文字与图片、多行/自动测量、repeat/staggered、grayscale、antiTamper、fullscreen、error/redraw、SSR 和生命周期;Maple 已删除 foreignObject content 插槽及 resize 旧方法。两端主体仅保留前缀、本地 import 和主题标识差异,并纳入源码门禁。 |
| checkbox | checkbox | 已同源 | 2026-10-09 主体已独立复制:原生 input/label、Group、Props、Context、BEM 样式及图标/实例外观/原生属性补齐;15 对主体/公开类型/测试/样式门禁及既有组核心门禁通过。本库 Form/安装接线、契约登记的 PC/触控密度默认值独立保留;无共享运行时。逐组件行为/SSR/主题通过,真实浏览器视觉仍单列待验收。 |
| radio | radio | 已同源 | 2026-10-09 主体已独立复制:原生 input/label、Group、Props、Context、BEM 样式及图标/实例外观/原生属性补齐;15 对主体/公开类型/测试/样式门禁及既有组核心门禁通过。本库 Form/安装接线、契约登记的 PC/触控密度默认值独立保留;无共享运行时。逐组件行为/SSR/主题通过,真实浏览器视觉仍单列待验收。 |
| rate | rate | 已同源 | 2026-10-09 已完成主体、Props/公开类型、交互、样式规则及15公共Token后缀独立复制同源;错误/禁用/焦点使用系统角色,私有映射在组件根支持局部覆盖。金色/主色与几何默认差异纳入主题契约,仅Form/安装/图标接线本地维护;源码/类型/实际Less门禁与两端交互测试通过。 第二十五批:修复门禁失效起始标记,必须比较真实 rate-core 主体;Props/主体/交互测试重新验证,图标与 Form 本地接线保留。 |
| slider | slider | 已同源 | 2026-10-09 完成主体、Props/公开类型、值归一化、Pointer/键盘、范围/小数步长、marks/ticks/InputNumber、标签/颜色与样式Token独立复制同源;showTooltip统一false/true/always并移除labelVisible。Form/provider/安装接线留本库;成对交互测试、3组Demo与实际Less编译门禁覆盖。 |
| input | input | 已同源 | 2026-10-09 完成主体复核:Input/InputGroup/Password、Props/公开类型、值模型、原生属性和样式规则独立复制同源;输入及清空管线、受控拒绝、IME、表单/键盘回归已补齐,24对Input/Textarea门禁防漂移。保留本库Form/安装接线与FieldDecorator已登记的PC hover/移动常驻清空表现。 |
| textarea | textarea | 已同源 | 2026-10-09 以完善后的Cedar SFC独立复制至Maple;hint/line/实例颜色、原生attrs、清空/计数、IME/长度、自动高度及KeepAlive清理一致,公开Emits/Slots/Expose与Demo补齐。resize默认Cedar开启/Maple关闭及尺寸密度登记为平台差异;没有共享运行时。 |
| verification-code | verification-code | 已同源 | 2026-10-09:验证码主体、Props/Emits/Slots/Expose、四项Token、样式与四组Demo独立复制同源,11对保留类型声明的门禁通过。Cedar22/Maple27专项测试通过,覆盖受控拒绝、IME/Unicode、短信填入、粘贴、单格替换、Form单通知及KeepAlive取消;仅各库Form/安装接线保留独立。未宣称浏览器视觉全验。 |
| search | search | 逻辑已同源 | 2026-10-09:Search控制器、Props/Emits/Slots/Expose、历史内容及配对Demo独立复制,9对源码和25项公共Token门禁通过;Cedar30/Maple36测试通过。不可变model、受控拒绝、Form单通知、弹窗内外取消/焦点、全局语言、inputAttrs/error及实际variant效果已补齐;仅保留PC InputGroup/移动条、Drawer/Popup、本地接线和登记的默认密度/historyPopup/shape差异。 |
| infinite-scroll | infinite-scroll | 已同源 | 2026-09-21 完成独立源码复制:主体 SFC、Props 与关键样式纳入同源门禁,统一分页状态机、CSS length 阈值、滚动容器、可见性恢复、KeepAlive 与清理行为。两端 locale.ts 仅桥接各自的全局语言系统,不持有独立语言状态,也不共享运行时。 |
| list | list | 已同源 | 2026-10-09 完成List/ListItem SFC、Props/类型、样式规则及34公共Token后缀独立复制同源;Maple补maxHeight/scrollbar/virtualListProps/scrollIntoView。两端VirtualList修复align/数据缩小/threshold。render-adapter仅接本库Scrollbar与ConfigProvider空态,默认密度登记为平台差异;9对主体/API/样式/测试/Demo门禁覆盖。 |
| image | image | 已同源 | 2026-09-15 完成独立源码复制;Image/Preview/PreviewGroup 主体 SFC、加载回退、预览控制器与命令式 API 纳入一致性检查。去掉 platform.config;懒加载用原生 loading、图标/默认加载器/默认值由各库 platform 与 setPropsDefaults 适配。 |
| overlay | overlay | 已同源 | 2026-09-21 完成独立同源:主体 SFC、Props 和结构样式已复制并纳入门禁;统一 popup-layer/z-index、容器滚动锁、真实 Teleport Document、背景 pointer 序列、最上层 ESC、受控状态、KeepAlive 和过渡生命周期。 |
| dialog | dialog | 逻辑已同源 | 2026-09-21 完成逻辑同源。两端 Dialog 直接消费同源 modal-surface,不再嵌套 Popup 或维护端侧弹层状态机;use-dialog、use-dialog-drag、service 三份核心均为独立复制并纳入门禁,统一 beforeClose 竞态、拖拽、Promise/update/close、默认配置、宿主销毁及 app context。PC 与移动端保留各自 DOM、图标和样式。 |
| style-provider | style-provider | 已同源 | 主体、Props、函数注入、安装、默认值设置及配对测试已独立同源;仅前缀与本地导入不同,不共享运行时代码或状态。 |
| select | select | 已同源 | 主体、控制器、选项与搜索/虚拟列表算法、Menu 及语义样式已独立复制并纳入 check:selection-presentations;Cedar 仅 menu,Maple 通过静态扩展文件提供 list/picker 和移动触摸样式。公共 API 以 Cedar 为准;本地 Form/空状态接入独立,无跨库运行时、共享实例或 platform 配置。 第二十五批:公共源码保留严格主体比较,仅规范本地绑定导入的排序;Select/Checkbox BEM 同步原生同源控件,移动 presentation 扩展独立。 |
| cascader | cascader | 已同源 | 主体、控制器、树/路径/搜索/懒加载算法、CascaderPanel、Menu 与语义样式已独立复制;草稿会话由控制器统一持有。Cedar 仅 menu,Maple 的 list/picker 位于独立静态扩展文件;公共源码纳入 check:selection-presentations,保留本地系统接入与移动触摸样式差异,不共享运行时代码。 第二十五批:公共源码、路径算法与样式完成复制收口,移除旧 Checkbox/Radio hover 类名,使用 --状态与 __control;list/picker 仍为本地扩展。 |
| auto-complete | auto-complete | 已同源 | 2026-09-23 主体、Props、类型出口、Menu 样式和配对交互/SSR 测试完成独立同源复制;两端直接消费本地 Input、Trigger、Select 选项算法。统一 shouldOpen/过滤、分组、异步候选、虚拟列表、长度规则、Form 继承及焦点事件,补齐 hint/颜色/键盘提示;无跨库运行时或 platform 配置,AutoComplete 不提供滚轮 presentation。 第二十五批:主体、Props、配对44项交互测试及样式复制收口;绑定导入按本地路径排序,不忽略主体、模板或副作用导入顺序。 |
| date | date | 逻辑已同源 | 2026-09-30:日期族模型/严格解析、Date 禁用回调、包含边界、时分秒分级约束、范围提交、字段与纯面板主体和事件已独立复制;42 对源码/测试门禁覆盖;第十一批对齐 showCurrent、showNowButton 与 exchangeTime,当前动作复用统一校验/确认,删除旧按钮名和 Cedar 全局时间交换覆盖;第十批统一快捷项、视口控制/通知、预览与确认校验,保留独立复制源码。第九批拆清字段/纯面板 API,复制公共面板 Props/事件协议并补齐入口与展示 Options 类型;Cedar 纯面板移除字段/浮层 Prop 泄漏,Maple dayStartOfWeek 改为整数 0–6 并修复范围日历转发,旧 firstDayOfWeek 不保留。两端默认秒精度,format/valueFormat、defaultValue/defaultOpen、type、select/change/confirm/open-change/clear 对齐。桌面日历/Trigger 与移动滚轮/时钟/Popup 保留本地 presentation,Form 与全局多语言各自接入;Maple 多选和 Cedar 周/季度为明确展示能力差异,无共享运行时或 platform 配置。第十二批两端独立复制月份标签函数,补齐 abbreviation(仅日历月份网格),保留标题/星期/滚轮不变;第十三批删除 Cedar 日期级 locale 覆盖,Maple 范围内嵌日历仅接外观白名单,字段空默认不覆盖嵌套外观;修复范围日历误用滚轮默认展示。第十四批时间展示类型/白名单独立复制,Maple 单值/范围日期时间滚轮只接尺寸与外观,calendarClock 明确时钟;Cedar 内嵌时间精度服从日期根。第十五批删除 Cedar 字段无效 pickerProps/范围 datePickerProps,Maple 保留真实插件;旧 Demo 初始时间迁移到日期顶层。第十六批语言/周起始改为本库命名空间内的实例元数据,不覆盖宿主 Dayjs 默认或基础语言;模型字符串固定英文协议,展示/手输走全局界面语言,多实例更新/卸载和跨年周比较已回归。第十七批默认周文本按实例语言/周起始严格反解析并复用禁用/范围提交;季度由当前 Dayjs 原生支持,追加回归。第十八批两端公共所有者统一可编辑条件,单值/范围真实手输测试独立复制;Maple 原生输入与日历按钮/Popup 分离,Enter/blur、IME、拒绝回写、禁用和范围顺序已验证,multiple/函数格式保留面板选择。移动按钮 Token 登记为明确本地扩展;浏览器软键盘/触控验收未做。第十九批补齐 Maple 日期字段视口/快捷项事件转发,单值/范围完整所有者链路及真实日历导航回归;拒绝嵌套受控视口不改选择值,默认快捷项仍走确认。第二十批 Maple 字段嵌套 Options 删除无效 presentation,根字段/纯面板模式保留;两端复制过滤器阻止嵌套选择器,根模式动态切换不改模型,发布类型根正例/嵌套反例验证。 第二十一批补齐 Maple 周起始日动态更新的真实日期列回归(单值/范围及字段),本地格子改为响应式派生,与 Cedar 原有响应式行为一致;切换不提交模型。 第二十二批修复 Maple 日/月/年导航移除 min/max 后遗留禁用状态;十二个实际单值/范围及字段回归验证按端恢复,不改模型。导航禁用属于本地展示,日期候选约束仍使用两库独立同源规则。 |
| date-range | date-range | 逻辑已同源 | 2026-09-30:日期族模型/严格解析、Date 禁用回调、包含边界、时分秒分级约束、范围提交、字段与纯面板主体和事件已独立复制;42 对源码/测试门禁覆盖;第十一批对齐 showCurrent、showNowButton 与 exchangeTime,当前动作复用统一校验/确认,删除旧按钮名和 Cedar 全局时间交换覆盖;第十批统一快捷项、视口控制/通知、预览与确认校验,保留独立复制源码。第九批拆清字段/纯面板 API,复制公共面板 Props/事件协议并补齐入口与展示 Options 类型;Cedar 纯面板移除字段/浮层 Prop 泄漏,Maple dayStartOfWeek 改为整数 0–6 并修复范围日历转发,旧 firstDayOfWeek 不保留。两端默认秒精度,format/valueFormat、defaultValue/defaultOpen、type、select/change/confirm/open-change/clear 对齐。桌面日历/Trigger 与移动滚轮/时钟/Popup 保留本地 presentation,Form 与全局多语言各自接入;Maple 多选和 Cedar 周/季度为明确展示能力差异,无共享运行时或 platform 配置。第十二批两端独立复制月份标签函数,补齐 abbreviation(仅日历月份网格),保留标题/星期/滚轮不变;第十三批删除 Cedar 日期级 locale 覆盖,Maple 范围内嵌日历仅接外观白名单,字段空默认不覆盖嵌套外观;修复范围日历误用滚轮默认展示。第十四批时间展示类型/白名单独立复制,Maple 单值/范围日期时间滚轮只接尺寸与外观,calendarClock 明确时钟;Cedar 内嵌时间精度服从日期根。第十五批删除 Cedar 字段无效 pickerProps/范围 datePickerProps,Maple 保留真实插件;旧 Demo 初始时间迁移到日期顶层。第十六批语言/周起始改为本库命名空间内的实例元数据,不覆盖宿主 Dayjs 默认或基础语言;模型字符串固定英文协议,展示/手输走全局界面语言,多实例更新/卸载和跨年周比较已回归。第十七批默认周文本按实例语言/周起始严格反解析并复用禁用/范围提交;季度由当前 Dayjs 原生支持,追加回归。第十八批两端公共所有者统一可编辑条件,单值/范围真实手输测试独立复制;Maple 原生输入与日历按钮/Popup 分离,Enter/blur、IME、拒绝回写、禁用和范围顺序已验证,multiple/函数格式保留面板选择。移动按钮 Token 登记为明确本地扩展;浏览器软键盘/触控验收未做。第十九批补齐 Maple 日期字段视口/快捷项事件转发,单值/范围完整所有者链路及真实日历导航回归;拒绝嵌套受控视口不改选择值,默认快捷项仍走确认。第二十批 Maple 字段嵌套 Options 删除无效 presentation,根字段/纯面板模式保留;两端复制过滤器阻止嵌套选择器,根模式动态切换不改模型,发布类型根正例/嵌套反例验证。 第二十一批补齐 Maple 周起始日动态更新的真实日期列回归(单值/范围及字段),本地格子改为响应式派生,与 Cedar 原有响应式行为一致;切换不提交模型。 第二十二批修复 Maple 日/月/年导航移除 min/max 后遗留禁用状态;十二个实际单值/范围及字段回归验证按端恢复,不改模型。导航禁用属于本地展示,日期候选约束仍使用两库独立同源规则。 |
| time | time | 逻辑已同源 | 2026-09-23:Time/TimeRange 入口、TimeField 主体及字段状态协议已从 Cedar 独立复制到 Maple,值、草稿、确认/取消、清除、焦点和通知控制器同源。两库各自维护源码及实例,无共享运行时或 platform 配置;桌面 Trigger/列表与移动 Popup/滚轮/时钟,以及本地 Form、全局多语言接入和候选初始化保留在独立 presentation 文件。34 对时间源码/测试门禁覆盖;外观和纯时间面板仍单独验收。 2026-10-12:两端 inputEditable 已消费同源 PickerField/时间解析与提交链;Cedar 默认 true、Maple 默认 false。移动端可手输,时钟按钮/ArrowDown 打开原有面板,未增加共享运行时。 |
| time-range | time-range | 逻辑已同源 | 2026-09-23:Time/TimeRange 入口、TimeField 主体及字段状态协议已从 Cedar 独立复制到 Maple,值、草稿、确认/取消、清除、焦点和通知控制器同源。两库各自维护源码及实例,无共享运行时或 platform 配置;桌面 Trigger/列表与移动 Popup/滚轮/时钟,以及本地 Form、全局多语言接入和候选初始化保留在独立 presentation 文件。34 对时间源码/测试门禁覆盖;外观和纯时间面板仍单独验收。 2026-10-12:两端 inputEditable 已消费同源 PickerField/时间解析与提交链;Cedar 默认 true、Maple 默认 false。移动端可手输,时钟按钮/ArrowDown 打开原有面板,未增加共享运行时。 |
| date-picker | date-picker | 逻辑已同源 | 2026-09-30:日期族模型/严格解析、Date 禁用回调、包含边界、时分秒分级约束、范围提交、字段与纯面板主体和事件已独立复制;42 对源码/测试门禁覆盖;第十一批对齐 showCurrent、showNowButton 与 exchangeTime,当前动作复用统一校验/确认,删除旧按钮名和 Cedar 全局时间交换覆盖;第十批统一快捷项、视口控制/通知、预览与确认校验,保留独立复制源码。第九批拆清字段/纯面板 API,复制公共面板 Props/事件协议并补齐入口与展示 Options 类型;Cedar 纯面板移除字段/浮层 Prop 泄漏,Maple dayStartOfWeek 改为整数 0–6 并修复范围日历转发,旧 firstDayOfWeek 不保留。两端默认秒精度,format/valueFormat、defaultValue/defaultOpen、type、select/change/confirm/open-change/clear 对齐。桌面日历/Trigger 与移动滚轮/时钟/Popup 保留本地 presentation,Form 与全局多语言各自接入;Maple 多选和 Cedar 周/季度为明确展示能力差异,无共享运行时或 platform 配置。第十二批两端独立复制月份标签函数,补齐 abbreviation(仅日历月份网格),保留标题/星期/滚轮不变;第十三批删除 Cedar 日期级 locale 覆盖,Maple 范围内嵌日历仅接外观白名单,字段空默认不覆盖嵌套外观;修复范围日历误用滚轮默认展示。第十四批时间展示类型/白名单独立复制,Maple 单值/范围日期时间滚轮只接尺寸与外观,calendarClock 明确时钟;Cedar 内嵌时间精度服从日期根。第十五批删除 Cedar 字段无效 pickerProps/范围 datePickerProps,Maple 保留真实插件;旧 Demo 初始时间迁移到日期顶层。第十六批语言/周起始改为本库命名空间内的实例元数据,不覆盖宿主 Dayjs 默认或基础语言;模型字符串固定英文协议,展示/手输走全局界面语言,多实例更新/卸载和跨年周比较已回归。第十七批默认周文本按实例语言/周起始严格反解析并复用禁用/范围提交;季度由当前 Dayjs 原生支持,追加回归。第十八批两端公共所有者统一可编辑条件,单值/范围真实手输测试独立复制;Maple 原生输入与日历按钮/Popup 分离,Enter/blur、IME、拒绝回写、禁用和范围顺序已验证,multiple/函数格式保留面板选择。移动按钮 Token 登记为明确本地扩展;浏览器软键盘/触控验收未做。第十九批补齐 Maple 日期字段视口/快捷项事件转发,单值/范围完整所有者链路及真实日历导航回归;拒绝嵌套受控视口不改选择值,默认快捷项仍走确认。纯面板保留面板 API,不新增字段手输或浮层状态;外观仍按各端 presentation 单独验收。第二十批 Maple 字段嵌套 Options 删除无效 presentation,根字段/纯面板模式保留;两端复制过滤器阻止嵌套选择器,根模式动态切换不改模型,发布类型根正例/嵌套反例验证。 第二十一批补齐 Maple 周起始日动态更新的真实日期列回归(单值/范围及字段),本地格子改为响应式派生,与 Cedar 原有响应式行为一致;切换不提交模型。 第二十二批修复 Maple 日/月/年导航移除 min/max 后遗留禁用状态;十二个实际单值/范围及字段回归验证按端恢复,不改模型。导航禁用属于本地展示,日期候选约束仍使用两库独立同源规则。 |
| date-range-picker | date-range-picker | 逻辑已同源 | 2026-09-30:日期族模型/严格解析、Date 禁用回调、包含边界、时分秒分级约束、范围提交、字段与纯面板主体和事件已独立复制;42 对源码/测试门禁覆盖;第十一批对齐 showCurrent、showNowButton 与 exchangeTime,当前动作复用统一校验/确认,删除旧按钮名和 Cedar 全局时间交换覆盖;第十批统一快捷项、视口控制/通知、预览与确认校验,保留独立复制源码。第九批拆清字段/纯面板 API,复制公共面板 Props/事件协议并补齐入口与展示 Options 类型;Cedar 纯面板移除字段/浮层 Prop 泄漏,Maple dayStartOfWeek 改为整数 0–6 并修复范围日历转发,旧 firstDayOfWeek 不保留。两端默认秒精度,format/valueFormat、defaultValue/defaultOpen、type、select/change/confirm/open-change/clear 对齐。桌面日历/Trigger 与移动滚轮/时钟/Popup 保留本地 presentation,Form 与全局多语言各自接入;Maple 多选和 Cedar 周/季度为明确展示能力差异,无共享运行时或 platform 配置。第十二批两端独立复制月份标签函数,补齐 abbreviation(仅日历月份网格),保留标题/星期/滚轮不变;第十三批删除 Cedar 日期级 locale 覆盖,Maple 范围内嵌日历仅接外观白名单,字段空默认不覆盖嵌套外观;修复范围日历误用滚轮默认展示。第十四批时间展示类型/白名单独立复制,Maple 单值/范围日期时间滚轮只接尺寸与外观,calendarClock 明确时钟;Cedar 内嵌时间精度服从日期根。第十五批删除 Cedar 字段无效 pickerProps/范围 datePickerProps,Maple 保留真实插件;旧 Demo 初始时间迁移到日期顶层。第十六批语言/周起始改为本库命名空间内的实例元数据,不覆盖宿主 Dayjs 默认或基础语言;模型字符串固定英文协议,展示/手输走全局界面语言,多实例更新/卸载和跨年周比较已回归。第十七批默认周文本按实例语言/周起始严格反解析并复用禁用/范围提交;季度由当前 Dayjs 原生支持,追加回归。第十八批两端公共所有者统一可编辑条件,单值/范围真实手输测试独立复制;Maple 原生输入与日历按钮/Popup 分离,Enter/blur、IME、拒绝回写、禁用和范围顺序已验证,multiple/函数格式保留面板选择。移动按钮 Token 登记为明确本地扩展;浏览器软键盘/触控验收未做。第十九批补齐 Maple 日期字段视口/快捷项事件转发,单值/范围完整所有者链路及真实日历导航回归;拒绝嵌套受控视口不改选择值,默认快捷项仍走确认。纯面板保留面板 API,不新增字段手输或浮层状态;外观仍按各端 presentation 单独验收。第二十批 Maple 字段嵌套 Options 删除无效 presentation,根字段/纯面板模式保留;两端复制过滤器阻止嵌套选择器,根模式动态切换不改模型,发布类型根正例/嵌套反例验证。 第二十一批补齐 Maple 周起始日动态更新的真实日期列回归(单值/范围及字段),本地格子改为响应式派生,与 Cedar 原有响应式行为一致;切换不提交模型。 第二十二批修复 Maple 日/月/年导航移除 min/max 后遗留禁用状态;十二个实际单值/范围及字段回归验证按端恢复,不改模型。导航禁用属于本地展示,日期候选约束仍使用两库独立同源规则。 |
| time-picker | time-picker | 逻辑已同源 | 2026-09-30:纯时间面板的值、草稿、校验和选择/确认事务已独立复制;两端范围入口均直接持有范围状态,Cedar 不再经单值面板转调。类型化事件声明和范围事件编排同源,脚本入口收口为 script setup。列表与滚轮/时钟内容及手势留在独立 presentation 文件,两库各有源码及实例,无共享运行时。33 对源码/测试与 4 个面板展示边界门禁覆盖;端侧外观保持差异,浏览器视觉验收另行进行。 |
| time-range-picker | time-range-picker | 逻辑已同源 | 2026-09-30:纯时间面板的值、草稿、校验和选择/确认事务已独立复制;两端范围入口均直接持有范围状态,Cedar 不再经单值面板转调。类型化事件声明和范围事件编排同源,脚本入口收口为 script setup。列表与滚轮/时钟内容及手势留在独立 presentation 文件,两库各有源码及实例,无共享运行时。33 对源码/测试与 4 个面板展示边界门禁覆盖;端侧外观保持差异,浏览器视觉验收另行进行。 |
| menu | menu | 逻辑已同源 | 2026-10-09 复核:Props、selection/level/keyboard/options 与公共定位选项独立复制;strategy 响应式传递到所有子菜单,公开定位/子菜单类型补齐。两端保留 Scrollbar/原生列表、hover/click、动画、触控涟漪等视图差异,因此纠正旧“已同源”为“逻辑已同源”,不宣称整个主体一致。移除 platform 聚合层,差异留在 appearance.ts;无共享运行时或旧 API 别名。Menu 与 SplitButton 配对交互回归通过。 |
| popover | popover | 已同源 | 2026-09-20 完成独立同源复制:主体、Props、platform 外观映射、title/body DOM、结构样式及语义契约纳入门禁。双端统一 click、bottom、箭头、10px 间距和关闭缓存默认值,删除 defaultStyle、popoverClass、elevation;通过 Trigger referenceAttrs 关联 aria-controls/expanded。仅前缀、本地导入和主题 token 值不同。 |
| tooltip | tooltip | 已同源 | 2026-09-20 完成独立同源复制:主体、Props、platform 外观映射、结构样式与语义契约纳入门禁。双端统一 hover+focus、top、箭头、10px 间距、关闭卸载、xs/md、status、color/textColor,删除 backgroundColor 和布尔 xs;通过 Trigger referenceAttrs 关联 role=tooltip 与 aria-describedby。仅前缀、本地导入和主题 token 值不同。 |
| trigger | trigger | 已同源 | 2026-09-20 完成独立同源复制:Trigger 主体、最终 Props/types、无依赖定位器、结构样式、token 职责和定位契约测试已纳入 copied-components-check。两端统一十二方位、absolute/fixed、popupOffset、popupTranslate、cover、翻转避让、滚动与尺寸更新;Maple 删除 @popperjs/core、offsetX/offsetY 与 cascadeOptimization。仅 platform.ts 保留各库容器、层级、全局配置及 ResizeObserver 接线,不共享运行时核心或实例。 |
| split-button | split-button | 已同源 | 2026-09-08 完成独立同源复制:主体、21 项 Props、样式依赖入口和契约测试纳入一致性检查;统一异步点击、受控状态、禁用优先级、向下箭头及 open/close/resize。Cedar Menu 补齐浮层类名和屏幕轴偏移适配;两端 Menu 保留独立平台实现,无跨库运行时或实例共享。 |
| form | form | 逻辑已同源 | 2026-10-12:表单字段登记、校验调度、reset/clear 与异步竞态,以及标签/内容栅格 Props、布局继承、自然标签宽度登记/测量和生命周期逻辑均独立复制;12 对源码/行为测试门禁覆盖。Form/Item 支持响应式 Col、固定标签 flex、动态自动宽度和局部覆盖。Cedar 默认横向、Maple 默认纵向;本地规则引擎、表单注入、错误滚动与 FormDetails/标签外观保留独立展示,没有共享运行时、实例或 platform 配置。 补齐显式 Form.id 字段容器前缀与 Cedar formItemProps/严格 FormItemProps 入口导出。 Cedar 已移除无效 mergeProps 并补齐 Item.size;第八批补齐 Maple 六项普通装饰 API,FormItem Props 31/31 差集为零。装饰 Props、标签渲染、状态优先规则与配对测试独立复制;显式状态只覆盖展示,真实校验结果不变,自动状态 validating → success/error,清空恢复未校验。规则类型、默认布局与本地消息视图保留差异,不将 Props 名称相同算作全部主体一致。 |
| tabs | tabs | 已同源 | 2026-10-09:Tabs/TabPane/TabsNavs/TabNav/TabsItems/TabItem六件套主体、Props、事件、插槽及TabsNavs.resize已同源;13对源码和40项Token消费门禁、Cedar57/Maple56含InfiniteScroll专项通过。删除platform与无消费者绑定,仅本库配置/安装和四项已登记外观默认值独立,未扩建Maple全局Provider。 |
| carousel | carousel | 已同源 | 2026-10-09:Carousel / CarouselItem 主体、Props、布局、Pointer、受控状态、生命周期、样式与配对测试独立复制;12 对源码及 26 项 token 门禁,Cedar 25 / Maple 26 项测试通过。仅前缀、本地安装、图标及全局 Locale 接入不同。不复制子组件实例;无法连续覆盖的跨页跳转直接定位。 |
| message | message | 逻辑已同源 | 2026-09-21 完成逻辑同源:两端独立复制相同的可调用服务、按容器与位置隔离的队列、剩余时间计时、id 更新、幂等关闭和宿主销毁逻辑,并纳入轻量反馈一致性门禁。API 已统一为 default/info/success/warning/danger/loading、top/center/bottom、action、pauseOnHover、resetOnUpdate 与完整生命周期;删除 normal、模态阻断及端侧外观 Props。PC 紧凑提示与移动卡片样式各自维护。 第二十五批:默认 variant 两端统一 neutral,组件/函数/默认重置一致;补齐独立复制的计时器暂停/恢复/更新/卸载和默认变体回归,不保留旧默认兼容。 |
| upload | upload | 逻辑已同源 | 2026-10-09:Upload 主体、Props、读取/队列/请求/取消/URL 所有权/useUploader 与样式独立复制,20 对源码门禁、Cedar 41 / Maple 68 项测试通过;Form 与全局 Locale 本地接入,视频预览保留 Cedar Drawer / Maple Popup。中英 Demo 各 21 项,能力补齐;无共享运行时或兼容旧 API。 |
| table | table | 独立 | Cedar 42 个 Props(列、选择、树、分页、虚拟滚动等),Maple 仅 3 个容器 Props;语义层级不同,不建议对齐整个 Table。 |
| drawer | popup | 逻辑已同源 | 2026-09-21 完成逻辑同源改造。两端各自保存字节级一致的 modal-surface 控制器,并由同源门禁约束;已统一 open/defaultOpen、unmountOnClose、遮罩 pointer 序列、层级、焦点、容器锁滚动、ESC、显式路由关闭和生命周期。Cedar Drawer 保留标题/页脚/宽高及 beforeClose,Maple Popup 保留 center、安全区和移动转场。 |
| row | row | 已同源 | Grid/GridItem/Row/Col 主体、Props、响应式逻辑、样式和契约测试已按包内复制统一;Row/Col 有独立源码、安装和样式入口,两端 demo 配对。 入口职责已分离:Grid 仅包含 Grid.Item;Row/Col 独立入口、注册、文档与 Demo,不再通过 Grid 转导出。 |
| col | col | 已同源 | Grid/GridItem/Row/Col 主体、Props、响应式逻辑、样式和契约测试已按包内复制统一;Row/Col 有独立源码、安装和样式入口,两端 demo 配对。 入口职责已分离:Grid 仅包含 Grid.Item;Row/Col 独立入口、注册、文档与 Demo,不再通过 Grid 转导出。 |
| paper | paper | 已同源 | Cedar 新增 Paper;两端底层表面主体、Props、样式、token 和契约测试独立复制并验证。bordered 与 elevation 独立,无 variant、无默认 padding;保留尺寸、圆角与可选水波,不共享核心或实例。 |
| ripple | ripple | 已同源 | 第二十五批补录指令:主体、动画、键盘、禁用/卸载清理规则独立复制;两端真实样式入口编译与生命周期测试验证,Token 默认值和包/命名空间接线本地维护,无共享运行时。 |
## 后续维护与实施
1. 以已完成组件的包内独立复制和源码一致性检查为模板;差异按职责拆分到本库文件,不引入共享运行时或 platform 配置层。
2. 原待同源 11 组和 Link / Paper 已完成;后续按待适配、逻辑待同源分类逐项推进,不因本批完成而自动升级其他候选。
3. 每个组件先固定 Props 类型/默认值、事件载荷和顺序、Slots 参数、Expose,以及受控/非受控语义;子组件必须一并验收。
4. 配对测试各自保存在两库并分别运行,覆盖键盘与触控、禁用/只读、SSR、挂载清理和主题。弹层额外覆盖嵌套、焦点恢复及滚动锁。通过后再升级为已同源标记。
## 未配对范围
Cedar 的 Tree / Transfer / Descriptions / Timeline / FilterForm 等,以及 Maple 的 PullRefresh / SwipeCell / IndexBar / NumberKeyboard / Signature 等,本次没有确认可直接同源对齐的对应组件,保留原菜单。Drawer / Popup 是异名候选;Message 不直接等同 NoticeBar 或 Notification。Cedar 日期/时间 picker 在内部子目录,Maple 菜单通过字段文档组织,标记数量因此不同。
## 维护
唯一分类数据:design-ui/audits/component-reuse.json。修改后从工作区运行 node design-ui/bin/component-reuse-sync.mjs,同步两库的文档元数据;--check 检查漂移。复制的是文档元数据,不是组件源码。后续源码变化后应重新运行 Props 审计并复核分级,不能只更新日期。
## Props 差异快照
由 api-contract-inventory.mjs 从两库根入口追踪 TypeScript 符号生成(含子组件)。
仅比较实际公开运行时 Props 的键,不把工具目录当组件,也不据此声称事件、插槽、方法或行为完全相同。
已批准且实施的语义迁移见 api-alignment-plan.md;剩余集合差异是后续能力规划清单,不自动求并集。
Cedar:129 个 Props 导出;Maple:119 个;同名可比较:97 个。
| Props | Cedar / Maple 键数量 | 仅 Cedar | 仅 Maple |
| --- | --- | --- | --- |
| affixProps | 7 / 7 | — | — |
| alertProps | 10 / 10 | — | — |
| autoCompleteProps | 29 / 29 | — | — |
| avatarGroupProps | 9 / 9 | — | — |
| avatarProps | 15 / 15 | — | — |
| backTopProps | 9 / 9 | — | — |
| badgeProps | 16 / 16 | — | — |
| breadcrumbItemProps | 5 / 5 | — | — |
| breadcrumbProps | 3 / 3 | — | — |
| buttonGroupProps | 9 / 9 | — | — |
| buttonProps | 25 / 25 | — | — |
| cardProps | 19 / 19 | — | — |
| carouselItemProps | 0 / 0 | — | — |
| carouselProps | 27 / 27 | — | — |
| cascaderPanelProps | 0 / 0 | — | — |
| cascaderProps | 43 / 45 | — | `pickerProps`, `popupProps` |
| checkboxGroupProps | 11 / 11 | — | — |
| checkboxProps | 14 / 14 | — | — |
| colProps | 10 / 10 | — | — |
| collapseItemProps | 5 / 5 | — | — |
| collapseProps | 9 / 9 | — | — |
| countToProps | 6 / 6 | — | — |
| countdownProps | 3 / 3 | — | — |
| datePickerProps | 24 / 34 | — | `buttonElevation`, `color`, `elevation`, `hint`, `multiple`, `pickerProps`, `presentation`, `range`, `titleColor`, `touchable` |
| dateProps | 32 / 35 | — | `multiple`, `pickerProps`, `presentation` |
| dateRangePickerProps | 24 / 28 | — | `datePickerProps`, `elevation`, `pickerProps`, `presentation` |
| dateRangeProps | 32 / 35 | — | `datePickerProps`, `pickerProps`, `presentation` |
| dialogProps | 45 / 45 | — | — |
| dividerProps | 10 / 10 | — | — |
| menuProps | 26 / 26 | — | — |
| ellipsisProps | 5 / 5 | — | — |
| emptyProps | 6 / 6 | — | — |
| fieldDecoratorProps | 20 / 20 | — | — |
| formItemProps | 31 / 31 | — | — |
| formProps | 16 / 16 | — | — |
| gridItemProps | 3 / 3 | — | — |
| gridProps | 5 / 5 | — | — |
| hoverOverlayProps | 2 / 2 | — | — |
| iconProps | 7 / 7 | — | — |
| imagePreviewGroupProps | 24 / 24 | — | — |
| imagePreviewProps | 22 / 22 | — | — |
| imageProps | 26 / 26 | — | — |
| infiniteScrollProps | 5 / 5 | — | — |
| inputGroupProps | 5 / 5 | — | — |
| inputNumberProps | 19 / 19 | — | — |
| inputPasswordProps | 27 / 27 | — | — |
| inputProps | 24 / 24 | — | — |
| linkProps | 9 / 9 | — | — |
| listProps | 8 / 8 | — | — |
| loadingProps | 7 / 7 | — | — |
| menuOptionProps | 9 / 9 | — | — |
| messageProps | 14 / 14 | — | — |
| optgroupProps | 0 / 0 | — | — |
| optionProps | 0 / 0 | — | — |
| overlayProps | 8 / 8 | — | — |
| pageHeaderProps | 4 / 4 | — | — |
| paginationProps | 23 / 23 | — | — |
| paperProps | 8 / 8 | — | — |
| popoverProps | 45 / 45 | — | — |
| progressGroupProps | 11 / 11 | — | — |
| progressProps | 15 / 15 | — | — |
| radioGroupProps | 12 / 12 | — | — |
| radioProps | 15 / 15 | — | — |
| rateProps | 18 / 18 | — | — |
| resultProps | 5 / 5 | — | — |
| rowProps | 5 / 5 | — | — |
| searchProps | 39 / 39 | — | — |
| selectProps | 45 / 47 | — | `pickerProps`, `popupProps` |
| skeletonLineProps | 4 / 4 | — | — |
| skeletonProps | 12 / 12 | — | — |
| skeletonShapeProps | 2 / 2 | — | — |
| sliderProps | 23 / 23 | — | — |
| spaceProps | 6 / 6 | — | — |
| splitButtonProps | 21 / 21 | — | — |
| statisticProps | 16 / 16 | — | — |
| stepProps | 6 / 6 | — | — |
| stepsProps | 9 / 9 | — | — |
| styleProviderProps | 2 / 2 | — | — |
| switchProps | 17 / 17 | — | — |
| tabItemProps | 2 / 2 | — | — |
| tabNavProps | 4 / 4 | — | — |
| tabPaneProps | 6 / 6 | — | — |
| tableProps | 42 / 3 | `bordered`, `columnResizable`, `columns`, `components`, `data`, `defaultExpandAllRows`, `defaultExpandedKeys`, `defaultSelectedKeys`, `draggable`, `expandable`, `expandedKeys`, `extraColumn`, `filterIconAlignLeft`, `fit`, `height`, `hideExpandButtonOnEmpty`, `hoverable`, `indentSize`, `loadMore`, `loading`, `maxHeight`, `pagePosition`, `pagination`, `rowClass`, `rowKey`, `rowNumber`, `rowSelection`, `scrollbar`, `selectedKeys`, `showEmptyTree`, `showHeader`, `size`, `spanAll`, `spanMethod`, `stickyHeader`, `stickyPagination`, `stripe`, `summary`, `summarySpanMethod`, `summaryText`, `tableLayout`, `virtualListProps` | `elevation`, `fullWidth`, `scrollerHeight` |
| tabsItemsProps | 0 / 0 | — | — |
| tabsNavsProps | 0 / 0 | — | — |
| tabsProps | 25 / 25 | — | — |
| tagProps | 14 / 14 | — | — |
| textareaProps | 26 / 26 | — | — |
| timePickerProps | 16 / 20 | `showNextDay`, `type` | `color`, `elevation`, `hint`, `pickerProps`, `presentation`, `titleColor` |
| timeProps | 30 / 32 | — | `pickerProps`, `presentation` |
| timeRangePickerProps | 15 / 19 | — | `elevation`, `pickerProps`, `presentation`, `timePickerProps` |
| timeRangeProps | 32 / 35 | — | `pickerProps`, `presentation`, `timePickerProps` |
| tooltipProps | 48 / 48 | — | — |
| triggerProps | 43 / 43 | — | — |
| uploadProps | 40 / 40 | — | — |
| verificationCodeProps | 22 / 22 | — | — |
| watermarkProps | 15 / 15 | — | — |
## 仅 Cedar 根入口存在的 Props 导出
`anchorProps`, `calendarProps`, `colorPickerProps`, `colorProps`, `configProviderProps`, `descriptionsItemProps`, `descriptionsProps`, `drawerProps`, `filterFormProps`, `inputTagProps`, `layoutProps`, `mapProps`, `mentionProps`, `navMenuItemProps`, `navMenuProps`, `notificationProps`, `overflowListProps`, `peopleSelectProps`, `popconfirmProps`, `resizeBoxProps`, `schedulerProps`, `scrollbarProps`, `segmentedProps`, `splitProps`, `timelineProps`, `transferProps`, `treeProps`, `treeSelectProps`, `typographyParagraphProps`, `typographyProps`, `typographyTextProps`, `typographyTitleProps`
## 仅 Maple 根入口存在的 Props 导出
`actionSheetProps`, `cellProps`, `codeProps`, `counterProps`, `dragProps`, `fabProps`, `floatingPanelProps`, `formDetailsProps`, `highlighterProviderProps`, `indexAnchorProps`, `indexBarProps`, `loadingBarProps`, `localeProviderProps`, `noticeBarProps`, `numberKeyboardProps`, `pickerProps`, `popupProps`, `pullRefreshProps`, `signatureProps`, `swipeCellProps`, `tabBarItemProps`, `tabBarProps`
---
Document: llms/zh-CN/guide/controlled-uncontrolled.md
# 受控、非受控与清空值:从操作结果理解
本文面向第一次接触“受控”的使用者。先看 Input 的具体操作,再看 `v-model`,最后理解 `emptyValue`。示例描述当前工作区实现;尚未实施的统一方案单独放在末尾。
代码中的组件已按“快速开始”完成注册及样式引入。每个完整 Vue 示例可以独立使用。输入类示例显式设置 `edit-mode="direct"`,先排除弹层确认草稿的影响。
## 1. 先分清三个问题
| 问题 | 决定它的东西 | 例子 |
| ------------------------ | ---------------------------------- | ----------------------------------------------------- |
| 当前值最终听谁的? | `modelValue` 与组件的受控判定 | 父级传 A,拒绝 B,最终仍是 A |
| 只想提供初始值吗? | `defaultValue` | 初始杭州,后续用户改成苏州 |
| 点击清空时提出什么新值? | `emptyValue`,模板写 `empty-value` | 清空提出 null、空字符串或其他配置值 |
| 一个值是否显示成“空”? | 组件的数据类型、选项和格式化规则 | Input 的 null 显示空文字;字符串 EMPTY 显示文字 EMPTY |
**受控的“控”是父组件控制最终值。** 不代表组件被禁用、不能聚焦、没有输入事件,也不代表值由服务器保存。父组件就是写下 ` ` 的那个 Vue 组件;这里的 `ref` 或表单对象都属于父级。
`emptyValue` 解决第三个问题,不会自动解决第一个或第四个。它也不是“所有空值的列表”。
## 2. 非受控:只给初始值,之后组件自己保存
```vue
初始值变量:{{ seed }}
最近一次更新请求:{{ JSON.stringify(lastRequest) }}
只修改默认值
重新挂载
```
按下面的顺序操作:
| 操作 | 输入框当前文字 | 父级 seed | 原因 |
| ------------------ | -------------- | --------- | ---------------------------------------- |
| 首次打开 | 杭州 | 杭州 | 组件读取默认值 |
| 全选文字,改成苏州 | 苏州 | 杭州 | 组件保存新值;事件记录不会改 seed |
| 点击“只修改默认值” | 仍为苏州 | 北京 | 默认值不是当前值,后续变化不覆盖用户输入 |
| 点击“重新挂载” | 北京 | 北京 | 新实例重新读取默认值 |
监听 `update:modelValue` 只是知道用户提出了什么。**只监听事件,并没有把记录值传回 modelValue,因此仍是非受控。** 初始化和重挂载不会为了同步父级而自动发出初始值更新。
默认值的变化不会被当前实例当成重置命令。需要程序主动控制当前值时,应使用下面的受控绑定。
## 3. 受控且接受更新:父级保存当前值
```vue
父级保存的值:{{ JSON.stringify(text) }}
父级主动设为 C
```
全选 A 并输入 B 后,父级 `text` 变成 B,输入框随后以父级 B 为准。再点击按钮,父级把 `text` 改成 C,输入框也显示 C。
```text
父级 text=A → 传给输入框
用户输入 B → 输入框发出 update:modelValue(B)
父级接收并执行 text=B → 把 B 再传给输入框 → 最终显示 B
```
这里发生了一次“组件提出值 → 父级回写 → 组件读取父级值”的过程。“回写”指父级给自己的 ref/表单字段赋值,并让新值通过 prop 传回来,不是子组件直接改父级变量。
Vue 的 `v-model` 帮你自动写了这段回写逻辑。[Vue 官方说明](https://vuejs.org/guide/components/v-model.html)
## 4. 受控但拒绝更新:事件发生不等于值已被接受
```vue
父级值:{{ JSON.stringify(text) }}
候选值:{{ JSON.stringify(requested) }};请求次数:{{ count }}
```
全选 A 并尝试输入 B:候选值记录为 B,请求次数增加;父级 `text` 仍为 A,因此最终文字仍以 A 为准。输入时浏览器可能短暂显示编辑中的文字;判断最终状态,应看组件完成本轮更新后的结果。
| 项目 | 操作前 | 提出 B 后 |
| --------------- | ------ | --------- |
| 父级 text | A | A |
| 组件提出的候选 | 尚无 | B |
| 最终模型值/文字 | A | A |
这正是受控的用途:父级可以接受、拒绝或修正候选值。不是所有 `update:modelValue` 都会自动修改模型。
不要把这个示例当成只读的推荐写法。真正希望用户不能编辑时,用组件的 `readonly`/`disabled`;它们分别有聚焦、复制和事件行为的约定。拒绝更新演示的是状态所有权。
## 5. 根据条件决定是否接受
用布尔 Switch 可以更直观地观察“接受”与“拒绝”:
```vue
允许父级接受更新
父级值:{{ enabled }};候选值:{{ JSON.stringify(requested) }}
```
先保持复选框未选中,点击 Switch:收到 true 候选,但父级不赋值,Switch 仍关闭。勾选复选框后再点 Switch:父级保存 true,Switch 才开启。
这个例子使用 Switch 默认的布尔值;配置 `checkedValue`/`uncheckedValue` 后,父级类型和判断应一起调整。后台权限、外部表单状态等也可以参与父级决策;业务需要等待时,显式展示 pending,避免让用户误以为更新已经生效。
## 6. `v-model` 到底省略了什么?
```html
```
等价于下面的模板绑定:
```html
```
在 `
父级值:{{ JSON.stringify(text) }}
请求记录:{{ updates.join(" → ") }}
```
操作顺序与预期:
| 操作 | 本次候选 | 父级 text | 输入框 |
| ----------------------- | -------- | --------- | ------ |
| 初始 | 无 | A | A |
| 点击清空按钮 | null | null | 空白 |
| 再输入 B | B | B | B |
| 全选后按 Backspace 删光 | 空字符串 | 空字符串 | 空白 |
null 与空字符串都能显示空白,但模型里的值不同。**当前 emptyValue 控制清空动作的输出,不会把手动删光自动改成 null。** 如果业务要求所有空文字统一为 null,可在父级处理函数中使用 `text.value = next === '' ? null : next`。
同理,设置 `empty-value="EMPTY"` 的 Input,点击清空后会以字符串 EMPTY 为值;“清空按钮”并不保证最终得到无文字的状态。
## 10. 示例:undefined 清空后为什么改变模式?
这是观察当前行为的示例,不是持续受控表单的推荐配置。
```vue
父级值:{{ describe(quantity) }};候选值:{{ lastRequest }}
按当前判定是否受控:{{ quantity !== undefined }}
```
| 步骤 | 父级 quantity | quantity !== undefined | 谁保存最终值 |
| ------------------------------------ | ------------- | ---------------------- | ---------------------- |
| 初始为 12 | 12 | true | 父级 |
| 组件提出 undefined,父级尚未处理 | 仍为 12 | true | 仍为父级 |
| accept 原样回写 | undefined | false | 组件内部 |
| 后续用户操作,父级继续不提供已定义值 | undefined | false | 组件可以保存后续内部值 |
这里的变化不是由“空白”造成的,而是由 modelValue 的实际值变成 undefined 造成的。之后如果父级又回写一个已定义数值,便重新进入受控。当前各组件切换时内部值的保留策略尚未统一,不应依赖切换模式完成 reset。
同样,不要期待 `v-model` 的类型声明替你做运行时转换。把 ref 写成 `number | null` 并不会自动把收到的 undefined 转成 null。
## 11. 推荐示例:父级归一化,兼容不同空输入路径
```vue
组件候选值:{{ lastRequest }}
父级最终值:{{ JSON.stringify(quantity) }}
按当前判定是否受控:{{ quantity !== undefined }}
```
这个处理同时覆盖清空按钮和其他实际发出 undefined 的输入路径:null → null,undefined → null,0 → 0,其他数值保持不变。父级保存的 quantity 始终不为 undefined,所以最终模型保持受控。
为什么除了 empty-value=null,还需要处理函数?当前 InputNumber 的清空按钮经过 `resolveEmptyValue`,而手动删空并提交的分支可以直接产生 undefined;在 `modelEvent='input'` 时还可能更早提出空值。**emptyValue 不是输入解析器,也不是所有提交路径的归一化器。**
不要写 `next || null`:它会把有效数值 0 也变成 null。`next ?? null` 只合并 null/undefined。该例的字段允许空数值;不要直接把这套归一化套在页码等不允许 null 的模型上。
如果希望父级用 v-model 的形式调用,可以用带 setter 的 computed 做同样转换;只读 computed 没有可回写入口。异步保存也应与本地回写分开:例如先同步更新父级表单,再在提交按钮中保存;如果业务需要先审核再接受,保留旧值并显示 pending,不靠延迟回写掩盖状态。
## 12. 示例:空字符串是有效选项时,使用 null 区分未选择
```vue
父级值:{{ JSON.stringify(selected) }}
```
| 操作 | 父级 selected | 含义 |
| ------------ | ------------- | -------------------- |
| 初始 | null | 尚未选择 |
| 选择“全部” | 空字符串 | 已选择一个合法选项 |
| 选择“仅启用” | enabled | 已选择另一个选项 |
| 点击清空 | null | 恢复未选择,保持受控 |
不要把 `selected === ''` 同时当作“全部”和“未选择”。Element Plus 的文档用类似的空字符串选项说明这个问题,但它另有 `empty-values` 与 `value-on-clear` 两个 API;我们当前没有因此自动获得 `empty-values` 功能。
多选使用数组时,应按该组件的数组值域初始化并选择合适的 emptyValue,不能从“null 可用于某个单选”推出“所有多选都该改成 null”。选择器还会保留不能清除的禁用项;清空配置不覆盖这条业务规则。
## 13. 示例:值和弹层开合是两个独立模型
```vue
允许接受关闭请求
值:{{ JSON.stringify(selected) }};展开:{{ panelOpen }}
父级主动关闭
```
选择值通过 v-model 直接接受,开合通过显式处理函数决定。取消“允许接受关闭请求”后,值仍可更新,但关闭请求会被父级拒绝;点击“父级主动关闭”则直接修改 panelOpen。
这不是一个“整个组件是否受控”的全局开关,而是两个状态分别有自己的所有者。`v-model:open="panelOpen"` 只是 `:open` 加 `@update:open="panelOpen = $event"` 的简写。
本例使用 Select 的直接编辑形态。弹层确认编辑还有 draft:面板中的候选可以与最终 modelValue 不同;确认才提交,取消应丢弃本轮草稿。看到候选文字变化,不足以判断最终模型是否被组件自行修改。
## 14. 表单初始化、重置与后端空值
```vue
重置父级数据
生成提交数据
提交数据:{{ payloadText }}
```
这个例子用普通 reactive 对象说明状态归属,不依赖 Form 的布局或校验 API:父级负责初始化和 reset。Input 的默认值不会把空的 form 字段自动填成有值;需要初始姓名时,应直接初始化 form.name。
生成提交数据时,把 UI 中的 null 转为对象属性的 undefined,JSON 序列化便省略该属性;这一步不改变 form 本身。业务若要求发送 JSON null,就不要做该转换。
**界面模型的空值与后端传输格式可以不同。** 无需为了后端“省略字段”的要求,让受控组件的 modelValue 也变成 undefined。这里的文本空字符串仍原样发送;如果业务也要求省略空字符串,需在序列化层明确处理,不把它与 null 混为一谈。
## 15. 当前还不能一概而论的组件
以下是现状说明,不是目标设计已落地的声明:
| 范围 | 当前差异 |
| ------------------------------------ | ----------------------------------------------------------------------------- |
| Maple ActionSheet.open | 默认 useVModel 本地代理,内部可以先改变状态 |
| Maple NumberKeyboard.open/modelValue | 两个模型均使用默认本地代理 |
| Maple FloatingPanel.modelValue | 停靠高度使用代理;另有手势显示高度 |
| Maple Popup 设置 beforeClose | 会使用内部 visible,并可能拦截父级 open=false,拒绝时反向发 update:open(true) |
| 两端 Collapse | 当前使用 nullish 回退;null 会回退内部状态,全部收起用 [] |
前三项不能用“忽略 update 就一定不会变化”推断。父级传回同一个原值,也不一定触发同步代理的 watch。两端 useVModel 工具逻辑基本一致,但 Input/Switch/Slider 等自己实现状态管理;工具函数名称不代表全组件行为。
InputNumber 可能保留尚未提交的中间文本,Input 还涉及 IME;Popup 退场时可能保留 DOM。应区分最终模型、草稿/原生编辑状态和动画状态。
## 16. 其他文档有哪些写法值得借鉴?
以下是说明方式的参考,不表示这些库的 API、空值或模式切换规则可直接照搬到 Cedar/Maple。所有示例均针对我们的组件重写。
| 参考 | 值得借鉴的说明方式 |
| ----------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ |
| [Reka:Controlled State](https://www.reka-ui.com/docs/guides/controlled-state) | 将显式回写、v-model 简写和 defaultValue 并排展示 |
| [React:Input](https://react.dev/reference/react-dom/components/input#controlling-an-input-with-a-state-variable) | 通过“不回写便恢复原值”的操作结果解释所有权 |
| [Radix:Dialog 异步提交](https://www.radix-ui.com/primitives/docs/components/dialog#close-after-asynchronous-form-submission) | 用保存完成后由父级关闭的业务场景解释受控的价值 |
| [Element Plus:Select 空值](https://element-plus.org/en-US/component/select.html#empty-values) | 区分空值识别与清空输出,展示空字符串作为合法选项 |
| [Naive UI:受控说明](https://www.naiveui.com/zh-CN/docs/controlled-uncontrolled) | 明确写出 undefined 如何影响控制模式 |
React 原生受控文本输入不应传 null/undefined;我们的 Input 接受 null 并显示为空。借鉴操作解释,不能把 React 的空值限制当成所有 Vue 组件库的规则。只有值 prop 的写法也不是一律写错:有意固定状态是合法用途;希望可编辑却忘记回写,才与预期不符。
## 17. 目标设计与现有 emptyValue 的关系
统一方案尚未实施。推荐保持这些边界:最终受控状态由父级决定;默认值只初始化;标准清空值尽量使用已定义的领域空值;草稿、手势、动画不能代替最终值。
**保留 emptyValue 的自定义输出能力,不把所有 () => undefined 一律视为非法。** 它与明确的父级归一化、已有接口和特定业务有配合价值;只是父级原样回传 undefined 时,必须接受当前判定下的非受控后果。
目标会继续单独设计各条空输入路径:清空按钮、键盘删空、面板清空和 Form reset,避免只改按钮而遗漏其他路径。更改已发布组件的默认空值、模式切换或代理行为,需要单独版本迁移,不能只更新文档就当作已经实现。
## 18. 排查时按这个顺序看
1. 确认当前讨论的是哪个状态:modelValue、open,还是 draft。
2. 看父级真正传下来的值;不要只看 ref 的静态类型或输入框是否空白。
3. 记录 update 事件候选,确认父级是否赋值,以及是否做了转换。
4. 若候选为空,区分清空按钮、手动删除、面板确认或 Form reset 路径。
5. 检查 emptyValue 是省略、显式 null、字符串,还是工厂返回 undefined。
6. 最后检查是否属于第 15 节的代理/守卫例外。
源码入口:两端 `packages/*-ui/src/input/use-input-value.ts`、`input-number/use-number-value.ts`、`select/use-select-controller.ts`、empty-value 工具;两端 `packages/*-use/src/useVModel.ts`;Maple 上述三个代理组件及 Popup。本文的预期值表用于说明已核实路径,不等于所有组件、平台与浏览器交互均已验收。
---
Document: llms/zh-CN/guide/design-token-reference.md
# Cedar 组件 CSS 变量参考
本页由组件 Token 声明编译生成,不手工维护表格。在 design-ui 运行 `node bin/token-catalog.mjs --patch` 后应用补丁;`--check` 检查源码与文档是否一致。
与《Design Token 与 CSS 变量分层》配合阅读:这里列出准确名称、声明值与消费证据,不代表所有组件均通过视觉验收。值是声明表达式,不是最终像素;多值保留各自选择器条件,主题对象和行内属性仍可覆盖。foundation/system 的角色见设计规范,不在这里冒充组件 API。
公开变量可在组件实际根节点或弹层真实挂载祖先覆盖;内部变量只用于实现,业务禁止依赖。size / variant / status / loading / disabled 决定何时消费,不能认为一个变量在所有状态都生效。消费属性列表来自编译后的传递引用,只证明可达性,不替代选择器可见性和优先级检查。
## _components/field-presentation
声明来源: `src/_components/field-presentation/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-field-presentation-border` | 内部 | `var(--c-color-border-2)` | 本组件 CSS `border`, `border-bottom`, `border-top` |
| `--c-field-presentation-close-font-size` | 内部 | `24px` | 本组件 CSS `font-size` |
| `--c-field-presentation-close-size` | 内部 | `32px` | 本组件 CSS `height`, `width` |
| `--c-field-presentation-edit-hover-background` | 内部 | `var(--c-color-fill-2)` | 本组件 CSS `background` |
| `--c-field-presentation-edit-size` | 内部 | `28px` | 本组件 CSS `height`, `padding-inline-end`, `width` |
| `--c-field-presentation-editor-action-width` | 内部 | `88px` | 待审查,不应依赖 |
| `--c-field-presentation-editor-edge-gap` | 内部 | `8px` | 本组件 CSS `max-height` |
| `--c-field-presentation-editor-max-height` | 内部 | `calc(100dvh - 2 * var(--c-field-presentation-editor-edge-gap))` | 本组件 CSS `max-height` |
| `--c-field-presentation-editor-padding` | 内部 | `4px` | 本组件 CSS `max-height`, `padding` |
| `--c-field-presentation-gap` | 内部 | `var(--c-sys-space-3)` | 本组件 CSS `gap`, `margin-bottom`, `margin-top`, `padding-bottom`, `padding-top` |
| `--c-field-presentation-max-height` | 内部 | `60vh` | 本组件 CSS `max-height` |
| `--c-field-presentation-min-width` | 内部 | `280px` | 本组件 CSS `min-width` |
| `--c-field-presentation-padding` | 内部 | `var(--c-sys-space-4)` | 本组件 CSS `inset-inline-end`, `max-width`, `padding`, `padding-block`, `padding-inline-end` |
| `--c-field-presentation-radius` | 内部 | `8px` | 本组件 CSS `border-radius` |
| `--c-field-presentation-shadow` | 内部 | `0 8px 28px rgba(0, 0, 0, 0.12)` | 本组件 CSS `box-shadow` |
| `--c-field-presentation-title-font-size` | 内部 | `16px` | 本组件 CSS `font-size` |
| `--c-field-presentation-title-font-weight` | 内部 | `500` | 本组件 CSS `font-weight` |
## _components/picker-field
声明来源: `src/_components/picker-field/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-picker-field-gap` | 公开 | `8px` | 本组件 CSS `gap` |
| `--c-picker-field-input-min-width` | 公开 | `3em` | 本组件 CSS `min-width` |
## _components/selected-options
声明来源: `src/_components/selected-options/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-selected-options-background` | 公开 | `var(--c-sys-color-surface-overlay)` | 本组件 CSS `background` |
| `--c-selected-options-border` | 公开 | `var(--c-color-border-2)` | 本组件 CSS `border-bottom` |
| `--c-selected-options-details-max-height` | 公开 | `50dvh` | 本组件 CSS `max-height` |
| `--c-selected-options-disabled-opacity` | 公开 | `0.5` | 本组件 CSS `opacity` |
| `--c-selected-options-gap` | 公开 | `8px` | 本组件 CSS `gap` |
| `--c-selected-options-padding` | 公开 | `8px 12px` | 本组件 CSS `padding` |
| `--c-selected-options-radius` | 公开 | `4px` | 本组件 CSS `border-radius` |
| `--c-selected-options-remove-size` | 公开 | `24px` | 本组件 CSS `height`, `width` |
| `--c-selected-options-tag-padding` | 公开 | `2px 6px` | 本组件 CSS `padding` |
| `--c-selected-options-tags-max-height` | 公开 | `112px` | 本组件 CSS `max-height` |
| `--c-selection-editor-accent` | 公开 | `var(--c-color-primary)` | 本组件 CSS `color` |
| `--c-selection-editor-background` | 公开 | `var(--c-sys-color-surface-overlay)` | 本组件 CSS `background` |
| `--c-selection-editor-border` | 公开 | `var(--c-color-border-2)` | 本组件 CSS `border-bottom`, `border-right` |
| `--c-selection-editor-check-size` | 公开 | `20px` | 本组件 CSS `height`, `width` |
| `--c-selection-editor-color` | 公开 | `var(--c-color-text-1)` | 本组件 CSS `color` |
| `--c-selection-editor-dialog-height` | 公开 | `min(30dvh, 260px)` | 本组件 CSS `height`, `min-height` |
| `--c-selection-editor-font-size` | 公开 | `14px` | 本组件 CSS `font-size` |
| `--c-selection-editor-gap` | 公开 | `8px` | 本组件 CSS `gap`, `margin-inline-start`, `padding` |
| `--c-selection-editor-height` | 公开 | `min(40dvh, 320px)` | 本组件 CSS `height`, `min-height` |
| `--c-selection-editor-muted-background` | 公开 | `var(--c-color-fill-1)` | 本组件 CSS `background` |
| `--c-selection-editor-muted-color` | 公开 | `var(--c-color-text-3)` | 本组件 CSS `color` |
| `--c-selection-editor-padding` | 公开 | `12px` | 本组件 CSS `margin-block`, `padding` |
| `--c-selection-editor-path-height` | 公开 | `44px` | 本组件 CSS `min-height` |
| `--c-selection-editor-radius` | 公开 | `8px` | 本组件 CSS `border-radius` |
| `--c-selection-editor-row-height` | 公开 | `42px` | 本组件 CSS `min-height` |
| `--c-selection-editor-selected-background` | 公开 | `var(--c-color-primary-light-1)` | 本组件 CSS `background` |
| `--c-selection-editor-touch-font-size` | 公开 | `16px` | 本组件 CSS `font-size` |
| `--c-selection-editor-touch-height` | 公开 | `52px` | 本组件 CSS `min-height` |
| `--c-selection-editor-width` | 公开 | `640px` | 本组件 CSS `width` |
## _components/selection-field
声明来源: `src/_components/selection-field/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-selection-field-gap` | 公开 | `4px` | 本组件 CSS `gap` |
| `--c-selection-field-icon-transition-duration` | 公开 | `0.2s` | 本组件 CSS `transition` |
| `--c-selection-field-input-min-width` | 公开 | `2px` | 本组件 CSS `flex-basis`, `min-width` |
| `--c-selection-field-loading-duration` | 公开 | `1s` | 本组件 CSS `animation` |
| `--c-selection-field-search-min-width` | 公开 | `3em` | 本组件 CSS `flex`, `min-width` |
## alert
声明来源: `src/alert/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-alert-action-margin-left` | 公开 | `var(--c-sys-space-5)` | 本组件 CSS `margin-left` |
| `--c-alert-border-radius` | 公开 | `var(--c-sys-radius-md)` | 本组件 CSS `border-radius` |
| `--c-alert-border-width` | 公开 | `1px` | 本组件 CSS `border` |
| `--c-alert-close-duration` | 公开 | `var(--c-sys-motion-duration-slow)` | 本组件 CSS `transition` |
| `--c-alert-close-margin-left` | 公开 | `var(--c-sys-space-4)` | 本组件 CSS `margin-left` |
| `--c-alert-font-size-content` | 公开 | `var(--c-sys-font-size-md)` | 本组件 CSS `font-size` |
| `--c-alert-font-size-title` | 公开 | `var(--c-sys-font-size-lg)` | 本组件 CSS `font-size` |
| `--c-alert-font-weight-title` | 公开 | `var(--c-sys-font-weight-medium)` | 本组件 CSS `font-weight` |
| `--c-alert-icon-margin-right` | 公开 | `var(--c-sys-space-4)` | 本组件 CSS `margin-right` |
| `--c-alert-icon-size` | 公开 | `16px` | 本组件 CSS `font-size` |
| `--c-alert-line-height` | 公开 | `1.5715` | 本组件 CSS `line-height` |
| `--c-alert-line-height-title` | 公开 | `1.5` | 本组件 CSS `line-height` |
| `--c-alert-outline-danger-border` | 公开 | `var(--c-sys-color-content-danger)` | 本组件 CSS `border-color` |
| `--c-alert-outline-danger-content` | 公开 | `var(--c-sys-color-content-danger)` | 本组件 CSS `color` |
| `--c-alert-outline-danger-icon` | 公开 | `var(--c-sys-color-content-danger)` | 本组件 CSS `color` |
| `--c-alert-outline-danger-title` | 公开 | `var(--c-sys-color-content-danger)` | 本组件 CSS `color` |
| `--c-alert-outline-default-border` | 公开 | `var(--c-sys-color-border-default)` | 本组件 CSS `border-color` |
| `--c-alert-outline-default-content` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-alert-outline-default-icon` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-alert-outline-default-title` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-alert-outline-info-border` | 公开 | `var(--c-sys-color-content-info)` | 本组件 CSS `border-color` |
| `--c-alert-outline-info-content` | 公开 | `var(--c-sys-color-content-info)` | 本组件 CSS `color` |
| `--c-alert-outline-info-icon` | 公开 | `var(--c-sys-color-content-info)` | 本组件 CSS `color` |
| `--c-alert-outline-info-title` | 公开 | `var(--c-sys-color-content-info)` | 本组件 CSS `color` |
| `--c-alert-outline-success-border` | 公开 | `var(--c-sys-color-content-success)` | 本组件 CSS `border-color` |
| `--c-alert-outline-success-content` | 公开 | `var(--c-sys-color-content-success)` | 本组件 CSS `color` |
| `--c-alert-outline-success-icon` | 公开 | `var(--c-sys-color-content-success)` | 本组件 CSS `color` |
| `--c-alert-outline-success-title` | 公开 | `var(--c-sys-color-content-success)` | 本组件 CSS `color` |
| `--c-alert-outline-warning-border` | 公开 | `var(--c-sys-color-content-warning)` | 本组件 CSS `border-color` |
| `--c-alert-outline-warning-content` | 公开 | `var(--c-sys-color-content-warning)` | 本组件 CSS `color` |
| `--c-alert-outline-warning-icon` | 公开 | `var(--c-sys-color-content-warning)` | 本组件 CSS `color` |
| `--c-alert-outline-warning-title` | 公开 | `var(--c-sys-color-content-warning)` | 本组件 CSS `color` |
| `--c-alert-padding-horizontal` | 公开 | `var(--c-sys-space-6)` | 本组件 CSS `padding` |
| `--c-alert-padding-horizontal-with-title` | 公开 | `var(--c-sys-space-6)` | 本组件 CSS `padding` |
| `--c-alert-padding-vertical` | 公开 | `var(--c-sys-space-4)` | 本组件 CSS `padding` |
| `--c-alert-padding-vertical-with-title` | 公开 | `var(--c-sys-space-6)` | 本组件 CSS `padding` |
| `--c-alert-standard-danger-bg` | 公开 | `rgb(var(--c-danger-1))` | 本组件 CSS `background-color` |
| `--c-alert-standard-danger-border` | 公开 | `rgb(var(--c-danger-3))` | 本组件 CSS `border-color` |
| `--c-alert-standard-danger-content` | 公开 | `var(--c-sys-color-content-danger)` | 本组件 CSS `color` |
| `--c-alert-standard-danger-icon` | 公开 | `var(--c-sys-color-content-danger)` | 本组件 CSS `color` |
| `--c-alert-standard-danger-title` | 公开 | `var(--c-sys-color-content-danger)` | 本组件 CSS `color` |
| `--c-alert-standard-default-bg` | 公开 | `var(--c-color-fill-2)` | 本组件 CSS `background-color` |
| `--c-alert-standard-default-border` | 公开 | `var(--c-sys-color-border-default)` | 本组件 CSS `border-color` |
| `--c-alert-standard-default-content` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-alert-standard-default-icon` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-alert-standard-default-title` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-alert-standard-info-bg` | 公开 | `rgb(var(--c-blue-1))` | 本组件 CSS `background-color` |
| `--c-alert-standard-info-border` | 公开 | `rgb(var(--c-blue-3))` | 本组件 CSS `border-color` |
| `--c-alert-standard-info-content` | 公开 | `var(--c-sys-color-content-info)` | 本组件 CSS `color` |
| `--c-alert-standard-info-icon` | 公开 | `var(--c-sys-color-content-info)` | 本组件 CSS `color` |
| `--c-alert-standard-info-title` | 公开 | `var(--c-sys-color-content-info)` | 本组件 CSS `color` |
| `--c-alert-standard-success-bg` | 公开 | `rgb(var(--c-success-1))` | 本组件 CSS `background-color` |
| `--c-alert-standard-success-border` | 公开 | `rgb(var(--c-success-3))` | 本组件 CSS `border-color` |
| `--c-alert-standard-success-content` | 公开 | `var(--c-sys-color-content-success)` | 本组件 CSS `color` |
| `--c-alert-standard-success-icon` | 公开 | `var(--c-sys-color-content-success)` | 本组件 CSS `color` |
| `--c-alert-standard-success-title` | 公开 | `var(--c-sys-color-content-success)` | 本组件 CSS `color` |
| `--c-alert-standard-warning-bg` | 公开 | `rgb(var(--c-warning-1))` | 本组件 CSS `background-color` |
| `--c-alert-standard-warning-border` | 公开 | `rgb(var(--c-warning-3))` | 本组件 CSS `border-color` |
| `--c-alert-standard-warning-content` | 公开 | `var(--c-sys-color-content-warning)` | 本组件 CSS `color` |
| `--c-alert-standard-warning-icon` | 公开 | `var(--c-sys-color-content-warning)` | 本组件 CSS `color` |
| `--c-alert-standard-warning-title` | 公开 | `var(--c-sys-color-content-warning)` | 本组件 CSS `color` |
| `--c-alert-title-margin-bottom` | 公开 | `var(--c-sys-space-2)` | 本组件 CSS `margin-bottom` |
| `--c-alert-tonal-danger-bg` | 公开 | `rgb(var(--c-danger-1))` | 本组件 CSS `background-color` |
| `--c-alert-tonal-danger-content` | 公开 | `var(--c-sys-color-content-danger)` | 本组件 CSS `color` |
| `--c-alert-tonal-danger-icon` | 公开 | `var(--c-sys-color-content-danger)` | 本组件 CSS `color` |
| `--c-alert-tonal-danger-title` | 公开 | `var(--c-sys-color-content-danger)` | 本组件 CSS `color` |
| `--c-alert-tonal-default-bg` | 公开 | `var(--c-color-fill-2)` | 本组件 CSS `background-color` |
| `--c-alert-tonal-default-content` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-alert-tonal-default-icon` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-alert-tonal-default-title` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-alert-tonal-info-bg` | 公开 | `rgb(var(--c-blue-1))` | 本组件 CSS `background-color` |
| `--c-alert-tonal-info-content` | 公开 | `var(--c-sys-color-content-info)` | 本组件 CSS `color` |
| `--c-alert-tonal-info-icon` | 公开 | `var(--c-sys-color-content-info)` | 本组件 CSS `color` |
| `--c-alert-tonal-info-title` | 公开 | `var(--c-sys-color-content-info)` | 本组件 CSS `color` |
| `--c-alert-tonal-success-bg` | 公开 | `rgb(var(--c-success-1))` | 本组件 CSS `background-color` |
| `--c-alert-tonal-success-content` | 公开 | `var(--c-sys-color-content-success)` | 本组件 CSS `color` |
| `--c-alert-tonal-success-icon` | 公开 | `var(--c-sys-color-content-success)` | 本组件 CSS `color` |
| `--c-alert-tonal-success-title` | 公开 | `var(--c-sys-color-content-success)` | 本组件 CSS `color` |
| `--c-alert-tonal-warning-bg` | 公开 | `rgb(var(--c-warning-1))` | 本组件 CSS `background-color` |
| `--c-alert-tonal-warning-content` | 公开 | `var(--c-sys-color-content-warning)` | 本组件 CSS `color` |
| `--c-alert-tonal-warning-icon` | 公开 | `var(--c-sys-color-content-warning)` | 本组件 CSS `color` |
| `--c-alert-tonal-warning-title` | 公开 | `var(--c-sys-color-content-warning)` | 本组件 CSS `color` |
## anchor
声明来源: `src/anchor/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-anchor-border-radius-title-hover` | 公开 | `var(--c-border-radius-sm)` | 本组件 CSS `border-radius` |
| `--c-anchor-color-bg-line` | 公开 | `var(--c-color-fill-3)` | 本组件 CSS `background-color` |
| `--c-anchor-color-bg-line-active` | 公开 | `rgb(var(--c-primary-6))` | 本组件 CSS `background-color` |
| `--c-anchor-color-bg-title-hover` | 公开 | `var(--c-color-fill-2)` | 本组件 CSS `background-color` |
| `--c-anchor-color-title` | 公开 | `var(--c-color-text-2)` | 本组件 CSS `color` |
| `--c-anchor-color-title-active` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `color` |
| `--c-anchor-color-title-hover` | 公开 | `rgb(var(--c-primary-5))` | 本组件 CSS `color` |
| `--c-anchor-font-size-title` | 公开 | `14px` | 本组件 CSS `font-size` |
| `--c-anchor-font-weight-title-active` | 公开 | `var(--c-font-weight-500)` | 本组件 CSS `font-weight` |
| `--c-anchor-font-weight-title-hover` | 公开 | `var(--c-font-weight-500)` | 本组件 CSS `font-weight` |
| `--c-anchor-line-slider-height` | 公开 | `12px` | 本组件 CSS `height` |
| `--c-anchor-line-width` | 公开 | `2px` | 本组件 CSS `left`, `width` |
| `--c-anchor-sub-item--inset` | 公开 | `-6px` | 本组件 CSS `margin-left` |
| `--c-anchor-title-margin-bottom` | 公开 | `var(--c-spacing-1)` | 本组件 CSS `margin-bottom` |
| `--c-anchor-title-padding-x` | 公开 | `16px` | 本组件 CSS `padding-left` |
| `--c-anchor-title-padding-y` | 公开 | `4px` | 本组件 CSS `padding` |
## auto-complete
声明来源: `src/auto-complete/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-auto-complete-option-bg-default` | 公开 | `var(--c-select-popup-option-bg)` | 本组件 CSS `background-color` |
| `--c-auto-complete-option-bg-disabled` | 公开 | `var(--c-select-popup-option-bg-disabled)` | 本组件 CSS `background-color` |
| `--c-auto-complete-option-bg-hover` | 公开 | `var(--c-select-popup-option-bg-hover)` | 本组件 CSS `background-color` |
| `--c-auto-complete-option-bg-selected` | 公开 | `var(--c-select-popup-option-bg-selected)` | 本组件 CSS `background-color` |
| `--c-auto-complete-option-font-weight-selected` | 公开 | `var(--c-select-popup-option-font-weight-selected)` | 本组件 CSS `font-weight` |
| `--c-auto-complete-option-height` | 公开 | `var(--c-select-popup-option-height)` | 本组件 CSS `line-height` |
| `--c-auto-complete-option-padding-horizontal` | 公开 | `var(--c-select-popup-option-padding-horizontal)` | 本组件 CSS `padding-inline` |
| `--c-auto-complete-option-text-color-default` | 公开 | `var(--c-select-popup-option-text-color)` | 本组件 CSS `color` |
| `--c-auto-complete-option-text-color-disabled` | 公开 | `var(--c-select-popup-option-text-color-disabled)` | 本组件 CSS `color` |
| `--c-auto-complete-option-text-color-hover` | 公开 | `var(--c-select-popup-option-text-color-hover)` | 本组件 CSS `color` |
| `--c-auto-complete-option-text-color-selected` | 公开 | `var(--c-select-popup-option-text-color-selected)` | 本组件 CSS `color` |
| `--c-auto-complete-popup-bg` | 公开 | `var(--c-select-popup-bg)` | 本组件 CSS `background-color` |
| `--c-auto-complete-popup-border-color` | 公开 | `var(--c-select-popup-border-color)` | 本组件 CSS `border-color` |
| `--c-auto-complete-popup-border-radius` | 公开 | `var(--c-select-popup-border-radius)` | 本组件 CSS `border-radius` |
| `--c-auto-complete-popup-box-shadow` | 公开 | `var(--c-select-popup-box-shadow)` | 本组件 CSS `box-shadow` |
| `--c-auto-complete-popup-font-size` | 公开 | `var(--c-select-popup-font-size)` | 本组件 CSS `font-size` |
| `--c-auto-complete-popup-max-height` | 公开 | `var(--c-select-popup-max-height)` | 本组件 CSS `max-height` |
| `--c-auto-complete-popup-padding-vertical` | 公开 | `var(--c-select-popup-padding-vertical)` | 本组件 CSS `padding-block` |
## avatar
声明来源: `src/avatar/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-avatar-bg` | 公开 | `var(--c-color-fill-4)` | 本组件 CSS `background-color` |
| `--c-avatar-border-color` | 公开 | `var(--c-sys-color-surface-default)` | 本组件 CSS `border` |
| `--c-avatar-border-width` | 公开 | `2px` | 本组件 CSS `border` |
| `--c-avatar-circle-border-radius` | 公开 | `50%` | 本组件 CSS `border-radius` |
| `--c-avatar-font-size-max-count` | 公开 | `20px` | 本组件 CSS `font-size` |
| `--c-avatar-font-size-text` | 公开 | `20px` | 本组件 CSS `font-size` |
| `--c-avatar-font-weight-text` | 公开 | `500` | 本组件 CSS `font-weight` |
| `--c-avatar-group-item-border` | 公开 | `var(--c-sys-color-surface-default)` | 本组件 CSS `border` |
| `--c-avatar-group-item-border-width` | 公开 | `2px` | 本组件 CSS `border` |
| `--c-avatar-group-offset` | 公开 | `-10px` | 本组件 CSS `margin-block-start`, `margin-inline-start` |
| `--c-avatar-group-popover-item-spacing` | 公开 | `8px` | 本组件 CSS `gap` |
| `--c-avatar-hover-transform` | 公开 | `scale(1.1)` | 本组件 CSS `transform` |
| `--c-avatar-max-count-text-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-avatar-motion-duration` | 公开 | `0.2s` | 本组件 CSS `transition` |
| `--c-avatar-size-default` | 公开 | `40px` | 本组件 CSS `height`, `width` |
| `--c-avatar-size-trigger-button` | 公开 | `20px` | 本组件 CSS `height`, `width` |
| `--c-avatar-size-trigger-icon` | 公开 | `12px` | 本组件 CSS `font-size` |
| `--c-avatar-spacing-trigger-button-bottom` | 公开 | `4px` | 本组件 CSS `bottom` |
| `--c-avatar-spacing-trigger-button-right` | 公开 | `4px` | 本组件 CSS `inset-inline-end` |
| `--c-avatar-square-border-radius` | 公开 | `4px` | 本组件 CSS `border-radius` |
| `--c-avatar-text-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-avatar-text-padding-inline` | 公开 | `4px` | 本组件 CSS `padding-inline` |
| `--c-avatar-trigger-button-bg` | 公开 | `var(--c-color-fill-2)` | 本组件 CSS `background-color` |
| `--c-avatar-trigger-button-bg-hover` | 公开 | `var(--c-color-fill-3)` | 本组件 CSS `background-color` |
| `--c-avatar-trigger-button-border-radius` | 公开 | `50%` | 本组件 CSS `border-radius` |
| `--c-avatar-trigger-icon-button` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-avatar-trigger-overlay-bg` | 公开 | `color-mix(in srgb, var(--c-color-black) 60%, transparent)` | 本组件 CSS `background-color` |
| `--c-avatar-trigger-overlay-font-size` | 公开 | `16px` | 本组件 CSS `font-size` |
| `--c-avatar-trigger-overlay-icon` | 公开 | `var(--c-sys-color-content-on-dark)` | 本组件 CSS `color` |
| `--c-avatar-z-index-overlay` | 公开 | `0` | 本组件 CSS `z-index` |
| `--c-avatar-z-index-overlay-hover` | 公开 | `2` | 本组件 CSS `z-index` |
| `--c-avatar-z-index-trigger` | 公开 | `1` | 本组件 CSS `z-index` |
## back-top
声明来源: `src/back-top/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-back-top-background` | 公开 | `var(--c-sys-color-surface-raised)` | 本组件 CSS `background` |
| `--c-back-top-bottom` | 公开 | `40px` | 本组件 CSS `bottom` |
| `--c-back-top-button-border-radius` | 公开 | `50%` | 本组件 CSS `border-radius` |
| `--c-back-top-button-size` | 公开 | `var(--c-sys-control-touch-target)` | 本组件 CSS `height`, `width` |
| `--c-back-top-focus-color` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `outline` |
| `--c-back-top-focus-offset` | 公开 | `2px` | 本组件 CSS `outline-offset` |
| `--c-back-top-focus-width` | 公开 | `2px` | 本组件 CSS `outline` |
| `--c-back-top-font-size` | 公开 | `var(--c-sys-font-size-md)` | 本组件 CSS `font-size` |
| `--c-back-top-hover-background` | 公开 | `var(--c-sys-color-state-hover)` | 本组件 CSS `background` |
| `--c-back-top-icon-size` | 公开 | `20px` | 本组件 CSS `height`, `width` |
| `--c-back-top-right` | 公开 | `40px` | 本组件 CSS `right` |
| `--c-back-top-text-color` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `color` |
| `--c-back-top-z-index` | 公开 | `var(--c-z-index-local-sticky)` | 本组件 CSS `z-index` |
## badge
声明来源: `src/badge/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-badge-bg-color` | 公开 | `rgb(var(--c-danger-7))` `rgb(var(--c-danger-4))` (`:root[cedar-theme="dark"]`) | 本组件 CSS `background-color` |
| `--c-badge-border-color` | 公开 | `var(--c-sys-color-surface-default)` | 本组件 CSS `background-color`, `box-shadow` |
| `--c-badge-description-size-lg-font-size` | 公开 | `var(--c-sys-font-size-lg)` | 本组件 CSS `font-size` |
| `--c-badge-description-size-md-font-size` | 公开 | `var(--c-sys-font-size-md)` | 本组件 CSS `font-size` |
| `--c-badge-description-size-sm-font-size` | 公开 | `var(--c-sys-font-size-xs)` | 本组件 CSS `font-size` |
| `--c-badge-description-size-xl-font-size` | 公开 | `var(--c-sys-font-size-xl)` | 本组件 CSS `font-size` |
| `--c-badge-description-size-xs-font-size` | 公开 | `var(--c-sys-font-size-xs)` | 本组件 CSS `font-size` |
| `--c-badge-description-text-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-badge-font-weight` | 公开 | `var(--c-sys-font-weight-medium)` | 本组件 CSS `font-weight` |
| `--c-badge-offset` | 公开 | `2px` | 本组件 CSS `bottom`, `left`, `right`, `top` |
| `--c-badge-ring-width` | 公开 | `2px` | 本组件 CSS `box-shadow`, `line-height` |
| `--c-badge-size-lg-border-radius` | 公开 | `28px` | 本组件 CSS `border-radius` |
| `--c-badge-size-lg-dot-height` | 公开 | `7px` | 本组件 CSS `height` |
| `--c-badge-size-lg-dot-width` | 公开 | `7px` | 本组件 CSS `width` |
| `--c-badge-size-lg-font-size` | 公开 | `var(--c-sys-font-size-md)` | 本组件 CSS `font-size` |
| `--c-badge-size-lg-height` | 公开 | `28px` | 本组件 CSS `line-height`, `min-width` |
| `--c-badge-size-lg-padding` | 公开 | `0 var(--c-sys-space-4)` | 本组件 CSS `padding` |
| `--c-badge-size-lg-scale` | 公开 | `1` | 本组件 CSS `transform` |
| `--c-badge-size-lg-space` | 公开 | `var(--c-sys-space-3)` | 本组件 CSS `margin-inline` |
| `--c-badge-size-md-border-radius` | 公开 | `24px` | 本组件 CSS `border-radius` |
| `--c-badge-size-md-dot-height` | 公开 | `6px` | 本组件 CSS `height` |
| `--c-badge-size-md-dot-width` | 公开 | `6px` | 本组件 CSS `width` |
| `--c-badge-size-md-font-size` | 公开 | `var(--c-sys-font-size-xs)` | 本组件 CSS `font-size` |
| `--c-badge-size-md-height` | 公开 | `24px` | 本组件 CSS `line-height`, `min-width` |
| `--c-badge-size-md-padding` | 公开 | `0 var(--c-sys-space-4)` | 本组件 CSS `padding` |
| `--c-badge-size-md-scale` | 公开 | `1` | 本组件 CSS `transform` |
| `--c-badge-size-md-space` | 公开 | `var(--c-sys-space-3)` | 本组件 CSS `margin-inline` |
| `--c-badge-size-sm-border-radius` | 公开 | `20px` | 本组件 CSS `border-radius` |
| `--c-badge-size-sm-dot-height` | 公开 | `5px` | 本组件 CSS `height` |
| `--c-badge-size-sm-dot-width` | 公开 | `5px` | 本组件 CSS `width` |
| `--c-badge-size-sm-font-size` | 公开 | `var(--c-sys-font-size-xs)` | 本组件 CSS `font-size` |
| `--c-badge-size-sm-height` | 公开 | `20px` | 本组件 CSS `line-height`, `min-width` |
| `--c-badge-size-sm-padding` | 公开 | `0 var(--c-sys-space-3)` | 本组件 CSS `padding` |
| `--c-badge-size-sm-scale` | 公开 | `0.8333` | 本组件 CSS `transform` |
| `--c-badge-size-sm-space` | 公开 | `var(--c-sys-space-1)` | 本组件 CSS `margin-inline` |
| `--c-badge-size-xl-border-radius` | 公开 | `32px` | 本组件 CSS `border-radius` |
| `--c-badge-size-xl-dot-height` | 公开 | `8px` | 本组件 CSS `height` |
| `--c-badge-size-xl-dot-width` | 公开 | `8px` | 本组件 CSS `width` |
| `--c-badge-size-xl-font-size` | 公开 | `var(--c-sys-font-size-lg)` | 本组件 CSS `font-size` |
| `--c-badge-size-xl-height` | 公开 | `32px` | 本组件 CSS `line-height`, `min-width` |
| `--c-badge-size-xl-padding` | 公开 | `0 10px` | 本组件 CSS `padding` |
| `--c-badge-size-xl-scale` | 公开 | `1` | 本组件 CSS `transform` |
| `--c-badge-size-xl-space` | 公开 | `var(--c-sys-space-4)` | 本组件 CSS `margin-inline` |
| `--c-badge-size-xs-border-radius` | 公开 | `20px` | 本组件 CSS `border-radius` |
| `--c-badge-size-xs-dot-height` | 公开 | `4px` | 本组件 CSS `height` |
| `--c-badge-size-xs-dot-width` | 公开 | `4px` | 本组件 CSS `width` |
| `--c-badge-size-xs-font-size` | 公开 | `var(--c-sys-font-size-xs)` | 本组件 CSS `font-size` |
| `--c-badge-size-xs-height` | 公开 | `20px` | 本组件 CSS `line-height`, `min-width` |
| `--c-badge-size-xs-padding` | 公开 | `0 var(--c-sys-space-3)` | 本组件 CSS `padding` |
| `--c-badge-size-xs-scale` | 公开 | `0.6667` | 本组件 CSS `transform` |
| `--c-badge-size-xs-space` | 公开 | `0px` | 本组件 CSS `margin-inline` |
| `--c-badge-status-danger-bg-color` | 公开 | `rgb(var(--c-danger-7))` `rgb(var(--c-danger-4))` (`:root[cedar-theme="dark"]`) | 本组件 CSS `background-color` |
| `--c-badge-status-danger-text-color` | 公开 | `var(--c-sys-color-content-on-dark)` | 本组件 CSS `color` |
| `--c-badge-status-default-bg-color` | 公开 | `#e0e0e0` | 本组件 CSS `background-color` |
| `--c-badge-status-default-text-color` | 公开 | `var(--c-sys-color-content-on-bright)` | 本组件 CSS `color` |
| `--c-badge-status-info-bg-color` | 公开 | `var(--c-sys-color-status-info)` | 本组件 CSS `background-color` |
| `--c-badge-status-info-text-color` | 公开 | `var(--c-sys-color-content-on-dark)` | 本组件 CSS `color` |
| `--c-badge-status-primary-bg-color` | 公开 | `var(--c-sys-color-action-primary)` | 本组件 CSS `background-color` |
| `--c-badge-status-primary-text-color` | 公开 | `var(--c-sys-color-content-on-dark)` | 本组件 CSS `color` |
| `--c-badge-status-secondary-bg-color` | 公开 | `rgb(var(--c-gray-6))` | 本组件 CSS `background-color` |
| `--c-badge-status-secondary-text-color` | 公开 | `var(--c-sys-color-content-on-dark)` | 本组件 CSS `color` |
| `--c-badge-status-success-bg-color` | 公开 | `var(--c-sys-color-status-success)` | 本组件 CSS `background-color` |
| `--c-badge-status-success-text-color` | 公开 | `var(--c-sys-color-content-on-dark)` | 本组件 CSS `color` |
| `--c-badge-status-tertiary-bg-color` | 公开 | `rgb(var(--c-gray-7))` | 本组件 CSS `background-color` |
| `--c-badge-status-tertiary-text-color` | 公开 | `var(--c-sys-color-content-on-dark)` `var(--c-sys-color-content-on-bright)` (`:root[cedar-theme="dark"]`) | 本组件 CSS `color` |
| `--c-badge-status-warning-bg-color` | 公开 | `var(--c-sys-color-status-warning)` | 本组件 CSS `background-color` |
| `--c-badge-status-warning-text-color` | 公开 | `var(--c-sys-color-content-on-dark)` | 本组件 CSS `color` |
| `--c-badge-text-color` | 公开 | `var(--c-sys-color-content-on-dark)` | 本组件 CSS `color` |
| `--c-badge-variant-outline-bg-color` | 公开 | `transparent` | 本组件 CSS `background-color` |
| `--c-badge-variant-outline-status-danger-text-color` | 公开 | `var(--c-sys-color-content-danger)` | 本组件 CSS `border`, `color` |
| `--c-badge-variant-outline-status-default-text-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `border`, `color` |
| `--c-badge-variant-outline-status-info-text-color` | 公开 | `var(--c-sys-color-content-info)` | 本组件 CSS `border`, `color` |
| `--c-badge-variant-outline-status-primary-text-color` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `border`, `color` |
| `--c-badge-variant-outline-status-secondary-text-color` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `border`, `color` |
| `--c-badge-variant-outline-status-success-text-color` | 公开 | `var(--c-sys-color-content-success)` | 本组件 CSS `border`, `color` |
| `--c-badge-variant-outline-status-tertiary-text-color` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `border`, `color` |
| `--c-badge-variant-outline-status-warning-text-color` | 公开 | `var(--c-sys-color-content-warning)` | 本组件 CSS `border`, `color` |
| `--c-badge-variant-outline-text-color` | 公开 | `var(--c-sys-color-content-danger)` | 本组件 CSS `border`, `color` |
## breadcrumb
声明来源: `src/breadcrumb/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-breadcrumb-bg` | 公开 | `transparent` | 本组件 CSS `background-color` |
| `--c-breadcrumb-bg-hover` | 公开 | `var(--c-color-fill-2)` | 本组件 CSS `background-color` |
| `--c-breadcrumb-dropdown-icon` | 公开 | `var(--c-color-text-2)` | 本组件 CSS `color` |
| `--c-breadcrumb-font-weight-active` | 公开 | `var(--c-font-weight-400)` | 本组件 CSS `font-weight` |
| `--c-breadcrumb-icon-color` | 公开 | `var(--c-color-text-3)` | 本组件 CSS `color` |
| `--c-breadcrumb-link-text-color` | 公开 | `rgb(var(--c-primary-8))` | 本组件 CSS `color` |
| `--c-breadcrumb-link-text-color-hover` | 公开 | `rgb(var(--c-primary-9))` | 本组件 CSS `color` |
| `--c-breadcrumb-margin-dropdown-icon-left` | 公开 | `var(--c-spacing-2)` | 本组件 CSS `margin-left` |
| `--c-breadcrumb-margin-separator-horizontal` | 公开 | `var(--c-spacing-2)` | 本组件 CSS `margin` |
| `--c-breadcrumb-padding-text-horizontal` | 公开 | `var(--c-spacing-2)` | 本组件 CSS `margin`, `padding` |
| `--c-breadcrumb-separator-color` | 公开 | `var(--c-color-text-4)` | 本组件 CSS `color` |
| `--c-breadcrumb-separator-font-size` | 公开 | `inherit` | 本组件 CSS `font-size` |
| `--c-breadcrumb-separator-margin` | 公开 | `0 var(--c-breadcrumb-margin-separator-horizontal)` | 本组件 CSS `margin` |
| `--c-breadcrumb-size-dropdown-icon` | 公开 | `var(--c-size-3)` | 本组件 CSS `font-size` |
| `--c-breadcrumb-size-font-size` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `font-size` |
| `--c-breadcrumb-size-text-height` | 公开 | `var(--c-size-6)` | 本组件 CSS `line-height` |
| `--c-breadcrumb-text-border-radius-hover` | 公开 | `var(--c-border-radius-sm)` | 本组件 CSS `border-radius` |
| `--c-breadcrumb-text-color` | 公开 | `var(--c-color-text-2)` | 本组件 CSS `color` |
| `--c-breadcrumb-text-color-active` | 公开 | `var(--c-color-text-1)` | 本组件 CSS `color` |
| `--c-breadcrumb-touch-target-size` | 公开 | `44px` | 本组件 CSS `min-height`, `min-width` |
## button
声明来源: `src/button/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-button-border-radius` | 公开 | `var(--c-sys-radius-md)` | 本组件 CSS `border-radius` |
| `--c-button-content-gap` | 公开 | `var(--c-sys-space-3)` | 本组件 CSS `gap` |
| `--c-button-danger-color` | 公开 | `var(--c-sys-color-status-danger)` | 本组件 CSS `background-color` |
| `--c-button-danger-disabled-color` | 公开 | `rgb(var(--c-danger-3))` `rgba(var(--c-danger-6), 0.5)` (`:root[cedar-theme="dark"]`) | 本组件 CSS `background-color`, `color` |
| `--c-button-danger-foreground-color` | 公开 | `var(--c-sys-color-content-danger)` | 本组件 CSS `color` |
| `--c-button-danger-tonal-color` | 公开 | `rgb(var(--c-danger-1))` | 本组件 CSS `background-color` |
| `--c-button-default-color` | 公开 | `var(--c-sys-color-surface-default)` | 本组件 CSS `background-color` |
| `--c-button-default-foreground-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `background-color`, `color` |
| `--c-button-default-tonal-color` | 公开 | `var(--c-sys-color-surface-muted)` | 本组件 CSS `background-color` |
| `--c-button-disabled-color` | 公开 | `var(--c-color-fill-2)` | 本组件 CSS `background-color` |
| `--c-button-disabled-solid-text-color` | 公开 | `var(--c-sys-color-content-on-dark)` `rgba(255, 255, 255, 0.3)` (`:root[cedar-theme="dark"]`) | 本组件 CSS `color` |
| `--c-button-disabled-text-color` | 公开 | `var(--c-sys-color-content-disabled)` | 本组件 CSS `color` |
| `--c-button-focus-color` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `outline` |
| `--c-button-info-color` | 公开 | `var(--c-sys-color-status-info)` | 本组件 CSS `background-color` |
| `--c-button-info-disabled-color` | 公开 | `rgb(var(--c-blue-3))` `rgba(var(--c-blue-6), 0.5)` (`:root[cedar-theme="dark"]`) | 本组件 CSS `background-color`, `color` |
| `--c-button-info-foreground-color` | 公开 | `var(--c-sys-color-content-info)` | 本组件 CSS `color` |
| `--c-button-info-tonal-color` | 公开 | `rgb(var(--c-blue-1))` | 本组件 CSS `background-color` |
| `--c-button-lg-height` | 公开 | `36px` | 本组件 CSS `height`, `min-width`, `width` |
| `--c-button-lg-padding` | 公开 | `0 var(--c-sys-space-7)` | 本组件 CSS `padding` |
| `--c-button-loading-duration` | 公开 | `1s` | 本组件 CSS `animation` |
| `--c-button-loading-line-height` | 公开 | `3px` | 本组件 CSS `height` |
| `--c-button-md-height` | 公开 | `32px` | 本组件 CSS `height`, `min-width`, `width` |
| `--c-button-md-padding` | 公开 | `0 var(--c-sys-space-6)` | 本组件 CSS `padding` |
| `--c-button-plain-state-opacity-active` | 公开 | `1` | 本组件 CSS `opacity` |
| `--c-button-plain-state-opacity-hover` | 公开 | `0.5` | 本组件 CSS `opacity` |
| `--c-button-primary-color` | 公开 | `var(--c-sys-color-action-primary)` | 本组件 CSS `background-color` |
| `--c-button-primary-disabled-color` | 公开 | `rgb(var(--c-primary-3))` `rgba(var(--c-primary-6), 0.5)` (`:root[cedar-theme="dark"]`) | 本组件 CSS `background-color`, `color` |
| `--c-button-primary-foreground-color` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `color` |
| `--c-button-primary-state-layer-color` | 公开 | `var(--c-button-solid-state-layer-color)` | 本组件 CSS `background-color` |
| `--c-button-primary-tonal-color` | 公开 | `rgb(var(--c-primary-1))` | 本组件 CSS `background-color` |
| `--c-button-secondary-color` | 公开 | `rgb(var(--c-gray-6))` | 本组件 CSS `background-color` |
| `--c-button-secondary-foreground-color` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-button-secondary-tonal-color` | 公开 | `rgb(var(--c-gray-2))` | 本组件 CSS `background-color` |
| `--c-button-sm-height` | 公开 | `28px` | 本组件 CSS `height`, `min-width`, `width` |
| `--c-button-sm-padding` | 公开 | `0 var(--c-sys-space-5)` | 本组件 CSS `padding` |
| `--c-button-solid-state-layer-color` | 公开 | `var(--c-sys-color-content-on-dark)` | 本组件 CSS `background-color` |
| `--c-button-solid-text-color` | 公开 | `var(--c-sys-color-content-on-dark)` | 本组件 CSS `color` |
| `--c-button-stacked-gap` | 公开 | `var(--c-sys-space-2)` | 本组件 CSS `gap`, `min-height`, `min-width` |
| `--c-button-state-layer-color` | 公开 | `var(--c-sys-color-surface-page)` | 本组件 CSS `background-color` |
| `--c-button-state-opacity-active` | 公开 | `0.12` | 本组件 CSS `opacity` |
| `--c-button-state-opacity-hover` | 公开 | `0.08` | 本组件 CSS `opacity` |
| `--c-button-success-color` | 公开 | `var(--c-sys-color-status-success)` | 本组件 CSS `background-color` |
| `--c-button-success-disabled-color` | 公开 | `rgb(var(--c-success-3))` `rgba(var(--c-success-6), 0.5)` (`:root[cedar-theme="dark"]`) | 本组件 CSS `background-color`, `color` |
| `--c-button-success-foreground-color` | 公开 | `var(--c-sys-color-content-success)` | 本组件 CSS `color` |
| `--c-button-success-tonal-color` | 公开 | `rgb(var(--c-success-1))` | 本组件 CSS `background-color` |
| `--c-button-tertiary-color` | 公开 | `rgb(var(--c-gray-7))` | 本组件 CSS `background-color` |
| `--c-button-tertiary-foreground-color` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-button-tertiary-state-layer-color` | 公开 | `var(--c-sys-color-content-on-bright)` `var(--c-sys-color-content-on-dark)` (`:root[cedar-theme="dark"]`) | 本组件 CSS `background-color` |
| `--c-button-tertiary-text-color` | 公开 | `var(--c-sys-color-content-on-dark)` `var(--c-sys-color-content-on-bright)` (`:root[cedar-theme="dark"]`) | 本组件 CSS `color` |
| `--c-button-tertiary-tonal-color` | 公开 | `rgb(var(--c-gray-1))` | 本组件 CSS `background-color` |
| `--c-button-warning-color` | 公开 | `var(--c-sys-color-status-warning)` | 本组件 CSS `background-color` |
| `--c-button-warning-disabled-color` | 公开 | `rgb(var(--c-warning-3))` `rgba(var(--c-warning-6), 0.5)` (`:root[cedar-theme="dark"]`) | 本组件 CSS `background-color`, `color` |
| `--c-button-warning-foreground-color` | 公开 | `var(--c-sys-color-content-warning)` | 本组件 CSS `color` |
| `--c-button-warning-tonal-color` | 公开 | `rgb(var(--c-warning-1))` | 本组件 CSS `background-color` |
| `--c-button-xl-height` | 公开 | `44px` | 本组件 CSS `height`, `min-width`, `width` |
| `--c-button-xl-padding` | 公开 | `0 var(--c-sys-space-8)` | 本组件 CSS `padding` |
| `--c-button-xs-height` | 公开 | `24px` | 本组件 CSS `height`, `min-width`, `width` |
| `--c-button-xs-padding` | 公开 | `0 var(--c-sys-space-4)` | 本组件 CSS `padding` |
## calendar
声明来源: `src/calendar/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-calendar-bg-cell-disabled` | 公开 | `var(--c-color-fill-1)` | 本组件 CSS `background-color` |
| `--c-calendar-bg-cell-hover-in-range` | 公开 | `var(--c-color-primary-light-1)` | 本组件 CSS `background-color` |
| `--c-calendar-bg-cell-hover-range-boundary` | 公开 | `var(--c-color-primary-light-2)` | 本组件 CSS `background-color` |
| `--c-calendar-bg-cell-in-range` | 公开 | `var(--c-color-primary-light-1)` | 本组件 CSS `background-color` |
| `--c-calendar-bg-cell-range-boundary` | 公开 | `rgb(var(--c-primary-6))` | 本组件 CSS `background-color` |
| `--c-calendar-bg-circle-selected` | 公开 | `rgb(var(--c-primary-6))` | 本组件 CSS `background-color`, `border` |
| `--c-calendar-bg-switch-icon` | 公开 | `var(--c-color-bg-5)` | 本组件 CSS `background-color` |
| `--c-calendar-bg-switch-icon-hover` | 公开 | `var(--c-color-fill-3)` | 本组件 CSS `background-color` |
| `--c-calendar-border-color` | 公开 | `var(--c-color-neutral-3)` | 本组件 CSS `border`, `border-bottom`, `border-left`, `border-right`, `border-top` |
| `--c-calendar-box-shadow` | 公开 | `var(--c-color-primary-light-3)` | 本组件 CSS `box-shadow` |
| `--c-calendar-cell-text-in-view` | 公开 | `var(--c-color-text-1)` | 本组件 CSS `color` |
| `--c-calendar-cell-text-not-in-view` | 公开 | `var(--c-color-text-4)` | 本组件 CSS `color` |
| `--c-calendar-cell-text-selected` | 公开 | `var(--c-color-white)` | 本组件 CSS `color` |
| `--c-calendar-cell-today-border-color` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `border` |
| `--c-calendar-date-circle-border-radius` | 公开 | `var(--c-border-radius-circle)` | 本组件 CSS `border-radius` |
| `--c-calendar-date-circle-size` | 公开 | `var(--c-size-7)` | 本组件 CSS `height`, `width` |
| `--c-calendar-date-content-height` | 公开 | `70px` | 本组件 CSS `height` |
| `--c-calendar-date-padding` | 公开 | `var(--c-spacing-5)` | 本组件 CSS `padding` |
| `--c-calendar-date-value-font-size` | 公开 | `var(--c-font-size-title-1)` | 本组件 CSS `font-size` |
| `--c-calendar-date-value-font-weight` | 公开 | `var(--c-font-weight-500)` | 本组件 CSS `font-weight` |
| `--c-calendar-header-height` | 公开 | `var(--c-size-7)` | 本组件 CSS `height`, `line-height` |
| `--c-calendar-header-icon-border-radius` | 公开 | `var(--c-border-radius-circle)` | 本组件 CSS `border-radius` |
| `--c-calendar-header-icon-box-shadow` | 公开 | `0 0 0 var(--c-spacing-1) var(--c-calendar-box-shadow)` | 本组件 CSS `box-shadow` |
| `--c-calendar-header-icon-font-size` | 公开 | `var(--c-font-size-body-1)` | 本组件 CSS `font-size` |
| `--c-calendar-header-icon-margin` | 公开 | `var(--c-spacing-6)` | 本组件 CSS `margin`, `margin-left`, `margin-right` |
| `--c-calendar-header-icon-size` | 公开 | `var(--c-size-7)` | 本组件 CSS `height`, `line-height`, `width` |
| `--c-calendar-header-padding-horizontal` | 公开 | `var(--c-spacing-9)` | 本组件 CSS `padding` |
| `--c-calendar-header-padding-vertical` | 公开 | `var(--c-spacing-9)` | 本组件 CSS `padding` |
| `--c-calendar-header-value-font-size` | 公开 | `var(--c-font-size-title-2)` | 本组件 CSS `font-size` |
| `--c-calendar-header-value-font-weight` | 公开 | `var(--c-font-weight-500)` | 本组件 CSS `font-weight` |
| `--c-calendar-header-value-month-margin` | 公开 | `var(--c-spacing-10)` | 本组件 CSS `margin-left`, `margin-right` |
| `--c-calendar-header-value-month-width` | 公开 | `var(--c-size-19)` | 本组件 CSS `width` |
| `--c-calendar-header-value-year-margin` | 公开 | `var(--c-spacing-4)` | 本组件 CSS `margin-left`, `margin-right` |
| `--c-calendar-header-value-year-width` | 公开 | `var(--c-size-25)` | 本组件 CSS `width` |
| `--c-calendar-mode-year-body-padding` | 公开 | `var(--c-spacing-6)` | 本组件 CSS `padding` |
| `--c-calendar-mode-year-min-width` | 公开 | `820px` | 本组件 CSS `min-width` |
| `--c-calendar-month-cell-date-circle-size` | 公开 | `22px` | 本组件 CSS `height`, `width` |
| `--c-calendar-month-cell-date-padding` | 公开 | `var(--c-spacing-1)` | 本组件 CSS `padding` |
| `--c-calendar-month-cell-date-value-font-size` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `font-size` |
| `--c-calendar-month-cell-font-size` | 公开 | `var(--c-font-size-body-1)` | 本组件 CSS `font-size` |
| `--c-calendar-month-cell-week-list-item-padding` | 公开 | `var(--c-spacing-3)` | 本组件 CSS `padding` |
| `--c-calendar-month-row-height` | 公开 | `var(--c-size-25)` | 本组件 CSS `height` |
| `--c-calendar-month-title-font-size` | 公开 | `var(--c-font-size-title-1)` | 本组件 CSS `font-size` |
| `--c-calendar-month-title-font-weight` | 公开 | `var(--c-font-weight-500)` | 本组件 CSS `font-weight` |
| `--c-calendar-month-title-padding-horizontal` | 公开 | `var(--c-spacing-3)` | 本组件 CSS `padding` |
| `--c-calendar-month-title-padding-vertical` | 公开 | `var(--c-spacing-5)` | 本组件 CSS `padding` |
| `--c-calendar-month-with-days-row-height` | 公开 | `26px` | 本组件 CSS `height` |
| `--c-calendar-panel-bg-cell-hover` | 公开 | `var(--c-color-primary-light-1)` | 本组件 CSS `background-color` |
| `--c-calendar-panel-bg-cell-selected` | 公开 | `rgb(var(--c-primary-6))` | 本组件 CSS `background-color` |
| `--c-calendar-panel-body-padding-horizontal` | 公开 | `var(--c-spacing-7)` | 本组件 CSS `padding` |
| `--c-calendar-panel-body-padding-vertical` | 公开 | `14px` | 本组件 CSS `padding` |
| `--c-calendar-panel-cell-boundary-border-radius` | 公开 | `( (var(~'--c-calendar-panel-date-cell-circle-height') + var(~'--c-calendar-panel-date-cell-padding-vertical') * 2) / 2 )` | 本组件 CSS `border-radius` |
| `--c-calendar-panel-cell-padding-vertical` | 公开 | `var(--c-spacing-1)` | 本组件 CSS `padding` |
| `--c-calendar-panel-cell-selected-border-radius` | 公开 | `var(--c-border-radius-circle)` | 本组件 CSS `border-radius` |
| `--c-calendar-panel-color-current-time-dot` | 公开 | `rgb(var(--c-primary-6))` | 本组件 CSS `background-color` |
| `--c-calendar-panel-date-cell-circle-height` | 公开 | `var(--c-size-6)` | 本组件 CSS `height`, `line-height`, `min-width` |
| `--c-calendar-panel-date-cell-padding-vertical` | 公开 | `var(--c-spacing-2)` | 本组件 CSS `padding` |
| `--c-calendar-panel-date-value-font-size` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `font-size` |
| `--c-calendar-panel-footer-height` | 公开 | `38px` | 本组件 CSS `height`, `line-height` |
| `--c-calendar-panel-header-icon-margin` | 公开 | `var(--c-spacing-1)` | 本组件 CSS `margin-left`, `margin-right` |
| `--c-calendar-panel-header-icon-size` | 公开 | `var(--c-size-6)` | 本组件 CSS `height`, `line-height`, `width` |
| `--c-calendar-panel-header-padding-horizontal` | 公开 | `var(--c-spacing-7)` | 本组件 CSS `padding` |
| `--c-calendar-panel-header-padding-vertical` | 公开 | `var(--c-spacing-4)` | 本组件 CSS `padding` |
| `--c-calendar-panel-header-value-font-size` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `font-size` |
| `--c-calendar-panel-header-value-line-height` | 公开 | `var(--c-size-6)` | 本组件 CSS `line-height` |
| `--c-calendar-panel-text-color-cell-hover` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `color` |
| `--c-calendar-panel-text-color-cell-selected` | 公开 | `var(--c-color-white)` | 本组件 CSS `color` |
| `--c-calendar-panel-today-dot-offset` | 公开 | `var(--c-spacing-1)` | 本组件 CSS `margin-left` |
| `--c-calendar-panel-today-dot-size` | 公开 | `var(--c-spacing-2)` | 本组件 CSS `height`, `width` |
| `--c-calendar-panel-week-list-item-font-weight` | 公开 | `var(--c-font-weight-400)` | 本组件 CSS `font-weight` |
| `--c-calendar-panel-week-list-item-height` | 公开 | `var(--c-size-8)` | 本组件 CSS `height`, `line-height` |
| `--c-calendar-panel-year-cell-circle-height` | 公开 | `var(--c-size-6)` | 本组件 CSS `border-radius` |
| `--c-calendar-panel-year-cell-padding-vertical` | 公开 | `var(--c-spacing-2)` | 本组件 CSS `padding` |
| `--c-calendar-panel-year-date-value-border-radius` | 公开 | `var(--c-spacing-6)` | 本组件 CSS `border-radius` |
| `--c-calendar-panel-year-mode-cell-padding-vertical` | 公开 | `var(--c-spacing-2)` | 本组件 CSS `padding` |
| `--c-calendar-switch-icon` | 公开 | `var(--c-color-text-2)` | 本组件 CSS `color` |
| `--c-calendar-text-color-cell-hover-range-boundary` | 公开 | `var(--c-color-text-1)` | 本组件 CSS `color` |
| `--c-calendar-text-color-cell-range-boundary` | 公开 | `var(--c-color-white)` | 本组件 CSS `color` |
| `--c-calendar-text-title-color` | 公开 | `var(--c-color-text-1)` | 本组件 CSS `color` |
| `--c-calendar-week-list-item-padding-horizontal` | 公开 | `var(--c-spacing-7)` | 本组件 CSS `padding` |
| `--c-calendar-week-list-item-padding-vertical` | 公开 | `var(--c-spacing-8)` | 本组件 CSS `padding` |
| `--c-calendar-week-list-text-color` | 公开 | `#7d7d7f` | 本组件 CSS `color` |
| `--c-calendar-year-cell-padding-horizontal` | 公开 | `var(--c-spacing-4)` | 本组件 CSS `padding` |
| `--c-calendar-year-cell-padding-vertical` | 公开 | `var(--c-spacing-8)` | 本组件 CSS `padding` |
## card
声明来源: `src/card/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-card-animation-duration` | 公开 | `var(--c-sys-motion-duration-slow)` | 本组件 CSS `transition` |
| `--c-card-animation-easing` | 公开 | `var(--c-sys-motion-easing-standard)` | 本组件 CSS `transition-timing-function` |
| `--c-card-background` | 公开 | `var(--c-sys-color-surface-default)` | 本组件 CSS `background` |
| `--c-card-border-radius` | 公开 | `4px` | 本组件 CSS `border-radius` |
| `--c-card-close-button-background` | 公开 | `#212121` | 本组件 CSS `background-color` |
| `--c-card-close-button-border-radius` | 公开 | `50%` | 本组件 CSS `border-radius` |
| `--c-card-close-button-icon-size` | 公开 | `24px` | 本组件 CSS `font-size` |
| `--c-card-close-button-size` | 公开 | `56px` | 本组件 CSS `height`, `width` |
| `--c-card-close-button-text-color` | 公开 | `var(--c-sys-color-content-on-dark)` | 本组件 CSS `color` |
| `--c-card-content-color` | 公开 | `var(--c-sys-color-content-tertiary)` | 本组件 CSS `color` |
| `--c-card-content-font-size` | 公开 | `14px` | 本组件 CSS `font-size` |
| `--c-card-content-margin` | 公开 | `16px 0 0 0` | 本组件 CSS `margin` |
| `--c-card-content-padding` | 公开 | `0 16px` | 本组件 CSS `padding` |
| `--c-card-content-row-margin` | 公开 | `16px 0 0 0` | 本组件 CSS `margin` |
| `--c-card-description-color` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-card-description-font-size` | 公开 | `14px` | 本组件 CSS `font-size` |
| `--c-card-description-margin` | 公开 | `20px 0 0 0` | 本组件 CSS `margin` |
| `--c-card-description-padding` | 公开 | `0 13px` | 本组件 CSS `padding` |
| `--c-card-filled-background` | 公开 | `var(--c-sys-color-surface-muted)` | 本组件 CSS `background-color` |
| `--c-card-floating-buttons-bottom` | 公开 | `16px` | 本组件 CSS `bottom` |
| `--c-card-floating-buttons-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-card-floating-buttons-right` | 公开 | `16px` | 本组件 CSS `right` |
| `--c-card-footer-bottom` | 公开 | `9px` | 本组件 CSS `bottom` |
| `--c-card-footer-margin` | 公开 | `30px 0 0 0` | 本组件 CSS `margin` |
| `--c-card-footer-padding` | 公开 | `0 12px` | 本组件 CSS `padding` |
| `--c-card-footer-right` | 公开 | `13px` | 本组件 CSS `right` |
| `--c-card-hover-shadow` | 公开 | `0 4px 12px rgba(0, 0, 0, 0.12)` | 本组件 CSS `box-shadow` |
| `--c-card-image-height` | 公开 | `200px` | 本组件 CSS `height` |
| `--c-card-image-width` | 公开 | `100%` | 本组件 CSS `width` |
| `--c-card-line-height` | 公开 | `22px` | 本组件 CSS `line-height` |
| `--c-card-outline-color` | 公开 | `var(--c-sys-color-border-default)` | 本组件 CSS `border` |
| `--c-card-padding` | 公开 | `0 0 15px 0` | 本组件 CSS `padding` |
| `--c-card-row-height` | 公开 | `140px` | 本组件 CSS `min-height` |
| `--c-card-row-image-width` | 公开 | `140px` | 本组件 CSS `width` |
| `--c-card-row-line-height` | 公开 | `1.5` | 本组件 CSS `line-height` |
| `--c-card-size-sm-section-margin` | 公开 | `8px 0 0` | 本组件 CSS `margin` |
| `--c-card-size-sm-section-padding` | 公开 | `0 12px` | 本组件 CSS `padding` |
| `--c-card-size-sm-title-font-size` | 公开 | `16px` | 本组件 CSS `font-size` |
| `--c-card-subtitle-color` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-card-subtitle-font-size` | 公开 | `14px` | 本组件 CSS `font-size` |
| `--c-card-subtitle-margin` | 公开 | `10px 0 0 0` | 本组件 CSS `margin` |
| `--c-card-subtitle-padding` | 公开 | `0 12px` | 本组件 CSS `padding` |
| `--c-card-subtitle-row-margin` | 公开 | `-8px 0 0 0` | 本组件 CSS `margin` |
| `--c-card-title-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-card-title-font-size` | 公开 | `20px` | 本组件 CSS `font-size` |
| `--c-card-title-margin` | 公开 | `15px 0 0 0` | 本组件 CSS `margin` |
| `--c-card-title-padding` | 公开 | `0 12px` | 本组件 CSS `padding` |
| `--c-card-title-row-margin` | 公开 | `12px 0` | 本组件 CSS `margin` |
## carousel
声明来源: `src/carousel/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-carousel-arrow-background` | 公开 | `rgb(0 0 0 / 35%)` | 本组件 CSS `background` |
| `--c-carousel-arrow-background-hover` | 公开 | `rgb(0 0 0 / 55%)` | 本组件 CSS `background` |
| `--c-carousel-arrow-color` | 公开 | `var(--c-sys-color-content-on-dark)` | 本组件 CSS `color` |
| `--c-carousel-arrow-disabled-opacity` | 公开 | `0.4` | 本组件 CSS `opacity` |
| `--c-carousel-arrow-font-size` | 公开 | `var(--c-sys-font-size-xl)` | 本组件 CSS `font-size` |
| `--c-carousel-arrow-margin` | 公开 | `var(--c-sys-space-4)` | 本组件 CSS `bottom`, `left`, `right`, `top` |
| `--c-carousel-arrow-size` | 公开 | `var(--c-sys-control-height-md)` | 本组件 CSS `height`, `width` |
| `--c-carousel-card-duration` | 公开 | `var(--c-sys-motion-duration-standard)` | 本组件 CSS `transition` |
| `--c-carousel-card-opacity` | 公开 | `0.6` | 本组件 CSS `opacity` |
| `--c-carousel-card-scale` | 公开 | `0.85` | 本组件 CSS `transform` |
| `--c-carousel-fade-duration` | 公开 | `var(--c-sys-motion-duration-standard)` | 本组件 CSS `transition` |
| `--c-carousel-focus-color` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `outline` |
| `--c-carousel-focus-offset` | 公开 | `2px` | 本组件 CSS `outline-offset` |
| `--c-carousel-focus-width` | 公开 | `2px` | 本组件 CSS `outline` |
| `--c-carousel-indicator-color-active` | 公开 | `var(--c-sys-color-content-on-dark)` | 本组件 CSS `background` |
| `--c-carousel-indicator-color-default` | 公开 | `rgb(255 255 255 / 35%)` | 本组件 CSS `background` |
| `--c-carousel-indicator-dot-size` | 公开 | `8px` | 本组件 CSS `height`, `width` |
| `--c-carousel-indicator-gap` | 公开 | `var(--c-sys-space-3)` | 本组件 CSS `gap` |
| `--c-carousel-indicator-line-border-radius` | 公开 | `var(--c-sys-radius-sm)` | 本组件 CSS `border-radius` |
| `--c-carousel-indicator-line-height` | 公开 | `3px` | 本组件 CSS `height` |
| `--c-carousel-indicator-line-width` | 公开 | `20px` | 本组件 CSS `width` |
| `--c-carousel-indicator-outer-margin-bottom` | 公开 | `var(--c-sys-space-8)` | 本组件 CSS `padding-bottom` |
| `--c-carousel-indicator-position` | 公开 | `var(--c-sys-space-4)` | 本组件 CSS `bottom`, `left`, `right`, `top` |
| `--c-carousel-navigation-z-index` | 公开 | `10` | 本组件 CSS `z-index` |
| `--c-carousel-transition-duration` | 公开 | `var(--c-sys-motion-duration-standard)` | 本组件 CSS `transition` |
| `--c-carousel-transition-timing-function` | 公开 | `ease` | 本组件 CSS `transition` |
## cascader
声明来源: `src/cascader/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-cascader-checkbox-bg-hover` | 公开 | `var(--c-color-fill-3)` | 本组件 CSS `background-color` |
| `--c-cascader-font-item-size` | 公开 | `var(--c-sys-font-size-md)` | 本组件 CSS `font-size` |
| `--c-cascader-item-bg-active` | 公开 | `var(--c-color-fill-2)` | 本组件 CSS `background-color` |
| `--c-cascader-item-bg-disabled` | 公开 | `transparent` | 本组件 CSS `background-color` |
| `--c-cascader-item-bg-disabled-active` | 公开 | `var(--c-color-fill-2)` | 本组件 CSS `background-color` |
| `--c-cascader-item-bg-hover` | 公开 | `var(--c-cascader-item-bg-active)` | 本组件 CSS `background-color` |
| `--c-cascader-item-check-color` | 公开 | `var(--c-sys-color-action-primary)` | 本组件 CSS `color` |
| `--c-cascader-item-check-size` | 公开 | `var(--c-sys-font-size-md)` | 本组件 CSS `height`, `width` |
| `--c-cascader-item-icon-color` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-cascader-item-text-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-cascader-item-text-color-active` | 公开 | `var(--c-cascader-item-text-color)` | 本组件 CSS `color` |
| `--c-cascader-item-text-color-disabled` | 公开 | `var(--c-sys-color-content-disabled)` | 本组件 CSS `color` |
| `--c-cascader-item-text-color-disabled-active` | 公开 | `var(--c-sys-color-content-disabled)` | 本组件 CSS `color` |
| `--c-cascader-item-text-color-hover` | 公开 | `var(--c-cascader-item-text-color)` | 本组件 CSS `color` |
| `--c-cascader-margin-checkbox-right` | 公开 | `var(--c-sys-space-4)` | 本组件 CSS `margin-right` |
| `--c-cascader-margin-item-icon-left` | 公开 | `var(--c-sys-space-5)` | 本组件 CSS `margin-inline-start` |
| `--c-cascader-option-min-width` | 公开 | `100px` | 本组件 CSS `min-width` |
| `--c-cascader-padding-item-left` | 公开 | `var(--c-sys-space-5)` | 本组件 CSS `padding-left`, `padding-right` |
| `--c-cascader-padding-item-right` | 公开 | `var(--c-sys-space-5)` | 本组件 CSS `margin-inline-end`, `padding-right` |
| `--c-cascader-panel-column-max-height` | 公开 | `200px` | 本组件 CSS `max-height` |
| `--c-cascader-panel-column-min-width` | 公开 | `120px` | 本组件 CSS `min-width` |
| `--c-cascader-popup-border-radius` | 公开 | `var(--c-sys-radius-md)` | 本组件 CSS `border-radius` |
| `--c-cascader-popup-box-shadow` | 公开 | `0 4px 10px rgba(0, 0, 0, 0.1)` | 本组件 CSS `box-shadow` |
| `--c-cascader-popup-color-border` | 公开 | `var(--c-color-fill-3)` | 本组件 CSS `border`, `border-right`, `border-top` |
| `--c-cascader-popup-max-height` | 公开 | `200px` | 本组件 CSS `height` |
| `--c-cascader-popup-padding-vertical` | 公开 | `var(--c-sys-space-2)` | 本组件 CSS `padding` |
| `--c-cascader-size-item-height` | 公开 | `36px` | 本组件 CSS `height`, `line-height` |
| `--c-cascader-size-item-icon` | 公开 | `12px` | 本组件 CSS `height`, `width` |
| `--c-cascader-slide-margin` | 公开 | `120px` | 本组件 CSS `margin-left` |
## checkbox
声明来源: `src/checkbox/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-checkbox-action-padding` | 公开 | `5px` | 本组件 CSS `padding` |
| `--c-checkbox-animation-duration` | 公开 | `var(--c-transition-duration-3)` | 本组件 CSS `transition` |
| `--c-checkbox-control-border-radius` | 公开 | `2px` | 本组件 CSS `border-radius` |
| `--c-checkbox-control-color` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-checkbox-control-color-checked` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `color`, `outline` |
| `--c-checkbox-control-color-disabled` | 公开 | `var(--c-sys-color-content-disabled)` | 本组件 CSS `color` |
| `--c-checkbox-control-color-error` | 公开 | `var(--c-sys-color-content-danger)` | 本组件 CSS `color` |
| `--c-checkbox-control-size` | 公开 | `14px` | 本组件 CSS `height`, `width` |
| `--c-checkbox-group-gap` | 公开 | `var(--c-spacing-7)` | 本组件 CSS `gap` |
| `--c-checkbox-label-font-size` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `font-size` |
| `--c-checkbox-label-gap` | 公开 | `var(--c-spacing-4)` | 本组件 CSS `margin-inline-start` |
| `--c-checkbox-label-text-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-checkbox-label-text-color-disabled` | 公开 | `var(--c-sys-color-content-disabled)` | 本组件 CSS `color` |
| `--c-checkbox-mark-color` | 公开 | `var(--c-sys-color-surface-default)` | 本组件 CSS `background-color`, `color` |
| `--c-internal-checkbox-action-radius` | 内部 | `50%` | 本组件 CSS `border-radius` |
| `--c-internal-checkbox-background` | 内部 | `var(--c-sys-color-surface-default)` | 本组件 CSS `background-color` |
| `--c-internal-checkbox-background-disabled` | 内部 | `var(--c-sys-color-surface-muted)` | 本组件 CSS `background-color` |
| `--c-internal-checkbox-border-radius` | 内部 | `var(--c-checkbox-control-border-radius)` | 本组件 CSS `border-radius` |
| `--c-internal-checkbox-border-width` | 内部 | `1px` | 本组件 CSS `border` |
| `--c-internal-checkbox-focus-offset` | 内部 | `2px` | 本组件 CSS `outline-offset` |
| `--c-internal-checkbox-focus-width` | 内部 | `2px` | 本组件 CSS `outline` |
| `--c-internal-checkbox-hover-background` | 内部 | `var(--c-sys-color-state-hover)` | 本组件 CSS `background-color` |
| `--c-internal-checkbox-mark-color` | 内部 | `var(--c-checkbox-mark-color)` | 本组件 CSS `background-color`, `color` |
| `--c-internal-checkbox-mark-height` | 内部 | `2px` | 本组件 CSS `height` |
| `--c-internal-checkbox-mark-radius` | 内部 | `1px` | 本组件 CSS `border-radius` |
| `--c-internal-checkbox-mark-size` | 内部 | `75%` | 本组件 CSS `height`, `width` |
## collapse
声明来源: `src/collapse/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-collapse-border-color` | 公开 | `var(--c-sys-color-border-default)` | 本组件 CSS `border` |
| `--c-collapse-border-radius` | 公开 | `var(--c-border-radius-md)` | 本组件 CSS `border-radius` |
| `--c-collapse-border-width` | 公开 | `var(--c-border-width-1)` | 本组件 CSS `border` |
| `--c-collapse-content-bg` | 公开 | `var(--c-sys-color-surface-muted)` | 本组件 CSS `background-color` |
| `--c-collapse-content-font-size` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `font-size` |
| `--c-collapse-content-padding-vertical` | 公开 | `var(--c-spacing-4)` | 本组件 CSS `padding` |
| `--c-collapse-content-text-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-collapse-content-text-color-disabled` | 公开 | `var(--c-sys-color-content-disabled)` | 本组件 CSS `color` |
| `--c-collapse-expand-icon` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-collapse-expand-icon-active-transform` | 公开 | `rotate(90deg)` | 本组件 CSS `transform` |
| `--c-collapse-expand-icon-right-active-transform` | 公开 | `rotate(-90deg)` | 本组件 CSS `transform` |
| `--c-collapse-expand-icon-right-transform` | 公开 | `rotate(0deg)` | 本组件 CSS `transform` |
| `--c-collapse-expand-icon-size` | 公开 | `14px` | 本组件 CSS `font-size` |
| `--c-collapse-expand-icon-spacing-text` | 公开 | `5px` | 本组件 CSS `gap` |
| `--c-collapse-expand-icon-transform` | 公开 | `rotate(0deg)` | 本组件 CSS `transform` |
| `--c-collapse-item-border-color` | 公开 | `var(--c-sys-color-border-default)` | 本组件 CSS `border-bottom` |
| `--c-collapse-item-border-width` | 公开 | `var(--c-border-width-1)` | 本组件 CSS `border-bottom` |
| `--c-collapse-item-margin-top` | 公开 | `var(--c-spacing-4)` | 本组件 CSS `margin-top` |
| `--c-collapse-line-height` | 公开 | `1.5715` | 本组件 CSS `line-height` |
| `--c-collapse-motion-duration` | 公开 | `var(--c-transition-duration-2)` | 本组件 CSS `transition` |
| `--c-collapse-motion-easing` | 公开 | `var(--c-transition-timing-function-standard)` | 本组件 CSS `transition` |
| `--c-collapse-title-bg` | 公开 | `var(--c-sys-color-surface-default)` | 本组件 CSS `background`, `background-color` |
| `--c-collapse-title-bg-active` | 公开 | `var(--c-sys-color-surface-default)` | 本组件 CSS `background-color` |
| `--c-collapse-title-bg-disabled` | 公开 | `var(--c-sys-color-surface-default)` | 本组件 CSS `background-color` |
| `--c-collapse-title-font-size` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `font-size` |
| `--c-collapse-title-font-weight-active` | 公开 | `var(--c-font-weight-500)` | 本组件 CSS `font-weight` |
| `--c-collapse-title-line-height` | 公开 | `24px` | 本组件 CSS `line-height` |
| `--c-collapse-title-padding-horizontal` | 公开 | `13px` | 本组件 CSS `padding` |
| `--c-collapse-title-padding-vertical` | 公开 | `var(--c-spacing-4)` | 本组件 CSS `padding` |
| `--c-collapse-title-text-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-collapse-title-text-color-disabled` | 公开 | `var(--c-sys-color-content-disabled)` | 本组件 CSS `color` |
## color-picker
声明来源: `src/color-picker/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-color-picker-control-bar-alpha-margin-top` | 公开 | `var(--c-spacing-9)` | 本组件 CSS `margin-top` |
| `--c-color-picker-control-bar-border-radius` | 公开 | `10px` | 本组件 CSS `border-radius` |
| `--c-color-picker-control-bar-handle-inner-offset` | 公开 | `var(--c-spacing-4)` | 本组件 CSS `height`, `width` |
| `--c-color-picker-control-bar-handle-size` | 公开 | `var(--c-size-4)` | 本组件 CSS `height`, `width` |
| `--c-color-picker-control-bar-height` | 公开 | `14px` | 本组件 CSS `height` |
| `--c-color-picker-control-bar-width` | 公开 | `182px` | 本组件 CSS `width` |
| `--c-color-picker-input-bg-color` | 公开 | `var(--c-color-fill-2)` | 本组件 CSS `background-color` |
| `--c-color-picker-input-border-radius` | 公开 | `var(--c-border-radius-sm)` | 本组件 CSS `border-radius` |
| `--c-color-picker-input-size-lg-padding` | 公开 | `calc((var(--c-field-size-lg-height) - var(--c-color-picker-preview-size-lg)) / 2) var(--c-spacing-3)` | 本组件 CSS `padding` |
| `--c-color-picker-input-size-md-padding` | 公开 | `calc((var(--c-field-size-md-height) - var(--c-color-picker-preview-size-md)) / 2) var(--c-spacing-2)` | 本组件 CSS `padding` |
| `--c-color-picker-input-size-sm-padding` | 公开 | `calc((var(--c-field-size-sm-height) - var(--c-color-picker-preview-size-sm)) / 2) var(--c-spacing-2)` | 本组件 CSS `padding` |
| `--c-color-picker-input-size-xs-padding` | 公开 | `calc((var(--c-field-size-xs-height) - var(--c-color-picker-preview-size-xs)) / 2) var(--c-spacing-2)` | 本组件 CSS `padding` |
| `--c-color-picker-palette-handle-border-size` | 公开 | `var(--c-border-width-2)` | 本组件 CSS `border` |
| `--c-color-picker-palette-handle-size` | 公开 | `var(--c-size-4)` | 本组件 CSS `height`, `width` |
| `--c-color-picker-palette-height` | 公开 | `178px` | 本组件 CSS `height` |
| `--c-color-picker-panel-affix-font-size` | 公开 | `var(--c-font-size-body-1)` | 本组件 CSS `font-size` |
| `--c-color-picker-panel-alpha-input-width` | 公开 | `52px` | 本组件 CSS `width` |
| `--c-color-picker-panel-bg-color` | 公开 | `var(--c-color-bg-1)` | 本组件 CSS `background-color` |
| `--c-color-picker-panel-block-border-radius` | 公开 | `var(--c-border-radius-sm)` | 本组件 CSS `border-radius` |
| `--c-color-picker-panel-block-margin` | 公开 | `var(--c-spacing-6)` | 本组件 CSS `margin` |
| `--c-color-picker-panel-block-size` | 公开 | `var(--c-size-4)` | 本组件 CSS `height`, `width` |
| `--c-color-picker-panel-border-color` | 公开 | `var(--c-color-border-2)` | 本组件 CSS `border`, `border-left`, `border-right`, `border-top` |
| `--c-color-picker-panel-border-radius` | 公开 | `var(--c-border-radius-sm)` | 本组件 CSS `border-radius` |
| `--c-color-picker-panel-box-shadow` | 公开 | `var(--c-shadow2-down)` | 本组件 CSS `box-shadow` |
| `--c-color-picker-panel-checker-size` | 公开 | `var(--c-spacing-4)` | 本组件 CSS `background-size` |
| `--c-color-picker-panel-colors-empty-margin-y` | 公开 | `var(--c-spacing-9)` | 本组件 CSS `margin` |
| `--c-color-picker-panel-colors-list-margin` | 公开 | `calc(-1 * var(--c-spacing-4)) calc(-1 * var(--c-spacing-2)) 0` | 本组件 CSS `margin` |
| `--c-color-picker-panel-colors-section-margin-top` | 公开 | `var(--c-spacing-9)` | 本组件 CSS `margin-top` |
| `--c-color-picker-panel-colors-wrapper-margin-top` | 公开 | `var(--c-spacing-7)` | 本组件 CSS `margin-top` |
| `--c-color-picker-panel-empty-font-size` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `font-size` |
| `--c-color-picker-panel-format-padding-left` | 公开 | `var(--c-spacing-4)` | 本组件 CSS `padding-left` |
| `--c-color-picker-panel-format-select-width` | 公开 | `58px` | 本组件 CSS `width` |
| `--c-color-picker-panel-input-group-margin-left` | 公开 | `var(--c-spacing-9)` | 本组件 CSS `margin-left` |
| `--c-color-picker-panel-input-margin-top` | 公开 | `var(--c-spacing-9)` | 本组件 CSS `margin-top` |
| `--c-color-picker-panel-input-padding-x` | 公开 | `var(--c-spacing-6)` | 本组件 CSS `padding` |
| `--c-color-picker-panel-padding` | 公开 | `var(--c-spacing-9)` | 本组件 CSS `padding` |
| `--c-color-picker-panel-preview-size` | 公开 | `var(--c-size-10)` | 本组件 CSS `font-size`, `height`, `width` |
| `--c-color-picker-panel-section-title-font-size` | 公开 | `var(--c-font-size-body-1)` | 本组件 CSS `font-size` |
| `--c-color-picker-panel-section-title-font-weight` | 公开 | `var(--c-font-weight-400)` | 本组件 CSS `font-weight` |
| `--c-color-picker-panel-width` | 公开 | `260px` | 本组件 CSS `width` |
| `--c-color-picker-preview-border-color` | 公开 | `var(--c-color-border-2)` | 本组件 CSS `border` |
| `--c-color-picker-preview-border-size` | 公开 | `var(--c-border-width-1)` | 本组件 CSS `border` |
| `--c-color-picker-preview-size-lg` | 公开 | `26px` | 本组件 CSS `height`, `padding`, `width` |
| `--c-color-picker-preview-size-md` | 公开 | `var(--c-size-6)` | 本组件 CSS `height`, `padding`, `width` |
| `--c-color-picker-preview-size-sm` | 公开 | `22px` | 本组件 CSS `height`, `padding`, `width` |
| `--c-color-picker-preview-size-xs` | 公开 | `var(--c-size-4)` | 本组件 CSS `height`, `padding`, `width` |
| `--c-color-picker-value-font-color` | 公开 | `var(--c-color-text-1)` | 本组件 CSS `color` |
| `--c-color-picker-value-font-color-disabled` | 公开 | `var(--c-color-text-4)` | 本组件 CSS `color` |
| `--c-color-picker-value-font-size` | 公开 | `var(--c-field-size-md-font-size)` | 本组件 CSS `font-size` |
| `--c-color-picker-value-margin-left` | 公开 | `var(--c-spacing-2)` | 本组件 CSS `margin-left` |
## count-to
声明来源: `src/count-to/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-count-to-text-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-count-to-text-font-size` | 公开 | `var(--c-font-size-lg)` | 本组件 CSS `font-size` |
## countdown
声明来源: `src/countdown/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-countdown-text-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-countdown-text-font-size` | 公开 | `var(--c-font-size-lg)` | 本组件 CSS `font-size` |
## date/picker
声明来源: `src/date/picker/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-date-picker-actions-padding` | 公开 | `8px 12px` | 本组件 CSS `padding` |
| `--c-date-picker-body-padding-horizontal` | 公开 | `var(--c-spacing-7)` | 本组件 CSS `padding` |
| `--c-date-picker-body-padding-vertical` | 公开 | `14px` | 本组件 CSS `padding` |
| `--c-date-picker-box-shadow` | 公开 | `var(--c-shadow1-down)` | 本组件 CSS `box-shadow` |
| `--c-date-picker-btn-confirm-margin-vertical` | 公开 | `5px` | 本组件 CSS `margin` |
| `--c-date-picker-cell-bg-disabled` | 公开 | `var(--c-color-fill-1)` | 本组件 CSS `background-color` |
| `--c-date-picker-cell-bg-hover-in-range` | 公开 | `var(--c-color-fill-2)` | 本组件 CSS `background-color` |
| `--c-date-picker-cell-bg-in-range` | 公开 | `var(--c-color-primary-light-1)` | 本组件 CSS `background-color` |
| `--c-date-picker-cell-font-size` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `font-size` |
| `--c-date-picker-cell-font-weight-in-view` | 公开 | `var(--c-font-weight-500)` | 本组件 CSS `font-weight` |
| `--c-date-picker-cell-hover-range-boundary-bg` | 公开 | `var(--c-color-fill-2)` | 本组件 CSS `background-color` |
| `--c-date-picker-cell-hover-range-boundary-text-color` | 公开 | `var(--c-color-text-1)` | 本组件 CSS `color` |
| `--c-date-picker-cell-range-boundary-bg` | 公开 | `rgb(var(--c-primary-6))` | 本组件 CSS `background-color` |
| `--c-date-picker-cell-range-boundary-text-color` | 公开 | `var(--c-color-white)` | 本组件 CSS `color` |
| `--c-date-picker-cell-text-color-in-view` | 公开 | `var(--c-color-text-1)` | 本组件 CSS `color` |
| `--c-date-picker-cell-text-color-not-in-view` | 公开 | `var(--c-color-text-4)` | 本组件 CSS `color` |
| `--c-date-picker-container-border-radius` | 公开 | `var(--c-border-radius-md)` | 本组件 CSS `border-radius` |
| `--c-date-picker-container-min-height` | 公开 | `var(--c-size-15)` | 本组件 CSS `min-height` |
| `--c-date-picker-datetime-popover-width` | 公开 | `calc(var(--c-date-picker-panel-date-width) + var(--c-date-picker-time-panel-min-width) + 2px)` | 本组件 CSS `flex`, `width` |
| `--c-date-picker-footer-btn-wrapper-padding-horizontal` | 公开 | `var(--c-spacing-4)` | 本组件 CSS `padding` |
| `--c-date-picker-footer-btn-wrapper-padding-vertical` | 公开 | `3px` | 本组件 CSS `padding` |
| `--c-date-picker-footer-extra-font-size` | 公开 | `var(--c-font-size-body-1)` | 本组件 CSS `font-size` |
| `--c-date-picker-footer-extra-padding-horizontal` | 公开 | `var(--c-spacing-9)` | 本组件 CSS `padding` |
| `--c-date-picker-footer-extra-padding-vertical` | 公开 | `var(--c-spacing-4)` | 本组件 CSS `padding` |
| `--c-date-picker-footer-now-height` | 公开 | `var(--c-size-9)` | 本组件 CSS `height`, `line-height` |
| `--c-date-picker-header-label-border-radius` | 公开 | `var(--c-border-radius-sm)` | 本组件 CSS `border-radius` |
| `--c-date-picker-header-label-padding` | 公开 | `var(--c-spacing-1)` | 本组件 CSS `padding` |
| `--c-date-picker-header-padding-horizontal` | 公开 | `var(--c-spacing-7)` | 本组件 CSS `padding` |
| `--c-date-picker-header-padding-vertical` | 公开 | `var(--c-spacing-4)` | 本组件 CSS `padding` |
| `--c-date-picker-header-title-font-size` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `font-size` |
| `--c-date-picker-header-title-line-height` | 公开 | `var(--c-size-6)` | 本组件 CSS `line-height` |
| `--c-date-picker-panel-background` | 公开 | `var(--c-sys-color-surface-overlay)` | 本组件 CSS `background` |
| `--c-date-picker-panel-border` | 公开 | `var(--c-color-border-2)` | 本组件 CSS `border` |
| `--c-date-picker-panel-border-color` | 公开 | `var(--c-color-neutral-3)` | 本组件 CSS `border`, `border-bottom`, `border-left`, `border-right`, `border-top` |
| `--c-date-picker-panel-cell-bg-hover` | 公开 | `var(--c-color-fill-3)` | 本组件 CSS `background-color` |
| `--c-date-picker-panel-cell-bg-selected` | 公开 | `rgb(var(--c-primary-6))` | 本组件 CSS `background-color` |
| `--c-date-picker-panel-cell-border-radius` | 公开 | `var(--c-date-picker-panel-cell-circle-height)` | 本组件 CSS `border-bottom-left-radius`, `border-bottom-right-radius`, `border-top-left-radius`, `border-top-right-radius` |
| `--c-date-picker-panel-cell-boundary-border-radius` | 公开 | `var(--c-date-picker-panel-cell-circle-height)` | 本组件 CSS `border-bottom-left-radius`, `border-bottom-right-radius`, `border-radius`, `border-top-left-radius`, `border-top-right-radius` |
| `--c-date-picker-panel-cell-circle-height` | 公开 | `var(--c-size-6)` | 本组件 CSS `border-bottom-left-radius`, `border-bottom-right-radius`, `border-radius`, `border-top-left-radius`, `border-top-right-radius`, `height`, `line-height`, `min-width`, `width` |
| `--c-date-picker-panel-cell-padding-vertical` | 公开 | `var(--c-spacing-2)` | 本组件 CSS `padding`, `padding-left`, `padding-right` |
| `--c-date-picker-panel-cell-selected-border-radius` | 公开 | `var(--c-border-radius-circle)` | 本组件 CSS `border-radius` |
| `--c-date-picker-panel-cell-text-color-hover` | 公开 | `var(--c-color-text-1)` | 本组件 CSS `color` |
| `--c-date-picker-panel-cell-text-color-selected` | 公开 | `var(--c-color-white)` | 本组件 CSS `color` |
| `--c-date-picker-panel-current-time-dot-color` | 公开 | `rgb(var(--c-primary-6))` | 本组件 CSS `background-color` |
| `--c-date-picker-panel-date-width` | 公开 | `265px` | 本组件 CSS `flex`, `min-width`, `width` |
| `--c-date-picker-panel-label-bg-hover` | 公开 | `var(--c-color-fill-3)` | 本组件 CSS `background-color` |
| `--c-date-picker-panel-month-width` | 公开 | `265px` | 本组件 CSS `width` |
| `--c-date-picker-panel-preferred-width` | 公开 | `var(--c-date-picker-popover-width)` | 本组件 CSS `flex`, `width` |
| `--c-date-picker-panel-quarter-width` | 公开 | `265px` | 本组件 CSS `width` |
| `--c-date-picker-panel-radius` | 公开 | `8px` | 本组件 CSS `border-radius` |
| `--c-date-picker-panel-time-cell-spacing-horizontal` | 公开 | `var(--c-spacing-2)` | 本组件 CSS `padding` |
| `--c-date-picker-panel-time-cell-width` | 公开 | `var(--c-size-9)` | 本组件 CSS `width` |
| `--c-date-picker-panel-time-padding` | 公开 | `var(--c-spacing-3)` | 本组件 CSS `padding` |
| `--c-date-picker-panel-time-padding-horizontal` | 公开 | `var(--c-spacing-5)` | 本组件 CSS `padding-left` |
| `--c-date-picker-panel-week-width` | 公开 | `298px` | 本组件 CSS `flex`, `width` |
| `--c-date-picker-panel-year-width` | 公开 | `265px` | 本组件 CSS `width` |
| `--c-date-picker-popover-gap` | 公开 | `32px` | 本组件 CSS `max-height`, `max-width` |
| `--c-date-picker-popover-max-height` | 公开 | `calc(50dvh - var(--c-date-picker-popover-gap))` | 本组件 CSS `max-height` |
| `--c-date-picker-popover-width` | 公开 | `calc(var(--c-date-picker-panel-date-width) + 2px)` | 本组件 CSS `flex`, `width` |
| `--c-date-picker-preview-outline` | 公开 | `1px dashed var(--c-color-primary)` | 本组件 CSS `outline` |
| `--c-date-picker-range-panel-min-width` | 公开 | `224px` | 本组件 CSS `min-width` |
| `--c-date-picker-range-popover-width` | 公开 | `calc(var(--c-date-picker-panel-date-width) * 2 + 2px)` | 本组件 CSS `flex`, `width` |
| `--c-date-picker-row-padding-vertical` | 公开 | `var(--c-spacing-1)` | 本组件 CSS `padding` |
| `--c-date-picker-shortcuts-active-text-color` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `color` |
| `--c-date-picker-shortcuts-column-width` | 公开 | `128px` | 本组件 CSS `flex`, `width` |
| `--c-date-picker-shortcuts-inline-item-margin-right` | 公开 | `var(--c-spacing-5)` | 本组件 CSS `margin` |
| `--c-date-picker-shortcuts-inline-item-margin-vertical` | 公开 | `5px` | 本组件 CSS `margin` |
| `--c-date-picker-shortcuts-item-padding-horizontal` | 公开 | `var(--c-spacing-7)` | 本组件 CSS `padding` |
| `--c-date-picker-shortcuts-item-padding-vertical` | 公开 | `var(--c-spacing-3)` | 本组件 CSS `padding` |
| `--c-date-picker-shortcuts-margin-top` | 公开 | `var(--c-spacing-5)` | 本组件 CSS `margin` |
| `--c-date-picker-shortcuts-max-height` | 公开 | `300px` | 本组件 CSS `max-height` |
| `--c-date-picker-shortcuts-placement-item-margin-vertical` | 公开 | `5px` | 本组件 CSS `margin` |
| `--c-date-picker-shortcuts-placement-padding-horizontal` | 公开 | `var(--c-spacing-4)` | 本组件 CSS `padding` |
| `--c-date-picker-shortcuts-placement-padding-vertical` | 公开 | `5px` | 本组件 CSS `padding` |
| `--c-date-picker-shortcuts-width` | 公开 | `106px` | 本组件 CSS `width` |
| `--c-date-picker-switch-icon-bg` | 公开 | `var(--c-color-bg-popup)` | 本组件 CSS `background-color` |
| `--c-date-picker-switch-icon-bg-hover` | 公开 | `var(--c-color-fill-3)` | 本组件 CSS `background-color` |
| `--c-date-picker-switch-icon-border-radius` | 公开 | `var(--c-border-radius-circle)` | 本组件 CSS `border-radius` |
| `--c-date-picker-switch-icon-color` | 公开 | `var(--c-color-text-2)` | 本组件 CSS `color` |
| `--c-date-picker-switch-icon-font-size` | 公开 | `var(--c-font-size-body-1)` | 本组件 CSS `font-size` |
| `--c-date-picker-switch-icon-margin` | 公开 | `var(--c-spacing-1)` | 本组件 CSS `margin-left`, `margin-right` |
| `--c-date-picker-switch-icon-size` | 公开 | `var(--c-size-6)` | 本组件 CSS `height`, `width` |
| `--c-date-picker-time-panel-min-width` | 公开 | `160px` | 本组件 CSS `flex`, `min-width`, `width` |
| `--c-date-picker-timepicker-height` | 公开 | `276px` | 本组件 CSS `height` |
| `--c-date-picker-timepicker-title-font-size` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `font-size` |
| `--c-date-picker-timepicker-title-height` | 公开 | `var(--c-size-10)` | 本组件 CSS `height`, `line-height` |
| `--c-date-picker-today-dot-offset` | 公开 | `var(--c-spacing-1)` | 本组件 CSS `bottom`, `margin-left` |
| `--c-date-picker-today-dot-size` | 公开 | `var(--c-spacing-2)` | 本组件 CSS `height`, `width` |
| `--c-date-picker-transition-duration-1` | 公开 | `var(--c-transition-duration-1)` | 本组件 CSS `transition` |
| `--c-date-picker-transition-timing-function-linear` | 公开 | `var(--c-transition-timing-function-linear)` | 本组件 CSS `transition` |
| `--c-date-picker-view-tab-pane-font-size` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `font-size` |
| `--c-date-picker-view-tab-pane-text-color-active` | 公开 | `var(--c-color-text-1)` | 本组件 CSS `color` |
| `--c-date-picker-view-tab-pane-text-color-inactive` | 公开 | `var(--c-color-text-4)` | 本组件 CSS `color` |
| `--c-date-picker-view-tab-pane-text-icon-spacing` | 公开 | `var(--c-spacing-4)` | 本组件 CSS `margin-left` |
| `--c-date-picker-view-tabs-height` | 公开 | `50px` | 本组件 CSS `height`, `line-height` |
| `--c-date-picker-week-list-item-color` | 公开 | `var(--c-color-text-3)` | 本组件 CSS `color` |
| `--c-date-picker-week-list-item-height` | 公开 | `var(--c-size-8)` | 本组件 CSS `height`, `line-height` |
| `--c-date-picker-week-popover-width` | 公开 | `calc(var(--c-date-picker-panel-week-width) + 2px)` | 本组件 CSS `flex`, `width` |
| `--c-date-picker-week-range-popover-width` | 公开 | `calc(var(--c-date-picker-panel-week-width) * 2 + 2px)` | 本组件 CSS `flex`, `width` |
## descriptions
声明来源: `src/descriptions/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-descriptions-border-bg-label` | 公开 | `var(--c-color-fill-1)` | 本组件 CSS `background-color` |
| `--c-descriptions-border-color` | 公开 | `var(--c-color-neutral-3)` | 本组件 CSS `border`, `border-bottom`, `border-right` |
| `--c-descriptions-border-item-size-lg-padding-horizontal` | 公开 | `var(--c-spacing-8)` | 本组件 CSS `padding`, `padding-right` |
| `--c-descriptions-border-item-size-lg-padding-vertical` | 公开 | `9px` | 本组件 CSS `padding` |
| `--c-descriptions-border-item-size-md-padding-horizontal` | 公开 | `var(--c-spacing-8)` | 本组件 CSS `padding`, `padding-right` |
| `--c-descriptions-border-item-size-md-padding-vertical` | 公开 | `5px` | 本组件 CSS `padding` |
| `--c-descriptions-border-item-size-sm-padding-horizontal` | 公开 | `var(--c-spacing-8)` | 本组件 CSS `padding`, `padding-right` |
| `--c-descriptions-border-item-size-sm-padding-vertical` | 公开 | `3px` | 本组件 CSS `padding` |
| `--c-descriptions-border-item-size-xl-padding-horizontal` | 公开 | `var(--c-spacing-8)` | 本组件 CSS `padding`, `padding-right` |
| `--c-descriptions-border-item-size-xl-padding-vertical` | 公开 | `var(--c-spacing-6)` | 本组件 CSS `padding` |
| `--c-descriptions-border-item-size-xs-padding-horizontal` | 公开 | `var(--c-spacing-8)` | 本组件 CSS `padding`, `padding-right` |
| `--c-descriptions-border-item-size-xs-padding-vertical` | 公开 | `3px` | 本组件 CSS `padding` |
| `--c-descriptions-border-radius` | 公开 | `var(--c-border-radius-md)` | 本组件 CSS `border-radius` |
| `--c-descriptions-border-style` | 公开 | `solid` | 本组件 CSS `border`, `border-bottom`, `border-right` |
| `--c-descriptions-border-width` | 公开 | `1px` | 本组件 CSS `border`, `border-bottom`, `border-right` |
| `--c-descriptions-font-size-title` | 公开 | `var(--c-font-size-title-1)` | 本组件 CSS `font-size` |
| `--c-descriptions-font-weight-text-label` | 公开 | `var(--c-font-weight-500)` | 本组件 CSS `font-weight` |
| `--c-descriptions-font-weight-text-value` | 公开 | `var(--c-font-weight-400)` | 本组件 CSS `font-weight` |
| `--c-descriptions-font-weight-title` | 公开 | `var(--c-font-weight-500)` | 本组件 CSS `font-weight` |
| `--c-descriptions-inline-vertical-padding-extra` | 公开 | `5px` | 本组件 CSS `padding` |
| `--c-descriptions-item-label-inline-margin-bottom` | 公开 | `var(--c-spacing-1)` | 本组件 CSS `margin-bottom` |
| `--c-descriptions-item-label-inline-margin-right` | 公开 | `var(--c-spacing-2)` | 本组件 CSS `margin-right` |
| `--c-descriptions-item-label-padding-x` | 公开 | `var(--c-spacing-2)` | 本组件 CSS `padding` |
| `--c-descriptions-item-size-lg-spacing-bottom` | 公开 | `var(--c-spacing-6)` | 本组件 CSS `padding-bottom` |
| `--c-descriptions-item-size-md-spacing-bottom` | 公开 | `var(--c-spacing-4)` | 本组件 CSS `padding`, `padding-bottom` |
| `--c-descriptions-item-size-sm-spacing-bottom` | 公开 | `var(--c-spacing-2)` | 本组件 CSS `padding-bottom` |
| `--c-descriptions-item-size-xl-spacing-bottom` | 公开 | `var(--c-spacing-7)` | 本组件 CSS `padding-bottom` |
| `--c-descriptions-item-size-xs-spacing-bottom` | 公开 | `var(--c-spacing-1)` | 本组件 CSS `padding-bottom` |
| `--c-descriptions-size-lg-font-size-text` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `font-size` |
| `--c-descriptions-size-lg-title-margin-bottom` | 公开 | `var(--c-spacing-8)` | 本组件 CSS `margin-bottom` |
| `--c-descriptions-size-md-font-size-text` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `font-size` |
| `--c-descriptions-size-md-title-margin-bottom` | 公开 | `var(--c-spacing-7)` | 本组件 CSS `margin-bottom` |
| `--c-descriptions-size-sm-font-size-text` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `font-size` |
| `--c-descriptions-size-sm-title-margin-bottom` | 公开 | `var(--c-spacing-4)` | 本组件 CSS `margin-bottom` |
| `--c-descriptions-size-xl-font-size-text` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `font-size` |
| `--c-descriptions-size-xl-title-margin-bottom` | 公开 | `var(--c-spacing-8)` | 本组件 CSS `margin-bottom` |
| `--c-descriptions-size-xs-font-size-text` | 公开 | `var(--c-font-size-body-1)` | 本组件 CSS `font-size` |
| `--c-descriptions-size-xs-title-margin-bottom` | 公开 | `var(--c-spacing-3)` | 本组件 CSS `margin-bottom` |
| `--c-descriptions-text-color-label` | 公开 | `var(--c-color-text-3)` | 本组件 CSS `color` |
| `--c-descriptions-text-color-value` | 公开 | `var(--c-color-text-1)` | 本组件 CSS `color` |
| `--c-descriptions-title-color` | 公开 | `var(--c-color-text-1)` | 本组件 CSS `color` |
## dialog
声明来源: `src/dialog/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-dialog-actions-button-gap` | 公开 | `var(--c-sys-space-6)` | 本组件 CSS `margin-left` |
| `--c-dialog-actions-padding` | 公开 | `var(--c-sys-space-7) var(--c-sys-space-8)` | 本组件 CSS `padding` |
| `--c-dialog-animation-duration` | 公开 | `var(--c-sys-motion-duration-slow)` | 本组件 CSS `transition` |
| `--c-dialog-animation-easing` | 公开 | `var(--c-sys-motion-easing-standard)` | 本组件 CSS `transition` |
| `--c-dialog-background` | 公开 | `var(--c-sys-color-surface-raised)` | 本组件 CSS `background-color` |
| `--c-dialog-border-color` | 公开 | `var(--c-sys-color-border-default)` | 本组件 CSS `border-bottom`, `border-top` |
| `--c-dialog-border-radius` | 公开 | `var(--c-sys-radius-md)` | 本组件 CSS `border-radius` |
| `--c-dialog-border-width` | 公开 | `1px` | 本组件 CSS `border-bottom`, `border-top` |
| `--c-dialog-close-button-color` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-dialog-close-button-font-size` | 公开 | `var(--c-sys-font-size-lg)` | 本组件 CSS `font-size` |
| `--c-dialog-close-button-inset-inline-end` | 公开 | `var(--c-sys-space-7)` | 本组件 CSS `right` |
| `--c-dialog-close-button-size` | 公开 | `32px` | 本组件 CSS `height`, `width` |
| `--c-dialog-content-font-size` | 公开 | `var(--c-sys-font-size-md)` | 本组件 CSS `font-size` |
| `--c-dialog-content-line-height` | 公开 | `var(--c-line-height)` | 本组件 CSS `line-height` |
| `--c-dialog-content-padding` | 公开 | `28px var(--c-sys-space-8)` | 本组件 CSS `padding` |
| `--c-dialog-content-text-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-dialog-fullscreen-height` | 公开 | `100vh` | 本组件 CSS `height` |
| `--c-dialog-fullscreen-width` | 公开 | `100vw` | 本组件 CSS `width` |
| `--c-dialog-margin-top` | 公开 | `100px` | 本组件 CSS `top` |
| `--c-dialog-overlay-background` | 公开 | `var(--c-sys-color-scrim)` | 本组件 CSS `background-color` |
| `--c-dialog-simple-actions-gap` | 公开 | `32px` | 本组件 CSS `margin-top` |
| `--c-dialog-simple-border-radius` | 公开 | `var(--c-sys-radius-md)` | 本组件 CSS `border-radius` |
| `--c-dialog-simple-content-gap` | 公开 | `28px` | 本组件 CSS `margin-bottom` |
| `--c-dialog-simple-padding` | 公开 | `28px 32px 32px` | 本组件 CSS `padding` |
| `--c-dialog-simple-width` | 公开 | `400px` | 本组件 CSS `width` |
| `--c-dialog-status-danger-color` | 公开 | `var(--c-sys-color-content-danger)` | 本组件 CSS `color` |
| `--c-dialog-status-icon-gap` | 公开 | `var(--c-sys-space-5)` | 本组件 CSS `margin-right` |
| `--c-dialog-status-icon-size` | 公开 | `18px` | 本组件 CSS `font-size` |
| `--c-dialog-status-info-color` | 公开 | `var(--c-sys-color-content-info)` | 本组件 CSS `color` |
| `--c-dialog-status-success-color` | 公开 | `var(--c-sys-color-content-success)` | 本组件 CSS `color` |
| `--c-dialog-status-warning-color` | 公开 | `var(--c-sys-color-content-warning)` | 本组件 CSS `color` |
| `--c-dialog-title-font-size` | 公开 | `var(--c-sys-font-size-lg)` | 本组件 CSS `font-size` |
| `--c-dialog-title-font-weight` | 公开 | `var(--c-sys-font-weight-medium)` | 本组件 CSS `font-weight` |
| `--c-dialog-title-justify` | 公开 | `center` | 本组件 CSS `justify-content` |
| `--c-dialog-title-min-height` | 公开 | `48px` | 本组件 CSS `min-height` |
| `--c-dialog-title-padding` | 公开 | `0 var(--c-sys-space-8)` | 本组件 CSS `padding` |
| `--c-dialog-title-text-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-dialog-width` | 公开 | `520px` | 本组件 CSS `width` |
## divider
声明来源: `src/divider/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-divider-border-width` | 公开 | `1px` | 本组件 CSS `border-left-width`, `border-top-width` |
| `--c-divider-color` | 公开 | `var(--c-sys-color-border-default)` | 本组件 CSS `border-left-color`, `border-top-color` |
| `--c-divider-orientation-horizontal-inset-lg` | 公开 | `32px` | 本组件 CSS `margin-inline-end`, `margin-inline-start`, `max-width` |
| `--c-divider-orientation-horizontal-inset-md` | 公开 | `24px` | 本组件 CSS `margin-inline-end`, `margin-inline-start`, `max-width` |
| `--c-divider-orientation-horizontal-inset-sm` | 公开 | `16px` | 本组件 CSS `margin-inline-end`, `margin-inline-start`, `max-width` |
| `--c-divider-orientation-horizontal-inset-xl` | 公开 | `40px` | 本组件 CSS `margin-inline-end`, `margin-inline-start`, `max-width` |
| `--c-divider-orientation-horizontal-inset-xs` | 公开 | `12px` | 本组件 CSS `margin-inline-end`, `margin-inline-start`, `max-width` |
| `--c-divider-orientation-horizontal-spacing-lg` | 公开 | `24px` | 本组件 CSS `margin-block-end`, `margin-block-start` |
| `--c-divider-orientation-horizontal-spacing-md` | 公开 | `16px` | 本组件 CSS `margin-block-end`, `margin-block-start` |
| `--c-divider-orientation-horizontal-spacing-sm` | 公开 | `12px` | 本组件 CSS `margin-block-end`, `margin-block-start` |
| `--c-divider-orientation-horizontal-spacing-xl` | 公开 | `32px` | 本组件 CSS `margin-block-end`, `margin-block-start` |
| `--c-divider-orientation-horizontal-spacing-xs` | 公开 | `8px` | 本组件 CSS `margin-block-end`, `margin-block-start` |
| `--c-divider-orientation-vertical-inset-lg` | 公开 | `8px` | 本组件 CSS `margin-block-end`, `margin-block-start`, `max-height` |
| `--c-divider-orientation-vertical-inset-md` | 公开 | `6px` | 本组件 CSS `margin-block-end`, `margin-block-start`, `max-height` |
| `--c-divider-orientation-vertical-inset-sm` | 公开 | `4px` | 本组件 CSS `margin-block-end`, `margin-block-start`, `max-height` |
| `--c-divider-orientation-vertical-inset-xl` | 公开 | `12px` | 本组件 CSS `margin-block-end`, `margin-block-start`, `max-height` |
| `--c-divider-orientation-vertical-inset-xs` | 公开 | `2px` | 本组件 CSS `margin-block-end`, `margin-block-start`, `max-height` |
| `--c-divider-orientation-vertical-spacing-lg` | 公开 | `16px` | 本组件 CSS `margin-inline-end`, `margin-inline-start` |
| `--c-divider-orientation-vertical-spacing-md` | 公开 | `12px` | 本组件 CSS `margin-inline-end`, `margin-inline-start` |
| `--c-divider-orientation-vertical-spacing-sm` | 公开 | `8px` | 本组件 CSS `margin-inline-end`, `margin-inline-start` |
| `--c-divider-orientation-vertical-spacing-xl` | 公开 | `24px` | 本组件 CSS `margin-inline-end`, `margin-inline-start` |
| `--c-divider-orientation-vertical-spacing-xs` | 公开 | `4px` | 本组件 CSS `margin-inline-end`, `margin-inline-start` |
| `--c-divider-text-align-inset` | 公开 | `24px` | 本组件 CSS `height`, `width` |
| `--c-divider-text-color` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-divider-text-padding` | 公开 | `16px` | 本组件 CSS `padding` |
## drawer
声明来源: `src/drawer/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-drawer-bg` | 公开 | `var(--c-sys-color-surface-raised)` | 本组件 CSS `background-color` |
| `--c-drawer-border-color` | 公开 | `var(--c-sys-color-border-default)` | 本组件 CSS `border-bottom`, `border-top` |
| `--c-drawer-border-width` | 公开 | `var(--c-border-width-1)` | 本组件 CSS `border-bottom`, `border-top` |
| `--c-drawer-close-btn-margin-left` | 公开 | `var(--c-spacing-4)` | 本组件 CSS `margin-left` |
| `--c-drawer-close-icon-font-size` | 公开 | `var(--c-size-3)` | 本组件 CSS `font-size` |
| `--c-drawer-content-padding-vertical` | 公开 | `var(--c-spacing-6)` | 本组件 CSS `padding` |
| `--c-drawer-content-text-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-drawer-footer-button-margin-left` | 公开 | `var(--c-spacing-6)` | 本组件 CSS `margin-left` |
| `--c-drawer-footer-padding-vertical` | 公开 | `var(--c-spacing-7)` | 本组件 CSS `padding` |
| `--c-drawer-header-font-size` | 公开 | `var(--c-font-size-title-1)` | 本组件 CSS `font-size` |
| `--c-drawer-header-font-weight` | 公开 | `var(--c-font-weight-500)` | 本组件 CSS `font-weight` |
| `--c-drawer-header-height` | 公开 | `var(--c-size-12)` | 本组件 CSS `height` |
| `--c-drawer-header-text-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-drawer-line-height` | 公开 | `var(--c-line-height)` | 本组件 CSS `line-height` |
| `--c-drawer-overlay-bg` | 公开 | `var(--c-sys-color-scrim)` | 本组件 CSS `background-color` |
| `--c-drawer-padding-horizontal` | 公开 | `var(--c-spacing-7)` | 本组件 CSS `padding` |
| `--c-drawer-transition-duration` | 公开 | `var(--c-transition-duration-3)` | 本组件 CSS `transition` |
| `--c-drawer-transition-timing-function` | 公开 | `var(--c-transition-timing-function-standard)` | 本组件 CSS `transition` |
| `--c-drawer-z-index` | 公开 | `var(--c-z-index-drawer)` | 本组件 CSS `z-index` |
## ellipsis
声明来源: `src/ellipsis/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-ellipsis-focus-color` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `outline` |
| `--c-ellipsis-focus-offset` | 公开 | `2px` | 本组件 CSS `outline-offset` |
| `--c-ellipsis-focus-width` | 公开 | `2px` | 本组件 CSS `outline` |
## empty
声明来源: `src/empty/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-empty-description-color` | 公开 | `var(--c-sys-color-content-tertiary)` | 本组件 CSS `color` |
| `--c-empty-description-font-size` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `font-size` |
| `--c-empty-description-line-height` | 公开 | `var(--c-line-height)` | 本组件 CSS `line-height` |
| `--c-empty-extra-margin-top` | 公开 | `var(--c-spacing-5)` | 本组件 CSS `margin-top` |
| `--c-empty-icon-color` | 公开 | `var(--c-sys-color-content-decorative)` | 本组件 CSS `color` |
| `--c-empty-image-margin-bottom` | 公开 | `var(--c-spacing-2)` | 本组件 CSS `margin-bottom` |
| `--c-empty-padding` | 公开 | `var(--c-spacing-5) 0` | 本组件 CSS `padding` |
| `--c-empty-size-lg` | 公开 | `var(--c-size-35)` | 本组件 CSS `font-size`, `height`, `width` |
| `--c-empty-size-md` | 公开 | `var(--c-size-25)` | 本组件 CSS `font-size`, `height`, `width` |
| `--c-empty-size-sm` | 公开 | `var(--c-size-20)` | 本组件 CSS `font-size`, `height`, `width` |
| `--c-empty-size-xl` | 公开 | `var(--c-size-45)` | 本组件 CSS `font-size`, `height`, `width` |
| `--c-empty-size-xs` | 公开 | `var(--c-size-15)` | 本组件 CSS `font-size`, `height`, `width` |
## field-decorator
声明来源: `src/field-decorator/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-field-blur-color` | 公开 | `var(--c-sys-color-content-tertiary)` | 本组件 CSS `border-bottom`, `color` |
| `--c-field-border-radius` | 公开 | `var(--c-border-radius-md)` | 本组件 CSS `border-end-end-radius`, `border-end-start-radius`, `border-radius`, `border-start-end-radius`, `border-start-start-radius` |
| `--c-field-border-width` | 公开 | `1px` | 本组件 CSS `border`, `border-bottom`, `margin-inline-start`, `min-height`, `outline`, `outline-offset`, `padding-inline-start` |
| `--c-field-caret-color` | 公开 | `currentColor` | 跨组件 CSS `caret-color` |
| `--c-field-clear-icon-color` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-field-clear-icon-size` | 公开 | `12px` | 本组件 CSS `font-size` |
| `--c-field-clear-padding` | 公开 | `2px` | 本组件 CSS `padding` |
| `--c-field-clear-radius` | 公开 | `50%` | 本组件 CSS `border-radius` |
| `--c-field-clear-visibility` | 公开 | `hidden` | 本组件 CSS `visibility` |
| `--c-field-content-gap` | 公开 | `8px` | 本组件 CSS `gap`, `padding-inline-end`, `padding-inline-start` |
| `--c-field-content-padding-vertical` | 公开 | `5px` | 本组件 CSS `top` |
| `--c-field-control-text-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-field-control-text-color-disabled` | 公开 | `var(--c-sys-color-content-disabled)` | 本组件 CSS `-webkit-text-fill-color`, `color` |
| `--c-field-error-color` | 公开 | `var(--c-sys-color-status-danger)` | 本组件 CSS `border-bottom-color`, `border-color`, `color` |
| `--c-field-focus-color` | 公开 | `var(--c-sys-color-action-primary)` | 本组件 CSS `border-bottom-color`, `color`, `outline` |
| `--c-field-hint-duration` | 公开 | `0.2s` | 本组件 CSS `transition` |
| `--c-field-hint-scale` | 公开 | `0.75` | 本组件 CSS `font-size`, `top`, `transform` |
| `--c-field-hint-space` | 公开 | `4px` | 本组件 CSS `padding`, `padding-inline-start` |
| `--c-field-icon-size` | 公开 | `14px` | 本组件 CSS `font-size` |
| `--c-field-line-height` | 公开 | `1.5` | 本组件 CSS `line-height`, `top` |
| `--c-field-padding-horizontal` | 公开 | `12px` | 本组件 CSS `left`, `margin-inline-end`, `margin-inline-start`, `max-width`, `padding`, `padding-inline-start`, `padding-left`, `padding-right` |
| `--c-field-placeholder-text-color` | 公开 | `var(--c-sys-color-content-tertiary)` | 本组件 CSS `color` |
| `--c-field-prefix-text-color` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-field-size-lg-font-size` | 公开 | `14px` | 本组件 CSS `font-size` |
| `--c-field-size-lg-height` | 公开 | `36px` | 本组件 CSS `flex`, `height`, `min-height`, `padding` |
| `--c-field-size-md-font-size` | 公开 | `14px` | 本组件 CSS `font-size` |
| `--c-field-size-md-height` | 公开 | `32px` | 本组件 CSS `flex`, `height`, `min-height`, `padding` |
| `--c-field-size-sm-font-size` | 公开 | `14px` | 本组件 CSS `font-size` |
| `--c-field-size-sm-height` | 公开 | `28px` | 本组件 CSS `flex`, `height`, `min-height`, `padding` |
| `--c-field-size-xl-font-size` | 公开 | `16px` | 本组件 CSS `font-size` |
| `--c-field-size-xl-height` | 公开 | `44px` | 本组件 CSS `flex`, `height`, `min-height` |
| `--c-field-size-xs-font-size` | 公开 | `12px` | 本组件 CSS `font-size` |
| `--c-field-size-xs-height` | 公开 | `24px` | 本组件 CSS `flex`, `height`, `min-height`, `padding` |
| `--c-field-suffix-text-color` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-field-variant-filled-background` | 公开 | `var(--c-sys-color-surface-muted)` | 本组件 CSS `background` |
| `--c-field-variant-filled-background-disabled` | 公开 | `var(--c-color-fill-2)` | 本组件 CSS `background` |
| `--c-field-variant-filled-background-error` | 公开 | `var(--c-color-danger-light-1)` | 本组件 CSS `background` |
| `--c-field-variant-filled-background-focus` | 公开 | `var(--c-color-fill-3)` | 本组件 CSS `background` |
| `--c-field-variant-filled-background-hover` | 公开 | `var(--c-sys-color-state-hover)` | 本组件 CSS `background` |
| `--c-field-variant-outline-background` | 公开 | `transparent` | 本组件 CSS `background` |
| `--c-field-variant-outline-border-color` | 公开 | `var(--c-sys-color-border-default)` | 本组件 CSS `border`, `border-color` |
| `--c-field-variant-outline-border-color-disabled` | 公开 | `var(--c-sys-color-border-subtle)` | 本组件 CSS `border-color` |
| `--c-field-variant-outline-border-color-error` | 公开 | `var(--c-sys-color-status-danger)` | 本组件 CSS `border-color` |
| `--c-field-variant-outline-border-color-focus` | 公开 | `var(--c-sys-color-action-primary)` | 本组件 CSS `border-color` |
| `--c-field-variant-outline-border-color-hover` | 公开 | `var(--c-sys-color-border-strong)` | 本组件 CSS `border-color` |
| `--c-field-variant-standard-line-color` | 公开 | `var(--c-field-blur-color)` | 本组件 CSS `border-bottom` |
| `--c-field-variant-standard-line-color-disabled` | 公开 | `var(--c-sys-color-border-subtle)` | 本组件 CSS `border-bottom-color` |
| `--c-field-variant-standard-line-color-error` | 公开 | `var(--c-field-error-color)` | 本组件 CSS `border-bottom-color` |
| `--c-field-variant-standard-line-color-focus` | 公开 | `var(--c-field-focus-color)` | 本组件 CSS `border-bottom-color` |
| `--c-field-variant-standard-line-size` | 公开 | `1px` | 本组件 CSS `border-bottom` |
| `--c-field-variant-standard-line-size-focus` | 公开 | `2px` | 本组件 CSS `border-bottom-width` |
| `--c-search-color-icon` | 公开 | `var(--c-color-text-2)` | 跨组件 CSS `color` |
| `--c-search-size-icon` | 公开 | `14px` | 跨组件 CSS `font-size` |
## filter-form
声明来源: `src/filter-form/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-filter-form-action-offset` | 公开 | `calc(1em * var(--c-form-line-height) + var(--c-form-vertical-label-margin-bottom))` | 本组件 CSS `padding-top` |
| `--c-filter-form-actions-gap` | 公开 | `var(--c-sys-space-5)` | 本组件 CSS `gap` |
| `--c-filter-form-background-color` | 公开 | `var(--c-sys-color-surface-default)` | 本组件 CSS `background-color` |
| `--c-filter-form-border-color` | 公开 | `var(--c-sys-color-border-subtle)` | 本组件 CSS `border` |
| `--c-filter-form-border-radius` | 公开 | `var(--c-border-radius-md)` | 本组件 CSS `border-radius` |
| `--c-filter-form-border-width` | 公开 | `1px` | 本组件 CSS `border` |
| `--c-filter-form-collapse-color` | 公开 | `var(--c-color-text-2)` | 本组件 CSS `color` |
| `--c-filter-form-collapse-gap` | 公开 | `4px` | 本组件 CSS `gap` |
| `--c-filter-form-collapse-hover-color` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `color`, `outline` |
| `--c-filter-form-focus-offset` | 公开 | `3px` | 本组件 CSS `outline-offset` |
| `--c-filter-form-focus-width` | 公开 | `2px` | 本组件 CSS `outline` |
| `--c-filter-form-item-margin-bottom` | 公开 | `0px` | 本组件 CSS `margin-bottom` |
| `--c-filter-form-padding` | 公开 | `var(--c-sys-space-7)` | 本组件 CSS `padding` |
## form
声明来源: `src/form/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-form-error-text-font-size` | 公开 | `var(--c-font-size-body-1)` | 本组件 CSS `font-size` |
| `--c-form-extra-margin-bottom` | 公开 | `var(--c-spacing-2)` | 本组件 CSS `margin-bottom` |
| `--c-form-extra-margin-top` | 公开 | `var(--c-spacing-2)` | 本组件 CSS `margin-top` |
| `--c-form-extra-text-color` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-form-extra-text-font-size` | 公开 | `var(--c-font-size-body-1)` | 本组件 CSS `font-size` |
| `--c-form-feedback-icon-font-size` | 公开 | `14px` | 本组件 CSS `font-size` |
| `--c-form-feedback-icon-right` | 公开 | `9px` | 本组件 CSS `right` |
| `--c-form-feedback-loading-font-size` | 公开 | `12px` | 本组件 CSS `font-size` |
| `--c-form-has-feedback-control-padding-right` | 公开 | `28px` | 本组件 CSS `padding-right` |
| `--c-form-inline-item-margin-bottom` | 公开 | `var(--c-spacing-4)` | 本组件 CSS `margin-bottom` |
| `--c-form-inline-item-margin-right` | 公开 | `var(--c-spacing-9)` | 本组件 CSS `margin-right` |
| `--c-form-label-margin-right` | 公开 | `var(--c-spacing-7)` | 本组件 CSS `padding-right` |
| `--c-form-label-text-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-form-line-height` | 公开 | `var(--c-line-height)` | 本组件 CSS `line-height`, `padding-top` |
| `--c-form-required-symbol-color` | 公开 | `var(--c-sys-color-content-danger)` | 本组件 CSS `color` |
| `--c-form-required-symbol-font-size` | 公开 | `var(--c-font-size-body-1)` | 本组件 CSS `font-size` |
| `--c-form-size-lg-height` | 公开 | `var(--c-size-lg)` | 本组件 CSS `line-height`, `min-height` |
| `--c-form-size-lg-item-margin-bottom` | 公开 | `var(--c-spacing-8)` | 本组件 CSS `line-height`, `margin-bottom`, `min-height` |
| `--c-form-size-lg-label-font-size` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `font-size` |
| `--c-form-size-md-height` | 公开 | `var(--c-size-md)` | 本组件 CSS `line-height`, `min-height` |
| `--c-form-size-md-item-margin-bottom` | 公开 | `var(--c-spacing-8)` | 本组件 CSS `line-height`, `margin-bottom`, `min-height` |
| `--c-form-size-md-label-font-size` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `font-size` |
| `--c-form-size-sm-height` | 公开 | `var(--c-size-sm)` | 本组件 CSS `line-height`, `min-height` |
| `--c-form-size-sm-item-margin-bottom` | 公开 | `var(--c-spacing-8)` | 本组件 CSS `line-height`, `margin-bottom`, `min-height` |
| `--c-form-size-sm-label-font-size` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `font-size` |
| `--c-form-size-xl-height` | 公开 | `var(--c-size-xl)` | 本组件 CSS `line-height`, `min-height` |
| `--c-form-size-xl-item-margin-bottom` | 公开 | `var(--c-spacing-8)` | 本组件 CSS `line-height`, `margin-bottom`, `min-height` |
| `--c-form-size-xl-label-font-size` | 公开 | `var(--c-sys-font-size-lg)` | 本组件 CSS `font-size` |
| `--c-form-size-xs-height` | 公开 | `var(--c-size-xs)` | 本组件 CSS `line-height`, `min-height` |
| `--c-form-size-xs-item-margin-bottom` | 公开 | `var(--c-spacing-7)` | 本组件 CSS `line-height`, `margin-bottom`, `min-height` |
| `--c-form-size-xs-label-font-size` | 公开 | `var(--c-font-size-body-1)` | 本组件 CSS `font-size` |
| `--c-form-status-error-bg` | 公开 | `var(--c-color-danger-light-1)` | 本组件 CSS `background-color` |
| `--c-form-status-error-border-color` | 公开 | `transparent` | 本组件 CSS `border-color` |
| `--c-form-status-error-focus-bg` | 公开 | `var(--c-color-bg-2)` | 本组件 CSS `background-color` |
| `--c-form-status-error-focus-border-color` | 公开 | `var(--c-sys-color-content-danger)` | 本组件 CSS `border-color` |
| `--c-form-status-error-focus-shadow-color` | 公开 | `var(--c-color-danger-light-2)` | 本组件 CSS `box-shadow` |
| `--c-form-status-error-focus-shadow-size` | 公开 | `var(--c-shadow-distance-none)` | 本组件 CSS `box-shadow` |
| `--c-form-status-error-hover-bg` | 公开 | `var(--c-color-danger-light-2)` | 本组件 CSS `background-color` |
| `--c-form-status-error-hover-border-color` | 公开 | `transparent` | 本组件 CSS `border-color` |
| `--c-form-status-error-tip-icon-color` | 公开 | `var(--c-sys-color-content-danger)` | 本组件 CSS `color` |
| `--c-form-status-error-tip-text-color` | 公开 | `var(--c-sys-color-content-danger)` | 本组件 CSS `color` |
| `--c-form-status-success-bg` | 公开 | `var(--c-color-fill-2)` | 本组件 CSS `background-color` |
| `--c-form-status-success-border-color` | 公开 | `transparent` | 本组件 CSS `border-color` |
| `--c-form-status-success-focus-bg` | 公开 | `var(--c-color-bg-2)` | 本组件 CSS `background-color` |
| `--c-form-status-success-focus-border-color` | 公开 | `var(--c-sys-color-content-success)` | 本组件 CSS `border-color` |
| `--c-form-status-success-focus-shadow-color` | 公开 | `var(--c-color-success-light-2)` | 本组件 CSS `box-shadow` |
| `--c-form-status-success-focus-shadow-size` | 公开 | `var(--c-shadow-distance-none)` | 本组件 CSS `box-shadow` |
| `--c-form-status-success-hover-bg` | 公开 | `var(--c-color-fill-3)` | 本组件 CSS `background-color` |
| `--c-form-status-success-hover-border-color` | 公开 | `transparent` | 本组件 CSS `border-color` |
| `--c-form-status-success-tip-icon-color` | 公开 | `var(--c-sys-color-content-success)` | 本组件 CSS `color` |
| `--c-form-status-success-tip-text-color` | 公开 | `var(--c-sys-color-content-success)` | 本组件 CSS `color` |
| `--c-form-status-validating-bg` | 公开 | `var(--c-color-fill-2)` | 本组件 CSS `background-color` |
| `--c-form-status-validating-border-color` | 公开 | `transparent` | 本组件 CSS `border-color` |
| `--c-form-status-validating-focus-bg` | 公开 | `var(--c-color-bg-2)` | 本组件 CSS `background-color` |
| `--c-form-status-validating-focus-border-color` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `border-color` |
| `--c-form-status-validating-focus-shadow-color` | 公开 | `var(--c-color-primary-light-2)` | 本组件 CSS `box-shadow` |
| `--c-form-status-validating-focus-shadow-size` | 公开 | `var(--c-shadow-distance-none)` | 本组件 CSS `box-shadow` |
| `--c-form-status-validating-hover-bg` | 公开 | `var(--c-color-fill-3)` | 本组件 CSS `background-color` |
| `--c-form-status-validating-hover-border-color` | 公开 | `transparent` | 本组件 CSS `border-color` |
| `--c-form-status-validating-tip-icon-color` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `color` |
| `--c-form-status-validating-tip-text-color` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `color` |
| `--c-form-status-warning-bg` | 公开 | `var(--c-color-warning-light-1)` | 本组件 CSS `background-color` |
| `--c-form-status-warning-border-color` | 公开 | `transparent` | 本组件 CSS `border-color` |
| `--c-form-status-warning-focus-bg` | 公开 | `var(--c-color-bg-2)` | 本组件 CSS `background-color` |
| `--c-form-status-warning-focus-border-color` | 公开 | `var(--c-sys-color-content-warning)` | 本组件 CSS `border-color` |
| `--c-form-status-warning-focus-shadow-color` | 公开 | `var(--c-color-warning-light-2)` | 本组件 CSS `box-shadow` |
| `--c-form-status-warning-focus-shadow-size` | 公开 | `var(--c-shadow-distance-none)` | 本组件 CSS `box-shadow` |
| `--c-form-status-warning-hover-bg` | 公开 | `var(--c-color-warning-light-2)` | 本组件 CSS `background-color` |
| `--c-form-status-warning-hover-border-color` | 公开 | `transparent` | 本组件 CSS `border-color` |
| `--c-form-status-warning-tip-icon-color` | 公开 | `var(--c-sys-color-content-warning)` | 本组件 CSS `color` |
| `--c-form-status-warning-tip-text-color` | 公开 | `var(--c-sys-color-content-warning)` | 本组件 CSS `color` |
| `--c-form-tooltip-margin-left` | 公开 | `var(--c-sys-space-2)` | 本组件 CSS `margin-inline-start` |
| `--c-form-tooltip-text-color` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-form-transition-duration-3` | 公开 | `var(--c-transition-duration-3)` | 本组件 CSS `transition` |
| `--c-form-transition-duration-5` | 公开 | `var(--c-transition-duration-5)` | 本组件 CSS `animation` |
| `--c-form-transition-timing-function-linear` | 公开 | `var(--c-transition-timing-function-linear)` | 本组件 CSS `animation`, `transition` |
| `--c-form-vertical-label-margin-bottom` | 公开 | `var(--c-spacing-4)` | 本组件 CSS `margin-bottom`, `padding-top` |
## hover
声明来源: `src/hover/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-hover-overlay-focusing-opacity` | 公开 | `0.12` | 本组件 CSS `opacity` |
| `--c-hover-overlay-opacity` | 公开 | `0.04` | 本组件 CSS `opacity` |
| `--c-hover-transition-duration` | 公开 | `var(--c-sys-motion-duration-fast)` | 本组件 CSS `transition` |
## icon
声明来源: `src/icon/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-icon-size` | 公开 | `inherit` | 本组件 CSS `font-size` |
| `--c-icon-spin-duration` | 公开 | `1s` | 本组件 CSS `animation` |
## image
声明来源: `src/image/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-image-border-radius` | 公开 | `var(--c-border-radius-sm)` | 本组件 CSS `border-radius` |
| `--c-image-description-footer-inner-text-color` | 公开 | `var(--c-color-white)` | 本组件 CSS `color` |
| `--c-image-description-footer-outer-text-color` | 公开 | `var(--c-color-neutral-6)` | 本组件 CSS `color` |
| `--c-image-error-bg` | 公开 | `var(--c-color-neutral-1)` | 本组件 CSS `background-color` |
| `--c-image-error-text-color` | 公开 | `var(--c-color-neutral-4)` | 本组件 CSS `color` |
| `--c-image-font-size-description` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `font-size` |
| `--c-image-font-size-error-icon` | 公开 | `60px` | 本组件 CSS `height`, `width` |
| `--c-image-font-size-error-text` | 公开 | `var(--c-font-size-body-1)` | 本组件 CSS `font-size` |
| `--c-image-font-size-loader-spin` | 公开 | `32px` | 本组件 CSS `font-size` |
| `--c-image-font-size-loader-spin-text` | 公开 | `var(--c-font-size-title-1)` | 本组件 CSS `font-size` |
| `--c-image-font-size-title` | 公开 | `var(--c-font-size-title-1)` | 本组件 CSS `font-size` |
| `--c-image-font-weight-title` | 公开 | `var(--c-font-weight-500)` | 本组件 CSS `font-weight` |
| `--c-image-footer-inner-bg` | 公开 | `linear-gradient(360deg, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0) 100%)` | 本组件 CSS `background` |
| `--c-image-footer-inner-text-color` | 公开 | `var(--c-color-white)` | 本组件 CSS `color` |
| `--c-image-footer-outer-text-color` | 公开 | `var(--c-color-neutral-8)` | 本组件 CSS `color` |
| `--c-image-line-height-error-text` | 公开 | `1.6667` | 本组件 CSS `line-height` |
| `--c-image-loader-bg` | 公开 | `var(--c-color-neutral-1)` | 本组件 CSS `background-color` |
| `--c-image-loader-spin-text-color` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `color` |
| `--c-image-loader-spin-text-text-color` | 公开 | `var(--c-color-neutral-6)` | 本组件 CSS `color` |
| `--c-image-padding-footer-inner-horizontal` | 公开 | `16px` | 本组件 CSS `padding` |
| `--c-image-padding-footer-inner-vertical` | 公开 | `9px` | 本组件 CSS `padding` |
| `--c-image-preview-arrow-bg` | 公开 | `rgba(255, 255, 255, 0.3)` | 本组件 CSS `background-color` |
| `--c-image-preview-arrow-bg-disabled` | 公开 | `rgba(255, 255, 255, 0.2)` | 本组件 CSS `background-color` |
| `--c-image-preview-arrow-bg-hover` | 公开 | `rgba(255, 255, 255, 0.5)` | 本组件 CSS `background-color` |
| `--c-image-preview-arrow-font-size` | 公开 | `var(--c-size-4)` | 本组件 CSS `font-size` |
| `--c-image-preview-arrow-icon-color` | 公开 | `var(--c-color-white)` | 本组件 CSS `color` |
| `--c-image-preview-arrow-icon-color-disabled` | 公开 | `rgba(255, 255, 255, 0.3)` | 本组件 CSS `color` |
| `--c-image-preview-arrow-position` | 公开 | `var(--c-spacing-8)` | 本组件 CSS `left`, `right` |
| `--c-image-preview-arrow-size` | 公开 | `var(--c-size-8)` | 本组件 CSS `height`, `width` |
| `--c-image-preview-border-radius-action` | 公开 | `var(--c-border-radius-sm)` | 本组件 CSS `border-radius` |
| `--c-image-preview-border-radius-loading` | 公开 | `var(--c-border-radius-md)` | 本组件 CSS `border-radius` |
| `--c-image-preview-border-radius-toolbar` | 公开 | `var(--c-border-radius-md)` | 本组件 CSS `border-radius` |
| `--c-image-preview-color-action-bg` | 公开 | `transparent` | 本组件 CSS `background-color` |
| `--c-image-preview-color-action-disabled-bg` | 公开 | `transparent` | 本组件 CSS `background-color` |
| `--c-image-preview-color-action-disabled-text` | 公开 | `var(--c-color-text-4)` | 本组件 CSS `color` |
| `--c-image-preview-color-action-hover-bg` | 公开 | `var(--c-color-neutral-2)` | 本组件 CSS `background-color` |
| `--c-image-preview-color-action-hover-text` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `color` |
| `--c-image-preview-color-action-text` | 公开 | `var(--c-color-neutral-8)` | 本组件 CSS `color` |
| `--c-image-preview-color-close-btn-bg` | 公开 | `rgba(0, 0, 0, 0.5)` | 本组件 CSS `background` |
| `--c-image-preview-color-close-btn-text` | 公开 | `var(--c-color-white)` | 本组件 CSS `color` |
| `--c-image-preview-color-loading-bg` | 公开 | `#232324` | 本组件 CSS `background-color` |
| `--c-image-preview-color-loading-text` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `color` |
| `--c-image-preview-color-scale-value-text` | 公开 | `var(--c-color-white)` | 本组件 CSS `color` |
| `--c-image-preview-color-toolbar-bg` | 公开 | `var(--c-color-bg-2)` | 本组件 CSS `background-color` |
| `--c-image-preview-font-size-action` | 公开 | `14px` | 本组件 CSS `font-size` |
| `--c-image-preview-font-size-loading` | 公开 | `18px` | 本组件 CSS `font-size` |
| `--c-image-preview-margin-action-right` | 公开 | `var(--c-spacing-none)` | 本组件 CSS `margin-right` |
| `--c-image-preview-overlay-bg` | 公开 | `var(--c-color-overlay-bg)` | 跨组件 CSS `background-color` |
| `--c-image-preview-padding-action-content` | 公开 | `13px` | 本组件 CSS `padding` |
| `--c-image-preview-position-close-btn-right` | 公开 | `36px` | 本组件 CSS `right` |
| `--c-image-preview-position-close-btn-top` | 公开 | `36px` | 本组件 CSS `top` |
| `--c-image-preview-position-toolbar-bottom` | 公开 | `46px` | 本组件 CSS `bottom` |
| `--c-image-preview-size-close-btn-width` | 公开 | `32px` | 本组件 CSS `height`, `line-height`, `width` |
| `--c-image-preview-size-close-icon` | 公开 | `14px` | 本组件 CSS `font-size` |
| `--c-image-preview-size-loading-height` | 公开 | `48px` | 本组件 CSS `height` |
| `--c-image-preview-size-loading-width` | 公开 | `48px` | 本组件 CSS `width` |
| `--c-image-preview-spacing-loading-padding` | 公开 | `var(--c-spacing-5)` | 本组件 CSS `padding` |
| `--c-image-preview-spacing-toolbar-horizontal` | 公开 | `var(--c-spacing-7)` | 本组件 CSS `padding` |
| `--c-image-preview-spacing-toolbar-vertical` | 公开 | `var(--c-spacing-2)` | 本组件 CSS `padding` |
| `--c-image-spacing-actions-left` | 公开 | `var(--c-spacing-6)` | 本组件 CSS `padding-left` |
| `--c-image-spacing-error-padding` | 公开 | `var(--c-spacing-7)` | 本组件 CSS `padding` |
| `--c-image-spacing-footer-top` | 公开 | `var(--c-spacing-2)` | 本组件 CSS `margin-top` |
| `--c-image-title-text-color-footer-inner` | 公开 | `var(--c-color-white)` | 本组件 CSS `color` |
| `--c-image-title-text-color-footer-outer` | 公开 | `var(--c-color-text-1)` | 本组件 CSS `color` |
## infinite-scroll
声明来源: `src/infinite-scroll/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-infinite-scroll-error-color` | 公开 | `var(--c-sys-color-content-danger)` | 本组件 CSS `color` |
| `--c-infinite-scroll-loading-gap` | 公开 | `8px` | 本组件 CSS `gap` |
| `--c-infinite-scroll-status-color` | 公开 | `var(--c-color-text-3)` | 本组件 CSS `color` |
| `--c-infinite-scroll-status-font-size` | 公开 | `var(--c-font-size-md)` | 本组件 CSS `font-size` |
| `--c-infinite-scroll-status-min-height` | 公开 | `50px` | 本组件 CSS `min-height` |
| `--c-infinite-scroll-status-padding` | 公开 | `12px 0` | 本组件 CSS `padding` |
## input
声明来源: `src/input/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-input-caret-color` | 公开 | `var(--c-field-caret-color)` | 本组件 CSS `caret-color` |
| `--c-input-control-font-size` | 公开 | `inherit` | 本组件 CSS `font-size` |
| `--c-input-control-height` | 公开 | `auto` | 本组件 CSS `height` |
| `--c-input-control-line-height` | 公开 | `inherit` | 本组件 CSS `line-height` |
| `--c-input-control-padding-horizontal` | 公开 | `0` | 本组件 CSS `padding` |
| `--c-input-counter-color` | 公开 | `var(--c-field-suffix-text-color)` | 本组件 CSS `color` |
| `--c-input-counter-font-size` | 公开 | `12px` | 本组件 CSS `font-size` |
| `--c-input-feedback-duration` | 公开 | `1s` | 本组件 CSS `animation` |
| `--c-input-feedback-error-color` | 公开 | `var(--c-sys-color-content-danger)` | 本组件 CSS `color` |
| `--c-input-feedback-success-color` | 公开 | `var(--c-sys-color-content-success)` | 本组件 CSS `color` |
| `--c-input-feedback-validating-color` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `color` |
| `--c-input-feedback-warning-color` | 公开 | `var(--c-sys-color-content-warning)` | 本组件 CSS `color` |
## input-number
声明来源: `src/input-number/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-input-number-addon-background` | 公开 | `var(--c-sys-color-surface-muted)` | 本组件 CSS `background` |
| `--c-input-number-addon-border-color` | 公开 | `var(--c-sys-color-border-default)` | 本组件 CSS `border` |
| `--c-input-number-addon-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-input-number-border-radius` | 公开 | `var(--c-field-border-radius)` | 本组件 CSS `border-end-end-radius`, `border-end-start-radius`, `border-start-end-radius`, `border-start-start-radius` |
| `--c-input-number-border-width` | 公开 | `1px` | 本组件 CSS `border`, `border-inline-end`, `border-inline-start`, `border-top`, `outline`, `outline-offset` |
| `--c-input-number-caret-color` | 公开 | `var(--c-field-caret-color)` | 本组件 CSS `caret-color` |
| `--c-input-number-size-lg-step-button-width` | 公开 | `var(--c-sys-control-height-lg)` | 本组件 CSS `width` |
| `--c-input-number-size-md-step-button-width` | 公开 | `var(--c-sys-control-height-md)` | 本组件 CSS `width` |
| `--c-input-number-size-sm-step-button-width` | 公开 | `var(--c-sys-control-height-sm)` | 本组件 CSS `width` |
| `--c-input-number-size-xl-step-button-width` | 公开 | `var(--c-sys-control-height-xl)` | 本组件 CSS `width` |
| `--c-input-number-size-xs-step-button-width` | 公开 | `var(--c-sys-control-height-xs)` | 本组件 CSS `width` |
| `--c-input-number-step-button-active-background` | 公开 | `var(--c-sys-color-state-selected)` | 本组件 CSS `background` |
| `--c-input-number-step-button-background` | 公开 | `var(--c-sys-color-surface-muted)` | 本组件 CSS `background` |
| `--c-input-number-step-button-border-color` | 公开 | `var(--c-sys-color-border-subtle)` | 本组件 CSS `border-inline-end`, `border-inline-start`, `border-top` |
| `--c-input-number-step-button-color` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-input-number-step-button-disabled-color` | 公开 | `var(--c-sys-color-content-disabled)` | 本组件 CSS `color` |
| `--c-input-number-step-button-hover-background` | 公开 | `var(--c-sys-color-state-hover)` | 本组件 CSS `background` |
| `--c-input-number-step-button-icon-size` | 公开 | `14px` | 本组件 CSS `font-size` |
| `--c-input-number-step-button-transition-duration` | 公开 | `0.2s` | 本组件 CSS `transition` |
| `--c-input-number-step-button-width` | 公开 | `var(--c-sys-control-height-md)` | 本组件 CSS `width` |
## input-tag
声明来源: `src/input-tag/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-input-tag-color-text-default` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-input-tag-color-text-disabled` | 公开 | `var(--c-sys-color-content-disabled)` | 本组件 CSS `color` |
| `--c-input-tag-padding-x` | 公开 | `4px` | 本组件 CSS `padding-left`, `padding-right` |
| `--c-input-tag-size-lg-font-size` | 公开 | `14px` | 本组件 CSS `font-size` |
| `--c-input-tag-size-lg-padding-y` | 公开 | `2px` | 本组件 CSS `padding-bottom`, `padding-top` |
| `--c-input-tag-size-lg-tag-height` | 公开 | `28px` | 本组件 CSS `line-height`, `min-height` |
| `--c-input-tag-size-md-font-size` | 公开 | `14px` | 本组件 CSS `font-size` |
| `--c-input-tag-size-md-padding-y` | 公开 | `2px` | 本组件 CSS `padding-bottom`, `padding-top` |
| `--c-input-tag-size-md-tag-height` | 公开 | `24px` | 本组件 CSS `line-height`, `min-height` |
| `--c-input-tag-size-sm-font-size` | 公开 | `14px` | 本组件 CSS `font-size` |
| `--c-input-tag-size-sm-padding-y` | 公开 | `2px` | 本组件 CSS `padding-bottom`, `padding-top` |
| `--c-input-tag-size-sm-tag-height` | 公开 | `20px` | 本组件 CSS `line-height`, `min-height` |
| `--c-input-tag-size-xl-font-size` | 公开 | `16px` | 本组件 CSS `font-size` |
| `--c-input-tag-size-xl-padding-y` | 公开 | `4px` | 本组件 CSS `padding-bottom`, `padding-top` |
| `--c-input-tag-size-xl-tag-height` | 公开 | `32px` | 本组件 CSS `line-height`, `min-height` |
| `--c-input-tag-size-xs-font-size` | 公开 | `12px` | 本组件 CSS `font-size` |
| `--c-input-tag-size-xs-padding-y` | 公开 | `0px` | 本组件 CSS `padding-bottom`, `padding-top` |
| `--c-input-tag-size-xs-tag-height` | 公开 | `20px` | 本组件 CSS `line-height`, `min-height` |
| `--c-input-tag-tag-color-bg` | 公开 | `var(--c-sys-color-surface-default)` | 本组件 CSS `background-color` |
| `--c-input-tag-tag-color-bg-disabled` | 公开 | `var(--c-sys-color-state-hover)` | 本组件 CSS `background-color` |
| `--c-input-tag-tag-color-bg-focus` | 公开 | `var(--c-sys-color-state-hover)` | 本组件 CSS `background-color` |
| `--c-input-tag-tag-color-border` | 公开 | `var(--c-color-fill-3)` | 本组件 CSS `border-color` |
| `--c-input-tag-tag-color-border-disabled` | 公开 | `var(--c-color-fill-3)` | 本组件 CSS `border-color` |
| `--c-input-tag-tag-color-border-focus` | 公开 | `var(--c-sys-color-state-hover)` | 本组件 CSS `border-color` |
| `--c-input-tag-tag-font-size` | 公开 | `12px` | 本组件 CSS `font-size` |
| `--c-input-tag-tag-margin-right` | 公开 | `4px` | 本组件 CSS `margin-right` |
| `--c-input-tag-tag-margin-y` | 公开 | `2px` | 本组件 CSS `margin-bottom`, `margin-top` |
## layout
声明来源: `src/layout/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-layout-border-color` | 公开 | `var(--c-color-border-2)` | 本组件 CSS `border-bottom`, `border-left`, `border-right`, `border-top` |
| `--c-layout-focus-color` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `outline` |
| `--c-layout-font-color` | 公开 | `var(--c-color-text-1)` | 本组件 CSS `color` |
| `--c-layout-font-color-dark` | 公开 | `var(--c-color-white)` | 本组件 CSS `color` |
| `--c-layout-sider-background` | 公开 | `var(--c-color-menu-dark-bg)` | 本组件 CSS `background` |
| `--c-layout-sider-background-light` | 公开 | `var(--c-color-bg-2)` | 本组件 CSS `background` |
| `--c-layout-sider-light-box-shadow` | 公开 | `0 2px 5px 0 rgba(0, 0, 0, 0.08)` | 本组件 CSS `box-shadow` |
| `--c-layout-trigger-dark-color` | 公开 | `rgba(255, 255, 255, 0.2)` | 本组件 CSS `background` |
| `--c-layout-trigger-height` | 公开 | `var(--c-size-12)` | 本组件 CSS `height`, `padding-bottom`, `width` |
| `--c-layout-trigger-light-border-color` | 公开 | `var(--c-color-bg-5)` | 本组件 CSS `border-top` |
## link
声明来源: `src/link/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-link-bg-active` | 公开 | `var(--c-color-fill-3)` | 本组件 CSS `background-color` |
| `--c-link-bg-hover` | 公开 | `var(--c-color-fill-2)` | 本组件 CSS `background-color` |
| `--c-link-border-radius` | 公开 | `var(--c-sys-radius-sm)` | 本组件 CSS `border-radius` |
| `--c-link-focus-color` | 公开 | `currentColor` | 本组件 CSS `outline` |
| `--c-link-focus-offset` | 公开 | `2px` | 本组件 CSS `outline-offset` |
| `--c-link-focus-opacity` | 公开 | `0.8` | 本组件 CSS `opacity` |
| `--c-link-focus-width` | 公开 | `2px` | 本组件 CSS `outline` |
| `--c-link-font-size` | 公开 | `var(--c-sys-font-size-md)` | 本组件 CSS `font-size` |
| `--c-link-line-height` | 公开 | `var(--c-line-height)` | 本组件 CSS `line-height` |
| `--c-link-margin-icon-right` | 公开 | `var(--c-spacing-3)` | 本组件 CSS `margin-right` |
| `--c-link-padding-horizontal` | 公开 | `var(--c-spacing-2)` | 本组件 CSS `padding` |
| `--c-link-padding-vertical` | 公开 | `1px` | 本组件 CSS `padding` |
| `--c-link-size-icon` | 公开 | `1em` | 本组件 CSS `font-size` |
| `--c-link-size-lg-font-size` | 公开 | `var(--c-sys-font-size-lg)` | 本组件 CSS `font-size` |
| `--c-link-size-md-font-size` | 公开 | `var(--c-link-font-size)` | 本组件 CSS `font-size` |
| `--c-link-size-sm-font-size` | 公开 | `var(--c-sys-font-size-sm)` | 本组件 CSS `font-size` |
| `--c-link-size-xl-font-size` | 公开 | `var(--c-sys-font-size-xl)` | 本组件 CSS `font-size` |
| `--c-link-size-xs-font-size` | 公开 | `var(--c-sys-font-size-xs)` | 本组件 CSS `font-size` |
| `--c-link-spin-duration` | 公开 | `1s` | 本组件 CSS `animation` |
| `--c-link-text-color` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `color` |
| `--c-link-text-color-active` | 公开 | `var(--c-link-text-color)` | 本组件 CSS `color` |
| `--c-link-text-color-default` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-link-text-color-disabled` | 公开 | `var(--c-sys-color-content-disabled)` | 本组件 CSS `color` |
| `--c-link-text-color-error` | 公开 | `var(--c-sys-color-content-danger)` | 本组件 CSS `color` |
| `--c-link-text-color-error-active` | 公开 | `var(--c-link-text-color-error)` | 本组件 CSS `color` |
| `--c-link-text-color-error-disabled` | 公开 | `var(--c-sys-color-content-disabled)` | 本组件 CSS `color` |
| `--c-link-text-color-error-hover` | 公开 | `var(--c-link-text-color-error)` | 本组件 CSS `color` |
| `--c-link-text-color-error-loading` | 公开 | `var(--c-sys-color-content-disabled)` | 本组件 CSS `color` |
| `--c-link-text-color-hover` | 公开 | `var(--c-link-text-color)` | 本组件 CSS `color` |
| `--c-link-text-color-info` | 公开 | `var(--c-sys-color-content-info)` | 本组件 CSS `color` |
| `--c-link-text-color-loading` | 公开 | `var(--c-sys-color-content-disabled)` | 本组件 CSS `color` |
| `--c-link-text-color-primary` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `color` |
| `--c-link-text-color-secondary` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-link-text-color-success` | 公开 | `var(--c-sys-color-content-success)` | 本组件 CSS `color` |
| `--c-link-text-color-success-active` | 公开 | `var(--c-link-text-color-success)` | 本组件 CSS `color` |
| `--c-link-text-color-success-disabled` | 公开 | `var(--c-sys-color-content-disabled)` | 本组件 CSS `color` |
| `--c-link-text-color-success-hover` | 公开 | `var(--c-link-text-color-success)` | 本组件 CSS `color` |
| `--c-link-text-color-success-loading` | 公开 | `var(--c-sys-color-content-disabled)` | 本组件 CSS `color` |
| `--c-link-text-color-tertiary` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-link-text-color-warning` | 公开 | `var(--c-sys-color-content-warning)` | 本组件 CSS `color` |
| `--c-link-text-color-warning-active` | 公开 | `var(--c-link-text-color-warning)` | 本组件 CSS `color` |
| `--c-link-text-color-warning-disabled` | 公开 | `var(--c-sys-color-content-disabled)` | 本组件 CSS `color` |
| `--c-link-text-color-warning-hover` | 公开 | `var(--c-link-text-color-warning)` | 本组件 CSS `color` |
| `--c-link-text-color-warning-loading` | 公开 | `var(--c-sys-color-content-disabled)` | 本组件 CSS `color` |
| `--c-link-transition-duration` | 公开 | `0.15s` | 本组件 CSS `transition` |
## list
声明来源: `src/list/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-list-background` | 公开 | `transparent` | 本组件 CSS `background` |
| `--c-list-border-color` | 公开 | `var(--c-color-neutral-3)` | 本组件 CSS `border`, `border-bottom`, `border-top` |
| `--c-list-border-radius` | 公开 | `var(--c-border-radius-md)` | 本组件 CSS `border-radius` |
| `--c-list-border-width` | 公开 | `1px` | 本组件 CSS `border`, `border-bottom`, `border-top` |
| `--c-list-empty-color` | 公开 | `var(--c-list-text-color)` | 本组件 CSS `color` |
| `--c-list-empty-padding` | 公开 | `16px` | 本组件 CSS `padding` |
| `--c-list-font-size` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `font-size` |
| `--c-list-font-size-header` | 公开 | `var(--c-font-size-title-1)` | 本组件 CSS `font-size` |
| `--c-list-font-weight-header` | 公开 | `var(--c-font-weight-500)` | 本组件 CSS `font-weight` |
| `--c-list-item-prefix-margin-right` | 公开 | `var(--c-spacing-8)` | 本组件 CSS `margin-right` |
| `--c-list-item-suffix-margin-left` | 公开 | `var(--c-spacing-8)` | 本组件 CSS `margin-left` |
| `--c-list-line-height` | 公开 | `var(--c-line-height)` | 本组件 CSS `line-height` |
| `--c-list-line-height-header` | 公开 | `1.5` | 本组件 CSS `line-height` |
| `--c-list-loading-padding` | 公开 | `0px` | 本组件 CSS `padding` |
| `--c-list-size-lg-padding-horizontal-footer` | 公开 | `var(--c-list-size-lg-padding-horizontal-item)` | 本组件 CSS `padding` |
| `--c-list-size-lg-padding-horizontal-header` | 公开 | `var(--c-spacing-8)` | 本组件 CSS `padding` |
| `--c-list-size-lg-padding-horizontal-item` | 公开 | `var(--c-spacing-8)` | 本组件 CSS `padding` |
| `--c-list-size-lg-padding-vertical-footer` | 公开 | `var(--c-list-size-lg-padding-vertical-item)` | 本组件 CSS `padding` |
| `--c-list-size-lg-padding-vertical-header` | 公开 | `var(--c-spacing-7)` | 本组件 CSS `padding` |
| `--c-list-size-lg-padding-vertical-item` | 公开 | `17px` | 本组件 CSS `padding` |
| `--c-list-size-md-padding-horizontal-footer` | 公开 | `var(--c-list-size-md-padding-horizontal-item)` | 本组件 CSS `padding` |
| `--c-list-size-md-padding-horizontal-header` | 公开 | `var(--c-spacing-8)` | 本组件 CSS `padding` |
| `--c-list-size-md-padding-horizontal-item` | 公开 | `var(--c-spacing-8)` | 本组件 CSS `padding` |
| `--c-list-size-md-padding-vertical-footer` | 公开 | `var(--c-list-size-md-padding-vertical-item)` | 本组件 CSS `padding` |
| `--c-list-size-md-padding-vertical-header` | 公开 | `var(--c-spacing-6)` | 本组件 CSS `padding` |
| `--c-list-size-md-padding-vertical-item` | 公开 | `13px` | 本组件 CSS `padding` |
| `--c-list-size-sm-padding-horizontal-footer` | 公开 | `var(--c-list-size-sm-padding-horizontal-item)` | 本组件 CSS `padding` |
| `--c-list-size-sm-padding-horizontal-header` | 公开 | `var(--c-spacing-8)` | 本组件 CSS `padding` |
| `--c-list-size-sm-padding-horizontal-item` | 公开 | `var(--c-spacing-8)` | 本组件 CSS `padding` |
| `--c-list-size-sm-padding-vertical-footer` | 公开 | `var(--c-list-size-sm-padding-vertical-item)` | 本组件 CSS `padding` |
| `--c-list-size-sm-padding-vertical-header` | 公开 | `var(--c-spacing-4)` | 本组件 CSS `padding` |
| `--c-list-size-sm-padding-vertical-item` | 公开 | `9px` | 本组件 CSS `padding` |
| `--c-list-text-color` | 公开 | `var(--c-color-text-1)` | 本组件 CSS `color` |
| `--c-list-text-color-header` | 公开 | `var(--c-color-text-1)` | 本组件 CSS `color` |
## loading
声明来源: `src/loading/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-loading-color` | 公开 | `rgb(var(--c-primary-6))` | 本组件 CSS `background-color`, `color` |
| `--c-loading-directive-z-index` | 公开 | `2000` | 本组件 CSS `z-index` |
| `--c-loading-indicator-size` | 公开 | `20px` | 本组件 CSS `font-size` |
| `--c-loading-opacity` | 公开 | `0.38` | 本组件 CSS `opacity` |
| `--c-loading-overlay-background` | 公开 | `color-mix(in srgb, var(--c-color-bg-white) 62%, transparent)` | 本组件 CSS `background` |
| `--c-loading-tip-color` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `color` |
| `--c-loading-tip-font-weight` | 公开 | `var(--c-font-weight-500)` | 本组件 CSS `font-weight` |
| `--c-loading-tip-margin` | 公开 | `var(--c-spacing-3) 0 0` | 本组件 CSS `margin` |
## map
声明来源: `src/map/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-map-locate-me-bg` | 公开 | `var(--c-color-bg-white)` | 本组件 CSS `background` |
| `--c-map-locate-me-bottom` | 公开 | `var(--c-spacing-10)` | 本组件 CSS `bottom` |
| `--c-map-locate-me-icon-size` | 公开 | `18px` | 本组件 CSS `height`, `width` |
| `--c-map-locate-me-left` | 公开 | `var(--c-spacing-6)` | 本组件 CSS `left` |
| `--c-map-locate-me-shadow-blur` | 公开 | `var(--c-spacing-2)` | 本组件 CSS `box-shadow` |
| `--c-map-locate-me-shadow-color` | 公开 | `rgb(var(--c-gray-10))` | 本组件 CSS `box-shadow` |
| `--c-map-locate-me-size` | 公开 | `var(--c-size-6)` | 本组件 CSS `height`, `width` |
| `--c-map-poi-address-color` | 公开 | `var(--c-color-text-3)` | 本组件 CSS `color`, `stroke` |
| `--c-map-poi-address-font-size` | 公开 | `var(--c-font-size-body-1)` | 本组件 CSS `font-size` |
| `--c-map-poi-bg` | 公开 | `rgb(var(--c-gray-10))` | 本组件 CSS `background-color` |
| `--c-map-poi-border-radius` | 公开 | `var(--c-size-25)` | 本组件 CSS `border-radius` |
| `--c-map-poi-edit-margin-left` | 公开 | `var(--c-spacing-2)` | 本组件 CSS `margin-left` |
| `--c-map-poi-name-color` | 公开 | `var(--c-color-white)` | 本组件 CSS `color` |
| `--c-map-poi-name-font-size` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `font-size` |
| `--c-map-poi-padding-x` | 公开 | `var(--c-spacing-9)` | 本组件 CSS `padding` |
| `--c-map-poi-padding-y` | 公开 | `var(--c-spacing-5)` | 本组件 CSS `padding` |
| `--c-map-poi-translate-y` | 公开 | `-7px` | 本组件 CSS `transform` |
| `--c-map-position-current-right` | 公开 | `var(--c-size-10)` | 本组件 CSS `right` |
| `--c-map-position-current-size` | 公开 | `var(--c-size-6)` | 本组件 CSS `height`, `width` |
| `--c-map-position-current-top` | 公开 | `var(--c-size-25)` | 本组件 CSS `top` |
| `--c-map-position-dot-margin-left` | 公开 | `calc(-1 * var(--c-spacing-6))` | 本组件 CSS `margin-left` |
| `--c-map-position-dot-margin-top` | 公开 | `calc(-1 * var(--c-size-6))` | 本组件 CSS `margin-top` |
| `--c-map-position-dot-size` | 公开 | `var(--c-size-6)` | 本组件 CSS `height`, `width` |
| `--c-map-search-box-padding-x` | 公开 | `var(--c-spacing-6)` | 本组件 CSS `padding` |
| `--c-map-search-box-padding-y` | 公开 | `7px` | 本组件 CSS `padding` |
| `--c-map-search-empty-padding` | 公开 | `var(--c-spacing-8)` | 本组件 CSS `padding` |
| `--c-map-search-item-address-color` | 公开 | `var(--c-color-text-3)` | 本组件 CSS `color` |
| `--c-map-search-item-name-color` | 公开 | `var(--c-color-text-1)` | 本组件 CSS `color` |
| `--c-map-search-item-padding-x` | 公开 | `var(--c-spacing-6)` | 本组件 CSS `padding` |
| `--c-map-search-item-padding-y` | 公开 | `var(--c-spacing-4)` | 本组件 CSS `padding` |
| `--c-map-search-item-selected-bg` | 公开 | `var(--c-color-fill-1)` | 本组件 CSS `background-color` |
| `--c-map-search-margin` | 公开 | `var(--c-spacing-9)` | 本组件 CSS `margin` |
| `--c-map-search-width` | 公开 | `230px` | 本组件 CSS `width` |
| `--c-map-tips-color` | 公开 | `var(--c-color-text-3)` | 本组件 CSS `color` |
| `--c-map-tips-padding-y` | 公开 | `var(--c-spacing-5)` | 本组件 CSS `padding` |
## mention
声明来源: `src/mention/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
## menu
声明来源: `src/menu/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-menu-bg` | 公开 | `var(--c-color-bg-popup)` | 本组件 CSS `background-color` |
| `--c-menu-border-color` | 公开 | `var(--c-color-fill-3)` | 本组件 CSS `background-color`, `border`, `border-top` |
| `--c-menu-border-radius` | 公开 | `var(--c-border-radius-md)` | 本组件 CSS `border-radius` |
| `--c-menu-box-shadow` | 公开 | `var(--c-shadow2-down)` | 本组件 CSS `box-shadow` |
| `--c-menu-font-size` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `font-size` |
| `--c-menu-group-title-font-size` | 公开 | `var(--c-font-size-body-1)` | 本组件 CSS `font-size` |
| `--c-menu-group-title-height` | 公开 | `var(--c-size-5)` | 本组件 CSS `line-height` |
| `--c-menu-group-title-margin-top` | 公开 | `var(--c-spacing-4)` | 本组件 CSS `margin-top` |
| `--c-menu-group-title-padding-horizontal` | 公开 | `var(--c-spacing-6)` | 本组件 CSS `padding` |
| `--c-menu-group-title-text-color` | 公开 | `var(--c-color-text-3)` | 本组件 CSS `color` |
| `--c-menu-max-height` | 公开 | `var(--c-size-50)` | 本组件 CSS `max-height` |
| `--c-menu-option-bg` | 公开 | `transparent` | 本组件 CSS `background-color` |
| `--c-menu-option-bg-disabled` | 公开 | `transparent` | 本组件 CSS `background-color` |
| `--c-menu-option-bg-hover` | 公开 | `var(--c-color-fill-2)` | 本组件 CSS `background-color` |
| `--c-menu-option-bg-selected` | 公开 | `var(--c-color-fill-2)` | 本组件 CSS `background-color` |
| `--c-menu-option-bg-selected-hover` | 公开 | `var(--c-menu-option-bg-selected)` | 本组件 CSS `background-color` |
| `--c-menu-option-font-weight-selected` | 公开 | `var(--c-font-weight-500)` | 本组件 CSS `font-weight` |
| `--c-menu-option-height` | 公开 | `var(--c-size-9)` | 本组件 CSS `line-height` |
| `--c-menu-option-icon-margin-right` | 公开 | `var(--c-spacing-4)` | 本组件 CSS `margin-right` |
| `--c-menu-option-padding-horizontal` | 公开 | `var(--c-spacing-6)` | 本组件 CSS `padding` |
| `--c-menu-option-suffix-icon-margin-left` | 公开 | `var(--c-spacing-6)` | 本组件 CSS `margin-left` |
| `--c-menu-option-text-color` | 公开 | `var(--c-color-text-2)` | 本组件 CSS `color` |
| `--c-menu-option-text-color-disabled` | 公开 | `var(--c-color-text-4)` | 本组件 CSS `color` |
| `--c-menu-option-text-color-hover` | 公开 | `var(--c-color-text-1)` | 本组件 CSS `color` |
| `--c-menu-option-text-color-selected` | 公开 | `var(--c-color-text-1)` | 本组件 CSS `color` |
| `--c-menu-padding-vertical` | 公开 | `var(--c-spacing-2)` | 本组件 CSS `margin`, `margin-top`, `padding` |
## message
声明来源: `src/message/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-message-border-radius` | 公开 | `var(--c-border-radius-sm)` | 本组件 CSS `border-radius` |
| `--c-message-border-style` | 公开 | `solid` | 本组件 CSS `border` |
| `--c-message-border-width` | 公开 | `1px` | 本组件 CSS `border` |
| `--c-message-box-shadow` | 公开 | `var(--c-shadow2-down)` | 本组件 CSS `box-shadow` |
| `--c-message-close-btn-margin-left` | 公开 | `var(--c-spacing-4)` | 本组件 CSS `margin-left` |
| `--c-message-close-icon-font-size` | 公开 | `12px` | 本组件 CSS `font-size` |
| `--c-message-close-icon-hover-opacity` | 公开 | `0.08` | 本组件 CSS `opacity` |
| `--c-message-close-icon-hover-size` | 公开 | `20px` | 本组件 CSS `height`, `width` |
| `--c-message-content-font-size` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `font-size` |
| `--c-message-icon-font-size` | 公开 | `20px` | 本组件 CSS `font-size` |
| `--c-message-icon-margin-right` | 公开 | `var(--c-spacing-4)` | 本组件 CSS `margin-left`, `margin-right` |
| `--c-message-margin-bottom` | 公开 | `var(--c-spacing-7)` | 本组件 CSS `margin-bottom` |
| `--c-message-neutral-danger-bg` | 公开 | `var(--c-sys-color-surface-overlay)` | 本组件 CSS `background-color` |
| `--c-message-neutral-danger-border-color` | 公开 | `var(--c-sys-color-border-default)` | 本组件 CSS `border-color` |
| `--c-message-neutral-danger-close-color` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-message-neutral-danger-content-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-message-neutral-danger-icon-color` | 公开 | `var(--c-sys-color-content-danger)` | 本组件 CSS `color` |
| `--c-message-neutral-default-bg` | 公开 | `var(--c-sys-color-surface-overlay)` | 本组件 CSS `background-color` |
| `--c-message-neutral-default-border-color` | 公开 | `var(--c-sys-color-border-default)` | 本组件 CSS `border-color` |
| `--c-message-neutral-default-close-color` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-message-neutral-default-content-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-message-neutral-default-icon-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-message-neutral-info-bg` | 公开 | `var(--c-sys-color-surface-overlay)` | 本组件 CSS `background-color` |
| `--c-message-neutral-info-border-color` | 公开 | `var(--c-sys-color-border-default)` | 本组件 CSS `border-color` |
| `--c-message-neutral-info-close-color` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-message-neutral-info-content-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-message-neutral-info-icon-color` | 公开 | `var(--c-sys-color-content-info)` | 本组件 CSS `color` |
| `--c-message-neutral-loading-bg` | 公开 | `var(--c-sys-color-surface-overlay)` | 本组件 CSS `background-color` |
| `--c-message-neutral-loading-border-color` | 公开 | `var(--c-sys-color-border-default)` | 本组件 CSS `border-color` |
| `--c-message-neutral-loading-close-color` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-message-neutral-loading-content-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-message-neutral-loading-icon-color` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `color` |
| `--c-message-neutral-success-bg` | 公开 | `var(--c-sys-color-surface-overlay)` | 本组件 CSS `background-color` |
| `--c-message-neutral-success-border-color` | 公开 | `var(--c-sys-color-border-default)` | 本组件 CSS `border-color` |
| `--c-message-neutral-success-close-color` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-message-neutral-success-content-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-message-neutral-success-icon-color` | 公开 | `var(--c-sys-color-content-success)` | 本组件 CSS `color` |
| `--c-message-neutral-warning-bg` | 公开 | `var(--c-sys-color-surface-overlay)` | 本组件 CSS `background-color` |
| `--c-message-neutral-warning-border-color` | 公开 | `var(--c-sys-color-border-default)` | 本组件 CSS `border-color` |
| `--c-message-neutral-warning-close-color` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-message-neutral-warning-content-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-message-neutral-warning-icon-color` | 公开 | `var(--c-sys-color-content-warning)` | 本组件 CSS `color` |
| `--c-message-padding-bottom` | 公开 | `var(--c-spacing-5)` | 本组件 CSS `padding` |
| `--c-message-padding-left` | 公开 | `var(--c-spacing-7)` | 本组件 CSS `padding` |
| `--c-message-padding-right` | 公开 | `var(--c-spacing-7)` | 本组件 CSS `padding` |
| `--c-message-padding-top` | 公开 | `var(--c-spacing-5)` | 本组件 CSS `padding` |
| `--c-message-solid-danger-bg` | 公开 | `var(--c-sys-color-status-danger)` | 本组件 CSS `background-color` |
| `--c-message-solid-danger-border-color` | 公开 | `transparent` | 本组件 CSS `border-color` |
| `--c-message-solid-danger-close-color` | 公开 | `var(--c-sys-color-content-on-bright)` | 本组件 CSS `color` |
| `--c-message-solid-danger-content-color` | 公开 | `var(--c-sys-color-content-on-bright)` | 本组件 CSS `color` |
| `--c-message-solid-danger-icon-color` | 公开 | `var(--c-sys-color-content-on-bright)` | 本组件 CSS `color` |
| `--c-message-solid-default-bg` | 公开 | `#333` | 本组件 CSS `background-color` |
| `--c-message-solid-default-border-color` | 公开 | `transparent` | 本组件 CSS `border-color` |
| `--c-message-solid-default-close-color` | 公开 | `var(--c-sys-color-content-on-dark)` | 本组件 CSS `color` |
| `--c-message-solid-default-content-color` | 公开 | `var(--c-sys-color-content-on-dark)` | 本组件 CSS `color` |
| `--c-message-solid-default-icon-color` | 公开 | `var(--c-sys-color-content-on-dark)` | 本组件 CSS `color` |
| `--c-message-solid-info-bg` | 公开 | `var(--c-sys-color-status-info)` | 本组件 CSS `background-color` |
| `--c-message-solid-info-border-color` | 公开 | `transparent` | 本组件 CSS `border-color` |
| `--c-message-solid-info-close-color` | 公开 | `var(--c-sys-color-content-on-bright)` | 本组件 CSS `color` |
| `--c-message-solid-info-content-color` | 公开 | `var(--c-sys-color-content-on-bright)` | 本组件 CSS `color` |
| `--c-message-solid-info-icon-color` | 公开 | `var(--c-sys-color-content-on-bright)` | 本组件 CSS `color` |
| `--c-message-solid-loading-bg` | 公开 | `#333` | 本组件 CSS `background-color` |
| `--c-message-solid-loading-border-color` | 公开 | `transparent` | 本组件 CSS `border-color` |
| `--c-message-solid-loading-close-color` | 公开 | `var(--c-sys-color-content-on-dark)` | 本组件 CSS `color` |
| `--c-message-solid-loading-content-color` | 公开 | `var(--c-sys-color-content-on-dark)` | 本组件 CSS `color` |
| `--c-message-solid-loading-icon-color` | 公开 | `var(--c-sys-color-content-on-dark)` | 本组件 CSS `color` |
| `--c-message-solid-success-bg` | 公开 | `var(--c-sys-color-status-success)` | 本组件 CSS `background-color` |
| `--c-message-solid-success-border-color` | 公开 | `transparent` | 本组件 CSS `border-color` |
| `--c-message-solid-success-close-color` | 公开 | `var(--c-sys-color-content-on-bright)` | 本组件 CSS `color` |
| `--c-message-solid-success-content-color` | 公开 | `var(--c-sys-color-content-on-bright)` | 本组件 CSS `color` |
| `--c-message-solid-success-icon-color` | 公开 | `var(--c-sys-color-content-on-bright)` | 本组件 CSS `color` |
| `--c-message-solid-warning-bg` | 公开 | `var(--c-sys-color-status-warning)` | 本组件 CSS `background-color` |
| `--c-message-solid-warning-border-color` | 公开 | `transparent` | 本组件 CSS `border-color` |
| `--c-message-solid-warning-close-color` | 公开 | `var(--c-sys-color-content-on-bright)` | 本组件 CSS `color` |
| `--c-message-solid-warning-content-color` | 公开 | `var(--c-sys-color-content-on-bright)` | 本组件 CSS `color` |
| `--c-message-solid-warning-icon-color` | 公开 | `var(--c-sys-color-content-on-bright)` | 本组件 CSS `color` |
| `--c-message-tonal-danger-bg` | 公开 | `var(--c-color-danger-light-1)` | 本组件 CSS `background-color` |
| `--c-message-tonal-danger-border-color` | 公开 | `transparent` | 本组件 CSS `border-color` |
| `--c-message-tonal-danger-close-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-message-tonal-danger-content-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-message-tonal-danger-icon-color` | 公开 | `var(--c-sys-color-content-danger)` | 本组件 CSS `color` |
| `--c-message-tonal-default-bg` | 公开 | `var(--c-sys-color-surface-muted)` | 本组件 CSS `background-color` |
| `--c-message-tonal-default-border-color` | 公开 | `transparent` | 本组件 CSS `border-color` |
| `--c-message-tonal-default-close-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-message-tonal-default-content-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-message-tonal-default-icon-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-message-tonal-info-bg` | 公开 | `rgba(var(--c-blue-6), 0.12)` | 本组件 CSS `background-color` |
| `--c-message-tonal-info-border-color` | 公开 | `transparent` | 本组件 CSS `border-color` |
| `--c-message-tonal-info-close-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-message-tonal-info-content-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-message-tonal-info-icon-color` | 公开 | `var(--c-sys-color-content-info)` | 本组件 CSS `color` |
| `--c-message-tonal-loading-bg` | 公开 | `var(--c-color-primary-light-1)` | 本组件 CSS `background-color` |
| `--c-message-tonal-loading-border-color` | 公开 | `transparent` | 本组件 CSS `border-color` |
| `--c-message-tonal-loading-close-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-message-tonal-loading-content-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-message-tonal-loading-icon-color` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `color` |
| `--c-message-tonal-success-bg` | 公开 | `var(--c-color-success-light-1)` | 本组件 CSS `background-color` |
| `--c-message-tonal-success-border-color` | 公开 | `transparent` | 本组件 CSS `border-color` |
| `--c-message-tonal-success-close-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-message-tonal-success-content-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-message-tonal-success-icon-color` | 公开 | `var(--c-sys-color-content-success)` | 本组件 CSS `color` |
| `--c-message-tonal-warning-bg` | 公开 | `var(--c-color-warning-light-1)` | 本组件 CSS `background-color` |
| `--c-message-tonal-warning-border-color` | 公开 | `transparent` | 本组件 CSS `border-color` |
| `--c-message-tonal-warning-close-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-message-tonal-warning-content-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-message-tonal-warning-icon-color` | 公开 | `var(--c-sys-color-content-warning)` | 本组件 CSS `color` |
| `--c-message-transition-duration` | 公开 | `var(--c-transition-duration-1)` | 本组件 CSS `animation`, `transition` |
| `--c-message-transition-duration-icon` | 公开 | `var(--c-transition-duration-4)` | 本组件 CSS `animation` |
| `--c-message-transition-timing-function` | 公开 | `var(--c-transition-timing-function-linear)` | 本组件 CSS `animation`, `transition` |
| `--c-message-transition-timing-function-icon` | 公开 | `var(--c-transition-timing-function-overshoot)` | 本组件 CSS `animation` |
| `--c-message-wrapper-margin-bottom` | 公开 | `var(--c-spacing-12)` | 本组件 CSS `bottom` |
| `--c-message-wrapper-margin-top` | 公开 | `var(--c-spacing-12)` | 本组件 CSS `top` |
| `--c-message-wrapper-padding-horizontal` | 公开 | `var(--c-spacing-5)` | 本组件 CSS `padding` |
| `--c-message-z-index` | 公开 | `var(--c-z-index-message)` | 本组件 CSS `z-index` |
## nav-menu
声明来源: `src/nav-menu/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-nav-menu-arrow-size` | 公开 | `12px` | 本组件 CSS `width` |
| `--c-nav-menu-border-radius` | 公开 | `var(--c-border-radius-sm)` | 本组件 CSS `border-radius` |
| `--c-nav-menu-content-gap` | 公开 | `8px` | 本组件 CSS `gap`, `margin`, `padding` |
| `--c-nav-menu-content-padding` | 公开 | `12px` | 本组件 CSS `padding` |
| `--c-nav-menu-dark-bg` | 公开 | `var(--c-color-menu-dark-bg)` | 本组件 CSS `background` |
| `--c-nav-menu-dark-item-bg-hover` | 公开 | `var(--c-color-menu-dark-hover)` | 本组件 CSS `background` |
| `--c-nav-menu-dark-item-bg-selected` | 公开 | `var(--c-color-menu-dark-hover)` | 本组件 CSS `background` |
| `--c-nav-menu-dark-item-text-color` | 公开 | `var(--c-color-text-4)` | 本组件 CSS `color` |
| `--c-nav-menu-dark-item-text-color-disabled` | 公开 | `var(--c-color-text-2)` | 本组件 CSS `color` |
| `--c-nav-menu-dark-item-text-color-selected` | 公开 | `var(--c-color-white)` | 本组件 CSS `color`, `outline` |
| `--c-nav-menu-divider-color` | 公开 | `var(--c-color-border-2)` | 本组件 CSS `background`, `border` |
| `--c-nav-menu-divider-width` | 公开 | `1px` | 本组件 CSS `border`, `height`, `width` |
| `--c-nav-menu-focus-offset` | 公开 | `-2px` | 本组件 CSS `outline-offset` |
| `--c-nav-menu-focus-width` | 公开 | `2px` | 本组件 CSS `outline` |
| `--c-nav-menu-font-size` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `font-size` |
| `--c-nav-menu-icon-size` | 公开 | `20px` | 本组件 CSS `font-size` |
| `--c-nav-menu-light-bg` | 公开 | `var(--c-color-bg-2)` | 本组件 CSS `background` |
| `--c-nav-menu-light-item-bg-hover` | 公开 | `var(--c-color-fill-2)` | 本组件 CSS `background` |
| `--c-nav-menu-light-item-bg-selected` | 公开 | `var(--c-color-fill-2)` | 本组件 CSS `background` |
| `--c-nav-menu-light-item-text-color` | 公开 | `var(--c-color-text-2)` | 本组件 CSS `color` |
| `--c-nav-menu-light-item-text-color-disabled` | 公开 | `var(--c-color-text-4)` | 本组件 CSS `color` |
| `--c-nav-menu-light-item-text-color-selected` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `color`, `outline` |
| `--c-nav-menu-motion-duration` | 公开 | `150ms` | 本组件 CSS `transition` |
| `--c-nav-menu-panel-width` | 公开 | `min(400px, 100vw)` | 运行时引用(不代表可见性证明) `nav-menu/item.tsx` |
| `--c-nav-menu-popup-max-height` | 公开 | `320px` | 本组件 CSS `max-height` |
| `--c-nav-menu-popup-min-width` | 公开 | `180px` | 本组件 CSS `min-width` |
| `--c-nav-menu-popup-shadow` | 公开 | `0 6px 24px rgba(0, 0, 0, 0.12)` | 本组件 CSS `box-shadow` |
| `--c-nav-menu-row-height` | 公开 | `40px` | 本组件 CSS `min-height` |
| `--c-nav-menu-row-height-lg` | 公开 | `48px` | 本组件 CSS `min-height` |
| `--c-nav-menu-row-height-sm` | 公开 | `32px` | 本组件 CSS `min-height` |
| `--c-nav-menu-row-height-xl` | 公开 | `56px` | 本组件 CSS `min-height` |
| `--c-nav-menu-row-height-xs` | 公开 | `28px` | 本组件 CSS `min-height` |
## notification
声明来源: `src/notification/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-notification-border-radius` | 公开 | `var(--c-border-radius-md)` | 本组件 CSS `border-radius` |
| `--c-notification-border-style` | 公开 | `solid` | 本组件 CSS `border` |
| `--c-notification-border-width` | 公开 | `1px` | 本组件 CSS `border` |
| `--c-notification-box-shadow` | 公开 | `0 4px 12px rgba(0, 0, 0, 0.15)` | 本组件 CSS `box-shadow` |
| `--c-notification-close-icon-color` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-notification-close-icon-font-size` | 公开 | `12px` | 本组件 CSS `font-size` |
| `--c-notification-close-icon-hover-size` | 公开 | `20px` | 本组件 CSS `height`, `width` |
| `--c-notification-close-icon-right` | 公开 | `var(--c-spacing-6)` | 本组件 CSS `right` |
| `--c-notification-close-icon-top` | 公开 | `var(--c-spacing-6)` | 本组件 CSS `top` |
| `--c-notification-content-font-size` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `font-size` |
| `--c-notification-error-bg` | 公开 | `var(--c-sys-color-surface-overlay)` | 本组件 CSS `background-color` |
| `--c-notification-error-border-color` | 公开 | `var(--c-sys-color-border-default)` | 本组件 CSS `border-color` |
| `--c-notification-error-content-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-notification-error-icon-color` | 公开 | `var(--c-sys-color-content-danger)` | 本组件 CSS `color` |
| `--c-notification-error-title-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-notification-footer-margin-top` | 公开 | `var(--c-spacing-7)` | 本组件 CSS `margin-top` |
| `--c-notification-icon-font-size` | 公开 | `24px` | 本组件 CSS `font-size` |
| `--c-notification-icon-margin-right` | 公开 | `var(--c-spacing-7)` | 本组件 CSS `padding-right` |
| `--c-notification-info-bg` | 公开 | `var(--c-sys-color-surface-overlay)` | 本组件 CSS `background-color` |
| `--c-notification-info-border-color` | 公开 | `var(--c-sys-color-border-default)` | 本组件 CSS `border-color` |
| `--c-notification-info-content-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-notification-info-icon-color` | 公开 | `var(--c-sys-color-content-info)` | 本组件 CSS `color` |
| `--c-notification-info-title-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-notification-margin-bottom` | 公开 | `var(--c-spacing-8)` | 本组件 CSS `margin-bottom` |
| `--c-notification-normal-bg` | 公开 | `var(--c-sys-color-surface-overlay)` | 本组件 CSS `background-color` |
| `--c-notification-normal-border-color` | 公开 | `var(--c-sys-color-border-default)` | 本组件 CSS `border` |
| `--c-notification-normal-content-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-notification-normal-icon-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-notification-normal-title-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-notification-padding-bottom` | 公开 | `var(--c-spacing-8)` | 本组件 CSS `padding` |
| `--c-notification-padding-left` | 公开 | `var(--c-spacing-8)` | 本组件 CSS `padding`, `width` |
| `--c-notification-padding-right` | 公开 | `var(--c-spacing-8)` | 本组件 CSS `padding`, `width` |
| `--c-notification-padding-top` | 公开 | `var(--c-spacing-8)` | 本组件 CSS `padding` |
| `--c-notification-success-bg` | 公开 | `var(--c-sys-color-surface-overlay)` | 本组件 CSS `background-color` |
| `--c-notification-success-border-color` | 公开 | `var(--c-sys-color-border-default)` | 本组件 CSS `border-color` |
| `--c-notification-success-content-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-notification-success-icon-color` | 公开 | `var(--c-sys-color-content-success)` | 本组件 CSS `color` |
| `--c-notification-success-title-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-notification-title-font-size` | 公开 | `var(--c-font-size-title-1)` | 本组件 CSS `font-size` |
| `--c-notification-title-font-weight` | 公开 | `var(--c-font-weight-500)` | 本组件 CSS `font-weight` |
| `--c-notification-title-margin-bottom` | 公开 | `var(--c-spacing-2)` | 本组件 CSS `margin-top` |
| `--c-notification-transition-duration` | 公开 | `var(--c-transition-duration-2)` | 本组件 CSS `transition` |
| `--c-notification-transition-duration-enter` | 公开 | `var(--c-transition-duration-4)` | 本组件 CSS `transition` |
| `--c-notification-transition-duration-leave` | 公开 | `var(--c-transition-duration-3)` | 本组件 CSS `transition` |
| `--c-notification-transition-timing-function` | 公开 | `var(--c-transition-timing-function-linear)` | 本组件 CSS `transition` |
| `--c-notification-transition-timing-function-enter` | 公开 | `var(--c-transition-timing-function-overshoot)` | 本组件 CSS `transition` |
| `--c-notification-transition-timing-function-leave` | 公开 | `var(--c-transition-timing-function-standard)` | 本组件 CSS `transition` |
| `--c-notification-warning-bg` | 公开 | `var(--c-sys-color-surface-overlay)` | 本组件 CSS `background-color` |
| `--c-notification-warning-border-color` | 公开 | `var(--c-sys-color-border-default)` | 本组件 CSS `border-color` |
| `--c-notification-warning-content-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-notification-warning-icon-color` | 公开 | `var(--c-sys-color-content-warning)` | 本组件 CSS `color` |
| `--c-notification-warning-title-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-notification-width` | 公开 | `300px` | 本组件 CSS `width` |
| `--c-notification-wrapper-margin-bottom` | 公开 | `var(--c-spacing-8)` | 本组件 CSS `bottom` |
| `--c-notification-wrapper-margin-left` | 公开 | `var(--c-spacing-8)` | 本组件 CSS `left` |
| `--c-notification-wrapper-margin-right` | 公开 | `var(--c-spacing-8)` | 本组件 CSS `right` |
| `--c-notification-wrapper-margin-top` | 公开 | `var(--c-spacing-8)` | 本组件 CSS `top` |
| `--c-notification-z-index` | 公开 | `var(--c-z-index-notification)` | 本组件 CSS `z-index` |
## overlay
声明来源: `src/overlay/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-overlay-animation-duration` | 公开 | `var(--c-sys-motion-duration-slow)` | 本组件 CSS `transition` |
| `--c-overlay-background-color` | 公开 | `var(--c-sys-color-scrim)` | 本组件 CSS `background-color` |
| `--c-overlay-content-z-index` | 公开 | `var(--c-sys-layer-raised)` | 本组件 CSS `z-index` |
## page-header
声明来源: `src/page-header/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-page-header-back-color` | 公开 | `var(--c-color-text-2)` | 本组件 CSS `color` |
| `--c-page-header-back-hover-bg` | 公开 | `var(--c-sys-color-state-hover)` | 本组件 CSS `background` |
| `--c-page-header-back-hover-size` | 公开 | `30px` | 本组件 CSS `height`, `width` |
| `--c-page-header-back-size` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `font-size` |
| `--c-page-header-content-margin-top` | 公开 | `var(--c-spacing-8)` | 本组件 CSS `margin-top` |
| `--c-page-header-font-size` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `font-size` |
| `--c-page-header-footer-margin-top` | 公开 | `var(--c-spacing-8)` | 本组件 CSS `margin-top` |
| `--c-page-header-item-gap` | 公开 | `var(--c-spacing-6)` | 本组件 CSS `margin-left` |
| `--c-page-header-row-gap` | 公开 | `var(--c-spacing-6)` | 本组件 CSS `margin-bottom` |
| `--c-page-header-subtitle-color` | 公开 | `var(--c-color-text-3)` | 本组件 CSS `color` |
| `--c-page-header-title-color` | 公开 | `var(--c-color-text-1)` | 本组件 CSS `color` |
| `--c-page-header-title-font-size` | 公开 | `var(--c-font-size-title-2)` | 本组件 CSS `font-size` |
| `--c-page-header-title-font-weight` | 公开 | `600` | 本组件 CSS `font-weight` |
## pagination
声明来源: `src/pagination/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-pagination-active-background` | 公开 | `var(--c-color-primary-light-1)` | 本组件 CSS `background` |
| `--c-pagination-active-color` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `color` |
| `--c-pagination-disabled-background` | 公开 | `var(--c-color-fill-1)` | 本组件 CSS `background` |
| `--c-pagination-disabled-color` | 公开 | `var(--c-color-text-4)` | 本组件 CSS `color` |
| `--c-pagination-focus-color` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `outline` |
| `--c-pagination-focus-offset` | 公开 | `1px` | 本组件 CSS `outline-offset` |
| `--c-pagination-focus-space` | 公开 | `3px` | 本组件 CSS `padding` |
| `--c-pagination-focus-width` | 公开 | `2px` | 本组件 CSS `outline` |
| `--c-pagination-font-size` | 公开 | `var(--c-sys-font-size-md)` | 本组件 CSS `font-size` |
| `--c-pagination-gap` | 公开 | `var(--c-sys-space-5)` | 本组件 CSS `gap` |
| `--c-pagination-hover-background` | 公开 | `var(--c-color-fill-1)` | 本组件 CSS `background` |
| `--c-pagination-icon-size` | 公开 | `16px` | 本组件 CSS `height`, `width` |
| `--c-pagination-input-width` | 公开 | `32px` | 本组件 CSS `width` |
| `--c-pagination-item-background` | 公开 | `transparent` | 本组件 CSS `background` |
| `--c-pagination-item-border-radius` | 公开 | `var(--c-sys-radius-md)` | 本组件 CSS `border-radius` |
| `--c-pagination-item-gap` | 公开 | `var(--c-sys-space-2)` | 本组件 CSS `gap`, `padding-inline-start` |
| `--c-pagination-item-padding` | 公开 | `var(--c-sys-space-4)` | 本组件 CSS `padding` |
| `--c-pagination-select-width` | 公开 | `max-content` | 本组件 CSS `width` |
| `--c-pagination-size-lg` | 公开 | `44px` | 本组件 CSS `height`, `min-height`, `min-width` |
| `--c-pagination-size-md` | 公开 | `36px` | 本组件 CSS `height`, `min-height`, `min-width` |
| `--c-pagination-size-sm` | 公开 | `28px` | 本组件 CSS `height`, `min-height`, `min-width` |
| `--c-pagination-size-xl` | 公开 | `52px` | 本组件 CSS `height`, `min-height`, `min-width` |
| `--c-pagination-size-xs` | 公开 | `24px` | 本组件 CSS `height`, `min-height`, `min-width` |
| `--c-pagination-text-color` | 公开 | `var(--c-color-text-1)` | 本组件 CSS `color` |
| `--c-pagination-touch-size` | 公开 | `44px` | 本组件 CSS `height`, `min-height` |
## paper
声明来源: `src/paper/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-paper-background` | 公开 | `var(--c-sys-color-surface-default)` | 本组件 CSS `background` |
| `--c-paper-border-color` | 公开 | `var(--c-sys-color-border-default)` | 本组件 CSS `border` |
| `--c-paper-border-radius` | 公开 | `var(--c-sys-radius-md)` | 本组件 CSS `border-radius` |
| `--c-paper-border-width` | 公开 | `1px` | 本组件 CSS `border` |
| `--c-paper-transition-duration` | 公开 | `var(--c-sys-motion-duration-slow)` | 本组件 CSS `transition` |
## people-select
声明来源: `src/people-select/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-people-select-avatar-radius` | 公开 | `50%` | 本组件 CSS `border-radius` |
| `--c-people-select-avatar-size` | 公开 | `24px` | 本组件 CSS `height`, `width` |
| `--c-people-select-content-gap` | 公开 | `8px` | 本组件 CSS `gap` |
## popconfirm
声明来源: `src/popconfirm/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-popconfirm-border-color` | 公开 | `var(--c-color-neutral-3)` | 本组件 CSS `border` |
| `--c-popconfirm-border-radius` | 公开 | `var(--c-border-radius-md)` | 本组件 CSS `border-radius` |
| `--c-popconfirm-border-width` | 公开 | `var(--c-border-width-1)` | 本组件 CSS `border` |
| `--c-popconfirm-box-shadow` | 公开 | `var(--c-shadow2-down)` | 本组件 CSS `box-shadow` |
| `--c-popconfirm-button-margin-left` | 公开 | `var(--c-spacing-4)` | 本组件 CSS `margin-left` |
| `--c-popconfirm-content-bg` | 公开 | `var(--c-color-bg-popup)` | 本组件 CSS `background-color` |
| `--c-popconfirm-content-text-color` | 公开 | `var(--c-color-text-2)` | 本组件 CSS `color` |
| `--c-popconfirm-font-size` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `font-size` |
| `--c-popconfirm-icon-margin-right` | 公开 | `var(--c-spacing-4)` | 本组件 CSS `margin-right` |
| `--c-popconfirm-line-height` | 公开 | `var(--c-line-height)` | 本组件 CSS `height`, `line-height` |
| `--c-popconfirm-padding-horizontal` | 公开 | `var(--c-spacing-7)` | 本组件 CSS `padding` |
| `--c-popconfirm-padding-vertical` | 公开 | `var(--c-spacing-7)` | 本组件 CSS `padding` |
| `--c-popconfirm-status-danger-title-icon-color` | 公开 | `var(--c-sys-color-content-danger)` | 本组件 CSS `color` |
| `--c-popconfirm-status-info-title-icon-color` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `color` |
| `--c-popconfirm-status-success-title-icon-color` | 公开 | `var(--c-sys-color-content-success)` | 本组件 CSS `color` |
| `--c-popconfirm-title-font-size` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `font-size`, `height` |
| `--c-popconfirm-title-icon-color` | 公开 | `var(--c-sys-color-content-warning)` | 本组件 CSS `color` |
| `--c-popconfirm-title-icon-size` | 公开 | `18px` | 本组件 CSS `font-size` |
| `--c-popconfirm-title-margin-bottom` | 公开 | `var(--c-spacing-7)` | 本组件 CSS `margin-bottom` |
| `--c-popconfirm-title-text-color` | 公开 | `var(--c-color-text-1)` | 本组件 CSS `color` |
## popover
声明来源: `src/popover/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-popover-animation-duration` | 公开 | `var(--c-sys-motion-duration-standard)` | 本组件 CSS `transition` |
| `--c-popover-arrow-z-index` | 公开 | `1` | 本组件 CSS `z-index` |
| `--c-popover-background` | 公开 | `var(--c-sys-color-surface-overlay)` | 本组件 CSS `background-color` |
| `--c-popover-border-color` | 公开 | `var(--c-sys-color-border-default)` | 本组件 CSS `border` |
| `--c-popover-border-radius` | 公开 | `var(--c-sys-radius-md)` | 本组件 CSS `border-radius` |
| `--c-popover-border-width` | 公开 | `1px` | 本组件 CSS `border` |
| `--c-popover-box-shadow` | 公开 | `var(--c-shadow2-down)` | 本组件 CSS `box-shadow` |
| `--c-popover-font-size` | 公开 | `var(--c-sys-font-size-md)` | 本组件 CSS `font-size` |
| `--c-popover-line-height` | 公开 | `var(--c-line-height)` | 本组件 CSS `line-height` |
| `--c-popover-padding-horizontal` | 公开 | `var(--c-sys-space-7)` | 本组件 CSS `padding` |
| `--c-popover-padding-vertical` | 公开 | `var(--c-sys-space-6)` | 本组件 CSS `padding` |
| `--c-popover-text-color` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-popover-title-content-gap` | 公开 | `var(--c-sys-space-2)` | 本组件 CSS `margin-top` |
| `--c-popover-title-font-size` | 公开 | `var(--c-sys-font-size-lg)` | 本组件 CSS `font-size` |
| `--c-popover-title-font-weight` | 公开 | `var(--c-sys-font-weight-medium)` | 本组件 CSS `font-weight` |
| `--c-popover-title-text-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
## progress
声明来源: `src/progress/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-internal-progress-highlight` | 内部 | `rgba(255, 255, 255, 0.5)` | 本组件 CSS `background` |
| `--c-progress-animation-duration` | 公开 | `1.5s` | 本组件 CSS `animation`, `animation-delay` |
| `--c-progress-danger-color` | 公开 | `var(--c-sys-color-content-danger)` | 本组件 CSS `color` |
| `--c-progress-default-color` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `color` |
| `--c-progress-font-size` | 公开 | `var(--c-sys-font-size-sm)` | 本组件 CSS `font-size` |
| `--c-progress-info-color` | 公开 | `var(--c-sys-color-content-info)` | 本组件 CSS `color` |
| `--c-progress-line-border-radius` | 公开 | `9999px` | 本组件 CSS `border-radius` |
| `--c-progress-primary-color` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `color` |
| `--c-progress-secondary-color` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-progress-steps-gap` | 公开 | `var(--c-sys-space-2)` | 本组件 CSS `gap` |
| `--c-progress-success-color` | 公开 | `var(--c-sys-color-content-success)` | 本组件 CSS `color` |
| `--c-progress-tertiary-color` | 公开 | `var(--c-sys-color-content-tertiary)` | 本组件 CSS `color` |
| `--c-progress-text-color` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-progress-text-gap` | 公开 | `var(--c-sys-space-4)` | 本组件 CSS `gap` |
| `--c-progress-track-color` | 公开 | `var(--c-sys-color-state-hover)` | 本组件 CSS `background`, `stroke` |
| `--c-progress-transition-duration` | 公开 | `var(--c-sys-motion-duration-standard)` | 本组件 CSS `transition` |
| `--c-progress-warning-color` | 公开 | `var(--c-sys-color-content-warning)` | 本组件 CSS `color` |
## progress-group
声明来源: `src/progress-group/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-progress-group-dot-size` | 公开 | `var(--c-sys-space-4)` | 本组件 CSS `height`, `width` |
| `--c-progress-group-font-size` | 公开 | `var(--c-sys-font-size-sm)` | 本组件 CSS `font-size` |
| `--c-progress-group-gap` | 公开 | `var(--c-sys-space-3)` | 本组件 CSS `gap` |
| `--c-progress-group-item-gap` | 公开 | `var(--c-sys-space-2)` | 本组件 CSS `gap` |
| `--c-progress-group-muted-color` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-progress-group-radius` | 公开 | `9999px` | 本组件 CSS `border-radius`, `clip-path` |
| `--c-progress-group-size-lg-thickness` | 公开 | `12px` | 本组件 CSS `height`, `width` |
| `--c-progress-group-size-md-thickness` | 公开 | `8px` | 本组件 CSS `height`, `width` |
| `--c-progress-group-size-sm-thickness` | 公开 | `4px` | 本组件 CSS `height`, `width` |
| `--c-progress-group-size-xl-thickness` | 公开 | `16px` | 本组件 CSS `height`, `width` |
| `--c-progress-group-size-xs-thickness` | 公开 | `2px` | 本组件 CSS `height`, `width` |
| `--c-progress-group-text-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-progress-group-text-font-weight` | 公开 | `var(--c-sys-font-weight-medium)` | 本组件 CSS `font-weight` |
| `--c-progress-group-tooltip-bg` | 公开 | `var(--c-sys-color-surface-tooltip)` | 本组件 CSS `background` |
| `--c-progress-group-tooltip-color` | 公开 | `var(--c-sys-color-content-on-dark)` | 本组件 CSS `color` |
| `--c-progress-group-tooltip-duration` | 公开 | `var(--c-sys-motion-duration-fast)` | 本组件 CSS `animation` |
| `--c-progress-group-tooltip-font-size` | 公开 | `var(--c-sys-font-size-xs)` | 本组件 CSS `font-size` |
| `--c-progress-group-tooltip-line-height` | 公开 | `1.4` | 本组件 CSS `line-height` |
| `--c-progress-group-tooltip-max-width` | 公开 | `240px` | 本组件 CSS `max-width` |
| `--c-progress-group-tooltip-offset` | 公开 | `var(--c-sys-space-4)` | 本组件 CSS `bottom`, `left` |
| `--c-progress-group-tooltip-padding` | 公开 | `5px var(--c-sys-space-4)` | 本组件 CSS `padding` |
| `--c-progress-group-tooltip-radius` | 公开 | `var(--c-sys-radius-md)` | 本组件 CSS `border-radius` |
| `--c-progress-group-track-color` | 公开 | `var(--c-sys-color-state-hover)` | 本组件 CSS `background`, `stroke` |
| `--c-progress-group-transition-duration` | 公开 | `var(--c-sys-motion-duration-standard)` | 本组件 CSS `animation`, `transition` |
## radio
声明来源: `src/radio/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-internal-radio-focus-offset` | 内部 | `2px` | 本组件 CSS `outline-offset` |
| `--c-internal-radio-focus-width` | 内部 | `2px` | 本组件 CSS `outline` |
| `--c-internal-radio-mask-height` | 内部 | `var(--c-size-6)` | 本组件 CSS `padding` |
| `--c-internal-radio-segment-bg` | 内部 | `var(--c-sys-color-surface-default)` | 本组件 CSS `background` |
| `--c-internal-radio-segment-gap` | 内部 | `3px` | 本组件 CSS `gap`, `padding` |
| `--c-internal-radio-segment-group-bg` | 内部 | `var(--c-sys-color-surface-muted)` | 本组件 CSS `background` |
| `--c-internal-radio-segment-height` | 内部 | `var(--c-sys-control-height-md)` | 本组件 CSS `line-height`, `min-height` |
| `--c-internal-radio-segment-hover` | 内部 | `var(--c-sys-color-state-hover)` | 本组件 CSS `background` |
| `--c-internal-radio-segment-padding` | 内部 | `12px` | 本组件 CSS `padding-inline` |
| `--c-internal-radio-segment-radius` | 内部 | `var(--c-sys-radius-md)` | 本组件 CSS `border-radius` |
| `--c-radio-action-padding` | 公开 | `calc((var(--c-internal-radio-mask-height) / 2) - (var(--c-radio-control-size) / 2))` | 本组件 CSS `padding` |
| `--c-radio-animation-duration` | 公开 | `var(--c-transition-duration-3)` | 本组件 CSS `transition` |
| `--c-radio-control-color` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-radio-control-color-checked` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `color`, `outline` |
| `--c-radio-control-color-disabled` | 公开 | `var(--c-sys-color-content-disabled)` | 本组件 CSS `color` |
| `--c-radio-control-color-error` | 公开 | `var(--c-sys-color-content-danger)` | 本组件 CSS `color` |
| `--c-radio-control-size` | 公开 | `14px` | 本组件 CSS `font-size`, `height`, `padding`, `width` |
| `--c-radio-group-gap` | 公开 | `var(--c-spacing-8)` | 本组件 CSS `gap` |
| `--c-radio-label-font-size` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `font-size` |
| `--c-radio-label-gap` | 公开 | `var(--c-spacing-4)` | 本组件 CSS `margin-inline-start` |
| `--c-radio-label-text-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-radio-label-text-color-disabled` | 公开 | `var(--c-sys-color-content-disabled)` | 本组件 CSS `color` |
## rate
声明来源: `src/rate/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-rate-action-padding` | 公开 | `0px` | 本组件 CSS `padding` |
| `--c-rate-active-color` | 公开 | `rgb(var(--c-gold-6))` | 本组件 CSS `color` |
| `--c-rate-active-scale` | 公开 | `1.2` | 本组件 CSS `transform` |
| `--c-rate-disabled-color` | 公开 | `var(--c-sys-color-content-disabled)` | 本组件 CSS `color` |
| `--c-rate-empty-color` | 公开 | `var(--c-color-fill-3)` | 本组件 CSS `color` |
| `--c-rate-error-color` | 公开 | `var(--c-sys-color-content-danger)` | 本组件 CSS `color` |
| `--c-rate-focus-color` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `outline` |
| `--c-rate-focus-offset` | 公开 | `2px` | 本组件 CSS `outline-offset` |
| `--c-rate-focus-width` | 公开 | `2px` | 本组件 CSS `outline` |
| `--c-rate-gap` | 公开 | `var(--c-spacing-4)` | 本组件 CSS `margin-right` |
| `--c-rate-min-height` | 公开 | `var(--c-size-md)` | 本组件 CSS `min-height` |
| `--c-rate-scale-duration` | 公开 | `var(--c-transition-duration-4)` | 本组件 CSS `animation` |
| `--c-rate-size` | 公开 | `var(--c-font-size-title-3)` | 本组件 CSS `font-size` |
| `--c-rate-transition-duration` | 公开 | `var(--c-transition-duration-2)` | 本组件 CSS `transition` |
| `--c-rate-transition-timing-function` | 公开 | `var(--c-transition-timing-function-standard)` | 本组件 CSS `animation`, `transition` |
## resize-box
声明来源: `src/resize-box/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-resize-box-trigger-bg` | 公开 | `var(--c-color-neutral-3)` | 本组件 CSS `background-color` |
| `--c-resize-box-trigger-font-size-icon` | 公开 | `12px` | 本组件 CSS `font-size`, `margin` |
| `--c-resize-box-trigger-icon-color` | 公开 | `var(--c-color-text-1)` | 本组件 CSS `color` |
## result
声明来源: `src/result/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-result-background` | 公开 | `var(--c-color-bg-white)` | 本组件 CSS `background-color` |
| `--c-result-border-radius` | 公开 | `var(--c-border-radius-md)` | 本组件 CSS `border-radius` |
| `--c-result-content-margin` | 公开 | `var(--c-spacing-8) 0 0` | 本组件 CSS `margin` |
| `--c-result-danger-border-color` | 公开 | `var(--c-color-danger-light-3)` | 本组件 CSS `border-color` |
| `--c-result-danger-color` | 公开 | `var(--c-sys-color-content-danger)` | 本组件 CSS `fill` |
| `--c-result-empty-border-color` | 公开 | `rgb(var(--c-gray-2))` | 本组件 CSS `border-color` |
| `--c-result-empty-color` | 公开 | `rgb(var(--c-gray-5))` | 本组件 CSS `fill` |
| `--c-result-extra-margin` | 公开 | `var(--c-spacing-8) 0 0` | 本组件 CSS `margin` |
| `--c-result-image-size` | 公开 | `80px` | 本组件 CSS `border`, `height`, `width` |
| `--c-result-info-border-color` | 公开 | `var(--c-color-primary-light-3)` | 本组件 CSS `border-color` |
| `--c-result-info-color` | 公开 | `var(--c-color-info)` | 本组件 CSS `fill` |
| `--c-result-padding` | 公开 | `var(--c-spacing-10)` | 本组件 CSS `padding` |
| `--c-result-question-border-color` | 公开 | `rgb(var(--c-gray-2))` | 本组件 CSS `border-color` |
| `--c-result-question-color` | 公开 | `rgb(var(--c-gray-6))` | 本组件 CSS `fill` |
| `--c-result-subtitle-color` | 公开 | `var(--c-color-text-2)` | 本组件 CSS `color` |
| `--c-result-subtitle-font-size` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `font-size` |
| `--c-result-subtitle-line-height` | 公开 | `1.5715` | 本组件 CSS `line-height` |
| `--c-result-subtitle-margin` | 公开 | `var(--c-spacing-4) 0 0` | 本组件 CSS `margin` |
| `--c-result-success-border-color` | 公开 | `var(--c-color-success-light-3)` | 本组件 CSS `border-color` |
| `--c-result-success-color` | 公开 | `var(--c-sys-color-content-success)` | 本组件 CSS `fill` |
| `--c-result-title-color` | 公开 | `var(--c-color-text-1)` | 本组件 CSS `color` |
| `--c-result-title-font-size` | 公开 | `var(--c-font-size-title-1)` | 本组件 CSS `font-size` |
| `--c-result-title-font-weight` | 公开 | `var(--c-font-weight-500)` | 本组件 CSS `font-weight` |
| `--c-result-title-margin` | 公开 | `var(--c-spacing-7) 0 0` | 本组件 CSS `margin` |
| `--c-result-warning-border-color` | 公开 | `var(--c-color-warning-light-3)` | 本组件 CSS `border-color` |
| `--c-result-warning-color` | 公开 | `var(--c-sys-color-content-warning)` | 本组件 CSS `fill` |
## ripple
声明来源: `src/ripple/style/token.less`
expand-duration/fade-duration 消费到 transform/opacity 过渡;运行时再读取实际波纹计算后的 duration/delay,避免提前淡出或删除。两个 250ms 生命周期下限不是 CSS Token。采样边界与清理归属见设计指南;此间接时序消费不冒充运行时字面 var() 引用。
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-ripple-color` | 公开 | `currentColor` | 本组件 CSS `background-color` |
| `--c-ripple-cubic-bezier` | 公开 | `cubic-bezier(0.68, 0.01, 0.62, 0.6)` | 本组件 CSS `transition` |
| `--c-ripple-expand-duration` | 公开 | `200ms` | 本组件 CSS `transition` |
| `--c-ripple-fade-duration` | 公开 | `140ms` | 本组件 CSS `transition` |
## scheduler
声明来源: `src/scheduler/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-scheduler-axis-cell-width` | 公开 | `96px` | 本组件 CSS `min-width` |
| `--c-scheduler-background` | 公开 | `var(--c-color-bg-2)` | 本组件 CSS `background` |
| `--c-scheduler-border-color` | 公开 | `var(--c-color-border)` | 本组件 CSS `border`, `border-bottom`, `border-left`, `border-right`, `border-top` |
| `--c-scheduler-border-width` | 公开 | `1px` | 本组件 CSS `border`, `border-bottom`, `border-left`, `border-right`, `border-top`, `height`, `width` |
| `--c-scheduler-color` | 公开 | `var(--c-color-text-1)` | 本组件 CSS `color` |
| `--c-scheduler-column-min-width` | 公开 | `120px` | 本组件 CSS `grid-template-columns`, `min-width` |
| `--c-scheduler-dependency-width` | 公开 | `2px` | 本组件 CSS `stroke-width` |
| `--c-scheduler-dragging-opacity` | 公开 | `0.3` | 本组件 CSS `opacity` |
| `--c-scheduler-editor-width` | 公开 | `440px` | 运行时引用(不代表可见性证明) `scheduler/components/SchedulerEditor.vue` |
| `--c-scheduler-event-accent-color` | 公开 | `var(--c-scheduler-event-color)` | 本组件 CSS `border-left` |
| `--c-scheduler-event-accent-width` | 公开 | `3px` | 本组件 CSS `border-left` |
| `--c-scheduler-event-background` | 公开 | `var(--c-color-primary-light-1)` | 本组件 CSS `background`, `background-color`, `background-image` |
| `--c-scheduler-event-background-image` | 公开 | `linear-gradient(var(--c-scheduler-event-background), var(--c-scheduler-event-background))` | 本组件 CSS `background-image` |
| `--c-scheduler-event-color` | 公开 | `rgb(var(--c-primary-6))` | 本组件 CSS `background-image`, `border-left`, `color` |
| `--c-scheduler-event-font-size` | 公开 | `12px` | 本组件 CSS `font-size` |
| `--c-scheduler-event-gap` | 公开 | `2px` | 本组件 CSS `gap`, `height`, `margin-bottom`, `padding`, `top` |
| `--c-scheduler-event-min-height` | 公开 | `20px` | 本组件 CSS `min-height`, `min-width` |
| `--c-scheduler-event-padding` | 公开 | `4px` | 本组件 CSS `padding` |
| `--c-scheduler-event-radius` | 公开 | `4px` | 本组件 CSS `border-radius` |
| `--c-scheduler-focus-color` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `outline` |
| `--c-scheduler-focus-width` | 公开 | `2px` | 本组件 CSS `outline`, `outline-offset` |
| `--c-scheduler-font-size` | 公开 | `14px` | 本组件 CSS `font-size` |
| `--c-scheduler-gap` | 公开 | `12px` | 本组件 CSS `gap`, `margin-bottom`, `padding` |
| `--c-scheduler-ghost-opacity` | 公开 | `0.96` | 本组件 CSS `opacity` |
| `--c-scheduler-ghost-padding` | 公开 | `8px 12px` | 本组件 CSS `padding` |
| `--c-scheduler-ghost-z-index` | 公开 | `2000` | 本组件 CSS `z-index` |
| `--c-scheduler-gutter-width` | 公开 | `64px` | 本组件 CSS `grid-template-columns`, `min-width` |
| `--c-scheduler-header-z-index` | 公开 | `4` | 本组件 CSS `z-index` |
| `--c-scheduler-heading-height` | 公开 | `44px` | 本组件 CSS `min-height` |
| `--c-scheduler-lane-height` | 公开 | `38px` | 本组件 CSS `height`, `top` |
| `--c-scheduler-line-height` | 公开 | `1.5` | 本组件 CSS `line-height` |
| `--c-scheduler-max-height` | 公开 | `720px` | 本组件 CSS `max-height` |
| `--c-scheduler-min-height` | 公开 | `560px` | 本组件 CSS `min-height` |
| `--c-scheduler-mode-width` | 公开 | `150px` | 本组件 CSS `width` |
| `--c-scheduler-month-cell-height` | 公开 | `124px` | 本组件 CSS `height`, `min-height` |
| `--c-scheduler-muted-color` | 公开 | `var(--c-color-text-3)` | 本组件 CSS `color` |
| `--c-scheduler-now-color` | 公开 | `var(--c-sys-color-content-danger)` | 本组件 CSS `border-top`, `color` |
| `--c-scheduler-now-width` | 公开 | `2px` | 本组件 CSS `border-top` |
| `--c-scheduler-now-z-index` | 公开 | `3` | 本组件 CSS `z-index` |
| `--c-scheduler-padding` | 公开 | `16px` | 本组件 CSS `margin-bottom`, `padding` |
| `--c-scheduler-preview-duration` | 公开 | `0ms` | 本组件 CSS `transition` |
| `--c-scheduler-preview-opacity` | 公开 | `0.65` | 本组件 CSS `opacity` |
| `--c-scheduler-preview-shadow` | 公开 | `0 4px 16px rgba(0, 0, 0, 0.15)` | 本组件 CSS `box-shadow` |
| `--c-scheduler-preview-z-index` | 公开 | `3` | 本组件 CSS `z-index` |
| `--c-scheduler-radius` | 公开 | `8px` | 本组件 CSS `border-radius` |
| `--c-scheduler-resize-height` | 公开 | `6px` | 本组件 CSS `height` |
| `--c-scheduler-resource-width` | 公开 | `150px` | 本组件 CSS `grid-template-columns`, `min-width`, `width` |
| `--c-scheduler-resource-z-index` | 公开 | `2` | 本组件 CSS `z-index` |
| `--c-scheduler-selected-background` | 公开 | `var(--c-color-primary-light-1)` | 本组件 CSS `background` |
| `--c-scheduler-sidebar-width` | 公开 | `220px` | 本组件 CSS `width` |
| `--c-scheduler-slot-height` | 公开 | `36px` | 本组件 CSS `height` |
| `--c-scheduler-stack-focus-step` | 公开 | `1` | 本组件 CSS `z-index` |
| `--c-scheduler-subtle-background` | 公开 | `var(--c-color-fill-1)` | 本组件 CSS `background` |
| `--c-scheduler-timeline-min-width` | 公开 | `1000px` | 本组件 CSS `min-width` |
| `--c-scheduler-today-background` | 公开 | `var(--c-color-primary-light-1)` | 本组件 CSS `background` |
| `--c-scheduler-today-color` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `color` |
| `--c-scheduler-unavailable-background` | 公开 | `var(--c-color-fill-2)` | 本组件 CSS `background` |
| `--c-scheduler-virtual-height` | 公开 | `480px` | 运行时引用(不代表可见性证明) `scheduler/components/SchedulerTimelineRows.vue` |
| `--c-scheduler-weekday-count` | 公开 | `7` | 本组件 CSS `grid-template-columns` |
## scrollbar
声明来源: `src/scrollbar/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-scrollbar-thumb-bar-bg-color` | 公开 | `var(--c-sys-color-border-default)` | 本组件 CSS `background-color` |
| `--c-scrollbar-thumb-bar-bg-color-hover` | 公开 | `var(--c-sys-color-border-strong)` | 本组件 CSS `background-color` |
| `--c-scrollbar-thumb-bar-border-radius` | 公开 | `6px` | 本组件 CSS `border-radius` |
| `--c-scrollbar-thumb-bar-size` | 公开 | `9px` | 本组件 CSS `height`, `margin`, `width` |
| `--c-scrollbar-track-bg-color` | 公开 | `var(--c-sys-color-surface-muted)` | 本组件 CSS `background-color` |
| `--c-scrollbar-track-border-color` | 公开 | `var(--c-sys-color-border-subtle)` | 本组件 CSS `border-bottom`, `border-left`, `border-right`, `border-top` |
| `--c-scrollbar-track-border-size` | 公开 | `1px` | 本组件 CSS `border-bottom`, `border-left`, `border-right`, `border-top`, `margin`, `right` |
| `--c-scrollbar-track-size` | 公开 | `15px` | 本组件 CSS `height`, `margin`, `width` |
## search
声明来源: `src/search/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-search-action-color-text` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-search-action-font-size` | 公开 | `16px` | 本组件 CSS `font-size` |
| `--c-search-action-spacing-inline-start` | 公开 | `16px` | 本组件 CSS `margin-inline-start` |
| `--c-search-color-bg` | 公开 | `var(--c-sys-color-surface-default)` | 本组件 CSS `background` |
| `--c-search-color-icon` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-search-field-color-bg` | 公开 | `var(--c-sys-color-surface-muted)` | 本组件 CSS `background` |
| `--c-search-field-radius` | 公开 | `4px` | 本组件 CSS `border-radius` |
| `--c-search-field-size-min-height` | 公开 | `32px` | 本组件 CSS `border-radius`, `min-height` |
| `--c-search-field-spacing-padding` | 公开 | `0` | 本组件 CSS `padding` |
| `--c-search-history-item-color-border` | 公开 | `var(--c-sys-color-border-default)` | 本组件 CSS `border-bottom` |
| `--c-search-history-item-color-text` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-search-history-item-size-min-height` | 公开 | `44px` | 本组件 CSS `min-height` |
| `--c-search-history-spacing-padding` | 公开 | `8px 16px 24px` | 本组件 CSS `padding` |
| `--c-search-icon-spacing` | 公开 | `8px` | 本组件 CSS `margin-inline-end` |
| `--c-search-label-color-text` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-search-label-font-size` | 公开 | `16px` | 本组件 CSS `font-size` |
| `--c-search-label-spacing-inline-end` | 公开 | `10px` | 本组件 CSS `margin-inline-end` |
| `--c-search-opacity-disabled` | 公开 | `0.6` | 本组件 CSS `opacity` |
| `--c-search-select-icon-size` | 公开 | `18px` | 本组件 CSS `font-size` |
| `--c-search-select-icon-spacing` | 公开 | `2px` | 本组件 CSS `margin-inline-start` |
| `--c-search-select-size-max-width` | 公开 | `120px` | 本组件 CSS `max-width` |
| `--c-search-select-size-min-width` | 公开 | `96px` | 本组件 CSS `min-width` |
| `--c-search-size-icon` | 公开 | `16px` | 本组件 CSS `font-size` |
| `--c-search-size-min-height` | 公开 | `32px` | 本组件 CSS `min-height` |
| `--c-search-spacing-padding` | 公开 | `0` | 本组件 CSS `padding` |
## segmented
声明来源: `src/segmented/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-segmented-bg` | 公开 | `var(--c-sys-color-surface-muted)` | 本组件 CSS `background` |
| `--c-segmented-border-radius` | 公开 | `var(--c-border-radius-md)` | 本组件 CSS `border-radius` |
| `--c-segmented-font-size-lg` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `font-size` |
| `--c-segmented-font-size-md` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `font-size` |
| `--c-segmented-font-size-sm` | 公开 | `var(--c-font-size-body-1)` | 本组件 CSS `font-size` |
| `--c-segmented-font-size-xl` | 公开 | `var(--c-font-size-title-1)` | 本组件 CSS `font-size` |
| `--c-segmented-font-size-xs` | 公开 | `var(--c-font-size-body-1)` | 本组件 CSS `font-size` |
| `--c-segmented-height-lg` | 公开 | `var(--c-size-9)` | 本组件 CSS `min-height` |
| `--c-segmented-height-md` | 公开 | `var(--c-size-8)` | 本组件 CSS `min-height` |
| `--c-segmented-height-sm` | 公开 | `var(--c-size-7)` | 本组件 CSS `min-height` |
| `--c-segmented-height-xl` | 公开 | `var(--c-size-10)` | 本组件 CSS `min-height` |
| `--c-segmented-height-xs` | 公开 | `var(--c-size-6)` | 本组件 CSS `min-height` |
| `--c-segmented-item-bg-hover` | 公开 | `var(--c-sys-color-state-hover)` | 本组件 CSS `background` |
| `--c-segmented-item-bg-selected` | 公开 | `var(--c-sys-color-surface-default)` | 本组件 CSS `background` |
| `--c-segmented-item-border-radius` | 公开 | `calc(var(--c-segmented-border-radius) - 1px)` | 本组件 CSS `border-radius` |
| `--c-segmented-item-color` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-segmented-item-color-hover` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-segmented-item-color-selected` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-segmented-item-disabled-color` | 公开 | `var(--c-sys-color-content-disabled)` | 本组件 CSS `color` |
| `--c-segmented-item-font-weight-selected` | 公开 | `500` | 本组件 CSS `font-weight` |
| `--c-segmented-item-padding-lg` | 公开 | `0 14px` | 本组件 CSS `padding` |
| `--c-segmented-item-padding-md` | 公开 | `0 var(--c-spacing-6)` | 本组件 CSS `padding` |
| `--c-segmented-item-padding-sm` | 公开 | `0 var(--c-spacing-5)` | 本组件 CSS `padding` |
| `--c-segmented-item-padding-xl` | 公开 | `0 var(--c-spacing-7)` | 本组件 CSS `padding` |
| `--c-segmented-item-padding-xs` | 公开 | `0 var(--c-spacing-4)` | 本组件 CSS `padding` |
| `--c-segmented-label-gap` | 公开 | `var(--c-spacing-2)` | 本组件 CSS `gap` |
| `--c-segmented-padding` | 公开 | `var(--c-border-width-3)` | 本组件 CSS `padding` |
| `--c-segmented-shadow-selected` | 公开 | `0 1px 2px rgba(0, 0, 0, 0.06)` | 本组件 CSS `box-shadow` |
## select
声明来源: `src/select/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-select-popup-bg` | 公开 | `var(--c-sys-color-surface-overlay)` | 本组件 CSS `background-color` |
| `--c-select-popup-border-color` | 公开 | `var(--c-sys-color-border-default)` | 本组件 CSS `border`, `border-bottom`, `border-color`, `border-top` |
| `--c-select-popup-border-radius` | 公开 | `var(--c-sys-radius-md)` | 本组件 CSS `border-radius` |
| `--c-select-popup-box-shadow` | 公开 | `0 4px 10px rgba(0, 0, 0, 0.1)` | 本组件 CSS `box-shadow` |
| `--c-select-popup-font-size` | 公开 | `var(--c-sys-font-size-md)` | 本组件 CSS `font-size` |
| `--c-select-popup-group-title-font-size` | 公开 | `var(--c-sys-font-size-xs)` | 本组件 CSS `font-size` |
| `--c-select-popup-group-title-height` | 公开 | `20px` | 本组件 CSS `line-height` |
| `--c-select-popup-group-title-padding-horizontal` | 公开 | `var(--c-select-popup-option-padding-horizontal)` | 本组件 CSS `padding` |
| `--c-select-popup-group-title-padding-top` | 公开 | `var(--c-sys-space-4)` | 本组件 CSS `margin-top` |
| `--c-select-popup-group-title-text-color` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-select-popup-loading-min-height` | 公开 | `50px` | 本组件 CSS `min-height` |
| `--c-select-popup-max-height` | 公开 | `200px` | 本组件 CSS `max-height` |
| `--c-select-popup-option-bg` | 公开 | `var(--c-sys-color-surface-overlay)` | 本组件 CSS `background-color` |
| `--c-select-popup-option-bg-disabled` | 公开 | `var(--c-sys-color-surface-overlay)` | 本组件 CSS `background-color` |
| `--c-select-popup-option-bg-hover` | 公开 | `var(--c-sys-color-state-hover)` | 本组件 CSS `background-color` |
| `--c-select-popup-option-bg-selected` | 公开 | `var(--c-sys-color-surface-overlay)` | 本组件 CSS `background-color` |
| `--c-select-popup-option-check-color` | 公开 | `var(--c-sys-color-action-primary)` | 本组件 CSS `color` |
| `--c-select-popup-option-check-gap` | 公开 | `var(--c-sys-space-4)` | 本组件 CSS `margin-inline-start` |
| `--c-select-popup-option-check-size` | 公开 | `var(--c-sys-font-size-md)` | 本组件 CSS `height`, `width` |
| `--c-select-popup-option-font-weight-selected` | 公开 | `var(--c-sys-font-weight-medium)` | 本组件 CSS `font-weight` |
| `--c-select-popup-option-height` | 公开 | `36px` | 本组件 CSS `line-height` |
| `--c-select-popup-option-icon-margin-right` | 公开 | `var(--c-sys-space-4)` | 本组件 CSS `margin-right` |
| `--c-select-popup-option-padding-horizontal` | 公开 | `var(--c-sys-space-5)` | 本组件 CSS `padding`, `padding-inline` |
| `--c-select-popup-option-suffix-icon-margin-left` | 公开 | `var(--c-sys-space-5)` | 本组件 CSS `margin-left` |
| `--c-select-popup-option-text-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-select-popup-option-text-color-disabled` | 公开 | `var(--c-sys-color-content-disabled)` | 本组件 CSS `color` |
| `--c-select-popup-option-text-color-hover` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-select-popup-option-text-color-selected` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-select-popup-padding-vertical` | 公开 | `var(--c-sys-space-2)` | 本组件 CSS `padding`, `padding-block` |
## skeleton
声明来源: `src/skeleton/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-skeleton-animation-background` | 公开 | `linear-gradient(90deg, transparent, var(--c-sys-color-surface-default), transparent)` | 本组件 CSS `background` |
| `--c-skeleton-animation-duration` | 公开 | `1s` | 本组件 CSS `animation` |
| `--c-skeleton-avatar-background-color` | 公开 | `var(--c-sys-color-state-hover)` | 本组件 CSS `background-color` |
| `--c-skeleton-avatar-border-radius` | 公开 | `50%` | 本组件 CSS `border-radius` |
| `--c-skeleton-avatar-margin-right` | 公开 | `var(--c-sys-space-6)` | 本组件 CSS `margin-right` |
| `--c-skeleton-avatar-size` | 公开 | `34px` | 本组件 CSS `height`, `width` |
| `--c-skeleton-card-background-color` | 公开 | `var(--c-sys-color-state-hover)` | 本组件 CSS `background-color` |
| `--c-skeleton-card-border-radius` | 公开 | `var(--c-sys-radius-md)` | 本组件 CSS `border-radius` |
| `--c-skeleton-card-height` | 公开 | `160px` | 本组件 CSS `height` |
| `--c-skeleton-card-margin-bottom` | 公开 | `var(--c-sys-space-6)` | 本组件 CSS `margin-bottom` |
| `--c-skeleton-content-padding` | 公开 | `var(--c-sys-space-6)` | 本组件 CSS `padding` |
| `--c-skeleton-row-border-radius` | 公开 | `10px` | 本组件 CSS `border-radius` |
| `--c-skeleton-row-height` | 公开 | `12px` | 本组件 CSS `height` |
| `--c-skeleton-row-margin-top` | 公开 | `10px` | 本组件 CSS `margin-top` |
| `--c-skeleton-shape-border-radius` | 公开 | `var(--c-sys-radius-md)` | 本组件 CSS `border-radius` |
| `--c-skeleton-shape-size-lg` | 公开 | `60px` | 本组件 CSS `height`, `width` |
| `--c-skeleton-shape-size-md` | 公开 | `48px` | 本组件 CSS `height`, `width` |
| `--c-skeleton-shape-size-sm` | 公开 | `36px` | 本组件 CSS `height`, `width` |
| `--c-skeleton-title-background-color` | 公开 | `var(--c-sys-color-state-hover)` | 本组件 CSS `background-color` |
| `--c-skeleton-title-border-radius` | 公开 | `10px` | 本组件 CSS `border-radius` |
| `--c-skeleton-title-width` | 公开 | `50%` | 本组件 CSS `width` |
| `--c-skeleton-transition-duration` | 公开 | `var(--c-sys-motion-duration-slow)` | 本组件 CSS `transition` |
## slider
声明来源: `src/slider/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-internal-slider-border-width` | 内部 | `2px` | 本组件 CSS `border`, `outline` |
| `--c-internal-slider-focus-offset` | 内部 | `3px` | 本组件 CSS `outline-offset` |
| `--c-internal-slider-mark-offset` | 内部 | `8px` | 本组件 CSS `left`, `top` |
| `--c-slider-active-color` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `background`, `outline` |
| `--c-slider-control-height` | 公开 | `var(--c-sys-control-height-md)` | 本组件 CSS `height`, `min-height`, `padding-bottom`, `padding-inline-end`, `width` |
| `--c-slider-disabled-color` | 公开 | `var(--c-sys-color-content-disabled)` | 本组件 CSS `background`, `border-color` |
| `--c-slider-error-color` | 公开 | `var(--c-sys-color-content-danger)` | 本组件 CSS `background`, `border-color` |
| `--c-slider-font-size` | 公开 | `var(--c-sys-font-size-sm)` | 本组件 CSS `font-size` |
| `--c-slider-gap` | 公开 | `var(--c-sys-space-4)` | 本组件 CSS `bottom`, `gap`, `left`, `padding` |
| `--c-slider-input-width` | 公开 | `80px` | 本组件 CSS `width` |
| `--c-slider-radius` | 公开 | `var(--c-sys-radius-md)` | 本组件 CSS `border-radius` |
| `--c-slider-text-color` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-slider-thumb-border-color` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `border` |
| `--c-slider-thumb-color` | 公开 | `var(--c-sys-color-surface-default)` | 本组件 CSS `background` |
| `--c-slider-thumb-size` | 公开 | `16px` | 本组件 CSS `height`, `width` |
| `--c-slider-tooltip-background` | 公开 | `var(--c-sys-color-surface-tooltip)` | 本组件 CSS `background` |
| `--c-slider-tooltip-color` | 公开 | `var(--c-sys-color-content-on-dark)` | 本组件 CSS `color` |
| `--c-slider-track-color` | 公开 | `var(--c-sys-color-state-hover)` | 本组件 CSS `background` |
| `--c-slider-track-height` | 公开 | `4px` | 本组件 CSS `height`, `width` |
| `--c-slider-transition-duration` | 公开 | `var(--c-sys-motion-duration-fast)` | 本组件 CSS `transition` |
## space
声明来源: `src/space/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-space-size-lg-column-gap` | 公开 | `var(--c-sys-space-5)` | 已审动态运行时 `space/space.tsx: getSize -> gapStyle -> style.gap` |
| `--c-space-size-lg-row-gap` | 公开 | `var(--c-sys-space-6)` | 已审动态运行时 `space/space.tsx: getSize -> gapStyle -> style.gap` |
| `--c-space-size-md-column-gap` | 公开 | `var(--c-sys-space-4)` | 已审动态运行时 `space/space.tsx: getSize -> gapStyle -> style.gap` |
| `--c-space-size-md-row-gap` | 公开 | `var(--c-sys-space-5)` | 已审动态运行时 `space/space.tsx: getSize -> gapStyle -> style.gap` |
| `--c-space-size-sm-column-gap` | 公开 | `var(--c-sys-space-3)` | 已审动态运行时 `space/space.tsx: getSize -> gapStyle -> style.gap` |
| `--c-space-size-sm-row-gap` | 公开 | `var(--c-sys-space-4)` | 已审动态运行时 `space/space.tsx: getSize -> gapStyle -> style.gap` |
| `--c-space-size-xl-column-gap` | 公开 | `var(--c-sys-space-6)` | 已审动态运行时 `space/space.tsx: getSize -> gapStyle -> style.gap` |
| `--c-space-size-xl-row-gap` | 公开 | `var(--c-sys-space-8)` | 已审动态运行时 `space/space.tsx: getSize -> gapStyle -> style.gap` |
| `--c-space-size-xs-column-gap` | 公开 | `var(--c-sys-space-2)` | 已审动态运行时 `space/space.tsx: getSize -> gapStyle -> style.gap` |
| `--c-space-size-xs-row-gap` | 公开 | `var(--c-sys-space-2)` | 已审动态运行时 `space/space.tsx: getSize -> gapStyle -> style.gap` |
## split
声明来源: `src/split/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-split-trigger-bg` | 公开 | `var(--c-color-neutral-3)` | 本组件 CSS `background-color` |
| `--c-split-trigger-font-size-icon` | 公开 | `12px` | 本组件 CSS `font-size`, `margin` |
| `--c-split-trigger-icon-color` | 公开 | `var(--c-color-text-1)` | 本组件 CSS `color` |
| `--c-split-trigger-size-icon-wrapper` | 公开 | `6px` | 本组件 CSS `height`, `width` |
## statistic
声明来源: `src/statistic/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-statistic-decimal-font-size` | 公开 | `inherit` | 本组件 CSS `font-size` |
| `--c-statistic-extra-color` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-statistic-extra-font-size` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `font-size` |
| `--c-statistic-extra-margin-top` | 公开 | `var(--c-spacing-4)` | 本组件 CSS `margin-top` |
| `--c-statistic-prefix-color` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-statistic-prefix-font-size` | 公开 | `14px` | 本组件 CSS `font-size` |
| `--c-statistic-prefix-spacing` | 公开 | `var(--c-spacing-1)` | 本组件 CSS `margin-right` |
| `--c-statistic-suffix-color` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-statistic-suffix-font-size` | 公开 | `14px` | 本组件 CSS `font-size` |
| `--c-statistic-suffix-spacing` | 公开 | `var(--c-spacing-1)` | 本组件 CSS `margin-left` |
| `--c-statistic-title-color` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-statistic-title-font-size` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `font-size` |
| `--c-statistic-title-margin-bottom` | 公开 | `var(--c-spacing-4)` | 本组件 CSS `margin-bottom` |
| `--c-statistic-value-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-statistic-value-font-size` | 公开 | `26px` | 本组件 CSS `font-size` |
| `--c-statistic-value-font-weight` | 公开 | `var(--c-font-weight-500)` | 本组件 CSS `font-weight` |
## steps
声明来源: `src/steps/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-steps-arrow-item-bg-error` | 公开 | `var(--c-sys-color-content-danger)` | 本组件 CSS `background-color`, `border-inline-start` |
| `--c-steps-arrow-item-bg-finish` | 公开 | `var(--c-sys-color-state-selected)` | 本组件 CSS `background-color`, `border-inline-start` |
| `--c-steps-arrow-item-bg-process` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `background-color`, `border-inline-start` |
| `--c-steps-arrow-item-bg-wait` | 公开 | `var(--c-sys-color-surface-muted)` | 本组件 CSS `background-color`, `border-inline-start` |
| `--c-steps-arrow-item-description-color-error` | 公开 | `var(--c-sys-color-surface-default)` | 本组件 CSS `color` |
| `--c-steps-arrow-item-description-color-finish` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-steps-arrow-item-description-color-process` | 公开 | `var(--c-sys-color-surface-default)` | 本组件 CSS `color` |
| `--c-steps-arrow-item-description-color-wait` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-steps-arrow-item-description-margin-top` | 公开 | `0` | 本组件 CSS `margin-top` |
| `--c-steps-arrow-item-gap` | 公开 | `var(--c-spacing-2)` | 本组件 CSS `margin-inline-end` |
| `--c-steps-arrow-item-title-color-error` | 公开 | `var(--c-sys-color-surface-default)` | 本组件 CSS `color` |
| `--c-steps-arrow-item-title-color-finish` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-steps-arrow-item-title-color-process` | 公开 | `var(--c-sys-color-surface-default)` | 本组件 CSS `color` |
| `--c-steps-arrow-item-title-color-wait` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-steps-arrow-item-title-font-weight-active` | 公开 | `var(--c-font-weight-500)` | 本组件 CSS `font-weight` |
| `--c-steps-arrow-size-md-title-padding-left` | 公开 | `var(--c-spacing-7)` | 本组件 CSS `padding-inline-start` |
| `--c-steps-arrow-size-sm-title-padding-left` | 公开 | `var(--c-spacing-8)` | 本组件 CSS `padding-inline-start` |
| `--c-steps-changeable-hover-text-color` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `color` |
| `--c-steps-circle-horizontal-item-description-margin-top` | 公开 | `var(--c-spacing-1)` | 本组件 CSS `margin-top` |
| `--c-steps-circle-item-bg-error` | 公开 | `var(--c-sys-color-content-danger)` | 本组件 CSS `background-color` |
| `--c-steps-circle-item-bg-finish` | 公开 | `var(--c-sys-color-state-selected)` | 本组件 CSS `background-color` |
| `--c-steps-circle-item-bg-process` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `background-color` |
| `--c-steps-circle-item-bg-wait` | 公开 | `var(--c-sys-color-surface-muted)` | 本组件 CSS `background-color` |
| `--c-steps-circle-item-border-color-error` | 公开 | `transparent` | 本组件 CSS `border` |
| `--c-steps-circle-item-border-color-finish` | 公开 | `transparent` | 本组件 CSS `border` |
| `--c-steps-circle-item-border-color-process` | 公开 | `transparent` | 本组件 CSS `border` |
| `--c-steps-circle-item-border-color-wait` | 公开 | `transparent` | 本组件 CSS `border` |
| `--c-steps-circle-item-description-color-error` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-steps-circle-item-description-color-finish` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-steps-circle-item-description-color-process` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-steps-circle-item-description-color-wait` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-steps-circle-item-icon-border-radius` | 公开 | `var(--c-border-radius-circle)` | 本组件 CSS `border-radius` |
| `--c-steps-circle-item-icon-gap` | 公开 | `var(--c-spacing-6)` | 本组件 CSS `inset-inline-start`, `margin-inline-end`, `padding-inline-end` |
| `--c-steps-circle-item-icon-text-color-error` | 公开 | `var(--c-sys-color-surface-default)` | 本组件 CSS `color` |
| `--c-steps-circle-item-icon-text-color-finish` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `color` |
| `--c-steps-circle-item-icon-text-color-process` | 公开 | `var(--c-sys-color-surface-default)` | 本组件 CSS `color` |
| `--c-steps-circle-item-icon-text-color-wait` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-steps-circle-item-tail-color-error` | 公开 | `var(--c-sys-color-content-danger)` | 本组件 CSS `background-color` |
| `--c-steps-circle-item-tail-color-process` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `background-color` |
| `--c-steps-circle-item-tail-color-wait` | 公开 | `var(--c-sys-color-border-default)` | 本组件 CSS `background-color` |
| `--c-steps-circle-item-tail-size` | 公开 | `var(--c-border-width-1)` | 本组件 CSS `height`, `inset-inline-start`, `top`, `width` |
| `--c-steps-circle-item-title-color-error` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-steps-circle-item-title-color-finish` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-steps-circle-item-title-color-process` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-steps-circle-item-title-color-wait` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-steps-circle-item-title-font-weight-active` | 公开 | `var(--c-font-weight-500)` | 本组件 CSS `font-weight` |
| `--c-steps-circle-tail-hack-width` | 公开 | `5000px` | 本组件 CSS `width` |
| `--c-steps-circle-vertical-item-description-margin-top` | 公开 | `var(--c-spacing-1)` | 本组件 CSS `margin-top` |
| `--c-steps-circle-vertical-tail-padding-extra` | 公开 | `var(--c-spacing-3)` | 本组件 CSS `padding` |
| `--c-steps-direction-horizontal-description-width` | 公开 | `var(--c-size-35)` | 本组件 CSS `max-width` |
| `--c-steps-dot-horizontal-item-description-margin-top` | 公开 | `var(--c-spacing-2)` | 本组件 CSS `margin-top` |
| `--c-steps-dot-horizontal-item-title-margin-top` | 公开 | `var(--c-spacing-2)` | 本组件 CSS `margin-top` |
| `--c-steps-dot-item-bg-error` | 公开 | `var(--c-sys-color-content-danger)` | 本组件 CSS `background-color` |
| `--c-steps-dot-item-bg-finish` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `background-color` |
| `--c-steps-dot-item-bg-process` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `background-color` |
| `--c-steps-dot-item-bg-wait` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `background-color` |
| `--c-steps-dot-item-border-color-error` | 公开 | `var(--c-sys-color-content-danger)` | 本组件 CSS `border-color` |
| `--c-steps-dot-item-border-color-finish` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `border-color` |
| `--c-steps-dot-item-border-color-process` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `border-color` |
| `--c-steps-dot-item-border-color-wait` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `border-color` |
| `--c-steps-dot-item-description-color-error` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-steps-dot-item-description-color-finish` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-steps-dot-item-description-color-process` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-steps-dot-item-description-color-wait` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-steps-dot-item-icon-border-radius` | 公开 | `var(--c-border-radius-circle)` | 本组件 CSS `border-radius` |
| `--c-steps-dot-item-icon-gap` | 公开 | `var(--c-spacing-2)` | 本组件 CSS `inset-inline-start`, `margin-inline-end`, `padding-top` |
| `--c-steps-dot-item-icon-margin-left` | 公开 | `calc((var(--c-steps-label-vertical-content-width) - var(--c-steps-dot-item-icon-size)) / 2)` | 本组件 CSS `inset-inline-start`, `margin-inline-start` |
| `--c-steps-dot-item-icon-size` | 公开 | `var(--c-size-2)` | 本组件 CSS `height`, `inset-inline-start`, `margin-inline-end`, `margin-inline-start`, `margin-top`, `padding-top`, `top`, `width` |
| `--c-steps-dot-item-icon-size-active` | 公开 | `var(--c-spacing-5)` | 本组件 CSS `height`, `margin-inline-start`, `margin-top`, `width` |
| `--c-steps-dot-item-tail-color-error` | 公开 | `var(--c-sys-color-content-danger)` | 本组件 CSS `background-color` |
| `--c-steps-dot-item-tail-color-process` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `background-color` |
| `--c-steps-dot-item-tail-color-wait` | 公开 | `var(--c-sys-color-border-default)` | 本组件 CSS `background-color` |
| `--c-steps-dot-item-tail-size` | 公开 | `var(--c-border-width-1)` | 本组件 CSS `height`, `top` |
| `--c-steps-dot-item-title-color-error` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-steps-dot-item-title-color-finish` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-steps-dot-item-title-color-process` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-steps-dot-item-title-color-wait` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-steps-dot-item-title-font-weight-active` | 公开 | `var(--c-font-weight-500)` | 本组件 CSS `font-weight` |
| `--c-steps-dot-vertical-item-description-margin-top` | 公开 | `var(--c-spacing-2)` | 本组件 CSS `margin-top` |
| `--c-steps-dot-vertical-item-dot-margin-top` | 公开 | `var(--c-spacing-4)` | 本组件 CSS `margin-top` |
| `--c-steps-dot-vertical-item-dot-margin-top-active` | 公开 | `calc(var(--c-steps-dot-vertical-item-dot-margin-top) - (var(--c-steps-dot-item-icon-size-active) - var(--c-steps-dot-item-icon-size)))` | 本组件 CSS `margin-top` |
| `--c-steps-dot-vertical-item-icon-margin-right` | 公开 | `var(--c-spacing-7)` | 本组件 CSS `margin-inline-end` |
| `--c-steps-dot-vertical-tail-padding-bottom` | 公开 | `var(--c-spacing-1)` | 本组件 CSS `padding-bottom` |
| `--c-steps-dot-vertical-tail-padding-top-extra` | 公开 | `var(--c-spacing-2)` | 本组件 CSS `padding-top` |
| `--c-steps-label-vertical-content-width` | 公开 | `100%` | 本组件 CSS `inset-inline-start`, `margin-inline-start` |
| `--c-steps-navigation-arrow-color` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `border` |
| `--c-steps-navigation-arrow-line-width` | 公开 | `var(--c-border-width-2)` | 本组件 CSS `border` |
| `--c-steps-navigation-arrow-right` | 公开 | `30px` | 本组件 CSS `inset-inline-end` |
| `--c-steps-navigation-arrow-size` | 公开 | `var(--c-spacing-3)` | 本组件 CSS `height`, `width` |
| `--c-steps-navigation-arrow-spacing-right` | 公开 | `var(--c-spacing-5)` | 本组件 CSS `padding-inline-end` |
| `--c-steps-navigation-arrow-top` | 公开 | `var(--c-spacing-5)` | 本组件 CSS `top` |
| `--c-steps-navigation-content-margin-bottom` | 公开 | `var(--c-spacing-8)` | 本组件 CSS `margin-bottom` |
| `--c-steps-navigation-description-padding-right` | 公开 | `var(--c-spacing-8)` | 本组件 CSS `padding-inline-end` |
| `--c-steps-navigation-ink-bg` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `background-color` |
| `--c-steps-navigation-ink-height` | 公开 | `var(--c-border-width-2)` | 本组件 CSS `height` |
| `--c-steps-navigation-ink-spacing-left` | 公开 | `var(--c-spacing-none)` | 本组件 CSS `inset-inline-start` |
| `--c-steps-navigation-ink-spacing-right` | 公开 | `30px` | 本组件 CSS `inset-inline-end` |
| `--c-steps-navigation-margin-right` | 公开 | `var(--c-spacing-10)` | 本组件 CSS `margin-inline-end` |
| `--c-steps-navigation-padding-left` | 公开 | `var(--c-spacing-8)` | 本组件 CSS `padding-inline-start` |
| `--c-steps-node-font-weight` | 公开 | `var(--c-font-weight-500)` | 本组件 CSS `font-weight` |
| `--c-steps-size-md` | 公开 | `var(--c-size-7)` | 本组件 CSS `height`, `inset-inline-start`, `line-height`, `margin-inline-start`, `margin-top`, `padding`, `padding-inline-end`, `top`, `width` |
| `--c-steps-size-md-arrow` | 公开 | `var(--c-size-18)` | 本组件 CSS `border-bottom`, `border-inline-start`, `border-top`, `height`, `inset-inline-end`, `padding-inline-start` |
| `--c-steps-size-md-description-font-size` | 公开 | `var(--c-font-size-body-1)` | 本组件 CSS `font-size` |
| `--c-steps-size-md-icon-font-size` | 公开 | `var(--c-size-4)` | 本组件 CSS `font-size` |
| `--c-steps-size-md-item-icon-margin-left` | 公开 | `calc((var(--c-steps-label-vertical-content-width) - var(--c-steps-size-md)) / 2)` | 本组件 CSS `inset-inline-start`, `margin-inline-start` |
| `--c-steps-size-md-title-font-size` | 公开 | `var(--c-font-size-title-1)` | 本组件 CSS `font-size` |
| `--c-steps-size-sm` | 公开 | `var(--c-size-6)` | 本组件 CSS `height`, `inset-inline-start`, `line-height`, `margin-inline-start`, `padding`, `padding-inline-end`, `top`, `width` |
| `--c-steps-size-sm-arrow` | 公开 | `var(--c-size-10)` | 本组件 CSS `border-bottom`, `border-inline-start`, `border-top`, `height`, `inset-inline-end`, `padding-inline-start` |
| `--c-steps-size-sm-description-font-size` | 公开 | `var(--c-font-size-body-1)` | 本组件 CSS `font-size` |
| `--c-steps-size-sm-icon-font-size` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `font-size` |
| `--c-steps-size-sm-item-icon-margin-left` | 公开 | `calc((var(--c-steps-label-vertical-content-width) - var(--c-steps-size-sm)) / 2)` | 本组件 CSS `inset-inline-start`, `margin-inline-start` |
| `--c-steps-size-sm-title-font-size` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `font-size` |
| `--c-steps-transition-duration-1` | 公开 | `var(--c-transition-duration-1)` | 本组件 CSS `transition` |
| `--c-steps-transition-timing-function-linear` | 公开 | `var(--c-transition-timing-function-linear)` | 本组件 CSS `transition` |
| `--c-steps-vertical-item-min-height` | 公开 | `90px` | 本组件 CSS `min-height` |
## switch
声明来源: `src/switch/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-switch-disabled-opacity` | 公开 | `0.5` | 本组件 CSS `opacity` |
| `--c-switch-duration` | 公开 | `var(--c-sys-motion-duration-standard)` | 本组件 CSS `transition` |
| `--c-switch-focus-width` | 公开 | `2px` | 本组件 CSS `outline`, `outline-offset` |
| `--c-switch-font-size` | 公开 | `var(--c-sys-font-size-xs)` | 本组件 CSS `font-size` |
| `--c-switch-gap` | 公开 | `var(--c-sys-space-2)` | 本组件 CSS `inset-inline-start`, `padding-inline` |
| `--c-switch-handle-background` | 公开 | `var(--c-sys-color-surface-default)` | 本组件 CSS `background` |
| `--c-switch-handle-color` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `color` |
| `--c-switch-handle-size` | 公开 | `16px` | 本组件 CSS `height`, `inset-inline-start`, `padding-inline`, `width` |
| `--c-switch-height` | 公开 | `24px` | 本组件 CSS `height` |
| `--c-switch-hit-area` | 公开 | `0px` | 本组件 CSS `inset` |
| `--c-switch-line-handle-size` | 公开 | `20px` | 本组件 CSS `height`, `inset-inline-start`, `padding-inline`, `width` |
| `--c-switch-line-height` | 公开 | `12px` | 本组件 CSS `height` |
| `--c-switch-loading-duration` | 公开 | `1s` | 本组件 CSS `animation` |
| `--c-switch-radius` | 公开 | `var(--c-sys-radius-pill)` | 本组件 CSS `border-radius` |
| `--c-switch-ripple-duration` | 公开 | `400ms` | 本组件 CSS `animation` |
| `--c-switch-ripple-scale` | 公开 | `2.4` | 本组件 CSS `transform` |
| `--c-switch-round-radius` | 公开 | `var(--c-sys-radius-md)` | 本组件 CSS `border-radius` |
| `--c-switch-shadow-color` | 公开 | `#0003` | 运行时引用(不代表可见性证明) `switch/Switch.vue` |
| `--c-switch-size-lg-scale` | 公开 | `1.2` | 本组件 CSS `font-size`, `height`, `inset-inline-start`, `min-width`, `padding-inline`, `width` |
| `--c-switch-size-sm-scale` | 公开 | `0.8` | 本组件 CSS `font-size`, `height`, `inset-inline-start`, `min-width`, `padding-inline`, `width` |
| `--c-switch-text-color` | 公开 | `var(--c-sys-color-surface-default)` | 本组件 CSS `color` |
| `--c-switch-tonal-border-color` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `background`, `border` |
| `--c-switch-tonal-border-width` | 公开 | `2px` | 本组件 CSS `border` |
| `--c-switch-tonal-handle-color` | 公开 | `var(--c-sys-color-surface-default)` | 本组件 CSS `color` |
| `--c-switch-tonal-handle-size` | 公开 | `24px` | 本组件 CSS `height`, `inset-inline-start`, `padding-inline`, `width` |
| `--c-switch-tonal-height` | 公开 | `32px` | 本组件 CSS `height` |
| `--c-switch-tonal-text-color` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-switch-tonal-track-background` | 公开 | `var(--c-sys-color-surface-muted)` | 本组件 CSS `background` |
| `--c-switch-tonal-width` | 公开 | `52px` | 本组件 CSS `min-width` |
| `--c-switch-track-active-background` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `background`, `outline` |
| `--c-switch-track-background` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `background` |
| `--c-switch-track-error-background` | 公开 | `var(--c-sys-color-content-danger)` | 本组件 CSS `background`, `border-color` |
| `--c-switch-width` | 公开 | `40px` | 本组件 CSS `min-width` |
## table
声明来源: `src/table/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-table-body-bg` | 公开 | `var(--c-color-bg-2)` | 本组件 CSS `background-color` |
| `--c-table-body-cell-bg` | 公开 | `var(--c-color-bg-2)` | 本组件 CSS `background-color` |
| `--c-table-body-cell-text-color` | 公开 | `rgb(var(--c-gray-10))` | 本组件 CSS `color` |
| `--c-table-body-min-height` | 公开 | `40px` | 本组件 CSS `min-height` |
| `--c-table-body-row-active-bg` | 公开 | `var(--c-color-fill-1)` | 本组件 CSS `background-color` |
| `--c-table-body-row-active-dark-bg` | 公开 | `var(--c-color-neutral-2)` | 本组件 CSS `background-color` |
| `--c-table-body-row-hover-bg` | 公开 | `var(--c-color-fill-1)` | 本组件 CSS `background-color` |
| `--c-table-body-sorted-cell-bg` | 公开 | `var(--c-color-fill-1)` | 本组件 CSS `background-color` |
| `--c-table-body-stripe-row-bg` | 公开 | `var(--c-color-fill-1)` | 本组件 CSS `background-color` |
| `--c-table-border-color` | 公开 | `var(--c-color-neutral-3)` | 本组件 CSS `border`, `border-bottom`, `border-left`, `border-right`, `border-top`, `box-shadow` |
| `--c-table-border-radius` | 公开 | `var(--c-border-radius-md)` | 本组件 CSS `border-radius`, `border-top-left-radius`, `border-top-right-radius` |
| `--c-table-border-style` | 公开 | `solid` | 本组件 CSS `border`, `border-bottom`, `border-left`, `border-right`, `border-top` |
| `--c-table-border-width` | 公开 | `var(--c-border-width-1)` | 本组件 CSS `border`, `border-bottom`, `border-left`, `border-right`, `border-top`, `bottom`, `box-shadow`, `margin` |
| `--c-table-column-handle-right` | 公开 | `-4px` | 本组件 CSS `inset-inline-end` |
| `--c-table-column-handle-width` | 公开 | `8px` | 本组件 CSS `width` |
| `--c-table-column-insert-empty-font-size` | 公开 | `14px` | 本组件 CSS `font-size` |
| `--c-table-column-insert-empty-line-height` | 公开 | `22px` | 本组件 CSS `line-height` |
| `--c-table-column-insert-empty-text-color` | 公开 | `var(--c-color-text-3)` | 本组件 CSS `color` |
| `--c-table-column-insert-group-margin-top` | 公开 | `16px` | 本组件 CSS `margin-top` |
| `--c-table-column-insert-group-title-font-size` | 公开 | `12px` | 本组件 CSS `font-size` |
| `--c-table-column-insert-group-title-line-height` | 公开 | `20px` | 本组件 CSS `line-height` |
| `--c-table-column-insert-group-title-margin-bottom` | 公开 | `8px` | 本组件 CSS `margin-bottom` |
| `--c-table-column-insert-group-title-text-color` | 公开 | `var(--c-color-text-3)` | 本组件 CSS `color` |
| `--c-table-column-insert-item-min-height` | 公开 | `32px` | 本组件 CSS `min-height` |
| `--c-table-column-insert-max-height` | 公开 | `calc(100vh - 160px)` | 本组件 CSS `max-height` |
| `--c-table-column-insert-padding` | 公开 | `16px 20px` | 本组件 CSS `padding` |
| `--c-table-drag-handle-col-width` | 公开 | `40px` | 本组件 CSS `max-width`, `min-width`, `width` |
| `--c-table-editable-body-cell-border-color` | 公开 | `var(--c-color-white)` | 本组件 CSS `border` |
| `--c-table-expand-button-border-radius` | 公开 | `2px` | 本组件 CSS `border-radius` |
| `--c-table-expand-button-font-size` | 公开 | `12px` | 本组件 CSS `font-size` |
| `--c-table-expand-button-margin-right` | 公开 | `var(--c-spacing-2)` | 本组件 CSS `margin-inline-end` |
| `--c-table-expand-button-size` | 公开 | `14px` | 本组件 CSS `height`, `line-height`, `width` |
| `--c-table-expand-content-bg` | 公开 | `var(--c-color-fill-1)` | 本组件 CSS `background-color` |
| `--c-table-expand-content-hover-bg` | 公开 | `var(--c-color-fill-1)` | 本组件 CSS `background-color` |
| `--c-table-expand-icon-bg` | 公开 | `var(--c-color-neutral-3)` | 本组件 CSS `background-color` |
| `--c-table-expand-icon-border-color` | 公开 | `transparent` | 本组件 CSS `border` |
| `--c-table-expand-icon-border-width` | 公开 | `var(--c-border-width-1)` | 本组件 CSS `border` |
| `--c-table-expand-icon-col-width` | 公开 | `40px` | 本组件 CSS `max-width`, `min-width`, `width` |
| `--c-table-expand-icon-color` | 公开 | `var(--c-color-text-2)` | 本组件 CSS `color` |
| `--c-table-expand-icon-hover-bg` | 公开 | `var(--c-color-neutral-4)` | 本组件 CSS `background-color` |
| `--c-table-expand-icon-hover-border-color` | 公开 | `transparent` | 本组件 CSS `border-color` |
| `--c-table-expand-icon-hover-color` | 公开 | `var(--c-color-text-1)` | 本组件 CSS `color` |
| `--c-table-expand-loading-icon-color` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `color` |
| `--c-table-extra-column-icon-color` | 公开 | `var(--c-color-text-2)` | 本组件 CSS `color` |
| `--c-table-extra-column-icon-hover-color` | 公开 | `var(--c-color-text-1)` | 本组件 CSS `color` |
| `--c-table-filters-bottom-gap` | 公开 | `8px` | 本组件 CSS `margin-right` |
| `--c-table-filters-bottom-height` | 公开 | `38px` | 本组件 CSS `height` |
| `--c-table-filters-bottom-line-height` | 公开 | `38px` | 本组件 CSS `line-height` |
| `--c-table-filters-bottom-padding` | 公开 | `0 12px` | 本组件 CSS `padding` |
| `--c-table-filters-icon-font-size` | 公开 | `16px` | 本组件 CSS `font-size` |
| `--c-table-filters-icon-hover-bg` | 公开 | `var(--c-color-fill-4)` | 本组件 CSS `background` |
| `--c-table-filters-item-font-size` | 公开 | `14px` | 本组件 CSS `font-size` |
| `--c-table-filters-item-height` | 公开 | `32px` | 本组件 CSS `height` |
| `--c-table-filters-item-line-height` | 公开 | `32px` | 本组件 CSS `line-height` |
| `--c-table-filters-item-padding` | 公开 | `0 12px` | 本组件 CSS `padding` |
| `--c-table-filters-list-padding` | 公开 | `4px 0` | 本组件 CSS `padding` |
| `--c-table-filters-popup-bg` | 公开 | `var(--c-color-bg-5)` | 本组件 CSS `background` |
| `--c-table-filters-popup-border-color` | 公开 | `var(--c-color-neutral-3)` | 本组件 CSS `border` |
| `--c-table-filters-popup-border-radius` | 公开 | `var(--c-border-radius-md)` | 本组件 CSS `border-radius` |
| `--c-table-filters-popup-box-shadow` | 公开 | `var(--c-shadow1-down)` | 本组件 CSS `box-shadow` |
| `--c-table-filters-popup-max-height` | 公开 | `200px` | 本组件 CSS `max-height` |
| `--c-table-filters-popup-min-width` | 公开 | `100px` | 本组件 CSS `min-width` |
| `--c-table-filters-text-height` | 公开 | `34px` | 本组件 CSS `height` |
| `--c-table-filters-text-line-height` | 公开 | `32px` | 本组件 CSS `line-height` |
| `--c-table-filters-text-max-width` | 公开 | `160px` | 本组件 CSS `max-width` |
| `--c-table-filters-text-padding-left` | 公开 | `10px` | 本组件 CSS `padding-left` |
| `--c-table-filters-width` | 公开 | `24px` | 本组件 CSS `width` |
| `--c-table-header-cell-action-color` | 公开 | `var(--c-color-text-3)` | 本组件 CSS `color` |
| `--c-table-header-cell-action-hover-color` | 公开 | `var(--c-color-text-1)` | 本组件 CSS `color` |
| `--c-table-header-cell-action-margin-left` | 公开 | `2px` | 本组件 CSS `margin-inline-start` |
| `--c-table-header-cell-bg` | 公开 | `var(--c-color-neutral-2)` | 本组件 CSS `background-color` |
| `--c-table-header-cell-text-color` | 公开 | `rgb(var(--c-gray-10))` | 本组件 CSS `color` |
| `--c-table-header-filters-icon-active-color` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `color` |
| `--c-table-header-filters-icon-color` | 公开 | `var(--c-color-text-2)` | 本组件 CSS `color` |
| `--c-table-header-filters-icon-hover-bg` | 公开 | `var(--c-color-neutral-4)` | 本组件 CSS `background-color` |
| `--c-table-header-sorted-cell-bg` | 公开 | `var(--c-color-neutral-3)` | 本组件 CSS `background-color` |
| `--c-table-header-sorted-cell-hover-bg` | 公开 | `rgba(var(--c-gray-4), 0.5)` | 本组件 CSS `background-color` |
| `--c-table-header-sorter-icon-active-color` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `color` |
| `--c-table-header-sorter-icon-color` | 公开 | `var(--c-color-neutral-5)` | 本组件 CSS `color` |
| `--c-table-header-sorter-icon-down-top` | 公开 | `-3px` | 本组件 CSS `top` |
| `--c-table-header-sorter-icon-font-size` | 公开 | `12px` | 本组件 CSS `font-size` |
| `--c-table-header-sorter-icon-height` | 公开 | `8px` | 本组件 CSS `height`, `line-height` |
| `--c-table-header-sorter-icon-left` | 公开 | `1px` | 本组件 CSS `left` |
| `--c-table-header-sorter-icon-margin-left` | 公开 | `var(--c-spacing-4)` | 本组件 CSS `margin-inline-start` |
| `--c-table-header-sorter-icon-next-color` | 公开 | `var(--c-color-neutral-6)` | 本组件 CSS `color` |
| `--c-table-header-sorter-icon-up-top` | 公开 | `-2px` | 本组件 CSS `top` |
| `--c-table-header-sorter-icon-width` | 公开 | `14px` | 本组件 CSS `width` |
| `--c-table-header-text-font-weight` | 公开 | `var(--c-font-weight-500)` | 本组件 CSS `font-weight` |
| `--c-table-line-height` | 公开 | `var(--c-line-height)` | 本组件 CSS `line-height` |
| `--c-table-pagination-margin` | 公开 | `var(--c-spacing-6)` | 本组件 CSS `margin-bottom`, `margin-top` |
| `--c-table-pagination-sticky-bg` | 公开 | `var(--c-color-bg-1)` | 本组件 CSS `background`, `background-color` |
| `--c-table-pagination-sticky-padding` | 公开 | `12px 0` | 本组件 CSS `padding` |
| `--c-table-resizing-border-color` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `border-right-color` |
| `--c-table-selection-col-width` | 公开 | `40px` | 本组件 CSS `max-width`, `min-width`, `width` |
| `--c-table-shadow-left` | 公开 | `inset 6px 0 8px -3px rgba(0, 0, 0, 0.15)` | 本组件 CSS `box-shadow` |
| `--c-table-shadow-right` | 公开 | `inset -6px 0 8px -3px rgba(0, 0, 0, 0.15)` | 本组件 CSS `box-shadow` |
| `--c-table-shadow-wrapper-width` | 公开 | `10px` | 本组件 CSS `width` |
| `--c-table-size-lg-extra-icon-font-size` | 公开 | `16px` | 本组件 CSS `font-size` |
| `--c-table-size-lg-extra-padding-horizontal` | 公开 | `var(--c-spacing-2)` | 本组件 CSS `padding` |
| `--c-table-size-lg-font-size` | 公开 | `var(--c-table-size-md-font-size)` | 本组件 CSS `font-size` |
| `--c-table-size-lg-header-font-size` | 公开 | `var(--c-table-size-md-header-font-size)` | 本组件 CSS `font-size` |
| `--c-table-size-lg-padding-horizontal` | 公开 | `var(--c-table-size-md-padding-horizontal)` | 本组件 CSS `margin`, `padding` |
| `--c-table-size-lg-padding-vertical` | 公开 | `var(--c-table-size-md-padding-vertical)` | 本组件 CSS `margin`, `padding` |
| `--c-table-size-md-extra-icon-font-size` | 公开 | `16px` | 本组件 CSS `font-size` |
| `--c-table-size-md-extra-padding-horizontal` | 公开 | `var(--c-spacing-2)` | 本组件 CSS `padding` |
| `--c-table-size-md-font-size` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `font-size` |
| `--c-table-size-md-header-font-size` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `font-size` |
| `--c-table-size-md-padding-horizontal` | 公开 | `var(--c-spacing-7)` | 本组件 CSS `margin`, `padding` |
| `--c-table-size-md-padding-vertical` | 公开 | `9px` | 本组件 CSS `margin`, `padding` |
| `--c-table-size-sm-extra-icon-font-size` | 公开 | `14px` | 本组件 CSS `font-size` |
| `--c-table-size-sm-extra-padding-horizontal` | 公开 | `var(--c-spacing-1)` | 本组件 CSS `padding` |
| `--c-table-size-sm-font-size` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `font-size` |
| `--c-table-size-sm-header-font-size` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `font-size` |
| `--c-table-size-sm-padding-horizontal` | 公开 | `var(--c-spacing-7)` | 本组件 CSS `margin`, `padding` |
| `--c-table-size-sm-padding-vertical` | 公开 | `5px` | 本组件 CSS `margin`, `padding` |
| `--c-table-size-xs-extra-icon-font-size` | 公开 | `14px` | 本组件 CSS `font-size` |
| `--c-table-size-xs-extra-padding-horizontal` | 公开 | `var(--c-spacing-1)` | 本组件 CSS `padding` |
| `--c-table-size-xs-font-size` | 公开 | `var(--c-font-size-body-1)` | 本组件 CSS `font-size` |
| `--c-table-size-xs-header-font-size` | 公开 | `var(--c-font-size-body-1)` | 本组件 CSS `font-size` |
| `--c-table-size-xs-padding-horizontal` | 公开 | `var(--c-spacing-7)` | 本组件 CSS `margin`, `padding` |
| `--c-table-size-xs-padding-vertical` | 公开 | `2px` | 本组件 CSS `margin`, `padding` |
| `--c-table-sticky-scrollbar-height` | 公开 | `16px` | 本组件 CSS `height` |
| `--c-table-sticky-scrollbar-opacity` | 公开 | `0.8` | 本组件 CSS `opacity` |
| `--c-table-tfoot-bg` | 公开 | `var(--c-color-neutral-2)` | 本组件 CSS `background-color` |
| `--c-table-th-actions-margin-left` | 公开 | `8px` | 本组件 CSS `margin-inline-start` |
| `--c-table-transition-duration` | 公开 | `var(--c-transition-duration-1)` | 本组件 CSS `transition` |
| `--c-table-transition-timing-function` | 公开 | `var(--c-transition-timing-function-linear)` | 本组件 CSS `transition` |
## tabs
声明来源: `src/tabs/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-tabs-active-font-weight` | 公开 | `var(--c-sys-font-weight-semibold)` | 本组件 CSS `font-weight` |
| `--c-tabs-active-shadow` | 公开 | `0 1px 3px rgba(0, 0, 0, 0.12)` | 本组件 CSS `box-shadow` |
| `--c-tabs-animation-duration` | 公开 | `var(--c-sys-motion-duration-standard)` | 本组件 CSS `animation` |
| `--c-tabs-background` | 公开 | `var(--c-sys-color-surface-default)` | 本组件 CSS `background` |
| `--c-tabs-border-color` | 公开 | `var(--c-sys-color-border-default)` | 本组件 CSS `background`, `border-color` |
| `--c-tabs-border-width` | 公开 | `1px` | 本组件 CSS `border`, `bottom`, `height` |
| `--c-tabs-capsule-radius` | 公开 | `var(--c-sys-radius-pill)` | 本组件 CSS `border-radius` |
| `--c-tabs-content-padding` | 公开 | `var(--c-sys-space-6)` | 本组件 CSS `padding-block`, `padding-inline-start` |
| `--c-tabs-control-height` | 公开 | `var(--c-sys-control-height-xs)` | 本组件 CSS `min-height`, `min-width` |
| `--c-tabs-focus-offset` | 公开 | `-3px` | 本组件 CSS `outline-offset` |
| `--c-tabs-focus-width` | 公开 | `2px` | 本组件 CSS `outline` |
| `--c-tabs-group-padding` | 公开 | `var(--c-sys-space-2)` | 本组件 CSS `padding` |
| `--c-tabs-header-padding` | 公开 | `var(--c-sys-space-5)` | 本组件 CSS `padding-inline` |
| `--c-tabs-hover-background` | 公开 | `var(--c-sys-color-state-hover)` | 本组件 CSS `background` |
| `--c-tabs-icon-gap` | 公开 | `var(--c-sys-space-3)` | 本组件 CSS `gap` |
| `--c-tabs-indicator-radius` | 公开 | `1px` | 本组件 CSS `border-radius` |
| `--c-tabs-indicator-size` | 公开 | `2px` | 本组件 CSS `height`, `width` |
| `--c-tabs-muted-background` | 公开 | `var(--c-sys-color-surface-muted)` | 本组件 CSS `background` |
| `--c-tabs-nav-gap` | 公开 | `var(--c-sys-space-2)` | 本组件 CSS `gap` |
| `--c-tabs-radius` | 公开 | `var(--c-sys-radius-md)` | 本组件 CSS `border-radius` |
| `--c-tabs-size-lg-tab-font-size` | 公开 | `var(--c-sys-font-size-lg)` | 本组件 CSS `font-size` |
| `--c-tabs-size-lg-tab-height` | 公开 | `var(--c-sys-control-height-lg)` | 本组件 CSS `min-height` |
| `--c-tabs-size-lg-tab-padding` | 公开 | `10px var(--c-sys-space-7)` | 本组件 CSS `padding` |
| `--c-tabs-size-md-tab-font-size` | 公开 | `var(--c-sys-font-size-md)` | 本组件 CSS `font-size` |
| `--c-tabs-size-md-tab-height` | 公开 | `var(--c-sys-control-height-md)` | 本组件 CSS `min-height` |
| `--c-tabs-size-md-tab-padding` | 公开 | `var(--c-sys-space-4) var(--c-sys-space-6)` | 本组件 CSS `padding` |
| `--c-tabs-size-sm-tab-font-size` | 公开 | `var(--c-sys-font-size-sm)` | 本组件 CSS `font-size` |
| `--c-tabs-size-sm-tab-height` | 公开 | `var(--c-sys-control-height-sm)` | 本组件 CSS `min-height` |
| `--c-tabs-size-sm-tab-padding` | 公开 | `var(--c-sys-space-3) var(--c-sys-space-5)` | 本组件 CSS `padding` |
| `--c-tabs-size-xl-tab-font-size` | 公开 | `var(--c-sys-font-size-xl)` | 本组件 CSS `font-size` |
| `--c-tabs-size-xl-tab-height` | 公开 | `var(--c-sys-control-height-xl)` | 本组件 CSS `min-height` |
| `--c-tabs-size-xl-tab-padding` | 公开 | `var(--c-sys-space-5) var(--c-sys-space-8)` | 本组件 CSS `padding` |
| `--c-tabs-size-xs-tab-font-size` | 公开 | `var(--c-sys-font-size-xs)` | 本组件 CSS `font-size` |
| `--c-tabs-size-xs-tab-height` | 公开 | `var(--c-sys-control-height-xs)` | 本组件 CSS `min-height` |
| `--c-tabs-size-xs-tab-padding` | 公开 | `var(--c-sys-space-2) var(--c-sys-space-4)` | 本组件 CSS `padding` |
| `--c-tabs-tab-gap` | 公开 | `var(--c-sys-space-2)` | 本组件 CSS `gap` |
| `--c-tabs-title-text-color` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-tabs-title-text-color-active` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `background`, `color`, `outline` |
| `--c-tabs-title-text-color-disabled` | 公开 | `var(--c-sys-color-content-disabled)` | 本组件 CSS `color` |
| `--c-tabs-touch-target` | 公开 | `var(--c-sys-control-touch-target)` | 本组件 CSS `min-height`, `min-width` |
## tag
声明来源: `src/tag/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-tag-bg-not-checked-hover` | 公开 | `var(--c-sys-color-state-hover)` | 本组件 CSS `background-color` |
| `--c-tag-blue-bg` | 公开 | `rgb(var(--c-blue-1))` `rgba(var(--c-blue-6), 0.2)` (`:root[cedar-theme="dark"]`) | 本组件 CSS `background-color` |
| `--c-tag-blue-bg-hover` | 公开 | `rgb(var(--c-blue-2))` `rgba(var(--c-blue-6), 0.35)` (`:root[cedar-theme="dark"]`) | 本组件 CSS `background-color` |
| `--c-tag-blue-border-color` | 公开 | `transparent` | 本组件 CSS `border` |
| `--c-tag-blue-border-color-hover` | 公开 | `transparent` | 本组件 CSS `border-color` |
| `--c-tag-blue-icon-color` | 公开 | `rgb(var(--c-blue-9))` | 本组件 CSS `color` |
| `--c-tag-blue-text-color` | 公开 | `rgb(var(--c-blue-9))` | 本组件 CSS `border-color`, `color` |
| `--c-tag-border-radius` | 公开 | `var(--c-sys-radius-sm)` | 本组件 CSS `border-radius` |
| `--c-tag-border-type` | 公开 | `solid` | 本组件 CSS `border` |
| `--c-tag-border-width` | 公开 | `1px` | 本组件 CSS `border`, `line-height` |
| `--c-tag-brand-bg` | 公开 | `rgb(var(--c-brand-1))` `rgba(var(--c-brand-6), 0.2)` (`:root[cedar-theme="dark"]`) | 本组件 CSS `background-color` |
| `--c-tag-brand-bg-hover` | 公开 | `rgb(var(--c-brand-2))` `rgba(var(--c-brand-6), 0.35)` (`:root[cedar-theme="dark"]`) | 本组件 CSS `background-color` |
| `--c-tag-brand-border-color` | 公开 | `transparent` | 本组件 CSS `border` |
| `--c-tag-brand-border-color-hover` | 公开 | `transparent` | 本组件 CSS `border-color` |
| `--c-tag-brand-icon-color` | 公开 | `rgb(var(--c-brand-9))` | 本组件 CSS `color` |
| `--c-tag-brand-text-color` | 公开 | `rgb(var(--c-brand-9))` | 本组件 CSS `border-color`, `color` |
| `--c-tag-close-font-size` | 公开 | `var(--c-sys-font-size-xs)` | 本组件 CSS `font-size` |
| `--c-tag-close-margin-left` | 公开 | `var(--c-spacing-2)` | 本组件 CSS `margin-left`, `margin-right` |
| `--c-tag-custom-text-color` | 公开 | `var(--c-sys-color-content-on-dark)` | 本组件 CSS `color` |
| `--c-tag-cyan-bg` | 公开 | `rgb(var(--c-cyan-1))` `rgba(var(--c-cyan-6), 0.2)` (`:root[cedar-theme="dark"]`) | 本组件 CSS `background-color` |
| `--c-tag-cyan-bg-hover` | 公开 | `rgb(var(--c-cyan-2))` `rgba(var(--c-cyan-6), 0.35)` (`:root[cedar-theme="dark"]`) | 本组件 CSS `background-color` |
| `--c-tag-cyan-border-color` | 公开 | `transparent` | 本组件 CSS `border` |
| `--c-tag-cyan-border-color-hover` | 公开 | `transparent` | 本组件 CSS `border-color` |
| `--c-tag-cyan-icon-color` | 公开 | `rgb(var(--c-cyan-9))` | 本组件 CSS `color` |
| `--c-tag-cyan-text-color` | 公开 | `rgb(var(--c-cyan-9))` | 本组件 CSS `border-color`, `color` |
| `--c-tag-default-bg` | 公开 | `var(--c-sys-color-state-hover)` | 本组件 CSS `background-color` |
| `--c-tag-default-bg-hover` | 公开 | `var(--c-color-fill-3)` | 本组件 CSS `background-color` |
| `--c-tag-default-border-color` | 公开 | `transparent` | 本组件 CSS `border-color` |
| `--c-tag-default-border-color-hover` | 公开 | `transparent` | 本组件 CSS `border-color` |
| `--c-tag-default-icon-color` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-tag-default-text-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-tag-fade-duration` | 公开 | `var(--c-sys-motion-duration-fast)` | 本组件 CSS `transition` |
| `--c-tag-gold-bg` | 公开 | `rgb(var(--c-gold-1))` `rgba(var(--c-gold-6), 0.2)` (`:root[cedar-theme="dark"]`) | 本组件 CSS `background-color` |
| `--c-tag-gold-bg-hover` | 公开 | `rgb(var(--c-gold-2))` `rgba(var(--c-gold-6), 0.35)` (`:root[cedar-theme="dark"]`) | 本组件 CSS `background-color` |
| `--c-tag-gold-border-color` | 公开 | `transparent` | 本组件 CSS `border` |
| `--c-tag-gold-border-color-hover` | 公开 | `transparent` | 本组件 CSS `border-color` |
| `--c-tag-gold-icon-color` | 公开 | `rgb(var(--c-gold-9))` | 本组件 CSS `color` |
| `--c-tag-gold-text-color` | 公开 | `rgb(var(--c-gold-9))` | 本组件 CSS `border-color`, `color` |
| `--c-tag-gray-bg` | 公开 | `rgb(var(--c-gray-2))` `rgba(var(--c-gray-6), 0.2)` (`:root[cedar-theme="dark"]`) | 本组件 CSS `background-color` |
| `--c-tag-gray-bg-hover` | 公开 | `rgb(var(--c-gray-3))` `rgba(var(--c-gray-6), 0.35)` (`:root[cedar-theme="dark"]`) | 本组件 CSS `background-color` |
| `--c-tag-gray-border-color` | 公开 | `transparent` | 本组件 CSS `border` |
| `--c-tag-gray-border-color-hover` | 公开 | `transparent` | 本组件 CSS `border-color` |
| `--c-tag-gray-icon-color` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-tag-gray-text-color` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `border-color`, `color` |
| `--c-tag-green-bg` | 公开 | `rgb(var(--c-green-1))` `rgba(var(--c-green-6), 0.2)` (`:root[cedar-theme="dark"]`) | 本组件 CSS `background-color` |
| `--c-tag-green-bg-hover` | 公开 | `rgb(var(--c-green-2))` `rgba(var(--c-green-6), 0.35)` (`:root[cedar-theme="dark"]`) | 本组件 CSS `background-color` |
| `--c-tag-green-border-color` | 公开 | `transparent` | 本组件 CSS `border` |
| `--c-tag-green-border-color-hover` | 公开 | `transparent` | 本组件 CSS `border-color` |
| `--c-tag-green-icon-color` | 公开 | `rgb(var(--c-green-9))` | 本组件 CSS `color` |
| `--c-tag-green-text-color` | 公开 | `rgb(var(--c-green-9))` | 本组件 CSS `border-color`, `color` |
| `--c-tag-icon-margin-right` | 公开 | `var(--c-spacing-2)` | 本组件 CSS `margin-left`, `margin-right` |
| `--c-tag-lime-bg` | 公开 | `rgb(var(--c-lime-1))` `rgba(var(--c-lime-6), 0.2)` (`:root[cedar-theme="dark"]`) | 本组件 CSS `background-color` |
| `--c-tag-lime-bg-hover` | 公开 | `rgb(var(--c-lime-2))` `rgba(var(--c-lime-6), 0.35)` (`:root[cedar-theme="dark"]`) | 本组件 CSS `background-color` |
| `--c-tag-lime-border-color` | 公开 | `transparent` | 本组件 CSS `border` |
| `--c-tag-lime-border-color-hover` | 公开 | `transparent` | 本组件 CSS `border-color` |
| `--c-tag-lime-icon-color` | 公开 | `rgb(var(--c-lime-9))` | 本组件 CSS `color` |
| `--c-tag-lime-text-color` | 公开 | `rgb(var(--c-lime-9))` | 本组件 CSS `border-color`, `color` |
| `--c-tag-magenta-bg` | 公开 | `rgb(var(--c-magenta-1))` `rgba(var(--c-magenta-6), 0.2)` (`:root[cedar-theme="dark"]`) | 本组件 CSS `background-color` |
| `--c-tag-magenta-bg-hover` | 公开 | `rgb(var(--c-magenta-2))` `rgba(var(--c-magenta-6), 0.35)` (`:root[cedar-theme="dark"]`) | 本组件 CSS `background-color` |
| `--c-tag-magenta-border-color` | 公开 | `transparent` | 本组件 CSS `border` |
| `--c-tag-magenta-border-color-hover` | 公开 | `transparent` | 本组件 CSS `border-color` |
| `--c-tag-magenta-icon-color` | 公开 | `rgb(var(--c-magenta-9))` | 本组件 CSS `color` |
| `--c-tag-magenta-text-color` | 公开 | `rgb(var(--c-magenta-9))` | 本组件 CSS `border-color`, `color` |
| `--c-tag-orange-bg` | 公开 | `rgb(var(--c-orange-1))` `rgba(var(--c-orange-6), 0.2)` (`:root[cedar-theme="dark"]`) | 本组件 CSS `background-color` |
| `--c-tag-orange-bg-hover` | 公开 | `rgb(var(--c-orange-2))` `rgba(var(--c-orange-6), 0.35)` (`:root[cedar-theme="dark"]`) | 本组件 CSS `background-color` |
| `--c-tag-orange-border-color` | 公开 | `transparent` | 本组件 CSS `border` |
| `--c-tag-orange-border-color-hover` | 公开 | `transparent` | 本组件 CSS `border-color` |
| `--c-tag-orange-icon-color` | 公开 | `rgb(var(--c-orange-9))` | 本组件 CSS `color` |
| `--c-tag-orange-text-color` | 公开 | `rgb(var(--c-orange-9))` | 本组件 CSS `border-color`, `color` |
| `--c-tag-orangered-bg` | 公开 | `rgb(var(--c-orangered-1))` `rgba(var(--c-orangered-6), 0.2)` (`:root[cedar-theme="dark"]`) | 本组件 CSS `background-color` |
| `--c-tag-orangered-bg-hover` | 公开 | `rgb(var(--c-orangered-2))` `rgba(var(--c-orangered-6), 0.35)` (`:root[cedar-theme="dark"]`) | 本组件 CSS `background-color` |
| `--c-tag-orangered-border-color` | 公开 | `transparent` | 本组件 CSS `border` |
| `--c-tag-orangered-border-color-hover` | 公开 | `transparent` | 本组件 CSS `border-color` |
| `--c-tag-orangered-icon-color` | 公开 | `rgb(var(--c-orangered-9))` | 本组件 CSS `color` |
| `--c-tag-orangered-text-color` | 公开 | `rgb(var(--c-orangered-9))` | 本组件 CSS `border-color`, `color` |
| `--c-tag-padding-horizontal` | 公开 | `var(--c-spacing-4)` | 本组件 CSS `padding` |
| `--c-tag-padding-vertical` | 公开 | `0` | 本组件 CSS `line-height`, `padding` |
| `--c-tag-pinkpurple-bg` | 公开 | `rgb(var(--c-pinkpurple-1))` `rgba(var(--c-pinkpurple-6), 0.2)` (`:root[cedar-theme="dark"]`) | 本组件 CSS `background-color` |
| `--c-tag-pinkpurple-bg-hover` | 公开 | `rgb(var(--c-pinkpurple-2))` `rgba(var(--c-pinkpurple-6), 0.35)` (`:root[cedar-theme="dark"]`) | 本组件 CSS `background-color` |
| `--c-tag-pinkpurple-border-color` | 公开 | `transparent` | 本组件 CSS `border` |
| `--c-tag-pinkpurple-border-color-hover` | 公开 | `transparent` | 本组件 CSS `border-color` |
| `--c-tag-pinkpurple-icon-color` | 公开 | `rgb(var(--c-pinkpurple-9))` | 本组件 CSS `color` |
| `--c-tag-pinkpurple-text-color` | 公开 | `rgb(var(--c-pinkpurple-9))` | 本组件 CSS `border-color`, `color` |
| `--c-tag-purple-bg` | 公开 | `rgb(var(--c-purple-1))` `rgba(var(--c-purple-6), 0.2)` (`:root[cedar-theme="dark"]`) | 本组件 CSS `background-color` |
| `--c-tag-purple-bg-hover` | 公开 | `rgb(var(--c-purple-2))` `rgba(var(--c-purple-6), 0.35)` (`:root[cedar-theme="dark"]`) | 本组件 CSS `background-color` |
| `--c-tag-purple-border-color` | 公开 | `transparent` | 本组件 CSS `border` |
| `--c-tag-purple-border-color-hover` | 公开 | `transparent` | 本组件 CSS `border-color` |
| `--c-tag-purple-icon-color` | 公开 | `rgb(var(--c-purple-9))` | 本组件 CSS `color` |
| `--c-tag-purple-text-color` | 公开 | `rgb(var(--c-purple-9))` | 本组件 CSS `border-color`, `color` |
| `--c-tag-red-bg` | 公开 | `rgb(var(--c-red-1))` `rgba(var(--c-red-6), 0.2)` (`:root[cedar-theme="dark"]`) | 本组件 CSS `background-color` |
| `--c-tag-red-bg-hover` | 公开 | `rgb(var(--c-red-2))` `rgba(var(--c-red-6), 0.35)` (`:root[cedar-theme="dark"]`) | 本组件 CSS `background-color` |
| `--c-tag-red-border-color` | 公开 | `transparent` | 本组件 CSS `border` |
| `--c-tag-red-border-color-hover` | 公开 | `transparent` | 本组件 CSS `border-color` |
| `--c-tag-red-icon-color` | 公开 | `rgb(var(--c-red-9))` | 本组件 CSS `color` |
| `--c-tag-red-text-color` | 公开 | `rgb(var(--c-red-9))` | 本组件 CSS `border-color`, `color` |
| `--c-tag-round-radius` | 公开 | `100px` | 本组件 CSS `border-radius` |
| `--c-tag-size-lg` | 公开 | `var(--c-size-7)` | 本组件 CSS `height`, `line-height` |
| `--c-tag-size-lg-font-size` | 公开 | `var(--c-sys-font-size-md)` | 本组件 CSS `font-size` |
| `--c-tag-size-md` | 公开 | `var(--c-size-6)` | 本组件 CSS `height`, `line-height` |
| `--c-tag-size-md-font-size` | 公开 | `var(--c-sys-font-size-xs)` | 本组件 CSS `font-size` |
| `--c-tag-size-sm` | 公开 | `var(--c-size-5)` | 本组件 CSS `height`, `line-height` |
| `--c-tag-size-sm-font-size` | 公开 | `var(--c-sys-font-size-xs)` | 本组件 CSS `font-size` |
| `--c-tag-size-xl` | 公开 | `var(--c-size-8)` | 本组件 CSS `height`, `line-height` |
| `--c-tag-size-xl-font-size` | 公开 | `var(--c-sys-font-size-md)` | 本组件 CSS `font-size` |
| `--c-tag-size-xs` | 公开 | `var(--c-size-4)` | 本组件 CSS `height`, `line-height` |
| `--c-tag-size-xs-font-size` | 公开 | `var(--c-sys-font-size-xs)` | 本组件 CSS `font-size` |
| `--c-tag-status-danger-bg-color` | 公开 | `rgb(var(--c-danger-1))` | 本组件 CSS `background-color` |
| `--c-tag-status-danger-text-color` | 公开 | `var(--c-sys-color-content-danger)` | 本组件 CSS `color` |
| `--c-tag-status-info-bg-color` | 公开 | `rgb(var(--c-blue-1))` | 本组件 CSS `background-color` |
| `--c-tag-status-info-text-color` | 公开 | `var(--c-sys-color-content-info)` | 本组件 CSS `color` |
| `--c-tag-status-primary-bg-color` | 公开 | `rgb(var(--c-primary-1))` | 本组件 CSS `background-color` |
| `--c-tag-status-primary-text-color` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `color` |
| `--c-tag-status-secondary-bg-color` | 公开 | `rgb(var(--c-gray-2))` | 本组件 CSS `background-color` |
| `--c-tag-status-secondary-text-color` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-tag-status-success-bg-color` | 公开 | `rgb(var(--c-success-1))` | 本组件 CSS `background-color` |
| `--c-tag-status-success-text-color` | 公开 | `var(--c-sys-color-content-success)` | 本组件 CSS `color` |
| `--c-tag-status-tertiary-bg-color` | 公开 | `rgb(var(--c-gray-1))` | 本组件 CSS `background-color` |
| `--c-tag-status-tertiary-text-color` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-tag-status-warning-bg-color` | 公开 | `rgb(var(--c-warning-1))` | 本组件 CSS `background-color` |
| `--c-tag-status-warning-text-color` | 公开 | `var(--c-sys-color-content-warning)` | 本组件 CSS `color` |
| `--c-tag-text-font-weight` | 公开 | `var(--c-font-weight-500)` | 本组件 CSS `font-weight` |
| `--c-tag-variant-outline-default-border-color` | 公开 | `var(--c-sys-color-border-default)` | 本组件 CSS `border` |
| `--c-tag-variant-outline-default-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-tag-variant-outline-status-danger-color` | 公开 | `var(--c-sys-color-content-danger)` | 本组件 CSS `border`, `color` |
| `--c-tag-variant-outline-status-info-color` | 公开 | `var(--c-sys-color-content-info)` | 本组件 CSS `border`, `color` |
| `--c-tag-variant-outline-status-primary-color` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `border`, `color` |
| `--c-tag-variant-outline-status-secondary-color` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `border`, `color` |
| `--c-tag-variant-outline-status-success-color` | 公开 | `var(--c-sys-color-content-success)` | 本组件 CSS `border`, `color` |
| `--c-tag-variant-outline-status-tertiary-color` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `border`, `color` |
| `--c-tag-variant-outline-status-warning-color` | 公开 | `var(--c-sys-color-content-warning)` | 本组件 CSS `border`, `color` |
## textarea
声明来源: `src/textarea/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-textarea-caret-color` | 公开 | `var(--c-field-caret-color)` | 本组件 CSS `caret-color` |
| `--c-textarea-counter-color` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-textarea-counter-font-size` | 公开 | `var(--c-sys-font-size-xs)` | 本组件 CSS `font-size` |
| `--c-textarea-counter-margin-top` | 公开 | `var(--c-sys-space-2)` | 本组件 CSS `margin-block-start` |
| `--c-textarea-font-size` | 公开 | `var(--c-sys-font-size-md)` | 本组件 CSS `font-size` |
| `--c-textarea-height` | 公开 | `auto` | 本组件 CSS `height` |
| `--c-textarea-line-height` | 公开 | `var(--c-line-height)` | 本组件 CSS `line-height` |
| `--c-textarea-min-height` | 公开 | `var(--c-sys-control-height-xl)` | 本组件 CSS `min-height` |
| `--c-textarea-padding-horizontal` | 公开 | `var(--c-sys-space-3)` | 本组件 CSS `padding` |
| `--c-textarea-padding-vertical` | 公开 | `var(--c-sys-space-1)` | 本组件 CSS `padding` |
| `--c-textarea-placeholder-color` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
## time/picker
声明来源: `src/time/picker/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-time-picker-border-color` | 公开 | `var(--c-color-neutral-3)` | 本组件 CSS `border`, `border-bottom`, `border-right`, `border-top` |
| `--c-time-picker-border-radius` | 公开 | `var(--c-border-radius-md)` | 本组件 CSS `border-radius` |
| `--c-time-picker-box-shadow` | 公开 | `var(--c-shadow1-down)` | 本组件 CSS `box-shadow` |
| `--c-time-picker-cell-bg-active` | 公开 | `var(--c-color-fill-2)` | 本组件 CSS `background-color` |
| `--c-time-picker-cell-bg-hover` | 公开 | `var(--c-color-fill-2)` | 本组件 CSS `background-color` |
| `--c-time-picker-cell-font-size` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `font-size` |
| `--c-time-picker-cell-font-weight` | 公开 | `var(--c-font-weight-500)` | 本组件 CSS `font-weight` |
| `--c-time-picker-cell-font-weight-active` | 公开 | `var(--c-font-weight-500)` | 本组件 CSS `font-weight` |
| `--c-time-picker-cell-height` | 公开 | `var(--c-size-6)` | 本组件 CSS `height`, `line-height` |
| `--c-time-picker-cell-padding-left` | 公开 | `var(--c-spacing-9)` | 本组件 CSS `padding-left` |
| `--c-time-picker-cell-spacing` | 公开 | `var(--c-spacing-2)` | 本组件 CSS `height`, `padding` |
| `--c-time-picker-cell-text-color` | 公开 | `var(--c-color-text-1)` | 本组件 CSS `color` |
| `--c-time-picker-cell-text-color-disabled` | 公开 | `var(--c-color-text-4)` | 本组件 CSS `color` |
| `--c-time-picker-column-height` | 公开 | `224px` | 本组件 CSS `height` |
| `--c-time-picker-column-width` | 公开 | `var(--c-size-16)` | 本组件 CSS `width` |
| `--c-time-picker-footer-extra-font-size` | 公开 | `var(--c-font-size-body-1)` | 本组件 CSS `font-size` |
| `--c-time-picker-footer-padding` | 公开 | `var(--c-spacing-4)` | 本组件 CSS `padding` |
| `--c-time-picker-popover-body-reserve` | 公开 | `128px` | 本组件 CSS `height` |
| `--c-time-picker-popover-column-max-height` | 公开 | `224px` | 本组件 CSS `height` |
| `--c-time-picker-popover-gap` | 公开 | `32px` | 本组件 CSS `max-width` |
| `--c-time-picker-range-gap` | 公开 | `var(--c-spacing-6)` | 本组件 CSS `gap` |
| `--c-time-picker-range-next-day-font-size` | 公开 | `var(--c-font-size-body-1)` | 本组件 CSS `font-size` |
| `--c-time-picker-range-panel-title-gap` | 公开 | `var(--c-spacing-3)` | 本组件 CSS `gap` |
| `--c-time-picker-range-panel-title-line-height` | 公开 | `22px` | 本组件 CSS `line-height` |
| `--c-time-picker-range-panel-title-padding-horizontal` | 公开 | `var(--c-spacing-6)` | 本组件 CSS `padding` |
| `--c-time-picker-range-panel-title-padding-vertical` | 公开 | `var(--c-spacing-3)` | 本组件 CSS `padding` |
| `--c-time-picker-range-wrapper-padding` | 公开 | `var(--c-spacing-4)` | 本组件 CSS `padding` |
## timeline
声明来源: `src/timeline/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-timeline-alternate-horizontal-min-height` | 公开 | `var(--c-size-50)` | 本组件 CSS `min-height` |
| `--c-timeline-content-text-color` | 公开 | `var(--c-color-text-1)` | 本组件 CSS `color` |
| `--c-timeline-dot-bg` | 公开 | `rgb(var(--c-primary-6))` | 本组件 CSS `background-color`, `border`, `color` |
| `--c-timeline-dot-bg-hollow` | 公开 | `var(--c-color-bg-2)` | 本组件 CSS `background-color` |
| `--c-timeline-dot-border-radius` | 公开 | `var(--c-border-radius-circle)` | 本组件 CSS `border-radius` |
| `--c-timeline-dot-border-width-hollow` | 公开 | `var(--c-border-width-2)` | 本组件 CSS `border` |
| `--c-timeline-dot-size-width` | 公开 | `var(--c-spacing-3)` | 本组件 CSS `bottom`, `height`, `inset-inline-start`, `left`, `margin-left`, `margin-top`, `padding-bottom`, `padding-left`, `padding-right`, `padding-top`, `top`, `width` |
| `--c-timeline-font-content-size` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `bottom`, `font-size`, `height`, `line-height`, `top` |
| `--c-timeline-font-label-size` | 公开 | `var(--c-font-size-body-1)` | 本组件 CSS `font-size` |
| `--c-timeline-horizontal-dot-content-height` | 公开 | `var(--c-spacing-3)` | 本组件 CSS `height`, `line-height` |
| `--c-timeline-horizontal-margin-content-spacing` | 公开 | `var(--c-spacing-7)` | 本组件 CSS `margin-bottom`, `margin-top`, `padding-bottom`, `padding-top` |
| `--c-timeline-horizontal-margin-line-left` | 公开 | `var(--c-spacing-3)` | 本组件 CSS `inset-inline-start` |
| `--c-timeline-horizontal-margin-line-right` | 公开 | `var(--c-spacing-2)` | 本组件 CSS `inset-inline-end` |
| `--c-timeline-item-min-height` | 公开 | `78px` | 本组件 CSS `min-height` |
| `--c-timeline-label-relative-horizontal-margin` | 公开 | `var(--c-size-13)` | 本组件 CSS `margin-bottom`, `margin-top` |
| `--c-timeline-label-relative-margin` | 公开 | `var(--c-size-25)` | 本组件 CSS `margin-left`, `margin-right` |
| `--c-timeline-label-relative-max-width` | 公开 | `var(--c-size-25)` | 本组件 CSS `max-width` |
| `--c-timeline-label-text-color` | 公开 | `var(--c-color-text-3)` | 本组件 CSS `color` |
| `--c-timeline-line-bg` | 公开 | `var(--c-color-neutral-3)` | 本组件 CSS `border-color` |
| `--c-timeline-size-line-width` | 公开 | `var(--c-border-width-1)` | 本组件 CSS `border-left-width`, `border-top-width`, `height`, `width` |
| `--c-timeline-vertical-margin-content-bottom` | 公开 | `var(--c-spacing-2)` | 本组件 CSS `margin-bottom` |
| `--c-timeline-vertical-margin-content-left` | 公开 | `var(--c-spacing-7)` | 本组件 CSS `margin-left`, `margin-right`, `padding-left`, `padding-right` |
| `--c-timeline-vertical-margin-line-bottom` | 公开 | `var(--c-spacing-2)` | 本组件 CSS `bottom` |
| `--c-timeline-vertical-margin-line-top` | 公开 | `var(--c-spacing-2)` | 本组件 CSS `top` |
## tooltip
声明来源: `src/tooltip/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-tooltip-animation-duration` | 公开 | `var(--c-sys-motion-duration-standard)` | 本组件 CSS `transition` |
| `--c-tooltip-background` | 公开 | `var(--c-sys-color-surface-tooltip)` | 本组件 CSS `background-color` |
| `--c-tooltip-border-radius` | 公开 | `var(--c-sys-radius-md)` | 本组件 CSS `border-radius` |
| `--c-tooltip-font-size` | 公开 | `var(--c-sys-font-size-md)` | 本组件 CSS `font-size` |
| `--c-tooltip-line-height` | 公开 | `var(--c-line-height)` | 本组件 CSS `line-height` |
| `--c-tooltip-max-width` | 公开 | `350px` | 本组件 CSS `max-width` |
| `--c-tooltip-opacity` | 公开 | `1` | 本组件 CSS `opacity` |
| `--c-tooltip-padding-horizontal` | 公开 | `var(--c-sys-space-6)` | 本组件 CSS `padding` |
| `--c-tooltip-padding-vertical` | 公开 | `var(--c-sys-space-4)` | 本组件 CSS `padding` |
| `--c-tooltip-size-xs-font-size` | 公开 | `var(--c-sys-font-size-xs)` | 本组件 CSS `font-size` |
| `--c-tooltip-size-xs-padding-horizontal` | 公开 | `var(--c-sys-space-4)` | 本组件 CSS `padding` |
| `--c-tooltip-size-xs-padding-vertical` | 公开 | `var(--c-sys-space-2)` | 本组件 CSS `padding` |
| `--c-tooltip-status-danger-background` | 公开 | `var(--c-sys-color-status-danger)` | 本组件 CSS `background-color` |
| `--c-tooltip-status-danger-text-color` | 公开 | `var(--c-sys-color-content-on-dark)` | 本组件 CSS `color` |
| `--c-tooltip-status-info-background` | 公开 | `var(--c-sys-color-status-info)` | 本组件 CSS `background-color` |
| `--c-tooltip-status-info-text-color` | 公开 | `var(--c-sys-color-content-on-dark)` | 本组件 CSS `color` |
| `--c-tooltip-status-primary-background` | 公开 | `var(--c-sys-color-action-primary)` | 本组件 CSS `background-color` |
| `--c-tooltip-status-primary-text-color` | 公开 | `var(--c-sys-color-content-on-dark)` | 本组件 CSS `color` |
| `--c-tooltip-status-success-background` | 公开 | `var(--c-sys-color-status-success)` | 本组件 CSS `background-color` |
| `--c-tooltip-status-success-text-color` | 公开 | `var(--c-sys-color-content-on-dark)` | 本组件 CSS `color` |
| `--c-tooltip-status-warning-background` | 公开 | `var(--c-sys-color-status-warning)` | 本组件 CSS `background-color` |
| `--c-tooltip-status-warning-text-color` | 公开 | `var(--c-sys-color-content-on-dark)` | 本组件 CSS `color` |
| `--c-tooltip-text-color` | 公开 | `var(--c-sys-color-content-on-dark)` | 本组件 CSS `color` |
## transfer
声明来源: `src/transfer/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-transfer-border-color` | 公开 | `var(--c-color-neutral-3)` | 本组件 CSS `border` |
| `--c-transfer-border-radius` | 公开 | `var(--c-border-radius-sm)` | 本组件 CSS `border-radius` |
| `--c-transfer-border-width` | 公开 | `var(--c-border-width-1)` | 本组件 CSS `border`, `margin-inline-start` |
| `--c-transfer-checkbox-padding-left` | 公开 | `var(--c-spacing-3)` | 本组件 CSS `padding-inline-start` |
| `--c-transfer-clear-text-color` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `color` |
| `--c-transfer-draggable-list-padding-y` | 公开 | `var(--c-spacing-4)` | 本组件 CSS `padding` |
| `--c-transfer-footer-height` | 公开 | `var(--c-size-10)` | 本组件 CSS `height` |
| `--c-transfer-footer-padding-horizontal` | 公开 | `var(--c-spacing-4)` | 本组件 CSS `inset-inline-end`, `padding` |
| `--c-transfer-group-title-font-weight` | 公开 | `var(--c-font-weight-500)` | 本组件 CSS `font-weight` |
| `--c-transfer-group-title-height` | 公开 | `var(--c-size-9)` | 本组件 CSS `height` |
| `--c-transfer-group-title-line-height` | 公开 | `var(--c-size-7)` | 本组件 CSS `line-height` |
| `--c-transfer-group-title-padding-top` | 公开 | `var(--c-spacing-4)` | 本组件 CSS `padding` |
| `--c-transfer-header-bg` | 公开 | `var(--c-color-fill-1)` | 本组件 CSS `background-color` |
| `--c-transfer-header-count-margin-right` | 公开 | `var(--c-spacing-1)` | 本组件 CSS `margin-inline-end` |
| `--c-transfer-header-flex-basis` | 公开 | `var(--c-size-11)` | 本组件 CSS `flex` |
| `--c-transfer-header-font-size` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `font-size` |
| `--c-transfer-header-font-weight` | 公开 | `var(--c-font-weight-500)` | 本组件 CSS `font-weight` |
| `--c-transfer-header-selected-count-margin-left` | 公开 | `var(--c-spacing-4)` | 本组件 CSS `margin-inline-start` |
| `--c-transfer-header-text-color` | 公开 | `var(--c-color-text-1)` | 本组件 CSS `color` |
| `--c-transfer-header-title-margin-right` | 公开 | `var(--c-spacing-4)` | 本组件 CSS `margin-inline-end` |
| `--c-transfer-header-unit-font-size` | 公开 | `var(--c-font-size-body-1)` | 本组件 CSS `font-size` |
| `--c-transfer-header-unit-text-color` | 公开 | `var(--c-color-text-3)` | 本组件 CSS `color` |
| `--c-transfer-height` | 公开 | `400px` | 本组件 CSS `height` |
| `--c-transfer-icon-bg` | 公开 | `var(--c-color-fill-3)` | 本组件 CSS `background-color` |
| `--c-transfer-icon-color` | 公开 | `var(--c-color-text-2)` | 本组件 CSS `color` |
| `--c-transfer-icon-font-size` | 公开 | `var(--c-font-size-body-1)` | 本组件 CSS `font-size` |
| `--c-transfer-item-bg` | 公开 | `transparent` | 本组件 CSS `background-color` |
| `--c-transfer-item-bg-disabled` | 公开 | `transparent` | 本组件 CSS `background-color` |
| `--c-transfer-item-bg-hover` | 公开 | `var(--c-color-fill-2)` | 本组件 CSS `background-color` |
| `--c-transfer-item-drag-handle-margin-right` | 公开 | `var(--c-spacing-4)` | 本组件 CSS `margin-inline-end` |
| `--c-transfer-item-draggable-bg-blink` | 公开 | `var(--c-color-primary-light-1)` | 本组件 CSS `background-color` |
| `--c-transfer-item-draggable-bg-dragging` | 公开 | `var(--c-color-fill-1)` | 本组件 CSS `background-color` |
| `--c-transfer-item-draggable-gap-bg` | 公开 | `rgb(var(--c-primary-6))` | 本组件 CSS `background-color` |
| `--c-transfer-item-draggable-gap-height` | 公开 | `var(--c-spacing-1)` | 本组件 CSS `border-radius`, `bottom`, `height`, `top` |
| `--c-transfer-item-draggable-text-color-dragging` | 公开 | `var(--c-color-text-4)` | 本组件 CSS `color` |
| `--c-transfer-item-font-size` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `font-size` |
| `--c-transfer-item-height` | 公开 | `var(--c-size-9)` | 本组件 CSS `height`, `line-height` |
| `--c-transfer-item-padding-horizontal` | 公开 | `var(--c-spacing-5)` | 本组件 CSS `padding` |
| `--c-transfer-item-text-color` | 公开 | `var(--c-color-text-1)` | 本组件 CSS `color` |
| `--c-transfer-item-text-color-disabled` | 公开 | `var(--c-color-text-4)` | 本组件 CSS `color` |
| `--c-transfer-item-text-color-hover` | 公开 | `var(--c-color-text-1)` | 本组件 CSS `color` |
| `--c-transfer-item-tip-margin-left` | 公开 | `var(--c-spacing-4)` | 本组件 CSS `margin-inline-start` |
| `--c-transfer-operation-buttons-gap` | 公开 | `var(--c-spacing-6)` | 本组件 CSS `margin-top` |
| `--c-transfer-operation-menu-button-border-radius` | 公开 | `var(--c-border-radius-md)` | 本组件 CSS `border-radius` |
| `--c-transfer-operation-menu-button-padding-x` | 公开 | `var(--c-spacing-6)` | 本组件 CSS `padding` |
| `--c-transfer-operation-menu-button-padding-y` | 公开 | `7px` | 本组件 CSS `padding` |
| `--c-transfer-operation-menu-min-width` | 公开 | `140px` | 本组件 CSS `min-width` |
| `--c-transfer-operation-menu-padding` | 公开 | `var(--c-spacing-2)` | 本组件 CSS `padding` |
| `--c-transfer-operation-padding-horizontal` | 公开 | `var(--c-spacing-8)` | 本组件 CSS `padding` |
| `--c-transfer-operation-words-button-padding-x` | 公开 | `var(--c-spacing-6)` | 本组件 CSS `padding` |
| `--c-transfer-pagination-input-width` | 公开 | `var(--c-size-6)` | 本组件 CSS `width` |
| `--c-transfer-pagination-separator-gap` | 公开 | `var(--c-spacing-4)` | 本组件 CSS `padding` |
| `--c-transfer-search-padding-bottom` | 公开 | `var(--c-spacing-2)` | 本组件 CSS `padding-block` |
| `--c-transfer-search-padding-left` | 公开 | `var(--c-spacing-6)` | 本组件 CSS `padding-inline` |
| `--c-transfer-search-padding-right` | 公开 | `var(--c-spacing-6)` | 本组件 CSS `padding-inline` |
| `--c-transfer-search-padding-top` | 公开 | `var(--c-spacing-4)` | 本组件 CSS `padding-block` |
| `--c-transfer-title-height` | 公开 | `var(--c-size-10)` | 本组件 CSS `height`, `line-height` |
| `--c-transfer-transition-timing-function-linear` | 公开 | `var(--c-transition-timing-function-linear)` | 本组件 CSS `animation-timing-function` |
## tree
声明来源: `src/tree/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-tree-checkbox-margin-right` | 公开 | `var(--c-spacing-5)` | 本组件 CSS `margin-inline-end` |
| `--c-tree-custom-icon-margin-right` | 公开 | `var(--c-spacing-5)` | 本组件 CSS `margin-inline-end` |
| `--c-tree-drag-icon-color` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `color` |
| `--c-tree-drag-icon-spacing-right` | 公开 | `var(--c-spacing-6)` | 本组件 CSS `inset-inline-end` |
| `--c-tree-drag-icon-spacing-text` | 公开 | `var(--c-spacing-22)` | 本组件 CSS `margin-inline-start` |
| `--c-tree-draggable-gap-bg` | 公开 | `rgb(var(--c-primary-6))` | 本组件 CSS `background-color` |
| `--c-tree-draggable-gap-height` | 公开 | `2px` | 本组件 CSS `border-radius`, `bottom`, `height`, `margin-top`, `top` |
| `--c-tree-focus-outline-width` | 公开 | `2px` | 本组件 CSS `outline` |
| `--c-tree-loading-icon-color` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `color` |
| `--c-tree-node-border-radius` | 公开 | `var(--c-border-radius-sm)` | 本组件 CSS `border-radius` |
| `--c-tree-showline-line-bg` | 公开 | `var(--c-color-neutral-3)` | 本组件 CSS `border-left` |
| `--c-tree-showline-line-spacing-vertical` | 公开 | `var(--c-spacing-2)` | 本组件 CSS `bottom`, `top` |
| `--c-tree-showline-line-style` | 公开 | `solid` | 本组件 CSS `border-left` |
| `--c-tree-showline-line-width` | 公开 | `var(--c-border-width-1)` | 本组件 CSS `border-left`, `width` |
| `--c-tree-showline-plus-icon-bg` | 公开 | `var(--c-color-fill-2)` | 本组件 CSS `background` |
| `--c-tree-showline-plus-icon-border-radius` | 公开 | `var(--c-border-radius-sm)` | 本组件 CSS `border-radius` |
| `--c-tree-showline-plus-icon-stroke` | 公开 | `2px` | 本组件 CSS `height`, `margin-left`, `margin-top`, `width` |
| `--c-tree-showline-plus-icon-width` | 公开 | `6px` | 本组件 CSS `height`, `margin-left`, `margin-top`, `width` |
| `--c-tree-showline-switcher-icon-size` | 公开 | `14px` | 本组件 CSS `bottom`, `height`, `inset-inline-end`, `padding-inline-start`, `top`, `width` |
| `--c-tree-size-expand-icon-bg-hover` | 公开 | `var(--c-size-4)` | 本组件 CSS `height`, `padding-inline-start`, `width` |
| `--c-tree-size-lg-font-size` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `font-size` |
| `--c-tree-size-lg-icon-size` | 公开 | `var(--c-size-3)` | 本组件 CSS `font-size`, `padding-inline-start`, `width` |
| `--c-tree-size-lg-line-height` | 公开 | `var(--c-size-lg)` | 本组件 CSS `bottom`, `height`, `line-height`, `top` |
| `--c-tree-size-lg-title-padding-vertical` | 公开 | `10px` | 本组件 CSS `padding-bottom`, `padding-top` |
| `--c-tree-size-md-font-size` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `font-size` |
| `--c-tree-size-md-icon-size` | 公开 | `var(--c-size-3)` | 本组件 CSS `font-size`, `padding-inline-start`, `width` |
| `--c-tree-size-md-line-height` | 公开 | `var(--c-size-md)` | 本组件 CSS `bottom`, `height`, `line-height`, `top` |
| `--c-tree-size-md-title-padding-vertical` | 公开 | `8px` | 本组件 CSS `padding` |
| `--c-tree-size-sm-font-size` | 公开 | `var(--c-font-size-body-3)` | 本组件 CSS `font-size` |
| `--c-tree-size-sm-icon-size` | 公开 | `var(--c-size-3)` | 本组件 CSS `font-size`, `padding-inline-start`, `width` |
| `--c-tree-size-sm-line-height` | 公开 | `var(--c-size-sm)` | 本组件 CSS `bottom`, `height`, `line-height`, `top` |
| `--c-tree-size-sm-title-padding-vertical` | 公开 | `6px` | 本组件 CSS `padding-bottom`, `padding-top` |
| `--c-tree-size-xl-font-size` | 公开 | `var(--c-sys-font-size-lg)` | 本组件 CSS `font-size` |
| `--c-tree-size-xl-icon-size` | 公开 | `var(--c-size-4)` | 本组件 CSS `font-size`, `padding-inline-start`, `width` |
| `--c-tree-size-xl-line-height` | 公开 | `var(--c-size-xl)` | 本组件 CSS `bottom`, `height`, `line-height`, `top` |
| `--c-tree-size-xl-title-padding-vertical` | 公开 | `12px` | 本组件 CSS `padding-bottom`, `padding-top` |
| `--c-tree-size-xs-font-size` | 公开 | `var(--c-font-size-body-1)` | 本组件 CSS `font-size` |
| `--c-tree-size-xs-icon-size` | 公开 | `var(--c-size-3)` | 本组件 CSS `font-size`, `padding-inline-start`, `width` |
| `--c-tree-size-xs-line-height` | 公开 | `var(--c-size-xs)` | 本组件 CSS `bottom`, `height`, `line-height`, `top` |
| `--c-tree-size-xs-title-padding-vertical` | 公开 | `2px` | 本组件 CSS `padding-bottom`, `padding-top` |
| `--c-tree-switcher-icon-color` | 公开 | `var(--c-color-text-2)` | 本组件 CSS `background-color`, `color` |
| `--c-tree-switcher-icon-margin-right` | 公开 | `var(--c-spacing-5)` | 本组件 CSS `margin-inline-end` |
| `--c-tree-title-bg-dragging` | 公开 | `var(--c-color-fill-1)` | 本组件 CSS `background-color` |
| `--c-tree-title-bg-highlight` | 公开 | `var(--c-color-primary-light-1)` | 本组件 CSS `background-color` |
| `--c-tree-title-bg-hover` | 公开 | `var(--c-color-fill-2)` | 本组件 CSS `background-color` |
| `--c-tree-title-padding-horizontal` | 公开 | `var(--c-spacing-2)` | 本组件 CSS `margin-inline-start`, `padding-inline-end`, `padding-inline-start` |
| `--c-tree-title-text-color` | 公开 | `var(--c-color-text-1)` | 本组件 CSS `color` |
| `--c-tree-title-text-color-active` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `color`, `outline`, `outline-color` |
| `--c-tree-title-text-color-active-disabled` | 公开 | `var(--c-color-primary-light-3)` | 本组件 CSS `color` |
| `--c-tree-title-text-color-disabled` | 公开 | `var(--c-color-text-4)` | 本组件 CSS `color` |
| `--c-tree-title-text-color-dragging` | 公开 | `var(--c-color-text-4)` | 本组件 CSS `color` |
| `--c-tree-title-text-color-highlight` | 公开 | `var(--c-color-text-1)` | 本组件 CSS `color` |
| `--c-tree-title-text-color-hover` | 公开 | `var(--c-color-text-1)` | 本组件 CSS `color` |
## tree-select
声明来源: `src/tree-select/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-tree-select-highlight-font-weight` | 公开 | `var(--c-font-weight-500)` | 本组件 CSS `font-weight` |
| `--c-tree-select-option-active-background` | 公开 | `var(--c-color-fill-2)` | 本组件 CSS `background` |
| `--c-tree-select-option-radius` | 公开 | `var(--c-sys-radius-sm)` | 本组件 CSS `border-radius` |
| `--c-tree-select-popup-padding-left` | 公开 | `var(--c-spacing-5)` | 本组件 CSS `padding-inline-start` |
| `--c-tree-select-popup-padding-right` | 公开 | `var(--c-spacing-2)` | 本组件 CSS `padding-inline-end` |
| `--c-tree-select-popup-padding-vertical` | 公开 | `var(--c-spacing-2)` | 本组件 CSS `padding` |
## trigger
声明来源: `src/trigger/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-trigger-arrow-background` | 公开 | `var(--c-sys-color-surface-overlay)` | 本组件 CSS `background-color` |
| `--c-trigger-arrow-radius` | 公开 | `var(--c-sys-radius-sm)` | 本组件 CSS `border-radius` |
| `--c-trigger-arrow-size` | 公开 | `var(--c-sys-space-4)` | 本组件 CSS `height`, `width` |
| `--c-trigger-transition-duration` | 公开 | `var(--c-sys-motion-duration-fast)` | 本组件 CSS `transition` |
| `--c-trigger-transition-easing` | 公开 | `var(--c-sys-motion-easing-standard)` | 本组件 CSS `transition` |
## typography
声明来源: `src/typography/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-typography-blockquote-bg` | 公开 | `var(--c-color-bg-2)` | 本组件 CSS `background-color` |
| `--c-typography-blockquote-border-left-color` | 公开 | `var(--c-color-neutral-6)` | 本组件 CSS `border-left` |
| `--c-typography-blockquote-border-width` | 公开 | `var(--c-border-width-2)` | 本组件 CSS `border-left` |
| `--c-typography-blockquote-padding-left` | 公开 | `var(--c-spacing-4)` | 本组件 CSS `padding-left` |
| `--c-typography-code-bg` | 公开 | `var(--c-color-neutral-2)` | 本组件 CSS `background-color` |
| `--c-typography-code-border-color` | 公开 | `var(--c-color-neutral-3)` | 本组件 CSS `border` |
| `--c-typography-code-border-radius` | 公开 | `var(--c-border-radius-sm)` | 本组件 CSS `border-radius` |
| `--c-typography-code-text-color` | 公开 | `var(--c-color-text-2)` | 本组件 CSS `color` |
| `--c-typography-edit-border-width` | 公开 | `var(--c-border-width-1)` | 本组件 CSS `left`, `margin-bottom`, `margin-right`, `margin-top` |
| `--c-typography-edit-padding-x` | 公开 | `var(--c-spacing-6)` | 本组件 CSS `left`, `margin-right` |
| `--c-typography-edit-padding-y` | 公开 | `var(--c-spacing-2)` | 本组件 CSS `margin-bottom`, `margin-top` |
| `--c-typography-expand-margin-x` | 公开 | `var(--c-spacing-2)` | 本组件 CSS `margin` |
| `--c-typography-expand-text-color` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `color` |
| `--c-typography-expand-text-color-hover` | 公开 | `rgb(var(--c-primary-5))` | 本组件 CSS `color` |
| `--c-typography-font-size-h1` | 公开 | `var(--c-font-size-display-1)` | 本组件 CSS `font-size` |
| `--c-typography-font-size-h2` | 公开 | `var(--c-size-8)` | 本组件 CSS `font-size` |
| `--c-typography-font-size-h3` | 公开 | `var(--c-size-7)` | 本组件 CSS `font-size` |
| `--c-typography-font-size-h4` | 公开 | `var(--c-font-size-title-3)` | 本组件 CSS `font-size` |
| `--c-typography-font-size-h5` | 公开 | `var(--c-font-size-title-2)` | 本组件 CSS `font-size` |
| `--c-typography-font-size-h6` | 公开 | `var(--c-font-size-title-1)` | 本组件 CSS `font-size` |
| `--c-typography-heading-font-weight` | 公开 | `var(--c-font-weight-500)` | 本组件 CSS `font-weight` |
| `--c-typography-heading-margin-bottom` | 公开 | `0` | 本组件 CSS `margin-bottom` |
| `--c-typography-heading-margin-top` | 公开 | `0` | 本组件 CSS `margin-top` |
| `--c-typography-icon-copy-bg` | 公开 | `transparent` | 本组件 CSS `background-color` |
| `--c-typography-icon-copy-bg-hover` | 公开 | `var(--c-color-fill-2)` | 本组件 CSS `background-color` |
| `--c-typography-icon-copy-color` | 公开 | `var(--c-color-text-2)` | 本组件 CSS `color` |
| `--c-typography-icon-copy-color-copied` | 公开 | `var(--c-sys-color-content-success)` | 本组件 CSS `color` |
| `--c-typography-icon-copy-color-hover` | 公开 | `var(--c-color-text-2)` | 本组件 CSS `color` |
| `--c-typography-icon-edit-bg` | 公开 | `transparent` | 本组件 CSS `background-color` |
| `--c-typography-icon-edit-bg-hover` | 公开 | `var(--c-color-fill-2)` | 本组件 CSS `background-color` |
| `--c-typography-icon-edit-color` | 公开 | `var(--c-color-text-2)` | 本组件 CSS `color` |
| `--c-typography-icon-edit-color-hover` | 公开 | `var(--c-color-text-2)` | 本组件 CSS `color` |
| `--c-typography-list-item-margin-left` | 公开 | `var(--c-spacing-8)` | 本组件 CSS `margin-left` |
| `--c-typography-operation-border-radius` | 公开 | `var(--c-border-radius-sm)` | 本组件 CSS `border-radius` |
| `--c-typography-operation-margin-left` | 公开 | `var(--c-spacing-1)` | 本组件 CSS `margin-left` |
| `--c-typography-operation-padding` | 公开 | `var(--c-spacing-1)` | 本组件 CSS `padding` |
| `--c-typography-paragraph-line-height` | 公开 | `var(--c-line-height)` | 本组件 CSS `line-height` |
| `--c-typography-paragraph-line-height-close` | 公开 | `1.3` | 本组件 CSS `line-height` |
| `--c-typography-text-bg-mark` | 公开 | `rgb(var(--c-yellow-4))` | 本组件 CSS `background-color` |
| `--c-typography-text-color` | 公开 | `var(--c-color-text-1)` | 本组件 CSS `color` |
| `--c-typography-text-color-disabled` | 公开 | `var(--c-color-text-4)` | 本组件 CSS `color` |
| `--c-typography-text-color-error` | 公开 | `var(--c-sys-color-content-danger)` | 本组件 CSS `color` |
| `--c-typography-text-color-primary` | 公开 | `var(--c-sys-color-content-brand)` | 本组件 CSS `color` |
| `--c-typography-text-color-secondary` | 公开 | `var(--c-color-text-2)` | 本组件 CSS `color` |
| `--c-typography-text-color-success` | 公开 | `var(--c-sys-color-content-success)` | 本组件 CSS `color` |
| `--c-typography-text-color-warning` | 公开 | `var(--c-sys-color-content-warning)` | 本组件 CSS `color` |
| `--c-typography-text-font-weight-bold` | 公开 | `var(--c-font-weight-500)` | 本组件 CSS `font-weight` |
| `--c-typography-text-margin-code-horizontal` | 公开 | `var(--c-spacing-1)` | 本组件 CSS `margin` |
| `--c-typography-text-padding-code-horizontal` | 公开 | `var(--c-spacing-4)` | 本组件 CSS `padding` |
| `--c-typography-text-padding-code-vertical` | 公开 | `var(--c-spacing-1)` | 本组件 CSS `padding` |
## upload
声明来源: `src/upload/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-upload-action-size` | 公开 | `var(--c-sys-control-touch-target)` | 本组件 CSS `height`, `width` |
| `--c-upload-active-color` | 公开 | `var(--c-sys-color-action-primary)` | 本组件 CSS `accent-color`, `border-color`, `outline` |
| `--c-upload-background` | 公开 | `var(--c-sys-color-surface-default)` | 本组件 CSS `background` |
| `--c-upload-border-color` | 公开 | `var(--c-sys-color-border-default)` | 本组件 CSS `border` |
| `--c-upload-border-radius` | 公开 | `var(--c-sys-radius-md)` | 本组件 CSS `border-radius` |
| `--c-upload-card-size` | 公开 | `calc(var(--c-sys-control-height-md) * 2)` | 本组件 CSS `height`, `min-height`, `width` |
| `--c-upload-disabled-opacity` | 公开 | `0.56` | 本组件 CSS `opacity` |
| `--c-upload-duration-background` | 公开 | `var(--c-sys-color-surface-tooltip)` | 本组件 CSS `background` |
| `--c-upload-duration-color` | 公开 | `var(--c-sys-color-content-on-dark)` | 本组件 CSS `color` |
| `--c-upload-duration-font-size` | 公开 | `var(--c-sys-font-size-sm)` | 本组件 CSS `font-size` |
| `--c-upload-duration-padding` | 公开 | `var(--c-sys-space-1) var(--c-sys-space-2)` | 本组件 CSS `padding` |
| `--c-upload-duration-radius` | 公开 | `var(--c-sys-radius-sm)` | 本组件 CSS `border-radius` |
| `--c-upload-error-color` | 公开 | `var(--c-sys-color-content-danger)` | 本组件 CSS `color` |
| `--c-upload-font-size` | 公开 | `var(--c-sys-font-size-md)` | 本组件 CSS `font-size` |
| `--c-upload-gap` | 公开 | `var(--c-sys-space-4)` | 本组件 CSS `gap` |
| `--c-upload-hover-background` | 公开 | `var(--c-sys-color-state-hover)` | 本组件 CSS `background` |
| `--c-upload-item-min-height` | 公开 | `var(--c-sys-control-height-md)` | 本组件 CSS `min-height` |
| `--c-upload-item-padding` | 公开 | `var(--c-sys-space-4)` | 本组件 CSS `padding` |
| `--c-upload-progress-height` | 公开 | `var(--c-sys-space-2)` | 本组件 CSS `height` |
| `--c-upload-secondary-text-color` | 公开 | `var(--c-sys-color-content-secondary)` | 本组件 CSS `color` |
| `--c-upload-text-color` | 公开 | `var(--c-sys-color-content-primary)` | 本组件 CSS `color` |
| `--c-upload-thumb-size` | 公开 | `var(--c-sys-control-height-lg)` | 本组件 CSS `height`, `width` |
| `--c-upload-trigger-draggable-min-height` | 公开 | `calc(var(--c-sys-control-height-md) * 2)` | 本组件 CSS `min-height` |
| `--c-upload-trigger-min-height` | 公开 | `var(--c-sys-control-height-md)` | 本组件 CSS `min-height` |
| `--c-upload-trigger-padding-horizontal` | 公开 | `var(--c-sys-space-6)` | 本组件 CSS `padding-inline` |
## verification-code
声明来源: `src/verification-code/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-verification-code-cell-height` | 公开 | `initial` | 本组件 CSS `height` |
| `--c-verification-code-cell-max-width` | 公开 | `initial` | 本组件 CSS `flex` |
| `--c-verification-code-gutter` | 公开 | `var(--c-sys-space-2)` | 本组件 CSS `gap` |
| `--c-verification-code-input-font-size` | 公开 | `initial` | 本组件 CSS `font-size` |
## watermark
声明来源: `src/watermark/style/token.less`
| 变量 | 层级 | 声明值/条件 | 消费路径/CSS 属性 |
| --- | --- | --- | --- |
| `--c-watermark-content-color` | 公开 | `rgba(0, 0, 0, 0.15)` | 运行时引用(不代表可见性证明) `watermark/watermark.tsx` |
---
Document: llms/zh-CN/guide/design-tokens.md
### 全量收尾复核(2026-10-20 14:34 起;无新增漂移)
本轮只读重查通过:当前库存 198 文件/418 CSS/184 runtime,文件键差异 0;80 份分类 hash 全部匹配,184/184 提示已分类(100%),待审 0;33/33 既有组件族已分类(100%),剩余 0(0%),分母未变。三页生成目录全量匹配,未发现新的并行重叠。两端受查生产树汇总与上轮收口快照一致;已有未提交业务改造保留,不把 dirty 状态误报为新漂移。
共享 motion 106 项及完整后续编译链、目录 47 项/三页匹配、严格消费扫描 172 文件/4565 声明/70 已分类候选/0 待审/0 错误通过。pnpm 入口因尝试在工作区外准备自身版本而被 EPERM 拦截;改用现有 Node v23.2.0 执行 package.json 中相同的 Node 检查链通过,不声称 pnpm 入口通过,未安装软件或修改权限。
本轮只更新审计文档与证据,未改生产源码、Token 默认值、库存/hash 登记或三页生成表格;未重跑全组件业务测试/类型/根 lint,不把上轮结果改写为本轮新验证。分类/Less 编译检查不是全库业务或原生验收率。Map SDK、144 组原生环境及 Button 白字 on-dark 2.305:1 非 AA 例外保留,新增原生验收 0,自动化核实仍 PAUSED。详见 design-ui/audits/token-closure-recheck-2026-10-20-1434.md 与 audits/evidence/full-closure-recheck-2026-10-20-1434/results.json;环境恢复条件仍见 token-closure-recheck-2026-10-20.md。
### 日期库存/hash/目录授权收口(2026-10-20)
本批只同步获授权的 3 处库存、2 份分类 hash 和三页共 11 个逻辑行(2 默认值变化+9 新行,5 个新增唯一声明)。生产源码、样式/Token 默认值、范围确认/提交和并行业务未改;未复现新的产品故障,不为登记漂移制造实现修复。新增审计基线 10 项中 8 个登记/目录匹配失败、2 个真实 Less 消费通过;库存比较夹具另纠正 file 字段包装,实际 3 处位置差异已独立确认。Cedar 新夹具首轮 attrs 透传覆盖 disabledDate 的误设也已纠正,不算产品故障。
真实入口核对:Cedar date/picker/style/index.ts → index.less → token.less,预览边界 outline、悬停范围/边界 fill-2 选择器与真实 Body 类名匹配;Maple date/style/index.ts → index.less → date-picker.less,日/月/年范围底色、禁用底色、预览底色和边界 outline 消费四个新声明。目录属性仅证明编译可达性,不代表所有 DOM/局部覆盖/对比度或原生验收。
Cedar 保留原 100ms 快捷预览任务、原句柄取消和生命周期/代次/一次消费/header continuation 守卫;真实禁用 Body 清除后旧回调重复交付不覆盖新草稿。Maple onSmartMounted 挂载/新激活同步滚动,nextTick 仅做记账;鼠标/触摸范围预览不追加滚动。新 Vue 回归两端各 2 项,按技能恢复方法描述符、卸载组件、恢复模拟计时器;没有新的资源需修复。
共享 motion 106 项及后续完整编译链、目录 47 项与三页全量匹配通过;严格消费报告 172 文件/4565 声明/70 已分类候选/0 待审/0 错误。库存仍 198 文件/418 CSS/184 runtime,80 登记 hash 匹配、184/184 提示已分类(100%),待审 0;33/33 既有组件族分类收口(100%),剩余 0(0%),分母未变。这是分类口径,不是全库业务或原生验收率。
受影响回归/类型/lint 的最终结果与首轮广测、串行隔离诊断分开保留,见 design-ui/audits/evidence/date-drift-closure-2026-10-20/results.json。Map SDK/144 原生组恢复条件沿用 token-closure-recheck-2026-10-20.md;新增原生验收 0,Button 白字 on-dark 2.305:1 非 AA 例外及其他文本阈值不变,自动化仍 PAUSED。下文“3 处/2 hash/三页待交接”是授权前历史快照。
### 全量收尾复核(2026-10-20;发现新的并行漂移)
本轮不能确认“无新增漂移”:库存总量仍为 198 文件/418 CSS/184 runtime,但有 3 处文件键差异(Cedar DateRangePicker、Maple YearPickerPanel 与 date-picker.less);80 份分类源码中 78 份 hash 匹配,两个日期文件待重验。182/184 提示仍有匹配身份(98.9%),2 条待重验(1.1%),不是新增 2 个缺陷。既有 33 族历史分类不撤销;按当前源码身份,32/33 族匹配(97.0%),Date 1/33 族待重验(3.0%),不是全库业务/原生验收率。
三页均有日期目录漂移:Cedar 2 行默认值变化+1 行新增,Maple 中英各 4 行新增,共 11 个逻辑行、5 个新增唯一声明;不是 11 个缺陷。当前完整编译报告为 172 文件/4565 声明/70 已分类候选/0 待人工/0 错误(首轮并行快照曾为 4564,不能混成冻结结果)。日期源码/Token 在检查期间继续变化,未覆盖并行业务,未自动刷新库存/hash 或应用生成表格。
motion 首段 92/96 通过、4 失败,未执行后续串行全量编译链;目录专项 37/37 通过,但全量三页匹配失败。已存浏览器证据 202 项与完整性链通过,只验证旧记录,新增原生验收 0。Map SDK 与 144 组原生环境分别需要的输入、明确交接范围和逐项差异见 design-ui/audits/token-closure-recheck-2026-10-20.md;证据见 audits/evidence/full-closure-recheck-2026-10-20/results.json。自动化已核实仍 PAUSED。下方 10-19 通过结论保留为历史快照。
### Maple 展示编辑器 lint 收尾复验(2026-10-19)
此前 3 文件的 8 项 lint 诊断已在本轮开始时消失:EditorPanel.vue 属性换行、presentation-state.vue 的 const 定时器容器及条件块、Form 示例入口导入顺序均已整理。本轮仅核对与验证,未再改这三个源码文件,保留 pending/inert、1200ms、AbortSignal、一次结算和并行业务语义;历史失败记录不改写为通过。
当前 Maple 只读根 lint、三文件专项 lint、配置声明类型均通过;相关 Form/Select/FieldPresentation 回归 300 项/34 文件及三个 SFC 脚本/模板编译通过。配置类型排除示例,示例另以 SFC 编译/lint 核对,不冒称示例完整类型验收。共享 motion 96 项及完整后续编译链、目录 37 项/三页匹配、严格消费扫描 172 文件/4560 声明/70 已分类候选/0 待审/0 错误通过。
库存仍为 198 文件/418 CSS/184 runtime;80 份分类 hash 匹配,184/184 提示已分类,待审 0,分母无新增变化。33/33 组件族已分类(100%),剩余 0(0%);这是分类进度,不是原生浏览器验收率。无新库存/hash/目录漂移,未刷新登记或重生成相同目录。Map SDK 与 144 原生组阻塞保持,新增原生验收 0,自动化核实仍 PAUSED。详见 design-ui/audits/evidence/field-presentation-lint-closure-2026-10-19/results.json;恢复条件沿用 token-closure-recheck-2026-10-19.md。
### FieldPresentation/Form 授权收口(2026-10-19)
末次身份核对另捕获 Cedar 搜索助手的格式变化:当前完整字节与已登记、已验的 Maple 助手相同(6731260e…),调用行/片段未变,独立重验后只刷新该 hash。全部 80 份登记 hash 当前匹配,未将晚期变化说成源码全程未变。
末轮状态:Maple 根 lint 因新并行 EditorPanel.vue、form/example/demos/presentation-state.vue、form/example/index.vue 共 8 项格式/规则诊断退出 1;首轮通过只代表当时快照,不作为当前全库 lint 结论。本批未格式化这三个文件,需要并行负责人处理或交接这三个具体文件的格式整理边界;不影响已通过的专项、类型、当前库存/分类和目录证据。以下“根 lint 通过”仅为首轮历史。
严格门禁:motion 96 项及后续完整编译检查、目录 37 项/三页匹配、消费扫描 172 文件/4560 声明/70 已分类候选/0 错误通过。移除原始文本导入兜底后另验 AST 正反 8 项、全量三页和严格消费扫描通过。随后观察到 EditorPanel/Select 渲染与控制器等并行修改,均未覆盖;当前相关补验 Cedar 80 项/10 文件、Maple 89 项/13 文件及两端类型通过。完整 186/240 和补验不混成新增用例或全库业务认证。
新授权范围已完成:先复现两端搜索各 9 项(7 失败/2 对照)、焦点各 6 项(4 失败/2 对照),再限域修任务归属。搜索只接受当前激活实例/请求票据,替换、关闭/read/禁用、停用/卸载使旧任务失效;通知前一次消费,delay 读取和取消后旧回调不遗留任务、不覆盖新句柄。关闭后的 nextTick 焦点归还检查当前 reference、开合/形态、生命周期和代次,回调只消费一次;不在重开或跨停用后夺回焦点。失败断言相互交叠,不当成独立缺陷数。
两端真实 Form→Select 新增各 3 项回归,确认匹配字段 reset 退休搜索、无关 reset 保留当前搜索、活动编辑器阻止提交的原语义保持;两端 Form.vue/控制器/提交和并行业务源码未改,只重验并刷新登记 hash。Cedar 完整受影响 186 项/25 文件、Maple 240 项/33 文件通过(各新增 18 项),两端配置类型与受影响 lint、Maple 根只读 lint 通过。Maple Option 的外部变化保留,不以本批覆盖并行业务。
审计器从真实 style/index.ts 静态导入链发现私有 style.ts → style.less → token.less,保留真实声明路径与内部可见性;注释/type-only/孤立文件/越界路径不能伪造消费,旧入口与错误门禁保留。Maple Less 原将 min(var(--mp-field-presentation-min-width), 90vw) 折叠成 90vw,已通过保持原 CSS 表达式的转义修复真实丢失的变量消费;默认值、其他设计和公开 API 不变。
仅同步 6 处已审库存、两端 Form hash 与两个搜索登记;当前库存 198 文件/418 CSS/184 runtime,80 分类源码、184/184 提示(100%),待审 0。33/33 既有组件族已分类(100%),剩余 0(0%);私有跨组件任务归入已有 Select/Form 消费链,不新建公开组件族。分母 182→184 来自两条新增实现提示,不是额外旧缺陷;两端搜索仍各 1 条提示。三页仅新增 _components/field-presentation 私有节共 12 Token 行(两端共 8 个声明),内部实现名不因列入目录变成公开 API。
最终严格门禁结果及快照见 design-ui/audits/evidence/field-presentation-form-closure-2026-10-19/results.json。Less/受控计时器/JSDOM 与真实浏览器/OS 分层,新增原生验收 0;Map SDK 及 144 组原生环境恢复条件见 token-closure-recheck-2026-10-19.md,Button 白字 on-dark 2.305:1 非 AA 例外保留,自动化仍 PAUSED。下文“6 处/2 hash/目录入口待交接”为授权前历史。
### 全量收尾复核(2026-10-19;当前状态)
本轮发现新变化,不能沿用 10-16 的全量通过结论:当前实际库存 198 文件/418 CSS/184 runtime,6 处文件键漂移;两端 Form 共 2 份登记 hash 过期。原 33 族中 32 族的登记源身份匹配(97.0%),Form 1 族需重验(3.0%);新私有 FieldPresentation 搜索任务归属待登记,不先扩大族分母。当前 176/184 提示有匹配身份的既有登记(95.7%),8 条需审/重验(4.3%,Form 6+新增搜索 2);182→184 是新增实现提示,不是新增缺陷数。
两端新私有 token.less 使用 style.ts → style.less 路径,现审计器按旧 style/index.less 结构产生 2 项入口错误;真实 Less 各自编译通过,但目录完整检查中断,三页当前是否有新增行漂移尚未确认,未自动生成/发布部分目录。motion 首段 76/79、目录 8/11 后失败;后续全量编译链未执行,不声称全局 motion/目录通过。保存的浏览器证据 202 项及完整性链通过,仅校验旧记录,新增原生验收 0。
Map SDK 需正式适配器/版本、监听与销毁/异步取消契约、业务交接及受控可运行网络环境;144 原生组需可用 Chrome 原生 200%(48)、Safari 100%(48)、Firefox 100%(48)的受支持真实入口与逐组证据。历史连接观察未重新包装成本轮探测。具体差异、恢复输入和验收清单见 design-ui/audits/token-closure-recheck-2026-10-19.md;JSON 见 audits/evidence/full-closure-recheck-2026-10-19/results.json。
本轮仅更新审计文档/证据,保留并行业务、库存/hash 登记、三页生成目录和 Token 默认值。新增 FieldPresentation/Form 与审计器需交接边界后再收口;Map/原生阻塞、Button 白字 on-dark 2.305:1 非 AA 例外保留,自动化已核实仍 PAUSED。以下 10-16 全量通过是历史快照。
### Select/菜单表面目录授权收口(2026-10-16)
最终:Cedar 41 项/3 文件、Maple 49 项/6 文件通过(本批仅新增 1+3 项 DOM 消费回归);两端作用域/Maple 根只读 lint、三仓 diff 通过,91 个相关生产文件 hash 全部未变,验证进程均结束。保留首轮 Select 祖先选择器和 FloatingPanel 属性转发的夹具误设记录,不计产品缺陷;Vue 技能落实 finally 卸载/宿主移除。自动化仍 PAUSED,原生新增 0。
本批仅同步已核实的 Select 3 处库存/hash 和 Select、Maple Menu/FloatingPanel 三页共 21 行目录(11 个唯一 Token)。Cedar Select 当前钩子与已登记 Maple 源文件逐字同 hash;6 条调用职责不变,仅格式/行号更新。保留平铺分组标题的首项零上边距、纵向 popup padding、选项水平 padding 别名,以及菜单现有行级选中/悬停背景与 overlay 表面,未修改生产源码、样式、Token 默认值或并行业务。
实际 Less 入口、SelectMenu 平铺 DOM、Menu 分组/选中/焦点/禁用类及 FloatingPanel Teleport 宿主已核对。FloatingPanel 应在真实 popup 祖先覆写 --mp-floating-panel-background;不要假定传给 Teleport 组件的 style 自动转发到面板。目录属性列表表示编译符号可达性,不是每个 DOM 状态或局部派生别名重新求值的保证。
全量 motion 门禁当前通过(88 项共享测试、196 文件库存、182/182 分类及后续编译检查);目录 29 项及三页全量匹配、消费检查 170 文件/4552 声明/70 已分类候选/0 错误通过。33/33 运行时组件族已分类(100%),剩余 0/33(0%);78 源码、182/182 提示(100%),待审 0,分母未变。不是全库业务或原生验收率。
Map SDK 正式清理/异步身份契约、144 组原生环境阻塞和 Button 白字 on-dark 2.305:1 非 AA 设计例外继续保留;自动化保持 PAUSED。回归与最终快照见 design-ui/audits/evidence/select-catalog-closure-2026-10-16/results.json。以下 Select 3 处/目录 21 行未授权阻塞为历史。
### 原 6 处库存/DateRangePicker hash 授权收口(2026-10-16)
最终收尾:Maple 根只读 lint、Cedar 新夹具 lint、三仓 diff 与证据 JSON 均通过。保留首轮新夹具 curly 错误及第二轮并行 DatePanelContent 导入格式失败;本任务只修新夹具,观察到并行导入格式已变化后有界重跑通过。17 个相关生产快照中 16 个未变;RangeContent 并行改为移动端上下文导入,当前 8 项消费回归再次通过,未覆盖该业务文件或声称全族并行稳定。所有验证进程结束,自动化仍 PAUSED。
本批获授权的 6/6 处库存重叠已核实并刷新(100%,剩余 0);连同上批,原 31 处已审记录全部同步。Cedar DateRangePicker 的时间选择业务分支保留;仅在内存还原该分支即可恢复上次登记的完整 hash 0e223655…,证明 100ms 预览任务只是 639→644 的行号移动。当前 hash 2a47d80d…、调用片段和 interaction-delay 职责已独立重验后登记,不改变 100ms 策略、提交/确认语义或头部任务所有权。
6 处库存基线均失败,新增 5 组真实 Less 消费检查已通过;DateRange/TimeRange 生成目录另有 4 项旧节基线失败。最终局部门禁 51 项通过;Cedar 25 项/3 文件通过(含新增 2 项时间选择与旧回调重复交付),Maple 32 项/5 文件通过(含新增 8 项 Carousel 三种 effect 与范围面板 DOM 消费)。Cedar 首次新增夹具仅错误要求所有计时器为零,已改为核对原预览句柄物理取消;不是已复现产品故障。生产 SFC、样式、Token 默认值和并行业务均未修改。
Carousel 的实际 track/fade/card 消费及 reduce 规则、Less 原样输出 grid-area 均核对;范围背景已有局部 picker/date/time body 别名,支持相应后代背景路径。目录 background-image 仅表示符号依赖可达;Picker 的根级派生 mask 别名不保证随局部背景覆写重新求值,需直接覆写 --mp-picker-mask-background-image 定制遮罩,本批不改其默认策略。Date/Time 还含历史转换选择器,不能以编译存在推断每种模式命中或完整 reduced-motion/原生验收。
授权的 Maple 中英 DateRange/TimeRange 共 4 行生成目录已同步。新增范围外变更独立保留:两端 Select 样式行号、Cedar select/hooks/use-select.ts 运行时行号及 hash;全量库存当前因此仍有 3 行漂移,分类 CLI 因 Select 失败,不再是 DateRangePicker。目录还保留 Select/Maple Menu/FloatingPanel 共 21 行、3 页的并行漂移,未整页应用。历史运行时登记仍 33/33 族、78 文件、182/182 提示、待分类 0,分母未变;当前 Select hash 待重验与未分类提示是不同统计,不声称全局门禁通过。
Map SDK 清理/异步身份契约、144 组原生环境阻塞、Button 白字 on-dark 2.305:1 非 AA 例外和自动化 PAUSED 保留。本次 Vue 技能用于原资源/回调交付复核及 finally 卸载/计时器恢复;Less、JSDOM 与真实浏览器分层,本批原生新增 0。证据:design-ui/audits/evidence/remaining-six-inventory-closure-2026-10-16/results.json。以下 6 处待授权/DateRangePicker hash 阻塞均为历史。
### 库存漂移分批收口(2026-10-16;自动化保持暂停)
最终收尾:Maple 根级只读 lint 退出 0;25 个已审生产文件 hash、三仓 diff 和证据 JSON 核验通过,验证进程均已结束。全量库存和分类 CLI 的已说明失败仍保留,不以局部通过掩盖。
重新扫描以文件键计为 31 处差异(Cedar 4/Maple 27),历史“26 处”不是当前固定分母;本轮最初“32”计数口误已更正。已核对并仅刷新 25/31 处库存记录(80.6%),保留 6/31 处(19.4%)重叠。25 处包含:5 处前批已审 FieldDecorator/Input/FilterForm 的行号更新、14 处无未提交样式变化的候选行号漂移、6 处已提交的 Checkbox/Radio/Progress/ProgressGroup/Rate/Slider 样式候选扩展。后六项虽部分文档/示例并行,未发现相应样式源码冲突,不能整族视为阻塞。没有把 25 处旧快照当作 25 个产品缺陷。
新增 31 项回归的有效基线为 25 个库存匹配失败/6 个真实编译消费通过;局部刷新后与既有 4 项扫描器回归合计 35 项通过。25 个实际 Less 入口均编译,6 组扩展核对正常 duration/animation 路径与 reduced-motion 对应规则;Maple 受影响真实控件回归 85 项/7 文件通过(不是 85 项新增)。保留 Rate 非法 count 测试的预期 Vue warning。仅建立候选位置/编译可达性证据,不外推 14 个旧样式完整 reduced-motion 覆盖、CSS 动画帧或原生验收;未修改生产源码、Token 默认值或业务。
6 处重叠保留:Cedar date/picker/DateRangePicker.vue;Maple carousel/style/index.less、date-range/style/date-range-picker.less、date/style/date-picker.less、time-range/style/time-range-picker.less、time/style/time-picker.less。日期/时间关联模板和 Token 仍有并行变化,日期范围/时间范围 Less 在审查期间也继续变化;Carousel 有并行 fade 样式及主体改造。本批未接管这些源码或刷新其库存。继续前需要相应源码/关联 Token 可交接的具体边界,或明确限域接管授权。
当前库存快照仅纳入已审变更:196 文件、414 条 CSS 提示;实际源码为 196 文件、416 条 CSS 提示,差额及行号差异仍由 6 处保留造成。实际 CSS 提示由旧 392→416,含已有实现/none 覆盖及两个新增库存文件,不是新增 24 个缺陷。运行时提示仍 182,历史登记 33/33 族、78 源码、182/182 提示、待分类 0,分母不变;但当前分类 CLI 退出 1,Cedar DateRangePicker 为 78 份中唯一 hash 过期,需重验,不能沿用历史 100% 当当前 hash 验收。全量库存 CLI 也退出 1;未称全局 motion-themes 通过。
Map SDK 正式清理/异步身份契约、144 组原生环境阻塞及 Button 白字 on-dark 2.305:1 非 AA 例外保留。本聊天自动化仍 PAUSED,不恢复调度。仅库存/门禁测试/审计文档变更,无新组件 API/发布语义,不为旧快照新建产品修复 Changeset 或 Demo。逐项边界和验证:design-ui/audits/evidence/inventory-drift-review-2026-10-16/results.json。以下“26 处保留”描述为历史。
### FieldDecorator 焦点/caret 目录收口与自动化暂停(2026-10-16)
最终收尾:Maple 根只读 lint 与 Cedar 新测试作用域 lint 通过;Maple 首轮仅新夹具的 28 项格式/导入排序诊断已限文件格式化修正,修正后 9 项专项再次通过。12 个生产文件 hash 不变、三仓 diff 与证据 JSON 核验通过,所有验证进程结束;自动化保持 PAUSED。
用户限域授权后,核对两端实际 FieldDecorator/Input/Textarea/InputNumber、静态样式导入链及 Less 编译:外壳外环移除与原生 caret 改为 currentColor 已由并行实现和当前规范确定,保留变体焦点反馈、按钮 focus-visible、错误/禁用优先级与现有 Token。未复现需修改生产源码的缺陷;本批不回退设计,不改业务、SFC、样式或 Token 默认值。目录中 outline-offset/caret-color 的旧消费行已过期,仅应用三页共 9 行生成差异。focus-color 不承诺控制 caret;错误态焦点可辨识性仍需原生验收。
有效 9 项共享基线 6 通过/3 页目录失败;首轮另有 2 项探针错误要求所有样式直接导入 FieldDecorator,按真实“Textarea/InputNumber → Input → FieldDecorator”链修正,不能计作产品缺陷。最终共享目录 17 项通过,三页全量目录匹配;既有 field-focus 编译检查与 384 项错误/禁用颜色和覆盖检查通过。Cedar 106 项/13 文件、Maple 129 项/15 文件通过,各新增 9 项真实控件 DOM 回归。Vue 技能落实 finally 卸载;Less/JSDOM 与真实浏览器分层,本批原生新增 0,未复跑无变化原生入口。
运行时候选仍 33/33 族(100%),剩余 0 族(0%);78 登记源码、182/182 提示(100%),待审 0,分母不变。这不是全库业务或原生验收率;26 处其他库存漂移、Map 正式 SDK 清理/异步身份契约、144 组原生 Chrome 200%/Safari/Firefox 环境阻塞及 Button 白字 on-dark 2.305:1 非 AA 例外保留。用户要求停止的本聊天自动化 cedar-maple-14-00-2 已暂停(PAUSED),不再周期启动工作;本次明确授权的手动收尾已执行。
共享规范、两端指南/相关组件说明、Changesets、既定 OpenSpec 和证据同步:design-ui/audits/evidence/field-focus-caret-catalog-2026-10-16/results.json。以下 FieldDecorator 未授权/目录阻塞描述为历史。
### Cedar FilterForm/Form 目录消费收口(2026-10-16)
用户已授权限域审查相关样式/Token。历史“5 处目录差异”不是 5 个缺陷;按当前生成器合并为 2 个上下文差异块,现已只同步 Cedar 的 FilterForm/Form 两节。真实 Less 编译、Form 样式入口和实际 DOM 共同确认 13 个 FilterForm Token 的消费者;Form 的行高/标签下间距通过 action-offset 别名传递至 padding-top。单列 stacked 状态覆盖为 0;Grid colGap 是数字属性,不冒充 CSS Token。组件局部覆盖建议直接设置 --c-filter-form-action-offset,不假定根级派生别名会随局部依赖重新计算。未修改生产样式、Token 默认值、SFC 或并行业务代码。
新增目录回归基线 5 项中 3 通过/2 失败,失败仅为旧目录两节;同步后共享 8 项通过,Cedar FilterForm/Form 合计 75 项/17 文件通过(只新增 2 项 DOM 回归),作用域 lint 与全量消费检查通过。Vue 技能落实夹具卸载/媒体描述符恢复。Less/JSDOM 不等于原生布局或焦点验收,本批原生新增 0。
全量目录门禁仍受新出现的范围外 FieldDecorator 消费漂移阻塞:Cedar 与 Maple 中英共 3 页、9 行涉及 outline-offset/caret-color。未自动应用这部分生成补丁,也未据此认定业务/可访问性缺陷;需要另行审查授权或负责人交接。Map SDK 清理/异步身份契约、144 组原生环境阻塞与 26 处其他库存漂移保留。运行时候选分类仍为 33/33 族(100%),剩余 0 族(0%);78 源码、182/182 提示(100%),待审 0,分母不变;不是全库验收率。Button 白字 on-dark 2.305:1 非 AA 例外不变。
证据:design-ui/audits/evidence/filter-form-token-catalog-2026-10-16/results.json。以下旧“5 处待交接”描述为历史,不再作为当前授权阻塞。
### Form/Picker运行时候选分类收口(2026-10-16)
最终受影响验证:Cedar Form64项/14文件、Maple合并532项/95文件全部通过(含Form115/19、Picker30/4);两端相应lint/配置类型、共享29项及分类CLI182/0通过,最终hash/三仓diff/JSON核验通过。Maple中间531/532仅新增夹具错误禁止合法A通知,修正后205.86s最终全通过;NodeList类型适配改为局部Array.from,未改配置。原生新增0,所有验证进程已结束。
用户新授权仅接管 Cedar Form/Maple Picker 的运行时调度和资源清理,保留并行业务改造。Cedar 原11项基线7失败/4对照,Maple Picker有效7项5失败/2对照,Maple Form完成等待5项4失败/1对照;交叠断言不是独立缺陷数量,候选上的重复offset/重复注册/通知重入另行取证后修复。Cedar当前实例/验证/字段与一次消费守卫、原注销身份;Picker原媒体绑定/列/scroller完成票据与通知代次;Maple Form渲染后按当前CSS duration+delay等待,零/无过渡不固定等300ms。正时长有可取消准备帧,300ms仅不可读样式保底,插值仍保留原300ms。控制器、FormItem、并行submitEpoch/提交、disabled/ARIA/级联及CSS Token不替换。
分类为33/33族100%,剩余0族0%;78登记源码、182/182调用提示100%,待审0条0%。本批只刷新四处已审候选(含新增私有完成助手);分母181→182净增1条实现提示(新增助手2、移出Form旧timer1),不是额外旧缺陷,亦不把历史178→181重算。**这是本轮运行时候选职责分类,不是整库/所有业务协议/原生验收100%。** 受影响回归、类型、lint和共享门禁最终结果以逐组证据为准,不沿用旧18/33或旧NavMenu快照。
Vue技能落实原资源、停用/卸载、一次消费、重入和finally恢复。JSDOM受控Promise/timer/RAF/媒体/CSS与真实Less编译分层,原生浏览器/OS新增0。FormDetails当前Less编译仍为0.2s;未改CSS/公开Token/API。既有基础、异步、键盘和禁用示例保留并行修改,必要行为说明已同步组件文档;历史RPC、夹具失败、类型/lint诊断均保留,不降测试阈值。
原两族运行时接管授权阻塞已解除;不再要求重复授权。仍保留上次Cedar FilterForm/Form目录5差异块(需样式/Token稳定交接后人工整合,未覆盖生成)、Map正式SDK清理/异步身份契约、144组Chrome原生200%/Safari/Firefox环境条件及26其他库存漂移;不声称全局motion-themes通过。Button白字on-dark2.305:1非AA例外保持。Date/Time并行展示业务未接管,分类及受影响回归不等于整族稳定。新证据:design-ui/audits/evidence/form-picker-runtime-closure-2026-10-16/results.json。
### Maple Form自动滚动资格获授权修复(2026-10-16,阶段三)
用户明确允许仅补Form.vue内验证开始/清除/重置到自动滚动资格接线。基线10项6失败/4对照(exit1,11.80s)后,加入独立滚动资格版本、验证请求/策略快照及原字段成员/名称/目标复核;清除、重置、设置字段和新验证退休自动等待/插值,保留显式手动命令。校验回调重入后旧自动滚动不再覆盖新命令;停用前验证结果不能跨激活排滚动。校验Promise/回调、并行submitEpoch和提交语义保持,form-controller.ts/FormItem.vue、CedarForm/MaplePicker未改。
首修31项通过;补9项命令/物理取消/回调替换/字段身份对照后,最终Form106项18文件通过(exit0,60.18s),含本阶段19项+前批87项,不记106个新增用例或六个独立缺陷。根只读lint、配置类型、共享29项和分类CLI165/16通过。首轮新增声明排版lint失败已手工修正,不以当时类型通过掩盖lint失败。Vue技能落实原资源、KeepAlive及finally恢复;均为JSDOM受控Promise/timer/RAF/几何层,真实浏览器/OS新增0,无Less/构建或无变化环境复跑。
分类仍31/33族93.9%,剩Form/Picker2族6.1%;74登记源码、165/181提示91.2%,16待审8.8%(Form7/Picker9),本批分母不变。只手动刷新Maple Form五行提示100/103/114/131/165,不刷新26其他漂移。固定300ms完成等待与FormDetails0.2s/reduce关系仍待审,Form不提前归档。CedarForm/MaplePicker仍需具体source+test交接/冻结或限域授权;Date/Time候选已分类不等于并行面板全族稳定。目录5差异块、Map正式SDK契约、144原生环境组及Button白字2.305:1非AA例外保留。证据:design-ui/audits/evidence/form-scroll-validation-baseline-2026-10-16/results.json。
### 历史:Maple Form异步滚动资格授权前基线(2026-10-16,阶段三)
本批仅新增独立scroll-validation-eligibility探针,产品Form仍为324148a9…,阶段一/二滚动实现及并行submitEpoch均未改。有效10项基线6失败/4对照(exit1,11.80s):验证旧结果跨停用/激活排自动滚动、原字段注销但节点仍连接仍排、清除错误/关闭自动滚动未取消等待、字段目标替换后旧等待仍排RAF、校验回调清除错误后仍排。组合/交叠不计六个独立缺陷。当前错误结果及Promise返回、成功无滚动、显式手动滚动不受自动策略变化影响、新激活后新验证四类对照通过。
按Vue技能核对了异步归属/KeepAlive和原timer/descriptor finally清理。真实Form/provider注册字段、受控Promise/300ms队列与RAF探针是JSDOM层,不是原生输入/布局/OS/adopt验收,真实新增0。新测试保持失败基线,不跳过/不称当前整套Form通过;前批87/17通过是前批测试集历史。作用域lint通过;最终只读根lint及hash/diff记录见证据。
需要明确扩展到Form.vue内“验证开始、清除、重置到自动滚动资格”的局部接线;只抑制失效自动滚动,不改校验返回、回调、submitEpoch、提交语义或form-controller.ts/FormItem.vue。已请求用户决定,未先行修改该接线。成员/目标检查可与该请求归属一起审查,固定300ms等待策略保持待审;FormDetails源样式0.2s只作源级依据,不当Less/原生测量。
分类不变:31/33族93.9%,剩Form/Picker2族6.1%;74登记源码、165/181提示91.2%,16待审8.8%(Form7/Picker9),分母无变化,无库存/分类刷新。保留26其他漂移、目录5差异块、Map正式SDK、144原生环境组、Button白字2.305:1非AA例外及CedarForm/MaplePicker并行边界。证据:design-ui/audits/evidence/form-scroll-validation-baseline-2026-10-16/results.json。
### Maple Form已启动插值的生命周期(2026-10-16,阶段二)
最终本批:Form87项17文件全部通过、exit0、275.40s,含本阶段11新插值专项+前批10等待项+既有/并行66项,不把21项都算本批新写。共享29项、分类CLI165/16、类型及根/最终作用域lint通过,三仓diff及最终hash/JSON检查通过;验证进程已结束。中间偏移夹具失败与前批默认RPC历史保留,无原生新增验收。
延续用户仅接管Maple Form.vue滚动段的授权。原5c3bf495…与真实共享scrollTo组合,6项有效基线4失败/2对照(3.05s):新等待替换、停用、跨激活与卸载后旧帧仍写入。正常300ms线性/重复帧拒绝原本通过,不算新缺陷。仅Form内部私有插值接管原scroller窗口的RAF及取消器,逐帧一次消费、原请求/生命周期资格、读媒体/初始位置与写入后复核;取消物理释放原帧且逻辑拒绝晚交付,保留已发生偏移,不回滚或污染新请求。共享utils/elements.ts与HEAD同hash cdb1c340…,API未改,其他消费者不外推认证;并行submitEpoch保持。
原6插值项首修全通过;再补5项初始/动态reduce、原生写入卸载、激活新请求及位置读取卸载。前批10等待探针改为观察真实RAF/窗口写入,保留原职责;中间15/16及86/87仅偏移对照NaN,未明确初始窗口坐标的夹具补零并finally恢复后21专项通过(5.67s),不计产品缺陷。最终受影响Form/共享/类型及lint见逐组证据。Vue技能用于原窗口资源、KeepAlive、重入与descriptor恢复。保留原等待300ms+插值300ms线性、初始reduce不排帧/动态reduce下一帧到位;固定等待与FormDetails0.2s/reduce关系、异步校验资格及字段成员仍未认证,本族不提前归档。
分类31/33族93.9%,剩Form/Picker2族6.1%;74登记源码、165/181提示91.2%,16待审8.8%(Form7/Picker9)。分母178→181只因本次私有实现新增3条提示,非新增3个旧缺陷、也非已分类倒退。只手动更新Maple Form为89/92/103/120/146及本端81→84、local query=true;26其他漂移不刷新,不称全局motion-themes通过。JSDOM真实组件/原helper基线及受控RAF/媒体/几何不是原生布局/OS/adopt验收,真实新增0。目录5差异块、Map SDK、144原生环境组、Button白字2.305:1非AA例外、CedarForm/MaplePicker并行边界与前批默认RPC失败历史保持。证据:design-ui/audits/evidence/form-scroll-animation-lifecycle-2026-10-16/results.json。
### Maple Form等待任务获授权修复(2026-10-16)
最终验证:单worker受影响Form76项16文件通过(含本批10专项),类型通过、只读根lint未报错。原默认模式60项通过但2文件RPC加载失败/1未处理错误、exit1保留;一次有界补验通过不证明原失败仅由负载造成。无原生新增验收。
用户明确允许仅接管Maple Form.vue滚动任务段;保留原submitEpoch及所有并行提交改造,CedarForm/MaplePicker未接管。有效原6项基线3失败/3对照;补几何读取卸载后原源码7项4失败/3对照(4.60s),不记四个独立缺陷。授权后等待任务加入代次、一次消费、mounted/active/disposed资格;停用/卸载取消,激活只接受新请求,几何读取后复核,不退休重入创建的新请求。
首修7项通过(14.99s),补inactive/fresh activation、几何重入替换与offset/linear正对照后10项专项通过;受影响Form整套、类型和lint最终结果见逐组证据。Vue技能用于原timer/KeepAlive/finally descriptor清理。仅控制委托前的等待,不宣称下游已启动RAF可取消;共享scrollTo仍只返回Promise,无取消器。本次保留原300ms等待/global timer、默认线性helper、API及Token。FormDetails样式当前0.2s,固定300ms等待的完成策略/reduce与共享插值接线仍待单独取证,不偷改为business-delay或宣称全motion通过。
分类仍31/33族93.9%,剩Form/Picker2族6.1%;74登记文件、165/178提示92.7%,13待审7.3%,分母不变。Maple Form两条未提前登记,仅手动刷新已改库存42/52→70/84,26其他漂移保持;JSDOM受控timer/几何、mock下游不是原生插值/OS/跨document验收,真实新增0。待审仍包括共享helper取消、验证完成后的滚动资格、字段成员和当前配置等,不能用本批10项冒充Form整族收口。证据:design-ui/audits/evidence/form-scroll-wait-task-2026-10-16/results.json。
### Form滚动任务只读基线/待授权修复(2026-10-16,16:39上海起)
未接管两端Form或MaplePicker并行源码。Maple Form仍为94c525ac…快照,仅新增独立scroll-task-ownership探针:6项基线3通过/3失败(exit1,6.98s)。正常300ms调度、普通卸载取消及未知字段通过;手工交付已取消旧回调/重复当前回调/跨KeepAlive激活旧回调仍调用scroll助手。属于受控队列归属缺口,不计三个独立缺陷,不宣称原生timer实际重复或已修复。原300ms是否为视觉完成等待及滚动helper取消接线仍需进一步审查,不提前分类。
Vue技能用于原timer清理/KeepAlive核对和finally恢复全局descriptor;实际Form+注册字段,mock下游scrollTo仅观察派发,非真实插值/布局/原生/OS验收。源码未改、未归档新文件/提示;仍31/33族93.9%,剩Form/Picker2族6.1%,165/178提示92.7%,13待审7.3%(Form4/Picker9),分母不变。基线测试故意保留失败,不能称整套Form通过。新增夹具import顺序lint已修正,最终只读lint结果见证据。
需要用户/负责人明确允许仅接管Maple Form.vue滚动任务段,保留现有submitEpoch等并行提交改造;未把“继续”扩大为覆盖并行源码。CedarForm/MaplePicker仍各自保留;26漂移、目录5差异块、Map SDK、144环境组及Button白字2.305:1非AA例外不变。证据:design-ui/audits/evidence/form-scroll-ownership-baseline-2026-10-16/results.json。
### Maple 年面板原生对齐/Date候选分类收口(2026-10-16)
YearPickerPanel源码保持9a51ffd…不变:挂载及后续激活同步查询当前选中Button,优先primary、其次outline,无标记不滚动。实际onSmartMounted源码与解析构建一致,首次KeepAlive激活不重复;nextTick只更新挂载标记,没有延迟滚动、私有RAF/timer/监听需取消。7项实际YearPanel/Button+KeepAlive受控对照通过(含空列表、立即卸载、停用后当前节点重激活),未复现产品缺陷,不制造修复;Vue技能用于核对资源归属及夹具descriptor恢复。
**31/33族分类收口93.9%,剩Form/Picker两族6.1%;74文件、165/178提示92.7%,13待审7.3%,分母不变。** Form4/Picker9;Date/Time候选归档不等于并行展示层稳定或整组件验收。仅登记原有年面板236行native-scroll,无库存行变化/API/Token/默认值修改,保留block:center及浏览器滚动策略。JSDOM方法探针不是原生布局/smooth/reduce/OS/adopt验收,真实新增0。受影响回归与门禁实际结果见design-ui/audits/evidence/date-year-native-scroll-2026-10-16/results.json。
Form两端及MaplePicker源码hash与上批相同,但仍有并行source/test修改且无明确交接,不能用mtime安静认定稳定;需具体文件可审/冻结边界或明确接管授权。保留26其他漂移、Cedar FilterForm/Form目录5差异块、Map正式SDK契约、144原生环境组及Button白字2.305:1非AA例外,不自动生成覆盖或重试无变化入口。Cedar上批175项断言通过但close-timeout告警仍保留,本批不机械复跑。
### Cedar Date 范围预览与表头续体(2026-10-16,阶段二)
原clean的DateRangePicker与私有range-header helper独立审查,stub并行范围面板。有效13项旧基线10失败/3对照,正常100ms不提交模型、普通卸载及宽限内表头结算原本通过;首修候选另复现新单元格选择未使旧清理失效,单列而不加入原基线。当前21范围专项通过,其余分层验证见逐组证据。
100ms仍是interaction-delay,不是CSS完成时长或应被reduce跳过的动画。timer代次和preview代次分开,离开不取消仍有效的预览表头;所有preview写入退休旧timer/表头归属,失效配置/模型、停用卸载取消,新激活只接受新hover。preview/input setter后复核;私有resetHeaderValue可接原归属检查,nextTick一次消费,取消不删除Vue队列。默认其他调用方/所有select-confirm-input协议不据此认证。保留100ms/global timer、公开API/CSS Token;Vue技能用于原资源/停用卸载和测试descriptor恢复。
分类仍30/33族90.9%,剩Date/Form/Picker三族9.1%;73文件、164/178提示92.1%,14待审7.9%,分母不变。仅范围Picker库存605→639;helper无扫描hint,独立记hash,不虚增登记。Date仅剩Maple年面板1提示,不等于并行日期整族稳定。JSDOM/KeepAlive、stub面板、受控timer/nextTick非原生hover/OS/adopt,真实新增0。保留26其他漂移、Cedar FilterForm/Form目录5差异块、Map正式SDK/144环境组和Button白字2.305:1非AA例外,不机械复跑无变化入口/生成覆盖。证据:design-ui/audits/evidence/date-range-shortcut-preview-2026-10-16/results.json。
### Cedar Date 单值快捷预览任务(2026-10-16,阶段一)
原clean的单值Picker只审100ms离开悬停预览宽限,归interaction-delay,不是CSS完成时长,reduce不应跳过业务宽限。有效11项旧基线9失败/2对照;正常100ms清理且不提交模型、普通卸载取消原本通过。代次+一次消费拒绝取消/已消费旧回调;可见性、禁用、只读、previewShortcut和模型变更同步失效,停用/卸载取消并清预览,激活只接受新hover。保留hover命令检查当前资格,预览写入重入后不清新输入草稿;正值100ms、global timer归属、API/CSS Token保持。
16专项及Cedar配置类型/受影响lint通过,其他日期回归单列逐组证据。使用实际Picker/KeepAlive+stub PickerPanel和受控100ms队列,Vue技能用于原资源/停用卸载/descriptor恢复;不接管并行展示面板,不认证原生hover/OS、范围预览或所有select/confirm/input保留命令。真实浏览器/OS新增0。
分类仍30/33族90.9%,剩Date/Form/Picker三族9.1%;72文件、163/178提示91.6%,15待审8.4%,分母不变。仅单值Picker库存427→453,Date仍余范围预览与Maple年面板2提示;26其他漂移、Cedar FilterForm/Form目录5差异块、Map正式SDK及144环境组保持,不自动刷新/覆盖。Button白字2.305:1保留非AA例外。证据:design-ui/audits/evidence/date-shortcut-preview-2026-10-16/results.json。
### Cedar TimeColumn 消费者与候选分类收口(2026-10-16)
TimeColumn起点clean;有效11项旧基线9失败/2对照,正常100ms线性选择和Vue卸载后拒绝通知原本通过。组件现拥有私有滚动取消器:隐藏、停用、卸载及当前value/visible/list变化同步失效;visibility的渲染等待一次消费,几何读取后复核原root/value/元素,旧续体不能覆盖新请求。保留点击核对当前可见/可用及原item仍在列表且未禁用;注销核对原item,不删同值替换。激活只对齐当前值,不重放旧插值;Vue技能用于停用/卸载和引用/测试descriptor清理。正值100ms线性、公开API/CSS Token保持,必要渲染结算不是CSS完成时长。
最终16组件+14工具专项,受影响Cedar Time149项30文件通过(含并行2项step示例,不算本批新写);配置类型和受影响lint通过。当前**30/33族90.9%,剩Date/Form/Picker三族9.1%;71文件、162/178提示91.0%,剩16条9.0%,分母不变**。Time运行时候选归档不是并行Time面板/Maple滚轮稳定或整族所有行为认证;JSDOM受控nextTick/RAF/KeepAlive/几何不是原生输入、OS或adopt证据,新增真实验收0。任意同item引用回调乱序仍未认证。
只更新TimeColumn已审库存76→89;26其他漂移、上批Cedar FilterForm/Form生成目录5差异块、正式Map SDK和144原生环境组保持,不机械复跑无变化入口、不自动覆盖并行源码或生成页。Button白字2.305:1仍为非AA设计例外。证据:design-ui/audits/evidence/time-column-lifecycle-2026-10-16/results.json。
### Cedar Time 私有滚动任务/并行边界(2026-10-16)
未接管并行 Date/Form/Time 面板/Maple Picker;只修复原工作树 clean 的 Cedar `time/picker/utils/index.ts`。零/负/非有限时长及初始 reduce 直接到位且不排帧;正时长保留调用方100ms线性策略,动态 owner reduce 下一帧到位。WeakMap请求、逐帧一次消费与私有取消器隔离替换/旧回调/重入,不引入CSS Token或公开API。取消保持当前偏移,不替用户完成选择。
有效旧实现基线10项9失败/1正常100ms对照;修复后14专项(补取消/getter与setter重入)和Cedar Time共131项28文件通过,配置类型及受影响lint通过。Vue技能用于私有资源与测试descriptor恢复;此批尚未把取消器接入TimeColumn的停用/卸载,watch/nextTick与保留命令继续待审,不能把工具通过说成整族生命周期通过。JSDOM iframe/受控RAF/媒体模拟不是原生浏览器或OS证据,新增真实验收0。
当前29/33族87.9%,剩Date/Form/Time/Picker四族12.1%;70文件、161/178提示90.4%,17未分类9.6%,分母不变。仅本工具2提示登记,Time尚余1。26处库存漂移、Map正式SDK及144环境组保持;Button白字2.305:1仍为非AA设计例外。最新生成目录检查定位Cedar FilterForm声明与Form消费路径漂移(5个差异块);Maple两页匹配,不自动覆盖并行样式/目录,不称全局motion-themes通过。证据:design-ui/audits/evidence/time-scroll-task-2026-10-16/results.json。
### 分类快照重验与并行实现边界(2026-10-16)
两端Ripple/VirtualList四源码逐份重读,测试前后hash相同;Cedar83项11文件/Maple74项9文件通过后手动更新职责登记,不接管或修复并行实现。800ms触摸兼容去重是Date.now门槛,不新增timer/CSS duration;Ripple仍task-dispatch,VirtualList实测行高/自身scroll校正仍nextTick state-settlement。各15生命周期+2测量、各3鼠标与Cedar7 Tree组合为受控证据,不认证任意破坏性几何重入、可信输入/adopt/OS。
分类仍29/33族87.9%,剩4族12.1%;69文件、159/178提示89.3%,剩19条10.7%,分母不变。只更新四份已审行/hash;26处其他漂移、Date/Form/Time/Picker、Map SDK及144环境组保持,不称全局motion-themes通过;真实浏览器/OS新增0。证据:design-ui/audits/evidence/classification-revalidation-2026-10-16/results.json。
### 测试时钟清理不等于产品计时修复(2026-10-16)
最终整套复验:串行与默认线程各401项/63文件通过且exit0,不累加为802用例;旧超时/串行异常保留为历史,不再列当前复验失败,不推断旧超时全由此夹具或纯负载造成。
已安装Vitest0.22.1的timer spy/假时钟卸载组合可删除全局setTimeout,隔离回归先失败。本聊天四组Scheduler计时夹具现捕获进入fake clock前的原始timer描述符,并在卸载/mock清理后以finally恢复;不改产品业务时钟、交互节奏或CSS Token。新增3项恢复专项及受影响63项通过,包含拖动之后执行的workbench。旧整套失败以本批实际复验结果分别判断,四处并行hash/26漂移、SDK及144环境阻塞不据此解除。分类仍29/33族87.9%,剩4族12.1%;159/178提示89.3%,剩19条10.7%,分母不变。真实浏览器/OS新增0。证据:design-ui/audits/evidence/scheduler-timer-fixture-2026-10-16/results.json。
2026-10-16证据补充:两端Ripple/VirtualList四处并行hash包含鼠标去重/实测行高校正等行为变化,不能自动刷新为已验。Scheduler有界串行23项通过,但实际workbench先于event-drag,不排除清理顺序污染,旧整套失败保留。分类仍29/33族、159/178提示;无新API/Token或原生验收。证据:design-ui/audits/evidence/classification-drift-review-2026-10-16/results.json。
### Cedar Scheduler:TimeGrid范围会话与分类收口(2026-10-16)
350ms触摸武装归interaction-delay,0ms范围点击解锁归state-settlement,不是CSS duration。会话live/代次、原root/columns及步长/snap/小时/资格复核隔离旧move/up/cancel/hold/unlock;取消只释放原绑定,不清新请求。pointercancel匹配pointerId;hit-test和几何读取后检查,配置同步失效。停用/卸载取消,激活只接受新手势。保留350ms/8px/5px/snap/结束小时和global document/window,API/Token不变。
本次登记TimeGrid两条后,候选分类29/33族87.9%,剩4族12.1%(Date/Form/Time/Picker);69文件、159/178提示89.3%,19未分类10.7%,分母不变。Scheduler运行时候选分类收口不等于整组件/完整测试/原生验收;all-day/overlap/focus与非range保留命令独立待验。Vue技能用于原监听/timer、停用卸载和探针恢复;JSDOM不认证可信Pointer/原生click/跨document/OS。旧全套超时/串行异常、4hash/26漂移、SDK/144环境组保留。证据:design-ui/audits/evidence/scheduler-time-grid-range-2026-10-16/results.json。
### Cedar Scheduler:Event入口归属与职责登记(2026-10-16,阶段三)
原生drag协议的开始/结束属于当前内部请求:停用不写dataTransfer、不发start;结束先消费归属,再通知;配置/停用/卸载取消并使旧end回调失效,传输回调返回后复核资格。resize入口与可见性共用当前resizable/非milestone条件;移除的保留句柄不能重新启动。实际Button已经拒绝inactive普通click,本批不重复添加父级修复。无新API/Token/默认策略变化。
Event四提示归interaction-delay2(350ms)与state-settlement2(0ms)。三阶段受控源码证据后登记该文件,Scheduler仍待TimeGrid两条;28/33族84.8%,剩5族15.2%;68文件、157/178提示88.2%,21未分类11.8%,分母不变。登记不是干净完整测试或原生验收:旧整套超时/串行timer、四旧hash与环境/SDK阻塞仍保留。合成drag/dataTransfer不是可信系统拖放、Pointer/OS/跨文档证明;Vue技能用于失效与清理。证据:design-ui/audits/evidence/scheduler-event-native-2026-10-16/results.json。
### Cedar Scheduler:独立拖动会话隔离(2026-10-16,Event阶段二)
独立卡片拖动按请求代次、原event/root、活动资格和本地live位隔离。旧move/up/cancel/hold/0ms解锁不能跨取消、事件替换或重新激活;pointercancel只消费对应pointerId。清理先解除原处理器并摘除自己的闭包,再结算dragging/ghost和通知,回调重入的新手势不被旧外层清理覆盖。几何/样式及通知、响应式写入后复核;350ms/8px触摸、5px启动、拖影宽度160–240px和位置策略不变,无新Token/API。
父级prop异步传递与当前对象同步改变应分开建探针;父级disabled ref尚未渲染到子组件不算同步取消失败。Vue技能用于停用/卸载、原监听/计时器和夹具清理;JSDOM合成事件/几何/模拟时钟不认证原生Pointer、native drag或跨document。原global窗口归属保持,native drag/保留click仍待下一阶段,不提前归档Event整文件。登记保持28/33族84.8%,剩5族15.2%;67文件、153/178提示86.0%,25未分类14.0%,分母不变;既有4hash/26漂移/SDK/144环境阻塞保留。证据:design-ui/audits/evidence/scheduler-event-drag-2026-10-16/results.json。
### Cedar Scheduler:受管指针长按与点击结算(2026-10-16,Event阶段一)
受管卡片350ms触摸等待是interaction-delay,0ms释放点击抑制是state-settlement,不是CSS动效时长。等待取消同时撤销旧回调资格,回调及父级finished各消费一次;新按下、配置/事件替换、停用/卸载使旧finished/解锁失效。Escape/blur释放待长按监听,激活只接受新手势。mounted/active和代次保护不等于原生手势验收;保留global document/window、350ms/8px策略及公开协议,不新增Token/Maple组件。
本批仅受管分支专项;独立拖动、原生drag与跨文档仍需独立审查,不提前登记整个Event文件或Scheduler族。进度保持28/33族84.8%,剩5族15.2%;67文件、153/178提示86.0%,25未分类14.0%,分母不变。4个旧hash、26处库存漂移、地图SDK与144环境组继续保留。Vue技能指导停用/卸载及夹具恢复;JSDOM/模拟时钟不替代原生浏览器或OS。证据:design-ui/audits/evidence/scheduler-event-managed-2026-10-16/results.json。
### Cedar Scheduler:时间线指针帧归属(2026-10-16)
边缘自动滚动是会话拥有的visual-scroll,不是CSS duration。保留40px边缘/12px每帧与5px启动策略;统一RAF先消费帧身份,拒绝旧/重复帧写入、分叉或取消替换手势。停用/卸载释放帧与监听,旧move/blur/nextTick失效,激活只接受新手势。几何与start/drop/finished及拖影写入后复核;先摘旧清理闭包再通知,保护回调重入的新会话。
Vue技能用于生命周期/探针清理;JSDOM受控RAF/几何不是原生手势/OS。本批保留原global document/window/RAF归属,跨document与原生减少动效策略独立待验。无API/Token/默认值变化,不造Maple组件。登记28/33族84.8%,剩5族15.2%;67文件、153/178提示86.0%,25未分类14.0%,Scheduler剩6条。两RAF入口合一令分母179→178,不是额外缺陷或验收;4个旧hash、26处漂移、SDK与144环境阻塞保留。证据:design-ui/audits/evidence/scheduler-pointer-lifecycle-2026-10-16/results.json。
### Cedar Scheduler:虚拟行双阶段恢复(2026-10-16)
两次nextTick结算尺寸缓存重建、锚点key转发及偏移/水平恢复,归state-settlement,不是CSS duration/原生smooth滚动。队列逻辑失效,按请求、数据/布局/options及新list/viewport身份复核;停用/卸载失效旧续体,dirty激活按当前数据重新恢复,scroll绑定代次及来源检查拒绝旧列表写heading。原key回退/几何/API/Token不变,未修改并行VirtualList。
受控带前缀列表夹具只验证父级,不认证下游;同步watch渲染中卸载的Vue内部错误探针改为第二阶段几何,才计有效基线。父级延迟inactive props到激活,直接缓存子组件收取inactive props仍另待验。登记28/33族84.8%,剩5族15.2%;66文件,152/179提示84.9%,27未分类15.1%,分母不变,Scheduler剩8条;4个旧hash重验继续阻塞全局门禁。证据:design-ui/audits/evidence/scheduler-timeline-restore-2026-10-16/results.json。
### Cedar Scheduler:依赖连线测量调度(2026-10-16)
连线RAF归measurement-scheduling,不是CSS duration,不因reduce删除必要测量。原host窗口申请/取消帧,原scroll/ResizeObserver按绑定释放;binding、frame、render三种代次分别隔离旧监听/已消费帧/nextTick。几何后复核,换host/数据、停用和卸载使旧任务失效,缺host清旧路径,激活新绑定重新测量。公开API/默认路径坐标/Token不变,其他并行核心保留。
登记28/33族84.8%,剩5族15.2%;65文件,151/179提示84.4%,28未分类15.6%,分母不变;Scheduler剩9条。4个既有Ripple/VirtualList源码hash失效仍阻塞全局门禁,不自动刷新。JSDOM几何/iframe/KeepAlive不是原生浏览器/OS或同节点跨document证明。证据:design-ui/audits/evidence/scheduler-dependency-lifecycle-2026-10-16/results.json。
### Cedar Scheduler:当前时间业务时钟(2026-10-16)
收尾门禁:两端Ripple及两份VirtualList共4个既有分类文件因并行修改hash失效,需重验、不自动刷新。下列28/33与150/179是登记进度,不代表当前全局门禁通过;这4文件不与剩5族混加。Scheduler新行独立校验通过。
当前时间指示器每30000ms刷新墙钟,归business-clock,不是CSS duration,不因视觉减少动效停止。停用/卸载取消原interval及原document的visibility监听;独立计时代次和绑定身份使旧回调不能越过禁用、销毁或重新激活。激活刷新当前时间后重新开始节奏,不补播遗漏tick;周期interval不是一次性timeout,当前合法tick可重复。
Vue清理规范用于停用/卸载和重入清理。保护并行改动按文件/依赖边界:资源core改动保留,未重叠use-now可以独立验收,不再把Scheduler整族都视为阻塞。没有公开API/Token/默认时长变化;模拟时钟/KeepAlive不认证真实浏览器或OS。族仍28/33(84.8%),剩5族15.2%;64文件,150/179提示83.8%,29待审16.2%,分母未变;Scheduler剩10提示。证据:design-ui/audits/evidence/scheduler-now-lifecycle-2026-10-16/results.json。
### Cedar Map:SDK 抑制窗口与分类边界(2026-10-15)
300ms的model中心更新窗口和500ms的地点选择窗口用于释放isUpdating、抑制程序化moveend反向解析,属于interaction-delay,不是CSS动效完成时长;不新增Token,不随reduced-motion改变业务抑制规则。map-core运行时导入已因迁移注释,三个declare不是依赖实现;缺任一SDK依赖时initMap先返回,不注册model watcher/moveend或两个timer。
本批只验证真实组件的缺SDK降级路径,不调用地图服务、不虚构off/destroy API、不修改产品源码。实际SDK的计时取消、停用/卸载、旧回调/异步请求、监听资源和MapSelect地址回填/定位仍独立待验。分类新增1文件/2提示:28/33族84.8%,剩5族15.2%;63文件,149/179提示83.2%,30待审16.8%,分母不变。分类不是生命周期/真实浏览器完成率;Maple无对应运行时。保留其他并行区域/26处漂移、144环境阻塞和Button白字例外。证据:design-ui/audits/evidence/map-sdk-boundary-2026-10-15/results.json。
### Cedar Tree:滚动命令转发分类(2026-10-15)
Tree.scrollIntoView(options)只向当前VirtualList转发原options;701行为函数声明,702行为delegated-scroll,不是两次原生滚动、RAF或CSS完成等待。Tree没有因此新增本地时钟/duration Token。保持已有公开方法、key/index/align语义及非虚拟模式无操作;停用/卸载和旧校正队列由实际下游已有availability/request守卫处理,不为分类制造父级重复调度器。
本批没有产品修复:Tree及VirtualList源码hash保持。真实Tree+真实VirtualList、stub TreeNode、fixedSize30/模拟90px viewport验证7项:index/top600、key/bottom390、替换命令90、inactive保持37、激活新命令120、卸载后旧校正与保留命令保持37、非虚拟无操作。Tree原契约1+TreeSelect既有1一并过滤运行,总9项通过;不把TreeSelect一项当其生命周期认证。Vue技能用于核对既有停用/卸载清理和夹具卸载。
新增1候选文件/2提示(declaration-only16、delegated-scroll5):27/33族81.8%,剩6族18.2%;62分类文件,147/179提示82.1%,32待审17.9%,分母/库存不变。JSDOM属性滚动与模拟视口不是原生布局/smooth/CSS减少动效/OS,浏览器新增0;Tree其他保留方法、loadMore异步及任意行高仍独立待验。Maple无对应Tree运行时,只同步指南,不造组件。其他并行/26处漂移、144环境阻塞和Button白字例外保持。证据:design-ui/audits/evidence/tree-scroll-consumer-2026-10-15/results.json。
### Maple PullRefresh:手势、监听与滚动锁(2026-10-15,阶段二)
touchcancel是取消,不走刷新释放路径;新手势、target/根节点切换、禁用、停用/卸载终止当前手势,释放原锁和旧监听。touching/手势代次及原root/control/scroller身份在几何/滚动读取后复核;geometry getter中卸载不继续读旧事件目标。每次绑定保存原节点和独立代次,旧move/end不能跨激活;根ref同步绑定,不让初始post任务取消用户第一段同步手势。保留既有下拉比例、阈值和第一阶段计时/受控ack规则。
滚动锁是私有资源租约,不是CSS Token或公开API。按原HTMLElement和类名计数,同实例重复加锁不重复持有;释放幂等,最后一个租约才移除库新增class,预先存在的外部class保持。Window目标使用其document.body,不再误用全局body。这里只协调同一Maple模块的PullRefresh持有者,外部代码在租约中途改同名class、重复运行时副本、默认iframe scroller发现/adopt仍独立待验,不把它变成全库锁协调器。
有效10项基线6失败/4对照;修复中post-watch曾使两个原有立即操作用例回归,改同步根绑定后未修改原断言即恢复。最终15手势专项+17计时专项,完整37项通过。Vue技能用于停用/卸载、原监听全组释放与锁租约/夹具清理。实际组件/KeepAlive、stub图标、模拟touch/几何及timer为JSDOM,非可信输入/真实CSS或OS;浏览器新增0。初始modelValue=true显示、动态时长/真实reduce、共享useTouch RAF及跨文档默认查找仍独立待验。
新增1文件/1条task-dispatch(4),26/33族78.8%,剩7族21.2%;61分类文件,145/179提示81.0%,34待审19.0%,分母未变。无扫描命中的私有scroll-lock helper单列hash,不虚增分类文件。仅更新本源码库存81→96及hash,193文件/392CSS/179runtime保持;其他26处漂移与并行改造、144环境阻塞和Button白字例外保留,不称全局motion-themes通过。证据:design-ui/audits/evidence/pull-refresh-gesture-lifecycle-2026-10-15/results.json。
### Maple PullRefresh:计时与刷新续体(2026-10-15,阶段一)
成功展示success-duration默认2000ms是业务期限;animation-duration默认300ms同时驱动内联回弹与复位等待;ICON_TRANSITION=150ms同时传给图标过渡并用于名称等待。三者不是同一system duration,不新增CSS Token、不把成功展示缩为视觉减少动效。统一timer入口只归task-dispatch,具体时序仍由调用方拥有。
待执行集合和原generation约束一次消费;新modelValue/手势、disabled、停用/卸载取消当前timer和图标Promise等待,取消会resolve(false),不留下永久挂起。图标等待返回与nextTick刷新通知都核对当前请求/活动状态;nextTick只逻辑失效。当前本地update:modelValue=true的受控回填不是新请求,仍恰好发一次refresh;外部新loading取消旧成功/复位,激活按当前modelValue结算,不重放成功时钟。无公开签名/默认值变化。
有效10项基线8失败/2对照,追加取消Promise结算、受控回填、回调卸载、inactive命令、disabled完成、0时长与闲置实例保留外部锁后,17专项/完整22项通过。收尾探针在本批中间实现复现清理误移外部锁,修正为只移除本实例新增的原节点锁;该失败不并入原始基线,多实例引用计数仍待阶段二。Vue技能用于停用/卸载、timer/Promise清理及夹具恢复。实际组件/KeepAlive、stub图标、模拟touch/几何与timer为JSDOM,不认证原生输入、CSS覆盖/真实减少动效、共享useTouch RAF或OS;浏览器新增0。完整手势/touchcancel、滚动锁和旧监听/测量留阶段二,不提前归档PullRefresh。
分类仍25/33族75.8%,剩8族24.2%;60分类文件/144提示不变。四处timer合为一处,库存runtime182→179(Maple84→81),当前144/179提示80.4%,35待审19.6%;分母减3不是额外三项验收或缺陷删除。仅刷新本文件四行→81,193文件/392CSS不变,其余26处漂移及并行/144环境阻塞/Button白字例外保留,不称全局motion-themes通过。证据:design-ui/audits/evidence/pull-refresh-timer-lifecycle-2026-10-15/results.json。
### Maple SwipeCell:拖动会话与点击解锁(2026-10-15,阶段二)
拖动结束的0ms解锁是state-settlement事件顺序,不是CSS动效时长,不能跟随reduced-motion删除点击抑制。unlock独立代次且消费一次,新手势/disabled/停用/卸载物理取消计时;旧回调不能解锁新拖动或清新句柄。手势代次在回调和几何读取后复核;touchcancel及停用恢复手势前偏移、不触发打开,激活只接受新触摸。拖动标记为响应式,夹到同一偏移后释放也恢复既有CSS过渡。
每次绑定保存原root/document和独立回调,停用/卸载/节点变化解绑全组touch监听,旧move/outside跨激活无效。click通知若重入open或卸载,旧后续关闭不再执行;open通知发起新拖动时不排旧解锁。保持30%阈值、公开API、CSS变量/视觉默认值及阶段一业务确认规则;Cedar无对应运行时,不造组件。
有效14项基线12失败/2对照,最终21拖动专项+18关闭专项、完整48项通过。补充监听探针初轮误取VTU通用eventListener,已排除包装并验证实际move/outside注册与移除;timer类型初轮编译错误已改明确DOM number,未放宽配置。Vue技能用于停用/卸载取消与测试清理。实际组件/KeepAlive、模拟touch和受控timer不等于可信触摸/原生click顺序/OS;真实浏览器新增0。共享useTouch RAF、完整测量续体、同节点跨文档adopt和事件触发的hook拒绝策略仍独立待验。
分类新增1文件/1条state-settlement:25/33族75.8%,剩8族24.2%;60文件,144/182提示79.1%,38待审20.9%,分母不变。仅更新已审SwipeCell库存248→351及hash,不刷新其他26处漂移,不称全局motion-themes通过。保留Form/日期/关联Time、Picker/Scheduler/并行样式、144环境阻塞与Button白字例外。证据:design-ui/audits/evidence/swipe-cell-drag-lifecycle-2026-10-15/results.json。
### Maple SwipeCell:关闭确认请求(2026-10-15,阶段一)
beforeClose 是业务确认 Promise,不是 CSS 动效完成或可参数化时长。每个 close 保存原命令代次;新 open(含同侧重开)、新 close、新手势、name/beforeClose/disabled 变化、停用和卸载使旧确认失效。停用/卸载后保留的 open/close 不改状态、不调用业务钩子,激活只允许新请求。禁用触发的当前关闭仍尊重 beforeClose 的 false;显式 close 的 Promise 拒绝仍向调用方传递,不新增 API/Token或改变滑动阈值/默认视觉时长。
有效12项基线10失败/2正常对照;首次夹具取错 exposed 入口的12错误不算产品失败。最终18专项/完整27项通过;Vue清理规范用于停用/卸载失效,实际组件/KeepAlive与受控Promise为JSDOM证据,不是原生手势/OS,真实浏览器新增0。0ms点击解锁、旧监听交付和完整拖动资源留待阶段二,不提前归档整族。
分类保持24/33族72.7%,剩9族27.3%;59文件,143/182提示78.6%,39待审21.4%,分母不变。只更新SwipeCell库存205→248,其他26处并行漂移、Form/日期/关联Time/Picker/Scheduler、144环境阻塞和Button白字例外保留。证据:design-ui/audits/evidence/swipe-cell-close-lifecycle-2026-10-15/results.json。
### Maple Counter:长按重复与生命周期(2026-10-15)
Counter的600ms等待+100ms重复是interaction-repeat交互节奏:第一次长按步进在700ms,正常点击仍即时。它不是CSS动效时长,不新增Token,也不强行改为InputNumber的800/150ms。两个方向独立拥有代次与消费位;同方向新按替代旧按,释放/touchcancel/停用/卸载取消当前两计时,旧交付不清新句柄、不跨激活复活。
禁用/只读(含Form继承)、press/lazyChange、controls/方向按钮、方向禁用与数值边界使长按不可用时同步失效;激活不恢复旧手势,允许新请求。重复步进返回后再核对归属,回调内release或卸载不续排。停用的保留press/直接步进无效;未改变数值格式、步长、精度或beforeChange公开协议,异步beforeChange的请求替代身份仍独立待验,不接管Form。
有效24项基线20失败/4对照(两方向重复覆盖,不算20独立缺陷);32专项、完整55项通过。Vue技能用于停用/卸载均取消及清理假时钟/探针。实际Counter/KeepAlive、stub按钮和受控timer不等于原生触摸/点击去重/跨文档/OS;真实浏览器/OS新增0。
分类新增1文件/4条interaction-repeat(8),24/33族72.7%,剩9族27.3%;59文件,143/182提示78.6%,39待审21.4%,分母不变。仅刷新Counter四行库存/hash,26处并行漂移、Form/日期/关联Time/Picker/Scheduler、144环境阻塞和Button白字例外保留。证据:design-ui/audits/evidence/counter-press-lifecycle-2026-10-15/results.json。
### Maple LoadingBar:任务与渲染续体归属(2026-10-15)
LoadingBar统一timer归task-dispatch:200ms显示/进度节奏、公开finishDelay、error的300ms策略,以及按computed width/opacity完成等待的300/250ms清理下限,各自保留语义,不全转为CSS duration。公开动效Token、默认值及原timer窗口归属不变;Cedar无LoadingBar运行时,不新增对应变量或组件。
每个timer在原generation且仍为待执行成员时消费一次;旧任务不能删除新句柄,重复progress不再多推进/分叉。两段渲染等待均为state-settlement,按原generation及消费位逻辑失效,不声称删除Vue队列。计算样式读取可能重入start/error,后续schedule必须显式携带旧generation,不能用读取结束时的新代次给旧hide/cleanup授权。
有效7项基线5失败/2对照;原正常完成和重启拒绝旧show回调本已通过。补旧progress/两渲染续体重启对照后10专项、完整22项通过。Vue清理规范用于取消/复用及测试时钟/mock/服务节点清理。证据为实际服务DOM+受控nextTick/fake timers,非原生时序/OS;新真实浏览器/OS0,旧IAB6组不重复计,清理hook中重入start及任意中途样式变化另待验。
分类新增1文件/1条task-dispatch,23/33族69.7%,剩10族30.3%;58文件,139/182提示76.4%,43待审23.6%,分母不变。只更新本源码库存77→79,其他26处漂移、Form/日期/关联Time/Picker及并行样式、144环境阻塞和Button白字例外保持。证据:design-ui/audits/evidence/loading-bar-scheduler-delivery-2026-10-15/results.json。
### Ripple:统一任务派发与取消后交付(2026-10-15)
新增内部审计分类task-dispatch:统一setTimeout入口只负责任务归属/一次性消费,调用方才决定业务含义;不能把同一helper里的所有delay当成CSS duration。Ripple的30ms创建等待、20ms激活结算、最小250ms展示及删除策略、computed transform/opacity完成等待分别保留,不新增CSS Token/公共API或改变默认节奏。
schedule先核对原指令状态,再从待执行集合原子删除任务;已取消/消费回调不执行,也不能清新请求的tasker。禁用清空集合,即使同一state重新启用,旧创建/淡出仍无资格。几何/样式读取后重检当前实例与wave身份;波纹在读取其样式前登记,使读取中卸载也能移除刚插入的节点,激活读取中卸载不补写opacity。普通卸载拒绝旧创建原本通过,不重复记缺陷。
两端各8项有效基线6失败/2对照,最终各11专项(追加淡出取消/重复和激活读取卸载)、完整Ripple Cedar28/Maple33通过;类型、受影响lint/Maple根lint、两端独立源码与基础Less配对检查同步验证。首次新增Maple测试的格式lint失败已格式化并复跑,不算产品失败。Vue技能指导取消/卸载、探针清理;这是受控timer交付、模拟performance与JSDOM,不是实际OS/触摸/KeepAlive停用或跨文档adopt;本批真实浏览器/OS新增0,旧IAB6组不重复计。
分类新增两文件/两条task-dispatch,22/33族66.7%,剩11族33.3%;57文件,138/182提示75.8%,44待审24.2%,分母与库存不变。LoadingBar待下一批,其他并行改造/26处库存漂移及144环境阻塞保持,不称全局motion-themes或全库原生验收通过。证据:design-ui/audits/evidence/ripple-scheduler-delivery-2026-10-15/results.json。
### 反馈展示计时的分类补录(2026-10-15)
Message两端与Cedar Notification的duration属于business-clock:有限正值决定展示期限,0常驻;它不消费CSS进出场时长,也不因减少视觉动效缩短业务展示。hover保留Message剩余时间,KeepAlive重新激活按完整当前期限重新开始;取消/停用/卸载与旧回调归属沿用已审代次/active/open或closed规则。服务清理和CSS完成另走真实Transition完成链,不重新引入固定离场timer。
当前三份计时源码hash与2026-10-13证据完全一致,本批无产品修复/API/Token变更。复跑Cedar Message+Notification48项、Maple Message39项通过;补录3文件/3条business-clock职责,非新增三处缺陷或新的原生验收。历史Message IAB8组、Notification6组保持独立,不再累计;本批真实浏览器/OS新增0。跨文档adopt、Message服务nextTick更新身份等属于独立消费者边界,不被计时文件分类自动认证。Vue技能用于复核停用/卸载清理职责。
分类21/33族63.6%,剩12族36.4%;55文件,136/182提示74.7%,46待审25.3%,分母不变。Ripple/LoadingBar仍需补统一调度入口取消后旧回调及重复交付,不在本批提前归档;只是源级候选,尚未复现,不制造修复。Form/日期/关联Time、其他并行样式/Picker、26处库存漂移、144环境阻塞及Button白字例外保留。证据:design-ui/audits/evidence/feedback-clock-classification-2026-10-15/results.json。
### NavMenu:根级命令与注册收口(2026-10-15,阶段六)
停用/卸载后保留的showOption、setCollapsed、setActiveItem、select、expand、activateItem及根键盘入口不通知、不改状态或消费事件。内部停用关闭仍由原cleanup更新,不把公开入口守卫套到清理路径。激活允许新命令、不恢复旧工作;卸载清空元素/所属节点与独立Item注册表,拒绝新注册。
独立Item互斥关闭按快照与activation代次遍历,新注册不被旧轮次消费,重入新activation替代旧轮次;关闭回调卸载后停止剩余回调与selection/expand写入。selection在通知之间复核生命周期/焦点请求,新的selection替代旧select后续通知。元素注销核对原NavMenuNode身份,旧同key节点不能误删替换注册。无公开API/Token/视觉默认值变化,nextTick仍只是逻辑失效。
有效12项基线10失败/2对照;最初六项停用探针误在移出后findComponent,改为预存wrapper才取有效基线,不计产品失败。最终17专项、完整NavMenu103项7文件通过,既有前五阶段一并回归。Vue清理规范用于停用、卸载和注册释放。JSDOM真实根组件/KeepAlive、stub子节点/observer及受控续体不替代原生键盘/布局/跨文档/OS;本批真实浏览器/OS新增0。Maple无NavMenu运行时,仅同步说明。
新增menu的1条declaration-only分类(扫描命中scrollTo函数声明,底层optional native调用另有行为证据),只更新其库存147行/源码hash;NavMenu两候选文件现均归档。分类19/33族57.6%,剩14族42.4%;52文件、133/182提示73.1%,49待审26.9%,分母不变。其他26处并行漂移、Form/日期/关联Time、144环境阻塞和Button白字设计例外保持,不声称全局motion-themes或全库/浏览器完成。证据:design-ui/audits/evidence/nav-menu-root-commands-2026-10-15/results.json。
### NavMenu:根级外部焦点接管(2026-10-15,阶段五)
selection返回与响应式折叠归位在排队时保存原root、所属document和原焦点,执行前核对当前焦点归属;当前外部连接控件已接管时放弃,不抢回。原焦点仍持有或移除后落到body时保留正常归位,显式context.focus仍是主动命令。折叠查询目标后再次核对代次/可用性及焦点。nextTick为渲染结算,不新增CSS时长Token/API,不撤销已执行focus。
新增3项基线2失败/1正常折叠归位对照,最终根级16专项、完整NavMenu86项通过;实际NavMenu根组件与KeepAlive、stub NavNode/observer、受控nextTick和JSDOM焦点,不是原生布局/键盘或跨文档验收,真实浏览器/OS新增0。Vue清理规范沿用已有停用/卸载失效边界。Maple无NavMenu运行时,不制造对应组件。
分类仍18/33族54.5%,剩15族45.5%;51文件,132/182提示72.5%,50待审27.5%,分母不变。仅更新menu库存129→133,其他26处并行漂移不刷新。根级保留命令及注册身份仍待审,不提前归档NavMenu。Form/日期/关联Time、并行样式、144环境阻塞和Button白字例外保留。证据:design-ui/audits/evidence/nav-menu-root-focus-2026-10-15/results.json。
### NavMenu.Item:监听、测量与焦点任务(2026-10-15,阶段四)
Item 的窗口 resize/捕获 scroll 监听归原 reference.ownerDocument.defaultView 所有;每次绑定使用独立代次和回调,正常关闭/目标变化通过 post-watch 解绑,停用/卸载直接释放。受控 open 即使拒绝关闭,也不能保留后台监听;停用仍发既有关闭请求,但保留 close/select/setOpen 与键盘/点击入口无效。激活对仍打开的当前面板重新绑定,不恢复旧回调。共享 ResizeObserver 不改,消费者启用条件跟随可用状态。
同步几何测量按 operation/原reference/可用状态核对;rect及属性读取后复核,避免 getter 中卸载后写状态或新注册窗口监听。面板/返回焦点任务按 open/close 方向、代次及原reference消费一次;配置变化取消旧任务,当前文档外部连接控件已接管焦点时放弃归位。保持受控接受/拒绝语义、公开签名及布局公式,不引入 CSS duration Token,也不回滚已执行的focus。
有效9项基线7失败/2对照;正常测量与普通卸载解绑原本通过。中间关闭焦点对照因夹具每次渲染重建options触发真实配置取消,改稳定options后补正向/重复交付/外部焦点回归。最终13专项、完整NavMenu83项通过;这是受控nextTick、stub Trigger/ResizeObserver和JSDOM几何/实际owner EventTarget证据,非原生布局/键盘/跨文档adopt。真实浏览器/OS新增0。根级其他保留命令、注册身份与根级外部焦点仍待审。
仍18/33族收口54.5%、剩15族45.5%,51分类文件、132/182提示72.5%、50待审27.5%,分母不变。Item无扫描命中,仅记录hash,不提前归档NavMenu或刷新其他26处漂移。Form/日期/关联Time、并行样式、144环境阻塞及Button白字例外保留。Maple无对应NavMenu组件,不新造副本。证据:design-ui/audits/evidence/nav-menu-item-lifecycle-2026-10-15/results.json。
### NavMenu:节点 enter/Escape 焦点归属(2026-10-15,阶段三)
节点级 nextTick 是渲染后焦点结算,不是视觉完成时长。enter/Escape 请求各由当前节点的焦点代次拥有;新请求、关闭、禁用/节点/模式/折叠配置变化、KeepAlive停用和卸载使旧续体失效。enter在展开回调返回、等待渲染后及查询目标后复核,Escape核对原reference/Trigger并消费一次。激活只允许新命令;停用保留键盘/点击/浮层回调无效,不preventDefault来吞掉旧键盘事件。Trigger原有hover延迟不改,不新增duration Token/公共API。
执行前检查reference所属文档当前焦点;若已被其他连接中的外部控件接管,不再把焦点抢回。body或原焦点仍可按正常路径结算;不能撤销已执行focus,不认证跨文档adopt、原生键盘时序或所有瞬时焦点迁移。原8项基线5失败/3对照(正常enter、禁用和卸载原本通过);另两项外部焦点候选在无归属检查的中间实现均失败,单列而不混成原始10项基线。最终12项专项。
仍须独立审查Item的测量/监听/焦点、根级其他保留命令/注册身份及根级外部焦点接管。Maple无NavMenu运行时,不制造副本。真实浏览器/OS新增0;本批是实际NavNode与KeepAlive、stub Trigger持久面板、受控nextTick与JSDOM焦点探针,不是完整浮层或浏览器验收。候选仍18/33族收口54.5%、剩15族45.5%,51分类文件、132/182提示72.5%、50待审27.5%;node无扫描命中,仅单列hash,不新增分类文件/提示或刷新库存。Form/日期/关联Time、26处并行漂移、144环境阻塞及Button白字例外保持。证据:design-ui/audits/evidence/nav-menu-node-focus-2026-10-15/results.json。
### NavMenu:根级焦点与测量续体(2026-10-15,阶段二)
根级响应式测量与焦点归位均是渲染结算,不是 CSS 动效完成,不新增 duration Token。afterRender 按配置/生命周期代次校验并消费一次;停用/卸载失效,激活重新排当前测量与 roving tabindex,不重放旧任务。测量保留 resize 公共签名,停用时不读取几何;每次同步测量拥有独立 operation 和原 root/measure 身份,在 clientWidth/子节点 rect 读取后复核,防止 getter 中卸载后继续访问或提交。共用 ResizeObserver 工具不改,不能据此认证所有消费者。
根级 context.focus 不操作停用/卸载节点;最新 selection 或显式 context.focus 替代旧 selection 返回焦点。布局变化后的焦点归位受同一代次保护,nextTick 只是逻辑失效,不能撤销已经执行的焦点。原8项有效基线6失败/2对照,新增探针最初用了错误 BEM 类名,修正后重新取基线,不算产品缺陷。最终13专项;节点级 enter/Escape、独立 Item 的测量/监听/焦点以及其他保留命令仍待审,未称 NavMenu 全部收口。真实浏览器/OS新增0;受控 nextTick、stub NavNode/ResizeObserver 和JSDOM几何只证明根级消费者,不能代替真实布局/焦点时序。
候选进度保持18/33族(54.5%),剩15(45.5%);51分类文件、132/182提示(72.5%),50待审(27.5%),分母未变。仅刷新menu库存行104→129,未提前归档分类。Form/日期/关联Time、26处并行CSS/日期漂移、144环境阻塞和Button白字例外保持。证据:design-ui/audits/evidence/nav-menu-root-scheduling-2026-10-15/results.json。
### NavMenu:原生滚动续体(2026-10-15,阶段一)
`scrollTo(key)` 是渲染后原生定位,不是 CSS 动效完成计时,不新增 duration Token 或公共取消 API。新命令替代旧命令;禁用、options/fieldNames/mode/responsive/折叠配置变化、KeepAlive 停用和卸载使旧 nextTick 续体失效。激活不恢复旧请求,只接受新命令;`Promise` 签名、showOption 的正常展开及 nearest 对齐保持。nextTick 只逻辑失效,不物理撤销已排续体,也不回滚已发生的原生滚动。
有效基线6项中4失败/2对照;修复后8专项及全部 NavMenu45项通过。JSDOM 使用真实组件/KeepAlive和原生方法探针,不证明浏览器布局、paint或原生滚动动画;真实浏览器/OS新增0。Vue清理规范用于停用/卸载及激活边界。Maple无NavMenu运行时,不制造对应移动组件。焦点恢复、节点 enter/Escape 续体、响应式测量和保留的其他命令尚待下一阶段,不能由本批scroll测试推断通过。
候选分类进度不变:18/33族已收口(54.5%),剩15族(45.5%);51文件、132/182提示已分类(72.5%),50待审(27.5%),分母未变。NavMenu仍部分已分类;只更新其库存行号96→104,不提前归档整个消费者。Form/日期与关联Time、其他26处并行CSS/日期库存漂移和144环境阻塞保留,不称全局motion-themes通过。证据:design-ui/audits/evidence/nav-menu-scroll-2026-10-15/results.json。
### Scrollbar Thumb:拖动会话与监听资源(2026-10-15)
承接前一批消费者边界,独立审查 Cedar 公共/旧目录及 Maple selection-scrollbar 三份 Thumb。本批直接使用真实 Thumb 与实际 EventTarget,并补实际 Parent+Thumb 组合;只stub父级ResizeObserver并控制几何/鼠标事件,不是原生浏览器、可信鼠标/OS或跨iframe拖出认证。无RAF、计时器、CSS Token、颜色/布局或公开API新增;鼠标拖动依然是同步几何与scroll通知,不应套动效duration。
每次左键按下建立独立session:代次、track/thumb节点、不可变轴/起点及实际 thumb.ownerDocument.defaultView 共同拥有move/end。监听 mousemove、mouseup、contextmenu和blur只注册于原owner window;正常抬起、右键菜单取消、窗口失焦、几何/方向变化、停用和卸载都解除整组监听并清dragging/mouseOffset。修复原contextmenu未解绑、卸载/停用无清理及iframe误绑全局window。旧move不能推动新手势,旧end不能释放新手势;激活只允许新按下,不恢复旧drag。
方向、max、thumbSize、ratio的有效值变化取消当前手势;仅替换等值data对象不取消连续拖动。最终偏移仍由父级新测量/setOffset结算。几何读取与响应式写入后重新核对会话,防止同步卸载后绑定或通知。停用/卸载保留按下/轨道点击/setOffset入口无效且不preventDefault;非左键不启动/跳转。当前setOffset夹取、拖动期间忽略外部setOffset和轨道一thumb-size步进保持。没有Pointer/touch拖动协议迁移或原生滚动回滚承诺。
各18有效基线15失败/3对照,最终各21(补等值data/几何变化、轨道重入、实际Parent组合),Cedar42专项、Maple21;含下游Cedar168/Maple133通过。初轮iframe方法描述符/Window对象断言导致探针失败与Cedar旧报告器报错,改为自有方法包装+布尔identity断言后重取有效基线,不算产品缺陷。Vue技能落实停用/卸载与原owner解绑、测试descriptor/iframe/监听恢复。
三Thumb在既有计时/scrollTo源码扫描无runtime提示,纳入本批hash证据但不虚增候选分类:仍47候选文件/125已分类提示、54待审(非缺陷数)。其他并行CSS/日期库存不刷新,Form与144环境阻塞保留;旧“Thumb未验”章节为历史边界,本批只新增受控证明,真实浏览器/OS新增0。证据:design-ui/audits/evidence/thumb-drag-2026-10-15/results.json。
### Scrollbar:同步测量、绑定事件与原生滚动(2026-10-15)
审查 Cedar 公共 Scrollbar、旧目录独立副本和 Maple Select 内部 selection-scrollbar 三份消费者。它们没有 RAF/计时器:读几何、更新 thumb 与 DOM scrollTo 都是同步操作,不应增加 CSS duration Token 或伪造“取消动画”API。每份扫描7提示中6处为 native-scroll,1处 function scrollTo 定义为 declaration-only;测量意义单独描述,不虚增扫描数量。
生命周期 availability 控制保留 scrollTo/scrollTop/scrollLeft、thumb命令、scroll通知与resize测量。停用/卸载使操作和绑定代次失效;激活重读当前几何,只接受当前绑定事件。旧resize/scroll/thumb入口即使在重新激活后交付仍无效。几何读取、响应式提交和子thumb回调之后核对操作/原容器/生命周期,防止同步卸载或新测量重入后由外层旧任务覆盖结果。同步滚动一旦交给浏览器已经发生,逻辑失效不能撤销它;原生 smooth 插值及其取消不在本批证明范围。
scrollTo(0,0)/单轴0是合法坐标,不用真值判断;恢复零位置也同步thumb,不保留上次偏移。水平测量使用水平比例(旧代码误用了垂直比例)。零/无效视口用有限、非负thumb数据,不显示该零尺寸轴;正常最小thumb20px与track15px布局策略不变。禁用/隐藏轴的旧thumb命令无效,但禁用条不等于禁止内容或公开原生滚动。对象选项直接透传、不模拟JS动画;公开方法签名/样式变量不变。
每副本13有效基线11失败/2对照;最终各16(补重新激活新命令、原生选项透传和水平比例),Cedar两副本32专项、Maple16;含下游 Select/AutoComplete/Cedar Mention 回归 Cedar126/Maple112。测试stub ResizeObserver/Thumb并控制几何,不等于实际观察器、Thumb拖动监听、原生smooth/paint或OS验收;真实新增0。Vue清理规范落实停用/卸载、绑定与重入归属,底层Thumb拖动可留下一批独立验收。
累计47文件/125分类提示、54未分类(非缺陷数),只刷新三Scrollbar源码行/hash;并行CSS/日期库存不刷新,Form与144环境阻塞保留。旧数字为历史。证据:design-ui/audits/evidence/scrollbar-consumer-2026-10-15/results.json。
### Carousel:播放节奏、循环结算与绑定归属(2026-10-15)
自动播放的间隔是业务播放节奏(business-clock),不是 CSS 动效时长;默认关闭,启用 true 时默认3000ms,数字/配置间隔、hover/focus/隐藏暂停规则保持。取消或重排使旧播放任务失效;当前回调消费一次后才调用导航。停用/卸载保留 next/prev/to、键盘和滚轮入口无效,不能翻页或拦截输入。激活建立新观察器/事件绑定,解绑前迟交付不得借新 active 状态重新排任务。
循环切换的 nextTick 负责等渲染,结算计时属于 visual-completion,随后双帧属于 state-settlement。请求/轨道节点/窗口核对及每阶段消费位,避免旧计时清新偏移、重复首帧分叉、旧次帧释放新的 noMotion。取消物理计时与原窗口所持 RAF;即使已出队的回调再交付,也必须先核对权限。内容重排与配置后的渲染测量任务同样绑定代次,停用后不重放。自动播放和动效阶段分别管理,不把播放间隔套进系统 duration Token。
move-speed、现有 CSS 变量和减少动效样式不变;当前 JS 结算仍按显式 move-speed 或既有 computed transitionDuration 读取(样式不可读保留180ms fallback),本批不新增 CSS Token,也不声称多属性 duration/delay、运行中时长变化或 OS 偏好已完整认证。计时仍使用原全局机制,帧使用原 owner window;同节点跨文档迁移、原生绘制另待验。
两端各14有效基线:12失败/2正常对照;最终各18专项,完整 Carousel Cedar44/Maple45。受控 nextTick/timer/observer/RAF spies 不是原生浏览器/OS 验收,真实新增0。Vue 生命周期规范用于停用/卸载、绑定清理和请求消费。累计44文件/104已分类提示、75待审(非缺陷数);只刷新两Carousel运行时行/hash,其他并行 CSS 库存漂移不刷新。Form、日期及144环境阻塞保持,旧章节数字为历史。证据:design-ui/audits/evidence/carousel-scheduler-2026-10-15/results.json。
### Card:浮起测量与回落结算(2026-10-14)
Card 的 500ms 是 `ripple=true` 时的交互等待策略,不是 Ripple CSS 动效时长;`ripple=false` 保留零延迟。等待后读取 Card 几何并交给现有 doubleRaf 做布局稳定,再展开。doubleRaf 是 state-settlement,不是 CSS 时长,也不能通过这个既有 Promise helper 物理撤销底层 RAF;本批只撤销旧续体写布局的权限,不宣称帧被取消。文档/窗口归属仍使用既有全局计时与 helper,实际跨文档和原生绘制另待验。
渲染任务在源变化时同步递增请求代次;关闭、方向切为横向、新任务、停用或卸载后,旧 nextTick/计时器/双帧续体无权改变新阶段。渲染和计时交付消费一次,几何读取返回后再次核对节点/请求/生命周期,避免测量钩子同步卸载后继续排双帧。停用/卸载清理两计时并禁止保留 close/click 输入;激活依当前 floating/direction 发起新阶段,不重放旧任务,初始 KeepAlive 激活不重复等待。
公开 `floating-duration` 当前默认 250ms,仍同时供布局 transition 和回落恢复等待;浮起内容/按钮 opacity 仍用其两倍。它是组件公开参数,不被强行改为 system Token,本批不改公共 API/CSS 变量/默认时长/色彩语义。回落恢复归 visual-completion,500ms 等待归 interaction-delay,doubleRaf 布局意义单独解释(本扫描未命中该调用,不虚增候选数量)。
两端各 12 基线:9 失败/3 对照;最终各 15 专项(补初始激活、几何重入卸载和停用双帧),完整 Card Cedar21/Maple44 通过。受控 nextTick/doubleRaf Promise/fake timers/几何 spies,不是原生浏览器/OS 或底层 RAF 取消证明,真实新增0。累计42候选文件/96已分类提示、83未分类(非缺陷数),保存库存仍为192文件/392 CSS/179运行时提示;live扫描发现其他并行CSS变更,未刷新这些未审快照。Vue 生命周期规范用于停用/卸载、请求消费与测试资源清理。Form、日期库存漂移、144环境阻塞保持;旧章节数字为历史。证据:design-ui/audits/evidence/card-scheduler-2026-10-14/results.json。
### PreviewGroup:轨道重定位与双帧释放(2026-10-14)
循环轨道保留三份图片与中间段规范坐标;双帧 RAF 是跳转后恢复 transition 的 state-settlement,不是动效时长,零时长/减少动效仍需此稳定过程。轨道节点的 ownerDocument.defaultView 申请和取消帧/计时器;关闭、替换图片(含等长替换和原位编辑)、改变 loop、停用、卸载及新导航使旧任务失效。帧/渲染回调只消费一次,旧交付不能释放新 instant 阶段;停用/卸载保留命令无效,激活只规范化当前坐标,不恢复旧任务。图片内容监听在 post 阶段结算,避免子图片 watchEffect 注册被同步轨道读取污染。
CSS 两端轨道共同消费 `--c-sys-motion-duration-slow`/`--mp-sys-motion-duration-slow`(当前 240ms)与 `--c-sys-motion-easing-standard`/`--mp-sys-motion-easing-standard`;Maple 原固定 280ms/自定义曲线改用既有系统语义,不新增公开变量。instant、moving 和减少动效关闭 CSS transition。JS visual-completion fallback 在渲染后读取当前 transform/all 的实际 computed duration 与 delay,遵守列表对应、负 delay 和零时长;仅样式缺失/不可解析时使用私有 400ms 保底,不是上限或 CSS Token。当前自身 transform transitionend 可提前结算;忽略冒泡及时间戳早于新命令的事件,不承诺无时间戳旧事件或所有原生跨文档情形已验收。
专项最终两端各 27 项,完整 Image Cedar 62/Maple 114 项;32 组 Less/条件级联检查、16 组时长与曲线成对覆写、32 组 instant/moving 消费检查。受控 nextTick/RAF/假时钟/iframe owner 与编译检查均不算真实浏览器/OS,新真实验收 0。新增两候选文件/6 提示:40 文件/92 已分类提示、87 待审(不是缺陷数);库存仍 192 文件/392 CSS/179 运行时提示。Form、日期库存漂移和 144 环境阻塞保留。旧章节中的“PreviewGroup 待审”与数字为历史批次。证据:design-ui/audits/evidence/preview-group-track-2026-10-14/results.json。
第 6 阶当前验证:80 项主题前景/实心背景角色检查及 64 组 primary 白字检查通过。200 组文字/中性表面对比度中 94 组低于 4.5:1,本次配色不声明普通文字对比度全部通过。
当前已统一改为第 6 阶;前文第 7 阶的对比度统计属于历史结果,不适用于当前配色。primary 实心按钮继续使用白色文案。
全组件品牌与 info/success/warning/danger 的前景色、实心操作/状态背景统一使用第 6 阶;原先直接引用色板的前景声明已接入共享 content 角色。浅色表面、禁用淡色与显式预设色板保留各自职责。此前第 6/8 阶的对比度结果不能作为本次第 6 阶调整的通过结论。
Button 禁用配色按 Arco 的变体逻辑区分:彩色实心使用淡化状态背景;text/outline 保持透明背景并淡化状态文字;tonal 保留浅色背景。中性按钮使用中性禁用色。禁用时暂停 color/text-color 覆盖,关闭 hover/active 反馈和阴影。
# Design Token 与 CSS 变量分层
### Anchor:滚动、测量帧和注册归属(2026-10-15)
Anchor滚动消费者同时拥有视觉滚动、容器scroll监听、测量RAF和render后change通知,职责不能混成CSS完成计时。私有slide从无取消句柄的b-tween包装改为目标owner window拥有的可取消RAF,保留300ms/quartOut;每帧读取当前减少动效偏好,已开启直接定位,运行中开启下一帧完成。取消停在当前位置、不跳到目标也不发finish。保留现有滚动节奏,不新增公共API/duration Token/CSS变量/颜色;共用throttleByRaf及b-tween依赖的其他消费者(含日期)不修改。
消费者按operation、binding/frame序列和change代次隔离;新点击、停用、卸载、scroll-container/boundary变化取消私有滚动与原owner测量帧、解除原容器监听。旧finish不能解锁新滚动;旧帧、几何读取重入和重复交付不能提交旧测量。change在nextTick后交付且消费一次,同hash重复点击不吞掉仍有效的待发通知。nextTick只能逻辑失效,不声称物理取消续体或回滚已执行滚动。停用保留点击无通知且不preventDefault;激活重新绑定/测量,不恢复旧动画。
AnchorLink按href与原节点注册/注销,自动watch清理覆盖href替换和卸载;父级用节点identity避免旧清理删除同hash新注册。移除当前链接会取消旧工作并重新测量。原来无cleanup的两项注册基线均失败,已修复。Maple无Anchor运行时,不新造移动端副本。
有效原基线24项:消费者15(13失败/2对照)、slide7(6失败/1对照)、Link注册2(均失败),合计21失败/3对照;对照保留正常点击、卸载几何重入边界和300ms/quartOut。新owner RAF路径需spy实际document.defaultView,不再只spy测试global window;更正探针后重跑。修复中同hash取消过度导致一次中间回归,补保留有效通知并验证。最终Anchor31(消费者18/slide9/注册2/实际组件接线1/契约1)、含Affix/BackTop64通过;配置类型、受影响lint、Maple根lint、demo编译1、分类/扫描/Message/目录28测试及3生成页通过。Vue技能落实KeepAlive停用/卸载、原owner取消与原型/descriptor恢复。实际组件测试仍在JSDOM控制几何和RAF,不证明native布局/paint、OS偏好、跨文档或同节点adopt;真实浏览器/OS新增0。
进度:33组件族中18已分类收口(54.5%),15剩余(45.5%);51已分类源码文件。只收口原Anchor2条待审,同时新实现显式增加3条提示(测量RAF1、私有slide的RAF/偏好2),所以分母179→182,已分类127→132(72.5%),待审52→50(27.5%),不是把新增实现当成额外旧缺陷。保存候选193文件/392 CSS/182 runtime;live C103/202/98、M92/214/84,其他26处并行CSS/日期行漂移保留,不能称全局motion-themes通过。Form/Date/关联Time、其他并行样式及144环境阻塞不动。证据:design-ui/audits/evidence/anchor-scroll-2026-10-15/results.json。
### Mention:镜像重定位与观察器交付(2026-10-15)
Cedar textarea镜像滚动是render后的state-settlement,不是CSS动效完成,不添加duration Token。原来只在open变化时排nextTick,现于当前文本/候选项等变化后同步偏移,包含scrollTop回到0。sync失效代次与post-render捕获的input实例/textarea/mirror共同约束任务,交付前消费一次,几何读取后再核对;关闭、禁用、模式切换、停用和卸载令旧任务无权写入。nextTick无法物理取消,只取消旧续体提交权限;已执行native scroll不回滚,也不声称取消原生smooth动画。
镜像样式每次从当前textarea.ownerDocument.defaultView读取,不再缓存全局window样式;style读取和属性枚举后重检,拒绝重入卸载提交。观察器绑定携带lifecycleEpoch,旧resize不能跨激活读取,新绑定仍能刷新。停用/卸载保留input、clear、选择/浮层事件和focus/blur无效;禁用时不接受输入/focus,active blur仍允许。focus/blur搬入setup闭包但保持公开签名,无新API/CSS变量/颜色改变。Maple无Mention运行时,不为对齐新造移动端副本。
有效13项基线10失败/3对照;正常40px定位、卸载refs清空和scrollTop getter卸载原本通过。初轮exposed方法读取和全局window样式探针不准确,修正为真实exposed spy/实际owner view后取证,不算产品缺陷。最终21项专项+1项实际Mention/Textarea/useSelect/Trigger组合(仅拦截native scroll记录),含既有2项Mention契约;完整消费者组合Cedar129通过。配置类型、受影响lint与Maple根lint通过,1份demo脚本/模板编译;分类/扫描/Message/目录28测试和3生成页通过。Vue技能落实KeepAlive停用/卸载、代次和测试原型/descriptor恢复。受控JSDOM/回调队列不证明真实字体、换行/IME、paint或跨文档浏览器行为,真实浏览器/OS新增0。
每批固定附候选进度:目前33组件族,17已分类收口(51.5%),16未收口(48.5%);49已分类源码文件、127/179提示(70.9%),52待审(29.1%,不是缺陷数)。这是运行时候选分类,不是全库验收率;有已验但未归档分类的反馈组件,NavMenu仍部分分类。只刷新Mention一行库存/hash,其他26处并行CSS/日期行漂移不动。Form、Date及关联Time、其他并行样式与144环境阻塞保留。证据:design-ui/audits/evidence/mention-mirror-2026-10-15/results.json。
### Typography:复制反馈与省略测量(2026-10-15)
Cedar Typography 的 copy-delay(默认3000ms)是交互反馈等待,不是CSS动效时长;省略 RAF/CSS高度检查是测量调度,不新设duration Token。重复复制替换计时,关闭copyable、disabled或copy-delay变化清除反馈;停用/卸载取消timer和RAF,旧完成、重放、重入和旧观察器绑定不能覆盖新阶段。激活只做当前测量,不恢复旧任务;展开、关闭省略或进入编辑取消旧测量。禁用态仍测量文字布局,复制/编辑/展开交互无效。保持既有公共API、默认值和全局raf/caf归属,不宣称跨文档owner或字体/剪贴板权限认证。Maple只有Typography工具指南,无对应运行时组件,不新增移动端实现。
有效14项基线11失败/3对照;首轮stub命名和监听器读取错误不计产品缺陷。修复中发现局部ellipsis变量遮蔽导致TDZ,已纠正并重跑。最终22项专项+3项既有测试通过,含激活新绑定、CSS测量、重入替换、copy-delay/copyable变化。Vue技能用于KeepAlive停用/卸载清理及模拟资源恢复。真实浏览器/OS新增0;Form、日期库存、其他并行样式及144环境阻塞保留。
候选覆盖率按源文件归并组件族(排除下划线内部目录及utils,同名跨端合并),不是全库验收率。当前33族:16已分类收口(48.5%)、17未收口(51.5%);其中nav-menu部分已分类,未收口不等于从未验收或存在缺陷。运行时提示126/179已分类(70.4%),53待审(29.6%),48个已分类文件。aliased raf/caf没有被现有扫描命中,单列本批证明,不额外虚增提示。仅刷新Typography源码hash与该行库存,不覆盖其他并行漂移。证据:design-ui/audits/evidence/typography-scheduler-2026-10-15/results.json。
### ImagePreview:交互窗口与模式监听(2026-10-14)
500ms用于触摸长按通知,320ms用于双击识别窗口到期,不是CSS动画完成/关闭等待。私有tapTimer只清理双击状态,旧名tapCloseTimer已纠正;公开期限/缩放/拖动协议不变,不新增CSS Token。计时器分别核对代次并消费一次,取消/移动/抬手/关闭/换src/停用/卸载后的旧交付不能通知或清掉新句柄。
停用/卸载清理键盘、计时器、pointer capture与moving状态;保留交互入口无效,激活只允许新手势,不恢复旧手势。关闭和src变化同步清理输入。输入模式helper在停用解绑coarse-pointer MQL,绑定代次拒绝迟交付,激活重新读取当前模式;不是reduced-motion查询。文档/窗口归属仍使用既有全局document/window,本批不认证实际跨文档或原生触控。
各端17项基线15失败/2正常对照,最终17全部通过,完整Image Cedar35/Maple87通过。控制队列、fake timers/MQL/pointer events与capture spies不是原生浏览器/OS证据;真实新增0。Vue技能落实停用/卸载、消费归属、测试descriptor及假时钟恢复。证据:design-ui/audits/evidence/image-controller-scheduler-2026-10-14/results.json。
候选分类新增两Controller文件/四条interaction-delay,累计38文件/86提示、93待审(非缺陷数),库存192文件/392 CSS/179运行时提示不变。另两份useInteraction源码无本扫描runtime命中,纳入专项hash证据但不虚增分类数字。PreviewGroup轨道重定位仍待单独审查;Form、日期库存漂移和144环境阻塞保留。旧数字保持历史批次。
### Select:渲染后滚动与键盘派发(2026-10-14)
Select shared hook 的 nextTick 是等待渲染/选项登记,不是“弹层动画结束”或CSS动效完成。打开任务在关闭、重新打开、键盘新滚动、活动键命令、停用或卸载后失效;回调消费一次,即使当时没有可用选项也不能在选项稍后到达时重放。停用/卸载保留键盘、选项选择与滚动入口无效,激活允许新命令但不恢复旧任务。正常晚注册下拉节点仍可收到当前打开的滚动。
虚拟列表调用是delegated-scroll;随后可能发生的DOM scrollTo是native-scroll。虚拟回调返回后重新核对生命周期、open、请求及ref归属,防止同步关闭/卸载/替换后继续写DOM。键盘Arrow的本地同步派发新增interaction-dispatch分类,与interaction-delay区别:它没有延迟/计时器,不应生成CSS时长Token。nextTick调用点归state-settlement,实际IO独立标注。不新增CSS变量/公开API,不改变键盘与选项身份协议。
两端12项有效基线各10失败/2对照,修复后各14通过(补晚登记与空列表消费对照);含共享hook的AutoComplete及Cedar Mention回归Cedar93/Maple96通过。Cedar旧Vitest TSX与.ts hook转换模式导致nextTick mock未接入,专项采用.test.ts取得有效基线;不是产品缺陷。受控队列/DOM几何及fake虚拟列表不等于真实浏览器/OS或完整下游组件验收。Vue技能用于停用/卸载和旧任务清理。证据:design-ui/audits/evidence/select-scheduler-2026-10-14/results.json。
当前192文件/392 CSS/179运行时提示不变,36文件/82提示已分类、97待审(不是缺陷数)。Maple本轮全库lint通过,未修改日期文件,之前23项日期示例错误属并行历史,不计本批修复;1019示例编译0失败。Form、日期库存漂移及144环境阻塞保留,真实浏览器/OS新增0。下文数字保留历史批次。
### BackTop:测量帧与滚动插值分离(2026-10-14)
显示阈值RAF属于measurement-scheduling;duration(默认200ms)/easing驱动JS插值,属于visual-scroll,不是CSS transition Token。减少动效入口直接回顶,运行中偏好变化在下一有效帧完成;必要显示测量仍保留。保持横向位置、事件与scrollToTop,不新增取消API/CSS变量。
绑定代次隔离旧监听;测量与动画帧分别核对归属并只消费一次。换目标、取消、停用及卸载使旧任务失效,不能清新句柄、更新新目标或激活后复活。自定义easing后再次核对请求归属,防止其同步取消/卸载后继续写入或排帧。RAF、cancelAnimationFrame及performance.now来自target.ownerDocument.defaultView。激活绑定新监听/更新显示,不恢复旧动画。
两端初测各14项10失败/4对照;测量回放需先等待挂载watch稳定,探针调整单列,不额外计产品缺陷。旧契约改为替换实际owner RAF/时钟。最终专项各14、完整各30通过;模拟iframe验证owner时钟与取消,不是实际跨文档浏览器/OS认证。Vue技能用于停用/卸载与descriptor恢复。证据:design-ui/audits/evidence/back-top-scheduler-2026-10-14/results.json。
合并动画排帧入口,每端候选4→3条(未删功能);当前192文件/392 CSS/179运行时提示,34文件/70提示已分类,109待审(不是缺陷数)。Maple1017示例编译0失败;两端受影响lint通过,但Maple全库lint被并行日期示例23项格式/curly错误阻塞,按范围保留,不宣称全库通过。Form、日期库存漂移和144环境阻塞保持,真实浏览器/OS新增0。以下旧数字保留各批历史时点。
### InfiniteScroll:测量任务与观察器绑定(2026-10-14)
InfiniteScroll 的 RAF 与零延迟 setTimeout fallback 用于合并触底几何检查,归入 measurement-scheduling;不是视觉插值/完成等待,不应新增 CSS duration Token 或套用 reduced-motion。绑定被替换、停用或卸载时取消待任务并使代次失效;已出队旧回调不得清掉新句柄、检测新目标或在激活后复活,已消费回调不可重放。ResizeObserver/内容及可见性 MutationObserver 同时核对绑定代次,解绑后的迟交付不能安排新测量。
两端各10项受控队列基线7失败/3正常对照,修复后各10通过。保留 immediate 初始通知策略、状态循环与同步去重、target/阈值、check/retry 及事件顺序;本轮不接管业务请求。Vue清理规范用于停用/卸载和解绑旧观察器。受控 JSDOM 队列不等于原生浏览器、观察器时序或跨文档验收,真实浏览器/OS新增0。
累计32文件/64提示分类,117提示待审(不是缺陷数),库存192文件/392 CSS/181运行时提示不变。Form、日期库存漂移及144环境阻塞保持。证据:design-ui/audits/evidence/infinite-scroll-scheduler-2026-10-14/results.json。以下数字和待审范围保留历史批次时点。
### VirtualList:渲染后补偿与命令归属(2026-10-14)
两端 List 下游 VirtualList 当前使用 Vue nextTick 进行渲染后滚动补偿,不再直接安排 RAF;这是 state-settlement,不是 CSS 动效时长,不新增 Token 或取消 API。新命令/新滚动、数据键或虚拟模式改变、KeepAlive 停用及卸载会使旧补偿失效;回调同时核对请求代次与原容器,渲染后补偿只消费一次。停用/卸载后的保留 scrollTo 或 List.scrollIntoView 无效,重新激活不重放旧补偿,新的有效命令可正常执行。逻辑取消不会删除 Vue 已排队的回调,也不撤销先前同步完成的滚动。
各端14项受控基线10失败/4正常对照,修复后各15项通过(新增对象补偿重复交付对照);连同既有 List 回归 Cedar41/Maple34通过。Vue 清理规则促使停用和卸载均失效;受控 nextTick/JSDOM 验证不等于浏览器或原生 RAF 验收,新增真实浏览器/OS为0。key/index/align、阈值、测量及公开 API 保持,不宣称任意几何/跨文档场景完成。
累计30文件/60提示已分类,121提示待审,库存192文件/392 CSS/181运行时提示不变。全局库存仍有并行日期 CSS 行漂移,Form 与144环境阻塞保持,不刷新未审日期快照。证据:design-ui/audits/evidence/virtual-list-lifecycle-2026-10-14/results.json。下文数字及“待审”范围保留各批历史时点,以本节为当前 VirtualList 状态。
### Icon 名称切换:视觉完成等待
Icon 的 transition 是公开JS名称切换时长,默认0;内联CSS transition-duration与JS等待使用同一个归一化值,负值/非有限值按0。不新增CSS变量、不把业务时间或交互延迟改成Token。运行时改变transition取消旧阶段并立即提交当前名称;名称被替换、减少动效变化、停用或卸载取消旧计时,已出队/已消费回调不能回滚名称或清除新动画。
KeepAlive停用期间不安排名称动画,移除减少动效监听;数据保持最新名称,激活直接显示最新值,不重放旧动画。监听从真实span.ownerDocument.defaultView读取,绑定代次拒绝解绑旧监听的延迟交付;重新激活重新绑定并读取当前偏好。具名注册、slot优先、spin与默认值保持。模拟iframe/MQL/计时器各端9项基线6失败/3正常对照,修复后完整Icon Cedar20/Maple21通过;不是实际OS/浏览器验收。同节点不停用直接跨文档adopt仍待验。
分类新增visual-completion(视觉替换等待,含偏好分支)和delegated-scroll(调用另一组件滚动,非原生DOM操作)。两端List.scrollIntoView只是方法声明及向VirtualList转发options,不能把这些源码提示当作本地动画或原生scrollIntoView通过;下游VirtualList的RAF和保留命令仍独立待审。累计28文件/58提示已分类,剩余123提示,库存192文件/392 CSS/181运行时提示不变。123不是缺陷数。Form并行改造、日期开发和144环境阻塞保持。
### IndexBar 消费者:取消与状态稳定帧
IndexBar 的 duration 是 JS 插值参数,默认0、正值保留 cubic easing,不是CSS Token。组件私有可取消任务接管入口、插值、列表/clickedName两帧等待,不再调用不能取消的通用滚动工具;两端共享工具及并行Form不改。替换/停用/卸载取消实际owner窗口待帧并让等待返回false,不跳旧目标;已交付帧及微任务仍核对归属,旧完成不能解锁新跳转。停用/卸载保留方法无效;激活等子锚点登记后恢复active/event:false。公开void scrollTo及事件/默认值不变,不新增取消API/CSS变量。
新增职责state-settlement:两帧等待是状态顺序,不是CSS动效时长。减少动效只跳插值,不跳必要稳定帧。初始10项纠正探针后基线7失败/3对照,真实IAB又复现激活定位早于子登记,补第11项。消费者11+任务4+既有9共24通过;最终真实IAB四组4/4、节点0、无warn/error。入口原生点击,内部命令/scroll事件脚本派发;不认证原生手势/OS/组件跨文档。固定0/480坐标及几何探针错误单列,不计产品缺陷。
证据见共享audits/evidence/index-bar-lifecycle-2026-10-14/results.json。当前库存192文件/392 CSS/181运行时提示,24文件/50提示已分类、131未分类;不是131个缺陷。Cedar无对应IndexBar,不虚构组件。144环境阻塞、其他主题/窗口、并行Form仍独立待验;下文旧数字及待验范围保留各批历史时点。
### 共享滚动真实 IAB 八组
两端各主文档默认300ms/0ms、真实同源iframe HTMLElement/Window,共8/8通过。默认实际完成302.5–313.9ms,各19次owner原生RAF、含中间坐标;0ms为0.1/0.6ms,owner RAF0。iframe四组宿主RAF0,终点left80/top220且50ms后稳定,目标节点清零,控制台无warn/error。
入口原生点击;夹具自己的计数包装原样转发native RAF,不替换时钟/帧实现。数据是原生回调首/中/末坐标摘要,不是全帧像素证明。当前reduce查询观察为false,未切换/认证OS偏好;Form/IndexBar取消、其他easing/时长/引擎仍待验。原始JPEG已查看及hash验证;18项新增证据门禁、全浏览器证据185项通过。本批无产品修复/Token/API变化,144环境阻塞保持。
### JS 滚动工具:时长、窗口与减少动效
两端 elements.scrollTo 的默认300ms与调用方 easing 保持;0/负值/NaN/Infinity直接到目标,不排插值 RAF。HTMLElement 使用实际 ownerDocument.defaultView,Window 使用目标自身;不从宿主全局 window 借帧。初始减少动效偏好直接到目标,运行中偏好变化在下一帧收敛;没有额外监听资源。每帧验证并消费代次,已消费/完成帧不能再写入或调度。
这是JS视觉滚动的执行策略,duration是函数参数,不是CSS变量;不用CSS Token冒充其消费。Maple IndexBar公开duration默认0,仍保持0;自身首帧与doubleRaf流程仍异步,工具零时长不意味着整组件没有RAF。Maple Form是实际另一个消费者,但正在并行改造,本批不接管。
两端各10项工具测试通过(基线9失败/1默认300ms对照通过),Maple既有IndexBar9项通过。Cedar探针在修复后需改绑实际document.defaultView,宿主包装对象差异不记新产品失败。减少动效与iframe均为模拟,不等于OS或真实浏览器。未新增取消API/跨调用自动替换:调用方卸载/停用、Form并行归属、IndexBar clickedName/doubleRAF/保留命令及真实滚动仍待专项,不能外推为全消费者生命周期已通过。
### InputNumber/Countdown 真实 IAB 四组
default/light、父文档,两端各长按取消/卸载与Countdown暂停/KeepAlive一组,4/4真实浏览器通过,最终组件节点均0、无warn/error。入口按钮原生点击;内部pointerdown/pointercancel由夹具脚本派发,Countdown使用公开方法。不声称原生长按、已出队竞态、跨窗口或OS通过。
长按实际首次重复间隔Cedar803.1ms/Maple802.3ms,后续152.8/153.1ms;取消后约220ms和重新按下后约100ms卸载、超过800ms期限观察都无额外更新。Countdown暂停回调计数保持13,停用保持Cedar25/Maple26,停用重置900ms后26/27保持;激活恢复计时至703/700ms,卸载后40/41保持。减少动效、业务时钟和交互节奏的边界不变。
初测直接缓存组件,父级不渲染inactive vnode导致time只在激活时传入,是夹具覆盖问题而非产品失败;改稳定缓存容器后冻结服务重启/重载,最终四组完整重跑,不重复计初测。原始JPEG已查看/校验哈希;19项新增证据门禁及浏览器证据全链167项通过。没有新增产品源码/API/Token修复;144环境阻塞仍独立。
### Countdown 业务时钟与停用边界
Countdown 的 RAF 刷新业务剩余时间,不是视觉插值;CSS duration/减少动效不能改变业务计时。暂停与 KeepAlive 停用冻结剩余时间,重新激活按冻结值续跑,不把停用期间计入消耗。停用时更新 time/reset 可更新剩余数据及 change 通知,但不申请 RAF;auto-start 的启动延后到激活,手动 pause 取消待恢复。停用期间直接 start 被忽略,卸载后的 start/reset 不再通知或调度。
每帧在清空句柄、计算和通知前验证代次,并在 change 回调后再次核对;回调内 reset/pause/start 的新任务不能被旧帧覆盖,已消费帧不能再次更新或抢占后继帧。结束只通知一次,reset 允许新一轮结束。两端受控时钟/RAF各8项通过,其中6项基线失败;完整Countdown Cedar18/Maple20项通过。没有新增CSS变量/公开API,模拟RAF不等于真实浏览器/OS验收。
### InputNumber 长按回调归属
长按每个计时回调在步进前校验并消费自身代次,取消、替换、释放、停用和卸载后的旧回调不修改值;步进内部重新开始长按,也不能被旧回调的返回值停止。停用期间不接受新的长按任务,重新激活后需要新的用户长按,不自动恢复旧手势。首次800ms、重复150ms是交互节奏,不是CSS动效时长,不新增动效Token。两端各8项受控计时/旧回调测试通过(其中7项先失败),完整InputNumber Cedar45/Maple48项通过;不等于真实浏览器或OS验收。
### 运行时计时的职责边界(分类第二批)
不能按“出现 RAF/setTimeout”就统一替换为动效 Token。本批核对两端8个文件/26条源码提示;累计22文件/44条已分类,133条未分类。提示数量包括方法声明,不是组件数量、缺陷数量或验收通过数;未分类也包含此前已有专项验收的组件。
| 职责 | 当前例子与使用场景 | Token/验收边界 |
| --- | --- | --- |
| business-clock | Countdown 用 deadline 与 performance.now 更新业务剩余时间 | 不消费 CSS 动效时长;减少视觉动效不能缩短业务时间 |
| interaction-repeat | InputNumber 长按首次800ms、重复150ms | 交互节奏不是 CSS 过渡;取消、旧回调与停用需生命周期专项 |
| test-support | delay/flushRaf、RAF与scroll mock | 保留原始扫描提示但不当产品动效;模拟方法声明也不证明浏览器调用 |
| visual-scroll | elements.scrollTo 的 JS 插值,默认300ms、调用方 easing | 与直接 native-scroll 转发区分;须按实际消费者核对窗口、取消、零时长及减少动效,不盲目接全局 CSS Token |
Maple Form 的滚动到校验项调用默认时长/linear;IndexBar 使用公开 duration/easeInOutCubic。Picker 的同名局部方法不是此工具;Cedar 未找到此工具的具名生产调用,不能据此宣称产物不可达。src 排除 __tests__ 后未发现上述 test.ts 路径导入,也不替代打包依赖图认证。
分类批次历史候选包含长按先 step 后验代次;该项已由后续 InputNumber 受控回归复现并修复,见长按回调归属小节。Countdown 暂停/重启及停用更新已由后续受控业务时钟回归复现并修复,见对应小节;滚动工具执行/当前偏好已在后续受控回归修复,但消费者取消和真实减少动效仍待专项,不外推生命周期通过。分类记录逐文件绑定完整源码哈希、当前候选行与原文,变化必须重新审阅,不自动刷新哈希。本批无产品源码/API/CSS变量变化,无新增真实浏览器或OS通过;144组环境阻塞保持。
### Trigger 真实 IAB 生命周期四组
default/light,两端各延迟取消/KeepAlive尺寸测量,共4组真实浏览器通过。原生点击夹具入口,内部mouseenter由脚本发出:不能称原生hover、人工已出队竞态、跨窗口视觉或OS证明。300ms待打开在约101ms卸载,约553ms后仍无打开/面板;重新挂载同路径实际打开(正向对照),最终节点0。KeepAlive活动实际resize计数1→2,停用期间保持2,恢复后3,重新打开并最终卸载。
真实浏览器计时/ResizeObserver/公开回调与DOM阶段保存相对performance.now摘要,截图原始JPEG已查看并校验哈希,控制台无warn/error。没有新增产品修复或Token/API;此前模拟旧回调验证仍独立,144组原生200%/Safari/Firefox阻塞保持,其他主题/位置和原生hover仍待验。
### ResizeObserver 测量批次的归属
ResizeObserver通知与RAF测量分别保存绑定代次/帧代次。换目标、关闭、停用或卸载使旧绑定和旧帧失效;已断开的observer不能把旧entries混入新批次,旧RAF不能清空/提前消费新任务。帧执行前验证代次并消费一次;保留当前窗口取消和必要测量,不新增动效Token、不把测量减少成视觉零时长。绑定代次不因正常一帧完成而失效,当前observer后续通知仍能调度。
两端模拟回归各新增3项先失败后通过,Trigger完整Cedar63/Maple76项通过,resize专项各8项。范围是工具及Trigger模拟生命周期,不等于所有消费者/真实浏览器或OS已通过;同节点跨document adopt与未刷新目标边界仍需专项验证。
### Trigger 已绑定监听窗口的清理
scroll监听记录实际绑定窗口,解绑不从当前popup ref反查。更换窗口、ref被清空或watcher尚未刷新就卸载,都在原窗口移除原处理器;RAF取消仍使用原申请窗口。两端新增模拟回归各3项先失败后通过,完整Trigger Cedar60/Maple73项通过;初轮Window spy不一致及初始化remove记录污染均属探针问题,不记产品失败。内部窗口引用不是CSS变量或API,不新增Token;同一DOM节点不换ref直接跨document adopt、真实浏览器视觉/OS仍需独立验收。
### Trigger 测量 RAF 的窗口归属
定位/滚动关闭使用 RAF 合并测量,不是视觉动效时长。元素滚动优先用事件节点 ownerDocument.defaultView;窗口滚动用当前浮层所在窗口。保存申请窗口并由同一窗口取消,代次守卫隔离已出队旧帧;在调用业务处理前清空本次事件,旧帧不能消费后续新滚动或清掉新任务。必要几何测量不因 reduced-motion 被取消,不新增 RAF 时长 Token。
两端 iframe 模拟回归各4项:正确绑定夹具后先3失败/1通过,修复后完整 Trigger Cedar57/Maple70项通过。初轮夹具未触发绑定 watcher、不作产品证据。此为模拟窗口/回调验证;真实跨文档视觉和OS偏好仍独立。旧scroll监听原窗口解绑已在后续专项完成模拟回归;同节点跨document adopt和真实浏览器/OS仍不在此证明范围。
### Trigger 交互延迟的归属
mouse-enter-delay/mouse-leave-delay 是交互请求延迟,不是 CSS 视觉时长。取消、替换请求、停用或卸载使已出队旧回调失效;当前回调只提交一次,不能清理新任务。停用仍发原有关闭请求,随后拒绝保留方法启动任务;重新激活只接受新请求,不重放旧 hover 延迟。卸载后保留方法永久不调度。内部代次/活动状态不公开、不成为 Token;受控 open 仍由调用方决定,不新增 API 或修改延迟默认值。
两端新增模拟回调归属各6项先失败后通过,完整 Trigger Cedar53/Maple66项通过;这不是浏览器帧/真实OS证明。RAF owner-window取消及跨文档定位仍需下一批独立验证;职责分类中的旧“尚待回归”说明属于首批分类时点,不把延迟回归扩大为整个 Trigger 验收。
### 运行时调度不等于动效 Token
源码扫描是逐行线索,不是缺陷或验收计数。先判定职责:声明/类型签名没有运行;测量 RAF 只合并几何读写;交互延迟决定何时请求状态变化;业务期限决定展示/轮询多久;视觉完成等待才应跟随实际 CSS 过渡完成。前四类不能仅因出现 setTimeout/RAF 就改用 CSS 动效时长,减少动效也不能取消必要测量或缩短业务期限。
首批人工分类 14 文件/18 条线索:6 声明、6 测量调度、4 交互延迟、2 原生滚动调用。Layout 原生 scrollTo 保留调用者 options,不等于已验证 smooth 或减少动效;Trigger RAF 的 owner-window 取消、已出队回调归属,交互延迟的失效回调,仍需独立生命周期回归。分类保存源码哈希/原行,变更时重新审阅,不能自动刷新哈希冒充复核。剩余159条尚未录入此分类表,包含已有专项审计,不等于159个未修问题。分类新增浏览器/OS通过均为0,不改变变量层级、默认值或公开API。
### Button 配色、7 阶与对比度边界
色板的 primary-7 是颜色档位,不是 7:1 对比度,也不保证白字可读。两端 on-dark 始终是白色前景、on-bright 始终是黑色前景。用户已明确选择主色 Button 保留 on-dark 白字,将 default/light 的 2.305:1 记录为设计例外,不声称该组合满足 AA。此前最低 6.277:1 的 on-bright 候选方案不采用。色板/背景不改,业务仍可手动选择 7 阶及配套前景;此窄范围设计决定不降低其他文字检查阈值。
普通可操作按钮文字按 4.5:1;符合大字号条件的文字可按 3:1,纯功能图标按非文字 3:1 条款评估,禁用态文字不套普通文字阈值。按钮背景与页面并非一律要求 4.5:1。icon 容器仍可能有文字插槽,不能只凭 icon 属性就放宽文字标准。目前全变体文字门禁仍保留失败,不把局部通过说成全库通过。依据:[文字对比度](https://www.w3.org/WAI/WCAG22/Understanding/contrast-minimum.html)、[非文字对比度](https://www.w3.org/WAI/WCAG22/Understanding/non-text-contrast.html)。
业务可以使用 color/textColor 或组件变量手动选 primary-7:例如在实际 Button 根节点设置 --c-button-primary-color: rgb(var(--c-primary-7)) 与 --c-button-primary-text-color: var(--c-sys-color-content-on-bright),Maple 对应换成 mp 前缀。背景与文字成对选择,并复核 hover/active 叠色及实际主题/底色;必要时再覆盖状态层变量。不会自动改色或禁止低对比度覆写,但默认配色通过不替业务覆写背书。若坚持白字/指定色阶,可明确记录设计取舍,不声称该组合满足 AA。
### Message 展示计时的回调归属
Message 的 duration 是业务展示计时,不是 CSS 进出动效 Token。重启、hover 暂停、clear、停用或卸载使已出队的旧回调失效;执行时核对活动状态和 open,同一调度只处理一次。KeepAlive 停用取消,激活从当前配置的完整 duration 重启(与 Notification 一致),不是继续停用前剩余时间;停用更新或卸载后保留的 restart 不启动任务。hover 仍保存剩余时间,正时长已耗尽时 resume 请求关闭一次,不误变常驻;暂停期间显式重置为0则仍常驻。只有有限正 duration 安排自动关闭,0、负数及非有限值不安排;内部代次/状态不是公开 API/CSS 变量。两端独立源码的模拟回归不是实际浏览器/OS 动效证明。
Message 服务退出由组件真实 Transition 的 after-leave→closed→条目清理负责:不再强制150ms完成,也不以200ms兜底提前卸载。公开 transition-duration/timing-function 的覆写能决定实际离场;显式零或减少动效仍走完成链,不延长业务 duration。尚未挂载就 close/clear 的条目没有离场,直接清理并报告服务 onClosed;不伪造组件 open/opened/close 动画事件。clear 用当前条目快照,同步删除不跳项;同ID重开时忽略仍为open的旧完成。模拟完成协议与源码门禁不是实际浏览器长时长通过,原生IAB仍待补。
Message 真实 IAB default/light、top 服务八组已通过:两端默认、600ms/linear、显式零和离场途中同ID重开。默认离场 Cedar104.4ms/Maple153.8ms,长离场603.8ms/604.8ms,重开最终604.7ms/612.6ms;重开后的业务展示期限约1204.9ms/1203.6ms,最终closed各一次、节点归零。重开会取消旧根DOM并创建新根,不将旧节点移除算作完成600ms离场;不保证所有退出捕获原生end事件,以真实leave-to→清理链留证。原生JPEG和规范化时序摘要见 design-ui/audits/evidence/message-native-2026-10-13。未覆盖hover、KeepAlive、其他主题/位置、真实OS、原生缩放或Safari/Firefox。
Message 局部 reduce 规则在独立组件样式生效:Cedar 取消根/进出过渡及图标淡入动画;Maple 取消进出过渡和动画位移,但保留独立提示的 translateX(-50%)/居中 translate(-50%, -50%) 静态定位。不能用 transform:none 抹掉布局定位。现有 duration/easing 消费者与覆写编译28项、减少动效选择器/布局68项通过;不更改 Token 默认值、显示期限或颜色,不依赖全局极短时长。这里的 !important 仅用于内置动效偏好,不授权普通主题覆盖。子图标自身 spin 属于 Icon 的独立规范;不冒充真实 OS 动态切换验收。
### Maple LoadingBar 动效与生命周期
LoadingBar 为 Maple 独有服务,不新增 Cedar 对应 Token。公开 --mp-loading-bar-transition-duration 默认 250ms、--mp-loading-bar-transition-timing-function 默认 ease,控制 width、opacity、background-color;不再使用 transition: all。设置在服务真实祖先(通常 documentElement/body),业务卡片内部无法传到服务。transitionDuration 内部 0ms 用于起始复位,不是公开选项。
200ms 显示等待/进度 tick、300ms 完成停留与 250ms 清理下限是调度策略,不是 CSS Token。完成宽度更新并刷新 DOM 后,等待 max(300ms, 实际 width transition duration+delay) 再隐藏;隐藏刷新后等待 max(250ms, 实际 opacity duration+delay) 卸载服务,下一次 start/error 重新挂载。解析实际节点计算样式,支持 s/ms、all、列表重复和负 delay;不承诺开始等待后的任意 CSS 改动或自定义 animation。reduce 关闭视觉过渡,进度与清理仍工作;显式 0ms 仍保留下限。
重复 finish 在延迟及关闭阶段去重;start/error 取消过时任务并使已出队回调失效。setDefaultOptions 替换完整配置,resetDefaultOptions 清除全部已拥有配置;无 DOM 的 SSR 调用不挂载或安排计时器。Vue 清理规范用于计时器归属与完成后卸载;命令服务不冒充调用页面自动绑定的生命周期。模拟时钟/计算样式、SSR 与 Less 编译不能记为真实浏览器/OS 验收。
真实 IAB 补验:默认、长时长加 delay、显式零、重复完成、重启、失败六组通过,最终服务节点归零;长时长隐藏/卸载等待实测 700.9ms/802.9ms。MutationObserver、真实计算样式与原生 JPEG 证据见 design-ui/audits/evidence/loading-bar-native-2026-10-13。原生点击触发夹具的明确业务序列,不外推真实 OS 偏好、原生缩放、Safari/Firefox 或设备触摸。
Cedar 独有 Notification:duration(3000ms,0 持续)是业务展示时长;六项 CSS transition Token 独立控制 opacity 和左右进出。close 每个挂载实例只发一次并取消计时;关闭/停用/卸载后的过时回调失效。reset-on-update 仅重启活动且未关闭实例;KeepAlive 停用取消,激活从完整配置时长重新开始。列表由 TransitionGroup 的实际离场完成负责卸载。17 项服务/组件/SSR、20项正常编译消费者/成对覆写及44项减少动效选择器通过。局部 reduce 取消 opacity/方向过渡和起始位移,不依赖全局兜底;真实 IAB 的 default/light 服务六组已通过;真实 OS 和其他引擎/主题/位置矩阵仍待验收,不新增 Token 或伪造 Maple 对应组件。
Notification 真实证据见 design-ui/audits/evidence/notification-native-2026-10-13:默认/长离场/零、clear同ID重加、活动身份保持与原生手动关闭,保留原生JPEG。框架空测量克隆不算通知实例;以公开transition elapsedTime或真实leave-to/移除链核对完成,class时间戳不冒充帧级时钟,显式零不等于真实OS减少动效。
clear 同步释放逻辑 ID;clear 后重加相同 ID 使用新的内部条目/组件身份及完整展示计时,更新仍活动的 ID 则保持实例。WeakMap 实例键仅是实现细节,不作为业务 API 或 CSS 变量。clear 保持静默,指定位置清理不影响其他位置。
> 本页是共享规范的文档站镜像。事实来源为 `design-ui/standards/design-tokens.md`;规范更新时应同步更新本页与 Maple 对应页面。
Cedar 与 Maple 使用同一套逻辑 Token 语义,只允许品牌前缀不同:Cedar 为 `--c-`,Maple 为 `--mp-`。共享不是要求所有像素值都相同,而是要求同名 Token 表达同一职责;确需不同的触控尺寸、密度和平台结构必须显式登记。
## 重构时保留 Token 职责(2026-10-09)
组件主体或 DOM 同源化后,公开变量必须重新核验到终端 CSS 属性的完整链路;保留声明和文档并不代表定制仍有效。内部适配层只连接平台默认值,不得把不同职责合并成一个时长或用硬编码绕过已有公开入口。
Rate 是一个具体例子:两端的 `--{p}-rate-transition-duration` 控制普通颜色/hover 过渡,`--{p}-rate-scale-duration` 控制选中缩放动画,`--{p}-rate-transition-timing-function` 控制两者缓动(p 为 c 或 mp)。Cedar 与 Maple 的默认时长和曲线允许平台差异,但三个入口必须真实消费。内部映射声明在组件根节点,而不是 :root,确保实例及祖先的公开变量覆盖在当前作用域解析。减少动态效果偏好优先关闭这些动效。
文档站布局不是组件 Token API。断点、目录与预览区的排列由站点样式负责,不加入 system 颜色或组件尺寸契约;长变量表应局部滚动。源码消费检查、断点布局、键盘导航和真实设备验收应分别记录,不能互相替代。
### 可选覆盖与按实例尺寸回退
VerificationCode 的公开变量 `--{p}-verification-code-cell-height`、`cell-max-width`、`input-font-size` 默认声明为 `initial`:它表示未指定覆盖,而不是最终高度/宽度/字号。在这些未注册的自定义属性上,`initial` 使消费处的 `var()` fallback 生效;消费处再读取当前实例 size 对应的私有映射。不要在 `:root` 中引用仅在组件根节点定义的私有尺寸,否则默认值无法在正确作用域解析。
`cell-height` 控制单格高度,`cell-max-width` 控制单格首选宽度(空间不足时允许收缩),`input-font-size` 控制字符字号,`gutter` 控制相邻格间距。前三项未覆盖时跟随 xs/sm/md/lg/xl 字段尺寸,gutter 默认引用 system space-2;组件 gutter 属性会写入同名内联变量。业务在组件实例或业务容器上覆盖这些公开变量,不依赖私有映射,也不应把一个平台的像素值当作跨端统一标准。
这是明确的“可选覆盖 → 实例 size”契约,不是为缺失的内部 system Token 兜底。取消某个覆盖以恢复 size 时可在目标实例设置该变量为 `initial`;`unset` 对普通可继承的自定义属性会继承祖先值,不能当作同义重置。验收应同时放置不同 size、自定义实例和未覆盖邻居,并检查明暗主题与窄屏收缩。
## 当前状态与阅读方式(2026-09-30)
本轮源码、契约和消费路径的自动检查已形成闭环。System 默认值分为共享语义与明确的平台值;组件颜色、几何、排版、阴影、动效和层级按同义同值或平台差异登记。契约会随新增组件更新,当前数量以机器校验输出和菜单中的完整变量参考为准,不在各阶段叙述中维护另一份总数。
原 91 项消费候选已经逐项处置:恢复真实定制入口,删除无效历史变量,并复核运行时引用。InputTag、Form、Tree 的五档相关缺口已补齐;Tag 预设色、FieldDecorator 错误/禁用优先级、非颜色角色与 reduced-motion 均有持久检查。Message 已统一为 neutral / tonal / solid 三个强调层级,Cedar 默认 neutral、Maple 默认 solid,保留原有默认外观,不再属于待决设计。
在 design-ui 运行 `node bin/token-inventory.mjs --check-consumers --summary` 验证未审消费候选为零;去掉 `--summary` 可查看声明条件、public/internal 层级、终端 CSS 属性和已审核运行时路径。普通字面引用只是线索,只有登记的实际绑定或有限动态名称可作为消费依据。扫描统计针对组件 token 文件,不是 foundation/system 所有变量的总数。
完成记录与后续验收见 `design-ui/audits/token-closure-progress.md`。实际 Chrome 已抽查两端 Message 三变体、主题切换、局部覆盖和关闭,以及 InputTag/输入控件和常用反馈组件;这不等于跨浏览器、真机触摸或全库视觉验收。本文后续带“阶段/本批”的范围、旧名称和数字是历史设计记录;如与当前状态冲突,以本节、完整变量参考和机器契约为准。
### FieldDecorator:状态专属入口
以下后缀属于 `--c-field-` / `--mp-field-`,两端职责相同:
| 变量后缀 | 默认值与消费场景 |
| --- | --- |
| variant-outline-border-color-error | system status-danger;outline 错误态的边框和焦点边框。 |
| variant-standard-line-color-error | field-error-color;standard 错误态的底线及焦点底线。 |
| variant-standard-line-color-disabled | system border-subtle;standard 禁用底线,优先于 error、focus、hover。 |
这些入口此前有声明但没有真实消费;现在局部覆盖会生效。普通错误提示文字仍使用 field-error-color,不因某个变体边框定制而跟着变化。禁用底线从错误的“文字禁用色”定义改为“弱边框”语义,默认渲染延续原有禁用边框颜色。公开 Token 的有效性必须同时验证声明、选择器消费和覆盖结果,不能只对齐名字。
逐变量名称、值与消费位置见[组件 CSS 变量参考](llms/zh-CN/guide/design-token-reference.md)。
## 完整收尾后的设计规则
### 同义、同值与平台差异分开管理
共享名称表示相同职责,不代表强迫桌面与触摸布局使用相同像素。系统变量的每个默认值都必须进入契约:跨端相同的值登记在 systemTokenValues,控件高度和浮层层级等明确差异登记在 platformSystemTokenValues。组件同值入口用 componentTokenValues;有依据的密度/结构差异用 platformComponentTokenValues。一个变量不能同时登记为共享默认和平台例外,避免两份事实来源。
字号、字重、间距、普通圆角和状态过渡优先消费对应 system 角色;不能因为数值碰巧相等就把图标尺寸、徽标点径或布局补偿绑定到 control-height。百分比、无单位比例、布局结构、循环时长与专属形状可以留在 component 层,必须说明原因。减少动态效果设置应停掉非必要过渡/循环,而不只是调暗颜色。
### 状态与定制的优先级
- filled 外壳由 FieldDecorator 单独负责,正常、hover、focus 递进;Form 只提供校验与说明,不再次绘制外壳。
- disabled / readonly 是交互约束,不能由子标签的 closable / checkable 或局部属性绕过。只读可以保持可读外观,但不得修改值。
- pressed(按下)、selected(持久选中)、focus(键盘/输入焦点)不是同一种 active。每个组件明确叠加规则,不能用统一的 hover 选择器覆盖所有状态。
- 颜色变量成对设计:背景与正文、图标、边框、关闭按钮分别有职责。透明背景必须先与真实宿主表面合成再计算对比度。
- 弹层/Teleport 的定制放到实际挂载祖先或弹层根节点;外层触发按钮上的变量不一定能继承过去。行内 color / textColor 是显式业务定制,不纳入默认主题的对比度承诺。
### Message 的三个强调层级
| variant | 场景与颜色职责 | 默认 |
| --- | --- | --- |
| neutral | 中性 overlay 面板,正文 primary,状态由图标表达,关闭按钮 secondary。适用于常规操作反馈。 | Cedar |
| tonal | 低强调状态底色,正文保持可读内容色,图标表达状态。适用于需要轻量区分状态的反馈。 | 两端显式选择 |
| solid | 高强调状态实色底,使用对应明亮/深色表面的前景;default/loading 保留专属深色面板。适用于强调提示。 | Maple |
两端统一 message-{variant}-{status}-{bg|content-color|icon-color|border-color|close-color}。status 为 default/info/success/warning/danger/loading。默认外观和平台密度保留,不把原移动端实色错误命名为 tonal;原隐式颜色变量直接迁移到明确变体,无别名。边框颜色的语义一致不代表必须给移动端新增边宽。
### 从声明到验收
变量必须有真实消费路径:本组件CSS、跨组件CSS、已登记的运行时绑定或有限动态名称展开。文档、注释、主题赋值和相互引用都不能单独证明变量有效。无实际功能的旧变量删除;已有DOM与职责却没接通的变量修复消费。自动目录提供每个变量的声明值、选择器条件、层级及传递消费属性,实际状态覆盖仍由针对性测试和浏览器验证。
新增或修改 Token 时同步五件事:源码及调用者、共享/平台契约、状态与覆盖测试、组件参考文档、迁移说明。自动生成的变量表不手工改;check:token-reference 防止它与源码漂移。
## 四层模型
| 层级 | 职责 | 外部使用 |
| --- | --- | --- |
| Foundation / reference | 原始色板、尺寸刻度等基础值 | 不建议业务直接依赖 |
| System | 跨组件的稳定语义角色 | 全局主题可以覆盖 |
| Component | 单个组件公开的定制入口 | 业务定制首选 |
| Internal | 组件实现细节 | 禁止外部依赖 |
## System 颜色语义
| 组 | Token | 场景 |
| --- | --- | --- |
| surface | `page / default / raised / overlay / muted / tooltip` | 页面、普通容器、浮层、覆盖层、弱化填充表面 |
| scrim | `sys-color-scrim` | 半透明遮罩;与承载内容的 surface 分开。 |
| content | `primary / secondary / tertiary / decorative / disabled / on-dark / on-bright` | 普通表面上的内容层级,及已确认深色/亮色底上的对比前景;后两者须成对选择 |
| content(语义色) | `brand / info / success / warning / danger` | 普通中性表面上的彩色文字、图标及同色描边;品牌色与 info/success/warning/danger 均使用对应色板第 6 阶 |
| border | `subtle / default / strong` | 弱分隔、常规边框、强调边框 |
| action | `primary` | 主操作及品牌交互强调 |
| status | `info / success / warning / danger` | 状态填充和强调色;普通表面上的可读彩色文字选对应 `content-*` |
| state | `hover / selected` | 与组件无关的通用交互状态表面 |
System Token 使用 `--c-sys-{category}-{role}`。同一个颜色角色在 Cedar 与 Maple 必须映射到相同逻辑基础值,标准值由 `theme-contract.json#systemTokenValues` 管理。完成治理的公开组件 Token 默认值登记在 `componentTokenValues`,目前已覆盖 FieldDecorator、Collapse、Dialog、Card、Divider、Empty 与 Avatar 的关键颜色语义。Dialog 的边框、尺寸与布局允许平台差异。Card 悬浮按钮容器使用 `content-primary`,固定深色关闭按钮上的文字使用 `content-on-dark`;其 `#212121` 背景是组件专属值,不代表主操作色。Divider 线条使用 `border-default`、文字使用 `content-secondary`;文字留白 Cedar 为 `16px`、Maple 为 `8px`。Empty 描述使用 `content-tertiary`,非文字装饰图标使用 `content-decorative`。即使两端数值相同,也应检查组件默认值及主题覆盖是否使用正确的 system 语义,不能以相同的硬编码值代替语义。
Avatar 也已纳入跨端颜色治理:文字、汇总数量和按钮图标使用 `content-primary`;描边使用 `surface-default`;仅深色遮罩图标使用 `content-on-dark`。默认 `fill-4` 背景、触发按钮 `fill-2 → fill-3` hover 阶梯、半透明遮罩是组件视觉值。按实例覆盖背景(`color` 属性)时须检查文字对比度,必要时覆盖 `--c-avatar-text-color`;system 角色不能保证任意前景/背景组合的对比度。Maple 暗色 Avatar 背景 `#303030` 是主题专属组件值。
Badge 第三阶段治理:填充背景使用 `status-*`/`action-primary`,轮廓文字和描边使用 `content-info/success/warning/danger/brand`;default 轮廓使用 `content-primary`,secondary/tertiary 使用 `content-secondary`。轮廓背景变量对所有状态和 `color` 属性均生效。两端的 Maple 浅色品牌均为填充 primary 配置浅字。编译后的 CSS 验证覆盖 640 个内置配色组合及 64 个轮廓背景覆盖场景,填充文字最低 4.56:1,轮廓文字最低 4.97:1;自定义色与背景需重新验证,其余未登记变量仍待治理。
`content-brand` 引用 primary 第 6 阶;`content-info/success/warning/danger` 引用对应色板第 6 阶,适用于普通中性表面上的可读彩色文字、图标和同色描边。`content-brand` 与 `content-primary`(主要内容层级)、`action-primary`(主操作强调)职责不同;仅覆盖主操作色不会自动改变品牌文字色。
Card 预发布变量迁移:`--c-card-close-button-primary-color` → `--c-card-close-button-background`,不保留旧名别名。
## Component 与 Internal
公开组件 Token 使用 `--c-{component}-...`,必须在组件文档中说明;默认值优先引用 system Token。业务侧应优先覆盖这一层。
按实例属性写入的 CSS 变量(如 `--c-divider-opacity`)是运行时传值通道,不代表 `:root` 中存在同名主题默认值;组件文档应标明来源。
Internal Token 使用 `--c-internal-{component}-...`,只用于内部节点协作、运行时测量或不稳定实现。主题、业务代码和公开文档不得依赖它;需要开放定制时,应提升为公开 component Token。
## 选择顺序
1. 已有公开 component Token:直接使用。
2. 跨组件通用语义:使用或新增 system Token。
3. 单组件且需要外部定制:新增公开 component Token,以 system Token 作为默认值。
4. 纯实现细节:使用 internal Token。
5. 不添加无人消费的兼容别名来制造表面对齐。
## 命名与平台差异
Token 名顺序固定为:组件 → variant/status/size → interaction state → CSS property。状态统一使用 `hover`、`focus-visible`、`active`、`disabled`、`loading`、`selected`、`error`。
允许不同:控件高度、触控目标、移动端 safe-area、桌面 hover 能力、平台层级实现。禁止不同:system 颜色角色、同名组件 Token 的职责、状态名称和公开/私有边界。
## 完整 System Token 目录
以下用 `--{p}-` 表示平台前缀:Cedar 的 `p=c`,Maple 的 `p=mp`。颜色映射是跨端契约,不应因组件或主题作者的个人判断改变角色;主题可以改变基础色板的具体色值。完整机器可校验清单在 `theme-contract.json#tokens.system`,下表说明每个角色的职责。
| System 颜色后缀 | 默认基础值后缀 | 应用场景与边界 |
| --- | --- | --- |
| `surface-page` | `color-bg-1` | 应用页面底色;不用于弹窗。 |
| `surface-default` | `color-bg-2` | 卡片、普通容器及展开后的内容表面。 |
| `surface-raised` | `color-bg-3` | 高于普通内容的浮层,如 Dialog。 |
| `surface-overlay` | `color-bg-5` | 更高层的弹出内容表面;不是半透明遮罩。 |
| `surface-tooltip` | `#373739` | 明暗主题均保持深色的提示表面,搭配 on-dark。 |
| `scrim` | `rgba(0, 0, 0, 0.6)` | 半透明遮罩,不是正文表面。 |
| `surface-muted` | `color-fill-1` | filled 默认态或弱化填充;不是禁用态的统称。 |
| `content-primary` | `color-text-1` | 标题、主要正文及普通表面上的主要图标。 |
| `content-secondary` | `color-text-2` | 辅助文字、次要操作与 Divider 标签。 |
| `content-brand` | `primary-6`(RGB) | 普通中性表面上的品牌文字、图标及同色描边。 |
| `content-info` | `blue-6`(RGB) | 普通中性表面上的信息文字、图标及同色描边。 |
| `content-success` | `success-6`(RGB) | 普通中性表面上的成功文字、图标及同色描边。 |
| `content-warning` | `warning-6`(RGB) | 普通中性表面上的警告文字、图标及同色描边。 |
| `content-danger` | `danger-6`(RGB) | 普通中性表面上的危险文字、图标及同色描边。 |
| `content-tertiary` | `color-text-3` | 占位、低强调说明;必要时检查文字对比度。 |
| `content-decorative` | `color-text-4` | 空状态等非文字装饰图形;不可用于需要阅读的文字。 |
| `content-disabled` | `color-text-disabled` | 真正不可交互的内容;不能拿来表示装饰。 |
| `content-on-dark` | `color-white` | **已确认深色表面**上的文字与图标;背景可变时不能盲用。 |
| `content-on-bright` | `color-black` | **已确认亮色表面**上的文字与图标;暗色主题也保持深色,仍须按配色核验。 |
| `border-subtle` | `color-border-1` | 弱分隔、低强调边界。 |
| `border-default` | `color-border-2` | 普通控件描边与 Divider 线条。 |
| `border-strong` | `color-border-4` | hover 等需要更明确边界的状态。 |
| `action-primary` | `color-primary` | 品牌主操作及焦点强调;不是“颜色深”的同义词。 |
| `status-info` | `color-info` | 信息填充和强调色;普通表面上的可读信息文字使用 `content-info`。 |
| `status-success` | `color-success` | 成功填充和强调色;普通表面上的可读文字使用 `content-success`。 |
| `status-warning` | `color-warning` | 警告填充和强调色;普通表面上的可读文字使用 `content-warning`。 |
| `status-danger` | `color-danger` | 危险填充和强调色;普通表面上的可读文字使用 `content-danger`。 |
| `state-hover` | `color-fill-2` | 中性组件的 hover 表面;仅在可 hover 的设备上使用。 |
| `state-selected` | `color-primary-light-1` | 选中项的品牌浅色表面;不等于按下态。 |
非颜色 system Token 是跨组件可复用的基础节奏,名称相同但可允许平台密度不同。当前完整类别如下:
| 类别 | Token 后缀与标准值 | 设计用途 |
| --- | --- | --- |
| 间距 | `space-1…8` = `2 / 4 / 6 / 8 / 12 / 16 / 20 / 24px` | 内边距、元素间距与组合间距;新增刻度前优先复用现有八档。 |
| 圆角 | `radius-sm/md/lg/pill` = `2 / 4 / 8 / 999px` | 常规控件、容器和胶囊形状;圆形头像的 `50%` 属于组件几何,不必强套。 |
| 字号 | `font-size-xs/sm/md/lg/xl` = `12 / 13 / 14 / 16 / 18px` | 组件文字层级;超出刻度的大标题仍可作为组件专属值。 |
| 字重 | `font-weight-regular/medium/semibold` = `400 / 500 / 600` | 常规、强调和强强调;避免每个组件另造一套数字。 |
| 动效 | `motion-duration-fast/standard/slow` = `120 / 180 / 240ms`;`motion-easing-standard` = `cubic-bezier(0.4, 0, 0.2, 1)` | 普通交互时长;动效应尊重 `prefers-reduced-motion`。 |
| 层级 | `layer-behind/base/raised` = `-1 / 0 / 1`;`layer-popup/modal` 映射平台层级 | 组件堆叠关系;不要把某端的绝对 z-index 值当作跨端语义。 |
| 控件 | `control-height-xs/sm/md/lg/xl`;`control-touch-target` | 高度按平台密度确定:Cedar `28/32/36/40/44px`,Maple `44/48/52/56/60px`;触控目标两端均为 `44px`。 |
## 组件 Token 的设计维度
组件 Token 名应回答“哪个组件、哪个部位、什么视觉分支、什么状态、控制哪个 CSS 属性”。推荐顺序是 `--{p}-{component}-{part?}-{variant/status/size?}-{state?}-{property}`;可省略无关维度,不为对称而制造空变量。属性名要对应实际消费属性:控制背景用 `background`,控制文字用 `text-color`,不能用模糊的 `primary-color` 指代深色背景。现存历史名称可分批迁移,迁移必须同步契约与文档。
| 维度 | 何时需要 | 示例 |
| --- | --- | --- |
| part | 同一组件有多个独立可定制部位 | `dialog-title-text-color`、`card-close-button-background` |
| variant | 视觉结构互斥 | `field-decorator-variant-filled-background` |
| status | 信息或操作语义 | `dialog-status-danger-color` |
| size | 几何档位 | `card-size-sm-title-font-size` |
| state | 交互/可用性变化 | `field-decorator-variant-filled-background-hover` |
| property | 对应实际 CSS 职责 | `background`、`border-color`、`text-color`、`padding` |
状态 Token 只在需要不同值时创建;默认态、hover、focus-visible、active、disabled 的优先级由组件交互定义,不能仅依赖 Less/CSS 规则的书写先后。特别是 filled 输入框:默认 `fill-1`、hover `fill-2`、focus `fill-3`;同时 hover 与 focus 时 focus 必须胜出。`focus` 表示实际焦点样式,`focus-visible` 专指键盘可见焦点,不可混名。禁用态不应继续显示 hover/focus 强调。
组件默认值原则上从 system Token 引用;只有跨组件没有稳定语义的特定形状或对比表面,才允许组件专属常量,并在组件文档说明。例如 Card 的深色关闭按钮背景 `#212121`,不能因为它很醒目就映射到 `action-primary`。尺寸、触控目标与布局可以不同,但两端同名组件变量的职责必须相同。
## 覆盖与主题解析
推荐链路为 `foundation → system → component → CSS 消费点`。业务只改一个组件时覆盖公开 component Token;品牌/明暗主题改变跨组件角色时覆盖 system 或其基础色板。主题文件若直接写入组件 Token,同样要保持该 Token 的角色语义,不允许暗色主题把 `content-secondary` 偷换成无解释的 `#aaa`。组件样式消费 component Token,不越层直接使用基础色板。
```css
/* 只改变某个对话框,不影响其他浮层 */
.my-dialog { --c-dialog-background: #fff8ef; }
/* 改变整套主题的浮层表面 */
[data-theme='custom'] { --c-sys-color-surface-raised: #fff8ef; }
```
覆写组件背景时,应同时检查其文字、图标、边框和交互态的对比度;`content-on-dark` 只适合背景确实保持深色的场景。`var()` 的 fallback 仅用于明确的外部兼容边界或已记录的可选覆盖(如 VerificationCode 的实例 size 回退),不应掩盖缺失的内部 system Token。颜色混合和透明度属于需要解释的组件行为,不应靠孤立的硬编码颜色掩盖。
`--{p}-internal-{component}-...` 是私有实现变量,允许因内部重构改变。按实例由属性注入的变量则属于“运行时传值通道”,例如 Divider 的 `opacity`:它可能与公开组件 Token 同名空间,但没有可供主题作者覆盖的 `:root` 默认值。组件文档要明确是静态默认值、主题覆盖值、还是运行时写入值。
## 跨端治理与变更流程
1. 确定视觉职责:先判断是 surface、content、border、action、status、state,还是组件独有的几何值。不要因为现值相同就认定语义相同。
2. 查找现有角色;若无法准确表达,先讨论新增 system 角色或登记有理由的组件特例,不强行套用“最接近”的颜色。
3. 同步 Cedar 与 Maple 的 Token 名称、消费属性、默认值及主题覆盖;平台差异必须写明原因,必要时进入契约 allowlist。
4. 将共享默认值写入 `theme-contract.json#componentTokenValues`,新增 system 名称和值写入 `tokens.system` 与 `systemTokenValues`;更新组件文档和两端菜单镜像。
5. 检查亮/暗主题、hover/focus/disabled 组合、CSS 变量引用是否可解析;运行契约检查、相关组件测试、文档检查及差异检查。
早期颜色阶段从 FieldDecorator、Collapse、Dialog、Card、Divider、Empty、Avatar、Badge、Tag、Alert、Button 展开;当前已扩展为完整声明目录及颜色/非颜色契约。共享契约管理名称及已治理的默认值;尚未纳入 `componentTokenValues` 的组件变量并不自动合规。修改公开 Token 名称时先确认发布阶段,提供迁移映射,不能偷偷留下无人消费的别名。
## Tag:状态色、选中态与定制边界
Tag 的 default 是浅色填充,不是 Badge 的高强调实心背景。primary / info / success / warning / danger 的文字及 outline 同色描边分别使用 content-brand / info / success / warning / danger;secondary 与 tertiary 使用 content-secondary。彩色填充背景使用对应 primary / blue / success / warning / danger 色板第 1 阶,secondary 使用 gray-2,tertiary 使用 gray-1。这些背景是 Tag 专属配对表面,不新增含糊的通用 system 角色;不能仅因历史颜色相似就把 success / warning / danger 固定到 green / orange / red。
| 变量族(省略平台前缀) | 职责与使用场景 |
| --- | --- |
| tag-status-*-text-color / bg-color | 已选中 default 变体的成对前景与背景;修改背景须同时验证文字。 |
| tag-variant-outline-status-*-color | 已选中 outline 的文字与边框共用色;背景透明,不复用实心填充色。 |
| tag-variant-outline-default-color / default-border-color | 默认及未选中 outline 的中性文字、边框。 |
| tag-default-bg / default-bg-hover | 中性已选中 default 背景:fill-2 → fill-3;不是输入框的 fill-1 → fill-2 → fill-3 规则。 |
| tag-bg-not-checked-hover | 未选中可交互 Tag 的中性 hover 背景,使用 state-hover。 |
| tag-default-text-color / default-icon-color | 默认文字 content-primary、默认前缀图标 content-secondary。 |
| tag-custom-text-color | 自定义 default 背景且未传 text-color 时的前景;默认 content-on-dark,调用方必须保证背景够深。 |
| tag-{色名}-* | color 预设色板入口,不表达成功、警告等业务语义;彩色前景使用色板第 9 阶、灰色使用 content-secondary;默认配色的非 loading、已选中状态纳入预设对比度检查。 |
| tag-size-* / padding-* / icon-* / close-* | 密度与部位几何;保留桌面紧凑、移动较大的尺寸,不机械统一像素。 |
交互规则:非 checkable 的 Tag 按已选中呈现;checkable 未选中时状态配色不生效,hover 只显示中性提示;已选中状态配色不能被通用 hover 覆盖。中性已选中 default 支持独立 hover;已选中 outline 保持透明。loading 不参与本批中性/状态 hover 强调。此规则不改变 checked 的受控事件协议。
覆盖顺序:color(预设色或自定义色)优先于 status;text-color 只用于显式文字定制。自定义 default 背景没有自动对比度推导,自定义 outline 使用 color 作为描边及未指定 text-color 时的文字。业务改色需验证可读性。预设色的 outline、hover、暗色 Token 覆盖已补齐,详见后文;几何/动效与预设色对比度已在后续收尾阶段登记。
本批新增 28 项 Tag 默认值契约。运行 design-ui 的 pnpm check:tag-themes:编译两端实际 Less,并检查 2 平台 × 2 品牌 × 2 明暗 × 8 状态 × 2 变体 × 2 选中 × 2 hover × 2 loading,共 1024 个级联组合;已选中、非 loading、非 hover 的默认配色在五类 system 表面上检查 640 组文字对比度,最低 4.681:1。脚本使用 DOM 选择器匹配和针对现有选择器的 specificity 计算,不代替真实浏览器视觉验收;不涵盖任意业务背景、预设/自定义色或 loading 透明度。主题或选择器结构改变时应同步扩展检查器。
## Alert:信息语义与主题继承
Alert 使用 status=info/success/warning/danger/default 和 standard/tonal/outline 三种变体。彩色标题、正文、图标及 outline 描边使用对应 sys-color-content-info/success/warning/danger,而不是 status 填充色;默认标题使用 content-primary,正文和图标使用 content-secondary,默认描边使用 border-default。
| 公开变量族(省略平台前缀) | 默认来源与场景 |
| --- | --- |
| alert-standard-{status}-bg / border | 彩色背景取 blue/success/warning/danger 第 1 阶,弱描边取第 3 阶;用于信息容器,不是交互按钮边界。 |
| alert-tonal-{status}-bg | 与 standard 同浅底,仅去掉描边,不再描述为“加深一档”。 |
| alert-outline-{status}-border | 彩色描边与可读 content 同色;背景透明,依赖外层表面。 |
| alert-{variant}-{status}-title / content / icon | 分别控制标题、正文、状态图标;彩色三者使用同一语义角色,但保留独立定制入口。 |
| alert-{standard/tonal}-default-bg | 中性 fill-2 配对表面,属于组件静态背景,不借用名称含 hover 的交互角色。 |
| alert-{variant}-{status}-content | 同时作为根容器继承色,保证关闭图标及未显式设色的 action/正文插槽跟随信息语义;自带颜色的业务组件不被强制覆盖。 |
| alert-padding-* / icon-size / *-margin-* / font-* / line-height* | 布局、图标及文字几何,独立于颜色;Maple 暗色仍保留现有较大图标和内边距,未在本批强行统一。 |
颜色链路为 foundation → system content / component-specific paired surface → component → CSS。标准变体的第 3 阶边框是弱分隔,不承诺作为控件边界的 3:1 对比度;不能把这项检查误认为所有边框都已满足非文本对比度要求。未增加新的 system Token,也未更名公开变量。
Maple 暗色主题移除独立的 Alert 颜色覆盖,继承同一组件默认值并由暗色色板解析,避免 info 从 blue 变为另一套 info 色,以及正文层级、透明混色随平台漂移。保留的主题尺寸不属于共享颜色契约。color 属性只覆盖背景,不会自动选择文字色;修改背景时需要同时检查 title/content/icon,以及继承正文颜色的关闭图标和操作内容。业务自定义颜色、图片背景和自行设色插槽不在默认配色保证范围内。
本批登记全部 65 项 Alert 颜色默认值;几何和动效仍待治理。运行 design-ui 的 pnpm check:alert-themes(或 node bin/alert-theme-check.mjs):编译两端 Less,覆盖 2 平台 × 2 品牌 × 2 明暗 × 3 变体 × 5 状态,共 120 组;对五类 system 表面的标题、正文、状态图标、关闭图标及继承色操作内容检查 3000 组前景配对,最低 4.802:1。另验证局部 title/content/icon 变量能到达消费点。此检查使用实际 CSS 的选择器匹配与级联计算,不替代真实浏览器视觉验收。Tag 与 Alert 共用解析工具,后续组件应扩展同一工具而不是复制临时脚本。
## Button 大阶段:四种变体与交互状态
本阶段完成 Button 的颜色与交互状态闭环,不代表所有组件或 Button 几何、动效已经完成治理。覆盖 8 种 status、default/text/outline/tonal、icon-container、两套品牌的明暗主题,以及 hover/active/focus-visible/disabled/loading。不改 Props 名称或事件协议。
### 颜色职责与历史变量名
| 公开变量族(省略平台前缀) | 职责、默认值与使用场景 |
| --- | --- |
| button-{status}-color | 普通 default 变体的实心背景。primary 使用 action-primary,info/success/warning/danger 使用 status-*;default 使用 surface-default,secondary/tertiary 为 gray-6/7。不能再直接当 text/outline 的文字。 |
| button-{status}-text-color | 普通 default 的对比前景。彩色与 secondary 默认用 content-on-bright;tertiary 浅色用 on-dark、暗色用 on-bright;default 用 content-primary。Maple 品牌浅色的深橙 primary 使用 on-dark。 |
| button-{status}-icon-color | 历史名称保留,实际是 text、outline、tonal 及 default icon-container 的可读前景。primary 使用 content-brand,业务状态使用对应 content-*,default 使用 content-primary,secondary/tertiary 使用 content-secondary。不是只作用于图标。 |
| button-{status}-icon-container-color | 历史名称保留,实际是 tonal、default icon-container 及透明变体交互反馈的浅色表面。彩色取 primary/blue/success/warning/danger 第 1 阶;secondary/tertiary 取 gray-2/1;default 使用 surface-muted。 |
| button-disabled-color / disabled-text-color / disabled-solid-text-color / {status}-disabled-color | 中性禁用底色/文字、彩色实心禁用文字和状态淡色;按 variant 与 status 使用。text/outline 保持透明,tonal 保留浅底,disabled 暂停内联颜色覆盖。 |
| button-focus-color / focus-width / focus-offset | 焦点环独立于按钮文字,默认 content-brand / 2px / 2px;避免实心按钮的白色文字变成白底上不可见的焦点环。 |
Maple 暗色不再用一套独立的白字与实心图标容器颜色覆盖上述关系;它继承组件默认值及暗色色板。只保留现有几何覆盖。两端同名 Token 职责相同,不要求把所有尺寸都套成输入框的控制高度。
### 交互反馈与优先级
| 变量 | 用途 |
| --- | --- |
| button-state-opacity-hover / active | 实心、tonal 与图标容器覆盖层强度,默认 0.08 / 0.12。 |
| button-plain-state-opacity-hover / active | text/outline 使用浅色容器的反馈强度,默认 0.5 / 1;不直接以高饱和状态色压在文字后面。 |
| button-{status}-state-layer-color | 普通实心按钮覆盖层颜色。彩色和 secondary 用浅色层搭配深字;tertiary 浅色模式用深色层搭配浅字,暗色反过来;Maple 品牌浅色 primary 同样使用深层搭配浅字。default 用 content-primary 产生中性反馈。 |
| button-state-layer-color | tonal 和图标容器的覆盖层,默认 surface-page;不承担所有变体的统一着色。text/outline 的层颜色来自对应 icon-container-color。 |
| internal-button-state-layer-color / internal-button-state-opacity-* | 私有解析变量,将变体和状态选择映射为覆盖层使用值;业务不可覆盖或依赖。 |
优先级是 disabled/loading 阻止交互反馈,active 高于 hover,focus-visible 独立叠加;禁用不保留焦点强调。实心 default 的 icon-container 颜色必须高于 variant × status,不能因为 class 同时存在而被实心配色覆盖。覆盖层在隔离的层叠上下文中位于内容之后,不覆盖文字、图标或 loading 内容。原有瞬时 ripple 动画保留,不作为稳定状态对比度承诺的一部分。
loading 保留按钮原来的视觉配色但阻止激活;加载指示器默认传 currentColor,跟随按钮前景,显式 loading-color 仍优先。色彩定制边界:color/text-color、loading-color、直接 style 和自行设色的插槽属于使用者定制,不保证任意配对可读;只改背景时必须同时检查实心文字、浅色变体、交互层和焦点环。禁用配色不要求满足普通可操作文字的 4.5:1 检查。
### 契约与验收
Button 阶段新增 13 个公开交互层变量、48 项颜色/状态默认值;截至该阶段共享契约累计 223 项组件默认值,最新总数见浮层阶段。组件文档列出完整 :root 默认值和明暗/品牌例外;不为旧名字另造重复别名。
运行 design-ui 的 pnpm check:button-themes(或 node bin/button-theme-check.mjs)。编译实际 Less,覆盖 2 平台 × 2 品牌 × 2 明暗 × 8 状态 × 4 变体 × 2 icon-container × 3 可用性 × 2 hover × 2 active × 2 focus,共 12288 个级联组合。启用及 loading 的默认前景在五类 system 表面上检查 40960 组配色,最低 4.563:1。disabled 对比度、业务定制和瞬时 ripple 不在此数字内。另有原生 button/a、禁用自定义色恢复、loading 继承和事件阻断测试;真实浏览器抽查基础明暗四变体、禁用、键盘焦点和 hover 层叠。解析检查不是跨浏览器截图测试,也不意味着全仓 lint/主题快照基线已清零。
## 浮层与提示:表面、遮罩、箭头
本阶段治理 Tooltip、Popover、Overlay、Trigger,新增两个 system 颜色:
| 角色 | 默认值 | 意义与场景 |
| --- | --- | --- |
| `sys-color-surface-tooltip` | `#373739` | 明暗主题都保持深色的紧凑提示表面,搭配 `content-on-dark`;不是随模式反转的 inverse surface。主题改变它时须成对验证文字。 |
| `sys-color-scrim` | `rgba(0, 0, 0, 0.6)` | 压暗被遮挡内容的半透明黑色遮罩;不承担正文背景,不通过父节点 opacity 实现。 |
`surface-overlay` 仍是 Popover 等弹出内容的实体表面,映射 `color-bg-5`,不能用于替代 scrim。Tooltip 中性提示采用固定深灰,使两端提示外观一致;彩色 status 背景继续使用 `action-primary/status-*`,不是浅色文字专用背景。默认彩色文字使用 `content-on-bright`;两端 Maple 浅色品牌的深橙 primary 使用 `content-on-dark`。
Maple 暗色主题删除 Tooltip 颜色/opacity、Popover 背景和 Overlay 背景的旧覆盖,避免绕过 system。Tooltip 默认 opacity 在两端所有内置主题均为 1;降低它会同时淡化内容和箭头,须重新检查对比度与连接处。
Tooltip 与 Popover 的箭头和内容读取同一个组件背景 Token;Popover 边框也成对读取。上层组件箭头选择器优先于 Trigger 默认箭头,避免 CSS 加载顺序改变外观。Trigger 单独使用时仍以 `surface-overlay` 作为箭头默认背景;它不定义业务内容表面。
### 外部定制和继承边界
- 全局主题使用 system;单个组件优先使用 Tooltip/Popover/Overlay 的公开变量。不要为定制 Tooltip 箭头而覆盖 Trigger 背景变量。
- 浮层可能 Teleport:变量必须落在实际 popup 的祖先作用域;只放在触发按钮上不会跨 DOM 自动继承。可通过 `popup-style` 设置公开变量,使内容与箭头共同继承。
- Tooltip `color` 同时设置内容/箭头背景,`text-color` 设置内容文字;`content-style` 和 `arrow-style` 是各节点的显式覆盖,优先于这些默认属性。只改 content-style 的背景不会自动改箭头。自定义颜色必须成对检查。
- Popover 可用 popup-style 上的 `--{p}-popover-background` 同时改变箭头与面板;content-style/arrow-style 的直接颜色属性会覆盖变量消费。
- Overlay 的 background-color 只影响 backdrop,不给内容设置 opacity。内部定位/测量变量不构成公开主题入口。
### 契约、差异与验证范围
共享契约新增 35 项组件默认值:Tooltip 全部 23 项、Popover 的 4 项颜色、Overlay 全部 3 项、Trigger 全部 5 项。累计 64 个 system 名称、29 个 system 标准值、258 个组件默认值。
Popover 阴影保留 Cedar shadow2-down 与 Maple 三段阴影的平台差异;Maple 暗色 Tooltip 保留圆角 4px、字号 14px、纵向/横向内边距 8px/16px,Popover 保留圆角 2px。这些几何主题例外不等于同名语义不同,后续密度/动效阶段继续评估。此浮层阶段尚未涉及 Dialog/Popup;其后续治理见下方模态表面阶段,仍不能宣称所有局部遮罩已统一。
`check:floating-themes` 已纳入共享主题检查:编译两端 Less,读取品牌与明暗主题覆盖,验证 72 个组合、320 对文字颜色(5 种宿主表面),最低 5.178:1;同时检查主体/箭头配色、公开变量实际消费及 Trigger 最后加载时的优先级。该检查不代替浏览器布局测试,不涵盖任意自定义色、透明度或入退场动画中间帧。
## 模态表面阶段:Dialog、Drawer、Popup
本阶段把两端 Dialog、Cedar Drawer、Maple Popup 接入上一阶段定义的 scrim。Drawer 与 Popup 是平台组件,不为凑齐名称而在另一端创建无人消费的变量。
| 消费者 | 公开组件变量(省略平台前缀) | System 默认语义 |
| --- | --- | --- |
| Dialog(两端) | `dialog-overlay-background` | `color-scrim` |
| Dialog(两端) | `dialog-background` | `color-surface-raised` |
| Drawer(Cedar) | `drawer-overlay-bg / drawer-bg` | `color-scrim / color-surface-raised` |
| Drawer(Cedar) | `drawer-header-text-color / drawer-content-text-color` | `color-content-primary`;关闭按钮也用标题颜色 |
| Drawer(Cedar) | `drawer-border-color` | `color-border-default` |
| Popup(Maple) | `popup-overlay-background-color` | `color-scrim` |
| Popup(Maple) | `popup-content-background-color / popup-content-text-color` | `color-surface-raised / color-content-primary` |
### 变量必须连接实际节点
Maple Dialog 之前只声明了遮罩变量,引用的基础变量不存在,实际遮罩却消费 Popup 变量。这种“名称对齐但没有消费者”的状态不算完成治理。现在通过限定到 Dialog 容器的选择器直接消费 Dialog 遮罩变量,优先于通用 Popup 规则;独立 Popup 不受影响。检查会故意后加载 Popup CSS,防止顺序回归。
Maple 暗色主题删除 Dialog 背景、标题和正文硬编码覆盖,以及 Popup 背景/遮罩旧覆盖。两端 Dialog 标题和正文继续使用 content-primary,关闭按钮使用 content-secondary。Dialog 的四种状态图标从 status 填充角色迁到对应 content 状态角色,使普通面板上的图标有足够对比度。字段名保留,改变的是正确的语义映射;自定义图标、面板或品牌色仍需重新验证。
Popup 新增公开 `--mp-popup-content-text-color`,与面板背景成对定制;`unstyled` 同时停用默认背景和文字色,交给业务内容自行配色。Popup 的声明移到 token.less,主样式只负责消费。Drawer 不再在组件 Less 中内嵌整套主题;基础样式仍由 style/index.ts 引入。移除未被任何样式消费的 Drawer close-icon-right 变量,不保留无效别名;关闭按钮仍由标题布局与 close-btn-margin-left 控制。
### 实例定制与 Teleport
- 全局遮罩统一覆盖 `--{p}-sys-color-scrim`;局部遮罩优先使用各组件的公开变量。
- Dialog/Drawer 的遮罩与面板是兄弟节点:overlay-style 作用于遮罩,dialog-style/drawer-style 作用于面板;变量不会从面板继承给遮罩。
- Maple Popup 的 style 透传到内容节点;遮罩使用 overlay-style。在面板上设置 scrim 并不会改变其兄弟遮罩。
- Teleport 后,变量按实际 DOM 祖先继承,而不是按 Vue 调用位置继承。共同作用域主题放在实际挂载祖先或全局主题中。
- 显式 backgroundColor 样式覆盖变量消费。遮罩透明度使用颜色 alpha,不给面板或公共父节点设置 opacity。
- 多个遮罩叠加会按 alpha 合成变深;统一 Token 不代表只能存在一个遮罩,本阶段不改变模态堆栈逻辑。
### 契约与验证边界
共享契约更新 Dialog 的 5 项既有默认值(遮罩及四种状态图标),不增加共享组件数量。仍为 64 个 system 名称、29 个 system 标准值、258 项共享组件默认值。平台专属 Drawer 的 5 项颜色与 Popup 的 3 项颜色由 `check:modal-themes` 验证,不计入共享默认值总数。
检查编译后的真实 Less,覆盖 16 个平台/品牌/明暗组合、72 组文字及图标配色,最低 5.102:1;同时验证组件覆写、全局 scrim 传播、Dialog 与独立 Popup 的隔离、unstyled 边界及加载顺序。组件测试使用实际 Teleport 目标,不依靠 transition stub 验证直接子节点结构。颜色检查不等于浏览器视觉或动效验收,不覆盖任意自定义色、嵌套遮罩组合或动画中间帧。
本阶段保留各平台几何、圆角、阴影、动效和层级默认值。头像、图片预览等组件的局部遮罩是否属于同一种 scrim,需按用途继续判断,不能批量替换所有半透明黑色。
## 反馈组件阶段:Message、Notification、LoadingBar(历史记录)
> 以下记录统一变体之前的端侧颜色治理。旧 Message 名称已迁移到三变体接口,原“待迁移”结论不再是当前待办;现行模型见前文 Message 强调层级。
本阶段处理两端 Message、Cedar Notification 和 Maple LoadingBar 的颜色角色、暗色覆盖和实际消费者。统一的是语义职责,不在没有变体设计的情况下把移动端彩色提示强行改成桌面端中性面板。
| 消费者 | 表面/色块 | 前景/指示色 | 说明 |
| --- | --- | --- | --- |
| Cedar Message | 所有状态使用 surface-overlay;边框 border-default | 正文 content-primary,关闭 content-secondary;图标按 content 状态色 | default 图标 primary;loading 图标 brand;info 使用 info 而非品牌填充色 |
| Cedar Notification | 所有状态使用 surface-overlay;边框 border-default | 标题/正文 content-primary,关闭 content-secondary;图标按 content 状态色 | normal 图标 primary;现有 error 名称映射 content-danger,不新增危险色别名 |
| Maple Message:default/loading | 组件专属深色 #333 | content-on-dark | 保留现有移动提示外观,不冒用 surface-overlay 或 scrim |
| Maple Message:彩色状态 | status-info/success/warning/danger | content-on-bright | 浅色文字不能默认适配所有状态填充;必须成对设置前景和背景 |
| Maple LoadingBar | 细线本身为可辨识的内容标记 | content-brand/content-danger | 普通/失败状态,不使用 action/status 填充阶;背景由宿主页面决定 |
### 实际消费与外部定制
- Maple 新增四个公开变量:message-info-color、message-success-color、message-warning-color、message-danger-color(完整前缀为 `--mp-`)。message-color 继续控制 default/loading,不再默认为所有背景提供同一个浅色前景。
- Maple Message 的图标、正文、纯文本 action、关闭按钮和 currentColor 焦点描边共享对应状态前景。插槽内的 Button、链接或自带颜色的节点不会自动变成合适配色,业务必须单独验证。
- Cedar Message/Notification 根节点消费当前状态的正文颜色,保证未自行着色的 action/footer 文本可读。Notification normal-icon-color 现在有真实消费者,定制默认图标颜色不再失效。
- Maple 暗色主题移除这些组件的旧颜色覆盖,保留既有尺寸;Message 的专属深色表面留在 component 层,不把固定 #333 冒充通用系统表面。
- Maple Message/LoadingBar 的公开声明集中到 token.less;Cedar Message/Notification 不再在组件 Less 内嵌整套基础主题,由 style/index.ts 负责依赖。
- 全局主题在实际挂载祖先提供 system 变量;局部定制优先用对应 component 变量。Teleport 不改变 CSS 的 DOM 继承规则。LoadingBar 的 color/errorColor 选项显式覆盖默认变量,改变颜色或页面背景后须重新检查。
### 治理范围与仍待处理的差异
新增 `check:feedback-themes`,纳入共享检查入口,按各平台现有名称治理 63 项颜色默认值:Cedar Message 25、Notification 26、Maple Message 10、LoadingBar 2。编译真实 Less 并读取暗色和品牌覆盖,检查 76 个组合、1500 组前景/表面配色,最低 4.681:1,同时验证映射与公开变量消费。
这些实现的颜色矩阵尚不属于同名共享组件默认值契约,因此不增加 258 项共享默认值总数;两端仍为 64 个 system 名称、29 个 system 标准值。Message 的颜色后缀、状态背景形态仍有平台差异,后续需要单独设计变体与命名迁移,不能把本阶段描述为完整 API/Token 名称对齐。Notification 和 LoadingBar 是平台专属组件,不在另一端创建空壳。
几何、阴影、动效、关闭按钮交互细节以及其余历史变量的消费审计不在本阶段;不以颜色检查替代浏览器视觉验收。检查覆盖内置静态配色,不包括自定义插槽颜色、业务背景和动画中间帧。LoadingBar 在五类内置表面上按更严格的 4.5:1 检查;这不意味着任意宿主背景都自动合规。
## 输入与菜单颜色阶段:Input、AutoComplete、Select
本阶段只收敛这三个组件的颜色职责及其默认值,不把输入外壳、菜单选项和反馈图标当成同一种交互表面。新增 26 项共享颜色默认值契约:Input 5 项、AutoComplete 10 项、Select 11 项;共享总数从 258 增至 284,system 名称/默认值仍为 64/29,组件名称契约仍为 35。没有新增或重命名公开变量。
### Input:反馈与输入外壳分开
以下逻辑变量名省略 `--c-`/`--mp-` 前缀;表中的 system 名也需补上对应前缀。
| 变量 | 默认引用 | 职责与定制场景 |
| --- | --- | --- |
| input-counter-color | field-suffix-text-color | 字数统计;跟随字段辅助内容色,可单独覆盖 |
| input-feedback-success-color | sys-color-content-success | 成功反馈 SVG 的 currentColor |
| input-feedback-warning-color | sys-color-content-warning | 警告反馈 SVG 的 currentColor |
| input-feedback-error-color | sys-color-content-danger | 错误反馈图标,不复用填充型 field-error-color |
| input-feedback-validating-color | sys-color-content-brand | 校验中图标;转动时仍需与字段背景可辨识 |
输入背景、边框、光标和焦点环仍属于 FieldDecorator/原生输入样式;Input 的反馈变量不负责这些部位。覆盖 field-error-color 或 field-focus-color 不再连带改变反馈图标,需覆盖对应 input-feedback 变量。filled 的 fill1 → fill2 → fill3 规则没有改变。禁用、只读、校验状态的业务行为也没有修改。
Maple 暗色 Field 的历史覆盖会把 filled 改回 fill2/fill3/普通背景,还会覆写正文、辅助文字、错误及边框色。本阶段移除这些旧颜色覆盖,仅保留几何配置,使暗色也遵循 FieldDecorator 的既有语义契约;不是新增另一套暗色状态阶梯。检查显式载入 dark/field.ts,防止只验证 token.less 而漏掉主题覆写。
### 菜单:同样的颜色角色,不同的变量命名
下表为完整的本阶段菜单颜色契约。AutoComplete 保留已有 option 名称,并在自己的 dropdown 根节点映射到 Select 变量;不新增另一套菜单规则。公开覆盖应使用所属组件的变量,不依赖这层内部适配。
| AutoComplete 后缀 | Select 后缀 | 默认 system 角色 |
| --- | --- | --- |
| popup-bg | popup-bg | surface-overlay |
| popup-border-color | popup-border-color | border-default |
| option-bg-default | popup-option-bg | surface-overlay |
| option-bg-hover | popup-option-bg-hover | state-hover |
| option-bg-selected | popup-option-bg-selected | surface-overlay |
| option-bg-disabled | popup-option-bg-disabled | surface-overlay |
| option-text-color-default | popup-option-text-color | content-primary |
| option-text-color-hover | popup-option-text-color-hover | content-primary |
| option-text-color-selected | popup-option-text-color-selected | content-primary |
| option-text-color-disabled | popup-option-text-color-disabled | content-disabled |
| 无独立分组标题变量 | popup-group-title-text-color | content-secondary |
完整名称例如 `--c-auto-complete-option-bg-hover` 与 `--mp-select-popup-option-bg-hover`。Select 的分组标题使用 secondary 而不是 tertiary:它是可读的小字号标题,不是禁用信息。Maple 暗色不再单独覆写 selected 为品牌文字和 selected 背景;两端都从相同默认角色解析暗色值。
菜单中的 active 是键盘导航项,使用 hover 配色,不是鼠标按压层级。颜色优先级为 disabled > active/hover > selected > default;selected 的字重仍保留,颜色相同不代表丢失选择状态。业务覆盖 selected 颜色后,与 hover 叠加时仍由 hover 颜色胜出,这是明确的导航反馈规则。
### 检查范围与边界
`check:selection-themes` 已纳入共享主题检查入口:编译真实 Less,覆盖两端、两个品牌、明暗主题,共 384 个状态组合、296 组对比度。正文/字数/分组标题至少 4.5:1;反馈图标是非文字指示,至少 3:1。本次矩阵最低 3.991:1 出现在图标检查,不能把它说成正文最低标准。禁用项检查优先级及变量消费,不宣称符合正文对比度门槛。
检查通过哨兵色逐项验证本阶段颜色变量的实际消费者,包含 AutoComplete 的局部映射。它不等于浏览器视觉验收,也不覆盖自定义插槽颜色、任意业务背景、伪元素、动画中间帧或 Teleport 祖先继承;弹层局部定制仍必须放在真实挂载祖先或 popup 根节点。此次未治理 Input 尺寸、菜单几何/阴影及 Select highlight 历史变量,也没有处理 Checkbox/Radio/Switch/Form/Textarea 的独立 Token。
## 选择控件颜色与状态优先级:Checkbox、Radio、Switch(历史记录)
> 此节记录最初的颜色/优先级范围;后续 Switch 配色、RadioButton 与非颜色收尾见对应组件规范和当前契约,不把阶段性未覆盖项重复视为未完成。
本批为 Checkbox、Radio 各登记 6 项颜色默认值,共新增 12 项;变量名称和尺寸 API 不变。Maple 的默认值移入各组件的 token.less,暗色主题仅保留移动端几何,不再重新写死颜色。
| 公开变量后缀(checkbox / radio) | 两端相同的 system 角色 | 意义与使用场景 |
| --- | --- | --- |
| control-color | content-secondary | 未选中轮廓/图标;这是识别控件的非文字内容,不是装饰性边框 |
| control-color-checked | content-brand | 选中与半选标记;需要与所在表面保持辨识度,不直接等同于 action-primary 按钮填充 |
| control-color-error | content-danger | 可交互控件的校验错误轮廓/标记,不改变标签正文色 |
| control-color-disabled | content-disabled | 禁用标记;禁用优先于错误、选中颜色和 hover |
| label-text-color | content-primary | 标签正文;错误说明由表单反馈承担 |
| label-text-color-disabled | content-disabled | 禁用标签;移动端标签自身的 disabled 类必须消费此变量 |
以上后缀分别加 --c-checkbox- / --mp-checkbox- 或 --c-radio- / --mp-radio-。局部覆盖放在组件真实 DOM 祖先上。Maple 已有 checked-color / unchecked-color 属性仍是内联颜色覆盖,优先于 CSS 变量;需要系统状态色时不要同时传这些自定义颜色。自定义插槽、任意业务背景与属性颜色需自行验证对比度。
状态规则:disabled > error > checked / indeterminate > unchecked;hover 仅提供可交互提示,不取消选中或错误。Cedar 修复错误边框被 hover 覆盖、Checkbox 半选禁用缺失及禁用 hover 恢复普通边框;RadioButton 的错误色也不再被普通选中规则覆盖。Maple 错误色仅作用于 action,不染标签,且不覆盖 disabled。
Cedar 的内部勾选/半选标记及 Radio 圆点用 surface-default 表达“镂空表面”,与 content-brand / content-danger 的实心标记成对使用;这不是通用“彩色背景上的文字”角色。internal 变量仍不是跨端公开承诺。桌面 14px 与移动 24px 的控制尺寸及命中区域继续保留,未作机械数值统一。
Switch 本批仅修复状态优先级:可交互 error 轨道高于 tonal 未选中背景;disabled / loading 保留正常 checked 状态并抑制错误覆盖。现有自定义轨道颜色在普通状态保留,校验错误仍使用 error Token。轨道、滑块、文字及 tonal 配对颜色尚未登记共享默认值,不能据此声称 Switch 配色已统一;RadioButton 的完整配色、伪元素和几何也仍需后续审计。
回归入口:design-ui 的 pnpm check:choice-themes(也可直接 node bin/choice-theme-check.mjs),已接入 check:theme-contract。覆盖两端 × 两品牌 × 明暗主题共 832 个状态组合;Checkbox / Radio 校验 640 组颜色对比(标签 ≥4.5:1、控件 ≥3:1),最低 4.681:1。哨兵色检查公开颜色变量的消费者;Switch 仅检查四种变体与 checked / disabled / loading / error 的级联结果。禁用态不设对比阈值。此检查不是浏览器视觉验收,不覆盖伪元素绘制、动画、焦点环及内联自定义色。
## 表单说明与多行输入:Form、Textarea
本批新增 5 项共享颜色默认值:Form 3 项、Textarea 2 项;不新增或重命名公开变量。默认值集中到 token.less,Maple FormDetails 暗色主题不再用 #888 或 action 填充色覆盖文字语义。
| 变量后缀 | 默认角色 | 消费者与场景 |
| --- | --- | --- |
| form-label-text-color | content-primary | 表单标签正文,不随校验错误染色 |
| form-extra-text-color | content-secondary | Cedar 的 extra / 普通 help,Maple 的 help;辅助说明仍需可读 |
| form-required-symbol-color | content-danger | 必填标记,不是错误背景填充 |
| textarea-placeholder-color | content-secondary | 原生 textarea 的 placeholder;两端均实际消费,默认焦点/错误不会把它改成品牌/错误色 |
| textarea-counter-color | content-secondary | 字数统计;Cedar 位于输入区内,Maple 位于输入区外,因此同时按 filled 各级背景校验 |
上表分别添加 --c- / --mp- 前缀。Cedar 的 form-tooltip-text-color 使用 content-secondary;status-success / warning / error / validating 的 tip-text-color 与 tip-icon-color 分别使用 content-success / warning / danger / brand。它们是桌面扩展,不伪造移动端同名变量。Maple FormDetails 使用自己的 error-message-color(content-danger)和 extra-message-color(content-secondary);Form 的 extra 属性由 FormDetails 展示,因此定制该段应覆盖 --mp-form-details-extra-message-color,而不是 --mp-form-extra-text-color。组件组合不意味着所有子组件变量自动别名化。
Textarea 的 disabled 优先于 error,placeholder 及原生禁用文字使用 field-control-text-color-disabled。Maple 显式 blur-color / focus-color 仍可定制可交互、非错误状态的 placeholder;未传属性时不再写入内联默认值,从而允许祖先 CSS 变量覆盖。disabled 时也不再注入 text-color。hint 模式由 FieldDecorator 的标签承担提示,不能用 textarea-placeholder-color 定制浮动标签。
职责边界:Form 管理标签、说明、必填符号与校验反馈;FieldDecorator 管理 outline / filled / standard 外壳。Cedar Form 不再通过旧 selection-field 选择器重绘背景、边框与焦点阴影,避免校验状态破坏 fill1 → fill2 → fill3。Picker 等旧状态适配仍保留;InputTag 的旧重绘规则已在后续阶段移除,详见后文;本批不宣布所有 form-status-* 背景变量已统一。两端高度、间距、计数器位置、清除按钮布局与其它几何差异未改。
检查入口:pnpm check:form-textarea-themes(或 node bin/form-textarea-theme-check.mjs),已接入 check:theme-contract。两端 × 两品牌 × 明暗主题共 276 项消费者/状态检查、200 组对比检查,最低 4.681:1。Form 说明/反馈校验 surface-default 与 surface-muted;Textarea 额外校验 state-hover 与 fill3。文字阈值 4.5:1,反馈图标 3:1;禁用态无对比阈值。检查扩展到编译后的 ::placeholder 选择器,并用哨兵色验证覆盖能到达消费者,但不等于真实浏览器伪元素、焦点、主题切换或自定义背景的视觉验收。
## Switch:实心轨道与 tonal 变体的成对配色
当前主题入口为 Themes.default.light / dark 与 Themes.maple.light / dark。Switch 的 tonal 是造型,不是主题;公开变体与八项专用变量统一使用 tonal 命名,不保留旧名称别名。
本阶段登记 10 项共享颜色默认值,其中 8 项为既有变量,新增 tonal-text-color / tonal-handle-color 两项。两端只差 --c-switch- / --mp-switch- 前缀。规范变更记录位于 Cedar openspec/changes/govern-switch-colors;Maple 暗色主题不再单独写死轨道及文字颜色。
| Switch 变量后缀 | system 默认角色 | 职责 |
| --- | --- | --- |
| track-background | content-secondary | 普通未选中实心轨道 |
| track-active-background | content-brand | 选中轨道及键盘焦点环 |
| track-error-background | content-danger | 可交互错误轨道及 tonal 错误边框 |
| handle-background | surface-default | 普通/选中/错误滑块底色 |
| handle-color | content-brand | 普通/选中/错误滑块图标色 |
| text-color | surface-default | 实心轨道上的文字色 |
| tonal-track-background | surface-muted | tonal 未选中轨道底色 |
| tonal-border-color | content-secondary | tonal 未选中边框及滑块底色 |
| tonal-text-color | content-secondary | 新增:tonal 未选中轨道文字 |
| tonal-handle-color | surface-default | 新增:tonal 未选中滑块图标 |
轨道是用于识别开关状态的控件标记,采用 content-secondary / brand / danger,与 Checkbox / Radio 的标记语义一致,不直接沿用按钮 action 填充色。surface-default 在实心轨道中表示镂空式前景,与所在主题的轨道色成对设计,不是任意彩色背景的通用文字色。暗色 surface-muted 带透明度,只适合叠加表面,不能充当深色滑块上的反差图标色。
tonal 未选中采用独立前景组合;选中或可交互错误状态切回普通文字/滑块 Token。迁移注意:若过去仅覆盖 text-color / handle-color 来定制所有变体,现在还应同时设置 tonal-text-color / tonal-handle-color。tonal-border-color 仍同时影响未选中边框和滑块底色。错误状态会一起切换轨道、滑块与文字,避免只换轨道而遗留低对比度前景。
优先级保持 disabled / loading 抑制 error,并保留 checked 身份;hover、active 和 focus 不抹去该状态。只调整默认配色,不新增 hover 变色。checked-color / unchecked-color 仍写入内部 current-track,覆盖普通轨道;可交互 error 仍优先使用 track-error-background。loading-color 覆盖加载图标,否则继承滑块图标色。自定义轨道需一起选定前景;这不是自动纠正任意业务颜色的算法。scale、local-*、current-track、loading-color 等运行时变量不是公开主题默认值。
验证入口:pnpm check:switch-themes(或 node bin/switch-theme-check.mjs),已纳入 check:theme-contract。覆盖 circle / round / line / tonal × checked / disabled / loading / error / hover / active / focus-visible × 两端 × 两品牌 × 明暗主题,共 4096 个状态;8704 组默认色对比最低 4.681:1。按 host → track → handle → icon 实际顺序混合透明颜色;文字 ≥4.5:1,控件边界、滑块/轨道、图标和焦点环 ≥3:1。哨兵色验证公开颜色变量及自定义轨道消费者。line 实际不显示文字,因此不计虚构文字对比。
边界:检查使用 md 尺寸、surface-default / surface-muted 承载背景,不覆盖 disabled / loading 降低整体透明度后的对比、任意自定义颜色/插槽、动画中间帧、真实浏览器布局或焦点可见性验收。sm 隐藏文字、尺寸缩放、阴影与几何/动效默认值仍未进入本批契约。
## 导航颜色:Tabs 与 Steps
本批新增 64 项共享颜色默认值:Tabs 7 项、Steps 57 项,没有新增公开变量。Maple Tabs 暗色覆盖移除;两端保留尺寸与布局差异。
### Tabs 颜色职责
| 后缀(添加 --c-tabs- / --mp-tabs-) | system 角色 | 场景 |
| --- | --- | --- |
| background | surface-default | card / capsule / enclosed 选中表面 |
| title-text-color | content-secondary | 普通标题 |
| title-text-color-active | content-brand | 选中标题、焦点环与指示条,不使用 action 填充色 |
| title-text-color-disabled | content-disabled | 禁用标题 |
| muted-background | surface-muted | 分组或未选中表面 |
| border-color | border-default | 装饰性分隔线和边框 |
| hover-background | state-hover | fine pointer 下可交互且未选中项 |
hover 不覆盖选中项背景;line / outline 的 hover 只改变可交互文字。coarse pointer 不应用桌面 hover 规则。禁用优先于选中/hover 文字色,但保留选中位置。
### Steps 颜色职责
所有后缀加 --c-steps- / --mp-steps-。状态为 wait / process / finish / error,disabled 只禁止交互,保留进度身份;circle 同时供 navigation 使用。
| 变量组 | wait | process | finish | error |
| --- | --- | --- | --- | --- |
| circle-item-bg-* | surface-muted | content-brand | state-selected | content-danger |
| circle-item-border-color-* | transparent | transparent | transparent | transparent |
| circle-item-icon-text-color-* | content-secondary | surface-default | content-brand | surface-default |
| circle-item-title-color-*、dot-item-title-color-* | content-secondary | content-primary | content-primary | content-primary |
| circle-item-description-color-*、dot-item-description-color-* | content-secondary | content-secondary | content-secondary | content-secondary |
| dot-item-bg-*、dot-item-border-color-* | content-secondary | content-brand | content-brand | content-danger |
| arrow-item-bg-* | surface-muted | content-brand | state-selected | content-danger |
| arrow-item-title-color-* | content-secondary | surface-default | content-primary | surface-default |
| arrow-item-description-color-* | content-secondary | surface-default | content-secondary | surface-default |
circle / dot 的 item-tail-color-wait 为 border-default,item-tail-color-process 为 content-brand,item-tail-color-error 为 content-danger;没有虚构 finish 尾线变量,已完成连线使用 process 色。连接线为辅助提示,不作为唯一状态信息。navigation-arrow-color 使用 content-secondary;navigation-ink-bg 与 changeable-hover-text-color 使用 content-brand。
bg 是节点/箭头表面,icon-text-color 是编号或图标,title / description 是正文。实心 process / error 箭头使用反差前景,hover 不能将其改成同色文字;其他可交互非 active 项仍可 hover 提亮。navigation-ink-bg 现在实际消费于导航指示线,不再误用 hover 文字变量。surface-default 在这里表示配对的镂空式前景,不是任意业务背景上的通用文字色。
验证入口:pnpm check:navigation-themes(或 node bin/navigation-theme-check.mjs),已接入 check:theme-contract。覆盖 Tabs fine / coarse 媒体、六种变体及选中/禁用/hover,Steps 四种造型与四状态叠加 active/disabled/hover:共 1792 个状态、1792 组颜色对比,最低 4.681:1;文字和编号要求 4.5:1,dot 要求 3:1。哨兵色验证被测消费者,包括 Tabs 指示条及导航指示线伪元素。
边界:未逐项验收所有连接线/箭头伪元素、焦点环、尺寸、阴影、动画或自定义插槽/背景;禁用不设对比阈值,真实浏览器布局与触摸交互另行验收。主题、组件 variant 与交互状态必须分层描述。
## 数值与进度:内容层级与图形指示
本批登记 12 项共享颜色默认值;两端仅前缀不同。颜色角色描述职责,不依据组件所在平台或品牌改变意义。
| 组件与变量后缀 | system 角色 | 意义与场景 |
| --- | --- | --- |
| count-to / countdown:text-color | content-primary | 独立数值、计时文字;计时结束不自动表示错误或成功 |
| statistic:value-color | content-primary | 主要读数;内部 CountTo 动画继承此色,不抢占父组件颜色 |
| statistic:title-color / prefix-color / suffix-color / extra-color | content-secondary | 标题、单位、前后缀和补充说明;不能因为字号小就降低到装饰文字对比 |
| progress-group:text-color | content-primary | 主内容与环形中心文字 |
| progress-group:muted-color | content-secondary | 数值、百分比等辅助信息,仍须满足正文可读性 |
| progress-group:track-color | state-hover | 中性 fill2 轨道底色;这里只复用填充层级,不意味着发生 hover |
| progress-group:tooltip-bg / tooltip-color | surface-tooltip / content-on-dark | 固定深色提示表面及其反差文字,明暗主题都使用此配对 |
ProgressGroup 默认分段、图例图标引用 content-brand,作为需要辨识的图形标记而非按钮背景。运行时优先级为 item.color → 组件 color → system content-brand;用户自定义颜色不保证对比度,需要自行验收。当前未新增组件颜色别名。不要使用百分比或正负数猜测业务上的成功/危险;业务状态由调用方明确指定。
这批只治理颜色:两端字号、间距、圆角等密度差异暂保留,不能把颜色一致理解为全部默认值一致。Maple 暗色 CountDown / Statistic 删除颜色覆盖,保留现有几何值;Cedar 移除四个 token.less 内嵌的全局主题,基础样式仍由模块入口负责。
验证入口为 node bin/numeric-theme-check.mjs,亦纳入 check:theme-contract。检查编译后 CSS 消费者及变量覆盖、普通/弱表面的文本对比、线形/环形轨道、Tooltip 成对颜色、Statistic 动画继承。自定义色、实际浏览器布局、动画和交互视觉不在此次静态检查结论内。
## 基础表现:状态层、表面、占位与间距
本批登记 Hover 2、Icon 1、Paper 5、Ripple 2、Skeleton 20、Space 10,共 40 项完整 root 默认值。共享变量名只差 c / mp 前缀,没有新增别名。Space 依赖的 system space-1…8 同时登记为受管默认值:2 / 4 / 6 / 8 / 12 / 16 / 20 / 24px。
| 组件/变量后缀 | 默认职责与使用场景 |
| --- | --- |
| hover:overlay-opacity / overlay-focusing-opacity | 0.04 / 0.12;用宿主 currentColor 作覆盖层,以 opacity 表示强度,不是独立文字色或实心填充色。无状态为 0;focus 高于 hover,不累加。显式 focusing 不因设备类别被隐藏,焦点触发策略由宿主负责。 |
| icon:size | inherit;随宿主字号缩放,图形为 1em,颜色继承。显式 size 属性覆盖 CSS 变量;需要旧移动端 20px 外观时显式设置 size="20" 或 icon-size:20px,不恢复全局固定大小。独立 SVG 图标不自动消费 Icon 包装器变量。 |
| paper:background / border-color | surface-default / border-default;普通承载表面不是浮层,也不因暗色而跳到 bg4。内容颜色由宿主继承,调用方需提供适配表面的文字色。 |
| paper:border-radius / border-width / transition-duration | 4px / 1px / system slow(240ms);bordered 才消费边框宽度和颜色,round 使用圆形形状,radius 属性覆盖默认圆角。背景变化时长通过组件变量引用 system slow。 |
| ripple:color / cubic-bezier | currentColor / cubic-bezier(0.68,0.01,0.62,0.6);波纹继承宿主颜色,曲线控制扩散,不控制文字、宿主背景或整个指令生命周期。自定义波纹颜色由指令参数优先提供。 |
| skeleton:card / avatar / title-background-color | 均引用 state-hover,即中性 fill2;这里是占位填充层级,不表示发生 hover。title 色同时用于行、Shape 和 fullscreen 占位,不是 scrim 或真实内容背景。 |
| skeleton:animation-background | transparent → surface-default → transparent 的横向渐变;shimmer 层以 0.3 opacity 混合,避免硬编码白色导致暗色不同。仅 animation 开启时消费;覆盖渐变后仍受此层透明度影响。 |
Skeleton 几何变量保持两端一致:content-padding 16px;card 高 160px、圆角 4px、下间距 16px;avatar 大小 34px、圆角 50%、右间距 16px;title 宽 50%、圆角 10px;row 高 12px、圆角 10px、上间距 10px;Shape 的 sm/md/lg 为 36/48/60px,圆角 4px。这些是组件形态,不为追求数量而全部映射到 spacing;圆形覆盖形状圆角,不覆盖颜色。
Space 使用物理 CSS row-gap / column-gap,与 flex direction 不交换:xs 为 4/4px、sm 为 8/6px、md 为 12/8px、lg 为 16/12px、xl 为 24/16px。对应 system spacing 引用,不改变原有数值。自定义数值同时应用两轴,数组按 [rowGap,columnGap],不经过预设变量;split 插槽仍保留间距。Space 不应拥有文字或背景颜色变量。
移除 Maple 这六个组件族的重复暗色覆盖(HoverOverlay、Icon、Paper、Ripple、Skeleton、Space),从同一语义与几何默认值继承;Cedar 清除相关 Less 的全局主题内嵌。验证入口 node bin/foundation-theme-check.mjs 纳入 check:theme-contract:两端 × 两品牌 × 明暗主题 448 项检查,包括实际 CSS 消费者、变量覆盖、focus 优先级和间距解析。占位及反馈状态层不是正文,不套用正文对比度阈值。实际浏览器动画、全库 reduced-motion 覆盖、强制颜色模式及任意业务自定义色仍需后续验收;本批不是全库样式完成声明。
## 基础动效:时长职责与减少动态效果
本阶段新增 6 项组件变量、登记 2 项既有 system 时长默认值。不把所有动效压成同一个时长,也不使用颜色主题切换来改变动效策略。
| 变量后缀(两端只差 c / mp 前缀) | 默认值与职责 |
| --- | --- |
| sys-motion-duration-fast | 120ms;轻量状态反馈过渡,不是所有动画的最快档替代品 |
| sys-motion-duration-slow | 240ms;此批用于承载表面、占位表面的颜色变化 |
| hover-transition-duration | 引用 system fast;hover / focus 覆盖层透明度过渡,两端一致,focus 仍优先 |
| paper-transition-duration | 既有变量改为引用 system slow;仅背景色过渡,不影响点击、尺寸或业务时序 |
| skeleton-transition-duration | 引用 system slow;card、avatar、title、row、fullscreen 占位色变化 |
| skeleton-animation-duration | 1s;横向扫光单周期,不等同于表面过渡时长 |
| icon-spin-duration | 1s;内置旋转单周期,不控制名称替换的等待时间 |
| ripple-expand-duration / ripple-fade-duration | 200ms / 140ms;分别控制 CSS transform 扩散与 opacity 变化,保留 ripple-cubic-bezier 的扩散曲线职责 |
所有 CSS 时长需要有效、非负的时间值。Icon 的 transition 属性依然表示毫秒数的名称切换等待,不能通过 spin-duration 改变。Ripple 的 expand-duration(200ms)控制 transform 扩散,fade-duration(140ms)控制 opacity 显现/消退,cubic-bezier 仅控制扩散曲线;两端默认值与消费者一致。运行时从实际波纹节点所属文档读取计算后的 transform/opacity transition 时长与 delay(支持 s/ms、列表重复与 all),不直接解析未解析的 var()。250ms 分别是从节点创建起的最小展示时间和开始淡出后的最小移除等待,不是视觉 duration、总生命周期或 CSS Token。创建 30ms/激活 20ms 是内部调度;快速释放仍走最小展示流程。
释放等待扩散的实际激活时间 + transform duration/delay 与创建时间 +250ms 的较晚者;开始淡出后等待 max(250ms, opacity duration+delay) 才删除。默认节奏不变,600ms/800ms 等较长覆写不再截断;显式 0ms、无样式或 reduce 隐藏仍保留清理下限。扩散时序在创建/激活阶段采样,消退时序在开始淡出时采样,不承诺之后任意 CSS 改动或 animation 的时序。计时器不是设计 Token,不能从调色或密度层推导。
每个波纹只安排一次释放,禁用/卸载取消所属定时器和直接子波纹,不误删嵌套指令;文档释放事件注册/清理使用挂载时 ownerDocument,跨文档搬迁的监听重新绑定不在本契约内。键盘只接管本宿主 Enter/Space,对应 keyup 或 blur 释放,无关键不抢占。指令不授予宿主按钮语义、可访问名称或点击业务能力;在已有交互元素上使用,不能只加 v-ripple 便声称普通 div 可访问。真实 IAB 默认/长时长/0ms 六组与两端永久回归分别留证;不外推真机触摸、真实 OS 偏好或全库动效通过。
prefers-reduced-motion: reduce 是用户偏好,不是主题或公开 CSS 开关。内置策略如下:Hover / Paper / Skeleton 表面立即响应、保留状态颜色;Icon 停止 spin,内置缩放取消,名称立即切到最新值;Skeleton 隐藏扫光但保留占位;Ripple 不显示装饰波纹,指令仍正常清理节点,不影响宿主事件。必要的 !important 仅用于压过 Icon 内联 transition、Ripple 内联 opacity 及已列明的模态/Notification/Message 内置过渡和起始位移,不用于普通主题覆盖。用户显式 rotate 朝向保持不变。
Icon 在挂载后订阅偏好,减少动态效果在切换途中开启时会取消旧计时器;关闭偏好不会对未变化的名称重新播放动画。卸载移除监听并清理等待。SSR 不读取 window,也不建立监听。自定义 animation-class、外部 SVG 的自有动画和业务加载指示器需调用方另行适配;本策略并不替代可访问名称或加载状态提示。
验证入口 check:motion-themes 已接入 check:theme-contract:96 组主题/偏好组合、88 项时长覆盖、176 项模态 active 选择器消费检查,并检查 reduce 下起始 transform 与 Popup 基础过渡。Icon 单测仍负责初始/动态偏好、切换取消与卸载。motion-source-inventory.mjs --check 维护源码候选清单:两端 192 个文件、389 处 CSS 动效声明候选、179 处运行时调用候选(新增 setTimeout 调度线索);存在局部 media 或计时器不代表已通过,源清单也不证明选择器可达。此检查是实际 Less 编译及模拟状态,新增真实 OS/浏览器验收为 0。
漂移门禁使用 design-ui/audits/motion-source-inventory.json 当前基线,历史证据快照保持不变。逐行线索包含非动效计时器,数量不代表缺陷或完成的验收。
BackTop 的 duration(200ms)与 easing(quartOut)是 JS requestAnimationFrame 滚动参数,不是 CSS 动效 Token;现有组件变量只负责几何、配色、焦点及层级。减少动效偏好读取滚动目标 ownerDocument 的窗口;动画途中开启时在下一帧立即回顶,保留横向滚动,不承诺同步 OS 事件回调。重复点击、目标切换、停用或卸载使旧帧失效,包括已经出队的回调。滚动可见性合帧不是视觉动画。此处以模拟 RAF/iframe 文档与 SSR 回归验证,不增加真实浏览器/OS 通过数。
模态动效补验:Cedar Drawer 的 fade/四方向 slide 和 Maple Popup 的 fade/center 缩放/四方向 pop,在 reduce 下关闭内置过渡与起始位移/缩放。规则在组件样式入口生效,不依赖全局入口的极短时长兜底;必要的 !important 仅作用于这些内置动效和 Popup 基础过渡,不覆盖主题颜色。Maple Popup 通过 --mp-popup-transition-duration(250ms)与 --mp-popup-transition-timing-function(ease)控制内置 fade/pop 和内容/遮罩基础过渡;职责命名与 Cedar Drawer 对齐,但保留平台组件默认值,不借用 Dialog Token,也不伪造 Cedar Popup 变量。两项应设置在 Teleport 后实际共同祖先或挂载宿主;style 只传给内容、overlay-style 只传给遮罩,不能控制整层关闭时长。CSS 时间必须有效且非负;reduce 规则优先于常规覆写。
生命周期由实际 Transition 完成回调驱动,不设固定 250ms JS 等待:unmountOnClose 在关闭途中保留内容与锁,完成后卸载;快速重开取消关闭,保留内容状态;每个有效打开/关闭阶段的完成事件只发一次,销毁后的回调不再发事件。自定义动画及内容/外层不同步的覆写由调用方负责;初始打开保留既有 mounted 通知行为,不承诺完整 appear 动画计时。IAB 默认/600ms/0ms、五方向与重开/销毁实测另存证据,0ms 是显式 CSS 覆写,不是 OS reduced-motion 验收。
模态配色补验:16 个平台/主题组合,72 组默认配色加 80 组显式背景/文字覆写,最低显示值 5.102:1。透明表面先合成到已知不透明实际背景,再合成透明前景;文字门禁按未舍入比值与 4.5 比较。低对比度自定义覆盖、未知半透明底层及非法颜色必须拒绝,不把覆盖可消费误当成可读性通过。这里覆写的是直接组件变量,不保证根 system 别名会随任意局部覆盖重新计算;业务插槽、图片/渐变背景、自定义状态图标及 unstyled 的配色由调用方负责。依据:[WCAG 文字对比度](https://www.w3.org/WAI/WCAG22/Understanding/contrast-minimum.html);动效偏好参考 [交互动效说明](https://www.w3.org/WAI/WCAG22/Understanding/animation-from-interactions.html),后者为 AAA 条款,不宣称本批完成 WCAG 认证。
## 自动闭环与后续视觉验收
原消费审查、Message 模型与非颜色默认值登记的源码清单已经收敛;不再把已完成事项重复列作“下一批”。共享组件和平台专属组件都进入目录与消费检查,不为同名而创建无效别名或另一端的空壳。具体变量处置见 token-consumer-resolution,非颜色职责见 non-color-token-resolution,Message 迁移见 message-token-resolution。
自动门禁分别检查声明/引用可解析、同义默认值与平台差异、状态和覆盖级联、动态消费者登记、文档生成漂移。它们不能证明任意业务插槽、背景、缩放倍率和浏览器组合的像素结果。构建、类型与发布产物检查以对应运行日志为证据,也不能代替视觉验收。
尚需持续完成的是有明确环境范围的 QA:
- Safari/Firefox/Chromium 的代表性交互回归,特别是 error × focus × hover、selected × pressed、禁用与键盘顺序。
- iOS/Android 真机、窄屏与粗指针,确认输入法、触摸目标、悬停限制和安全区域。
- 浏览器减少动态效果偏好及动态切换、动画生命周期、焦点可见性与屏幕阅读器。
- 长文本、多语言、大字号/缩放、嵌套 Teleport 浮层及业务局部覆盖;自定义颜色需自行验证对比度。
实际已抽查与未覆盖场景以 `design-ui/audits/token-browser-validation.md` 为准。后续发现真实问题仍应同步修改规范、实现、契约和测试;消费候选为零不是“永远没有 CSS 错误”的承诺。
## Badge 与 Tag:语义色、预设色及覆盖边界
Badge 的默认 status 是 danger;无状态匹配时的 bg-color 兜底也引用 system status-danger,不再固定为 #ef4444。status-default-bg-color 的 #e0e0e0 是有意保留的固定中性底,搭配 content-on-bright(黑色);secondary / tertiary 保留 gray-6 / gray-7。tertiary 在暗色使用深字,Maple 浅色品牌的 primary 使用浅字。隔离环 border-color 跟随 surface-default;放到其他宿主背景上时可局部覆盖。Maple 暗色主题仅保留必要的 tertiary 文字差异,不重复声明全套默认值。
Tag 的 color 预设色表示色板选择,不是业务 status。13 种预设色在两端遵循同一规则:
| 状态/变量 | 职责 |
| --- | --- |
| 已选中 default:{色名}-bg / bg-hover | 正常/可交互 hover 背景;loading 不消费 hover 值。暗色默认分别为该色第 6 阶的 20% / 35% 透明混合,通过 Token 声明而非选择器写死。 |
| 已选中 outline:{色名}-text-color | 文字及描边共用,背景始终透明,hover 不套用填充背景。 |
| {色名}-icon-color | 已选中的前缀、关闭和加载图标颜色,与显式 text-color 的文字覆盖分开。 |
| {色名}-border-color / border-color-hover | default 变体边框,默认透明;不控制 outline 的同色描边。 |
| 未选中 checkable | 预设颜色不生效,维持中性;仅非 loading 的 hover 使用 bg-not-checked-hover。 |
背景变量可在实例根元素覆盖,在暗色同样生效;根级自定义声明需注意与主题 :root 属性选择器的优先级。color(预设/自定义)优先于 status。自定义 default 的背景与边框由 color 属性内联设置,text-color 可覆盖前景;自定义 outline 的 color 控制描边和默认文字,背景透明。自定义色当前不随 checked 自动回到中性,这与预设色不同,不应假定两条路径完全一致。业务负责自定义颜色、透明混合后的文字可读性。
本阶段新增 98 项既有颜色默认值约束,总计 566 项组件默认值;登记不等于每个声明都有消费点。预设 icon-bg-hover 等无消费声明已在下一阶段移除,详见后文;上一阶段的 566 为当时统计。Badge 新增持久化 check:badge-themes:288 个级联状态、720 对配色和 288 项背景覆盖检查,最低 4.563:1。Tag 新增 1664 个预设级联状态与 416 项背景覆盖检查;原有 1024 个语义状态及 640 对对比度检查继续保留。预设色现已追加 2080 对对比度检查,最低 4.529:1:覆盖两端、两品牌、明暗、default / outline、hover 及五类 system 表面;彩色前景使用第 9 阶,灰色使用 content-secondary,gold 的浅色 hover 背景从第 3 阶调整为第 2 阶。自定义色及 loading 透明度不在对比度保证范围;这些是静态编译与级联检查,不是浏览器视觉验收。
## Token 必须有消费路径
公开变量必须能沿 var() 引用链到达实际 CSS 属性,或有明确记录的运行时/跨组件消费者。仅有声明、文档、主题覆盖,甚至变量之间互相引用,都不代表可定制。审核先编译 Less(展开 mixin 和动态变量名),再追踪属性到变量的引用链;不能只在组件目录中按字符串出现次数判断。
本次两端 Tag 同步移除 15 个无消费入口:13 种预设色的 {色名}-icon-bg-hover,以及 icon-hover-size、icon-hover-bg-size。不保留兼容别名;应用中对这些旧变量的覆盖可以删除,没有对应的新变量。删除的是无效定制入口,不是已有 hover 效果。
custom-icon-bg-hover 在上一阶段暂保留(现已清理,见后文):Cedar InputTag 仍通过 icon-hover-bg mixin 引用它,因此不能按 Tag 自身未引用直接删除。该引用依赖旧 c-icon-hover DOM;当前 Tag 使用 close-btn,编译中存在引用不等于实际可见。后续应结合 InputTag 渲染结构清理或重新设计;Maple 保留同名声明以保持两端契约,在 Tag 自身没有消费效果。
该阶段的 check:token-consumers 只检查两端 Badge / Tag,包含引用链、嵌套 fallback、循环和主题多值的测试,以及当时的显式跨组件保留项(现已清理)。它会拒绝新增无消费声明,但不证明选择器在运行时可达、级联获胜或任意覆盖可见;这些仍由组件测试、主题级联和浏览器验收负责。本次减少 13 项颜色默认值约束,该阶段总数为 553;另外 2 项移除的尺寸变量此前仅登记名称。
## InputTag 旧图标引用收尾
Cedar InputTag 实际嵌入 Tag 的 close-btn,不渲染旧 c-icon-hover 伪元素。本次移除旧 mixin 导入、默认/focus 的伪元素背景规则,以及重复的自定义 Tag 文字规则(文字由 Tag 自身负责)。关闭按钮的现有外观、点击删除和 readonly / disabled 行为不变;没有新增 hover 背景效果。
同步删除两端 tag-custom-icon-bg-hover,以及 Cedar input-tag-tag-remove-icon-color-bg / input-tag-tag-remove-icon-color-bg-focus。旧变量没有替代项,业务中对此的无效覆盖可删除;不保留别名。Maple 没有 InputTag 组件,仅同步清理共享 Tag 变量。
此前的跨组件保留项已关闭。check:token-consumers 现在检查 414 项 Badge / Tag 声明且无豁免,并编译 InputTag 防止旧图标选择器/变量回流;实际 DOM、关闭交互和自定义颜色由 InputTag 集成测试验证。553 项共享默认值数量不变:本次删除的共享变量此前仅登记名称。此阶段仍不代表 InputTag 全部 Token、浏览器视觉或键盘交互已完成治理。
## InputTag 外壳与内容职责
InputTag 的 outline / filled / standard 外壳由 FieldDecorator 管理。Form 不应重新设置其背景、边框或焦点阴影;本次删除了 Form 对旧 InputTag 状态类的重绘规则,保留校验提示职责。filled 的默认/hover/focus 继续走 FieldDecorator 的 fill-1 / fill-2 / fill-3 规则。
InputTag 的内容密度、默认标签底色和禁用文字由 input-tag-* 控制。内容选择器现在匹配实际的 c-field-decorator--size-* / --focus / --disabled 类名,而非不存在的旧 InputTag 状态类;disabled 优先于 focus。五档 xs / sm / md / lg / xl 内容规则均已覆盖;xl 的标签高度为 32px、输入文字为 16px、垂直内边距为 4px。
移除 33 项没有实际 CSS 消费的旧外壳变量:size-{xs,sm,md,lg}-height;color-text-error;color-placeholder、color-icon-clear、color-icon-clear-bg-hover;color-border-{default,error,disabled}(及其 -hover / -focus);color-bg-{default,error}(及其 -hover / -focus)、color-bg-disabled(及 -hover);color-shadow-{default,error}-focus、size-shadow-{default,error}-focus;border-radius、border-width、size-icon-clear、size-icon-clear-hover。以上后缀均属于 --c-input-tag-。没有兼容别名。
迁移时按职责选择实际入口:外壳背景用 field-variant-{variant}-background 系列,圆角用 field-border-radius,占位文字用 field-placeholder-text-color,清除图标用 field-clear-icon-color / field-clear-icon-size。几何优先使用 size 属性;不要覆盖 internal 变量。旧无消费变量不存在逐项等价替代;内容标签使用下列 InputTag 自身变量。
InputTag 保留 27 项内容变量,已加入无消费检查;两端 Badge / Tag 加 Cedar InputTag 共检查 441 项声明,内容 size / focus / disabled 级联覆盖 80 组。共享默认值契约仍为 553 项;Cedar-only InputTag 不冒充跨端共享组件。默认文字、禁用文字、标签底色与焦点底色分别引用 content-primary、content-disabled、surface-default、state-hover。禁用状态只重绘中性标签,不覆盖显式 color / status;业务自定义颜色的可读性由业务负责。父级 disabled / readonly 优先于 tagProps.closable / checkable,loading 或显式不可关闭的标签也不能用 Backspace 删除。已完成 Cedar 浏览器五档布局、xl 输入与键盘删除、明暗模式以及禁用自定义色的抽验,不代表全组件视觉验收。
## 字段键盘焦点与错误状态
当前 FieldDecorator 不额外绘制外圈 outline;outline 通过 border-state 边框、filled 通过背景、standard 通过底线响应 `--focus` 或 `:focus-within`。内部清除、密码切换和数字步进按钮保留自身键盘焦点指示。只读保留聚焦,禁用和错误的颜色优先级不变;不据此宣称错误态焦点可辨识性或原生可访问性已验收。
Input、Textarea、InputNumber 的实际原生控件使用 `caret-color: currentColor`,不再由 field-focus-color/field-error-color 染色。field-focus-color、field-error-color 和 field-border-width 仍有提示、边框或按钮 outline 消费,不能因移除 caret/外偏移路径而删除 Token。实例 focus-color 控制现有支持的变体/提示通道,不承诺改变 caret;没有新变量、默认值或业务 API 变更。
检查 `node bin/field-focus-check.mjs` 与 `node --test bin/field-focus-caret.test.mjs` 核对实际 Less 产物、静态导入链、保留消费和三页生成目录;DOM 回归连接真实 Input/Textarea/InputNumber。Less/JSDOM 不替代原生键盘、焦点对比、绘制或浏览器验收。
## 声明归档与真实消费路径(2026-10-12)
组件公共默认变量统一声明在所属 `style/token.less`,实现样式只消费变量;内部状态变量仍可贴近实现。此次将 34 个实现样式文件中的 375 处公共声明归档,归档前后有效默认值与非根规则均经两端 Less 编译比对一致。不要把 CSS 归档理解为重新设计默认配色。
全量目录同时检查 `style/index.less` 和 `style/index.ts` 直接导入的 Less。共享 selection 的 presentation 样式是合法入口;忽略它会误判变量无消费者。Watermark 在运行时读取变量并用于画布,FloatingPanel、Time 时钟和 TabBar 通过实际行内样式消费变量;这些可执行路径需单独登记,不接受注释或主题赋值充当证据。
属性与变量应有明确优先级:显式属性优先,未传属性时使用对应 CSS 变量。Maple TabBar 的 `z-index` 现遵循此规则,默认视觉值仍为 `1`,属性默认值为 `undefined`。ImagePreview 的箭头 hover 变量仅在可悬停设备且箭头可用时生效。Counter 无消费的 disabled-color 已移除,禁用仍由 disabled-opacity 及实际文字/背景变量表达。
动效规则须同时约束 CSS 与 JavaScript:Maple Picker 在 reduced-motion 下立即提交选择,不等待 transitionend;偏好动态变为 reduce 时收束待提交滚动。键盘列为 listbox,当前项为 option,方向键与 Home/End 跳过禁用项;这不改变 selected-values 的附加勾选标记语义。Time 打开面板先提交输入草稿而不提前 blur,确保弹层关闭后回到原输入。
检查入口:`check:token-placement`、`check:field-focus` 和 `check:theme-contract`;完整变量名称、值、条件和消费路径以自动生成的组件变量参考为准。编译与单测不能替代跨浏览器、真机和屏幕阅读器验收。
弹层焦点根必须指向实际具有 tabindex 的面板,而不是外层遮罩容器。Maple Popup 已补齐内部焦点根标记;打开、嵌套层接管、Tab/Shift+Tab 循环及关闭后的触发器恢复均需以真实组件验收。这个内部 data 属性不是业务 CSS/API 扩展入口。
## 变量作用域、别名求值与 Teleport
同文档切换弹层宿主时,即使面板引用和 ownerDocument 不变,DOM 移动仍可能让原生焦点丢失。顶层活动模态须在迁移完成后恢复面板内焦点,并保留最初的关闭返回目标,不抢占更高弹层。验收必须读取实际 activeElement,而不是只检查挂载与颜色;同源单测和旧截图不能代替修复后的原生复验。截图格式按实际编码保存,导出像素尺寸与 CSS viewport 分开记录,不用于推断原生缩放。
2026-10-13 修复后 IAB 原生跟进:两端在 default/dark、长文本、320×640 CSS viewport 下各五次 host/inline/body 迁移,10/10 焦点包含检查通过,并验证 Tab/Shift+Tab 循环、Enter 关闭与原触发器恢复。证据独立保存在 design-ui/audits/evidence/portal-focus-2026-10-13/after.json;旧八次失败不改写。这不是 200% 原生缩放或 Safari/Firefox 通过证明。运行环境重置后应重新确认浏览器类型与当前 ID,避免将旧句柄误认成同一浏览器。
同日 14:12 有界环境复查没有新增通过:Chrome 支持接口调用仍超时,Safari/Firefox 无支持会话,Firefox 标准应用路径未找到。三套各 48 组必须等待相应支持入口恢复;历史 IAB 证据不外推。最新阻塞记录见 design-ui/audits/evidence/browser-environment-2026-10-13/recheck-1412.json。
修复前后证据采用独立截图清单,校验实际编码尺寸及 SHA-256;连接复查、夹具准备和静态规则检查不增加浏览器通过数量。后续可先推进 IAB 真实同源 iframe 与嵌套弹层键盘验收,必须记录目标文档的样式、activeElement 焦点链和滚动锁;这些仍是待执行计划,不替代外部浏览器、真机、真实 OS reduced-motion 或屏幕阅读器。详细场景见 design-ui/refactors/token-validation/browser/README.md。
更新:真实同源 iframe 批次已完成 8/8,嵌套弹层批次也已完成 8/8。每个目标 Document 必须独立加载组件 CSS 与主题;跨文档 Teleport 不复制父文档变量,也不会让父文档样式表自动进入 iframe。自定义绝对定位宿主必须建立定位、尺寸和滚动边界。父文档触发 iframe 模态时,应沿可访问同源焦点链保存最初触发器,关闭后恢复,不抢占用户已移至外部控件的焦点。跨源不可访问边界不绕过,不能外推为已验收。两端焦点修复无 API/Token 变更;最终证据见 design-ui/audits/evidence/iframe-2026-10-13/results.json。
嵌套模态按两端 × 四主题实测,分别执行子层先关、父层先关与父层单独重开:仅栈顶响应 Tab/Escape,子层关闭回到仍可见的父层触发器,最后一层关闭回到页面原始触发器。父层先关闭时不能抢占仍打开的子层焦点;子层须在打开时保存祖先 opener 链,关闭时跳过已隐藏、禁用、inert 或断开的候选,避免焦点落到 BODY。两端 modal-focus 已修复该问题,无新 API/CSS 变量。滚动锁保留至最后一个使用者退出,滚动条补偿不重复累加。本批使用默认保留挂载、同库嵌套和 body 目标;背景抑制仅证明真实键盘约束与遮罩命中,不声称屏幕阅读器隔离、跨库协调、父层 unmountOnClose 移除或跨源已通过。18 张原图及分步证据见 design-ui/audits/evidence/nested-2026-10-13/results.json;后续为 reduced-motion 规则/配色准备,真实 OS 偏好另验。
原生缩放与跨浏览器验收必须分别记录浏览器/版本、浏览器自身显示的缩放百分比、实际 DOM 挂载祖先和截图。DPR、缩窄 viewport、CSS zoom/transform 只能提供其他类型的证据,不能单独证明原生 200% 页面缩放。Safari/Firefox 需要对应产品的实际浏览器结果;连接超时、缺少安装或缺少控制入口标为环境阻塞,不作为组件失败,也不能沿用 Chromium 结果记为通过。
局部主题有两道边界:真实 DOM 祖先,以及变量的声明位置。自定义属性中的 `var()` 在继承前解析;子节点改 system 变量,不会自动重新计算从根节点继承的组件别名。[CSS 变量规范](https://www.w3.org/TR/css-variables-1/#cycles)
| 场景 | 正确入口 |
| --- | --- |
| 全局切换主题 | 在文档根作用域通过本库 StyleProvider 全局方法切换;根层依赖链一起重算 |
| 定制局部组件 | 覆盖实际消费的公开 component 变量;只改 palette/system 不等于完整的局部主题重建 |
| 局部 system 到 component 映射 | 在同一局部宿主显式重新声明需要的组件别名,不依赖根层旧映射 |
| Teleport 到 body | 继承 body/html;触发器、调用处 Provider 的局部变量不自动复制过去 |
| 指定 popup-container | 宿主必须已经存在;变量放在目标宿主或真正面板上 |
| popup-container=false | 保留调用位置的 DOM 继承;同时承担祖先 overflow、transform、定位和层叠的约束 |
| iframe 宿主元素 | 允许来自另一文档的 HTMLElement;对方文档必须自行加载样式并提供变量,字符串选择器只查调用方文档 |
从自定义宿主经 inline 切回 body 时,必须真正迁出旧宿主,恢复 body/html 的变量继承;“仍属于 body 的后代”不是有效断言,因为旧宿主也可能位于 body 内。打开中切换和关闭后重新打开都遵守此规则。inline 状态的滚动锁按实际面板文档的 body 归属,不沿用之前的宿主锁。
浮层尺寸以实际包含块为边界;`100vw` 可能包含页面滚动条宽度,不能用它替代容器可用宽度。Cedar Drawer 对显式宽度保留 `max-width: 100%` 上限,这是结构约束,不是新增设计 Token。长内容允许面板内部滚动;任意业务插槽的断词、字号与前景/背景配对仍由业务显式设计。
例如同一页面的 Cedar Drawer 与 Maple Popup 可以共享一个真实宿主,但各自覆盖本库变量,不能依赖另一端前缀:
```css
.portal-theme {
--c-drawer-bg: #182230;
--c-drawer-header-text-color: #f8f9fc;
--c-drawer-content-text-color: #f8f9fc;
--mp-popup-content-background-color: #182230;
--mp-popup-content-text-color: #f8f9fc;
}
```
若需要联动局部 system 色,在该宿主同时声明对应组件变量,例如 `--mp-popup-content-background-color: var(--mp-sys-color-surface-raised)`;只在宿主设置 surface-raised 不足以重算根上已经声明的别名。面板与遮罩是兄弟节点,面板变量不会向上或横向传给遮罩;共同覆盖放在共同宿主,或分别使用各组件现有的面板/overlay 样式属性。
不自动复制触发器 computed style、不批量重写 root 默认值,也不为另一端不存在的组件制造变量。本条明确现有定制范围,不新增 Token、不承诺局部 StyleProvider 会自动重建全部主题依赖链。自定义前景和背景需配对检查,本文的示例不是任意插槽配色保证。
`check:portal-scope` 使用真实 Teleport,检查 body/选择器/元素/inline 挂载、宿主切换后的实例状态、旧宿主滚动锁释放、跨文档参数与事件归属及卸载清理。DOM 和生命周期测试不计算浏览器像素;CSS 检查器验证局部覆盖时不能把根层的原始别名表达式带到子节点后重新求值。窄屏、200% 浏览器缩放、长文本、跨文档焦点和浏览器实际继承仍需独立实测。
打开中的模态面板跨文档切换挂载目标时,事件监听、焦点约束、弹层栈和滚动锁必须随实际目标迁移;同一 DOM 被 adopt 后 ownerDocument 会变化,但 Vue 元素引用可能不变,内部逻辑不得仅依赖该引用触发重绑。迁回原文档和卸载都要清理旧监听。此契约不增加公开 CSS 变量,真实 iframe 焦点与样式仍需浏览器验收。
---
Document: llms/zh-CN/guide/empty-values.md
# 空值识别、清空输出与阅读空文案
## 先判断你要解决什么问题
| 需求 | 使用的属性 | 示例 |
| ------------------------------------------------ | -------------------------- | -------------------- |
| 点击清空后提交 null、-1 或组件允许的其他值 | empty-value / emptyValue | 清空按钮与手动删空 |
| 接口返回 -1 时,界面应显示“未选择”并无法通过必填 | empty-values / emptyValues | 空值标记与必填校验 |
| 空字符串代表合法的“全部”选项 | empty-values 排除空字符串 | 合法空字符串选项 |
| 阅读模式为空时显示 '-' 或“暂无” | empty-text / emptyText | 阅读空文案与配置继承 |
三个属性各有职责,不互相推导。emptyValue 只决定一次清空动作的输出;emptyValues 只声明空值身份;emptyText 只提供展示文案。配置与阅读展示不回写模型,不改变受控判断。
## 按场景理解
### 清空按钮与手动删空
在输入框中点击清空图标,模型变为 null;点击“恢复初值”后用 Backspace 删光,模型为 `''`。下方模型输出用引号区分空字符串与 null。
Example source: src/input/__demos__/empty-value.vue
```vue
点击清空图标得到 null;用 Backspace 删光得到空字符串。
恢复初值
当前模型: {{ JSON.stringify(model.text) }}
```
手动输入是普通输入事件,不会自动调用 emptyValue。Form reset 则恢复记录的初始值,也不是用户清空。详见 [Input 的值模型与交互](llms/zh-CN/components/input.md)。
### 合法空字符串选项
“全部”的 value 是 `''`,仍应显示为已选。此时 emptyValues 使用 `[null, undefined]`;清空输出独立配置为 null。点击清空,再点击“选择全部”,比较两种模型值。
Example source: src/select/__demos__/empty-value.vue
```vue
“全部”的值是空字符串,仍是有效选项;点击清空返回 null。
选择“全部”
当前模型: {{ JSON.stringify(model.status) }}
{{ JSON.stringify(multiple) }}
{{ String(optional) }}
```
Select 默认保留合法空字符串选项。显式配置便于让字段和表单必填使用同一规则;删除选择器的搜索词只改变查询,不删除已选值。详见 [Select 的值模型与联动](llms/zh-CN/components/select.md)。
### 空值标记与有效的 0
接口用 -1 表示未填写时,将它加入 emptyValues;需要清空也返回 -1 时,再配置 emptyValue=-1。初始界面空白,但下方模型仍为 -1。点击“设为 0”,应显示有效数字 0;清空后再回到 -1。
Example source: src/input-number/__demos__/empty-value.vue
```vue
-1 表示未填写,输入框显示空白;0 仍显示为有效数字。清空返回 -1。
设为 0
设为 -1
当前模型: {{ String(model.quantity) }}
此字段清空后恢复为 0,0 仍是有效值,不会显示为空。
{{ String(restored) }}
```
0 和 false 默认都不是空值。不要用 `!value` 一次性判断它们。InputNumber 手动删光后的提交仍遵循数值解析规则,可能输出 undefined,不自动套用按钮的清空输出。详见 [InputNumber 的数值输入与格式](llms/zh-CN/components/input-number.md)。
### 接口空标记与必填校验
本例在 Form 设置 `[null, undefined, -1]`,供字段继承;Select 单独设置清空输出 -1。先校验初始值,再选择部门并校验;清空后再次校验会失败。
Example source: src/form/__demos__/empty-values-validation.vue
```vue
先校验初始 -1,再选择部门并校验;点击清空后会回到 -1。
校验
{{ result }}
当前模型: {{ String(model.department) }}
```
只有 emptyValue=-1,不能声明 -1 为空;只有 emptyValues 包含 -1,也不会改变原有清空输出。required 在主动校验或既有触发时机运行,不会因为页面显示空白就自动运行。详见 [Form 的校验与提交](llms/zh-CN/components/form.md)。
### 阅读空文案与配置继承
初始阅读模式下,姓名继承 Form 的默认 `'-'`,编号使用 FormItem 的“未分配”,昵称使用字段的“匿名”,数量保持 0。点击“使用暂无”,只有继承 Form 的空字段改变文案;再切换阅读/编辑,观察下方模型保持原值。
Example source: src/form/__demos__/empty-text.vue
```vue
初始阅读模式:姓名显示“-”,编号和昵称使用各自覆盖;数量 0 仍显示 0。
切换阅读/编辑
使用“暂无”
使用默认“-”
当前模型: {{ JSON.stringify(model) }}
```
优先级为 **字段 > FormItem > Form > '-'**。显式 emptyText=`''` 表示空白;自定义 read 插槽始终优先。emptyText 不等于输入框 placeholder,也不会作为校验值或提交数据。详见 [Form 的字段呈现与交互](llms/zh-CN/components/form.md)。
## 配置规则与边界
### emptyValues:识别当前模型是否为空
字段配置覆盖 FormItem,FormItem 覆盖 Form;列表完整替换,不合并。未配置时采用组件族默认:字符串识别 null/undefined/空字符串,Select 和数值字段保留各自的 nullish 默认。
标量用 includes 比较,0/false 默认有效;对象按引用识别,不做任意深比较。空数组始终是空集合,非空 `[null]` 不自动算空。显式 emptyValues=[] 可以移除额外标量空标记,但不能把空集合变成有选中项。
固定状态控件(Switch、Checkbox、Radio、Slider、Rate)与 Upload 在阅读和必填判断中使用策略,不因此重写 checked、数值范围或文件传输逻辑。非法日期、未完成的数字草稿仍由领域规则处理。
### emptyValue:清空动作产生什么值
省略时保留组件原有默认返回;具体允许的类型见组件 API。Input 当前支持字符串/null 及其工厂;对于支持 undefined 输出的 InputNumber、日期时间字段等,使用 `:empty-value="() => undefined"` 显式输出 undefined,直接绑定 undefined 仍表示未指定覆盖。
工厂在实际清空动作中求值,不在初始化、阅读或校验时执行。数组按原有解析规则生成独立结果。emptyValue 不会自动加入 emptyValues:例如清空恢复到 0 时,0 可以仍是有效值。
部分共享弹层在未配置 emptyValue 时会恢复 defaultValue;清空先修改草稿,确认后提交,取消则不提交。按钮清空、手动删空、移除最后一项和 reset 的差异按各组件既有规则执行。
### 必填与自定义规则
显式配置 emptyValues 后,内置 required 使用主字段策略。未显式配置时保留两库已有校验行为,不假定 Cedar 的 b-validate 与 Maple 的函数/Zod 在所有边界值上完全一致。
自定义 validator、Zod、min/max、enum 继续收到原始值。UI 识别 -1 为空,并不代表 `number().positive()` 会接受它;业务 schema 必须自己规定可缺省值。识别为空也不等于所有业务约束合法。
false 默认有效,因此“必填”不等于“必须勾选同意”。协议字段可显式将 false 标为空,或用自定义规则要求 true。一个 FormItem 建议对应一个主字段;多个独立值应拆成多个 FormItem。
### 与受控判断的关系
受控身份与业务空值是两件事。添加 -1 到 emptyValues 不会使外部绑定失去受控身份;移除 undefined 也不会改变组件既有的所有权判断。不要把内部所有 undefined 判断都替换为 isEmpty:模型所有权、数值解析失败、非法日期和业务空标记各有含义。
## 与 Element Plus 的对应关系
本设计借鉴 [Element Plus 空值配置](https://element-plus.org/zh-CN/component/config-provider.html#empty-values-configurations)和 [useEmptyValues](https://github.com/element-plus/element-plus/blob/dev/packages/hooks/use-empty-values/index.ts)的职责拆分。emptyValue 对应 valueOnClear,保留现有名称,不增加同义属性。
继承范围采用 Form/FormItem,工厂在清空动作时求值;保留组件族默认输出与空集合规则,没有照搬它的数组深比较、清空输出警告或 ConfigProvider 实现。
---
Document: llms/zh-CN/guide/i18n.md
## 国际化
默认中文,其他语言设置如下:
```typescript
import { addI18nMessages, useLocale } from '@cedar-design/ui'
if (Env.getLanguage() !== 'zh-CN') {
addI18nMessages({
[Env.getLanguage()]: require('@cedar-design/ui/es/locale/lang/en-us').default,
})
useLocale(Env.getLanguage())
}
```
---
Document: llms/zh-CN/guide/llms.md
# LLM 文档
Cedar Design Web 提供面向大语言模型(LLM)的纯文本与 Markdown 文档,包含指南、组件 API 和 Vue 示例源码。将在线地址交给 AI 编码助手,即可在编写代码前查阅相关文档。
## 在线文档
无需下载,支持读取网页的 AI 助手可以直接访问以下地址。**推荐从文档索引开始,按需读取相关组件。**
| 文档 | 在线地址 | 适用场景 |
| --- | --- | --- |
| 文档索引 | [https://cedar.show/llms.txt](https://cedar.show/llms.txt) | 查找指南和组件的单页 Markdown,推荐优先使用 |
| 完整文档 | [https://cedar.show/llms-full.txt](https://cedar.show/llms-full.txt) | 一次读取全部文档与示例,适合上下文容量充足的工具 |
索引中的每个组件都有独立的 Markdown 地址,可以直接打开、交给助手读取,或保存到本地。
## 在 AI 助手中使用
### 直接提供文档地址
复制下面的提示词,在末尾补充你的需求:
```text
请使用 Cedar Design Web 和 Vue 3 实现我的需求。
先读取官方文档索引:https://cedar.show/llms.txt
再根据任务读取快速开始和相关组件的单页文档,核对安装、引入与样式配置。
严格按照文档中的 props、事件、插槽和示例编写代码。
如果文档没有说明某个 API,请明确指出,不要猜测。
我的需求:
```
### 添加为项目参考资料
如果你的编码助手支持配置文档来源,可以添加上面的在线索引地址,并在项目说明中注明:使用 `@cedar-design/ui` 时先查阅官方文档。
如果工具无法访问网页,可打开在线文件,将所需内容保存为 `.txt` 或 `.md` 后作为附件提供。全文文件较大,可能超过工具的读取限制;通常读取索引和任务相关的单页文档即可。
## 按语言选择
| 语言 | 文档索引 | 完整文档 |
| --- | --- | --- |
| 中文 | [https://cedar.show/llms.zh-CN.txt](https://cedar.show/llms.zh-CN.txt) | [https://cedar.show/llms-full.zh-CN.txt](https://cedar.show/llms-full.zh-CN.txt) |
| English | [https://cedar.show/llms.en-US.txt](https://cedar.show/llms.en-US.txt) | [https://cedar.show/llms-full.en-US.txt](https://cedar.show/llms-full.en-US.txt) |
各语言文件只收录已有的对应语言文档,未翻译的页面不会自动转换为英文。需要查阅全部页面时,请使用上方的综合索引。
## 内容与更新
文本文件从指南与组件文档自动生成,保留 API 表格,并将 Demo 引用展开为 Vue 源码。示例中的相对模块导入仍以标注的源码路径为基准。
每次构建文档站点时重新生成,并与站点一起发布。使用时请核对文档与项目中安装的组件库版本。
---
Document: llms/zh-CN/guide/questions.md
## 常见问题
---
Document: llms/zh-CN/guide/quickstart.md
# 快速开始
## 安装
```shell
# npm
npm i @cedar-design/ui @cedar-design/icons-vue
# pnpm
pnpm add @cedar-design/ui @cedar-design/icons-vue
```
## 自动按需引入(推荐)
Cedar 提供内部维护的 `@cedar-design/resolver`。配合 `unplugin-vue-components`,模板中使用到的组件、独立 SVG 图标、指令及组件样式会在编译时自动按需引入。
```shell
npm i @cedar-design/resolver unplugin-auto-import unplugin-vue-components -D
```
### Vite
```ts
// vite.config.ts
import vue from "@vitejs/plugin-vue";
import AutoImport from "unplugin-auto-import/vite";
import Components from "unplugin-vue-components/vite";
import { CedarResolver } from "@cedar-design/resolver";
import { defineConfig } from "vite";
export default defineConfig({
plugins: [
vue(),
AutoImport({
resolvers: [CedarResolver()],
}),
Components({
resolvers: [CedarResolver()],
}),
],
});
```
配置后可直接使用,无需在组件中手动导入:
```vue
确认
```
Resolver 会分别生成:
```ts
import { Button, Icon } from "@cedar-design/ui";
import { IconCheckCircleFill } from "@cedar-design/icons-vue/icon-check-circle-fill";
import "@cedar-design/ui/button/style";
import "@cedar-design/ui/icon/style";
```
独立 SVG 图标通过 `currentColor` 继承容器颜色,因此图标子包不需要额外 CSS;`c-icon` 容器自身需要加载 `@cedar-design/ui/icon/style`。
### 动态名称与显式注册
` ` 只查询显式注册到 Vue 应用的图标,组件内部不会导入图标全集。建议只注册动态场景需要的图标:
```ts
// main.ts
import { createApp } from "vue";
import { IconCheckCircleFill, IconWarning } from "@cedar-design/icons-vue";
import App from "./App.vue";
const app = createApp(App);
app.component("IconCheckCircleFill", IconCheckCircleFill);
app.component("IconWarning", IconWarning);
app.mount("#app");
```
如果业务需要通过任意名称使用全部图标,也可以主动批量注册;这种写法会加载完整图标集合:
```ts
import * as CedarIconsVue from "@cedar-design/icons-vue";
for (const [name, component] of Object.entries(CedarIconsVue)) {
if (name.startsWith("Icon")) app.component(name, component);
}
```
### 直接使用 SVG 图标
`@cedar-design/icons-vue` 中的每个 SVG 图标都是独立的 Vue 组件,也可以不使用 `c-icon` 容器直接渲染:
```vue
```
这里的“布局属性”是指 `width`、`height`、`margin` 等业务样式;图标组件自身仍支持 `size`、`color`、`rotate` 和 `spin`。直接使用同样支持 Tree Shaking。需要统一控制布局、尺寸、颜色、旋转或交互区域时,推荐再使用 `c-icon` 包裹。
### 自动引入函数 API
上面的同一个 `CedarResolver()` 也会为 `unplugin-auto-import` 解析 `Message`、`Dialog`、`Notification` 等函数 API:
```ts
Message.success("保存成功");
```
`importStyle` 会统一控制模板组件、Icon 容器和函数 API 的样式导入。只有明确不希望解析函数 API 时,才需要设置 `CedarResolver({ autoImport: false })`。
### 自动引入指令
同一个 `CedarResolver()` 支持 `v-c-loading` 和 `v-tooltip`,无需配置第二个 Resolver。加载指令使用 `c-` 前缀,避免与其他组件库的同名指令冲突。可通过 `CedarResolver({ directives: false })` 关闭。
## 手动按需引入
不使用自动导入插件时,可手动导入组件、图标和组件样式:
```vue
确认
```
## 完整引入
完整引入会注册全部 Cedar UI 组件和指令,并加载全部样式,适合原型或对包体积不敏感的项目:
```ts
import { createApp } from "vue";
import Cedar from "@cedar-design/ui";
import "@cedar-design/ui/style";
import App from "./App.vue";
createApp(App).use(Cedar).mount("#app");
```
独立 SVG 图标不会随 UI 包全部注册;请继续显式导入,或使用 `CedarResolver()` 自动按需引入。
## 全局设置组件默认值
每个组件都提供 `setPropsDefaults`,用于统一修改之后创建的声明式组件默认值。请在应用挂载前调用:
```ts
import { Button, StyleProvider } from "@cedar-design/ui";
Button.setPropsDefaults({
status: "primary",
variant: "tonal",
size: "lg",
});
// 其他组件使用相同方式
StyleProvider.setPropsDefaults({
tag: "section",
});
```
组件上显式传入的属性优先级更高。设置不会追溯更新已经挂载的实例;对象和数组默认值会按实例创建副本。
## TypeScript 配置
确保自动生成的声明文件被 TypeScript 包含:
```json
{
"include": ["src", "components.d.ts", "auto-imports.d.ts"]
}
```
## 样式控制
Resolver 默认自动引入组件样式。如项目已完整引入 Cedar 样式,可关闭重复的按需样式:
```ts
CedarResolver({ importStyle: false });
```
---
Document: llms/zh-CN/guide/roadmap.md
# Roadmap
本文档记录 Cedar Design Web 相对成熟组件库的补齐节奏,并与 Maple Design Mobile 公共 API 对齐。
## 当前阶段:P0(立刻)
| 项 | 状态 | 说明 |
| -------------------------- | ------ | -------------------------------------------------------------------------------- |
| 公开 Roadmap | ✅ | 本文档 |
| 一等 Dark Theme | ✅ | `Themes` + `StyleProvider` / `ConfigProvider` + [主题定制](llms/zh-CN/themes.md) |
| 样式按需引入 | ✅ | Resolver 默认引入 CSS;组件样式与基础主题拆分 |
| Segmented | ✅ | [Segmented](llms/zh-CN/components/segmented.md) |
| Menu | ✅ | [Menu 下拉命令菜单](llms/zh-CN/components/menu.md)(Trigger + MenuOption) |
| Tour | 待开始 | 新手引导 |
| VirtualList / Table 虚拟化 | 待开始 | 公开虚拟列表能力 |
| a11y 落地 | 待开始 | 组件文档可访问性章节 + 键盘/ARIA 测试 |
## 下一波:P1
- QRCode、FloatButton、Comment(验证码输入已由 VerificationCode 覆盖,不另建 InputOTP)
- SSR 使用文档、VSCode / web-types
- Playground
## 可择机:P2
- CheckTag、DynamicTags
- 更多 i18n 语言包
- Theme Editor、截图视觉回归
## 与 Maple 的关系
公共 API(如 `variant` / `size` / `Segmented` 选项结构)以 **Cedar(PC)为准**,Maple 同步对齐。跨端破坏性变更走 OpenSpec。
## 不做硬跟的部分
Naive Heatmap / Equation、Vant 电商套件等差异化组件,按业务需要再评估,不进入默认 Roadmap。
---
Document: llms/zh-CN/guide/theme.md
# 主题定制
文档已迁移至 [主题定制 /themes](llms/zh-CN/themes.md)。
Cedar 与 Maple 对齐:
- `import { StyleProvider, Themes } from '@cedar-design/ui'`
- `StyleProvider.setStyleVars(Themes.default.dark)` 使用默认青绿色暗色主题
- `StyleProvider.setStyleVars(Themes.maple.light)` 使用枫叶亮色主题
- 两套主题都提供 `light` / `dark`
- 亦可用 `ConfigProvider` 的 `theme` 或直接改 DOM 属性
---
Document: llms/zh-CN/practices.md
# 最佳实践
Example source: docs/practices/__demos__/overview.vue
```vue
{{ savedDraft ? "有未提交草稿" : "没有未提交草稿" }} {{
savedDraft ? "继续填写草稿" : "创建第一份申请"
}} 以项目协作为同一业务背景,演示真实的查询、校验、取消、提交和恢复。所有页面共享项目台账与操作记录,刷新保留会话数据,归档可恢复。 打开{{ page.title }}
```
参考页面的信息分组与操作流程,界面全部由本库组件实现,不引入 Ant Design、Arco 或 TDesign 的组件和样式。
参考:[Ant Design 表单页面设计](https://ant.design/docs/spec/research-form/) · [Arco Design Pro](https://github.com/arco-design/arco-design-pro) · [TDesign Starter](https://tdesign.tencent.com/starter)。
---
Document: llms/zh-CN/practices/card.md
# 项目卡片页
收藏、组合筛选、项目计划和快速编辑。
## 完整业务体验
收藏项目,勾选“仅看收藏”并查询;进入完整详情后修改负责人或执行计划,再返回卡片或列表核对结果。
Example source: docs/practices/__demos__/card/basic.vue
```vue
快速新建 工作台 项目列表 卡片视图 创建申请 本地演示工作区 ·
各页面共享数据,刷新保留本次会话。归档可恢复,重置会还原整个工作区。 查看已归档项目 仅看收藏 查询项目 清空筛选 共 {{ filtered.length }} 个项目 · 已收藏
{{ favorites.length }} 个 {{
row.status
}} {{
row.description
}} 截止 {{ row.dueDate || "待安排" }} · 预算
{{ money(row.budget) }} 元 进入项目 {{
favorites.includes(row.key) ? "取消收藏" : "收藏项目"
}} 编辑资料 恢复项目 {{
notice
}} {{
editingKey ? "保存项目" : "创建项目"
}} 取消 {{
notice
}}
```
## 实现与边界
页面的布局、字段、表格、卡片、弹层、反馈和分页全部使用 Cedar 自有组件。六类页面共享本地项目工作区;刷新保留本次浏览器会话的数据,归档可恢复,重置还原整个工作区。数据模型与行为在 `__demos__/shared/usePracticeData.js` 中,页面可按自身业务接入接口。
示例使用合成数据,不访问业务后端,不模拟服务端权限。CSV 导出只包含本地当前查询结果。
参考信息组织:[Ant Design 表单页面](https://ant.design/docs/spec/research-form/) · [Arco Design Pro](https://github.com/arco-design/arco-design-pro) · [TDesign Starter](https://tdesign.tencent.com/starter)。全部界面使用本库组件组合。
[最佳实践入口](llms/zh-CN/practices.md) · [特色与场景](llms/zh-CN/showcase.md)
---
Document: llms/zh-CN/practices/dashboard.md
# 团队工作台
按类型汇总项目指标、预算、待办与最近动态。
## 完整业务体验
选择业务范围,处理待办中的项目;再进入列表或详情,核对同一个项目的状态。创建、编辑、归档和跟进都会进入最近动态。
Example source: docs/practices/__demos__/dashboard/basic.vue
```vue
重置工作区 工作台 项目列表 卡片视图 创建申请 本地演示工作区 ·
各页面共享数据,刷新保留本次会话。归档可恢复,重置会还原整个工作区。 处理项目 完成交付 {{ item.label }} ·
{{
projects.filter(
(row) =>
row.category === item.value && row.status === "已完成",
).length
}}
/
{{
projects.filter((row) => row.category === item.value).length
}}
已完成 {{ timeLabel(event.at) }} ·
{{ event.text }} {{
notice
}}
```
## 实现与边界
页面的布局、字段、表格、卡片、弹层、反馈和分页全部使用 Cedar 自有组件。六类页面共享本地项目工作区;刷新保留本次浏览器会话的数据,归档可恢复,重置还原整个工作区。数据模型与行为在 `__demos__/shared/usePracticeData.js` 中,页面可按自身业务接入接口。
示例使用合成数据,不访问业务后端,不模拟服务端权限。CSV 导出只包含本地当前查询结果。
参考信息组织:[Ant Design 表单页面](https://ant.design/docs/spec/research-form/) · [Arco Design Pro](https://github.com/arco-design/arco-design-pro) · [TDesign Starter](https://tdesign.tencent.com/starter)。全部界面使用本库组件组合。
[最佳实践入口](llms/zh-CN/practices.md) · [特色与场景](llms/zh-CN/showcase.md)
---
Document: llms/zh-CN/practices/description.md
# 详情信息组织
详情页面按“对象身份与主要操作 → 流程进度 → 基本信息 → 操作记录”组织。使用自有 PageHeader、Steps、Tabs、Descriptions 和 Card。
Example source: docs/practices/__demos__/detail/basic.vue
```vue
返回项目列表 编辑项目 完成交付 恢复项目 归档项目 工作台 项目列表 卡片视图 创建申请 {{
project.archived ? "已归档" : project.status
}} 项目创建 执行交付 交付完成 workspace.toggleTask(project, task.key, checked)
"
>{{ task.title }} {{ timeLabel(event.at) }} ·
{{ event.text }} 添加跟进 {{
notice
}} {{
editingKey ? "保存项目" : "创建项目"
}} 取消 {{
notice
}} 将归档所选项目。项目、任务和操作记录会保留,可在“已归档”筛选中恢复。 确认归档 取消归档
```
[业务详情页](llms/zh-CN/practices/detail.md) · [最佳实践总览](llms/zh-CN/practices.md)
---
Document: llms/zh-CN/practices/detail.md
# 业务详情页
动态项目资料、任务清单、交付进度、跟进、操作记录与归档。
## 完整业务体验
从列表或卡片进入一个具体项目;编辑资料后取消,确认原值未变;保存编辑、完成任务并添加跟进,再到工作台查看操作动态。
Example source: docs/practices/__demos__/detail/basic.vue
```vue
返回项目列表 编辑项目 完成交付 恢复项目 归档项目 工作台 项目列表 卡片视图 创建申请 {{
project.archived ? "已归档" : project.status
}} 项目创建 执行交付 交付完成 workspace.toggleTask(project, task.key, checked)
"
>{{ task.title }} {{ timeLabel(event.at) }} ·
{{ event.text }} 添加跟进 {{
notice
}} {{
editingKey ? "保存项目" : "创建项目"
}} 取消 {{
notice
}} 将归档所选项目。项目、任务和操作记录会保留,可在“已归档”筛选中恢复。 确认归档 取消归档
```
## 实现与边界
页面的布局、字段、表格、卡片、弹层、反馈和分页全部使用 Cedar 自有组件。六类页面共享本地项目工作区;刷新保留本次浏览器会话的数据,归档可恢复,重置还原整个工作区。数据模型与行为在 `__demos__/shared/usePracticeData.js` 中,页面可按自身业务接入接口。
示例使用合成数据,不访问业务后端,不模拟服务端权限。CSV 导出只包含本地当前查询结果。
参考信息组织:[Ant Design 表单页面](https://ant.design/docs/spec/research-form/) · [Arco Design Pro](https://github.com/arco-design/arco-design-pro) · [TDesign Starter](https://tdesign.tencent.com/starter)。全部界面使用本库组件组合。
[最佳实践入口](llms/zh-CN/practices.md) · [特色与场景](llms/zh-CN/showcase.md)
---
Document: llms/zh-CN/practices/form.md
# 分步表单页
基础资料、计划预算、核对提交、办理结果四阶段。
## 完整业务体验
先提交空资料查看校验;填写名称和负责人,设置计划与预算。保存草稿后离开并回来恢复;确认页模拟失败并重试,成功后点击“查看项目详情”。新项目同时进入列表、卡片和工作台。
Example source: docs/practices/__demos__/form/basic.vue
```vue
清空当前表单 工作台 项目列表 卡片视图 创建申请 基础资料 计划预算 核对提交 办理完成 下一步:计划预算 保存草稿 恢复草稿 下一步:核对提交 上一步 保存草稿 项目:{{ draft.name }} · 负责人:{{
draft.owner
}} 类型:{{ draft.category }} · 优先级:{{ draft.priority }} · 预算:{{
money(draft.budget)
}}
元 执行计划:{{ draft.startDate || "待安排" }} 至
{{ draft.dueDate || "待安排" }} 项目说明:{{ draft.description || "未填写" }} 模拟本次提交失败 {{
formMessage.includes("失败") ? "重试提交" : "确认创建项目"
}} 返回修改 查看项目详情 返回项目列表 继续创建 {{
formMessage
}}
```
## 实现与边界
页面的布局、字段、表格、卡片、弹层、反馈和分页全部使用 Cedar 自有组件。六类页面共享本地项目工作区;刷新保留本次浏览器会话的数据,归档可恢复,重置还原整个工作区。数据模型与行为在 `__demos__/shared/usePracticeData.js` 中,页面可按自身业务接入接口。
示例使用合成数据,不访问业务后端,不模拟服务端权限。CSV 导出只包含本地当前查询结果。
参考信息组织:[Ant Design 表单页面](https://ant.design/docs/spec/research-form/) · [Arco Design Pro](https://github.com/arco-design/arco-design-pro) · [TDesign Starter](https://tdesign.tencent.com/starter)。全部界面使用本库组件组合。
[最佳实践入口](llms/zh-CN/practices.md) · [特色与场景](llms/zh-CN/showcase.md)
---
Document: llms/zh-CN/practices/list.md
# 查询列表页
组合筛选、分页、编辑、交付、批量归档、恢复与 CSV 导出。
## 完整业务体验
按关键词、类型和状态组合查询;编辑项目后查看详情;归档所选项目,再勾选“查看已归档项目”并查询,恢复记录。导出的是当前筛选结果。
Example source: docs/practices/__demos__/list/basic.vue
```vue
导出查询结果 重置工作区 快速新建 工作台 项目列表 卡片视图 创建申请 本地演示工作区 ·
各页面共享数据,刷新保留本次会话。归档可恢复,重置会还原整个工作区。 查看已归档项目 仅看收藏 查询项目 清空筛选 交付选中({{ selected.length }}) 归档选中 {{ record.name }} {{ record.key }} · {{ record.category }} {{ record.status }} {{ money(record.budget) }} 元 详情 编辑 交付 恢复 归档 {{
notice
}} {{
editingKey ? "保存项目" : "创建项目"
}} 取消 {{
notice
}} 将归档所选项目。项目、任务和操作记录会保留,可在“已归档”筛选中恢复。 确认归档 取消归档
```
## 实现与边界
页面的布局、字段、表格、卡片、弹层、反馈和分页全部使用 Cedar 自有组件。六类页面共享本地项目工作区;刷新保留本次浏览器会话的数据,归档可恢复,重置还原整个工作区。数据模型与行为在 `__demos__/shared/usePracticeData.js` 中,页面可按自身业务接入接口。
示例使用合成数据,不访问业务后端,不模拟服务端权限。CSV 导出只包含本地当前查询结果。
参考信息组织:[Ant Design 表单页面](https://ant.design/docs/spec/research-form/) · [Arco Design Pro](https://github.com/arco-design/arco-design-pro) · [TDesign Starter](https://tdesign.tencent.com/starter)。全部界面使用本库组件组合。
[最佳实践入口](llms/zh-CN/practices.md) · [特色与场景](llms/zh-CN/showcase.md)
---
Document: llms/zh-CN/practices/result.md
# 结果与异常页
结合最新项目记录提供成功反馈、异常恢复与下一步。
## 完整业务体验
体验服务失败重试、空状态创建申请和项目详情返回;办理成功时可以打开最近创建的真实本地项目。结果类型只用于本地演示,不调用真实业务后端。
Example source: docs/practices/__demos__/result/basic.vue
```vue
工作台 项目列表 卡片视图 创建申请 {{
state === "500"
? "重试处理"
: state === "empty"
? "创建项目申请"
: "返回项目列表"
}} 查看最新项目 返回工作台 {{
notice
}}
```
## 实现与边界
页面的布局、字段、表格、卡片、弹层、反馈和分页全部使用 Cedar 自有组件。六类页面共享本地项目工作区;刷新保留本次浏览器会话的数据,归档可恢复,重置还原整个工作区。数据模型与行为在 `__demos__/shared/usePracticeData.js` 中,页面可按自身业务接入接口。
示例使用合成数据,不访问业务后端,不模拟服务端权限。CSV 导出只包含本地当前查询结果。
参考信息组织:[Ant Design 表单页面](https://ant.design/docs/spec/research-form/) · [Arco Design Pro](https://github.com/arco-design/arco-design-pro) · [TDesign Starter](https://tdesign.tencent.com/starter)。全部界面使用本库组件组合。
[最佳实践入口](llms/zh-CN/practices.md) · [特色与场景](llms/zh-CN/showcase.md)
---
Document: llms/zh-CN/practices/utility-spec.md
# Utility 工具类规范(Cedar / Maple 共用)
两端 **语义与结构一致**,类名与变量均带库前缀,避免混用撞名:
| | Cedar | Maple |
|---|---|---|
| 类名前缀 | `c-`(如 `c-text-1`、`c-mt-16`) | `mp-`(如 `mp-text-1`、`mp-mt-16`) |
| CSS 变量 | `--c-*` | `--mp-*` |
**不做无前缀别名,不做向后兼容。**
## 交付方式
| | Cedar | Maple |
|---|---|---|
| 原子化 CSS preset | `@cedar-design/preset-unocss` / `@cedar-design/preset-tailwindcss` | `@maple-design/preset-unocss` / `@maple-design/preset-tailwindcss` |
| 暗色 | 只改 token,类名不变 | 同左 |
## 标准集合
下列以 Cedar(`c-`)举例;Maple 将前缀换成 `mp-` 即可。
### Color(语义)
| 类名 | 作用 |
|---|---|
| `c-text-1` … `c-text-4` | 文字层级 |
| `c-fill-1` … `c-fill-4` | 填充 |
| `c-color-border-1` … `c-color-border-4` | 边框色(与变量同名,避免和原子化 `c-border-*` 宽度类撞名) |
| `c-bg-0` / `c-bg-1` / `c-bg-2` | 背景层级 |
底层:`rgb(var(--{p}-primary-6))`、`var(--{p}-color-text-1)` 等。完整色阶原子不进默认工具包,见 Palette。
### Spacing / Size
间距与宽高仅由 Uno / Tailwind preset 按具体数值生成,不再提供语义档固定类。
`c-mt-16`(16px)、`c-h-10`(10px)、`c-w-full`(100%);Maple 将前缀换成 `mp-`。
日常分类见 [常用写法](llms/zh-CN/components/style/atomic-usage.md)。
### 布局 / 圆角 / 阴影 / 海拔
- Flex / Display / Position:`c-flex`、`c-justify-*`、`c-relative` 等
- Overflow:`c-overflow-hidden`、`c-truncate`、`c-line-clamp-2` 等,由原子化 preset 生成
- Radius:`c-rounded-*`(含 `xl`)→ `--{p}-rounded-*`
- Elevation:`c-elevation--0` … `--24`(Maple:`mp-elevation--*`,独立 CSS)
## 平台差异(侧栏目录一致)
| 项 | Cedar | Maple |
|---|---|---|
| Typography 工具包 | 有(PC) | 无;用 token / 原子化 |
| 原子化 CSS preset | `@cedar-design/preset-unocss` / `@cedar-design/preset-tailwindcss` | `@maple-design/preset-unocss` / `@maple-design/preset-tailwindcss` |
## 禁止
- 无前缀工具类(`text-1`、`mt-4`、`flex`)与无前缀变量(`--brand-6`)
- 固定 Utilities 内重复实现间距原子
- 默认包内完整色板原子类
- Maple 再复制进全量组件 CSS(utilities 保持独立入口)
---
Document: llms/zh-CN/showcase.md
---
Document: llms/zh-CN/showcase/async-selection.md
# 异步数据选择
业务数据经常只保存 ID,而界面需要展示名称、搜索候选和处理加载状态。人员选择将候选 request 与已选人员 resolve 分开,让业务提供服务函数。
## 从 ID 到人员展示
下方初始模型为人员 ID。观察编辑字段和阅读字段中的人员名称,搜索 Alice 或 Bob 并切换人员,再点击阅读字段的操作按钮查看本地反馈。
示例使用本地人员数据;操作按钮只记录结果。业务接口、权限与聊天服务由应用接入。
Example source: src/people-select/__demos__/injected-services.vue
```vue
{{ log }}
```
## 远程搜索
输入搜索词,观察候选和加载状态。展开源码,查看请求与字段值如何连接。
Example source: src/select/__demos__/search.vue
```vue
Show selections after search options
{{ item }}
Hide selections after search options
```
## 与其他实现对照什么
| 场景 | 核对结果 |
| --- | --- |
| 初始只有 ID | 是否能解析并展示已选项 |
| 连续快速输入 | 旧请求结果是否覆盖新的搜索结果 |
| 清空、只读、阅读态 | 是否仍发出不必要的候选请求 |
| 加载失败 | 是否有明确反馈和恢复入口 |
| 业务操作区 | 是否能组合权限与自定义操作 |
请求竞争与失败场景需使用可控延迟及错误数据单独验证,不能从正常搜索结果推断。
继续阅读:[PeopleSelect](llms/zh-CN/components/people-select.md) · [Select](llms/zh-CN/components/select.md) · [AutoComplete](llms/zh-CN/components/auto-complete.md)
## 复用业务数据服务
重新加载候选,观察加载状态和选中值;展开源码查看 useAsyncData 如何把数据请求与字段绑定分开。此例为本地固定数据,不模拟请求失败。
Example source: src/select/__demos__/async-source.vue
```vue
加载失败,请重试。
重新加载
```
演示后返回[专栏总览](llms/zh-CN/showcase.md)继续下一站。
## 连续修改时的异步校验
输入错误用户名并触发校验,再改为 admin 再次校验。手动先返回最新结果、再返回最早结果,检查过期校验是否影响当前字段。此例的等待队列完全在本地,方便演示返回顺序。
Example source: src/form/__demos__/async-race.vue
```vue
```
---
[返回总览,标记已体验](llms/zh-CN/showcase.md) · [下一站:任务数据工作台](llms/zh-CN/showcase/data-workbench.md)
---
Document: llms/zh-CN/showcase/components.md
# 逐组件对照
按开发任务归类组件:先认识基础与布局,再进入输入、选择、表单、数据管理和业务场景。每个组件都列出当前 Cedar 的展示重点、可操作示例,以及其他组件库的参考案例。
Vue 组件库用于比较使用与交互,React / Angular 组件库用于借鉴场景和示例组织。参考链接固定到工作区源码版本;“相关组合”表示职责相近的组合示例,不能据此认定对方缺少该能力。
## 功能点与增量
展开“相似功能点逐项对照”,可查看已有示例、文档依据和待核验增量;“值得补充的重要内容”按当前分类列出优先级、参考案例和验收重点。待核验表示尚未找到对应专题示例,不直接等同于缺少能力。
## 示例阅读顺序
基础用法 → 尺寸、变体与状态 → 常用交互 → 异步数据 → 插槽与业务组合 → 边界和生命周期。表单字段与独立面板分别归类,避免将两种接入方式混为同一功能。
## 怎么判断优势
对相同数据、容器和操作步骤,比较接入配置、额外业务代码及操作结果。当前索引提供源码与示例内容对照;性能、兼容性和失败恢复等结论需要同环境运行验证。
---
Document: llms/zh-CN/showcase/cross-platform.md
# 桌面与移动
使用相同的巡检任务、部门选项和业务模型,对照两端的编辑方式。Cedar 的选择与日期时间字段在当前位置展开面板;Maple 的这些字段明确使用 Popup,确认后提交,取消保留原值。任务名称在两端都直接输入。
## 同一个任务,两种交互
1. 在 Cedar 中选择“研发部”,观察已提交模型。
2. 在 Maple 手机预览中点击“负责部门”,在 Popup 内选择“研发部”;先不确认,观察已提交模型。
3. 点击右上角关闭(取消)后重新打开,核对仍为原来的值;再次选择并确认,核对模型更新。
4. 对日期和时间重复这组操作,比较面板形态与确认过程。
## 公共约定与平台差异
| 项目 | Cedar | Maple |
| --- | --- | --- |
| 业务数据 | 相同任务与部门 ID | 相同任务与部门 ID |
| 文本输入 | inline,直接输入 | inline,直接输入 |
| 本例选择、日期、时间 | inline,在字段附近操作 | popup,进入弹层编辑 |
| Popup 草稿 | 本例不使用 Popup 草稿 | 确认前不提交,取消保留原值 |
| 使用代码 | c- 前缀;字段的 edit-mode 为 direct | mp- 前缀;对应字段的 edit-mode 为 popup |
两端共用 API 语义,组件的交互方式按端侧场景选择。Maple 的选择和日期时间字段通常采用 Popup;文本输入仍可以保持直接编辑。
## 尺寸与外观
下面单独比较尺寸与变体;上方的业务示例负责展示交互差异。
Example source: src/field-decorator/__demos__/control-sizes.vue
```vue
{{
item
}}
{{
item
}}
Selected / Clearable / Multiple — 有值、可清空与多选不换行
Hover or focus truncated text; tap on touch screens /
悬停或聚焦省略正文查看全文;触屏点按查看,点外部关闭
Reset / 恢复选中值
Button · reference
Button
Select · multiple / nowrap
Cascader · multiple / nowrap
Select · long values / nowrap
Cascader · long values / nowrap
```
---
[返回总览,标记已体验](llms/zh-CN/showcase.md) · [下一站:完整业务表单](llms/zh-CN/showcase/forms.md)
---
Document: llms/zh-CN/showcase/data-workbench.md
# 数据工作台
数据页面通常需要筛选条件、结果表格和用户自定义列。Cedar 提供 FilterForm、Table 与独立的 TableColumnManager,应用按业务数据流组合它们。
## 同一份任务数据,筛选与统计联动
1. 查询“运营部”,结果从五条缩小到两条。
2. 完成“展厅设备巡检”,观察完成数量和行状态同步变化。
3. 状态选择“待处理”再查询,已完成的任务不再出现。
4. 输入不存在的关键词,体验空结果;清空筛选恢复全部,点击“恢复全部任务”重置业务数据。
Example source: src/table/__demos__/task-workbench.vue
```vue
全部 {{ rows.length }} 已完成 {{ completed }} 当前结果 {{ filtered.length }}
查询任务 清空筛选 恢复全部任务
{{ message }}
完成
没有匹配任务。修改关键词或点击“清空筛选”恢复结果。
先查询“运营部”,完成一条任务,再用状态过滤;统计与结果来自同一份本地任务数据。
```
筛选只有点击查询才生效;统计和列表都由同一份任务数据计算。以下列管理示例单独展示列配置流程。
## 管理表格列
打开列管理,尝试勾选、排序和冻结,确认后观察表格变化。取消时检查表格是否保持原配置。配置保存的位置由应用选择。
Example source: src/table-column-manager/__demos__/with-table-ungrouped.vue
```vue
不分组列示例:目录就是普通数组。工号为必选左冻结列,备注和入职日期默认隐藏;支持搜索、显隐、拖拽排序、冻结、删除、重命名和列宽记忆。
管理列
恢复默认
已展示 {{ leafColumns.length }} /
{{ columnDefinitions.length }} 列
{{
record.status
}}
```
## 从结果管理延伸到文件输入
目录读取适合批量整理素材;剪贴板示例可以粘贴图片,或者用本地样例文件演示数量限制与重置。两者只读取本地文件,不发出上传请求。
Example source: src/upload/__demos__/directory.vue
```vue
选择目录后查看文件列表;本例只读取本地文件,不发送请求。目录选择取决于浏览器与系统文件选择器,移动设备可使用普通多选入口。
目录选择
普通文件多选
```
Example source: src/upload/__demos__/clipboard.vue
```vue
将剪贴板图片粘贴到输入区。最多 3 张,每张不超过 1 MiB;只读取文件,不上传。普通文本粘贴仍按原生输入处理。
加入本地示例图片
清空列表
已接收 {{ files.length }} 个文件。{{ message }}
```
## 与其他实现对照什么
比较实现相同列管理流程所需的额外组件、状态同步与业务封装。TableColumnManager 与 Table 解耦,也可以放入自定义容器;持久化由业务使用 localStorage、Pinia 或服务端完成。
继续阅读:[FilterForm](llms/zh-CN/components/filter-form.md) · [Table](llms/zh-CN/components/table.md) · [TableColumnManager](llms/zh-CN/components/table-column-manager.md)
---
[返回总览,标记已体验](llms/zh-CN/showcase.md) · [下一站:资源排期](llms/zh-CN/showcase/scheduling.md)
---
Document: llms/zh-CN/showcase/forms.md
# 一致的表单体验
业务表单既要保持字段外观一致,也要处理阅读、编辑、校验和确认。Cedar 通过字段外壳与 Form 的展示约定组合这些能力。
## 先完成一张业务单
1. 保持任务名为空,点击“校验并预览”,观察必填提示。
2. 点击“填入演示数据”,进入预览;返回修改,再进入预览。
3. 勾选“模拟下一次保存失败”,确认提交。失败时草稿保留,已提交记录仍为空。
4. 点击“重试提交”,核对成功记录;继续编辑时核对上次记录没有被草稿覆盖。
5. 点击“重新演示”,恢复到初始状态。
Example source: src/form/__demos__/task-workflow.vue
```vue
01 填写与校验
02 核对与提交
03 结果与记录
校验并预览 填入演示数据
确认巡检任务
任务
{{ draft.title }}
部门
{{ departmentLabel }}
优先级
{{ draft.priority === "urgent" ? "紧急" : "普通" }}
模拟下一次保存失败(本地)
{{
message.includes("保存失败") ? "重试提交" : "确认提交"
}} 返回修改
任务已创建
{{ saved.title }} ·
{{ saved.priority === "urgent" ? "紧急处理" : "普通处理" }}
继续编辑
{{ message }}
{{
saved
? JSON.stringify(saved, null, 2)
: "尚无记录;校验失败、返回修改或保存失败都不会创建记录。"
}}
重新演示
本例使用本地模拟保存,不访问业务服务。校验、确认、保存与失败恢复由业务流程组合。
```
这个例子组合组件能力实现业务流程;保存用本地延迟模拟,实际接口由应用接入。字段校验与服务端保存失败是两种不同结果。
## 一组字段,一起比较
切换五档尺寸和三种变体,观察 Input、Select、日期时间字段的高度、前后缀和长标签。多行内容按内容撑高。
Example source: src/field-decorator/__demos__/control-sizes.vue
```vue
{{
item
}}
{{
item
}}
Selected / Clearable / Multiple — 有值、可清空与多选不换行
Hover or focus truncated text; tap on touch screens /
悬停或聚焦省略正文查看全文;触屏点按查看,点外部关闭
Reset / 恢复选中值
Button · reference
Button
Select · multiple / nowrap
Cascader · multiple / nowrap
Select · long values / nowrap
Cascader · long values / nowrap
```
## 从阅读进入编辑
1. 在下方选择 click 或 dblclick,按对应方式进入字段编辑。
2. 修改内容后取消,核对已保存模型;再修改并确认,核对模型更新。
3. 切换纯阅读状态,观察普通字段与单项覆盖字段的表现。
Example source: src/form/__demos__/field-presentation.vue
```vue
纯阅读 readPretty
{{ presentationHint }} 设备 4 已停用,最多选择 3
个设备;可切换本地搜索与模拟远程搜索。
提交表单
当前模型:{{ committed }}
{{ status }}
```
## 与其他实现对照什么
使用相同字段和校验规则,比较样式配置的重复程度、阅读态渲染方式、确认与取消的数据流,以及单字段覆盖是否需要额外封装。记录完成这个场景所需的业务代码与交互结果。
继续阅读:[Form](llms/zh-CN/components/form.md) · [Input](llms/zh-CN/components/input.md) · [Select](llms/zh-CN/components/select.md)
---
[返回总览,标记已体验](llms/zh-CN/showcase.md) · [下一站:主题与品牌](llms/zh-CN/showcase/themes.md)
---
Document: llms/zh-CN/showcase/loading.md
# 加载与等待
以活动报名为场景,集中观察各组件的加载位置、尺寸和布局变化。所有等待均使用本地计时,不请求业务接口;选择文件也不会发起上传。
1. 填写报名信息,或点击卡片上的「体验等待」,观察 2 秒后的恢复。
2. 开启「全部保持加载」比较各组件;「重置加载」停止等待,保留填写内容。
3. 单独切换「等待时禁止编辑」,对照 loading 与 disabled;再切换文本字段的默认指示器与底线。
4. 打开报名确认,观察 before-close 等待;关闭检查不通过时,弹层会保留。
Example source: docs/showcase/demos/loading-lab.vue
```vue
{{ group.title }}
{{ card.title }} {{ card.id }}
{{ card.description }}
{{ card.text }}
03 · 内容区域
{{ {upload:'上传报名材料',table:'报名记录',list:'报名清单',skeleton:'初次读取占位',loading:'通用内容等待'}[kind] }} {{ kind }}
林小满 · 设计工作坊
周青 · 开发者交流
报名信息已加载,可以继续填写。
活动报名内容
04 · 确认报名与关闭等待
关闭弹层时由 before-close 等待 2 秒。关闭检查不通过时保留弹层;可以切换后再次尝试。
打开报名确认
请确认活动报名信息。点击确认、取消或关闭,观察等待反馈。
{{ guardStatus }}
{{ guardStatus }}
```
这里只展示有明确加载语义的输入、数据选择、操作与内容区域。普通事件不会自动收集 Promise。Upload 的文件进度与 before 等待在其专属案例中演示;Scheduler 的保存守卫放在 Scheduler 文档内说明。
## 更多 before 等待场景
### Drawer
Example source: src/drawer/__demos__/guard-protocol.vue
```vue
打开
关闭前等待片刻。可以关闭开关体验一次拦截,再在抽屉内重新允许关闭并重试。
允许并关闭
{{ status }}
{{ status }}
```
### Popconfirm
Example source: src/popconfirm/__demos__/guard-protocol.vue
```vue
打开
Confirm action 通过 beforeClose 关闭
{{ status }}
```
---
Document: llms/zh-CN/showcase/scheduling.md
# 资源排期
Scheduler 用于日程展示与编辑,可关联人员、设备或会议室。先体验时间调整,再加入资源与容量约束。
## 拖动与调整时间
1. 拖动一条日程,观察落点预览和预计起止时间。
2. 调整日程上、下边缘,观察步长吸附。
3. 拖动时按 Esc 取消,核对下方已提交日程没有变化。
Example source: src/scheduler/__demos__/drag-feedback.vue
```vue
拖动日程主体查看虚影和目标预览;拖上边缘调整开始,拖下边缘调整结束。按
Escape 取消,松手才提交。
{{ event.title }}
{{ event.description }}
重置日程
{{ event.title }}:{{ event.start }} → {{ event.end }};资源:{{
event.resourceIds?.join(", ") || "无"
}}
```
## 人员与设备的共同资源模型
体验设备排期中的工单拖入、联合占用和维护时段。同一资源 API 可以表达人员与设备,业务字段通过 metadata 和插槽接入。
Example source: src/scheduler/__demos__/equipment.vue
```vue
设备共享使用时段:拖入左侧任务后确认排期;维护中的设备禁止新增分配,同一设备的时间冲突会阻止保存。
待安排工单
{{ task.title }} · {{ task.duration }} 分钟
{{ resource?.label ?? date.toLocaleDateString() }}
· {{ resource.disabled ? "维护中" : "可预约" }}
{{ event.title }}
· {{ event.metadata?.taskId }}
```
## 与其他实现对照什么
在相同日程和资源数据下,比较视图切换、拖动预览、时间拉伸、冲突反馈及编辑器扩展。进一步检查异步保存失败是否保留原值、重试是否重复提交。对照排期产品时还应记录版本、授权范围和所用插件。
继续阅读:[Scheduler](llms/zh-CN/components/scheduler.md) · [任务日历工作台](llms/zh-CN/examples/task-calendar.md)
---
[返回总览,标记已体验](llms/zh-CN/showcase.md) · [下一站:逐组件对照](llms/zh-CN/showcase/components.md)
---
Document: llms/zh-CN/showcase/strengths.md
# 核心特点
Cedar 的特点既体现在单个组件,也体现在跨组件的约定和业务流程中。这里整理了 23 个有现有示例支撑的展示点,覆盖 体系级特点、场景组合能力、交互与数据特点、业务组件特点、工程保障。
## 演示时先讲什么
- **跨组件一致性**:一起切换输入、选择和日期字段的尺寸、变体,观察一组字段如何遵循共同约定。
- **阅读与编辑闭环**:修改、取消、确认及拒绝后重试,核对临时输入与已保存数据。
- **业务数据接入**:从 ID 回显、搜索候选到人员操作,展示字段如何连接业务模型与服务。
- **复杂业务组合**:操作列管理、上传准备与排期事务,观察保存、失败恢复和自定义接入。
以下属于本库的设计取向、已实现能力和工程保障。是否比某个参考库更省配置或体验更好,需要在逐组件页中按同一业务任务验证。
## 体系级特点
### 桌面与移动沿用同一套公共约定
公共尺寸、变体、值绑定与主题语言对齐,端侧密度和操作形态分别适配。
演示方法:使用同一巡检任务:Cedar 在字段附近操作;Maple 的选择与日期时间进入 Popup。先取消,再确认,对照已提交模型。
[打开对应示例](llms/zh-CN/components/form.md#桌面与移动的同场景展示) · 相关组件:[Button 按钮](llms/zh-CN/components/button.md)、[Input 输入框](llms/zh-CN/components/input.md)、[Select 下拉框](llms/zh-CN/components/select.md)、[Form 表单](llms/zh-CN/components/form.md)
### 主题从品牌延伸到组件与局部覆盖
品牌、语义颜色与组件变量分层,亮暗模式和局部覆盖可以组合使用。
演示方法:切换品牌和亮暗,再比较默认按钮与局部覆盖按钮,随后打开字段弹层。
[打开对应示例](llms/zh-CN/themes.md) · 相关组件:[ConfigProvider 全局配置](llms/zh-CN/components/config-provider.md)、[StyleProvider](llms/zh-CN/components/style-provider.md)、[Button 按钮](llms/zh-CN/components/button.md)、[FieldDecorator 字段外壳](llms/zh-CN/components/field-decorator.md)
### 跨控件保持字段外观与几何一致
Input、Select、日期时间字段通过共同外壳组织尺寸、变体、前后缀和清除区域。
演示方法:一次切换尺寸与变体,对照普通、有值、多选长标签和日期范围字段。
[打开对应示例](llms/zh-CN/components/field-decorator.md#表单控件尺寸对照) · 相关组件:[FieldDecorator 字段外壳](llms/zh-CN/components/field-decorator.md)、[Input 输入框](llms/zh-CN/components/input.md)、[Textarea 文本域](llms/zh-CN/components/textarea.md)、[Select 下拉框](llms/zh-CN/components/select.md)、[Cascader 级联选择](llms/zh-CN/components/cascader.md)、[Date 日期字段](llms/zh-CN/components/date.md)、[Time 时间字段](llms/zh-CN/components/time.md)、[Button 按钮](llms/zh-CN/components/button.md)
### 同一字段承接阅读与编辑
Form、FormItem 与字段可继承阅读展示和编辑方式,字段可以覆盖父级配置。
演示方法:切换阅读态、直接编辑和确认后提交,再查看单项覆盖。
[打开对应示例](llms/zh-CN/components/form.md#字段展示与确认提交) · 相关组件:[Form 表单](llms/zh-CN/components/form.md)、[Input 输入框](llms/zh-CN/components/input.md)、[Textarea 文本域](llms/zh-CN/components/textarea.md)、[InputNumber 数字输入框](llms/zh-CN/components/input-number.md)、[Select 下拉框](llms/zh-CN/components/select.md)、[PeopleSelect 人员选择](llms/zh-CN/components/people-select.md)、[Date 日期字段](llms/zh-CN/components/date.md)、[Time 时间字段](llms/zh-CN/components/time.md)、[Upload 上传](llms/zh-CN/components/upload.md)
### 日期时间字段和独立面板分别使用
带触发器的字段与可嵌入的面板分层,单值、范围和提交规则按公开契约接入。
演示方法:对照带输入框的字段与内嵌面板,检查手输、取消和确认后的值。
[打开对应示例](llms/zh-CN/components/date.md#字段视口与快捷项事件) · 相关组件:[Date 日期字段](llms/zh-CN/components/date.md)、[DateRange 日期范围字段](llms/zh-CN/components/date-range.md)、[Time 时间字段](llms/zh-CN/components/time.md)、[TimeRange 时间范围字段](llms/zh-CN/components/time-range.md)、[DatePicker 日期面板](llms/zh-CN/components/date-picker.md)、[TimePicker 时间面板](llms/zh-CN/components/time-picker.md)
## 场景组合能力
### 筛选、行操作和统计来自同一份业务数据
条件查询、状态变更、空结果与统计联动,桌面表格与移动表格使用同一任务场景。
演示方法:查询运营部 → 完成任务 → 按状态过滤 → 空结果 → 清空筛选并恢复任务。
[打开对应示例](llms/zh-CN/components/table.md#任务筛选与数据联动) · 相关组件:[Table 表格](llms/zh-CN/components/table.md)、[Input 输入框](llms/zh-CN/components/input.md)、[Select 下拉框](llms/zh-CN/components/select.md)
业务流程示例使用本地数据与模拟保存,不代表组件内置业务后端。
### 从字段校验走到确认、失败与恢复
把 Form 校验、预览和保存状态组合为业务流程,失败保留草稿,提交记录独立保存。
演示方法:空值校验 → 填入数据 → 返回修改 → 模拟失败 → 重试成功 → 查看提交记录。
[打开对应示例](llms/zh-CN/components/form.md#巡检任务完整流程) · 相关组件:[Form 表单](llms/zh-CN/components/form.md)、[Input 输入框](llms/zh-CN/components/input.md)、[Select 下拉框](llms/zh-CN/components/select.md)
业务流程示例使用本地数据与模拟保存,不代表组件内置业务后端。
## 交互与数据特点
### 编辑过程具有草稿、确认和失败恢复语义
编辑过程区分临时输入与已保存值,确认失败时可以保留内容供用户修正。
演示方法:修改后取消,再模拟拒绝确认并重试;观察最终模型和仍在编辑的内容。
[打开对应示例](llms/zh-CN/components/form.md#禁用、只读与异步确认) · 相关组件:[Form 表单](llms/zh-CN/components/form.md)、[Input 输入框](llms/zh-CN/components/input.md)、[Select 下拉框](llms/zh-CN/components/select.md)、[Date 日期字段](llms/zh-CN/components/date.md)、[Time 时间字段](llms/zh-CN/components/time.md)
Cedar 的 click/dblclick 原位编辑还包含字段切换与面板键盘优先级;Maple 按自身弹层交互演示。
### 候选高亮、搜索词、草稿与业务值分开
打开或搜索候选时不应意外提交表单,选择和确认按字段展示方式更新模型。
演示方法:先打开、搜索和移动候选,再选择与确认,对照更新次数与真实事件。
[打开对应示例](llms/zh-CN/components/select.md#候选高亮与表单数据流) · 相关组件:[Select 下拉框](llms/zh-CN/components/select.md)、[AutoComplete 自动补全](llms/zh-CN/components/auto-complete.md)、[PeopleSelect 人员选择](llms/zh-CN/components/people-select.md)、[Cascader 级联选择](llms/zh-CN/components/cascader.md)、[TreeSelect 树选择](llms/zh-CN/components/tree-select.md)、[Form 表单](llms/zh-CN/components/form.md)
### 远程搜索与已选 ID 回显分工
候选获取和已选内容解析分别接入业务服务,处理异步状态与过期结果。
演示方法:从仅有 ID 的模型开始,展示名称回显,再连续切换搜索词。
[打开对应示例](llms/zh-CN/components/people-select.md#完整业务示例) · 相关组件:[Select 下拉框](llms/zh-CN/components/select.md)、[PeopleSelect 人员选择](llms/zh-CN/components/people-select.md)、[AutoComplete 自动补全](llms/zh-CN/components/auto-complete.md)、[TreeSelect 树选择](llms/zh-CN/components/tree-select.md)
### 数值显示格式与业务数字分离
formatter / parser 处理展示与解析,精度、步长及边界共同约束最终数值。
演示方法:输入带格式的值,再尝试小数步长和边界,观察模型中保存的数字。
[打开对应示例](llms/zh-CN/components/input-number.md#小步长与范围边界) · 相关组件:[InputNumber 数字输入框](llms/zh-CN/components/input-number.md)、[Form 表单](llms/zh-CN/components/form.md)
模型仍为 JavaScript number;不将十进制计算等同于任意精度的大数存储。
### 上传准备与取消竞争有明确处理
异步准备、取消、重试和迟到请求句柄之间隔离失效结果,文件替换后重新检查限制。
演示方法:等待准备时取消并重新提交,再放行旧结果,核对有效请求与文件状态。
[打开对应示例](llms/zh-CN/components/upload.md#上传前准备与取消竞争) · 相关组件:[Upload 上传](llms/zh-CN/components/upload.md)
### 浮层开合、异步关闭和焦点按职责处理
弹层的展示控制、异步确认及焦点恢复与业务保存逻辑配合,嵌套时按当前层操作。
演示方法:在弹层内打开字段面板,尝试 Esc 和拒绝关闭,再核对焦点返回。
[打开对应示例](llms/zh-CN/components/dialog.md#高级属性) · 相关组件:[Dialog 对话框](llms/zh-CN/components/dialog.md)、[Drawer 抽屉](llms/zh-CN/components/drawer.md)、[Popover 气泡卡片](llms/zh-CN/components/popover.md)、[Trigger 浮层触发](llms/zh-CN/components/trigger.md)
## 业务组件特点
### 人员字段可以连接业务操作
人员显示与选择复用统一字段行为;头像与操作区由业务提供,不绑定聊天 SDK。
演示方法:同一人员 ID 在编辑字段和阅读字段中联动,并触发示例业务操作。
[打开对应示例](llms/zh-CN/components/people-select.md#完整业务示例) · 相关组件:[PeopleSelect 人员选择](llms/zh-CN/components/people-select.md)、[Form 表单](llms/zh-CN/components/form.md)
### 表格列管理是独立可组合能力
列显隐、重命名、顺序、冻结及宽度通过结构化状态回写;业务决定持久化位置。
演示方法:修改列后取消,再确认;恢复保存配置并核对必选列与冻结顺序。
[打开对应示例](llms/zh-CN/components/table-column-manager.md#与-table-组合-分组与持久化) · 相关组件:[Table 表格](llms/zh-CN/components/table.md)、[TableColumnManager 表格列管理](llms/zh-CN/components/table-column-manager.md)
### 表格配置能关联实际业务行类型
表格列配置与业务数据类型相连,配合虚拟列表、编辑和列管理扩展点使用。
演示方法:展开关联业务类型的示例源码,再对照相应表格配置。
[打开对应示例](llms/zh-CN/components/table.md#关联业务行与列类型) · 相关组件:[Table 表格](llms/zh-CN/components/table.md)
### 文件读取、准备、请求和展示可分别接入
不配置上传接口时可以只读取文件;请求、进度和自定义展示按业务需要组合。
演示方法:先选择本地文件,再展示手动提交、外部进度与独立 hook。
[打开对应示例](llms/zh-CN/components/upload.md#手动队列和可取消请求) · 相关组件:[Upload 上传](llms/zh-CN/components/upload.md)
### 排期包含资源、容量和可用时间
人员、设备、会议室复用资源模型,关联占用量、工作时间、维护与容量规则。
演示方法:调整资源容量,再将日程拖入冲突时段,观察拒绝与修正后的提交。
[打开对应示例](llms/zh-CN/components/scheduler.md#资源并发容量) · 相关组件:[Scheduler 日程调度](llms/zh-CN/components/scheduler.md)
### 排期支持批量事务与撤销重做
批量变更以最终状态校验,可结合异步保存、版本保护和撤销重做形成完整流程。
演示方法:交换两条排期或批量调整,先模拟失败,再修正重试并撤销。
[打开对应示例](llms/zh-CN/components/scheduler.md#原子事务交换) · 相关组件:[Scheduler 日程调度](llms/zh-CN/components/scheduler.md)
### 排期可表达依赖、里程碑和资源负载
依赖关系、零时长里程碑、时间线缩放和负载统计补充常规日历展示。
演示方法:缩放资源时间线,查看依赖与里程碑,再检查资源负载。
[打开对应示例](llms/zh-CN/components/scheduler.md#依赖、里程碑与时间线缩放) · 相关组件:[Scheduler 日程调度](llms/zh-CN/components/scheduler.md)
依赖校验不会自动重排其他任务;负载统计基于已加载数据。
### 排期可通过适配器连接外部日历语义
高级适配器提供 RRULE、时区转换、ICS 导入导出与打印;轻量核心继续独立使用。
演示方法:展示指定时区的重复规则,再查看日历交换示例与导出内容。
[打开对应示例](llms/zh-CN/components/scheduler.md#rrule、时区与夏令时) · 相关组件:[Scheduler 日程调度](llms/zh-CN/components/scheduler.md)
组件网格仍使用运行环境本地时间;模拟协同提供方不是已接入真实服务。
## 工程保障
### 部分稳定逻辑可以脱离默认界面复用
useUploader、列管理 hook 与 Scheduler 纯核心为自定义界面和业务适配提供入口。
演示方法:展开 hook 示例,识别业务模型、请求服务和默认展示之间的边界。
[打开对应示例](llms/zh-CN/components/upload.md#上传前准备与取消竞争) · 相关组件:[Upload 上传](llms/zh-CN/components/upload.md)、[TableColumnManager 表格列管理](llms/zh-CN/components/table-column-manager.md)、[Scheduler 日程调度](llms/zh-CN/components/scheduler.md)
### 复杂交互明确考虑停用、卸载与过期任务
对选择请求、计时、拖动和滚动等异步过程提供生命周期示例与相应检查。
演示方法:启动操作后改变状态或停用实例,再恢复并重新操作,观察旧任务是否干扰。
[打开对应示例](llms/zh-CN/components/select.md#交互调度生命周期) · 相关组件:[Select 下拉框](llms/zh-CN/components/select.md)、[Search 搜索框](llms/zh-CN/components/search.md)、[Upload 上传](llms/zh-CN/components/upload.md)、[Countdown 倒计时](llms/zh-CN/components/countdown.md)、[Scrollbar 滚动条](llms/zh-CN/components/scrollbar.md)
## 继续逐项比较
在[逐组件对照](llms/zh-CN/showcase/components.md)中查看其他组件库的相似示例、文档依据与待核验增量;每个特点的运行示例仍保存在对应组件目录中。
---
Document: llms/zh-CN/showcase/themes.md
# 主题与品牌
品牌定制要同时覆盖组件的背景、文字、边框、状态和弹层。Cedar 与 Maple 对齐主题语言,Cedar 内置默认与枫叶两套主题,并分别提供亮暗模式。
## 切换品牌与亮暗
依次切换四个主题,观察按钮、语义文字和背景。此示例会修改当前文档站的全局主题;演示后可点击“默认亮色”恢复。
Example source: src/themes/__demos__/toggle.vue
```vue
默认亮色
默认暗色
枫叶亮色
枫叶暗色
主题预览
主色按钮与语义文字会随 StyleProvider / cedar-theme 变化。
Primary
Default
primary
success
warning
```
## 检查弹层与输入状态
保持当前主题,打开下方选择面板,检查选中、搜索、禁用与只读的表现。品牌切换之后,再检查表面、边框和文字是否协调。
Example source: src/select/__demos__/state-lab.vue
```vue
disabled
readonly
error
```
## 同一个页面中的局部主题
观察 StyleProvider 覆盖范围内与范围外的组件,展开源码确认主题变量如何局部传递。先修改局部,再切全局,检查两个层级的组合。
Example source: src/style-provider/__demos__/basic.vue
```vue
切换局部变量 / Toggle local variables
局部颜色 / Local color
嵌套覆盖 / Nested override
外部不受影响 / Outside remains unchanged
```
## 与其他实现对照什么
用相同品牌色和亮暗配置,比较全局主题、组件覆盖与局部覆盖的入口,以及弹层是否跟随主题。主题定制是比较维度,具体差异应通过同场景操作确认。
继续阅读:[主题定制](llms/zh-CN/themes.md) · [Token 分层](llms/zh-CN/guide/design-tokens.md) · [CSS 变量参考](llms/zh-CN/guide/design-token-reference.md)
---
[返回总览,标记已体验](llms/zh-CN/showcase.md) · [下一站:业务数据选择](llms/zh-CN/showcase/async-selection.md)
---
Document: llms/zh-CN/themes.md
# 主题定制
### 介绍
Cedar 色板与 Maple 结构对齐:**RGB 通道色阶** + **语义色** + **组件 token**。
- 色阶:`--c-primary-6: r, g, b`,用法 `rgb(var(--c-primary-6))` / `rgba(var(--c-primary-6), 0.12)`
- 语义:`--c-color-text-1`、`--c-color-bg-*`、`--c-color-fill-*` 等
- 暗色:根节点属性 `cedar-theme="dark"` 整表覆盖(CSS `:root[cedar-theme=dark]`)
- 覆盖 / 多主题包:用 [StyleProvider](llms/zh-CN/components/style-provider.md) + `Themes`
设计 token:`style/theme/css-variables.less`、`style/color/css-variables.less`。
### 内置主题包
| 主题名称 | 主题包 | 说明 |
| --- | --- | --- |
| 默认 | `Themes.default.light` / `Themes.default.dark` | 青绿色品牌色阶,提供亮暗模式 |
| 枫叶 | `Themes.maple.light` / `Themes.maple.dark` | 枫叶红橙品牌色阶,提供亮暗模式 |
## 基础示例
### StyleProvider 切换
亮色对象会移除 `html[cedar-theme=dark]`,暗色对象会设置该属性。Cedar 与 Maple 使用相同的主题分组、颜色和值域。
```vue
默认亮色
默认暗色
枫叶亮色
枫叶暗色
```
Example source: src/themes/__demos__/toggle.vue
```vue
默认亮色
默认暗色
枫叶亮色
枫叶暗色
主题预览
主色按钮与语义文字会随 StyleProvider / cedar-theme 变化。
Primary
Default
primary
success
warning
```
### ConfigProvider 切换
```vue
```
`theme` 同步到根节点 `cedar-theme`(`light` 时移除)。取值可用 `cedarThemes`:`['light', 'dark']`。
### DOM 切换暗色
```ts
document.documentElement.setAttribute('cedar-theme', 'dark')
document.documentElement.removeAttribute('cedar-theme')
```
### 设置 body
```css
body {
transition: background-color 0.25s, color 0.25s;
color: var(--c-color-text);
background-color: var(--c-color-body);
color-scheme: var(--c-color-scheme);
}
```
### 主题定制
```ts
import { StyleProvider, Themes } from '@cedar-design/ui'
const customTheme = {
...Themes.maple.light,
'--c-brand-6': '255, 0, 0',
}
StyleProvider.setStyleVars(customTheme)
```
### 与文档站同步
文档站监听 `html[data-theme]`,并映射到 `cedar-theme`,切换 VuePress 主题时组件预览会一并切换。
### 通用样式变量(节选)
| 变量名 | 说明 |
| --- | --- |
| `--c-primary-1` … `--c-primary-10` | 主色阶(映射 brand) |
| `--c-brand-1` … `--c-brand-10` | Brand 色阶 |
| `--c-success-*` / `--c-danger-*` / `--c-warning-*` / `--c-link-*` | 功能色阶 |
| `--c-gray-1` … `--c-gray-10` | 中性色阶 |
| `--c-color-text-1` … `--c-color-text-4` | 文本语义(`c-text-1` … `c-text-4`) |
| `--c-color-bg-1` … `--c-color-bg-5` | 背景语义 |
| `--c-color-fill-1` … `--c-color-fill-4` | 填充语义 |
| `--c-color-border-1` … `--c-color-border-4` | 边框语义 |
| `--c-color-scheme` / `--c-color-body` / `--c-color-text` | 主题切换 / body |
完整色阶见 [色板 Palette](llms/zh-CN/components/palette.md),语义工具类见 [颜色 Color](llms/zh-CN/components/style/color.md)。
---
Document: llms/en-US/components/affix.md
# Affix
The same scenarios, parameters and interactions as Cedar. Only component prefixes differ; themes and site shells remain independent.
## Basic examples
### Basic usage
Example source: src/affix/__demos__/basic.vue
```vue
Scroll inside the bordered area.
```
## Layout and arrangement
### Affix direction, offset and container
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `target` | Scroller or selector; finds nearest scrolling ancestor when omitted, falling back to window | Affix direction, offset and container |
| `offset-top` | Distance from the scroll container top; accepts CSS lengths | Affix direction, offset and container |
| `offset-bottom` | Distance from the bottom; takes precedence over offset-top, including 0 | Affix direction, offset and container |
Scroll each bordered area separately to compare top/bottom affixing and offsets within an explicit scroll container.
Example source: src/affix/__demos__/offset-container-comparison.vue
```vue
顶部偏移 Top offset
Scroll inside the bordered area.
底部偏移 Bottom offset
Scroll inside the bordered area.
指定滚动容器 Scroll container
Scroll inside the bordered area.
```
## Interaction and control
### Change event
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `target` | Scroller or selector; finds nearest scrolling ancestor when omitted, falling back to window | Change event, Disabled, CSS mode and manual update |
| `offset-top` | Distance from the scroll container top; accepts CSS lengths | Change event, Disabled, CSS mode and manual update |
| `disabled` | Disable affixing | Disabled, CSS mode and manual update |
| `css-mode` | Use native position: sticky, subject to ancestor overflow and container boundaries | Disabled, CSS mode and manual update |
| `z-index` | Stacking level | Disabled, CSS mode and manual update |
Example source: src/affix/__demos__/fix-change.vue
```vue
Scroll inside the bordered area.
Fixed: {{ fixed }}
```
### Disabled, CSS mode and manual update
Example source: src/affix/__demos__/controls.vue
```vue
Disabled
CSS sticky
Change layout and update position
Position updates: {{ updates }}
```
## API
### Props
| Prop | Description | Type | Default |
| --- | --- | --- | --- |
| offset-top | Distance from the scroll container top; accepts CSS lengths | `number / string` | `0` |
| offset-bottom | Distance from the bottom; takes precedence over offset-top, including 0 | `number / string` | `undefined` |
| target | Scroller or selector; finds nearest scrolling ancestor when omitted, falling back to window | `string / HTMLElement / Window` | `undefined` |
| target-container | Extra outer scroller to listen to; omitted means no extra listener, and it is not a clipping boundary | `string / HTMLElement / Window` | `undefined` |
| z-index | Stacking level | `number / string` | `10` |
| disabled | Disable affixing | `boolean` | `false` |
| css-mode | Use native position: sticky, subject to ancestor overflow and container boundaries | `boolean` | `false` |
### Events
| Event | Arguments and timing |
| --- | --- |
| change | `(fixed: boolean, offset: number)`, emitted when the fixed state changes. While fixed, offset is the affix threshold; otherwise it is the distance to the corresponding container edge. Disabling affixing reports 0. |
### Slots
| Slot | Description | Arguments |
| --- | --- | --- |
| default | Content to affix | — |
### Methods
| Method | Description | Arguments | Returns |
| --- | --- | --- | --- |
| updatePosition | Rebind scrollers and recalculate on the next animation frame | — | `Promise` |
### Platform notes
Props, event arguments, slots and public methods match across platforms. CSS mode follows browser sticky rules; examples use independent scroll containers.
### Type definitions
The component exports the following types
```ts
import type { AffixInstance } from '@cedar-design/ui'
```
`change` reports state transitions, so remeasuring an already fixed item does not repeat `true`; disabling a fixed item reports `false, 0`. Viewport units are reevaluated during measurement. CSS mode passes valid lengths to native sticky positioning; JS mode resolves numbers, numeric strings, px, rem, vw, vh, vmin and vmax. The target controls observation and JS measurement; native sticky remains constrained by actual CSS ancestors. Pending `updatePosition()` work cannot rebind a deactivated or replaced activation generation.
---
Document: llms/en-US/components/alert.md
# Alert
Start with the basic example, then compare related settings before moving to controlled, asynchronous or combined use cases.
## Basic examples
### Basic usage
Example source: src/alert/__demos__/basic.vue
```vue
This is an info alert.
```
## Appearance and states
### Appearance configuration comparison
Choose an axis to compare its available values with the same content and model. Other settings remain unchanged while comparing.
Example source: src/alert/__demos__/appearance-lab.vue
```vue
选择一个对比维度;其他配置和内容保持一致。输入类示例共享同一个值,便于比较外观。 Compare one dimension while keeping the other settings and content identical. Input specimens share the same value.
{{ demoCompareAxis }}={{ sample }}
This is an info alert.
```
## Content and presentation
### Title, alignment and banners
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `title` | Alert title | Title, alignment and banners, Action |
| `status` | Alert status | Title, alignment and banners, Show Icon |
| `center` | Whether to center the content | Title, alignment and banners |
| `banner` | Whether to display a top banner without borders or rounded corners | Title, alignment and banners |
| `show-icon` | Whether to show an icon | Show Icon |
| `closable` | Whether to show the close button | Action |
Compare title hierarchy, centered content and page-wide banners. Actions and dismiss behavior have separate examples.
Example source: src/alert/__demos__/content-comparison.vue
```vue
提示标题 title
This is an info alert.
This is an success alert.
Warning
This is an warning alert.
Error
This is a danger alert.
居中 center
This is a centered alert.
顶部公告 banner
This is a banner alert.
```
### Show Icon
- `status`: Selects the semantic state.
Example source: src/alert/__demos__/show-icon.vue
```vue
This is an info alert.
This is an success alert.
Warning
This is an warning alert.
Error
This is a danger alert.
```
### Action
Example source: src/alert/__demos__/action.vue
```vue
This is an info alert.
Detail
This is an info alert.
Detail
```
## Customization and slots
### Custom Icon
- `status`: Selects the semantic state.
Example source: src/alert/__demos__/custom-icon.vue
```vue
This is an alert with a custom icon.
Default type can still show a custom icon via slot.
```
## Interaction and control
### Dismiss controls and custom icons
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `closable` | Whether to show the close button | Dismiss controls and custom icons |
| `status` | Alert status | Dismiss controls and custom icons |
Operate the default and custom dismiss controls to compare the same dismissal behavior.
Example source: src/alert/__demos__/dismiss-comparison.vue
```vue
可关闭 closable
This is an info alert.
This is an success alert.
Warning
This is an warning alert.
Error
This is a danger alert.
自定义关闭图标 close icon
This is an info alert.
Close
This is an info alert.
```
## API
### `` Props
| Prop | Description | Type | Default |
| --------- | --------------------------------------------------------------------- | --------------------------------------------------- | ------------ |
| status | Alert status | `'info' \| 'success' \| 'warning' \| 'danger' \| 'default'` | `'info'` |
| variant | Visual variant | `'standard' \| 'tonal' \| 'outline'` | `'standard'` |
| color | Custom background color; overrides the background derived from type | `string` | - |
| title | Alert title | `string` | - |
| message | Content text; the default slot can also supply it | `string` | - |
| show-icon | Whether to show an icon | `boolean` | `true` |
| closable | Whether to show the close button | `boolean` | `false` |
| banner | Whether to display a top banner without borders or rounded corners | `boolean` | `false` |
| center | Whether to center the content | `boolean` | `false` |
| elevation | Elevation: `true`, `false`, or a level from `0-24` | `boolean \| number` | `false` |
### `` Events
| Event | Description | Arguments |
| ----------- | ------------------ | ----------------------------- |
| close | Triggered when the Close button is clicked and can only be used when the Close button is displayed | `(event: MouseEvent) => void` |
| closed | Emitted after close transition | - |
### `` Slots
| Slot | Description | Arguments |
| ---------- | -------- | ---- |
| default | Content | - |
| icon | Icon | - |
| title | Title | - |
| action | Actions | - |
| close-icon | The close icon of alert | - |
### Type definitions
The component exports the following types:
```ts
import type {
AlertInstance,
AlertProps,
AlertStatus,
AlertVariant,
} from '@cedar-design/ui'
```
### Style variables
See `style/token.less`; all variables use the `--c-alert-` prefix. Example override:
```css
:root {
--c-alert-padding-vertical: 12px;
--c-alert-padding-horizontal: 20px;
}
```
## Migration notes (breaking changes)
| Previous API | Current API |
| -- | -- |
| `type="error"` | `type="danger"` |
| `type="normal"` | `type="default"` |
| `closeable` | `closable` |
| `#close-element` slot | `#close-icon` slot |
Added capabilities: `variant` / `color` / `elevation` / `default` status / `closed` event.
`type="default"` renders no built-in icon. Use `#icon` when an icon is needed.
## Shared implementation and platform boundaries
Each platform maintains a complete local implementation. They do not import a common core or share component instances or reactive state. Changes must update both implementations. Component bodies, props, key styles and paired tests have read-only source consistency checks; theme tokens and installation entries remain local to each library.
The close button supports keyboard activation. close fires once, and closed fires after the leave transition. Maple renamed its internal __close-icon class to __close-btn. Default icons are adapted locally in each library.
### Complete variable defaults
Colored titles, content, icons and outline borders use readable system content colors. standard and tonal share the same level-1 background; standard adds a subtle decorative border. Default titles use content-primary; body text and icons use content-secondary. The content variable also sets the root inherited color, used by close icons and actions without an explicit color. Maple dark mode inherits these colors while retaining its geometry overrides: 16px padding, 22px icons, 12px icon/close gaps and 1.5 body line height. color changes only the background; callers must also verify foreground contrast. The table lists :root defaults, not theme overrides.
| Variable | Default |
| --- | --- |
| `--c-alert-padding-vertical` | `var(--c-sys-space-4)` |
| `--c-alert-padding-horizontal` | `var(--c-sys-space-6)` |
| `--c-alert-padding-vertical-with-title` | `var(--c-sys-space-6)` |
| `--c-alert-padding-horizontal-with-title` | `var(--c-sys-space-6)` |
| `--c-alert-border-radius` | `var(--c-sys-radius-md)` |
| `--c-alert-border-width` | `1px` |
| `--c-alert-font-size-content` | `var(--c-sys-font-size-md)` |
| `--c-alert-font-size-title` | `var(--c-sys-font-size-lg)` |
| `--c-alert-font-weight-title` | `var(--c-sys-font-weight-medium)` |
| `--c-alert-line-height` | `1.5715` |
| `--c-alert-line-height-title` | `1.5` |
| `--c-alert-title-margin-bottom` | `var(--c-sys-space-2)` |
| `--c-alert-icon-size` | `16px` |
| `--c-alert-icon-margin-right` | `var(--c-sys-space-4)` |
| `--c-alert-action-margin-left` | `var(--c-sys-space-5)` |
| `--c-alert-close-margin-left` | `var(--c-sys-space-4)` |
| `--c-alert-standard-info-bg` | `rgb(var(--c-blue-1))` |
| `--c-alert-standard-info-border` | `rgb(var(--c-blue-3))` |
| `--c-alert-standard-info-title` | `var(--c-sys-color-content-info)` |
| `--c-alert-standard-info-content` | `var(--c-sys-color-content-info)` |
| `--c-alert-standard-info-icon` | `var(--c-sys-color-content-info)` |
| `--c-alert-standard-success-bg` | `rgb(var(--c-success-1))` |
| `--c-alert-standard-success-border` | `rgb(var(--c-success-3))` |
| `--c-alert-standard-success-title` | `var(--c-sys-color-content-success)` |
| `--c-alert-standard-success-content` | `var(--c-sys-color-content-success)` |
| `--c-alert-standard-success-icon` | `var(--c-sys-color-content-success)` |
| `--c-alert-standard-warning-bg` | `rgb(var(--c-warning-1))` |
| `--c-alert-standard-warning-border` | `rgb(var(--c-warning-3))` |
| `--c-alert-standard-warning-title` | `var(--c-sys-color-content-warning)` |
| `--c-alert-standard-warning-content` | `var(--c-sys-color-content-warning)` |
| `--c-alert-standard-warning-icon` | `var(--c-sys-color-content-warning)` |
| `--c-alert-standard-danger-bg` | `rgb(var(--c-danger-1))` |
| `--c-alert-standard-danger-border` | `rgb(var(--c-danger-3))` |
| `--c-alert-standard-danger-title` | `var(--c-sys-color-content-danger)` |
| `--c-alert-standard-danger-content` | `var(--c-sys-color-content-danger)` |
| `--c-alert-standard-danger-icon` | `var(--c-sys-color-content-danger)` |
| `--c-alert-standard-default-bg` | `var(--c-color-fill-2)` |
| `--c-alert-standard-default-border` | `var(--c-sys-color-border-default)` |
| `--c-alert-standard-default-title` | `var(--c-sys-color-content-primary)` |
| `--c-alert-standard-default-content` | `var(--c-sys-color-content-secondary)` |
| `--c-alert-standard-default-icon` | `var(--c-sys-color-content-secondary)` |
| `--c-alert-tonal-info-bg` | `rgb(var(--c-blue-1))` |
| `--c-alert-tonal-info-title` | `var(--c-sys-color-content-info)` |
| `--c-alert-tonal-info-content` | `var(--c-sys-color-content-info)` |
| `--c-alert-tonal-info-icon` | `var(--c-sys-color-content-info)` |
| `--c-alert-tonal-success-bg` | `rgb(var(--c-success-1))` |
| `--c-alert-tonal-success-title` | `var(--c-sys-color-content-success)` |
| `--c-alert-tonal-success-content` | `var(--c-sys-color-content-success)` |
| `--c-alert-tonal-success-icon` | `var(--c-sys-color-content-success)` |
| `--c-alert-tonal-warning-bg` | `rgb(var(--c-warning-1))` |
| `--c-alert-tonal-warning-title` | `var(--c-sys-color-content-warning)` |
| `--c-alert-tonal-warning-content` | `var(--c-sys-color-content-warning)` |
| `--c-alert-tonal-warning-icon` | `var(--c-sys-color-content-warning)` |
| `--c-alert-tonal-danger-bg` | `rgb(var(--c-danger-1))` |
| `--c-alert-tonal-danger-title` | `var(--c-sys-color-content-danger)` |
| `--c-alert-tonal-danger-content` | `var(--c-sys-color-content-danger)` |
| `--c-alert-tonal-danger-icon` | `var(--c-sys-color-content-danger)` |
| `--c-alert-tonal-default-bg` | `var(--c-color-fill-2)` |
| `--c-alert-tonal-default-title` | `var(--c-sys-color-content-primary)` |
| `--c-alert-tonal-default-content` | `var(--c-sys-color-content-secondary)` |
| `--c-alert-tonal-default-icon` | `var(--c-sys-color-content-secondary)` |
| `--c-alert-outline-info-border` | `var(--c-sys-color-content-info)` |
| `--c-alert-outline-info-title` | `var(--c-sys-color-content-info)` |
| `--c-alert-outline-info-content` | `var(--c-sys-color-content-info)` |
| `--c-alert-outline-info-icon` | `var(--c-sys-color-content-info)` |
| `--c-alert-outline-success-border` | `var(--c-sys-color-content-success)` |
| `--c-alert-outline-success-title` | `var(--c-sys-color-content-success)` |
| `--c-alert-outline-success-content` | `var(--c-sys-color-content-success)` |
| `--c-alert-outline-success-icon` | `var(--c-sys-color-content-success)` |
| `--c-alert-outline-warning-border` | `var(--c-sys-color-content-warning)` |
| `--c-alert-outline-warning-title` | `var(--c-sys-color-content-warning)` |
| `--c-alert-outline-warning-content` | `var(--c-sys-color-content-warning)` |
| `--c-alert-outline-warning-icon` | `var(--c-sys-color-content-warning)` |
| `--c-alert-outline-danger-border` | `var(--c-sys-color-content-danger)` |
| `--c-alert-outline-danger-title` | `var(--c-sys-color-content-danger)` |
| `--c-alert-outline-danger-content` | `var(--c-sys-color-content-danger)` |
| `--c-alert-outline-danger-icon` | `var(--c-sys-color-content-danger)` |
| `--c-alert-outline-default-border` | `var(--c-sys-color-border-default)` |
| `--c-alert-outline-default-title` | `var(--c-sys-color-content-primary)` |
| `--c-alert-outline-default-content` | `var(--c-sys-color-content-secondary)` |
| `--c-alert-outline-default-icon` | `var(--c-sys-color-content-secondary)` |
### Motion variables
Built-in motion follows `prefers-reduced-motion: reduce`. Reduced motion does not prevent loading-state or close-event updates.
| Token | Default |
| --- | --- |
| `--c-alert-close-duration` | `var(--c-sys-motion-duration-slow)` |
---
Document: llms/en-US/components/anchor.md
# Anchor
Start with the basic example, then compare related settings before moving to controlled, asynchronous or combined use cases.
## Basic examples
### Basic usage
- `show-background`: Whether to show the background
Example source: src/anchor/__demos__/basic.vue
```vue
基础用法
无轴线模式
固钉位置
Affix
Scroll Boundary
Scroll Boundary1
Hash mode1
是否改变hash
```
## Layout and arrangement
### Affix
Preview configuration: `:offsetTop="80"`, `href="#basic"`, `href="#show-line"`, `href="#affix"`.
Example source: src/anchor/__demos__/affix.vue
```vue
Basic
Show Rail
Affix
Scroll Boundary
Hash mode
```
## Content and presentation
### Show Line
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `show-line` | Whether to show the left axis | Show Line |
| `change-hash` | Whether to change the hash. When set to `false`, clicking on the anchor will not change the hash of the page | Hash |
- `show-line`: Whether to show the left axis
Example source: src/anchor/__demos__/show-line.vue
```vue
Basic
Show Rail
Affix
Scroll Boundary
Hash mode
```
### Hash
- `change-hash`: Whether to change the hash. When set to `false`, clicking on the anchor will not change the hash of the page
Example source: src/anchor/__demos__/hash.vue
```vue
Basic
Show Line
Affix
Scroll Boundary
Hash mode
```
## Lifecycle and edge cases
### Boundary
- `boundary`: Scrolling boundary value. After setting the value to a number, it will stop scrolling when the distance is `boundary` from the scrolling container.
Example source: src/anchor/__demos__/boundary.vue
```vue
Basic
Show Rail
Affix
Scroll Boundary
Hash mode
```
### Scroll Lifecycle
Example source: src/anchor/__demos__/scroll-lifecycle.vue
```vue
切换 KeepAlive
卸载/挂载
切换链接后立即停用或卸载;激活后再次点击,检查旧滚动不会恢复。change
通知:{{ changes }}
```
## Reading direction
The axis, highlight and indentation follow reading start. Vertical scrolling and anchor targets remain unchanged.
## API
### `` Props
| Parameter | Description | Type | Default |
| ---------------- | ---------------------------------------------------------------------------- | ----------------------------------------------------- | :-------: |
| boundary | Scrolling `boundary` value. After setting the value to a number, it will stop scrolling when the distance is `boundary` from the scrolling container. | `'start' \| 'end' \| 'center' \| 'nearest' \| number` | `'start'` |
| show-line | Whether to show the left axis | `boolean` | `true` |
| show-background | Whether to show the background | `boolean` | `true` |
| scroll-container | Scroll container | `string \| HTMLElement \| Window` | `-` |
| change-hash | Whether to change the hash. When set to `false`, clicking on the anchor will not change the hash of the page | `boolean` | `true` |
### `` Events
| Event | Description | Arguments |
| ------ | ------------------ | ------------------------------------------------ |
| select | Emitted when the user clicks a link | hash: `string \| undefined` preHash: `string` |
| change | Emitted when the active link changes | hash: `string` |
### `` Props
| Parameter | Description | Type | Default |
| ------ | ------------------ | -------- | :----: |
| title | Anchor link text | `string` | `-` |
| href | Anchor link URL | `string` | `-` |
### Type definitions
The component exports the following types
```ts
import type { AnchorInstance } from '@cedar-design/ui'
```
---
Document: llms/en-US/components/auto-complete.md
# AutoComplete
Text input with suggested completions. Suggestions are arrays; application code owns remote loading.
## Reading direction
The editor and suggestion popup inherit source dir, including in custom containers. Horizontal caret keys keep native editing behavior; vertical keys navigate candidates, Enter selects and Escape closes. Candidate updates preserve the native composition buffer until composition ends instead of repainting the previous model value.
## Search and visibility
case-sensitive replaces the removed strict prop. Default matching searches label and ignores case; use search-fields to include value. Custom filter-option callbacks own their case policy; filter-option=false bypasses local filtering for remote results. AutoComplete has no public open/defaultOpen/update:open API: focusing and typing determine suggestion visibility. trigger-props can customize placement but cannot force internal open state. A public v-model:open would require a separate API change.
## Basic examples
### Basic
Example source: src/auto-complete/__demos__/basic.vue
```vue
当前值:{{ value || '-' }}
```
### Interaction state comparison
Toggle disabled, read-only and error states, then interact with the same instance. Recovery controls remain outside the target; error appearance alone does not validate data.
Configuration details and limits
#### State Lab
## Appearance and states
### Appearance configuration comparison
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| ------------- | ------------------------------------------------------------------------ | ----------------------------------- |
| `options` | Suggestions, including groups; unique values become strings on selection | Appearance configuration comparison |
| `clearable` | Allow clearing a nonempty editable value | Appearance configuration comparison |
Choose a dimension to compare all its values side by side while keeping other settings and content identical. Change the other settings to inspect combinations; input specimens share one model.
Example source: src/auto-complete/__demos__/appearance-lab.vue
```vue
选择一个对比维度;其他配置和内容保持一致。输入类示例共享同一个值,便于比较外观。 Compare one dimension while keeping the other settings and content identical. Input specimens share the same value.
{{ demoCompareAxis }}={{ sample }}
```
## Matching and suggestions
### Opening Policy
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| ---------------- | ------------------------------------------------------------------------ | --------------------------------------------- |
| `options` | Suggestions, including groups; unique values become strings on selection | Opening Policy, Case Sensitive, Group Spacing |
| `placeholder` | Placeholder or floating hint text | Opening Policy, Case Sensitive, Group Spacing |
| `should-open` | Opening policy; does not filter candidates | Opening Policy, Group Spacing, Virtual List |
| `filter-option` | Filter by label; false for remote filtering | Opening Policy |
| `case-sensitive` | Case-sensitive built-in matching | Case Sensitive |
| `trigger-props` | Trigger configuration; cannot override owned opening and disabled state | Group Spacing |
Example source: src/auto-complete/__demos__/opening-policy.vue
```vue
允许空输入展开
按输入过滤候选
展开条件不负责过滤;即使允许展开,没有匹配候选也不显示菜单。
```
### Case Sensitive
Example source: src/auto-complete/__demos__/case-sensitive.vue
```vue
```
### Group Spacing
Example source: src/auto-complete/__demos__/group-spacing.vue
```vue
```
### Virtual List
Example source: src/auto-complete/__demos__/virtual-list.vue
```vue
```
## Content and field customization
### Footer
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| ------------- | ------------------------------------------------------------------------ | ----------------- |
| `options` | Suggestions, including groups; unique values become strings on selection | Footer, Decorator |
| `placeholder` | Placeholder or floating hint text | Footer, Decorator |
| `field-names` | Map value, label, disabled and other fields | Footer |
| `variant` | Input variant; inherits Group when unset | Decorator |
| `hint` | Enable Input floating hint | Decorator |
| `clearable` | Allow clearing a nonempty editable value | Decorator |
Example source: src/auto-complete/__demos__/footer.vue
```vue
{{ data.label }} · {{ data.raw.country }}
选择候选或继续自由输入
```
### Decorator
Example source: src/auto-complete/__demos__/decorator.vue
```vue
@ .com
```
## Interaction and keyboard
### Api Review
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| ------------- | ------------------------------------------------------------------------ | ------------------------- |
| `options` | Suggestions, including groups; unique values become strings on selection | Api Review, Accessibility |
| `clearable` | Allow clearing a nonempty editable value | Api Review |
| `disabled` | Disabled; inherited when unset, explicit false overrides | Api Review |
| `readonly` | Readonly; focus/copy allowed, suggestions stay closed | Api Review |
| `error` | Error state; inherits FormItem when unset | Api Review |
| `input-attrs` | Native input attributes; combobox state is owned by the component | Accessibility |
Example source: src/auto-complete/__demos__/state-lab.vue
```vue
disabled
readonly
error
```
### Accessibility
Example source: src/auto-complete/__demos__/accessibility.vue
```vue
前端框架
使用方向键浏览建议,Enter 选择,Escape 关闭。
```
## Async data and configuration
### Remote
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --------------- | ------------------------------------------------------------------------ | --------------------------- |
| `options` | Suggestions, including groups; unique values become strings on selection | Remote, Passthrough Options |
| `filter-option` | Filter by label; false for remote filtering | Remote |
| `placeholder` | Placeholder or floating hint text | Remote |
| `disabled` | Disabled; inherited when unset, explicit false overrides | Passthrough Options |
| `should-open` | Opening policy; does not filter candidates | Passthrough Options |
| `trigger-props` | Trigger configuration; cannot override owned opening and disabled state | Passthrough Options |
Example source: src/auto-complete/__demos__/remote.vue
```vue
```
### Passthrough Options
Example source: src/auto-complete/__demos__/passthrough-options.vue
```vue
{{
disabled ? "启用输入" : "禁用输入"
}}
顶层 disabled:{{ disabled }};聚焦输入框查看向上展开的候选。
```
### Props
| Prop | Description | Type | Default |
| -------------------- | ------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------- | -------------------------------- |
| `model-value` | Controlled text | `string` | `—` |
| `default-value` | Initial uncontrolled text | `string` | `''` |
| `options` | Suggestions, including groups; unique values become strings on selection | `(AutoCompleteOption \| SelectOptionGroup)[]` / `(query, { signal }) => Array / Promise` | `undefined` |
| `field-names` | Map value, label, disabled and other fields | `AutoCompleteFieldNames` | `—` |
| `should-open` | Opening policy; does not filter candidates | `(value: string) => boolean` | `value.length > 0` |
| `filter-option` | Filter by label; false for remote filtering | `AutoCompleteFilterOption` | automatic: arrays on; loader off |
| `case-sensitive` | Case-sensitive built-in matching | `boolean` | `false` |
| `popup-container` | Popup container; same contract as Trigger | `PopupContainer` | `—` |
| `trigger-props` | Trigger configuration; cannot override owned opening and disabled state | `TriggerProps` | `—` |
| `virtual-list-props` | Enable and configure virtual scrolling | `VirtualListProps` | `—` |
| `size` | Five sizes; inherit Group / Form / global configuration when unset | `xs \| sm \| md \| lg \| xl` | `md` |
| `variant` | Input variant; inherits Group when unset | `filled \| outline \| standard` | `outline` |
| `disabled` | Disabled; inherited when unset, explicit false overrides | `boolean` | `undefined` |
| `readonly` | Readonly; focus/copy allowed, suggestions stay closed | `boolean` | `undefined` |
| `error` | Error state; inherits FormItem when unset | `boolean` | `undefined` |
| `clearable` | Allow clearing a nonempty editable value | `boolean` | `false` |
| `placeholder` | Placeholder or floating hint text | `string` | `—` |
| `hint` | Enable Input floating hint | `boolean` | `undefined` |
| `line` | Show border or underline | `boolean` | `true` |
| `text-color` | Instance text color | `string` | `—` |
| `focus-color` | Instance focus color | `string` | `—` |
| `blur-color` | Instance unfocused hint color | `string` | `—` |
| `enterkeyhint` | Virtual keyboard action hint | `InputHTMLAttributes['enterKeyHint']` | `—` |
| `aria-label` | Accessible input name | `string` | `—` |
| `max-length` | Same length normalization for typing and selecting | `number \| { length: number; errorOnly?: boolean }` | `0` |
| `show-word-limit` | Display word count | `boolean` | `false` |
| `word-length` | Custom length calculation | `(value: string) => number` | `—` |
| `word-slice` | Custom slicing | `(value: string, maxLength: number) => string` | `—` |
| `input-attrs` | Native input attributes; combobox state is owned by the component | `Record` | `—` |
### Events
| Event | Arguments |
| ----------------------------------------- | ------------------------------------------------------------- |
| `update:model-value` | `value: string` |
| `input / search / change` | `value: string, event: Event` |
| `select` | `value: string, option: AutoCompleteOptionInfo, event: Event` |
| `clear` | `event: Event` |
| `focus / blur` | `event: FocusEvent` |
| `dropdown-scroll / dropdown-reach-bottom` | `event: Event` |
### Slots
| Slot | Description |
| ----------------- | ---------------------------------- |
| `option` | `{ data: AutoCompleteOptionInfo }` |
| `footer` | Menu footer |
| `prefix / suffix` | Input prefix / suffix |
| `clear-icon` | `{ clear }` |
### Shared field loading
`loading` displays the shared field indicator. `loading-mode` is `default` (indicator) or `line` (an indeterminate bottom line); it defaults to `default`. Rendering belongs to FieldDecorator. Loading does not implicitly disable editing or change readonly. Set those states separately.
## API details
| Token | Default |
| ----------------------------------------------- | --------------------------------------------------- |
| `--c-auto-complete-popup-max-height` | `var(--c-select-popup-max-height)` |
| `--c-auto-complete-popup-bg` | `var(--c-select-popup-bg)` |
| `--c-auto-complete-popup-border-radius` | `var(--c-select-popup-border-radius)` |
| `--c-auto-complete-popup-padding-vertical` | `var(--c-select-popup-padding-vertical)` |
| `--c-auto-complete-popup-font-size` | `var(--c-select-popup-font-size)` |
| `--c-auto-complete-popup-border-color` | `var(--c-select-popup-border-color)` |
| `--c-auto-complete-popup-box-shadow` | `var(--c-select-popup-box-shadow)` |
| `--c-auto-complete-option-height` | `var(--c-select-popup-option-height)` |
| `--c-auto-complete-option-font-weight-selected` | `var(--c-select-popup-option-font-weight-selected)` |
| `--c-auto-complete-option-padding-horizontal` | `var(--c-select-popup-option-padding-horizontal)` |
| `--c-auto-complete-option-bg-default` | `var(--c-select-popup-option-bg)` |
| `--c-auto-complete-option-bg-hover` | `var(--c-select-popup-option-bg-hover)` |
| `--c-auto-complete-option-bg-selected` | `var(--c-select-popup-option-bg-selected)` |
| `--c-auto-complete-option-bg-disabled` | `var(--c-select-popup-option-bg-disabled)` |
| `--c-auto-complete-option-text-color-default` | `var(--c-select-popup-option-text-color)` |
| `--c-auto-complete-option-text-color-hover` | `var(--c-select-popup-option-text-color-hover)` |
| `--c-auto-complete-option-text-color-selected` | `var(--c-select-popup-option-text-color-selected)` |
| `--c-auto-complete-option-text-color-disabled` | `var(--c-select-popup-option-text-color-disabled)` |
## API
### Empty values and reading placeholders
`empty-values` recognizes empty data; `empty-value` keeps existing clear output. `empty-text` defaults to `'-'` under `read-pretty`, with Field > FormItem > Form precedence and custom read slots first. With explicit empty-values, built-in required uses the policy; custom validators receive original data. See the [shared guide](llms/en-US/guide/empty-values.md).
| Prop | Type | Default and scope |
| ------------ | ------------------ | --------------------------------------------------------------------------- |
| empty-values | readonly unknown[] | Field > FormItem > Form > component-family default; replaces the whole list |
| empty-text | string | Field > FormItem > Form > '-'; explicit '' is valid |
These props belong to field presentation; pure panels do not gain reading mode. Form and FormItem provide inherited settings. The existing empty-value type and clear fallback remain component-specific.
### Props
| Prop | Description | Type | Default |
| -------------------- | ------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------- | ------------------------------------------------------------ |
| `model-value` | Controlled text | `string` | `—` |
| `default-value` | Initial uncontrolled text | `string` | `''` |
| `options` | Suggestions, including groups; unique values become strings on selection | `(AutoCompleteOption \| SelectOptionGroup)[]` / `(query, { signal }) => Array / Promise` | `undefined` |
| `field-names` | Map value, label, disabled and other fields | `AutoCompleteFieldNames` | `—` |
| `should-open` | Opening policy; does not filter candidates | `(value: string) => boolean` | `value.length > 0` |
| `filter-option` | Filter by label; false for remote filtering | `AutoCompleteFilterOption` | Automatic: enabled for arrays, disabled for loader functions |
| `case-sensitive` | Case-sensitive built-in matching | `boolean` | `false` |
| `popup-container` | Popup container; same contract as Trigger | `PopupContainer` | `—` |
| `trigger-props` | Trigger configuration; cannot override owned opening and disabled state | `TriggerProps` | `—` |
| `virtual-list-props` | Enable and configure virtual scrolling | `VirtualListProps` | `—` |
| `size` | Five sizes; inherit Group / Form / global configuration when unset | `xs \| sm \| md \| lg \| xl` | `md` |
| `variant` | Input variant; inherits Group when unset | `filled \| outline \| standard` | `outline` |
| `disabled` | Disabled; inherited when unset, explicit false overrides | `boolean` | `undefined` |
| `readonly` | Readonly; focus/copy allowed, suggestions stay closed | `boolean` | `undefined` |
| `error` | Error state; inherits FormItem when unset | `boolean` | `undefined` |
| `clearable` | Allow clearing a nonempty editable value | `boolean` | `false` |
| `placeholder` | Placeholder or floating hint text | `string` | `—` |
| `hint` | Enable Input floating hint | `boolean` | `undefined` |
| `line` | Show border or underline | `boolean` | `true` |
| `text-color` | Instance text color | `string` | `—` |
| `focus-color` | Instance focus color | `string` | `—` |
| `blur-color` | Instance unfocused hint color | `string` | `—` |
| `enterkeyhint` | Virtual keyboard action hint | `InputHTMLAttributes['enterKeyHint']` | `—` |
| `aria-label` | Accessible input name | `string` | `—` |
| `max-length` | Same length normalization for typing and selecting | `number \| { length: number; errorOnly?: boolean }` | `0` |
| `show-word-limit` | Display word count | `boolean` | `false` |
| `word-length` | Custom length calculation | `(value: string) => number` | `—` |
| `word-slice` | Custom slicing | `(value: string, maxLength: number) => string` | `—` |
| `input-attrs` | Native input attributes; combobox state is owned by the component | `Record` | `—` |
### Events
| Event | Arguments |
| ----------------------------------------- | ------------------------------------------------------------- |
| `update:model-value` | `value: string` |
| `input / search / change` | `value: string, event: Event` |
| `select` | `value: string, option: AutoCompleteOptionInfo, event: Event` |
| `clear` | `event: Event` |
| `focus / blur` | `event: FocusEvent` |
| `dropdown-scroll / dropdown-reach-bottom` | `event: Event` |
Typing: `input → update:modelValue → search`; selection: `update:modelValue → select → change`; clear: `clear → input → update:modelValue → change`. Selecting the same value emits only select. change is a commit on blur, Enter or selection. Input owns typing/focus/clear Form notifications; AutoComplete notifies Form once for suggestion commits. Selection applies maxLength; select.value is the committed string, while option.value retains the original suggestion. clear receives an event, not a string.
### Slots
| Slot | Description |
| ----------------- | ---------------------------------- |
| `option` | `{ data: AutoCompleteOptionInfo }` |
| `footer` | Menu footer |
| `prefix / suffix` | Input prefix / suffix |
| `clear-icon` | `{ clear }` |
### Methods
`focus()` / `blur()`
label is text. Use the option slot or an option render function for complex candidates; function/VNode labels are not supported. Arrow keys browse, Enter selects, Escape closes, and Tab retains native focus navigation. Vue useId keeps SSR identifiers stable.
## Type definitions
```ts
import type {
AutoCompleteProps,
AutoCompleteInstance,
AutoCompleteOption,
AutoCompleteOptionData,
AutoCompleteOptionInfo,
AutoCompleteFieldNames,
AutoCompleteFilterOption,
} from "@cedar-design/ui";
```
## Style variables
| Token | Default |
| ----------------------------------------------- | --------------------------------------------------- |
| `--c-auto-complete-popup-max-height` | `var(--c-select-popup-max-height)` |
| `--c-auto-complete-popup-bg` | `var(--c-select-popup-bg)` |
| `--c-auto-complete-popup-border-radius` | `var(--c-select-popup-border-radius)` |
| `--c-auto-complete-popup-padding-vertical` | `var(--c-select-popup-padding-vertical)` |
| `--c-auto-complete-popup-font-size` | `var(--c-select-popup-font-size)` |
| `--c-auto-complete-popup-border-color` | `var(--c-select-popup-border-color)` |
| `--c-auto-complete-popup-box-shadow` | `var(--c-select-popup-box-shadow)` |
| `--c-auto-complete-option-height` | `var(--c-select-popup-option-height)` |
| `--c-auto-complete-option-font-weight-selected` | `var(--c-select-popup-option-font-weight-selected)` |
| `--c-auto-complete-option-padding-horizontal` | `var(--c-select-popup-option-padding-horizontal)` |
| `--c-auto-complete-option-bg-default` | `var(--c-select-popup-option-bg)` |
| `--c-auto-complete-option-bg-hover` | `var(--c-select-popup-option-bg-hover)` |
| `--c-auto-complete-option-bg-selected` | `var(--c-select-popup-option-bg-selected)` |
| `--c-auto-complete-option-bg-disabled` | `var(--c-select-popup-option-bg-disabled)` |
| `--c-auto-complete-option-text-color-default` | `var(--c-select-popup-option-text-color)` |
| `--c-auto-complete-option-text-color-hover` | `var(--c-select-popup-option-text-color-hover)` |
| `--c-auto-complete-option-text-color-selected` | `var(--c-select-popup-option-text-color-selected)` |
| `--c-auto-complete-option-text-color-disabled` | `var(--c-select-popup-option-text-color-disabled)` |
Clearing does not emit search or reopen candidates, including when focus returns from a keyboard-focused clear button to the input. The parent controls the value: each rejected clear or selection still emits a change proposal; an accepted candidate selection notifies Form once.
### Form field presentation and confirmation
This component supports `edit-mode` with field > FormItem > Form precedence. When unset, it defaults to `direct` and preserves `direct` editing. Supported values: `direct / click / dblclick`. Non-`direct` modes open the editor through the field value trigger and keep one draft; v-model updates only after confirmation. Cancel, reset or enabling readPretty discards the draft.
Cedar uses edit-mode="click" / "dblclick" to open an editor popup near the field. Enter/F2 also opens it; cancel/Escape discards the draft, and confirmation commits it. readPretty is an independent reading setting, separate from readonly and disabled.
`before-commit(value, { previousValue, signal })` can reject an overlay save. FormItem validates the candidate first and keeps the editor open on failure. `open / default-open / update:open` control the editor. Use `#read="{ value, text }"` to customize display. See the full field comparison in Form.
`read-pretty` is an independent boolean alongside `readonly` and `disabled`. It inherits from field to FormItem to Form; explicit `false` overrides the parent. The default is `false`. Reading mode renders no editor.
Suggestions share Select’s list, group, selected and disabled styles. AutoComplete style variables follow the corresponding Select variables by default. In `inline` mode, the list opens below the input and follows scrolling; use `trigger-props` to explicitly change placement or enable automatic flipping. In `popup` mode, candidates use the same full editor surface as Select.
### Public type exports
Root and component entries export `AutoCompleteEmits`、`AutoCompleteSlots`、`AutoCompleteExpose` alongside Props and Instance. Emits are event argument tuples derived from the runtime validators; Expose contains focus/blur.
`case-sensitive` only makes built-in local filtering `case-sensitive`: `ap` matches `Apple` when false, but not when true. It does not require choosing an option or validate the value. A custom `filterOption` takes priority; `filterOption=false` disables local filtering and makes `case-sensitive` irrelevant.
### Migrating strict / Migration
The old `strict` prop is removed. Use `case-sensitive` (`caseSensitive` in TypeScript) instead; boolean meanings and the default false remain unchanged. This removal is marked for the next major release, without a compatibility alias.
### Built-in search fields
`searchFields` / `search-fields` is a readonly `('label' | 'value')[]`, defaulting to `['label']`. Multiple fields use OR matching, case-insensitive by default. `['value', 'label']` searches codes and names; fieldNames maps semantic fields to business fields. An empty array matches no items for a nonempty query. Values are compared as strings; object traversal, object values and pinyin matching require a custom callback. A custom callback takes precedence and decides case handling itself. Remote results use the existing protocol for disabling local filtering. Cascader retains path semantics and checks the configured fields on each path node.
## Configuring the cleared value
`empty-value` / `emptyValue` configures the model value produced by clearing. It accepts a value in the component model type, null, or a zero-argument factory. Omitting it preserves the existing default. Use `() => undefined` to distinguish omission from returning undefined. Arrays are shallow-copied on each clear; selected items that cannot be cleared remain. It does not redefine empty values, change Form reset defaults, or treat 0/false as universally empty.
Text and person-ID models remain strings; use an empty string or a business-defined string sentinel.
## Loading options through a function prop
Pass options(query, { signal }) directly; useAsyncData is unnecessary. options still accepts arrays, and an explicit array, including [], takes precedence. The component manages loading, stale-result isolation and cancellation. load-error reports failures, and the instance refresh() method retries. A business loader may accept only query and ignore the second argument.
filterable enables entering a search query. filterOption controls only local matching and never sends requests. With an options loader, remote results are not filtered again by default; with only an array, local matching is enabled by default. Most callers do not need filter-option.
```vue
```
`empty-value` accepts explicit `null` (or `() => null`). Clearing publishes `null` unchanged; omitted values preserve the existing default. Editors render `null` as blank without converting ordinary empty-string input to `null`. In popup editing, clearing changes the draft; confirm commits it and cancel preserves the original model.
---
Document: llms/en-US/components/avatar.md
# Avatar
Start with the basic example, then compare related settings before moving to controlled, asynchronous or combined use cases.
## Basic examples
### Basic usage
- `color`: Overrides the color.
Example source: src/avatar/__demos__/basic.vue
```vue
C
CD
Cedar
U
```
## Appearance and states
### Size and shape comparison
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `shape` | Avatar shape | Size and shape comparison, Style, Hoverable |
| `image-url` | Image URL | Size and shape comparison, Hoverable |
| `alt` | Image alternative text | Size and shape comparison, Hoverable |
| `bordered` | Whether to show a border | Style, Hoverable |
| `size` | Avatar width and height; numbers are px, strings are CSS lengths | Size and shape comparison |
| `color` | Background color | Style |
Compare space used at each size, then round and square boundaries. Image fitting and fallback remain separate.
Example source: src/avatar/__demos__/shape-size-comparison.vue
```vue
尺寸 size
{{ scene1.labels[size] }}
{{ size }}px
{{ size }}px
Aa
{{ size }}
形状 shape
圆
circle
方
square
circle · 图片
square · 图片
```
### Style
- `color`: Overrides the color.
Example source: src/avatar/__demos__/style.vue
```vue
火
Cedar
CD
A
B
C
```
### Hoverable
Preview configuration: `hoverable`, `image-url="/cat.jpg"`, `alt="悬停放大"`, `shape="square"`.
Example source: src/avatar/__demos__/hoverable.vue
```vue
H
方
+2
```
## Layout and arrangement
### Group direction and overflow
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `image-url` | Image URL | Group direction and overflow |
| `alt` | Image alternative text | Group direction and overflow |
| `bordered` | Whether to show a border | Group direction and overflow |
| `color` | Background color | Group direction and overflow |
Compare horizontal and vertical groups, maximum counts, stacking and overflow indicators.
Example source: src/avatar/__demos__/group-comparison.vue
```vue
头像组 group
默认叠层
+2
max-count + max-style
A
B
C
z-index-ascend
CD
shape="square" · offset="-16"
A
B
纵向头像组 group vertical
offset = -12
+2
offset = -20
A
```
## Content and presentation
### Auto Fix
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `image-url` | Image URL | Image, Fit, Fallback |
| `alt` | Image alternative text | Image, Fit, Fallback |
| `size` | Avatar width and height; numbers are px, strings are CSS lengths | Image, Fit, Fallback |
| `shape` | Avatar shape | Auto Fix, Image |
| `auto-fix-font-size` | Whether to shrink long text automatically | Auto Fix |
| `object-fit` | Image fitting mode | Fit |
Preview configuration: `shape="square"`, `:auto-fix-font-size="false"`, `placeholder="输入更长的文字看缩放"`, `clearable`.
Example source: src/avatar/__demos__/auto-fix.vue
```vue
{{ text }}
圆形 · 自适应
{{ text }}
方形 · 自适应
{{ text }}
关闭自适应
```
### Image
- `size`: Controls the component size.
Example source: src/avatar/__demos__/image.vue
```vue
image-url
方形图片
默认插槽 img
```
### Fit
- `size`: Controls the component size.
Example source: src/avatar/__demos__/fit.vue
```vue
{{ fit }}
```
### Fallback
- `size`: Controls the component size.
Example source: src/avatar/__demos__/fallback.vue
```vue
lazy + loading
error 图片
NA
error 插槽
```
## Interaction and control
### Trigger
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `image-url` | Image URL | Trigger |
| `alt` | Image alternative text | Trigger |
| `size` | Avatar width and height; numbers are px, strings are CSS lengths | Trigger |
| `trigger-type` | How the action icon is shown | Trigger |
- `size`: Controls the component size.
Example source: src/avatar/__demos__/trigger.vue
```vue
+
{{ last === 'button' ? 'click · button' : 'trigger-type="button"' }}
+
{{ last === 'overlay' ? 'click · overlay' : 'trigger-type="overlay"' }}
```
## API
### Props
| Prop | Description | Type | Default |
| --- | --- | --- | --- |
| shape | Avatar shape | `circle / square` | `circle` |
| image-url | Image URL | `string` | `-` |
| alt | Image alternative text | `string` | `''` |
| size | Avatar width and height; numbers are px, strings are CSS lengths | `number / string` | `-` |
| auto-fix-font-size | Whether to shrink long text automatically | `boolean` | `true` |
| trigger-type | How the action icon is shown | `button / overlay` | `button` |
| trigger-icon-style | Custom style for the action icon | `CSSProperties` | `-` |
| object-fit | Image fitting mode | `fill / contain / cover / none / scale-down` | `cover` |
| color | Background color | `string` | `-` |
| bordered | Whether to show a border | `boolean` | `false` |
| border-color | Border color | `string` | `-` |
| loading | Placeholder image while loading | `string` | `-` |
| error | Fallback image URL when image loading fails | `string` | `-` |
| lazy | Whether to lazy-load the image | `boolean` | `false` |
| hoverable | Whether to scale on hover | `boolean` | `false` |
### Events
| Event | Description | Arguments |
| --- | --- | --- |
| click | Emitted when the avatar is clicked | `(event: MouseEvent) => void` |
| load | Emitted when the image loads | `() => void` |
| error | Emitted when image loading fails | `() => void` |
### Slots
| Slot | Description |
| --- | --- |
| default | Text, icon, or loading content for an image |
| error | Fallback content when image loading fails |
| trigger-icon | Action icon on the avatar |
### Methods
No custom public methods.
### AvatarGroup Props
| Prop | Description | Type | Default |
| --- | --- | --- | --- |
| shape | Child avatar shape | `circle / square` | `circle` |
| size | Child avatar width and height; numbers are px, strings are CSS lengths | `number / string` | `-` |
| auto-fix-font-size | Whether to shrink child avatar text automatically | `boolean` | `true` |
| max-count | Maximum visible avatars; `0` means unlimited | `number` | `0` |
| z-index-ascend | Use ascending stacking order | `boolean` | `false` |
| max-style | Custom summary avatar style | `CSSProperties` | `-` |
| max-popover-props | Summary Popover props | `PopoverProps` | `-` |
| offset | Overlap offset | `number / string` | `-` |
| vertical | Stack avatars vertically | `boolean` | `false` |
### AvatarGroup Slots
| Slot | Description |
| --- | --- |
| default | Avatar list |
### Type definitions
```ts
import type {
AvatarGroupInstance,
AvatarGroupProps,
AvatarInstance,
AvatarProps,
AvatarObjectFit,
AvatarShape,
AvatarTriggerType,
} from "@cedar-design/ui";
```
### Style variables
| Variable | Default |
| --- | --- |
| `--c-avatar-size-default` | `40px` |
| `--c-avatar-font-size-text` | `20px` |
| `--c-avatar-text-color` | `var(--c-sys-color-content-primary)` |
| `--c-avatar-text-padding-inline` | `4px` |
| `--c-avatar-bg` | `var(--c-color-fill-4)` |
| `--c-avatar-border-width` | `2px` |
| `--c-avatar-border-color` | `var(--c-sys-color-surface-default)` |
| `--c-avatar-group-item-border` | `var(--c-sys-color-surface-default)` |
| `--c-avatar-group-item-border-width` | `2px` |
| `--c-avatar-group-offset` | `-10px` |
| `--c-avatar-group-popover-item-spacing` | `8px` |
| `--c-avatar-font-weight-text` | `500` |
| `--c-avatar-circle-border-radius` | `50%` |
| `--c-avatar-square-border-radius` | `4px` |
| `--c-avatar-size-trigger-button` | `20px` |
| `--c-avatar-trigger-button-bg` | `var(--c-color-fill-2)` |
| `--c-avatar-trigger-button-bg-hover` | `var(--c-color-fill-3)` |
| `--c-avatar-trigger-overlay-icon` | `var(--c-sys-color-content-on-dark)` |
| `--c-avatar-trigger-overlay-bg` | `color-mix(in srgb, var(--c-color-black) 60%, transparent)` |
| `--c-avatar-trigger-icon-button` | `var(--c-sys-color-content-primary)` |
| `--c-avatar-spacing-trigger-button-right` | `4px` |
| `--c-avatar-spacing-trigger-button-bottom` | `4px` |
| `--c-avatar-size-trigger-icon` | `12px` |
| `--c-avatar-trigger-button-border-radius` | `50%` |
| `--c-avatar-font-size-max-count` | `20px` |
| `--c-avatar-max-count-text-color` | `var(--c-sys-color-content-primary)` |
| `--c-avatar-trigger-overlay-font-size` | `16px` |
| `--c-avatar-hover-transform` | `scale(1.1)` |
| `--c-avatar-motion-duration` | `0.2s` |
| `--c-avatar-z-index-trigger` | `1` |
| `--c-avatar-z-index-overlay` | `0` |
| `--c-avatar-z-index-overlay-hover` | `2` |
Text, summary counts and button trigger icons use the primary content `color` by default. Borders follow the container surface; only icons on dark interaction overlays use `content-on-dark`. The avatar `fill-4` background, button background/hover levels and translucent black overlay remain component visual values. When overriding the avatar background with `color`, also check text contrast and override `text-color` if needed.
### Reduced motion
Built-in CSS transitions follow `prefers-reduced-motion: reduce`. Removing transitions does not change final visibility, selected/expanded state or event semantics. Applications control custom animations inside slots.
---
Document: llms/en-US/components/back-top.md
# BackTop
Visibility RAF and JS duration/easing interpolation have separate ownership. Old listeners/canceled or consumed frames cannot replay after target replacement/deactivation/disposal. Recheck after custom easing before writing; RAF/cancel/time origin use the target owner window. Retained inactive/disposed commands are inert, activation does not resume old animation. Scoped14/full30 per copy pass using controlled queues/iframe, not native browser/OS proof. Default200ms/API remain; no CSS token added.
A native button that scrolls the page or an explicit container to the top.
## Basic examples
### Basic usage
Example source: src/back-top/__demos__/basic.vue
```vue
```
## Customization and slots
### Custom position
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `target-container` | Scroll target; omitted means page | Custom position |
| `popup-container` | Render target; false renders locally | Custom position |
| `visible-height` | Inclusive scroll threshold in px, numeric strings accepted | Custom position |
| `right` | Right offset; number in px, string accepts CSS units | Custom position |
| `bottom` | Bottom offset; number in px, string accepts CSS units | Custom position |
| `aria-label` | Accessible name | Custom position |
Example source: src/back-top/__demos__/custom-position.vue
```vue
```
## Interaction and control
### Switch scroll container
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `target-container` | Scroll target; omitted means page | Switch scroll container, Content and events |
| `popup-container` | Render target; false renders locally | Switch scroll container, Content and events |
| `visible-height` | Inclusive scroll threshold in px, numeric strings accepted | Switch scroll container, Content and events |
| `right` | Right offset; number in px, string accepts CSS units | Switch scroll container, Content and events |
| `bottom` | Bottom offset; number in px, string accepts CSS units | Switch scroll container, Content and events |
| `aria-label` | Accessible name | Switch scroll container, Content and events |
Example source: src/back-top/__demos__/container.vue
```vue
在面板内滚动,超过 120px 时显示按钮。
切换滚动目标 {{ useSecond ? 'B' : 'A' }}
```
### Content and events
Example source: src/back-top/__demos__/custom.vue
```vue
在面板内滚动,超过 120px 时显示按钮。 {{ '点击次数:' }}{{ clicks }}
```
The examples use isolated local containers. Omit `target-container` to listen to the page, not the nearest scrollable ancestor. A selector that is invalid or missing hides the button; use a reactive getter for a container mounted asynchronously. `popup-container` controls where the button renders, not what scrolls.
## Lifecycle and edge cases
### Scheduling Lifecycle
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `target-container` | Scroll target; omitted means page | Scheduling Lifecycle |
| `popup-container` | Render target; false renders locally | Scheduling Lifecycle |
| `duration` | Animation duration in ms; 0 is immediate | Scheduling Lifecycle |
| `easing` | Built-in curve or normalized progress function | Scheduling Lifecycle |
Example source: src/back-top/__demos__/scheduler-lifecycle.vue
```vue
Scroll down / 滚动到底部
Switch target / 切换目标
Activate / 停用与激活
Retained command / 保留命令
Start an animation, switch or deactivate before completion. Old work must
not resume.
```
## API
### Props
| Prop | Description | Type | Default |
| --- | --- | --- | --- |
| `target-container` | Scroll target; omitted means page | `string \| HTMLElement \| (() => HTMLElement \| null \| undefined)` | `—` |
| `popup-container` | Render target; false renders locally | `string \| HTMLElement \| false` | `body` |
| `visible-height` | Inclusive scroll threshold in px, numeric strings accepted | `number \| string` | `200` |
| `duration` | Animation duration in ms; 0 is immediate | `number` | `200` |
| `easing` | Built-in curve or normalized progress function | `'linear' \| 'quartOut' \| 'easeInOutCubic' \| ((progress: number) => number)` | `'quartOut'` |
| `right` | Right offset; number in px, string accepts CSS units | `number \| string` | `—` |
| `bottom` | Bottom offset; number in px, string accepts CSS units | `number \| string` | `—` |
| `elevation` | Shadow level; true uses level 2 | `boolean \| number` | `true` |
| `aria-label` | Accessible name | `string` | `'Back to top'` |
When `popup-container=false`, the button is positioned absolutely; give its containing block `position: relative`. Repeated clicks replace the previous animation; changing target, deactivation and unmount cancel queued work. Reduced-motion preference skips animation. Horizontal scroll position is preserved.
### Events / slots / methods
- `click(event: MouseEvent)`: emitted once per activation.
- Default slot: noninteractive text or icons. The root is already a native button; do not nest another Button or link.
- `scrollToTop()`: scrolls the current target without emitting an additional click.
- Keyboard: Tab focuses the visible button; Enter / Space activates it. Hidden buttons are not focusable.
### Types
```ts
import type { BackTopProps, BackTopInstance, BackTopTarget, BackTopEasing } from '@cedar-design/ui'
```
### Style variables
| Token | Default |
| --- | --- |
| `--c-back-top-right` | `40px` |
| `--c-back-top-bottom` | `40px` |
| `--c-back-top-button-size` | `var(--c-sys-control-touch-target)` |
| `--c-back-top-button-border-radius` | `50%` |
| `--c-back-top-font-size` | `var(--c-sys-font-size-md)` |
| `--c-back-top-icon-size` | `20px` |
| `--c-back-top-background` | `var(--c-sys-color-surface-raised)` |
| `--c-back-top-text-color` | `var(--c-sys-color-content-brand)` |
| `--c-back-top-hover-background` | `var(--c-sys-color-state-hover)` |
| `--c-back-top-focus-color` | `var(--c-sys-color-content-brand)` |
| `--c-back-top-focus-width` | `2px` |
| `--c-back-top-focus-offset` | `2px` |
| `--c-back-top-z-index` | `var(--c-z-index-local-sticky)` |
Pre-release migration: Cedar `margin-right/bottom` → `right/bottom`, `button-size-width` → `button-size`, `button-size-font/icon` → `font-size/icon-size`, `button-bg/bg-hover/text-color` → `background/hover-background/text-color` (all with the component prefix). Maple duration is now 200ms; default target is the page. Legacy arbitrary BTween curve names are replaced with the documented presets or a function. No aliases remain.
---
Document: llms/en-US/components/badge.md
# Badge
The same scenarios, parameters and interactions as Cedar. Only component prefixes differ; themes and site shells remain independent.
## Basic examples
### Basic usage
Badges use a red background and white text by default.
Example source: src/badge/__demos__/basic.vue
```vue
Inbox Inbox ! Inbox
```
## Appearance and states
### Statuses and colors
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `content` | Badge content | Statuses and colors, Appearance configuration comparison |
| `status` | Semantic status | Statuses and colors |
| `mode` | Layout mode | Statuses and colors |
| `description` | Fallback description text | Statuses and colors |
| `color` | Custom color; outline uses it for border and text | Statuses and colors |
| `text-color` | Content text color | Statuses and colors |
Example source: src/badge/__demos__/color.vue
```vue
```
### Appearance configuration comparison
Choose a dimension to compare all its values side by side while keeping other settings and content identical. Change the other settings to inspect combinations; input specimens share one model.
Example source: src/badge/__demos__/appearance-lab.vue
```vue
选择一个对比维度;其他配置和内容保持一致。输入类示例共享同一个值,便于比较外观。 Compare one dimension while keeping the other settings and content identical. Input specimens share the same value.
{{ demoCompareAxis }}={{ sample }}
```
## Layout and arrangement
### Positions and offsets
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `position` | Physical corner or left/right midpoint inside the host box, default top-right. Only used in floating mode; RTL does not mirror it | Positions and offsets |
| `content` | Badge content | Positions and offsets |
| `dot` | Display a dot | Positions and offsets |
| `offset-x` | Horizontal offset; ignored in inline mode | Positions and offsets |
| `offset-y` | Vertical offset | Positions and offsets |
| `mode` | Layout mode | Positions and offsets |
Example source: src/badge/__demos__/position.vue
```vue
Offset +1 Offset -1 Reset
Offset: {{ offset }}px
{{
position
}}
```
## Content and presentation
### Inline and standalone
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `content` | Badge content | Inline and standalone, Dot badges, Maximum and zero |
| `dot` | Display a dot | Inline and standalone, Dot badges, Show and hide |
| `description` | Fallback description text | Inline and standalone, Show and hide |
| `show-zero` | Show numeric zero | Maximum and zero, Show and hide |
| `mode` | Layout mode | Inline and standalone |
| `inline-position` | Inline badge at the logical start or end of the host content, default end. Only used in inline mode | Inline and standalone |
Example source: src/badge/__demos__/inline.vue
```vue
```
### Dot badges
Example source: src/badge/__demos__/dot.vue
```vue
Inbox Messages
```
### Maximum and zero
Example source: src/badge/__demos__/max.vue
```vue
Inbox Inbox Inbox Inbox Inbox
```
### Show and hide
Example source: src/badge/__demos__/show.vue
```vue
Add Subtract
```
## Customization and slots
### Custom content
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `content` | Badge content | Custom content |
| `mode` | Layout mode | Custom content |
| `inline-position` | Inline badge at the logical start or end of the host content, default end. Only used in inline mode | Custom content |
Example source: src/badge/__demos__/content.vue
```vue
Inbox Inbox Inbox
```
## API
### Props
| Parameter | Description | Type | Default |
| --------------- | ---------------------------------------------------------------------------------- | -------------------------------------------------------------- | :---------: |
| description | Fallback description text | `string` | `-` |
| content | Badge content | `number \| string` | `-` |
| max | Maximum displayed numeric badge value. Numeric content above this value is shown as `${max}+`. | `number` | `99` |
| dot | Display a dot | `boolean` | `false` |
| offset-x | Horizontal offset; ignored in inline mode | `number` | `0` |
| offset-y | Vertical offset | `number` | `0` |
| color | Custom color; outline uses it for border and text | `string` | `-` |
| text-color | Content text color | `string` | `-` |
| mode | Layout mode | `'floating' \| 'inline'` | `floating` |
| position | Physical corner or left/right midpoint inside the host box, default top-right. Only used in floating mode; RTL does not mirror it | `'top-right' \| 'top-left' \| 'bottom-right' \| 'bottom-left' \| 'left' \| 'right'` | `top-right` |
| inline-position | Inline badge at the logical start or end of the host content, default end. Only used in inline mode | `'start' \| 'end'` | `end` |
| size | Size | `'xs' \| 'sm' \| 'md' \| 'lg' \| 'xl'` | `md` |
| status | Semantic status | `SemanticStatus` | `danger` |
| show | Show the badge | `boolean` | `true` |
| show-zero | Show numeric zero | `boolean` | `false` |
| variant | Appearance | `'outline' \| 'default'` | `default` |
### Events
No component-specific events.
### Slots
| Slot | Description | Arguments |
| ------- | ---------------- | ---- |
| default | Fallback description text | - |
| content | Content displayed inside the badge | - |
### Methods
No public methods.
### Platform notes
Props and slots match across platforms. Without a default slot and with an empty description, the badge renders independently inline. Omitting content displays a dot. Each library reads text direction from its own configuration and supplies its own theme colors and CSS prefix.
### Style variables
The following CSS variables support customization with [StyleProvider](#/en-US/style-provider).
| Variable | Default |
| --- | --- |
| `--c-badge-font-weight` | `var(--c-sys-font-weight-medium)` |
| `--c-badge-description-size-xs-font-size` | `var(--c-sys-font-size-xs)` |
| `--c-badge-description-size-sm-font-size` | `var(--c-sys-font-size-xs)` |
| `--c-badge-description-size-md-font-size` | `var(--c-sys-font-size-md)` |
| `--c-badge-description-size-lg-font-size` | `var(--c-sys-font-size-lg)` |
| `--c-badge-description-size-xl-font-size` | `var(--c-sys-font-size-xl)` |
| `--c-badge-description-text-color` | `var(--c-sys-color-content-primary)` |
| `--c-badge-size-xs-font-size` | `var(--c-sys-font-size-xs)` |
| `--c-badge-size-sm-font-size` | `var(--c-sys-font-size-xs)` |
| `--c-badge-size-md-font-size` | `var(--c-sys-font-size-xs)` |
| `--c-badge-size-lg-font-size` | `var(--c-sys-font-size-md)` |
| `--c-badge-size-xl-font-size` | `var(--c-sys-font-size-lg)` |
| `--c-badge-size-xs-scale` | `0.6667` |
| `--c-badge-size-sm-scale` | `0.8333` |
| `--c-badge-size-md-scale` | `1` |
| `--c-badge-size-lg-scale` | `1` |
| `--c-badge-size-xl-scale` | `1` |
| `--c-badge-size-xs-dot-width` | `4px` |
| `--c-badge-size-sm-dot-width` | `5px` |
| `--c-badge-size-md-dot-width` | `6px` |
| `--c-badge-size-lg-dot-width` | `7px` |
| `--c-badge-size-xl-dot-width` | `8px` |
| `--c-badge-size-xs-dot-height` | `4px` |
| `--c-badge-size-sm-dot-height` | `5px` |
| `--c-badge-size-md-dot-height` | `6px` |
| `--c-badge-size-lg-dot-height` | `7px` |
| `--c-badge-size-xl-dot-height` | `8px` |
| `--c-badge-size-xs-space` | `0px` |
| `--c-badge-size-sm-space` | `var(--c-sys-space-1)` |
| `--c-badge-size-md-space` | `var(--c-sys-space-3)` |
| `--c-badge-size-lg-space` | `var(--c-sys-space-3)` |
| `--c-badge-size-xl-space` | `var(--c-sys-space-4)` |
| `--c-badge-size-xs-padding` | `0 var(--c-sys-space-3)` |
| `--c-badge-size-sm-padding` | `0 var(--c-sys-space-3)` |
| `--c-badge-size-md-padding` | `0 var(--c-sys-space-4)` |
| `--c-badge-size-lg-padding` | `0 var(--c-sys-space-4)` |
| `--c-badge-size-xl-padding` | `0 10px` |
| `--c-badge-size-xs-height` | `20px` |
| `--c-badge-size-sm-height` | `20px` |
| `--c-badge-size-md-height` | `24px` |
| `--c-badge-size-lg-height` | `28px` |
| `--c-badge-size-xl-height` | `32px` |
| `--c-badge-size-xs-border-radius` | `20px` |
| `--c-badge-size-sm-border-radius` | `20px` |
| `--c-badge-size-md-border-radius` | `24px` |
| `--c-badge-size-lg-border-radius` | `28px` |
| `--c-badge-size-xl-border-radius` | `32px` |
| `--c-badge-bg-color` | `rgb(var(--c-danger-7))` |
| `--c-badge-text-color` | `var(--c-sys-color-content-on-dark)` |
| `--c-badge-status-default-bg-color` | `#e0e0e0` |
| `--c-badge-status-default-text-color` | `var(--c-sys-color-content-on-bright)` |
| `--c-badge-status-info-bg-color` | `var(--c-sys-color-status-info)` |
| `--c-badge-status-info-text-color` | `var(--c-sys-color-content-on-dark)` |
| `--c-badge-status-success-bg-color` | `var(--c-sys-color-status-success)` |
| `--c-badge-status-success-text-color` | `var(--c-sys-color-content-on-dark)` |
| `--c-badge-status-warning-bg-color` | `var(--c-sys-color-status-warning)` |
| `--c-badge-status-warning-text-color` | `var(--c-sys-color-content-on-dark)` |
| `--c-badge-status-danger-bg-color` | `rgb(var(--c-danger-7))` |
| `--c-badge-status-danger-text-color` | `var(--c-sys-color-content-on-dark)` |
| `--c-badge-status-primary-bg-color` | `var(--c-sys-color-action-primary)` |
| `--c-badge-status-primary-text-color` | `var(--c-sys-color-content-on-dark)` |
| `--c-badge-status-secondary-bg-color` | `rgb(var(--c-gray-6))` |
| `--c-badge-status-secondary-text-color` | `var(--c-sys-color-content-on-dark)` |
| `--c-badge-status-tertiary-bg-color` | `rgb(var(--c-gray-7))` |
| `--c-badge-status-tertiary-text-color` | `var(--c-sys-color-content-on-dark)` |
| `--c-badge-variant-outline-bg-color` | `transparent` |
| `--c-badge-variant-outline-text-color` | `var(--c-sys-color-content-danger)` |
| `--c-badge-variant-outline-status-info-text-color` | `var(--c-sys-color-content-info)` |
| `--c-badge-variant-outline-status-success-text-color` | `var(--c-sys-color-content-success)` |
| `--c-badge-variant-outline-status-warning-text-color` | `var(--c-sys-color-content-warning)` |
| `--c-badge-variant-outline-status-danger-text-color` | `var(--c-sys-color-content-danger)` |
| `--c-badge-variant-outline-status-primary-text-color` | `var(--c-sys-color-content-brand)` |
| `--c-badge-variant-outline-status-default-text-color` | `var(--c-sys-color-content-primary)` |
| `--c-badge-variant-outline-status-secondary-text-color` | `var(--c-sys-color-content-secondary)` |
| `--c-badge-variant-outline-status-tertiary-text-color` | `var(--c-sys-color-content-secondary)` |
| `--c-badge-border-color` | `var(--c-sys-color-surface-default)` |
| `--c-badge-offset` | `2px` |
| `--c-badge-ring-width` | `2px` |
Filled badge text follows Button: primary, info, success, warning, danger and secondary use `content-on-dark`; tertiary uses `content-on-dark` in light mode and `content-on-bright` in dark mode. Default notification badges use red backgrounds and white text; the neutral background remains `#e0e0e0`.
Colored outline text and borders follow Button, using the matching `content-brand`, `content-info`, `content-success`, `content-warning` and `content-danger` semantic roles; secondary and tertiary outlines use `content-secondary` for readability. `variant-outline-bg-color` works for every status and defaults to transparent. The `color` prop overrides outline text and border; `text-color` overrides text further. Both preserve control through the background variable. Recheck contrast after customizing foreground or background.
### Type definitions
The component exports the following types
```ts
import type { BadgeInstance } from '@cedar-design/ui'
```
### Color override boundaries
The bg-color fallback and danger fill use red backgrounds with white text: danger level 7 in light mode and level 4 in dark mode. Fixed neutral light gray and secondary/tertiary gray levels are intentional component colors. Override the border-color isolation ring to match the host surface. Callers must ensure contrast for custom color/text-color values.
---
Document: llms/en-US/components/breadcrumb.md
# Breadcrumb
Start with the basic example, then compare related settings before moving to controlled, asynchronous or combined use cases.
## Basic examples
### Basic usage
Example source: src/breadcrumb/__demos__/basic.vue
```vue
Home
Channel
News
```
## Content and presentation
### Routes
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `routes` | Route list | Routes, Droplist, Max Count |
| `max-count` | Maximum ordinary breadcrumb items, excluding the overflow item; 0 means unlimited | Max Count |
Preview configuration: `:routes="routes"`, `:href="paths.join('/')"`.
Example source: src/breadcrumb/__demos__/routes.vue
```vue
{{ route.label }}
{{ route.label }}
{{ route.label }}
{{ route.label }}
```
### Droplist
Preview configuration: `:routes="routes"`, `:droplist="droplist"`.
Example source: src/breadcrumb/__demos__/droplist.vue
```vue
Home
Channel
News
Home
Option 1
Option 2
Option 3
Channel
News
```
### Max Count
Preview configuration: `:max-count="3"`, `:routes="maxRoutes"`, `:trigger="['hover', 'focus', 'click']"`, `:content="omittedItems.map((item) => item.label).join(' / ')"`.
Example source: src/breadcrumb/__demos__/max-count.vue
```vue
Home
Sub Home
All Channel
Channel
News
Post
```
### Link
Preview configuration: `href="#/home"`, `href="#/channel"`.
Example source: src/breadcrumb/__demos__/link.vue
```vue
纯文本:仅展示路径
Home
Channel
News
链接:悬停或聚焦查看反馈
Home
Channel
News
点击操作:支持 Enter / 空格
Home
Channel
News
{{ lastAction }}
```
## Customization and slots
### Custom Split
Preview configuration: `separator="~"`, `separator="->"`.
Example source: src/breadcrumb/__demos__/custom-split.vue
```vue
Home
Channel
News
Home
Channel
News
Home
Channel
News
```
### Custom Icon
Example source: src/breadcrumb/__demos__/custom-icon.vue
```vue
Channel
News
Channel
News
```
## API
### Breadcrumb Props
| Prop | Description | Type | Default |
| --------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | ------ |
| max-count | Maximum ordinary breadcrumb items, excluding the overflow item; 0 means unlimited | `number` | `0` |
| routes | Route list | `BreadcrumbRoute[]` | `-` |
| separator | Separator text | `string \| number` | `/` |
### Breadcrumb Slots
| Slot | Description | Arguments |
| ----------- | ---------------------------------- | --------------------------------------------------------------------------- |
| more-icon | Custom overflow icon | `omittedItems` `count` `start` `end` |
| item-render | Custom breadcrumb rendering when routes is provided | `route:BreadcrumbRoute` `routes:BreadcrumbRoute[]` `paths:string[]` |
| separator | Custom separator | `-` |
### BreadcrumbItem Props
| Prop | Description | Type | Default |
| -------------- | ------------ | ----------------------------- | ------ |
| separator | Separator text | `string \| number` | `-` |
| href | Link URL | `string` | `-` |
| droplist | Dropdown menu content | `BreadcrumbRoute['children']` | `-` |
| dropdown-props | Props passed to Menu | `MenuProps` | `-` |
### BreadcrumbItem Events
| Event | Description | Arguments |
| ------ | -------- | -------------- |
| click | Click event; omitted items do not emit it | `event: MouseEvent` |
| select | Fired when a built-in dropdown item is selected | `route: BreadcrumbRoute, event?: Event` |
### BreadcrumbItem Slots
| Slot | Description | Arguments |
| --------- | -------------- | ---- |
| droplist | Custom dropdown menu | `-` |
| separator | Custom separator | `-` |
### BreadcrumbRoute
| Parameter | Description | Type | Default |
| -------- | ------------------------- | ------------------------------ | ------ |
| label | Breadcrumb label | `string` | `-` |
| path | Navigation path (`href` on the `a` element) | `string` |
| children | Dropdown menu items | `{label:string,path:string}[]` | `-` |
## Type definitions
The component exports the following types
```ts
import type { BreadcrumbProps, BreadcrumbItemProps, BreadcrumbRoute } from '@cedar-design/ui'
```
## Shared implementation and platform boundaries
Breadcrumb and BreadcrumbItem are maintained as local copies in Cedar / Maple. Component bodies, props, context, types, key styles and paired tests are checked by `design-ui/bin/copied-components-check.mjs`. Each library supplies its own icons, installation entry, menu implementation and theme tokens.
- A nonempty `routes` array takes precedence over the default slot; an empty array falls back to the slot. Default route rendering links all items except the last, which has `aria-current="page"`. `item-render` controls links itself.
- Separator precedence: child slot → child prop → parent slot → parent prop. `0` and an empty string are supported.
- `max-count` preserves the existing boundary: collapsing occurs only when the total exceeds `max-count + 1`. It keeps the first and trailing items. The overflow position does not trigger omitted items’ clicks, links or dropdowns.
- Built-in dropdown selection emits `select(route, event)`. Indices and separators update with dynamic insertion, removal, reordering and SSR.
- Cedar adds a `__content` wrapper for item content; attributes fall through to it. Maple retains its existing theme variables through token mappings.
---
Document: llms/en-US/components/button.md
# Button
Both libraries use the same implementation and examples; package prefixes, themes and registration stay local.
## Basic examples
### Eight statuses
Example source: src/button/__demos__/basic.vue
```vue
{{
status
}}
```
## Appearance and states
### Four variants
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `variant` | Appearance; inherits group, otherwise default | Four variants, Colors, ripple and elevation |
| `size` | Size; inherits group, otherwise md | Four variants, Five sizes |
| `status` | Semantic color; inherits group, otherwise default | Four variants |
| `disabled` | Disabled; inherits group, explicit false overrides | Disabled buttons and links |
| `component` | Root tag; link attributes fall through | Disabled buttons and links |
| `loading` | Loading; blocks activation and navigation | Disabled buttons and links |
The `default` variant uses white text for primary, info, success, warning, danger and secondary solid fills.
Example source: src/button/__demos__/variants.vue
```vue
{{ status }}
```
### Five sizes
Horizontal buttons and inputs of the same size share the default height and font size within each platform. Cedar heights are 24/28/32/36/44px; Maple heights are 32/40/48/56/64px. Horizontal button padding is 8/12/16/20/24px per side, with a 6px icon-label gap. Stacked buttons keep their separate content-based height. Component-level overrides remain independent.
Example source: src/button/__demos__/size.vue
```vue
{{ size }}
Button
Search
```
### Disabled buttons and links
Example source: src/button/__demos__/disabled.vue
```vue
Disabled button
Disabled link
Loading link
Blocked clicks: {{ clicks }}
```
### Colors, ripple and elevation
Example source: src/button/__demos__/custom-color.vue
```vue
Custom filled
Gradient
Custom text
Custom outline
Custom tonal
```
## Icons and layout
### Icons and label layouts
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `status` | Semantic color; inherits group, otherwise default | Icons and label layouts |
| `variant` | Appearance; inherits group, otherwise default | Icons and label layouts |
| `size` | Size; inherits group, otherwise md | Icons and label layouts |
| `stacked` | Stack icon and text; inherits group when omitted | Icons and label layouts |
| `round` | Round button | Icons and label layouts |
| `block` | Full available width | Block buttons |
Use built-in icons to compare icon-only, inline and stacked labels across four variants and five sizes. Stacked buttons grow with content and keep at least 8px of top and bottom padding. Omit the default slot for icon-only buttons; round controls shape and stacked controls label layout.
Example source: src/button/__demos__/icons.vue
```vue
{{
layout === "icon"
? "Icon only / 纯图标"
: layout === "inline"
? "Icon and text / 横排图文"
: "Stacked / 上下堆叠"
}}
{{
item.label
}}
```
### Block buttons
Example source: src/button/__demos__/block.vue
```vue
Full width
```
## Button groups
### Group inheritance and overrides
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `status` | Semantic color; inherits group, otherwise default | Group inheritance and overrides |
| `disabled` | Disabled; inherits group, explicit false overrides | Group inheritance and overrides |
| `loading` | Loading; blocks activation and navigation | Button Group Content |
Example source: src/button/__demos__/button-group.vue
```vue
Disable group
Inherited
Status override
Enabled override
```
### Button Group Layout
Example source: src/button/__demos__/button-group-layout.vue
```vue
Text override in middle
Prev Info Next
```
### Button Group Content
Example source: src/button/__demos__/button-group-content.vue
```vue
Stacked labels
Vertical group
Load first action
Save
Cancel
```
## Forms and events
### Control Sizes
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `size` | Size; inherits group, otherwise md | Control Sizes |
| `variant` | Appearance; inherits group, otherwise default | Control Sizes |
| `html-type` | Native button type | Native form, focus and touch events |
| `focusable` | Allow sequential Tab focus; does not prevent programmatic focus | Native form, focus and touch events |
- `size`: Controls the component size.
- `variant`: Selects the visual variant.
Example source: src/field-decorator/__demos__/control-sizes.vue
```vue
{{
item
}}
{{
item
}}
Selected / Clearable / Multiple — 有值、可清空与多选不换行
Hover or focus truncated text; tap on touch screens /
悬停或聚焦省略正文查看全文;触屏点按查看,点外部关闭
Reset / 恢复选中值
Button · reference
Button
Select · multiple / nowrap
Cascader · multiple / nowrap
Select · long values / nowrap
Cascader · long values / nowrap
```
### Native form, focus and touch events
Example source: src/button/__demos__/native-events.vue
```vue
Submit
Reset
Skip Tab
Event target
Submissions: {{ submissions }}; {{ event }}
```
## Loading and action feedback
### Loading layouts and animations
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `loading` | Loading; blocks activation and navigation | Loading layouts and animations, Loading Appearance |
| `loading-size` | Indicator size; xs/sm/md/lg/xl map to 12/14/16/18/20px; numbers are px; follows button size when omitted; not used in line mode | Loading layouts and animations, Loading Appearance |
| `loading-type` | Spinner animation; same as Loading.type; not used in line mode | Loading layouts and animations |
| `loading-mode` | Inline, covering, or bottom progress line; line only uses loading-color | Loading layouts and animations |
| `loading-color` | Loading indicator color | Loading Appearance |
| `ripple` | Click ripple | Feedback |
Example source: src/button/__demos__/loading.vue
```vue
图文堆叠(stacked)
line 使用底部进度线,loading-type 和 loading-size 不适用;可通过
loading-color 调整颜色。
{{ type }}
```
### Loading Appearance
Example source: src/button/__demos__/loading-appearance.vue
```vue
Custom color Custom size
```
### Feedback
- `elevation`: Controls the shadow intensity.
Example source: src/button/__demos__/feedback.vue
```vue
Ripple
Elevation
Click to compare feedback
```
### Sync, async and rejection recovery
Example source: src/button/__demos__/controlled-loading.vue
```vue
click 支持 async 回调;业务通过 loading 展示等待,在 finally 中恢复。Async click handlers own their loading state.
保存 / Save
失败与恢复 / Failure recovery
{{ message }}
```
## Reading direction
Inherits the nearest `dir="ltr|rtl"`, including runtime changes and local overrides. Icons and content follow reading order; stacked content stays top to bottom and slot graphics are not mirrored. ButtonGroup owns horizontal joining edges and outer corners even when a child has a different text direction. A single child keeps all corners; vertical groups preserve top-to-bottom order. Native Tab, Enter and Space remain available; ordinary groups do not intercept horizontal arrows. Disabled and loading behavior stays unchanged.
## API
### Props
| Prop | Description | Type | Default |
| ------------- | ------------------------------------------------------------------------------------------------ | ----------------------------------------- | -------------- |
| status | Semantic color; inherits group, otherwise default | `SemanticStatus` | `undefined` |
| variant | Appearance; inherits group, otherwise default | `default / text / outline / tonal` | `undefined` |
| size | Size; inherits group, otherwise md | `xs / sm / md / lg / xl` | `undefined` |
| html-type | Native button type | `button / submit / reset` | `button` |
| component | Root tag; link attributes fall through | `button / a` | `button` |
| round | Round button | `boolean` | `false` |
| block | Full available width | `boolean` | `false` |
| loading | Loading; blocks activation and navigation | `boolean` | `false` |
| loading-type | Spinner animation; same as Loading.type; not used in line mode | `circle / wave / cube / rect / disappear` | `circle` |
| loading-mode | Inline, covering, or bottom progress line; line only uses loading-color | `default / fill / line` | `default` |
| loading-size | Indicator size; xs/sm/md/lg/xl map to 12/14/16/18/20px; numbers are px; follows button size when omitted; not used in line mode | `ComponentSize / number` | `undefined` |
| loading-color | Loading indicator color | `string` | `currentColor` |
| disabled | Disabled; inherits group, explicit false overrides | `boolean` | `undefined` |
| ripple | Click ripple | `boolean` | `true` |
| focusable | Allow sequential Tab focus; does not prevent programmatic focus | `boolean` | `true` |
| autofocus | Native autofocus | `boolean` | `false` |
| text-color | Custom text color | `string` | `undefined` |
| color | Custom background or variant base color | `string` | `undefined` |
| elevation | Default variant shadow; true=2, false=off, rounded/clamped 0–24; group owns grouped elevation | `boolean / number` | `true` |
| stacked | Stack icon and text; inherits group when omitted | `boolean` | `undefined` |
### Events
| Event | Arguments and behavior |
| ---------- | ------------------------------------------- |
| click | `(event: MouseEvent) => void` |
| touchstart | `(event: TouchEvent) => void` |
click is a normal emitted event and supports async handlers. Business state controls loading; restore it in finally. Listener Promises do not automatically drive loading. Disabled/loading links have no effective href.
### Slots
| Slot | Description | Arguments |
| ------- | -------------------------------- | ---- |
| default | Button label; retained while loading | — |
| icon | Leading icon; above label when stacked | — |
### Methods
No custom public methods.
## ButtonGroup
### ButtonGroup Props
| Prop | Description | Type | Default |
| --- | --- | --- | --- |
| status | Default semantic status; a child may override it | SemanticStatus | default |
| size | Default button size; a child may override it | xs / sm / md / lg / xl | md |
| variant | Default appearance; adjacent effective variants determine joining, including mixed variants | default / text / outline / tonal | default |
| color | Default custom color; a child may override it | string | undefined |
| text-color | Default text color; a child may override it | string | undefined |
| disabled | Default disabled state; an explicit child false overrides group true | boolean | false |
| stacked | Default vertical icon/text layout; a child may explicitly override with false | boolean | false |
| vertical | Vertical group layout, independent of button content stacking | boolean | false |
| elevation | Group shadow; true means 2, numbers normalize to 0–24; applies only to an enabled default-variant group | boolean / number | true |
The root defaults to `role="group"`. Supply `aria-label` or `aria-labelledby` when the action group needs a name. Native attributes can override role. Ordinary groups retain native Tab / Enter / Space handling without arrow-key focus management.
**Inheritance:** explicit child values win for status, size, variant, color, text-color, disabled and stacked. Elevation belongs to the group; a child's own elevation does not apply. Nested groups use their nearest group's settings and defaults rather than combining outer disabled states.
### ButtonGroup Events
No custom events. `@click` falls through to the root DOM element and can receive descendant bubbling; listen to each Button for its action. The group does not collect listener Promises or own a task or selection model.
### ButtonGroup Slots
| Slot | Description | Arguments |
| --- | --- | --- |
| default | Joined styling supports directly adjacent Button DOM nodes under the group root | — |
**Composition:** extra DOM wrappers, prefix/suffix text and arbitrary controls are outside the joined-styling contract. Wrapped buttons may still inherit configuration without sharing the same joined edges. The group owns outer corners and does not preserve an individual round button's circular shape. Use Space for separated or arbitrary content. For narrow containers, the application chooses scrolling, shorter labels or vertical layout; groups do not wrap automatically.
### ButtonGroup Expose
| Name | Description |
| --- | --- |
| buttonGroupProvider | Reactive group configuration with readonly ComputedRef fields; elevation is boolean / number and other fields match the Props |
There are no additional group action methods.
## Types
ButtonProps、ButtonVariant、ButtonLoadingMode、ButtonInstance、ButtonGroupProps、ButtonGroupInstance。
## CSS variable responsibilities and complete defaults
Button exposes 58 appearance tokens. `{status}-color` controls the solid background, `{status}-foreground-color` controls text/outline/tonal foreground, and `{status}-tonal-color` controls soft backgrounds. `solid-text-color` and `solid-state-layer-color` are shared by semantic statuses; default/tertiary foregrounds and primary/tertiary state layers retain theme-specific roles.
Sizes use xs/sm/md/lg/xl. Font sizes, transition duration, focus width/offset and stacked-height increments reuse system variables. Button groups and stacked buttons share border-radius. Four state opacity variables preserve hover/active differences. loading-duration controls only the bottom progress line; Loading controls other loading animations. Internal variables and fixed animation geometry are not public customization points.
| Variable | Default |
| --------------------------------------- | ----------------------------------------- |
| `--c-button-border-radius` | `var(--c-sys-radius-md)` |
| `--c-button-content-gap` | `var(--c-sys-space-3)` |
| `--c-button-danger-color` | `var(--c-sys-color-status-danger)` |
| `--c-button-danger-disabled-color` | `rgb(var(--c-danger-3))` |
| `--c-button-danger-foreground-color` | `var(--c-sys-color-content-danger)` |
| `--c-button-danger-tonal-color` | `rgb(var(--c-danger-1))` |
| `--c-button-default-color` | `var(--c-sys-color-surface-default)` |
| `--c-button-default-foreground-color` | `var(--c-sys-color-content-primary)` |
| `--c-button-default-tonal-color` | `var(--c-sys-color-surface-muted)` |
| `--c-button-disabled-color` | `var(--c-color-fill-2)` |
| `--c-button-disabled-solid-text-color` | `var(--c-sys-color-content-on-dark)` |
| `--c-button-disabled-text-color` | `var(--c-sys-color-content-disabled)` |
| `--c-button-focus-color` | `var(--c-sys-color-content-brand)` |
| `--c-button-info-color` | `var(--c-sys-color-status-info)` |
| `--c-button-info-disabled-color` | `rgb(var(--c-blue-3))` |
| `--c-button-info-foreground-color` | `var(--c-sys-color-content-info)` |
| `--c-button-info-tonal-color` | `rgb(var(--c-blue-1))` |
| `--c-button-lg-height` | `36px` |
| `--c-button-lg-padding` | `0 var(--c-sys-space-7)` |
| `--c-button-loading-duration` | `1s` |
| `--c-button-loading-line-height` | `3px` |
| `--c-button-md-height` | `32px` |
| `--c-button-md-padding` | `0 var(--c-sys-space-6)` |
| `--c-button-plain-state-opacity-active` | `1` |
| `--c-button-plain-state-opacity-hover` | `0.5` |
| `--c-button-primary-color` | `var(--c-sys-color-action-primary)` |
| `--c-button-primary-disabled-color` | `rgb(var(--c-primary-3))` |
| `--c-button-primary-foreground-color` | `var(--c-sys-color-content-brand)` |
| `--c-button-primary-state-layer-color` | `var(--c-button-solid-state-layer-color)` |
| `--c-button-primary-tonal-color` | `rgb(var(--c-primary-1))` |
| `--c-button-secondary-color` | `rgb(var(--c-gray-6))` |
| `--c-button-secondary-foreground-color` | `var(--c-sys-color-content-secondary)` |
| `--c-button-secondary-tonal-color` | `rgb(var(--c-gray-2))` |
| `--c-button-sm-height` | `28px` |
| `--c-button-sm-padding` | `0 var(--c-sys-space-5)` |
| `--c-button-solid-state-layer-color` | `var(--c-sys-color-content-on-dark)` |
| `--c-button-solid-text-color` | `var(--c-sys-color-content-on-dark)` |
| `--c-button-stacked-gap` | `var(--c-sys-space-2)` |
| `--c-button-state-layer-color` | `var(--c-sys-color-surface-page)` |
| `--c-button-state-opacity-active` | `0.12` |
| `--c-button-state-opacity-hover` | `0.08` |
| `--c-button-success-color` | `var(--c-sys-color-status-success)` |
| `--c-button-success-disabled-color` | `rgb(var(--c-success-3))` |
| `--c-button-success-foreground-color` | `var(--c-sys-color-content-success)` |
| `--c-button-success-tonal-color` | `rgb(var(--c-success-1))` |
| `--c-button-tertiary-color` | `rgb(var(--c-gray-7))` |
| `--c-button-tertiary-foreground-color` | `var(--c-sys-color-content-secondary)` |
| `--c-button-tertiary-state-layer-color` | `var(--c-sys-color-content-on-bright)` |
| `--c-button-tertiary-text-color` | `var(--c-sys-color-content-on-dark)` |
| `--c-button-tertiary-tonal-color` | `rgb(var(--c-gray-1))` |
| `--c-button-warning-color` | `var(--c-sys-color-status-warning)` |
| `--c-button-warning-disabled-color` | `rgb(var(--c-warning-3))` |
| `--c-button-warning-foreground-color` | `var(--c-sys-color-content-warning)` |
| `--c-button-warning-tonal-color` | `rgb(var(--c-warning-1))` |
| `--c-button-xl-height` | `44px` |
| `--c-button-xl-padding` | `0 var(--c-sys-space-8)` |
| `--c-button-xs-height` | `24px` |
| `--c-button-xs-padding` | `0 var(--c-sys-space-4)` |
---
Document: llms/en-US/components/calendar.md
# Calendar
Start with the basic example, then compare related settings before moving to controlled, asynchronous or combined use cases.
## Basic examples
### Basic usage
Example source: src/calendar/__demos__/basic.vue
```vue
当前选择:{{ format(value) }}
```
## Views and date presentation
### Modes
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `mode` | Mode | Modes |
| `modes` | Displayed mode | Modes |
| `day-start-of-week` | First day of the week | Week Options |
| `is-week` | Whether to show week numbers | Week Options |
- `mode`: Mode
- `modes`: Displayed mode
Example source: src/calendar/__demos__/modes.vue
```vue
月视图
年视图
```
### Week Options
Preview configuration: `:day-start-of-week="mondayFirst ? 1 : 0"`, `:is-week="showWeek"`.
Example source: src/calendar/__demos__/week-options.vue
```vue
周一作为一周开始
显示周序号
```
## Interaction and customization
### Controlled
Example source: src/calendar/__demos__/controlled.vue
```vue
选择今天
选择明天
{{ lastAction }}
```
### Custom Cell
Example source: src/calendar/__demos__/custom-cell.vue
```vue
{{ item.label }}
```
### Custom Header
Example source: src/calendar/__demos__/custom-header.vue
```vue
{{ year }} 年 {{ month }} 月工作日历
```
## API
### `` Props
| Parameter | Description | Type | Default |
| ------------------------- | -------------------- | ----------------------- | :-----------------: |
| model-value **(v-model)** | Bound value | `date` | `-` |
| default-value | Default value (uncontrolled state) | `date` | `-` |
| mode | Mode | `'month' \| 'year'` | `-` |
| default-mode | Default Mode | `'month' \| 'year'` | `'month'` |
| modes | Displayed mode | `('month' \| 'year')[]` | `['month', 'year']` |
| day-start-of-week | First day of the week | `0 \| 1` | `0` |
| is-week | Whether to show week numbers | `boolean` | `false` |
### `` Events
| Event | Description | Arguments |
| ------------ | -------------------- | ------------ |
| change | Emitted when the selected date changes | date: `Date` |
| panel-change | Emitted when the displayed date panel changes | date: `Date` |
### `` Slots
| Slot | Description | Arguments | Version |
| ------- | :--------------: | --------------------------------------------------- | :----- |
| header | Custom header content | year: `number` month: `number` | 2.53.0 |
| default | Custom cell content | year: `number` month: `number` date: `number` | 2.53.0 |
### Type definitions
The component exports the following types
```ts
import type { CalendarInstance } from "@cedar-design/ui";
```
---
Document: llms/en-US/components/card.md
# Card
Source changes synchronously invalidate render generations. Close, row direction, newer work, deactivation or disposal prevent old nextTick/timer/double-frame continuations from changing newer phases. Render/timer deliveries consume once. Recheck lifecycle/request/node after geometry hooks to reject reentrant disposal. Suspension cancels both timers and retained close/click input is inert; activation starts a fresh phase from current props without replay, and initial KeepAlive activation does not duplicate the wait.
## Basic examples
### Basic usage and subtitle
Example source: src/card/__demos__/basic.vue
```vue
Release checklist and project updates.
More
View details
```
## Appearance and states
### Appearance configuration comparison
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `title` | Title | Appearance configuration comparison, Hover style |
| `description` | Description | Appearance configuration comparison |
| `hoverable` | Hover style | Hover style |
Choose a dimension to compare all its values side by side while keeping other settings and content identical. Change the other settings to inspect combinations; input specimens share one model.
Example source: src/card/__demos__/appearance-lab.vue
```vue
选择一个对比维度;其他配置和内容保持一致。输入类示例共享同一个值,便于比较外观。 Compare one dimension while keeping the other settings and content identical. Input specimens share the same value.
{{ demoCompareAxis }}={{ sample }}
```
### Hover style
Example source: src/card/__demos__/hoverable.vue
```vue
Hover feedback on pointer devices.
```
## Layout and arrangement
### Images and directions
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `direction` | Order of cover and body, default column; supports row, column and row-reverse. Does not position the card itself | Images and directions |
| `title` | Title | Images and directions |
| `src` | Cover image URL; cover slot takes precedence | Images and directions |
| `alt` | Image alternative text | Images and directions |
| `image-height` | Image height; numbers use px | Images and directions |
| `image-width` | Image width; numbers use px | Images and directions |
Example source: src/card/__demos__/image.vue
```vue
Card content
Cover slot overrides the image.
```
## Content and presentation
### Long title and tooltip
Example source: src/card/__demos__/tooltip.vue
```vue
{{ title }}
{{ title }}
Native title tooltip on pointer devices; the full text remains in the DOM.
```
## Customization and slots
### Custom header
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `title` | Title | Custom header |
| `top-divider` | Top divider | Content slots |
| `bottom-divider` | Bottom divider | Content slots |
Example source: src/card/__demos__/no-padding.vue
```vue
Card content
```
### Content slots
Example source: src/card/__demos__/slots.vue
```vue
Custom cover
Custom title
More
Custom subtitle
Custom description
Default content
Confirm
```
## Interaction and control
### Ripple and click
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `title` | Title | Ripple and click, Floating and close |
| `ripple` | Click ripple | Ripple and click |
| `floating` | Fullscreen state; supports v-model:floating | Floating and close |
| `floating-duration` | Fullscreen transition duration in ms | Floating and close |
Example source: src/card/__demos__/ripple.vue
```vue
Clicks: {{ clicks }}
```
### Floating and close
Example source: src/card/__demos__/floating.vue
```vue
Summary content
Expand
Expanded project details.
Close
```
## Lifecycle and edge cases
### Floating scheduler lifecycle
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `floating` | Fullscreen state; supports v-model:floating | Floating scheduler lifecycle |
| `ripple` | Click ripple | Floating scheduler lifecycle |
| `floating-duration` | Fullscreen transition duration in ms | Floating scheduler lifecycle |
| `title` | Title | Floating scheduler lifecycle |
500ms ripple wait is interaction policy; floating-duration defaults to250ms for collapse and transition. DoubleRaf settles layout; cancellation rejects stale continuation writes, not underlying frames. Public API and CSS variables are unchanged. Full Card Cedar21/Maple44 and scoped15 each are controlled tests, not native browser/OS certification.
Example source: src/card/__demos__/scheduler-lifecycle.vue
```vue
Float / 浮起与回落
Activate / 停用与激活
Mount / 卸载与挂载
Ripple wait / 涟漪等待
Duration / 零与默认时长
Toggle floating rapidly, suspend during500ms ripple wait or layout settlement, then activate. Old tasks must not reset a newer phase. Underlying doubleRaf frames are not physically canceled.
Card content / 卡片内容
Collapse / 回落
Deactivate / 停用
Unmount / 卸载
```
The same scenarios, parameters and interactions as Cedar. Only component prefixes differ; themes and site shells remain independent.
## Reading direction
Headings, content and actions follow reading order. Default floating actions sit at reading end without mirroring images or custom slots.
## API
### Props
| Prop | Description | Type | Default |
| --- | --- | --- | --- |
| variant | Appearance | `default / outline / tonal` | `default` |
| size | Density; omitted value follows platform rules below | `sm / md` | `undefined` |
| direction | Order of cover and body, default column; supports row, column and row-reverse. Does not position the card itself | `row / column / row-reverse` | `column` |
| hoverable | Hover styling | `boolean` | `false` |
| title-style | Title row styles | `CSSProperties` | `undefined` |
| title | Title | `string` | `undefined` |
| subtitle | Subtitle | `string` | `undefined` |
| description | Description | `string` | `undefined` |
| top-divider | Top divider | `boolean` | `false` |
| bottom-divider | Bottom divider | `boolean` | `false` |
| src | Cover image URL; cover slot takes precedence | `string` | `undefined` |
| fit | Cover image fit | `fill / contain / cover / none / scale-down` | `cover` |
| image-height | Image height; numbers use px | `string / number` | `undefined` |
| image-width | Image width; numbers use px | `string / number` | `undefined` |
| alt | Image alternative text | `string` | `undefined` |
| elevation | Shadow for default variant; true means level 1, false disables it, numeric levels 0–24 | `boolean / number` | `true` |
| ripple | Click ripple | `boolean` | `false` |
| floating | Fullscreen state; supports v-model:floating | `boolean` | `false` |
| floating-duration | Fullscreen transition duration in ms | `number` | `250` |
### Events
| Event | Arguments and timing |
| --- | --- |
| click | `(event: Event)`, emitted when the card is clicked |
| update:floating | `(value: boolean)`, emits false when the built-in close button requests closing; expansion is controlled by the parent |
### Slots
| Slot | Description | Arguments |
| --- | --- | --- |
| default | Body | — |
| cover | Cover; overrides src | — |
| header | Entire header; overrides title, title-action and subtitle | — |
| title | Title | `{ slotClass: string }` |
| title-action | Title action | — |
| subtitle | Subtitle | `{ slotClass: string }` |
| description | Description | `{ slotClass: string }` |
| footer | Footer actions | — |
| floating-content | Expanded content; column layout only | — |
| close-button | Custom close button; update floating yourself | — |
### Methods
No public methods.
### Platform notes
Props, event arguments and slots match. Cedar inherits the global size when size is omitted: xs/sm map to sm, all others to md. Maple falls back to md. Pass size explicitly for identical density. Themes and CSS prefixes remain platform-specific.
Card no longer has a loading prop. Compose a loading overlay with the Loading directive.
### `` CSS variables
| Variable | Default |
| --- | --- |
| `--c-card-hover-shadow` | `0 4px 12px rgb(0 0 0 / 12%)` |
| `--c-card-size-sm-title-font-size` | `16px` |
| `--c-card-size-sm-section-margin` | `8px 0 0` |
| `--c-card-size-sm-section-padding` | `0 12px` |
| `--c-card-padding` | `0 0 15px 0` |
| `--c-card-background` | `var(--c-sys-color-surface-default)` |
| `--c-card-filled-background` | `var(--c-sys-color-surface-muted)` |
| `--c-card-outline-color` | `var(--c-sys-color-border-default)` |
| `--c-card-border-radius` | `4px` |
| `--c-card-image-width` | `100%` |
| `--c-card-row-image-width` | `140px` |
| `--c-card-image-height` | `200px` |
| `--c-card-row-height` | `140px` |
| `--c-card-title-color` | `var(--c-sys-color-content-primary)` |
| `--c-card-title-font-size` | `20px` |
| `--c-card-title-padding` | `0 12px` |
| `--c-card-title-margin` | `15px 0 0 0` |
| `--c-card-title-row-margin` | `12px 0` |
| `--c-card-content-padding` | `0 16px` |
| `--c-card-content-margin` | `16px 0 0 0` |
| `--c-card-content-color` | `var(--c-sys-color-content-tertiary)` |
| `--c-card-content-font-size` | `14px` |
| `--c-card-content-row-margin` | `16px 0 0 0` |
| `--c-card-subtitle-color` | `var(--c-sys-color-content-secondary)` |
| `--c-card-subtitle-font-size` | `14px` |
| `--c-card-subtitle-padding` | `0 12px` |
| `--c-card-subtitle-margin` | `10px 0 0 0` |
| `--c-card-subtitle-row-margin` | `-8px 0 0 0` |
| `--c-card-description-color` | `var(--c-sys-color-content-secondary)` |
| `--c-card-description-font-size` | `14px` |
| `--c-card-description-margin` | `20px 0 0 0` |
| `--c-card-description-padding` | `0 13px` |
| `--c-card-footer-padding` | `0 12px` |
| `--c-card-footer-right` | `13px` |
| `--c-card-footer-bottom` | `9px` |
| `--c-card-footer-margin` | `30px 0 0 0` |
| `--c-card-line-height` | `22px` |
| `--c-card-row-line-height` | `1.5` |
| `--c-card-floating-buttons-bottom` | `16px` |
| `--c-card-floating-buttons-right` | `16px` |
| `--c-card-floating-buttons-color` | `var(--c-sys-color-content-primary)` |
| `--c-card-close-button-icon-size` | `24px` |
| `--c-card-close-button-size` | `56px` |
| `--c-card-close-button-background` | `#212121` |
| `--c-card-close-button-text-color` | `var(--c-sys-color-content-on-dark)` |
| `--c-card-close-button-border-radius` | `50%` |
Card colors follow system semantics: regular/filled backgrounds and borders use `surface-default`, `surface-muted` and `border-default`. Titles, body text and secondary text use `content-primary`, `content-tertiary` and `content-secondary`. Expanded floating-button containers sit on the card surface and use `content-primary`; text/icons on dark close buttons use `content-on-dark`. The `#212121` close-button background is Card-specific, not the global primary-action color. See the Design Token specification for old variable mappings.
### Type definitions
The component exports the following types
```ts
import type { CardProps } from '@cedar-design/ui'
```
See `API-MIGRATION.md` at the repository root for size and cross-platform migration rules. Only the documented sizes are supported, not every ComponentSize.
### Variable consumption rules
Row content consumes `--c-card-content-row-margin`, independently from the title margin. Card intentionally exposes only sm/md density, not all five control sizes. Motion uses `--c-card-animation-duration` (`var(--c-sys-motion-duration-slow)`) and `--c-card-animation-easing` (`var(--c-sys-motion-easing-standard)`). Reduced motion disables transitions on every animated Card section.
---
Document: llms/en-US/components/carousel.md
# Carousel
Start with the basic example, then compare related settings before moving to controlled, asynchronous or combined use cases.
## Basic examples
### Basic usage
Example source: src/carousel/__demos__/basic.vue
```vue
```
## Direction and layout
### Vertical
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `slides-per-view` | Visible count; auto uses item size | Multi Slides, Centered Slides, Auto Sized |
| `space-between` | Item gap; numbers/numeric strings are px | Multi Slides, Centered Slides, Auto Sized |
| `draggable` | Mouse dragging, independent of touch | Multi Slides, Auto Sized |
| `centered-slides` | Center active slide | centered-slides、auto-sized |
| `orientation` | Horizontal/vertical axis of carousel sliding, default horizontal; does not determine indicator position | Vertical |
| `model-value` | Controlled one-based slide number | Multi Slides |
- `orientation`: Controls the content direction.
Example source: src/carousel/__demos__/vertical.vue
```vue
```
### Multi Slides
Preview configuration: `:slides-per-view="2.5"`, `:space-between="10"`, `:model-value="current"`, `:loop="loop"`.
Example source: src/carousel/__demos__/multi-slides.vue
```vue
Accept changes / 接受切换
Loop / 循环
Current: {{ current }} · Proposal: {{ proposal }} · Changes: {{ changes }}
{{ i }}
```
### Centered Slides
Preview configuration: `:slides-per-view="1.5"`, `:space-between="10"`, `centered-slides`.
Example source: src/carousel/__demos__/centered-slides.vue
```vue
{{ i }}
```
### Auto Sized
- `height`: Constrains the component height.
Example source: src/carousel/__demos__/auto-sized.vue
```vue
Wider cards / 加宽卡片
300px viewport / 窄容器
Extra card / 增加末项
Empty / 清空项目
Reverse cards / 反转顺序
Current: {{ current }} · Changes: {{ changes }}
{{ width }}px
```
## Navigation and effects
### Navigation
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `show-arrow` | Arrow visibility | Navigation |
| `indicator-type` | Indicator appearance | Indicator style and position |
| `indicator-position` | Indicator edge or outer region of the carousel container, default bottom. Not a trigger-relative popup placement | Indicator style and position |
| `effect` | Effect; all supported by both libraries | Transition effects |
Preview configuration: `show-arrow="always"`, `show-arrow="hover"`.
Example source: src/carousel/__demos__/navigation.vue
```vue
```
### Indicator style and position
All indicator presets use the same three local slides and active-slide model. Click an indicator or a navigation arrow in any specimen: every specimen changes to the same slide. The first group compares dot, line and slider; the second compares top and outer positions. The grid stacks on narrow screens.
Example source: src/carousel/__demos__/indicator-comparison.vue
```vue
Slide: {{ current }}
{{ group.zh }} {{ group.en }}
{{ preset.label }}
```
### Transition effects
Change adjacent slides to compare fade, card and slide effects independently of autoplay and input methods.
Example source: src/carousel/__demos__/effect-comparison.vue
```vue
```
### Custom Indicator
Example source: src/carousel/__demos__/custom-indicator.vue
```vue
{{ i }}
```
## Playback and interaction
### Forbid Loop
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `height` | Container height; numbers are px | Autoplay, Controlled, Interactive Content |
| `keyboard` | Scoped arrow/Home/End navigation | Keyboard, Controlled, Interactive Content |
| `auto-play` | Autoplay configuration | Autoplay, Auto Play Hover |
| `draggable` | Mouse dragging, independent of touch | controlled、interactive-content |
| `loop` | Loop without duplicating instances | Forbid Loop |
| `trigger` | Indicator trigger | Trigger |
Preview configuration: `:loop="false"`.
Example source: src/carousel/__demos__/forbid-loop.vue
```vue
```
### Autoplay
- `height`: Constrains the component height.
Example source: src/carousel/__demos__/autoplay.vue
```vue
自动播放
当前页:{{ current + 1 }};切换次数:{{ changes }}
```
### Auto Play Hover
Preview configuration: `:auto-play="{ interval: 2000, hoverToPause: true }"`.
Example source: src/carousel/__demos__/auto-play-hover.vue
```vue
```
### Trigger
Preview configuration: `trigger="hover"`.
Example source: src/carousel/__demos__/trigger.vue
```vue
```
### Mousewheel
Preview configuration: `mousewheel`.
Example source: src/carousel/__demos__/mousewheel.vue
```vue
```
### Keyboard
Preview configuration: `keyboard`.
Example source: src/carousel/__demos__/keyboard.vue
```vue
```
### Change Event
Example source: src/carousel/__demos__/change-event.vue
```vue
```
### Controlled
- `height`: Constrains the component height.
Example source: src/carousel/__demos__/controlled.vue
```vue
Accept changes / 接受切换
Current: {{ current }} · Proposal: {{ proposal }}
Slide {{ item }}
```
### Interactive Content
- `height`: Constrains the component height.
Example source: src/carousel/__demos__/interactive-content.vue
```vue
Drag the background; inputs retain normal editing. /
拖动背景切换,输入框保留原生编辑。
Current: {{ current }} · Changes: {{ changes }}
Slide {{ item }}
```
## Lifecycle
### Scheduler Lifecycle
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `auto-play` | Autoplay configuration | Scheduler Lifecycle |
| `move-speed` | Explicit duration in milliseconds | Scheduler Lifecycle |
| `height` | Container height; numbers are px | Scheduler Lifecycle |
| `keyboard` | Scoped arrow/Home/End navigation | Scheduler Lifecycle |
| `mousewheel` | Wheel navigation | Scheduler Lifecycle |
- `height`: Constrains the component height.
Example source: src/carousel/__demos__/scheduler-lifecycle.vue
```vue
Autoplay / 自动播放
Activate / 停用与激活
Mount / 卸载与挂载
Current / 当前: {{ current }}; changes / 通知: {{ moves }}. Suspend during autoplay or loop settlement, then activate. Old work must not replay.
Slide / 幻灯片 {{ item }}
```
## API
### Value and default value
Use ordinary `v-model`. `modelValue` is the current slide number, starting at 1. `defaultValue` initializes uncontrolled state only on creation; later changes do not reset it. An explicit bound value takes precedence. Initialization does not emit `update:modelValue`.
### Carousel Props
| Prop | Description | Type | Default |
| --- | --- | --- | --- |
| `model-value` | Controlled one-based slide number | `number` | `undefined` |
| `default-value` | Uncontrolled initial index | `number` | `1` |
| `loop` | Loop without duplicating instances | `boolean` | `true` |
| `auto-play` | Autoplay configuration | `boolean \| number \| CarouselAutoPlayConfig` | `false` |
| `move-speed` | Explicit duration in milliseconds | `number` | `undefined (token)` |
| `trigger` | Indicator trigger | `click \| hover` | `click` |
| `orientation` | Horizontal/vertical axis of carousel sliding, default horizontal; does not determine indicator position | `horizontal \| vertical` | `horizontal` |
| `show-arrow` | Arrow visibility | `always \| hover \| never` | `always` |
| `arrow-class` | Additional arrow class | `string` | `undefined` |
| `indicator` | Show indicators | `boolean` | `true` |
| `indicator-type` | Indicator appearance | `dot \| line \| slider` | `dot` |
| `indicator-position` | Indicator edge or outer region of the carousel container, default bottom. Not a trigger-relative popup placement | `bottom \| top \| left \| right \| outer` | `bottom` |
| `indicator-class` | Additional indicator class | `string` | `undefined` |
| `indicator-color` | Custom indicator background | `string` | `undefined` |
| `height` | Container height; numbers are px | `number \| string` | `undefined` |
| `transition-timing-function` | Explicit timing function | `string` | `undefined (token)` |
| `touchable` | Touch dragging | `boolean` | `true` |
| `draggable` | Mouse dragging, independent of touch | `boolean` | `false` |
| `mousewheel` | Wheel navigation | `boolean` | `false` |
| `keyboard` | Scoped arrow/Home/End navigation | `boolean` | `false` |
| `slides-per-view` | Visible count; auto uses item size | `number \| auto` | `1` |
| `space-between` | Item gap; numbers/numeric strings are px | `number \| string` | `0` |
| `effect` | Effect; all supported by both libraries | `slide \| fade \| card` | `slide` |
| `centered-slides` | Center active slide | `boolean` | `false` |
| `aria-label` | Carousel accessible name | `string` | Locale |
| `previous-button-aria-label` | Previous button accessible name | `string` | Locale |
| `next-button-aria-label` | Next button accessible name | `string` | Locale |
### Model and interaction
Public slide numbers start at 1. Controlled actions emit update:model-value, then change(slideNumber, previousSlideNumber, isManual), and do not move until the parent accepts current. External assignments do not emit change. Method option event:false suppresses only change, not the model proposal. isManual is true for user actions and false for autoplay.
loop moves existing children across boundaries without cloning component instances. Without looping or centering, the final viewport is clamped to avoid empty space; selection can move within the final visible group without moving the track. Partly visible slides remain accessible; fully offscreen slides are inert. fade displays one slide. auto uses explicit CarouselItem width horizontally or height vertically; vertical mode requires a container height. Only CarouselItem children, including those inside Vue Fragments, count as slides; comments and ordinary elements do not.
auto-play=true uses 3000ms and pauses on hover; a number sets milliseconds without hover pausing; an object configures interval/hoverToPause. Focus within, dragging, hidden documents/ancestors and KeepAlive deactivation always pause playback. Reduced-motion preferences are respected. Interactive children such as inputs/buttons keep native behavior; mark custom interactive areas with data-carousel-no-drag. show-arrow=hover also shows arrows on keyboard focus.
### Events
| Event | Arguments |
| --- | --- |
| update:model-value | slideNumber: number |
| change | slideNumber: number, previousSlideNumber: number, isManual: boolean |
### Slots
| Slot | Arguments |
| --- | --- |
| default | CarouselItem |
| prev / next / indicator | { slideNumber, length, hovering, prev, next, to, resize } |
### Methods
| Method | Signature |
| --- | --- |
| prev / next | (options?: CarouselToOptions) => void |
| to | (slideNumber: number, options?: CarouselToOptions) => void |
| resize | () => void |
CarouselItem has no own props, events or methods. Its default slot supplies slide content.
### Types
CarouselProps, CarouselItemProps, CarouselInstance, CarouselItemInstance, CarouselEmits, CarouselSlots, CarouselItemSlots, CarouselExpose, CarouselSlotScope, CarouselToOptions, CarouselChangeData, CarouselOrientation, CarouselEffect, CarouselAutoPlayConfig, CarouselArrowType, CarouselIndicatorType, CarouselIndicatorPosition, CarouselTriggerEvent.
### Style variables
| Token | Default |
| --- | --- |
| `--c-carousel-indicator-dot-size` | `8px` |
| `--c-carousel-indicator-position` | `var(--c-sys-space-4)` |
| `--c-carousel-indicator-gap` | `var(--c-sys-space-3)` |
| `--c-carousel-indicator-color-default` | `rgb(255 255 255 / 35%)` |
| `--c-carousel-indicator-color-active` | `var(--c-sys-color-content-on-dark)` |
| `--c-carousel-indicator-outer-margin-bottom` | `var(--c-sys-space-8)` |
| `--c-carousel-indicator-line-width` | `20px` |
| `--c-carousel-indicator-line-height` | `3px` |
| `--c-carousel-indicator-line-border-radius` | `var(--c-sys-radius-sm)` |
| `--c-carousel-arrow-size` | `var(--c-sys-control-height-md)` |
| `--c-carousel-arrow-font-size` | `var(--c-sys-font-size-xl)` |
| `--c-carousel-arrow-margin` | `var(--c-sys-space-4)` |
| `--c-carousel-arrow-color` | `var(--c-sys-color-content-on-dark)` |
| `--c-carousel-arrow-background` | `rgb(0 0 0 / 35%)` |
| `--c-carousel-arrow-background-hover` | `rgb(0 0 0 / 55%)` |
| `--c-carousel-arrow-disabled-opacity` | `0.4` |
| `--c-carousel-navigation-z-index` | `10` |
| `--c-carousel-transition-duration` | `var(--c-sys-motion-duration-standard)` |
| `--c-carousel-transition-timing-function` | `ease` |
| `--c-carousel-fade-duration` | `var(--c-sys-motion-duration-standard)` |
| `--c-carousel-card-duration` | `var(--c-sys-motion-duration-standard)` |
| `--c-carousel-card-scale` | `0.85` |
| `--c-carousel-card-opacity` | `0.6` |
| `--c-carousel-focus-width` | `2px` |
| `--c-carousel-focus-offset` | `2px` |
| `--c-carousel-focus-color` | `var(--c-sys-color-content-brand)` |
### Loop transition boundaries
Each slide always has one component instance. Ordinary previous/next navigation recycles positions after the departing slide exits. Multi-slide or centered jumps that would require one slide in two positions settle immediately without animation, cloning interactive content or queuing unlimited transitions. Fewer items than visible slides are not cloned to fill space. Accessible names follow global Locale; explicit label props take precedence.
Native root listeners such as `keydown`, `mouseenter`, `mouseleave`, `focusin` and `focusout` run alongside internal navigation and autoplay pause handling. Native `.once` listeners fire once for the root element lifetime.
---
Document: llms/en-US/components/cascader.md
# Cascader
Hierarchical option selection with single, multiple and path models.
```ts
import type { CascaderProps, CascaderInstance } from "@cedar-design/ui";
```
`empty-value` accepts explicit `null` (or `() => null`). Clearing publishes null unchanged; omitted values preserve the existing default. Editors render null as blank without converting ordinary empty-string input to null. In popup editing, clearing changes the draft; confirm commits it and cancel preserves the original model.
The candidate `options` prop accepts an array or `(query, { signal }) => array/Promise`. Components own loading, cancellation and stale results, and emit load-error on failure. Choice groups initialize with an empty query; searchable fields load when queries change. Root tree loaders remain independent of existing load-more child loading.
## Reading direction
Inherits source dir. Child columns, expansion icons and separators follow reading direction. Horizontal keys enter loaded children or return to the parent in the visible direction, skipping disabled children; vertical keys retain logical order. Search preserves native horizontal caret editing. Path and multiple-value arrays are not reversed. Clearing the last value while closed resets navigation before reopening.
## Basic examples
### Basic usage
Example source: src/cascader/__demos__/basic.vue
```vue
当前值:{{ value ?? '未选择' }}
```
## Appearance and states
### Appearance configuration comparison
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| ------------- | ----------------------------------------------------------------------------------- | -------------------------------------------------- |
| `options` | Tree options; leaf values must be unique in scalar mode; paths distinguish branches | Appearance configuration comparison, Control Sizes |
| `clearable` | Allow clearing; preserve disabled selections | Appearance configuration comparison, Control Sizes |
| `size` | Supports all five sizes; inherits group/form settings | Control Sizes |
| `variant` | filled, outline, standard; inherits InputGroup | Control Sizes |
| `placeholder` | Placeholder | Control Sizes |
| `multiple` | Multiple selection; enables search by default | Control Sizes |
Choose an axis to compare its available values with the same content and model. Other settings remain unchanged while comparing.
Example source: src/cascader/__demos__/appearance-lab.vue
```vue
选择一个对比维度;其他配置和内容保持一致。输入类示例共享同一个值,便于比较外观。 Compare one dimension while keeping the other settings and content identical. Input specimens share the same value.
{{ demoCompareAxis }}={{ sample }}
```
### Control Sizes
- `size`: The size of the select
- `variant`: Selects the visual variant.
- `options`: Options for cascader
- `placeholder`: Placeholder
Example source: src/field-decorator/__demos__/control-sizes.vue
```vue
{{
item
}}
{{
item
}}
Selected / Clearable / Multiple — 有值、可清空与多选不换行
Hover or focus truncated text; tap on touch screens /
悬停或聚焦省略正文查看全文;触屏点按查看,点外部关闭
Reset / 恢复选中值
Button · reference
Button
Select · multiple / nowrap
Cascader · multiple / nowrap
Select · long values / nowrap
Cascader · long values / nowrap
```
## Selection modes and paths
### Multiple
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| ---------------- | ----------------------------------------------------------------------------------- | ----------------------------------- |
| `options` | Tree options; leaf values must be unique in scalar mode; paths distinguish branches | Multiple, Check Strictly, Path Mode |
| `placeholder` | Placeholder | Multiple, Check Strictly, Path Mode |
| `multiple` | Multiple selection; enables search by default | Multiple, Check Strictly |
| `default-value` | Default value (uncontrolled state) | Check Strictly, Path Mode |
| `expand-trigger` | Menu / List expansion: click or hover | Check Strictly, Path Mode |
| `check-strictly` | Allow parent selection; unlink parent/child checks | Check Strictly |
- `options`: Options for cascader
- `placeholder`: Placeholder
- `multiple`: Whether it is a multi-selection state (The search is turned on by default in the multi-select mode)
Example source: src/cascader/__demos__/multiple.vue
```vue
```
### Check Strictly
- `options`: Options for cascader
- `placeholder`: Placeholder
- `check-strictly`: Whether to enable strict selection mode
- `default-value`: Default value (uncontrolled state)
Example source: src/cascader/__demos__/check-strictly.vue
```vue
```
### Path Mode
- `options`: Options for cascader
- `placeholder`: Placeholder
- `path-mode`: Whether the value is a path
- `default-value`: Default value (uncontrolled state)
Example source: src/cascader/__demos__/path-mode.vue
```vue
```
### Clearable
- `options`: Options for cascader
- `placeholder`: Placeholder
- `clearable`: Whether to allow clear
Example source: src/cascader/__demos__/clearable.vue
```vue
```
## Search and presentation
### Filterable
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| ---------------- | ----------------------------------------------------------------------------------- | ---------------------------------------- |
| `options` | Tree options; leaf values must be unique in scalar mode; paths distinguish branches | Filterable, Case Sensitive, Format Label |
| `placeholder` | Placeholder | Filterable, Case Sensitive, Format Label |
| `filterable` | Enable search | Filterable, Case Sensitive |
| `case-sensitive` | Case-sensitive built-in filtering; custom filters take priority | Case Sensitive |
| `format-label` | Format selected labels; use label slot for VNodes | Format Label |
- `options`: Options for cascader
- `placeholder`: Placeholder
- `filterable`: Whether to allow searching
Example source: src/cascader/__demos__/filterable.vue
```vue
```
### Case Sensitive
- `options`: Options for cascader
- `filterable`: Whether to allow searching
- `placeholder`: Placeholder
Example source: src/cascader/__demos__/case-sensitive.vue
```vue
区分大小写
保留原有路径标签匹配。启用区分大小写后,输入 fruit 不匹配 Fruit。
```
### Format Label
- `options`: Options for cascader
- `placeholder`: Placeholder
- `format-label`: Format display content
Example source: src/cascader/__demos__/format-label.vue
```vue
```
## Interaction and control
### Interaction state comparison
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| ------------- | ----------------------------------------------------------------------------------- | ---------------------------- |
| `options` | Tree options; leaf values must be unique in scalar mode; paths distinguish branches | Interaction state comparison |
| `clearable` | Allow clearing; preserve disabled selections | Interaction state comparison |
| `disabled` | Whether disabled | Interaction state comparison |
Toggle the state, interact with the component, and restore editing using the controls outside the specimen. Error appearance alone does not run validation.
Example source: src/cascader/__demos__/state-lab.vue
```vue
disabled
readonly
error
```
## Configuration and composition
### Passthrough Options
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --------------------- | -------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------- |
| `edit-mode` | Presentation | Passthrough Options, Copying and editing |
| `options` | Tree options; leaf values must be unique in scalar mode; paths distinguish branches | Passthrough Options, Copying and editing |
| `trigger-props` | Menu Trigger props; field owns open state | Passthrough Options |
| `open-trigger-target` | Pointer opening target: the whole field or only the suffix icon. Explicit keyboard opening and controlled open remain available. | Copying and editing |
| `filterable` | Enable search | Copying and editing |
- `open`: Whether to show the dropdown
- `options`: Options for cascader
- `trigger-props`: Trigger props of the drop-down menu
Example source: src/cascader/__demos__/passthrough-options.vue
```vue
{{
open ? "关闭面板" : "打开面板"
}}
顶层 open:{{ open }};嵌套配置:向上展开并调整偏移。
```
### Copying and editing
With open-trigger-target="icon", use the input area to edit or copy and the suffix button to open. Existing text remains copyable when editing or search is disabled.
Example source: src/cascader/__demos__/open-trigger-target.en-US.vue
```vue
Allow editing / search
Disable editing to copy existing text. In icon mode, editing does not open
the panel.
```
## Async loading and value resolution
### Loading
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| ------------- | ----------------------------------------------------------------------------------- | --------------------------------- |
| `options` | Tree options; leaf values must be unique in scalar mode; paths distinguish branches | Loading, Load More, Async Devices |
| `placeholder` | Placeholder | Loading, Load More, Async Devices |
| `loading` | Loading state; blocks selection and confirmation | Loading, Async Devices |
| `load-more` | Load children asynchronously; call done(children), or done() to allow retry | Load More |
| `path-mode` | Return a complete path instead of a node value | Async Devices |
| `filterable` | Enable search | Async Devices |
- `options`: Options for cascader
- `placeholder`: Placeholder
- `loading`: Whether it is loading state
Example source: src/cascader/__demos__/loading.vue
```vue
```
### Load More
- `options`: Options for cascader
- `placeholder`: Placeholder
- `load-more`: Data lazy loading function, open the lazy loading function when it is passed in
Example source: src/cascader/__demos__/load-more.vue
```vue
```
### Async Devices
- `options`: Options for cascader
- `loading`: Whether it is loading state
- `path-mode`: Whether the value is a path
- `filterable`: Whether to allow searching
Example source: src/cascader/__demos__/async-devices.vue
```vue
加载设备树
已提交路径:{{ value }}。标签与 ID 分离,异步加载后自动回显。
```
### Shared field loading
`loading` displays the shared field indicator. `loading-mode` is `default` (indicator) or `line` (an indeterminate bottom line); it defaults to `default`. Rendering belongs to FieldDecorator. Loading does not implicitly disable editing or change readonly. Set those states separately.
## API
### Empty values and reading placeholders
`empty-values` recognizes empty data; `empty-value` keeps existing clear output. `empty-text` defaults to `'-'` under `read-pretty`, with Field > FormItem > Form precedence and custom read slots first. With explicit empty-values, built-in required uses the policy; custom validators receive original data. See the [shared guide](llms/en-US/guide/empty-values.md).
| Prop | Type | Default and scope |
| ------------ | ------------------ | --------------------------------------------------------------------------- |
| empty-values | readonly unknown[] | Field > FormItem > Form > component-family default; replaces the whole list |
| empty-text | string | Field > FormItem > Form > '-'; explicit '' is valid |
These props belong to field presentation; pure panels do not gain reading mode. Form and FormItem provide inherited settings. The existing empty-value type and clear fallback remain component-specific.
### Cascader props
Use `v-model`, `v-model:open` and `v-model:input-value` for controlled state. Clear values are `''` for single selection and `[]` for multiple selection. Select uses `undefined` when an actual empty-string option exists.
| Prop | Description | Type | Default |
| --------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------- | ------------------------------- |
| `open-trigger-target` | Pointer opening target: the whole field or only the suffix icon. Explicit keyboard opening and controlled open remain available. | `'field' \| 'icon'` | `'field'` |
| `model-value / default-value` | Controlled value / uncontrolled initial value | `Value` | `Single: ''; multiple: []` |
| `open / default-open` | Controlled / initial open state | `boolean` | `undefined / false` |
| `input-value / default-input-value` | Search text, independent of selected values | `string` | `undefined / ''` |
| `multiple` | Multiple selection; enables search by default | `boolean` | `false` |
| `size` | Supports all five sizes; inherits group/form settings | `ComponentSize` | `md` |
| `variant` | filled, outline, standard; inherits InputGroup | `FormControlVariant` | `filled` |
| `disabled / readonly / error` | Inherits form state unless explicitly overridden | `boolean` | `undefined` |
| `placeholder` | Placeholder | `string` | `—` |
| `hint / line` | Floating hint / standard variant underline | `boolean` | `true` |
| `text-color / focus-color / blur-color` | Field colors | `string` | `—` |
| `loading` | Loading state; blocks selection and confirmation | `boolean` | `false` |
| `show-tags` | Show tags; false displays separated text | `boolean` | `true` |
| `separator` | Separator when show-tags=false | `string` | `,` |
| `text-align` | Text alignment: left / center / right. Inherits FormItem content-align when unset; standalone fields default to inline start | `'left' \| 'center' \| 'right'` | `-` |
| `max-tag-count` | Maximum visible tags; 0 means unlimited | `number` | `0` |
| `tag-nowrap` | Keep tags on one line with ellipsis and preserved removal icons; overflow scrolls horizontally; hover, focus or tap truncated text to preview it | `boolean` | `false` |
| `popup-container` | Selector, element, element resolver, or false for inline rendering | `PopupContainer` | `—` |
| `trigger-props` | Menu Trigger props; field owns open state | `TriggerProps` | `—` |
| `virtual-list-props` | Pass the virtual list attribute, pass in this parameter to turn on virtual scrolling [VirtualListProps](#VirtualListProps) | `VirtualListProps` | `—` |
| `search-delay` | Search debounce delay in ms | `number` | `500` |
| `format-label` | Format selected labels; use label slot for VNodes | `function` | `—` |
| `clearable` | Allow clearing; preserve disabled selections | `boolean` | `false` |
| `options` | Tree options; leaf values must be unique in scalar mode; paths distinguish branches | `CascaderOption[]` / `(query, { signal }) => Array / Promise` | `undefined` |
| `field-names` | Map value, label, disabled, children, isLeaf, tagProps, render | `CascaderFieldNames` | `—` |
| `path-mode` | Return a complete path instead of a node value | `boolean` | `false` |
| `check-strictly` | Allow parent selection; unlink parent/child checks | `boolean` | `false` |
| `filterable` | Enable search | `boolean` | `Single: false; multiple: true` |
| case-sensitive | Case-sensitive built-in filtering; custom filters take priority | boolean | false |
| `filter-option` | Receives query and raw node | `(input, option) => boolean` | `—` |
| `expand-trigger` | Menu / List expansion: click or hover | `string` | `click` |
| `expand-child` | Expand to first child | `boolean` | `false` |
| `load-more` | Load children asynchronously; call done(children), or done() to allow retry | `(option, done) => void` | `—` |
| `fallback-option` | Display unresolved values | `boolean or (value) => string` | `true` |
| `search-option-only-label` | Show node label only in search results | `boolean` | `false` |
| `auto-fit-popup-width` | Match Menu width to field | `boolean` | `false` |
| `edit-mode` | Presentation | `menu` | `menu` |
### Events and methods
- `update:modelValue`, `change(value)`: emitted on commit, not while editing a draft.
- `update:open`, `open-change(open)`: request an expanded-state change.
- `update:inputValue`, `input-value-change(text)`, `search(text)`: search state.
- `focus(event)`, `blur(event)`, `clear(event)`: native field events; only the field owner notifies Form.
- Methods: `focus()`, `blur()`.
### Slots and option data
Use `label({ data })` for custom `selected` labels; `selected` replaces the whole selection area. Also supports `prefix`, `suffix`, `clear-icon({ clear })`, `arrow-icon`, `loading-icon`, `search-icon`, `empty`, and `option({ data })`.
Option `label` is searchable plain text. Use `render` or the `option` slot for custom `option` content, and `format-label` or `label` slot for selected content. Values identify selections; labels never do. `disabled` blocks selection/removal, and `tagProps` customizes selected tags.
### `` Props
| Parameter | Description | Type | Default |
| ------------------------- | ---------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :---------------------: |
| path-mode | Return a complete path instead of a node value | `boolean` | `false` |
| multiple | Multiple selection; enables search by default | `boolean` | `false` |
| model-value **(v-model)** | Bound value | `string\| number\| Record\| ( \| string \| number \| Record \| (string \| number \| Record)[] )[]\| undefined` | `-` |
| default-value | Default value (uncontrolled state) | `string\| number\| Record\| ( \| string \| number \| Record \| (string \| number \| Record)[] )[]\| undefined` | `'' \| undefined \| []` |
| options | Tree options; leaf values must be unique in scalar mode; paths distinguish branches | `CascaderOption[]` / `(query, { signal }) => Array / Promise` | `undefined` |
| expand-trigger | Menu / List expansion: click or hover | `string` | `'click'` |
| check-strictly | Allow parent selection; unlink parent/child checks | `boolean` | `false` |
| load-more | Load children asynchronously; call done(children), or done() to allow retry | `( option: CascaderOption, done: (children?: CascaderOption[]) => void) => void` | `-` |
| field-names | Customize fields in `CascaderOption`; when option `value` is an object, `value` is also used as the key property | `CascaderFieldNames` | `-` |
| expand-child | Expand to first child | `boolean` | `false` |
### `` Events
| Event | Description | Arguments |
| ------ | --------------------------------------- | -------------------------------------------------------------------------------------- |
| change | Emitted when the selected value changes | value: `string \| number \| (string \| number \| (string \| number)[])[] \| undefined` |
### `` Slots
| Slot | Description | Arguments |
| ----- | :---------------------------------------------: | --------- |
| empty | Content displayed when no options are available | - |
### CascaderOption
| Parameter | Description | Type | Default |
| --------- | ------------------------------------- | ----------------------------------------- | :-----: |
| value | Option value | `string \| number \| Record` | `-` |
| label | Option text | `string` | `-` |
| render | Custom render function | `RenderFunction` | `-` |
| disabled | Whether disabled | `boolean` | `false` |
| tagProps | Property used for the displayed label | `TagProps` | `-` |
| children | Child options | `CascaderOption[]` | `-` |
| isLeaf | Whether this is a leaf node | `boolean` | `false` |
## Type definitions
The component exports the following types
```ts
import type { CascaderProps } from "@cedar-design/ui";
```
### Form field presentation and confirmation
This component supports `edit-mode` with field > FormItem > Form precedence. When unset, it defaults to `direct` and preserves `direct` editing. Supported values: `direct / click / dblclick`. Non-`direct` modes open the editor through the field value trigger and keep one draft; v-model updates only after confirmation. Cancel, reset or enabling readPretty discards the draft.
Cedar uses edit-mode="click" / "dblclick" to open an editor popup near the field. Enter/F2 also opens it; cancel/Escape discards the draft, and confirmation commits it. readPretty is an independent reading setting, separate from readonly and disabled.
`before-commit(value, { previousValue, signal })` can reject an overlay save. FormItem validates the candidate first and keeps the editor open on failure. `open / default-open / update:open` control the editor. Use `#read="{ value, text }"` to customize display. See the full field comparison in Form.
Field editing uses edit-mode: Cedar supports direct/click/dblclick, and Maple supports direct/popup. The old menu/list/picker editing values are not retained. Popup editors reuse the existing option index, search, asynchronous loading and virtual-list algorithms.
`read-pretty` is an independent boolean alongside `readonly` and `disabled`. It inherits from field to FormItem to Form; explicit `false` overrides the parent. The default is `false`. Reading mode renders no editor.
### Single-selection checkmark variables
| Variable | Default |
| ------------------------------- | ----------------------------------- |
| `--c-cascader-item-check-color` | `var(--c-sys-color-action-primary)` |
| `--c-cascader-item-check-size` | `var(--c-sys-font-size-md)` |
### Built-in search fields
`searchFields` / `search-fields` is a readonly `('label' | 'value')[]`, defaulting to `['label']`. Multiple fields use OR matching, case-insensitive by default. `['value', 'label']` searches codes and names; fieldNames maps semantic fields to business fields. An empty array matches no items for a nonempty query. Values are compared as strings; object traversal, object values and pinyin matching require a custom callback. A custom callback takes precedence and decides case handling itself. Remote results use the existing protocol for disabling local filtering. Cascader retains path semantics and checks the configured fields on each path node.
## Configuring the cleared value
`empty-value` / `emptyValue` sets the model value produced by clearing. It accepts a value in the component model type or a zero-argument factory. Omission preserves the existing default; use `() => undefined` to distinguish omission from returning undefined. Arrays are shallow-copied on every clear; selected items that cannot be cleared remain. It does not redefine emptiness, alter Form reset defaults or treat 0/false as universally empty.
`empty-value` accepts explicit `null` (or `() => null`). Clearing publishes `null` unchanged; omitted values preserve the existing default. Editors render `null` as blank without converting ordinary empty-string input to `null`. In popup editing, clearing changes the draft; confirm commits it and cancel preserves the original model.
The `options` prop accepts an array or `(query, { signal }) => array/Promise`. The component manages loading, cancellation and stale-result isolation; failures emit load-error. Single/multiple groups initialize with an empty-string query, searchable fields reload when the query changes, and root loading for tree fields remains independent of existing load-more child loading.
---
Document: llms/en-US/components/checkbox.md
# Checkbox
Start with the basic example, then compare related settings before moving to controlled, asynchronous or combined use cases.
## Reading direction
Checkbox labels and groups follow source dir without reversing value arrays. Space keeps its toggle meaning; disabled and readonly behavior remains effective. Changing direction does not select or clear options.
## Basic examples
### Basic usage
Preview configuration: `value="1"`.
Example source: src/checkbox/__demos__/basic.vue
```vue
Option 1
```
## Groups and layout
### Option declaration comparison
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| ------------- | --------------------------------------------------------- | ----------------------------------- |
| `value` | Option identifier in array/group mode | Option declaration comparison, Grid |
| `disabled` | Disabled state; inherits from the form/group when omitted | Grid |
Compare child-component declarations with options data. Both use a group model; field mapping and asynchronous data are separate.
Example source: src/checkbox/__demos__/group-declaration-comparison.vue
```vue
复选框组 checkbox group
Option 1
Option 2
Option 3
Option 1
Option 2
Option 3
复选框组选项 checkbox group options
{{ data.label }}
```
### Grid
- `disabled`: Prevents user interaction.
Example source: src/checkbox/__demos__/grid.vue
```vue
Option 1
Option 2
Option 3
Option 4
Option 5
```
### Group State
Preview configuration: `:default-value="['a']"`, `:options="options"`, `:readonly="readonly"`, `:model-value="[]"`.
Example source: src/checkbox/__demos__/group-state.vue
```vue
受控:父级接受更新 {{ accepted }}
{{ readonly ? '解除只读' : '设为只读' }}
父级拒绝更新:仅记录提议 {{ proposed }}
```
## Options and value model
### Control Value
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --------------- | --------------------------------------------------------- | ------------------------------ |
| `default-value` | Initial uncontrolled value | Control Value, Controlled Mode |
| `value` | Option identifier in array/group mode | Control Value |
| `readonly` | Readonly state; inherits from the form/group when omitted | Control Value |
| `disabled` | Disabled state; inherits from the form/group when omitted | Control Value |
- `readonly`: Displays the current value without allowing edits.
- `disabled`: Prevents user interaction.
Example source: src/checkbox/__demos__/control-value.vue
```vue
布尔模型始终返回布尔值;数组模型用 value 标识选项。 当前值:{{ value }}
启用通知
切换选择
聚焦
重置
数组模型:{{ selected }}
数值 0
布尔 false
只读允许聚焦,禁用不允许操作;Enter/空格只影响当前控件。
只读
禁用
```
### Option Data
Preview configuration: `:options="options"`, `:field-names="fields"`, `orientation="vertical"`, `:options="renderOptions"`.
Example source: src/checkbox/__demos__/option-data.vue
```vue
字段映射与标签插槽;只读可聚焦,禁用不可操作。
{{ data.label }} {{ checked ? '✓' : '' }}
当前值:{{ JSON.stringify(value) }}
清空
标签也支持渲染函数;不传 options 时使用默认插槽,传入 [] 时保持空组。
```
### Controlled Mode
Preview configuration: `:model-value="true"`, `:model-value="checked2"`, `:default-value="true"`.
Example source: src/checkbox/__demos__/controlled-mode.vue
```vue
v-model
binding value
binding value2
uncontrolled state
{{ checked2 ? "uncheck" : "check" }} value2
```
## Selection and bulk actions
### Max Checked
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --------------- | --------------------------------------------------------- | ----------------------------------------- |
| `value` | Option identifier in array/group mode | Max Checked, Checked All Indeterminate |
| `disabled` | Disabled state; inherits from the form/group when omitted | Max Checked, Interaction state comparison |
| `indeterminate` | Whether to display an indeterminate state | Checked All Indeterminate |
| `readonly` | Readonly state; inherits from the form/group when omitted | Interaction state comparison |
| `error` | Error state; inherits from the form/group when omitted | Interaction state comparison |
- `disabled`: Prevents user interaction.
Example source: src/checkbox/__demos__/max-checked.vue
```vue
Option 1
Option 2
Option 3
Option 4
```
### Checked All Indeterminate
Preview configuration: `:model-value="checkedAll"`, `:indeterminate="indeterminate"`, `value="1"`, `value="2"`.
Example source: src/checkbox/__demos__/checked-all-indeterminate.vue
```vue
Check All
Option 1
Option 2
Option 3
```
### Group Methods
Preview configuration: `:options="reverse ? [...options].reverse() : options"`, `:max="4"`, `orientation="vertical"`.
Example source: src/checkbox/__demos__/group-methods.vue
```vue
最多选择 4 项(包含未加载的 remote)。全选/反选保留只读和未加载的已选值。
全选
反选
调整选项顺序
当前值:{{ JSON.stringify(value) }}
方法返回值:{{ JSON.stringify(proposal) }}
```
### Interaction state comparison
Toggle the state, interact with the component, and restore editing using the controls outside the specimen. Error appearance alone does not run validation.
Example source: src/checkbox/__demos__/state-lab.vue
```vue
disabled
readonly
error
同意条款
```
## Control and slot customization
### Native Control
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --------------- | --------------------------------------------------------- | ---------------- |
| `name` | Native field name; inherits from Group when omitted | Native Control |
| `indeterminate` | Whether to display an indeterminate state | Native Control |
| `aria-label` | Accessible name when no visible label exists | Native Control |
| `default-value` | Initial uncontrolled value | Native Control |
| `readonly` | Readonly state; inherits from the form/group when omitted | Native Control |
| `disabled` | Disabled state; inherits from the form/group when omitted | Native Control |
- `readonly`: Displays the current value without allowing edits.
- `disabled`: Prevents user interaction.
Example source: src/checkbox/__demos__/native-control.vue
```vue
按 Tab 聚焦,按空格或 Enter 切换。禁用项跳过,只读项可聚焦。
接受协议:{{ value ? '已接受' : '未接受' }}
只读已选
禁用
错误状态
最多选择两项:{{ choices.join(', ') }}
```
### Checked Custom
Preview configuration: `:default-value="['1']"`, `value="1"`, `:model-value="checked"`, `value="2"`.
Example source: src/checkbox/__demos__/checked-custom.vue
```vue
This is a tag checkbox 1
This is a tag checkbox 2
This is a tag checkbox 3
Checkbox Card {{ item }}
this is a text
```
### Custom Control
Preview configuration: `:icon-size="28"`, `checked-color="#137547"`, `unchecked-color="#656565"`, `icon-size="1.5rem"`.
Example source: src/checkbox/__demos__/custom-control.vue
```vue
数字尺寸(px)与实例颜色
CSS 长度尺寸,无波纹
✓
○
自定义图标,仍保留原生键盘与无障碍语义
{{ selected ? '✓' : '○' }}
```
## Async options
### Async Options
Preview configuration: `edit-mode="direct"`, `:options="options"`, `:max="2"`.
Example source: src/checkbox/__demos__/async-options.vue
```vue
业务值独立于当前选项,加载或移除选项不会清空已选值:{{ value }}
Manual responses / 手动返回
加载选项
移除选项
返回最早加载
返回最新加载
{{
loading
? "加载中,可在完成前移除选项以取消本次加载。"
: "加载完成后保留当前选值和键盘焦点。"
}}
用户变更次数:{{ changeCount }}
Applied: {{ applied }} · Ignored: {{ ignored }} · Pending:
{{ waiting.length }}
```
## API
### Empty values and reading placeholders
`empty-values` recognizes empty data; `empty-value` keeps existing clear output. `empty-text` defaults to `'-'` under `read-pretty`, with Field > FormItem > Form precedence and custom read slots first. With explicit empty-values, built-in required uses the policy; custom validators receive original data. See the [shared guide](llms/en-US/guide/empty-values.md).
| Prop | Type | Default and scope |
| ------------ | ------------------ | --------------------------------------------------------------------------- |
| empty-values | readonly unknown[] | Field > FormItem > Form > component-family default; replaces the whole list |
| empty-text | string | Field > FormItem > Form > '-'; explicit '' is valid |
These props belong to field presentation; pure panels do not gain reading mode. Form and FormItem provide inherited settings. The existing empty-value type and clear fallback remain component-specific.
`ChoiceValue = string | number | boolean`;`CheckboxModel = boolean | ChoiceValue[]`;`RadioModel = ChoiceValue | null`。
### Checkbox Props
| Prop | Description | Type | Default |
| ---------------------- | --------------------------------------------------------------- | ------------------------ | --------- |
| model-value (v-model) | Controlled value | boolean \| ChoiceValue[] | undefined |
| default-value | Initial uncontrolled value | boolean \| ChoiceValue[] | false |
| value | Option identifier in array/group mode | string\|number\|boolean | true |
| disabled | Disabled state; inherits from the form/group when omitted | boolean | undefined |
| readonly | Readonly state; inherits from the form/group when omitted | boolean | undefined |
| error | Error state; inherits from the form/group when omitted | boolean | undefined |
| indeterminate | Whether to display an indeterminate state | boolean | false |
| checked-color | Instance checked color; error/disabled states take precedence | string | undefined |
| unchecked-color | Instance unchecked color; error/disabled states take precedence | string | undefined |
| icon-size | Numbers are px; strings are CSS lengths | number \| string | undefined |
| ripple | Whether to enable ripple feedback | boolean | true |
| uninject-group-context | Ignore surrounding CheckboxGroup; form state still applies | boolean | false |
| name | Native field name; inherits from Group when omitted | string | undefined |
| aria-label | Accessible name when no visible label exists | string | undefined |
### Checkbox Events
| Event | Description | Arguments |
| ------------------ | --------------------------------- | ----------------------------------- |
| update:model-value | Proposes a new value | value: CheckboxModel |
| change | Value change | value: CheckboxModel, event?: Event |
| click | Click; not emitted while disabled | event: MouseEvent |
| focus | Focus | event: FocusEvent |
| blur | Blur | event: FocusEvent |
### Checkbox Methods
| Method | Arguments | Returns |
| ------ | ---------------------- | ------- |
| toggle | checked?: boolean | void |
| focus | options?: FocusOptions | void |
| blur | - | void |
### Checkbox Slots
| Slot | Description | Arguments |
| ------------------ | ----------------------------------------- | ----------------------------------------------------------- |
| checkbox | Customize the complete control appearance | checked: boolean, disabled: boolean, indeterminate: boolean |
| checked-icon | Checked icon | - |
| unchecked-icon | Unchecked icon | - |
| indeterminate-icon | Half icon | - |
| default | Label | checked: boolean |
### CheckboxGroup Props
| Prop | Description | Type | Default |
| --------------------- | --------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ------------ |
| model-value (v-model) | Controlled value | ChoiceValue[] | undefined |
| default-value | Initial uncontrolled value | ChoiceValue[] | [] |
| max | Maximum selection count | number | undefined |
| options | Options; replaces default slot when supplied | Array> / `(query, { signal }) => Array / Promise` | `undefined` |
| orientation | Horizontal/vertical arrangement of checkbox-group options, default horizontal; not text reading direction | Orientation | 'horizontal' |
| disabled | Disabled state; inherits from the form/group when omitted | boolean | undefined |
| readonly | Readonly state; inherits from the form/group when omitted | boolean | undefined |
| error | Error state; inherits from the form/group when omitted | boolean | undefined |
| field-names | Option field mapping | ChoiceFieldNames | undefined |
| name | Native input name within the group | string | undefined |
| aria-label | Accessible group name | string | undefined |
### CheckboxGroup Methods
| Method | Arguments | Returns |
| ---------- | --------- | ------------- |
| checkAll | - | ChoiceValue[] |
| inverseAll | - | ChoiceValue[] |
### CheckboxGroup Events
| Event | Description | Arguments |
| ------------------ | ------------------------------------ | -------------------------------------------------- |
| update:model-value | Proposes a new value | value: (string \| number \| boolean)[] |
| change | Value change; notified once by Group | value: (string \| number \| boolean)[], ev?: Event |
### CheckboxGroup Slots
| Slot | Description | Arguments |
| -------- | ---------------------- | -------------------------------------- |
| checkbox | Custom checkbox | checked: boolean disabled: boolean |
| label | Checkbox label content | data: CheckboxOption, checked: boolean |
### CheckboxOption
| Field | Description | Type |
| ------------- | -------------------------------- | -------------------------------------------------------------------- |
| value | Option identity | ChoiceValue |
| label | Label or render function | VNodeChild \| (data: CheckboxOption, checked: boolean) => VNodeChild |
| disabled | Disable interaction | boolean |
| readonly | Read-only interaction | boolean |
| indeterminate | Display-only indeterminate state | boolean |
## Type definitions
The component exports the following types
```ts
import type { CheckboxProps } from "@cedar-design/ui";
```
### ChoiceFieldNames
`{ label?: string; value?: string; disabled?: string; readonly?: string; indeterminate?: string }`
Exported types:`CheckboxOption`、`ChoiceFieldNames`。
Public method type:`CheckboxGroupMethods`;`CheckboxGroupInstance` includes these methods.
### Reduced motion
Built-in CSS transitions follow `prefers-reduced-motion: reduce`. Removing transitions does not change final visibility, selected/expanded state or event semantics. Applications control custom animations inside slots.
### Style variables
| Variable | Default |
| ---------------------------------------- | -------------------------------------- |
| `--c-checkbox-control-color` | `var(--c-sys-color-content-secondary)` |
| `--c-checkbox-control-color-checked` | `var(--c-sys-color-content-brand)` |
| `--c-checkbox-mark-color` | `var(--c-sys-color-surface-default)` |
| `--c-checkbox-control-color-disabled` | `var(--c-sys-color-content-disabled)` |
| `--c-checkbox-control-color-error` | `var(--c-sys-color-content-danger)` |
| `--c-checkbox-control-size` | `14px` |
| `--c-checkbox-label-text-color` | `var(--c-sys-color-content-primary)` |
| `--c-checkbox-label-text-color-disabled` | `var(--c-sys-color-content-disabled)` |
| `--c-checkbox-label-font-size` | `var(--c-font-size-body-3)` |
| `--c-checkbox-label-gap` | `var(--c-spacing-4)` |
| `--c-checkbox-action-padding` | `5px` |
| `--c-checkbox-group-gap` | `var(--c-spacing-7)` |
| `--c-checkbox-animation-duration` | `var(--c-transition-duration-3)` |
### Form field presentation and confirmation
This component supports `edit-mode` with field > FormItem > Form precedence. When unset, it defaults to `direct` and preserves `direct` editing. Supported values: `direct / click / dblclick`. Non-`direct` modes open the editor through the field value trigger and keep one draft; v-model updates only after confirmation. Cancel, reset or enabling readPretty discards the draft.
Cedar uses edit-mode="click" / "dblclick" to open an editor popup near the field. Enter/F2 also opens it; cancel/Escape discards the draft, and confirmation commits it. readPretty is an independent reading setting, separate from readonly and disabled.
`before-commit(value, { previousValue, signal })` can reject an overlay save. FormItem validates the candidate first and keeps the editor open on failure. `open / default-open / update:open` control the editor. Use `#read="{ value, text }"` to customize display. See the full field comparison in Form.
`read-pretty` is an independent boolean alongside `readonly` and `disabled`. It inherits from field to FormItem to Form; explicit `false` overrides the parent. The default is `false`. Reading mode renders no editor.
`empty-value` accepts explicit `null` (or `() => null`). Clearing publishes `null` unchanged; omitted values preserve the existing default. Editors render `null` as blank without converting ordinary empty-string input to `null`. In popup editing, clearing changes the draft; confirm commits it and cancel preserves the original model.
The `options` prop accepts an array or `(query, { signal }) => array/Promise`. The component manages loading, cancellation and stale-result isolation; failures emit load-error. Single/multiple groups initialize with an empty-string query, searchable fields reload when the query changes, and root loading for tree fields remains independent of existing load-more child loading.
---
Document: llms/en-US/components/col.md
# Col
24-column Flex layout. Row manages gutters and alignment; Col manages spans, offsets, ordering and breakpoints. Use Grid for CSS Grid collapse and suffix items.
> **Choosing a layout**
>
> - Grid + GridItem: Use for form columns and card grids with consistent column widths, spans, responsive column counts, or collapsed rows and suffix items.
> - Row + Col: Use for 24-column Flex layouts that need horizontal/vertical alignment, wrapping control, fixed and flexible widths together, or responsive ordering. Row controls the row; Col controls width, offset and order.
> - Space: Use for simple groups of buttons, tags or text that only need spacing, direction and alignment. Use native Flex for more flexible width allocation.
## Basic examples
### Span and offset
Example source: src/col/__demos__/basic.vue
```vue
Span{{ value }}
Offset{{ value }}
{{ span }} / +{{ offset }}
4
```
## Layout and arrangement
### Flexible ratios and fixed widths
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `flex` | Ratio, fixed length or CSS flex value | Flexible ratios and fixed widths |
| `xs` | Responsive span or object containing span, offset and order | Responsive objects and visibility |
| `sm` | Responsive span or object containing span, offset and order | Responsive objects and visibility |
| `md` | Responsive span or object containing span, offset and order | Responsive objects and visibility |
| `span` | Column span; 0 hides | Responsive objects and visibility |
Example source: src/col/__demos__/flex.vue
```vue
```
### Responsive objects and visibility
Example source: src/col/__demos__/responsive.vue
```vue
xs → sm (576px) → md (768px). Hidden columns return at larger breakpoints.
24 / 12 / 8
Hidden / 12 / 8
Reset offset / order
```
### Props
| Prop | Description | Type | Default |
| --- | --- | --- | --- |
| span | Column span; 0 hides | `number` | `24` |
| offset | Offset; 0 resets | `number` | `undefined` |
| order | Order; 0 resets | `number` | `undefined` |
| xs | Responsive span or object containing span, offset and order | `number / ColSizeDescriptor` | `undefined` |
| sm | Responsive span or object containing span, offset and order | `number / ColSizeDescriptor` | `undefined` |
| md | Responsive span or object containing span, offset and order | `number / ColSizeDescriptor` | `undefined` |
| lg | Responsive span or object containing span, offset and order | `number / ColSizeDescriptor` | `undefined` |
| xl | Responsive span or object containing span, offset and order | `number / ColSizeDescriptor` | `undefined` |
| xxl | Responsive span or object containing span, offset and order | `number / ColSizeDescriptor` | `undefined` |
| flex | Ratio, fixed length or CSS flex value | `number / string` | `undefined` |
### Events
| Event | Description |
| --- | --- |
| click | Native MouseEvent, emitted once per click |
### Slots
| Slot | Description |
| --- | --- |
| default | Layout content |
### Methods
| Method | Description |
| --- | --- |
The order example restores every column to `order: 0` when reverse is turned off. Responsive breakpoints use the browser viewport rather than the demo card width; widening the card alone does not activate a breakpoint. `span: 0` hides a column, and a matching larger breakpoint can restore it.
## Content and presentation
### Ordering and resetting to zero
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `span` | Column span; 0 hides | Ordering and resetting to zero |
| `order` | Order; 0 resets | Ordering and resetting to zero |
Example source: src/col/__demos__/order.vue
```vue
```
## API
### Props
| Prop | Description | Type | Default |
| --- | --- | --- | --- |
| span | Column span; 0 hides | `number` | `24` |
| offset | Offset; 0 resets | `number` | `undefined` |
| order | Order; 0 resets | `number` | `undefined` |
| xs | Responsive span or object containing span, offset and order | `number / ColSizeDescriptor` | `undefined` |
| sm | Responsive span or object containing span, offset and order | `number / ColSizeDescriptor` | `undefined` |
| md | Responsive span or object containing span, offset and order | `number / ColSizeDescriptor` | `undefined` |
| lg | Responsive span or object containing span, offset and order | `number / ColSizeDescriptor` | `undefined` |
| xl | Responsive span or object containing span, offset and order | `number / ColSizeDescriptor` | `undefined` |
| xxl | Responsive span or object containing span, offset and order | `number / ColSizeDescriptor` | `undefined` |
| flex | Ratio, fixed length or CSS flex value | `number / string` | `undefined` |
### Events
| Event | Description |
| --- | --- |
| click | Native MouseEvent, emitted once per click |
### Slots
| Slot | Description |
| --- | --- |
| default | Layout content |
### Methods
| Method | Description |
| --- | --- |
The order example restores every column to `order: 0` when reverse is turned off. Responsive breakpoints use the browser viewport rather than the demo card width; widening the card alone does not activate a breakpoint. `span: 0` hides a column, and a matching larger breakpoint can restore it.
## Responsiveness and accessibility
Breakpoints use the browser viewport: xs is the base; sm ≥576, md ≥768, lg ≥992, xl ≥1200 and xxl ≥1600px. Configured values resolve downward from the largest matching breakpoint. SSR starts with xs and responds to the viewport after mounting. Grid collapsing and dynamic ordering are calculated after mounting. These layout containers add no keyboard shortcuts; callers supply content semantics and focusable elements. There are no public methods or dedicated theme tokens.
## Imports
Grid contains only Grid.Item. Row and Col are independent components with their own source, styles, navigation, documentation and demos. Grid.Row/Grid.Col, Row/Col re-exports from Grid and GridRowInstance/GridColInstance are removed. Import them from the library root or separate row/col entries. Installing Grid no longer registers Row/Col automatically.
---
Document: llms/en-US/components/collapse.md
# Collapse
Start with the basic example, then compare related settings before moving to controlled, asynchronous or combined use cases.
## Basic examples
### Basic usage
Preview configuration: `:default-value="['1', 2]"`, `title="Beijing Toutiao Technology Co., Ltd."`, `name="1"`, `:name="2"`.
Example source: src/collapse/__demos__/basic.vue
```vue
Beijing Toutiao Technology Co., Ltd.
Beijing Toutiao Technology Co., Ltd.
Beijing Toutiao Technology Co., Ltd.
```
## Appearance and states
### Disabled
Preview configuration: `:default-value="[1]"`, `title="Beijing Toutiao Technology Co., Ltd."`, `:name="1"`, `:disabled="disabled"`.
Example source: src/collapse/__demos__/disabled.vue
```vue
{{ disabled ? 'Enable' : 'Disable' }}
Beijing Toutiao Technology Co., Ltd.
Beijing Toutiao Technology Co., Ltd.
```
## Layout and arrangement
### Nested
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `default-value` | Uncontrolled initial expanded names | Nested, Icon Position |
| `destroy-on-hide` | Destroy content when hidden | Nested |
| `offset` | Gap between expanded panels | Offset |
| `expand-icon-position` | Expand-icon position within the header: left or right, default left. Does not control content expansion direction | Icon Position |
| `show-expand-icon` | Whether to show expansion icons; child items decide when omitted | Icon Position |
Preview configuration: `:default-value="['1', 2]"`, `destroy-on-hide`, `title="Beijing Toutiao Technology Co., Ltd."`, `name="1"`.
Example source: src/collapse/__demos__/nested.vue
```vue
Beijing Toutiao Technology Co., Ltd.
Beijing Toutiao Technology Co., Ltd.
Beijing Toutiao Technology Co., Ltd.
Beijing Toutiao Technology Co., Ltd.
```
### Offset
Preview configuration: `:offset="offset"`, `title="Beijing Toutiao Technology Co., Ltd."`, `name="1"`, `name="2"`.
Example source: src/collapse/__demos__/offset.vue
```vue
{{ offset ? 'Hide offset' : 'Show offset' }}
Beijing Toutiao Technology Co., Ltd.
Beijing Toutiao Technology Co., Ltd.
Beijing Toutiao Technology Co., Ltd.
```
### Icon Position
Preview configuration: `:default-value="['1']"`, `:expand-icon-position="position"`, `:show-expand-icon="!hideIcon"`, `title="Beijing Toutiao Technology Co., Ltd."`.
Example source: src/collapse/__demos__/icon-position.vue
```vue
{{ position === 'right' ? 'Icon left' : 'Icon right' }}
{{ hideIcon ? 'Show icon' : 'Hide icon' }}
city
Beijing Toutiao Technology Co., Ltd.
Beijing Toutiao Technology Co., Ltd.
Beijing Toutiao Technology Co., Ltd.
```
## Content and presentation
### Accordion
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `default-value` | Uncontrolled initial expanded names | Accordion, Borders and dividers, Expand Icon |
| `accordion` | Accordion mode; at most one open panel | Accordion |
| `bordered` | Whether to show border | Borders and dividers |
| `divider` | Show dividers | Borders and dividers |
| `destroy-on-hide` | Destroy content when hidden | Destroy |
Preview configuration: `:default-value="[1]"`, `accordion`, `title="Beijing Toutiao Technology Co., Ltd."`, `name="1"`.
Example source: src/collapse/__demos__/accordion.vue
```vue
Beijing Toutiao Technology Co., Ltd.
Beijing Toutiao Technology Co., Ltd.
Beijing Toutiao Technology Co., Ltd.
```
### Borders and dividers
Compare outer borders and separators between panels, including their appearance while expanded.
Example source: src/collapse/__demos__/border-comparison.vue
```vue
无边框模式 border less
Beijing Toutiao Technology Co., Ltd.
Beijing Toutiao Technology Co., Ltd.
Beijing Toutiao Technology Co., Ltd.
分割线 divider
{{ scene2.divider ? 'Hide divider' : 'Show divider' }}
Beijing Toutiao Technology Co., Ltd.
Beijing Toutiao Technology Co., Ltd.
Beijing Toutiao Technology Co., Ltd.
```
### Extra
Preview configuration: `title="Beijing Toutiao Technology Co., Ltd."`, `name="1"`, `:name="2"`, `name="3"`.
Example source: src/collapse/__demos__/extra.vue
```vue
Extra
Beijing Toutiao Technology Co., Ltd.
Action
Beijing Toutiao Technology Co., Ltd.
city
Beijing Toutiao Technology Co., Ltd.
```
### Expand Icon
Preview configuration: `:default-value="['1', 2]"`, `title="Beijing Toutiao Technology Co., Ltd."`, `name="1"`, `:name="2"`.
Example source: src/collapse/__demos__/expand-icon.vue
```vue
{{ expanded ? '▼' : '▶' }}
{{ expanded ? '^^' : 'vv' }}
Beijing Toutiao Technology Co., Ltd.
Beijing Toutiao Technology Co., Ltd.
Beijing Toutiao Technology Co., Ltd.
```
### Destroy
Preview configuration: `:default-value="['1', 2]"`, `destroy-on-hide`, `title="Beijing Toutiao Technology Co., Ltd."`, `name="1"`.
Example source: src/collapse/__demos__/destroy.vue
```vue
Beijing Toutiao Technology Co., Ltd.
Beijing Toutiao Technology Co., Ltd.
Beijing Toutiao Technology Co., Ltd.
```
## Customization and slots
### Custom
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `default-value` | Uncontrolled initial expanded names | Custom |
| `bordered` | Whether to show border | Custom |
Preview configuration: `:default-value="['1', 2]"`, `:bordered="false"`, `title="Beijing Toutiao Technology Co., Ltd."`, `name="1"`.
Example source: src/collapse/__demos__/custom.vue
```vue
Beijing Toutiao Technology Co., Ltd.
Beijing Toutiao Technology Co., Ltd.
Beijing Toutiao Technology Co., Ltd.
```
## Interaction and control
### Toggle All
Preview configuration: `title="Panel 1"`, `name="1"`, `title="Panel 2"`, `name="2"`.
Example source: src/collapse/__demos__/toggle-all.vue
```vue
Toggle all
Toggle all (skip disabled)
Expand all
Expand all (skip disabled)
Collapse all
Collapse all (skip disabled)
Content 1
Content 2
Content 3
Content 4
```
## Reading direction
Inherits the nearest `dir="ltr|rtl"` and supports runtime and nested overrides. Titles and expanded content inherit reading direction without changing expansion state. The left/right values of expand-icon-position remain physical sides. Custom expansion graphics are not additionally mirrored.
## API
The main value uses ordinary `v-model`: `modelValue` is an array of expanded panel names, including in accordion mode. `defaultValue` initializes uncontrolled state only on creation; later changes do not reset it. Initialization does not emit `update:modelValue`. When `modelValue` is provided, the parent controls the state and its value is authoritative.
### Props
| Prop | Description | Type | Default |
| --- | --- | --- | --- |
| model-value | Expanded names; v-model | `(string \| number)[]` | `—` |
| default-value | Uncontrolled initial expanded names | `(string \| number)[]` | `[]` |
| accordion | Accordion mode; at most one open panel | `boolean` | `false` |
| show-expand-icon | Whether to show expansion icons; child items decide when omitted | `boolean` | `—` |
| expand-icon-position | Expand-icon position within the header: left or right, default left. Does not control content expansion direction | `'left' \| 'right'` | `'left'` |
| bordered | Whether to show border | `boolean` | `true` |
| divider | Show dividers | `boolean` | `true` |
| offset | Gap between expanded panels | `boolean` | `false` |
| destroy-on-hide | Destroy content when hidden | `boolean` | `false` |
### Events
| Event | Description | Arguments |
| --- | --- | --- |
| update:model-value | Request an expanded-name update | `(string \| number)[]` |
| change | Emitted when expanded panels change | `(string \| number)[]`, `Event` |
### Slots
| Slot | Description | Scope |
| --- | --- | --- |
| default | Panel list | `—` |
### Methods
| Method | Description |
| --- | --- |
| toggleAll | Expand or collapse all panels (no-op in accordion) |
The parent `expand-icon` slot is forwarded to items that do not provide their own icon. Scope: `expanded`, `disabled`, `position`. It is not rendered on the root node.
#### CollapseToggleAllOptions
| Arguments | Description | Type | Default |
| --- | --- | --- | --- |
| expand | `'inverse'` toggles all; `boolean` expands or collapses all | `'inverse' \| boolean` | `—` |
| skipDisabled | Skip disabled panels | `boolean` | `false` |
### `` Props
| Parameter | Description | Type | Default |
| --- | --- | --- | --- |
| name **(required)** | Unique panel identifier corresponding to a value in `modelValue` | `string \| number` | `—` |
| title | Panel title | `string` | `—` |
| disabled | Whether disabled | `boolean` | `false` |
| show-expand-icon | Whether to show an expansion icon | `boolean` | `true` |
| destroy-on-hide | Destroy content when hidden | `boolean` | `false` |
### `` Slots
| Slot | Description | Arguments |
| --- | --- | --- |
| title | Panel title | `—` |
| extra | Extra content | `—` |
| expand-icon | Expand icon | expanded: `boolean` disabled: `boolean` position: `'left' \| 'right'` |
| default | Panel content | `—` |
### Type definitions
The component exports the following types. `Collapse.Item` and `CollapseItem` refer to the same component.
```ts
import type { CollapseInstance, CollapseToggleAllOptions, ExpandIconPosition } from '@cedar-design/ui'
```
## Color variables
Collapse public color variables default to system semantics consistently in Cedar and Maple:
| Variable | Default semantic value |
| --- | --- |
| `--c-collapse-border-color` | `--c-sys-color-border-default` |
| `--c-collapse-title-bg` | `--c-sys-color-surface-default` |
| `--c-collapse-title-bg-active` | `--c-sys-color-surface-default` |
| `--c-collapse-title-bg-disabled` | `--c-sys-color-surface-default` |
| `--c-collapse-title-text-color` | `--c-sys-color-content-primary` |
| `--c-collapse-title-text-color-disabled` | `--c-sys-color-content-disabled` |
| `--c-collapse-content-text-color` | `--c-sys-color-content-primary` |
| `--c-collapse-content-text-color-disabled` | `--c-sys-color-content-disabled` |
| `--c-collapse-content-bg` | `--c-sys-color-surface-muted` |
| `--c-collapse-expand-icon` | `var(--c-sys-color-content-secondary)` |
| `--c-collapse-item-border-color` | `--c-sys-color-border-default` |
### Reduced motion
Built-in CSS transitions follow `prefers-reduced-motion: reduce`. Removing transitions does not change final visibility, selected/expanded state or event semantics. Applications control custom animations inside slots.
---
Document: llms/en-US/components/color-picker.md
# Color Picker
Start with the basic example, then compare related settings before moving to controlled, asynchronous or combined use cases.
## Basic examples
### Basic usage
- `default-value`: Default value (uncontrolled state)
Example source: src/color-picker/__demos__/basic.vue
```vue
```
## Appearance and states
### Disabled
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `default-value` | Default | Disabled |
| `disabled` | Disabled | Disabled |
| `hide-trigger` | Panel only, without a trigger | Disabled |
| `show-text` | Show color value | Disabled |
- `default-value`: Default value (uncontrolled state)
- `disabled`: disabled
- `hide-trigger`: There is no trigger element, only the color panel is displayed
- `show-text`: Show color value
Example source: src/color-picker/__demos__/disabled.vue
```vue
```
## Content and presentation
### Colors
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `default-value` | Default | Colors |
| `history-colors` | History colors | Colors |
| `show-history` | Show history colors | Colors |
| `show-preset` | Show preset colors | Colors |
- `default-value`: Default value (uncontrolled state)
- `history-colors`: Color array of historical colors
- `show-history`: Show history colors
- `show-preset`: Show preset colors
Example source: src/color-picker/__demos__/colors.vue
```vue
```
## Data and options
### Format
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `default-value` | Default | Format |
| `format` | Color value format | Format |
| `show-text` | Show color value | Format |
| `hide-trigger` | Panel only, without a trigger | Format |
- `default-value`: Default value (uncontrolled state)
- `format`: Color value format
- `show-text`: Show color value
- `hide-trigger`: There is no trigger element, only the color panel is displayed
Example source: src/color-picker/__demos__/format.vue
```vue
{{ item }}
```
## API
### `` Props
| Parameter | Description | Type | Default |
| --- | --- | --- | --- |
| model-value **(v-model)** | Bound value | `string` | `-` |
| default-value | Default | `string` | `-` |
| format | Color value format | `'hex' \| 'rgb'` | `-` |
| size | Size | `'xs' \| 'sm' \| 'md' \| 'lg' \| 'xl'` | `'md'` |
| show-text | Show color value | `boolean` | `false` |
| show-history | Show history colors | `boolean` | `false` |
| show-preset | Show preset colors | `boolean` | `false` |
| disabled | Disable interaction | `boolean` | `false` |
| disabled-alpha | Disable alpha | `boolean` | `false` |
| hide-trigger | Panel only, without a trigger | `boolean` | `true` |
| history-colors | History colors | `string[]` | `-` |
| preset-colors | Preset colors | `string[]` | `-` |
### Existing precedence of forwarded configuration (F07)
Existing triggerProps are spread after some internal Trigger settings, so nested fields such as disabled can currently override internal values. F07 preserves this order and type for compatibility; it does not apply AutoComplete managed-field rules, promise a new safe subset or automatically prohibit these existing capabilities.
Dragging uses the control owner view. KeepAlive deactivation or unmount ends the gesture and releases its listeners; a new activation requires a new gesture, and callbacks from old gestures cannot change its value.
---
Document: llms/en-US/components/color.md
# Color
Start with the basic example, then compare related settings before moving to controlled, asynchronous or combined use cases.
## Basic examples
### Basic usage
- `show-text`: Show color value
Example source: src/color/__demos__/basic.vue
```vue
```
## Appearance and states
### Size
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| ------------- | ---------------- | ---------------- |
| `size` | Size | Size |
| `show-text` | Show color value | Size |
- `size`: ComponentSize
- `show-text`: Show color value
Example source: src/color/__demos__/size.vue
```vue
```
## API
### Empty values and reading placeholders
`empty-values` recognizes empty data; `empty-value` keeps existing clear output. `empty-text` defaults to `'-'` under `read-pretty`, with Field > FormItem > Form precedence and custom read slots first. With explicit empty-values, built-in required uses the policy; custom validators receive original data. See the [shared guide](llms/en-US/guide/empty-values.md).
| Prop | Type | Default and scope |
| ------------ | ------------------ | --------------------------------------------------------------------------- |
| empty-values | readonly unknown[] | Field > FormItem > Form > component-family default; replaces the whole list |
| empty-text | string | Field > FormItem > Form > '-'; explicit '' is valid |
These props belong to field presentation; pure panels do not gain reading mode. Form and FormItem provide inherited settings. The existing empty-value type and clear fallback remain component-specific.
### Props
| Arguments | Description | Type | Default |
| -------------------- | ------------------------ | ---------------------------- | ------- |
| `model-value` | Bound value | `string` | `-` |
| `format` | Color format | `hex \| rgb` | `-` |
| `size` | Size | `xs \| sm \| md \| lg \| xl` | `md` |
| `show-text` | Show color value | `boolean` | `false` |
| `show-history` | Show history colors | `boolean` | `false` |
| `show-preset` | Show preset colors | `boolean` | `false` |
| `disabled` | Disable interaction | `boolean` | `false` |
| `disabled-alpha` | Disable alpha | `boolean` | `false` |
| `color-picker-props` | Forwarded to ColorPicker | `object` | `{}` |
### Form field presentation and confirmation
This component supports `edit-mode` with field > FormItem > Form precedence. When unset, it defaults to `direct` and preserves `direct` editing. Supported values: `direct / click / dblclick`. Non-`direct` modes open the editor through the field value trigger and keep one draft; v-model updates only after confirmation. Cancel, reset or enabling readPretty discards the draft.
Cedar uses edit-mode="click" / "dblclick" to open an editor popup near the field. Enter/F2 also opens it; cancel/Escape discards the draft, and confirmation commits it. readPretty is an independent reading setting, separate from readonly and disabled.
`before-commit(value, { previousValue, signal })` can reject an overlay save. FormItem validates the candidate first and keeps the editor open on failure. `open / default-open / update:open` control the editor. Use `#read="{ value, text }"` to customize display. See the full field comparison in Form.
`read-pretty` is an independent boolean alongside `readonly` and `disabled`. It inherits from field to FormItem to Form; explicit `false` overrides the parent. The default is `false`. Reading mode renders no editor.
Dragging uses the control owner view. KeepAlive deactivation or unmount ends the gesture and releases its listeners; a new activation requires a new gesture, and callbacks from old gestures cannot change its value.
---
Document: llms/en-US/components/config-provider.md
# Config Provider
Start with the basic example, then compare related settings before moving to controlled, asynchronous or combined use cases.
## Basic examples
### Basic usage
- `size`: ComponentSize
Example source: src/config-provider/__demos__/basic.vue
```vue
切换尺寸
继承尺寸
当前尺寸:{{ large ? 'lg' : 'sm' }}
```
## API
### ConfigProvider Props
| Prop | Description | Type | Default |
| ---- | -------- | ------ | ------ |
| dir | Reading direction; inherits the source scope when omitted. Physical left/right placements keep their meaning. | `ReadingDirection` (`ltr` / `rtl`) | — |
| type | Argument type | string | - |
### ConfigProvider Events
| Event | Description | Arguments |
| ------ | -------------- | ----------------------------- |
| click | Click event | `(event: MouseEvent) => void` |
### ConfigProvider Slots
| Slot | Description |
| ------- | -------------- |
| default | Custom default content |
## Type definitions
The component exports the following types
```ts
import type { ConfigProviderProps } from '@cedar-design/ui'
```
## Reading direction
Use `` to scope right-to-left layout. Omit `dir` to inherit, or nest `dir="ltr"` for a local override. Native DOM `dir` containers work too. The provider renders a `display: contents` div to carry direction to ordinary descendants without adding a layout box; place it in an HTML context that permits a div. It does not change the document direction. The former boolean `rtl` option is replaced by `dir` before release. Physical left/right placements retain their meaning.
---
Document: llms/en-US/components/count-to.md
# Count To
Start with the basic example, then compare related settings before moving to controlled, asynchronous or combined use cases.
## Basic examples
### Basic usage
Preview configuration: `:to="123456"`.
Example source: src/count-to/__demos__/basic.vue
```vue
```
## Content and presentation
### Precision, duration and easing
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `to` | Target value | Precision, duration and easing |
| `precision` | Decimal precision | Precision, duration and easing |
| `duration` | Animation duration in milliseconds | Precision, duration and easing |
| `timing-function` | Animation easing function | Precision, duration and easing |
Compare final precision and the effect of duration and easing on number transitions. Manual playback remains separate.
Example source: src/count-to/__demos__/number-format-comparison.vue
```vue
```
## Customization and slots
### Custom
Preview configuration: `:to="123456"`.
Example source: src/count-to/__demos__/custom.vue
```vue
{{ value.toLocaleString() }}
```
## Interaction and control
### Manual
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `to` | Target value | Manual |
| `auto-start` | Whether to start animation automatically | Manual |
Preview configuration: `:to="123456"`, `:auto-start="false"`.
Example source: src/count-to/__demos__/manual.vue
```vue
开始
暂停
重置
```
## API
### CountTo Props
| Prop | Description | Type | Default |
| ----------------- | ------------------------ | ------------------------ | -------- |
| from | Start value | _number \| string_ | `0` |
| to | Target value | _number \| string_ | `0` |
| duration | Animation duration in milliseconds | _number \| string_ | `2000` |
| precision | Decimal precision | _number \| string_ | `0` |
| auto-start | Whether to start animation automatically | _boolean_ | `true` |
| timing-function | Animation easing function | _(v: number) => number_ | `-` |
### CountTo Events
| Event | Description | Callback arguments |
| ------ | -------------- | -------- |
| end | Triggered when animation ends | `-` |
### CountTo Slots
| Slot | Description | Arguments |
| ------- | ---------- | ----------------- |
| default | Custom content | `value: number` |
### CountTo Methods
| Method | Description | Arguments | Returns |
| ------ | ---------------------------------------------------------------- | ---- | ------ |
| start | Start the animation | `-` | `-` |
| pause | Pause the animation | `-` | `-` |
| reset | Reset the animation; when `auto-start` is `true`, playback starts automatically after reset | `-` | `-` |
## Type definitions
The component exports the following types
```ts
import type { CountToProps, CountToInstance } from '@cedar-design/ui'
```
### Style variables
| Variable | Default |
| ----------------------------- | -------------------------- |
| `--c-count-to-text-color` | `var(--c-sys-color-content-primary)` |
| `--c-count-to-text-font-size` | `var(--c-font-size-lg)` |
## Shared implementation and platform boundaries
Each platform maintains a complete local implementation. They do not import a common core or share component instances or reactive state. Changes must update both implementations. Component bodies, props, key styles and paired tests have read-only source consistency checks; theme tokens and installation entries remain local to each library.
Animation pauses on unmount and KeepAlive deactivation and resumes on reactivation. Each instance keeps independent values and animation state.
---
Document: llms/en-US/components/countdown.md
# Countdown
Start with the basic example, then compare related settings before moving to controlled, asynchronous or combined use cases.
## Basic examples
### Basic usage
Preview configuration: `:time="2 * 60 * 60 * 1000"`.
Example source: src/countdown/__demos__/basic.vue
```vue
```
## Content and presentation
### Time format and custom content
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `time` | Countdown duration in milliseconds | Time format and custom content, Statistic |
| `format` | Display format | Time format and custom content, Statistic |
Compare unit formats, milliseconds and custom time fragments, independently of playback controls.
Example source: src/countdown/__demos__/format-comparison.vue
```vue
自定义样式 custom
{{ hours }}
:
{{ minutes }}
:
{{ seconds }}
```
### Statistic
- `format`: Controls the displayed format.
Example source: src/countdown/__demos__/statistic.vue
```vue
```
## Interaction and control
### Manual
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `time` | Countdown duration in milliseconds | Manual |
| `auto-start` | Whether to auto start count down | Manual |
| `format` | Display format | Manual |
- `format`: Controls the displayed format.
Example source: src/countdown/__demos__/manual.vue
```vue
开始
暂停
重置
```
## API
### Countdown Props
| Prop | Description | Type | Default |
| ------------- | ------------------------------------------ | -------------------- | ------------ |
| `time` | Countdown duration in milliseconds | `number \| string` | `0` |
| `format` | Display format | `string` | `'HH:mm:ss'` |
| `auto-start` | Whether to auto start count down | `boolean` | `true` |
### format placeholders
| Format | Description |
| ----- | ------------- |
| `DD` | Day |
| `HH` | Hour |
| `mm` | Minute |
| `ss` | Seconds |
| `S` | Milliseconds: 1 digit |
| `SS` | Milliseconds: 2 digits |
| `SSS` | Milliseconds: 3 digits |
### Countdown Events
| Event | Description | Arguments |
| -------- | ---------------- | --------------------- |
| `change` | Emitted after countdown changed | `timeData: TimeData` |
| `end` | Emitted after countdown ended | `-` |
### Countdown Slots
| Slot | Description | Arguments |
| --------- | ---------- | --------------------- |
| `default` | Custom content | `timeData: TimeData` |
### TimeData
| Name | Description | Type |
| -------------- | -------- | -------- |
| `days` | Remain days | `number` |
| `hours` | Remain hours | `number` |
| `minutes` | Remain minutes | `number` |
| `seconds` | Remaining seconds | `number` |
| `milliseconds` | Remain milliseconds | `number` |
### Countdown Methods
| Method | Description | Arguments | Returns |
| ------- | ----------------------------------------------------------------- | ---- | ------ |
| `start` | Start countdown | `-` | `-` |
| `pause` | Pause countdown | `-` | `-` |
| `reset` | Reset the countdown; when `auto-start` is `true`, it starts automatically after reset | `-` | `-` |
## Type definitions
The component exports the following types
```ts
import type { CountdownProps, CountdownInstance, TimeData } from '@cedar-design/ui'
```
### Style variables
| Variable | Default |
| ------------------------------- | -------------------------- |
| `--c-countdown-text-color` | `var(--c-sys-color-content-primary)` |
| `--c-countdown-text-font-size` | `var(--c-font-size-lg)` |
## Shared implementation and platform boundaries
Each platform maintains a complete local implementation. They do not import a common core or share component instances or reactive state. Changes must update both implementations. Component bodies, props, key styles and paired tests have read-only source consistency checks; theme tokens and installation entries remain local to each library.
SSR renders the initial formatted time. Changing format while paused updates the display. The finish event fires once per round; reset starts another round. Unmounting cleans up animation frames.
---
Document: llms/en-US/components/date-picker.md
# Date Picker
Start with the basic example, then compare related settings before moving to controlled, asynchronous or combined use cases.
## Basic examples
### Basic usage
- `default-value`: Default value
Example source: src/date/picker/__demos__/basic.vue
```vue
```
## Date views and presentation
### Mode
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `type` | Panel type | Mode, Month Labels, Locale Isolation |
| `disable-confirm` | Commit immediately | Month Labels, Responsive Panels |
| `day-start-of-week` | First weekday, calendar only; integer 0–6 | Locale Isolation |
| `show-time` | Include time selection | Responsive Panels |
Preview configuration: `type="week"`, `type="month"`, `type="year"`, `type="quarter"`.
Example source: src/date/picker/__demos__/mode.vue
```vue
```
### Month Labels
- `picker-value`: The date displayed in the default panel
- `abbreviation`: Whether to enable abbreviation
Example source: src/date/picker/__demos__/month-labels.vue
```vue
月份缩写
```
### Locale Isolation
- `picker-value`: The date displayed in the default panel
- `day-start-of-week`: The first day of the week starts on the day of the week, 0-Sunday, 1-Monday, and so on.
Example source: src/date/picker/__demos__/locale-isolation.vue
```vue
两个实例独立管理周起始日。可切换顶部语言,模型不随展示语言改变。
第二个实例周一起始(关闭为周二)
月份名称模型(稳定英文协议):{{ monthModel }}
```
### Responsive Panels
- `show-time`: Whether to increase time selection
- `shortcuts`: Quick selection of preset time range
- `shortcuts-position`: The position of the preset range on the panel, which is placed at the bottom by default, and the side is generally used for scenes with a large number of preset times
Example source: src/date/picker/__demos__/responsive-panels.vue
```vue
{{ type }} · DatePicker / DateRangePicker
{{ selected }}
{{ selectedRange }}
```
## Time and selection rules
### Show Time
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `show-time` | Include time selection | Show Time, Disabled Parts, Time Presentation |
| `format` | Display format | Show Time, Time Presentation |
| `value-format` | Model and event value format: a date format string, Date, or timestamp | Current Range, Time Presentation |
| `default-value` | Uncontrolled initial value, read once | Show Time |
| `disabled-date` | Return true to disable a date | Disabled Parts |
| `disabled-time` | Disabled times for the current date and endpoint | Disabled Parts |
- `show-time`: Whether to increase time selection
- `default-value`: Default value
- `format`: Display the format of the date, refer to [String Parsing Format](#string-parsing-format)
Example source: src/date/picker/__demos__/show-time.vue
```vue
```
### Disabled Parts
- `disabled-date`: Unselectable date
- `show-time`: Whether to increase time selection
- `disabled-time`: Unselectable time
Example source: src/date/picker/__demos__/disabled-parts.vue
```vue
```
### Current Range
- `value-format`: The format of the value, valid for `value` `defaultValue` `pickerValue` `defaultPickerValue` and the return value in the event, supports setting as timestamp, Date and string (refer to [String parsing format](#string-parsing-format) ). If not specified, it will be formatted as a string, in the same format as `format`.
- `default-picker-value`: Date displayed on the panel
- `show-now-button`: Whether to display the now button when showTime
Example source: src/date/picker/__demos__/current-range.vue
```vue
今日高亮和选择当前是两个独立功能。
今日高亮
选择当前按钮
确认后选中:{{ selected }}
日期反序时连同时间交换
先选较晚日期,再选较早日期,对比起止时间。
确认后范围:{{ range }}
```
### Time Presentation
- `model-value`: Value
- `show-time`: Whether to increase time selection
- `format`: Display the format of the date, refer to [String Parsing Format](#string-parsing-format)
- `value-format`: The format of the value, valid for `value` `defaultValue` `pickerValue` `defaultPickerValue` and the return value in the event, supports setting as timestamp, Date and string (refer to [String parsing format](#string-parsing-format) ). If not specified, it will be formatted as a string, in the same format as `format`.
Example source: src/date/picker/__demos__/time-presentation.vue
```vue
十二小时展示
```
## Shortcuts and customization
### Short Cuts
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `disable-confirm` | Commit immediately | Panel Tools, Entry Boundary |
| `show-time` | Include time selection | Short Cuts |
| `day-start-of-week` | First weekday, calendar only; integer 0–6 | Entry Boundary |
- `shortcuts`: Quick selection of preset time range
- `show-time`: Whether to increase time selection
Example source: src/date/picker/__demos__/short-cuts.vue
```vue
```
### Footer
Preview configuration: `showTime`.
Example source: src/date/picker/__demos__/footer.vue
```vue
Extra footer
Extra footer
```
### Panel Tools
- `picker-value`: The date displayed in the default panel
- `shortcuts`: Quick selection of preset time range
Example source: src/date/picker/__demos__/panel-tools.vue
```vue
选择值:{{ selected }};视口:{{ viewport }}
接受视口导航
范围快捷项走同一套确认与校验。
```
### Entry Boundary
- `min`: Sets the lower bound.
- `max`: Sets the upper bound.
- `day-start-of-week`: The first day of the week starts on the day of the week, 0-Sunday, 1-Monday, and so on.
Example source: src/date/picker/__demos__/entry-boundary.vue
```vue
仅允许选择 2025 年 2 月;移除限制不会改变已有选中值。
{{
limited ? "移除日期限制" : "恢复日期限制"
}}
周日起始
周一起始
周六起始
字段:管理输入与浮层;面板参数放在 date-picker-props。
纯面板:直接嵌入页面,不使用 open / popup-container。
已提交:{{ panelValue }}
```
## Reading direction
Inherits the nearest `dir="ltr|rtl"`, including runtime changes and local overrides. Calendar dates, months and years follow reading order; navigation icons mirror, while date values keep their meaning. In paged grids, Left/Right moves focus visually, Up/Down moves one row, and Home/End moves to the row boundary, skipping disabled items. Focus navigation does not select; Enter/Space keeps the existing selection behavior. Navigation is bounded by the displayed grid. Explicit `shortcuts-position="left|right"` remains physical; `bottom` stays below. Field popovers inherit their source direction.
## API
### Props
Pure panels do not accept field/popup props such as open/default-open, popup-container, placement, trigger-props, placeholder, variant or clearable. Configure popups through Date/DateRange popup-props, and typing through input-editable. disable-confirm alone controls confirmation tools; show-confirm-btn is removed.
| Arguments | Description | Type | Default |
| ------------------- | ------------------------------- | ------------------------------------------ | ------- |
| `model-value` | Bound value | `Date \| string \| number` | `-` |
| `type` | Panel type | `date \| week \| month \| year \| quarter` | `date` |
| `format` | Display format | `string \| Function` | `-` |
| `day-start-of-week` | First weekday, calendar only; integer 0–6 | `DateWeekStart` | `0` |
| `readonly` | Readonly; does not change selection | `boolean` | `false` |
| `time-picker-props` | Local time-panel display options | `Partial` | `-` |
| `show-time` | Include time selection | `boolean` | `false` |
| `disabled` | Disable interaction | `boolean` | `false` |
| `disabled-date` | Return true to disable a date | `Function` | `-` |
Desktop calendar capabilities, including shortcuts, footer and cell slots, remain in a separate presentation implementation.
### Shared date-family contract
| Arguments | Description | Type | Default |
| ----------------- | ------------------------------------------------------- | ------------------------------------------------ | ------- |
| `default-value` | Uncontrolled initial value, read once | DateValue / DateValue[] | — |
| `value-format` | Model and event value format: a date format string, Date, or timestamp | string | Follows type |
| `min` / `max` | Inclusive bounds; string bounds use value-format | DateValue | — |
| `disabled-time` | Disabled times for the current date and endpoint | (date: Date, side: DateSide) => DateDisabledTime | — |
| `disable-confirm` | Commit immediately | boolean | true |
`DateValue = Date | string | number`. Clearing a single value produces undefined; clearing a range produces [].
The date argument of `disabledDate(date, side)` and `disabledTime(date, side)` is always a Date; side is start/end.
Time callbacks return numeric lists from `disabledHours()`, `disabledMinutes(hour)` and `disabledSeconds(hour, minute)`.
Invalid dates and incomplete/reversed ranges cannot be committed. Confirmation revalidates dynamic disabling rules. Locked range endpoints cannot be cleared or changed.
Nested panel props configure presentation only; they must not override top-level model-value, format, bounds, disabling rules or control events.
### Events
| Event | Description | Arguments |
| -------------------- | ----------------------- | --------------------------------- |
| `update:model-value` | Request a model update | value |
| `select` | Select a draft; does not imply submission | value, date(s), formatted text(s) |
| `change` | Committed value changes | value, date(s), formatted text(s) |
| `confirm` | Confirm valid selection; does not use ok | value, date(s), formatted text(s) |
Set `:disable-confirm="false"` to show confirmation tools. The `actions` slot provides `{ confirm, disabled }`; custom `actions` must still call confirm to validate.
---
Document: llms/en-US/components/date-range.md
# DateRange
A date range field. The bound model is an array; use DateRangePicker for a standalone panel.
## String range models
Set format="MM-DD" and value-format="MM-DD" to get ['09-10', '10-10'] directly. These values have no year; parsing uses the current year and cannot preserve cross-year ordering. For real bookings store YYYY-MM-DD and map the payload in application code. format only changes display, while value-format changes the model and events.
Without time-zone the browser-local time zone remains in effect. An explicit IANA time zone changes the civil-time interpretation of strings; Date/timestamp values preserve their instant. Editing one endpoint does not change an untouched endpoint's repeated-hour occurrence or milliseconds.
## Basic examples
### Basic
Example source: src/date-range/__demos__/basic.vue
```vue
```
### Interaction state comparison
Toggle disabled, read-only and error states, then interact with the same instance. Recovery controls remain outside the target; error appearance alone does not validate data.
Configuration details and limits
#### State Lab
## Appearance and date presentation
### Appearance configuration comparison
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| -------------- | ---------------------------------------------------------------------- | ----------------------------------- |
| `clearable` | Show the clear action | Mode, Separator |
| `value-format` | Model and event value format: a date format string, Date, or timestamp | Appearance configuration comparison |
| `type` | Mode | Mode |
| `separator` | Range separator | Separator |
| `placeholder` | Placeholder | Separator |
Choose a dimension to compare all its values side by side while keeping other settings and content identical. Change the other settings to inspect combinations; input specimens share one model.
Example source: src/date-range/__demos__/appearance-lab.vue
```vue
选择一个对比维度;其他配置和内容保持一致。输入类示例共享同一个值,便于比较外观。 Compare one dimension while keeping the other settings and content identical. Input specimens share the same value.
{{ demoCompareAxis }}={{ sample }}
```
### Mode
Example source: src/date-range/__demos__/mode.vue
```vue
```
### Separator
Example source: src/date-range/__demos__/separator.vue
```vue
```
## Time and range rules
### Show Time
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --------------- | ---------------------------------------------------------------------- | --------------------- |
| `format` | Display format | Show Time, Boundaries |
| `show-time` | Include time selection | Show Time |
| `clearable` | Show the clear action | Show Time |
| `value-format` | Model and event value format: a date format string, Date, or timestamp | Boundaries |
| `disabled-date` | Return true to disable a date | Boundaries |
Example source: src/date-range/__demos__/show-time.vue
```vue
{{ JSON.stringify(range) ?? 'undefined' }}
```
### Boundaries
Example source: src/date-range/__demos__/boundaries.vue
```vue
仅可选九月,结束日期不能是周日。请选齐两个端点;确认提交,Escape 取消草稿。
{{ value }}
```
## Value model and text input
### String Values
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| -------------- | ---------------------------------------------------------------------- | ------------------------- |
| `format` | Display format | String Values, Text Entry |
| `value-format` | Model and event value format: a date format string, Date, or timestamp | String Values |
| `disabled` | Disable interaction | Text Entry |
Example source: src/date-range/__demos__/en-US/string-values.vue
```vue
String: {{ JSON.stringify(date) }}
Month string: {{ JSON.stringify(month) }}
Month/day array: {{ JSON.stringify(range) }}
```
### Text Entry
Example source: src/date/picker/__demos__/text-entry.vue
```vue
输入 DD/MM/YYYY,Enter 或失焦提交;非法日期和范围外输入恢复模型显示。
模型:{{ value }}
仅面板选择:{{ panelOnly }}
起点锁定,终点不能早于起点:{{ range }}
```
## Interaction and field configuration
### Api Review
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| ------------------------- | ---------------------------------------------------------------------------- | ----------------------------------- |
| `open` | Controlled popup visibility | Rejected Close, Passthrough Options |
| `date-range-picker-props` | Panel presentation options | Field Panel Tools, Entry Boundary |
| `value-format` | Model and event value format: a date format string, Date, or timestamp | Api Review |
| `readonly` | Read-only interaction | Api Review |
| `format` | Display format | Field Panel Tools |
| `popup-props` | Trigger presentation options; cannot override owned visibility or date rules | Passthrough Options |
Example source: src/date-range/__demos__/state-lab.vue
```vue
readonly
error
```
### Rejected Close
Example source: src/date-range/__demos__/rejected-close.vue
```vue
关闭请求会被父级拒绝;修改起止日期后可再次确认,重复确认不应重复提交。
确认
允许关闭
值:{{ value.join(" ~ ") }};提交:{{ commits }};拒绝关闭:{{
closeRequests
}}
```
### Field Panel Tools
Example source: src/date-range/__demos__/field-panel-tools.vue
```vue
接受视口请求
选择模型:{{ selected }};受控视口:{{ viewport }}
视口通知:{{ notice }};快捷项通知:{{ shortcutNotice }}
导航不改变选择模型;拒绝视口请求后,日历仍显示原月份。快捷项先选择草稿,确认后提交。
```
### Entry Boundary
Example source: src/date-range/__demos__/entry-boundary.vue
```vue
仅允许选择 2025 年 2 月;移除限制不会改变已有选中值。
{{
limited ? "移除日期限制" : "恢复日期限制"
}}
范围面板:日历从周一开始,点击确认后才提交。
禁用20日结束(不改已提交值)
提交日期范围
已提交:{{ panelValue.join(" ~ ") }}
```
### Passthrough Options
Example source: src/date-range/__demos__/passthrough-options.vue
```vue
{{
open ? "关闭面板" : "打开面板"
}}
顶层 open:{{ open }};嵌套配置:向上展开并调整偏移。
```
### Props
| Arguments | Description | Type | Default |
| ------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------ | --------- |
| `open-trigger-target` | Pointer opening target: the whole field or only the suffix icon. Explicit keyboard opening and controlled open remain available. | `'field' \| 'icon'` | `'field'` |
| `model-value` | Bound value | `(Date \| string \| number)[]` | `-` |
| `type` | Date precision | `date \| week \| month \| year \| quarter` | `date` |
| `open` | Controlled popup visibility | `boolean` | `-` |
| `clearable` | Show the clear action | `boolean` | `true` |
| `disabled` | Disable interaction | `boolean \| boolean[]` | `-` |
| `readonly` | Read-only interaction | `boolean` | `false` |
| `size` | Component size | `xs \| sm \| md \| lg \| xl` | `-` |
| `variant` | Field appearance | `filled \| outline \| standard` | `filled` |
| `separator` | Range separator | `string` | `-` |
| `placeholder` | Placeholder | `string[]` | `-` |
| `disabled-date` | Return true to disable a date | `Function` | `-` |
| `format` | Display format | `string` | `-` |
| `show-time` | Include time selection | `boolean` | `false` |
| `date-range-picker-props` | Panel presentation options | `DateRangePickerOptions` | `{}` |
#### Copying and editing
With open-trigger-target="icon", use the input area to edit or copy and the suffix button to open. Existing text remains copyable when editing or search is disabled.
Example source: src/date-range/__demos__/open-trigger-target.en-US.vue
```vue
Allow editing / search
Disable editing to copy existing text. In icon mode, editing does not open
the panel.
```
### Shared field loading
`loading` displays the shared field indicator. `loading-mode` is `default` (indicator) or `line` (an indeterminate bottom line); it defaults to `default`. Rendering belongs to FieldDecorator. Loading does not implicitly disable editing or change readonly. Set those states separately.
## Reading direction
Range values remain `[start, end]` across direction changes; switching direction neither swaps endpoints nor commits drafts. Range ribbons and boundary corners follow reading order. Paged calendar grids use visual Left/Right focus movement and chronological rows. Maple endpoint editing and continuous range highlighting are separate presentations. Explicit shortcut positions `left/right` remain physical, and popovers inherit their source direction.
## API
### Empty values and reading placeholders
`empty-values` recognizes empty data; `empty-value` keeps existing clear output. `empty-text` defaults to `'-'` under `read-pretty`, with Field > FormItem > Form precedence and custom read slots first. With explicit empty-values, built-in required uses the policy; custom validators receive original data. See the [shared guide](llms/en-US/guide/empty-values.md).
| Prop | Type | Default and scope |
| ------------ | ------------------ | --------------------------------------------------------------------------- |
| empty-values | readonly unknown[] | Field > FormItem > Form > component-family default; replaces the whole list |
| empty-text | string | Field > FormItem > Form > '-'; explicit '' is valid |
These props belong to field presentation; pure panels do not gain reading mode. Form and FormItem provide inherited settings. The existing empty-value type and clear fallback remain component-specific.
### Props
| Arguments | Description | Type | Default |
| ------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------ | --------- |
| `open-trigger-target` | Pointer opening target: the whole field or only the suffix icon. Explicit keyboard opening and controlled open remain available. | `'field' \| 'icon'` | `'field'` |
| `model-value` | Bound value | `(Date \| string \| number)[]` | `-` |
| `type` | Date precision | `date \| week \| month \| year \| quarter` | `date` |
| `open` | Controlled popup visibility | `boolean` | `-` |
| `clearable` | Show the clear action | `boolean` | `true` |
| `disabled` | Disable interaction | `boolean \| boolean[]` | `-` |
| `readonly` | Read-only interaction | `boolean` | `false` |
| `size` | Size | `xs \| sm \| md \| lg \| xl` | `-` |
| `variant` | Field appearance | `filled \| outline \| standard` | `filled` |
| `separator` | Range separator | `string` | `-` |
| `placeholder` | Placeholder | `string[]` | `-` |
| `disabled-date` | Return true to disable a date | `Function` | `-` |
| `format` | Display format | `string` | `-` |
| `show-time` | Include time selection | `boolean` | `false` |
| `date-range-picker-props` | Panel presentation options | `DateRangePickerOptions` | `{}` |
### Shared date-family contract
| Arguments | Description | Type | Default |
| ----------------- | ----------------------------------------------------------------------------- | -------------------------------------------------- | ------------ |
| `default-value` | Uncontrolled initial value, read once | DateValue / DateValue[] | — |
| `value-format` | Model and event value format: a date format string, Date, or timestamp | string | Follows type |
| `min` / `max` | Inclusive bounds; string bounds use value-format | DateValue | — |
| `disabled-time` | Disabled times for the current date and endpoint | (date: Date, side: DateSide) => DateDisabledTime | — |
| `disable-confirm` | Commit immediately | boolean | false |
| `default-open` | Uncontrolled initial open state | boolean | false |
| `popup-props` | Trigger presentation options; cannot override owned visibility or date rules | object | {} |
| `popup-container` | Portal target; the top-level value wins, including false for inline rendering | string / HTMLElement / (() => HTMLElement) / false | — |
`DateValue = Date | string | number`. Clearing a single value produces undefined; clearing a range produces [].
The date argument of `disabledDate(date, side)` and `disabledTime(date, side)` is always a Date; side is start/end.
`disabled-date` restricts range endpoints. A range may cross disabled interior values; it is not scanned item by item or truncated automatically. This applies to dates, months and years. Interior disabled values remain gray. Changing pages preserves the selected start and clears hover preview; reverse selection is sorted chronologically.
Time callbacks return numeric lists from `disabledHours()`, `disabledMinutes(hour)` and `disabledSeconds(hour, minute)`.
Invalid dates and incomplete/reversed ranges cannot be committed. Confirmation revalidates dynamic disabling rules. Locked range endpoints cannot be cleared or changed.
Nested panel props configure presentation only; they must not override top-level model-value, format, bounds, disabling rules or control events.
### Events
| Event | Description | Arguments |
| ----------------------------- | ----------------------------------------- | --------------------------------- |
| `update:model-value` | Request a model update | value |
| `select` | Select a draft; does not imply submission | value, date(s), formatted text(s) |
| `change` | Committed value changes | value, date(s), formatted text(s) |
| `update:open` / `open-change` | Popup visibility changes | open: boolean |
| `clear` | Clear the selection | None |
| `focus` / `blur` | Focus enters or leaves the whole field | None |
| `click` | Click the field | event |
Desktop supports keyboard editing. The default panel edits a draft before confirmation; disable-confirm commits directly. Escape or closing discards the draft. focus(index = 0) focuses a start/end input, and blur() closes the popup.
## Configuring the cleared value
`empty-value` / `emptyValue` sets the model value produced by clearing. It accepts a value in the component model type or a zero-argument factory. Omission preserves the existing default; use `() => undefined` to distinguish omission from returning undefined. Arrays are shallow-copied on every clear; selected items that cannot be cleared remain. It does not redefine emptiness, alter Form reset defaults or treat 0/false as universally empty.
`empty-value` accepts explicit `null` (or `() => null`). Clearing publishes `null` unchanged; omitted values preserve the existing default. Editors render `null` as blank without converting ordinary empty-string input to `null`. In popup editing, clearing changes the draft; confirm commits it and cancel preserves the original model.
---
Document: llms/en-US/components/date.md
# Date
Floating date panels use the visual viewport height so the full calendar is visible when space permits. Short windows scroll content while keeping actions visible. Override `--c-date-picker-popover-max-height` to adjust the limit (default `100dvh - 32px`).
A date field with a trigger. Use DatePicker for a standalone panel.
## String models and time zones
format controls display; value-format controls the model and events. Use YYYY-MM-DD for a date string or YYYY-MM for a month string. MM-DD has no year and parsing uses the current year, so retain a full date for cross-year ordering or explicit leap-year rules.
Omitting time-zone preserves browser-local behavior. With an IANA time zone, Date and timestamps represent instants while strings represent local civil times in that zone. Invalid DST times are rejected; newly entered repeated times resolve to the first occurrence. Untouched Date/timestamp range endpoints preserve their exact instant and hidden precision. Maple-only scroll/line views do not change Cedar panel defaults.
## Basic examples
### Basic
Example source: src/date/__demos__/basic.vue
```vue
```
### Interaction state comparison
Toggle disabled, read-only and error states, then interact with the same instance. Recovery controls remain outside the target; error appearance alone does not validate data.
Configuration details and limits
#### State Lab
## Appearance and date presentation
### Appearance configuration comparison
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| -------------- | ---------------------------------------------------------------------- | ----------------------------------------------------- |
| `value-format` | Model and event value format: a date format string, Date, or timestamp | Appearance configuration comparison, Locale Isolation |
| `type` | Type | Type, Locale Isolation |
| `size` | Size | Control Sizes |
| `variant` | Field appearance | Control Sizes |
| `placeholder` | Placeholder | Control Sizes |
| `clearable` | Show the clear action | Type |
Choose a dimension to compare all its values side by side while keeping other settings and content identical. Change the other settings to inspect combinations; input specimens share one model.
Example source: src/date/__demos__/appearance-lab.vue
```vue
选择一个对比维度;其他配置和内容保持一致。输入类示例共享同一个值,便于比较外观。 Compare one dimension while keeping the other settings and content identical. Input specimens share the same value.
{{ demoCompareAxis }}={{ sample }}
```
### Control Sizes
Example source: src/field-decorator/__demos__/control-sizes.vue
```vue
{{
item
}}
{{
item
}}
Selected / Clearable / Multiple — 有值、可清空与多选不换行
Hover or focus truncated text; tap on touch screens /
悬停或聚焦省略正文查看全文;触屏点按查看,点外部关闭
Reset / 恢复选中值
Button · reference
Button
Select · multiple / nowrap
Cascader · multiple / nowrap
Select · long values / nowrap
Cascader · long values / nowrap
```
### Type
Example source: src/date/__demos__/type.vue
```vue
```
### Month Labels
Example source: src/date/picker/__demos__/month-labels.vue
```vue
月份缩写
```
### Locale Isolation
Example source: src/date/picker/__demos__/locale-isolation.vue
```vue
两个实例独立管理周起始日。可切换顶部语言,模型不随展示语言改变。
第二个实例周一起始(关闭为周二)
月份名称模型(稳定英文协议):{{ monthModel }}
```
## Time and selection rules
### Show Time
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| -------------- | ---------------------------------------------------------------------- | ---------------- |
| `show-time` | Include time selection | Show Time |
| `format` | Display format | Show Time |
| `value-format` | Model and event value format: a date format string, Date, or timestamp | Show Time |
| `clearable` | Show the clear action | Show Time |
Example source: src/date/__demos__/show-time.vue
```vue
分钟精度:显式设置显示格式和模型格式
已提交值:{{ minute || '未选择' }}
秒精度:Cedar 的日期时间默认格式
已提交值:{{ second || '未选择' }}
```
### Time Presentation
Example source: src/date/picker/__demos__/time-presentation.vue
```vue
十二小时展示
```
## Value model and text input
### Value Formats
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| ------------------- | ---------------------------------------------------------------------- | ---------------------------------------- |
| `format` | Display format | Value Formats, String Values, Text Entry |
| `value-format` | Model and event value format: a date format string, Date, or timestamp | Value Formats, String Values |
| `type` | Type | String Values, Period Text |
| `date-picker-props` | Panel presentation options | Period Text |
Example source: src/date/__demos__/value-formats.vue
```vue
时间戳模型:{{ timestamp }}
Date 对象模型:{{ objectValue }}
```
### String Values
Example source: src/date/__demos__/en-US/string-values.vue
```vue
String: {{ JSON.stringify(date) }}
Month string: {{ JSON.stringify(month) }}
Month/day array: {{ JSON.stringify(range) }}
```
### Period Text
Example source: src/date/picker/__demos__/period-text.vue
```vue
周一起始,中文可手输 2020-53周;切换英文后使用英文序数。提交为该周起始日。
周模型:{{ week }}
季度输入 2025-Q2,模型为季度首月:{{ quarter }}
周范围不自动交换手输端点:{{ range }}
```
### Text Entry
Example source: src/date/picker/__demos__/text-entry.vue
```vue
输入 DD/MM/YYYY,Enter 或失焦提交;非法日期和范围外输入恢复模型显示。
模型:{{ value }}
仅面板选择:{{ panelOnly }}
起点锁定,终点不能早于起点:{{ range }}
```
## Interaction and field configuration
### Api Review
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| ------------------- | ---------------------------------------------------------------------- | ----------------------------------- |
| `disabled` | Disable interaction | Api Review, Field Protocol |
| `open` | Controlled popup visibility | Rejected Close, Passthrough Options |
| `date-picker-props` | Panel presentation options | Field Panel Tools, Entry Boundary |
| `placeholder` | Placeholder | Field Protocol, Entry Boundary |
| `value-format` | Model and event value format: a date format string, Date, or timestamp | Api Review |
| `readonly` | Read-only interaction | Api Review |
Example source: src/date/__demos__/state-lab.vue
```vue
disabled
readonly
error
```
### Rejected Close
Example source: src/date/__demos__/rejected-close.vue
```vue
关闭请求会被父级拒绝;选择新日期后可再次确认,重复确认不应重复提交。
确认
允许关闭
值:{{ value }};提交:{{ commits }};拒绝关闭:{{ closeRequests }}
```
### Field Panel Tools
Example source: src/date/picker/__demos__/field-panel-tools.vue
```vue
接受视口请求
选择模型:{{ selected }};受控视口:{{ viewport }}
视口通知:{{ notice }};快捷项通知:{{ shortcutNotice }}
导航不改变选择模型;拒绝视口请求后,日历仍显示原月份。快捷项先选择草稿,确认后提交。
```
### Field Protocol
Example source: src/date/__demos__/field-protocol.vue
```vue
范围字段:点击右侧输入可从结束端选择;Tab 切换两端不提交,回车或离开整个字段再提交。
禁用字段
日期:{{ date || '未选择' }};日期范围:{{ dateRange }}
时间:{{ time || '未选择' }};时间范围:{{ timeRange }}
```
### Entry Boundary
Example source: src/date/picker/__demos__/entry-boundary.vue
```vue
仅允许选择 2025 年 2 月;移除限制不会改变已有选中值。
{{
limited ? "移除日期限制" : "恢复日期限制"
}}
周日起始
周一起始
周六起始
字段:管理输入与浮层;面板参数放在 date-picker-props。
纯面板:直接嵌入页面,不使用 open / popup-container。
已提交:{{ panelValue }}
```
### Passthrough Options
Example source: src/date/__demos__/passthrough-options.vue
```vue
{{
open ? "关闭面板" : "打开面板"
}}
顶层 open:{{ open }};嵌套配置:向上展开并调整偏移。
```
### Props
| Arguments | Description | Type | Default |
| --------------------- | -------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------ | --------------- |
| `open-trigger-target` | Pointer opening target: the whole field or only the suffix icon. Explicit keyboard opening and controlled open remain available. | `'field' \| 'icon'` | `'field'` |
| `model-value` | Bound value | `Date \| string \| number` | `-` |
| `type` | Date precision | `date \| week \| month \| year \| quarter` | `date` |
| `open` | Controlled popup visibility | `boolean` | `-` |
| `clearable` | Show the clear action | `boolean` | `true` |
| `disabled` | Disable interaction | `boolean` | `false` |
| `readonly` | Read-only interaction | `boolean` | `false` |
| `size` | Component size | `xs \| sm \| md \| lg \| xl` | `-` |
| `variant` | Field appearance | `filled \| outline \| standard` | `filled` |
| `placeholder` | Placeholder | `string` | `-` |
| `disabled-date` | Return true to disable a date | `Function` | `-` |
| `format` | Display format | `string \| Function` | Depends on type |
| `show-time` | Include time selection | `boolean` | `false` |
| `date-picker-props` | Panel presentation options | `DatePickerOptions` | `{}` |
#### Copying and editing
With open-trigger-target="icon", use the input area to edit or copy and the suffix button to open. Existing text remains copyable when editing or search is disabled.
Example source: src/date/__demos__/open-trigger-target.en-US.vue
```vue
Allow editing / search
Disable editing to copy existing text. In icon mode, editing does not open
the panel.
```
### Shared field loading
`loading` displays the shared field indicator. `loading-mode` is `default` (indicator) or `line` (an indeterminate bottom line); it defaults to `default`. Rendering belongs to FieldDecorator. Loading does not implicitly disable editing or change readonly. Set those states separately.
## Reading direction
Inherits the nearest `dir="ltr|rtl"`, including runtime changes and local overrides. Calendar dates, months and years follow reading order; navigation icons mirror, while date values keep their meaning. In paged grids, Left/Right moves focus visually, Up/Down moves one row, and Home/End moves to the row boundary, skipping disabled items. Focus navigation does not select; Enter/Space keeps the existing selection behavior. Navigation is bounded by the displayed grid. Explicit `shortcuts-position="left|right"` remains physical; `bottom` stays below. Field popovers inherit their source direction.
## API
### Empty values and reading placeholders
`empty-values` recognizes empty data; `empty-value` keeps existing clear output. `empty-text` defaults to `'-'` under `read-pretty`, with Field > FormItem > Form precedence and custom read slots first. With explicit empty-values, built-in required uses the policy; custom validators receive original data. See the [shared guide](llms/en-US/guide/empty-values.md).
| Prop | Type | Default and scope |
| ------------ | ------------------ | --------------------------------------------------------------------------- |
| empty-values | readonly unknown[] | Field > FormItem > Form > component-family default; replaces the whole list |
| empty-text | string | Field > FormItem > Form > '-'; explicit '' is valid |
These props belong to field presentation; pure panels do not gain reading mode. Form and FormItem provide inherited settings. The existing empty-value type and clear fallback remain component-specific.
### Props
| Arguments | Description | Type | Default |
| --------------------- | -------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------ | -------------- |
| `open-trigger-target` | Pointer opening target: the whole field or only the suffix icon. Explicit keyboard opening and controlled open remain available. | `'field' \| 'icon'` | `'field'` |
| `model-value` | Bound value | `Date \| string \| number` | `-` |
| `type` | Date precision | `date \| week \| month \| year \| quarter` | `date` |
| `open` | Controlled popup visibility | `boolean` | `-` |
| `clearable` | Show the clear action | `boolean` | `true` |
| `disabled` | Disable interaction | `boolean` | `false` |
| `readonly` | Read-only interaction | `boolean` | `false` |
| `size` | Size | `xs \| sm \| md \| lg \| xl` | `-` |
| `variant` | Field appearance | `filled \| outline \| standard` | `filled` |
| `placeholder` | Placeholder | `string` | `-` |
| `disabled-date` | Return true to disable a date | `Function` | `-` |
| `format` | Display format | `string \| Function` | Follows `type` |
| `show-time` | Include time selection | `boolean` | `false` |
| `date-picker-props` | Panel presentation options | `DatePickerOptions` | `{}` |
### Shared date-family contract
| Arguments | Description | Type | Default |
| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------- | ------------ |
| `default-value` | Uncontrolled initial value, read once | DateValue / DateValue[] | — |
| `value-format` | Model and event value format: a date format string, Date, or timestamp | string | Follows type |
| `min` / `max` | Inclusive bounds; string bounds use value-format | DateValue | — |
| `disabled-time` | Disabled times for the current date and endpoint | (date: Date, side: DateSide) => DateDisabledTime | — |
| `disable-confirm` | Commit immediately | boolean | false |
| `default-open` | Uncontrolled initial open state | boolean | false |
| `popup-props` | Optional field-popup presentation settings. Placement defaults to bottom-start and is positioned automatically by the underlying Trigger; the preferred side can be overridden. No top-level placement prop; field state and rules cannot be overridden | object | {} |
| `popup-container` | Portal target; the top-level value wins, including false for inline rendering | string / HTMLElement / (() => HTMLElement) / false | — |
`DateValue = Date | string | number`. Clearing a single value produces undefined; clearing a range produces [].
The date argument of `disabledDate(date, side)` and `disabledTime(date, side)` is always a Date; side is start/end.
Time callbacks return numeric lists from `disabledHours()`, `disabledMinutes(hour)` and `disabledSeconds(hour, minute)`.
Invalid dates and incomplete/reversed ranges cannot be committed. Confirmation revalidates dynamic disabling rules. Locked range endpoints cannot be cleared or changed.
Nested panel props configure presentation only; they must not override top-level model-value, format, bounds, disabling rules or control events.
### Events
| Event | Description | Arguments |
| ----------------------------- | ----------------------------------------- | --------------------------------- |
| `update:model-value` | Request a model update | value |
| `select` | Select a draft; does not imply submission | value, date(s), formatted text(s) |
| `change` | Committed value changes | value, date(s), formatted text(s) |
| `update:open` / `open-change` | Popup visibility changes | open: boolean |
| `clear` | Clear the selection | None |
| `focus` / `blur` | Focus enters or leaves the whole field | None |
| `click` | Click the field | event |
Desktop supports keyboard editing. The default panel edits a draft before confirmation; disable-confirm commits directly. Escape or closing discards the draft. focus(index = 0) focuses a start/end input, and blur() closes the popup.
## Explicit time zones
`timeZone` accepts IANA names such as `Asia/Shanghai`. Date objects and millisecond timestamps represent instants; strings represent local time in the target zone. Display, typed input, min/max, shortcuts and disabling rules use the same protocol; event Date objects retain the actual instant. Omitting `timeZone` preserves local-zone behavior. Nonexistent daylight-saving times and invalid zones cannot be committed; repeated times use the first occurrence. Maple scroll / line are mobile calendar presentations; desktop retains its existing panel.
## Configuring the cleared value
`empty-value` / `emptyValue` sets the model value produced by clearing. It accepts a value in the component model type or a zero-argument factory. Omission preserves the existing default; use `() => undefined` to distinguish omission from returning undefined. Arrays are shallow-copied on every clear; selected items that cannot be cleared remain. It does not redefine emptiness, alter Form reset defaults or treat 0/false as universally empty.
`empty-value` accepts explicit `null` (or `() => null`). Clearing publishes `null` unchanged; omitted values preserve the existing default. Editors render `null` as blank without converting ordinary empty-string input to `null`. In popup editing, clearing changes the draft; confirm commits it and cancel preserves the original model.
### Placement semantics and configuration
The Date field prefers bottom-start below its input. Override the preferred side through popupProps.placement only when needed; the underlying Trigger positions it, not Popup or Popover. DatePicker is a standalone date panel with no input anchor; placement in the legacy date/picker directory is not a current public DatePicker prop.
---
Document: llms/en-US/components/descriptions.md
# Descriptions
Start with the basic example, then compare related settings before moving to controlled, asynchronous or combined use cases.
## Basic examples
### Basic usage
- `data`: Supplies the example data.
Example source: src/descriptions/__demos__/basic.vue
```vue
{{ item.value }}
```
## Layout and arrangement
### Label Text Alignment
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `data` | Description-list data | Label Text Alignment, Layout Pattern |
| `title` | Description-list title | Label Text Alignment, Layout Pattern |
| `layout` | Description-list arrangement | Label Text Alignment, Layout Pattern |
| `align` | Text alignment | Label Text Alignment |
| `size` | Description-list size | Layout Pattern |
| `bordered` | Whether to show border | Layout Pattern |
- `data`: Supplies the example data.
- `align`: Controls alignment on the cross axis.
Example source: src/descriptions/__demos__/label-text-alignment.vue
```vue
```
### Layout Pattern
- `data`: Supplies the example data.
- `size`: Controls the component size.
Example source: src/descriptions/__demos__/layout-pattern.vue
```vue
xs
sm
md
lg
xl
```
## Content and presentation
### Singel Column Style
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `data` | Description-list data | Singel Column Style, Border Background List |
| `title` | Description-list title | Singel Column Style, Border Background List |
| `column` | Items per row. Responsive configuration is supported since 2.20.0; see Grid | Singel Column Style |
| `size` | Description-list size | Singel Column Style |
| `bordered` | Whether to show border | Border Background List |
- `data`: Supplies the example data.
- `size`: Controls the component size.
Example source: src/descriptions/__demos__/singel-column-style.vue
```vue
xs
sm
md
lg
xl
```
### Border Background List
- `data`: Supplies the example data.
Example source: src/descriptions/__demos__/border-background-list.vue
```vue
```
## Reading direction
Inherits the nearest `dir="ltr|rtl"` and supports runtime and nested overrides. Labels, values, borders and default text alignment follow logical reading edges. Direction changes do not reverse records, column definitions or span semantics.
## API
### `` Props
| Prop | Description | Type | Default |
| ------------ | ------------------------------------------------------------------ | :---------------------------------------------------------------------------------------: | :------------- |
| data | Description-list data | `DescData[]` | `[]` |
| column | Items per row. Responsive configuration is supported since 2.20.0; see Grid | `number \| ResponsiveValue` | `3` |
| title | Description-list title | `string` | `-` |
| layout | Description-list arrangement | `'horizontal' \| 'vertical' \| 'inline-horizontal' \| 'inline-vertical' \| 'inline-auto'` | `'horizontal'` |
| align | Text alignment | `TextAlign \| { label?: TextAlign; value?: TextAlign }` | `'left'` |
| size | Description-list size | `'xs' \| 'sm' \| 'md' \| 'lg' \| 'xl'` | `-` |
| bordered | Whether to show border | `boolean` | `false` |
| label-style | Label styles | `CSSProperties` | `-` |
| value-style | Content styles | `CSSProperties` | `-` |
| table-layout | Table-style `layout-fixed`; setting `fixed` distributes widths evenly | `'auto' \| 'fixed'` | `'auto'` |
| aria-label | Accessible description-list label | `string` | `-` |
### `` Slots
| Slot | Description | Arguments |
| ------ | :------: | ------------------------------------------------------ |
| value | Content | value: `string` index: `number` data: `DescData` |
| label | Label | label: `string` index: `number` data: `DescData` |
| title | Title | - |
### `` Props
| Prop | Description | Type | Default |
| ----- | -------- | :------: | :----- |
| span | Column span | `number` | `1` |
| label | Label | `string` | `-` |
### `` Slots
| Slot | Description | Arguments |
| ------- | :--: | ---- |
| default | Content | - |
| label | Label | - |
### DescData
| Parameter | Description | Type | Default |
| ------ | -------- | -------------------------- | :----: |
| label | Label | `string \| RenderFunction` | `-` |
| value | Data | `string \| RenderFunction` | `-` |
| span | Column span | `number` | `-` |
## Type definitions
The component exports the following types
```ts
import type { DescriptionsProps } from "@cedar-design/ui";
```
---
Document: llms/en-US/components/dialog.md
# Dialog
A modal dialog with matching declarative and programmatic APIs.
## Basic examples
### Basic
Example source: src/dialog/__demos__/basic.vue
```vue
Open Dialog
```
## Invocation and content
### Global
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `title` | Title | Confirm, Form, Simple |
| `type` | Status icon: `info`, `success`, `warning` or `error` | Confirm, Simple |
| `message` | Message content; the default slot is also supported | Confirm, Simple |
| `before-close` | Return a boolean/Promise or call done; the first completion wins | Form |
| `simple` | Compact layout with a centered footer | Simple |
Example source: src/dialog/__demos__/global.vue
```vue
Basic
Open
Open and Update
Await Action
Hide Footer Buttons
```
### Alert
Example source: src/dialog/__demos__/alert.vue
```vue
Alert
```
### Confirm
Example source: src/dialog/__demos__/confirm.vue
```vue
Confirm
Delete
Component Confirm
```
### Message
Example source: src/dialog/__demos__/message.vue
```vue
Info
Success
Warning
Error
```
### Form
Example source: src/dialog/__demos__/form.vue
```vue
Open Form Dialog
Post1
Post2
Post3
Post4
```
### Simple
Example source: src/dialog/__demos__/simple.vue
```vue
Open Simple Dialog
```
## Sizing and layout
### Dialog sizing and long content
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `title` | Title | No Padding, Max Height |
| `body-style` | Body style | No Padding, Max Height |
| `width` | Width | Dialog sizing and long content |
| `fullscreen` | Fullscreen layout | Dialog sizing and long content |
Open one dialog at a time to compare widths, fullscreen layouts and long-content boundaries.
Example source: src/dialog/__demos__/size-comparison.vue
```vue
对话框宽度 Width
Small Dialog
Medium Dialog
Large Dialog
Small Dialog
You can customize modal body text by the current situation. This modal will be closed immediately once you press
the OK button.
Medium Dialog
You can customize modal body text by the current situation. This modal will be closed immediately once you press
the OK button.
Large Dialog
You can customize modal body text by the current situation. This modal will be closed immediately once you press
the OK button.
全屏 Fullscreen
Open Dialog
Title
You can customize modal body text by the current situation. This modal will be closed immediately once you press
the OK button.
```
### No Padding
Example source: src/dialog/__demos__/no-padding.vue
```vue
Open Dialog
You can customize modal body text by the current situation. This modal
will be closed immediately once you press the OK button.
```
### Max Height
Example source: src/dialog/__demos__/max-height.vue
```vue
Open Long Content Dialog
{{ item }}. Long dialog content remains scrollable while the title and
actions stay visible.
```
## Interaction and customization
### Draggable
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `unmount-on-close` | Unmount after closing | Custom Text, Advanced |
| `draggable` | Draggable | Draggable |
| `confirm-button-text` | Confirm button text | Custom Text |
| `cancel-button-text` | Cancel button text | Custom Text |
| `footer` | Whether to show the footer | Advanced |
| `type` | Status icon: `info`, `success`, `warning` or `error` | Advanced |
Example source: src/dialog/__demos__/draggable.vue
```vue
Open Dialog
Title
You can customize modal body text by the current situation. This modal will be closed immediately once you press
the OK button.
```
### Custom Footer
Example source: src/dialog/__demos__/custom-footer.vue
```vue
Open Custom Footer Dialog
Custom Slots
Use the footer slot when the actions need different priorities or wording.
Later
Cancel
Continue
```
### Custom Text
Example source: src/dialog/__demos__/custom-text.vue
```vue
Open Dialog
Title
You can customize modal body text by the current situation. This modal will be closed immediately once you press
the OK button.
```
### Advanced
Example source: src/dialog/__demos__/advanced.vue
```vue
Hide Footer
Hide Title
Custom Body
Unmount on Close
This content is removed from the DOM after the close transition.
```
## Async actions and closing
### Async
#### Configuration reference for this comparison
| Configuration | Purpose | Related examples |
| --- | --- | --- |
| `before-close` | Return a boolean/Promise or call done; the first completion wins | Async, Guard Protocol |
| `title` | Title | Async |
| `message` | Message content; the default slot is also supported | Async |
Example source: src/dialog/__demos__/async.vue
```vue
Async Close
Button Loading
```
### Api Review
### Guard Protocol
Example source: src/dialog/__demos__/en-US/guard-protocol.vue
```vue
Open
Confirm action Close with beforeClose
{{ status }}
```
### `` Props
| Name | Description | Type | Default |
| ------------------------- | -------------------------------------------- | -------------------------------- | ------------ |
| dir | Reading direction; inherits the source scope when omitted. Physical left/right placements keep their meaning. | `ReadingDirection` (`ltr` / `rtl`) | — |
| `open` **(v-model)** | Visible state | `boolean` | `-` |
| `default-open` | Initial uncontrolled state | `boolean` | `false` |
| `title` | Title | `string` | `-` |
| `message` | Message content; the default slot is also supported | `string` | `-` |
| `message-align` | Message alignment | `'left' \| 'center' \| 'right'` | `'left'` |
| `type` | Status icon: info, success, warning or error | `string` | `-` |
| `simple` | Compact layout with a centered footer | `boolean` | `false` |
| `width` | Width | `number \| string` | `-` |
| `top` | Top offset; ignored when align-center is enabled | `number \| string` | `-` |
| `title-align` | Title alignment | `'start' \| 'center'` | `'center'` |
| `align-center` | Center vertically and horizontally | `boolean` | `true` |
| `overlay` | Show overlay | `boolean` | `true` |
| `overlay-class` | Overlay class | `string` | `-` |
| `overlay-style` | Overlay style | `CSSProperties` | `-` |
| `overlay-closable` | Request closure on an overlay click | `boolean` | `true` |
| `esc-to-close` | Request closure on Escape | `boolean` | `true` |
| `lock-scroll` | Lock background scrolling while open | `boolean` | `true` |
| `close-on-route-change` | Close on browser history or hash changes | `boolean` | `false` |
| `popup-container` | Teleport target; `false` disables teleport | `string \| HTMLElement \| false` | `'body'` |
| `confirm-button` | Show the confirm button | `boolean` | `true` |
| `cancel-button` | Show the cancel button | `boolean` | `true` |
| `closable` | Show close button | `boolean` | `true` |
| `confirm-button-text` | Confirm button text | `string` | `-` |
| `cancel-button-text` | Cancel button text | `string` | `-` |
| `confirm-button-loading` | Confirm button loading state | `boolean` | `false` |
| `cancel-button-loading` | Cancel button loading state | `boolean` | `false` |
| `confirm-button-disabled` | Disable the confirm button | `boolean` | `false` |
| `cancel-button-disabled` | Disable the cancel button | `boolean` | `false` |
| `confirm-button-props` | Confirm button props | `ButtonProps` | `-` |
| `cancel-button-props` | Cancel button props | `ButtonProps` | `-` |
| `footer` | Show the footer | `boolean` | `true` |
| `dialog-class` | Dialog class | `string \| any[]` | `-` |
| `dialog-style` | Dialog style | `CSSProperties` | `-` |
| `body-class` | Body class | `string \| any[]` | `-` |
| `body-style` | Body style | `StyleValue` | `-` |
| `hide-title` | Hide the title | `boolean` | `false` |
| `unmount-on-close` | Unmount after closing | `boolean` | `false` |
| `draggable` | Allow dragging | `boolean` | `false` |
| `fullscreen` | Fullscreen layout | `boolean` | `false` |
| `overlay-animation-name` | Overlay animation name | `string` | `fade-modal` |
| `dialog-animation-name` | Dialog animation name | `string` | `zoom-modal` |
| `z-index` | Stack level | `number` | `-` |
| `before-close` | Return a boolean/Promise or call done; the first completion wins | `DialogBeforeClose` | — |
### `` Events
| Event | Description | Arguments |
| ------------ | ------------- | --------------- |
| `open` | Opening begins | `-` |
| `opened` | Opening transition completes | `-` |
| `close` | Closing begins | `-` |
| `closed` | Closing transition completes | `-` |
| `confirm` | Accepted confirm action | `Event` |
| `cancel` | Accepted cancel or close action | `Event` |
| `click-overlay` | `MouseEvent` | `MouseEvent` |
| `key-escape` | ESC | `KeyboardEvent` |
### `` Slots
| Slot | Description | Arguments |
| --------- | ---- | ---------------------------- |
| `default` | Content | `-` |
| `title` | Title | `-` |
| `footer` | Footer | `cancel`, `confirm`, `close` |
### DialogConfig
| Name | Description | Type |
| ------------- | ---------------------------------- | -------------------------- |
| `content` | Renderable content; takes priority over message | `RenderContent` |
| `footer` | Footer visibility or custom footer content | `boolean \| RenderContent` |
| `onConfirm` | Confirm callback | `(e?: Event) => void` |
| `onCancel` | Cancel callback | `(e?: Event) => void` |
| `onClickOverlay` | Overlay click callback | `() => void` |
| `onKeyEscape` | Escape callback | `() => void` |
### DialogMethod
| Method | Description | Return value |
| ---------------------------------- | ------------------------------ | -------------------------------------- |
| `Dialog.open(config)` | Open a dialog | `Promise & DialogReturn` |
| `Dialog.confirm(config)` | Confirmation dialog; defaults to warning | Same as above |
| `Dialog.alert(config)` | Alert dialog without a cancel button | Same as above |
| `Dialog.info(config)` | Information dialog | Same as above |
| `Dialog.success(config)` | Success dialog | Same as above |
| `Dialog.warning(config)` | Warning dialog | Same as above |
| `Dialog.error(config)` | Error dialog | Same as above |
| `Dialog.close()` | Close the latest functional dialog | `void` |
| `Dialog.setDefaultOptions(config)` | Set default programmatic options | `void` |
| `Dialog.resetDefaultOptions()` | Reset default programmatic options | `void` |
### DialogReturn
| Prop | Description |
| ---------------- | -------- |
| `close()` | Close |
| `update(config)` | Update options |
### Reading direction
Inherits the nearest `dir="ltr|rtl"` and supports runtime and nested overrides. Content, headings and action gaps use logical edges. Portals inherit their source direction. Direction changes preserve close, confirm, cancel and pending-state semantics.
## API details
| Variable | Default |
| --- | --- |
| `--c-dialog-background` | `var(--c-sys-color-surface-raised)` |
| `--c-dialog-overlay-background` | `var(--c-sys-color-scrim)` |
| `--c-dialog-border-color` | `var(--c-sys-color-border-default)` |
| `--c-dialog-border-width` | `1px` |
| `--c-dialog-border-radius` | `var(--c-sys-radius-md)` |
| `--c-dialog-width` | `520px` |
| `--c-dialog-margin-top` | `100px` |
| `--c-dialog-title-text-color` | `var(--c-sys-color-content-primary)` |
| `--c-dialog-title-font-size` | `var(--c-sys-font-size-lg)` |
| `--c-dialog-title-font-weight` | `var(--c-sys-font-weight-medium)` |
| `--c-dialog-title-padding` | `0 var(--c-sys-space-8)` |
| `--c-dialog-title-min-height` | `48px` |
| `--c-dialog-title-justify` | `center` |
| `--c-dialog-content-text-color` | `var(--c-sys-color-content-primary)` |
| `--c-dialog-content-font-size` | `var(--c-sys-font-size-md)` |
| `--c-dialog-content-line-height` | `var(--c-line-height)` |
| `--c-dialog-content-padding` | `28px var(--c-sys-space-8)` |
| `--c-dialog-actions-padding` | `var(--c-sys-space-7) var(--c-sys-space-8)` |
| `--c-dialog-actions-button-gap` | `var(--c-sys-space-6)` |
| `--c-dialog-close-button-size` | `32px` |
| `--c-dialog-close-button-color` | `var(--c-sys-color-content-secondary)` |
| `--c-dialog-close-button-font-size` | `var(--c-sys-font-size-lg)` |
| `--c-dialog-close-button-inset-inline-end` | `var(--c-sys-space-7)` |
| `--c-dialog-status-icon-size` | `18px` |
| `--c-dialog-status-icon-gap` | `var(--c-sys-space-5)` |
| `--c-dialog-status-info-color` | `var(--c-sys-color-content-info)` |
| `--c-dialog-status-success-color` | `var(--c-sys-color-content-success)` |
| `--c-dialog-status-warning-color` | `var(--c-sys-color-content-warning)` |
| `--c-dialog-status-danger-color` | `var(--c-sys-color-content-danger)` |
| `--c-dialog-simple-width` | `400px` |
| `--c-dialog-simple-border-radius` | `var(--c-sys-radius-md)` |
| `--c-dialog-simple-padding` | `28px 32px 32px` |
| `--c-dialog-simple-content-gap` | `28px` |
| `--c-dialog-simple-actions-gap` | `32px` |
| `--c-dialog-fullscreen-width` | `100vw` |
| `--c-dialog-fullscreen-height` | `100vh` |
| `--c-dialog-animation-duration` | `var(--c-sys-motion-duration-slow)` |
| `--c-dialog-animation-easing` | `var(--c-sys-motion-easing-standard)` |
Promise and done share a single completion state: false/done(false) rejects; true/done() allows; a resolved Promise<void> allows. The first completion wins. Errors emit guard-error; cancellation/unmount invalidates late completion. Synchronous void retains the callback protocol and waits for done on these close/confirm guards.
Cancellable hooks use `(payload, done, context)`: closure payloads contain `{ action }`, change/commit payloads contain `{ value, previousValue }`, and Popup uses `{ reason }`. Context provides `signal` and an optional original `event`. Return a boolean/Promise, or call done()/done(false). Synchronous void waits for done; Promise<void> allows the operation. First completion wins. Pending state controls loading/disabled automatically. Cancellation invalidates stale results. Button refs are not exposed.
## API
### `` Props
| Parameter | Description | Type | Default |
| ------------------------- | -------------------------------------------- | -------------------------------- | ------------ |
| dir | Reading direction; inherits the source scope when omitted. Physical left/right placements keep their meaning. | `ReadingDirection` (`ltr` / `rtl`) | — |
| `open` **(v-model)** | Visible state | `boolean` | `-` |
| `default-open` | Initial uncontrolled state | `boolean` | `false` |
| `title` | Title | `string` | `-` |
| `message` | Message content; the default slot is also supported | `string` | `-` |
| `message-align` | Message alignment | `'left' \| 'center' \| 'right'` | `'left'` |
| `type` | Status icon: `info`, `success`, `warning` or `error` | `string` | `-` |
| `simple` | Compact layout with a centered footer | `boolean` | `false` |
| `width` | Width | `number \| string` | `-` |
| `top` | Top offset; ignored when `align-center` is enabled | `number \| string` | `-` |
| `title-align` | Title alignment | `'start' \| 'center'` | `'center'` |
| `align-center` | Center vertically and horizontally | `boolean` | `true` |
| `overlay` | Show overlay | `boolean` | `true` |
| `overlay-class` | Overlay class | `string` | `-` |
| `overlay-style` | Overlay style | `CSSProperties` | `-` |
| `overlay-closable` | Request closure on an overlay click | `boolean` | `true` |
| `esc-to-close` | Request closure on Escape | `boolean` | `true` |
| `lock-scroll` | Lock background scrolling while open | `boolean` | `true` |
| `close-on-route-change` | Close on browser history or hash changes | `boolean` | `false` |
| `popup-container` | Teleport target; `false` disables teleport | `string \| HTMLElement \| false` | `'body'` |
| `confirm-button` | Show the confirm button | `boolean` | `true` |
| `cancel-button` | Show the cancel button | `boolean` | `true` |
| `closable` | Show close button | `boolean` | `true` |
| `confirm-button-text` | Confirm button text | `string` | `-` |
| `cancel-button-text` | Cancel button text | `string` | `-` |
| `confirm-button-loading` | Confirm button loading state | `boolean` | `false` |
| `cancel-button-loading` | Cancel button loading state | `boolean` | `false` |
| `confirm-button-disabled` | Disable the confirm button | `boolean` | `false` |
| `cancel-button-disabled` | Disable the cancel button | `boolean` | `false` |
| `confirm-button-props` | Confirm button props | `ButtonProps` | `-` |
| `cancel-button-props` | Cancel button props | `ButtonProps` | `-` |
| `footer` | Whether to show the footer | `boolean` | `true` |
| `dialog-class` | Dialog class | `string \| any[]` | `-` |
| `dialog-style` | Dialog style | `CSSProperties` | `-` |
| `body-class` | Body class | `string \| any[]` | `-` |
| `body-style` | Body style | `StyleValue` | `-` |
| `hide-title` | Hide the title | `boolean` | `false` |
| `unmount-on-close` | Unmount after closing | `boolean` | `false` |
| `draggable` | Allow dragging | `boolean` | `false` |
| `fullscreen` | Fullscreen layout | `boolean` | `false` |
| `overlay-animation-name` | Overlay animation name | `string` | `fade-modal` |
| `dialog-animation-name` | Dialog animation name | `string` | `zoom-modal` |
| `z-index` | Stack level | `number` | `-` |
| `before-close` | Return a boolean/Promise or call done; the first completion wins | `DialogBeforeClose` | — |
### `` Events
| Event | Description | Arguments |
| ------------ | ------------- | --------------- |
| `open` | When opened | `-` |
| `opened` | Opening transition completes | `-` |
| `close` | Closing begins | `-` |
| `closed` | Closing transition completes | `-` |
| `confirm` | Accepted confirm action | `Event` |
| `cancel` | Accepted cancel or close action | `Event` |
| `click-overlay` | `MouseEvent` | `MouseEvent` |
| `key-escape` | ESC | `KeyboardEvent` |
The `close` button, overlay, ESC and `close()` use `close` semantics without an additional `cancel` event.
### `` Slots
| Slot | Description | Arguments |
| --------- | ---- | ---------------------------- |
| `default` | Content | `-` |
| `title` | Title | `-` |
| `footer` | Footer | `cancel`, `confirm`, `close` |
Confirm and cancel buttons use Button's `default` status and `text` variant unless `confirmButtonProps` or `cancelButtonProps` overrides them.
### Global methods
Function-based Dialog calls default to simple layout (`simple: true`) with the top-right close button hidden (`closable: false`). Explicit options or global defaults can override both.
#### DialogConfig
Accepts the component props in camelCase, plus:
| Parameter | Description | Type |
| ------------- | ---------------------------------- | -------------------------- |
| `content` | Renderable content; takes priority over `message` | `RenderContent` |
| `footer` | Whether to show a footer, or custom footer content | `boolean \| RenderContent` |
| `onConfirm` | Confirm callback | `(e?: Event) => void` |
| `onCancel` | Cancel callback | `(e?: Event) => void` |
| `onClickOverlay` | Overlay click callback | `() => void` |
| `onKeyEscape` | Escape callback | `() => void` |
#### DialogMethod
| Method | Description | Returns |
| ---------------------------------- | ------------------------------ | -------------------------------------- |
| `Dialog.open(config)` | Open a dialog | `Promise & DialogReturn` |
| `Dialog.confirm(config)` | Confirmation dialog; defaults to `type: warning` | As above |
| `Dialog.alert(config)` | Alert dialog without a cancel button | As above |
| `Dialog.info(config)` | Information dialog | As above |
| `Dialog.success(config)` | Success dialog | As above |
| `Dialog.warning(config)` | Warning dialog | As above |
| `Dialog.error(config)` | Error dialog | As above |
| `Dialog.close()` | Close the latest functional dialog | `void` |
| `Dialog.setDefaultOptions(config)` | Set default programmatic options | `void` |
| `Dialog.resetDefaultOptions()` | Reset default programmatic options | `void` |
#### DialogReturn
| Prop | Description |
| ---------------- | -------- |
| `close()` | Close |
| `update(config)` | Update options |
After installation, call through `app.config.globalProperties.$dialog`.
### Type definitions
```ts
import type {
DialogAction,
DialogConfig,
DialogMethod,
DialogReturn,
DialogService,
DialogType,
} from "@cedar-design/ui";
```
### Style variables
Dialog public color variables have the same meanings as Maple: `--c-dialog-background` is the raised panel background (`surface-raised`); `--c-dialog-overlay-background` is the scrim; `--c-dialog-title-text-color` and `--c-dialog-content-text-color` are primary content; `--c-dialog-close-button-color` is the secondary action. `--c-dialog-status-{info|success|warning|danger}-color` uses readable content-info/success/warning/danger, not status fills. Business themes should override these component variables; shared themes should override the corresponding system variables. Borders, widths, spacing and layout retain desktop specifications.
#### Complete variable defaults
The backdrop consumes `sys-color-scrim` through the Dialog component variable. Maple no longer uses Popup colors for Dialog. Set a per-instance backdrop variable via `overlay-style`; a variable on the panel (`dialog-style`) does not inherit to its sibling backdrop. Explicit `overlay-style.backgroundColor` wins. Teleported content needs variables on its actual DOM ancestors. Dark themes inherit the same semantic colors; geometry remains platform-specific. Status icons use readable content colors.
Variables are grouped by purpose: background/overlay-background for panel/scrim; border-* for panel/divider borders; title-* for title typography; content-* for body typography; actions-* for actions; close-button-* for the close button; status-* for semantic icons; simple-*/fullscreen-* for mode dimensions; animation-* for enter/leave motion. width/margin-top control ordinary panel layout. Internal drag/position variables are not public customization points.
| Variable | Default |
| --- | --- |
| `--c-dialog-background` | `var(--c-sys-color-surface-raised)` |
| `--c-dialog-overlay-background` | `var(--c-sys-color-scrim)` |
| `--c-dialog-border-color` | `var(--c-sys-color-border-default)` |
| `--c-dialog-border-width` | `1px` |
| `--c-dialog-border-radius` | `var(--c-sys-radius-md)` |
| `--c-dialog-width` | `520px` |
| `--c-dialog-margin-top` | `100px` |
| `--c-dialog-title-text-color` | `var(--c-sys-color-content-primary)` |
| `--c-dialog-title-font-size` | `var(--c-sys-font-size-lg)` |
| `--c-dialog-title-font-weight` | `var(--c-sys-font-weight-medium)` |
| `--c-dialog-title-padding` | `0 var(--c-sys-space-8)` |
| `--c-dialog-title-min-height` | `48px` |
| `--c-dialog-title-justify` | `center` |
| `--c-dialog-content-text-color` | `var(--c-sys-color-content-primary)` |
| `--c-dialog-content-font-size` | `var(--c-sys-font-size-md)` |
| `--c-dialog-content-line-height` | `var(--c-line-height)` |
| `--c-dialog-content-padding` | `28px var(--c-sys-space-8)` |
| `--c-dialog-actions-padding` | `var(--c-sys-space-7) var(--c-sys-space-8)` |
| `--c-dialog-actions-button-gap` | `var(--c-sys-space-6)` |
| `--c-dialog-close-button-size` | `32px` |
| `--c-dialog-close-button-color` | `var(--c-sys-color-content-secondary)` |
| `--c-dialog-close-button-font-size` | `var(--c-sys-font-size-lg)` |
| `--c-dialog-close-button-inset-inline-end` | `var(--c-sys-space-7)` |
| `--c-dialog-status-icon-size` | `18px` |
| `--c-dialog-status-icon-gap` | `var(--c-sys-space-5)` |
| `--c-dialog-status-info-color` | `var(--c-sys-color-content-info)` |
| `--c-dialog-status-success-color` | `var(--c-sys-color-content-success)` |
| `--c-dialog-status-warning-color` | `var(--c-sys-color-content-warning)` |
| `--c-dialog-status-danger-color` | `var(--c-sys-color-content-danger)` |
| `--c-dialog-simple-width` | `400px` |
| `--c-dialog-simple-border-radius` | `var(--c-sys-radius-md)` |
| `--c-dialog-simple-padding` | `28px 32px 32px` |
| `--c-dialog-simple-content-gap` | `28px` |
| `--c-dialog-simple-actions-gap` | `32px` |
| `--c-dialog-fullscreen-width` | `100vw` |
| `--c-dialog-fullscreen-height` | `100vh` |
| `--c-dialog-animation-duration` | `var(--c-sys-motion-duration-slow)` |
| `--c-dialog-animation-easing` | `var(--c-sys-motion-easing-standard)` |
### Before-hook waiting feedback
Before-hook waits show visible feedback and aria-busy. Rejected or failed operations recover; duplicate submissions do not start another copy. Notification event Promises never drive loading.
Service notification callbacks do not control task completion. The selected/closed result is settled independently of callback errors, and closing completion always releases the owned host. Callback errors still propagate through the calling/Vue error path; returned Promises do not control loading or closing.
---
Document: llms/en-US/components/divider.md
# Divider
Separate content sections in lists and layouts.
## Basic examples
### Basic Usage
Separate adjacent content sections.
Example source: src/divider/__demos__/basic.vue
```vue