KQ-871 · PRESENCE/DOT

Presence Dot

Four states drawn as four shapes, so colour is never the only signal: online fills, away takes a crescent bite, busy is crossed by a bar, offline is a hollow dimmed ring. The bite and the bar are holes in one SVG mask that scale in on snap, away breathes a slow mirrored ring, and every change rings once from a key rather than a timer. The sentence is frozen at the moment of the change and spoken once by a polite status region.

KQ-871 · PRESENCE/DOT
Ines MoreauInes Moreau is online

Coldbrook dispatch · yard team

Ines Moreau — online · 0 changes

Install

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

$ pnpm dlx shadcn@latest add @kinetiq/presence-dot

Props

status
"online" | "away" | "busy" | "offline"
default
The state; drives the shape, the colour, the breath and the ring.
name
string
default
Whose presence it is; opens the spoken sentence.
label
React.ReactNode
default
Visible text beside the mark. Omit it and the status word is drawn instead.
detail
string
default
A quieter trailing clause ("back at 15:30"), spoken with the status.
size
"sm" | "md" | "lg"
default "md"
8, 10 or 14px marks; the breath and the ring scale with it.
showWord
boolean
default true
Draws the status word beside the mark, so the shape is never alone.
ring
boolean
default true
The one-shot ring on a change; turn it off in dense rosters.
onAnnounce
(sentence: string) => void
default
Fires from an effect once per frozen sentence, after a change.