fix(shell): keep an overflow:hidden fallback beneath clip + guard the cascade

shift fix) — but as a BARE declaration. Engines without clip support
(Safari < 16, older Chromium) drop an unsupported declaration at parse
time, which leaves the host `overflow: visible`: no clipping at all,
and the historical "collapsed panels extend the document's scrollable
area, whole page draggable" regression returns on those engines.

Declare `overflow: hidden` BEFORE `overflow: clip`: clip-aware engines
apply the later clip (identical behavior to #453), while old engines
fall back to hidden and keep clipping (with its pre-clip
scrollability — the same state they had before #453, strictly better
than visible). The cascade order is the contract.

Also extends the rule comment (the fix guards the whole
scroll-into-view class — focus moving into off-viewport regions,
nested iframes/workbenches claiming focus while loading — not just the
reveal case) and adds tests/panel-host-css.spec.ts guarding the
cascade (hidden first, clip last), the fixed viewport layer, and that
the degraded rule never reintroduces overflow. Contract documented in
the integration guide §12 (root anchor bullet).
This commit is contained in:
chendefine
2026-09-02 23:51:13 +08:00
committed by Menghuan1918
parent 5337ef77dd
commit 96650fa189
3 changed files with 60 additions and 2 deletions
+12 -1
View File
@@ -48,7 +48,18 @@
hidden box stays a PROGRAMMATICALLY scrollable container, and a
scrollIntoView fired from panel content (the file tree's "Show in
folder" reveal) scrolled the host itself — shifting the whole panel,
tab bar included, out of the viewport with no way to scroll back. */
tab bar included, out of the viewport with no way to scroll back.
The same class covers any scroll-into-view fixup — focus moving into
an off-viewport region, a nested iframe/workbench claiming focus
while it loads — so the guard belongs on the layer itself, not per
call site. The `hidden` declaration BEFORE `clip` is an old-engine
fallback, not dead style: engines without `clip` support (Safari < 16)
drop the `clip` line, which would leave this box `overflow: visible`
— no clipping at all, and the page-draggable regression above
returns. With `hidden` first those engines keep the clipping (plus
its pre-clip scrollability) while every clip-aware engine applies
the later `clip`. */
overflow: hidden;
overflow: clip;
}