Progress
A determinate progress family in three shapes: a linear Bar, a segmented Steps counter, and a circular Ring.
Implementation previewEvery example. In one place.
Explore every named example, including states, compositions, and theme variants.
Example source
packages/design-system/src/components/status/Progress/Progress.stories.tsxExport BarImplementation preview Local Storybook build 0.2.0-preview.1. Source specification status does not approve this runtime.
Stories + source JSON ↗Local specification source status: preview. Implementation preview pending sign-off.
A determinate progress family in three shapes: a linear Bar, a segmented Steps counter, and a circular Ring.
Implementation API 3 entry points · source-derived preview
Read the actual callable API and preserve its composition constraints. Each union branch is a complete alternative; props marked forbidden cannot be supplied.
import { Progress } from '@cloakedinc/design-system';Progress.BarProgressBarProps
packages/design-system/src/components/status/Progress/ProgressBar/ProgressBar.tsx:13
| Prop | Type | Presence | Notes |
|---|---|---|---|
value | number | Required | Progress value from 0 to 100. |
size | ProgressSize | undefined | Optional | Named size for the track height. Defaults to `sm` for the compact existing treatment.Source default: 'sm' |
pulsing | boolean | undefined | Optional | Pulses the fill to signal an active/indeterminate state.Source default: false |
label | ReactNode | Optional | Optional caption shown above the bar. |
valueLabel | ReactNode | Optional | Explicit visible value shown opposite the label. |
showValue | boolean | undefined | Optional | Shows a rounded percentage value when `valueLabel` is not provided.Source default: false |
ariaLabel | string | undefined | Optional | Accessible name for the value; omit when the bar is purely decorative. |
testId | string | undefined | Optional | Optional test selector. Lands on the track itself, not the label group. |
Progress.StepsProgressStepsProps
packages/design-system/src/components/status/Progress/ProgressSteps/ProgressSteps.tsx:14
| Prop | Type | Presence | Notes |
|---|---|---|---|
total | number | Required | Step count; truncated to a whole number and clamped to 1-12. |
completed | number | Required | Steps finished so far; clamped to `0..total`. |
size | ProgressSize | undefined | Optional | Named marker size. Defaults to `sm` for the compact existing treatment.Source default: 'sm' |
showActiveStep | boolean | undefined | Optional | Marks the next incomplete step as active.Source default: false |
label | ReactNode | Optional | Optional caption shown above the steps. |
valueLabel | ReactNode | Optional | Explicit visible value shown opposite the label. |
showValue | boolean | undefined | Optional | Shows a compact completed/total value when `valueLabel` is not provided.Source default: false |
showStepNumbers | boolean | undefined | Optional | Renders step numbers inside each marker.Source default: false |
stepLabels | readonly ReactNode[] | undefined | Optional | Optional compact labels shown beneath each step marker. |
ariaLabel | string | undefined | Optional | Accessible name for the value; omit when the markers are purely decorative. |
testId | string | undefined | Optional | Optional test selector. Lands on the step row itself, not the label group. |
Progress.RingProgressRingProps
packages/design-system/src/components/status/Progress/ProgressRing/ProgressRing.tsx:13
| Prop | Type | Presence | Notes |
|---|---|---|---|
value | number | undefined | Optional | Progress value from 0 to 100.Source default: 0 |
size | ProgressSize | undefined | Optional | Named ring size. Defaults to `sm` for the compact existing treatment.Source default: 'sm' |
label | ReactNode | Optional | Optional caption shown beneath the ring. |
valueLabel | ReactNode | Optional | Explicit visible value shown inside the ring. |
showValue | boolean | undefined | Optional | Shows a rounded percentage value inside the ring when `valueLabel` is not provided.Source default: false |
ariaLabel | string | undefined | Optional | Accessible name for the value; omit when the ring is purely decorative. |
testId | string | undefined | Optional | Optional test selector. Lands on the ring itself, not the label group. |
Only explicit destructured parameter initializers are extracted. Other runtime defaults remain in implementation source.
Overview
Determinate progress in three shapes chosen by context. All three take a 0-100
value (Progress.Steps derives it from completed / total).
Use when
Pick the shape by how the progress reads in place, not by preference.
Progress.Bar and Progress.Ring are both in use today; Progress.Steps is
available but currently unused in the app.
Steps
Progress.Steps marks completed, active, and upcoming stages. Add showStepNumbers
for numbered markers and stepLabels for per-step captions.
Size and pulsing
size is sm (default, compact), md, or lg and is shared by all three shapes;
reach for lg to emphasize progress on a standalone screen. pulsing (Bar) animates
the fill to signal an active operation.
Props
Controls below are for Progress.Bar; Progress.Steps and Progress.Ring expose
their own args in the Steps and Ring stories above.
Usage by variant
| Choice | Use when | Avoid when |
|---|---|---|
Shape: Progress.Bar | A value along a known scale that fills as work completes — a percentage on a screen or row. | |
Shape: Progress.Steps | A small, fixed count of discrete stages — a setup wizard or onboarding flow. | Stages that each carry a title, description, or timestamp — use Timeline, which shows event detail. |
Shape: Progress.Ring | The same 0-100 value in a compact circular badge for cards and tight corners. |
Component specification
$schema
../../../specs/component-spec.schema.jsonParts
- Id
- bar
- Label
- Progress.Bar
- Description
- Linear track that fills from 0 to 100.
- Required
- true
- Id
- steps
- Label
- Progress.Steps
- Description
- Segmented markers for a small fixed count of stages.
- Id
- ring
- Label
- Progress.Ring
- Description
- Circular badge form for cards and tight corners.
Allowed Design Choices
- Variants
- Bar
- Label
- Bar
- Description
- Linear determinate track.
- Steps
- Label
- Steps
- Description
- Discrete stage markers.
- Ring
- Label
- Ring
- Description
- Compact circular badge.
- Sizes
- Sm
- Label
- Small
- Description
- Compact default track, marker, and ring.
- Md
- Label
- Medium
- Description
- Mid-scale track, marker, and ring.
- Lg
- Label
- Large
- Description
- Emphasis track, marker, and ring.
Variants
- Id
- bar
- Label
- Bar
- Description
- Linear determinate progress.
- Platforms
- ios
- android
- web
- Id
- steps
- Label
- Steps
- Description
- Segmented stage progress.
- Platforms
- ios
- android
- web
- Id
- ring
- Label
- Ring
- Description
- Circular determinate progress.
- Platforms
- ios
- android
- web
Sizes
- Id
- sm
- Label
- Small
- Description
- The compact existing treatment.
- Id
- md
- Label
- Medium
- Description
- A mid-scale treatment.
- Id
- lg
- Label
- Large
- Description
- An emphasis treatment for standalone screens.
Measurements
- Id
- bar-track-height-sm
- Label
- Bar track height (small)
- Kind
- exact
- Token
- --cds-size-4
- Value
- 4
- Unit
- px
- Applies To
- bar
- Id
- bar-track-height-md
- Label
- Bar track height (medium)
- Kind
- exact
- Token
- --cds-size-8
- Value
- 8
- Unit
- px
- Applies To
- bar
- Id
- bar-track-height-lg
- Label
- Bar track height (large)
- Kind
- exact
- Token
- --cds-size-12
- Value
- 12
- Unit
- px
- Applies To
- bar
- Id
- ring-diameter-sm
- Label
- Ring diameter (small)
- Kind
- exact
- Token
- --cds-size-32
- Value
- 32
- Unit
- px
- Applies To
- ring
- Id
- ring-diameter-md
- Label
- Ring diameter (medium)
- Kind
- exact
- Token
- --cds-size-48
- Value
- 48
- Unit
- px
- Applies To
- ring
- Id
- ring-diameter-lg
- Label
- Ring diameter (large)
- Kind
- exact
- Token
- --cds-size-64
- Value
- 64
- Unit
- px
- Applies To
- ring
- Id
- group-gap
- Label
- Label and track gap
- Kind
- exact
- Token
- --cds-space-8
- Value
- 8
- Unit
- px
- Applies To
- bar
- steps
- ring
- Id
- step-dot-size-sm
- Label
- Step dot size (small)
- Kind
- exact
- Token
- --cds-size-8
- Value
- 8
- Unit
- px
- Applies To
- steps
- Id
- step-dot-size-md
- Label
- Step dot size (medium)
- Kind
- exact
- Token
- --cds-size-12
- Value
- 12
- Unit
- px
- Applies To
- steps
- Id
- step-dot-size-lg
- Label
- Step dot size (large)
- Kind
- exact
- Token
- --cds-size-16
- Value
- 16
- Unit
- px
- Applies To
- steps
Layout
- Alignment
- An optional label and value sit above the bar/steps; the ring centers its value.
- Flow
- Each shape is self-contained; Bar and Steps fill their container width while Ring is inline.
- Notes
- Use Timeline when each stage carries its own title, description, and timestamp.
Typography And Color
- Typography
- Label
- Caption and value
- Description
- Labels and values use the body-small ramp.
- Token
- --cds-type-body-small-size
- Colors
- Label
- Fill
- Description
- Completed progress uses the brand accent.
- Token
- --cds-brand
- Label
- Track
- Description
- The unfilled track uses the graph background.
- Token
- --cds-graph-bg
States
- Id
- determinate
- Label
- Determinate
- Description
- Fill reflects the current 0 to 100 value.
- Id
- pulsing
- Label
- Pulsing
- Description
- The bar fill pulses to signal an active or indeterminate operation.
- Id
- complete
- Label
- Complete
- Description
- All steps or full value are filled with the brand accent.
Behavior
- Label
- Shape choice
- Description
- Pick Bar for a scale, Steps for a small fixed count of stages, and Ring for a compact badge.
- Label
- Value clamping
- Description
- Values are clamped to the 0 to 100 range before rendering.
Accessibility
- Label
- Meaningful progress
- Description
- Set ariaLabel to expose role=progressbar with min, max, and current value.
- Label
- Decorative progress
- Description
- Omit ariaLabel to hide purely decorative progress from assistive tech.
Content Adaptation
- Label
- Optional value
- Description
- showValue renders a rounded percentage or completed/total count opposite the label.
- Label
- Step labels
- Description
- Steps can render numbers inside markers and captions beneath them.
Motion Haptics
- Motion
- Label
- Fill transition
- Description
- The bar fill eases to its new width; the pulsing fill animates until it settles.
- Haptics
- Label
- No feedback
- Description
- Progress is non-interactive and requests no haptics.