This component no longer exists. It was in sv11-twango’s manifest when we first indexed it and is not there now — the registry served its inventory on 2026-08-09 and this item was not on it. The install command below will fail. It is kept here because a tutorial somewhere still tells people to run it.
Speech Input
sv11-twango/speech-inputRemovedComponent
A push-to-record speech input with preview, cancel, and a pluggable transcription adapter.
Live preview
live · rendered by the registry
Rendered by sv11-twango on their own page — this is the component running, not a screenshot of it.Install it
npx shadcn@latest add http://sv11.ui.twango.dev/r/speech-input.jsonSource
1<script lang="ts" module>2 import type { HTMLAttributes } from "svelte/elements";3 import type { Snippet } from "svelte";4 import type { TranscriptionAdapter } from "./types.js";5 import type { SpeechInputData, ButtonSize } from "./context.svelte.js";67 export type SpeechInputProps = Omit<HTMLAttributes<HTMLDivElement>, "children" | "onerror"> & {8 /**9 * STT backend bridge that owns the transcription session. Conforms to10 * [`TranscriptionAdapter`](/docs/providers#transcriptionadapter).11 */12 adapter: TranscriptionAdapter;13 /**14 * Shared size applied to `SpeechInputRecordButton` and15 * `SpeechInputCancelButton` via context.16 * @default "default"17 */18 size?: ButtonSize;19 /** Fired once the adapter reports the connection is ready for audio. */20 onStart?: (data: SpeechInputData) => void;21 /**22 * Fired when the user stops recording. Receives a snapshot of the23 * transcript — any in-flight partial is preserved.24 */25 onStop?: (data: SpeechInputData) => void;26 /**27 * Fired when the user cancels recording. Receives the snapshot taken28 * before partial + committed state is cleared.29 */30 onCancel?: (data: SpeechInputData) => void;31 /** Fired on every partial or committed transcript update. */32 onChange?: (data: SpeechInputData) => void;33 /** Fired when the adapter surfaces an error or `start()` rejects. */34 onError?: (error: Error) => void;35 /**36 * Compound children — typically `SpeechInputRecordButton`,37 * `SpeechInputPreview`, and `SpeechInputCancelButton` in any order.38 */39 children?: Snippet;40 /** Bindable ref to the root `<div>` element. */41 ref?: HTMLDivElement | null;42 };43</script>4445<script lang="ts">46 import { onDestroy } from "svelte";47 import { cn } from "$UTILS$.js";48 import { setSpeechInput } from "./context.svelte.js";4950 let {51 adapter,52 size = "default",53 onStart,54 onStop,55 onCancel,56 onChange,57 onError,58 class: className,59 children,60 ref = $bindable(null),61 ...rest62 }: SpeechInputProps = $props();6364 const state = setSpeechInput();6566 // Sync props → state on every render. Adapter reference is stored via67 // configure() as a plain private field, not reactive state — swapping68 // adapters mid-recording is explicitly unsupported and does nothing69 // until the next start() call.70 $effect(() => {71 state.configure({72 adapter,73 callbacks: { onStart, onStop, onCancel, onChange, onError },74 });75 state.size = size;76 });7778// … truncated
What it pulls in
npm packages
Other registry items
