Files
ttstd-infinite-canvas/docs/design/canvas-floating-controls.mdx

65 lines
3.5 KiB
Plaintext
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.
# 画布浮动控件设计沉淀:顶部操作区与底部 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/lib/canvas/canvas-aceternity-style.ts`:提供 `canvasDockStyle` 样式合同。
- `web/src/styles/globals.css`:维护顶部面板、控件状态和工作模式菜单的唯一样式规则。
## 5. 响应式与交互边界
- 桌面端顶部左右面板保持同一顶部安全区;底部左右面板保持同一底部安全区。
- 窄视口沿用 `--canvas-inset-y + --space-16` 的底部避让规则,避免与移动端底部工具区域重叠。
- 工作模式菜单打开时支持点击外部区域和 `Escape` 关闭。
- `prefers-reduced-motion` 下关闭或缩短面板和选项的进入动画。
- 本次只调整控件位置和视觉层级,不改变菜单命令、模式持久化和画布操作行为。
## 6. 验证与待回归
已完成:
- `git diff --check` 通过。
- Impeccable 受限扫描未发现本次新增的 UI 反模式。
待确认:
- 浅色/深色主题下检查顶部左右面板、底部三个 Dock 的边界和阴影一致性。
- 检查工作模式菜单在桌面、窄视口和底部工具栏打开时的对齐与遮挡关系。
- 本项目按规则未自动运行 TypeScript、构建或测试;提交前只做了静态检查。