Voice Input
kai-voice-input
A self-contained mic button that records audio, hands the Blob to your transcription function, and fires the result — plug in any speech-to-text backend to get voice dictation.
- Shadow DOM
- 2 events
- Function-property pattern
- Framework agnostic
- Disableable
Preview
Section titled “Preview”Assign your transcribe function to the element and listen for kai-transcription:
<kai-voice-input id="voice"></kai-voice-input>
<script type="module"> import '@kitn.ai/ui/elements';
const voice = document.getElementById('voice');
voice.transcribe = async (blob) => { const form = new FormData(); form.append('audio', blob, 'recording.webm'); const res = await fetch('/api/transcribe', { method: 'POST', body: form }); return (await res.json()).text; };
voice.addEventListener('kai-transcription', (e) => { document.getElementById('prompt').value = e.detail.text; });</script>transcribe— assign anasync (blob: Blob) => Promise<string>function once the element is in the DOM.- To handle audio yourself, skip
transcribeand listen forkai-audio-capturedinstead; it fires{ blob }immediately after recording stops. disabledprevents interaction while the assistant is streaming or mic access is pending.
Examples
Section titled “Examples”Default
Section titled “Default”Without a transcribe property the raw audio is still emitted via kai-audio-captured.
Disabled
Section titled “Disabled”| Property | Type | Default | Notes |
|---|---|---|---|
| transcribe | (audio: Blob) => Promise<string> | — | Transcriber the host supplies — records audio, returns the text. This is a **function-valued property** (`el.transcribe = async blob => '...'`) because a value-returning callback can't be modelled as a fire-and-forget event. |
| disabled | boolean | false | Disable the mic button (non-interactive). |
Events
Section titled “Events”| Event | Detail | Notes |
|---|---|---|
| kai-audio-captured | | Raw audio captured (before transcription) — for hosts that prefer to handle transcription themselves instead of via the `transcribe` property. |
| kai-transcription | | Transcription completed (the `transcribe` property resolved). |
Composed from
Section titled “Composed from”This element wraps these SolidJS components — reach for them directly when you need finer control than the props expose.
VoiceInput