可访问性
axe 测试、键盘交互与已知限制。
axe-core 测试
packages/ui/src/primitives/a11y.test.tsx 用 Testing Library 渲染组件,再通过 expectNoAxeViolations 跑 axe-core。覆盖范围:
- Button、Input、Badge、ScrollArea
- Checkbox、Switch、RadioGroup、Slider、Progress
- Tabs、Select、Dialog、Tooltip
pnpm --filter @tennantite/ui test
键盘与焦点
Base UI 负责 Tab 顺序、方向键、Enter / Space、Esc 关闭等行为。自研交互统一使用白色像素焦点框;mc-outline 提供 1 GUI px 外描边。hover 只作桌面增强,不承载唯一入口。
语义与标注
- Dialog 必须提供
DialogTitle;需要说明时再提供DialogDescription。 - 纯图标控件由调用方给
aria-label。 Icon默认aria-hidden="true",不进入可达性树。- 装饰性预览使用
inert与aria-hidden,避免重复焦点与重复朗读。
已知限制
- HUD 是 overlay,不参与焦点;它不是可操作的表单区域。
- 整屏界面是视觉模拟,不是语义化的数据表格。
- axe 尚未覆盖全部 screens;当前以 primitives 为主。
- 像素字体的中文字形回退到系统字体,字重与字宽可能不一致。
接入检查
输入框必须有 label 或 aria-label;按钮必须有可读文本;Dialog 必须有标题;不要把 hover 当作唯一入口。