新增 UI 编辑器代码地图与模块职责文档
- 定义 `Rust` 权威层、`React` 会话层与视图层的职责边界 - 描述数据流、关键模块设计与核心命令 - 补充扩展指引与关联文档链接 - 更新 `docs/README.md` 引用路径
This commit is contained in:
@@ -62,6 +62,7 @@
|
||||
- [AGC 聊天素材引用](./【功能说明】AGC聊天素材引用-2026-09-08.md):聊天输入框 @ 引用项目素材的入口、引用模型与「当前版本素材」口径。
|
||||
- [AGC 聊天 AI 润色与发送前提醒](./【功能说明】AGC聊天AI润色与发送前提醒-2026-09-10.md):提示词润色与发送前提醒的交互、失败与取消口径。
|
||||
- [UI 工作流资源桥接与 Runtime 执行](./【技术方案】UI工作流资源桥接与Runtime执行-2026-08-24.md)
|
||||
- [UI 编辑器代码地图与模块职责](./technical/【技术方案】UI编辑器代码地图与模块职责-2026-09-23.md):Rust `ui_editor` 模块、`features/ui-editor` 语义层与 `view/ui-editor` 视图层的职责划分与扩展指引。
|
||||
- [UI 编辑器 Godot 容器布局](./technical/【技术方案】UI编辑器Godot容器布局模型-2026-08-18.md)
|
||||
- [UI 编辑器变换角点偏移编辑器](./technical/【设计】UI编辑器变换角点偏移编辑器-2026-09-03.md)
|
||||
- [UI 编辑器子节点显示规则](./technical/【技术方案】UI编辑器子节点显示规则-2026-08-18.md)
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
# UI 编辑器代码地图与模块职责
|
||||
|
||||
更新时间:`2026-09-23`
|
||||
|
||||
一句话定位:`apps/ai-game-creator-shell` 的 UI 编辑器由「Rust/Tauri 权威层 + React 会话层 + 视图层」三段组成;Rust 持有可持久化 State、校验、LLM 工具链、预览渲染与代码生成,前端只负责语义编辑、会话编排和表现。
|
||||
|
||||
## 分层与数据流
|
||||
|
||||
```text
|
||||
view/ui-editor (页面/组件)
|
||||
└─ useUiEditorSession ← features/ui-editor (语义 + adapter)
|
||||
├─ useUiEditorState / stateTransition / nodeTransformGeometry
|
||||
├─ uiDesignStateStore → Tauri command
|
||||
└─ invoke: recognize_ui / merge_ui / ...
|
||||
└─ src-tauri/src/ui_editor (权威 State、校验、持久化、工作流)
|
||||
```
|
||||
|
||||
- 唯一事实来源是项目内的 `ui_design` JSON 文档(含 `revision`),前端 State 只是它的编辑副本。
|
||||
- 所有跨进程类型由 Rust 经 `ts_rs` 生成到 `features/ui-editor/types/`(当前 59 个文件),前端不得手改。
|
||||
|
||||
## Rust 侧:`src-tauri/src/ui_editor`
|
||||
|
||||
| 模块 | 职责 |
|
||||
| --- | --- |
|
||||
| `state/mod.rs` | 权威 State 根类型:`State`(`ui_trees` + 界面图/sprite/字体三张资源表)、`UITree`;ts-rs 导出源 |
|
||||
| `layout/` | 节点模型:`Node`、`NodeMetadata`/`StageStatus`、`ControlLayout`、`Container`、`NodeOffset`、`transform`、`ChildrenDisplayMode`(`Stack`/`Exclusive`) |
|
||||
| `component/` | 组件枚举 `Component::{Image, Text}`、`NodeComponent`(LLM 工具载荷的 `PureNode`/`WithComponent` 判别式) |
|
||||
| `resource/` | 界面图、sprite(含 `SpriteBorder` 九宫格)、字体(格式/媒体类型/CSS format)资源描述 |
|
||||
| `persistence.rs` | 文档读写、`revision` 乐观并发保存、领域校验(重复 ID、环检测、组件状态)、代码生成写盘 |
|
||||
| `resource_bridge.rs` | 原型图 → `ui_design` 资源的桥接建项(持项目写锁,装 revision 0,仅首个设计图) |
|
||||
| `html_renderer/` | 由 State 生成 HTML 片段与 JS(maud + 布局/组件 CSS 映射),供预览与 `ui/generated-*.js` |
|
||||
| `commands/` | LLM 工具链:`recognition`(结构识别)、`binding`(组件绑定)、`merge`(多树合并)、`ui_design_suggestion`(参考图语义)、`separation/`(自动切分素材)、`utils.rs`(LLM 请求、重试、`required_tool_arguments`) |
|
||||
| `workflow.rs` | 游戏页级工作流:发现 `game/ui-pages.json`、准备/识别/装状态/落阶段(`reference-ready → completed`)、`@genarrative-ui-page` 标记与 receipt 校验、生成最终路由 |
|
||||
| `commands/separation/` | 切分批处理、截图/预切、sidecar 恢复(inspect / finalize / discard)、patch 回写 |
|
||||
|
||||
关键命令(`main.rs` 注册):`load_ui_design_state`、`save_ui_design_state`、`generate_ui_design_code`、`ensure_ui_design_resource_for_prototype`、`suggest_ui_design_semantic`、`recognize_ui`、`bind_components`、`merge_ui`、`separate_ui`、`inspect_separation_recovery`、`finalize_separation`、`discard_separation_recovery`。
|
||||
|
||||
保存语义(`save_ui_design_state_at`):`Saved` / `Unchanged` / `Conflict`(返回当前快照)三态;先 `validate_state` 再持锁重读比对 `expected_revision`,成功后推进项目 revision。代码生成只接受已保存的 revision,产物路径为 `ui/generated-<stem>-<digest>.js`。
|
||||
|
||||
## 前端:`src/features/ui-editor`(无视图依赖的语义层)
|
||||
|
||||
- `useUiEditorState.ts`:State reducer + 撤销/重做(`undo/redo/resetHistory`)、`isLocked` 与 `runWithStateLocked`、节点/资源/树偏移的语义写操作、`createTree`(新树横向排布 + `UI_TREE_PADDING`)、删除影响 projection。
|
||||
- `stateTransition.ts`:React-free 的命令 → State 语义 transition(`set-tree-offset`、`set-node-metadata`、`set-node-component`)。
|
||||
- `nodeTransformGeometry.ts`:State 级节点几何(页面矩形、父矩形、resize 手柄反演),预览/Inspector 共用。
|
||||
- `stateInvariants.ts`:保存前不变量 projection,给视图稳定的中文失败信息;Rust 仍是权威校验。
|
||||
- `uiDesignStateStore.ts`:`IUiDesignStateStore`(`load`/`save`/`generateCode`)+ Tauri 实现 + 内存替身。
|
||||
- 结果应用 seam:`recognition.ts`、`merge.ts`、`uiDesignSuggestions.ts`、`separationStatus.ts`(问题节点 → `NeedReview`)。
|
||||
- 概览 projection:`stageStatusOverview.ts`、`separationOverview.ts`。
|
||||
- 前置校验:`requisites.ts` 在发起 LLM 操作前检查必需资源与结果完整性。
|
||||
- 适配器:`importAdapter.ts`(图片解码、批量导入、字体准备)、`uiDesignResourceBridge.ts`(原型桥接)、`useUiEditorFontFaces.ts`(私有字体族加载)、`spriteBorder.ts`。
|
||||
- `utils/`:State → CSS 映射(`componentToCss`、`controlLayoutToCss`、`textStyleToCss`、`transform/tf2css`)、`treeUtils`。
|
||||
|
||||
## 前端:`src/view/ui-editor`(表现与编排)
|
||||
|
||||
- `useUiEditorPage.ts`:`useUiEditorSession` 是视图与 adapter 的唯一协调边界,产出 `input` / `canvas` / `inspector` / `workflow` / `dialogs` / `save` 六个小 projection;视图不接收完整 controller。
|
||||
- `index.tsx`:页面骨架(输入侧栏、预览、Inspector、工具栏、保存/生成结果弹窗、键盘快捷键绑定),由 `view/project-development` 挂载。
|
||||
- `model.ts`:三步工作流(分析参考图 / 识别界面结构 / 自动切分素材)、导入种类、界面图 role、操作失败文案。
|
||||
- `operationLifecycle.ts`:suggestion/recognition/merge/separation 共用的异步操作 adapter。
|
||||
- `components/`:`InputSidebar`、`UiTreePanel`、`Inspector/*`(Transform、Components Text/Image、SpriteBorder)、`preview/*`(`PreviewWorkspace`、`UiTreeRenderer`、组件视图、排他子节点 tab、缩放/平移/拖拽手势)、工作流与结果弹窗。
|
||||
- 已退役的 render mode 由会话级开关 `showFrame` / `showOriginImage` / `showComponent` 取代。
|
||||
|
||||
## 扩展指引
|
||||
|
||||
- 新增节点/组件字段:先改 `layout/`(或 `component/`)并让 ts-rs 重新导出,再补 `stateTransition`、`stateInvariants`、`persistence::validate_node`、Inspector 与预览映射。
|
||||
- 新增 LLM 步骤:在 `commands/` 内自成 command(prompt + schema + 领域校验 + materializer),共用 `commands::utils` 的请求、重试与 tool-call 解析 seam。
|
||||
- 新增界面图 role 或状态值:改 Rust 枚举并同步 `view/ui-editor/model.ts` 的中文标签表。
|
||||
|
||||
## 关联文档
|
||||
|
||||
- [UI 编辑会话模块边界](./【前端架构】UI编辑会话模块边界-2026-08-19.md)
|
||||
- [UI 编辑器 Godot 容器布局模型](./【技术方案】UI编辑器Godot容器布局模型-2026-08-18.md)
|
||||
- [UI 编辑器子节点显示规则](./【技术方案】UI编辑器子节点显示规则-2026-08-18.md)
|
||||
- [UI 编辑器自动切分素材工作流](./【技术方案】UI编辑器自动切分素材工作流-2026-09-08.md)
|
||||
Reference in New Issue
Block a user