Task progress and quota use — uploads, imports, leave balance, plan limits. Linear and circular, indeterminate, an automatic quota tone, and values formatted for the current locale (42% / %42).
About 30 seconds left
Installation
The whole kit as one package — get updates by bumping the version. Add the styles to globals.css: @import "@vamos-ui/react/styles.css";
Usage
import { Progress, ProgressCircle } from "@vamos-ui/react";
<Progress label="Uploading" value={42} showValue />
<ProgressCircle aria-label="Profile complete" value={72} size="lg" />Animates transform: scaleX, never width.
Segmented step progress is the Stepper component, not a Progress variant.
Examples
Sizes and states
2 / 4 / 8 px. The accent bar turns success when it completes; a failed task uses tone="danger".
Indeterminate
value={null} slides a bar and drops aria-valuenow. With reduced motion it shows a static hatched half fill.
Large exports can take a few minutes.
Quota
tone="auto": over 80% warning, at or over the limit danger. display="fraction" reads "52,400 of 50,000".
Upload list (CMS)
xs bars in file rows; each one is named for its file.
- hero-winter-menu.jpg2.4 MB
- lamb-tandir-close-up.jpg68%
- sahlep-bar.png21%
- allergen-list.pdfQueued
Circular
sm sits inline next to text; md and lg can show the value or your own content in the centre.
Profile 72% complete
Add a photo and your tax office.
API
Progress
| Prop | Type | Default |
|---|---|---|
valueCurrent value. null → indeterminate. Values above max are allowed (quota overrun). | number | null | — |
maxUpper bound. | number | 100 |
toneauto: > 80% warning, ≥ 100% danger. accent turns success when complete. | "accent" | "success" | "warning" | "danger" | "auto" | "accent" |
sizeBar height 2 / 4 / 8 px. | "xs" | "sm" | "md" | "sm" |
labelVisible label, linked with aria-labelledby. Without it pass aria-label. | ReactNode | — |
showValueValue at the end of the label row, or your own. | boolean | (value, max) => ReactNode | false |
displayHow the value reads, visibly and in aria-valuetext: "42%" or "1,240 of 5,000". | "percent" | "fraction" | "percent" |
valueTextOverride the announced value text. | string | — |
hintSmall text under the bar, linked with aria-describedby. | ReactNode | — |
labelsDictionary namespace "progress". | { of?: string; loading?: string } | — |
ProgressCircle
| Prop | Type | Default |
|---|---|---|
value / max / tone / display / valueTextSame model. | as Progress | — |
size18 / 40 / 64 px. | "sm" | "md" | "lg" | "md" |
showValueValue in the centre (md, lg). | boolean | true for lg |
childrenCentre content instead of the value (an icon). | ReactNode | — |
aria-labelRequired accessible name. | string | — |