Files
fusion/packages/dashboard/app/components/settings/sections/VoiceInputSection.css
gsxdsm 11db36187f FN-8572: add voice input settings and model controls
Add project-scoped voice dictation controls with observable local model management.

- Add the Voice Input settings section with opt-in enablement and runtime-safe status handling.
- Add Parakeet v3 model download, removal, progress polling, search, documentation, and regression coverage.
- Add a minor release changeset for Voice Input settings.

Files changed:
 .changeset/fn-8572-voice-input-settings.md         |   7 ++
 docs/dashboard-guide.md                            |   4 +
 docs/settings-reference.md                         |   1 +
 .../dashboard/app/components/SettingsModal.tsx     |   7 +-
 .../VoiceInputSection.modal-visibility.test.tsx    |  19 +++
 .../settings/__tests__/VoiceInputSection.test.tsx  | 137 +++++++++++++++++++++
 .../settings/__tests__/section-keys.test.ts        |   1 +
 .../search/__tests__/settings-search-index.test.ts |   1 +
 .../app/components/settings/search/entries.ts      |   2 +
 .../app/components/settings/section-keys.ts        |   2 +
 .../settings/sections/VoiceInputSection.css        |  48 ++++++++
 .../settings/sections/VoiceInputSection.search.ts  |  14 +++
 .../settings/sections/VoiceInputSection.tsx        | 128 ++++++++++++++++++++
 13 files changed, 370 insertions(+), 1 deletion(-)

Fusion-Task-Id: FN-8572
Fusion-Task-Lineage: 2d2ad0df-3765-4d19-a6f3-7c2b5ca5df95
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-25 02:51:28 -07:00

49 lines
1.0 KiB
CSS

/*
FNXC:VoiceInput 2026-07-28-12:00:
Voice model controls use the existing SettingsFieldRow slots. These styles only
arrange status and standard buttons within those slots, preserving shared settings
spacing and responsive touch targets without creating a parallel panel.
*/
.voice-input-section {
display: grid;
gap: var(--space-xs);
}
.voice-input-section__message {
margin: 0;
color: var(--color-warning);
font-size: var(--font-size-xs);
}
.voice-input-section__status {
color: var(--text-muted);
font-size: var(--font-size-sm);
}
.voice-input-section__status--installed {
color: var(--color-success);
}
.voice-input-section__status--error,
.voice-input-section__status--unknown {
color: var(--color-error);
}
.voice-input-section__status--downloading,
.voice-input-section__status--queued {
color: var(--color-warning);
}
.voice-input-section__actions {
display: flex;
flex-wrap: wrap;
gap: var(--space-sm);
}
@media (max-width: 768px) {
.voice-input-section__actions .btn {
inline-size: 100%;
justify-content: center;
}
}