Skip to content

desktop: move global search into sidebar header and remove vestigial top band#1150

Merged
tlongwell-block merged 6 commits into
mainfrom
sidebar-search
Jun 19, 2026
Merged

desktop: move global search into sidebar header and remove vestigial top band#1150
tlongwell-block merged 6 commits into
mainfrom
sidebar-search

Conversation

@tlongwell-block

Copy link
Copy Markdown
Collaborator

What

Two related desktop-layout changes:

  1. Search → sidebar. Move the global search out of the center-column topbar into the pinned sidebar header (search on top, Home/nav below, always visible above the scroll region). The results popover now anchors to the sidebar column instead of centering across the window. Typeahead, live results, and keyboard nav are unchanged.
  2. Remove the vestigial top band. With search gone from the topbar, the ~40px chrome inset above the channel and thread/aux pane headers is now empty space. Drop it so those headers sit flush at the top.

Scope guardrails

  • The macOS window-controls row (traffic lights + sidebar-toggle + back/forward) and the sidebar's own top-chrome inset are preserved — the band removal is scoped to channel + thread panes only.
  • Window drag-to-move and double-click-to-maximize are unchanged: they're driven by a window-global clientY ≤ 44 handler in AppShell, which this PR does not touch. The channel/thread header now lives in that 44px zone (its non-interactive parts drag/maximize; its action buttons are correctly excluded) — same model the sidebar header already uses.
  • Home/inbox panes keep their inset via the new default-off flush prop on TopChromeInsetHeader.

Before / after (band removal)

Before After
before after

Full window (after):

full-after

Validation

  • tsc --noEmit ✅, vite build
  • Pre-push suite green (desktop-test, mobile-test, rust-tests, desktop-tauri-test)
  • Reviewed by Max (shared-layout scope + drag/maximize path confirmed against code)

13 files, +113/−171.

Tyler Longwell added 6 commits June 19, 2026 14:25
…top band

Move the global search out of the center-column topbar into the pinned
sidebar header (search on top, Home/nav below, always visible above the
scroll region), anchoring the results popover to the sidebar column.

With search gone from the topbar, remove the now-empty ~40px chrome inset
above the channel and thread/aux pane headers so they sit flush at the top.
The macOS window-controls row and the sidebar's own top-chrome inset are
preserved; window drag/maximize is unchanged (a window-global top-44px
handler, untouched here). Home/inbox panes keep their inset via the
default-off `flush` prop on TopChromeInsetHeader.

Co-authored-by: Tyler Longwell <tlongwell@block.xyz>
Signed-off-by: Tyler Longwell <tlongwell@block.xyz>
Co-authored-by: Tyler Longwell <tlongwell@block.xyz>

Signed-off-by: Tyler Longwell <tlongwell@block.xyz>
Co-authored-by: Tyler Longwell <tlongwell@block.xyz>
Signed-off-by: Tyler Longwell <tlongwell@block.xyz>
The inbox loading skeleton and the no-feed error state still carried the pt-14 top inset, leaving a transient vestigial band before the real flush headers rendered. Drop it to match the flush treatment applied to the rest of the Home/Agents/Workflows/Projects panels.

Co-authored-by: Tyler Longwell <tlongwell@block.xyz>
Signed-off-by: Tyler Longwell <tlongwell@block.xyz>
Removing the vestigial TopChromeBackdrop also dropped the pt-14 that doubled as clearance for the global window-drag region (AppTopChrome's fixed top-0 z-20 h-10 strip, which is draggable so it can't be pointer-events-none). With only pt-4, the first-row controls (Workflows' Create CTA, Projects' back button, the Agents library header) landed under that strip and Playwright clicks were intercepted — the Desktop Smoke E2E failure Max flagged.

Restore clearance with the purpose-built topChromeInset.padding token (40px = the drag-strip height) instead of an arbitrary pad, on the Workflows/Projects/Agents loaded views, their loading skeletons (CardListLoadingBody, AgentsLoadingBody), the Projects detail screen, and the Home feed-error state. No visible band returns; interactive content just clears the drag strip. navigation + workflows + agents e2e all green.

Co-authored-by: Tyler Longwell <tlongwell@block.xyz>
Signed-off-by: Tyler Longwell <tlongwell@block.xyz>
The vestigial-band cleanup dropped topChromeInset.padding from the
channel header chrome wrapper. Every other flush panel (Workflows,
Projects, Agents, Home, the loading skeletons) kept that 40px inset as
invisible clearance for the global window-drag strip when the visible
band was removed; the channel header was the one surface that lost it
outright.

The wrapper's height is measured into --buzz-channel-content-top-padding,
which drives the message scroll container's top padding. Losing 40px
tipped the Welcome timeline from "just barely scrollable" to "exactly
fits": with no overflow, the bottom-anchored welcome intro (mt-auto) had
no slack to redistribute, so it never reflowed down when the composer
banner dismissed. onboarding.spec.ts:1063 asserts that reflow and timed
out deterministically. Restoring the inset returns the channel pane to
the same clearance as its sibling panels and the same overflow margin as
main; the reflow fires and the test passes.

No visible band returns -- the header still sits flush; this only
restores the invisible drag-strip clearance.

Co-authored-by: Tyler Longwell <tlongwell@block.xyz>
Signed-off-by: Tyler Longwell <tlongwell@block.xyz>
@tlongwell-block tlongwell-block merged commit c488d84 into main Jun 19, 2026
25 checks passed
@tlongwell-block tlongwell-block deleted the sidebar-search branch June 19, 2026 21:08
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