Progress
Determinate and indeterminate progress as a bar or a ring, with four tones.
Live preview
Source
The exact file rendered in the preview above.
components/demos/progress.tsx
components/ui/progress.tsx
Demo source — adapt to your project. Foundry is not published as a package.
Usage
Determinate when you know the proportion, indeterminate when you do not. Omitting `value` drops `aria-valuenow`, which is what tells assistive tech "in progress, duration unknown" rather than "0 percent".
- Values are clamped and rounded, so an out-of-range number cannot overflow the track.
- Use the ring in dashboard tiles where a full-width bar would waste horizontal space.
- Tone should reflect the meaning of the number: 92% storage is a warning, 92% test coverage is not.
Variants and states
Every entry below is a genuine difference in behaviour or layout, and every one of them is visible in the preview above.
- Determinate bar
- Indeterminate bar
- Ring
- Four tones
- Two heights
Accessibility
- Role
- `role="progressbar"` with min, max and, when known, `aria-valuenow`.
- Value text
- `aria-valuetext` reads "In progress" when indeterminate rather than announcing a misleading zero.
Foundry implements published ARIA patterns and is tested against them. No WCAG certification is claimed — see the accessibility documentation for what is and is not covered.
Related
All componentsSpinner
A pure-CSS indeterminate indicator that inherits currentColor and costs nothing to render.
starter3 variantsSkeleton
Placeholder geometry for resolving content, in line, block, circle and button shapes.
starter5 variantsMetric
A KPI tile with trend direction, invertible "good" semantics and a decorative sparkline.
starterFeatured4 variants