Skip to content

Component · 17

Progress

A ruled trough filled with colour, for work that has a measurable end. With no known length it shows a block sweeping across instead. Announced as a progress bar. Built on Base UI.

Determinate

Uploading
x
tsx
<Progress label="Uploading" value={64} showValue />

Indeterminate

Pass null when you cannot say how long it will take. With reduced motion it sweeps more slowly instead of stopping.

Preparing
x
tsx
<Progress label="Preparing" value={null} />

Another range and a name only for screen readers

x
tsx
<Progress aria-label="Step 3 of 5" value={3} min={0} max={5} />

Complete

Done
x
tsx
<Progress label="Done" value={100} showValue />

Props

PropTypeDefaultDescription
valuenumber | nullrequiredThe current value. null means working, but the length is unknown.
min / maxnumber0 / 100The range. The fill is the value's position within it.
labelReactNode-Visible name. Without it, pass aria-label.
showValuebooleanfalseShow the value (a percentage by default) beside the label.
formatIntl.NumberFormatOptionspercentHow the value is written, e.g. a unit instead of a percentage.
getAriaValueText(formatted, value) => string-A friendlier spoken value than the bare number.

Update value from state as the work advances. The bar does not announce every change; for long jobs also give a status message when it finishes.