feat(settings): promote Voices to its own top-level tab (#471)#479
Merged
Conversation
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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:
entrypoints/settings/tabs/voices/:VoicesPanel.tsx(static skeleton — same load-bearing ids the controller binds),VoicesTabcontroller (mount + non-blockingVoicesController.init()), and the relocatedvoices-controller.ts(unchanged logic,git mv).#voices-preferenceblock leavesChatPanel,ChatTabdrops itsVoicesControllerwiring, andchat.cssis deleted outright — everything in it was voice-catalog styling, nowvoices/voices.css.index.html(placed right after Dictation),tabs.set('voices', …)in the orchestrator,audio-linesicon in the tabiconMap, newtabVoicesen key.ClaudeVoiceMenu.createMoreVoicesItem,VoiceSelector.addMoreVoicesDoor) now callopenSettings("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: mountsVoicesPanel(moved import paths).toHaveBeenCalled()totoHaveBeenCalledWith("voices")in both curation suites.voicesto the settings e2e tab sweep — verified green locally in real Chrome, plus the fullnpm testgate.Closes #471
🤖 Generated with Claude Code
https://claude.ai/code/session_012DZR4Vp9B1RiKVrkfYiM1o