suiss/ui · Component
Progress
A horizontal bar that shows the completion of a task.
Progress is an open-source component from suiss/ui for React, React Native, SwiftUI and Jetpack Compose. The @esuiss/ui CLI copies its source into your project, so you own the code.
Progress wraps the progress primitive of the chosen base. Progress is the root and always renders a ProgressTrack containing a ProgressIndicator after its children. Add a ProgressLabel to name the bar and a ProgressValue to show the formatted value; they sit on one row above the track.
Use Progress for determinate or indeterminate task progress.
Installation
CLI
Works in any project with a components.json. See Installation for the one-line registry setup. Or use the suiss/ui CLI:
Manual
- Install the dependencies and add the
cnhelper:
- Copy the source into
components/ui/progress.tsx:
- Update the import paths to match your project.
Usage
Pass value as a number between min and max (by default 0 and 100). Set value={null} for an indeterminate state when the amount of work is unknown.
The track and indicator are rendered for you, so ProgressTrack and ProgressIndicator are not needed inside Progress children. ProgressValue shows the formatted value, a percentage by default.
Examples
With label
A bar with a label and its current value shown above the track.
Complete
A labelled bar at 100.
Indeterminate
A labelled bar with value={null} for work of unknown length.
API Reference
Progress
The root that holds the value and renders the track and indicator.
Also accepts the props of the primitive part it wraps.
ProgressTrack
The full-width rail behind the indicator.
Also accepts the props of the primitive part it wraps.
ProgressIndicator
The filled portion of the track that reflects the value.
Also accepts the props of the primitive part it wraps.
ProgressLabel
Text that names the progress bar.
Also accepts the props of the primitive part it wraps.
ProgressValue
The formatted current value, aligned to the end of the row.
Also accepts the props of the primitive part it wraps.
Accessibility
- The root has the
progressbarrole witharia-valuenowreflecting the value. ProgressLabelprovides the accessible name. Without it, passaria-label.- When
valueisnull,aria-valuenowis omitted to signal an indeterminate state.
Notes
- Styling hooks:
data-slotvaluesprogress,progress-track,progress-indicator,progress-labelandprogress-value. - The track uses
mutedand the indicator usesprimary; the indicator animates width changes.
Progress renders a thin track with an indicator whose width follows value. The width animates with a Reanimated spring, clamped between 0 and 100 percent. Any children, such as ProgressLabel and ProgressValue, are placed in a row above the bar.
Use it for uploads, downloads and other tasks with a known amount of work.







