Appearance
渲染层 DOM 契约单源
系统概览
渲染层 DOM 契约的单一事实源(ADR-229 §9 契约统一)。三处同读一份,消除「测试猜渲染」漂移: 渲染函数产出 role/class 时引用、schema 快照测试写入 nodes[].dom 字段、e2e 从快照读取断言选择器(不再手写 KIND_SELECTOR_MAP)。
核心职责
dom-contract.ts— 定义ROLE/ARIA_ATTR/KIND_CONTROL_SELECTOR/COLLAPSIBLE/SLIDER_BAR_CLASS/TOGGLE_INPUT_SELECTOR契约常量
对外 API(节选)
ROLE— 渲染层 role 属性常量(slider / switch / listbox / button / dialog / status / alert)ARIA_ATTR— aria 属性名常量(valuemin / checked / label / live 等)KIND_CONTROL_SELECTOR— MenuKind → 交互控件选择器(e2e 断言用)COLLAPSIBLE— collapsible(folder)组件 class 契约(ui-collapsible.ts 与 e2e 展开逻辑共用)SLIDER_BAR_CLASS— 滑动条本体 class(slider / colorSlider / modeSlider 共用.cs-bar)TOGGLE_INPUT_SELECTOR— toggle 的原生输入元素选择器(e2e 需点击/读 checked)
与其他子系统关系
- 被
ui-rows.ts/ui-advanced-rows.ts/ui-collapsible.ts/ui-slide-row.ts产出 role/class 时引用 - 被
menus/menu.ts/menus/resource-detail-helpers.ts消费选择器 - 被 schema-snapshot 测试与 e2e
schema-driven.spec.ts读取断言
UI 入口
- 菜单渲染层(ui-rows / ui-advanced-rows / ui-collapsible)产出 role/class 时引用;e2e 快照断言从
KIND_CONTROL_SELECTOR读取选择器
不变量
- 零依赖叶子模块,禁止 import 任何其他模块
- 渲染层改 role/class 必须同步本文件,否则 CI 快照门禁直接红
验证入口
- 测试:
frontend/src/__tests__/schema-snapshot.test.ts(元测试断言一致性) - 命令:
cd frontend && npm run test -- schema-snapshot.test.ts