KQ-901 · CALL/BAR

Call Bar

A call, ongoing, in the header. The bar lives in flow: a wrapper glides its ResizeObserver-measured height from zero on glide while the row rides down from 8px, so a call arriving pushes the thread rather than covering it. Ringing pulses a halo behind Join on a repeating tween; joining stops it, swaps to a plain Leave, and starts an elapsed figure held in one linearly driven motion value that pauses with the tab. Escape declines a ringing call but never hangs up a joined one.

KQ-901 · CALL/BAR
Coldbrook depotRinging · 2 people waiting

No call

Install

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

$ pnpm dlx shadcn@latest add @kinetiq/call-bar

Props

state / defaultState
"none" | "ringing" | "joined"
default "none"
Controlled or initial call state.
onStateChange
(state: CallState) => void
default —
Fires from Join, Decline and Leave.
title
string
default —
The room or caller the call belongs to; shown and spoken.
participants
string[]
default []
Names already in the call; drives the count sentence and the disc.
startSeconds
number
default 0
Seconds already elapsed when the bar joins.
onElapsedChange
(seconds: number) => void
default —
Fires once per whole second while joined.
onJoin
() => void
default —
Fires after the state settles on joined.
onLeave
(seconds: number) => void
default —
Fires after the state settles on none, with the run's final seconds.
joinLabel
string
default "Join"
Copy on the primary control while ringing.
disabled
boolean
default false
Holds both controls; a running call still counts and still reads.