dsh-theme-palette 1.3.1 → 1.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +334 -0
- package/README.md +49 -557
- package/client.js +1 -1
- package/docs/DESIGN.md +228 -0
- package/package.json +5 -2
- package/tools/release.mjs +117 -0
package/README.md
CHANGED
|
@@ -5,233 +5,61 @@ DSH Web / Desktop 的主题配色插件:**4 套配色 × 明暗两模式**,
|
|
|
5
5
|
入口:左下角头像 → **设置** → 左侧导航「**主题色**」→ 四张卡片(黑白 · 暖砂 · 靛蓝 · 苔绿)+ 一行「左侧栏底色」。
|
|
6
6
|
选择即时生效,存在 `localStorage`。
|
|
7
7
|
|
|
8
|
-
当前版本 **
|
|
8
|
+
当前版本 **1.3.3**。更新记录 [CHANGELOG.md](./CHANGELOG.md) · 逐组件设计说明 [docs/DESIGN.md](./docs/DESIGN.md)。
|
|
9
9
|
|
|
10
|
-
##
|
|
10
|
+
## 特性
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
- **4 套配色**(黑白 / 暖砂 / 靛蓝 / 苔绿)× **明暗两模式**,两个轴互相独立;
|
|
13
|
+
- 色阶**整体重算**(OKLCH 重建 + 色域钳位 + 在真实承载面上求解对比度),不是换几个变量;
|
|
14
|
+
- 覆盖 27,000+ 处 token 引用:正文、次级、三级、注释、链接、侧栏、卡片、气泡、主按钮、滚动条、开关、Markdown 标题/加粗、代码块;
|
|
15
|
+
- **自愈**:宿主丢弃 override 层时自动重放。
|
|
14
16
|
|
|
15
|
-
|
|
16
|
-
// ThemeRuntime(宿主)
|
|
17
|
-
overrideTokens(source, tokens) {
|
|
18
|
-
const layer = { seq: this.overrideSeq++, tokens: validateOverrides(source, tokens) }
|
|
19
|
-
this.overrides.set(source, layer)
|
|
20
|
-
this.publish()
|
|
21
|
-
return () => { if (this.overrides.get(source) !== layer) return; this.overrides.delete(source); this.publish() }
|
|
22
|
-
}
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
而插件侧拿到的是被 runner 包装过的版本 —— **每一层的 disposer 都被挂在调用方的 fiber 上**:
|
|
17
|
+
## 使用
|
|
26
18
|
|
|
27
|
-
|
|
28
|
-
const dispose = Reflect.apply(method, target, [id, tokens])
|
|
29
|
-
ctx.effect(() => dispose, 'cordis-client-runner: dynamic theme override layer')
|
|
30
|
-
```
|
|
19
|
+
左下角头像 → **设置** → 左侧导航「**主题色**」:
|
|
31
20
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
**v1.3.1 的处理**:加了一个自愈环。窗口重新可见 / 获焦 / `pageshow` / `theme/change` /
|
|
40
|
-
每 4 秒,回读 `body` 上的 5 个关键 token;不在了就把最后一层重放:
|
|
41
|
-
|
|
42
|
-
```
|
|
43
|
-
[dsh-theme-palette] 配色层不见了(visibility),已重放第 1 次
|
|
44
|
-
```
|
|
21
|
+
| 项 | 选项 |
|
|
22
|
+
|---|---|
|
|
23
|
+
| 配色 | 黑白 · 暖砂 · 靛蓝 · 苔绿(卡片缩略图跟随明暗) |
|
|
24
|
+
| 强度 | 静 / 标准 / 浓 —— 正文与强调的着色程度 |
|
|
25
|
+
| 面板表面 | 左侧栏(更浅 / 同色 / 更深)、右侧栏(同左栏 / 跟随画布) |
|
|
26
|
+
| 更多选项 | Markdown 强调、滚动条、开关/勾选 |
|
|
45
27
|
|
|
46
|
-
|
|
28
|
+
选择即时生效,存在 `localStorage`;明暗仍由官方「外观」控制,两者独立。
|
|
47
29
|
|
|
48
|
-
|
|
49
|
-
「黑白」选中态 —— 那种情况自愈救不回来,因为连"你想用哪套"都丢了。判据就是**设置页里选中的
|
|
50
|
-
是不是你原来那套**。
|
|
30
|
+
## 安装
|
|
51
31
|
|
|
52
|
-
|
|
32
|
+
从 npm(推荐):
|
|
53
33
|
|
|
54
|
-
|
|
34
|
+
```bash
|
|
35
|
+
# 方式 A:装进 DSH profile
|
|
36
|
+
cd ~/.dsh/profiles/desktop
|
|
37
|
+
pnpm add dsh-theme-palette
|
|
55
38
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
配色与明暗模式独立;切换后立即生效并保存在 localStorage。
|
|
59
|
-
┌────────────┬────────────┐
|
|
60
|
-
│ 缩略图 │ 缩略图 ✓ │ 2×2 卡片:每张是「侧栏 + 画布 + 两行文字 + 强调色」的微缩图
|
|
61
|
-
│ 黑白 无色调 │ 暖砂 米白+棕 │
|
|
62
|
-
└────────────┴────────────┘
|
|
63
|
-
强度 正文与强调的着色程度 [静][标准][浓]
|
|
64
|
-
左侧栏底色 相对会话区的层次 [更浅][同色][更深]
|
|
65
|
-
右侧栏底色 面板底色 [同左栏][跟随画布]
|
|
66
|
-
▸ 更多选项
|
|
39
|
+
# 方式 B:用 DSH 的插件命令
|
|
40
|
+
dsh plugin --profile desktop add dsh-theme-palette
|
|
67
41
|
```
|
|
68
42
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
1. **卡片有缩略图**,而且**跟随明暗模式**(深色下缩略图自动用深色画布/侧栏/强调色 —— 靠
|
|
72
|
-
`body[data-ds-dark-theme]` 切换两组 CSS 变量,不是靠 JS 猜模式);
|
|
73
|
-
2. **段落式行**:左边标题 + 副标题,右边分段控件,中间一条 0.5px 分隔线;
|
|
74
|
-
3. **分段控件**(segmented)替代散落的药丸,选中项是"抬起"的白色/深色片;
|
|
75
|
-
4. 标题右侧有版本徽标;样式表是**独立注入的一条 CSS**(`data-plugin-css=.../settings.css`),
|
|
76
|
-
不再全是内联样式 —— 于是能写 `:hover`、媒体查询(窄屏单列)和 `body[data-ds-dark-theme]` 作用域。
|
|
77
|
-
|
|
78
|
-
### 怎么"看见"它
|
|
79
|
-
|
|
80
|
-
设置页在 App 里,外部浏览器进不去;但组件树可以脱离 React 渲染成静态 HTML:
|
|
43
|
+
从 GitHub Release 的 tarball(npm 不可达时):
|
|
81
44
|
|
|
82
45
|
```bash
|
|
83
|
-
|
|
84
|
-
node tools/shoot-html.mjs --file preview-light.html --out tools/out/settings
|
|
85
|
-
node tools/shoot-html.mjs --file preview-dark.html --out tools/out/settings
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
`preview-settings.mjs` 用生产引擎算 token、用插件真正注入的 `SETTINGS_CSS`,
|
|
89
|
-
再用一个 20 行的树→HTML 渲染器把组件铺开 —— 所以截图就是"设置页长什么样",
|
|
90
|
-
不是另画一版。
|
|
91
|
-
|
|
92
|
-
## 代码块底色(v1.2.0)
|
|
93
|
-
|
|
94
|
-
宿主的代码块底色是 `--dsw-alias-bg-layer-1`,而**浅色模式下 layer-1 就是画布色(都指色阶 00)** ——
|
|
95
|
-
所以代码框和正文底是同一块,只剩一条发丝线。v1.2.0 给它一档独立的"内嵌面板"色:
|
|
96
|
-
|
|
97
|
-
| token | 暖砂 | 与画布 ΔE | 代码文字对比 |
|
|
98
|
-
|---|---|---|---|
|
|
99
|
-
| `--dsh-code-fill`(围栏代码块) | `#eadcc7` / `#3e342d` | **5.52 / 11.05** | 5.75 / 8.04 |
|
|
100
|
-
| `--dsh-code-inline`(行内 `code`) | 更浅一档(色阶 50 打底) | ~5.9 | — |
|
|
101
|
-
|
|
102
|
-
规则同样注入到 `<head>`:
|
|
103
|
-
|
|
104
|
-
```css
|
|
105
|
-
[class*="_markdown_"] .md-code-block{background:var(--dsh-code-fill,inherit)}
|
|
106
|
-
[class*="_markdown_"] :not(pre) > code{background:var(--dsh-code-inline,inherit)}
|
|
46
|
+
pnpm add "https://github.com/zuoyunlai/dsh-theme-palette/releases/download/v1.3.1/dsh-theme-palette-1.3.1.tgz"
|
|
107
47
|
```
|
|
108
48
|
|
|
109
|
-
|
|
110
|
-
**不需要 `!important`**。`:not(pre) > code` 把围栏块里的 `code` 排除掉,只染行内代码。
|
|
111
|
-
|
|
112
|
-
## Markdown 标题与加粗(v1.1.0)
|
|
113
|
-
|
|
114
|
-
宿主的 Markdown 里,标题和正文**同色**(都继承 `label-primary`),只靠字号/字重区分。
|
|
115
|
-
v1.1.0 起把「标题」和「加粗」各染一档配色:
|
|
116
|
-
|
|
117
|
-
| token | 暖砂 | 对比度(画布 / 卡层) |
|
|
118
|
-
|---|---|---|
|
|
119
|
-
| `--dsh-md-heading` | `#42250b`(浅)/ `#fed9bd`(深) | 12.3 / 11.3 |
|
|
120
|
-
| `--dsh-md-strong` | `#2f1b08` / `#ffe2cc` | 14.4 |
|
|
49
|
+
从源码(开发调试):
|
|
121
50
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
规则注入到 `<head>`,用 CSS Modules 的局部名做钩子(`[class*="_markdown_"]`,比整串哈希耐版本):
|
|
127
|
-
|
|
128
|
-
```css
|
|
129
|
-
[class*="_markdown_"] :where(h1,h2,h3,h4,h5,h6){color:var(--dsh-md-heading,inherit)}
|
|
130
|
-
[class*="_markdown_"] strong{color:var(--dsh-md-strong,inherit)}
|
|
51
|
+
```bash
|
|
52
|
+
git clone https://github.com/zuoyunlai/dsh-theme-palette.git
|
|
53
|
+
dsh plugin --profile desktop add "$PWD/dsh-theme-palette"
|
|
131
54
|
```
|
|
132
55
|
|
|
133
|
-
|
|
134
|
-
黑白配色不染(它没有色相可跟)。
|
|
135
|
-
|
|
136
|
-
## 主人气泡(v0.18.0)
|
|
137
|
-
|
|
138
|
-
用户消息的底色是 `--dsw-specific-bubble`,宿主指向 `deepseek-50` —— 也就是「品牌色的极浅底」。
|
|
139
|
-
我的强调色色度比宿主的品牌蓝高得多,浅端直接算出 **`#ffede0`(R 顶满 255)**,在暖砂下看着发粉发红。
|
|
140
|
-
|
|
141
|
-
v0.18.0 改成「强调色按比例混进画布」,气泡是**有色味的浅底**而不是一块彩色:
|
|
142
|
-
|
|
143
|
-
| | 气泡 | 与画布 ΔE | 文字对比 |
|
|
144
|
-
|---|---|---|---|
|
|
145
|
-
| 暖砂 | `#f2e5d1`(浅)/ `#362c24`(深) | 4.2 / 7.9 | 13.53 / 11.89 |
|
|
146
|
-
| 靛蓝 | `#dce5f5` / `#272f40` | 4.9 / 7.8 | 13.29 / 11.62 |
|
|
147
|
-
| 苔绿 | `#dde9dd` / `#2b342b` | 4.6 / 7.5 | 13.39 / 11.37 |
|
|
148
|
-
|
|
149
|
-
混合比例:浅色 11%、深色 13%(`mix(强调色, 画布)`)。ΔE 4–8 足以让气泡读成一块面,
|
|
150
|
-
又不会盖过正文。
|
|
151
|
-
|
|
152
|
-
## 文字着色第二版标定(v0.17.0)
|
|
56
|
+
装完**必须重启 GUI**(运行中的进程仍持旧模块)。
|
|
153
57
|
|
|
154
|
-
|
|
155
|
-
|
|
58
|
+
> 开发时注意:`node_modules/dsh-theme-palette` 是**副本**,改源码后要
|
|
59
|
+
> `rm -rf node_modules/dsh-theme-palette && pnpm install` —— `pnpm add` 对已存在的
|
|
60
|
+
> `file:` 目录不会刷新内容。
|
|
156
61
|
|
|
157
|
-
|
|
158
|
-
|---|---|---|---|---|
|
|
159
|
-
| 中性 | 1 / 0 | `#12110f` | 0 | 17.2 |
|
|
160
|
-
| **跟随(默认)** | 3.0 / +0.055 | **`#201d17`** | **5.5** | 15.3 |
|
|
161
|
-
| 浓一些 | 4.6 / +0.085 | `#28241a` | 8.5 | 14.1 |
|
|
162
|
-
|
|
163
|
-
靛蓝跟随是 `#1b1d23`(ΔE 5.4)、苔绿 `#191f1b`(ΔE 5.6)。
|
|
164
|
-
深色正文同步加深:暖砂 `#f3efe5` → `#f9efd6` → `#feeeca`(ΔE 2.1 / 3.6)。
|
|
165
|
-
|
|
166
|
-
会话条目标题与正文共用 `label-primary`,所以左栏列表跟着一起变 —— 侧栏内对比 14.41(跟随)/ 13.27(浓一些),
|
|
167
|
-
仍远高于 AAA 的 7。**如果想要纯黑**,切「中性」即可。
|
|
168
|
-
|
|
169
|
-
## 注释 / 说明文字(v0.16.0)
|
|
170
|
-
|
|
171
|
-
DSH 里“注释类”文字走的是 `--dsw-alias-label-caption`:宿主浅色指色阶 **400**、深色指 **600**。
|
|
172
|
-
它落在 `mid` 角色上,原来只给 0.006 的色度 —— 等于灰字。v0.16.0 两件事:
|
|
173
|
-
|
|
174
|
-
**① 跟着「文字着色」走(部分强度)**。`mid` 角色(注释 400/600、三级、`label-dimmed` 200)
|
|
175
|
-
乘 `1 + (textScale-1) × 2.0`,并且 `midC` 从 0.006 提到 0.010:
|
|
176
|
-
|
|
177
|
-
| 档位 | 暖砂注释 | ΔE | 靛蓝 / 苔绿注释 |
|
|
178
|
-
|---|---|---|---|
|
|
179
|
-
| 中性 | `#b3b1ad` | 0 | `#afb1b6` / `#aeb3af` |
|
|
180
|
-
| 跟随 | `#b8b1a1` | 1.76 | `#abb2c1` / `#a7b6aa` |
|
|
181
|
-
| 浓一些 | `#bdb194` | 3.61 | `#a5b2cd` / `#9ebaa5` |
|
|
182
|
-
|
|
183
|
-
注释刻意比正文弱一档(正文 跟随 ≈2.8、浓一些 ≈6.4),否则整页都会“彩色化”。
|
|
184
|
-
|
|
185
|
-
**② 修掉深色注释的对比度**。宿主深色注释用 600,而这个步为了「浅色三级文字达标」被求解压暗过,
|
|
186
|
-
在深底上只剩 **3.0:1**。深色这一侧改用 500 → **6.0–6.3:1**;浅色保持宿主原值
|
|
187
|
-
(宿主自己的浅色注释就是 1.95,那是它的低对比设计,要提亮我可以换 500)。
|
|
188
|
-
|
|
189
|
-
## 设置页的两条约定(v0.15.0)
|
|
190
|
-
|
|
191
|
-
**① 选中卡片用 token,不用内联色。** 之前选中项的淡底是「强调色 8% 混**浅色**画布」写成内联样式的,
|
|
192
|
-
深色模式下就变成一张近白卡片,而卡片文字是 `label-primary`(深色下近白)—— 白底白字。
|
|
193
|
-
现在由 token 层给 `--dsh-card-picked` 一对值:
|
|
194
|
-
|
|
195
|
-
| | 选中底色 | 卡片文字对比 |
|
|
196
|
-
|---|---|---|
|
|
197
|
-
| 暖砂 浅 / 深 | `#f3e6d3` / `#3b3028` | 14.55 / 11.17 |
|
|
198
|
-
| 靛蓝 浅 / 深 | `#dde7f6` / `#2a3345` | 14.25 / 11.00 |
|
|
199
|
-
| 苔绿 浅 / 深 | `#deebdf` / `#2f392f` | 14.42 / 10.55 |
|
|
200
|
-
|
|
201
|
-
**② 细项默认折叠。** 配色卡片下面是「▸ 更多选项」;文字着色 / 左侧栏 / 右侧栏 / 滚动条 /
|
|
202
|
-
开关勾选这五行只在展开后出现。所有档位都保留,默认值就是我推荐的那套,不展开也能正常用。
|
|
203
|
-
|
|
204
|
-
## 1.0.0:按设计审计重做的四件事
|
|
205
|
-
|
|
206
|
-
**① 色域安全钳位。** `fromOklch` 现在先判断是否超出 sRGB(线性通道必须落在 [0,1]),
|
|
207
|
-
超了就二分收色度,而不是把通道硬钳到 0/255。此前「暖砂气泡算出 `#ffede0`、R 恒为 255」
|
|
208
|
-
就是这个缺口的症状 —— 颜色会被压成另一个色相。
|
|
209
|
-
|
|
210
|
-
> 顺带更正审计里的一个数字:我第一次测「占色域 %」只判断了负通道(漏了超 1 的情况),
|
|
211
|
-
> 所以报成 3–12%。真实值是 暖砂 62% / 靛蓝 **99%** / 苔绿 26% —— 靛蓝不是"没上色",
|
|
212
|
-
> 而是**顶到高明度的蓝色上限还超了一点**(14.8‰ 请求 vs 14.1‰ 上限)。
|
|
213
|
-
|
|
214
|
-
**② 浅色侧重标定。** 近白端整段下移 0.044(画布 0.968 → 0.955),高明度处色域上限因此抬高
|
|
215
|
-
(蓝色在 L 0.97 只有 14‰、L 0.95 有 24‰);`lightC` 上调到 0.030 / 0.020 / 0.016;
|
|
216
|
-
暖砂浅底色相 88→84、强调 52→60(收敛到 ±20° 内);苔绿 152→162 与暖砂拉开。
|
|
217
|
-
|
|
218
|
-
套间区分度(浅画布 ΔE):暖砂↔苔绿 **2.15 → 3.07**、暖砂↔靛蓝 3.84 → 5.04、靛蓝↔苔绿 2.28 → 2.85。
|
|
219
|
-
|
|
220
|
-
**③ 黑白配色也过引擎。** 它色度全 0(保持宿主原貌),但走 `tuneRamps` 求解:
|
|
221
|
-
三级文字 3.42 → **4.67**、链接 3.91 → **4.63**(都到 AA 了),主按钮顺带压暗到 4.54。
|
|
222
|
-
|
|
223
|
-
**④ 信息架构从 6 行参数改成 3 段。**
|
|
224
|
-
配色卡片 → **强度**(静 / 标准 / 浓)→ **面板表面**(侧栏三档 + 右栏两档)→ **▸ 更多选项**(滚动条、控件)。
|
|
225
|
-
「文字着色」改名为「强度」并升为主控件;旧的「跟随 / 浓一些」是相对量,现在是一档风格。
|
|
226
|
-
|
|
227
|
-
**⑤ 运行时自检。** 应用后回读 `body` 上的 5 个关键 token,写不进去就在设置页显示
|
|
228
|
-
「⚠ 部分 token 未生效」并在控制台告警 —— 宿主改 token 名时不再静默失效。
|
|
229
|
-
|
|
230
|
-
## 挂在哪一层
|
|
231
|
-
|
|
232
|
-
注册 **`settings.section`**(设置侧栏独立一节)。官方内置节顺序 account -10 / general 0 / models 10 /
|
|
233
|
-
plugins 15 / agent-presets 20,本插件 `order: 5`,紧跟「通用」之后。页面自己画标题(`h2` 18px/600),
|
|
234
|
-
与官方 `AgentPresetSection` 一致 —— `settings.section` 只渲染侧栏条目(文字取 `label()`),不渲染内容标题。
|
|
62
|
+
安装后:左下角头像 → 设置 → 左侧「**主题色**」。
|
|
235
63
|
|
|
236
64
|
## 配色怎么算
|
|
237
65
|
|
|
@@ -296,254 +124,11 @@ plugins 15 / agent-presets 20,本插件 `order: 5`,紧跟「通用」之后
|
|
|
296
124
|
|
|
297
125
|
黑白走宿主原值(`#ffffff` / `#151517`),只叠侧栏档位 —— 它没有色调可继承。
|
|
298
126
|
|
|
299
|
-
##
|
|
300
|
-
|
|
301
|
-
强调色由三要素定,设计稿给的是**基准色**,对应色阶中段 `500`:
|
|
302
|
-
|
|
303
|
-
| 套 | 基准色 | rgb | OKLCH(L / C / h) | 白字对比 | 在浅色 `150` 上 |
|
|
304
|
-
|---|---|---|---|---|---|
|
|
305
|
-
| 暖砂 | `#a9683e` | 169, 104, 62 | 0.580 / 0.101 / 52.4° | 4.43 | 3.40 |
|
|
306
|
-
| 靛蓝 | `#3f66a3` | 63, 102, 163 | 0.511 / 0.107 / 259.0° | 5.77 | 4.41 |
|
|
307
|
-
| 苔绿 | `#4f7a42` | 79, 122, 66 | 0.534 / 0.096 / 138.7° | 5.01 | 3.84 |
|
|
308
|
-
|
|
309
|
-
`500` 这一档的明度**被定死在设计值**(`accentL` 直接给 L,不乘 `accentScale`):宿主和本插件
|
|
310
|
-
都拿它当品牌面 —— `--dsw-alias-button-info-fill`、`--dsw-alias-state-business-primary`(焦点环)、
|
|
311
|
-
`label-deep-diving` 的混色基色、以及设置页每张卡片的预览色。所以它必须是设计稿那个数,
|
|
312
|
-
不能被求解器按承载面改写。
|
|
313
|
-
|
|
314
|
-
用 `accentScale` 也能把 500 压到设计明度,但那会连带把 `deepseek-50/100/200`(宿主的选中态软底)
|
|
315
|
-
整条压暗 13%,软底就不软了 —— 这是 `accentL` 单独存在的理由。
|
|
316
|
-
|
|
317
|
-
**但基准色不能当正文链接**(上表最后一列):暖砂 3.40、苔绿 3.84 都低于 AA 4.62,靛蓝 4.41 也压线。
|
|
318
|
-
链接是当文字用的,所以 `--dsw-alias-link` 由基准色**派生**:同色相、同色度、明度往远处收到达标
|
|
319
|
-
(最多 0.13,与其它求解同一上限)。
|
|
320
|
-
|
|
321
|
-
| 套 | 链接(浅) | 对 `150` | 链接(深) | 对 `800` |
|
|
322
|
-
|---|---|---|---|---|
|
|
323
|
-
| 暖砂 | `#915227` | 4.68 | `#c8a28b` | 4.70 |
|
|
324
|
-
| 靛蓝 | `#3c629f` | 4.67 | `#95acd0` | 4.64 |
|
|
325
|
-
| 苔绿 | `#436d36` | 4.63 | `#9cb695` | 4.64 |
|
|
326
|
-
|
|
327
|
-
这是本插件唯一一条「不是标准值、而是从标准值派生」的颜色。所以报表里的 `link500` 读的是
|
|
328
|
-
`--dsw-alias-link`,不是 `--dsw-static-deepseek-500` —— 后者是基准色,界面上只当填充/焦点环用。
|
|
329
|
-
|
|
330
|
-
## 暖砂的「夜色」(v0.14.0)
|
|
331
|
-
|
|
332
|
-
暖砂的浅色色相是 **88°(黄)**。同一个色相搬到 L≈0.22 的暗部会读成**橄榄绿** ——
|
|
333
|
-
所以暗色模式看着“发绿、和米白不搭”。这不是彩度问题,是**色相在低明度下的读法问题**。
|
|
334
|
-
|
|
335
|
-
v0.14.0 起每套配色可以单独给「夜相」(`darkHue`):暖砂深色层用 **60°(橙棕)**,
|
|
336
|
-
浅色侧仍是 88°(米白);深端的 neutral(深色模式滚动条)也跟同一夜色相,避免一半棕一半橄榄。
|
|
337
|
-
|
|
338
|
-
| | 浅色画布 | 深色画布 | 层 2 | 层 3 |
|
|
339
|
-
|---|---|---|---|---|
|
|
340
|
-
| 改前 | `#fbf4e3` h88 | `#1e1b14` **h88(橄榄)** | `#36332b` h90 | `#403c35` h82 |
|
|
341
|
-
| 改后 | `#fbf4e3` h88 | `#201a14` **h62(咖啡)** | `#38312c` h58 | `#423b36` h58 |
|
|
342
|
-
|
|
343
|
-
靛蓝(266°)与苔绿(152°)在暗部本来就读得对,未改。
|
|
344
|
-
|
|
345
|
-
## 深色模式
|
|
346
|
-
|
|
347
|
-
深色这一侧是单独调过的,四件事:
|
|
348
|
-
|
|
349
|
-
1. **层与底错开明度**(`darkLift` 0.026 / 0.032 / 0.042):让三套在深色下分得开,
|
|
350
|
-
同时给每套一个可辨的「夜色」(暖砂更深、苔绿更亮)。
|
|
351
|
-
2. **色度按色相归一化**(`darkC` 0.014 / 0.028 / 0.015):落在各自可用色域的 30% / 19% / 24%。
|
|
352
|
-
3. **层内色度恒定**(`ROLE` 深色权重 1.0 起):卡片与模块不再比画布灰,
|
|
353
|
-
层间只差明度(ΔE 5.9 / 3.9 / 3.7),像「同一材质的不同高度」。
|
|
354
|
-
4. **正文单独一条色度**(`paperC` 0.014 / 0.009 / 0.0125):近白但不透亮,
|
|
355
|
-
且不会顶到 8-bit 天花板(L 0.953 处蓝的可用色度只有 0.0235)。
|
|
356
|
-
|
|
357
|
-
正文对比度 14.40–14.98(宿主 17.45,提亮底色必然的代价,仍是 AAA 的两倍)。
|
|
358
|
-
深色下正文一律 ≥ 8.95(在 `800` 面上),三级 ≥ 4.79,链接 ≥ 4.65。
|
|
359
|
-
|
|
360
|
-
## 区块底色:左侧栏
|
|
361
|
-
|
|
362
|
-
`--dsw-specific-sidebar-fill` 内置是 `bluish-50/-900`,与画布几乎同色,左栏和会话区看不出边界。
|
|
363
|
-
本插件把它解耦,三档(默认「更深」):
|
|
364
|
-
|
|
365
|
-
| 档位 | 浅色:画布↔侧栏 / 悬停 / 选中 | 深色:画布↔侧栏 / 悬停 / 选中 |
|
|
366
|
-
|---|---|---|
|
|
367
|
-
| 更浅 | 1.74–2.13 / 0.30–0.59 ⚠ / 0.90 | **4.66–5.05** / 2.85–3.08 / 5.94–6.03 |
|
|
368
|
-
| 同色 | 0 / 2.40 / 4.83 | 0 / 2.93–3.00 / 5.86–6.05 |
|
|
369
|
-
| **更深(默认)** | 2.06–2.10 / 2.42 / 4.85 | **4.03–4.30** / 2.97–3.12 / 5.99–6.09 |
|
|
370
|
-
|
|
371
|
-
深色侧原来沿用浅色步长(×0.6),画布↔侧栏只有 ΔE 1.9–2.3 —— 正好卡在 JND 上,于是「左栏和中栏
|
|
372
|
-
看不出界线」。v0.13.0 起深色模式用**独立的 `darkLift`**(0.048 / 0 / −0.042),三套配色在深色下都到
|
|
373
|
-
ΔE 4 以上;侧栏内正文对比 12.48–16.40,仍满足 AAA。
|
|
374
|
-
|
|
375
|
-
ΔE 为 OKLab 欧氏距离 ×100,并排大色块的 JND ≈ 2。
|
|
376
|
-
|
|
377
|
-
**默认给「更深」是因为几何**:侧栏在画布之上时,悬停/选中只能往下走,两档就会穿过画布
|
|
378
|
-
(选中项像在页面里挖了个洞)。「更浅」仍保留在第一档,但它离纯白的余量太小 ——
|
|
379
|
-
悬停只能压到 ΔE 0.3–0.59,几乎看不出,所以那条路径加了护栏:步进自动收缩,宁可浅也不穿层。
|
|
380
|
-
|
|
381
|
-
深色侧的步长与浅色**解耦**(见上表 `darkLift`),不再按比例缩:
|
|
382
|
-
旧写法把 `-0.020×0.6` 夹成 `-0.004`,深色导轨与画布只剩 ΔE 0.49 —— 边界直接消失,
|
|
383
|
-
而同一档在浅色侧是 2.10。现在两侧都是 1.9–2.1,同一个档位在明暗两模式下强度一致。
|
|
384
|
-
|
|
385
|
-
## 文字着色(v0.8.0)
|
|
386
|
-
|
|
387
|
-
正文原来只给 0.004 的色度(近中性),视觉上就是「黑字 / 白字」。现在有第三行「文字着色」,
|
|
388
|
-
三档按倍率作用于**正文色度**(浅色 `textC` / 深色 `paperC`),底色不动,对比度仍由求解器兜底:
|
|
389
|
-
|
|
390
|
-
| 档位 | 倍率(浅 / 深) | 暖砂正文 | 暖砂深色正文 | 对比度 |
|
|
391
|
-
|---|---|---|---|---|
|
|
392
|
-
| 中性 | 1 / 1 | `#12110f` | `#f3efe5` | 17.21 / 14.97 |
|
|
393
|
-
| **跟随(默认)** | 1.8 / 1.5 | `#12110d` | `#f5efe0` | 17.23 / 14.98 |
|
|
394
|
-
| 浓一些 | 2.6 / 2.2 | `#13110c` | `#f8efd9` | 17.20 / 15.01 |
|
|
395
|
-
|
|
396
|
-
靛蓝的「浓一些」深正文是 `#e9effd`(冷白透蓝)、苔绿是 `#e3f5e6`(灰绿白)。
|
|
397
|
-
三档在承诺面上的对比度全部不变(三级 4.63–4.68、深正文 14.40–15.01),
|
|
398
|
-
**加的是色味不是明度**,所以不会牺牲可读性。
|
|
399
|
-
|
|
400
|
-
**深色侧三档是「温度」而不是「强度」**:近白处的色度台阶受 sRGB 上限约束(L 0.953 时蓝最多
|
|
401
|
-
0.0235、黄 0.038),三档之间的 ΔE 只有 0.4–1.0,切换时是"细看才分得出"的差别。
|
|
402
|
-
`paperC` 就是按这个约束定的:暖砂 0.014(跟随 36% 可用色域)、靛蓝 0.009(60%)、
|
|
403
|
-
苔绿 0.0125(23%),三套的「浓一些」都还在色域内、不会被 8-bit 夹取。
|
|
404
|
-
早期版本 `paperC` 给到 0.015–0.016,靛蓝的中性档就已经吃掉 66% 色域、「浓一些」请求 0.033
|
|
405
|
-
实得 0.0241 —— 第三档等于不存在。
|
|
406
|
-
|
|
407
|
-
次级与三级文字跟着同一档位走,但它们的色度基数更低(`midC 0.006`),所以仍是「带一点味的灰」,
|
|
408
|
-
不会变成彩色字 —— 正文的层级靠明度建立,不靠饱和度。
|
|
409
|
-
|
|
410
|
-
## 右侧栏可以跟左栏同色(v0.9.0)
|
|
411
|
-
|
|
412
|
-
宿主的三栏布局里,左右是不对称的:
|
|
413
|
-
|
|
414
|
-
| 列 | 背景 |
|
|
415
|
-
|---|---|
|
|
416
|
-
| 左栏 `.sidebarCol` | `var(--dsw-specific-sidebar-fill)` |
|
|
417
|
-
| 中栏 `.centerCol` / 整框 `.frame` | `var(--dsw-alias-bg-base)` |
|
|
418
|
-
| **右栏 `.rightbarCol`** | **没有背景**,露出的是 frame 的 `bg-base` = 会话区画布色 |
|
|
419
|
-
|
|
420
|
-
所以右栏永远和中间一样,v0.9.0 起设置页多一行「右侧栏底色:**同左栏** / 跟随画布」(默认同左栏):
|
|
421
|
-
|
|
422
|
-
```css
|
|
423
|
-
/* 插件注入到 <head>,用官方同一套 data-plugin-css 标记 */
|
|
424
|
-
[data-rightbar-col]{background:var(--dsh-rightbar-fill,var(--dsw-alias-bg-base))}
|
|
425
|
-
[data-rightbar-fullscreen] [data-rightbar-col]{background:var(--dsw-alias-bg-base)}
|
|
426
|
-
```
|
|
427
|
-
|
|
428
|
-
- 钩子是 `data-rightbar-col` —— ui-layout 里 `RightbarColumn` 上的**语义属性**,不是哈希类名,
|
|
429
|
-
宿主升级时不会跟着变;
|
|
430
|
-
- 颜色不经硬编码:token 层只给一个 `--dsh-rightbar-fill`,值是 `var(--dsw-specific-sidebar-fill)`
|
|
431
|
-
或 `var(--dsw-alias-bg-base)`,所以它会自动跟着「左侧栏底色」三档一起变;
|
|
432
|
-
- 全屏右栏时退回画布色 —— 那时右栏就是整块内容区,染成侧栏色会像只剩一条侧栏。
|
|
433
|
-
|
|
434
|
-
## 滚动条等中性组件(v0.10.0)
|
|
435
|
-
|
|
436
|
-
宿主的四条滚动条 token 全指向 `neutral` 色阶:
|
|
437
|
-
|
|
438
|
-
| token | 浅色 | 深色 |
|
|
439
|
-
|---|---|---|
|
|
440
|
-
| `--dsw-alias-scrollbar-bg-l1 / l2` | `neutral-200` | `neutral-700 / 600` |
|
|
441
|
-
| `--dsw-alias-scrollbar-hover-l1 / l2` | `neutral-300` | `neutral-600 / 550` |
|
|
442
|
-
|
|
443
|
-
我本来就在染那条色阶,但它的色度只有 0.006 —— 肉眼看仍是灰。所以 v0.10.0 起设置页多一行
|
|
444
|
-
「**滚动条:中性 / 跟随 / 强调**」(默认跟随),**只抬色度、明度完全沿用宿主**:
|
|
445
|
-
|
|
446
|
-
| 档位 | 暖砂(浅 / 深) |
|
|
447
|
-
|---|---|
|
|
448
|
-
| 中性 | 不覆盖,走宿主中性色阶 |
|
|
449
|
-
| 跟随 | `#e2dac8` / `#423c2d`(配色色相,色度 0.026) |
|
|
450
|
-
| 强调 | `#f9d1ba` / `#533420`(强调色色相,色度 0.055) |
|
|
451
|
-
|
|
452
|
-
因为明度没动,滚动条与背景的明暗关系不变,不会出现"滚动条比内容还抢眼"。
|
|
453
|
-
|
|
454
|
-
黑白配色没有色相可跟随,那一行的说明文字会自己变成「当前是黑白配色,没有色相可跟随」。
|
|
455
|
-
|
|
456
|
-
**本来就跟随配色的中性组件**:边框(用色阶两端的墨/纸做 alpha)、分隔线、骨架屏、菜单表面、
|
|
457
|
-
`interactive-bg-*` 悬停层、`bg-document-selection`(选择高亮)、`markdown-code-segment-*`。
|
|
458
|
-
**故意不跟**:遮罩 `bg-mask-*`(保持中性黑)、代码 diff 的红绿、`state-error/warn` 语义色。
|
|
459
|
-
|
|
460
|
-
## 对话条目 / 正文的文字着色(v0.12.0 重新标定)
|
|
461
|
-
|
|
462
|
-
左栏的**会话条目**(标题、描述、时间戳)与正文用的是同一组 token ——
|
|
463
|
-
`label-primary` / `-secondary` / `-tertiary` → 色阶 `1000 / 700 / 600`(深色 `50 / 300 / 400`),
|
|
464
|
-
所以「文字着色」那一行同时管它们,不存在“正文变了、条目没变”。
|
|
465
|
-
|
|
466
|
-
v0.8.0 那版三档**实际是失效的**:实测 ΔE 只有 0.35–1.66,而并排色块的 JND ≈ 2 —— 看不见。
|
|
467
|
-
原因是物理限制:浅色模式正文落在近黑区(OKLab L≈0.19),那里 sRGB 色域极窄,
|
|
468
|
-
只加色度到 ΔE 1.6 就顶到 8-bit 量化上限。
|
|
469
|
-
|
|
470
|
-
v0.12.0 因此给文字着色加了**明度**这一维(`textLift`),把正文从近黑抬到能显出颜色的位置:
|
|
471
|
-
|
|
472
|
-
| 档位 | textScale / paperScale / textLift | 标题 ΔE(暖砂 / 靛蓝 / 苔绿) | 正文对比度 |
|
|
473
|
-
|---|---|---|---|
|
|
474
|
-
| 中性 | 1 / 1 / 0 | 0 / 0 / 0 | 17.2–17.3 |
|
|
475
|
-
| **跟随(默认)** | 2.2 / 1.8 / +0.030 | **2.77 / 3.15 / 3.25** | 16.2–16.3 |
|
|
476
|
-
| 浓一些 | 3.6 / 3.0 / +0.065 | **6.41 / 6.68 / 6.79** | 14.9–16.3 |
|
|
477
|
-
|
|
478
|
-
落色(暖砂):中性 `#12110f` → 跟随 `#191713` → 浓一些 `#231f18`;
|
|
479
|
-
深色正文 `#f3efe5` → `#f6efdd` → `#fbeed0`。次级与三级文字仍比标题淡一档 ——
|
|
480
|
-
层级靠明度建立,着色只做「温度」,不把描述行也染色。
|
|
481
|
-
|
|
482
|
-
MIN_MAIN 从 15.5 放宽到 12:给“带色正文”留出明度空间,仍远高于 AAA 的 7:1。
|
|
483
|
-
|
|
484
|
-
## 开关 / 勾选 / 单选(v0.11.0)
|
|
485
|
-
|
|
486
|
-
宿主把这些控件全部压在 **`--dsw-alias-brand-primary`** 上,而它是 `bluish-1000 / 50` ——
|
|
487
|
-
也就是近黑 / 近白:
|
|
488
|
-
|
|
489
|
-
```css
|
|
490
|
-
._switch[aria-checked=true]{background:var(--dsw-alias-brand-primary)}
|
|
491
|
-
.cardCheckbox input:checked+.indicator{border-color:var(--dsw-alias-brand-primary);background:var(--dsw-alias-brand-primary)}
|
|
492
|
-
.registryOption input[type=radio]{accent-color:var(--dsw-alias-brand-primary)} /* 原生 radio/checkbox */
|
|
493
|
-
.primary{background:var(--dsw-alias-brand-primary)} /* 插件页主按钮 */
|
|
494
|
-
```
|
|
495
|
-
|
|
496
|
-
所以开态一直是「黑白拨杆」,跟配色无关。这个 token 共 13 处引用,覆盖开关、复选框、单选
|
|
497
|
-
(含原生 `accent-color`)、插件页 `.primary` 按钮、两处动作文本与表单焦点边 —— 一个支点全带过来。
|
|
498
|
-
|
|
499
|
-
设置页新增一行「**开关 / 勾选:主题色 / 黑白**」(默认主题色)。改的只有这个 token:
|
|
500
|
-
|
|
501
|
-
| | 浅色 | 深色 | 对画布(非文本要求 3:1) |
|
|
502
|
-
|---|---|---|---|
|
|
503
|
-
| 暖砂 | `#a9683e` | `#c8a28b` | 4.04 / 7.36 |
|
|
504
|
-
| 靛蓝 | `#3f66a3` | `#95acd0` | 5.27 / 7.37 |
|
|
505
|
-
| 苔绿 | `#4f7a42` | `#9cb695` | 4.58 / 7.47 |
|
|
506
|
-
|
|
507
|
-
**按钮本来就跟**:`button-info-fill`(信息按钮)= 强调色,`button-primary/-ghost/-floating`、
|
|
508
|
-
`button-elevated/contrast`、`button-tool-bar-*` 全部走色阶或已被覆盖。
|
|
509
|
-
|
|
510
|
-
## 交互态
|
|
511
|
-
|
|
512
|
-
内置的交互态是蓝灰墨(`#263148`)与冷灰写死的,配色一换就露馅。已按配色重算,
|
|
513
|
-
alpha **浅色与内置一致、深色压到 0.6 倍**(见下):
|
|
514
|
-
|
|
515
|
-
| token | 内置 | 暖砂(浅 / 深) |
|
|
516
|
-
|---|---|---|
|
|
517
|
-
| `interactive-bg-hover` | `#2631480f` | `#12110d0f` / `#f5efe00d` |
|
|
518
|
-
| `interactive-bg-active` | `#2631481a` | `#12110d1a` / `#f5efe017` |
|
|
519
|
-
| `interactive-bg-hover-accent` | 无(自定) | `#12110d24` / `#f5efe024` |
|
|
520
|
-
| `menu-surface-fill` | `#f8f9fa94` / `#43454a73` | `#f5efe094` / `#46454173` |
|
|
521
|
-
| `button-tool-bar-hover` | `#54555799` | `#57555199` |
|
|
522
|
-
|
|
523
|
-
**为什么深色 alpha 要压**:深色叠的是近白纸色,8% 的纸色在 L 0.22 上抬起的明度,约等于 6% 的墨色
|
|
524
|
-
在 L 0.93 上压下的两倍。旧值(`0.08 / 0.14 / 0.24`)实测深色 hover / active / accent
|
|
525
|
-
ΔE `7.05 / 12.19 / 20.08`,是浅色(`3.92 / 6.76 / 9.51`)的 1.8–2.1 倍 —— 深色下悬停一行会「闪」,
|
|
526
|
-
按下像换了一块面。收到 `0.05 / 0.09 / 0.14` 后是 `4.6 / 7.9 / 12.2`,两个模式的手感对齐。
|
|
527
|
-
|
|
528
|
-
本来就跟(官方是 `var()` 引用):`interactive-bg-hover-solid`、`button-ghost-active-*`、
|
|
529
|
-
`button-primary-hover`、滚动条、`markdown-code-segment-*`、`bg-document-selection`、`state-business-*`(焦点环)。
|
|
530
|
-
不跟的:`interactive-bg-hover-danger`(红)、`bg-mask-*`(遮罩中性黑)、代码 diff 红绿。
|
|
531
|
-
|
|
532
|
-
## 为什么不用「注册新主题」
|
|
533
|
-
|
|
534
|
-
`ctx.theme.register()` 注册的是**一个 colorScheme 固定的主题**,一套配色只能一个 id;要做
|
|
535
|
-
「同一套配色各自适配明暗」就得注册两个 id + 自己盯 `prefers-color-scheme` 反复 `setTheme()`,
|
|
536
|
-
还会撞三个官方约束(自定义 id 不持久化、`adopt()` 回灌覆盖、dispose 生效中的主题会重置 preference)。
|
|
537
|
-
所以用更弱的 `ctx.theme.overrideTokens(source, tokens)`:明暗归官方「外观」,插件只换色。
|
|
538
|
-
|
|
539
|
-
## 安装
|
|
540
|
-
|
|
541
|
-
```
|
|
542
|
-
dsh plugin --profile desktop add "E:\Documents\deepseek-harness\default-workspace\dsh-theme-palette"
|
|
543
|
-
```
|
|
127
|
+
## 挂在哪一层
|
|
544
128
|
|
|
545
|
-
|
|
546
|
-
|
|
129
|
+
注册 **`settings.section`**(设置侧栏独立一节)。官方内置节顺序 account -10 / general 0 / models 10 /
|
|
130
|
+
plugins 15 / agent-presets 20,本插件 `order: 5`,紧跟「通用」之后。页面自己画标题(`h2` 18px/600),
|
|
131
|
+
与官方 `AgentPresetSection` 一致 —— `settings.section` 只渲染侧栏条目(文字取 `label()`),不渲染内容标题。
|
|
547
132
|
|
|
548
133
|
## 结构
|
|
549
134
|
|
|
@@ -590,110 +175,17 @@ dsh plugin --profile desktop add "E:\Documents\deepseek-harness\default-workspac
|
|
|
590
175
|
`accentScale` 保持 1.0 —— 它是乘性的,压低会把强调色浅端(`deepseek-50/100/200`)整条压塌,
|
|
591
176
|
而这几个正是宿主的「选中态软底」。
|
|
592
177
|
|
|
593
|
-
##
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
**0.8.1**(深色专项审计后)
|
|
606
|
-
- `ROLE` 深色权重拉平(`800/850` 0.6/0.75 → 1.0,`875` 0.85 → 0.95)—— 卡片/模块不再比画布灰 30–45%,三套在深色层上的区分度从 ΔE 1.02 回到 2.05
|
|
607
|
-
- `darkC` 按色相归一化:暖砂 0.016→0.014、靛蓝 0.017→0.028、苔绿不动;三套占可用色域 30/19/24%(原 35/11/24%,暖砂发脏、靛蓝发灰)
|
|
608
|
-
- `darkLift` 三套错开 0.026 / 0.032 / 0.042(原统一 0.034)—— 暖砂↔苔绿 850 层 ΔE 1.15 → 2.05
|
|
609
|
-
- `paperC` 下调 0.014 / 0.009 / 0.0125 —— 靛蓝不再撞 8-bit 天花板(原「浓一些」请求 0.033 实得 0.0241)
|
|
610
|
-
- 深色交互 alpha 0.08/0.14/0.24 → 0.05/0.09/0.14 —— 深色悬停强度从浅色的 1.8–2.1 倍回到 1.2–1.3 倍
|
|
611
|
-
- 侧栏深色放开下沉阻尼 —— 深色导轨边界 ΔE 0.49 → 1.86–2.10,与浅色同档对齐
|
|
612
|
-
- 苔绿强调 `155°→165°` —— 与底色(h≈152)从 2° 拉开到 13°,链接不再只靠明度识别
|
|
613
|
-
- 深色对比度:正文 14.40–14.98、三级 4.79 起、链接 4.65 起(0 处低于下限)
|
|
614
|
-
|
|
615
|
-
**1.3.1**
|
|
616
|
-
- 自愈:override 层被宿主丢掉时(插件 fiber 重载等)自动重放,设置页显示恢复次数
|
|
617
|
-
- 触发点:visibilitychange / focus / pageshow / theme/change / 4s 定时;健康时零写入
|
|
618
|
-
|
|
619
|
-
**1.3.0**
|
|
620
|
-
- 设置页重排:2×2 缩略图卡片(随明暗切换)+ 段落式设置行 + 分段控件 + 版本徽标
|
|
621
|
-
- 样式从内联改为独立注入的 `settings.css`(支持 hover / 窄屏 / `body[data-ds-dark-theme]`)
|
|
622
|
-
- 新增 `tools/preview-settings.mjs` + `tools/shoot-html.mjs`:不打开 App 也能截设置页
|
|
623
|
-
|
|
624
|
-
**1.2.0**
|
|
625
|
-
- 代码块底色独立成 `--dsh-code-fill`:与画布 ΔE 5.5(浅)/ 11.0(深),原来浅色下同色
|
|
626
|
-
- 行内代码用更浅的 `--dsh-code-inline`;两者都不需要 `!important`
|
|
627
|
-
|
|
628
|
-
**1.1.0**
|
|
629
|
-
- Markdown 标题 / 加粗用「正文色 + 强调色相」染色(标题 12.3、加粗 14.4,均远高于 AA)
|
|
630
|
-
- 「更多选项」加一档 Markdown 强调开关;黑白配色不染
|
|
631
|
-
|
|
632
|
-
**1.0.0**
|
|
633
|
-
- `fromOklch` 加色域钳位(二分收色度),修「通道顶满 255 → 色相被压歪」
|
|
634
|
-
- 浅色侧重标定:近白端 −0.044、`lightC` 上调、暖砂/苔绿色相收敛,套间最弱一对 ΔE 2.15 → 3.07
|
|
635
|
-
- 黑白配色接入引擎:三级 4.67、链接 4.63、主按钮 4.54(原 3.42 / 3.91 / 4.34)
|
|
636
|
-
- 主按钮 `button-primary-fill` 从宿主红色改为强调色(并压到按钮文字 ≥4.5)
|
|
637
|
-
- 设置页改为「配色 / 强度 / 面板表面 / 更多选项」,运行时 token 自检
|
|
638
|
-
|
|
639
|
-
**0.18.0**
|
|
640
|
-
- 主人气泡 `--dsw-specific-bubble` 改由「强调色 11%(深 13%)混画布」派生:暖砂 `#ffede0` → `#f2e5d1`,不再发粉
|
|
641
|
-
- 气泡与画布 ΔE 4.2–7.9、气泡内文字对比 9.99–13.53
|
|
642
|
-
|
|
643
|
-
**0.17.0**
|
|
644
|
-
- 文字着色第二版标定:跟随 3.0/+0.055(ΔE 2.77 → 5.5)、浓一些 4.6/+0.085(ΔE 8.5)
|
|
645
|
-
- 会话条目标题与正文共用 token,一并变深变暖
|
|
646
|
-
|
|
647
|
-
**0.16.0**
|
|
648
|
-
- 注释文字跟随文字着色:`mid` 角色乘 `1+(textScale-1)×2.0`,`midC` 0.006 → 0.010(注释 ΔE 1.76 / 3.61)
|
|
649
|
-
- 深色注释 `label-caption` 改用色阶 500:对比 3.0 → 6.0–6.3
|
|
650
|
-
|
|
651
|
-
**0.15.0**
|
|
652
|
-
- 修:深色模式下选中卡片是白底白字(内联色混错了浅色画布)→ 改由 `--dsh-card-picked` 按模式给值
|
|
653
|
-
- 设置页细项收进「更多选项」,默认折叠,只留配色卡片
|
|
654
|
-
|
|
655
|
-
**0.14.0**
|
|
656
|
-
- 新增 `darkHue`:暖砂深色层色相 88° → 60°(黄 → 橙棕),修掉暗部「发绿 / 橄榄」
|
|
657
|
-
- 深端 neutral(深色滚动条)跟同一夜色相;浅色侧与另两套未变
|
|
658
|
-
|
|
659
|
-
**0.13.0**
|
|
660
|
-
- 深色侧栏改用独立 `darkLift`(0.048 / 0 / −0.042):与画布 ΔE 从 1.9–2.3 提到 4.03–5.05
|
|
661
|
-
- 侧栏内正文对比 12.48–16.40(仍 AAA)
|
|
662
|
-
|
|
663
|
-
**0.12.0**
|
|
664
|
-
- 文字着色重新标定:加 `textLift`(正文抬 0.030 / 0.065),三档 ΔE 从 0.35–1.66 提到 2.77–6.79
|
|
665
|
-
- 左栏会话条目与正文共用 `label-*`,一并生效
|
|
666
|
-
- MIN_MAIN 15.5 → 12(给带色正文留空间,仍 ≥ 1.7 倍 AAA)
|
|
667
|
-
|
|
668
|
-
**0.11.0**
|
|
669
|
-
- 开关 / 复选框 / 单选 / 插件页主按钮改跟强调色(覆盖 `--dsw-alias-brand-primary`,13 处引用一个支点)
|
|
670
|
-
- 设置页现为六行:配色 · 文字着色 · 左侧栏 · 右侧栏 · 滚动条 · 开关勾选
|
|
671
|
-
|
|
672
|
-
**0.10.0**
|
|
673
|
-
- 滚动条三档着色(中性 / 跟随 / 强调),只抬色度不改明度;黑白配色下该行说明会自述无效
|
|
674
|
-
- 设置页现为五行:配色 · 文字着色 · 左侧栏 · 右侧栏 · 滚动条
|
|
675
|
-
|
|
676
|
-
**0.9.0**
|
|
677
|
-
- 右侧栏可单独上色(默认与左栏同色);注入一条命中 `data-rightbar-col` 的 CSS,颜色走 `--dsh-rightbar-fill`
|
|
678
|
-
- 全屏右栏退回画布色
|
|
679
|
-
|
|
680
|
-
**0.8.1**
|
|
681
|
-
- 深色专项审计落地:`ROLE` 深色权重拉平、`darkC/darkLift/paperC` 按套重调、交互 alpha 回落、侧栏深色档不再阻尼
|
|
682
|
-
- `palette-dev.mjs` 补上遗漏的 `875` 层,并把「设计目标」与「WCAG 线」拆成 `△` / `✗`
|
|
683
|
-
|
|
684
|
-
**0.8.0**- 新增「文字着色」三档(中性 / 跟随 / 浓一些),默认「跟随」;只放大文字色度,不影响对比度
|
|
685
|
-
- 配色重建缓存按(配色, 文字档)分键;设置页新增第三行控件
|
|
686
|
-
|
|
687
|
-
**0.7.0**(UI 设计审计后全面修订)
|
|
688
|
-
- 求解靶点从画布改为真实承载面(`60` / `800` / `150`),上限 0.09 → 0.13 —— 修掉 12 处真实的 AA 违规
|
|
689
|
-
- `accentScale` 三套全部 1.0 —— 强调色浅端恢复四档层次
|
|
690
|
-
- 阈值 15.5 / 6.2 / 4.62;三级与次级重新拉开明度
|
|
691
|
-
- 近白端压缩改等量下移 —— 画布↔卡层 ΔL 从 0.0147 回到 0.026
|
|
692
|
-
- 深色:`darkC` 下调、`darkLift` 上调 —— 底色不再读成深咖,卡片不再脱色
|
|
693
|
-
- 暖砂强调 `55°→68°`(离橙棕脏区)、苔绿 `146°→155°`(绿字可读性)、靛蓝 `276°→262°`(回到品牌蓝)
|
|
694
|
-
- 暖砂/苔绿拉开色相与色度 —— 唯一低于 JND 的一对从 ΔE 1.30 提到 2.15
|
|
695
|
-
- 侧栏步进 0.012 → 0.024/0.030,默认档改「更深」,并给「更浅」加穿层护栏
|
|
696
|
-
- `palette-dev.mjs` 改为加载生产引擎
|
|
178
|
+
## 发版
|
|
179
|
+
|
|
180
|
+
```bash
|
|
181
|
+
node tools/release.mjs --dry # 本地检查:语法 / 工作区 / 打包内容 / 版本是否已存在
|
|
182
|
+
node tools/release.mjs # 真发布(npm 已登录)+ 等 registry 放出 + 校验 latest
|
|
183
|
+
node tools/release.mjs --tag # 发布后再打 tag 并推 main + tag
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
脚本要处理三件容易出错的事:本机 npm 默认源是 npmmirror(**必须显式指官方源**);
|
|
187
|
+
新包名的首次发布会进**暂存审核**(CLI 照打印 `+ pkg@ver`,但 registry 要过几分钟才 200);
|
|
188
|
+
`latest` 不保证自动前移。2026-10-21 实测:提交到放出约 **8 分钟**。
|
|
697
189
|
|
|
698
190
|
## 已知边界
|
|
699
191
|
|