Skip to content

Status dot

In review
Live · web

Semantic set: success · warning · error · info · neutral

success
warning
error
info
neutral

Presence: dot + label (the label is the accessible text)

OnlineIdleBusyLiveOffline

Live: opacity pulse + expanding ping (calm static ring under reduced-motion)

pulse · streaming
pulse + ping · recording
ping · connected

Sizes: xs 6 · sm 8 · md 10 (dot scales with its label)

Anchored: pinned to a host corner (avatar) and leading a session chip

avatar · online
avatar · live
nockerl-design · docscredential-store · allowlistdueydo · deploy

Outline: a hollow ring (a quieter, lower-emphasis state)

success
warning
error
info
neutral

Live animation is running. The pulse fades opacity and the ping ring expands; both freeze to a calm static ring under reduced-motion.

// Web: React, consuming @dizyx/nockerl-tokens. (Web is the laggard platform; this is the
// canonical API the published @dizyx/nockerl-react package is intended to expose. It unifies
// the shipped idioms: Compose's NockerlStatusDot + PulsingDot and Voice's PulsingDot.)
import { NockerlStatusDot } from '@dizyx/nockerl-react';
// bare dot: name it so the state is never conveyed by color alone
<NockerlStatusDot status="success" ariaLabel="Online" />
// dot + label (the label is the accessible text)
<NockerlStatusDot status="warning" label="Idle" />
<NockerlStatusDot status="error" label="Busy" />
<NockerlStatusDot status="neutral" label="Offline" />
// live: opacity pulse for streaming/recording, an expanding ping ring for "connected"
<NockerlStatusDot status="info" label="Streaming…" pulse ariaLabel="Streaming" />
<NockerlStatusDot status="error" pulse ping ariaLabel="Recording" />
// anchored to a host corner (the avatar-presence + session-chip idiom); pass the
// host surface so the dot sits in a matching notch, and outline for a quieter state
<NockerlStatusDot status="success" surface="var(--color-card-surface1)" ariaLabel="Online" />
<NockerlStatusDot status="info" outline ariaLabel="Idle" />
PropTypeDefaultDescription
statusStatusKind'neutral'Which semantic state to render. The hue comes from the status / dot token ramp.
sizeStatusSize'sm'Dot diameter ramp: xs 6 · sm 8 · md 10 (geometry derived from the spacing scale).
labelstringOptional visible label rendered after the dot (baseline-aligned).
pulsebooleanfalseLive: fade the dot's opacity (the shipped pulse). Use for streaming / recording / connected.
pingbooleanfalseLive ring: an expanding concentric "ping" in the same hue (web-original; see the drift note).
outlinebooleanfalseOutline-only: a hollow ring in the hue instead of a filled dot.
surfacestringThe host surface the dot sits ON. It fills the notch ring so the dot reads as a chip on that surface. Defaults to the canvas; pass a card token on a card.
ariaLabelstringAccessible name. Required when there is no visible label, so the state is never conveyed by color alone (rendered as a role="img" name + sr-only text).

Also accepts the native <span> attributes (e.g. onClick, disabled, id, aria-*, data-*), forwarded straight through, plus a forwarded ref.