cmux NEXT: the New Tab page chooses its style again, with a quiet switch
Merged
TE
24d ago+1218+1218+0123456789012345678901234567890123456789-8-8-0123456789
Summary
Leo (2026-10-13): the old New Tab template dots looked, clicked and moved badly, but choosing the style was good. #20127 removed the dots. This PR brings the function back with a new control, not a revert.
- The control. One quiet row under the page with the five style names: Default, Composer, Threads, Console, Classic.
- They are native radios inside the shared
ChoiceGroup. Arrow keys move between styles; Return or Escape goes back to the field. - The current style sits on a small accent fill (5px radius). On a pick, the fill slides over with
--agent-motion-move; there is no motion under Reduce Motion, and none on first paint. - Dim text, a theme-token focus ring, no capsule and no popup.
- They are native radios inside the shared
- What a pick does. The page shows the new style at once and saves it as
tabs.newTabTemplate(newTab.setTemplateโNewTabPage.saveTemplate, through the settings schema as the Settings window writes it). - What is ignored. Terminal and unknown values: New Tab still never opens a terminal by itself.
- Strings. The five names and the group label come back in all 21 locales, from the catalog before #20127.
Bead: cx-txe89.
Testing
- Red (a19a25d7):
bun test test/new-tab-style-switch.test.tsx: "Cannot find module ../newtab/StyleSwitch".NewTabStyleSwitchTestsdoes not build on base.
- Green (head):
bun test test/new-tab-style-switch.test.tsx test/new-tab-no-dots.test.ts: 3 pass.NewTabStyleSwitchTestson the fleet.
- Checks:
gen-strings --check agentPane: ok.- Swift: check-concurrency, check-motion, crash_ratchet, check-system-blue and check-no-godfiles: all ok.
AgentTabStoregets no longer:onNewTabInputReadyis folded to one line, same behavior. bun run check: the only warnings are in base files (DaemonGate.tsx,cloudHome.ts).ui-rules: one base failure (DaemonGate.tsx:244), not from this PR.
- Gallery: new
agent-pane.new-tabstatestyle-switch(pick Threads; the native call and checked state follow).no-template-dotsstill holds.
Changelog
Added: The New Tab page has a quiet style switch again (Default, Composer, Threads, Console, Classic); a pick is saved as tabs.newTabTemplate.
Proof
Behavior tests above; capture to follow in the showcase.
๐ค Generated with Claude Code
Need help on this PR? Tag @codesmith-bot with what you need.
Summary by cubic
Restores choosing the New Tab page's style, which #20127 removed along with the template dots, as a quiet new control instead of a revert.
New Features
- A row under the page offers the five style names (Default, Composer, Threads, Console, Classic) as native radios, with the current style on a small accent fill that slides to a new pick; it sits out of the page's flow so pages lay out as without it.
- A pick shows the new style in place and saves it as
tabs.newTabTemplatethrough the newnewTab.setTemplatenative method; the style names are restored in all 21 locales. - After the picked page mounts, the switch hands focus over: arrow keys keep moving through the styles, while a click returns to the new page's field.
- Terminal and unknown values are ignored: New Tab never opens a terminal by itself.