Skip to content

Desktop #806 follow-ups: panel/inbox fixes + top-bar backdrop#814

Merged
wesbillman merged 2 commits into
mainfrom
brain/pr806-followups
Jun 2, 2026
Merged

Desktop #806 follow-ups: panel/inbox fixes + top-bar backdrop#814
wesbillman merged 2 commits into
mainfrom
brain/pr806-followups

Conversation

@wesbillman

Copy link
Copy Markdown
Collaborator

Follow-ups from code review and testing of #806.

Logic fixes (#806 review)

  • 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 (which resolved to 100vh and hung the panel below the viewport). Fixes both the profile and agent-session overlays since they share the class.
  • UserProfilePanel: add an explicit splitPaneClamp prop. The min(widthPx, calc(100% - 300px)) clamp is only correct beside a controller-managed sibling pane. ChannelPane passes the clamp; Pulse (standalone/floating) omits it and uses the configured width directly.
  • AgentSessionThreadPanel: in single-panel mode, pad the body to clear the 76px header (isSinglePanelView ? "pt-[76px]" : ...), mirroring MessageThreadPanel, instead of the overlay branch winning with pt-4.
  • HomeView: don't default-select the first inbox item before the viewport width is measured (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-14 to clear the global search chrome but rendered no backdrop behind it, so scrolled content showed through the top bar.

  • New shared/ui/TopChromeBackdrop.tsx: the aria-hidden, pointer-events-none blurred strip (z-40, bg/blur + supports-[backdrop-filter] and dark variants), height via className.
  • Used by 6 call sites: the 4 page screens above + the 2 inbox panels (InboxListPane, InboxDetailPane), which previously duplicated the h-[76px] class string. Pages with no sub-header use the default h-10 (ends on the chrome divider, balanced padding around the search bar).
  • UserProfilePanel and AgentSessionThreadPanel strips are intentionally left inline — they carry their own before:/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.mjsmatchesInboxFilter, getReactionTargetId (incl. malformed e-tag), getContextMessageDepth (depth, missing-parent stop, cycle guard).
  • agentSessionTranscriptHelpers.test.mjsparsePromptText (Sprout-event content/kind/hex-pubkey extraction, lowercasing, fallbacks) + extractPromptText.

Verification

  • typecheck clean, biome clean (547 files), file-size check passes, 425/425 desktop unit tests pass.

Reviewer notes

  • ProjectDetailScreen shows ~186 changed lines but git diff -w confirms it's pure re-indentation from wrapping the return in a relative div; the only substantive change is the import + wrapper + <TopChromeBackdrop />.
  • CSS changes are visual — worth an eyeball on Agents/Projects/Workflows/Project-detail (light + dark, scrolled) and the narrow-window overlay.

wesbillman and others added 2 commits June 2, 2026 08:47
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>
@wesbillman wesbillman requested a review from a team as a code owner June 2, 2026 15:27
@wesbillman wesbillman merged commit a25ca5d into main Jun 2, 2026
15 checks passed
@wesbillman wesbillman deleted the brain/pr806-followups branch June 2, 2026 15:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant