KQ-897 · MUTE/BELL

Mute Bell

A bell that goes quiet for a stated length of time. Pressing it unfolds a duration picker in flow below the row on glide against a ResizeObserver-measured height, and choosing one folds the picker, swings the bell on a four-keyframe tween and draws the slash across it on flick. A ring around the bell then drains a second at a time while the row's second line reads the time left in place of the topic, cross-faded in one grid cell; Escape folds the picker and returns focus to the bell.

KQ-897 · MUTE/BELL
#dispatchMorning run, gate B
#night-shiftRota for the week

Both channels on · pick a duration

Install

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

$ pnpm dlx shadcn@latest add @kinetiq/mute-bell

Props

channel
string
default
The channel's name, printed after a hash.
topic
string
default
The row's second line while notifications are on.
durations
MuteDuration[]
default 30 minutes / 1 hour / 8 hours / Until I say
The picker's stops; an ms of 0 means until it is turned back on.
open / defaultOpen
boolean
default false
Controlled or initial picker state.
onOpenChange
(open: boolean) => void
default
Fires from the bell, Escape, or a chosen duration.
onMuteChange
(mute: MuteDuration | null) => void
default
Fires with the chosen duration, or null when notifications come back on.
onExpire
() => void
default
Fires once when the countdown reaches zero.
speed
number
default 1
Countdown milliseconds per real millisecond; the demo runs it fast so the ring drains while you watch.
label
string
default
Names the channel in the spoken sentences; defaults to the hashed channel.