Repository navigation
Releases: zuoyunlai/dsh-theme-palette
Release list
dsh-theme-palette 1.9.10 · 撤除右侧栏底色 + 高对比边框重新定标
dsh-theme-palette 1.9.10
撤除一个做不到的设置,修好一处「高对比一开就像换了主题」的观感问题。
撤除「右侧栏底色」一档
宿主右栏没有可染的落点,留着这个开关只会一直看起来像坏的(用户拍板:做不到就去掉)。
- 真正的右栏面板是
position:absolute; top:0; bottom:0的整高透明覆盖层,它盖在网格列上、自己不上底色;透明时露出主栏画布 —— 所以只染网格列几乎看不出差别,这就是「设了像没设」。 - 连面板本体一起染会盖住主栏一大块,右栏开关按钮也被压在它下面(实测过,已回退)。
- 整条链路一并删除:设置页那一行、4 语种文案、状态/监听/持久化、分享码
r字段、RIGHTBAR_MODES、三个--dshtp-rightbar-*token、buildTokens第九参数、契约断言。 - 旧分享码与旧
localStorage仍然能读:未知字段读到即忽略,不报错、不复活。 - 扫描组合从 2160 降到 1080(去掉右栏这一维)。
高对比边框改对中间两层定标
深色有四层面(950 侧栏 / 875 / 850 / 800 模块面),对比度在暗面单调 —— 面越暗读数越高。1.9.9 按最亮的 800 定标后,同一根线在 950 上读 5.3 / 6.1 / 7.1:1,比浅色侧还硬。
| token | 目标 | 对 850 | 对 950(原 → 现) | 对 800 |
|---|---|---|---|---|
border-l2 |
3.2 | 3.24 | 5.32 → 3.81 | 2.17 |
border-l3 |
3.6 | 3.63 | 6.05 → 4.27 | 2.43 |
border-l4 |
4.1 | 4.15 | 7.10 → 4.88 | 2.77 |
取舍写在明面上:950 不再比浅色侧硬,代价是 800 从 3.0 降到 2.2–2.8(分界仍看得见,但不再满足 SC 1.4.11 的 3:1)。浅色侧、标准档(墨色 alpha 发丝线)、border-l1 全部不动。
验证
npm run check全绿(结构 / 宿主契约 / 自愈 / 审计 19 组);新增第 19 组把上面这个决定钉住:浅色对 00/60 ≥ 3.0/3.4/4.0、深色对 875/850 ≥ 3.2/3.6/4.1、950 ≤ 5.0、800 ≥ 2.0,外加「标准档必须是墨色 alpha」「l1两档都不变」。palette-dev.mjs标准 / 高对比两档均 exit 0:1080 组配置 × 承诺面「低于 AA 4.5 = 0、硬失败 = 0」。
dsh-theme-palette 1.9.9 · 审计反哺:可读性、侧栏与高对比收口
dsh-theme-palette 1.9.9
按审计报告逐条核实后的修订批(11 条问题 + 两处用户实测缺陷):
- 深色文字下限:深底单独一套下限(次级 8.0 / 三级 6.4,高对比 9.6 / 7.6);
Lc<60组合 11/48 → 2/48,剩下 2 组是自定义配色的深色链接(已按 APCA ≥60 收口) - 色阶单调:
compressL连续化 + 收尾enforceRampOrder;4 套配色 × 两档 × 12 个面档全部单调 - 文字着色三档对预置恢复有效:参考墨色降级为起点,色度由档位驱动;静↔浓正文 ΔE 3.2 / 4.7 / 4.1(代价:次级/三级不再逐 token 钉参考值)
- 高对比边框与滚动条:按 SC 1.4.11 定量到 3:1 以上(实测 3.26–3.39 / 3.01–3.07)
- 侧栏「同色」真的等于画布:苔绿原被染成薄荷绿(ΔE 2.49),现 ΔE 0.00;深色侧栏独立步长,画布↔侧栏 ΔE 1.9–2.3 → 4.1–5.0
- 「更浅」不再反向压暗:
LIGHT_CAP抬到 0.995 + 单调保护;悬停/选中给 0.012 步进地板(此前两套配色 ΔE 0.00) - 浅色画布回归参考实现:00/60/150 取
surface / surface-subtle / surface-strong,跨套差异留在次层 - 报表新增 APCA
Lc列(不设门);新增--dshtp-border-control - 工程:
rampCacheLRU 96、buildTokensmemo、无效模式 id 告警、无彩色底不再派生偏色、新增check-selfheal.mjs
npm run check 380 条断言全绿;palette-dev.mjs 标准/高对比两档均 0 未达标、0 低于 AA。
dsh-theme-palette 1.9.7 · 表面重标定与暗色舒适度
dsh-theme-palette 1.9.7
暗色正文按策略 A 定标(用户反馈「白色文字太亮」):
- 非高对比模式正文目标从 12:1 降到约 10:1(950 上实测 10.1–11.5)
- 以侧栏/卡片面(950/875/850)定标;模块面 800 不再为正文兜底(约 5.6–6.5:1,仍过 AA)
- 报表口径同步:深色正文承诺 12→10,800/850 标为「政策外」而非违例
- README 的 12:1 表述待同步(发版前完成)
dsh-theme-palette 1.8.3 · token 覆盖收口
dsh-theme-palette 1.8.3
补齐 token 覆盖缺口:深色菜单、品牌新色、文件 diff 温度调和、矩阵菜单面、诊断导出。
- 深色菜单:
--dsw-specific-menu宿主带字面量兜底(深#303136f0),只改menu-surface-fill不够,
深色菜单仍是冷灰 → 现在按配色给(浅 50/深 850,alpha 0.94) - 品牌新色:
--dsw-alias-brand-primary-new-…浅色写死#4176e6宿主蓝 → 两模式都归到强调色 - 文件 diff 温度调和:6 个
file-diff-*保留绿/红语义,色相往配色拉 16–22°、压低饱和;
断言「新增仍是绿色系、删除仍是红色系」+ 正文对 diff 底 ≥4.5 - 对比度矩阵加菜单面:半透明面按画布合成后给出参考值,标
※(不计硬门),
UI 与palette-dev共用同一份CONTRAST_SURFACES(含 token 面) - 诊断导出:矩阵区新增「复制诊断」,输出 settings + 对比度矩阵 JSON,便于提 issue
- forced-colors:核实我们改的都是 UA 强制色属性,系统高对比模式会自动接管,
因此不加forced-color-adjust: none对抗(代码内已注明理由) - 契约测试补
--dsw-specific-menu/--dsw-alias-brand-primary-new-…/--dsw-alias-file-diff-added-bg - 明确不跟:
bg-mask-*(遮罩)、border-inverted*(反色边框)、onboarding(一次性引导)——刻意保留宿主原值
安装
cd ~/.dsh/profiles/desktop
pnpm add dsh-theme-palette@1.8.3装完重启 GUI。
dsh-theme-palette 1.8.2 · 语法高亮与暖砂体系归一
dsh-theme-palette 1.8.2
语法高亮跟随配色 + 暖砂字体体系归一(深正文色度按色域统一、消除双色相)。
- 根因 1:深色正文字色度没有按色域归一。
paperC是绝对值,×2.4 后暖砂请求 130%、靛蓝 166% 色域上限,
实际色度被裁成 0.0244 / 0.0115 / 0.0303——暖砂深正文几乎是靛蓝的两倍黄。现在三套统一paperC=0.0053
(标准档实际 ≈0.0127),浅/深正文色度比降到 1.21 / 1.10 - 根因 2:暖砂是唯一「深色面 60°、正文 84°」的双色相预置。深色面橙棕、正文黄绿,色相分裂 24°;
现在paper角色跟随darkHue,并把暖砂hue84→72、darkHue60→66,全套色相收敛到 12° 内 - 新增断言:深正文色相偏离
darkHue≤12°、三套浅色正文色度比 ≤1.25、深色 ≤1.5 - 新增
tools/preview-typography.mjs:三套 × 明暗并排渲染同一段文字,发版前目检
语法高亮跟随配色(1.8.1 里“未做”的那条,前提已实测):
- 实测依据:宿主渲染器用 Shiki 的
css-variables模式(class="shiki css-variables",
style="background-color:var(--shiki-background)"),token 颜色走 CSS 变量,
所以覆盖--shiki-token-*生效,不需要!important - 色相策略:从强调色相取 3 个色族(强调 / +150° 冷族 / -60° 暖族),
同族靠明度分常/表达;每个 token 对代码块底求解到 ≥4.6:1,四族最小 ΔE ≥10 - 覆盖 9 类 token(keyword / function / constant / parameter / string / string-expression /
comment / punctuation / link)+--shiki-background/--shiki-foreground - md=off 时不输出任何 shiki token,交回宿主原色
- 新增
tools/preview-code.mjs:用生产 token 渲染一段真实代码,发版前肉眼确认 - 断言:9 类 token 对比度 ≥4.6、四族 ΔE ≥10、shiki 背景与代码块一致、md=off 无输出
安装
cd ~/.dsh/profiles/desktop
pnpm add dsh-theme-palette@1.8.2装完重启 GUI。
dsh-theme-palette 1.8.1 · Markdown 配色丰富化
dsh-theme-palette 1.8.1
Markdown 配色丰富化:标题三档、引用/表格/列表结构色,并修掉代码块双层底。
- 标题三档:h1/h2 → h3/h4 → h5/h6 由强到弱(
--dshtp-md-h1/h2/h3),不再六级同色;
层级按着色强度区分,字号仍由宿主决定 - 引用 / 表格 / 分割线 / 列表:引用淡底 + 左侧强调边、表头淡底、表格边框与分割线跟随语义 token、列表标记用三级文字色
- 修代码块双层底:宿主
<pre>背景来自--shiki-background → --dsw-alias-markdown-code-block(bluish-50/900),
此前只染.md-code-block外层,内层仍是宿主中性色;现在直接覆盖该 token(含 banner),两层同色 - 新增断言:标题三档互异、正文/代码块底 ≥4.5、正文/引用底 ≥4.5、次级/表头底 ≥5.5、
<pre>底色与代码块一致、md=off时全部继承;契约测试补--dsw-alias-markdown-code-block - 未做:语法高亮(
--shiki-token-*)跟随配色。宿主构建里这 9 个变量只定义、无消费者,
需先在 GUI 实测渲染器是吃变量还是内联色,再决定方案——不在未验证的情况下强改
安装
cd ~/.dsh/profiles/desktop
pnpm add dsh-theme-palette@1.8.1装完重启 GUI。
dsh-theme-palette 1.8.0 · 竞品差距反哺
dsh-theme-palette 1.8.0
依据竞品调研反哺:把工程严谨变成可见、可分享、可验证的东西,不改求解器。
- 对比度矩阵:设置页新增可折叠「对比度」区,4 个前景角色 × 7 个承载面的实测/目标/表面受限三态;
CONTRAST_SURFACES/CONTRAST_ROLES成为唯一定义,palette-dev.mjs改为消费同一份(消除两套口径) - 「试试示例」:导入区一键填入演示短码并触发预览;码由生产
encodeConfig运行时生成,schema 演进自动跟随 - 五语 README 叙事:新增
## Pitfalls we hit(1.7.0 的 5 条审计事故)与## Trade-offs
(明确不做玻璃/壁纸/市场/AI 生色),标题逐字一致由脚本断言 - 五语
## Sharing:放一条真实示例短码(生产编码器生成 +decodeConfig往返自检),说明它包含三色 - 截图资产重建:4 张(浅/深/自定义面板含解释性校正/高对比),
screenshots.json3→4 - 主题包导出(单向):
npm run packs导出dsh-dream-skin/pack格式 8 个包(4 配色 × 明暗,每包 90 tokens),
全部通过正文/画布对比度自检;不实现导入——导入会绕过对比度求解器 - 工具:
preview-settings支持--notice/--hc/--out,透传id/scope/title/data-*;
新增sample-code/insert-readme-sections/insert-readme-gallery/export-theme-pack;
check-ui扩到 69+ 断言(矩阵、示例码可解码、五语标题一致、单一 SURFACES 定义) - 无存储键变更;无求解器行为变更
安装
cd ~/.dsh/profiles/desktop
pnpm add dsh-theme-palette@1.8.0装完重启 GUI。
dsh-theme-palette 1.7.0 · 审计反哺修订
dsh-theme-palette 1.7.0
依据 2026-10-23 审计反哺(对 DSH 0.2.1-rc.2 实际 token 与承载面核实):修复极端强调色可读性、自定义状态订阅、分享缺三色、caption/深色承载面求解等问题,并落地解释性校正、导入预览、一次性升级提示与契约测试。
- A01 极端强调色:
accentL钳位到 0.30–0.64;链接求解器改为双向搜索并对 00/60/150 同时达标;
新增--dsw-alias-button-info-fill覆盖(与主按钮一样按白字 4.5 压暗),不再出现白底白链/白勾 - A02 自定义色订阅:
readCustom改为按存储内容缓存的冻结快照,新增subscribeCustom;
取色/重置/导入会更换引用并触发重渲染,空闲时快照稳定(useSyncExternalStore语义) - A03 分享完整:
dshs1.短码新增x(三色),旧码仍可导入并提示未含自定义色;
applyConfigCode返回{ok,hasCustom},非法码不部分写入 - A04 承载面求解:深色正文(50)、次级(300)、caption(500)补上求解;目标按承载面可达上限
钳位(0.93 余量),palette-dev打印「实际/目标/可达」并标注「表面上限」,不再虚报 12/15;
caption 注释里的 6.5:1 更正为实测值 - A05 文字色相:自定义文字色相进入 700/750/1000/50 档(此前只取色度)
- A06 HEX 校验:改为 draft + 提交,非法值显示
aria-invalid与行内错误,Enter 提交、Esc 回滚 - A07 键盘模型:分段控件 roving tabindex + 方向键/Home/End
- A08 标签结构:自定义色改为
role=group+ 色盘/HEX 两个独立 label - A09 健康检测:探针比对期望值(支持
#rgb/#rrggbb/rgb()/rgba()),报mismatched;mono 覆盖更多 token - A10 测试门:
palette-dev.mjs改用生产floors(),支持--hc,硬失败退出码 1 - A11 边界:grid/swatches 改
minmax(min(100%,N),1fr);说明_markdown_/.md-code-block
在当前宿主构建 CSS 中仍存在(属契约风险而非失效);ramp 缓存上限 48 - 建议落地:自定义面板新增解释性校正(强调色归一化 / 链接压暗,带实际对比度);
导入改为先预览后确认(预览不写存储);新增按版本一次的升级提示(notice.v1,不碰配色键;
仅升级前已有配置的用户可见);高对比从「更多选项」移到阅读区;新增tools/check-host-contract.mjs
契约测试与tools/check-ui.mjs结构回归,并把它们接入npm run check与发版预检 - 新增
tools/check-audit.mjs:覆盖极端色、分享往返、文字色相、caption、深色正文可达上限、HC 卡层
安装
cd ~/.dsh/profiles/desktop
pnpm add dsh-theme-palette@1.7.0装完重启 GUI。
dsh-theme-palette 1.6.0 · 视觉与可访问性整改
dsh-theme-palette 1.6.0
按第三方 UI 视觉验收审计(60/100)整改 15 项:布局改容器驱动、配置块重做、复制不再谎报成功、
可访问性四件套(lang / radiogroup / aria-live / aria-label)、自定义面板层级与 hex 可输入。
视觉与可访问性整改(依据 2026-10-22 第三方 UI 视觉验收审计,60/100):
- A2 配置块重做:改用
.dsh-tp-field容器(与普通行同节奏),导出/导入各占一行,
反馈文案就地显示(复制→复制按钮旁,导入→导入按钮旁),导出框加text-overflow:ellipsis - A3 复制不再谎报:
await navigator.clipboard.writeText(),失败或无 API 时显示
「复制失败,请手选后 Ctrl+C」,不再无条件报成功 - A4 布局从视口断点改容器驱动:卡片
repeat(auto-fit,minmax(196px,1fr))、色块minmax(86px,1fr)、
行与分段控件flex-wrap;日语长标签改短(右栏「サイドバー / キャンバス」、滚动条「無彩 / 追従 / 強調」)。
实测 4 语 × 内容宽 564/336/216:越界元素 0(改前日语 216px 溢出 61px) - A5 语言属性:
<section lang>跟随手选语言,auto时回落宿主documentElement.lang - A6 分段控件有名字:
role="radiogroup"+aria-labelledby指向行标题,选项改
role="radio" aria-checked(8 组 22 个按钮) - A7 反馈可播报:复制/导入/自愈状态挂
role="status" aria-live="polite",错误用alert;
导入框补aria-label - A8 自定义面板层级:面板底改
bg-layer-1(按钮不再与面板同底 1.00:1)、说明文字提到
label-secondary12px;色值从只读<code>改为可输入 hex(回车/失焦生效,非法值忽略) - A9 缩略图跟随侧栏档位:
cardColors()接收sidebarMode,不再写死默认档 - A11 黑白配色下「滚动条」「开关」置灰禁用(点了也不会有变化)
- A12 卡片与分段按钮
:focus-visible{outline-offset:2px},焦点环不再与选中边框贴死 - A13 加
prefers-reduced-motion降级 - A14
docs/DESIGN.md补「当前标定值」表(旧推演内容保留,注明以client.js为准) - A15 删掉 4 语共 36 条从未渲染的文案键与未被调用的
swatches() - A10 证据链:README 首图换成当前版本(5 张卡)的静态渲染,按真机内容宽 564 px 出图
(浅色 / 深色 / 自定义面板三张,--scale 2即 1240 px 宽),并在五语 README 里注明「静态渲染」;
screenshots.json同步为这三张 - 工具:
tools/preview-settings.mjs新增--width(默认按真机 564px 内容宽)与--adv(默认折叠),
token 跟随--palette;新增tools/measure-preview.mjs(量越界/行高/关键计算色,非 0 越界退出 1)
安装
cd ~/.dsh/profiles/desktop
pnpm add dsh-theme-palette@1.6.0装完重启 GUI。
dsh-theme-palette 1.5.2 · 自定义配色实时取色
dsh-theme-palette 1.5.2
设置页交互重排:自定义配色不再埋在「更多选项」里,取色实时生效。
设置页交互重排(用户反馈:自定义不该埋在「更多选项」里、取色看不到即时效果):
- 自定义配色提为一级区块:选中「自定义」卡片后,面板直接出现在卡片网格下方,
不再需要展开「更多选项」 - 取色实时生效:同时接
onInput(拖动过程中)与onChange(确认后),
一次buildTokens实测 0.15 ms,整页配色随取色实时变化,不需要"确认"动作 - 色块放大:
input[type=color]变成 44px 高的圆角色块(隐藏原生 swatch 边框),
下方显示字段名与十六进制值;三个色块一排,窄屏自动堆叠 - 恢复默认:面板右上角一键回到出厂三色
- 修:预览渲染器不输出
value/placeholder/readonly,导致静态预览里色块是黑的、
导出码框是空的(真实应用不受影响)
安装
cd ~/.dsh/profiles/desktop
pnpm add dsh-theme-palette@1.5.2装完重启 GUI。