cmux NEXT: an open panel's header toggle reads as on

Merged
TE
7d ago
+145-21

Summary

Leo (2026-10-26): "why is the button not toggled? Why is the button area still, like, just garbage?" Then: "i literally meant the ui depicting it as toggled or not". And on 2026-10-29: "you can just fix it right now, right? Like you don't need a massive rework. You can just edit the fucking web UI."

While its panel is open, a header toggle (Session Info, Files, Preview) now reads as on. It takes the App's toolbar selection fill (--cmux-selection, which WebTheme publishes from tokens.selectionFill, the same fill PaneToolbarView uses) on its own 24px square, with the text's ink. Nothing else in the strip gets a fill, there is still no box behind the strip, and nothing lights on hover.

Takes back #26092: "keep the selected header toggle unboxed". With ink alone, an open panel's toggle looked the same as hover under the default accent, so it read as off. This brings back a fill on the pressed toggle's own square only, which is what Leo's clarification asks for.

Already in base, so this PR doesn't touch them: drag-to-reorder sections (#27291), no plates behind the strip (#27130), and the card floats with no layout shift and grows up to the full room under the header.

Before / after

Before (base)After
Session Info open
Session Info closed

Look at the header's top-right strip. While Session Info is open, its toggle (the list icon) has the selection fill; closed, it's plain. Light: . Captures come from cmux-ci capture <sha> --state tour:session-info[-closed] at a1eff82. The before shots are from the same tours on base 7f7576e.

Capture tour-session-info-closed at a1eff82ec8c9 (fleet build, capture mini, text checked for private data). Its steps check "Session Info open: the toggle is on", then close it with its toggle.

LightDark
lightdark

Testing

  • chat-header-plain-icons: the only fill in the strip is the pressed toggle's selection fill.
  • chat-header-tab-row-surface (browser lane): computed styles. Pressed is rgba(255,255,255,0.12) from --cmux-selection; rest, hover, open menu and focus stay transparent.
  • Webviews on the fleet (cmux-ci test) at 803c3ae: bun run check clean; chat-header-plain-icons 3/3; browser lane chat-header-tab-row-surface and chat-inspector-overlay-toggle 49/49, including the new pressed-and-hovered state in both floating hosts and the toolbar.
  • Independent review: gpt-6-astra (high, fast). The first pass at 6538c16 found one P2: in the floating header, hovering the pressed toggle took its fill away. Fixed in 803c3ae with a test for it; re-review: VERDICT: SHIP at 803c3ae. CI then showed the gallery play agent-pane.header-tools#plain-icons still asserting the old no-fill rule; a1eff82 updates it (pressed tools keep the selection fill, others none). Delta review: VERDICT: SHIP at a1eff82ec8c92a25863712551148e479fabbd9d1.

Changelog

Fixed: A chat header toggle shows as on while its panel (Session Info, Files, Preview) is open

Agent session: agent session

šŸ¤– Generated with Claude Code