Skip to content

feat(settings): promote Voices to its own top-level tab (#471)#479

Merged
rosscado merged 1 commit into
mainfrom
feat/471-voices-tab
Jul 2, 2026
Merged

feat(settings): promote Voices to its own top-level tab (#471)#479
rosscado merged 1 commit into
mainfrom
feat/471-voices-tab

Conversation

@rosscado

@rosscado rosscado commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

Why

Founder tasting feedback on Patch A (#470): the voice catalog deserves its own settings tab at the same level as Dictation — Dictation is voice-in, Voices is voice-out.

What

Followed the add-a-tab recipe in doc/preact-component-conventions.md end to end:

  • New entrypoints/settings/tabs/voices/: VoicesPanel.tsx (static skeleton — same load-bearing ids the controller binds), VoicesTab controller (mount + non-blocking VoicesController.init()), and the relocated voices-controller.ts (unchanged logic, git mv).
  • Chat tab slims down: the #voices-preference block leaves ChatPanel, ChatTab drops its VoicesController wiring, and chat.css is deleted outright — everything in it was voice-catalog styling, now voices/voices.css.
  • Registration: sidebar button + panel section in index.html (placed right after Dictation), tabs.set('voices', …) in the orchestrator, audio-lines icon in the tab iconMap, new tabVoices en key.
  • Deep links retargeted: both "More voices" doors (ClaudeVoiceMenu.createMoreVoicesItem, VoiceSelector.addMoreVoicesDoor) now call openSettings("voices"); the existing deep-link plumbing needs no change since the tab registry gates it.

Tests

  • VoicesPanel.spec.tsx (new): skeleton contract — heading/description i18n keys, host pills, catalog container.
  • ChatPanel.spec.tsx: now asserts the voices section is gone from the chat tab.
  • voices-controller.spec.tsx: mounts VoicesPanel (moved import paths).
  • Door specs tightened from toHaveBeenCalled() to toHaveBeenCalledWith("voices") in both curation suites.
  • Layer 3: added voices to the settings e2e tab sweep — verified green locally in real Chrome, plus the full npm test gate.

Closes #471

🤖 Generated with Claude Code

https://claude.ai/code/session_012DZR4Vp9B1RiKVrkfYiM1o

Dictation is voice-in; Voices is voice-out — they belong at the same
level of the settings nav. The voice catalog (host pills + per-host
shelves) moves out of the AI Chat tab into a new Voices tab
(VoicesPanel + VoicesTab + the relocated VoicesController), and the
in-page menus' "More voices" doors now deep-link to it via
openSettings("voices"). chat.css contained only voice-catalog styles,
so it moves wholesale to voices.css.

Closes #471

Co-Authored-By: Claude Fable 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_012DZR4Vp9B1RiKVrkfYiM1o
@rosscado rosscado merged commit c88ea9e into main Jul 2, 2026
2 checks passed
@rosscado rosscado deleted the feat/471-voices-tab branch July 2, 2026 21:54
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.

Settings: promote Voices to its own top-level tab

1 participant