Skip to content

Progress bar

In review
Live · web

Determinate: drag the slider; mark it complete or failed

Exporting session…64%
Progress64%

Indeterminate: work of unknown length (streaming). Reduced-motion freezes it

Connecting to gateway…

Buffer: a lighter secondary track (e.g. received) ahead of the primary (played)

Streaming response64%

Segmented: discrete steps (step 3 of 5)

Deploy pipeline3 / 5
Step

Sizes: thin (the app's 3 to 4dp) and thick

Thin72%
Thick72%

Status: complete and failed (icon + text, never color alone)

Snapshot uploaded100%
Done
Build artifacts80%
Failed at 80%: exited 1

Circular: determinate ring with a center % (indeterminate circular is the spinner)

25%Indexing
64%Export
100%Done

Track + fill are all var(--token). The track is a recessed well at radius-track (the app's 2dp squared shape), and the fill is the plain cyan accent with no threshold banding (that is the context gauge). The width grows; the fill never tweens. The island is live.

// Web: React, consuming @dizyx/nockerl-tokens. (Web is the laggard platform. Spec + live demo,
// not yet exported from @dizyx/nockerl-react; promotion is tracked.)
// Determinate: a value 0 to 100 drives the cyan fill width. The bar is the GENERAL
// progress primitive: plain cyan, NO threshold banding (that is the ContextGauge).
<ProgressBar value={64} label="Exporting session…" size="thick" />
// Indeterminate: omit `value` for work of unknown length (a sliding track).
<ProgressBar label="Connecting to gateway…" indeterminate />
// Buffer: a lighter secondary track behind the primary fill.
<ProgressBar value={48} buffer={70} label="Streaming response" />
// Segmented / stepped: discrete cells, `value` of `max`.
<ProgressBar value={3} max={5} variant="segmented" label="Deploy pipeline" />
// Completion + failure. Color is never the only signal (icon + text follow).
<ProgressBar value={100} tone="success" label="Snapshot uploaded" />
<ProgressBar value={80} tone="error" label="Build artifacts" />
// Determinate ring with a center % (indeterminate circular = the NockerlSpinner).
<ProgressBar value={64} variant="ring" label="Export" />
PropTypeDefaultDescription
valuenumberCurrent progress (0 to max). Drives the cyan fill width / filled segments / ring sweep. Omit for indeterminate.
maxnumber100Upper bound. Use a small integer (e.g. 5) with the segmented variant for stepped progress.
label *stringAccessible name; rendered left of the % readout. Bound to the body.small type role.
variant'linear' | 'segmented' | 'ring''linear'Continuous bar, discrete cells, or a determinate ring with a center %.
indeterminatebooleanfalseUnknown-length work: a sliding track. Omits aria-valuenow, sets aria-busy; the slide freezes under reduced-motion.
buffernumberOptional secondary progress (0 to max) shown as a lighter track behind the primary fill (e.g. received vs. played).
size'thin' | 'thick''thin'Track height. thin matches the app (3 to 4dp); thick is the chunkier readout form.
tone'accent' | 'success' | 'error''accent'Fill color. accent is the plain cyan (no banding); success/error pair with an icon + message (never color alone).