Feedback
Progress
A progress indicator, determinate or indeterminate — bar or circular ring depending on `variant`.
<UiProgress />Model value
modelValue is the current progress, read against max. It's clamped into range, so a value past the maximum fills the track rather than overflowing it, and a negative one reads as empty.
Max
max is the value that counts as complete. Set it to the real total — bytes, steps, seats — and pass raw numbers as modelValue rather than working the percentage out yourself; the readout showValue prints is derived from the pair.
Color
color themes the filled portion. The track behind it stays neutral in every variant, so the fill is what carries the meaning.
Variant
variant picks the shape and the weight at once. The four bar variants and the four circle* ones pair up one-to-one — circle with default, circle-lg with lg, and so on — so a ring always has the same line width as the bar it corresponds to. outline swaps the solid track for a hairline boundary with the fill inset inside it, which reads lighter on a busy surface. Each variant gets its own section further down.
Size
size is the ring's diameter in pixels and applies to the circle* variants only — the bar variants ignore it, since their height comes from the variant. The line width doesn't scale with it, so a large ring stays as fine as a small one and a circle-lg at any diameter still reads as the heavier of the pair.
The four circle* variants (circle, circle-outline, circle-lg, circle-lg-outline) pair one-to-one with the bar variants and support every prop the bar does, including buffering — swaps the bar for a ring sized by size (px), with a line width that always matches its bar counterpart regardless of size.
Label
label names what's progressing — it sits above the bar, or below the ring for the circle* variants. Without it the indicator is a quantity with no subject, which only works when the surrounding copy already says what's being measured.
Show value
showValue prints the percentage next to the label on a bar, or centred inside the ring on a circle* variant. Add it when the exact figure matters as much as the shape — a quota, a download — and leave it off when only the direction does.
Indeterminate
indeterminate runs a looping animation instead of a fixed fill, for work that's underway but whose completion you can't measure. modelValue and buffer are ignored entirely while it's set.
indeterminate ignores modelValue/buffer entirely and just animates.
Buffering
buffering runs an animated stripe over the bar, for progress that's moving but whose rate you can't report.
Buffer
buffer draws a lighter fill behind the current value — how much is loaded ahead of where playback or processing has reached. Ignored while indeterminate is set.
buffer (a second, lighter fill ahead of modelValue) and buffering are independent — you can use either without the other.
`variant="outline"`
A ring-only track with padding around the fill, instead of a solid filled background.
`variant="lg"`
A taller version of the filled track, for more prominent progress indicators.
`variant="lg-outline"`
A taller version of the ring-only outline track.
`variant="circle"`
A circular ring at the same line width as the default bar, sized by size. Everything the bar variants support works here too — buffer, indeterminate, label and value.
`variant="circle-outline"`
A hairline boundary ring with the fill inset inside it, instead of a solid background track — the ring equivalent of outline.
`variant="circle-lg"`
A thicker ring, matching lg's line width — for more prominent circular indicators.
`variant="circle-lg-outline"`
The thicker ring's outline pairing — matching lg-outline's line width.
API Reference
Generated from the component's source — props, slots and emits as the component actually declares them.
Props
"primary" | "secondary" | "success" | "warning" | "error" | "info" | "pending" | "neutral"'neutral'"default" | "outline" | "lg" | "lg-outline" | "circle" | "circle-outline" | "circle-lg" | "circle-lg-outline"'default'numberSlots
default