Progress

A progress indicator, determinate or indeterminate — bar or circular ring depending on `variant`.

html
<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.

0%0%
35%35%
100%100%

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.

7 of 1007%
7 of 1070%

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.

default
outline
lg
lg-outline
circle
circle-outline
circle-lg
circle-lg-outline

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.

60%
40px
60%
64px
60%
96px

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.

Uploading photos
Uploading

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.

Upload
Upload75%
Upload
75%
Upload

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.

75%
45%
90%
Upload

`variant="circle-outline"`

A hairline boundary ring with the fill inset inside it, instead of a solid background track — the ring equivalent of outline.

75%
45%
90%
Upload

`variant="circle-lg"`

A thicker ring, matching lg's line width — for more prominent circular indicators.

75%
45%
90%
Upload

`variant="circle-lg-outline"`

The thicker ring's outline pairing — matching lg-outline's line width.

75%
45%
90%
Upload

API Reference

Generated from the component's source — props, slots and emits as the component actually declares them.

Props

Prop
Type
Default
Description
number
0
The current progress value.
number
100
The value that represents 100% progress.
"primary" | "secondary" | "success" | "warning" | "error" | "info" | "pending" | "neutral"
'neutral'
The color theme of the progress bar.
"default" | "outline" | "lg" | "lg-outline" | "circle" | "circle-outline" | "circle-lg" | "circle-lg-outline"
'default'
The visual style of the progress indicator. The `circle*` variants render a circular ring instead of a bar, pairing with the bar variants one-to-one (`circle`/`default`, `circle-outline`/`outline`, `circle-lg`/`lg`, `circle-lg-outline`/`lg-outline`) — same line width as their bar counterpart.
number
64
Diameter in pixels for the `circle*` variants. Ignored by the bar variants.
string
Text label displayed above the bar, or below the ring for the `circle*` variants.
boolean
false
Shows the current percentage next to the label.
boolean
false
Displays an indeterminate loading animation instead of a fixed value.
boolean
false
Displays a buffering animation.
number
The amount of progress buffered ahead of the current value, shown as a lighter fill behind it. Ignored when `indeterminate` is true.

Slots

Slot
default