# Apollo Design > Independent Vue 3 native UI library. Use Apollo's documented APIs, not assumptions from React or other UI libraries. UI version: 0.1.9 Source commit: b6578306f58bf0918d0f4cb8519cf4cf1a900b15 Import tokens before component CSS: `@apollo-design/theme/tokens.css`, then `@apollo-design/ui/style.css`. # 快速开始 UI version: 0.1.9 Source commit: b6578306f58bf0918d0f4cb8519cf4cf1a900b15 Page: https://apollocmh.github.io/apollo-design-ui/guide/getting-started Apollo Design 是独立发展的 **Vue 3 + TypeScript 原生组件库**,以公开 API、真实使用场景和一致的设计语言演进,提供静态 CSS 与 CSS 变量主题方案。 ### 环境要求 - Vue **3.5+**(Composition API) - TypeScript 5.x(推荐) - 现代浏览器(ES2022) ### 安装 ```bash npm install @apollo-design/ui @apollo-design/theme vue ``` 图标按需安装 `@apollo-design/icons`。使用 AI 编程助手时,可参考 [AI 接入](https://apollocmh.github.io/apollo-design-ui/guide/ai) 获取当前版本的 API 与示例。 ### 引入 ```ts import { createApp } from 'vue'; import App from './App.vue'; // ① 设计令牌(零运行时 CSS 变量,必须最先引入) import '@apollo-design/theme/tokens.css'; // ② 全量组件样式 import '@apollo-design/ui/style.css'; createApp(App).mount('#app'); ``` ```vue ``` ### 下一步 - [样式引入](https://apollocmh.github.io/apollo-design-ui/guide/styles) —— tokens.css 与组件样式的关系 - [按需使用](https://apollocmh.github.io/apollo-design-ui/guide/tree-shaking) —— ESM tree-shaking - [主题](https://apollocmh.github.io/apollo-design-ui/guide/theming) —— 亮暗切换与 token 定制 - [国际化](https://apollocmh.github.io/apollo-design-ui/guide/i18n) —— ConfigProvider 与内置语言包 --- # AI 接入 UI version: 0.1.9 Source commit: b6578306f58bf0918d0f4cb8519cf4cf1a900b15 Page: https://apollocmh.github.io/apollo-design-ui/guide/ai AI 编程助手需要先读取 Apollo Design 的文档,再生成代码。Apollo 是独立发展的 Vue 3 原生组件库,不能直接套用 React 或其他组件库的 API。 ### 把文档交给 AI - [llms.txt:文档索引](https://apollocmh.github.io/apollo-design-ui/llms.txt) - [llms-full.txt:完整中文文档与示例](https://apollocmh.github.io/apollo-design-ui/llms-full.txt) - [llms-full.en.txt:完整英文文档与示例](https://apollocmh.github.io/apollo-design-ui/llms-full.en.txt) - [Button 单组件 Markdown](https://apollocmh.github.io/apollo-design-ui/components/button.md) 每个组件都有 `components/.md` 和 `components/.en.md`,指南有 `guide/.md` 和 `guide/.en.md`。完整文件可能超过模型上下文,日常优先使用索引和单页。静态文件跟随文档站部署更新,开头标注 UI 版本与源码提交;使用旧版本项目时需核对版本。 可以把这段要求放进项目的 AI 指令文件: ```text 本项目使用 Apollo Design(Vue 3)。编码前核对已安装的 @apollo-design/ui 版本, 读取 https://apollocmh.github.io/apollo-design-ui/llms.txt 中对应组件的文档和示例。 Props、Slots、Emits、v-model 和导入方式以 Apollo 文档为准,不推测其他 UI 库的 API。 先引入 @apollo-design/theme/tokens.css,再引入 @apollo-design/ui/style.css。 缺少 API 信息时先查询;不要编造属性、事件或包名。 ``` 这些文件用于提供上下文。AI 客户端不一定自动发现或读取 `llms.txt`,需要在提示词或项目指令中明确提供链接。 ### 本地 MCP `@apollo-design/mcp` 提供 stdio MCP 服务,文档随包携带,查询时无需网络、账号、API Key 或在线服务器。通过 npm 分发,选择与项目 UI 相同的版本(当前为 `0.1.9`)。首次使用 `npx` 会下载包,后续查询直接读取随包文档。 ```bash npx -y @apollo-design/mcp@0.1.9 --project /absolute/path/your-vue-project ``` 在支持 MCP 的客户端中加入配置,替换项目绝对路径(不同客户端配置文件位置可能不同): ```json { "mcpServers": { "apollo-design": { "command": "npx", "args": [ "-y", "@apollo-design/mcp@0.1.9", "--project", "/absolute/path/your-vue-project" ] } } } ``` 需要 Node.js 22.12+。`--project` 指向已安装 `@apollo-design/ui` 的应用目录;服务启动时核对精确版本,不匹配或无法解析该包会报错。省略该参数可浏览随包文档,但会明确标记项目版本未验证。 四个只读工具:`search_components` 搜索组件和指南,`get_document` 获取 API 或指南,`list_examples` 列出示例,`get_example` 获取真实 Vue 源码及本地辅助文件。工具不执行示例、不修改项目;文档、源码、公开导入路径与网站使用同一条生成链路。 --- # 样式引入 UI version: 0.1.9 Source commit: b6578306f58bf0918d0f4cb8519cf4cf1a900b15 Page: https://apollocmh.github.io/apollo-design-ui/guide/styles Apollo Design 使用静态 CSS 与 CSS 变量。JS 导入不会自动安装样式;构建期 resolver、手工子路径和全量导入使用同一主题 API,主题选择与组件按需引入互不依赖。 | 资源 | 职责 | | --- | --- | | `@apollo-design/theme/presets/mono.css`(或 default/material3) | 可选的独立公共变量表,包含该风格的 light/dark/system 作用域;由公开派生 API 生成 | | `@apollo-design/ui/base.css` | 不选择主题的共享基础结构规则 | | `@apollo-design/ui//structure.css` | 单一组件结构规则;依赖资源按公开 style-manifest 顺序加载 | | `@apollo-design/ui//style.css` | 保留的自包含组件样式,包含内部实现依赖;不要与同组 structure.css 重复引入 | | `@apollo-design/ui/style.css` | 保留的全量组件样式 | | `@apollo-design/theme/tokens.css` | 保留的默认亮/暗/紧凑变量表;选择独立预设时不需要同时加载它 | ### 自动按需 以下结构资源与官方 resolver 要求 UI 0.1.8 或更高版本。 ```ts // vite.config.ts import { defineConfig } from 'vite'; import vue from '@vitejs/plugin-vue'; import Components from 'unplugin-vue-components/vite'; import { ApolloResolver } from '@apollo-design/ui-resolver'; export default defineConfig({ plugins: [vue(), Components({ resolvers: [ApolloResolver()] })], }); ``` ```vue ``` resolver 只从公开子路径导入组件 JS 与结构 CSS,不选择主题,也不引入全量 CSS。它按 `@apollo-design/ui/style-manifest.json` 导入共享基础、依赖与组件结构,重复路径由打包器去重;生成的组件声明需纳入项目 TypeScript 配置。保留已有全量/自包含 CSS 的应用应设 `ApolloResolver({ importStyle: false })`,避免同时引入重叠规则。 ### 手工子路径 同一个配置可以手工引入,无需 resolver: ```vue ``` Button 的最小结构依赖如上;复杂组件按公开 style-manifest 的完整 styles 列表加载,或使用原有 `ui//style.css` 自包含入口。用户插槽中的自选组件仍需自己的 CSS。AutoComplete 使用 Select 结构;TimePicker/TimeRangePicker 使用 DatePicker;Layout.Sider 具有独立的 layout-sider 样式入口。ConfigProvider 本身不需要组件样式。 ### 全量引入 ```vue ``` 结构入口的推荐顺序是公共变量 → 基础/组件结构 → 用户覆盖;旧聚合或自包含样式先加载,独立预设放在其后,避免旧默认规则覆盖选择。不要在已加载整套 CSS 后再补同组结构资源。应用只需加载自己使用的一个预设;文档站为了切换预览,显式加载全部三份,不作为普通应用的隐式兜底。 ### 作用域与动态配置 静态主题通过 `data-apollo-preset="default|mono|material3"` 与 `data-apollo-theme="light|dark|system"` 选择,system 在 CSS 中响应系统明暗。Provider 使用同一预设对象与 `mode` 派生当前作用域,用户全局 Token、组件 Token 与嵌套覆盖见[主题](https://apollocmh.github.io/apollo-design-ui/guide/theming)。运行时更新 CSS 变量不重挂组件,也不意味着懒加载组件。 ```html ``` 保留默认主题的旧用法仍可使用 `theme/tokens.css` → `ui/style.css`;compact/dark-compact 是该旧资源的密度作用域,不是新的风格预设。发布的组件 CSS 使用 `apollo` 前缀,自定义前缀需匹配的静态样式。站点的 `--site-*` 只引用公共主题 Token,没有独立配色表。 ### 默认链接样式 共享基础层为原生链接提供当前主题的颜色、装饰与可见键盘焦点;这些默认值不依赖是否使用 Select。可以用原生 `style` 或自己的 CSS 覆盖。 ### 原生表单控件 共享样式保留原生控件的浏览器前景、背景和禁用颜色。Apollo 组件使用各自的主题色;自行给原生控件设置颜色时,请同时配置背景。例如 `style="color: inherit; background: transparent"` 可让原生按钮使用父级颜色,避免暗色作用域中的浅色文字落在浏览器浅色背景上。 --- # 按需使用 UI version: 0.1.9 Source commit: b6578306f58bf0918d0f4cb8519cf4cf1a900b15 Page: https://apollocmh.github.io/apollo-design-ui/guide/tree-shaking Apollo Design 支持通过 `@apollo-design/ui-resolver` 自动按需引入,也支持手动导入。组件以 ESM 模块发布,打包器可以对未使用的导出做 tree-shaking;组件样式和主题变量按下面的方式加载。 ### 自动按需引入 使用 `@apollo-design/ui-resolver` 配合 `unplugin-vue-components`,可以根据 Vue 模板自动引入组件及其所需的结构样式。 #### 安装 ```bash npm install @apollo-design/ui @apollo-design/theme vue npm install -D @apollo-design/ui-resolver unplugin-vue-components ``` 当前 resolver 支持 UI `>=0.1.8 <0.2.0` 和 `unplugin-vue-components ^32.1.0`,建议 Apollo 包使用相同发布版本。以下配置适用于已安装 `vite` 和 `@vitejs/plugin-vue` 的 Vue 项目。 #### 配置 Vite ```ts // vite.config.ts import { defineConfig } from 'vite'; import vue from '@vitejs/plugin-vue'; import Components from 'unplugin-vue-components/vite'; import { ApolloResolver } from '@apollo-design/ui-resolver'; export default defineConfig({ plugins: [ vue(), Components({ resolvers: [ApolloResolver()], dts: 'src/components.d.ts', }), ], }); ``` 将生成的 `src/components.d.ts` 纳入应用的 TypeScript 配置,例如已有的 `include: ["src/**/*.ts", "src/**/*.vue"]` 会包含它。 #### 加载主题并使用组件 在应用入口加载默认主题变量: ```ts // main.ts import '@apollo-design/theme/tokens.css'; ``` 模板中使用 `A` 前缀组件,无需在 ` ``` 独立入口分别是 `@apollo-design/theme/presets/default`、`/mono`、`/material3`,具名导出为 `defaultPreset`、`monoPreset`、`material3Preset`,同时提供默认导出。根入口只导出类型与派生服务,不加载全部预设。自定义预设使用公开 `ThemePreset` 数据结构,无需向 resolver 注册。 `ThemeConfig.mode` 支持 `light | dark | system`。实时 Provider 在挂载后响应系统偏好并释放监听;纯函数 `getDesignToken(config, systemAppearance?)` 与 SSR 缺省按 light 派生,服务端已知偏好时可传第二个参数 `'dark'`。 ### 覆盖顺序与嵌套边界 派生顺序为:默认种子 → 预设公共 Token → 所选明暗方案 → 用户种子覆盖并派生 → 用户 Map/Alias 最终覆盖。组件 Token 在组件作用域覆盖相应默认值。局部显式 `algorithm` 优先于继承的 `mode`;局部显式 `mode` 优先于继承的 `algorithm`。因此演示局部暗色算法的 Demo 仍保留自己的意图。 `ConfigProvider` 默认继承父级原始主题配置,`theme.inherit: false` 重置继承。独立 `ThemeProvider` 保留原有默认重置语义;要合并父级,请显式设置 `theme.inherit: true`。两者都在原始配置层合并,避免把父级派生后的颜色当成下一层种子。并排 Provider、嵌套 Provider、所属 Portal 和通过 App/上下文 API 创建的 Message/Notification 保持各自主题边界。 ```vue ``` ### 静态资源与三种引入方式 JS、组件结构 CSS 与主题选择彼此独立。参见[样式引入](https://apollocmh.github.io/apollo-design-ui/guide/styles)中的自动按需、手工子路径、全量三种入口及加载顺序。Provider 会在已有组件作用域更新 CSS 变量,不重挂组件;静态 CSS 仍需显式引入。 也可使用可选 `@apollo-design/theme/presets/default.css`、`/mono.css`、`/material3.css`。每份由同一 `getDesignToken` 公开 API 生成,含 light/dark/system 选择器,不引用另一份预设。选择器示例: ```html ``` 自行覆盖原生 CSS 变量无需运行时,但种子变量的覆盖不会自动重算整套派生色阶;需要派生时使用 Provider 或 `getDesignToken`。同时设置前景与背景,避免暗色文字落在浅色背景上。 ### 文档站实时预览 Header 的主题面板分别提供默认/Mono/Material 与浅色/深色/跟随系统。选择保存在本机,换页和刷新保留,首屏先设置同一公开属性选择器再加载样式;SSR 保留确定的默认结构,挂载后接入客户端选择。站点 `--site-*` 只引用组件公开 Token,不维护第二套调色板。 内联 Demo 继承站点选择,但其局部 Provider 可覆盖。独立链接携带初始 `preset`、`theme`、`lang`。iframe 在客户端首次创建时携带当前选择,后续以验证 origin、source、frameId 的受控消息更新,不改写 src,不丢失输入、选择与展开状态。文档站为了提供三个可选风格显式加载三份预设 CSS;只用一个风格的应用只需加载自己的入口。 --- # 主题展示 UI version: 0.1.9 Source commit: b6578306f58bf0918d0f4cb8519cf4cf1a900b15 Page: https://apollocmh.github.io/apollo-design-ui/guide/themes ### 如何比较 上方以相同内容并排呈现 Default、Mono 和 Material,第一行为亮色,第二行为暗色。六个预览各有独立的主题作用域;切换站点外观时,预览仍保留标注的亮暗模式,便于比较色彩、圆角和控件状态。窄屏会按相同顺序折行,不必横向滚动整页。 可以直接修改名称、切换通知开关,或点击「继续」和「重置」观察进度。各个预览的状态互相独立,修改一处不会影响其他卡片。比较时也可使用 Tab 键依次访问控件,查看键盘焦点及禁用按钮的表现。 「重置」仅将进度恢复为 64;名称与通知开关保留各自的编辑状态,方便继续比较不同主题。 ### 选用与定制 Default 提供默认外观,Mono 呈现单色风格,Material 参考 [MUI Material UI](https://github.com/mui/material-ui) 的中性表面、克制圆角和层级阴影。品牌色在亮暗模式中均为 **#0073E6**;填充操作的悬停色加深,暗色文字与链接使用更明亮的颜色。保留 `material3Preset` / `material3` 的公开名称,已有导入路径与主题配置无需改名。应用接入、自定义品牌、明暗切换与嵌套作用域的具体配置,请阅读[主题使用与定制](https://apollocmh.github.io/apollo-design-ui/guide/theming);此页用于比较真实组件效果。 --- # 国际化 UI version: 0.1.9 Source commit: b6578306f58bf0918d0f4cb8519cf4cf1a900b15 Page: https://apollocmh.github.io/apollo-design-ui/guide/i18n 组件内置文案(空状态、分页、确认弹窗等)通过 `@apollo-design/locale` 提供: ```vue ``` - 内置几十种语言包(`zh_CN` / `en_US` / `ja_JP` / …),采用稳定的语言与地区标识。 - `useLocale('Table')` 等按组件名称读取本地文案和语言代码,返回两个响应式 computed ref。 - 切换 `locale` 引用即全局生效,无需重新挂载。 ### 本文档站 站点自身的界面文案(导航、工具栏、搜索提示等)是独立的一套词典,右上角切换中 / 英;组件文档在中英两份内容间切换,缺失英文译文时**明确回退到中文并给出提示**,不静默混排。 --- # 兼容性说明 UI version: 0.1.9 Source commit: b6578306f58bf0918d0f4cb8519cf4cf1a900b15 Page: https://apollocmh.github.io/apollo-design-ui/guide/compatibility ## 兼容对象 Apollo 对自身公开 API、文档化行为、类型、语义样式接口和实际用户负责。Ant Design 不是唯一规格,不绑定 Apollo 的发布版本,也不要求组件/API/Token/DOM 数量相同。默认保留已有合理行为与视觉。 ## 保留的边界 - 已有组件导出、props、事件 payload、`v-model` 名称、expose、令牌和样式入口默认保持兼容;开发阶段模板扩展 API 按 ADR 0006 直接迁移;为保留 React 回调/DOM 形态而妨碍 Vue 公共用法的行为按 ADR 0007 直接修正。 - 根节点使用 Vue `class` / `style`;先前已经完成的根别名迁移不回滚。非根 `classNames.*` / `styles.*` 和现存 deprecated alias 保留各组件已文档化行为。 - 同名 ConfigProvider 配置字段、数据项字段和组件 attrs 不等同,不因名称类似 React 而删除。 - 现有 VNode 数据和命令式服务按职责保留。组件顶层内容渲染函数 prop 直接替换为具名/作用域插槽,不保留函数兼容层或弃用期(用户裁决、ADR 0006);逐组件同步实现、类型、调用者、文档与测试。数据项渲染字段另行按实际契约评估。迁移不得破坏数字动画、缓存或业务 payload。 - `prefixCls` 的 DOM 响应性需要保证,但现有静态 CSS 不自动支持任意前缀。完整前缀样式策略继续追踪 KNOWN-ISSUES 的 D04。 - `middle` 等既有值、子组件别名和已验收视觉不为独立化重新命名。 ## 变更分类与迁移 错误实现 → 用场景与契约证明后修复;有意设计改变 → 记录理由、影响、类型、示例和回归;环境差异 → 记录平台与复现条件;上游差异 → 可作参考,不自动构成缺陷或豁免。 破坏性公共 API 必须单独记录:旧/新写法、受影响版本、替代方案、弃用期、运行时及类型兼容层、移除条件、验证命令。当前 `0.1.x` 未发布开发阶段,用户已授权模板扩展 API 直接迁移;这类变更记录旧/新写法与测试证据,兼容层和弃用期明确为无,无需逐组件重复申请批准。用户另已授权按 ADR 0007 直接修正牺牲 Vue 公共用法的 React 回调/DOM 兼容:不保留错误载荷或树形态的兼容层/弃用期;逐组件记录影响与验证。其他破坏性变更仍单独评审。 Vue 公共语义与 React 回调/DOM 冲突的直接修正规则见 [ADR 0007](https://github.com/apollocmh/apollo-design-ui/blob/master/docs/adr/0007-vue-public-contracts-over-react-shapes.md)。已批准的模板扩展迁移见 [ADR 0006](https://github.com/apollocmh/apollo-design-ui/blob/master/docs/adr/0006-development-template-slots.md),Transfer 首批变化见 [迁移记录](https://github.com/apollocmh/apollo-design-ui/blob/master/docs/migrations/transfer-slots.md)。Alert / Collapse 已有内容插槽的优先级调整另见 [行为迁移记录](https://github.com/apollocmh/apollo-design-ui/blob/master/docs/migrations/content-slot-precedence.md)。List 的 `renderItem` → 泛型 `#item`、内容插槽及废弃告警调整见 [List 迁移记录](https://github.com/apollocmh/apollo-design-ui/blob/master/docs/migrations/list-slots.md)。其他待评估事项见 [独立化记录](https://github.com/apollocmh/apollo-design-ui/blob/master/docs/migrations/independence.md),未裁决事项不算已批准。 Typography 的固定标签类型、Link 原生操作树、编辑/复制/测量、有效 Token 和关联 Table 主题变量修正见 [Typography 契约迁移](https://github.com/apollocmh/apollo-design-ui/blob/master/docs/migrations/typography-contracts.md)。 Badge / Ribbon 的原生根 style/ref、完整 text 内容/槽、当前配置与九 Token、数字/偏移及可读前景修正见 [Badge 契约迁移](https://github.com/apollocmh/apollo-design-ui/blob/master/docs/migrations/badge-contracts.md);直接修正开发期错误落点,原二十六场景和参考证据保留。 ## 上游参考与历史回归 List 当前配置、稳定内容结构、嵌套样式与分页修正,以及共享 `RenderEmptyHandler` 类型收窄,集中见 [List 契约迁移](https://github.com/apollocmh/apollo-design-ui/blob/master/docs/migrations/list-contracts.md)。 共享reset的原生控件颜色配对修正见 [颜色迁移](https://github.com/apollocmh/apollo-design-ui/blob/master/docs/migrations/native-control-colors.md)。Spin全屏模式保留正文文档流,root为内容外壳,mask为实际覆盖层;相关落点变更与验证也见List契约迁移。 Spin的完整Vue内容、显式indicator scope、稳定section/indicator、SSR确定进度(含0)与4个有效Token集中见 [Spin契约迁移](https://github.com/apollocmh/apollo-design-ui/blob/master/docs/migrations/spin-contracts.md)。这按ADR0007直接修正旧DOM/首帧形态,不恢复已移除indicator prop或增加兼容通道。 QRCode的statusRender直接替换为#status、稳定refresh事件操作、根/图像样式拥有关系、默认白色宿主与可访问名称、当前遮罩Token和语言,集中见 [QRCode契约迁移](https://github.com/apollocmh/apollo-design-ui/blob/master/docs/migrations/qrcode-contracts.md)。原编码引擎与合法输入的矩阵/路径保留。 `tests/compat`、Oracle 与 `tests/visual/baselines/react` 保留来源版本以便复现;版本固定只约束这组参考实验。上游对照默认不决定新组件完成或发布验收。现有 DOM 回归测试仍执行,必要差异必须根据 Apollo 契约审查,不允许无依据放宽。 ## 9. 历史差异登记 `image-optional-alt-accessible-name`:Image省略alt时,实际img使用空替代文本;预览触发器使用“Preview image”,弹层使用“Image preview”作为通用名称,避免公开可选prop产生无名称控件。旧React对照缺少触发器名称的5个场景保留,精确断言仅此差异,并以Apollo原生回归及实际浏览器axe验证。集中迁移与当前验证边界见 [Image契约修正](https://github.com/apollocmh/apollo-design-ui/blob/master/docs/migrations/image-contracts.md)。 原 D 编号及逐组件迁移证据完整保存在 [2026-10 历史兼容记录](https://github.com/apollocmh/apollo-design-ui/blob/master/docs/history/compatibility-2026-10.md)。旧链接/脚本引用该表时按历史记录解释;其中的 Phase、逐字同构和强制对拍要求已被本文取代。不要删除已有问题复现或第三方来源说明。 Statistic/Timer/Countdown的原生#value业务作用域、当前计时方向/非负事件、SSR/清理、attrs/ref及两字号Token修正集中见[Statistic契约迁移](https://github.com/apollocmh/apollo-design-ui/blob/master/docs/migrations/statistic-contracts.md);不新增旧内容函数兼容层。 Skeleton及五个子组件的原生根attrs/style、嵌套块配置、Image默认槽、当前八Token和装饰占位语义修正集中见[Skeleton契约迁移](https://github.com/apollocmh/apollo-design-ui/blob/master/docs/migrations/skeleton-contracts.md);直接修正开发期错误形态,不新增兼容通道。 Result全部状态的完整图标槽/默认图形开关、条件内容、原生根attrs/style、当前Provider/四Token和装饰语义修正集中见[Result契约迁移](https://github.com/apollocmh/apollo-design-ui/blob/master/docs/migrations/result-contracts.md);开发期直接修正,不为旧React图形分支增加兼容通道。 Button完整内容宿主、独立color/variant、加载请求与指示器分离、当前Provider/58 Token及合法发布工具入口修正见[Button契约迁移](https://github.com/apollocmh/apollo-design-ui/blob/master/docs/migrations/button-contracts.md);内部Search/Dropdown/FloatButton链路同步调整。 Empty 的完整 image/description/footer 内容、当前 Provider/语言、自然布局、空宿主及默认文字对比度修正见 [Empty 契约迁移](https://github.com/apollocmh/apollo-design-ui/blob/master/docs/migrations/empty-contracts.md);保留插画几何与原始参考证据。 Tag / CheckableTag / CheckableTagGroup 的完整内容、所属原生关闭按钮/链接、Vue 事件和强类型模型、当前 Provider/三个 Token 与两套真实语义,集中见 [Tag 契约迁移](https://github.com/apollocmh/apollo-design-ui/blob/master/docs/migrations/tag-contracts.md);原始参考矩阵保留,开发期直接修正错误 DOM/回调形态。 Avatar / AvatarGroup 的原生事件与同步取消钩子、完整内容槽、当前尺寸/Token、业务key和溢出按钮,集中见 [Avatar契约迁移](https://github.com/apollocmh/apollo-design-ui/blob/master/docs/migrations/avatar-contracts.md);直接移除四个分组旧别名,保留原始参考证据。 ### D-typography-native-controls 开发阶段按 ADR0007 直接修正 Link 的 span/a 所属结构、text 编辑键盘入口与原生按钮内装饰图标语义。原 76 场景、参考 HTML 与参考 PNG 不变;19 个场景的精确差异存于 Typography contract-differences.ts,任何额外差异继续失败。详情与迁移见 Typography 契约迁移。 Descriptions 的稳定原生描述项、当前配置/十Token、所属attrs与label槽修正见[Descriptions契约迁移](https://github.com/apollocmh/apollo-design-ui/blob/master/docs/migrations/descriptions-contracts.md)。Timeline 的原生根事件、实际ref、完整标量内容、当前六Token与显式方向见[Timeline契约迁移](https://github.com/apollocmh/apollo-design-ui/blob/master/docs/migrations/timeline-contracts.md)。Breadcrumb 的所属内容/菜单按钮、参数、原生attrs、当前七Token与内容槽见[Breadcrumb契约迁移](https://github.com/apollocmh/apollo-design-ui/blob/master/docs/migrations/breadcrumb-contracts.md);三单元已完成产物、正式视觉和Docs统一验收,见[四单元验收回执](https://github.com/apollocmh/apollo-design-ui/blob/b6578306f58bf0918d0f4cb8519cf4cf1a900b15/packages/docs/content/guide/docs/audit/evidence/four-unit-final-acceptance.json)。共享Menu Enter导航修复证据保留,完整Menu审计另行继续。 Space/Compact/Addon 的当前插槽、稳定内容身份、完整 separator 数据、紧凑上下文与主题作用域见[Space契约迁移](https://github.com/apollocmh/apollo-design-ui/blob/master/docs/migrations/space-contracts.md);Grid/Row/Col 的原生样式、当前配置与响应式字段见[Grid契约迁移](https://github.com/apollocmh/apollo-design-ui/blob/master/docs/migrations/grid-contracts.md)。直接修正开发期错误行为,不新增内容回调兼容层;两单元已分别完成发布、视觉和Docs验收,Space关联Input窄链通过不代表完整Input API已验收。 Flex的完整内容、当前gap与原生样式见[Flex契约迁移](https://github.com/apollocmh/apollo-design-ui/blob/master/docs/migrations/flex-contracts.md);Alert/ErrorBoundary的内容、关闭流程与Vue错误恢复见[Alert契约迁移](https://github.com/apollocmh/apollo-design-ui/blob/master/docs/migrations/alert-contracts.md);Layout家族的原生根、当前配置与Sider受控/响应式链见[Layout契约迁移](https://github.com/apollocmh/apollo-design-ui/blob/master/docs/migrations/layout-contracts.md)。三者与Space已统一验收,证据及剩余边界见[本批最终回执](https://github.com/apollocmh/apollo-design-ui/blob/b6578306f58bf0918d0f4cb8519cf4cf1a900b15/packages/docs/content/guide/docs/audit/evidence/space-flex-alert-layout-final-acceptance.json)。 Theme的可写深响应式配置、同应用默认来源共享/跨应用与SSR隔离、mounted变量注入和可释放scope所有权,以及空算法/undefined覆盖、精确Alias类型和原生DOM引用target,集中见[Theme契约迁移](https://github.com/apollocmh/apollo-design-ui/blob/master/docs/migrations/theme-foundation-contracts.md)。开发期直接移除无消费的ThemeConfig.prefixCls;DOM类名沿用ConfigProvider顶层prefixCls,CSS变量名使用cssVarPrefix,不新增兼容通道。该源码里程碑不代表ConfigProvider/Tree完整单元或全库最终门禁已关闭。 共享 `useControlledValue` 的受控请求、撤控保留值与函数更新规则见[受控状态迁移](https://github.com/apollocmh/apollo-design-ui/blob/master/docs/migrations/controlled-value.md)。开发阶段直接修正 rc 内部状态语义,不提供旧行为开关。 组件 Token 配置保留字符串、数字和布尔标量,以支持已公开的 `InputNumber.handleVisible`;不接受函数或嵌套对象。各组件仍按其字段契约消费,布尔开关不会当作其他组件的 CSS 数值。 Switch 的 Provider 样式、具名槽、原生 attrs 和真实模板 ref 类型修正见[Switch API](https://github.com/apollocmh/apollo-design-ui/blob/master/packages/ui/src/switch/index.zh-CN.md);全局 large 解析为该组件已支持的 medium,不新增尺寸能力。 十三个组件 Token 和已消费的全局别名读取当前主题,嵌套、替换和撤除均更新实际 CSS;保留原生与语义样式优先级。 ### D-back-top-native-button BackTop 改为原生 button 和完整内容槽,click 发送原生 MouseEvent,公开真实按钮引用;target 跟随当前模板 ref,并在换目标、重复点击和卸载时清理滚动动画。历史 div/首节点克隆的差异在本组件 semantic 测试中精确登记,参考基线保留。迁移见[BackTop API](https://github.com/apollocmh/apollo-design-ui/blob/master/packages/ui/src/back-top/index.zh-CN.md)。 ### D-rate-native-events-and-focus Rate 的 change/hoverChange/focus/blur 使用 Vue emits,焦点事件带原始 FocusEvent;具名槽和真实实例引用保留精确类型。radio 组只保留一个已选值和一个 Tab 入口,动态 tooltip 不替换焦点项;新增可达性属性与旧前缀差异逐场景精确比较,不忽略整类属性。迁移见[Rate API](https://github.com/apollocmh/apollo-design-ui/blob/master/packages/ui/src/rate/index.zh-CN.md)。 六个组件 Token 读取当前主题,嵌套、替换、撤除和全局派生及时生效;原生与语义样式继续按既有优先级覆盖。 ### D-pagination-native-model-inputs Pagination 保留既有原生插槽交付,修正受控页码/尺寸撤控、总量收缩、键盘提交、焦点归属及禁用交互。尺寸选择器使用原生 class;十二个组件 Token 与输入样式读取当前主题。精确 DOM 差异保留在 semantic 测试,参考基线不变,详见[Pagination API](https://github.com/apollocmh/apollo-design-ui/blob/master/packages/ui/src/pagination/index.zh-CN.md)。 ### D-input-number-native-contracts InputNumber 的 change/step/pressEnter 统一为 Vue 事件,模板引用暴露实际元素与方法;显式 null、受控撤除、输入法、光标及异步清理遵守文档契约。当前 Provider、variant 和组件 Token 跟随配置替换或移除,详见[InputNumber API](https://github.com/apollocmh/apollo-design-ui/blob/master/packages/ui/src/input-number/index.zh-CN.md)。 ### D-steps-live-tokens Steps 使用唯一 change emit,接通九个有效组件 Token。直接移除从未被组件消费的 customIconSize/customIconTop/iconTop/titleLineHeight;使用现有 iconSize/customIconFontSize 或原生样式表达受支持的定制,不新增旧字段兼容。既有四槽和 inline Tooltip 成果保留,详见[Steps API](https://github.com/apollocmh/apollo-design-ui/blob/master/packages/ui/src/steps/index.zh-CN.md)。 ### D-progress-live-contracts Progress 补齐动态位置、原生样式、当前 Provider/六 Token、Circle 描边与渐变、CSS 长度宽度等已声明行为;保留 format/rounding 与现有别名。单色 inner 文字修正前景对比,语义 color 仍优先;自定义渐变和透明背景的配色边界见[Progress API](https://github.com/apollocmh/apollo-design-ui/blob/master/packages/ui/src/progress/index.zh-CN.md)。Upload 已交付进度语义不变。 ### D-masonry-native-layout Masonry 的 layoutChange 使用 Vue emits,MasonryRef 与文档化 nativeElement() getter 一致;同 key 数据替换和离场资源保持正确。CSS 字符串 gutter 交由浏览器解析,纵向百分比使用文档化 intrinsic/显式高度基准,避免根高反馈循环;item.height 仍是槽和事件的数据,不新增布局提示语义。详见[Masonry API](https://github.com/apollocmh/apollo-design-ui/blob/master/packages/ui/src/masonry/index.zh-CN.md)。 ### D-tooltip-current-overlay Tooltip 的 openChange/popupClick/afterOpenChange 使用 Vue emits,原生 class/style 只作用于浮层根,模板 ref 暴露真实元素属性。afterOpenChange 通知通过 Popover、Popconfirm 同链迁移为 `@after-open-change` / `onAfterOpenChange`,不保留旧回调 prop。当前主题、箭头、层级与定位跟随实际配置和尺寸更新,详见[Tooltip API](https://github.com/apollocmh/apollo-design-ui/blob/master/packages/ui/src/tooltip/index.zh-CN.md)。两层包装的其余契约仍按各自进行中任务处理。 ### D-float-button-native-group FloatButton / Group 使用当前插槽、Provider 与主题别名;Group 通知改为 Vue emits,原生 attrs 只作用于根,trigger 在列表前以支持自然 Tab 顺序,Escape 在接受关闭后返回焦点。BackTop 保留当前目标并释放动画/监听,PurePanel 展示真实分支;既有样式生成器正确消费显式自定义前缀,不新增运行时 CSS。详见[FloatButton API](https://github.com/apollocmh/apollo-design-ui/blob/master/packages/ui/src/float-button/index.zh-CN.md)。 ### D-popover-current-owner Popover 拥有 openChange/popupClick/afterOpenChange 的 Vue emits,继承的样式与销毁别名真实转发;自身四 Token、当前 Provider 与 PurePanel 颜色生效。包装层把当前层级基准传给 Tooltip,共享同一层级上下文,不重复叠加。真实引用、原生样式与内容插槽沿用既有成果;wireframe 的视觉缺口仍明确延期,详见[Popover API](https://github.com/apollocmh/apollo-design-ui/blob/master/packages/ui/src/popover/index.zh-CN.md)。 ### D-tree-native-contracts Tree / DirectoryTree 修正受控模型、完整事件转发、原生事件载荷、实际焦点/滚动/行测量与加载和拖放资源。顶层 titleRender、icon/switcherIcon 等内容函数迁为具名作用域插槽;数据项函数按数据职责保留,TreeSelect 同步迁移实际消费桥。九个组件 Token 使用当前主题,prototype 命名键安全保留;Directory 叶子显示文件图标,历史 DOM 参考只登记精确差异。详见[Tree API](https://github.com/apollocmh/apollo-design-ui/blob/master/packages/ui/src/tree/index.zh-CN.md)。 ### D-mentions-current-contracts Mentions 保留六组既有整改,补齐当前 Provider/二十一个有效组合 Token、可空容器与真实模板 ref;只读、禁用和 hidden 路由到实际拥有者。PurePanel 在自身 host 展示真实菜单。移除未消费的 Mentions addonBg 与 OptionProps.children,Option 内容使用默认槽、key 支持 string/number;Input 自己有效的 addonBg 保留。详见[Mentions API](https://github.com/apollocmh/apollo-design-ui/blob/master/packages/ui/src/mentions/index.zh-CN.md)。 ### D-tabs-native-contracts Tabs 保留已交付 popup/extra 槽,修正受控撤除、同 key 面板身份、item 级销毁优先级、SSR 稳定 ARIA id 与真实 ref 属性。导航和溢出选项拥有独立的可访问树,关闭按钮保留键盘入口;当前 Provider 与二十四个有效 Token 实际消费。移除从未实现的顶层 children 与两个空 margin Token,items[].children 和 horizontalItemGutter 保留;开发版 editable 命令类型要求 remove 携带 key。详见[Tabs API](https://github.com/apollocmh/apollo-design-ui/blob/master/packages/ui/src/tabs/index.zh-CN.md)。 ### D-upload-native-contracts Upload / Dragger 修正文件预处理替换、请求/移除竞态、受控列表与取消、预览资源释放,统一原生 attrs、插槽、真实引用及当前 Provider/Token。beforeUpload=false 的 change 文件统一为 UploadFile,通过 originFileObj 读取原文件;自定义请求收到实际文件与默认请求服务。删除无消费的 supportServerRender/styleAttrs 和 UploadListProps.className;预览、下载、异步移除等有返回值的业务回调保留。原生根样式落 wrapper,详见[Upload API](https://github.com/apollocmh/apollo-design-ui/blob/master/packages/ui/src/upload/index.zh-CN.md)。 ### D-popconfirm-native-sessions Popconfirm 的所属通知使用 Vue emits,确认 Promise 仍是业务回调;当前配置与 Token 由 Popconfirm 拥有,不误用 Popover 配置。异步结果只关闭发起它的已接受会话,卸载后不再触发旧关闭;引用暴露实际实例。详见[Popconfirm API](https://github.com/apollocmh/apollo-design-ui/blob/master/packages/ui/src/popconfirm/index.zh-CN.md)。 ### D-select-native-search-and-events Select 的通知使用 Vue emits,value/open/searchValue 使用对应 v-model;showSearch 仅承载过滤与排序等搜索算法配置。原 showSearch.searchValue/onSearch/searchIcon 分别迁到顶层模型、search 事件与 #searchIcon,移除 onDropdownVisibleChange。当前配置、有效 Token、实际模板引用和共享引擎消费者同步修正;详见[Select API](https://github.com/apollocmh/apollo-design-ui/blob/master/packages/ui/src/select/index.zh-CN.md)。AutoComplete 同步转发 searchValue 模型更新。 ### D-drawer-native-lifecycle Drawer 的 close/afterOpenChange/resize/resizeStart/resizeEnd 使用 Vue emits,引用暴露实际 nativeElement 与 focus。resizable 直接使用 boolean,原对象内回调迁为对应 Vue 事件(尺寸载荷为 number);删除未消费的 panelRef/destroyInactivePanel。修复真实 motion 完成通知、延迟销毁、受控尺寸与拖拽、嵌套推移和焦点资源,详见[Drawer API](https://github.com/apollocmh/apollo-design-ui/blob/master/packages/ui/src/drawer/index.zh-CN.md)。 ### D-locale-provider-order LocaleProvider 与 ConfigProvider 的静态确认语言来源按挂载顺序固定优先级,内容更新不重新占位;清空来源后旧清理不恢复过期语言。普通 Modal 只读取本应用响应式语言,静态 confirm 仍可显式传 locale;无上下文静态服务的全局来源边界保留。详见[Locale 当前契约](https://github.com/apollocmh/apollo-design-ui/blob/master/docs/foundation/locale-contract.md)。 ### D-a11y-accepted-navigation useRovingFocus 的 activeIndex 按既有文档作为受控输入,拒绝请求不再修改已接受值或抢焦点,撤控保留已接受值。需要本地初值时不传受控 activeIndex,调用 setActive(index, false);零偏移保持当前位置,跳末项使用 moveEnd。键盘事件保留原生阻止/输入法边界,挂载前播报在真实宿主就绪后保留。详见[a11y 当前契约](https://github.com/apollocmh/apollo-design-ui/blob/master/docs/foundation/a11y-contract.md)。 ### D-auto-complete-native-combobox AutoComplete 的通知改为 Vue emits,并明确 value/searchValue/open 三个模型、实际模板引用与像素/条目滚动参数。backfill 只预览键盘候选,Enter/Tab/点击才提交;Tab 保留原生焦点移动。Provider 展示配置由真实包装者拥有,继续共享已文档化的 Select Token。原 showSearch.onSearch 迁为 search 事件,旧 onDropdownVisibleChange 迁 openChange;详见[AutoComplete API](https://github.com/apollocmh/apollo-design-ui/blob/master/packages/ui/src/auto-complete/index.zh-CN.md)。 ### D-color-picker-native-content ColorPicker 的 panelRender/showText 内容函数直接迁为 #panelRender/#showText;panel 作用域改为稳定组件引用,可用 ``,不再需要 VNode 渲染适配器。默认触发器和预设色块具备原生键盘交互,尺寸采用共享 SizeType,attrs 落到实际触发节点;PurePanel 使用正常文档流并转发真实槽/事件,移除轮询和高度镜像。当前配置、渐变 alpha 与数字颜色输入同步修正,详见[ColorPicker API](https://github.com/apollocmh/apollo-design-ui/blob/master/packages/ui/src/color-picker/index.zh-CN.md)。 ### D-transfer-native-models Transfer 保留已有四槽成果,补齐 targetKeys/selectedKeys 双模型、所属 Vue 事件与真实引用。Search.handleClear 和 Operation.moveToLeft/moveToRight 命令 prop 改为 clear/move-to-left/move-to-right 事件;选择范围基于当前筛选视图,业务 key 和 Vue 节点身份保留。七 Token 接受 string/number 并读取当前主题;移除从未消费的 ListBodyProps.filteredItems,#list.filteredItems 保留。详见[Transfer API](https://github.com/apollocmh/apollo-design-ui/blob/master/packages/ui/src/transfer/index.zh-CN.md)。 ### D-picker-native-panels Picker 面板引擎的通知使用 Vue emits,PickerPanel 提供 value/pickerValue/mode 三个模型;cellRender 内容 prop 迁为 #cellRender,对日期与时间列提供真实 Dayjs/number/meridiem 类型。当前时间配置、Provider、原生槽和面板引用直接消费;滚动对齐、取消与卸载资源已修复。DatePicker/RangePicker/Calendar 仅同步引擎消费桥,CellRenderInfo.locale 修正为实际面板语言子集,包装器其余契约继续各自整改。详见[Picker 当前契约](https://github.com/apollocmh/apollo-design-ui/blob/master/docs/foundation/picker-contract.md)。 ### D-dropdown-native-menu Dropdown/DropdownButton 的开关、动效与主按钮通知使用 Vue emits,afterOpenChange prop 迁为 after-open-change 事件;真实引用保留既有三个 getter 方法。Provider、有效 Token、原生 attrs 与完整按钮/浮层槽真实消费,未实现的 icon 类型字段改用已有图标槽;id 落到实际触发节点。Menu 同步当前前缀、分组/动效、selectable 与键盘监听,语义样式传至实际菜单项。PurePanel 保持正常静态定位,详见[Dropdown API](https://github.com/apollocmh/apollo-design-ui/blob/master/packages/ui/src/dropdown/index.zh-CN.md)。 ### D-form-core-native-scopes Form Core 的通知由 Vue emits 拥有,store/useForm 的业务回调仍保留。Form、Field、List 默认槽分别接收 `{ values, form }`、`{ control, meta, form }`、`{ fields, operations, meta }`,模板与 h() 使用同一对象;UI Form/FormItem 同步迁移,FormList 已有对象形态保留。外部 store、动态注册、受控 fields 和校验资源同步修正,实际宿主通过 nativeElement 返回。详见[Form Core 当前契约](https://github.com/apollocmh/apollo-design-ui/blob/master/docs/foundation/form-core-contract.md);UI Form 的完整外观整改仍单独推进。 ### D-cascader-native-paths Cascader/CascaderPanel 的通知使用 Vue emits,选择器提供 value/open/searchValue 三个模型。displayRender、optionRender、popupRender、showSearch.render、函数式标签与图标内容迁为原生槽;popupRender 的 menu 可直接用 ``。移除未消费的 trigger/placeholder2 与重复开关通知,nativeElement 改为实际属性;过滤、排序和异步加载保留函数。修正类型安全的路径身份、当前配置/Token、键盘、异步会话和 raw 浮层传递,详见[Cascader API](https://github.com/apollocmh/apollo-design-ui/blob/master/packages/ui/src/cascader/index.zh-CN.md)。 ### D-date-picker-native-input-and-panels DatePicker/RangePicker 的内容函数迁为 cellRender/panelRender/extraFooter/tagRender 等具名槽,移除无实际替换链路的 components/inputRender、失效的 changeOnBlur 与无运行时组件的 PurePanel 类型。通知使用 Vue emits,value/open/pickerValue/mode 支持模型请求;keydown 只接收原生 KeyboardEvent,preventDefault() 在内部操作前生效,暴露 DOM 引用准确包含 null。修正输入草稿/IME、受控撤控、范围活动端与禁用时间、只读面板键盘、动态槽与主题及观察器清理;TimePicker 仅同步关联包装桥,详见[DatePicker API](https://github.com/apollocmh/apollo-design-ui/blob/master/packages/ui/src/date-picker/index.zh-CN.md)。 ### D-menu-native-notifications Menu 的选择/展开通知统一使用 Vue emits,原生键盘监听使用 onKeydown(模板为 @keydown),替代 React 拼法 onKeyDown;顶层 expandIcon 与静态子组件图标渲染迁为具名槽,数据项的图标和操作函数保留。移除从未消费的 children 类型,继续使用 items 数据源;实际 Overflow 根引用、当前 Provider/语义样式、已有十个 Token 和 popup/inline 层级职责同步修正,详见[Menu API](https://github.com/apollocmh/apollo-design-ui/blob/master/packages/ui/src/menu/index.zh-CN.md)。 ### D-tree-select-native-tree-owner TreeSelect 的通知统一为 Vue emits,保留 value/open/searchValue/treeExpandedKeys/treeLoadedKeys 模型,监听 change 不再改变值的形态。顶层标题/标签/浮层与图标内容函数迁为具名槽,数据项 title/icon 与过滤、加载服务保留真实数据职责;旧开关通知别名改为 openChange,nativeElement() 改为实际属性。配置由 TreeSelect 自己拥有,继续共享 Tree/Select Token;修正原始数据服务载荷、异步 children 更新、键盘和实际 tree ARIA 目标,详见[TreeSelect API](https://github.com/apollocmh/apollo-design-ui/blob/master/packages/ui/src/tree-select/index.zh-CN.md)。 ### D-time-picker-native-owner TimePicker/TimeRangePicker 固定为时间轴,移除从 DatePicker 误继承且无实际行为的 mode/defaultMode/update:mode、日期导航和多选标签声明,保留 value/open/pickerValue 模型与真实七/八个槽。两者读取当前 timePicker 配置并只合并一次语义样式,普通 Date Range 继续读取 rangePicker;独立 TimePicker 语言提示和动态撤回生效。没有新增 TimePicker Token 或内部面板,详见[TimePicker API](https://github.com/apollocmh/apollo-design-ui/blob/master/packages/ui/src/time-picker/index.zh-CN.md)。 ### D-test-utils-native-contracts Test Utils 保留既有 Vue 测试入口,修正真实 VNodeChild、CSS/DOM 精确归一、焦点与原生属性断言、异常卸载/observer目标身份和收集器恢复;空执行范围不能冒称通过。ObserverBaseline.resizeTargets 由数量改为实际目标身份集合,包外没有旧字段消费者。C11 只检查公开组件的真实 runtime props,保留精确非模型数据豁免;Steps 同步补齐 update:current,模板可直接使用 v-model:current,原 change 数字载荷保留。 ### D-checkbox-native-input-events Checkbox 的 change 改为 `(event: Event, checked: boolean)`:首参为原生事件,第二参保留本次提议;移除合成 target/nativeEvent 包装及旧 Target DTO。其余 DOM 通知采用原生拼写与事件,Group change 保留值数组;值范围统一为实际支持的 string/number/boolean。修正父拒绝更新后的 checked/indeterminate、动态 skipGroup 注册、当前 Provider 和原生样式,引用暴露真实 nullable DOM。Radio 仅同步已证实的勾选恢复边界,完整事件迁移仍另行审计;Table/Transfer 已同步本次消费,详见[Checkbox API](https://github.com/apollocmh/apollo-design-ui/blob/master/packages/ui/src/checkbox/index.zh-CN.md)。 ### D-motion-native-slots-and-events CSSMotion/MotionList 的可见性通知统一为 owned `visibleChanged` 事件,原 hooks.onVisibleChanged 迁为 `@visible-changed` / onVisibleChanged;其余有返回值的动效服务 hooks 保留。CSSMotion 将原生 attrs 与原 ref 合并到真实单个动画根,支持条件空槽和 Fragment,多个真实根明确不支持;MotionList 默认槽泛型保留移除项的浅快照元数据,component 支持原生标签、Vue 组件或 null。修正动态配置、异步准备错误归属与根替换后的监听释放,Trigger、Modal、Segmented、Form 和 Masonry 同步必要消费。详见[Motion 当前契约](https://github.com/apollocmh/apollo-design-ui/blob/master/docs/foundation/motion-contract.md)。 ### D-form-native-content-and-instances Form 的 requiredMark 内容函数迁为 `#requiredMark={ label, required }`,label 是可直接渲染的稳定组件;feedbackIcons / hasFeedback.icons 迁为 Form 或 FormItem 的 `#feedbackIcon={ status, errors, warnings }`,hasFeedback 保留 boolean。useFormInstance 读取最近的真实 Form 实例,useForm 保留工厂职责;getFieldInstance 返回实际控制实例,是否支持 focus 取决于该控件。移除无消费的 Item status/fieldId,使用已有 validateStatus/id;requiredMark 在 Form 上配置。同步修正动态槽撤除、路径聚合、原生 attrs、实际焦点/滚动、响应式列与当前十一 Token,详见[Form API](https://github.com/apollocmh/apollo-design-ui/blob/master/packages/ui/src/form/index.zh-CN.md)。 ### D-table-native-data-and-content Table 的顶层 title/footer/summary/expandedRowRender/expandIcon/emptyText 内容函数迁为具名槽,expandable 内同名全表内容函数也统一迁移;共享语言与组件 locale.emptyText 只承载静态内容,动态空态使用 #emptyText。按列或数据承担业务职责的 render/title/filterDropdown、排序过滤和选择操作函数保留。通知使用 Vue emits,change 保留四个实际业务载荷,scroll 使用原生 Event;公开泛型贯穿数据、列、槽、事件与真实模板引用,不要求用户添加索引签名。修正受控提议与撤控、同 key 行内容与焦点、当前配置和实际滚动资源;虚拟列表的 Vue holder/行按真实 HTMLElement 根测量,隐藏测量单元不再重复挂载表头交互,不可展开行使用装饰占位。详见[Table API](https://github.com/apollocmh/apollo-design-ui/blob/master/packages/ui/src/table/index.zh-CN.md)。 ### D-radio-native-input-and-group Radio/RadioButton 的 change 改为 `(event: Event, checked: boolean)`,RadioGroup 的 change 改为 `(value: RadioValue, event: Event)`,分别保留 checked/value 模型;RadioChangeEvent 仅为原生 Event 别名,不再构造 target/nativeEvent 包装。选项 change 同步原生双参,Table 保留同一事件,Calendar/Header Demo 使用已有 update:value。移除无实际职责的 Radio skipGroup/type/optionType 声明,Group 的 optionType 保留。修正当前 Provider/十六 Token、完整内容和原生 attrs、选项身份/焦点、Button 引用与单次通知;已交付的受控整组 DOM 恢复继续保留,详见[Radio API](https://github.com/apollocmh/apollo-design-ui/blob/master/packages/ui/src/radio/index.zh-CN.md)。 ### D-segmented-native-selection Segmented 的 change/keydown 由 Vue emits 拥有,value 模型保持;原生 attrs/style 落真实根,选项 id 与表单 value 真实消费。label/icon 使用完整 VNodeChild,语义样式使用 CSSProperties 与当前 SegmentedProps,尺寸接共享 SizeType(含 medium)。选中或首个可用 radio 是唯一 Tab 入口,拒绝提议后恢复已接受的勾选与焦点,RTL/IME/取消默认行为同步修正。当前八 Token 和快速反向 thumb 动效读取有效配置并清理失效资源;原 DOM 参考保留,详见[Segmented API](https://github.com/apollocmh/apollo-design-ui/blob/master/packages/ui/src/segmented/index.zh-CN.md)。 ### D-calendar-native-content-and-panels Calendar 的 headerRender/cellRender/fullCellRender 内容 prop 及四个旧别名统一迁为已有同名具名槽,作用域使用具名对象;移除对应纯回调类型,保留 Header 作用域中的 onChange/onTypeChange 操作服务。value/mode 模型与 change/panelChange/select 顺序保持,Header 使用 RadioGroup 的 update:value。修正条件槽、原生 attrs/真实引用、当前配置/语言/六 Token,并将当前方向传给实际 Picker 面板;复用已交付的面板算法,详见[Calendar API](https://github.com/apollocmh/apollo-design-ui/blob/master/packages/ui/src/calendar/index.zh-CN.md)。 ### D-watermark-native-drawing-lifecycle Watermark 的 remove 通知改由 Vue emits 拥有,模板使用 @remove,h() 的 onRemove 仍是自然监听器。fontSize 保留 number/string,由浏览器解析合法 CSS 单位;移除无效的 fontStyle="none"。修正实际图片身份缓存、异步图片竞态、当前原生 attrs/样式、继承面板和观察器/帧的释放;保留既有水印几何及防篡改行为,真实 Modal 消费同步验证,详见[Watermark API](https://github.com/apollocmh/apollo-design-ui/blob/master/packages/ui/src/watermark/index.zh-CN.md)。 ### D-card-native-content-and-tabs Card 的 tabChange/update:activeTabKey 由 Vue emits 拥有,支持 v-model:activeTabKey;h() 的 onTabChange 仍是自然监听器。Tabs 保留选择状态职责,tabProps 不再建立第二个受控来源。已有 actions 内容增加 #actions 入口;Meta 的默认槽作为 description 的后备,具名 description 槽(含空槽)优先,其次是显式 description 数据。修正条件内容身份与焦点、Card/Grid/Meta 原生 attrs/真实引用、当前配置和十三 Token,详见[Card API](https://github.com/apollocmh/apollo-design-ui/blob/master/packages/ui/src/card/index.zh-CN.md)。 ### D-splitter-native-panels-and-resize Splitter 的 resizeStart/resize/resizeEnd/collapse/draggerDoubleClick 统一由 Vue emits 拥有,移除重复回调 prop 通道,模板仍使用自然的 @resize-start 等写法。Panel 保留真实 Vue 节点、原生 attrs/StyleValue、默认槽和可访问的 nativeElement,尺寸与折叠状态按 key 归属;受控拒绝不写入本地状态,撤控保留已接受值,布局顺序变化取消旧拖拽。补齐分隔条键盘和当前四个有效 Token,保留既有尺寸算法,详见[Splitter API](https://github.com/apollocmh/apollo-design-ui/blob/master/packages/ui/src/splitter/index.zh-CN.md)。 ### D-modal-native-content-and-sessions 普通 Modal 的 ok/cancel/afterClose/afterOpenChange 改由 Vue emits 拥有,取消/关闭支持 open 模型请求,OK 保留业务通知职责。modalRender/footer 内容函数迁为 #modalRender={ModalPanel}、#footer={OkBtn,CancelBtn},提供稳定可直接使用的组件;命令式确认的异步操作与程序内容配置保留。useModal 仍返回 [api,holderVNode],结果以 ModalHookInstance 准确描述 PromiseLike,修正早期调用、会话结算/注销、关闭后更新及当前 confirmLoading。删除从未生效的普通 focusTrap 和命令式 open 声明,分别使用 focusable.trap、destroy();补齐实际 Portal 容器、当前配置/六 Token、原生 attrs、焦点与资源,详见[Modal API](https://github.com/apollocmh/apollo-design-ui/blob/master/packages/ui/src/modal/index.zh-CN.md)。 ### D-slider-native-handles-and-proposals Slider 的 handle/activeHandle 槽准确公开实际 nodeProps/ref/事件及当前 index/value,ColorPicker 使用同一类型。value 支持已有 null 输入,通知仍返回 number/number[];beforeChange 统一为有效交互的首个提议,changeComplete 使用该会话最后提议,拒绝更新不改变已接受状态,无变更或取消不伪报完成。原生 tabindex/ARIA 落实际把手,键盘取消、拖拽/触摸及卸载资源、当前十八 Token 和范围 Tooltip 同步修正;删除 Tooltip 未消费的开关回调及内部 value/draggingDelete 声明,已有 open/formatter 保留,详见[Slider API](https://github.com/apollocmh/apollo-design-ui/blob/master/packages/ui/src/slider/index.zh-CN.md)。 ### D-carousel-native-slides-and-config Carousel 的 beforeChange/afterChange/swipe/edge 使用所属 Vue emits,模板自然支持短横线事件名;原生 style/attrs 落真实根,内层样式用 styles.slider,移除未消费的 easing。箭头槽提供既有原生按钮的完整内容,原件 key/ref 与条件槽保持真实 Vue 归属;克隆按实际可见范围提供交互,原生 ID 关联和透传插槽 ref 在克隆边界处理。修正动态配置、自动播放暂停原因、动画/尺寸资源及当前八 Token;克隆仍是独立组件实例,不镜像任意内部状态,详见[Carousel API](https://github.com/apollocmh/apollo-design-ui/blob/master/packages/ui/src/carousel/index.zh-CN.md)。 ### D-tour-native-target-and-popup Tour 保留 open/current 模型与已有具名槽,拒绝请求不泄漏到撤控状态,异步步骤和真正重开分别处理。actions 的 originNode 改为稳定可直接渲染的组件;popupAlign 使用 Vue emits,步骤按钮传原生 MouseEvent 并支持取消导航。原生 attrs 经私有 Trigger 通道落真实弹层,修正当前目标/容器、配置/语言/Token、PurePanel 及焦点;遮罩使用原生 SVG 属性,实际滚动、换容器与切换遮罩保持正确几何和子树身份。没有新增观察任意纯位置重排的能力,详见[Tour API](https://github.com/apollocmh/apollo-design-ui/blob/master/packages/ui/src/tour/index.zh-CN.md)。 ### D-affix-anchor-native-scroll-and-links Anchor 与 Anchor.Link 的 click 使用所属 Vue emits,载荷为原生 MouseEvent 和链接信息,preventDefault() 可取消内部导航;change 保留原始 href。Anchor 默认槽是正式组合入口,Anchor.Link 的标题使用 #title 或 title,子链接使用默认槽,移除未消费的 children prop。原生链接交互落实际 a 元素,换容器、当前配置、指示条和卸载资源按真实节点维护;Affix 保留 updatePosition 与既有几何判据,显式未就绪目标会释放旧监听,固定内容尺寸变化同步占位。详见[Anchor API](https://github.com/apollocmh/apollo-design-ui/blob/master/packages/ui/src/anchor/index.zh-CN.md)和[Affix API](https://github.com/apollocmh/apollo-design-ui/blob/master/packages/ui/src/affix/index.zh-CN.md)。 ### D-listy-native-generics-and-content Listy 使用真实泛型 Vue 组件,保留任意数据类型与有效字符串/数字 key,rowKey 字段按其实际值类型约束。itemRender 迁为 #default={item,index},group.title 迁为 #groupHeader={groupKey,items,sticky,fixed},group.key 保留数据分组职责;类型贯穿模板、h()、插槽与 scrollTo 引用。toTaggedKey 的结果包含 key 的原始类型,数字和字符串不再碰撞;不要自行拼接旧格式。修正 Raw/Virtual 的真实滚动目标、跨分组节点身份、组头定位与资源释放,Provider 和当前两个 Token 实际消费,详见[Listy API](https://github.com/apollocmh/apollo-design-ui/blob/master/packages/ui/src/listy/index.zh-CN.md)。 ### D-notices-native-sessions-and-panels Message/Notification 保留命令式 API、有效服务回调和零参数 holder 工厂,提前调用进入实际挂载队列;Message 句柄在真正终止时结算,同 key 的各次等待均有效,手动关闭、销毁、淘汰和卸载不新增 public onClose 通知。关闭按钮和计时关闭仍调用当前 onClose;原始数字/字符串 key 分离,更新重置当前计时。单条配置中移除未消费的 classNames/styles.list 与 listContent,列表语义继续在 hook/全局配置中设置;PurePanel/PureList 使用准确类型、原生槽与事件。补齐当前十个 Token、Provider/关闭图标类型与真实容器消费,Modal/Tag 的共享关闭图标链同步验证,详见[Message API](https://github.com/apollocmh/apollo-design-ui/blob/master/packages/ui/src/message/index.zh-CN.md)和[Notification API](https://github.com/apollocmh/apollo-design-ui/blob/master/packages/ui/src/notification/index.zh-CN.md)。 ### D-app-native-services-and-host AppConfig 和 useApp() 改用真实通知配置及 MessageInstance、NotificationInstance、ModalHookAPI,静态 App.useApp 保留相同准确类型。useApp() 必须在真实 App 提供的 Vue 注入上下文中调用,缺少 Provider 时明确报错,不再返回伪造的空 API。保留原有四种宿主标签与 component=false、默认槽、嵌套配置和实例隔离;当前 Provider 根样式与原生 attrs 合并到实际宿主,动态切换宿主保留服务内容和生命周期。详见[App API](https://github.com/apollocmh/apollo-design-ui/blob/master/packages/ui/src/app/index.zh-CN.md)。 ### D-utils-native-refs-and-resources RefLike 删除没有真实消费者的 React `{current}` 包装,使用 Vue 可写 value 引用或函数 ref;组件自己的 current 业务 prop 继续按实例处理。useComposeRef 接收一个数组、Ref 或 getter 集合源,例如 `useComposeRef(() => [localRef, callback])`;getNodeRef 返回真实 public expose 或 DOM,不再允许任意指定结果泛型。状态工具保留 T 与嵌套 Ref 的身份,既有受控提议和撤控算法保持;mergeProps 类型描述实际的后值覆盖,输入限对象、null、undefined,共享关闭配置同步规范化。补齐所属文档、独立订阅释放、取消、临时 CSS 容器及合法颜色输入边界,详见[Utils 当前契约](https://github.com/apollocmh/apollo-design-ui/blob/master/docs/foundation/rc-util-contract.md)。开发阶段直接迁移,无兼容分支或弃用期;声明产物与全库验收留到统一冻结阶段。 ### D-position-owner-document-and-clipping Position 的公开签名及纯几何算法保持,测量使用目标所属文档、组合祖先和当前逐轴裁剪,修正边框盒缩放、overflow-clip-margin 与临时样式恢复。共享 Trigger 将视口和滚动区域分别传入对齐引擎,按当前容器绑定滚动及所属窗口 resize;迁移已有弹层不重建业务子树,关闭和卸载释放监听。仅支持同一 Document 内的轴对齐矩形,不新增跨 iframe 坐标换算或轮廓裁剪能力,详见[Position 当前契约](https://github.com/apollocmh/apollo-design-ui/blob/master/docs/foundation/position-contract.md)。 ### D-border-beam-native-host-and-effect BorderBeam 的原生 class/style/事件合并到默认槽的单一 HTML 宿主;旧组件 className 改用 classNames.effect,旧装饰 style 改用 styles.effect。Provider 的装饰配置保留原义。完整 Vue 内容、模板 ref、key 与组件插槽保留各自归属,条件或异步根更新后跟随真实宿主;多根、文本及 SVG 内容完整透传但不产生描边。动态 textContent 移除装饰节点时只重建描边,动画会重启,业务内容与焦点保持;共享采样跟随宿主所属文档并在卸载释放,详见[BorderBeam API](https://github.com/apollocmh/apollo-design-ui/blob/master/packages/ui/src/border-beam/index.zh-CN.md)。开发阶段直接迁移,无旧形态兼容层。 ### D-virtual-list-native-generics-and-holder VirtualList/Filler 使用真实泛型 Vue 组件与所属 emits,沿用 default={item,index,style,offsetX} 和 extra 槽;旧多参数 RenderFunc/RenderProps 类型、无效 showScrollBar 与无消费者的 lastDiff 诊断引用直接移除。公开引用保留只读 nativeElement/containerElement、getScrollInfo、scrollTo;按业务 key 读取高度缓存使用 get,数字与同文字符串 key 分离。id/role/ARIA/tabindex 和键盘、焦点监听落真实滚动 holder,class/style/data 留 outer,innerProps 独立指向内容层。Table、Listy、Select、Tree 同步使用实际泛型、作用域与 holder 引用,修正高度/宽度、RTL 和异步滚动请求生命周期,详见[VirtualList 当前契约](https://github.com/apollocmh/apollo-design-ui/blob/master/docs/foundation/virtual-list-contract.md)。开发阶段直接迁移,无旧回调或 DOM 形态兼容层。 --- # 图标 UI version: 0.1.9 Source commit: b6578306f58bf0918d0f4cb8519cf4cf1a900b15 Page: https://apollocmh.github.io/apollo-design-ui/guide/icons 图标来自独立包 `@apollo-design/icons`,与 `@apollo-design/ui` 分开安装与按需引入。它提供 **848 个** 图标:447 个 Outlined、251 个 Filled、150 个 TwoTone;完整目录见 [图标资源页](https://apollocmh.github.io/apollo-design-ui/components/icon)。 ### 安装与引入 ```bash pnpm add @apollo-design/icons ``` ```vue ``` 图标是普通 Vue 组件,颜色继承 `currentColor`,尺寸继承 `font-size`;也可以直接用 `style` / `class` 覆盖: ```vue ``` ### TwoTone 调色 TwoTone 图标支持 `twoToneColor`(单个图标)或 `setTwoToneColor`(全局): ```ts import { setTwoToneColor } from '@apollo-design/icons'; setTwoToneColor('#1677ff'); ``` ### IconProvider `IconProvider` 用来覆盖图标类名前缀,默认是 `apollo-icon`: ```vue ``` ### 自定义图标 ```ts import { createIcon } from '@apollo-design/icons'; export const MyIcon = createIcon( { name: 'my-icon', theme: 'outlined', icon: { tag: 'svg', attrs: { viewBox: '0 0 24 24' }, children: [{ tag: 'path', attrs: { d: 'M12 2 L22 22 L2 22 Z' } }], }, }, 'MyIcon', ); ``` 从 iconfont.cn 接入: ```ts import { createFromIconfontCN } from '@apollo-design/icons'; const IconFont = createFromIconfontCN({ scriptUrl: '//at.alicdn.com/t/c/font_xxx.js', }); ``` ### 无障碍 图标默认通过 `role="img"` 语义输出。装饰性图标请加 `aria-hidden="true"`;承载语义的图标请提供 `aria-label`(或 `ariaLabel` prop),不要让读屏器去猜。 --- # Affix UI version: 0.1.9 Source commit: b6578306f58bf0918d0f4cb8519cf4cf1a900b15 Page: https://apollocmh.github.io/apollo-design-ui/components/affix # Affix 固钉 滚动到指定偏移后,将内容固定到窗口或实际滚动容器的可视边缘。默认插槽承载完整 Vue 内容。 ```vue ``` ## API | Prop | 说明 | 类型 | 默认值 | | --- | --- | --- | --- | | offsetTop | 顶部固钉偏移 | number | 两种偏移都未传时为 0 | | offsetBottom | 底部固钉偏移;两个条件同时命中时顶部优先,顶部未命中时仍可命中底部 | number | — | | target | 返回实际滚动元素或 Window;未传依次使用 Provider.getTargetContainer、window | () => HTMLElement \| Window \| null \| undefined | — | | prefixCls | 当前组件类名前缀 | string | apollo-affix | `target` 返回 null/undefined 表示尚未就绪,释放旧目标监听并撤除固钉状态,不退回 window。响应式 ref 就绪或替换后自动同步;非响应式目标变化可调用已有 `updatePosition()` 重新读取。 | 事件 | 载荷 | 时机 | | --- | --- | --- | | change | affixed: boolean | 实际固钉状态翻转时;同一状态的滚动不重复通知 | | 插槽 | 说明 | | --- | --- | | default | 固钉内容,保留完整 VNodeChild 和节点身份 | | AffixRef | 说明 | | --- | --- | | updatePosition(): void | 合并到下一帧重新测量当前目标和内容 | 没有新增实例方法。模板 ref 可声明为 `ref(null)`。 ## 原生属性与当前配置 根是外层占位测量 div,原生 class/style、id、data、ARIA 和监听器只落此处。class/style 使用 Vue 的字符串、数组和对象合并,调用者样式覆盖 `ConfigProvider.components.affix.style`;这些字段不另声明成组件 Props。固钉层与占位层是内部定位节点。 `getPrefixCls`、组件配置和主题读取当前 Provider。唯一组件 Token 是 `zIndexPopup`,默认由 `zIndexBase + 10` 派生;替换、撤除和显式 0 均作用于实际固钉层。 ```vue 工具栏 ``` ## 几何与资源 保留顶部/底部的亚像素比较与外层布局测量基准。顶部条件优先于底部条件,并非删除另一个条件。固定宽度跟随外层可用宽度;内容保留自然高度,其真实尺寸通过已有 ResizeObserver 同步占位,支持增长和缩小,不重挂内部输入。 只在挂载后测量和绑定。监听当前目标、影响目标或占位层位置的滚动祖先及目标所属窗口的滚动;外页或嵌套祖先滚动移动目标后,顶部和底部固钉都按当前位置更新。滚动事件保持逐帧合并与同位置快路径;内容/容器的尺寸通知走完整测量。换目标、目标变为空和卸载释放这些监听、观察及待执行帧,SSR 不调度这些副作用。没有为无尺寸/滚动/显式更新信号的任意位置重排增加观察或轮询。 ## Demo basic、offset-bottom、on-change、target、update-position;原有几何与 s54 监听幂等回归保留。统一九维与发布验收另行执行。 ## 基础 (basic) 最简单的用法:滚动到 `offsetTop` 之后,按钮固钉在顶部。 固钉时组件会渲染一个**等高占位层**(`aria-hidden`),避免页面布局跳动; 且**只有此时**内层才有 `apollo-affix` 类名(`position: fixed`)。 ### basic.vue ```vue ``` ## 固定在底部 (offset-bottom) `offsetBottom` 与 `offsetTop` **互斥**:两者都传时只有 `offsetTop` 生效 (antd 的 `internalOffsetTop` 互锁推导,见 `docs/analysis/affix.md` §3)。 ### offset-bottom.vue ```vue ``` ## 固钉状态改变回调 (on-change) `@change` 只在状态**翻转**时触发(连续固钉不会重复发)。 Vue 侧是 `emit('change', affixed)`,模板上写 `@change` —— antd 的 `onChange` prop 不移植成 prop(规则 C19)。 ### on-change.vue ```vue ``` ## 滚动容器 (target) `target` 是一个**返回元素或 `window` 的函数**(不是元素本身)。 换绑 `target` 时,旧 target 上的监听也会被解绑。 ⚠️ 固定在容器底部时,偏移量是「容器可视区底边到**视口**底边的距离」参与计算 (`getFixedBottom` 用 `window.innerHeight`,不是容器高度)。 ### target.vue ```vue ``` ## 手动更新位置 (update-position) `ref` 只暴露 `updatePosition`(与 antd 的 `useImperativeHandle` 一致): 内容尺寸或布局在程序里变化后,手动触发一次重新测量。 尺寸变化通常由内部的 `ResizeObserver` 自动捕捉,无需手动调用。 ### update-position.vue ```vue ``` --- # Alert UI version: 0.1.9 Source commit: b6578306f58bf0918d0f4cb8519cf4cf1a900b15 Page: https://apollocmh.github.io/apollo-design-ui/components/alert 在页面中展示需要关注的信息;支持完整 Vue 内容插槽和原生关闭按钮。全部15个实际示例见 [`demo/`](https://github.com/apollocmh/apollo-design-ui/tree/b6578306f58bf0918d0f4cb8519cf4cf1a900b15/packages/ui/src/alert/demo)。 ## Props | 参数 | 说明 | 类型 | 默认值 | | --- | --- | --- | --- | | type | 提示类型 | `'success' \| 'info' \| 'warning' \| 'error'` | banner 时 warning,否则 info | | variant | 显式值优先于当前 `components.alert.variant` | `'outlined' \| 'filled'` | outlined | | title | 标题文本;富内容走 #title | `string` | — | | message | 废弃标题别名,title 未传时使用 | `string` | — | | description | 描述文本;富内容走 #description | `string` | — | | showIcon | 是否显示图标;显式 false 抑制 banner 默认图标 | `boolean` | banner 时 true,否则 false | | banner | 顶部通告形态 | `boolean` | false | | closable | boolean 或关闭配置;对象恒可关,当前 Provider 可给默认值 | `boolean \| AlertClosable` | false | | closeIcon | 遗留标量图标,推荐 #closeIcon 或 closable.closeIcon | `string \| number \| boolean \| null` | — | | closeText | 废弃关闭文案,推荐 #closeIcon | `string` | — | | afterClose | 遗留完成回调,推荐 @after-close | `() => void` | — | | prefixCls | DOM 类名前缀;自定义前缀需预载对应静态 CSS | `string` | apollo-alert | | id / role | 实际根 div 的属性 | `string` | role=alert | | classNames / styles | root/icon/section/title/description/actions/close;对象或读取当前合并 props 的函数 | `AlertSemanticValue<…>` | — | `class`、`style`、tabindex、ARIA/data、普通原生监听器和 once 等修饰符落在实际根 div;`nativeElement` 指向该节点。`title` 已是内容 prop,不另作同名原生提示属性。原生根事件使用 DOM Event;onClick/onMouseenter/onMouseleave 为对应监听器写法。 语义函数的 `props` 包括当前解析后的 type、variant、prefixCls、role、图标显示和关闭开关;role 默认 alert,显式值优先。 Provider 四类图标的 null/undefined 沿用默认图标回退,默认图标按装饰内容处理;自定义图标语义由内容负责。 ## Slots | 插槽 | 说明 | | --- | --- | | #title | 完整标题内容,存在则覆盖 title/message,包括有意为空。 | | #description | 完整描述;空内容不回退,且不保留 with-description 布局。 | | #icon | 完整类型图标内容;空槽抑制默认图标,showIcon=false 仍优先。 | | #action | 完整操作内容,支持多个原生操作节点。 | | #closeIcon | 关闭按钮内的文本/图标;存在则覆盖所有图标配置,空槽不回退。 | 五个槽均在当前 render 读取,支持条件添加/移除、Fragment 与0。没有 default→title 的隐式通道。关闭内容优先级为 #closeIcon、closable.closeIcon、closeText、遗留 closeIcon、Provider对象图标、Provider closeIcon、默认图标;配置值按是否提供判定,0/false/null/空串不被默认图标覆盖。 ## Events 与关闭状态 | 事件 | 载荷与时机 | | --- | --- | | close | 实际关闭按钮 click 的 MouseEvent,包含原生 Enter/Space 激活;每实例接受一次关闭请求。 | | after-close | 内部关闭完成并移除后通知一次;禁动效和减少动画也完成。 | onClose/onAfterClose 是事件监听器的程序化写法。`closable.onClose/afterClose` 保留业务配置能力,不能抑制 Vue 事件;同一函数同时作为配置与监听器时不重复调用。配置 afterClose 优先于遗留 plain afterClose。关闭按钮默认可访问名称为 Close,可用 closable 的 aria-label/aria-labelledby 定义业务名称;其 aria/data 落在关闭按钮,根 ARIA 仍属根。 关闭是内部一次性状态,没有 open/visible/v-model 或取消钩子。父级通过 v-if/key 控制挂载和重新显示;更改 closable 不重新打开已关闭实例。父级在 @close 中直接卸载时,不会冒充内部关闭完成事件。保留遗留 closeText 真值触发可关闭的既有优先级;显式 closable boolean 决定通常关闭开关。 ## Ref `AlertRef.nativeElement: HTMLDivElement | null`,关闭完成或卸载后为 null。 ## ErrorBoundary `Alert.ErrorBoundary` 与 `AlertErrorBoundary` 为同一有类型的组件。完整默认 slot 是健康内容,不额外包装 DOM;无 v-model、reset 方法或公开 expose。通过父级 key 重挂可恢复。 | 参数 | 说明 | 类型 | | --- | --- | --- | | title / message | 错误标题数据,缺省使用 String(error);message 为旧别名 | `VNodeChild` | | description | 错误描述数据,缺省以 pre 展示 Vue 错误阶段信息 | `VNodeChild` | | id | 错误回退 Alert 的 id | `string` | Vue onErrorCaptured 捕获实际后代的 setup/渲染/生命周期及所属事件错误并阻断上抛,包括抛出0/false/null/undefined。边界自身或脱离 Vue 调用链的错误不属于此边界。class/style/ARIA/native attrs 的原生落点是错误回退 Alert,健康 Fragment 不分配这些 attrs 到任意业务子节点。 默认错误详情为名为 Error details 的可聚焦 region;窄视口下支持原生键盘横向滚动。提供自定义 description 数据时,其交互与语义由该内容负责。 ## Theme | Token | 作用 | 默认来源 | | --- | --- | --- | | borderRadius | 圆角 | borderRadiusLG | | withDescriptionIconSize | 带描述图标尺寸 | fontSizeHeading3 | | defaultPadding | 普通内边距 | paddingContentVerticalSM + 横向12px | | withDescriptionPadding | 描述内边距 | paddingMD / paddingContentHorizontalLG | 最近 `theme.components.Alert` 的四字段与当前 Alias 实时消费,移除覆盖恢复当前主题。原生根 `--apollo-alert-*` 变量优先,默认/暗色/紧凑/组合保持作用域;关闭遵循 theme.token.motion 和 prefers-reduced-motion。 显式空 ThemeProvider 仍是最近的主题来源,恢复默认 Alias 和四个 Token;其下未配置主题的 ConfigProvider 延续该来源。没有主题来源的 ConfigProvider 不写组件主题变量,页面 CSS 的暗色/紧凑作用域继续生效。 迁移与验证范围见 `docs/migrations/alert-contracts.md`、`docs/audit/2026-10-29-alert-contract-audit.md`。 ## 基本 (basic) 最简单的用法,适用于简短的警告提示。 ### basic.vue ```vue ``` ## 四种样式 (description) 共有四种样式 `success`、`info`、`warning`、`error`。 ### description.vue ```vue ``` ## 可关闭的警告提示 (closable) 显示关闭按钮,点击可关闭警告提示。`@close` 接收真实的原生 `MouseEvent`;关闭完成使用 `@after-close`。 ### closable.vue ```vue ``` ## 顶部公告 (banner) 页面顶部通告形式,默认有图标且 `type` 为 'warning'。 ### banner.vue ```vue ``` ## 可关闭的警告提示 (icon) 可口的图标让信息类型更加醒目。 ### icon.vue ```vue ``` ## 自定义图标 (custom-icon) 可口的图标让信息类型更加醒目。 ### custom-icon.vue ```vue ``` ## 自定义操作项 (action) 可以在右上角自定义操作项。 ### action.vue ```vue ``` ## 填充态 (filled) 通过 `variant="filled"` 隐藏边框。 ### filled.vue ```vue ``` ## 平滑地卸载 (smooth-closed) `@close` 通知原生关闭请求,`@after-close` 在内部关闭完成后通知父级。减少动画偏好或 `theme.token.motion=false` 时也会完成移除并发出一次完成事件。Alert 没有受控 open/visible 模型;通过父级 `v-if` 重新挂载可再次显示。 ### smooth-closed.vue ```vue ``` ## 语义化的 DOM 结构样式 (style-class) 通过 `classNames` 和 `styles` 传入对象/函数可以自定义 Alert 的语义化结构样式。 ### style-class.vue ```vue ``` ## 标题对齐 (custom-title-alignment) 未设置 `description` 时,Alert 会让图标、内容、操作区和关闭按钮作为整体垂直居中。 若标题可能换行并希望元素与标题首行对齐,可以通过语义化 `styles` 自行调整。 ### custom-title-alignment.vue ```vue ``` ## 轮播的公告 (loop-banner) 配合跑马灯实现消息轮播通知栏(antd 用 react-fast-marquee,这里用等价 CSS 动画)。 ### loop-banner.vue ```vue ``` ## 错误边界 (error-boundary) 以 Vue `onErrorCaptured` 捕获实际后代的渲染、setup、生命周期及所属事件错误;边界自身和脱离 Vue 调用链的错误不属于此边界。示例切换后代的渲染状态后抛错,以父级 key 重新挂载边界恢复内容,不新增 reset 方法。 ### error-boundary.vue ```vue ``` ## 内容插槽优先级 (content-slots) 同名 slot 存在时优先于内容 prop,明确空内容不会回退。移除条件 slot 后恢复 prop。Alert 的 title/description 与 CollapsePanel 的 header 使用同一存在优先规则;面板标题视觉为空时保留 Toggle panel 的可访问名称,切换标题不会重建面板中的输入状态。 A present slot overrides its content prop, including intentionally empty content. Removing a conditional slot restores the prop. Alert title/description and CollapsePanel header follow the same presence rule; the visually empty panel header retains an accessible Toggle panel name, and header changes preserve panel input state. ### content-slots.vue ```vue ``` ## 组件 Token (component-token) 通过当前 `theme.components.Alert` 设置圆角、普通内边距、带描述内边距和描述图标尺寸。切换回默认值时移除覆盖,输入值与焦点随原生节点保留。根元素显式 `--apollo-alert-*` 变量仍优先于 Provider;默认与紧凑算法的内边距来自当前 Alias Token。 Use the current `theme.components.Alert` values for all four tokens. Removing the overrides restores the source theme without remounting the editor. Explicit root CSS variables take precedence over Provider tokens. ### component-token.vue ```vue ``` --- # Anchor UI version: 0.1.9 Source commit: b6578306f58bf0918d0f4cb8519cf4cf1a900b15 Page: https://apollocmh.github.io/apollo-design-ui/components/anchor # Anchor 锚点 使用原生链接展示目录,并根据实际滚动容器中的小节位置更新高亮。支持 items 数据和 Vue 默认槽组合,两者共享同一滚动、指示条及 Affix 链。 ```vue ``` ## Anchor Props | Prop | 说明 | 类型 | 默认值 | | --- | --- | --- | --- | | items | 递归链接数据;存在默认槽时由槽覆盖,空槽也会有意盖住数据 | AnchorLinkItemProps[] | — | | direction | 导航排列方向 | vertical \| horizontal | vertical | | offsetTop | Affix 顶部偏移及 wrapper 最大高度计算,也作为滚动偏移后备 | number | — | | bounds | 当前位置命中容差 | number | 5 | | targetOffset | 滚动落点及当前位置检测偏移,优先于 offsetTop | number | — | | affix | 是否使用 Affix;对象配置保留动态 offsetBottom/prefixCls | boolean \| AnchorAffixConfig | true | | showInkInFixed | 非 Affix 模式仍显示指示条 | boolean | false | | getContainer | 当前实际滚动容器;未传依次取 Provider.getTargetContainer 和 window | () => HTMLElement \| Window \| null \| undefined | — | | getCurrentAnchor | 纯高亮映射,接收原始 href,移除后恢复原始值;不改事件载荷 | (activeLink: string) => string | — | | replace | 使用 replaceState;单条链接配置优先 | boolean | false | | prefixCls | 当前组件前缀,也作为 Link 的默认前缀 | string | apollo-anchor | | classNames | root/item/itemTitle/indicator 语义类名,或接收 { props } 的函数 | AnchorSemanticClassNames \| function | — | | styles | 同名语义样式,使用 Vue CSSProperties,或接收 { props } 的函数 | AnchorSemanticStyles \| function | — | getContainer 返回空值表示 pending,清除旧滚动监听和活动检测,不回退 window。响应式模板 ref、Provider 替换和偏移变化均重新同步当前链路。 ## 所属事件 | 组件/事件 | 载荷 | 说明 | | --- | --- | --- | | Anchor change | currentActiveLink: string | 原始 href;映射仅影响高亮,不改该载荷 | | Anchor click | event: MouseEvent, link: AnchorLinkInfo | 选择、滚动及历史记录操作前通知 | | AnchorLink click | event: MouseEvent, link: AnchorLinkInfo | 当前链接的同一原生事件,先于 Anchor 汇总通知 | `link` 包含 `{ href, title }`,title 保留完整内容。任意 click 监听器调用 `preventDefault()` 都会取消默认选择、滚动与历史操作。只通过 emits 通知,不重复手调同名监听器;模板用 `@click`/`@change`,程序调用仍使用自然的 onClick/onChange listener。 修饰键、非主按钮、download、新浏览上下文及真正外链保持浏览器原生路径。普通同页片段使用所属文档解析,支持鼠标和原生 Enter 激活;不会引入额外箭头键或焦点模型。显式 replace 对同页片段使用 replaceState,对普通外部 URL 保留 location.replace 行为。 ## 数据项、Link 与插槽 | 数据字段 | 说明 | | --- | --- | | key | items 中必需的 string/number 业务 key | | href | 必需的原生链接地址 | | title | items 中必需的 VNodeChild,支持 0、空值、数组和组件节点 | | target | 原生 a.target | | className | 数据项及 Link 的既有 item 类名 | | replace | 覆盖 Anchor 的历史替换配置 | | targetOffset | 单条滚动与检测偏移,优先于组件偏移 | | prefixCls | 单条 Link 的显式前缀 | | children | 仅 items 数据使用的递归子项;水平导航不渲染嵌套项 | AnchorLink(也可使用 Anchor.Link)的 href 必需,title 数据可选,以支持原生 #title。没有 children prop,子链接通过默认槽表达。 | 组件/槽 | 职责 | | --- | --- | | Anchor default | 合法 Vue 链接组合,存在即优先于 items;条件空槽不会退回数据 | | AnchorLink title | 实际 a 的完整内容,存在即覆盖 title 数据,含空槽和 0 | | AnchorLink default | 嵌套子链接,沿用垂直导航职责 | Anchor 与 Link 没有公开实例控制 API,不新增 v-model。Affix 保留自己的 change 与 updatePosition 职责。 ## 原生 attrs、Provider 与 Token Anchor 原生 attrs/class/style 落实际 wrapper(不落外层 Affix),合并 Provider → 当前组件语义样式 → 原生 attrs。Link 的 class/style/data/id 等既有根 attrs 保留在 item wrapper;aria-*、tabindex、focus/keyboard 原生监听落可操作的 a。活跃链接默认带 `aria-current="location"`。条件内容、同 key 数据替换与配置变化保留原节点和焦点。 当前 Provider 的前缀、方向、组件配置与主题动态生效。Link 默认继承 Anchor 当前前缀,显式 Link 前缀仍优先;方向通过原生 dir 消费,逻辑 CSS 随之更新。两个组件 Token 是 linkPaddingBlock(默认 paddingXXS)和 linkPaddingInlineStart(默认 padding),投影到实际消费层;替换、撤除和显式 0 均可用,既有全局别名继续参与派生。 ## 资源与迁移 监听只在挂载后存在;滚动动画在新目标、配置变更、换容器和卸载时取消。链接注册按实例归属,重复 href 的一个实例移除不会删除其它实例。指示条跟随当前方向、内容与真实尺寸更新,观察和帧在卸载释放;SSR 不启动浏览器副作用。没有新增无信号位置轮询、路由适配或受控高亮模型。 onClick/onChange 迁为 owned emits;删除关于“多参数不能 emits”的旧判断。默认槽不再因上游习惯发弃用告警;原 children 伪 prop 使用默认槽,内容使用 #title。自定义 Anchor 前缀现在同时控制 Link 默认类名,以保证指示条链一致。历史 DOM 参考保留,只精确登记这条前缀及原生 dir 差异。 ## Demo basic、horizontal、onChange、onClick、replace、target-offset、target-offset-per-link、customize-highlight、static、style-class、component-token、bounds。组件 Token Demo 使用真实 ConfigProvider.components.Anchor。 ## 组件 Token (component-token) 通过包裹类覆盖 `--apollo-anchor-link-padding-block` 与 `--apollo-anchor-link-padding-inline-start`,切换密度即可实时调整锚点链接的内边距。 ### component-token.vue ```vue ``` ## 边界阈值 (bounds) 通过 `bounds` 调整锚点命中的顶部容差,配合 `getContainer` 指定内层滚动容器,滚动时即可观察高亮变化。 ### bounds.vue ```vue ``` ## 静态锚点 (static) 设置 `affix={false}` 后锚点随文档流排列、不固钉,但仍会根据滚动容器高亮当前小节。 ### static.vue ```vue ``` ## 语义化样式 (style-class) 通过 `classNames` 定制锚点条目、标题与指示条,并用 `styles.itemTitle` 调整标题字距。 ### style-class.vue ```vue ``` ## basic (basic) 将锚点绑定到右侧独立滚动容器。点击 Section B/C 或滚动内容,观察定位和高亮。 ### basic.vue ```vue ``` ## customize-highlight (customize-highlight) getCurrentAnchor 只改写高亮:始终突出 Section B,点击后仍滚动到真实目标。 ### customize-highlight.vue ```vue ``` ## horizontal (horizontal) 横向锚点配合独立滚动内容;点击各小节或手动滚动,观察底部指示条。 ### horizontal.vue ```vue ``` ## onChange (onChange) 滚动或点击当前示例内的锚点,读取真实 change 事件。每个示例使用独立的目标 ID。 ### onChange.vue ```vue ``` ## onClick (onClick) 点击锚点记录链接信息,默认滚动与浏览器历史继续生效。业务需要拦截时可在回调内调用 preventDefault()。 ### onClick.vue ```vue ``` ## replace (replace) 点击示例内锚点时使用 replaceState;后退返回上一页而不是上一个锚点。 ### replace.vue ```vue ``` ## target-offset (target-offset) 目标滚动到容器顶部下方 60px;targetOffset 优先于 offsetTop。 ### target-offset.vue ```vue ``` ## target-offset-per-link (target-offset-per-link) 每条链接独立设置 targetOffset,点击小节比较 0、120 与 60px 的落点。 ### target-offset-per-link.vue ```vue ``` --- # App UI version: 0.1.9 Source commit: b6578306f58bf0918d0f4cb8519cf4cf1a900b15 Page: https://apollocmh.github.io/apollo-design-ui/components/app 为子树提供独立的 Message、Notification 和 Modal 服务,并为页面提供统一根样式。 ## 代码演示 见 [`demo/`](https://github.com/apollocmh/apollo-design-ui/tree/b6578306f58bf0918d0f4cb8519cf4cf1a900b15/packages/ui/src/app/demo):获取三个服务,以及替换当前消息和通知默认配置。 ## API | Prop | 说明 | 类型 | 默认值 | |---|---|---|---| | prefixCls | 当前宿主的类名前缀 | `string` | `apollo-app` | | component | 原生宿主;`false` 时只渲染内容及服务 holder | `'div' \| 'section' \| 'main' \| 'span' \| false` | `'div'` | | message | Message hook 配置,沿嵌套 App 合并 | `MessageConfigOptions` | — | | notification | Notification hook 配置,沿嵌套 App 合并 | `NotificationConfig` | — | 默认槽接受完整 Vue 内容,保留 `0`、数组、条件内容和显式空内容。App 没有所属事件、v-model 或命令式组件 ref 方法。根 `class`、`style`、原生属性及事件监听器作用于实际宿主;Provider 的 `components.app.className/style` 先合并,局部原生样式优先。 `component=false` 没有 attrs 落点,开发期会对已传入的原生 attrs 给出诊断,不将它们挪到子节点或浮层。改变宿主遵循 Vue 的原生子树替换规则;三个服务的 holder 是宿主的稳定同级节点,不随宿主替换。 ### useApp 在 App **后代组件的 setup** 中调用具名 `useApp()` 或 `App.useApp()`: ```ts const { message, notification, modal } = App.useApp(); const close = message.loading('处理中', 0); close.then((terminated) => console.log(terminated)); const confirm = modal.confirm({ title: '确认操作?' }); confirm.then((accepted) => console.log(accepted)); ``` 返回对象的实际类型为 `UseAppProps`:`message: MessageInstance`、`notification: NotificationInstance`、`modal: ModalHookAPI`。服务方法与各自 hook 相同,支持其真实返回值和业务回调。后代 setup 中的提前调用由各自 holder 队列接收。每个 App 拥有独立实例,嵌套 App 使用最近的 provider;App 卸载时终止其工作并释放浮层及资源。 没有 App provider 或 Vue 注入上下文时,`useApp()` 明确抛出 `[Apollo App] useApp() requires an App provider.`,不再返回假空 API。调用位置应在后代 setup,不能在创建 App 的父组件 setup 中读取尚不存在的子级 provider。 ### 配置、主题与迁移 `message`、`notification` 分别按字段浅合并父 App 和本地对象,本地字段优先。替换配置会移除旧对象独有字段;撤除本地 prop 会恢复父 App 的当前配置。注入对象引用保持稳定,后代和 holder 都读取当前配置。已有消息的具体更新职责以相应服务 API 为准。 App 没有自有 Component Token,样式消费全局 `colorText`、`fontSize`、`lineHeight`、`fontFamily` 变量;当前 Provider 的方向、前缀及样式替换和撤除都会反映到宿主。 旧文档中的 `className/rootClassName` 改用原生 `class`;`style` 使用原生 StyleValue。AppConfig 和 useApp 不再使用任意字段或占位方法类型。导出 `AppProps`、`AppComponentType`、`AppConfig`、`AppSlots`、`UseAppProps`。 ## basic (basic) 获取 `message`、`notification`、`modal` 实例。 ### basic.vue ```vue ``` ## config (config) 对 `message`、`notification` 进行配置。切换默认值后继续使用同一组 App 服务。 ### config.vue ```vue ``` --- # AutoComplete UI version: 0.1.9 Source commit: b6578306f58bf0918d0f4cb8519cf4cf1a900b15 Page: https://apollocmh.github.io/apollo-design-ui/components/auto-complete 可自由输入文本,并从候选中选择的自动完成输入框。候选、键盘、无障碍与主题由 Select 共享引擎负责。 ## 代码演示 见 [`demo/`](https://github.com/apollocmh/apollo-design-ui/tree/b6578306f58bf0918d0f4cb8519cf4cf1a900b15/packages/ui/src/auto-complete/demo)。基础示例包含三个模型与键盘回填;候选支持当前条件选项和自定义内容。 ## API ### Props | 参数 | 说明 | 类型 | 默认值 | |---|---|---|---| | value / defaultValue | 受控值 / 初值;支持 `v-model:value`,输入和选择输出原始值 | `SelectValue` | — | | searchValue | 搜索词;支持 `v-model:search-value` | `string` | `''` | | open / defaultOpen | 受控开合 / 初值;支持 `v-model:open` | `boolean` | `false` | | options | 候选数据;显式 `[]` 也优先于选项插槽 | `DefaultOptionType[]` | — | | dataSource | 已废弃;文本、`{ value, text? }` 或 Option/OptGroup VNode,保留已有映射 | `DataSourceItemType[]` | — | | placeholder | 占位文本;富内容使用 `#placeholder` | `string` | — | | allowClear | 清除按钮及图标/可访问名配置 | `SelectProps['allowClear']` | `false` | | disabled / size / variant / status | 同 Select 的禁用、尺寸、变体与校验状态 | — | — | | showSearch | 搜索算法配置;仅含 `filterOption/filterSort/optionFilterProp/autoClearSearchValue` | `boolean \| SelectSearchConfig` | `true` | | filterOption | 过滤算法,第二参为实际候选;`false` 保留全部候选 | `boolean \| (text, option) => boolean` | — | | defaultActiveFirstOption | 默认激活首项;`false` 时等待键盘或鼠标激活 | `boolean` | `true` | | backfill | 键盘导航时预览候选值;Enter/Tab 或点击确认时提交,不因预览发送值或搜索通知 | `boolean` | `false` | | autoFocus / maxLength / id / tabIndex | 实际输入框的自动聚焦、长度、标识与 Tab 顺序 | — | — | | listHeight / listItemHeight / virtual | 候选列表尺寸和虚拟滚动 | 同 Select | — | | popupMatchSelectWidth / placement / getPopupContainer | 浮层宽度、位置与容器(支持 ShadowRoot) | 同 Select | — | | classNames / styles | 对象或 `({ props }) => 对象`;语义面为 `root/prefix/input/placeholder/content/clear/popup.{root,list,listItem}` | — | — | 受控更新是提议,父级拒绝后保持接受值,撤控保留最后接受值。键盘回填是临时预览:鼠标激活不回填;接受新值、输入、实际关闭、撤销 `backfill` 或禁用时清除。关闭再打开不会恢复旧预览。`0` 是有效候选值。 默认插槽在 render 中读取并分类,支持条件插槽、`v-if/v-for` 与动态分组;沿用已交付的选项缓存与响应性。`dataSource` 中的富文本是数据,顶层内容扩展使用插槽。单个自定义 input/textarea 仍未提供替换协议,会给出明确警告;当前没有 AutoComplete PurePanel 公共入口。 ### Events | 事件 | 参数与说明 | |---|---| | change / update:value | `(value, option)` / `(value)`;输入、选择或清除提交值 | | search / update:searchValue | `(text: string)`;输入搜索通知 / 搜索模型提议,候选选择同步搜索模型;外部 value 的派生同步不重复通知 | | select / deselect | `(value: string \| number, option)`;候选选择通知;combobox 没有多选取消操作 | | openChange / update:open | `(open: boolean)`;开合通知与模型提议 | | focus / blur | `(event: FocusEvent)`;实际控件焦点 | | clear | 清除操作 | | popupScroll / inputKeyDown | `(event: Event)` / `(event: KeyboardEvent)` | 通知使用 typed emits。`h()` 的 `onSearch/onChange` 等是 Vue 监听器属性,不再作为组件回调 Props 手动调用。`onDropdownVisibleChange` 直接迁为 `@openChange`;`showSearch.onSearch/searchValue/searchIcon` 分别迁为 `@search`、顶层搜索模型与 `#searchIcon`。 ### Slots `default`(Option/OptGroup 数据)、`prefix`、`placeholder`、`notFoundContent`、`clearIcon`、`loadingIcon`、`searchIcon`、`labelRender="{ value, label }"`、`optionRender="{ option, index }"`、`popupRender="{ menu }"`、`menuItemSelectedIcon="{ value, disabled, isSelected }"`、`suffixIcon="{ searchValue, open, focused, showSearch, loading }"`。 当前插槽动态转发,提供空插槽表示有意隐藏,数字 `0` 正常显示。未提供 suffix 插槽时默认无箭头;`#searchIcon/#loadingIcon` 在对应状态可单独定制。 ### Attrs、Provider 与主题 原生 `class/style/data-*` 落选择器根,`id/tabindex/role/aria-*` 落实际输入框。attrs 在 render 中读取,类名合并一次,字符串/数组样式和移除均生效;透传不能覆盖内部 combobox 模式或通知处理。 当前 `components.autoComplete` 的类名、样式、语义与搜索/清除配置可响应式替换或移除;Select 与 AutoComplete 的专属组件配置相互隔离;全局尺寸、方向与 Form/Compact 上下文继续由共享引擎读取。主题完全使用 Select Token,根与 Teleport 浮层同步,无独立 AutoComplete Token。 ### Expose | 成员 | 说明 | |---|---| | focus(options?: FocusOptions) / blur() | 操作真实输入框 | | scrollTo(arg?) | 数字为像素坐标;条目使用 `{ index?, key?, align? }`;已有 `{ top }` 坐标形态继续支持 | | nativeElement | 真实选择器根 `HTMLElement \| null` | 保留的样式别名:`dropdownMatchSelectWidth` → `popupMatchSelectWidth`,`popupClassName/dropdownClassName` → `classNames.popup.root`,`dropdownStyle` → `styles.popup.root`。内容函数使用 `#popupRender` 等原生插槽。 ## 自定义选项 (custom) 使用 `#optionRender` 插槽渲染带 `Tag` 的自定义选项,同时保留 AutoComplete 的输入与筛选。 ### custom.vue ```vue ``` ## 表单禁用 (disabled-in-form) `Form` 的 `disabled` 会级联禁用内部 `AutoComplete`,用 `Switch` 切换即可看到启用/禁用状态。 ### disabled-in-form.vue ```vue ``` ## 自定义清除 (customize-clear) 开启 `allowClear` 后用 `#clearIcon` 替换清除图标,`onClear` 回调实时统计清空次数。 ### customize-clear.vue ```vue ``` ## 自定义候选面板 (render-panel) 通过 `#popupRender` 拿到原始候选菜单 `menu`,在它前后追加面板标题、分隔线与关闭按钮。 ### render-panel.vue ```vue ``` ## allow-clear (allow-clear) `allowClear` 与自定义清除图标(`#clearIcon` 插槽)。 ### allow-clear.vue ```vue ``` ## and-select (and-select) AutoComplete 与 Select 组合使用(同一份 options 数据源)。 ### and-select.vue ```vue ``` ## basic (basic) 不自定义过滤条件(`showSearch.onSearch` 驱动候选)+ 受控模式。 第二个输入使用三个模型;开启 `backfill` 后,键盘导航只预览候选,Enter/Tab 或点击确认时提交值。 ### basic.vue ```vue ``` ## certain-category (certain-category) `showSearch.onSearch` 驱动候选更新(完成输入建议)。 ### certain-category.vue ```vue ``` ## non-case-sensitive (non-case-sensitive) 不区分大小写的过滤(`filterOption` 自定义)。 ### non-case-sensitive.vue ```vue ``` ## options (options) `options` 数据源(deprecated `ASelectOption` 子组件形态见 `AutoComplete.Option`)。 ### options.vue ```vue ``` ## status (status) `status="error"` / `"warning"` 校验状态。 ### status.vue ```vue ``` ## style-class (style-class) 语义化 `classNames` / `styles`(对象式与函数式变体)。 ### style-class.vue ```vue ``` ## uncertain-category (uncertain-category) 候选数量不确定(输入即搜索)。 ### uncertain-category.vue ```vue ``` ## variant (variant) `outlined` / `filled` / `borderless` / `underlined` 四种变体。 ### variant.vue ```vue ``` --- # Avatar UI version: 0.1.9 Source commit: b6578306f58bf0918d0f4cb8519cf4cf1a900b15 Page: https://apollocmh.github.io/apollo-design-ui/components/avatar 以图片、图标或字符代表用户或事物。静态头像不进入 Tab 顺序;有操作时由外层原生链接或按钮提供交互。 ## 代码演示 十个示例覆盖尺寸/形状、类型、动态字符与留白、徽标、分组、溢出计数、图片失败、隐藏后显示、响应式尺寸及当前组件 Token。`max-count` 的开关控制可见名额是否包含溢出指示器,Group 的 `max.count` 本身始终只计算可见子项。 ## Avatar Props | 参数 | 说明 | 类型 | 默认值 | |---|---|---|---| | prefixCls | 本组件类名前缀 | `string` | 当前 ConfigProvider | | shape | 本地形状优先于 Group | `'circle' \| 'square'` | Group → `'circle'` | | size | 本地尺寸优先于 Group 和全局尺寸;响应式表取当前匹配且已配置的最大断点 | `SizeType \| 'default' \| number \| ScreenSizeMap` | Group → `componentSize` → `'medium'` | | gap | 默认内容缩放时预留的左右空间,像素 | `number` | `4` | | src | 字符串图片地址或完整 VNode 数据;图片失败后显示 icon/default | `VNodeChild` | — | | srcSet | 原生图片 srcset,变化后会重试图片 | `string` | — | | draggable | 原生图片拖拽属性 | `boolean \| 'true' \| 'false'` | — | | icon | 图标 VNode 数据 | `VNodeChild` | — | | alt | 原生图片替代文本;默认装饰图像,需表达身份时填写名称 | `string` | `''` | | crossOrigin | 原生图片 crossorigin | `'' \| 'anonymous' \| 'use-credentials'` | — | | beforeFallback | error 事件后同步调用;返回 false 保留失败图片 | `(event: Event) => boolean \| void` | — | `class`、`style`、`id`、data/ARIA 和其他原生监听器落在稳定的 span 根;style 支持字符串、数组和对象,优先于尺寸、主题和 Provider 样式。文字内容在 SSR 即可见,挂载后随根和内容尺寸变化测量缩放。 ## Slots / Events | 插槽 | 内容 | |---|---| | image | 完整图片内容,存在时覆盖 src,包括有意为空的槽 | | icon | 无图片时的完整图标内容,存在时覆盖 icon 数据,包括空槽 | | default | 无图片/图标时的字符或完整业务内容 | | 事件 | 载荷 | 说明 | |---|---|---| | click | 原生 `MouseEvent` | 根点击一次发出一次;支持 `.once` 和合并监听器 | | error | 原生图片 `Event` | 加载失败时一次发出;监听器返回值不控制回退,取消使用 beforeFallback | ## AvatarGroup / Avatar.Group 两个入口指向同一个可安装组件。 | 参数 | 说明 | 类型 | |---|---|---| | prefixCls | 组类名前缀 | `string` | | size | 经当前上下文传给子头像,支持数字、0和响应式表;子头像可覆盖 | `AvatarSize` | | shape | 经当前上下文传给子头像 | `'circle' \| 'square'` | | max | `{count?, style?, popover?}`:可见项数、指示器样式和 Popover 配置 | `AvatarGroupMax` | `max.count` 不包含 `+N` 指示器,0/未设置/负数/非有限数不限量,正小数向下取整。默认槽的直接子项(含展开的 Fragment、忽略注释)参与计数;需要多头像时直接使用 `v-for`。不读取业务组件内部渲染结果。 溢出指示器拥有原生 button。默认保留 hover,同时支持点击和 Enter/Space;Escape 关闭并保留按钮焦点。显式 `focus` 和受控 `max.popover.open` 仍由 Popover 配置控制。`max.popover.content` 可覆盖浮层内容;`classNames` 对象/函数、styles、容器、触发方式和开关回调继续转发,`rootClassName` 是浮层配置类名。默认关闭销毁隐藏内容,可用 `destroyOnHidden:false` 保留内容状态。 组根原生 class/style/attrs 落在 div;两组件只暴露 `nativeElement`(span/div,可空)。没有头像业务 v-model 或额外实例方法。 ## Component Token 通过 `ConfigProvider :theme="{components:{Avatar:{…}}}"` 设置当前组件 Token,支持源替换与移除、嵌套 Provider 和四种算法。每个实例与溢出内容读取所属主题;本地 style CSS 变量可覆盖对应根。 | Token | 类型 | 默认来源 | |---|---|---| | containerSize / containerSizeLG / containerSizeSM | `number` | controlHeight / controlHeightLG / controlHeightSM | | textFontSize / textFontSizeLG / textFontSizeSM | `number` | fontSize | | iconFontSize / iconFontSizeSM | `number` | 平均字号 / fontSize | | iconFontSizeLG | `number \| string` | fontSizeHeading3 | | groupSpace | `number` | marginXXS | | groupOverlapping | `number`,允许负数 | -marginXS | | groupBorderColor | `string` | colorBorderBg | 开发版事件与 Group 旧别名的直接迁移见 [Avatar 迁移说明](https://github.com/apollocmh/apollo-design-ui/blob/master/docs/migrations/avatar-contracts.md)。 ## 基本 (basic) 五种尺寸与圆形/方形;图标使用完整VNode数据。 ### basic.vue ```vue ``` ## 类型 (type) 图片、完整VNode、自定义颜色、字符与图标。自定义颜色成对指定前景和背景。 ### type.vue ```vue ``` ## 自动调整字符大小 (dynamic) 切换姓名、配色和gap,观察文字随当前尺寸重新拟合。 ### dynamic.vue ```vue ``` ## 带徽标的头像 (badge) 组合徽标与头像。 ### badge.vue ```vue ``` ## 头像组合 (group) 组合直接头像、链接和Tooltip;max.count只计算可见子项,额外显示溢出按钮。 ### group.vue ```vue ``` ## maxCount 包含溢出元素 (max-count) 直接v-for渲染头像。开关只改变演示中预留的可见名额:两项加指示器,或三项加指示器;不改变max.count定义。 ### max-count.vue ```vue ``` ## 图片不存在时 (fallback) 本地无效图片数据触发真实error,回退到默认字符。自定义图片VNode自行管理其加载错误。 ### fallback.vue ```vue ``` ## 隐藏情况下计算字符对齐 (toggle-debug) 切换隐藏状态、头像尺寸和外层视觉缩放,验证恢复显示后的文字测量。 ### toggle-debug.vue ```vue ``` ## 响应式尺寸 (responsive) 根据当前匹配且已配置的最大断点调整尺寸;显示文字以便观察。 ### responsive.vue ```vue ``` ## 当前组件 Token (component-token) 通过当前 ConfigProvider 修改十二个已有 Avatar Token。开关移除覆盖,溢出按钮可用鼠标或 Enter/Space 打开,观察隐藏头像间距。 ### component-token.vue ```vue ``` --- # BackTop UI version: 0.1.9 Source commit: b6578306f58bf0918d0f4cb8519cf4cf1a900b15 Page: https://apollocmh.github.io/apollo-design-ui/components/back-top 返回页面顶部的操作按钮。 > ⚠️ 该组件在 antd 6.x 已废弃,请使用 `FloatButton.BackTop`。本实现为兼容保留。 ## 何时使用 - 当页面内容区域较长时,提供一个快速返回顶部的入口。 ## 代码演示 见 [`demo/`](https://github.com/apollocmh/apollo-design-ui/tree/b6578306f58bf0918d0f4cb8519cf4cf1a900b15/packages/ui/src/back-top/demo)(deprecated 组件在 antd 仅剩 basic)。 ## API | 参数 | 说明 | 类型 | 默认值 | |---|---|---|---| | visibilityHeight | 滚动超过该值才显示(px) | `number` | `400` | | duration | 回顶动画时长(ms;<=0 直落) | `number` | `450` | | target | 滚动容器 getter;可返回尚未挂载的模板 ref,引用变化时自动重绑 | `() => HTMLElement \| Window \| Document \| null` | `ownerDocument` | | prefixCls | 组件类名前缀 | `string` | `apollo-back-top` | ### 事件、插槽与实例 | 名称 | 契约 | |---|---| | `@click` | 回顶开始后触发一次,参数为原生 `MouseEvent`;支持 `.once` | | 默认插槽 | 完整按钮内容,支持文本、数字、多节点和 Fragment;显式空槽隐藏按钮,未提供则显示默认图标 | | `nativeElement` | 实例暴露的实际 `HTMLButtonElement \| null` | 根节点为 `type="button"` 的原生按钮,支持 Tab、Enter、Space 与焦点样式;不可见时不进入键盘顺序。 原生 `class` / `style`、`aria-*`、`data-*` 和原生监听器均落在按钮上。 默认图标使用名称“Back to top”;可用 `aria-label="返回顶部"` 本地化。自定义图标内容应提供可访问名称,不应嵌套按钮或链接。 `ConfigProvider.components['back-top']` 的 `className` / `style` 随配置替换和移除更新;根 `style` 优先。 `theme.components.BackTop.zIndexPopup` 控制层叠顺序,默认 `zIndexBase + 10`。主题 `motion: false` 或系统减少动态效果设置会关闭回顶动画。 ## 设计说明 - `visibilityHeight={0}` 恒显。 - 默认内容为 `-content > -icon`(VerticalAlignTopOutlined),自定义内容完整渲染在稳定的 `-custom` 宿主中;动效类属于宿主,不修改插槽 VNode。 - 视口 ≤ 768px / ≤ 480px 时右边界收窄(响应式断点)。 - 更换容器、重复点击和卸载都会取消先前回顶动画;滚动监听及待执行帧在离开容器时释放。 ## 开发期迁移(2026-10-30) 按 ADR 0007 直接修正旧 React DOM / 回调形态:根 `div` 改为原生按钮,默认 `div` 内容宿主改为 `span`,自定义内容增加稳定 `span` 宿主。依赖标签选择器或把按钮/链接放在默认槽内的调用方需调整;类名入口继续保留。 模板使用 `@click="handleClick"`;`h(BackTop, { onClick })` 仍以 `MouseEvent` 接收同一个事件。原来的首节点克隆改为完整默认槽消费,不需要手工包成单根。 此开发版修正无兼容层或弃用期,历史 DOM 基线保留,当前精确差异由本目录测试断言。 ## 基本 (basic) 向下滚动内容区域,按钮在超过 100px 后显示。`target` 使用可跟踪模板 ref 的 getter,`@click` 接收原生点击事件。按钮定位在示例容器内,并显示回顶次数。(已废弃,请使用 FloatButton.BackTop) ### basic.vue ```vue ``` --- # Badge UI version: 0.1.9 Source commit: b6578306f58bf0918d0f4cb8519cf4cf1a900b15 Page: https://apollocmh.github.io/apollo-design-ui/components/badge 图标右上角的圆形徽标数字。 ## 何时使用 - 一般出现在通知图标或头像的右上角位置,提示用户有消息或者有需要处理的项。 - 不强求数字一定要有确切的数值,也可以是文字或小红点。 ## 代码演示 见 [`demo/`](https://github.com/apollocmh/apollo-design-ui/tree/b6578306f58bf0918d0f4cb8519cf4cf1a900b15/packages/ui/src/badge/demo)(13 个,包含数字计数与模板富内容场景)。 | demo | 内容 | |---|---| | `basic` | 基本(count / showZero / 无 count) | | `no-wrapper` | 独立使用 | | `overflow` | 封顶数字 | | `dot` | 讨嫌的小红点 | | `change` | 动态(数字滚动) | | `link` | 可点击 | | `offset` | 位移 | | `size` | 大小 | | `status` | 状态点 | | `colorful` | 多彩徽标(13 预设色) | | `ribbon` | 缎带(Badge.Ribbon) | | `style-class` | 自定义语义结构的样式和类 | | `content-slots` | 可切换富内容、空插槽、数字计数与圆点 | ## API ### Badge | 参数 | 说明 | 类型 | 默认值 | |---|---|---|---| | prefixCls | DOM 类名前缀;任意前缀的 CSS 由调用方提供 | `string` | `apollo-badge` | | scrollNumberPrefixCls | 数字轨道类名前缀 | `string` | `apollo-scroll-number` | | count | 展示的数字(`null` 不显示;超出封顶显示 `+`) | `VNodeChild` | `null` | | overflowCount | 封顶值 | `number` | `99` | | dot | 只显示小红点,覆盖 count(含零值) | `boolean` | `false` | | showZero | 数值为 0 时是否显示 | `boolean` | `false` | | size | 尺寸(`default` 已废弃,等价 `medium`) | `'medium' \| 'small'` | `'medium'` | | status | 状态点 | `'success' \| 'processing' \| 'error' \| 'default' \| 'warning'` | — | | color | 自定义颜色(13 预设键走类名,其它色串走内联) | `string` | — | | text | 状态文本 | `VNodeChild` | — | | title | 指示器原生 title,含独立状态点;`null`/`false` 禁用,不传回落标量 count | `string \| null \| false` | — | | offset | 偏移 `[x, y]`:x → `inset-inline-end`,y → `margin-top` | `[number \| string, number \| string]` | — | | classNames / styles | 语义槽位(root / indicator) | — | — | Vue 原生 `class` / `style`(对象、字符串、数组)、id、ARIA、tabindex 和监听器落根 span;指示器样式用 `styles.indicator`。Badge 不声明业务 emits 或 v-model;原生事件只触发一次。状态与计数共用根,父级更新保留业务内容、草稿和所属焦点。 非标量 count(VNode、数组、Fragment、多根组件、文本节点)与 #count 共用原生指示器和完整内容路径,不克隆业务节点。语义类/样式、title、offset 作用于指示器,子节点保留自身属性与身份。Vue 空内容不产生空徽标,独立 text 不依赖 count 可见性;条件组件为空时隐藏空宿主,保留业务实例。 ### Badge 插槽 | 插槽 | 说明 | | --- | --- | | default | 被徽标包裹的内容 | | count | 静态富内容指示器;覆盖 count prop,不进行封顶或数字位滚动 | | text | 富文本状态文案;覆盖 text prop | 插槽按存在性优先,空结果隐藏对应内容;条件插槽移除后恢复 prop。`#count` 中的文本 `0` 按静态内容展示,`showZero` 和 `overflowCount` 控制数字 prop 分支;`dot` 仍优先于两种计数内容。富内容保留 indicator 样式、offset 与离场缓存,未显式设置 title 时不从 VNode 生成标题。数字滚动继续使用 count prop。 ### Badge.Ribbon | 参数 | 说明 | 类型 | 默认值 | |---|---|---|---| | prefixCls | DOM 类名前缀 | `string` | `apollo-ribbon` | | className | 丝带本体的独立类;根类使用 Vue class | `string` | — | | text | 丝带文本 | `VNodeChild` | — | | color | 颜色 | `string` | — | | placement | 挂靠角 | `'start' \| 'end'` | `'end'` | | classNames / styles | 语义槽位(root / indicator / content) | — | — | Ribbon 的 default 是被包裹内容,`#text` 是完整丝带内容。text 支持所有 VNodeChild,含数组、Fragment 和 0;插槽存在则优先,空槽不回退,条件槽移除后恢复 prop。原生 class/style 和其他 attrs 落 wrapper,丝带样式用 styles.indicator,文字样式用 styles.content。 ### Expose 与当前配置 BadgeRef / RibbonRef 只读 `nativeElement: HTMLElement | null` 指向当前实际根,卸载后为空。ConfigProvider.components.badge / ribbon 的配置、方向和前缀保持响应性;语义对象或函数替换、移除立即生效。配置字段 style 保留独立目标:Badge 状态独立模式为 root、其他为 indicator;Ribbon 为 indicator。它与组件原生 style attrs 不同,明确区域推荐 styles。 ## Theme ### Component Token(9 个) | Token | 默认值 | 说明 | |---|---|---| | indicatorZIndex | `auto` | 指示器 z-index | | indicatorHeight | `20px` | count 高度 | | indicatorHeightSM | `14px` | 小尺寸高度 | | dotSize | `6px` | 小红点尺寸 | | textFontSize | `12px` | 计数字号 | | textFontSizeSM | `12px` | 小尺寸计数字号 | | textFontWeight | `normal` | 计数字重 | | statusSize | `6px` | 状态点尺寸 | | paddingInline | `8px` | 多字符内边距 | 九值由当前 Alias 派生,`theme.components.Badge` 可覆盖;适用 0、配置替换和移除均生效,显式根 CSS 变量优先。size/数字轨道使用相同实际高度。系统 reduced-motion 下停用波纹、滚动和出入场动画。 普通实色 count / Ribbon 使用可读前景,不改变原预设背景;显式 indicator/content color 优先。覆盖渐变、透明背景或完整样式时由作者配对前景。数字动画的额外轨道不参与朗读;组件不自动创建 live region。offset 的数字/数字字符串按 px,带单位、百分比或表达式保留为 CSS 长度。 开发期根 style / 内容 / 数字和引用修正见 [迁移说明](https://github.com/apollocmh/apollo-design-ui/blob/b6578306f58bf0918d0f4cb8519cf4cf1a900b15/docs/migrations/badge-contracts.md)。原始参考证据保留,不作为 Apollo 公共用法的判据。 ## 基本 (basic) 简单的徽标展示,当 `count` 为 `0` 时默认不显示,但是可以使用 `showZero` 修改为显示。 ### basic.vue ```vue ``` ## 独立使用 (no-wrapper) 不包裹任何元素即是独立使用,可自定样式展示。 ### no-wrapper.vue ```vue ``` ## 封顶数字 (overflow) `overflowCount` 封顶数字,超过显示 `+`。 ### overflow.vue ```vue ``` ## 讨嫌的小红点 (dot) 没有具体的数字。`dot` 优先级高于 `count`。 ### dot.vue ```vue ``` ## 动态 (change) 展示动态计数、负号及数字滚动。动画轨道中的额外数字不参与朗读,系统 reduced-motion 下停止滚动过渡。 ### change.vue ```vue ``` ## 可点击 (link) 用 a 标签包裹即可获得链接语义。 ### link.vue ```vue ``` ## 位移 (offset) 设置偏移量,`[x, y]` 分别为水平(`inset-inline-end` 方向)与垂直偏移。 ### offset.vue ```vue ``` ## 大小 (size) `size="small"` 缩小徽标(`default` 为废弃用法,等价 `medium`)。 ### size.vue ```vue ``` ## 状态点 (status) 用于表示事态的状态,`processing` 会触发波纹动画。 ### status.vue ```vue ``` ## 多彩徽标 (colorful) 预设 13 种颜色(也可传自定义色串)。 ### colorful.vue ```vue ``` ## 缎带 (ribbon) 缎带徽标(`Badge.Ribbon`),支持预设色与自定义色、`start` / `end` 两个挂角。 ### ribbon.vue ```vue ``` ## 自定义语义结构的样式和类 (style-class) 通过 `classNames` / `styles` 定制语义结构(root / indicator)。按钮切换九个已有 Token、适用零值与默认恢复;方向改变时输入草稿保留。Vue 原生 class/style 控制根,指示器样式使用 styles.indicator。 ### style-class.vue ```vue ``` ## 模板内容与数字计数 (content-slots) `#count` 展示静态富内容,不执行数字封顶或数字位滚动;需要数字滚动时使用 `count` prop。Badge 和 Ribbon 的 `#text` 支持完整富文本。插槽存在则覆盖内容 prop,空插槽隐藏对应内容;移除插槽后恢复 prop。`dot` 优先于计数内容(含零值),离场保留上一帧内容,两个输入节点保持。 ### content-slots.vue ```vue ``` --- # BorderBeam UI version: 0.1.9 Source commit: b6578306f58bf0918d0f4cb8519cf4cf1a900b15 Page: https://apollocmh.github.io/apollo-design-ui/components/border-beam 沿 HTML 容器边框流动的装饰性描边。 ## API | 参数 | 说明 | 类型 | 默认值 | |---|---|---|---| | prefixCls | Effect 的完整类名及运行时 CSS 变量前缀 | `string` | Provider 前缀 + `-border-beam` | | color | 纯色或色标数组(0–100 映射到 0–70%,保留尾部淡出) | `string \| { color: string; percent: number }[]` | 主题主色渐变 | | count | 有限且 ≥1 时向下取整,其余回落 1 | `number` | `1` | | duration | 单圈秒数,有限且 >0 才生效,其余回落 6 | `number` | `6` | | lineWidth | 流光厚度,数字补 px | `number \| string` | 主题 `lineWidth` | | outset | 覆盖四边统一 inset;未传时分别跟随宿主边框宽度 | `number \| string` | — | | size | 流光头部长度,数字补 px | `number \| string` | `100px` | | classNames.effect | 每个装饰 Effect div 的类名 | `{ effect?: string }` | — | | styles.effect | 每个装饰 Effect div 的内联样式 | `{ effect?: CSSProperties }` | — | ## 插槽与原生 attrs 默认插槽接受 `VNodeChild`。单一 HTML 根元素可以被装饰,包括组件条件渲染或异步解析后的单根。注释、空白以及单根 Fragment 保留宿主;文本、SVG 和多个有效根完整透传,不绘制流光,也不添加布局容器。 原生 `class`、`style`、`data-*`、`aria-*` 和事件按 Vue 规则合并到选中的宿主 VNode。同名样式由宿主自身优先;组件宿主仍遵守该组件的 attrs 传递规则。原有 key、模板 ref、ref 数组、具名插槽和生命周期钩子由原调用方保有。要访问宿主元素或组件,请在子节点上放模板 ref;BorderBeam 不提供公开方法、事件或 v-model。 宿主自行提供定位上下文,通常设置 `position: relative`。Effect 继承圆角、不接收指针事件,并标记 `aria-hidden`。Effect 样式依次合并运行时变量、Provider `style`、Provider `styles.effect`、组件 `styles.effect`,后者优先。Provider 的 `className` 和 `classNames.effect` 仍是 Effect 配置。 可见宿主的边框宽度使用同一个 500ms 共享时钟采样,并读取实际所属文档。隐藏文档不读样式,恢复可见后立即补采样。没有 HTML 宿主即无采样订阅;更换宿主、迁移文档和卸载会清理相关资源。SSR 只保留内容,不创建 Effect 或定时器。减少动态效果偏好下隐藏流光。 ## 迁移 已删除组件的 `className` 和原先落在 Effect 的 `style` Props。宿主使用原生 `class`/`style`,装饰层使用 `classNames.effect`/`styles.effect`。Vue 更新宿主文本而移除装饰节点时,会重建装饰层,保留宿主身份与焦点。 ## 基础用法 (basic) 包裹任意内容,展示沿边框流动的流光。 ### basic.vue ```vue ``` ## 鼠标悬浮时显示 (hover) 通过状态控制流光的显示与隐藏。鼠标悬浮或键盘聚焦都可预览;装饰层透明度变化时保留同一宿主,避免切换 DOM 引起闪动。 Hover or focus the same host to preview the effect without remounting its content. ### hover.vue ```vue ``` ## 多条流光 (count) `count` 大于 1 时展示多条错相流动的流光。 ### count.vue ```vue ``` ## 自定义容器 (custom-container) 流光跟随宿主的圆角与边框(`border-radius: inherit`)。原生 `class/style` 修饰宿主,`styles.effect` 只修饰装饰层。 ### custom-container.vue ```vue ``` ## 渐变色 (customized-color) `color` 传色标数组(0–100 会线性映射到 0–70% 保留尾部淡出)。 ### customized-color.vue ```vue ``` ## 动画时长 (duration) `duration` 控制单圈时长(秒)。 ### duration.vue ```vue ``` ## 尺寸 (size) `size` 控制流光头部长度。 ### size.vue ```vue ``` ## 线宽 (line-width) `lineWidth` 控制流光描边厚度(默认随宿主 border 宽度)。 ### line-width.vue ```vue ``` --- # Breadcrumb UI version: 0.1.9 Source commit: b6578306f58bf0918d0f4cb8519cf4cf1a900b15 Page: https://apollocmh.github.io/apollo-design-ui/components/breadcrumb 显示当前页面在层级结构中的位置,提供向上导航。可以使用数据项,也可以在默认插槽中组合 `BreadcrumbItem` / `BreadcrumbSeparator`。 ## 代码演示 `demo/` 包含基础导航、图标、参数、菜单、分隔符、原生子组件、作用域插槽、语义样式和主题变量等 11 个成对示例。`debug-routes` 仅演示旧 `routes` 数据的迁移。 ## API ### Breadcrumb | 参数 | 说明 | 类型 | 默认值 | | --- | --- | --- | --- | | items | 数据源;提供 `[]` 时保持空列表,不消费默认槽 | `BreadcrumbItemInput[]` | — | | routes | 已废弃的旧数据通道,使用 `items` | `BreadcrumbItemInput[]` | — | | params | 替换字符串 title/path 中完整的 `:key`;支持重复参数、0、空字符串,缺失或空值保留占位符 | `Record` | `{}` | | separator | 自动分隔符;插槽优先,否则 prop → 当前 Provider → 默认值 | `VNodeChild` | `/` | | dropdownIcon | 菜单按钮的装饰图标;插槽优先,否则 prop → 当前 Provider → 默认值 | `VNodeChild` | `DownOutlined` | | prefixCls | 根及所属 Item/Separator 的当前前缀;自定义前缀须自行提供对应静态 CSS | `string` | `apollo-breadcrumb` | | classNames | `root` / `item` / `separator` 类名;函数读取当前解析 props | `BreadcrumbSemanticClassNames \| ((info: { props: BreadcrumbProps }) => BreadcrumbSemanticClassNames)` | — | | styles | 相同语义区域的样式;函数读取当前解析 props | `BreadcrumbSemanticStyles \| ((info: { props: BreadcrumbProps }) => BreadcrumbSemanticStyles)` | — | 原生 `class`、`style`、`id`、ARIA/data attrs 和监听器落根 `