Repository navigation
Releases
v0.7.3 — 表面明度统一
v0.7.2 — 表面着色统一
所有表面改为统一绝对彩度(0.026×深浅系数),仅在色域上限处让位;浅色卡片降一档获得真彩。12 预设×2 模式:画布/卡片/浮层色相偏差 ≤7°、彩度差 ≤0.009。74/74 测试通过。
v0.7.1 — 深浅可调
配色深浅改为可调滑块(30%–160%),默认 85%;表面着色改为跟随品牌彩度,换配色终于看得出颜色;侧栏顶部常驻该控件。72/72 测试通过。
v0.6.7
v0.6.6 — 桌面端窗口控制条不再遮挡工作室工具栏
0.6.5 修方向对了,但桌面端仍然没生效:它靠 User-Agent 里有 Electron 才认出桌面壳,而打包版把 UA 改掉了;同时用 env(titlebar-area-height, -1px) 探测控制条高度——-1px 是非法 padding,浏览器直接丢弃该声明,于是永远读到 0。
修复
- 换成不可能认错的信号:桌面端 preload 里有
markDocumentPlatform(),会把process.platform写到html[data-platform];网页端从不设置这个属性。检测顺序改为:显式覆盖 →env(titlebar-area-height)(覆盖层存在时 Chromium 才给出真实值)→data-platform(桌面壳 40px)→ 0。 - 探测改成双探针:分别用
0px与1px兜底读一次,两次一致才算覆盖层存在,否则判为无覆盖层。非法兜底值导致「看起来像 0」的坑被测试锁住。 - 检测逻辑从
studio.tsx抽到src/client/chrome.ts(detectChromeTop/chromeTopFrom/isViewportAnchored/DESKTOP_STRIP),可以脱离 DOM 单测。 isViewportAnchored会跳过正在播放动画的祖先:宿主弹窗的入场动画带 transform,不能据此判定浮层被收成了面板。
验证
- 新增 4 条
chrome单测(浏览器 0 / 桌面 40 / 覆盖层变量优先 / 显式覆盖优先),共 67 条全绿。 - harness 两个变体各截一张:
data-platform=win32→ 40px 标题栏 + 按钮下移;无该属性 → 贴边、无空带。 npx tsc --noEmit通过。
v0.6.4 — 开关看得懂,点得动
预览里的「动效」开关有三份互相打架的 CSS:轨道已经画成品牌色,圆钮却钉在右边,开启态又把它再推 11px,直接跑出 30px 轨道——所以开和关长得一模一样。现在重写成一份定义:34×20 轨道、圆钮左侧起步、开启态在轨道内平移 14px,关闭态是中性轨道。新增 3 条样式测试锁死这个回归,62/62 通过。
v0.6.3 — 不再拖挂 DSH 启动
0.6.3
修「装上这一版以后 DSH 起不来」——根因是 0.6.x 的客户端入口在宿主服务还没就绪时读服务,cordis 4 直接抛错,整个 web boot 被这个插件拖挂;顺带修掉设置行在实机上根本没注册上的问题。
修复
- 启动失败(阻断级):
apply()里不再裸读ctx.theme/ctx.locale,改成ctx.inject(['theme','locale'], …),并给service()的属性式兜底加了 try/catch;apply()整体包一层 try/catch 且只console.warn,插件再坏也不会带走宿主。此前Error: cannot get property "locale" without inject会让dsh-freestyle-theme这条 entry 激活失败。 - 设置行不出现:
slots.inject('settings.general.item', …)必须在插件自己的 apply 作用域里调用;放在ctx.inject的嵌套作用域里注册会静默不生效。现在注册在 apply 作用域,主题/语言改为渲染时按需取。 ctx.effect(cb)用法是反的:它立刻执行cb并把返回值当 disposer,原先ctx.effect(() => dispose)在注册前就把行销毁了。改为监听dispose事件。- 去掉调试用的
window.__fstDebug埋点。
验证
- 实机:
rev重载后dsh-freestyle-theme激活、无 “did not activate” 提示;设置 → 通用设置 出现「FreeStyle 主题」行,工作室可打开、预设/模式/中国传统色面板可点。 npx tsc --noEmit通过;node --test "tests/*.test.mjs"59/59;check:tokens119 令牌齐全。
v0.6.2 — 对话框可输入、主题可命名
修复两处实机问题:工作室不再落在宿主弹窗的焦点陷阱之外(输入框能正常打字);空名字时不再静默保存成「未命名主题」,并在主题库里支持重命名已保存的主题。
v0.6.1 — 全深色工作室,应用即收起
0.6.1
两处按实机反馈的修正,都在 src/client/studio.tsx。
- 深色要全深:工作室根节点带上当前配色的 119 个变量,顶栏、图标轨、列表、画布、检查器随预览一起进入深色;切浅色同样整体回浅。
- 应用后不再挡屏:点「应用到 DSH」后 220ms 自动收起工作室(先看到「已应用到 DSH」),回到设置页即可继续操作,不再留一层全窗浮层。
验证:应用后宿主覆盖变量 120 项仍在、.ft-studio 节点为 0、设置行按钮中心点命中自身;pnpm test 59/59。
v0.6.0 — 可点的工作室
0.6.0
这一版把「看上去能点」改成「真的能点」,并修掉三个会让人以为插件坏了的布局问题。
修了什么
- 工作室铺满窗口:
createPortal到document.body,不再被设置行的层叠上下文裁切,也不再透出背后的设置页。 - 面板可滚到底:检查器原本高 2009px、把页面撑到 1347px,底部的对比度与「一键修复」根本点不到;现在列表/检查器/画布各自内部滚动。
- 整壳一起换色:119 个令牌的浅/深两套值解析为具体颜色后一次写入 120 项,宿主界面、菜单、弹窗同步变色;切浅色/深色会重算明度骨架。
- 预览可交互:侧栏切视图、表单开关(真按钮)、输入框可输入、对比分割线可拖(
--ft-split)、检查模式逐元素报令牌。 - 模型徽标取真实值:新增
GET /api/dsh-freestyle-theme/model,取不到才显示「当前模型」。 - 删除按钮不再被卡片主体盖住:两段确认可正常操作。
- 窄屏自动收起检查器:≤1080px 变 340px 抽屉,轨道按钮可再打开。
- 顶栏「保存当前」改成图标按钮。
证据
- 脚本化点击 12 组场景全部通过(模式、预设、撤销、三视图、预览点击、对比拖拽、检查、缩放、色相、锁、保存、删除、分享、生成→应用、应用、窄屏、修复、Esc)。
pnpm test59/59;pnpm check:tokens:119 令牌、12×2×21 对、分享码无损。
升级注意:包名即加载器 id,已有安装请替换 ~/.dsh/plugins/dsh-freestyle-theme 后重启 DSH。