Repository navigation
fix(web): pane tabs keep their icon and PR state when you switch tabs - #29080
Conversation
ApprovabilityVerdict: Needs Human Approval Macroscope's review found this PR requires human approval — The change shares tab presentation logic to preserve icons and pull-request state across tab switches. It also adds a line-level oxlint suppression, which requires human review under the configured approval requirements. You can add or adjust custom eligibility rules. Learn more. |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Dismissing prior approval to re-evaluate 24a6f3a
|
Note Written by Verified in a real dev environmentVerified
Matching light-theme captures at 1920×1080, cropped to the pane strip and browser controls. Before is the redesign base, after is the latest PR head. Dark-theme interaction recording: open PR state, Browser, Terminal input, Diff controls, file controls, then chat with the completed real provider turns. Inspected the export and reopened the uploaded result. The animated version below renders inline on GitHub. Not verified
|
b880eaf
into
pingdotgg:maria/redesign/6-workspace-panes
…#29080) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…#29080) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…#29080) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…#29080) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…#29080) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…#29080) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…#29080) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…#29080) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…#29080) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…#29080) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…#29080) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…#29080) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…#29080) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…#29080) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…#29080) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…#29080) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…#29080) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…#29080) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…#29080) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…#29080) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…#29080) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…#29080) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…#29080) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…#29080) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…#29080) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…#29080) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…#29080) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…#29080) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…#29080) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>



Note
🤖 Claude Opus 5.5 on behalf of Oliver
Fix for the redesign stack, targets layer 6 (#28845).
Problem
A pane's tabs changed shape when you switched between them. The active tab and the inactive tabs were drawn by different code with different rules:
Fix
Inactive layout tabs now use the same icon and title source as the active tab.
SurfaceIcon,surfaceTitleand the PR state icon moved out ofRightPanelTabs.tsxintoSurfaceTabIcon.tsx, soPaneTabscan use them without an import cycle. That fixes PR state, and inactive Browser tabs also show the page's favicon and title like the active one.Then the geometry is the same in every state:
PANE_TAB_TITLE_CLASS, used by the active surface tab and the chat tab). Inactive tabs cap at 160px (PANE_INACTIVE_TAB_TITLE_CLASS, used byLayoutPaneTaband inactive surface tabs).Width rule: a title shorter than its cap never truncates while there's room. The active tab shows up to 272px of title. Inactive tabs show up to 160px, so long titles truncate there even with spare room, and a tab can grow or shrink when you switch to or away from it. 160px keeps the surface name plus about 14 characters of thread title ("Browser · Fit Compact Co…"), enough to tell threads apart. 144px leaves only about 8, and 176px brings back the long strip. When room runs out, the existing rules still apply. Inactive tabs shrink first (
shrink-[2]), then fold to icons, and the active tab keeps more of its title.Measured headlessly (1440×900, dark), tab widths in px for chat · Browser · Browser · Terminal while switching the active tab. Titles: chat "Recovery command" (short), Browser (1) "Browser · Fit Compact Control in Small Composers" (long), Browser (2) "Browser · Recovery command" and Terminal "Terminal 1 · Recovery command" (medium). Bold is the active tab, T means truncated.
The short chat title never truncates. The long Browser title gets 272px of title when active and 160px when not. On layer 6 the same title got only 240px while active, less than the ~280px it had while inactive.
The actions notch now draws only when the active surface has actions.
PanelTabActionsregisters with its tab bar while it's mounted, andRightPanelTabsrenders the right notch only while something is registered. The surfaces report this themselves through the same portal they render into, so there's no list of surface kinds. A new surface that renders actions gets the notch automatically.Right notch in the top pane, measured headlessly (1400×860), left · right · width in px:
package.jsonopenThe notch is in place by the first frame after switching to a mounted Diff tab, so it doesn't flicker.
After the fix, every icon is 14px in every state. With two PR tabs (#25319 closed, #28945 open), each keeps its red or green state icon whether active or not.
Before / after
Tab switching, dark theme at 1440×900:
Before: chat → Browser (1) → Browser (2) → Terminal → chat.
https://gh-file-drop-api-prod-galwoqjslzlnws6s.oliver-boorstein.workers.dev/f/1a55e6f02283e9c7/before-switch.mp4
After: same tab-switching sequence.
https://gh-file-drop-api-prod-galwoqjslzlnws6s.oliver-boorstein.workers.dev/f/33c6324fc00f3836/after-switch.mp4
Light theme; requested browser viewport 1400×860. The following crops show the right end of the pane tab strip, with the same scratch repository and a modified
package.jsonin both builds. Browser, Terminal and empty Files lose the empty bump; Diff and Files with an open file retain their action notch.Capture coverage: these short titles do not exercise the title cap. PR tab state not captured: PR detail needs GitHub access on the capture box. The Pull request entry in the pane’s + menu was disabled.
Made with Claude Opus 5.5 in Claude Code.