etaf-playground/DESIGN.zh-CN.md
Kinneyzhang 082eff2f6c feat: polish the responsive ETAF showcase
Use a single display-safe viewport owner, responsive Flex sections, and the warm Ebox Flex reference visual language across the Showcase and compact examples.\n\nVerification: make check EMACS=/Applications/Emacs.app/Contents/MacOS/Emacs; GUI single-window screenshots for compact/fullscreen Overview, Work items interaction, dark Theme, core, and optional UI views.
2026-08-05 11:36:56 +08:00

83 lines
6.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 设计规范
## 事实来源
- 状态:生效中
- 最近更新2026-08-05
- 主要产品界面:`etaf-playground-open`、`etaf-playground-open-ui` 与交互式应用 `etaf-playground-open-showcase`
- 已审阅证据:`etaf-playground.el`、`tests/etaf-playground-tests.el`、中英文 README、当前 Showcase 的真实 GUI 渲染,以及 `../emacs-box/examples/playground/flex-reference.ebox` 的全屏 GUI 渲染。
## 品牌
- 气质:精确、克制、现代、技术感强,并且明显经过设计,而不是通用框架默认外观。
- 可信信号:精确对齐、清晰对比度、更新时稳定的几何结构、一致的语义颜色,以及能够真实演示 ETAF 公共模型的例子。
- 避免:未加样式的默认 Emacs 文本、过度饱和的仪表盘颜色、浅色背景上的低对比文字、装饰噪音、无意义的大面积留白,以及与普通正文无法区分的控件。
## 产品目标
- 目标:通过精致、可运行的应用体现 ETAF 的能力;用可见结构讲清 View、Component、Context、Data、Grid、保留状态与事件所有例子只使用公共 API。
- 非目标:模仿浏览器、使用位图装饰、另建样式框架、加入仅供示例使用的隐藏渲染路径,或假装当前较小的 `etaf-ui` 目录已经功能完整。
- 成功信号:首屏具有明确的应用结构;导航、数据和主题更新保持层级与几何稳定;截图中没有裁切、续行标记、意外换行或低对比文字。
## 用户与任务
- 主要用户ETAF 应用作者、Ebox/ETAF 维护者,以及评估新架构是否可用的人。
- 用户任务:快速理解框架、复制公共 API 模式、检查真实交互流程,并确认更新后视觉结构稳定。
- 主要环境GUI Emacs 单应用缓冲区、全屏演示,以及批处理/ERT 验证。
## 信息架构
- 主导航:固定的横向命令条,包含 Overview、Work items 与 Theme。
- 核心界面Overview 仪表盘、交互式 Work items 表格、Theme and semantics 色彩页、紧凑的核心计数器例子,以及可选的 `etaf-ui` 组件目录例子。
- 内容层级:品牌应用标题、固定导航、页面标题与说明、主要卡片或表格、上下文操作区,以及安静的状态栏。
## 设计原则
- 原则一:通过可见分组教学;每项能力都放在有标题、有边界的区域中,而不是混成一串文本。
- 原则二:沿用 Flex 参考示例的暖色、克制配色与一像素边框,不依赖阴影或浏览器专有视觉效果。
- 原则三几何正确性就是功能正确性viewport owner 必须包含自身边框,子区域必须适配 owner 的内容盒,更新不得引入换行或截断标记。
- 取舍:优先采用适合桌面 Emacs 的紧凑构图,而不是过量留白;内部响应式容器省略宽度,让 Ebox Flex 分配和换行,避免脆弱的多层 viewport 算术。
## 视觉语言
- 颜色:暖白画布 `#F8F5EE`;纸张 `#FFFDF8`;正文 `#252A2E`;弱化文字 `#66706A`;激活陶土色 `#B84F35`;淡陶土色 `#F1D4C9`;鼠尾草绿 `#DCEBDD`;蓝色 `#D9EAF2`;紫色 `#E7E2F1`;暗色模式使用深中性色表面和同一组语义色的亮色版本。
- 字体:沿用 Emacs 配置的等宽字体;粗体只用于标题、标签、关键数值和激活控件。
- 间距:纵向以一行作为节奏;横向间距 1216px区块内边距 1624px卡片与表格边缘对齐。
- 形状与层级:方正的文本原生表面、一像素边框,不模拟圆角或阴影。
- 动效:状态直接发布,并在 redisplay 后保持稳定;不使用装饰动画。
- 图像与图标:只使用文字与克制的语义符号,不使用 logo、emoji 装饰或位图外框。
## 组件
- 复用能力ETAF 核心 Hosts、保留式 Components、Grid、Context 主题值、Data Controller 与公共事件分发。
- 新增或调整Showcase 区块标题、指标卡、导航项、任务行、操作按钮、色板、紧凑状态栏,以及核心/UI 例子的精致外壳。
- 状态:激活导航、选中任务、启用/禁用操作、亮色/暗色主题、success/review/open、loading、empty 与 error。
- 所有权:色彩 token 位于 `etaf-playground--showcase-palette`;各 helper 拥有自己的展示表面ETAF/Ebox 继续拥有布局与渲染。
## 可访问性
- 目标:高对比、可用键盘操作的 Emacs UI并保留明确的语义 role 与 ref。
- 键盘与焦点:所有可操作表面保留 `:role 'button`、`:tab-index 0`、稳定 ref以及可见的激活/选中样式。
- 对比度:所有着色表面都有明确前景色;弱化文字在画布与纸张上都可读;激活控件同时使用颜色、边框或背景变化。
- 语义:框架支持时保留 label、role、ref 与 `aria-label`
- 动效:不依赖动画,普通 redisplay 即可使用。
## 响应式行为
- 支持范围:约 900px 宽的 GUI Emacs 窗口到全屏桌面宽度;验证时还使用 777px 可用宽度作为更严格下限。
- 布局适配:宿主测量窗口正文,并在右侧预留一个字符单元;最外层 shell 拥有 viewport 宽度;直接的 header/main/status 区域在其中 stretch嵌套响应式容器省略宽度由 Ebox Flex 分配或换行。
- 触摸/悬停:不适用;键盘与鼠标 press 共用公共事件模型。
## 交互状态
- Loading有标签、有边界并显示明确状态。
- Empty安静的解释区域可用时给出下一步操作。
- Error高对比 danger 区域;错误保持可见,不静默回退。
- Success鼠尾草绿强调色与明确反馈文本。
- Disabled弱化前景色并移除回调与 tab stop。
- 离线/慢网络:当前不适用,因为示例使用同步内存数据源。
## 内容语气
- 风格:直接、技术化、简洁、自解释。
- 术语:统一使用 ETAF 词汇View、Component、Host、Context、Data Controller、Runtime、event 与 public API。
- 文案规则:说清正在演示的能力和操作后的可见结果,避免宣传式填充文字。
## 实现约束
- 技术边界Emacs 29.1+、ETAF 公共 View/Component API以及 Ebox 公共布局/样式属性。
- Token复用 palette helper 与语义 token key不新建平行主题或 CSS 层。
- 性能:交互保持同步且有界;视觉改进不得增加隐藏的全树工作或除现有 viewport sync 外的新 timer。
- 兼容性:`etaf-playground` 必须独立于 `ebox-playground`,不得调用 `ebox--*` 私有 API。
- 验证:`make check` 通过GUI 截图只显示一个目标缓冲区窗口;动态检查覆盖导航、选择、新增、主题切换与返回 Overview不接受可见截断/续行标记或意外换行。
## 待解决问题
- [ ] 扩展官方 `etaf-ui` 目录后,才能把目录示例表述为完成迁移的组件画廊;维护者;阻止错误的功能对等声明。