设计规范
交互与无障碍
状态反馈、风险等级、键盘与焦点的共同约定。
交互状态
正常、激活、禁用、等待、成功、失败与部分完成必须有明确表达。等待时防止重复执行;失败时保留用户输入,说明原因和可执行的重试。状态不能只靠颜色表达,使用文字或语义图标补充。
基础控件用于原有 Ant Design 能力;工具栏和面板使用 Alune 的通用组件;仓库、Git / SSH 操作和复杂阅读页面属于业务组合。新增通用组件不得读取应用 store、路由、API 或 Electron。
风险与确认
| 等级 | 场景 | 默认焦点 | Enter |
|---|---|---|---|
| L0 | 普通输入或可恢复操作 | 字段,缺失时确认 | 合适的单行输入提交 |
| L1 | 需要核对的提醒 | 确认 | 合适的单行输入提交 |
| L2 | 不可撤销或较大风险 | 取消 | 不作为快捷提交 |
Escape 取消,关闭后恢复到触发位置。textarea、组合输入、IME 组合、带修饰键的 Enter 不抢占提交。输入确认在 trim 后与目标文字精确匹配;勾选确认完成后才允许主操作。
AluneModal 是受控弹窗:Promise 确认进入等待,拒绝后恢复操作,成功关闭由宿主更新 open。useAluneConfirm 返回确认结果,异步回调成功后才完成确认。说明后果的静态 DialogNote 保持在正文中,不当作异步通知发布。
局部单对象确认可以使用 AlunePopconfirm;批量、范围较大和不可撤销操作应使用 L2 弹窗。确认文案描述实际后果,避免模糊的“确定操作”。
键盘与无障碍
为原生按钮、图标动作、输入、选择和示例提供清晰名称。输入使用 label,错误与帮助文字关联到字段。面板开关的 aria-controls 指向真实元素,aria-expanded 随受控状态更新;快捷键监听由宿主注册。
Tab 顺序遵循 DOM 结构。Tooltip 同时支持 hover / focus;弹窗与浮层可从键盘进入,焦点恢复可预测。对重要等待与重试结果使用 role=status/alert,避免重复播报。文件图标为装饰内容,配套文件名必须可读。
文档搜索可用方向键选择、Enter 打开、Escape 收起;移动目录可通过 Escape 关闭并返回按钮。代码与 API 在局部容器滚动。尊重系统减少动态效果,保持深浅主题可读性。
反馈策略
反馈按作用域与来源修订去重,重试等待防止重复动作,来源卸载时释放租约,过期回调不能覆盖新的来源。表单内错误属于该表单;当前实现保留已合入的反馈队列与提示中心。
实施基线 20a8dd7 中 #151 与 #152 仍为 Open。本次共享迁移不实现这两项策略变化;反馈示例明确展示当前能力,不把待演进能力描述为已上线。暂存、取消暂存等高频常规操作不应新增成功弹窗;优先让内容变化说明结果。