前言¶
DeepSeek Harness(DSH)的 Web 界面裏,下拉菜單和設置類彈層多數是瞬間出現、瞬間消失,沒有開合過渡。若你已經在用 DSH 的插件體系擴展 Web 端能力,又不想改宿主源碼或引入額外運行時,可以在瀏覽器半區掛一個純客戶端插件,只接管這兩類表面的入場與退場。下面介紹社區目錄中的 dsh-webui-transition(npm 包名 @tak1208/dsh-webui-transition),由維護者 T-MKT 發佈,SkillHub 分類爲「趣味換裝」。
這是什麼¶
dsh-webui-transition 是一個 dsh bundle:根包在 Loader 中同時裝入主插件與同 bundle 內的設置插件 @tak1208/dsh-webui-transition-settings。主插件在瀏覽器半區以 classic script(client.js)運行,通過 DOM 觀察與 Web Animations API(WAAPI)爲宿主原本無動效的下拉菜單與對話框面板補上縮放與淡入淡出;不修改 DSH 源碼,文檔寫明無第三方運行時依賴。
倉庫基於 dsh 0.2.2-rc.1 開發,package.json 中 engines.dsh 爲 >=0.2.2-alpha.2 <0.3.0。當前根包版本 1.0.0,許可證 MIT。GitHub 倉庫 T-MKT/dsh-webui-transition 目錄頁見 SkillHub。
核心功能¶
覆蓋的表面¶
插件只處理兩類語義表面,入場與退場都會做:
| 表面 | 選擇方式 | 行爲概要 |
|---|---|---|
| 各級下拉菜單 | role="menu" |
默認約 150ms:從觸發源最近邊/點作 transform-origin,約 0.98 縮放 + 淡入;退場複用入場 origin |
| 設置面板 | role="dialog" 且帶 data-dsh-transition-origin="center"(由設置插件打標) |
約 220ms:以面板正中心縮放 + 淡入,不依賴觸發源 |
其它 role="dialog" 面板 |
如 Agent Team 看板、上下文用量面板 | 遮罩約 180ms 淡入;面板約 220ms,仍可按觸發源做原點感知縮放 |
自 v0.3.0 起菜單等彈層支持原點感知:能推斷觸發元素時,縮放原點靠近觸發側;推斷不到時按用戶設置回退爲「僅淡入」(默認)或「點擊原點」。v1.0.0 起設置面板固定正中心縮放,由設置插件在面板上寫入 data-dsh-transition-origin="center",主插件只識別該標記。
觸發源與回退¶
觸發源按文檔給出的優先級推斷:DOM 鄰接、aria-controls、展開態按鈕(含 24px 鄰接與 1400px 距離上限)、近期指針(2.5s 內)、鍵盤焦點等。其它插件也可在表面元素上設置 data-dsh-transition-origin="center",主插件對該表面一律用中心原點,跳過推斷。
時長與緩動優先讀取宿主 CSS 變量(如 --ds-transition-duration、--ds-ease-in-out),缺省值見倉庫 README 表格。宿主關閉節點時會立刻卸載,退場通過 inert 幽靈副本播放動畫,不阻塞交互。
設置項¶
設置 UI 由 Settings → 過渡動畫(英文 Transitions)進入,對應獨立設置插件。目前一項:
- 無錨點回退方式:
僅淡入/點擊原點,默認僅淡入。
存儲鍵爲 localStorage 的 dsh.webui-transition.settings.v1,JSON 形如 { "fallback": "fade" | "pointer" }。未安裝設置插件或未保存過時,主插件按默認 fade 運行。
退出開關與無障礙¶
在任意元素或其祖先上設置 data-dsh-transition="off",該子樹內的表面不再被插件接管:
<div data-dsh-transition="off">
<div role="menu">…</div>
</div>
系統開啓 prefers-reduced-motion: reduce 時不播放動畫、不生成幽靈節點;運行中開啓會立即停止當前動畫。
安裝與啓用¶
推薦通過 npm 包安裝(一條命令會裝好根包與設置包依賴):
dsh plugin --profile web add @tak1208/dsh-webui-transition
也可讓 DSH 的 plugin_manager 執行:
{ "action": "install_bundle", "target": "@tak1208/dsh-webui-transition" }
自 dsh 0.2.1-alpha.2 起,已安裝的包不能直接覆蓋安裝(會返回 already-installed);需先 remove_bundle 再 install_bundle。安裝成功後可在 Settings → 內置插件清單 中查看。卸載:
dsh plugin --profile web remove @tak1208/dsh-webui-transition
典型用法與擴展點¶
日常使用安裝後即可:打開各級菜單、設置面板或其它 role="dialog" 彈層,即可看到文檔描述的過渡。若要局部禁用,在容器上加 data-dsh-transition="off"。若要在自己的彈層上強制中心縮放,在表面元素上設置 data-dsh-transition-origin="center"(與設置面板的標記契約一致)。
需要改回退策略時,在設置頁切換「無錨點回退方式」並保存;同標籤頁通過 Cordis 事件即時生效,跨標籤頁依賴 storage 事件。
適用場景與注意¶
適合:已在 web profile 使用 DSH 0.2.2-alpha.2 及以上(且低於 0.3.0 引擎約束)、希望菜單與對話框開合更順滑、且接受純客戶端、不改宿主卸載時序的實現方式。
務必注意:
- 權限與信任:插件以當前 DSH Web 進程在瀏覽器中執行,安裝前請閱讀 源碼倉庫 與 MIT 許可證。
- 範圍邊界:不做消息流式渲染、滾動平滑、設置內 tab 切換、菜單翻頁等;不處理 iframe / Shadow DOM 內表面;dsh 升級到 0.3.0 及以上後需自行覈對語義選擇器與客戶端契約。
- 宿主 DOM 依賴:覆蓋面依賴
role="menu"、role="dialog"等語義結構,宿主改版可能影響效果。 - 生態說明:SkillHub 等爲社區目錄,與 DeepSeek / 幻方無官方從屬關係;DSH 理念是「一切皆插件」,本包是第三方客戶端擴展之一。
結尾¶
dsh-webui-transition 用 bundle 形式把主動畫插件與可選設置頁打包在一起,專注補上 DSH Web GUI 裏菜單與對話框的開合過渡,並支持原點感知、減少動態效果與用戶回退配置。進一步瞭解可看 SkillHub 目錄頁 與 GitHub README。