From e73c59b10e62a8110f33f02b44ea769dfbb2b03c Mon Sep 17 00:00:00 2001 From: "xiaohan.yuan" Date: Sun, 18 Oct 2026 18:10:23 +0800 Subject: [PATCH] docs: add design system extraction plan - record current token fragmentation, component inventory, target layering, and migration order - note the stale verify-ui bridge as a P0 prerequisite --- docs/设计系统提取与统一方案-2026-10-18.md | 247 ++++++++++++++++++++++ 1 file changed, 247 insertions(+) create mode 100644 docs/设计系统提取与统一方案-2026-10-18.md diff --git a/docs/设计系统提取与统一方案-2026-10-18.md b/docs/设计系统提取与统一方案-2026-10-18.md new file mode 100644 index 0000000..b03c9f2 --- /dev/null +++ b/docs/设计系统提取与统一方案-2026-10-18.md @@ -0,0 +1,247 @@ +# YCode 设计系统提取与组件统一方案(2026-10-18) + +## 结论 + +可以,而且当前代码已经具备做这件事的基础,但**不能直接从现有 CSS 里“提炼一套 token”后全局替换**。 + +原因是 YCode 现在不是一套设计系统,而是四套来源同时生效: + +1. `--yc-*`:YCode 自有的根级语义 token,主要在 `src/renderer/src/styles/tokens.css`。 +2. `--wb-*`:从 WorkBuddy 恢复的 token,但**没有全局根定义**,而是按组件作用域分别复制。 +3. `--cb-*` / `--cr-*` / `--dc-*` / `--ec-*` / `--wb-kb-*`:会话、能力中心、项目页等恢复模块各自的主题闭包。 +4. 少量本地 `.btn` / `.input` / `.dialog` 等旧类名,和恢复 UI 的 `wb-button`、`wb-input`、`wb-modal` 并存。 + +因此正确的路径不是“抽一套 token 全量替换”,而是: + +> 冻结恢复层,收敛本地层;把 `--wb-*` 明确降级为“原版兼容层”,把 `--yc-*` 提升为“YCode 自有界面的唯一语义层”;在语义层之上再抽通用组件。 + +## 现状证据 + +### 规模 + +统计范围:`src/renderer/src` 下的 `.css` / `.tsx` / `.ts`。 + +| 指标 | 数值 | +| --- | ---: | +| CSS 文件 | 109 | +| TSX 文件 | 151 | +| CSS 总行数 | 19,899 | +| CSS 声明 | 63,042 | +| 裸 `px` | 16,103 | +| 十六进制颜色 | 13,008 | +| `!important` | 925 | +| `--yc-*` 定义 / 使用 | 246 / 1,372 | +| `--wb-*` 定义 / 使用 | 2,129 / 22,756 | +| 导出的大写组件名 | 350(其中大量是图标组件) | + +构建产物 `out/renderer/assets/*.css` 中: + +- 规则数 14,082,`!important` 934。 +- 声明 `--wb-*` 变量 21,935 次,`--yc-*` 仅 314 次。 +- 大多数 `--wb-*` 来自按作用域复制的原版闭包,而不是一个全局主题。 + +### 样式分层 + +| 层 | 文件 | 现状 | +| --- | --- | --- | +| 核心 token | `src/renderer/src/styles/tokens.css` | `--yc-*` 有完整的颜色、间距、字号、圆角、阴影、布局定义;根级生效 | +| 排版 token | `src/renderer/src/workbuddy/typography/tokens.css` | REA 校验过的 `--wb-*` 排版 token,但不含颜色/圆角/控件 token | +| 恢复 source | `src/renderer/src/**/source-*.css`、`*-source.css` | 50 个文件、约 2.14 MB,原版规则与局部 token 闭包 | +| 恢复 recovered | `src/renderer/src/**/*-recovered.css` | 17 个文件、约 0.68 MB,生成的页面级投影 | +| 本地适配 | `**/*-adapter.css`、`**/*-adapters.css` | 7 个文件、约 32 KB | +| YCode 自有页面 | `styles/app.css`、`styles/sidebar.css`、`components/*.css`、`library/*.css`、`automations/*.css`、`projects/*.css` | 27 个本地文件、约 0.47 MB | + +### 同名 token 在不同子树解析出不同来源 + +`--wb-palette-brand-8` 至少在这些作用域被分别重新声明: + +- `src/renderer/src/capabilities/capability-center-source.css:2`(`.yc-capability-center`) +- `src/renderer/src/components/model-settings.css:146`(`.models-settings-panel`) +- `src/renderer/src/components/source-home-recovered.css:2`(`.source-home`) +- `src/renderer/src/components/source-workspace-picker-recovered.css:2`(`.source-workspace-picker`) +- `src/renderer/src/workbuddy/conversation/source-styles.css`(`.chat-pane.cr-theme` 及其 dark/light 分支) + +这意味着: + +- 全局根上并没有 `--wb-palette-*` / `--wb-color-*` 的单一权威来源。 +- 页面在自己的 subtree 内看起来是对的,但一旦组件被移出原作用域,就会掉色、掉圆角或掉主题。 +- 新组件如果引用 `--wb-*`,只能碰运气;引用 `--yc-*` 才有全局保证。 + +### 根级 `--yc-*` 已在渲染态生效 + +对当前构建产物 `out/renderer/index.html` 做了只读渲染抽查: + +| 变量 | 计算值 | +| --- | --- | +| `--yc-text-primary` | `rgba(0, 0, 0, 0.9)` | +| `--yc-bg-primary` | `#ffffff` | +| `--yc-radius-lg` | `8px` | + +当前 `scripts/verify-ui.mjs` 的假桥已落后于生产渲染树,缺少 `window.ycode.library`,因此首页/设置只能加载到 token,不能完整挂载页面。这是 P0 需要修的工具问题,不是产品 CSS 问题。 + +### 组件重复度 + +TSX 中的原生控件数量: + +| 元素 | 数量 | +| --- | ---: | +| `