Per-pane full-width tab mode with prominent title header
Adds a per-pane fullWidthTabMode: when enabled, the pane header renders a prominent full-width title of the selected tab instead of the tab strip. Same height as the tab bar, live title updates, subtle index/count badge when more tabs exist, right-click anywhere on the header opens the selected tab's context menu (the exit path), no new-tab button. Adds TabContextAction.toggleFullWidthTab, per-pane controller API (setFullWidthTabMode/isFullWidthTabMode/toggleFullWidthTabMode/fullWidthTabModePaneIds), en+ja strings, and tests (163 passing).
Consumed by the cmux PR that wires this to the command palette and tab context menu (link added there once open).
š¤ Generated with Claude Code
Need help on this PR? Tag /codesmith with what you need. Autofix is disabled.
Summary by cubic
Adds a per-pane full-width tab mode that replaces the tab strip with a prominent, full-width title header for the selected tab. The header matches tab chrome, supports drag & drop, keeps key tab/pane actions, and toggling from context now selects the target tab first; itās opt-in per pane.
-
New Features
- Header shows the selected tabās title and icon with live updates, adds an index/total badge, aligns with tab bar chrome (height, active indicator, separator), and respects tab bar visibility; no newātab button.
- Preserves actions: rightāclick opens the selected tabās context menu with a
toggleFullWidthTabitem (label switches between āFull Width Tabā and āExit Full Width Tabā); adds a tab switcher menu via the badge and a pane actions menu for configured split buttons (BonsplitConfiguration.splitButtons). - Dragging from the header starts a tab drag with preview; dropping
.tabTransfer/.fileURLappends at the end with a focusāaware hover highlight. A sharedSplitViewController+TabDraghelper is used by the header, tab strip, and manual reorder. BonsplitControllerhandlesTabContextAction.toggleFullWidthTab; addsonTabFullWidthToggleRequestfor hosts, plus perāpane APIs:setFullWidthTabMode(_:inPane:),isFullWidthTabMode(inPane:),toggleFullWidthTabMode(inPane:),fullWidthTabModePaneIds; en/ja strings and tests.
-
Bug Fixes
- Toggling fullāwidth from a tabās context menu selects that tab first to keep state consistent.
- Cancelled tab drags clear state and restore oneāshot event monitor cleanup to prevent leaks.
Summary by CodeRabbit
- New Features
- Added Full Width Tab Mode with a dedicated full-width selected-tab header layout when enabled for a pane.
- Added a context-menu action to enter/exit full-width tab mode; tab title/icon presentation updates accordingly.
- Exposed controller APIs to query, set, and toggle full-width mode per pane, plus a list of pane IDs currently in that mode.
- Bug Fixes
- Full-width mode state is now reliably cleared when a pane is closed, including after split replacements.
- Localization
- Added translations for āFull Width Tabā and āExit Full Width Tabā in supported languages.