KQ-907 · VOICE/WAVE/ROW
Voice Row
Who is talking, read off the waves. Each row's strip is driven entirely by the levels the host passes — there is no microphone here — with a fixed per-person profile so a voice keeps its shape, and the bars track the level on flick while silent rows flatten to a hairline. The loudest voice above the threshold takes the turn: its name lifts and turns cobalt on snap. Down and Up step the rows, Home and End jump, and Enter pins a row so its strip grows and holds contrast while others speak.
KQ-907 · VOICE/WAVE/ROW
Coldbrook dispatch3 on the call
nobody speaking · pinned nothing
Install
One command — the source lands in your repo. Or copy it from the Code tab.
$ pnpm dlx shadcn@latest add @kinetiq/voice-wave-row
Props
- participants
- VoiceParticipant[]
- default —
- The people on the call as { id, name, muted? }, in the caller's order.
- levels
- Record<string, number>
- default —
- Level 0–1 per id, from the host; a missing id sits at zero.
- threshold
- number
- default 0.12
- Level at or above which a row counts as speaking.
- bars
- number
- default 12
- Bars per strip.
- pinnedId / defaultPinnedId
- string | null
- default null
- The pinned row, controlled or initial.
- onPinnedChange
- (id: string | null) => void
- default —
- Fires as a row is pinned or unpinned.
- onSpeakerChange
- (sentence: string) => void
- default —
- Fires once per frozen change sentence, such as "Marta Ferreira is speaking".
- label
- string
- default —
- Names the row list for assistive technology.
| Prop | Type | Default | Description |
|---|---|---|---|
| participants | VoiceParticipant[] | — | The people on the call as { id, name, muted? }, in the caller's order. |
| levels | Record<string, number> | — | Level 0–1 per id, from the host; a missing id sits at zero. |
| threshold | number | 0.12 | Level at or above which a row counts as speaking. |
| bars | number | 12 | Bars per strip. |
| pinnedId / defaultPinnedId | string | null | null | The pinned row, controlled or initial. |
| onPinnedChange | (id: string | null) => void | — | Fires as a row is pinned or unpinned. |
| onSpeakerChange | (sentence: string) => void | — | Fires once per frozen change sentence, such as "Marta Ferreira is speaking". |
| label | string | — | Names the row list for assistive technology. |