Progress

A slim horizontal bar that shows completion toward a goal. Use it for determinate work such as uploads, multi-step flows, or quota usage where the percentage is known. The filled track animates via a CSS transform, so updating value produces a smooth transition. Pass value={null} for an indeterminate (unknown-duration) state.

Determinate

The fill keeps a raw bg-primary: blue here isn't marking a choice, it's showing how far along something is, so it doesn't take bg-selected like a chosen state would. max moves the denominator when progress is counted in steps rather than percent.

Indeterminate

value={null} for an operation whose length is unknown. Prefer a real percentage whenever one exists — an indeterminate bar tells the reader only that something is happening.

Upload row

A bar on its own says how far but not how far through what. Name the thing, put the percentage at the other end of the row, and keep the detail underneath. No border on the card — a surface separates from the page by tone alone.

annual-report.pdf 72%

Uploading… 7.2 MB of 10 MB

API

Prop Type Default Description
value number|null 0

Current progress amount. Interpreted relative to max. Use null for an indeterminate bar.

max number 100

Upper bound the value is measured against.

class string

Extra Tailwind classes merged onto the root track (e.g. height, radius).