etaf-playground/postmortem/2026-08-19-etaf-ui-paired-examples.md
2026-08-22 06:19:10 +08:00

57 lines
2.5 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.

# ETAF UI paired examples — postmortem / 组件配对示例复盘
## English
### Context
The playground originally mixed a large hand-written Host tree with an
optional catalog entry. That made the primary examples fail to teach the
official Component contract and encouraged example-only button/grid helpers.
### Decision and why
Each runnable example is now a same-basename `examples/<name>.etaf` + `.el`
pair. The `.etaf` file is safe static data and the companion owns state,
controllers, and callbacks through the public pair loader. This preserves the
formal data boundary and makes source/build/mount behavior testable. `etaf-ui`
is a required dependency because the examples are intended to prove the
official Button, Checkbox, Label, Panel, and DataGrid semantics—not a fallback
catalog.
The semantic behavior belongs in `etaf-ui`, not in playground compensation:
disabled controls lose callbacks and tab stops, and interactive DataGrid rows
receive stable refs, roles, and tab indexes. The Showcase layout uses a
vertical growable main region with a bottom status region, so geometry remains
the framework/layout contract rather than a collection of timing hacks.
### Follow-up
Keep pair files small and explicit. Extend the public catalog or core API when
a reusable semantic capability is missing; do not copy a private implementation
into an example.
## 中文
### 背景
旧 playground 把大段手写 Host 树与可选组件目录混在一起,主示例没有真正教授
官方 Component 契约,也容易催生只供示例使用的 button/grid helper。
### 决策与原因
现在每个可运行示例都是同名的 `examples/<name>.etaf` + `.el` 配对。`.etaf`
是安全的静态数据companion 通过公共 pair loader 持有状态、controller 与
callback。这样保留正式数据边界并且可以测试 source/build/mount 全流程。
`etaf-ui` 改为必需依赖,因为示例的目的就是证明官方 Button、Checkbox、Label、
Panel、DataGrid 的语义,而不是提供备用目录。
语义行为归 `etaf-ui` 所有,而不是由 playground 补偿disabled 控件移除
callback 和 tab stop可交互 DataGrid 行拥有稳定 ref、role 与 tab-index。
Showcase 使用可增长的纵向 main 和底部 status使几何成为框架/布局契约,而
不是一组 timing hack。
### 后续
保持配对文件小而明确。若缺少可复用语义能力,应扩展公共目录或核心 API不要
把私有实现复制进示例。