@stcn52/pro 0.0.0-stage → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +621 -0
- package/CONVENTIONS.md +152 -0
- package/LICENSE +21 -0
- package/README.md +226 -2
- package/RELEASING.md +51 -0
- package/THIRD_PARTY_NOTICES.md +52 -0
- package/dist/index.cjs +23272 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +5068 -0
- package/dist/index.d.ts +5068 -0
- package/dist/index.js +23060 -0
- package/dist/index.js.map +1 -0
- package/dist/styles.css +10485 -0
- package/dist/tokens.css +322 -0
- package/docs/antd-alignment-plan.md +983 -0
- package/docs/api.md +3669 -0
- package/docs/components.md +1706 -0
- package/docs/measurements.md +152 -0
- package/docs/qa/README.md +50 -0
- package/docs/qa/browser-checks.json +394 -0
- package/docs/qa/d-chrome-checklist-dark.png +0 -0
- package/docs/qa/d-chrome-checks.json +234 -0
- package/docs/qa/d-chrome-detail-dark.png +0 -0
- package/docs/qa/d-chrome-filters-dark.png +0 -0
- package/docs/qa/d-chrome-shell-dark.png +0 -0
- package/docs/qa/d-detail-checks.json +222 -0
- package/docs/qa/d-detail-comments-failed-dark.png +0 -0
- package/docs/qa/d-detail-preview-dark.png +0 -0
- package/docs/qa/d-entity-checks.json +294 -0
- package/docs/qa/d-entity-failed-dark.png +0 -0
- package/docs/qa/d-workbench-canvas-dark.png +0 -0
- package/docs/qa/d-workbench-checks.json +338 -0
- package/docs/qa/d-workbench-edit-failed-dark.png +0 -0
- package/docs/qa/d-workbench-roadmap-dark.png +0 -0
- package/docs/qa/d-workbench-wizard-failed-dark.png +0 -0
- package/docs/qa/date-range-mobile-dark.jpg +0 -0
- package/docs/qa/p0-cascader-checks.json +228 -0
- package/docs/qa/p0-cascader-multiple-dark.png +0 -0
- package/docs/qa/p0-config-checks.json +430 -0
- package/docs/qa/p0-config-nested-dark.png +0 -0
- package/docs/qa/p0-date-checks.json +595 -0
- package/docs/qa/p0-date-time-dark.png +0 -0
- package/docs/qa/p0-form-lifecycle-checks.json +30 -0
- package/docs/qa/p0-form-lifecycle.png +0 -0
- package/docs/qa/p0-select-checks.json +378 -0
- package/docs/qa/p0-select-virtual-dark.png +0 -0
- package/docs/qa/p0-table-checks.json +290 -0
- package/docs/qa/p0-table-virtual-dark.png +0 -0
- package/docs/qa/p0-transfer-checks.json +322 -0
- package/docs/qa/p0-transfer-pagination-dark.png +0 -0
- package/docs/qa/p0-tree-checks.json +242 -0
- package/docs/qa/p0-tree-range-dark.png +0 -0
- package/docs/qa/p1-app-browser-checks.json +34 -0
- package/docs/qa/p1-app-feedback-dark.png +0 -0
- package/docs/qa/p1-avatar-checks.json +370 -0
- package/docs/qa/p1-avatar-dark.png +0 -0
- package/docs/qa/p1-browser-checks.json +218 -0
- package/docs/qa/p1-card-checks.json +262 -0
- package/docs/qa/p1-card-dark.png +0 -0
- package/docs/qa/p1-content-navigation-browser-checks.json +114 -0
- package/docs/qa/p1-controls-browser-checks.json +86 -0
- package/docs/qa/p1-controls-desktop-dark.png +0 -0
- package/docs/qa/p1-dialog-nested-dark.png +0 -0
- package/docs/qa/p1-display-browser-checks.json +114 -0
- package/docs/qa/p1-display-desktop-dark.png +0 -0
- package/docs/qa/p1-divider-dark.png +0 -0
- package/docs/qa/p1-drawer-browser-checks.json +302 -0
- package/docs/qa/p1-drawer-rtl-dark.png +0 -0
- package/docs/qa/p1-general-input-browser-checks.json +114 -0
- package/docs/qa/p1-general-input-desktop-dark.png +0 -0
- package/docs/qa/p1-image-browser-checks.json +38 -0
- package/docs/qa/p1-image-preview-dark.png +0 -0
- package/docs/qa/p1-inline-browser-checks.json +58 -0
- package/docs/qa/p1-inline-desktop-dark.png +0 -0
- package/docs/qa/p1-layout-browser-checks.json +114 -0
- package/docs/qa/p1-layout-desktop-dark.png +0 -0
- package/docs/qa/p1-menu-checks.json +357 -0
- package/docs/qa/p1-menu-long-dark.png +0 -0
- package/docs/qa/p1-nav-dark.png +0 -0
- package/docs/qa/p1-nav-sidebar-checks.json +218 -0
- package/docs/qa/p1-navigation-browser-checks.json +114 -0
- package/docs/qa/p1-navigation-mobile-dark.png +0 -0
- package/docs/qa/p1-pagination-checks.json +309 -0
- package/docs/qa/p1-pagination-dark.png +0 -0
- package/docs/qa/p1-pagination-mobile-dark.png +0 -0
- package/docs/qa/p1-popup-actions-browser-checks.json +58 -0
- package/docs/qa/p1-popup-actions-desktop-dark.png +0 -0
- package/docs/qa/p1-progress-browser-checks.json +30 -0
- package/docs/qa/p1-progress-desktop-dark.png +0 -0
- package/docs/qa/p1-rate-half-desktop-dark.png +0 -0
- package/docs/qa/p1-segment-checks.json +426 -0
- package/docs/qa/p1-segment-dark.png +0 -0
- package/docs/qa/p1-sidebar-dark.png +0 -0
- package/docs/qa/p1-slider-rate-browser-checks.json +114 -0
- package/docs/qa/p1-states-browser-checks.json +34 -0
- package/docs/qa/p1-states-checks.json +342 -0
- package/docs/qa/p1-states-dark.png +0 -0
- package/docs/qa/p1-states-mobile-dark.png +0 -0
- package/docs/qa/p1-tabs-editable-dark.png +0 -0
- package/docs/qa/p1-tag-dark.png +0 -0
- package/docs/qa/p1-tag-divider-checks.json +330 -0
- package/docs/qa/p1-upload-browser-checks.json +30 -0
- package/docs/qa/p1-upload-list-dark.png +0 -0
- package/docs/qa/p2-ai-panel-checks.json +401 -0
- package/docs/qa/p2-ai-panel-dark.png +0 -0
- package/docs/qa/p2-alert-dark.png +0 -0
- package/docs/qa/p2-app-final-checks.json +309 -0
- package/docs/qa/p2-app-final-dark.png +0 -0
- package/docs/qa/p2-badge-alert-checks.json +466 -0
- package/docs/qa/p2-beam-motion-checks.json +58 -0
- package/docs/qa/p2-calendar-dark.png +0 -0
- package/docs/qa/p2-calendar-timeline-checks.json +254 -0
- package/docs/qa/p2-charts-checks.json +242 -0
- package/docs/qa/p2-charts-dark.png +0 -0
- package/docs/qa/p2-color-gradient-dark.png +0 -0
- package/docs/qa/p2-content-navigation-checks.json +794 -0
- package/docs/qa/p2-dialog-popover-dark.png +0 -0
- package/docs/qa/p2-display-checks.json +128 -0
- package/docs/qa/p2-display-dark.png +0 -0
- package/docs/qa/p2-drawer-final-dark.png +0 -0
- package/docs/qa/p2-extras-checks.json +482 -0
- package/docs/qa/p2-general-inputs-checks.json +154 -0
- package/docs/qa/p2-general-inputs-dark.png +0 -0
- package/docs/qa/p2-icon-checks.json +466 -0
- package/docs/qa/p2-icon-dark.png +0 -0
- package/docs/qa/p2-image-dark.png +0 -0
- package/docs/qa/p2-inline-editors-checks.json +199 -0
- package/docs/qa/p2-input-button-checks.json +778 -0
- package/docs/qa/p2-input-dark.png +0 -0
- package/docs/qa/p2-layout-final-checks.json +136 -0
- package/docs/qa/p2-layout-final-dark.png +0 -0
- package/docs/qa/p2-lists-checks.json +290 -0
- package/docs/qa/p2-masonry-dark.png +0 -0
- package/docs/qa/p2-media-checks.json +212 -0
- package/docs/qa/p2-mentions-color-checks.json +362 -0
- package/docs/qa/p2-overlay-checks.json +370 -0
- package/docs/qa/p2-people-picker-dark.png +0 -0
- package/docs/qa/p2-popconfirm-final-dark.png +0 -0
- package/docs/qa/p2-popup-final-checks.json +223 -0
- package/docs/qa/p2-qr-browser-decode.json +30 -0
- package/docs/qa/p2-quick-select-dark.png +0 -0
- package/docs/qa/p2-quick-text-dark.png +0 -0
- package/docs/qa/p2-rate-dark.png +0 -0
- package/docs/qa/p2-scroll-navigation-checks.json +198 -0
- package/docs/qa/p2-scroll-navigation-dark.png +0 -0
- package/docs/qa/p2-selection-bar-checks.json +302 -0
- package/docs/qa/p2-selection-bar-dark.png +0 -0
- package/docs/qa/p2-slider-rate-checks.json +262 -0
- package/docs/qa/p2-switch-dark.png +0 -0
- package/docs/qa/p2-tabs-dark.png +0 -0
- package/docs/qa/p2-timeline-dark.png +0 -0
- package/docs/qa/p2-toast-dark.png +0 -0
- package/docs/qa/p2-toggle-checks.json +834 -0
- package/docs/qa/p2-tour-dark.png +0 -0
- package/docs/qa/p2-upload-dark.png +0 -0
- package/docs/qa/table-details.md +26 -0
- package/docs/qa/table-mobile-dark.jpg +0 -0
- package/docs/qa/transfer-mobile-light.jpg +0 -0
- package/docs/qa/tree-browser-checks.json +226 -0
- package/docs/qa/tree-details.md +25 -0
- package/docs/qa/tree-directory-mobile-dark.jpg +0 -0
- package/docs/tokens.md +255 -0
- package/package.json +95 -4
|
@@ -0,0 +1,983 @@
|
|
|
1
|
+
# klun-pro 全库组件完善计划
|
|
2
|
+
|
|
3
|
+
更新时间:2026-10-09。范围:整个 klun-pro 组件库,包括基础组件、Ship 业务组件和缺失的通用组件。
|
|
4
|
+
|
|
5
|
+
## 验收状态
|
|
6
|
+
|
|
7
|
+
**计划工作包已全部完成并记录**:A层18项、B层15项、C层13项、D层21项,共67项;每批完成标准7项已核实。组件工作包实现提交 `22aee83`;后续lint清理提交 `b5133c4`,当前全库995项测试、verify、Storybook和只读代码审查通过,lint为0错误/0警告。
|
|
8
|
+
|
|
9
|
+
这表示完成本计划的差距审查、补齐和范围验收;兼容边界与有意保留差异见 `docs/components.md`,业务请求、权限、持久化等宿主职责保持明确。
|
|
10
|
+
|
|
11
|
+
## 基线与统计口径
|
|
12
|
+
|
|
13
|
+
- 参考 Ant Design **6.6.5** 源码,固定提交 `c031b0121caf4bca6fa7b96141adad86f434f27c`;不把当前 AntD 主分支当作固定验收基线。
|
|
14
|
+
- klun-pro 基线提交:`fc4f93b`。当前导出入口为 `src/index.ts`。
|
|
15
|
+
- 制定计划时按导出模块对应的**组件族**计数:基础组件族45个,其中27个已有专项记录、18个尚未专项处理;另有Ship业务模块21个待审查。这是历史基线,当前各工作包验收见下表。
|
|
16
|
+
- 一个组件族可能导出多个组件,例如 Select/MultiSelect、Tree/DirectoryTree、DatePicker/DateRangePicker。因此上述数量不等于导出组件函数数量,也不能与 AntD 的导出数量直接相减。
|
|
17
|
+
- “已有专项处理记录”表示完成过一批改动、测试与验证,**不表示已完整实现 AntD 的行为或 API**。“尚未专项处理”也不表示该组件没有实现或没有测试。
|
|
18
|
+
- 逐项API/交互/差异矩阵及证据已随批次建立,见组件文档与本计划执行记录。工作包数量与导出组件函数数量仍采用独立口径。
|
|
19
|
+
|
|
20
|
+
## 执行顺序
|
|
21
|
+
|
|
22
|
+
1. **P0:完成现有复杂组件的差距审查与补齐。** 优先 Form、Select、Table、Tree、日期及层级选择器,每批处理一个明确功能集合。
|
|
23
|
+
2. **P1:处理 18 个未专项处理的基础组件族。** 优先菜单、分页、状态反馈及常用展示组件。
|
|
24
|
+
3. **P1:补齐缺失的常用通用组件。** 先做表单输入、上传、反馈和布局,先明确现有组件的映射,再决定新增入口。
|
|
25
|
+
4. **P2:审查 21 个 Ship 业务模块。** 以业务行为、受控数据、可访问性及组合兼容性为标准;不要求无 AntD 对应项的组件仿造 AntD API。
|
|
26
|
+
5. **全程:** 更新类型、文档、示例与必要回归测试,处理新增回归;跨组件主题、RTL、配置和弹层行为随各批同步检查。
|
|
27
|
+
|
|
28
|
+
以下条目均已按工作包验收;功能范围的支持能力与有意差异见对应记录和组件矩阵。
|
|
29
|
+
|
|
30
|
+
## A. 尚未专项处理的基础组件族(18 个)
|
|
31
|
+
|
|
32
|
+
| 完成 | 组件族 | 优先级 | 审查与补齐范围 |
|
|
33
|
+
| ---- | ------------ | ------ | ---------------------------------------------------------- |
|
|
34
|
+
| [x] | Menu | P1 | 受控选中/展开、嵌套菜单、键盘、禁用项、不同呈现模式 |
|
|
35
|
+
| [x] | ContextMenu | P1 | 定位与边界、子菜单、关闭与焦点恢复、键盘和禁用项 |
|
|
36
|
+
| [x] | Pagination | P1 | 受控/非受控、页容量切换、快速跳转、总数变化和边界 |
|
|
37
|
+
| [x] | Avatar | P1 | 图片失败回退、文字缩放、组合展示、尺寸和可访问名称 |
|
|
38
|
+
| [x] | Card | P1 | 标题/额外操作、加载、布局变体、组合内容和响应式 |
|
|
39
|
+
| [x] | Tag | P1 | 关闭/可选状态、颜色、图标、键盘与受控交互 |
|
|
40
|
+
| [x] | Divider | P1 | 方向、文本位置、间距和 RTL |
|
|
41
|
+
| [x] | Segment | P1 | 对照 Segmented,受控/非受控、禁用、键盘和自定义内容 |
|
|
42
|
+
| [x] | Nav | P1 | 路由由宿主管理、当前项语义、展开状态、键盘 |
|
|
43
|
+
| [x] | Sidebar | P1 | 收起/展开、响应式、嵌套导航、焦点和布局 |
|
|
44
|
+
| [x] | States | P1 | 核对 Empty/Spin/Skeleton/Result 映射,加载/错误/空状态语义 |
|
|
45
|
+
| [x] | PeoplePicker | P2 | 搜索、禁用/未知值、选择状态、异步结果和键盘 |
|
|
46
|
+
| [x] | QuickSelect | P2 | 搜索、清除、提交/取消、焦点和与表格编辑的组合 |
|
|
47
|
+
| [x] | QuickText | P2 | 编辑提交/取消、校验、键盘、只读和焦点 |
|
|
48
|
+
| [x] | Icon | P2 | 名称/回退、尺寸、装饰图标与有意义图标的语义 |
|
|
49
|
+
| [x] | Charts | P2 | 空数据、边界值、响应式、主题和可访问描述 |
|
|
50
|
+
| [x] | AiPanel | P2 | 状态切换、加载/失败/重试、键盘与业务事件 |
|
|
51
|
+
| [x] | SelectionBar | P2 | 选择数量、批量操作禁用、异步状态和布局 |
|
|
52
|
+
|
|
53
|
+
## B. 已处理组件的剩余差距
|
|
54
|
+
|
|
55
|
+
| 完成 | 组件族 | 优先级 | 下一步目标 |
|
|
56
|
+
| ---- | --------------------------------------------- | ------ | ----------------------------------------------------------------------------------------------------- |
|
|
57
|
+
| [x] | Form | P0 | 条件渲染/shouldUpdate、字段保留、校验触发与竞态、滚动/聚焦错误字段 |
|
|
58
|
+
| [x] | Select / MultiSelect | P0 | 分组选项、labelInValue、allowClear、自定义选项/标签渲染、受控弹层和异步状态;回归虚拟化/搜索/标签组合 |
|
|
59
|
+
| [x] | DataTable | P0 | 树形行、分组表头、虚拟行、多列排序、单选行、汇总 change 事件;检查固定列及滚动组合 |
|
|
60
|
+
| [x] | Tree / DirectoryTree | P0 | 对照范围选择合并、expandAction 与选择关系、键类型、dropPosition、拖放位置算法、叶节点图标和键盘行为 |
|
|
61
|
+
| [x] | Cascader | P0 | 多选、中间节点选择、异步加载、字段映射、搜索与受控状态 |
|
|
62
|
+
| [x] | DatePicker / DateRangePicker | P0 | 时间选择、不同 picker 模式、多选、预设、格式/解析、共享范围约束 |
|
|
63
|
+
| [x] | Transfer | P0 | 受控 selectedKeys、direction/moveKeys 事件、分页、自定义列表、搜索和禁用项组合 |
|
|
64
|
+
| [x] | ConfigProvider | P0 | 完整 RTL 镜像、更多组件的 locale/disabled 消费、嵌套配置和弹层一致性 |
|
|
65
|
+
| [x] | Slider | P1 | 双端范围、刻度/marks、提示、步长和键盘边界 |
|
|
66
|
+
| [x] | Rate | P1 | 半星、数量、悬停反馈、清除和键盘 |
|
|
67
|
+
| [x] | Radio / Checkbox / Switch | P1 | 组配置、受控/非受控、表单集成、禁用和事件契约 |
|
|
68
|
+
| [x] | Input / PasswordInput / ActionButton / Button | P1 | 输入与按钮变体、清除/计数、组合输入、加载和原生属性转发 |
|
|
69
|
+
| [x] | Tabs / Collapse / Steps | P1 | 受控状态、动态项目、禁用、方向/布局及键盘 |
|
|
70
|
+
| [x] | Badge / Alert | P1 | 状态与展示变体、隐藏/关闭、组合内容和无障碍 |
|
|
71
|
+
| [x] | Dialog / Popover / Tooltip / Toast | P1 | 与 Modal/Popover/Tooltip/message/notification 的能力映射、焦点、关闭、堆叠、异步操作和配置上下文 |
|
|
72
|
+
|
|
73
|
+
此表按工作包合并列出,不用于重新计算 27 个组件族。每个工作包实施前应列出对应 AntD 文件、底层依赖和具体 API/行为矩阵;有意保留的 Klun API 差异需写入文档。
|
|
74
|
+
|
|
75
|
+
## C. 缺失通用组件与能力入口
|
|
76
|
+
|
|
77
|
+
下列项目尚未完成通用入口或完整能力的确认与实现。已有近似业务组件时,先复用或明确映射;不为了同名而重复建设。
|
|
78
|
+
|
|
79
|
+
| 完成 | 优先级 | 组件/能力 | 处理方式 |
|
|
80
|
+
| ---- | ------ | ------------------------------------------------- | ---------------------------------------------------------------------------- |
|
|
81
|
+
| [x] | P1 | InputNumber、AutoComplete、TreeSelect、TimePicker | 补通用输入组件,并与 Form/ConfigProvider 集成 |
|
|
82
|
+
| [x] | P1 | Upload、Image | 核对 AttachmentUpload/FilePreview 的可复用部分,补通用上传/预览契约 |
|
|
83
|
+
| [x] | P1 | Breadcrumb、Typography、Descriptions、Statistic | 补常用导航与信息展示 |
|
|
84
|
+
| [x] | P1 | Layout、Row/Col/Grid、Flex、Space、Splitter | 核对现有布局工具和 Sidebar,补受控布局/响应式能力 |
|
|
85
|
+
| [x] | P1 | Drawer、Dropdown、Popconfirm | 核对 DetailSheet/Menu/Dialog/Popover 映射,补缺失的通用行为 |
|
|
86
|
+
| [x] | P1 | Empty、Spin、Skeleton、Result、Progress | 核对 States/Charts 的现有能力,明确需要新增的入口 |
|
|
87
|
+
| [x] | P1 | message、notification、App | 核对 Toast 和上下文,补全通知及静态调用的配置一致性 |
|
|
88
|
+
| [x] | P2 | Calendar、Timeline | 核对 DatePicker/TransitionsTimeline,补通用版本 |
|
|
89
|
+
| [x] | P2 | List / Listy、Masonry | 核对现有列表布局,补通用列表与瀑布布局能力 |
|
|
90
|
+
| [x] | P2 | Affix、Anchor、FloatButton | 补定位/滚动导航及浮动操作 |
|
|
91
|
+
| [x] | P2 | Mentions、ColorPicker | 补专用输入场景 |
|
|
92
|
+
| [x] | P2 | Carousel、Tour、QRCode、Watermark、BorderBeam | 按固定参考版本核对后实现 |
|
|
93
|
+
| [x] | P2 | BackTop | 核对参考版本的废弃/兼容状态,明确采用独立入口还是 FloatButton 的回到顶部能力 |
|
|
94
|
+
|
|
95
|
+
`theme`、`version` 等工具导出不按 UI 组件计数;主题算法与设计 token 的兼容范围另在 ConfigProvider 工作包中明确。
|
|
96
|
+
|
|
97
|
+
## D. Ship 业务模块专项审查(21 个)
|
|
98
|
+
|
|
99
|
+
每项检查:受控数据与事件、禁用/只读、加载/空/失败状态、键盘与焦点、主题/移动端/RTL,以及对通用组件的组合使用。按模块计数,不将模块内的子组件重复计算。
|
|
100
|
+
|
|
101
|
+
- [x] Rail
|
|
102
|
+
- [x] Header
|
|
103
|
+
- [x] Toolbar
|
|
104
|
+
- [x] Bits
|
|
105
|
+
- [x] Views
|
|
106
|
+
- [x] ShellSurfaces
|
|
107
|
+
- [x] DetailSheet
|
|
108
|
+
- [x] DetailBlock
|
|
109
|
+
- [x] EditableText
|
|
110
|
+
- [x] CommentThread
|
|
111
|
+
- [x] AttachmentUpload
|
|
112
|
+
- [x] LinkPicker
|
|
113
|
+
- [x] FilePreview
|
|
114
|
+
- [x] TransitionsTimeline
|
|
115
|
+
- [x] EntityDialog
|
|
116
|
+
- [x] EntityPicker
|
|
117
|
+
- [x] ShareDialog
|
|
118
|
+
- [x] ReportCanvas
|
|
119
|
+
- [x] RoadmapEditor
|
|
120
|
+
- [x] ListWorkbench
|
|
121
|
+
- [x] ProjectWizard
|
|
122
|
+
|
|
123
|
+
## 每批完成标准
|
|
124
|
+
|
|
125
|
+
- [x] 已读取参考版本对应源码;复杂组件同时核对实际承载行为的底层依赖。
|
|
126
|
+
- [x] 建立 API/交互差距矩阵,区分完成、待实现和有意保留的差异;关联具体源码路径。
|
|
127
|
+
- [x] 保留 Klun 现有样式和已有 API 的兼容性,新增功能不泄漏宿主业务依赖。
|
|
128
|
+
- [x] 必要回归测试覆盖真实分支和边界;复杂交互检查键盘、焦点、禁用项、受控数据及组合场景。
|
|
129
|
+
- [x] 同步类型、组件文档、Storybook 与生成 API 文档;有视觉变化时检查亮/暗主题和移动端。
|
|
130
|
+
- [x] 完成代码审查,`pnpm verify` 和 `pnpm build:storybook` 通过;不增加未解释的 lint 警告。
|
|
131
|
+
- [x] 回填本计划:已完成条目、验收证据、提交号和剩余差距。只有整个工作包验收后才勾选。
|
|
132
|
+
|
|
133
|
+
发布和部署必须走平台工作流:构建 → 审批 → 发布 → 部署。此计划不授权直接 `kc deploy` 或手工修改集群。
|
|
134
|
+
|
|
135
|
+
## 已完成批次记录
|
|
136
|
+
|
|
137
|
+
| 提交 | 已交付范围 | 剩余工作位置 |
|
|
138
|
+
| --------- | --------------------------------------------------------------------------- | ----------------------- |
|
|
139
|
+
| `d830e72` | 常用基础组件、选择器基础流程及验收示例 | B、C |
|
|
140
|
+
| `2378f77` | DataTable 分页/排序/筛选、选择、展开、合并单元格及滚动等细节 | B:DataTable |
|
|
141
|
+
| `321a1b9` | Tree/DirectoryTree 层级交互、懒加载、检查、搜索、虚拟化和拖放基础能力 | B:Tree |
|
|
142
|
+
| `2e5cc27` | 全局配置和 Form 基础 | B:Form、ConfigProvider |
|
|
143
|
+
| `f05a7a9` | 嵌套字段路径和 Form.List 动态数组 | B:Form |
|
|
144
|
+
| `81e11ae` | Select/MultiSelect 受控、自定义及远程搜索 | B:Select |
|
|
145
|
+
| `fc4f93b` | Select/MultiSelect 虚拟滚动、标签、分词及数量限制;449 个测试及构建验证通过 | B:Select |
|
|
146
|
+
|
|
147
|
+
## 执行记录:P0 Form 依赖校验(2026-10-08)
|
|
148
|
+
|
|
149
|
+
状态:**本子项完成,Form 工作包尚未完成**。实现提交:`59118e6`。
|
|
150
|
+
|
|
151
|
+
- [x] `FormItem.dependencies` 使用绝对 NamePath,支持嵌套路径和显式列表前缀。
|
|
152
|
+
- [x] 用户修改上游后,重新校验已交互/已验证/正在校验的依赖字段;不提前显示未交互字段的错误。
|
|
153
|
+
- [x] 支持传递依赖及循环保护;替换父对象时保留后代字段的校验资格。
|
|
154
|
+
- [x] 复用请求序号与值版本检查,旧异步校验结果不覆盖新结果。
|
|
155
|
+
- [x] 程序写值不触发依赖校验;需要时显式调用 `validateFields`。
|
|
156
|
+
- [x] 同步组件说明、API 文档和 Dependencies Storybook 示例。
|
|
157
|
+
- [x] 代码审查通过;`pnpm verify` 全部通过(453 个测试),`pnpm build:storybook` 通过;lint 保持原有 16 个警告。
|
|
158
|
+
|
|
159
|
+
参考证据:固定 AntD 源码 `components/form/index.en-US.md` 的 dependencies
|
|
160
|
+
说明和 setFieldsValue FAQ;实现位置 `src/components/Form.tsx`;回归证据
|
|
161
|
+
`src/__tests__/Form.test.tsx` 的依赖校验测试(确认字段、嵌套传递/循环、异步竞态、父对象替换)。
|
|
162
|
+
|
|
163
|
+
API/行为差距更新:dependencies 和用户触发的依赖校验已实现;与参考一致,
|
|
164
|
+
编程写值不触发此校验。FormItem 仍仅接受一个控制组件,render-function children
|
|
165
|
+
和 shouldUpdate 尚未实现;条件内容目前使用 useWatch。
|
|
166
|
+
|
|
167
|
+
下一批继续 B 的 P0 Form:条件渲染/shouldUpdate、字段 preserve,以及校验触发、
|
|
168
|
+
滚动/聚焦错误字段的完整契约。其余基础组件、缺失组件与业务模块待办保持未完成。
|
|
169
|
+
|
|
170
|
+
## 执行记录:P1 基础展示与导航(2026-10-08)
|
|
171
|
+
|
|
172
|
+
状态:**两个子批次已完成,P1 整体继续执行**。
|
|
173
|
+
|
|
174
|
+
- `0721051`:Pagination 受控/非受控、容量/跳转/边界;Segment 状态/禁用/RTL 键盘;Avatar 图片回退/组合;Tag 关闭/可选;Card 加载/封面/操作;Divider 文本/虚线/逻辑位置。修正 Popover 延迟聚焦与 Cascader 子弹层的竞争。
|
|
175
|
+
- `129d99a`:Menu 受控选中/展开、单选/多选、inline/horizontal、递归键盘、富文本搜索及独立嵌套菜单隔离;ContextMenu 全局禁用/覆盖、RTL 子菜单与弹层语言方向;Nav 禁用/键盘/安全 ID 查询/窄屏滚动;Sidebar 受控宽度/边界/RTL 调整与收起焦点屏蔽。
|
|
176
|
+
- 验收:`pnpm verify` 全绿,第一批 461 个、第二批 473 个测试;Storybook 构建通过;审查通过。基础展示 24 个、导航 16 个浏览器亮/暗/桌面/390px 检查均无渲染错误和页面横向溢出,记录在 `docs/qa/p1-browser-checks.json`、`docs/qa/p1-navigation-browser-checks.json`。
|
|
177
|
+
- 参考:固定 AntD 6.6.5 的 pagination、segmented、avatar、tag、card、divider、menu 入口/文档;Klun Nav/Sidebar/ContextMenu 的现有组合契约。
|
|
178
|
+
- 保留差异与剩余工作:Avatar 不提供 AntD 任意 children 文本测量;Card 无 Grid/Meta;Menu 不提供横向自动折叠、hover 延迟和 inlineCollapsed;Nav 由宿主路由受控,窄屏使用原生滚动。详见 `docs/components.md`。A 工作包尚有这些完整差距,不能据此全部勾选;States、B/C 中其余 P1 仍待验收。
|
|
179
|
+
|
|
180
|
+
## 执行记录:P1 States 通用入口(2026-10-08)
|
|
181
|
+
|
|
182
|
+
状态:**常用反馈子项完成,Progress 和参考特有高级能力仍在 C 待办**。实现提交:`f79426c`。
|
|
183
|
+
|
|
184
|
+
- 新增 Empty(自定义图/说明/操作、本地化)、Spin(受控/延迟/取消/尺寸/全屏/忙碌内容交互屏蔽)、Result(四种状态和三种异常码、自定义图标/正文/操作)。增强 Skeleton(组合段落/标题/头像、静态动画、加载切换);保留原单块占位 API。
|
|
185
|
+
- React 18/19 都通过原生属性写入 inert;Sidebar 复用该直接写入方式。全屏 Spin 通过 body 门户逃离 transformed 祖先,保留配置上下文的语言/方向。
|
|
186
|
+
- 验收:全库 verify 478 个测试通过,新增全屏门户回归测试后本专项 6 项通过;Storybook 通过,4 个主题/视口检查无页面溢出/渲染错误。浏览器确认全屏层父节点为 BODY,尺寸覆盖 client viewport,z-index=1100。
|
|
187
|
+
- 参考:固定 AntD `components/empty/index.tsx`、`spin/index.tsx`、`result/index.tsx`;证据 `src/__tests__/P1States.test.tsx`、`docs/qa/p1-states-browser-checks.json`。文档明示未提供 AntD semantic styling、静态全局 indicator setter、Spin 自动百分比动画,Progress 仍保留原 0–1 入口,后续补齐。
|
|
188
|
+
|
|
189
|
+
## 执行记录:P1 Slider / Rate(2026-10-08)
|
|
190
|
+
|
|
191
|
+
状态:**计划中的基础增强已交付,参考特有扩展在文档中保留差距**。实现提交:`5dd6304`。
|
|
192
|
+
|
|
193
|
+
- Slider:保留单值原生事件,新增双端受控/非受控范围、不可交叉、动态 ARIA 边界、步长规范化、marks、垂直呈现、原生标题提示和完成事件;受控宿主不回写时,完成事件仍报告实际交互草稿。
|
|
194
|
+
- Rate:半星、数量、鼠标悬停/回调、提示、自定义字符、只读语义、清除;原生同名 radio 支持键盘及表单值。选中/清除清掉悬停残留。
|
|
195
|
+
- 验收:专项 5 个测试,全库 `pnpm verify` 484 个测试全绿,Storybook 构建通过,审查通过;16 个亮/暗/桌面/390px 检查无页面溢出与渲染错误,浏览器键盘验证下端 20→21,提示21、上限70;只读和自定义半星视觉验证通过。
|
|
196
|
+
- 参考:固定 AntD slider/rate 入口;实际底层 `@rc-component/slider@1.1.1/es/hooks/useOffset.js`、`@rc-component/rate@1.0.1/es/Rate.js`。证据 `src/__tests__/P1SliderRate.test.tsx`、`docs/qa/p1-slider-rate-browser-checks.json`。
|
|
197
|
+
- 保留差异:native tooltip、不可拖动整段轨道、无动态多端点编辑/null-step marks-only;Rate 使用显式清除按钮。其余 P1 保持待办,继续执行。
|
|
198
|
+
|
|
199
|
+
## 执行记录:P1 Progress(2026-10-08)
|
|
200
|
+
|
|
201
|
+
状态:**通用进度子项完成**。实现提交:`96d7f43`。
|
|
202
|
+
|
|
203
|
+
- 保留原 value 0–1;新增 percent、line/circle/dashboard、status、steps、success 叠层、格式化/ARIA、颜色/尺寸/线宽及 RTL 逻辑缺口。分段圆环平端帽保证间隔;0% 与 360° 空缺不绘制零长度前景;活动高光只在完成段内显示。
|
|
204
|
+
- 参考固定 AntD progress/progress.tsx、Circle.tsx;专项4个测试,全库 `pnpm verify` 488 个测试与 Storybook 通过,审查通过;4个亮/暗/桌面/390px浏览器检查无错误/横向溢出,视觉确认圆环、仪表盘、分段和成功叠层。
|
|
205
|
+
- 证据:`src/__tests__/P1Progress.test.tsx`、`docs/qa/p1-progress-browser-checks.json`。C 中 Empty/Spin/Skeleton/Result/Progress 常用映射已实现;参考高级 semantic styling、gradient object、percentage-position 和 auto-percent 等仍明示在文档,保留完整兼容差距。
|
|
206
|
+
|
|
207
|
+
## 执行记录:P1 Tabs / Collapse / Steps(2026-10-08)
|
|
208
|
+
|
|
209
|
+
实现提交:`e7b119b`。Tabs 补齐纵向/逻辑侧位置、可编辑增删、面板保留/销毁、强制渲染和焦点恢复;Collapse 补齐额外操作、键盘、手风琴与面板生命周期;Steps 补齐单项状态/图标/副标题、初始编号和键盘导航。
|
|
210
|
+
|
|
211
|
+
固定 AntD 6.6.5 及实际 rc-tabs/rc-collapse/rc-steps/rc-motion 源码对照。专项 6 项、全库 494 个测试、verify 和 Storybook 构建通过;审查通过,16 个浏览器主题/视口检查通过,浏览器确认新增/关闭标签后的选中与焦点。证据:`docs/qa/p1-content-navigation-browser-checks.json`。forceRender 优先于销毁与实际 CSSMotion 行为一致;完整高级兼容差距见组件说明,其余 P1 继续执行。
|
|
212
|
+
|
|
213
|
+
## 执行记录:P1 Input / Button / 选择控件(2026-10-08)
|
|
214
|
+
|
|
215
|
+
本子批次完成,P1 整体继续执行。Input/PasswordInput 补齐前后缀、清除、计数、状态/变体、小尺寸;保留原生 ref、Form 事件和动态切换时 DOM/焦点。原生 reset 默认动作之后同步计数,取消 reset 时不修改状态。Button 补齐 dashed/link、形状、ghost/danger;ActionButton/Switch loading;Switch 文本、RTL 滑块、左右键;RadioGroup/CheckboxGroup 原生选项属性和已注册选项顺序。
|
|
216
|
+
|
|
217
|
+
对照固定 AntD input/button/switch/radio/checkbox 源码与 rc-input/rc-switch。专项 9 项、全库 503 个测试、verify 和 Storybook 通过,审查通过;12 个亮/暗/桌面/390px 检查无错误/溢出,真实浏览器清除与 reset 确認焦点、原生值及计数。证据:`src/__tests__/P1Inputs.test.tsx`、`docs/qa/p1-controls-browser-checks.json`。组值继续使用原字符串 API;Switch value 继续表示原生表单值,其余高级兼容差距明示于组件说明。
|
|
218
|
+
|
|
219
|
+
## 执行记录:P1 Badge / Alert(2026-10-08)
|
|
220
|
+
|
|
221
|
+
本子批次完成,P1 整体继续执行。Badge 补齐富文本计数、状态/文本/颜色、小尺寸、逻辑偏移和原生 ref/属性;保留原显式 dot 零值可见。Alert 补齐 title 别名、banner、filled、自定义图标/关闭按钮、取消关闭、关闭后回调及原生 ref/属性;回调在实际移除后触发,受控宿主拒绝关闭不会误报 afterClose。
|
|
222
|
+
|
|
223
|
+
固定 AntD Badge.tsx/Alert.tsx 对照;专项 5 项、全库 508 个测试、verify、Storybook 与审查通过;8 个亮/暗/桌面/390px 检查无错误/溢出,浏览器确认自定义关闭移除提示。证据:`src/__tests__/P1InlineFeedback.test.tsx`、`docs/qa/p1-inline-browser-checks.json`。已修正嵌套 RTL/LTR 偏移和 processing 动画范围;Ribbon/滚动数字/退出动画仍为明确兼容差距。
|
|
224
|
+
|
|
225
|
+
## 执行记录:P1 通用输入入口(2026-10-08)
|
|
226
|
+
|
|
227
|
+
InputNumber、AutoComplete、TreeSelect、TimePicker 常用入口已交付,完整 AntD 特有扩展仍明确保留差距,P1 整体继续执行。
|
|
228
|
+
|
|
229
|
+
- InputNumber:数字/null 值、编辑草稿、范围/精度/步进、formatter/parser、外部聚焦写值、原生 ref;AutoComplete:受控字符串/开关、过滤/禁用、IME、活动项滚动与输入焦点;TreeSelect:复用 Tree 单/多选/检查/搜索/懒加载/虚拟列表、稳定节点/标签、Form blur、原生提交/清除;TimePicker:原生本地时钟字符串、秒步长、边界/不可用有效性。
|
|
230
|
+
- 对照固定 AntD 对应入口及实际 rc-input-number1.6.2、rc-select1.10.1、rc-tree-select1.16.1、rc-picker1.12.2。专项13项,全库521个测试、verify、Storybook与审查通过,lint保持16警告;16个亮/暗/桌面/390px检查无错误/溢出。浏览器确认AutoComplete首Up选择末项40、可见且保留input焦点;TreeSelect检查Alice后联动Team,禁用Bob不变。
|
|
231
|
+
- 证据:`src/__tests__/P1GeneralInputs.test.tsx`、`docs/qa/p1-general-input-browser-checks.json`;详细API和高精度stringMode、策略常量、Dayjs/自定义时间列等差距见组件说明,不能据此声称完整AntD兼容。
|
|
232
|
+
|
|
233
|
+
## 执行记录:P1 通用信息展示(2026-10-08)
|
|
234
|
+
|
|
235
|
+
Breadcrumb、Typography、Descriptions、Statistic 常用入口已交付,完整参考特有扩展保留差距,P1 整体继续执行。
|
|
236
|
+
|
|
237
|
+
- Breadcrumb:原生链接/按钮、自定义渲染/分隔、禁用与当前页;Descriptions:原生定义列表、响应式列、跨列/填满、垂直/横向及长标签换行;Statistic:保留大整数文本、分组/精度截断补零/格式化/加载;Typography:Text/Title/Paragraph/Link、强调样式、CSS省略/受控展开、异步复制/错误重试、空文本编辑/取消/焦点恢复。
|
|
238
|
+
- 对照固定参考 Breadcrumb、Descriptions/useRow、Statistic/Number、Typography/Base/复制hook及responsiveObserver。专项8项,全库529个测试、verify、Storybook和审查通过,lint保持16警告;16个亮/暗/桌面/390px检查无错误/溢出,真实浏览器编辑保存后焦点返回编辑按钮。修正TreeSelect错误图标名为现有caret-down。
|
|
239
|
+
- 证据:`src/__tests__/P1Display.test.tsx`、`docs/qa/p1-display-browser-checks.json`。Timer、测量型suffix省略、自动编辑器高度和高级semantic样式等差距见组件说明;旧Crumbs/KeyValue/Metric API保留。
|
|
240
|
+
|
|
241
|
+
## 执行记录:P1 通用布局(2026-10-08)
|
|
242
|
+
|
|
243
|
+
Layout、Row/Col/Grid、Flex/Space/Compact、Splitter 实现和导出已补齐。Sider 支持受控/默认/响应式和零宽折叠;栅格支持响应式尺寸、gutter 和逻辑偏移;Splitter 支持受控尺寸、边界、指针/键盘、折叠恢复及隐藏内容保留。
|
|
244
|
+
|
|
245
|
+
专项 8 项、全库 537 个测试与 verify 通过,Storybook 构建通过,只读复审通过。已修正整组受控比例、部分受控兄弟、零尺寸分配、禁用中拖动,以及相邻空间不足时恢复违反最小值的问题。浏览器已确认方向键调整与折叠恢复;16 个亮暗/桌面/390px 检查通过,无错误或横向溢出。本子批次完成,高级兼容差距仍按组件说明保留。证据:`src/__tests__/layout.test.tsx`、`docs/qa/p1-layout-browser-checks.json`。其余 P1 继续执行,不能据此声明全库或 P1 全部完成。
|
|
246
|
+
|
|
247
|
+
## 执行记录:P1 Dialog 嵌套弹层修复(2026-10-08)
|
|
248
|
+
|
|
249
|
+
修复共享页面滚动锁、仅顶层关闭/焦点循环、内层关闭后的焦点恢复;统一过滤负 tabindex、禁用 fieldset、隐藏祖先。内部 Popover 优先处理 Escape,编辑器已 preventDefault 的事件不再关闭 Dialog。原 Dialog API 与关闭时销毁行为保留。
|
|
250
|
+
|
|
251
|
+
专项 5 项、全库 542 个测试、verify 与 Storybook 构建通过。只读审查发现的事件边界和焦点过滤问题已补回归;真实浏览器确认内层 Escape 关闭后外层仍存在、overflow=hidden、焦点回到 Open inner。证据:`src/__tests__/dialogStack.test.tsx`、`docs/qa/p1-dialog-nested-dark.png`。Dialog/Popover/Tooltip/Toast 工作包仍有剩余能力,未勾选整体完成。
|
|
252
|
+
|
|
253
|
+
## 执行记录:P1 Dropdown / Popconfirm(2026-10-08)
|
|
254
|
+
|
|
255
|
+
常用入口已完成,Drawer 所在工作包仍继续执行。Dropdown 复用原生 Button、Menu/Popover,支持受控/默认开关、键盘、嵌套/禁用和选择关闭;Popconfirm 支持异步确认、防重复/等待中取消、false 保留、拒绝重试、受控宿主拒绝关闭。关闭/禁用/卸载同步使旧请求失效,明确 disabled=false 可覆盖全局禁用并传至内部操作。
|
|
256
|
+
|
|
257
|
+
对照固定 AntD dropdown/dropdown.tsx、popconfirm/index.tsx,保留 Klun 原生按钮和现有菜单协议;高级触发/克隆/semantic 差距见组件说明。专项 6 项、全库 548 个测试、verify、Storybook 构建及只读复审通过;8 个亮暗/桌面/390px 浏览器检查通过,无错误/横向溢出,确认后焦点返回触发按钮。证据:`src/__tests__/P1PopupActions.test.tsx`、`docs/qa/p1-popup-actions-browser-checks.json`。
|
|
258
|
+
|
|
259
|
+
## 执行记录:P1 Drawer(2026-10-08)
|
|
260
|
+
|
|
261
|
+
通用入口已完成,复用 Dialog 模态栈/焦点恢复/滚动锁;补四个物理边缘、视口内 width/height、独立 keyboard/maskClosable/closable。现有 Dialog 的 dismissable 默认和 DetailSheet 业务 API 保持兼容。对照固定参考 drawer/Drawer.tsx、DrawerPanel;push/拖动调整/保留隐藏内容/动画回调等高级差距见组件说明,因此不勾选完整兼容工作包。
|
|
262
|
+
|
|
263
|
+
专项 2 项与 DialogStack 5 项回归通过,全库 550 个测试、verify、Storybook 构建和只读复审通过。20 个亮暗/桌面/390px/RTL 实际几何检查通过,四边均贴指定物理边缘,无错误或横向溢出;修正顶部继承居中和构建工具转换 :dir 造成 RTL 规则不命中,改匹配弹层显式 dir 属性。证据:`src/__tests__/drawer.test.tsx`、`docs/qa/p1-drawer-browser-checks.json`。
|
|
264
|
+
|
|
265
|
+
## 执行记录:P1 Image(2026-10-08)
|
|
266
|
+
|
|
267
|
+
Image 常用入口已完成,Upload 所在工作包仍继续执行。真实 img/native ref、加载占位/失败回退、受控 Dialog 预览、缩放/旋转/重置、显式 items 分组/当前索引/前后切换已提供;业务 FilePreview 的元数据演示不用于真实图片预览。对照固定 Image/index.tsx、PreviewGroup.tsx;自动注册子图、拖拽/滚轮/翻转等扩展差距见组件说明。
|
|
268
|
+
|
|
269
|
+
专项 5 项、全库 555 个测试、verify、Storybook 构建和只读复审通过。修正 srcSet 覆盖 fallback、候选源变化重试、非法当前索引和末张切换丢焦点;4 个亮暗/桌面/390px 浏览器检查通过,图片实际加载、末张按钮焦点保留、操作栏无溢出。证据:`src/__tests__/image.test.tsx`、`docs/qa/p1-image-browser-checks.json`。
|
|
270
|
+
|
|
271
|
+
## 执行记录:P1 Upload(2026-10-08)
|
|
272
|
+
|
|
273
|
+
常用真实文件契约已实现:原生 input ref、File/Blob 异步转换、beforeUpload false 手动保留/LIST_IGNORE 忽略、accept/数量/拖放、受控文件列表、自定义可取消请求及 POST multipart XHR。默认无网络传输;文件移除/外部受控删项/卸载取消请求并隔离晚到回调,原生 abort 句柄保持接收者。AttachmentUpload 业务元数据 API 保持独立。
|
|
274
|
+
|
|
275
|
+
对照固定 upload/interface.ts、Upload.tsx;专项 10 项、全库 565 个测试、verify、Storybook 构建和只读复审通过。4 个亮暗/桌面/390px 列表/错误/移除浏览器检查通过,无错误或溢出。真实 File、转换、multipart、HTTP 失败与取消由专项测试验证;浏览器自动选择本地文件因 ChatGPT 扩展未允许文件 URL 访问而未完成,未修改扩展权限,也未向真实服务器上传文件。证据:`src/__tests__/upload.test.tsx`、`docs/qa/p1-upload-browser-checks.json`。目录/粘贴/缩略图和高级协议差距见组件说明;不据此勾选完整 AntD 兼容工作包。
|
|
276
|
+
|
|
277
|
+
## 执行记录:P1 App / message / notification(2026-10-08)
|
|
278
|
+
|
|
279
|
+
统一通知入口已实现:App.useApp 绑定最近上下文,静态调用使用已注册 App;独立 message/notification 栈、key 更新、destroy 全部/指定、loading、可关闭/await 消息句柄、末宿主卸载恢复前宿主、配置更新保留顺序。Toast 原 push/dismiss 兼容,持久消息不会因悬停关闭,计时器卸载清理;StrictMode 恢复计时、批量删除及封顶回调重入不会破坏新同 key 消息。
|
|
280
|
+
|
|
281
|
+
固定参考 app/App.tsx、message/interface.ts/index.tsx、notification/index.tsx。专项 13 项及原 Toast 18 项通过,全库 578 个测试、verify、Storybook 构建通过;只读审查问题已补回归。4 个亮暗/桌面/390px 双栈真实显示检查通过,count=2 且无重叠/溢出/错误;App 右上通知在窄屏移至右下,避开顶部 message。证据:`src/__tests__/appFeedback.test.tsx`、`docs/qa/p1-app-browser-checks.json`。保留 Klun 毫秒、要求宿主和 string key 契约;独立 contextHolder、任意挂载/semantic 样式等参考扩展仍见组件说明。后续继续 P0/P2 及尚未验收工作包,未声明计划全部完成。
|
|
282
|
+
|
|
283
|
+
## 执行记录:P0 Form 工作包验收(2026-10-08)
|
|
284
|
+
|
|
285
|
+
状态:**B/Form 工作包完成**;全库其他未验收项继续保留待办。
|
|
286
|
+
|
|
287
|
+
| 计划目标 | 实现与验收证据 |
|
|
288
|
+
| ----------------------- | -------------------------------------------------------------------------------------------------------- |
|
|
289
|
+
| 条件渲染 / shouldUpdate | 无名 Form.Item render children、比较函数、dependencies 选择性更新、noStyle;FormLifecycle 测试 |
|
|
290
|
+
| 字段保留 | Form/Item preserve 覆盖、恢复 initialValues、动态 name 旧路径清理、StrictMode 和 List 移位/条件卸载 |
|
|
291
|
+
| 校验触发与竞态 | 事件数组 / false、手动提交仍校验;原 Form/FormNested 测试覆盖请求序号、值版本、卸载和依赖异步竞态 |
|
|
292
|
+
| 滚动 / 聚焦 | scrollToFirstError false/options、scrollToField focus/block/behavior、focusField 排除禁用和 CSS 隐藏祖先 |
|
|
293
|
+
|
|
294
|
+
参考:固定 AntD `components/form/Form.tsx`、`FormItem/index.tsx`,实际承载行为的 `@rc-component/form@1.8.6/es/Field.js`、`es/hooks/useForm.js`;实现 `src/components/Form.tsx`。
|
|
295
|
+
兼容差异:Klun 字符串 name 为字面键;默认 onBlur 校验、默认提交失败滚动聚焦;不复制 AntD Dayjs/语义样式与包装 API。自动校验可用 false 关闭,默认滚动可用 scrollToFirstError=false 关闭。
|
|
296
|
+
|
|
297
|
+
验收:新增 11 项生命周期/触发测试,全库 **589 测试通过**;`pnpm verify` 全绿、Storybook 构建通过,lint 保持原有 16 警告;只读代码审查通过。浏览器 1280/390、亮/暗 4 组,条件字段编辑→卸载→重挂恢复 Initial,无页面错误/横向溢出,证据 `docs/qa/p0-form-lifecycle-checks.json` 与 `p0-form-lifecycle.png`。实现提交 `d89ccde`。
|
|
298
|
+
|
|
299
|
+
## 执行记录:P2 Calendar / Timeline(2026-10-08)
|
|
300
|
+
|
|
301
|
+
状态:**C/Calendar、Timeline 工作包完成**。
|
|
302
|
+
|
|
303
|
+
| 参考与目标 | 实现 / 有意差异 |
|
|
304
|
+
| -------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
305
|
+
| AntD `calendar/generateCalendar.tsx` 的日期、月年模式、选择/面板事件 | Calendar 受控/非受控、月年视图、validRange、禁用、来源事件、自定义 header/cells、键盘/RTL;沿用 DatePicker ISO 字符串,不引入 Dayjs;不提供旧弃用渲染别名、周编号和语义样式注入 |
|
|
306
|
+
| AntD `timeline/Timeline.tsx`、`useItems.tsx` 的数据与呈现 | Timeline title/content/icon/loading/placement、兼容 label/children/dot、pending/reverse、水平/逻辑方向/交替中轴;业务时间格式由宿主提供,不复制 Steps 内部包装或语义注入 |
|
|
307
|
+
| DatePicker / TransitionsTimeline 可复用边界 | DatePicker 原日期工具移到内部 `utils/calendarDate.ts` 共用,既有逻辑不变;Calendar 使用独立 CSS 前缀避免原 DatePicker 280px 弹层样式污染;TransitionsTimeline 继续负责业务活动含义 |
|
|
308
|
+
|
|
309
|
+
新增 10 项真实边界测试(部分有效月份、年视图焦点、自定义 header 越界/禁用校验、受控拒绝、跨月/RTL 键盘、闰年、空 pending 与数字标题),原 AdvancedPickers 继续通过。全库 **599 测试通过**,`pnpm verify` 全绿、Storybook 构建通过,lint 原有 16 警告未增加;只读审查通过。
|
|
310
|
+
|
|
311
|
+
浏览器月/年/RTL 日历、默认/交替/水平时间线,在 1280/390 × 亮/暗共 24 组确认组件存在、主题已应用、日期点击有效,无页面错误或页面横向溢出。证据 `docs/qa/p2-calendar-timeline-checks.json`、`p2-calendar-dark.png`、`p2-timeline-dark.png`。实现提交 `9c3d620`。其余未勾选项继续执行。
|
|
312
|
+
|
|
313
|
+
## 执行记录:P2 List / Listy / Masonry(2026-10-08)
|
|
314
|
+
|
|
315
|
+
状态:**C/List、Listy、Masonry 工作包完成**。
|
|
316
|
+
|
|
317
|
+
| 固定参考 | 能力与兼容边界 |
|
|
318
|
+
| ----------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
319
|
+
| AntD `list/index.tsx`、`list/Item.tsx` | 泛型数据/children、稳定 rowKey、复用 Pagination(Klun page 命名)、动态页边界、加载/空态、标题/页脚/加载更多、响应式 grid、Item/Meta/actions/extra;保留原生 li 与 ref |
|
|
320
|
+
| AntD `listy/index.tsx`,实际 `@rc-component/listy@1.2.3/es/List.d.ts`、`RawList/index.js`、分组 hooks | 分组首次出现顺序、原始 render index、最终顺序 ARIA、普通/定高虚拟窗口、sticky 与 key/group/位置 scrollTo;虚拟行高明确固定,变高内容用正常流,不复制动态行高算法 |
|
|
321
|
+
| AntD `masonry/Masonry.tsx`、`hooks/usePositions.ts` | 原生 ResizeObserver 测量、最短列布局、指定列、响应式列数、双向 gutter、RTL逻辑位置、动态尺寸与 onLayoutChange;DOM 按数据顺序,不依赖 motion/fresh 动画 |
|
|
322
|
+
|
|
323
|
+
新增 8 项测试覆盖受控拒绝、分页缩短、空 children、原生/复合 li/ref、加载/空态、分组顺序、虚拟 scrollTo/移除、真实高度变化与观察器清理。全库 **607 测试通过**,verify 全绿、Storybook 构建通过,lint 原有 16 警告未增加,只读代码复审通过。
|
|
324
|
+
|
|
325
|
+
浏览器 1280/390 × 亮/暗 × 6 个列表/网格/虚拟/分组/瀑布/RTL示例共 24 组通过。真实分页到 Review 6、scrollTo 定位 Item 100(scrollTop=4356),分组滚至 Item 120(scrollTop=5280、scrollHeight=5544),sticky 标题 Team 6 与容器顶部对齐且不增加滚动高度;瀑布单元无重叠、页面无横向溢出或错误。证据 `docs/qa/p2-lists-checks.json` 与 `p2-masonry-dark.png`。实现提交 `62ffb14`。
|
|
326
|
+
|
|
327
|
+
## 执行记录:P2 Affix / Anchor / FloatButton / BackTop(2026-10-08)
|
|
328
|
+
|
|
329
|
+
状态:**C/滚动定位与浮动操作、BackTop 两个工作包完成**。
|
|
330
|
+
|
|
331
|
+
固定参考 AntD `affix/index.tsx`、`anchor/Anchor.tsx`、`float-button/FloatButton.tsx`、`FloatButtonGroup.tsx`、`BackTop.tsx` 和 `back-top/index.tsx`。Affix 支持上下偏移、窗口/元素容器、尺寸变化、原节点保留与 updatePosition;Anchor 支持嵌套链接、横向、滚动选中、原生 history、编码 ID、取消事件及安全 URL;FloatButton 复用 Button/Badge/Tooltip,Group 支持受控、点击/悬停、禁用、Escape 与关闭焦点恢复。参考 BackTop 已废弃,提供独立 BackTop 和 FloatButton.BackTop 同实现入口,支持容器、阈值、进度及系统减少动画设置。
|
|
332
|
+
|
|
333
|
+
兼容边界:原生滚动替代独立动画引擎;Affix 不通过 portal 重挂子节点,CSS transformed ancestor 的 fixed 包含块规则仍适用;动态替换 Anchor 容器需更新 getContainer 函数身份。沿用 Klun API,不复制语义样式包装。
|
|
334
|
+
|
|
335
|
+
新增 10 项测试,全库 **617 测试通过**,verify 全绿、Storybook 构建通过,原有 16 lint 警告未增加;只读审查通过。真实浏览器发现父容器 ref 提交顺序缺陷,已将 Affix 绑定移到 passive effect 并补回归。1280/390 × 亮/暗 × 5 个示例共 20 组无页面错误或横向溢出;固定 top=容器 top+8,Anchor 到 Verification(单独确认 scrollTop=599),Group Escape 返回触发按钮,BackTop 平滑回滚后低于显示阈值,精确请求 top=0 由测试验证。证据 `docs/qa/p2-scroll-navigation-checks.json`、`p2-scroll-navigation-dark.png`。
|
|
336
|
+
|
|
337
|
+
## 执行记录:P2 Mentions / ColorPicker(2026-10-08)
|
|
338
|
+
|
|
339
|
+
状态:**C/Mentions、ColorPicker 工作包完成**。滚动组件前批实现提交 `77f56e0`。
|
|
340
|
+
|
|
341
|
+
固定参考 AntD `mentions/index.tsx`、`color-picker/interface.ts`,实际 `@rc-component/mentions@1.12.0/es/Mentions.d.ts`、`util.js` 和 `@rc-component/color-picker@3.1.1/es/interface.d.ts`。Mentions 提供原生 textarea ref、string Form 值、多前缀/分隔符、远程/自定义过滤、搜索与选择、getMentions、禁用/只读/加载/空态、IME、键盘与活动项滚动;插入复用后缀,防止受控拒绝残留光标抢焦点。ColorPicker 提供安全 HEX/RGB/HSB、透明度、灰阶/黑色色相保留、单色/渐变模式、停靠点增删/位置、预设、清空、格式/打开受控与完成事件;清空/null 保留渐变编辑能力,外部改值后完成事件不会复活旧值。
|
|
342
|
+
|
|
343
|
+
有意差异:字符串/stop 数组替代颜色对象;原生色盘与键盘通道/停靠点输入替代 2D 拖动面板;Mentions 建议锚定 textarea 而非镜像光标;不复制弃用 Option children、语义样式和任意 popup 挂载。具体契约见组件说明,未新增运行时依赖。
|
|
344
|
+
|
|
345
|
+
新增 10 项测试,全库 **627 测试通过**;verify 全绿、Storybook 构建通过,16 个原有 lint 警告未增加,只读复审通过。浏览器 1280/390 × 亮/暗 × 9 个默认/多前缀/加载/RTL/颜色格式/渐变示例共36组,@al 键盘选择→@alex、颜色提交、渐变增加第3停靠点均正确,无页面错误或横向溢出。加载态通过真实输入触发,保留原生初始光标位置。证据 `docs/qa/p2-mentions-color-checks.json`、`p2-color-gradient-dark.png`。
|
|
346
|
+
|
|
347
|
+
## 执行记录:P2 Carousel / Tour / QRCode / Watermark / BorderBeam(2026-10-08)
|
|
348
|
+
|
|
349
|
+
状态:**C/五个通用入口工作包完成**。专用输入前批提交 `6ef10c7`。
|
|
350
|
+
|
|
351
|
+
| 固定参考与目标 | 实现与有意差异 |
|
|
352
|
+
| ---------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
353
|
+
| AntD carousel/index.tsx、实际 @ant-design/react-slick@2.0.0/lib/inner-slider.js | 单页受控/非受控、箭头/点/RTL/垂直键盘、pointer swipe、finite/infinite、ref、前后事件、暂停/悬停/聚焦/隐藏/减少动画;CSS入场替代克隆轨道,不公开slick内部和多页settings |
|
|
354
|
+
| AntD tour/interface.ts、实际 @rc-component/tour@2.4.0/es/Tour.js、hooks/useTarget.js | 目标定位/滚动/观察、SVG聚光、步骤/完成/关闭、按钮取消、重开只重置非受控且不额外通知;复用Dialog栈/焦点,使用模态禁用目标交互,未复制非模态/semantic扩展 |
|
|
355
|
+
| AntD qr-code/index.tsx、实际 @rc-component/qrcode@2.0.0/es/hooks/useQRCode.js / libs/qrcodegen | 真实UTF-8/SVG/canvas编码、四ECC/quietmargin、图标、状态/刷新、容量告警及恢复;SVG默认,编码器及Babelhelpers构建打包,零runtime依赖、独立公开类型与发布MITnotice |
|
|
356
|
+
| AntD watermark/index.tsx / useWatermark.ts | 原生文字/图片tile、styledlines、尺寸/offset/旋转、resize、失败回退、同节点移除恢复;layout observer快照避免正常React更新误报,不复制继承canvas缓存,4096tile上限及非安全控制边界已说明 |
|
|
357
|
+
| AntD border-beam/BorderBeam.tsx、util.ts | 测量/多段/时长/像素尺寸/gradient/减少动画;SVGdash轨迹代替host注入和非均匀圆角,wrapper布局差异明确 |
|
|
358
|
+
|
|
359
|
+
新增14项测试,全库 **641测试通过**,verify全绿、Storybook构建通过,原有16lint警告未增加;只读最终审查通过。额外jsqr仅dev依赖,以独立解码器验证四ECC与UTF-8;打包ESM/CJS/types无qrcode/Babel外部引用,第三方notice随包发布。
|
|
360
|
+
|
|
361
|
+
浏览器1280/390 ×亮/暗 ×13示例共52组无错误/横向溢出,真实Tour步骤、聚光与Finish恢复正常。四张浏览器canvas实际渲染图独立解码均为输入URL。视觉发现BorderBeam无单位终点造成离散动画,已改像素终点,8组复验确认两段连续移动且保持半周相位。证据 `docs/qa/p2-extras-checks.json`、`p2-qr-browser-decode.json`、`p2-beam-motion-checks.json`、`p2-tour-dark.png`。早期矩阵beamOffset=0是修复前读数,以motion复验证据为准。尚未验收A/B/C其他项及Ship模块继续保留待办,未声明全库完成。
|
|
362
|
+
|
|
363
|
+
## 执行记录:P0 Select / MultiSelect 工作包验收(2026-10-08)
|
|
364
|
+
|
|
365
|
+
对照固定 AntD `components/select/index.tsx` 及实际 `rc-select@1.10.1` 的 Select、OptionList、BaseSelect 和 `hooks/useCache`。复用现有 Popover、SearchInput、Checkbox,替换共享选项面板以统一非虚拟与虚拟键盘行为;没有新增依赖。
|
|
366
|
+
|
|
367
|
+
| 计划目标 | 已实现与验收 |
|
|
368
|
+
| ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
369
|
+
| 分组 | label/key/options/disabled;排序限制在组内,过滤保持组归属;组标题参与虚拟几何,不计入选项位置 |
|
|
370
|
+
| 值对象与清除 | labelInValue、defaultValue/defaultValues、远程缺失项标签/禁用缓存、未知值显示;单选 allowClear 发 null,多选保留既有默认清除契约并支持显式清未知值 |
|
|
371
|
+
| 自定义呈现 | optionRender、单选 labelRender、多选 tagRender;保留原生选项语义,清除/标签按钮不嵌套于触发按钮 |
|
|
372
|
+
| 弹层与异步 | open/defaultOpen/onOpenChange;宿主拒绝关闭时保留 query;loading/error/notFoundContent;原生按钮 ref、事件取消及组件 disabled 覆盖 |
|
|
373
|
+
| 组合回归 | 组内虚拟键盘末项、窗口缩小、滚动焦点保留、标签/分词/IME/数量限制、缓存标签进入变更 payload、缓存禁用标签不可取消 |
|
|
374
|
+
|
|
375
|
+
有意保留 Klun 单选/多选分离、string 键、button ref 及 dialog/menu/checkbox 语义,未冒充 AntD 数值键、combobox handle 或全部内部 prop 的替代实现。说明见 `docs/components.md`。默认 multiple Clear 只清当前 options;显式 allowClear=true 清未知值,tags 默认清自建标签,禁用值始终保留。
|
|
376
|
+
|
|
377
|
+
专项新增 9 项、原有 9 项选择器测试通过,全库 650 项、`pnpm verify`、Storybook 和只读审查通过,lint 保持 16 个既有警告。修复审查发现的缓存回调/禁用绕过及百分比宽度叠乘问题;浏览器 1280/390 × 亮/暗的 20 组检查均样式实际生效、无页面错误或横向溢出,width/inlineSize=50% 的按钮与 wrapper 均为父宽一半。真实键盘从搜索 Up 到 Item 9-99,scrollTop=36144,仅 9 个选项 DOM。证据 `docs/qa/p0-select-checks.json`、`p0-select-virtual-dark.png`。本地反复导航曾发生 Storybook 资源加载失败/空白页,重新加载恢复;最终记录仅收录完整加载后的检查。此工作包勾选完成,其余未勾选项继续执行。
|
|
378
|
+
|
|
379
|
+
## 执行记录:P0 Transfer 工作包验收(2026-10-08)
|
|
380
|
+
|
|
381
|
+
对照固定 AntD `components/transfer/index.tsx`、Section、ListBody、interface 和 useSelection(Transfer 不依赖独立 rc-transfer)。复用 CheckboxGroup、SearchInput、Pagination,保留已有 items/string 键契约与未知目标值。
|
|
382
|
+
|
|
383
|
+
| 计划目标 | 已实现与验收 |
|
|
384
|
+
| ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
385
|
+
| 独立勾选 | selectedKeys/defaultSelectedKeys、onSelectChange 左右分区;目标值与勾选值分别受控,宿主拒绝更新时不隐式覆盖 |
|
|
386
|
+
| 移动事件 | onChange(targetKeys, direction, moveKeys),right 加入目标、left 移出;只移动当前侧已知且启用的勾选项,未知/禁用目标保留 |
|
|
387
|
+
| 分页 | 每侧独立页码/容量、搜索回第一页、总数减少夹紧;跨页/过滤保留选择,select-all 仅影响当前页启用项 |
|
|
388
|
+
| 自定义列表 | render、children(listProps)、footer、showSelectAll;自定义列表自己分页;item/bulk/replace 回调过滤未知/错误侧/禁用 key,并在禁用/加载/卸载后失效 |
|
|
389
|
+
| 搜索及组合 | filterOption/onSearch 含方向、富标签文本/searchText、原生 div 属性/ref、状态边界、RTL 操作图标、窄屏上下堆叠 |
|
|
390
|
+
|
|
391
|
+
有意保留 textual titles、ready/loading/error 及 string keys;不 alias AntD dataSource、oneWay 或内部语义样式。旧单参数 onChange 回调类型仍兼容,测试更新明确验证新增参数。修正 CheckboxGroup 的 resolved disabled 未转布尔导致组件显式 false 仍继承全局 true 的共享根因。
|
|
392
|
+
|
|
393
|
+
新增 9 项回归、原 AdvancedPickers 9 项通过;全库 659 项、`pnpm verify`、Storybook 和只读审查通过,lint 仍 16 个既有警告。浏览器 1280/390 × 亮/暗共 16 组,无页面错误/横向溢出且样式实际生效;真实操作在第二页勾选 Member 5 后,第一页面已有的 Member 0 一起移入目标,计数为 2。证据 `docs/qa/p0-transfer-checks.json`、`p0-transfer-pagination-dark.png`。此工作包勾选完成,其余项继续执行。
|
|
394
|
+
|
|
395
|
+
## 执行记录:P0 Tree / DirectoryTree 工作包验收(2026-10-08)
|
|
396
|
+
|
|
397
|
+
对照固定 AntD Tree、DirectoryTree、utils/iconUtil,以及实际 `@rc-component/tree@1.4.0` 的 Tree、NodeList、util.calcDropPosition 与 conductUtil。复用现有 Tree 引擎,内部区分目录选择,不新增公共 directory 参数或外部依赖。
|
|
398
|
+
|
|
399
|
+
| 计划目标 | 已实现与验收 |
|
|
400
|
+
| ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
401
|
+
| 范围合并 | 缓存最后普通/Ctrl/Meta 集合,Shift 合并范围且后续 Shift 只缩放临时范围;Ctrl/Meta+Shift 以切换为优先;忽略禁用/不可选节点 |
|
|
402
|
+
| expandAction | 目录选择与 click/doubleClick/false 独立;普通目录点击替换选择;regular Tree 原有多选加选保持;Directory selected info 恒 true 对齐参考 |
|
|
403
|
+
| 键类型 | treeData 数字键含 0 输入规范化为 string;混合 1/'1' 冲突拒绝、非有限数字拒绝;保留现有路由/TreeSelect 的 string 状态、回调与 ref 契约,明确有意差异 |
|
|
404
|
+
| 拖放契约 | 上半区通过前一可见行解析 gap;展开分支 inside;末后代水平移出/嵌入、RTL 镜像;校验 cycles/disabled/no-op/leaf;allowDrop 相对方向不变 |
|
|
405
|
+
| dropPosition | onDrop 使用目标兄弟索引+相对方向,新增 relativeDropPosition 供旧相对逻辑迁移,onMove 的 before/after/inside 不变 |
|
|
406
|
+
| 图标与键盘 | true 默认叶文件图标、false 连接线、函数图标状态;RTL 方向键/Alt 操作、逻辑连接线、IME 键不改状态;全局禁用的组件显式 false 在树检查框也生效 |
|
|
407
|
+
|
|
408
|
+
新增 10 项回归、原 TreeDetails 28 项通过;全库 669 项、`pnpm verify`、Storybook 和只读审查通过,lint 仍 16 个既有警告。浏览器 1280/390 × 亮/暗共 20 组无页面错误/横向溢出,虚拟 DOM 有界、样式已生效;macOS 实际 Meta 选择得到 a,c,Shift Other 后 a,c,other,Alice 保留而 Bob 未误选。证据 `docs/qa/p0-tree-checks.json`、`p0-tree-range-dark.png`。
|
|
409
|
+
|
|
410
|
+
原生拖动确认触发 dragstart,后续验收被 Chrome 应用切换中断,未确认最终落点并已取消悬挂拖动;本批原生落点算法证据是带实际坐标/矩形的几何回归,不冒充原生拖放完整验收。onDrop 位置迁移和键规范化差异详见 `docs/components.md`。计划中的能力工作包勾选完成,原生拖放最终落点作为实机验收限制保留,其他未勾选项继续执行。
|
|
411
|
+
|
|
412
|
+
## 执行记录:P0 Cascader 工作包验收(2026-10-08)
|
|
413
|
+
|
|
414
|
+
对照固定 AntD `components/cascader/index.tsx`、interface 与实际 `@rc-component/cascader@1.22.0` 的 Cascader、OptionList 和 checked strategy。复用 Tree、Menu、Popover、CheckboxGroup;树检查传导提取为内部共享工具,无新增依赖。前批 Tree 提交 `28dbd6a`。
|
|
415
|
+
|
|
416
|
+
| 计划目标 | 已实现与验收 |
|
|
417
|
+
| ---------- | ------------------------------------------------------------------------------------------------------- |
|
|
418
|
+
| 多选 | string[][]、父子传导/半选、禁用屏障、SHOW_PARENT/SHOW_CHILD、过滤外选择保留、未知/远程标签缓存 |
|
|
419
|
+
| 中间节点 | changeOnSelect;指针选择分支保留弹层,叶节点或键盘确认关闭;普通单选保持原 Menu 语义 |
|
|
420
|
+
| 异步加载 | 完整路径参数、去重、加载/失败/重试、空叶、源数据/loader 身份变化与卸载竞态保护;同批并发结果原子合并 |
|
|
421
|
+
| 字段映射 | value/label/children 映射、ReactNode 标签、完整路径唯一性、重复/循环输入拒绝 |
|
|
422
|
+
| 搜索与受控 | full-path 搜索、自定义过滤/渲染、open/searchValue、宿主拒绝关闭保留搜索、清除禁用保护、原生按钮属性/ref |
|
|
423
|
+
|
|
424
|
+
有意保留 string 路径、单参数 onChange、原生 button ref;高级层级用 Tree 键盘/语义,普通单选保留 Menu,不复制 AntD 列式面板、数值键及全部内部属性。异步可直接返回子项或由宿主更新 options,契约见组件说明。
|
|
425
|
+
|
|
426
|
+
新增14项回归,全库 **683项测试通过**,`pnpm verify` 全绿、Storybook构建通过,原有16lint警告未增加;只读复审确认并发覆盖修复通过。1280/390 ×亮/暗 ×5示例共20组无页面错误/横向溢出;真实选择 Asia 显示合并路径并保持打开,加载失败→Retry→选择 Loaded location 显示完整路径且关闭。证据 `docs/qa/p0-cascader-checks.json`、`p0-cascader-multiple-dark.png`。本地快速导航的 Storybook索引请求偶发 Failed to fetch,重新加载恢复,最终记录只包含已加载页面。此工作包勾选完成,其余未勾选项继续执行。
|
|
427
|
+
|
|
428
|
+
## 执行记录:P0 DataTable 工作包验收(2026-10-08)
|
|
429
|
+
|
|
430
|
+
固定参考 AntD `table/InternalTable.tsx`、`hooks/useSorter.tsx`、`hooks/useSelection.tsx`,实际 `@rc-component/table@1.11.1` 的 Header/Header、hooks/useFlattenRecords、VirtualTable/BodyGrid。保留现有 table 模块、Column API 和主题,未增加依赖。前批 Cascader 提交 `b970673`。
|
|
431
|
+
|
|
432
|
+
| 计划目标 | 已实现与验收 |
|
|
433
|
+
| -------------- | ------------------------------------------------------------------------------------------------------------------ |
|
|
434
|
+
| 树形行 | getChildren、根分页后展开、各层排序/过滤、深度缩进、受控/非受控 expansion、rowExpandable、重复/循环键拒绝 |
|
|
435
|
+
| 分组表头 | ColumnGroup/ColumnDefinition、嵌套组、隐藏分支、原生 colSpan/rowSpan、colgroup 叶宽与同侧固定组 |
|
|
436
|
+
| 虚拟行 | 固定行高窗口、overscan、非有限尺寸兜底、数据缩小夹紧、窗口外聚焦行保留、跨窗口键盘;树/分组表头/固定列组合 |
|
|
437
|
+
| 多列排序 | sorts/defaultSorts/onSortsChange、sortPriority、高优先级先比较、三态循环、受控拒绝仍发提议事件;既有单 sort 保留 |
|
|
438
|
+
| 单选 | 原生同名 radio、替换选择、禁用行保护,不显示 select-all 或批量栏 |
|
|
439
|
+
| 统一事件与汇总 | onChange 单次报告 sort/filter/paginate 及提议状态、远程 total;summary 与 currentDataSource 接收处理后分页前根记录 |
|
|
440
|
+
|
|
441
|
+
有意差异:保留 string key、rows/getChildren 和单对象 change;虚拟行高固定并裁剪富内容。任意 onCell、分组 body 或详情展开使用完整渲染,保留合并单元格和详情高度,未复制 rc-table 的动态测量/跨窗口合并修复及内部 ref。summary 原分页内范围调整为分页前根范围,已在组件文档/CHANGELOG说明;原数据不变,currentDataSource 根内 children 保留宿主记录,排序后的子层用于呈现。
|
|
442
|
+
|
|
443
|
+
新增16项回归、原表格细节12项通过;全库 **699项测试通过**,`pnpm verify` 全绿、Storybook构建和只读最终复审通过,原有16lint警告未增加。复审修正右固定组偏移、手动滚动焦点丢失、非法几何与详情ARIA回归。浏览器1280/390 ×亮/暗 ×5示例共20组,无页面错误/横向溢出;10000行仅14DOM行,实测45px,跨窗口焦点到25-0、scrollTop=1002。横滚338后左固定x=40,右固定边缘324为滚动视口右边;原生单选替换/禁用和树展开正常。证据 `docs/qa/p0-table-checks.json`、`p0-table-virtual-dark.png`。本工作包勾选完成,其余未勾选项继续执行。
|
|
444
|
+
|
|
445
|
+
## 执行记录:P0 DatePicker / DateRangePicker 工作包验收(2026-10-08)
|
|
446
|
+
|
|
447
|
+
固定参考 AntD `date-picker/generatePicker/generateSinglePicker.tsx`、generateRangePicker 与实际 `@rc-component/picker@1.12.2` 的 interface、PickerInput/SinglePicker、RangePicker、useRangeDisabledDate。复用现有日历、Input、TimePicker、Tag 和 Popover;严格 ISO/周期/格式函数放在内部 utils,无新依赖。前批 DataTable 提交 `8f4a5e7`。
|
|
448
|
+
|
|
449
|
+
| 计划目标 | 已实现与验收 |
|
|
450
|
+
| ----------- | ------------------------------------------------------------------------------------------------------------------ |
|
|
451
|
+
| 时间选择 | 本地 datetime、默认时刻/原生秒步长、确认/取消、完整值 disabledTime、同日 min/max;先选日期再调合法时刻,不误禁整天 |
|
|
452
|
+
| picker 模式 | date/week/month/quarter/year;ISO周跨年、周期起点提交、嵌套禁用覆盖、RTL箭头及真实日期焦点 |
|
|
453
|
+
| 多选 | string[]、周期去重/排序、受控标签、暂存/确认/取消、JSON表单提交与required验证 |
|
|
454
|
+
| 预设 | 懒函数点击时求值、边界拒绝;范围对先验证原值、再规范化、再原子校验提交 |
|
|
455
|
+
| 格式/解析 | 明确 YYYY/MM/DD/HH/mm/ss/Q tokens及自定义formatter/parser;严格闰日、无效draft原生validity、blur回退、format切换 |
|
|
456
|
+
| 范围及受控 | 保留partial tuple/拒绝倒序、共享日期/时刻边界和from/range上下文、单端弹层受控;窄屏范围上下布局 |
|
|
457
|
+
|
|
458
|
+
有意差异:保留 ISO string/原生 input ref,周期值为周一/月季首/January1,时间无时区转换;非date模式忽略showTime,多选类型排除时间。明确token解析替代Dayjs格式/本地化解析,不复制masked editing、decade drilldown、毫秒/12小时列及rc-picker内部句柄。needConfirm控制日历暂存,native entry和preset即时提交,未声明AntD全部API替代。
|
|
459
|
+
|
|
460
|
+
新增19项回归、原日期/Form相关30项通过;全库 **718项测试通过**,`pnpm verify`全绿、Storybook构建和只读最终复审通过,原有16lint警告未增加。修正时间误禁整天、内部禁用继承、鼠标后方向键起点、范围预设规范化、格式draft有效性及周焦点卡住。浏览器1280/390 ×亮/暗 ×9示例共36组,另4组范围布局检查均通过,无页面错误/横向溢出且一个日历tab stop。实际原生时间ArrowUp从10:30到11:30,Apply提交2026-10-09T11:30;多选暂存后Apply显示两日期。原生time的脚本fill未派发React变更,故提交证据使用真实键盘而非fill。证据 `docs/qa/p0-date-checks.json`、`p0-date-time-dark.png`。此工作包勾选完成,其余未勾选项继续执行。
|
|
461
|
+
|
|
462
|
+
## 执行记录:P0 ConfigProvider(2026-10-08)
|
|
463
|
+
|
|
464
|
+
状态:**工作包完成**。实现提交:`e3fa1f8`。
|
|
465
|
+
|
|
466
|
+
参考:固定 AntD 6.6.5 `components/config-provider/index.tsx`、`context.ts`、
|
|
467
|
+
`hooks/useTheme.ts`、`DisabledContext.tsx`、locale 文件及 Modal/Tooltip/App 的上下文路径。
|
|
468
|
+
|
|
469
|
+
| API/行为 | 实现与验收 | 有意保留的差异 |
|
|
470
|
+
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------- |
|
|
471
|
+
| 嵌套配置 | locale/direction/disabled/theme 省略或 undefined 继承;显式 false 覆盖禁用;tokens 逐键合并、undefined 继承 | locale 为 en-US/zh-CN,不接受 AntD locale 对象 |
|
|
472
|
+
| 主题与 token | 子层亮/暗主题;自定义 CSS 变量保留父值;亮色重置暗色父层;生成器正确识别组合选择器 | Klun CSS tokens,不复制 AntD 算法、CSS-in-JS、component theme、prefixCls |
|
|
473
|
+
| portal | Dialog/Popover/Tooltip/Toast/ContextMenu/全屏 Spin/AiPanel 携带最近语言、方向、主题和 tokens,支持配置更新 | body portal,不新增 getPopupContainer;App 静态调用依附已挂载宿主 |
|
|
474
|
+
| locale/disabled 消费 | Pagination 中文/英文文案与方向图标;Select/MultiSelect/Cascader 内置选择/搜索/加载文案;日期操作;Table 状态与选择/排序/过滤/分页/展开/分组/内置行操作 | 宿主传入内容不翻译;单元格业务控件由宿主管理;原生输入交互由浏览器处理 |
|
|
475
|
+
| RTL 镜像 | 文字对齐、单侧/四值间距、边框、角半径、边缘操作;Popover start/end;Table 表头/行/骨架固定列、阴影与网格方向键 | left/right 固定列表示领先/末端列组;图表数学坐标、测量后的 Nav 指示器、居中 transform 保留物理几何 |
|
|
476
|
+
| React 18 兼容 | 禁用行操作和被批量条覆盖的表头通过 ref 设置原生 inert | 不依赖 React 19 布尔 inert 属性转发 |
|
|
477
|
+
|
|
478
|
+
- [x] 15 项新配置回归覆盖嵌套/更新/undefined、portal 主题、RTL 对齐、禁用覆盖、表格操作/固定列/骨架和组合控件。
|
|
479
|
+
- [x] 代码审查通过;`pnpm verify` 全部通过(733 项测试),16 个原有 lint 警告;Storybook 构建通过。
|
|
480
|
+
- [x] 16 个浏览器矩阵:Chinese/Rtl/NestedThemes/DisabledOverride × 1280/390 × 亮/暗,无页面横向溢出。
|
|
481
|
+
- [x] 实际交互:全局禁用下弹窗 Pagination disabled=false 菜单提交 50 条/页;暗色 RTL 页中亮色子弹窗主题/语言/方向/token 一致。
|
|
482
|
+
- [x] 类型、组件说明、README、变更记录和生成 API/token 文档同步。旧 token 生成器误将 auto 重复项追加到 dark 表的问题一并消除。
|
|
483
|
+
|
|
484
|
+
证据:`src/__tests__/ConfigProvider.test.tsx`、`src/components/ConfigProvider.stories.tsx`、
|
|
485
|
+
`docs/qa/p0-config-checks.json`、`docs/qa/p0-config-nested-dark.png`。
|
|
486
|
+
其余未勾选工作包仍待完成;本记录不代表全库完成或 AntD API 全量兼容。
|
|
487
|
+
|
|
488
|
+
## 执行记录:P1 Menu / ContextMenu(2026-10-08)
|
|
489
|
+
|
|
490
|
+
状态:**两个工作包完成**。实现提交:`e078ec4`。
|
|
491
|
+
|
|
492
|
+
参考:固定 AntD 6.6.5 `components/menu/menu.tsx`、`interface.ts`、
|
|
493
|
+
`components/dropdown/dropdown.tsx`;实际 `@rc-component/menu` 1.5.0
|
|
494
|
+
`Menu.js`、`MenuItem.js`、`SubMenu/index.js`、`hooks/useAccessibility.js`。
|
|
495
|
+
|
|
496
|
+
| API/行为 | 实现与验收 | 有意保留的差异 |
|
|
497
|
+
| ---------- | ------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------- |
|
|
498
|
+
| 选中/展开 | controlled/default selectedKeys/openKeys;单/多选;层级叶项通知;closeOnSelect;动态禁用父分支保护 | string id 与回调,不复制 keyPath/domEvent 事件对象 |
|
|
499
|
+
| 模式与层级 | vertical/horizontal/inline;inline 跨展开层级行走;popup 多层返回;RTL 展开方向/caret | 不复制 ItemGroup/children API、inlineCollapsed、水平自动溢出收集、hover delay |
|
|
500
|
+
| 键盘与焦点 | 单一根 Tab 入口,命令 tabIndex=-1;箭头/Home/End/typeahead;Enter/Space;逐层 Escape/backward;动态删除/禁用恢复,外部焦点保留 | 搜索是 Klun 当前层过滤;宿主通过 Popover/Dropdown 管理整体打开 |
|
|
501
|
+
| IME | React handler 和 window/document capture 忽略组合输入,候选方向键不抢焦点、取消不关闭层 | 保留浏览器 IME 行为 |
|
|
502
|
+
| 上下文触发 | 指针、ContextMenu 键、Shift+F10;openAt/context;宿主 preventDefault 取消;disabled;quick strip | 对应 AntD Dropdown contextMenu 触发,保留 Klun hook/list 接口 |
|
|
503
|
+
| 定位与关闭 | viewport 翻转/8px clamp;长菜单限制高度、内部滚动;页面滚动关闭;逐层关闭/还原焦点 | pointer anchor;不新增 AntD align/forceRender 配置 |
|
|
504
|
+
| 配置与内容 | locale 默认搜索/空状态;disabled/RTL/theme/tokens 继承;禁用项跳过;原有样式/API 保持 | 宿主内容保持原样 |
|
|
505
|
+
|
|
506
|
+
- [x] 19 项新回归;相关原有受控/默认、多选、模式、键盘、边界/关闭和禁用组合测试通过。
|
|
507
|
+
- [x] 审查通过;`pnpm verify` 全部通过(752 项测试),lint 维持16个原有警告;Storybook构建通过。
|
|
508
|
+
- [x] 24 个浏览器矩阵:InlineSelection/Horizontal/NestedNavigation/RtlNavigation/NestedCommands/ViewportBoundary ×1280/390×亮/暗;单一菜单入口、命令不产生额外 Tab 停靠、页面无横溢。
|
|
509
|
+
- [x] 真实长菜单高度828px/内容1464px,End 聚焦第40项并内部滚动,保持打开;RTL Shift+F10、ArrowLeft 进入两层、ArrowRight/Escape 逐层返回,最终还原触发器焦点。
|
|
510
|
+
- [x] 文档、变更记录、示例同步;公开类型不变,生成 API 文档无差异。
|
|
511
|
+
|
|
512
|
+
证据:`src/__tests__/MenuAlignment.test.tsx`、`src/__tests__/P1Navigation.test.tsx`、
|
|
513
|
+
`src/__tests__/ContextMenu.test.tsx`、`docs/qa/p1-menu-checks.json`、
|
|
514
|
+
`docs/qa/p1-menu-long-dark.png`。其他未勾选工作包继续处理。
|
|
515
|
+
|
|
516
|
+
## 执行记录:P1 Pagination(2026-10-08)
|
|
517
|
+
|
|
518
|
+
状态:**工作包完成**。实现提交:`5056ec7`。
|
|
519
|
+
|
|
520
|
+
参考:固定 AntD 6.6.5 `components/pagination/Pagination.tsx`、`index.en-US.md`;
|
|
521
|
+
实际 `@rc-component/pagination` 1.4.0 `es/Pagination.js`、`Options.js`。
|
|
522
|
+
|
|
523
|
+
| API/行为 | 实现与验收 | 有意保留的差异 |
|
|
524
|
+
| ---------- | ------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------- |
|
|
525
|
+
| 受控/默认 | page/defaultPage、pageSize/defaultPageSize;独立状态;拒绝受控更新仍通知提议值;用户操作汇总 onChange | 保留 page/onPageChange/onPageSizeChange 命名 |
|
|
526
|
+
| 容量切换 | 选项去重/安全正整数;页容量与页码成对通知;关闭菜单/还原焦点 | 保留 Klun reset page=1,而非 AntD 保留并钳位当前页;默认显示策略保持原有回调驱动 |
|
|
527
|
+
| 快速跳转 | 数字输入,Enter 提交/blur 清空;归一化后当前页不通知;IME Enter 保留;超界钳位 | 不增加 AntD simple/itemRender/jump 按钮 API |
|
|
528
|
+
| 总数与边界 | 总数缩减只钳位展示、不发合成事件;恢复返回原请求页;空结果禁用第1页且不提交翻页;数值限制到 MAX_SAFE_INTEGER | 超大非精确整数规范化;unsafe容量选项忽略 |
|
|
529
|
+
| 布局/配置 | 单页隐藏、总数范围回调、控制显隐与宿主插槽;locale/RTL/disabled覆盖;窄屏换行 | 保留 Klun footer 样式,不提供任意原生属性转发 |
|
|
530
|
+
| 状态关闭 | 禁用/隐藏容量控制时丢弃内部打开状态,再启用不复活旧菜单 | 内部容量菜单不增加受控 open API |
|
|
531
|
+
|
|
532
|
+
- [x] 7 项新边界/受控回归及原有 Data/P1Primitives/ConfigProvider 测试通过。
|
|
533
|
+
- [x] 代码审查通过;`pnpm verify` 全绿(759 项测试),lint 保持16个原有警告;Storybook构建通过。
|
|
534
|
+
- [x] 16 个浏览器矩阵:Controlled/Uncontrolled/DynamicResults/EmptyResults ×1280/390×亮/暗,无页面横向溢出;空结果当前页禁用。
|
|
535
|
+
- [x] 实际交互:260→12显示第1页、恢复260返回第5页;容量50回第1页;快速999钳位第6页,显示251–260,下一页禁用,输入清空。
|
|
536
|
+
- [x] 组件文档/示例/变更记录同步;公开类型未变,生成 API 文档无差异。
|
|
537
|
+
|
|
538
|
+
证据:`src/__tests__/PaginationAlignment.test.tsx`、`docs/qa/p1-pagination-checks.json`、
|
|
539
|
+
`docs/qa/p1-pagination-dark.png`。当前 A/B/C/D 共50个未勾选工作包继续处理。
|
|
540
|
+
|
|
541
|
+
## 执行记录:P1 Avatar(2026-10-08)
|
|
542
|
+
|
|
543
|
+
状态:**工作包完成**。实现提交:`d9b9dbe`。
|
|
544
|
+
参考:固定 AntD 6.6.5 `components/avatar/Avatar.tsx`、`AvatarContext.ts`、`AvatarGroup.tsx`;文本尺寸承载为原生 ResizeObserver 测量(AntD 使用其 observer 包装)。
|
|
545
|
+
|
|
546
|
+
| 能力 | 结果与保留差异 |
|
|
547
|
+
| ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
548
|
+
| 图片 | src/srcSet(含仅 srcSet)、crossOrigin/loading;失败回退,onError=false 保留;候选身份变化重试 |
|
|
549
|
+
| 文字/尺寸 | children 优先于 icon/姓名缩写;数值尺寸、circle/square、gap 和缩放;Unicode 字素不截断 emoji;旧引擎无 Segmenter 时仅保证代码点 |
|
|
550
|
+
| 组合与语义 | 数值/形状一致应用于 Stack 溢出;隐藏姓名提供 label/title;span/button 原生属性及 ref;Placeholder 消费禁用配置 |
|
|
551
|
+
| 有意差异 | 保留 Klun 色彩和 xs/sm/md/lg 尺寸;Stack people/max 数据 API。未实现 AntD 响应式尺寸、ReactNode src、Group children 上下文/Popover 和 semantic 样式映射 |
|
|
552
|
+
|
|
553
|
+
新增7项回归,全库766项、`pnpm verify`、Storybook及只读终审通过,保持16个既有lint警告。1280/390 ×亮/暗 ×4示例共16组无横向溢出,实际图片失败显示缩写;长文字40→80px头像实测约32→72px。快速导航出现一次Storybook模块加载失败,重新加载恢复;证据仅记录成功页面。
|
|
554
|
+
证据:`src/__tests__/AvatarAlignment.test.tsx`、`docs/qa/p1-avatar-checks.json`、`docs/qa/p1-avatar-dark.png`。其他49个未勾选工作包继续执行。
|
|
555
|
+
|
|
556
|
+
## 执行记录:P1 Card(2026-10-08)
|
|
557
|
+
|
|
558
|
+
状态:**工作包完成**。实现提交:`1642466`。
|
|
559
|
+
参考:固定 AntD 6.6.5 `components/card/Card.tsx`、`CardGrid.tsx`、`CardMeta.tsx`;标签交互复用已存在的 Klun Tabs(参考承载为 @rc-component/tabs)。
|
|
560
|
+
|
|
561
|
+
| 能力 | 结果与保留差异 |
|
|
562
|
+
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------- |
|
|
563
|
+
| 标题/额外操作/加载 | 无标题的 extra、0值标题/cover;loading隐藏待加载body并消费locale;cover/actions保留 |
|
|
564
|
+
| 布局变体 | medium/small、inner、bordered及优先variant;保留section和flush API;原生属性/style/ref |
|
|
565
|
+
| 组合 | Card.Grid/Meta 与独立 CardGrid/CardMeta;原生div/ref;Grid三列、480px下单列,宿主width可覆盖;Tabs以组合提供,未加入tabList别名 |
|
|
566
|
+
| 响应式 | 长标题/metadata/action槽可收缩和断行;small不污染嵌套medium;smallGrid外围padding=0 |
|
|
567
|
+
|
|
568
|
+
新增4项回归,全库770项、`pnpm verify`、Storybook及只读复审通过,保持16个既有lint警告。1280/390 ×亮/暗 ×4示例16组无横向溢出;外small padding12、内medium16,smallGrid padding0,宽屏三列/窄屏一列;实际页签切换显示All updates。
|
|
569
|
+
证据:`src/__tests__/CardAlignment.test.tsx`、`docs/qa/p1-card-checks.json`、`docs/qa/p1-card-dark.png`。保留Klun几何和CSS token,不提供AntD prefixCls/semantic style映射。其他48个未勾选工作包继续执行。
|
|
570
|
+
|
|
571
|
+
## 执行记录:P1 Tag / Divider(2026-10-08)
|
|
572
|
+
|
|
573
|
+
状态:**两个工作包完成**。实现提交:`d83d644`。
|
|
574
|
+
参考:固定 AntD 6.6.5 `components/tag/index.tsx`、`CheckableTag.tsx`、`components/divider/index.tsx`;这些交互由组件自身及原生按钮承担,无独立复杂控件依赖。
|
|
575
|
+
|
|
576
|
+
| 能力 | 结果与保留差异 |
|
|
577
|
+
| ----------------- | --------------------------------------------------------------------------------------------------------------------- |
|
|
578
|
+
| Tag关闭/选择 | 独立原生check/close按钮;受控checked与defaultChecked;关闭阻断父点击,preventDefault保留;禁用配置/显式覆盖和中文标签 |
|
|
579
|
+
| Tag颜色/图标/属性 | 保留CSS颜色与Klun变体;宿主style优先;ReactNode或已有Icon名字;native span/ref;长label省略但可访问名称完整 |
|
|
580
|
+
| Divider方向/文本 | 水平/垂直、start/center/end遵循RTL;长caption换行,垂直caption忽略;solid/dashed/dotted优先variant,保留dashed |
|
|
581
|
+
| Divider间距/属性 | 原生div/ref/style;宿主控制间距;保留Klun几何,未加入物理left/right、semantic映射和AntD尺寸别名 |
|
|
582
|
+
|
|
583
|
+
新增5项回归,全库775项、`pnpm verify`、Storybook和只读审查通过,保持16个既有lint警告。验收生成的前批Card JSON格式问题已修正,完整verify重跑通过。1280/390 ×亮/暗 ×4示例16组无横向溢出,RTL start/end短轨与继承方向一致;实按Space选中受控标签,取消关闭后仍保留选中。不提供AntD preset颜色/CheckableTag别名,保持现有pressed-button语义。
|
|
584
|
+
证据:`src/__tests__/TagDividerAlignment.test.tsx`、`docs/qa/p1-tag-divider-checks.json`、`docs/qa/p1-tag-dark.png`、`docs/qa/p1-divider-dark.png`。其他46个未勾选工作包继续执行。
|
|
585
|
+
|
|
586
|
+
## 执行记录:P1 Segment(2026-10-08)
|
|
587
|
+
|
|
588
|
+
状态:**工作包完成**。实现提交:`f6a0aa9`。
|
|
589
|
+
参考:固定 AntD 6.6.5 `components/segmented/index.tsx`;实际 `@rc-component/segmented` 1.4.0 `es/index.js`。与其一致保留不存在的value,不自动改变宿主数据。
|
|
590
|
+
|
|
591
|
+
| 能力 | 结果与保留差异 |
|
|
592
|
+
| ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
593
|
+
| 状态/禁用 | 受控value/defaultValue;选当前值不通知;provider/item禁用及显式false;默认名称消费locale |
|
|
594
|
+
| 键盘/焦点 | 单Tab入口;RTL左右/垂直上下/Home/End跳过禁用;IME/canceled event忽略;移除/禁用恢复owned focus,外部焦点不抢;无可用项root可聚焦 |
|
|
595
|
+
| 内容/布局 | ReactNode标签/图标、block、原生div属性/style/ref;长标签收缩/省略;标签不可嵌套交互控件 |
|
|
596
|
+
| Chip与差异 | native button/ref、providerdisabled;原生aria-pressed保留,显式pressed优先。保留string options/group pressed-button,不实现AntD radio/name表单提交、primitive/number简称、size/shape/semantic别名 |
|
|
597
|
+
|
|
598
|
+
新增7项回归,全库782项、`pnpm verify`、Storybook及只读复审通过,保持16个既有lint警告。审查修正Chip aria-pressed原生属性回归。1280/390 ×亮/暗 ×4示例16组均一个键盘入口且无横向溢出;真实RTL ArrowLeft从列表跨禁用到看板,Home返回列表。
|
|
599
|
+
证据:`src/__tests__/SegmentAlignment.test.tsx`、`docs/qa/p1-segment-checks.json`、`docs/qa/p1-segment-dark.png`。其他45个未勾选工作包继续执行。
|
|
600
|
+
|
|
601
|
+
## 执行记录:P1 Nav / Sidebar(2026-10-08)
|
|
602
|
+
|
|
603
|
+
状态:**两个工作包完成**。实现提交:`4207da0`。
|
|
604
|
+
参考:固定 AntD 6.6.5 `components/menu/menu.tsx`、`layout/Sider.tsx`;菜单行为承载的 @rc-component/menu 1.5.0 已在Menu工作包核对。Nav为宿主路由导航,Sidebar为Klun壳层,不强行新增AntD同名别名。
|
|
605
|
+
|
|
606
|
+
| 能力 | 结果与保留差异 |
|
|
607
|
+
| ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
608
|
+
| Nav路由/键盘 | aria-current page,value/onChange受控;当前点击不通知;键盘从实际焦点开始,受控拒绝不妨碍继续移动;空string ID有效;IME/cancel忽略 |
|
|
609
|
+
| Nav弹层/动态内容 | More/portal事件不触发导航;禁用/移除overflow清旧open;context commands消费item/Nav禁用和显式false;rich-label名称取文本;ownedfocus恢复;观察目标尺寸 |
|
|
610
|
+
| Sidebar收起/布局 | shell provider与prop覆盖,原生aside属性/ref;collapsed保持内容但inert/hidden/零宽;既有<=1024px隐藏规则保留;嵌套Menu扩展导航 |
|
|
611
|
+
| Sidebar宽度/输入 | controlled/default width、finite min/max夹取;primary pointer、cancel/lostcapture终止;RTL箭头/拖动方向、Home/End和修饰/IME保护;locale名称 |
|
|
612
|
+
|
|
613
|
+
新增9项回归,全库791项、`pnpm verify`、Storybook及只读复审通过,保持16个既有lint警告。修正审查发现的空string ID回归。1280/390 ×亮/暗 ×4示例16组无页面横向溢出,长Nav局部滚动,移动Sidebar display=none;真实RTL选择plan,More内ArrowRight不改路由,Enter提交wiki并关闭恢复trigger;侧栏ArrowLeft 300→316,收起width0/inert=true,展开保留316。
|
|
614
|
+
证据:`src/__tests__/NavSidebarAlignment.test.tsx`、`docs/qa/p1-nav-sidebar-checks.json`、`docs/qa/p1-nav-dark.png`、`docs/qa/p1-sidebar-dark.png`。拖动primary/lostcapture由pointer回归验证,未另做原生完整拖动实机验收;宿主管理移动导航/外部收起焦点。未提供AntD自动横向折叠、Sider breakpoint回调/trigger/80pxrail/主题别名。其他43个未勾选工作包继续执行。
|
|
615
|
+
|
|
616
|
+
## 执行记录:P1 States / 通用状态与进度(2026-10-08)
|
|
617
|
+
|
|
618
|
+
状态:**A/States、C/Empty/Spin/Skeleton/Result/Progress两个工作包完成**。实现提交:`6f639b0`。
|
|
619
|
+
参考:固定AntD 6.6.5 `components/empty/index.tsx`、`spin/index.tsx`、`skeleton/Skeleton.tsx`、`result/index.tsx`、`progress/index.tsx`/`Steps.tsx`;实际 `@rc-component/progress` 1.0.3 `es/Circle/index.js`、`Line.js`。
|
|
620
|
+
|
|
621
|
+
| 能力 | 映射/结果与保留差异 |
|
|
622
|
+
| ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
623
|
+
| 空/错误/结果 | EmptyState说明/离线、ErrorState alert/宿主重试、通用Empty、静态Result status/403/404/500;原生Empty/Result refs;locale默认及0值内容 |
|
|
624
|
+
| 加载 | LoadingBlock/InlineSpinner/Spin status;Spin delay变更重新等待、cancel/unmount清理;visible时inert,fullscreen配置bodyportal;原生Spin wrapper ref |
|
|
625
|
+
| 占位 | decorative Skeleton/TableSkeleton;primitive默认12px并清非有限尺寸;compound title/avatar/paragraph/static/loading;占位rows最多1000防失控DOM |
|
|
626
|
+
| 进度 | 0–1 value优先percent;边界/success/status/format;line/circle/dashboard/RTL gap;format=null隐藏info、0值label可见;steps最多1000且窄屏gap缩小 |
|
|
627
|
+
| 保留差异 | Klun插画/几何、静态信息不自动alert;无semantic maps、Skeleton元素别名、Spin auto-percent/全局indicator或Progress梯度/颜色数组;宿主负责请求取消及结果切换 |
|
|
628
|
+
|
|
629
|
+
新增8项回归,全库799项、`pnpm verify`、Storybook及只读审查通过,保持16个既有lint警告。1280/390 ×亮/暗 ×4示例16组无页面横向溢出;primitive Skeleton实际12px,1000-step line在295px内scrollWidth=295;fullscreen直属BODY且覆盖视口。真实重试→加载busy/inert=true,ready后均解除。
|
|
630
|
+
证据:`src/__tests__/StatesAlignment.test.tsx`、`docs/qa/p1-states-checks.json`、`docs/qa/p1-states-dark.png`。其他41个未勾选工作包继续执行。
|
|
631
|
+
|
|
632
|
+
## 执行记录:P2 Icon(2026-10-08)
|
|
633
|
+
|
|
634
|
+
状态:**工作包完成**。实现提交:`37a62a0`。
|
|
635
|
+
参考:AntD固定包声明 `@ant-design/icons ^6.3.4`,本批固定官方最低参考6.3.4 `es/components/Icon.js`、`IconBase.js`;Klun继续使用自身PingCode glyph catalog。
|
|
636
|
+
|
|
637
|
+
| 能力 | 结果与保留差异 |
|
|
638
|
+
| --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
639
|
+
| 名称/回退 | own-property glyph lookup;constructor/**proto**/toString/未知值不报错,保留box并warn |
|
|
640
|
+
| 尺寸/属性 | native span/style/ref;CSS尺寸、numeric0,负数夹0,非有限值回CSS默认;宿主style优先 |
|
|
641
|
+
| 语义 | decorative隐藏、意义图标roleimg/name;label/aria-label/非空aria-labelledby可命名,包括fallback;SVG hidden且不聚焦;同类Avatar/IconAvatar原生label引用同步修复 |
|
|
642
|
+
| 差异 | 不导入AntD图标全集、two-tone/iconfont外部script/component/viewBox别名;交互由Button/ActionButton承担 |
|
|
643
|
+
|
|
644
|
+
新增4项回归,全库803项、`pnpm verify`、Storybook及只读复审通过,保持16个既有lint警告。审查修正aria-labelledby被自动隐藏的遗漏。1280/390 ×亮/暗 ×4示例16组无横向溢出;unknown命名box实测24px、roleimg/label保留,size0宽度0,CSS1.5em实际21px。Unknown示例console warning为预期回退诊断。
|
|
645
|
+
证据:`src/__tests__/IconAlignment.test.tsx`、`docs/qa/p2-icon-checks.json`、`docs/qa/p2-icon-dark.png`。其他40个未勾选工作包继续执行。
|
|
646
|
+
|
|
647
|
+
### Charts 完整工作包验收(实现提交 `4b33ad5`)
|
|
648
|
+
|
|
649
|
+
AntD 6.6.5 核心库没有对应图表组件;按其 `components/card/Card.tsx`、`components/avatar/Avatar.tsx` 核对现有 Card/Avatar 组合,保留 Klun CSS 图表,不引入 Ant Design Charts 产品或图表运行时依赖。Crumbs 另属 Breadcrumb 工作包,本次未将其计入 Charts。
|
|
650
|
+
|
|
651
|
+
| 能力 | 结果与保留差异 |
|
|
652
|
+
| ------------ | ----------------------------------------------------------------------------------------------------------- |
|
|
653
|
+
| 空数据及名称 | 柱图/环图/趋势/散点本地化空状态;可自定义 aria-label,数值以可访问描述保留 |
|
|
654
|
+
| 数值边界 | 柱/环非有限与负值归零;环图先缩放再求和防极大值溢出;趋势保留负值且单点可见;散点滤非有限、负坐标钳制至起点 |
|
|
655
|
+
| 交互配置 | 散点原生按钮支持 ConfigProvider 禁用及显式 false 覆盖;数学坐标方向保留,RTL 不镜像数学轴 |
|
|
656
|
+
| 布局 | 环图保持圆形、图例换行、窄屏组合无页面溢出;非法尺寸回退;保留原样式,无 AntD 图表 API 兼容承诺 |
|
|
657
|
+
|
|
658
|
+
新增7项回归,全库 **810项测试通过**;`pnpm verify`、Storybook 构建、只读审查通过,保持16个既有 lint 警告。1280/390 ×亮/暗 ×4示例共16组确认主题生效、无页面横向溢出;真实键盘 Enter 激活 Alpha 后状态显示 selected: alpha。首次快速导航出现 Storybook 模块加载失败,重新加载恢复,证据只记录已加载页面。
|
|
659
|
+
|
|
660
|
+
证据:`src/__tests__/ChartsAlignment.test.tsx`、`docs/qa/p2-charts-checks.json`、`docs/qa/p2-charts-dark.png`。其他39个未勾选工作包继续执行。
|
|
661
|
+
|
|
662
|
+
### SelectionBar 完整工作包验收(实现提交 `9940577`)
|
|
663
|
+
|
|
664
|
+
AntD 6.6.5 core 无对应批量条,已读取 `components/table/hooks/useSelection.tsx` 的选择所有权/禁用处理,并复用已验收的 Checkbox/Menu/Popover;保留 Klun 覆盖表头和行内条两种布局。
|
|
665
|
+
|
|
666
|
+
| 能力 | 结果与保留差异 |
|
|
667
|
+
| --------------- | ----------------------------------------------------------------------------------------------------------------------- |
|
|
668
|
+
| 数量/可访问语义 | 非有限、负数归零且取整,零选择禁用操作;仅数量使用 status,交互暴露在 group;默认标签随 locale |
|
|
669
|
+
| 禁用 | 全局 disabled、显式 false、每项 disabled 和 host loading 一致;DataTable 传递解析后的 disabled 至内部批量条 |
|
|
670
|
+
| 异步 | 单次锁定,成功后才通知/清空;同步异常和 Promise 失败保留选择并显示错误/onError;再次操作可重试 |
|
|
671
|
+
| 分配 | 无人员时禁用;round-robin 等所有已发起写入 settle,失败不通知成功、不清空;部分成功的事务回滚由宿主负责 |
|
|
672
|
+
| 焦点/布局 | 子菜单与 More 等待时聚焦条,完成仅恢复仍由条拥有的焦点;移到外部不抢回;覆盖条维持表头 token 高度并局部横滚,行内条换行 |
|
|
673
|
+
|
|
674
|
+
新增10项回归,全库 **820项测试通过**;`pnpm verify`、Storybook 构建和最终只读审查通过,16个既有 lint 警告未增加。审查修复 portalled 菜单异步焦点遗漏,示例 ref 捕获 lint 改为 state。1280/390 ×亮/暗 ×4示例共16组无页面溢出;实际 overlay 高44px,移动内部滚动宽697px/可见295px。真实键盘菜单提交→等待时仍3 selected→拒绝保留3并显示错误→重试成功变0并通知。宿主管理请求取消、授权、外部选择变更及服务端原子性,不提供 AntD 批量 API 或业务服务。
|
|
675
|
+
|
|
676
|
+
证据:`src/__tests__/SelectionBarAlignment.test.tsx`、`docs/qa/p2-selection-bar-checks.json`、`docs/qa/p2-selection-bar-dark.png`。其他38个未勾选工作包继续执行。
|
|
677
|
+
|
|
678
|
+
### PeoplePicker / QuickSelect / QuickText 完整工作包验收
|
|
679
|
+
|
|
680
|
+
实现提交 `f5125dc`。已读取 AntD 6.6.5 `components/select/index.tsx`、`components/typography/Editable.tsx` 及实际承载行为的 `@rc-component/select@1.10.1` `OptionList.js`/`Select.js`;保留 Klun 人员/枚举/单行文字 cell-editor 几何和宿主数据模型,不新增依赖。
|
|
681
|
+
|
|
682
|
+
| 工作包 | 已验收能力与保留差异 |
|
|
683
|
+
| ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
684
|
+
| PeoplePicker | 搜索、未知ID未选中、人员/分类禁用、RTL分类方向键、Arrow/Home/End实际行焦点、动态列表焦点恢复;宿主loading/error/onRetry,失败/加载保护缓存行;Unassigned=null且真实__unassigned__ ID安全 |
|
|
685
|
+
| QuickSelect | 搜索首键保留、未知值可见、禁用项跳过、活动项滚动、单选即时提交/清除、Escape取消、focus保持combobox;Clear命令和真实NUL-clear值隔离,仍使用原空字符串清除API |
|
|
686
|
+
| QuickText | 原生键盘入口、只读/禁用、同步validate/onError及可访问错误、Enter/blur仅保存一次、Escape取消、IME保护、nullable/maxlength边界、外部更新不改正在编辑草稿、owned焦点恢复 |
|
|
687
|
+
| 组合 | 三者消费locale/全局disabled和显式false;ListWorkbench转发Text/Enum/Assignee字段新配置,assignee两触发器同步禁用且传异步状态 |
|
|
688
|
+
|
|
689
|
+
新增17项回归,全库 **837项测试通过**,`pnpm verify`、Storybook构建、最终只读复审通过。删除QuickText不必要的idle草稿同步effect,并将QuickSelect打开时的query设定移到触发事件;lint既有警告从16降为14。审查发现宿主onCommit同步移焦会blur重入,保存前锁定并补仅一次写入回归;关闭回调异常不再误报保存失败。
|
|
690
|
+
|
|
691
|
+
1280/390 ×亮/暗 ×4示例共16组无页面溢出。真实人员fail→Retry→results→End/Enter选中u3;RTL ArrowLeft跳过禁用源到Team。200项枚举打开末项时scrollTop=7724、活动199且focus在combobox,Home回首、Escape保留199。文字X校验失败未保存,Valid title保存后触发器focus恢复。个别快速导航空白重载后恢复,仅记录加载完成的页面。
|
|
692
|
+
|
|
693
|
+
证据:`src/__tests__/InlineEditorsAlignment.test.tsx`、`docs/qa/p2-inline-editors-checks.json`、`p2-people-picker-dark.png`、`p2-quick-select-dark.png`、`p2-quick-text-dark.png`。有意保留单选即时提交、单行未trim文字和220ms手势窗口;不提供AntD多值/虚拟选择API,QuickText提交校验同步,宿主负责异步写入/取消/授权/外部状态协调。其他35个未勾选工作包继续执行。
|
|
694
|
+
|
|
695
|
+
### AiPanel 完整工作包验收(实现提交 `367cf7c`)
|
|
696
|
+
|
|
697
|
+
AntD 6.6.5 core 无AI组件;读取 `components/modal/Modal.tsx` 与实际承载弹层行为的 `@rc-component/dialog@1.10.0` `Dialog/index.js`,保留 Klun 原生多行 composer 与品牌面板,不接入模型/网络或 AntD X。Dialog 既有焦点/滚动逻辑提取至内部 `utils/modalFocus.ts`,统一顶层 Escape、隐藏/inert焦点过滤、层级顺序和关闭后 opener恢复;原 Dialog 堆叠回归继续通过。
|
|
698
|
+
|
|
699
|
+
| 能力 | 结果与保留差异 |
|
|
700
|
+
| ------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
|
|
701
|
+
| 提交/重试 | onSubmit接受void/Promise;等待锁定业务动作,失败保留草稿并提示/onError;host error/onRetry与保留草稿重发均支持;成功才清空,无虚构消息 |
|
|
702
|
+
| 会话生命周期 | 旧请求在close/reopen/unmount后不修改新会话;IME残留及滚动暂停状态在新session重置 |
|
|
703
|
+
| 键盘/配置 | Enter提交、Shift+Enter换行、IME/修饰键保护;locale、provider disabled和显式false一致;关闭允许请求中进行,宿主负责abort |
|
|
704
|
+
| 业务事件/焦点 | History/Attach调用宿主且无回调时禁用;嵌套History先关闭且焦点回到历史按钮,后关闭面板恢复opener及bodyoverflow;回调变更不重置输入焦点 |
|
|
705
|
+
| 主题/正文 | 原浅色#fafafa/#eee映射同色gray tokens,暗色正确继承;面板限视口;实际正文滚动跟随流式text更新,读旧消息时保留位置 |
|
|
706
|
+
|
|
707
|
+
新增11项回归,全库 **848项测试通过**,`pnpm verify`、Storybook和最终只读审查通过,14个既有 lint 警告未增加。审查修复关闭重开后的输入法/滚动跟随残留;视觉验收修复两个固定浅色背景/边框常量。1280/390 ×亮/暗 ×4示例共16组,无页面溢出,窄屏面板374px/viewport390、RTL起点8px;正文亮rgb(250,250,250)/暗rgb(48,53,60),60条长对话移动scrollTop=12084。真实提交等待保留draft→拒绝显示Retry→重试成功清空,消息数始终0;History层z1102高于AiPanel1101,Escape逐层关闭及overflow恢复。偶发Storybook模块加载失败重载恢复,仅记录加载完成页面。
|
|
708
|
+
|
|
709
|
+
证据:`src/__tests__/AiPanelAlignment.test.tsx`、`docs/qa/p2-ai-panel-checks.json`、`docs/qa/p2-ai-panel-dark.png`。消息/持久化/请求取消/授权/附件服务仍由宿主提供,文本不执行Markdown或HTML。其他34个未勾选工作包继续执行。
|
|
710
|
+
|
|
711
|
+
### Slider / Rate 完整工作包验收(实现提交 `10959da`)
|
|
712
|
+
|
|
713
|
+
读取固定 AntD 6.6.5 `components/slider/index.tsx`、`components/rate/index.tsx` 和实际底层 `@rc-component/slider@1.1.1` `Slider.js`、`@rc-component/rate@1.0.1` `Rate.js`;保留原生 input/radio 表单契约,不增加依赖。
|
|
714
|
+
|
|
715
|
+
| 能力 | 结果与保留差异 |
|
|
716
|
+
| -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
717
|
+
| Slider 数值 | 单值/双端受控及默认值、不可交叉、有限步长/any、动态边界;极值百分比不溢出,marks过滤非法/越界坐标;无效step统一1 |
|
|
718
|
+
| Slider 事件 | 单值仍原生ChangeEvent,范围仍二元tuple;相同值不重复通知;完成报告操作草稿,即使宿主拒绝回写;禁用、preventDefault和IME不发完成,取消清草稿 |
|
|
719
|
+
| Slider 呈现 | marks、垂直方向ARIA、formatter原生title/aria-valuetext、locale范围名称;保留native tooltip,不提供AntD多端点编辑、轨道整段拖动、null-step marks-only、reverse或弹出提示API |
|
|
720
|
+
| Rate | 半星/count/自定义字符/只读、hover反馈;点击当前星或清除按钮清零;allowClear=false保留,受控更新由宿主决定;count=0无radio,非有限count回退5,异常大count上限1000 |
|
|
721
|
+
| Rate 键盘/配置 | 原生同名radio的方向键及form提交,零分无checked radio不提交值;保留浏览器箭头循环语义,与rc-rate边界clamp有意不同;locale、disabled与false覆盖、RTL半星一致,禁用/只读/count变更清旧hover |
|
|
722
|
+
|
|
723
|
+
新增5项回归,全库 **853项测试通过**,`pnpm verify`、Storybook构建与最终只读复审通过,既有14个lint警告未增加。审查修复单值受控拒绝回写后完成值丢失;真实点击2.5/7当前星清空且Clear禁用,范围ArrowRight起点20变21。1280/390 ×亮/暗 ×4示例共16组,确认主题生效且无页面溢出。Storybook快速导航偶发模块加载失败,重载后等待实际组件/主题,证据只保留成功页面。
|
|
724
|
+
|
|
725
|
+
证据:`src/__tests__/P1SliderRate.test.tsx`、`docs/qa/p2-slider-rate-checks.json`、`docs/qa/p2-rate-dark.png`。其他32个未勾选工作包继续执行。
|
|
726
|
+
|
|
727
|
+
### Radio / Checkbox / Switch 完整工作包验收(实现提交 `f688394`)
|
|
728
|
+
|
|
729
|
+
读取固定 AntD 6.6.5 `components/radio/group.tsx`、`components/checkbox/Checkbox.tsx`/`Group.tsx` 与实际 `@rc-component/switch@1.0.3` `es/index.js`。保留原生 input ref/表单/ChangeEvent,以及原库 string options和group value回调;不新增依赖。
|
|
730
|
+
|
|
731
|
+
| 能力 | 结果与保留差异 |
|
|
732
|
+
| --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
733
|
+
| Radio | 原生checked/defaultChecked、name/required/ref;group唯一默认name隔离,受控值由宿主回写,相同值不重复通知,逐项disabled/onChange/id/title/style;分组原生容器attrs/ref,horizontal/vertical/窄屏换行 |
|
|
734
|
+
| Checkbox | 原生mixed property随indeterminate更新、0标签不丢失、compact几何和input ref;group受控/默认、多选删除、注册选项顺序和动态移除过滤、name/disabled/required及逐项回调,容器attrs/ref |
|
|
735
|
+
| Switch | 原生checked/defaultChecked/form/input ref;Space与Left=false/Right=true,相同值不重复change,宿主preventDefault优先,IME/key229及修饰键保护;loading禁用/busy、sm/md、checked/unCheckedChildren |
|
|
736
|
+
| 配置/差异 | provider disabled与显式false、每项disabled、RTL与亮暗主题一致;原生radio箭头循环/浏览器RTL行为保留,Switch左右语义不反转;不支持AntDRadio.Button/context children、number/boolean options或AntD imperative ref/event对象 |
|
|
737
|
+
|
|
738
|
+
新增7项回归,全库 **860项测试通过**,`pnpm verify`、Storybook构建和只读审查通过,既有14个lint警告未增加。1280/390 ×亮/暗 ×4示例16组确认主题生效且无溢出;真实RTLradio ArrowRight从团队到公开,跳过禁用项;复选推送后邮件/推送同时选中,Switch可见label点击由开到关,loading仍禁用。原生input隐藏时浏览器自动化直接press失败,改用可见label验证切换;Switch方向键由回归覆盖,不冒称该路径浏览器实测。Storybook偶发加载失败重载后等待实际组件,证据仅保留成功页面。
|
|
739
|
+
|
|
740
|
+
证据:`src/__tests__/ToggleAlignment.test.tsx`、`docs/qa/p2-toggle-checks.json`、`docs/qa/p2-switch-dark.png`。其他31个未勾选工作包继续执行。
|
|
741
|
+
|
|
742
|
+
### Input / PasswordInput / ActionButton / Button 完整工作包验收(实现提交 `1796671`)
|
|
743
|
+
|
|
744
|
+
读取固定 AntD 6.6.5 `components/input/Password.tsx`、`components/button/button.tsx` 及实际 `@rc-component/input@1.3.1` `es/Input.js`。保留 Klun 原生事件、input/button ref、type=submit/reset和既有视觉,不增加依赖。
|
|
745
|
+
|
|
746
|
+
| 能力 | 结果与保留差异 |
|
|
747
|
+
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
748
|
+
| Input | 受控/默认、prefix/suffix、allowClear原生input事件/onClear及焦点、计数formatter、状态/variant、原生maxlength/form reset和取消reset;新增onPressEnter逐次按键锁、IME/key229/host取消保护,输入法草稿不清除,locale清除标签 |
|
|
749
|
+
| Field/辅助输入 | 保留已有child id供label引用;合并host aria-describedby与hint/error,尊重显式aria-invalid,0标签/错误不丢失;Textarea/SearchInput保留原生attrs/ref/disabled/API,不引入textarea autosize或AntD Search业务提交API |
|
|
750
|
+
| Password | controlled/defaultVisible/onVisibleChange,原密码与selection行为保留;Input extras、原生ref、locale显示/隐藏标签、disabled及false覆盖,原生button键盘toggle/pressed |
|
|
751
|
+
| Buttons | variant/size/shape/block/ghost/danger/icon/iconAfter、原生type/attrs/ref,loading禁用/busy;ActionButton零值children可访问名称及pill;SplitButton显示菜单/叶子关闭/disabled后不复活,显式false传给内部Menu |
|
|
752
|
+
|
|
753
|
+
新增5项回归,全库 **865项测试通过**,`pnpm verify`、Storybook构建和只读审查通过,既有14个lint警告未增加。16组1280/390 ×亮/暗 ×4示例;首次新增RTL示例漏算Storybook外层padding有溢出,修正示例宽度后重建及typecheck,最终16组无页面溢出。真实Enter计数1,显示密码仍secret;清除项目名称后count0、focus仍在原输入。偶发Storybook模块加载失败重载后等待实际组件及主题,仅保留成功页面证据。
|
|
754
|
+
|
|
755
|
+
差异:原生input ref而非AntD imperative对象,计数使用UTF-16原生maxlength语义,不提供AntD count strategy/exceed formatter、OTP、Group context、InputNumber行为;Password无hover reveal或自定义iconRender;Button无href/AntD颜色体系/delayed loading/wave。宿主处理提交网络与授权,loading由宿主明确提供。
|
|
756
|
+
|
|
757
|
+
证据:`src/__tests__/InputButtonAlignment.test.tsx`、`docs/qa/p2-input-button-checks.json`、`docs/qa/p2-input-dark.png`。其他30个未勾选工作包继续执行。
|
|
758
|
+
|
|
759
|
+
### Tabs / Collapse / Steps 完整工作包验收(实现提交 `6efc69a`)
|
|
760
|
+
|
|
761
|
+
读取固定AntD 6.6.5 tabs/collapse/steps入口与实际 `@rc-component/tabs@1.13.0` `TabPanelList/index.js`、`@rc-component/collapse@1.2.0` `Panel.js`、`@rc-component/steps@1.2.3` `Step.js`。保留原生button键盘和宿主items模型,不新增依赖。
|
|
762
|
+
|
|
763
|
+
| 能力 | 结果与保留差异 |
|
|
764
|
+
| --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
765
|
+
| Tabs | controlled/default、disabled skip、单一tabstop、horizontal/vertical RTL Arrow/Home/End自动激活;键盘目标scrollIntoView最近可见;editable add/remove与locale、关闭邻项focus;keepMounted仍eager保留全部panel,forceRender优先destroyOnHidden,未强改已有生命周期 |
|
|
766
|
+
| Collapse | controlled/defaultActiveKeys、accordion、过期key过滤、disabled、Arrow/Home/End只移焦点、额外动作独立、keepMounted/forceRender/bordered/ghost;hidden panel不进入Tab顺序 |
|
|
767
|
+
| Steps | current/initial有限取整与all complete、item status/icon/subTitle/description、只读ol或交互button、locale状态、RTL/vertical focus-only Arrow/Home/End,Enter请求外部current,重复当前项不通知 |
|
|
768
|
+
| 动态/保护 | 共用内部focusRecovery,removed/hidden/disabled自有控件仅在focus仍自有/body时恢复,外部不抢;Tabs延迟close focus同样守卫;禁用/IME/key229/修饰键不触发导航 |
|
|
769
|
+
|
|
770
|
+
新增6项回归,全库 **871项测试通过**,`pnpm verify`、Storybook构建与只读审查通过,14个既有lint警告未增加。1280/390 ×亮/暗 ×4示例16组无页面溢出;移动RTL20页签End激活末项并实际scrollLeft=-1156(client342/scroll1498);关闭Details后Activity selected且active focus。首次验收误用Collapse导航分类ID,改成源码实际Data分类后完成;偶发模块加载失败重载后等待实际故事控件,不计失败页面为通过。
|
|
771
|
+
|
|
772
|
+
差异:不提供AntDTab.More overflow menu/renderTabBar/drag ordering/motion、Collapse icon-only触发/自定义expandIcon/context children或Steps dot/inline/navigation/percent/responsive API;Steps在窄屏用既有CSS堆叠,未接入rc-motion。host负责业务panel授权与异步数据,disabled保护内置导航,panel/extra内部动作由host配置。
|
|
773
|
+
|
|
774
|
+
证据:`src/__tests__/ContentNavigationAlignment.test.tsx`、`docs/qa/p2-content-navigation-checks.json`、`docs/qa/p2-tabs-dark.png`。其他29个未勾选工作包继续执行。
|
|
775
|
+
|
|
776
|
+
### Badge / Alert 完整工作包验收(实现提交 `e2243e6`)
|
|
777
|
+
|
|
778
|
+
读取固定AntD 6.6.5 `components/badge/Badge.tsx`/`ScrollNumber.tsx`、`components/alert/Alert.tsx`;底层motion虽存在但本库明确保留即时显隐,不引入依赖。
|
|
779
|
+
|
|
780
|
+
| 能力 | 结果与保留差异 |
|
|
781
|
+
| --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
782
|
+
| Badge | finite number和numeric string溢出、showZero、dot、status/color/text、小尺寸、rich count、原生attrs/ref、logical offset/title false/null;非法overflow回退99/负数归0,合法小数上限保留;非法offset分量归0 |
|
|
783
|
+
| Badge语义 | 全值accessible label/title不被cap替换;无标签dot/status随locale,host label/text优先;保留dot显式count0可见及非负number规则,不提供Ribbon/数字滚动/AntD语义styles |
|
|
784
|
+
| Alert | title优先legacy message、description/icon/action、状态/filled/banner/role、原生attrs/ref;controlled/defaultOpen、closable对象/取消/disabled false及中文close;afterClose只在实际移除且先更新状态记录,reopen可再次关闭 |
|
|
785
|
+
|
|
786
|
+
新增4项回归,全库 **875项测试通过**,`pnpm verify`、Storybook构建及只读审查通过,14个既有lint警告未增加。1280/390 ×亮/暗 ×4示例16组无页面溢出,长不可分词description仍换行;真实中文关闭计数1→重新显示→再关闭计数2。偶发Storybook加载失败重载等待实际控件/主题,不计失败页面。
|
|
787
|
+
|
|
788
|
+
差异:Alert无AntD ErrorBoundary或exit motion,afterClose在移除effect后调用;默认showIcon仍true、非error用status保留原库可访问契约。业务action及异常内容fallback由host管理。FloatButton badge组合维持兼容。
|
|
789
|
+
|
|
790
|
+
证据:`src/__tests__/BadgeAlertAlignment.test.tsx`、`docs/qa/p2-badge-alert-checks.json`、`docs/qa/p2-alert-dark.png`。其他28个未勾选工作包继续执行。
|
|
791
|
+
|
|
792
|
+
### Dialog / Popover / Tooltip / Toast 完整工作包验收(实现提交 `b06f4d8`)
|
|
793
|
+
|
|
794
|
+
读取固定AntD 6.6.5 Modal/Tooltip/Popover/Notification入口与实际 `@rc-component/dialog@1.10.0` `Dialog/index.js`、`@rc-component/tooltip@1.5.2` `Tooltip.js`、`@rc-component/notification@2.0.9` `hooks/useNoticeTimer.js`;延续Klun原始毫秒计时/portal契约,不新增依赖。
|
|
795
|
+
|
|
796
|
+
| 能力 | 结果与保留差异 |
|
|
797
|
+
| ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
798
|
+
| Dialog | title/children/tools/footer、size/drawer-placement/keyboard/maskClosable/closable、dirty dismissable及locale closeLabel;0 footer保留;嵌套top-only Escape、focus filtering/Tab trap/opener/scroll lock/stack z;keyboard=false保留宿主脏表单Escape监听 |
|
|
799
|
+
| Popover | six placements/RTL/viewport flip/clamp、matchAnchorWidth限viewport、anchor/native ref helper、outside dismissal/context close/autoFocus;nested z取实际父Popover/Dialog/AiPanel+1,叶层Escape不连带关父层,owned focus恢复不抢外部 |
|
|
800
|
+
| Tooltip | hover delay与即时focus、top/bottom/边缘翻转夹取、body portal/locale/theme/tokens、原生触发控件aria-describedby合并;动态label/anchor resize重新测量,scroll/window resize关闭;空label不复活,IME Escape保护;非交互多child仍保留但只有单一非Fragment element可自动关联描述 |
|
|
801
|
+
| Toast | tone/title/action/icon/variant/placement/key update/max/closeable、duration0与dismiss/onClose/unmount;hover和keyboard focus独立暂停,二者离开才恢复原1500ms grace,更新key时保留pause;非法duration回退3000,locale close |
|
|
802
|
+
| 跨层 | 内部escapeLayer记录portal父关系/最新叶层,Dialog保留bubble允许编辑器取消;临时autofocus循环回退最近注册层;关联Popup焦点列入Modal Tab循环,AiPanel共用同一机制 |
|
|
803
|
+
|
|
804
|
+
新增12项回归,全库 **887项测试通过**,`pnpm verify`、Storybook构建与最终只读复审通过,14个既有lint警告未增加。首次全库失败暴露ProjectWizard keyboard=false宿主确认被拦和initial-open Popup归属循环,均修复后原回归通过;Toast EachPlacement嵌套组件移模块级并捕获cleanup map,lint未放宽。审查修复Tooltip缓存anchor rect/缺少wrapper RO与AiPanel层级遗漏。
|
|
805
|
+
|
|
806
|
+
16组1280/390 ×亮/暗 ×4示例无页面溢出;真实z1101/1102/1103,三次Escape逐层关闭并恢复Popup各自trigger;移动tooltip x8/right328/top48自动避开上边缘。2秒toast在键盘焦点超过2秒后仍Closed count0,移至外部后关闭count1。Storybook偶发模块加载失败重载等待实际控件/主题,不计失败页面为通过。
|
|
807
|
+
|
|
808
|
+
保留差异:Dialog不提供AntD静态confirm/Promise按钮/forceRender/destroyOnHidden/exit motion;Popover是低层受控anchor组件而非trigger包装;Tooltip无interactive/click-trigger/自定义container/12方向arrow API;Toast毫秒与1500ms grace不同于AntD秒及剩余时间模型,不提供通知progress/rich业务网络。异步业务提交、取消与授权由宿主提供;App/message/notification完整包仍待验收。
|
|
809
|
+
|
|
810
|
+
证据:`src/__tests__/OverlayAlignment.test.tsx`、`docs/qa/p2-overlay-checks.json`、`docs/qa/p2-dialog-popover-dark.png`、`docs/qa/p2-toast-dark.png`。B层全部勾选;其他27个未勾选工作包继续执行。
|
|
811
|
+
|
|
812
|
+
### InputNumber / AutoComplete / TreeSelect / TimePicker 完整工作包验收(实现提交 `96dcc79`)
|
|
813
|
+
|
|
814
|
+
读取固定AntD6.6.5 InputNumber/AutoComplete/TreeSelect/TimePicker入口及实际`@rc-component/input-number@1.6.2` InputNumber.js、select1.10.1 Select.js、tree-select1.16.1 TreeSelect.js、picker1.12.2 hooks/useTimeInfo.js。复用Input/Tree/Popover/Form,不新增依赖。
|
|
815
|
+
|
|
816
|
+
| 能力 | 结果与保留差异 |
|
|
817
|
+
| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
818
|
+
| InputNumber | number/null、focused draft、formatter/parser、precision/bounds/Shift×10、native ref/attrs/Form;composition完成再提交、229/修饰键保护;拒绝Infinity/不可表示步进/边界no-op,onStep不虚报;小量IEEE修正不截断高精度整数/小数,locale controls |
|
|
819
|
+
| AutoComplete | string受控/默认、filter/custom search/disabled suggestions、combobox aria/活动项scroll/input focus/Enter/Escape;相同值仍onSelect但不重复onChange/onSearch;disabled/readOnly丢弃uncontrolled popup,controlled open由host持有;IME/229/modified导航保护 |
|
|
820
|
+
| TreeSelect | Tree single/multi/check conduction、lazy labels/search/virtual/loading、hidden native values/clear/Form blur、trigger ref;single重选不取消,重复值不通知;显式disabled=false传search和Tree;实际close清搜索,拒绝受控关闭保留搜索;locale placeholder/search/clear |
|
|
821
|
+
| TimePicker | native local clock strings/seconds/min-max overnight/clear/Form/ref/config override;disabledTime保留草稿并标记invalid,locale校验消息;重复值不通知,无时区转换 |
|
|
822
|
+
|
|
823
|
+
新增10项回归,全库**897项测试通过**,`pnpm verify`、Storybook构建及最终只读复审通过,14个既有lint警告未增加。首次新回归暴露Tree禁止空键及单选toggle兼容问题:撤回空键扩展、保持Tree的非空string校验,TreeSelect重复单选保持当前项。审查发现16位安全整数及大幅度小数被15位舍入倒向,补相应测试并修复;原Form/DatePicker时间组合回归仍通过。
|
|
824
|
+
|
|
825
|
+
16组1280/390×亮/暗×四个中文RTL示例无页面溢出/故事错误。真实Provider disabled=true且TreeSelect disabled=false搜索小明并提交,trigger返回焦点;AutoComplete首Up选项目40且y319–357可见,Enter后input value=项目40且仍focus;数值0.10+0.20=0.30;原生ArrowUp将00:30:15变为01:30:15。证据`src/__tests__/GeneralInputAlignment.test.tsx`、`docs/qa/p2-general-inputs-checks.json`、`docs/qa/p2-general-inputs-dark.png`。
|
|
826
|
+
|
|
827
|
+
差异:InputNumber不提供stringMode/arbitrary precision/hold/wheel;AutoComplete无grouped/virtual/custom children;TreeSelect非空string键、full checked keys,不提供AntD numeric keys/strategy constants/labelInValue;TimePicker原生string/invalid validation语义,不提供Dayjs/columns/range/12-hour/disabled-unit callbacks。parser/formatter/异步搜索加载/业务授权由host提供。其余26个工作包继续执行。
|
|
828
|
+
|
|
829
|
+
### Upload / Image 完整工作包验收(实现提交 `b1d74a6`)
|
|
830
|
+
|
|
831
|
+
读取固定AntD6.6.5 upload/Upload.tsx、image/index.tsx/PreviewGroup.tsx,及实际upload1.1.1 AjaxUploader.js processFile/post/abort与image1.10.0 Image.js/PreviewGroup.js/Preview/index.js。与AttachmentUpload/FilePreview对照:前者业务metadata/read契约、后者附件示意数据不可强行替代真实File/图片;保留分离,不添加依赖。
|
|
832
|
+
|
|
833
|
+
| 能力 | 结果与保留差异 |
|
|
834
|
+
| ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
835
|
+
| Upload | actual File、native file input ref、accept选择/drag/multiple/maxCount=1 replacement、manual/LIST_IGNORE/File/Blob异步转换;POST multipart headers/data/credentials、customRequest进度/成功/失败/abort、列表控制/取消/晚回调隔离 |
|
|
836
|
+
| 异步 | falsy beforeUpload reject仍error,和AntD拒绝等同false的手动项语义明确不同;await后用最新configuration/limit/callback,disabled期间不start;async removal锁/拒绝保留/当前list检查,外部已移除不重复notify;已有传输继续直到remove/unmount取消 |
|
|
837
|
+
| Image | native img/ref/attrs/alt、srcSet失败移除/fallback真实加载/source重置/zero placeholder、click cancel/previewfalse/controlled与defaultOpen;disabled丢弃uncontrolled preview;locale控件 |
|
|
838
|
+
| Group/Preview | explicititems/src匹配/fallbacksingle/current bounds、重复current opening不notify;Dialog模态/focus/Escape,zoom0.25–4/rotation modulo360/reset、switch resets transform、边界aria-disabled保持导航焦点 |
|
|
839
|
+
|
|
840
|
+
新增8回归,全库**905项测试通过**;`pnpm verify`、Storybook构建、完整只读复审通过,14个lint既有警告。16组1280/390×亮/暗×Upload中文RTL/Drop/Image中文RTL/Fallback,无页面溢出/错误;所有fallback实际naturalWidth640。真实放大/旋转scale1.25/90,下一张重置1/0且focus仍Next;Provider disabled=true但Upload false可中文移除错误项。
|
|
841
|
+
|
|
842
|
+
浏览器真实文件选择已尝试,Chrome ChatGPT扩展缺少Allow access to file URLs,setFiles被阻止;未改扩展权限、未将此项计为通过。真实File字节/转换/multipart/XHR错误/abort/卸载/受控取消均由测试验证。偶发Storybook模块加载失败重载至可见实际故事再操作。
|
|
843
|
+
|
|
844
|
+
差异:Upload不提供目录/粘贴/thumbnail list/重试/动态action函数/data函数/任意children trigger克隆;选择批次串行预处理,client accept不是服务端验证。Image不提供自动注册/拖拽/wheel/flip/download/customactions/group Arrow导航或semantic API。网络鉴权及文件业务存储由host负责。
|
|
845
|
+
|
|
846
|
+
证据`src/__tests__/MediaAlignment.test.tsx`、`docs/qa/p2-media-checks.json`、`docs/qa/p2-image-dark.png`、`docs/qa/p2-upload-dark.png`;其余25个工作包继续执行。
|
|
847
|
+
|
|
848
|
+
### Breadcrumb / Typography / Descriptions / Statistic 完整工作包验收(实现提交 `86e1be3`)
|
|
849
|
+
|
|
850
|
+
读取固定AntD6.6.5 BreadcrumbItem、typography Base/Editable/useCopyClick、descriptions hooks/useRow、statistic Number;这些行为由AntD本身实现,复用原生label/ref/grid/clipboard/Textarea,不添加依赖。
|
|
851
|
+
|
|
852
|
+
| 能力 | 结果与保留差异 |
|
|
853
|
+
| ------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
854
|
+
| Breadcrumb | native nav/ol/link/button/ref/attrs/currentpage、disabled provider/itemfalse/customitemRender、localelabel/null隐藏separator;hostrender自管交互及授权,无AntD menu/routes API |
|
|
855
|
+
| Typography | nativeheading/text/paragraph/link、安全targetblank默认、文字marks/CSSellipsis/controlledexpand;nativeedit draft/saveempty/cancel/maxlength/ShiftEnter、locale、IME229/modified/repeat保护;仅恢复自有focus,externalchildren变化不抢focus,runtimeTitle level1–5 |
|
|
856
|
+
| Copy | async text/clipboard、busy互斥、成功延时恢复/失败retry/onError;disabled/cleanup generation失效旧request,每次await检查,旧finally不污染新attempt;已开始nativewrite不可撤销,缺clipboard明确失败 |
|
|
857
|
+
| Descriptions | responsive xs–xxxl columns、boundedspan/filled/lastfill、horizontal/vertical/bordered/size/titleextra、native ref/dl/dt/dd、zero label/value;跨度截当前row,不强改既有lastfill |
|
|
858
|
+
| Statistic | string大整数保持、literal分组/精度截断填充、fractional .5补0、emptystring0、nonnumeric raw、formatter/prefixsuffix/zero title/loadingbusy/ref;precisioncap100,无动画/countdown/timer |
|
|
859
|
+
|
|
860
|
+
新增8回归,全库**913项测试通过**;verify、Storybook、最终完整只读复审通过,14个既有lint警告。审查发现复制等待中disable→enable导致旧write复活,使用generation隔离并补旧请求不覆盖新copy的回归。
|
|
861
|
+
|
|
862
|
+
16组1280/390×亮/暗×四中文RTL故事,无页面溢出/错误;Descriptions实际3列→1列,中文编辑保存host更新并focus返回Edit,展开aria-expanded true与收起标签。实际剪贴板未请求权限/写入,成功、失败retry、取消/disable/cleanup和generation以clipboard mocks验证。CSSellipsis有意不提供AntD JS测量/suffix/tooltip算法,编辑采用同步onChange且不onBlur自动save,不提供autosize/Promise validation/copy fallback;formatter/itemRender和业务授权由host管理。
|
|
863
|
+
|
|
864
|
+
证据`src/__tests__/DisplayAlignment.test.tsx`、`docs/qa/p2-display-checks.json`、`docs/qa/p2-display-dark.png`;其余24个工作包继续执行。
|
|
865
|
+
|
|
866
|
+
### Layout / Row-Col-Grid / Flex / Space / Splitter 完整工作包验收(实现提交 `b03f59a`)
|
|
867
|
+
|
|
868
|
+
读取固定AntD6.6.5 Layout Sider、grid Row/Col、flex/space入口及Splitter本身承载的useSizes/useResizable/useResize,而非仅包装入口;复用原生布局/ResizeObserver/mediaquery/pointercapture,无新依赖。
|
|
869
|
+
|
|
870
|
+
| 能力 | 结果与保留差异 |
|
|
871
|
+
| ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
872
|
+
| Layout | native Header/Footer/main/Sider refs/attrs、hasSider override、controlled/defaultCollapsed/responsive/zero body inert/trigger;响应仅实际变化onCollapse,onBreakpoint仍初始/变化;locale/explicitdisabledfalse、finite nonnegative width |
|
|
873
|
+
| Grid | nativeRow/Col refs/attrs、24grid、responsivegutter/align/justify、span/offset/order/push/pull/flex;numberflex/order不产生NaN/Infinity,zero-span hidden;Grid.useBreakpoint subscriptionscleanup,Gridxxxl1920/Siderxxxl1840保持既有与参考差异 |
|
|
874
|
+
| Flex/Space | nativeCSS flex方向/wrap/justify/align/gap;numbergapfinite非负、presetlookup不走prototype;Space zerochildren/visible separator/双axisgap/Compact连接样式/refs,无AntDCompact context属性注入 |
|
|
875
|
+
| Splitter | measuredextent-minus8px bars、keyedpanel比例/default/controlledmixed/constraints、collapsecache恢复/隐藏保留或销毁;keyboardRTL/Shift/HomeEnd/IME229/modified保护、locale aria;pointer当前ID/captureloss/cancel/end once、axis/dir/extent/disabled/panelidentity/resizable变化失效draft,infeasiblepair不制造越界 |
|
|
876
|
+
|
|
877
|
+
新增7项回归,全库**920项测试通过**;verify、Storybook及完整只读复审通过,14个既有lint警告。审查补Panel resizablefalse→true未发生中间pointer事件时仍应取消旧drag的回归和修复。
|
|
878
|
+
|
|
879
|
+
16组1280/390×亮/暗×四中文RTL故事,无页面溢出/错误。真实mobileRTL首panel167→183(ArrowLeft),collapse/reopen恢复前尺寸且focus仍按钮;Sider移动端0/inert,Providerdisabledtrue+Siderfalse可以展开200;Grid实际33.3333%→100%。浏览器原生pointerdrag未执行,pointerloss/foreigncancel/axis-key-resizable失效与bounds由回归验证。
|
|
880
|
+
|
|
881
|
+
差异:Splitter仅相邻pair,不穿透多个panel、不提供lazydrag/复杂collapsible对象/doubleclick/semanticAPI;完全受控尺寸按可用空间比例归一化,部分受控尺寸固定、host必须写回callback。不可满足全组bounds由host修正配置;Sider不是原业务Sidebar替换,业务路由/权限自管。证据`src/__tests__/LayoutAlignment.test.tsx`、`docs/qa/p2-layout-final-checks.json`、`docs/qa/p2-layout-final-dark.png`;其余23个工作包继续执行。
|
|
882
|
+
|
|
883
|
+
### Drawer / Dropdown / Popconfirm 完整工作包验收(实现提交 `f1c9e4d`)
|
|
884
|
+
|
|
885
|
+
读取固定AntD6.6.5 Drawer/Dropdown/Popconfirm/ActionButton及实际drawer1.4.2 Drawer/DrawerPopup、dropdown1.0.3 Dropdown/useAccessibility;复用已验收Dialog/Popover/Menu/nativeButton,不添加依赖。
|
|
886
|
+
|
|
887
|
+
| 能力 | 结果与保留差异 |
|
|
888
|
+
| ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
889
|
+
| Drawer | controlledopen/title/body/tools/footer、physicaledge/viewport extent、modalstack/focus/scroll/keyboard-mask-close独立;finite extent fallback378/negative0,localeclose,销毁关闭内容 |
|
|
890
|
+
| Dropdown | nativeButton/ref/attrs、controlled/defaultopen/close callbacks、disabled/loading/hostcancel、Arrowopen保护IME229/modified;Menu子菜单/disabled/selectablemultiple/leafclose/context;blocked丢弃uncontrolled,controlledhost拒绝仍持有,重复open不notify |
|
|
891
|
+
| Popconfirm | nativebutton/ref、stringtitle/Reactdescription including0、localebuttons/error/customtext0、showCancel;Promise pendingonce阻止cancel/outside/Escape,false留开、rejecterrorretry/onError;disabled/close/unmount generation隔离旧结果、blocked丢弃uncontrolled/controlled保留 |
|
|
892
|
+
|
|
893
|
+
新增6项回归,全库**926项测试通过**,verify、Storybook、最终只读复审通过,14个既有lint警告。首次typecheck发现新故事使用AntDchildren而Klun Menu字段items,修正后重建/全库通过并重新16组验收;不将首轮失败计为最终通过。
|
|
894
|
+
|
|
895
|
+
16组1280/390×亮/暗×Drawer中文嵌套/Dropdown中文/Popconfirm中文/失败中文,无溢出/故事错误,Drawer600px实际600→390,浮层bounds在viewport内。真实RTLArrowLeft展开子菜单,归档叶项关闭两层并focus触发器;Drawer两次Escape依次关Menu/Drawer,用户再次打开再关闭focus返回打开按钮;确认hostreject显示中文alert且可retry。
|
|
896
|
+
|
|
897
|
+
差异:Drawer无push/resizable/keepmounted/customcontainer/motion;Dropdown仅buttontrigger,无hover/contextmenu/任意childclone;Popconfirm仅stringtitle,无函数title/自定义arrow/semanticStyle。pending时用户不可取消只是UI锁,host网络无法自动撤销;授权和真正业务提交由host提供。证据`src/__tests__/PopupAlignment.test.tsx`、`docs/qa/p2-popup-final-checks.json`、`docs/qa/p2-drawer-final-dark.png`、`docs/qa/p2-popconfirm-final-dark.png`;其余22个工作包继续执行。
|
|
898
|
+
|
|
899
|
+
### App / message / notification 完整工作包验收(实现提交 `3f71770`、`961c6a6`)
|
|
900
|
+
|
|
901
|
+
读取固定 AntD6.6.5 app/App.tsx、message/useMessage.tsx/util.ts、notification/useNotification.tsx,以及实际 notification2.0.9 Notifications.js 的 key更新/cap/close/destroy 和 hooks/useNotification.js 配置合并/任务队列。
|
|
902
|
+
|
|
903
|
+
| 能力 | 结果与保留差异 |
|
|
904
|
+
| ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
905
|
+
| 上下文 | 最近 App.useApp 绑定独立双栈,嵌套 placement/max 按字段继承;静态调用最后注册且仍挂载宿主,更新配置不移动注册优先级,卸载恢复前宿主,StrictMode清理保护 |
|
|
906
|
+
| 消息 | tone/content/key/update/destroy/loading、可关闭及await句柄;同key更新所有订阅者最终结清;已关闭旧句柄不删除复用键的新消息 |
|
|
907
|
+
| 清理 | cap/destroy先按旧对象身份批量摘除并清理资源,再结清全部回调;回调重入创建的新项保留,错误向宿主抛出前结清其余订阅者;finally保护替换消息计时 |
|
|
908
|
+
| 通知 | title/description/action/icon/variant/closeable、各placement/max,与同keymessage隔离;locale/direction/theme沿Toastportal继承 |
|
|
909
|
+
|
|
910
|
+
新增6回归,全库932项测试、verify、Storybook及最终只读复审通过。最后发现新Toast计时闭包缺少dismiss依赖,补依赖后重新全verify通过;lint实际15个既有警告(前批记录14误计,以实际日志为准),未新增。
|
|
911
|
+
|
|
912
|
+
16组1280/390×亮/暗×四示例无溢出/故事错误,两独立栈实际展示;嵌套中文RTL配置top-left/bottom-left继承,真实关闭旧消息、复用key、再调用旧句柄后新消息和同key通知保留,关闭计数1。证据src/**tests**/AppAlignment.test.tsx、docs/qa/p2-app-final-checks.json、docs/qa/p2-app-final-dark.png。
|
|
913
|
+
|
|
914
|
+
差异:毫秒duration/1500ms离开宽限、stringkey/max=0抑制展示、bodyportal;无contextHolder/独立静态根/config/通知折叠progress/AppDOMwrapper/modalAPI。host回调错误不吞,业务网络和授权由host负责。C层全部勾选;继续执行D层21项。
|
|
915
|
+
|
|
916
|
+
### Ship chrome / 阅读编辑组合八模块验收(实现提交 `ffb93fb`)
|
|
917
|
+
|
|
918
|
+
D层业务模块没有AntD核心库直接对应组件;对照固定6.6.5 Layout/layout.tsx、Menu/rc-menu1.5.0、Tabs、Input、Typography/Editable、Empty、Modal/Dialog、Progress及本库已验收组合层,不伪造一对一完整AntD业务组件。完整API/行为/有意差异矩阵见docs/components.md“Ship chrome 与阅读/编辑组合契约”。
|
|
919
|
+
|
|
920
|
+
本次完成Rail/Header/Toolbar/Bits/Views/ShellSurfaces/DetailBlock/EditableText:provider禁用与Rail item/EditableText显式覆盖,locale,空filter schema/无operator安全,切字段重置operator,零chip/title/actions/intro;TitleCell F2/IME/会话提交重入保护及owned focus;未知原型kind/finitebadge,非交互Board卡片不占tab,零Roadmap period;Checklist ownkey/实际checkbox值;Inlineeditor受控拒绝关闭保留draft、同步hostfocus不被抢。保留宿主路由/权限/加载/请求/持久化、同步onSave与空draft保留原文,不虚构业务异步成功。Views仅阅读,不增加drag或请求API。
|
|
921
|
+
|
|
922
|
+
14个新增回归及既有55项定向通过;全库946项测试,最终verify/Storybook/只读复审通过,15个既有lint警告未增加。初次测试定位查询应使用SearchInput searchbox/Select按钮和menuitemradio,修正测试查询,无删除断言。审查四个真实问题(提交重入、IME会话残留、外部focus抢回、prototype checked)均补回归。浏览器发现原Rail窄屏隐藏规则被后置base覆盖,移动至末尾响应式规则,重新全verify/Storybook和24组验收。
|
|
923
|
+
|
|
924
|
+
24组1280/390×亮/暗×6中文RTL组合故事无溢出/实际故事错误,移动Rail computed display none;Header/Toolbar换行,Board/Roadmap内部scroll,DocSplit上下布局。真实字段切换contains→equals且清value,F2→Escape还原标题焦点,中文保存说明更新并返回editfocus;清单visiblelabel点击实际checked/50%。浏览器adapter native checkbox setChecked/press尝试失败未计键盘通过,原生Checkbox键盘由回归验证;失败动态模块页面仅重载后实际可见故事验收。
|
|
925
|
+
|
|
926
|
+
证据src/**tests**/ShipChromeAlignment.test.tsx、src/ship/ShipChromeAlignment.stories.tsx、docs/qa/d-chrome-checks.json及d-chrome-{shell,filters,detail,checklist}-dark.png。仍有D层13模块继续处理:DetailSheet、CommentThread、AttachmentUpload、LinkPicker、FilePreview、TransitionsTimeline、EntityDialog、EntityPicker、ShareDialog、ReportCanvas、RoadmapEditor、ListWorkbench、ProjectWizard。
|
|
927
|
+
|
|
928
|
+
### Ship 详情与附件六模块验收(实现提交 `dcf01e3`)
|
|
929
|
+
|
|
930
|
+
对照固定 AntD6.6.5 ActionButton、Input/TextArea、Modal、Upload、Timeline/Steps;D 层组合无直接对应 AntD 业务组件。API/行为/差异矩阵已记录于 docs/components.md。完成评论 Promise 锁与失败草稿/retry、IME/禁用会话隔离和 owned focus;孤儿/循环父链有限遍历;附件读取后的最新回调、进度有限值、reader/timer/卸载清理;关系候选失效与 provider 禁用;预览示意下载 CSV 转义/公式保护/延迟释放 URL、RTL 缩放;工作流空/重复状态归一。
|
|
931
|
+
|
|
932
|
+
18 项新增回归,全库 **964 项测试**、verify、Storybook 构建和只读复审通过。lint 0 errors/16 warnings,其中新增 CommentThread 事件闭包的 react-hooks/refs 静态提示,未关闭规则;事件调用并非 render 时读 ref。初次 caretRef 前向引用导致 compiler immutability 错误,提前声明后全验证通过。
|
|
933
|
+
|
|
934
|
+
24 组1280/390×亮/暗×六中文 RTL 故事无页面溢出/加载错误;实际失败评论保留草稿,重试追加宿主评论后清空并 focus 回 textarea。手机预览150% origin right top,dialog342px位于390px视口内,关闭返回入口。证据 docs/qa/d-detail-checks.json、d-detail-comments-failed-dark.png、d-detail-preview-dark.png。浏览器原始文件选择未重测(扩展文件访问权限限制);FileReader、Promise、字节 CSV 和 cleanup 以回归测试验证。
|
|
935
|
+
|
|
936
|
+
边界:附件 onUpload 是元数据协议、预览下载为明确示意,真实文件传输/原始下载/授权由 host;关系提交仍同步,状态时间线只读,不虚构网络持久化。剩余 D 层七项继续执行:EntityDialog、EntityPicker、ShareDialog、ReportCanvas、RoadmapEditor、ListWorkbench、ProjectWizard。
|
|
937
|
+
|
|
938
|
+
### Ship 实体与分享三模块验收(实现提交 `d209752`)
|
|
939
|
+
|
|
940
|
+
对照固定6.6.5 Modal/ActionButton、Form和实际form1.8.6,复用 Dialog/Field/Select/Table/Tree/Menu。完成 Promise 实体/关联/分享保存与复制锁、失败草稿/retry、禁用/卸载/关闭重开会话隔离;EntityDialog打开捕获dirty基线、动态字段空值安全、values/touched/errors own-property读取;EntityPicker去重counts并保留跨页ID;ShareDialog不再伪造链接,复制等待host成功,空定时收件人/无效hour拒绝保存。完整矩阵见 docs/components.md,保留 onChange→onSave 的既有顺序,持久化失败时host负责回滚外部尝试值。
|
|
941
|
+
|
|
942
|
+
11新回归、46项定向,全库**975项测试**与verify/Storybook/只读复审通过,lint0errors/15warnings(EntityDialog旧render ref warning消除)。首轮审查发现继承errors属性误作错误,修复并补constructor有效字段提交回归后复审通过。
|
|
943
|
+
|
|
944
|
+
16组1280/390×亮/暗×四中文RTL弹窗示例,dialog位于viewport内且无页面溢出;真实实体失败保留中文draft、重试host输出成功并关闭、重开标题空;分享复制失败只显示失败alert与复制按钮,不显示已复制。证据 docs/qa/d-entity-checks.json、d-entity-failed-dark.png;异步剪贴板成功和会话隔离采用callback mocks,不执行真实远端分享/授权。
|
|
945
|
+
|
|
946
|
+
剩余四模块继续执行:ReportCanvas、RoadmapEditor、ListWorkbench、ProjectWizard。
|
|
947
|
+
|
|
948
|
+
### Ship 最后四模块验收(实现提交 `22aee83`)
|
|
949
|
+
|
|
950
|
+
对照固定6.6.5 Card/Layout/Table/Timeline/Steps/Form/Modal/ActionButton以及实际table1.11.1、steps1.2.3、form1.8.6;业务编辑器以组合行为验收,无直接AntD对应项。完整API/行为/差异矩阵见docs/components.md。
|
|
951
|
+
|
|
952
|
+
- ReportCanvas:自身handle/activeDrag验证,loading/provider禁用也保护custom opener,禁用使旧drag失效;IME/修饰Enter保护、unique IDs、finite span fallback,移动卡片全宽且header换行,去除虚构browser存储文案。
|
|
953
|
+
- RoadmapEditor:每period独立跨年weekend、quarter参数/日期范围与year0保护;自身drag且禁用失效;有效lane/period/color/空schema校验、RTL箭头/IME、unique IDs、同步host修改与删除确认。
|
|
954
|
+
- ListWorkbench:同tick view patches/latestcallback/卸载identity禁用清理,有限page/size和prototype字段安全;board遵守loading/error/empty;等待真实create/edit/bulk-property/import/delete/clipboard,失败保持draft/selection并可retry,等待期间新选择不清空;CSV正确引号/多行/CRLF/BOM/显式空记录,坏header/引号/列数拒绝,公式保护与URL延迟释放。
|
|
955
|
+
- ProjectWizard:挂载捕获baseline、owner包含/保护与成员去重;空catalog/name256/key15/enum/candidate校验,stale roster拒绝、RTL/IME及step focus,Promise锁/失败retry/禁用与卸载隔离。
|
|
956
|
+
|
|
957
|
+
18新回归、109项定向通过;最终全库**993项测试**、verify、Storybook构建及只读复审通过。lint0errors/13warnings,旧render ref和roster reset警告减少,未关闭规则。首轮新测试的FileReader fake timer未推进导致timeout,修正timer自检后保留字节断言;故事Error名称遮蔽Error构造器,改ErrorState后typecheck通过。审查发现的旧drag ref、bulk旧callback/新增selection误清、rowmenu delete绕锁3问题全部修复并补回归。
|
|
958
|
+
|
|
959
|
+
32组1280/390×亮/暗×8中文RTL及loading/error/empty/disabled故事无页面溢出/实际加载错误。真实RTL ArrowLeft选择Kanban,第二步focus panel;失败创建保留第三步及不可移除owner,重试宿主输出并关闭;画布Enter排序保留同键按钮焦点,Enter新增后返回opener;路线图2022Q1=26/2023Q1=25,键盘移动公告与host更新;工作台keyboard Edit打开,失败保存中文draft保留,retry行更新并恢复Edit按钮焦点。
|
|
960
|
+
|
|
961
|
+
证据docs/qa/d-workbench-checks.json、d-workbench-{canvas,roadmap}-dark.png、d-workbench-{wizard,edit}-failed-dark.png;HTML5drag所有权/禁用、CSV原始字节、异步失败及会话以回归验证,未冒称完成真实浏览器文件选择或跨服务持久化。
|
|
962
|
+
|
|
963
|
+
### 本计划关闭记录
|
|
964
|
+
|
|
965
|
+
A18+B15+C13+D21共67个工作包均已勾选,每批完成标准7项已核实,本计划没有未勾选项。生成API与组件文档、Changelog、故事、回归、QA证据和实现提交已关联;既有记录中的“剩余工作”数量为对应批次的历史快照,以顶部当前状态为准。
|
|
966
|
+
|
|
967
|
+
保留边界均列入组件矩阵:Klun已有API/样式、同步业务协议、宿主路由/权限/网络/持久化、部分既有英文领域文案、AntD扩展API/算法范围。附件元数据和示意预览不是真实上传/原始字节下载;真实剪贴板权限/远端分享与导出、生产发布部署未执行。发布部署继续遵循平台工作流。
|
|
968
|
+
|
|
969
|
+
### 全部13项 lint 警告清理(2026-10-09,实现提交 `b5133c4`)
|
|
970
|
+
|
|
971
|
+
| 原警告位置 | 数量 | 根因处理 |
|
|
972
|
+
| -------------------- | ---- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
973
|
+
| useControllableState | 3 | render ref写改commit阶段同步;useInsertionEffect仅发布props refs,保证后代layout setter读最新value/onChange/controlled模式,保留setter identity |
|
|
974
|
+
| ContextMenu | 4 | 失效submenu用条件render reset;鼠标/键盘去重事件移私有hook,render prop不读ref;保留child handler合并、preventDefault和focus行为 |
|
|
975
|
+
| Popover | 1 | closed ready状态条件reset,layout effect仅测量打开层,避免关闭effect级联render |
|
|
976
|
+
| Typography | 1 | generation显式赋值递增,cleanup不再被误识别为DOM ref清理;计时器、mounted和旧复制结果保护保留 |
|
|
977
|
+
| CommentThread | 1 | 异步锁与generation由私有action hook承载,复制命令创建事件handler,不在render执行ref操作 |
|
|
978
|
+
| DetailSheet | 2 | 工具改为模块级React组件,onClick只在事件执行,维持原生按钮/tooltip/emoji anchor/禁用行为 |
|
|
979
|
+
| ListWorkbench | 1 | view patch队列移私有hook,保留同tick合并、latestcallback、identity/disabled/unmount隔离 |
|
|
980
|
+
|
|
981
|
+
新增2项提交顺序回归:父受控props更新后,后代layout函数式setter使用新值/新回调且identity不变;controlled→uncontrolled后代layout更新使用正确模式。83项定向和全库**995项测试**通过;`pnpm verify`、`pnpm build:storybook`、只读复审、diff/格式检查通过。
|
|
982
|
+
|
|
983
|
+
`react-hooks/refs`和`react-hooks/set-state-in-effect`升级为error,verify的MAX_WARNINGS设为0;没有禁用规则或增加ignore。CONVENTIONS及Changelog已同步,生成API校验保持一致。本次不改样式或公开API,未新增依赖;未另做浏览器验收,未发布部署。旧批次记录的警告数为历史快照,以顶部当前状态为准。
|