dsh-pixel-ui 1.5.1 → 1.8.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.
Files changed (35) hide show
  1. package/LICENSE +29 -21
  2. package/README.md +99 -22
  3. package/assets/complete-ui/hologram/ATTRIBUTION.md +17 -0
  4. package/assets/complete-ui/hologram/LICENSE.txt +20 -0
  5. package/assets/complete-ui/hologram/button-primary-lock.png +0 -0
  6. package/assets/complete-ui/hologram/button-primary-press.png +0 -0
  7. package/assets/complete-ui/hologram/button-primary.png +0 -0
  8. package/assets/complete-ui/hologram/icon-button.png +0 -0
  9. package/assets/complete-ui/hologram/input.png +0 -0
  10. package/assets/complete-ui/hologram/panel.png +0 -0
  11. package/assets/complete-ui/hologram/scroll-handle.png +0 -0
  12. package/assets/complete-ui/hologram/select-bar.png +0 -0
  13. package/assets/complete-ui/papernote/ATTRIBUTION.md +28 -0
  14. package/assets/complete-ui/papernote/LICENSE.txt +20 -0
  15. package/assets/complete-ui/papernote/button-hover.png +0 -0
  16. package/assets/complete-ui/papernote/button.png +0 -0
  17. package/assets/complete-ui/papernote/cursor.png +0 -0
  18. package/assets/complete-ui/papernote/icon-button.png +0 -0
  19. package/assets/complete-ui/papernote/input.png +0 -0
  20. package/assets/complete-ui/papernote/panel.png +0 -0
  21. package/assets/complete-ui/papernote/popover.png +0 -0
  22. package/assets/complete-ui/pumpkin/ATTRIBUTION.md +29 -0
  23. package/assets/complete-ui/pumpkin/LICENSE.txt +20 -0
  24. package/assets/complete-ui/pumpkin/button-hover.png +0 -0
  25. package/assets/complete-ui/pumpkin/button-press.png +0 -0
  26. package/assets/complete-ui/pumpkin/button.png +0 -0
  27. package/assets/complete-ui/pumpkin/icon-button.png +0 -0
  28. package/assets/complete-ui/pumpkin/input.png +0 -0
  29. package/assets/complete-ui/pumpkin/panel.png +0 -0
  30. package/assets/complete-ui/pumpkin/popover.png +0 -0
  31. package/assets/complete-ui/pumpkin/select.png +0 -0
  32. package/lib/client.js +1585 -7
  33. package/lib/client.js.map +2 -2
  34. package/lib/index.js +172 -167
  35. package/package.json +81 -81
package/LICENSE CHANGED
@@ -1,21 +1,29 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 zhang66633
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2026 zhang66633
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+
23
+ ---
24
+
25
+ Bundled third-party art: `assets/complete-ui/hologram/` contains selected sprites from
26
+ Complete UI Essential Pack v2.4 © Crusenho Agus Hennihuno, licensed under
27
+ CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/). See
28
+ `assets/complete-ui/hologram/LICENSE.txt` and `ATTRIBUTION.md`. Those assets are
29
+ not covered by the MIT license above.
package/README.md CHANGED
@@ -1,15 +1,15 @@
1
1
  <p align="center">
2
- <img src="./assets/cover.jpg" alt="dsh-pixel-ui 四主题角色封面:像素·木屋 / 像素·羊皮纸 / 像素·暖阳 / 像素·终端绿" width="720" />
2
+ <img src="./assets/cover.jpg" alt="dsh-pixel-ui 主题角色封面:像素·木屋 / 像素·羊皮纸 / 像素·暖阳 / 像素·终端绿" width="720" />
3
3
  </p>
4
4
 
5
5
  # 🪵 dsh-pixel-ui
6
6
 
7
- > DeepSeek Harness 像素皮肤(Agent Xi 风格):四个主题一键切换——像素·木屋 / 像素·羊皮纸 / 像素·暖阳 / 像素·终端绿,随时可切回现代默认 UI。
7
+ > DeepSeek Harness 像素皮肤(Agent Xi 风格):七个主题一键切换——像素·木屋 / 像素·羊皮纸 / 像素·暖阳 / 像素·终端绿 / 像素·全息 / 像素·南瓜灯 / 像素·便签本,随时可切回现代默认 UI。
8
8
 
9
9
  ![License: MIT](https://img.shields.io/badge/license-MIT-brightgreen)
10
10
  ![dsh](https://img.shields.io/badge/dsh-0.2.1--rc.3-blue)
11
- ![version](https://img.shields.io/badge/version-1.5.1-F4D03F)
12
- ![themes](https://img.shields.io/badge/themes-4-orange)
11
+ ![version](https://img.shields.io/badge/version-1.8.0-F4D03F)
12
+ ![themes](https://img.shields.io/badge/themes-7-orange)
13
13
  ![contrast](https://img.shields.io/badge/WCAG-AA%20audited-brightgreen)
14
14
 
15
15
  ---
@@ -18,9 +18,11 @@
18
18
 
19
19
  `dsh-pixel-ui` 是一个**皮肤插件**,把 dsh Web GUI 重皮肤成像素 RPG 风:
20
20
 
21
- 1. **四个主题**:像素·木屋(深木 + 金)、像素·羊皮纸(浅色纸面 + 金棕)、像素·暖阳(暖橙木)、像素·终端绿(终端绿字),色板与 Agent Xi 主题系统同源;
22
- 2. **像素质感**:**完全平面**——整像素 2px 描边、平涂色块的一档明度差、2px 棋盘抖动、手绘 SVG 像素图形(对勾/单选点/下拉箭头/光标),全表零 `box-shadow` 与 `text-shadow`;标题/页签/列表用像素字体,正文与代码走 mono,长文不累眼;
23
- 3. **桌面端友好**:内容列宽随视口撑开(`clamp(680px, 64vw - 140px, 1200px)`,窄屏仍是宿主原本的 680px),皮肤选择在 `dsh-app://` 页面上也能恢复。
21
+ 1. **七个主题**:像素·木屋(深木 + 金)、像素·羊皮纸(浅色纸面 + 金棕)、像素·暖阳(暖橙木)、像素·终端绿(终端绿字)、像素·全息(真 PNG 9-slice 深蓝全息框 + 青色描边)、像素·南瓜灯(暗橙藤蔓框 + 暖金)、像素·便签本(浅色活页纸 + 铅笔光标);
22
+ 2. **像素质感**:前四套**完全平面**——整像素 2px 描边、平涂色块的一档明度差、2px 棋盘抖动、手绘 SVG 像素图形(对勾/单选点/下拉箭头/光标),零 `box-shadow` 与 `text-shadow`;后三套是**真素材分支**,使用 Complete UI 素材自带的浮雕边框(CC BY 4.0,见下方授权),全息/南瓜灯/便签本的对话框、菜单、主按钮、输入框、选中行各取不同的 9-slice 策略;
23
+ 3. **宿主表面一起换色**:主题 token 从 17 个扩到 23 个,新增用户气泡、弹层菜单、输入区、选择键、提示底等宿主自绘表面的颜色,气泡/输入区不再留着宿主默认蓝;
24
+ 4. **细节与动感**:所有动效走 `steps()` 阶梯(80/140/220ms),按下 1px 位移、页签下划线逐格生长、思考中闪烁光标、运行中左条呼吸、toast 三帧进入;另有主题化勾/点、代码块终端顶栏、表格斑马纹、吸顶标题底线、滚动条握把、纸面专用深色光标。`prefers-reduced-motion` 下一律关闭;
25
+ 5. **桌面端友好**:内容列宽随视口撑开(`clamp(680px, 64vw - 140px, 1200px)`,窄屏仍是宿主原本的 680px),皮肤选择在 `dsh-app://` 页面上也能恢复;素材在构建期转成 data URI 内联,换素材只需重新 build + 刷新页面,不必重启宿主。
24
26
 
25
27
  **适合谁**:想要像素风 / 星露谷风 / 复古终端外观的 dsh 用户;想给会话截图加一点氛围感的博主和开发者。
26
28
 
@@ -51,9 +53,73 @@
51
53
 
52
54
  <img src="./assets/screenshot-retro.png" alt="像素·终端绿" width="100%" />
53
55
 
54
- > 截图取自 DSH Desktop(1920×1200 @125% 缩放)。截图由插件市场按本仓库根的
56
+ ### 像素·全息 · `pixel-hologram`
57
+
58
+ > 深色 · 深蓝 `#071426` + 青色 `#14DCEE`;对话框/菜单/主按钮/输入框/选中行/滚动条使用 **真实 PNG 9-slice**(Complete UI · Hologram,CC BY 4.0)。
59
+
60
+ - 面板:`panel.png` 96×96 → `border-image-slice:24 fill`;深蓝网格底 + 青色描边;
61
+ - 主按钮:`button-primary.png` 96×32 → `slice:8 20`、`border-width:6px 10px`;hover/press/lock 三态;
62
+ - **图标按钮**:发送/关闭等 `only-child svg` 的主按钮改用 32×32 `Frame_Lite`,不再把 96×32 横条塞进方块;
63
+ - 输入框:`input.png` 32×32 → `slice:10 fill`;选中行:`select-bar.png`;滚动条:`scroll-handle.png`;
64
+ - **Tooltip / Toast 保持扁平薄边**(2px 青色),不再套 10px 面板框——这是木刻版本翻车的直接原因。
65
+
66
+ > 素材:Complete UI Essential Pack v2.4 · `06_Hologram_Theme` by **Crusenho Agus Hennihuno**,CC BY 4.0;
67
+ > 只取 8 张切片,完整署名与许可证在
68
+ > [`assets/complete-ui/hologram/ATTRIBUTION.md`](assets/complete-ui/hologram/ATTRIBUTION.md)。
69
+ > 全息是**第五套**,和南瓜灯/便签本同属真素材分支;前四套仍保持零立体、零阴影。
70
+
71
+ ### 像素·南瓜灯 · `pixel-pumpkin`
72
+
73
+ > 深色 · 近黑 `#170D06` + 南瓜橙 `#FF9E2C` + 暖金 `#FFC85E`;对话框用 96×96 的藤蔓边框,菜单/主按钮/输入框/选中行各用一张 32×32 或 96×32 的切片。
74
+
75
+ - **对话框**:`frame_full.png` 96×96 → `slice:30 fill`;藤蔓边框按 `round` 平铺,南瓜不会被横向拉长;
76
+ - **菜单**:`frame_simple.png` 32×32 → `slice:12`,小浮层不用大藤蔓(避免“门板”);
77
+ - **主按钮**:`button_long1/2/3.png`(96×32,rest/hover/press 三态)→ `slice:6 8 12 8`、`border-width:6px 8px 10px 8px`;
78
+ - **图标按钮**:`button_simple1.png` 32×32 → `slice:4 4 10 4`;发送键不再挤压横条按钮;
79
+ - **输入框 / 选中行**:`text_field.png` / `dropdown.png` 32×32 → `slice:6 fill`;选中行用素材自带的深红底,文字保持奶油色。
80
+
81
+ > 素材:Complete UI Essential Pack v2.4 · `09_Pumpkin_Theme`,CC BY 4.0;
82
+ > 源文件映射与署名在 [`assets/complete-ui/pumpkin/ATTRIBUTION.md`](assets/complete-ui/pumpkin/ATTRIBUTION.md)。
83
+
84
+ ### 像素·便签本 · `pixel-papernote`
85
+
86
+ > 浅色 · 纸面 `#F2E6D2` + 奶油便签 `#FFF9F1` + 深棕 `#8C5A2C`;对话框是一张带装订孔与撕边的活页纸,鼠标指针换成 32×32 铅笔。
87
+
88
+ - **对话框**:`FrameStandard01.png` 96×96 → `slice:12 8 12 18`、`border-image-repeat:stretch round`;左边 18px 是装订孔,按比例纵向平铺;
89
+ - **菜单 / 图标按钮 / 选中行**:`FrameLite01.png` 32×32 → `slice:6 fill`;选中行是一张包住整行的迷你便签;
90
+ - **主按钮**:`Button03/02.png`(96×32 / 64×32)→ 便签条 + 左下折角;文字用深棕而不是宿主默认的奶油色;
91
+ - **输入框**:`Textfield01.png` 64×32 → `slice:4 4 6 4`;**光标**:`CursorPencil01.png`,铅笔贯穿按钮/输入框/正文,热区在笔尖;
92
+ - 便签纸面与页面同色,额外用 2px 墨线(`--pxa-outline`)把“纸”钉出来,避免菜单看起来像悬浮文字。
93
+
94
+ > 素材:Complete UI Essential Pack v2.4 · `11_Papernote_Theme`,CC BY 4.0;
95
+ > 源文件映射与署名在 [`assets/complete-ui/papernote/ATTRIBUTION.md`](assets/complete-ui/papernote/ATTRIBUTION.md)。
96
+
97
+ > 截图取自 DSH Desktop(1920×1200 @125% 缩放),目前覆盖前四套;全息 / 南瓜灯 / 便签本的
98
+ > 实机截图待补拍。截图由插件市场按本仓库根的
55
99
  > [`screenshots.json`](screenshots.json) 读取——换图只推自己的仓库,不必提 PR。
56
100
 
101
+ ## Motion & detail
102
+
103
+ | 层 | 细节 | 动效 |
104
+ | --- | --- | --- |
105
+ | 按钮 | 主按钮主题化实心块 + 2px 描边;hover 叠 2px 棋盘 | 80ms `steps(2)`;按下 1px 位移 |
106
+ | 页签 | 金色下划线,2→3px | 140ms `steps(4)` 的 `scaleX` |
107
+ | 会话 / 项目行 | 选中行 hover 提亮;未选行补 2px 金色左条 | 像素手 cursor 全覆盖(含子元素) |
108
+ | 面板导航(插件/市场…) | hover 用 `--px-wood-mid`,纸面不再和侧栏同色;当前项木色底 + 金左条 | hover 再叠 2px dither |
109
+ | 页脚菜单(设置/反馈/退出) | 菜单项木色底 + 3px 金左条 + dither;危险项保留红条 | 80ms `steps(2)`;`kbd` 只改字体不撑宽 |
110
+ | 设置页左导航 | 对话框内 hover 用 `--px-wood-warm`(避免和面板同色);navList 横向隐藏 | — |
111
+ | 输入 | 2px 金框、方块光标、hover 提亮 | 边框 80ms `steps(2)` |
112
+ | 选择件 | 勾/点按主题换色(纸面用纸白) | 80ms `steps(2)` |
113
+ | 代码块 | 终端顶栏、左侧金色运行条、inline code 底色 | — |
114
+ | 表格 | 斑马纹 + 行 hover 木色 | — |
115
+ | 吸顶标题 | 2px 底线 + 2px 抖动 | — |
116
+ | 思考中 | 宿主 shimmer 改 4 帧,左侧 2px 光标闪烁 | 1.2s `steps(1)` / `steps(4)` |
117
+ | 运行中 | 终端左侧运行条呼吸 | 1.1s `steps(2)` |
118
+ | 状态点 / 转圈 | 方点闪烁;圆形 spinner 改 8 帧旋转 | `steps(8)` |
119
+ | Toast | 2px 框 + 左侧金条 | 220ms `steps(3)` 进入 |
120
+ | 滚动条 | 4×2 像素握把 | hover / active 换色 |
121
+ | 无障碍 | `prefers-reduced-motion` 下一律关闭 | — |
122
+
57
123
  ## Compatibility
58
124
 
59
125
  | 项 | 支持范围 |
@@ -61,10 +127,10 @@
61
127
  | dsh 生态 | `0.1.0-rc.6` ~ `0.2.x`(ThemeService `register`/`setTheme` + `settings.general.item` 槽位;`0.2.1-rc.3` 已按源码逐条核对,并用 0.2.1 真实的 `ThemeRuntime` 跑通注册/恢复/切换契约;见 `docs/dev/迭代记录.md`) |
62
128
  | 兼容声明 | 同时声明 `engines.dsh` 与 `@deepseek-ai/dsh-*` peers:0.2.1 的 app-boot 优先读 `engines.dsh`,dshmarket 的发现页把两者取交集;任一判定器都能过 |
63
129
  | DSH Desktop | 2.0.x(web 兼容模式/高级模式均适用) |
64
- | 模式 | 三深色 + 一浅色(`colorScheme` 按主题声明) |
130
+ | 模式 | 五深色 + 两浅色(`colorScheme` 按主题声明) |
65
131
  | 浏览器 | 现代 Chromium / Firefox(`localStorage` + CSS 变量 + SVG 光标) |
66
132
  | 字体 | fusion-pixel 12px zh_hans(MIT)+ Press Start 2P(OFL),随包分发 |
67
- | 对比度 | 四主题全部通过 WCAG AA(正文 ≥4.5:1、非文本 ≥3:1,`npm run test:contrast` 门禁) |
133
+ | 对比度 | 七主题全部通过 WCAG AA(正文 ≥4.5:1、非文本 ≥3:1,`npm run test:contrast` 门禁) |
68
134
 
69
135
  ## Install / Uninstall
70
136
 
@@ -80,7 +146,7 @@ GitHub Releases(无需 npm,同样开箱即用):
80
146
 
81
147
  ```bash
82
148
  # 下载 Releases 里的 dsh-pixel-ui-<version>.tgz
83
- dsh plugin add ./dsh-pixel-ui-1.5.1.tgz
149
+ dsh plugin add ./dsh-pixel-ui-1.8.0.tgz
84
150
  ```
85
151
 
86
152
  GitHub 源码(构建产物已随仓库提交,无需构建):
@@ -131,50 +197,61 @@ DSH Desktop 默认每次启动随机分配本地 Web 端口,而浏览器 `loca
131
197
 
132
198
  1. 安装后重启 dsh / DSH Desktop;
133
199
  2. 首次加载自动激活默认主题「像素·木屋」;
134
- 3. 设置 → 通用 → **像素主题**,五个按钮一键切换四个皮肤和「现代默认」;
200
+ 3. 设置 → 通用 → **像素主题**,八个按钮一键切换七个皮肤和「现代默认」;
135
201
  4. 选「现代默认」(或外观行选 浅色 / 深色 / 跟随系统)即整体退出皮肤,选择会被记住,下次打开不复活。
136
202
 
137
- 最小可复现示例:安装 → 重启 → 木屋主题上身 → 切换到「像素·羊皮纸」→ 输入框文字清晰可读 → 点「现代默认」→ 页面立即回到现代 UI → 刷新页面仍是现代 UI。
203
+ 最小可复现示例:安装 → 重启 → 木屋主题上身 → 切换到「像素·便签本」→ 对话框变成带装订孔的活页纸 → 输入框文字清晰可读 → 点「现代默认」→ 页面立即回到现代 UI → 刷新页面仍是现代 UI。
138
204
 
139
205
  ## Configuration
140
206
 
141
- - **无配置项**:四个主题的 13+1 个 `--dsw-alias-*` token 定义在 `src/client/index.js` 的 `THEMES`,像素质感样式在 `src/client/pixel.css`;
207
+ - **无配置项**:七个主题的 23 个 `--dsw-*` token 定义在 `src/client/index.js` 的 `THEMES`,像素质感与 9-slice 素材层在 `src/client/pixel.css`;
142
208
  - **默认主题**:`pixel-wood`(仅首次安装时自动激活,之后尊重你的选择);
143
209
  - **持久化**:双层——宿主文件 `$DSH_HOME/storages/dsh-pixel-ui/preference.json`(权威,跨端口/跨浏览器)+ 浏览器 `localStorage` 的 `dsh-pixel-ui:theme`(同 origin 镜像);
144
210
  - 无环境变量、无敏感项。
145
211
 
146
212
  ## Permissions & data
147
213
 
148
- - 宿主进程:**只读**本包内字体文件;在 `$DSH_HOME/storages/dsh-pixel-ui/` 下读写一个主题偏好 JSON(仅注册 `/dsh-pixel-ui/fonts/*` 与 `/dsh-pixel-ui/preference` 两个路由,字体文件名白名单、主题 id 白名单,均无路径穿越);
214
+ - 宿主进程:**只读**本包内字体文件;在 `$DSH_HOME/storages/dsh-pixel-ui/` 下读写一个主题偏好 JSON(只注册 `/dsh-pixel-ui/fonts/*` 与 `/dsh-pixel-ui/preference` 两个路由,字体文件名白名单、主题 id 白名单,均无路径穿越);三套素材主题的 PNG 在构建期已内联进 `lib/client.js`,宿主不再按路径读素材;
149
215
  - 浏览器半边:注册主题 + 注入样式表 + 一个设置行;无网络请求、无遥测、不读凭据,只在 `localStorage` 存一个主题 id。
150
216
 
151
217
  ## Troubleshooting
152
218
 
153
219
  | 现象 | 处理 |
154
220
  | --- | --- |
155
- | 皮肤没生效 | `dsh --profile <name> --dump-config`(DSH Desktop 终端里直接 `dsh --dump-config`)确认 `dsh-pixel-ui` 在树;设置 → 通用 → 像素主题 里选一个主题;重启(node 半边改路由后必须重启,client 半边刷新即可) |
221
+ | 皮肤没生效 | `dsh --profile <name> --dump-config`(DSH Desktop 终端里直接 `dsh --dump-config`)确认 `dsh-pixel-ui` 在树;设置 → 通用 → 像素主题 里选一个主题;node 半边改路由后必须重启,client 半边(含素材)刷新即可 |
156
222
  | 想回现代默认 | 设置 → 通用 → 像素主题 → 点「现代默认」(或外观行选 浅色/深色/跟随系统) |
157
223
  | 主题没记住 | 确认浏览器未禁用 `localStorage`;v1.4.0 起以宿主文件为权威(桌面端经 index 注入下发),检查 `$DSH_HOME/storages/dsh-pixel-ui/preference.json` 是否存在且内容合法 |
158
224
  | 字体没加载 | 浏览器控制台(F12 → Network)看 `/dsh-pixel-ui/fonts/*` 是否 200 |
159
225
  | 偏好路由 404 | 宿主还是旧版 node 半边:重启 DSH Desktop;未重启期间功能自动降级为 localStorage 记忆 |
226
+ | 素材主题显示成纯色块 | 说明浏览器加载的是旧 `lib/client.js`:`npm run build` 后硬刷新;素材已内联,不会再出现 404 |
160
227
  | 回滚 | 从 `dsh.profile.bundles` 移除插件条目并 `pnpm install` —— profile 其余部分不受影响 |
161
228
 
162
229
  ## Development
163
230
 
164
231
  ```bash
165
232
  npm install
166
- npm run build # 构建 lib/client.js(wire 格式,CSS 以文本内联)
167
- npm test # test:host + test:client + test:contrast 三件套
233
+ npm run build # 构建 lib/client.js(wire 格式,CSS 以文本内联,9-slice PNG 内联为 data URI)
234
+ npm test # test:compat + test:host + test:client + test:contrast
168
235
  ```
169
236
 
170
- - `scripts/test-host.mjs`:node 半边(字体白名单 / 偏好路由读写与校验 / dispose)
171
- - `scripts/test-client.mjs`:browser 半边(加载真实 lib/client.js,覆盖注册、恢复矩阵、交互、渲染、dispose)
172
- - `scripts/audit-contrast.mjs`:四主题 WCAG 对比度门禁(改 palette 必跑)
237
+ - `scripts/check-compat.mjs`:`engines.dsh` / dsh peers / dshReleases 的声明门禁(0.2.1-rc.3 严格安装路径)
238
+ - `scripts/asset-inline.mjs`:把 CSS 里的 `url('pxasset:<theme>/<file>.png')` 换成 data URI,并用 `ASSET_DIRS` 白名单校验主题名
239
+ - `scripts/test-host.mjs`:node 半边(字体白名单 / 偏好路由读写与校验 / **确认没有素材路由** / dispose)
240
+ - `scripts/test-client.mjs`:browser 半边(加载真实 lib/client.js,覆盖注册、恢复矩阵、交互、渲染、动效门禁、**三套素材主题的内联 9-slice**、`data-pixel-asset` 开关、dispose)
241
+ - `scripts/audit-contrast.mjs`:七主题 WCAG 对比度门禁(改 palette 必跑;新增用户气泡 / 菜单面 / 输入区三对)
173
242
 
174
- 改动皮肤后重新构建并刷新浏览器即可(link 安装方式下无需重启 dsh;动了 `lib/index.js` 的路由则需重启)。开发文档在 `docs/dev/`(计划 / 迭代 / 踩坑)。欢迎 PR;行为变更请同步更新 README。
243
+ 改动皮肤后重新构建并刷新浏览器即可;**素材已内联,新增素材主题不再需要重启宿主**。开发文档在 `docs/dev/`(计划 / 迭代 / 踩坑)。欢迎 PR;行为变更请同步更新 README。
175
244
 
176
245
  ## License & security
177
246
 
178
247
  [MIT](./LICENSE) © 2026 zhang66633 · 字体:fusion-pixel(MIT)、Press Start 2P(SIL OFL)。
248
+ `pixel-hologram`(8 张)、`pixel-pumpkin`(8 张)、`pixel-papernote`(7 张)的 Complete UI 切片
249
+ © Crusenho Agus Hennihuno,[CC BY 4.0](https://creativecommons.org/licenses/by/4.0/),
250
+ 分别见 [`hologram`](assets/complete-ui/hologram/ATTRIBUTION.md) /
251
+ [`pumpkin`](assets/complete-ui/pumpkin/ATTRIBUTION.md) /
252
+ [`papernote`](assets/complete-ui/papernote/ATTRIBUTION.md) 的 ATTRIBUTION。
253
+
254
+ > 未收录 PixelPocketPhoneUI 的 PNG:该素材包只有 © IndigoLay 与 Unity Asset Store EULA,
255
+ > 没有随包再分发许可。若将来拿到书面许可,可按同一 `pxasset:` 流程接入(见 `docs/dev/踩坑记录.md` #13)。
179
256
 
180
257
  安全问题请通过 GitHub **security advisory** 私下报告,不要发公开 issue。
@@ -0,0 +1,17 @@
1
+ # Complete UI Essential Pack · Hologram theme
2
+
3
+ Selected sprites from **Complete UI Essential Pack v2.4** by
4
+ **Crusenho Agus Hennihuno** (<https://crusenho.itch.io>), used under the
5
+ **Creative Commons Attribution 4.0 International (CC BY 4.0)** license:
6
+ <https://creativecommons.org/licenses/by/4.0/>.
7
+
8
+ The sprites are used unmodified as 9-slice textures (panel, primary button
9
+ states, text field, dropdown bar, scroll handle, icon frame) in the
10
+ `pixel-hologram` theme.
11
+
12
+ - Original pack: Complete UI Essential Pack v2.4
13
+ - Theme: `06_Hologram_Theme`
14
+ - License text: `LICENSE.txt` in this directory.
15
+
16
+ Modifications: none to the images; only CSS border-image slicing/scaling is
17
+ applied at runtime.
@@ -0,0 +1,20 @@
1
+ Attribution 4.0 International (CC BY 4.0)
2
+
3
+ You are free to:
4
+
5
+ Share — copy and redistribute the material in any medium or format for any purpose, even commercially.
6
+
7
+ Adapt — remix, transform, and build upon the material for any purpose, even commercially.
8
+
9
+ The licensor cannot revoke these freedoms as long as you follow the license terms.
10
+
11
+ Under the following terms:
12
+
13
+ Attribution - You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.
14
+
15
+ No additional restrictions - You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits.
16
+
17
+ License Link: https://creativecommons.org/licenses/by/4.0/
18
+
19
+ Licensor Owner: Crusenho Agus Hennihuno
20
+ Licensor Store Link: https://crusenho.itch.io
@@ -0,0 +1,28 @@
1
+ # Complete UI Essential Pack · Papernote theme
2
+
3
+ Selected sprites from **Complete UI Essential Pack v2.4** by
4
+ **Crusenho Agus Hennihuno** (<https://crusenho.itch.io>), used under the
5
+ **Creative Commons Attribution 4.0 International (CC BY 4.0)** license:
6
+ <https://creativecommons.org/licenses/by/4.0/>.
7
+
8
+ The sprites are used unmodified as 9-slice textures in the `pixel-papernote`
9
+ theme. They are inlined into the client bundle as data URIs at build time
10
+ (`scripts/asset-inline.mjs`), so the shipped plugin carries no extra asset
11
+ route.
12
+
13
+ - Original pack: Complete UI Essential Pack v2.4
14
+ - Theme: `11_Papernote_Theme`
15
+ - License text: `LICENSE.txt` in this directory.
16
+
17
+ | Local file | Source sprite | Role |
18
+ | --- | --- | --- |
19
+ | `panel.png` | `UI_Papernote_FrameStandard01.png` | dialog frame (torn note page, punched holes) |
20
+ | `popover.png` | `UI_Papernote_FrameLite01.png` | menu / popover frame |
21
+ | `button.png` | `UI_Papernote_Button03.png` | primary button (rest) |
22
+ | `button-hover.png` | `UI_Papernote_Button02.png` | primary button (hover) |
23
+ | `icon-button.png` | `UI_Papernote_FrameLite01.png` | icon-only primary button |
24
+ | `input.png` | `UI_Papernote_Textfield01.png` | text field |
25
+ | `cursor.png` | `UI_Papernote_CursorPencil01.png` | pencil cursor (hotspot at the tip) |
26
+
27
+ Modifications: none to the images; only CSS border-image slicing/scaling and
28
+ cursor hotspot placement are applied at runtime.
@@ -0,0 +1,20 @@
1
+ Attribution 4.0 International (CC BY 4.0)
2
+
3
+ You are free to:
4
+
5
+ Share — copy and redistribute the material in any medium or format for any purpose, even commercially.
6
+
7
+ Adapt — remix, transform, and build upon the material for any purpose, even commercially.
8
+
9
+ The licensor cannot revoke these freedoms as long as you follow the license terms.
10
+
11
+ Under the following terms:
12
+
13
+ Attribution - You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.
14
+
15
+ No additional restrictions - You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits.
16
+
17
+ License Link: https://creativecommons.org/licenses/by/4.0/
18
+
19
+ Licensor Owner: Crusenho Agus Hennihuno
20
+ Licensor Store Link: https://crusenho.itch.io
@@ -0,0 +1,29 @@
1
+ # Complete UI Essential Pack · Pumpkin theme
2
+
3
+ Selected sprites from **Complete UI Essential Pack v2.4** by
4
+ **Crusenho Agus Hennihuno** (<https://crusenho.itch.io>), used under the
5
+ **Creative Commons Attribution 4.0 International (CC BY 4.0)** license:
6
+ <https://creativecommons.org/licenses/by/4.0/>.
7
+
8
+ The sprites are used unmodified as 9-slice textures in the `pixel-pumpkin`
9
+ theme. They are inlined into the client bundle as data URIs at build time
10
+ (`scripts/asset-inline.mjs`), so the shipped plugin carries no extra asset
11
+ route.
12
+
13
+ - Original pack: Complete UI Essential Pack v2.4
14
+ - Theme: `09_Pumpkin_Theme`
15
+ - License text: `LICENSE.txt` in this directory.
16
+
17
+ | Local file | Source sprite | Role |
18
+ | --- | --- | --- |
19
+ | `panel.png` | `ui_pumpkin_frame_full.png` | dialog frame |
20
+ | `popover.png` | `ui_pumpkin_frame_simple.png` | menu / popover frame |
21
+ | `button.png` | `ui_pumpkin_button_long1.png` | primary button (rest) |
22
+ | `button-hover.png` | `ui_pumpkin_button_long2.png` | primary button (hover) |
23
+ | `button-press.png` | `ui_pumpkin_button_long3.png` | primary button (pressed) |
24
+ | `icon-button.png` | `ui_pumpkin_button_simple1.png` | icon-only primary button |
25
+ | `input.png` | `ui_pumpkin_text_field.png` | text field |
26
+ | `select.png` | `ui_pumpkin_dropdown.png` | selected row / menu item |
27
+
28
+ Modifications: none to the images; only CSS border-image slicing/scaling is
29
+ applied at runtime.
@@ -0,0 +1,20 @@
1
+ Attribution 4.0 International (CC BY 4.0)
2
+
3
+ You are free to:
4
+
5
+ Share — copy and redistribute the material in any medium or format for any purpose, even commercially.
6
+
7
+ Adapt — remix, transform, and build upon the material for any purpose, even commercially.
8
+
9
+ The licensor cannot revoke these freedoms as long as you follow the license terms.
10
+
11
+ Under the following terms:
12
+
13
+ Attribution - You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.
14
+
15
+ No additional restrictions - You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits.
16
+
17
+ License Link: https://creativecommons.org/licenses/by/4.0/
18
+
19
+ Licensor Owner: Crusenho Agus Hennihuno
20
+ Licensor Store Link: https://crusenho.itch.io