From 0f9d2fba2f422fcaf55218d56f0ea3e5f0275964 Mon Sep 17 00:00:00 2001 From: bowenliang123 Date: Fri, 25 Sep 2026 03:49:50 +0800 Subject: [PATCH] fix(client): keep the right-sidebar tab's own scroller on dsh 0.1.7+ MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The 0.1.7 sidebar wraps every tab body in a definite-height `.tabBody` whose `overflow: hidden` clips the grown tab root out of reach, while the dockkit pane body above it never sees the overflow — the Context pane in the right Sidebar could not scroll at all. The sidebar-scoped root now keeps its own scroller (the shared `height: 100%` + `overflow-y: auto` chrome, inset aside): the height resolves against the 0.1.7 tab body or the 0.1.5 pane body alike, and degrades to the pane scrolling wherever neither height resolves — one scroller either way. --- src/client/revealScroll.ts | 5 +++-- src/client/styles/base.css | 22 +++++++++++++--------- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/client/revealScroll.ts b/src/client/revealScroll.ts index aee3130..eae2b38 100644 --- a/src/client/revealScroll.ts +++ b/src/client/revealScroll.ts @@ -2,8 +2,9 @@ * Scroll an element's nearest scrollable ancestor so the element tops that * scrollport. The jump's landing reveal needs this host-agnostic: the * conversation tab scrolls the shared `[data-conversation-scroll]` container - * while the right Sidebar scrolls dockkit's pane body (a CSS-module class, - * no stable attribute of its own), so the walk takes whichever ancestor + * while the right Sidebar's scroller differs per generation (dockkit's pane + * body — a CSS-module class with no stable attribute — on the 0.1.5 line, the + * tab root itself on the 0.1.7 line), so the walk takes whichever ancestor * actually scrolls — the rect delta lands the anchor flush regardless of the * container's current position. `document.body` ends the walk: the page * itself never scrolls. False — never a throw — when no ancestor scrolls (the diff --git a/src/client/styles/base.css b/src/client/styles/base.css index 8bc0758..79a85fa 100644 --- a/src/client/styles/base.css +++ b/src/client/styles/base.css @@ -8,17 +8,21 @@ */ .lc-root { padding: 16px 20px 32px; overflow-y: auto; height: 100%; box-sizing: border-box; color: var(--dsw-alias-label-primary); font-size: 13px; } /* - Right Sidebar panel (dsh 0.1.5-rc.1+): the dockkit pane body scrolls and - its `.pane` clips overflow — so the tab root drops its own scroller and lets - the pane own both. The body draws NO padding of its own (dockkit leaves each - tab its own insets), so the root keeps a 12px frame on all four sides — the - harness's own body inset — instead of the wide shared chrome. Scoped by the - panel's own markers, which exist only inside the right column (the open panel - and the float host that carries a tab dragged out of it); the conversation tab - and the /context modal are unaffected. + Right Sidebar panel (dsh 0.1.5-rc.1+): the body draws NO padding of its own + (dockkit leaves each tab its own insets), so the root keeps a 12px frame on + all four sides — the harness's own body inset — instead of the wide shared + chrome. The root KEEPS its own scroller: the 0.1.5 line renders the tab + straight into the scrolling dockkit pane body, while the 0.1.7 line wraps it + in a definite-height `.tabBody` whose `overflow: hidden` would clip a grown + root out of reach — `height: 100%` resolves against whichever definite-height + host the running generation provides (and degrades to the root growing under + an auto-height one, where the pane scrolls instead: one scroller either way). + Scoped by the panel's own markers, which exist only inside the right column + (the open panel and the 0.1.5 float host that carries a tab dragged out of + it); the conversation tab and the /context modal are unaffected. */ [data-sidebar-right-open] .lc-root, -[data-sidebar-right-float-host] .lc-root { height: auto; overflow: visible; padding: 12px; } +[data-sidebar-right-float-host] .lc-root { padding: 12px; } /* The Context tab chip's emblem: held at its drawn size in the title's flex line (dockkit's `.tabTitle`; the files chip's own titleIcon idiom). */ .lc-title-icon { flex: none; }