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

6.8 KiB
Raw Blame History

设计规范

事实来源

  • 状态:生效中
  • 最近更新2026-08-05
  • 主要产品界面:etaf-playground-openetaf-playground-open-ui 与交互式应用 etaf-playground-open-showcase
  • 已审阅证据:etaf-playground.eltests/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 目录后,才能把目录示例表述为完成迁移的组件画廊;维护者;阻止错误的功能对等声明。