sc1m/design
ComponentsProgress

Progress

Progress component built on Base UI, styled with sc1m tokens.

StableBase UI

Live preview

Uploading
x

Installation

pnpm dlx shadcn@latest add @sc1m/progress

This also merges the token layer and installs src/lib/cn.ts plus @base-ui/react. For the manual route — prerequisites, components.json, and app-level setup — see Installation.

Usage

import {
  Progress,
  ProgressTrack,
  ProgressIndicator,
  ProgressLabel,
  ProgressValue,
} from "@/components/ui/progress";

Composition

Every part is a separate export. Progress owns state; the rest are presentational and must appear in this order.

Progress├── ProgressLabel├── ProgressValue└── ProgressTrack    └── ProgressIndicator

Example

The preview above, with its source. This is the demo module verbatim, so the code and the thing it renders cannot drift apart.

Uploading
x
<Progress {...storyArgs} className="w-64">
  <div className="flex items-center justify-between">
    <ProgressLabel>Uploading</ProgressLabel>
    <ProgressValue />
  </div>
  <ProgressTrack>
    <ProgressIndicator />
  </ProgressTrack>
</Progress>

API reference

Each part forwards every prop of its Base UI counterpart; the tables list the ones declared on the part itself. See Base UI's reference for the inherited element props.

Progress

PropTypeDefaultDescription
formatIntl.NumberFormatOptionsOptions to format the value.
getAriaValueText((formattedValue: string, value: number | null) => string)Accepts a function which returns a string value that provides a human-readable text alternative for the current value of the progress bar.
localeIntl.LocalesArgumentThe locale used by Intl.NumberFormat when formatting the value.
maxnumber100The maximum value.
minnumber0The minimum value.
valuenumber | nullThe current value.

Accessibility

Behaviour, focus management, and ARIA wiring come from Base UI's Progress — see its reference for the full keyboard map.

Design tokens

The component reads semantic tokens only — no raw colour, radius, or duration appears in its source. Override the token, not the component.

TokenApplied to
--accentProgressIndicator
--brand-radius-smProgressTrack, ProgressIndicator
--fgProgressLabel
--fg-mutedProgressValue
--surfaceProgressTrack

Source

src/components/ui/progress/progress.tsx — no next/* imports, so it drops into any React 19 + Tailwind v4 app.