前言¶
DSH 的插件生态允许在浏览器端扩展 Harness 的界面行为。菜单、列表框、对话框、标签面板和状态切换已经可用,但过渡动画如果由每个主题或应用各自实现,容易和宿主动画、主题变量、无障碍设置发生冲突。
dsh-motion 面向这个问题:它为具有稳定语义标记的组件增加短促、克制的进入、退场与状态切换动效,同时优先保留 Harness 或主题自带行为。
这是什么¶
@dsh-external/dsh-motion 由 bilbillm 维护,采用 MIT 许可证。它是面向 DeepSeek Harness 的轻量、零配置浏览器插件,覆盖菜单、列表框、对话框、标签面板、对话页面内容层、Tab、Switch 和工作区分组展开状态等界面。
核心能力¶
插件行为以保守为原则,下面列出已核实的边界:
- 优先保留 Harness 或主题自带动画;无法可靠判断的界面会被跳过。
- 瞬态界面只动画
opacity、独立的translate/scale和颜色属性。 - 菜单、列表框、对话框和遮罩使用成对退场效果。
- 退场副本会被设置为
aria-hidden、inert、不可点击,并在动画结束后移除。 - 模型和推理等级卡片换页采用带方向提示的 through-fade。
- 命令列表筛选不会因选项更新反复触发动效。
- 对话框挂载时由外层面板统一负责入场,内部 slot 不重复动画。
- 带
backdrop-filter的玻璃面板只在短动画期间暂停背景采样,结束后恢复主题原声明。 - 实时监听
prefers-reduced-motion;启用减少动态效果后,关闭位移和淡入。 - 不增加设置页面、强度滑杆、轮询或常驻动画帧循环。
安装与启用¶
package.json 声明 node >=20 和 packageManager pnpm@11.7.0。构建源码后,通过 Harness 的标准插件流程安装到隔离 profile:
pnpm install
pnpm run build
dsh plugin --profile web add C:\path\to\dsh-motion
安装后重启或重新加载对应 profile。
典型用法¶
应用或主题可以显式关闭某个子树的动效:
<section data-dsh-motion="off">...</section>
构建与检查:
pnpm install
pnpm run check
pnpm run pack:check
pnpm run check 会执行类型检查、构建 Node/Browser 两个 half,并运行单元测试、JSDOM 测试和 bundle 冒烟测试。
可选浏览器 E2E 矩阵需要一个正在运行的隔离 Web profile:
$env:DSH_MOTION_E2E_URL = 'http://127.0.0.1:3080/'
pnpm run test:e2e
适用场景与注意¶
适合在 Harness web profile 中为已有语义界面补充动效,尤其是希望同时满足以下条件时使用:
- 使用默认
light/dark或angelina-light/angelina-dark主题语义标记。 - 不依赖 CSS Module 哈希类名。
- 保留宿主对布局和系统级动画的管理。
- 遵循
prefers-reduced-motion的减少动态效果设置。
当前版本针对本地 Harness 0.1.0-rc.5 源码和已发布的 0.1.0-rc.6 客户端运行时依赖进行测试。
以下区域不属于插件控制范围:AppFrame 与侧栏几何、Trajectory 交互、Tooltip、Toast、Composer 排版、流式对话行、大型页面退场副本以及 Angelina 视差图层。Composer 内的语义菜单/列表框和工作区树分组展开是明确例外。
安全上,dsh-motion 会作为 Harness 插件加载,并继承当前 dsh 进程权限运行。安装前应检查源码、依赖与 MIT 许可证范围,再决定是否启用。
链接¶
目录页:已核实资料中未提供 URL。
GitHub:https://github.com/bilbillm/dsh-motion