Progress Bar
Visually indicates how much progress a user or the system has made toward a goal. Four intents let you communicate sentiment — from neutral onboarding steps to critical capacity warnings. Always pair with nearby context so the bar is never the only signal.
preview
props
| Prop | Type | Default | Description |
|---|---|---|---|
value | number | required | Fill percentage, 0–100. Values outside this range are clamped. |
intent | 'core' | 'positive' | 'warning' | 'negative' | 'core' | Controls the colour of the track and fill. Match the intent to the meaning of the data. |
label | string | — | Optional text displayed to the right of the bar. Omit to hide the label slot entirely. |
aria-label | string | — | Accessible name for the progress bar. Provide this or aria-labelledby when the bar has no visible label. |
aria-labelledby | string | — | ID of the element that labels this progress bar. |
usage
A progress bar communicates quantity and direction, but not meaning on its own. Always place it alongside a title, label, or supporting text so users understand what the bar represents. Use the intent that matches the real state of the data — not the one that looks best.
When to use
- In a card or table row to show progress toward a goal alongside a label
- To indicate onboarding or setup completion (core intent)
- To communicate fundraising targets, capacity levels, or delivery rates
- When the value can change over time and the visual update helps the user track progress
Do not use
- As the only signal — always provide a label, title, or nearby text to explain what is being tracked
- With an intent that contradicts the data — a nearly full capacity bar should be negative, not positive
- For binary states — use a badge or status indicator instead
intents
Choose the intent based on what the value means to the user, not the value itself. A 90% fill on a fundraising target is positive; the same fill on a capacity limit is negative.
in context
Progress bars work well inside cards and table rows. Use them alongside a clear title or row label so the bar always has supporting context.