Skip to content

Progress

Visualize completion for uploads, sync, and multi-step work. Pair a label with a live value when the percentage matters.

Examples

Basic

Uploading
x

Animated

Syncing
x

Overview

Progress shows how far a task has gone. Compose label, value, track, and indicator under a root that holds the numeric value. Built on Base UI for accessible progress semantics.

tsx

import {
  Progress,
  ProgressLabel,
  ProgressValue,
  ProgressTrack,
  ProgressIndicator,
} from "@standard-ui/react"

<Progress value={60}>
  <ProgressLabel>Uploading</ProgressLabel>
  <ProgressValue />
  <ProgressTrack>
    <ProgressIndicator />
  </ProgressTrack>
</Progress>

Usage

Value

Pass a number from 0 to 100 (or your custom max). Update it as work progresses so the indicator width and ProgressValue stay in sync.

tsx

<Progress value={uploadPercent}>
  <ProgressLabel>Uploading</ProgressLabel>
  <ProgressValue />
  <ProgressTrack>
    <ProgressIndicator />
  </ProgressTrack>
</Progress>

Label and value

Use ProgressLabel for the task name and ProgressValue for the formatted percentage. The root lays them out in a two-column grid above the track.

tsx

<ProgressLabel>Syncing</ProgressLabel>
<ProgressValue />

API

Parts mirror Base UI Progress. The root accepts value and related props.

PartRole
ProgressRoot state and numeric value.
ProgressLabelAccessible name for the task.
ProgressValueFormatted current value (e.g. percentage).
ProgressTrackBackground bar that spans the full width.
ProgressIndicatorFilled portion reflecting the current value.
PropTypeDefaultDescription
valuenumber | nullCurrent progress value.
maxnumber100Maximum value for a complete bar.

Guidelines

Do

  • Label the task so users know what is in progress
  • Update value as work advances — avoid a stuck bar
  • Prefer determinate progress when you can estimate completion

Don't

  • Don't use progress for instant actions that finish in under a second
  • Don't omit a label when multiple progress bars appear together
  • Don't animate wildly — keep transitions short and ease-out