Repository navigation
dsh-fullscreen-input 1.1.0
Panel resizing, a three-way pane background, and a summon hotkey.
Added
- The panel resizes from any edge or corner — eight directions, with the cursor as
the only affordance and no visible grips. Minimum 360×240, never larger than the
viewport. A corner drag changes the panel's shape, not merely its size. The
size is remembered; double-clicking the header restores position and size together. - A solid pane switch, mutually exclusive with the frosted one, so the pane
background is now one of three states: both off = fully transparent, solid only =
colour without blur, glass only = colour plus blur. Turning solid on pushes the
pane opacity to 100% once, so it looks like the switch it is named after. - A switch that removes the mask entirely. The page behind becomes clickable and
scrollable. The cost is that click-outside-to-close no longer applies — useEsc
or the summon key. - A configurable summon hotkey,
F2by default: tap to open, tap again to close.
Function keys only (F1–F12), because the listener sits on the window and a bare
character key would fire while you type.F1is deliberately not the default —
Chrome opens a help page for it. - A one-time intro dialog explaining that double-clicking the header resets the
panel, and where the settings live. "Do not show again" makes that permanent;
merely closing it brings the dialog back on the next launch, which is the point.
Settings has a button to bring it back on demand. - Wheels outside the pane are forwarded to whatever is under the pointer, so you
can consult the conversation while writing. Scrolling over the message list scrolls
the messages, not the sidebar. Wheels inside the pane still belong to the pane. - Independent remember-size and remember-position switches. Both default to
size-on / position-off.
Fixed
- Turning off "remember panel size" now actually stops the size being remembered.
The switch was bypassed in three separate places — the mount read the stored size
unconditionally, every resize wrote it unconditionally, and the render fell back to
the stored value when the in-memory one was empty. The last one was the quietest:
fixing only the first two still applied the size. The panel's size now comes from a
single in-memory value, seeded from storage only while the switch is on. Closing the
switch deliberately does not delete the stored size, so turning it back on returns
you to the size you had set. - The panel can no longer be dragged or resized off-screen, and a position read
back from storage is clamped too — so anyone already stuck off-screen recovers the
moment they update, without clearing settings. A strip of the panel always stays
reachable (120px horizontally, 48px vertically, enough to grab the header), and the
drag stops at the edge instead of snapping back afterwards. - The "panel behaviour" settings no longer fall out of the settings dialog's scroll
area. The cause was a JSX nesting slip, not styling: a closing bracket sat one
level early, so those groups became siblings of the scroll area rather than
children — they did not scroll with the rest and were clipped by the dialog. The
code was perfectly valid syntax, which is why a syntax check passed it; it took
looking at the DOM to find. Two structural checks now cover the shape: the dialog
may have only two direct children (header and scroll area), and every group must be
inside that scroll area. - The settings dialog no longer overflows when its content is taller than the
pane. A flexbox default, not a missing rule: a flex item'smin-heightisauto,
which refuses to shrink below its content and silently overridesmax-height.
min-height: 0restores scrolling.
Changed
- "Glass opacity" is now "panel opacity". The old name said the opposite of what
the value does — it is the fill alpha, so "25% transparency" was 25% opaque, and
smaller numbers were more transparent. Read the new name as strength: 100% is
fully opaque. For the same reason "glass colour" is now "panel colour", and the
header icon is called a sun, which is what the eight-toothed shape looks like
at 16px. - "Both background switches off" now means no background at all. Before, turning
glass off left the pane still tinted at the panel-opacity value, so "off" produced a
faint wash rather than a transparent pane. The fill is now written as a literal
transparentwhen neither switch is on — the stylesheet's fallback covers a value
that fails to resolve, not one that was never set.
Compatibility
The bundle patch and the dsh manifest are untouched, so existing profiles keep working
and a disable row written against row id fullscreen-input still applies. Settings
stored by 1.0.0 read back with identical behaviour.
npm shasum (SHA1) da4a6fd873b870c79a2efb29a3d52201c96fc987
npm integrity sha512-NHHc7WJo62WcXjXHV1xwVVLHkhY/Qjs5K1ESVAFNTb6OPcRaoG3ROFjiYIB4hxcQgseli+y3GerfFTA+JVru2Q==
install dsh plugin --profile web add dsh-fullscreen-input
面板可调整大小、底色改为三态,并新增唤起快捷键。
新增
- 面板可拖拽任意边缘或四角调整大小 —— 8 个方向,光标就是唯一的提示,没有额外的可见把手。最小 360×240,最大不超过视口。拖角改变的是面板的形状,而不只是尺寸。尺寸会被记住;双击标题栏可连同位置一起复原。
- 「纯色面板」开关,与毛玻璃互斥。于是底色共三种状态:两个都关 = 完全透明;只开纯色 = 铺色但不模糊;只开毛玻璃 = 铺色 + 模糊。开启纯色时会把「面板不透明度」一次性推到 100%,让它名副其实。
- 「启用遮罩层」开关:关掉后遮罩整个不渲染,鼠标可直接点击、滚动背后的页面。代价是「点击面板外关闭」不再生效,请改用
Esc或唤起快捷键。 - 唤起快捷键,默认
F2:按一下打开、再按一下关闭。只接受功能键(F1–F12),因为监听挂在窗口上,裸字符键会在你打字时误触发。默认刻意不用F1—— Chrome 会为它打开帮助页。 - 首次打开面板时弹一次使用提示,说明双击标题栏可复位、以及设置入口在哪。勾选「不再提示」才会永久关闭;只点关闭,下次启动仍会提示(这正是设计意图)。设置最下方有按钮可随时唤回。
- 鼠标在面板之外滚动滚轮,会滚动背后的会话 —— 边看 LLM 输出边写提示词时不用来回开关面板。在消息列表上滚就滚消息,不会误滚侧边栏;面板内部的滚轮仍归面板。
- 「记住面板大小」与「记住面板位置」是两个独立开关(默认记住大小、位置每次居中)。
修复
- 关掉「记住面板大小」后,面板大小仍然被记住。 这个开关在三处都被绕过了:挂载时无条件读取存下的尺寸、每次调整大小都无条件写入、以及渲染时在内存值为空的情况下又回退去读设置里的值。最后一处最隐蔽 —— 只修前两处,尺寸仍会被偷偷应用回来。现在面板尺寸只由内存中的一个值决定,且仅在开关打开时才从存储播种。关掉开关刻意不删除已存的尺寸,所以重新打开即可回到之前调好的大小。
- 面板不会再被拖出或拉出屏幕,而且从存储读回的位置也会被夹紧 —— 已经处在这个状态的用户,更新后一打开面板就自动回到可见范围,不需要手动清理设置。面板始终保留一部分在屏幕内(水平 120px、垂直 48px,足以抓住标题栏),拖动过程中就会停住,而不是事后弹回。
- 「面板行为」及以下的设置项不再跑出设置对话框的滚动区。 真因是 JSX 结构错位而非样式:一个闭合括号早了一位,那几组于是成了滚动区的兄弟而不是子元素 —— 它们不随其余内容滚动,还会被对话框裁掉。这段代码语法完全合法,所以语法检查放过了它,最后是靠看 DOM 才定位。现在有两条结构性检查覆盖这个形状:对话框只能有「标题 + 滚动区」两个直接子元素,且所有分组都必须位于滚动区内部。
- 设置内容高于面板时不再溢出。 这是 flexbox 的默认值陷阱,不是漏写规则:弹性子项的
min-height默认为auto,它拒绝收缩到内容以下,从而静默压过max-height。补上min-height: 0后恢复正常滚动。
变更
- 「玻璃透明度」更名为「面板不透明度」。 旧名字把含义说反了:这个值直接就是填充的 alpha,所以「透明度 25%」实际是「25% 不透明」,数值越小反而越透明。改名为「面板不透明度」后按「浓度」理解:100% 完全不透明。同一个原因,「玻璃颜色」改为「面板颜色」;面板头部的图标改称小太阳 —— 八齿造型在 16px 下看起来就是太阳而不是齿轮。
- 「两个底色开关都关」现在等于「没有底色」。 以前关掉毛玻璃后面板仍会按「面板不透明度」继续铺底,所以「关掉」拿到的是一层淡底色而不是透明面板。现在两个开关都关时,填充值显式写入字面量
transparent—— 样式表的回退值兜的是「取值失败」,兜不住「根本没设」。
兼容性
组合包补丁与 dsh manifest 均未改动,所以现有 profile 照常工作,针对 row id fullscreen-input 写的禁用行仍然有效。1.0.0 存下的设置读回来行为完全一致。