{"_id":"@anningui/dsh-client-ui-skin-md3-wallpaper","name":"@anningui/dsh-client-ui-skin-md3-wallpaper","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@anningui/dsh-client-ui-skin-md3-wallpaper","version":"0.1.0","description":"Standalone Material You (MD3) dynamic-color skin for the dsh web GUI: upload any wallpaper, Monet extracts the palette with @material/material-color-utilities, and every UI token, SVG and surface follows","license":"MIT","publishConfig":{"access":"public"},"type":"module","main":"lib/index.js","exports":{".":"./lib/index.js","./client":"./lib/client.js","./package.json":"./package.json"},"scripts":{"build":"tsdown && node scripts/inline-worker.mjs","prepare":"tsdown && node scripts/inline-worker.mjs","watch":"tsdown --watch","test":"vitest run","install:dsh":"node scripts/install.mjs","fmt":"oxfmt","fmt:check":"oxfmt --check"},"dependencies":{"@material/material-color-utilities":"^0.4.0"},"devDependencies":{"@deepseek-ai/cordis":"^4.0.1","@types/node":"^26.2.0","jsdom":"30.0.1","lightningcss":"^1.33.0","oxfmt":"^0.63.0","tsdown":"^0.22.14","vite-tsconfig-paths":"^6.1.1","vitest":"^4.1.10"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":[],"platform":"web"}},"_id":"@anningui/dsh-client-ui-skin-md3-wallpaper@0.1.0","gitHead":"8880f188a9d859a5284b8150dcc180136ec9f8d3","_nodeVersion":"24.5.0","_npmVersion":"11.5.1","dist":{"integrity":"sha512-HBI7/AqdaQYRo1kRiFEmKZesMG2D3PoIcnia5q3+fl8x2OBHjgoXO0X1YFSq7uPq8lbsSk5cAg2euTYXhnb7cA==","shasum":"6d5d8ec1c996f6cda21113ce278507c0724f6f58","tarball":"https://registry.npmjs.org/@anningui/dsh-client-ui-skin-md3-wallpaper/-/dsh-client-ui-skin-md3-wallpaper-0.1.0.tgz","fileCount":13,"unpackedSize":4660486,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCICiZIjkL0vyxACw6xqmM5wyJZHrHPpFrsQnci3NEW29mAiEAzg9Q+syA3LYzsftY9DGNayOYqYIeZmMfiPe9H10UU90="}]},"_npmUser":{"name":"anningui","email":"3533581512@qq.com"},"directories":{},"maintainers":[{"name":"anningui","email":"3533581512@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dsh-client-ui-skin-md3-wallpaper_0.1.0_1787013496447_0.9129575857406456"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-18T00:38:16.333Z","0.1.0":"2026-08-18T00:38:16.691Z","modified":"2026-08-18T00:38:16.910Z"},"maintainers":[{"name":"anningui","email":"3533581512@qq.com"}],"description":"Standalone Material You (MD3) dynamic-color skin for the dsh web GUI: upload any wallpaper, Monet extracts the palette with @material/material-color-utilities, and every UI token, SVG and surface follows","license":"MIT","readme":"# @anningui/dsh-client-ui-skin-md3-wallpaper\n\n<p align=\"center\">\n  <a href=\"./README.md\">English</a> | <span>中文</span> \n</p>\n\n![dark-mode-md3-filter](./preview/dark-filter.png)\n![dark-mode-md3-unified](./preview/dark.png)\n\nMaterial You (MD3) 动态取色皮肤，面向 dsh web GUI，作为**独立项目**存在——不依赖\nmonorepo、皮肤中心注册表或画廊。克隆到任何位置、构建、一条命令安装即可。\n\n上传任意壁纸，皮肤就从它派生出整套 UI 调色板：Monet 源色提取走\n`@material/material-color-utilities`（Celebi 量化 + Score 排名），由源色相构建\nM3 亮/暗两套 scheme，再映射到 shell 的**全部** token 表面——73 个\n`--dsw-static-*` token（双主题）、写死的交互/滚动条别名、以及标准\n`--md-sys-color-*` 角色。一个都不漏：侧边栏、聊天区、详情区、对话框、菜单、\n滚动条、状态色和每个 currentColor SVG 都跟随壁纸；品牌 logo 被压平到 MD3 主色、\nfavicon 变成 Monet 源色的圆点、aionui 面板（文件树 / git 树 / 预览）经由样式表的\n`--aion-*` 桥使用同一套 M3 角色。皮肤激活期间页面滚动锁定：html 和 body 都不滚动。\n\n同时还带 Material You 有机形状 chrome：四瓣花瓣 FAB（不是普通圆钮），常驻时图标\n为 MaterialYouNewTab 温度计，菜单打开后以 M3 动效（淡入 + 旋转 + 缩放）形变为时钟\n图标。菜单提供**上传壁纸（Split Button，可选导入效果）**、恢复默认、M3 形状系统\n开关（按层级应用 Material 3 圆角语言：胶囊按钮 / 小圆角输入框 / 中等列表行 / 大圆角\n对话框 / xs 悬浮提示与菜单 / 胶囊滚动条——可从菜单关闭）。\n\n皮肤只做表现层：不注入服务、不发射 cordis 事件、不触达任何模型请求。所有写入在\ndispose 时精确回收（body 属性、token 变量、背景、滚动锁、chrome、favicon、标题）。\n\n## 功能一览\n\n围绕「背景」的一条主线：上传任意壁纸后，皮肤从它提取 Monet 源色、生成完整 MD3\n调色板并应用到 dsh 全部 UI。你可以选择**导入效果**——**原图导入**（不处理，直接\n用原图）、**MD3 色彩滤镜**（默认，以源色生成滤镜、按像素明度与原图轻量混合，保留\n画质与细节）或 **Monet 统一色调**（色调重映射）：点击右下角的 **FAB** 打开壁纸\n设置菜单，在上传壁纸按钮右侧的箭头处随时切换，并记住你的选择。整条处理像素最高\n支持 **8K 全分辨率**：像素工作跑在独立 worker（Blob 内联、零额外请求）里，GPU\n优先（WebGPU → WebGL2 回退，与 CPU 参考完全一致），主线程零卡顿；结果持久化到\nIndexedDB、状态到 localStorage，刷新即恢复、dispose 不丢已存壁纸。你还可以开启\n**显示壁纸背景**，让对话区透明、主面板半透明毛玻璃，壁纸透出。\n\n## 环境要求\n\n- Node `^22.19 || >=24`，pnpm。\n- 已安装 dsh（皮肤是面向 `web` profile 的标准 cordis bundle）。\n\n## 构建\n\n```sh\npnpm install     # 安装 @material/material-color-utilities + 构建工具\npnpm build       # 输出 lib/index.js（node 半区）+ lib/client.js（浏览器 bundle）\npnpm test        # vitest：调色板映射 + apply/dispose 契约 + 重着色数学\n```\n\n> build 会在 tsdown 之后运行 `scripts/inline-worker.mjs`，把独立 worker chunk\n> （`lib/recolor.worker.js`）以字符串内联进 `lib/client.js`，供浏览器以 Blob URL\n> 创建 worker——**不要删掉这个 post-build 步骤**，否则重着色会退回主线程路径。\n\n## 手改主题时的热重载\n\n皮肤内置 dev watcher：开着 `pnpm watch`（每次保存 tsdown 重建 `lib/client.js`），\n皮肤每 2 秒轮询自身 bundle URL、对内容做指纹比对，bundle 一变立即刷新页面——\n改个 token、颜色或 CSS 规则、保存，GUI 几秒内重生效。**无需重启 dsh。**\n\n默认开启。关闭方式：\n\n```js\nlocalStorage.setItem(\"dsh.md3Wallpaper.devReload\", \"0\"); // 然后刷新一次\n```\n\n重新开启：删掉该键（或设为 `'1'`）后刷新一次。轮询只在页面可见时进行，interval\n随皮肤 dispose 一起回收。\n\n## 安装 + 激活到 dsh profile\n\n```sh\npnpm install:dsh            # 默认 profile：web\npnpm install:dsh headless   # 或任意其他 profile 名\n```\n\n脚本会：\n\n1. 把本项目链接进 `~/.dsh/profiles/<profile>/node_modules/@anningui/`\n   （symlink；Windows 回退 junction）；\n2. 把激活 insert 写入**该 profile 自己的** `cordis.patch.yml` —— **绝不**写 harness\n   home 的 `cordis.patch.yml`（它被所有 profile 共享，写它会影响 headless harness）。\n\n然后**重启 dsh** 并打开 GUI，皮肤在页面稳定后应用。之后的皮肤切换由 dsh 皮肤中心\n处理（它管理同一个 profile patch）；本项目只负责安装 + 激活自己。\n\n手工安装（和任何官方插件相同）：\n\n```sh\ndsh plugin --profile web add link:<path-to-this-project>\n```\n\n## 使用\n\n点击右下角 FAB，菜单打开：\n\n- **上传壁纸（Split Button）**：主区域直接选择图片上传；右侧箭头弹出「导入效果」\n  （原图 / MD3 色彩滤镜 / Monet 统一色调），选定的效果用于本次及之后的处理。\n- **恢复默认**：回到 M3 基线种子色（#6750A4）。\n- **M3 形状系统**：切换 Material 3 圆角语言（持久化）。\n- **显示壁纸背景**：开启后 frame 透明 + 面板毛玻璃，壁纸透出（持久化）。\n\n主题会随 shell 的亮/暗开关实时切换：暗色 scheme 的反转明度映射立即生效。\n重着色在 worker 内完成：8K 图也不卡 UI；结果存 IndexedDB，刷新后自动恢复。\n\n## 调色板映射\n\nMD3 有五个色调板；shell 有九个颜色族：\n\n| Shell 族         | MD3 调色板          | 说明                       |\n| ---------------- | ------------------- | -------------------------- |\n| `deepseek`       | primary (a1)        | 品牌色相                   |\n| `blue`           | secondary (a2)      | 辅助蓝                     |\n| `green`          | tertiary (a3)       | 成功态走第三个强调色       |\n| `amber`          | primary (a1)        | 告警复用品牌色相、偏移色度 |\n| `red`            | error               | 危险                       |\n| `neutral`        | neutral (n1)        | 文字 / 边框 / 表面         |\n| `neutral-bluish` | neutralVariant (n2) | 背景 / 表面刻度            |\n\nshell 的数字后缀是明度步进而非 M3 tone，所以每个后缀映射到一个显式（亮、暗）tone\n对；暗色反转明度。M3 surface-container 角色按 M3 规范色度表从 neutral 调色板补齐。\n\n## 模型相关\n\n无。皮肤只改浏览器 DOM，不触达任何模型请求。\n\n## 已知限制\n\n- 加载页保持原样（引导页在插件 bundle 存在之前渲染）。\n- 代码语法高亮（json-tree 组件）保留内置配色（组件根 token 超出 body 变量作用域）。\n- 持久化用的紧凑状态是降采样 JPEG（≤512px）：超大显示器可能略有柔化；但**背景本体**\n  是 8K 原精度重着色结果（IndexedDB 位图），不受此限。\n","readmeFilename":"README.zh.md","_rev":"1-d3a629b0a9662026bcffb085b4787ef0"}