etaf-playground/DESIGN.zh-CN.md
2026-08-22 06:19:10 +08:00

96 lines
5.4 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.

# 设计
## 来源与状态
- 状态:唯一 reviewed pair 的 active draft
- 更新日期2026-08-20
- 主产品面:`examples/operations-console.etaf` + `examples/operations-console.el`
- 视觉参考:`design/operations-console.html`
- 已审查证据pair loader/manifest、`etaf-ui.el`、Ebox viewport 合同及当前 GUI/性能证据。
## 品牌
- 气质:安静的操作控制台;准确、温暖、克制地体现技术感。
- 信任信号:状态 chip、更新时间、明确计数、清晰的成功/错误反馈。
- 避免:普通玩具 dashboard、彩虹渐变、无语义状态的装饰控件和杂乱控制区。
## 产品目标
- 用一个好看的 app 同时展示 Component、组合、响应式、Context/Theme、Behavior、事件/Action、Data、Resource、错误边界、焦点和生命周期。
- 不扩展第二个 Playground 场景,不伪装成完整生产分析产品,不用假动画掩盖框架问题。
- HTML 原型和 ETAF 实现保持同一层级、状态文字、交互结果和 compact/fullscreen 几何。
## 信息架构
- Shell品牌/header → 导航 tabs → page surface → 持久 status footer。
- Overviewhero/status、KPI 卡片、活动/控制 workspace、能力卡片和事件时间线。
- Data选择摘要、可交互 DataGrid、selection detail。
- Resource资源状态、reload/fail-next、boundary 结果和 cleanup 计数。
- 层级:先显示页面标题和状态,再显示主操作,最后显示诊断/细节。
## 设计原则
1. 一个视觉层级:每个控件属于有名字的 surface每个 surface 都有可见状态。
2. 状态优先于装饰theme、loading、error、selected、disabled、success 都有文字表达。
3. 几何稳定compact 下控件保持单行,页面只替换 page surface。
4. API 真实HTML 可以用普通 HTML/JS但 ETAF 只用公开 ETAF/ETAF-UI API。
## 视觉语言
- 色彩:墨蓝 `#142235`、纸张 `#F6F1E8`、灰蓝 `#526174`、青绿 `#2E8B83`、珊瑚 `#E26D5A`、琥珀 `#D99A3D`、成功绿 `#3E9B72`
- 字体:易读 sans body紧凑 monospace 指标/标签,粗体页面标题。
- 节奏:一行外部节奏、双列 workspace、固定 gap、shell 全宽,卡片有明确内边距。
- 形状:细深色边框、克制 elevationETAF 不依赖浮层。
- 动效:不以动画为正确性前提,状态变化即时且支持 reduced motion。
- 图形:只用文字标记和 Unicode 状态符号,不依赖外部资源。
## 组件
- 复用公开 `button`、`checkbox`、`label`、`panel`、`data-grid`。
- companion 组件:`operations-console-shell`、`hero-status`、`metric-strip`、`activity-card`、`capability-card`、`timeline`、`data-page`、`resource-page`。
- 状态active/inactive nav、light/dark theme、selected/unselected row、Behavior on/off、resource ready/loading/error、boundary handled、compact/fullscreen。
- 所有权:`.etaf` 只放静态 composition 和 section 名称;`.el` 持有 token、props、refs、资源、handlers 和 state。
## 无障碍
- 目标:键盘完整、高对比文字,使用公开组件提供语义 role。
- Tab/Shift-Tab 遍历 nav/action/data rowsRET 派发 focused ref移除目标时清焦点。
- 每个状态都有文字反馈,颜色不是唯一信号;不依赖 hover-only 行为。
- Ebox Theme 承载继承的 Ebox 默认属性;应用 palette 仍由 companion 查询,
Renderer 会在进入 Ebox 几何层前过滤未知 token 名。
## 响应式
- 支持 compact 900940px body 和 fullscreen desktop GUI。
- metric 尽量一行展示workspace 从双列退化为上下堆叠,控件保持 intrinsic 单行宽度。
- 需要分配剩余宽度的行使用 `flex`,固定 intrinsic 控件组才使用 `row`;导航
控件组使用 max-content确保每个 hover/active 区域都是独立控件。
- mouse-1 和键盘激活使用同一组公开 refs。
## 交互状态
- LoadingResource 显示 `Loading…`shell 几何不移动。
- EmptyDataGrid 明确显示 empty选择控件仍可用。
- Errorreload 可故意失败一次Boundary 显示 handled error 且仍可恢复。
- Successaction/status 和 timestamp 可见更新。
- Disabled不可用操作暴露 disabled 语义,不静默吞输入。
## 内容语气
- 简洁、操作化、解释性;标签明确指出正在展示的框架能力。
- 统一使用 `Component`、`Context`、`Theme`、`Behavior`、`Action`、`Data`、`Resource`、`Boundary`。
- 优先“动词 + 结果”(如 `Reload resource`、`Handled: …`、`Selected Beacon`)。
## 实现约束
- 使用 `.etaf`/`.el` 的公开 ETAF View DSL由 Ebox 渲染,不引入 HTML/CSS runtime dependency。
- palette/spacing token 在 companion 单处定义并复用,禁止散落临时色值。
- 性能:普通 warm p50 <=100mscounter/resource p50 <=150ms每个 warm max <=250ms每个逻辑动作一次 publication。
- 保留唯一同名 `operations-console` pair、静态安全读取、公开 API boundary、双 mount/unmount cleanup 和 manifest 语义。
- 导航:稳定的 page ref 由 retained router Component 读取;页面 Host 是唯一 semantic Range 锚点,页面切换只替换一个 Range payload不重建 shell root。
- HTML 是视觉参考ETAF 需要 compact/fullscreen 截图和动态键鼠 checkpoint 证明布局、宽度、焦点和状态。
## 待 review
- [ ] 用户可在第一版 HTML/ETAF 对照后调整 palette 或页面命名;行为和公开 ref 覆盖保持不变。