dsh-theme-gallery 0.3.0 → 0.4.0

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.
@@ -0,0 +1,20 @@
1
+ {
2
+ "$comment": "纯色/拼色卡片上的 15 个可点击配色方案。它们**不是主题**:不注册进主题服务、不占面板卡片、不进官方「外观」下拉;点按钮时由插件叠一层 token 覆盖层把整屏换掉(见 lib/client.js 的 schemeTokens / syncScheme)。字段只放『人体可判断』的几个色,其余 60 多个 token 由 schemeTokens() 按同一条造色规则派生,这样 15 套不会各写各的、彼此漂移。**所有色值取自「中国传统色库」项目(chinese-colors)**:https://github.com/zerosoul/chinese-colors —— 作者 tristan(GitHub @zerosoul),在线手册 https://colors.ichuantong.cn ,许可 ISC。色名与色值是作者整理的开源成果,本插件只做取色与派生;source 字段记的是该库 src/assets/colors.json 里的『组 + id』。感谢作者 tristan 的整理与开源。",
3
+ "schemes": [
4
+ { "id": "p-xiang-se", "kind": "solid", "label": "缃色", "main": "#F0C239", "ground": "#F2ECDE", "ink": "#312520", "source": "黄 1-9 缃色(浅黄色)" },
5
+ { "id": "p-ju-huang", "kind": "solid", "label": "橘黄", "main": "#FF8936", "ground": "#F2ECDE", "ink": "#312520", "source": "黄 1-5 橘黄(柑橘的黄色)" },
6
+ { "id": "p-tao-hong", "kind": "solid", "label": "桃红", "main": "#F47983", "ground": "#EDD1D8", "ink": "#56004F", "source": "红 0-3 桃红(桃花的颜色)" },
7
+ { "id": "p-hai-tang-hong", "kind": "solid", "label": "海棠红", "main": "#DB5A6B", "ground": "#EDD1D8", "ink": "#56004F", "source": "红 0-4 海棠红(淡紫红色、较桃红色深一些)" },
8
+ { "id": "p-jiang-zi", "kind": "solid", "label": "绛紫", "main": "#8C4356", "ground": "#EDD1D8", "ink": "#56004F", "source": "红 0-9 绛紫(紫中略带红的颜色)" },
9
+ { "id": "p-song-bai-lu", "kind": "solid", "label": "松柏绿", "main": "#057748", "ground": "#E0F0E9", "ink": "#424C50", "source": "绿 2-30 松花绿(松柏叶的墨绿)" },
10
+ { "id": "p-zhu-qing", "kind": "solid", "label": "竹青", "main": "#789262", "ground": "#E0EEE8", "ink": "#424C50", "source": "绿 2-3 竹青(竹子的绿色)" },
11
+ { "id": "p-cang-qing", "kind": "solid", "label": "苍青", "main": "#7397AB", "ground": "#D6ECF0", "ink": "#4A4266", "source": "苍 4-3 苍青" },
12
+ { "id": "p-dai-zi", "kind": "solid", "label": "黛紫", "main": "#574266", "ground": "#E4C6D0", "ink": "#56004F", "source": "蓝 3-12 黛紫(深紫色)" },
13
+ { "id": "p-xuan-qing", "kind": "solid", "label": "玄青", "main": "#3D3B4F", "ground": "#F0F0F4", "ink": "#312520", "source": "黑 7-1 玄青(深黑色)" },
14
+ { "id": "p-shi-liu-jin", "kind": "clash", "label": "石榴金", "main": "#F20C00", "ground": "#F2ECDE", "ink": "#312520", "fill": "#9D2933", "dots": ["#FFFFFF", "#D6ECF0", "#EACD76", "#3DE1AD"], "source": "红 0-5 石榴红 + 金银 8-0 赤金 + 绿 2-14 翡翠色;按钮族用红 0-11 胭脂(白字 7.50:1,而压在石榴红上只有 4.35:1)" },
15
+ { "id": "p-bao-lan-jin", "kind": "clash", "label": "宝蓝·赤金", "main": "#4B5CC4", "ground": "#D6ECF0", "ink": "#4A4266", "dots": ["#F2BE45", "#EACD76", "#D9B611", "#FFFFFF"], "source": "蓝 3-5 宝蓝(多和小面积纯黄色(金色)配合使用)+ 金银 8-0 赤金" },
16
+ { "id": "p-qing-lian-jin", "kind": "clash", "label": "青莲·金玉", "main": "#801DAE", "ground": "#E4C6D0", "ink": "#56004F", "dots": ["#F2BE45", "#FFF143", "#3DE1AD", "#FFFFFF"], "source": "蓝 3-19 青莲(偏蓝的紫色)+ 黄 1-0 鹅黄 + 绿 2-14 翡翠色" },
17
+ { "id": "p-song-hua-tao", "kind": "clash", "label": "松花·桃粉", "main": "#BCE672", "ground": "#F7FBEC", "ink": "#424C50", "dots": ["#C93756", "#057748"], "source": "绿 2-31 松花色(嫩黄绿)+ 红 0-1 樱桃色 + 绿 2-30 松花绿" },
18
+ { "id": "p-wu-jin", "kind": "clash", "label": "藏青·鹅黄", "main": "#2E4E7E", "ground": "#E2E9F2", "ink": "#312520", "dots": ["#F2BE45", "#FFFFFF", "#FFB3A7", "#3DE1AD"], "source": "蓝 8-2 藏青(深蓝)+ 金银 8-0 赤金 + 精白 + 红 0-0 粉红 + 绿 2-14 翡翠色" }
19
+ ]
20
+ }
@@ -2,7 +2,7 @@
2
2
  {
3
3
  "id": "meng-hai-you-yu",
4
4
  "label": "梦海游鱼",
5
- "description": "梦幻海洋,游鱼作伴 —— 复刻自电商新零售系统管理后台的默认主题",
5
+ "description": "梦幻海洋,游鱼作伴 —— 复刻自蜂链商城电商新零售系统管理后台的默认主题",
6
6
  "colorScheme": "light",
7
7
  "tokens": {
8
8
  "--dsw-alias-bg-base": {
@@ -2,7 +2,7 @@
2
2
  {
3
3
  "id": "pei-an-jie-xin",
4
4
  "label": "佩安杰心",
5
- "description": "檀香禅影,自在安顿 —— 复刻自电商新零售系统管理后台同名主题",
5
+ "description": "檀香禅影,自在安顿 —— 复刻自蜂链商城电商新零售系统管理后台同名主题",
6
6
  "colorScheme": "light",
7
7
  "tokens": {
8
8
  "--dsw-alias-bg-base": {
@@ -2,7 +2,7 @@
2
2
  {
3
3
  "id": "shan-qing-ting-cai",
4
4
  "label": "山青婷彩",
5
- "description": "青山叠翠,蜓舞生姿 —— 复刻自电商新零售系统管理后台同名主题",
5
+ "description": "青山叠翠,蜓舞生姿 —— 复刻自蜂链商城电商新零售系统管理后台同名主题",
6
6
  "colorScheme": "light",
7
7
  "tokens": {
8
8
  "--dsw-alias-bg-base": {
@@ -0,0 +1,293 @@
1
+ [
2
+ {
3
+ "id": "shi-liu-jin",
4
+ "label": "纯色/拼色",
5
+ "description": "石榴红撞赤金与翡翠 —— 纯色排 × 拼色排的配色卡:15 个色块铺满卡面,不含侧栏素材",
6
+ "colorScheme": "light",
7
+ "tokens": {
8
+ "--dsw-alias-bg-base": {
9
+ "light": "linear-gradient(to bottom,#FBF7EC 0%,#F2ECDE 55%,#EADFC4 100%)",
10
+ "dark": "linear-gradient(to bottom,#FBF7EC 0%,#F2ECDE 55%,#EADFC4 100%)"
11
+ },
12
+ "--dsw-alias-bg-layer-1": {
13
+ "light": "#F0F0F4",
14
+ "dark": "#F0F0F4"
15
+ },
16
+ "--dsw-alias-bg-layer-2": {
17
+ "light": "#FFFBF0",
18
+ "dark": "#FFFBF0"
19
+ },
20
+ "--dsw-alias-bg-layer-3": {
21
+ "light": "#FFFBF0",
22
+ "dark": "#FFFBF0"
23
+ },
24
+ "--dsw-alias-bg-overlay": {
25
+ "light": "#EEDEB0",
26
+ "dark": "#EEDEB0"
27
+ },
28
+ "--dsw-alias-bg-skeleton": {
29
+ "light": "#D1D9E0",
30
+ "dark": "#D1D9E0"
31
+ },
32
+ "--dsw-alias-bg-module-platform": {
33
+ "light": "#EEDEB0",
34
+ "dark": "#EEDEB0"
35
+ },
36
+ "--dsw-alias-bg-multi-select": {
37
+ "light": "#EEDEB0",
38
+ "dark": "#EEDEB0"
39
+ },
40
+ "--dsw-alias-border-l1": {
41
+ "light": "#9D29330F",
42
+ "dark": "#9D29330F"
43
+ },
44
+ "--dsw-alias-border-l2": {
45
+ "light": "#9D293321",
46
+ "dark": "#9D293321"
47
+ },
48
+ "--dsw-alias-border-l3": {
49
+ "light": "#9D29332E",
50
+ "dark": "#9D29332E"
51
+ },
52
+ "--dsw-alias-border-l4": {
53
+ "light": "#D1D9E080",
54
+ "dark": "#D1D9E080"
55
+ },
56
+ "--dsw-alias-brand-primary": {
57
+ "light": "#9D2933",
58
+ "dark": "#9D2933"
59
+ },
60
+ "--dsw-alias-brand-primary-invert": {
61
+ "light": "#FFFFFF",
62
+ "dark": "#FFFFFF"
63
+ },
64
+ "--dsw-alias-brand-text": {
65
+ "light": "#9D2933",
66
+ "dark": "#9D2933"
67
+ },
68
+ "--dsw-alias-label-primary": {
69
+ "light": "#312520",
70
+ "dark": "#312520"
71
+ },
72
+ "--dsw-alias-label-primary-bluish": {
73
+ "light": "#312520",
74
+ "dark": "#312520"
75
+ },
76
+ "--dsw-alias-label-secondary": {
77
+ "light": "#574266",
78
+ "dark": "#574266"
79
+ },
80
+ "--dsw-alias-label-tertiary": {
81
+ "light": "#75664D",
82
+ "dark": "#75664D"
83
+ },
84
+ "--dsw-alias-label-caption": {
85
+ "light": "#75664D",
86
+ "dark": "#75664D"
87
+ },
88
+ "--dsw-alias-label-dimmed": {
89
+ "light": "#9A8C76",
90
+ "dark": "#9A8C76"
91
+ },
92
+ "--dsw-alias-label-primary-dimmed": {
93
+ "light": "#574266",
94
+ "dark": "#574266"
95
+ },
96
+ "--dsw-alias-label-primary-foreground": {
97
+ "light": "#FFFFFF",
98
+ "dark": "#FFFFFF"
99
+ },
100
+ "--dsw-alias-label-primary-inverted": {
101
+ "light": "#FFFFFF",
102
+ "dark": "#FFFFFF"
103
+ },
104
+ "--dsw-alias-link": {
105
+ "light": "#9D2933",
106
+ "dark": "#9D2933"
107
+ },
108
+ "--dsw-alias-interactive-bg-hover": {
109
+ "light": "#9D293314",
110
+ "dark": "#9D293314"
111
+ },
112
+ "--dsw-alias-interactive-bg-active": {
113
+ "light": "#F20C002E",
114
+ "dark": "#F20C002E"
115
+ },
116
+ "--dsw-alias-interactive-bg-hover-solid": {
117
+ "light": "#EEDEB0",
118
+ "dark": "#EEDEB0"
119
+ },
120
+ "--dsw-alias-interactive-bg-hover-accent": {
121
+ "light": "#F20C003D",
122
+ "dark": "#F20C003D"
123
+ },
124
+ "--dsw-alias-button-primary-fill": {
125
+ "light": "#9D2933",
126
+ "dark": "#9D2933"
127
+ },
128
+ "--dsw-alias-button-primary-hover": {
129
+ "light": "#B33A45",
130
+ "dark": "#B33A45"
131
+ },
132
+ "--dsw-alias-button-primary-dimmed": {
133
+ "light": "#9D293347",
134
+ "dark": "#9D293347"
135
+ },
136
+ "--dsw-alias-button-ghost-active-fill": {
137
+ "light": "#F20C0029",
138
+ "dark": "#F20C0029"
139
+ },
140
+ "--dsw-alias-button-ghost-active-border": {
141
+ "light": "#F20C00",
142
+ "dark": "#F20C00"
143
+ },
144
+ "--dsw-alias-button-ghost-active-hover": {
145
+ "light": "#F20C0047",
146
+ "dark": "#F20C0047"
147
+ },
148
+ "--dsw-alias-button-info-fill": {
149
+ "light": "#574266",
150
+ "dark": "#574266"
151
+ },
152
+ "--dsw-alias-button-info-hover": {
153
+ "light": "#75664D",
154
+ "dark": "#75664D"
155
+ },
156
+ "--dsw-alias-button-elevated-fill": {
157
+ "light": "#FFFBF0",
158
+ "dark": "#FFFBF0"
159
+ },
160
+ "--dsw-alias-button-floating-fill": {
161
+ "light": "#FFFBF0",
162
+ "dark": "#FFFBF0"
163
+ },
164
+ "--dsw-alias-button-floating-hover": {
165
+ "light": "#F7F0E0",
166
+ "dark": "#F7F0E0"
167
+ },
168
+ "--dsw-alias-button-contrast-fill": {
169
+ "light": "#312520",
170
+ "dark": "#312520"
171
+ },
172
+ "--dsw-alias-markdown-code-block": {
173
+ "light": "#F0F0F4",
174
+ "dark": "#F0F0F4"
175
+ },
176
+ "--dsw-alias-markdown-code-block-banner": {
177
+ "light": "#E4E6EC",
178
+ "dark": "#E4E6EC"
179
+ },
180
+ "--dsw-alias-markdown-inline-code": {
181
+ "light": "#EEDEB0",
182
+ "dark": "#EEDEB0"
183
+ },
184
+ "--dsw-alias-markdown-citation": {
185
+ "light": "#EEDEB0",
186
+ "dark": "#EEDEB0"
187
+ },
188
+ "--dsw-alias-markdown-tag": {
189
+ "light": "#EEDEB0",
190
+ "dark": "#EEDEB0"
191
+ },
192
+ "--dsw-alias-markdown-placeholder": {
193
+ "light": "#D1D9E0",
194
+ "dark": "#D1D9E0"
195
+ },
196
+ "--dsw-alias-markdown-code-segment-selected": {
197
+ "light": "#F20C0029",
198
+ "dark": "#F20C0029"
199
+ },
200
+ "--dsw-alias-markdown-code-segment-unselected": {
201
+ "light": "#F0F0F4",
202
+ "dark": "#F0F0F4"
203
+ },
204
+ "--dsw-alias-scrollbar-bg-l1": {
205
+ "light": "#9D293329",
206
+ "dark": "#9D293329"
207
+ },
208
+ "--dsw-alias-scrollbar-bg-l2": {
209
+ "light": "#9D293338",
210
+ "dark": "#9D293338"
211
+ },
212
+ "--dsw-alias-scrollbar-hover-l1": {
213
+ "light": "#9D293352",
214
+ "dark": "#9D293352"
215
+ },
216
+ "--dsw-alias-scrollbar-hover-l2": {
217
+ "light": "#9D293366",
218
+ "dark": "#9D293366"
219
+ },
220
+ "--dsw-alias-tooltip-bg": {
221
+ "light": "#312520",
222
+ "dark": "#312520"
223
+ },
224
+ "--dsw-alias-toast-bg": {
225
+ "light": "#FFFBF0",
226
+ "dark": "#FFFBF0"
227
+ },
228
+ "--dsw-alias-state-error-primary": {
229
+ "light": "#C2352B",
230
+ "dark": "#C2352B"
231
+ },
232
+ "--dsw-alias-state-error-secondary": {
233
+ "light": "#DB5A6B",
234
+ "dark": "#DB5A6B"
235
+ },
236
+ "--dsw-alias-state-success-primary": {
237
+ "light": "#1DA981",
238
+ "dark": "#1DA981"
239
+ },
240
+ "--dsw-alias-state-success-secondary": {
241
+ "light": "#7FE3C0",
242
+ "dark": "#7FE3C0"
243
+ },
244
+ "--dsw-alias-state-success-tertiary": {
245
+ "light": "#D8F5E8",
246
+ "dark": "#D8F5E8"
247
+ },
248
+ "--dsw-alias-state-warn-primary": {
249
+ "light": "#C89B40",
250
+ "dark": "#C89B40"
251
+ },
252
+ "--dsw-alias-state-warn-secondary": {
253
+ "light": "#EACD76",
254
+ "dark": "#EACD76"
255
+ },
256
+ "--dsw-alias-state-warn-tertiary": {
257
+ "light": "#F7EBC8",
258
+ "dark": "#F7EBC8"
259
+ },
260
+ "--dsw-alias-state-warn-label": {
261
+ "light": "#7A5A0E",
262
+ "dark": "#7A5A0E"
263
+ },
264
+ "--dsw-alias-state-business-primary": {
265
+ "light": "#3DE1AD",
266
+ "dark": "#3DE1AD"
267
+ },
268
+ "--dsw-alias-state-business-tertiary": {
269
+ "light": "#A8F0D8",
270
+ "dark": "#A8F0D8"
271
+ },
272
+ "--dsw-specific-sidebar-fill": {
273
+ "light": "linear-gradient(to bottom,#D6ECF0 0%,#E4E6E4 8%,#F2ECDE 18%,#F5E7CE 30%,#EFD6AE 44%,#E5BE86 58%,#D6A45C 72%,#C48F3C 86%,#BA8330 100%)",
274
+ "dark": "linear-gradient(to bottom,#D6ECF0 0%,#E4E6E4 8%,#F2ECDE 18%,#F5E7CE 30%,#EFD6AE 44%,#E5BE86 58%,#D6A45C 72%,#C48F3C 86%,#BA8330 100%)"
275
+ }
276
+ },
277
+ "reading": {
278
+ "colorScheme": "light",
279
+ "bg": "#FFFBF0",
280
+ "alpha": 0.62,
281
+ "blur": 3,
282
+ "maxWidth": 640
283
+ },
284
+ "card": {
285
+ "rows": [
286
+ { "kind": "solid", "schemes": ["p-xiang-se", "p-ju-huang", "p-tao-hong", "p-hai-tang-hong", "p-jiang-zi"] },
287
+ { "kind": "solid", "schemes": ["p-song-bai-lu", "p-zhu-qing", "p-cang-qing", "p-dai-zi", "p-xuan-qing"] },
288
+ { "kind": "clash", "schemes": ["p-shi-liu-jin", "p-bao-lan-jin", "p-qing-lian-jin", "p-song-hua-tao", "p-wu-jin"] }
289
+ ]
290
+ },
291
+ "accent": "#F20C00"
292
+ }
293
+ ]
@@ -2,7 +2,7 @@
2
2
  {
3
3
  "id": "ying-mu-cai-yun",
4
4
  "label": "营慕彩云",
5
- "description": "营幕之下,彩云为伴 —— 复刻自电商新零售系统管理后台同名主题",
5
+ "description": "营幕之下,彩云为伴 —— 复刻自蜂链商城电商新零售系统管理后台同名主题",
6
6
  "colorScheme": "light",
7
7
  "tokens": {
8
8
  "--dsw-alias-bg-base": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-theme-gallery",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "A theme gallery for DeepSeek Harness (DSH): six JSON-defined skins with full-screen coverage and sidebar scenery, plus built-in light/dark cards, switched from the panel under the sidebar's Plugins icon — adding skins needs no code change",
5
5
  "author": "renjie2026 (https://github.com/renjie2026)",
6
6
  "license": "MIT",
@@ -67,6 +67,21 @@
67
67
  "$ref": "#/$defs/cssValue",
68
68
  "description": "The theme's marker colour, used for the states that say WHICH workspace or conversation is active. Taken from the theme's own characteristic colour - the source admin system's design rules forbid introducing a hue that does not already exist in the skin. It is stacked as an overrideTokens layer over --dsw-alias-button-ghost-active-fill/-border/-hover, the family the sidebar entry and the selected conversation row read. Omit it and the theme keeps the base palette's selection colour."
69
69
  },
70
+ "card": {
71
+ "type": "object",
72
+ "additionalProperties": false,
73
+ "required": ["rows"],
74
+ "description": "How this theme's card is drawn in the gallery, for a theme whose card is a PALETTE PICKER rather than one look (the 纯色/撞色 class). Omit it and the card keeps the default single 3-colour strip derived from the theme's own tokens, which is what every scene-carrying skin does. When present, the card draws a grid of CLICKABLE colour-value buttons — each slot names a scheme from lib/palette-schemes.json, and clicking it recolours the whole UI (the schemes are NOT registered themes, so they never appear in the official Appearance list). Such a card prints no `description` body: the slots already fill it, so the field stays a tooltip (asserted by tests/check-card-order.mjs).",
75
+ "properties": {
76
+ "rows": {
77
+ "type": "array",
78
+ "minItems": 2,
79
+ "maxItems": 3,
80
+ "description": "Two or three rows, drawn top to bottom. The LAST row must hold clash schemes and every earlier row must hold solid ones — the user's layout is 5+5+5: two rows of solid options, then the row of clash options. Each row's slots are equal width.",
81
+ "items": { "$ref": "#/$defs/cardRow" }
82
+ }
83
+ }
84
+ },
70
85
  "ambient": {
71
86
  "type": "object",
72
87
  "additionalProperties": false,
@@ -135,6 +150,27 @@
135
150
  }
136
151
  }
137
152
  },
153
+ "cardRow": {
154
+ "type": "object",
155
+ "additionalProperties": false,
156
+ "required": ["kind", "schemes"],
157
+ "description": "One row of the palette picker: equal-width colour-value buttons. `kind` says what each button in THIS row looks like (a flat block, or a band with dots) and must match the kind every referenced scheme declares — drawing a clash scheme as one flat block reads as a colour that is merely off.",
158
+ "properties": {
159
+ "kind": { "enum": ["solid", "clash"] },
160
+ "schemes": {
161
+ "type": "array",
162
+ "minItems": 1,
163
+ "maxItems": 5,
164
+ "description": "Scheme ids from lib/palette-schemes.json. Five is the ceiling the card can still show as five distinct buttons (at the card's 200px minimum width each is ~34px); a sixth would read as a texture. A slot naming a scheme that does not exist draws nothing, and the whole card silently falls back to the default strip — scripts/lib/card-rows.mjs fails the build for that.",
165
+ "items": { "$ref": "#/$defs/schemeId" }
166
+ }
167
+ }
168
+ },
169
+ "schemeId": {
170
+ "type": "string",
171
+ "pattern": "^p-[a-z0-9-]+$",
172
+ "description": "A palette-scheme id, `p-` prefixed so it can never be confused with a registered theme id (the picker's anchor theme is `shi-liu-jin`). The scheme itself lives in lib/palette-schemes.json, which is inlined into the bundle but NOT registered with the theme service — these 15 are colour options, not themes, so they stay out of the official Appearance list and out of the skin count."
173
+ },
138
174
  "modes": {
139
175
  "type": "object",
140
176
  "additionalProperties": false,