dsh-float-window
Shared floating-window shell for DSH web plugins: float/dock/minimize, drag, edge-snap, corner resize, per-window auto-assigned boss keys, multi-window stacking. 共享浮窗外壳组件
- Stars
- 0
- Language
- TypeScript
- Created
- Aug 18, 2026
- Updated
- Aug 18, 2026
Introduction
dsh-float-window
DSH 插件共享浮窗外壳组件 —— 一份 React 组件,给所有 DeepSeek Harness web
插件提供行为一致的浮窗:dsh-shorts-wall 与 dsh-deepsea 共用同一实现。
English | 中文
能力
| 特性 | 说明 |
|---|---|
| 三态窗口 | 浮动(拖拽 / 右缘吸附贴边)/ 贴边竖栏 / 最小化 |
| 四角缩放 | nw/ne/sw/se 对角锚定;两模式共享矩形,切换零位移 |
| 最小化记忆 | 记住最小化前模式与贴边展开态,还原精确回原布局 |
| 老板键 | 默认 Alt+S;多窗自动分配互不冲突的组合(见下) |
| 多窗共存 | 双 z 带、启动按钮错位堆叠、恢复置顶、老板键按窗分配 |
| 内容永不重载 | 模式切换只改容器样式,内容子树保持挂载 |
| 完全可定制 | 标题 / 主题色 / 图标 / 边界 / 默认模式 / 文案全 props 化 |
用法
源码包(消费方 tsdown 直接内联,react 为 peerDependency):
import { FloatWindow } from 'dsh-float-window'
<FloatWindow
storageKey="my-plugin:shell" // 几何/模式持久化 key
title="My Window"
accent="#7fc4ff"
launcherGlyph="🪟"
labels={{
openTitle: '打开窗口',
expandTitle: '展开',
minimizeTitle: '最小化(老板键还原)',
modeToggleTip: '切换 浮动 / 贴边',
floatText: '浮动',
bossKeyText: '老板键 {key}', // 可选;{key} 替换为实际组合,默认即此模板
}}
>
{(visible, ctx) => <YourContent visible={visible} bossKey={ctx.bossKey} />}
</FloatWindow>
要求:React 18+(peer),TypeScript bundler 解析
(tsdown/vite/tsc moduleResolution: bundler)。
多窗识别与老板键分配(≥0.2)
每个插件的 client bundle 各自内联本组件,模块态不共享,
协调走 window.__dshFloatWindows 全局注册表:
- 识别:
floatWindowSnapshot()返回当前文档挂载中的浮窗及各自老板键; 同一注册表也驱动 z 层叠与右下角启动按钮错位(bottom: 18 + n×52)。 - 自动分配:未声明老板键的窗口按挂载顺序领取组合池
Alt+S → Alt+X → Alt+Z → Alt+C → Alt+V → Alt+B → Alt+Q → Alt+W(刻意避开 Chrome 占用的 Alt+D/E/F),超出后顺延Alt+Shift+1…。 单窗行为与 0.1 完全一致(就是 Alt+S)。 - 显式预留:
bossKey="Alt+D"声明的组合会被注册表预留,自动窗永不落入; 同组合的自动窗会让位并即时刷新提示。两个显式同组合窗口则各自照常响应。 - 完全自定义:
isBossKey谓词且不传bossKey时保持 0.1 匿名行为—— 不参与协调,提示文案退化为「老板键」。 - 提示联动:launcher / 贴边栏 tooltip 与标题栏
bossKeyText(支持{key}占位符)始终显示该窗当前实际响应的组合。
注意:协调要求同页所有浮窗都运行 ≥0.2 (0.1 实例不注册,仍各自默认 Alt+S)。
License
MIT