Repository navigation
dsh-fullscreen-input 1.2.3
The mask's blur stopping at a host container, a white-on-white switch on the light theme, and AGENTS.md out of the package.
Fixed
- The mask covered the conversation column but not the sidebar, on one machine. The
first reading of the report was a geometry problem, and the fix was built for that.
Field data said otherwise: the layer and the scrim both measured the full viewport at
0,0 with a zero delta, and a hit test in the sidebar landed on the layer — so size
and stacking were never wrong. What was wrong is where the effect appeared: the mask
fill is transparent by default, so what the eye reads as the mask is the
backdrop-filterblur, and the blur stopped at a host row box while the layer still
measured the whole screen.- The cause is
container-type: inline-sizeon a host element between the slot and
body. Its impliedcontain: layoutmakes it a containing-block candidate and cuts
backdrop-filtersampling short. It also explains why the symptom tracked the machine
rather than the browser: that viewport made the host lay the column out with that row. - The layer now probes its ancestors once mounted and, on a hit, portals itself to
body— above whichfixednecessarily means the viewport andbackdrop-filteris
no longer truncated. - The probe covers seven causes:
transform,filter,backdrop-filter,perspective,
contain,container-type,will-change. It counts a value only when the engine
actually returned one —none,auto,normaland the empty string all count as
unset. (container-typedefaults tonormal, so missing that check would make the
probe permanently true.) - It escapes only on a hit: with no hit, the DOM position and structure are unchanged.
Ifreact-domcannot be resolved, it does not throw — it simply stays put, which is the
previous behaviour rather than a failed load.
- The cause is
- On the light theme, a switch in its off state was a solid white block. The dark theme
was fine. The neutral tint under our own controls came from--dsw-alias-bg-layer-2, a
surface token, which resolves to white on the light theme — so a white knob on a white
track on a white pane had no readable state at all. It is now derived from
--dsw-alias-label-primary(color-mixat 18%): a neutral built from the label
colour inverts with the theme by construction, so there is no second set of literals
to maintain. The slider track, hover fills and reference chips share it.- Scoped to the panel and the settings dialog, so the host's own use of that token is
untouched. Each rule still names the same token, so wherecolor-mixis unsupported the
old appearance returns.
- Scoped to the panel and the settings dialog, so the host's own use of that token is
Packaging
AGENTS.mdis no longer published. It is maintainer instruction ("the seven
constraints you must not break", "rebuild after touchingsrc/"), and once the package
sits innode_modules, DSH'sdsh-agent-instructionsfolds it into sessions as
workspace instruction as soon as an agent touches that directory — its candidate file
names are literally['AGENTS.md', 'CLAUDE.md']. So every user who merely installed the
plugin was having a few KB of "how to modify this library" injected into their sessions.- The fix is to remove it from
package.json'sfiles, not to rename or delete it:
in the repository it is wanted, because an agent working there really is modifying the
plugin. That is why the file stays. - The published package is 11 files now instead of 12.
src/andbuild-client.mjs
remain, becauselink:installs rebuild from them.
- The fix is to remove it from
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
earlier versions read back with identical behaviour.
npm shasum (SHA1) 70947b1a47a02e80e339871cec87df351a07d857
install dsh plugin --profile web add dsh-fullscreen-input
遮罩的模糊止步于宿主容器、浅色主题下白底白开关,以及把 AGENTS.md 移出发布包。
修复
- 在一台机器上,遮罩盖住了对话区,却没盖住侧边栏。 报告最初读起来像几何问题,修复也是照着那个方向做的。现场数据推翻了它:
.dshfs-layer与.dshfs-scrim都量到完整视口、位于0,0,与视口差值全为 0;在侧边栏位置做指针命中,命中的正是这一层——所以尺寸与层叠从来没错。错的是效果出现的位置:遮罩底色默认全透明,肉眼读作「遮罩」的其实是backdrop-filter的模糊,而模糊止步于宿主某个行的盒子,层本身仍然量到整屏。- 成因是槽位与
body之间一个宿主元素上的container-type: inline-size。它隐含的contain: layout既让它成为包含块候选,又截断了backdrop-filter的采样。这也解释了为什么症状跟着机器走而不是跟着浏览器走:那台机器的视口让宿主用上了带这一行的那种布局。 - 现在挂载后向上探测一次祖先链,命中就把整层 portal 到
body——body之上fixed必然等于视口,backdrop-filter也不再被截断。 - 探测覆盖七类成因:
transform、filter、backdrop-filter、perspective、contain、container-type、will-change。判定只认引擎真的返回了值:none、auto、normal与空串一律算未设置。(container-type的默认值正是normal,漏掉这一条探测会恒为真。) - 只有命中才逃逸:没有命中时 DOM 位置与结构完全不变。
react-dom取不到时不抛错,只是原地不动 —— 那是旧行为,而不是加载失败。
- 成因是槽位与
- 浅色主题下,关闭状态的开关是一整块白色。 深色主题正常。我们自绘控件下面的那层中性底色取自
--dsw-alias-bg-layer-2,而它是表面 token,浅色主题下解析成白色 —— 于是「白色滑块 + 白色轨道 + 白色面板」糊成一块,既看不出是开关、也看不出当前是开还是关。现在改为从--dsw-alias-label-primary派生(color-mix取 18%):由文字色推导的中性底色,会按构造随主题翻转,不必再维护两套字面量。滑条轨道、hover 底色、引用 chip 底色共用它。- 作用域限定在面板与设置对话框,宿主自己对同一 token 的使用不受影响。每条规则写的仍然是那个 token,所以
color-mix不被支持时旧外观照旧回来。
- 作用域限定在面板与设置对话框,宿主自己对同一 token 的使用不受影响。每条规则写的仍然是那个 token,所以
打包
AGENTS.md不再随包发布。 它是给维护者的指令("七条不能碰的约束""改完src/必须重建");而一旦这个包躺在node_modules里,DSH 的dsh-agent-instructions就会在 agent 触碰该目录时把它当作工作区指令折进会话 —— 它的候选文件名正是['AGENTS.md', 'CLAUDE.md']。于是每一个只是安装了插件的人,会话里都会被塞进几 KB 的"怎么改这个库"。- 做法是把它移出
package.json的files,不是改名也不是删除:在仓库里它是需要的,因为在那里工作的 agent 确实是在改这个插件。所以文件留着。 - 发布包因此从 12 个文件变成 11 个。
src/与build-client.mjs继续保留 ——link:安装要用它们重建。
- 做法是把它移出
兼容性
组合包补丁与 dsh manifest 均未改动,所以现有 profile 照常工作,针对 row id fullscreen-input 写的禁用行仍然有效。更早版本存下的设置读回来行为完全一致。