Prodular UI

Feedback

Progress

A determinate bar for tasks and quotas, with a label and value row and status colors for thresholds.

npx prodular-ui add progress

Label and value

The label sits left, the value right, the bar below. ProgressValue formats a percentage unless you pass a function.

Importing customers.csv
x
Seats
x

Status

Color the bar by threshold: warning near a limit, destructive at it, ai for model credits.

Storage
x
Monthly active users
x
API requests
x
Email sends
x
AI credits
x

Anatomy

<Progress value={64}>  <ProgressLabel>Seats</ProgressLabel>  <ProgressValue>{() => "16 of 25"}</ProgressValue></Progress>

Guidance

Use it when

  • A task with a known end: an import, an upload, a sync.
  • Usage against a limit: seats, storage, API quota.

Avoid

  • Unknown durations. Use Spinner, or Skeleton for content.
  • Status colors for decoration. Every bar in a list should be default until it crosses a threshold.

Rules for AI agents

Published in llms-full.txt and the registry, so coding agents follow them when they build with this component.

  • Always pass value (0 to 100) and a ProgressLabel so the bar has an accessible name.
  • Use ProgressValue for the right side. Pass a function child to show units, for example {() => "16 of 25"}.
  • Pick variant by threshold: default under 80%, warning from 80% to 99%, destructive at the limit, success when a task completes.
  • Use variant="ai" only for AI credits or a model run in progress.
  • Use size="sm" in dense lists and cards, size="lg" for a single prominent task.

API

Progress

PropTypeDefaultDescription
valuenumber | null0 to 100. null for indeterminate.
variant"default" | "success" | "warning" | "info" | "destructive" | "ai""default"Indicator color. Also set as data-variant.
size"sm" | "default" | "lg""default"Track height: 4, 6 or 8px.

ProgressValue

PropTypeDefaultDescription
children(formatted, value) => ReactNodeCustom value text. Defaults to a percentage.