实现 UI 编辑器子节点互斥显示

新增 Stack / Exclusive 子节点显示模式及 Rust/TypeScript DTO。

Merged 物化自动使用 Exclusive,识别和手动节点默认使用 Stack。

拆分预览可见性 hook 与互斥子节点 Tab 组件,统一 Tree Panel 和最终预览状态。

补充 Inspector 模式选择、渲染规则、同步测试和技术方案文档。
This commit is contained in:
2026-08-18 15:15:58 +08:00
parent e88cb6ed9e
commit 3012519911
20 changed files with 527 additions and 40 deletions
@@ -0,0 +1,26 @@
# UI 编辑器子节点显示规则
## 规则
`Node.children_display_mode` 控制父节点直接 children 的预览显示方式:
- `Stack`:所有直接 children 按现有树结构显示。
- `Exclusive`:直接 children 中允许显示 0 或 1 个。
`Merged` 合并容器由 Rust materialize 阶段直接设置为 `Exclusive`,不由 LLM 决定,也不需要历史数据迁移。
## 状态与交互
编辑器预览可见性仍是按界面图隔离的临时状态。Tree Panel 的节点眼睛操作和最终预览的互斥 tab bar 必须共用同一套可见性状态:
```text
[子节点 A] [子节点 B] [子节点 C]
```
当前可见 child 高亮;点击其它 child 会隐藏兄弟并显示目标;点击当前高亮 child 会将其隐藏,允许进入全部隐藏状态。没有 child 可见时不高亮任何 tab。
最终预览只在当前选中的父节点为 `Exclusive` 时显示 tab bar。Inspector 只提供“子节点显示模式:叠加 / 互斥”选择,不增加独立的当前状态或隐藏按钮。
## 默认行为
`Exclusive` 节点没有显式隐藏状态时,最终预览按 children 顺序显示第一个 child。首次通过 Tree Panel 或 tab bar 修改后,状态由共享可见性状态明确记录。