Skip to content

Commit 43fce6b

Browse files
committed
docs: add workspace panel editor unification design
1 parent e336342 commit 43fce6b

1 file changed

Lines changed: 357 additions & 0 deletions

File tree

Lines changed: 357 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,357 @@
1+
# Workspace 文件管理面板编辑器化统一设计
2+
3+
> Status: Draft
4+
> Date: 2026-05-26
5+
> Scope: `packages/web/src/features/workspace/views/shared/*`, `packages/web/src/features/workspace/views/mobile/*`, `packages/web/src/styles/components.css`, `packages/web/src/styles/components.theme.test.ts`
6+
7+
## 目标
8+
9+
统一当前 workspace 文件管理面板在桌面端和移动端的视觉语言,让 `Explorer``Search``Source Control` 三个面板更像同一套专业编辑器 workbench,而不是三个独立产品。
10+
11+
本轮目标:
12+
13+
- 保留现有桌面端 `Activity Bar + Sidebar View` 的信息架构
14+
- 保留移动端 `Explorer / Search / Git` 三视图切换模型
15+
- 收敛三块面板的圆角、边距、标题区、输入框、列表行、状态样式
16+
- 将整体气质收敛到 `小圆角 / 硬朗 / 克制 / 高扫描效率`
17+
- 保证浅色、深色和高对比主题下都继续走现有 token 体系
18+
19+
本轮不做:
20+
21+
- 不增加新的面板能力或 Git 工作流
22+
- 不重做桌面端信息架构
23+
- 不引入页面私有主题或绕过 token 的硬编码颜色体系
24+
- 不把移动端做成另一套更圆、更软的移动 App 风格
25+
26+
## 相关背景
27+
28+
当前代码和已有设计已经完成了几件正确的事:
29+
30+
- 桌面端已经是 `Activity Bar + Explorer / Search / Source Control`
31+
- `Search` 已经有独立内容搜索面板
32+
- 移动端已经接入 `Explorer / Search / Source Control`
33+
- 文件树、搜索结果、Git 列表都已经有独立共享组件
34+
35+
但视觉语言仍然没有完全统一:
36+
37+
- `Explorer` 更像树控件
38+
- `Search` 更像独立搜索工具
39+
- `Git` 仍有较重的表单和局部卡片感
40+
- 移动端虽然已扁平化,但和桌面端还不是完全同一套 panel grammar
41+
42+
用户已确认的方向:
43+
44+
- 整体采用小圆角、硬朗设计风格
45+
- 三块面板必须统一成一套视觉系统
46+
- 选中态不要左侧强调条,改为更完整、更干净的块级高亮
47+
- 需要特别注意视觉规范与主题一致性
48+
49+
## 设计结论
50+
51+
采用 `Workbench 统一化` 方向,并向更硬朗的编辑器工具面板靠拢。
52+
53+
核心原则:
54+
55+
- 信息架构保持不变,主要改视觉系统
56+
- 共享一套 panel primitive,而不是为每个面板单独修样式
57+
- 桌面端优先保证扫描效率与专业感
58+
- 移动端保持同一套语言,只放大热区,不改变语气
59+
- 所有背景、边框、选中、hover、focus 都必须走语义 token
60+
61+
## 统一视觉系统
62+
63+
## 1. 圆角规范
64+
65+
整体使用现有共享 radius token,不新增“文件管理面板专用圆角”。
66+
67+
约束:
68+
69+
- 输入框、列表行、面板内工具按钮使用小圆角
70+
- 面板容器和分组容器使用中等偏小圆角
71+
- 不使用大胶囊、超大卡片圆角、消费型圆按钮语言
72+
- 状态 chip 可继续保留胶囊型 radius,但只用于状态,不扩散到面板主体
73+
74+
具体落点:
75+
76+
- `Explorer / Search / Git` 的输入框、行项、行内按钮统一靠拢到现有 `radius-control-sm / radius-panel / radius-md` 体系
77+
- 移动端 `mobile-files-sheet` 内容面板继续使用共享 radius token,不引入大圆角容器
78+
79+
## 2. 间距与密度
80+
81+
三块面板统一成相同的密度节奏。
82+
83+
桌面端:
84+
85+
- 标题区高度统一到紧凑工具面板密度
86+
- 列表行维持紧凑扫描节奏
87+
- 分组块之间的间距小于普通页面卡片系统
88+
89+
移动端:
90+
91+
- 保持相同视觉节奏,但将行高和点击热区放大到触控可用范围
92+
- 不因触控而放大圆角或加重卡片感
93+
94+
统一结果:
95+
96+
- `header / section / input / row / inline action` 的边距关系一致
97+
- `Search` 不再比 `Explorer` 更像表单
98+
- `Git` 不再比另外两块更像卡片式工具区
99+
100+
## 3. 面板层级
101+
102+
整体层级从 “多层壳卡片” 收敛为 “连续工具面”。
103+
104+
规则:
105+
106+
- 主面板依赖细边框、浅层背景和分隔线建立结构
107+
- 禁止使用厚阴影、强渐变、明显浮起卡片层级
108+
- 同一面板内,内容层级优先于容器层级
109+
110+
这意味着:
111+
112+
- 用户先看到文件、搜索结果、变更列表
113+
- 而不是先看到包住这些内容的“卡片”
114+
115+
## 4. 交互态规范
116+
117+
### Hover
118+
119+
- 使用单层轻背景变化
120+
- 不使用营销式高亮或重阴影
121+
122+
### Focus
123+
124+
- 必须沿用现有 control focus ring token
125+
- 输入框、可点击 row、工具按钮使用同一套 focus 表达
126+
127+
### Selected
128+
129+
这是本轮的明确决策点。
130+
131+
不采用:
132+
133+
- 左侧竖条强调
134+
- 选中时通过额外占位改变内容起始位置
135+
136+
采用:
137+
138+
- 完整块级高亮
139+
- 低饱和选中背景
140+
- 同色系轻边框或非常轻的内高光
141+
- 与 hover、focus 能共存但不互相打架
142+
143+
目标效果:
144+
145+
- 更像编辑器侧栏里的当前项
146+
- 更少后台列表或数据表格感
147+
- `Explorer``Search Match``Git Change Row` 共用同一类选中语义
148+
149+
## 主题与视觉规范约束
150+
151+
本轮必须遵守现有主题系统,不允许为赶效果直接写死颜色。
152+
153+
### 1. Surface
154+
155+
工作区面板背景必须继续走:
156+
157+
- `--workspace-sidebar-surface`
158+
- `--workspace-activitybar-surface`
159+
- `--workspace-content-surface`
160+
- 已有 `component-mix` surface token
161+
162+
禁止:
163+
164+
- 直接写死浅灰或深灰面板色
165+
- 新增与现有 theme pipeline 脱节的 bespoke surface
166+
167+
### 2. Border / Hover / Selected
168+
169+
边框、hover、选中态都必须继续走现有语义 token 组合。
170+
171+
优先使用:
172+
173+
- `--border-default`
174+
- `--surface-hover`
175+
- `--state-selected-bg`
176+
- `--state-selected-border`
177+
- 已有 `component-mix-status-info-fg-*``component-mix-surface-*` 体系
178+
179+
允许为本轮补充更准确的语义 token 映射,但不允许绕过 token 直接写死十六进制颜色。
180+
181+
### 3. Radius
182+
183+
必须继续走共享 radius token。
184+
185+
本轮不接受:
186+
187+
- `999px` 扩散到普通 panel control
188+
- `12px / 14px / 16px` 大圆角随意混用
189+
- 桌面与移动端各用一套完全不同的 radius 语言
190+
191+
### 4. Theme-sensitive testing
192+
193+
`components.theme.test.ts` 需要补充或更新断言,保证:
194+
195+
- workspace sidebar surface 仍走语义 surface token
196+
- 桌面端和移动端文件面板仍走共享 radius token
197+
- 选中态不再依赖左侧 border-left 方案
198+
- 搜索输入、文件树行、Git 列表行的视觉约束可以被测试捕获
199+
200+
## 三个面板的具体设计
201+
202+
## Explorer
203+
204+
`Explorer` 需要成为最基础的 panel grammar 来源。
205+
206+
保留:
207+
208+
- `Open Editors`
209+
- `Workspace`
210+
- 新建文件 / 新建文件夹 / 折叠操作
211+
- 文件树已有展开、打开、上下文菜单能力
212+
213+
改动:
214+
215+
- `Open Editors` 行项、文件树行项、行内操作按钮统一到同一套 row/button 体系
216+
- 文件树搜索框若出现在对应模式中,必须与 `Search` 面板输入框同源
217+
- section header、action icon、row active/hover 语义成为另外两块面板的基准
218+
219+
目标:
220+
221+
- Explorer 看起来不是“树控件样式集合”
222+
- 而是整个 sidebar design system 的主参考
223+
224+
## Search
225+
226+
`Search` 保留现有内容搜索能力,但视觉上必须向 `Explorer` 靠拢。
227+
228+
改动重点:
229+
230+
- 搜索输入框改成与 Quick Jump / Explorer 输入同一档工具输入框
231+
- 分组头与 match row 使用与文件树行一致的层级语言
232+
- 文件组、路径、匹配行不再像独立搜索结果卡片
233+
- match 行选中态改成块级高亮,不再出现类似独立列表条目的割裂感
234+
235+
视觉目标:
236+
237+
- 像编辑器内的内容搜索面板
238+
- 不是通用搜索页塞进 sidebar
239+
240+
## Source Control / Git
241+
242+
`Git` 面板的视觉问题最明显,因为它同时包含:
243+
244+
- commit 输入
245+
- 变更列表
246+
- worktree 列表
247+
- 历史列表
248+
249+
本轮要求:
250+
251+
- `commit` 区块的控件语言向工具面板收敛,降低“表单区域”感
252+
- `changes / worktrees / history` 三块与 Explorer section header 同构
253+
- Git 列表行和 Search / Explorer 的 row grammar 统一
254+
- 行内操作按钮、hover、active、selected 一律走同一套轻量表达
255+
256+
特别说明:
257+
258+
- Git 状态色仍保留状态表达职责
259+
- 但状态色不能成为额外的容器装饰系统
260+
261+
## 桌面端设计
262+
263+
桌面端保持当前布局模型:
264+
265+
- 左侧 `Activity Bar`
266+
- 右侧 sidebar content
267+
268+
本轮主要做:
269+
270+
- 统一 `workspace-sidebar-view` 的 header/body grammar
271+
- 统一三块 view 的顶部工具栏高度、标题样式、按钮尺寸
272+
- 统一列表容器、结果容器、commit 区块的工具面语言
273+
274+
桌面端目标关键词:
275+
276+
- dense
277+
- inspectable
278+
- editor-like
279+
- text-first
280+
281+
## 移动端设计
282+
283+
移动端继续保留:
284+
285+
- 顶部三视图切换
286+
- Explorer / Search / Git 的独立内容区
287+
288+
但必须与桌面端共享同一套工具面板语言。
289+
290+
规则:
291+
292+
- 顶部 tab 继续使用扁平切换,不回退到胶囊
293+
- 激活态可用细下划线或细底部强调,但不使用厚块状填充
294+
- 内容区 panel 使用与桌面端一致的 header / input / row grammar
295+
- 仅提升点击热区,不提升装饰性
296+
297+
移动端目标:
298+
299+
- 视觉上仍然像桌面编辑器的移动映射
300+
- 不是另一套消费型移动 UI
301+
302+
## 实现边界
303+
304+
预计主要涉及:
305+
306+
- `packages/web/src/features/workspace/views/shared/explorer-panel.tsx`
307+
- `packages/web/src/features/workspace/views/shared/file-tree-panel.tsx`
308+
- `packages/web/src/features/workspace/views/shared/search-panel.tsx`
309+
- `packages/web/src/features/workspace/views/shared/git-panel.tsx`
310+
- `packages/web/src/features/workspace/views/mobile/mobile-files-sheet.tsx`
311+
- `packages/web/src/features/workspace/views/mobile/mobile-explorer-panel.tsx`
312+
- `packages/web/src/styles/components.css`
313+
- `packages/web/src/styles/components.theme.test.ts`
314+
- 对应结构和交互测试
315+
316+
本轮优先做共享样式层收敛,不建议先分别修三个面板,否则容易再次分叉。
317+
318+
## 实施顺序
319+
320+
1. 在共享 sidebar 样式层抽出统一的 panel primitives
321+
2. 先对齐桌面端 `Explorer / Search / Git` 的 header、input、row、section
322+
3. 再映射到移动端 `mobile-files-sheet` 三视图
323+
4. 最后补充主题约束测试与结构测试
324+
325+
## 测试策略
326+
327+
需要更新或新增的测试重点:
328+
329+
1. 样式约束测试
330+
- 文件树 row 选中态不再依赖 `border-left`
331+
- Search match / group row / Git row 的选中态统一到块级高亮表达
332+
- 搜索输入、Git 输入、Explorer 输入共用紧凑工具输入风格
333+
- 桌面端和移动端继续使用共享 radius token
334+
2. 结构测试
335+
- 现有三块面板结构不因视觉收敛而破坏可操作性
336+
- 移动端 tab 切换、文件打开、Git preview 等行为保持不变
337+
3. 主题验证
338+
- 浅色、深色、高对比主题下的面板 surface、selected、hover 仍走语义 token
339+
340+
## 验收标准
341+
342+
- Explorer / Search / Git 在桌面端和移动端表现为同一套设计语言
343+
- 普通面板控件全面收敛到小圆角、硬朗、克制的工具面板风格
344+
- 选中态不再使用左侧强调条
345+
- 移动端视觉不再像另一套产品,只是在热区尺寸上适配触控
346+
- 主题切换后不出现脱离 token 的颜色或明暗冲突
347+
- `components.theme.test.ts` 能明确约束上述关键视觉决策
348+
349+
## 已确认设计结论
350+
351+
本设计已通过一次可视化稿确认,当前锁定方向为:
352+
353+
- V2 选中态:去掉左侧强调边,改用整块高亮
354+
- 整体风格:小圆角、硬朗、统一 workbench
355+
- 视觉规范:严格服从现有主题与 token 系统
356+
357+
后续实现如需偏离上述三点,必须重新评审。

0 commit comments

Comments
 (0)