Desktop #806 follow-ups: panel/inbox fixes + top-bar backdrop#814
Merged
Conversation
Code-review + testing follow-ups on the right-side panel chrome work: - OverlayPanelBackdrop: add `h-auto` to PANEL_OVERLAY_CLASS so the floating overlay's height is driven by `top-11 bottom-0` instead of the base `h-full` resolving to 100vh and hanging below the viewport. - UserProfilePanel: add an explicit `splitPaneClamp` prop. The `min(widthPx, calc(100% - 300px))` width is only correct when the panel sits beside a controller-managed sibling. ChannelPane passes the clamp; Pulse (standalone/floating) omits it and uses the configured width. - AgentSessionThreadPanel: in single-panel mode, pad the body to clear the 76px header (mirrors MessageThreadPanel) instead of letting the overlay branch win with pt-4. - HomeView: don't default-select the first inbox item before the viewport width is measured. Unknown width (homeInboxWidthPx === 0) no longer behaves as wide, so a narrow Home cold-loads into the list, not detail. - Tests: add unit coverage for inboxViewHelpers (filter/depth/reaction target) and agent transcript prompt + author-pubkey parsing. Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co> Signed-off-by: Wes <wesbillman@users.noreply.github.com>
The Agents, Projects, Project-detail, and Workflows screens offset their scroll content with pt-14 to clear the global search chrome, but unlike the Home and channel pages they rendered no backdrop behind it — so scrolled content showed through the top bar under the search. Extract the blurred strip the inbox panels already used into a shared TopChromeBackdrop component (aria-hidden, pointer-events-none, z-40, with the bg/blur + supports-[backdrop-filter] and dark variants), parameterized by height. Render it as the first child of a relative, non-scrolling wrapper on each affected page so it covers every view state: - Pages with no sub-header use the default h-10 (ends on the chrome divider, keeping padding balanced around the search bar). - The inbox panels keep h-[76px] for their own header, now via the same component instead of a duplicated class string. The UserProfilePanel and AgentSessionThreadPanel strips are intentionally left inline: they carry their own before:/after: divider pseudo-elements and different background opacities, so routing them through the shared component would require class prop-drilling that hurts more than the duplication. Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co> Signed-off-by: Wes <wesbillman@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Follow-ups from code review and testing of #806.
Logic fixes (#806 review)
h-autotoPANEL_OVERLAY_CLASSso the floating overlay's height is driven bytop-11 bottom-0instead of the baseh-full(which resolved to 100vh and hung the panel below the viewport). Fixes both the profile and agent-session overlays since they share the class.splitPaneClampprop. Themin(widthPx, calc(100% - 300px))clamp is only correct beside a controller-managed sibling pane.ChannelPanepasses the clamp; Pulse (standalone/floating) omits it and uses the configured width directly.isSinglePanelView ? "pt-[76px]" : ...), mirroringMessageThreadPanel, instead of the overlay branch winning withpt-4.homeInboxWidthPx === 0). Unknown width no longer behaves as wide, so a narrow Home cold-loads into the list, not detail.Top-bar transparency + shared component
The Agents, Projects, Project-detail, and Workflows screens offset their scroll content with
pt-14to clear the global search chrome but rendered no backdrop behind it, so scrolled content showed through the top bar.shared/ui/TopChromeBackdrop.tsx: the aria-hidden, pointer-events-none blurred strip (z-40, bg/blur +supports-[backdrop-filter]and dark variants), height viaclassName.InboxListPane,InboxDetailPane), which previously duplicated theh-[76px]class string. Pages with no sub-header use the defaulth-10(ends on the chrome divider, balanced padding around the search bar).UserProfilePanelandAgentSessionThreadPanelstrips are intentionally left inline — they carry their ownbefore:/after:divider pseudo-elements and different bg opacities, so routing them through the shared component would need class prop-drilling that hurts more than the duplication.Tests
inboxViewHelpers.test.mjs—matchesInboxFilter,getReactionTargetId(incl. malformed e-tag),getContextMessageDepth(depth, missing-parent stop, cycle guard).agentSessionTranscriptHelpers.test.mjs—parsePromptText(Sprout-event content/kind/hex-pubkey extraction, lowercasing, fallbacks) +extractPromptText.Verification
Reviewer notes
ProjectDetailScreenshows ~186 changed lines butgit diff -wconfirms it's pure re-indentation from wrapping the return in arelativediv; the only substantive change is the import + wrapper +<TopChromeBackdrop />.