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.
83 lines
6.8 KiB
Markdown
83 lines
6.8 KiB
Markdown
# 设计规范
|
||
|
||
## 事实来源
|
||
- 状态:生效中
|
||
- 最近更新: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 配置的等宽字体;粗体只用于标题、标签、关键数值和激活控件。
|
||
- 间距:纵向以一行作为节奏;横向间距 12–16px;区块内边距 16–24px;卡片与表格边缘对齐。
|
||
- 形状与层级:方正的文本原生表面、一像素边框,不模拟圆角或阴影。
|
||
- 动效:状态直接发布,并在 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` 目录后,才能把目录示例表述为完成迁移的组件画廊;维护者;阻止错误的功能对等声明。
|