Build · New

Progress

Shows how much of a task is done: uploads, goals and multi-step flows. Use it when progress can be measured; use Spinner when it can't.

Preview

Mirrored is the same English content laid out right to left: it separates a mirroring bug from a translation one.

Installation

SoonInstalling from the registry opens at launch. Until then the command below is what it will be.
npx shadcn@latest add @ritla/progress

Dependencies it brings: @base-ui/react

Usage

import { ProgressBar } from "@/components/ui/progress";
<ProgressBar value={60} label="Uploading statement.pdf" />

Examples

Sizes and indeterminate

sm, md and lg are 2, 4 and 8px tall; value={null} shows diagonal stripes when the amount isn't known.

Stepped

ProgressBarStepped with 3 to 8 steps: done, current and upcoming, read as “Step 3 of 8”.

Circle

ProgressCircle for upload rows and small spaces, 16, 20 or 24px, and it needs a label.

API reference

ProgressBar

PropTypeDefaultDescription
valuenumber | nullDone from min to max; null is indeterminate.
min / maxnumber0 / 100The range.
labelReactNodeWhat's progressing.
showValuebooleantrueFigma's Show text: the percentage at the inline end.
size"sm" | "md" | "lg""md"Figma's Size.
numerals / aria-label…Numeral system, and a name when there's no visible label.

ProgressBarStepped

PropTypeDefaultDescription
stepsnumber3 to 8.
currentnumberSteps done; the next one is in progress.
label / size…The label under the bar, and the size.

ProgressCircle

PropTypeDefaultDescription
value / min / maxnumberAs on the bar.
labelstringRequired: there's no visible text.
size16 | 20 | 2416The size.

Accessibility

ARIA

  • role="progressbar" with aria-valuenow, aria-valuemin, aria-valuemax and the value text, named by its label.
  • Don't show it for waits under a second, and don't let it go backwards.

Arabic and RTL notes

Mirrors

  • The bar fills from the inline start: from the right in Arabic, and the steps too.

Does not mirror

  • The circle runs clockwise from the top in both directions.
Numerals
The percentage follows numerals or KanzProvider (٤٠٪).
Arabic typography
The label is label-14 Medium, the stepped label label-16.
Mixed-direction text
Put Latin file names in <bdi> inside an Arabic label.

All components ›