Files
ttstd-infinite-canvas/docs/design/canvas-floating-controls.mdx
QAyong 5b7f173102 feat: 完善创作工作台与用户诊断支持 (#295)
* feat(canvas): 参考素材 - 增加移除按钮并删除对应连线

* feat(canvas): 完善节点面板交互与拖拽反馈

* fix(canvas): 画布交互与小地图 - 统一浮层层级并完善节点识别

* feat(prompt-optimizer): 增加 AI 提示词优化器及宿主接入

* feat(canvas): 画布 - 增加自动整理节点按钮并补充文档

* chore(web): 前端 - 修正提示词优化器格式

* chore(backend): 后端 - 修正 Go 格式检查

* feat(workspace): 完善诊断导出与本地排障支持

* chore(web): 格式化诊断导出文件

* fix(web-test): 兼容 Bun 测试运行时

* fix(web-test): 对齐模型目录协议断言
2026-08-25 13:49:15 +08:00

81 lines
4.9 KiB
Plaintext
Raw Permalink 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.
# 画布浮动控件设计沉淀:顶部操作区与底部 Dock
> 范围:无限画布的顶部项目操作区、底部画布工具 Dock、小地图,以及工作模式切换。
> 目标:让画布操作控件形成统一的浮动面板系统,并在不同主题和视口下保持稳定对齐。
> 状态:已实现首版,构建与当前画布回归已确认。
## 1. 设计方向
画布本身是创作空间,操作控件不应占用固定内容栏,也不应把按钮散落在画布节点之间。因此控件采用独立浮动面板:
- 左上放置项目菜单、画布名称和重命名入口。
- 右上放置搜索、导入、性能、积分、专注、分享和 Agent 等操作。
- 左下保留画布视图控制和素材空间 Dock。
- 工作模式切换放在右下,与左下 Dock 共用底部安全区,避免顶部中央出现额外的孤立控件。
## 2. 视觉合同
顶部操作区和底部 `FloatingDock`(浮动 Dock)复用 `canvasDockStyle`(画布 Dock 样式合同):
- `--dock-surface`:浮动面板表面。
- `--dock-border`:主题边界。
- `--elevation-overlay`:面板层级阴影。
- `--dock-command-hover`:控件悬停表面。
- `--dock-command-active`:持续激活状态表面。
普通操作按钮默认透明,只有悬停或持续激活时才显示控件表面;面板本身负责边界和阴影,避免每个按钮都形成独立卡片。
## 3. 工作模式切换
`CanvasWorkspaceModeSwitch`(画布工作模式切换)是右下角独立浮动面板,不再挂在顶部栏中间:
- 触发器与底部 Dock 使用同一高度、圆角、边界和阴影。
- 菜单从触发器上方展开,并与右侧边缘对齐,避免遮挡底部工具栏和画布主体。
- 外层定位使用 `--canvas-inset-x` / `--canvas-inset-y`,与左下视图控制保持同一水平基线。
- 简洁模式和专业模式继续使用原有 `workspaceMode` 状态,不改变节点渲染和生成逻辑。
## 4. 实现地图
- `web/src/pages/canvas/canvas-project-top-bar.tsx`:顶部左右浮动面板,以及工作模式切换组件和下拉菜单。
- `web/src/pages/canvas/project.tsx`:将工作模式切换定位到画布右下角,并与底部控制使用同一安全区。
- `web/src/components/canvas/canvas-zoom-controls.tsx`:底部视图控制 Dock 的既有实现,作为浮动控件视觉基准。
- `web/src/components/canvas/canvas-mini-map.tsx`:小地图节点缩略图、标题标注和视口拖动预览。
- `web/src/components/canvas/canvas-overlay-layer.tsx`:画布浮层的激活层级管理,按点击和焦点提升当前浮层。
- `web/src/lib/canvas/canvas-aceternity-style.ts`:提供 `canvasDockStyle` 样式合同。
- `web/src/styles/globals.css`:维护顶部面板、控件状态和工作模式菜单的唯一样式规则。
## 5. 小地图信息表达
小地图是“定位与导航”视图,不复制完整节点内容,但必须让节点在缩略比例下仍然可识别:
- 图片节点优先复用 `storageKey`、预览地址或导入源生成缩略图;资源通过缓存组件延迟加载。
- 所有节点保留一个短标题标注。标题单行显示并限制最大宽度,过长时省略,悬停可查看完整名称。
- 非图片节点继续使用类型色块;图片缩略图加载失败时回退到类型色块,不伪造媒体内容。
- 可加载缩略图的图片节点不超过 24 个时显示缩略图;超过阈值后统一回退到色块,避免小地图成为媒体解码热点。
- 标注只覆盖在小地图上,不移动画布节点,也不做空间避让;折叠背板内的节点不重复显示。
底部“适应画布”命令的语义是把当前画布内容整体纳入视口,和小地图的导航职责分开:小地图用于定位,适应画布用于一次性恢复内容总览。
## 6. 响应式与交互边界
- 桌面端顶部左右面板保持同一顶部安全区;底部左右面板保持同一底部安全区。
- 窄视口沿用 `--canvas-inset-y + --space-16` 的底部避让规则,避免与移动端底部工具区域重叠。
- 工作模式菜单打开时支持点击外部区域和 `Escape` 关闭。
- `prefers-reduced-motion` 下关闭或缩短面板和选项的进入动画。
- 本次只调整控件位置和视觉层级,不改变菜单命令、模式持久化和画布操作行为。
## 7. 验证与待回归
已完成:
- `git diff --check` 通过。
- Impeccable 受限扫描未发现本次新增的 UI 反模式。
- `web` 目录执行 `bun run build` 通过。
- 当前画布已确认小地图缩略图、标题标注和视口拖动区域正常显示。
待确认:
- 浅色/深色主题下检查顶部左右面板、底部三个 Dock 的边界和阴影一致性。
- 检查工作模式菜单在桌面、窄视口和底部工具栏打开时的对齐与遮挡关系。
- 仍需在更多节点数量、深色主题和极端缩放比例下补充回归;当前构建未覆盖后端集成测试。