Progress

Shows completion for a known process. 4px bar; the label carries the percentage.

Uploading40%

Run

Alkmaar / 06:00

Issue 03 is on the cylinder. Forty percent through the run.

On press40%

Use it for

  • Determinate progress with a known total.
  • label to show the name and the percentage above the bar.

Not for

  • Unknown duration; use Spinner.
  • Static ratios like storage used; a number reads better.

Three ways in. They share one source, so the pixels match whichever you pick.

1. Import the package

npm install @noorddev/vlak-react

// once, next to your app's root
import "@noorddev/vlak-react/css";

import { Progress } from "@noorddev/vlak-react";

Precompiled React and one stylesheet. No compiler to configure. Per-component imports work too: @noorddev/vlak-react/components/progress.

2. Vendor the source

npx @noorddev/vlak-cli add progress

The StyleX leaf lands in components/vlak/, for your own compiler to own. See StyleX.

3. Through shadcn

npx shadcn add https://vlak.dev/r/progress.json

The same registry item, installed by shadcn's CLI.

CSS only

<link rel="stylesheet" href="node_modules/@noorddev/vlak/css/vlak.css" />

No React. Link vlak.css and use the markup and classes below.

import { Progress } from "@noorddev/vlak-react";

<Progress label="Uploading" value={40} />
<Progress value={3} max={5} aria-label="Steps done" />

Progress

PropTypeDefaultDescription
valuerequirednumber
maxnumber100
labelReactNodeLabel above the bar; it names the bar. The percentage lives here, never inside the bar.

Also accepts HTMLAttributes<HTMLDivElement>.

<div class="rs-progress-head"><span id="upload-label">Uploading</span><span>40%</span></div><div class="rs-progress" role="progressbar" aria-labelledby="upload-label" aria-valuemin="0" aria-valuemax="100" aria-valuenow="40"><span class="rs-progress-fill" style="width:40%"></span></div>
.rs-progress.rs-progress-head.rs-progress-fill