Skip to content

Replace the compact right drawer with full-page tool tabs - #2752

Closed
brsbl wants to merge 10 commits into
bb/update-mobile-pwa-home-experience-thr_3f2n4iexkrfrom
bb/compact-panel-full-page-tabs-thr_3f2n4iexkr
Closed

Replace the compact right drawer with full-page tool tabs#2752
brsbl wants to merge 10 commits into
bb/update-mobile-pwa-home-experience-thr_3f2n4iexkrfrom
bb/compact-panel-full-page-tabs-thr_3f2n4iexkr

Conversation

@brsbl

@brsbl brsbl commented Aug 31, 2026

Copy link
Copy Markdown
Collaborator

Human comments

Stack outcome relative to main

The compact right panel no longer rises as a dimmed 92dvh bottom drawer. The stack replaces it with a right-side system: Info uses a compact shelf that translates the live page left, while every tool tab—including New Tab—expands from the right to a full-width surface. New Tab also selects and renders its own production content instead of leaving the prior Info content visible.

Layer 1 also contains the compact-home/recents redesign, sticky Recent header, left-sidebar shelf, route-progress feedback, cold-navigation placeholders, provider-health caching, and immutable provider-logo caching. This PR is the focused second layer that adds full-page non-Info tabs and fixes the New Tab selection/content transition.

What was wrong in this layer

Layer 1 moved the right panel from the bottom drawer to a right shelf, but all tabs were still constrained to the shelf's 298.67px width. Selecting New Tab could change the tab strip without changing the rendered Info content, leaving file search and other tool surfaces without a usable phone-width canvas.

What changed

  • Info remains a 298.67px right shelf so the underlying page stays visible.
  • Every non-Info tab transitions to a 393px full-page surface above fixed app chrome.
  • New Tab now selects and renders the production New Tab actions after its loading skeleton settles.
  • Opening the left sidebar closes the right panel so the two compact shelves cannot compete for the page.
  • Compact shelf stories mount the real CompactSecondaryPanelShelf, ThreadSecondaryPanel, FilePreview, RootComposeCompactHome, SidebarProvider, and SidebarInset composition; no substitute file markup or generic product wrapper remains.

No wire changes; HOST_DAEMON_PROTOCOL_VERSION is unchanged.

Screenshots

Chrome for Testing 151.0.7922.71, 393×852 at DPR 2, using the same dev database, route, viewport, interaction, and settled-content state.

Cumulative behavior versus main

Before is the stack merge base (f4bbc2fe8); after is this PR head (6d031d265).

main — New Tab in a dimmed bottom drawer Layer 2 — New Tab as a full-page surface from the right

This layer's New Tab fix

Before is the final parent head (04d18307f); after is this PR head (6d031d265).

Parent — New Tab remains in the 298.67px shelf and Info content remains visible This layer — New Tab expands to 393px and renders its production actions

How you verified

  • On the exact merge base, the settled production New Tab dialog measured top=68.17, width=393, height=783.83 with an 80% black backdrop—the old bottom-drawer presentation.
  • On the exact PR head, the same production flow measured parent state=open, width=298.671875; head state=full, width=393, with new-tab-actions present after the content skeleton cleared.
  • Ladle was restarted on port 61002 and the compact shelf stories were exercised at 393×852: closed returns the page to left=0; shelf translates the production page by -298.68px; Full page fills 393px; Many tabs selects sidebar.tsx and renders real FilePreview controls.
  • Every affected story ID loaded through its production component subtree with zero runtime exceptions. All remote CI gates pass; no local CI-equivalent command was run.

BB-Thread-ID: thr_wftu7bh9ez

AGENT GENERATED

brsbl added 10 commits August 30, 2026 19:33
Both compact drawers could be engaged at once. Opening the sidebar while the
right panel was open left the panel at data-state="shelf" and visible at x=110
while the page translated the other way to +320, so the panel sat on top of the
displaced page and the thread was no longer reachable without backing out of
two overlapping drawers.

The earlier guard only hid the panel while it was closed, which is why this
survived: an open panel has nothing to hide it when the sidebar takes over the
page transform. Closing the panel on the sidebar's own visibility signal keeps
exactly one drawer engaged and returns the user to the canonical thread page.

Desktop is unaffected; the effect is gated on the compact drawer path.
Going full page translates the page inset fully off screen, which exposes the
sidebar underneath. The sidebar trigger does not live in that inset: it sits in
a position:fixed chrome layer at z-50, so it kept painting while the panel at
z-0 slid under it. The trigger's PanelLeft glyph at x=18 and the panel's Info
glyph at x=23 then drew on top of each other as one merged icon.

Raising only the full page state above that layer restores occlusion.
elementFromPoint(20, 24) now resolves to the shelf instead of the chrome. The
299px shelf state stays at z-0 so the chrome remains usable over the page, and
no overlap exists there anyway: the shelf starts at x=110.
The stories drew a fake page header and grey placeholder blocks instead of bb,
so they demonstrated the shelf geometry against something that does not exist
in the product. They now mount the real ThreadSecondaryPanel with its real
fixed tabs and thread metadata, over the real compact home behind it, so the
shelf and full page states are shown against the surfaces they actually cover.

Presentation follows the active tab exactly as the app derives it, so selecting
Info collapses to the shelf and opening the file tab expands to full page.
CompactShelfTabs rendered the real ThreadSecondaryPanel inside a plain 299px
box and labelled it "compact shelf". The panel was real but the shelf was not,
and now that a real CompactSecondaryPanelShelf story exists the label pointed
readers at the wrong thing. Renamed to PhoneWidthTabs and relabelled as what it
is: the panel body at shelf width, isolating tab-strip behavior.

The shelf story gains ManyTabs so overflow, truncation, and the pinned slot are
also exercised inside the real shelf at real shelf geometry.
…to bb/compact-panel-full-page-tabs-thr_3f2n4iexkr
…to bb/compact-panel-full-page-tabs-thr_3f2n4iexkr
@brsbl brsbl changed the title Open compact right-panel tabs as full pages Replace the compact right drawer with full-page tool tabs Aug 31, 2026
@brsbl

brsbl commented Aug 31, 2026

Copy link
Copy Markdown
Collaborator Author

Superseded by focused native stack #2763: #2758#2759#2760#2761#2762. Replacement layer #2762 has cumulative content byte-for-byte identical to this PR head; review should continue on the focused stack.

@brsbl brsbl closed this Aug 31, 2026
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