// components/VoiceField.tsx // Drop-in widget that wraps a textarea with: // • push-to-talk mic button (live transcription via Web Speech API) // • speak-back 🔊 button (manual narration of the current text) // • speak-back mute toggle (persisted to localStorage) // • modal symmetry: tracks whether the user is currently in "voice" or // "text" mode and notifies the parent via onInputModeChange so a sibling // agent-reply component can auto-speak its reply when the user spoke // // Designed to slot into any Ysterbaard wizard form. Controlled component // — value + onChange behave like a normal