KQ-853 · VOICE/BUBBLE

Voice Bubble

Hold the mic and a waveform pill opens on snap; a 100ms tick advances a seeded level for each bar, re-targeted on flick so the wave reads as the voice, while a clock counts. Releasing after a real hold resamples the take into a 32-bar note that the parent appends, and its bubble rises on recoil with a play control and a wave that is a slider: press and drag scrub it, Arrow keys step a second, Home and End jump. No microphone is read; a tap shows a hold hint instead.

KQ-853 · VOICE/BUBBLE
  1. 9:41

Hold the mic to record a voice note

Hold to record and release to send. Space or Enter toggles the take; Escape discards it.

Idle · 1 note

Install

One command — the source lands in your repo. Or copy it from the Code tab.

$ pnpm dlx shadcn@latest add @kinetiq/voice-bubble

Props

notes
VoiceNote[]
default
The thread, oldest first: id, from (me or peer), whole seconds, a wave of 0..1 levels, and an optional time.
onSend
(note: { seconds: number; wave: number[] }) => void
default
Fires from a release or a Space/Enter stop after a real hold, with the seconds and a 32-bar profile.
onCancel
() => void
default
Fires from Escape during a take, or a release that was only a tap.
onRecording
(seconds: number | null) => void
default
Fires at the start of a take and on each whole second; null when the take ends.
onPlayChange
(id: string | null) => void
default
Fires with the note that started playing, or null when playback stops.
maxSeconds
number
default 30
The take stops itself here.
peerName
string
default "Them"
Names the other side in the bubbles' sentences.
label
string
default
Names the thread list for assistive technology.