Progress

A visual indicator showing the completion status of a task or operation.

Overview

The Progress component provides a visual representation of task completion or progress. It supports both determinate progress (with a known value) and indeterminate progress (when the completion time is unknown).

Usage

import {
  Progress,
  ProgressValue,
  ProgressCircle,
  ProgressRadial,
} from "@tilt-legal/cubitt-components/primitives";

// Linear progress
<Progress value={45}>
  <ProgressValue />
</Progress>

// Circular progress
<ProgressCircle value={75} showValue />

// Radial progress (half circle gauge)
<ProgressRadial value={60} startAngle={180} endAngle={360} showValue />

Examples

Sizes

Customize the height of the progress bar.

Animated

Animate the progress value over time.

With Status

Show contextual status messages during progress updates.

Circular Progress

Show progress as a full circle with custom content in the center.

Radial Progress

Show progress as a partial arc with custom angles (great for gauges and speedometers).


API Reference

Progress

The root component that displays the progress bar.

PropTypeDefaultDescription
valuenumber | nullThe current progress value. Use null for indeterminate progress.
minnumber0The minimum value.
maxnumber100The maximum value.
getAriaValueText(value: number) => stringFunction returning human-readable text for the current progress value.
aria-valuetextstringA string value that provides a user-friendly name for the current value.
localeIntl.LocalesArgumentThe locale used by Intl.NumberFormat when formatting the value.
formatIntl.NumberFormatOptionsOptions to format the value.
classNamestring | (state) => stringCSS classes or function that returns classes based on component state.
renderReactElement | (props) => ReactElementAllows composing the component with another element. Receives props to spread.
childrenReactNodeChild elements (typically ProgressValue).

ProgressValue

Displays the formatted progress value (used with linear Progress).

PropTypeDescription
classNamestring | (state) => stringCSS classes or function that returns classes based on component state.
renderReactElement | (props) => ReactElementAllows composing the component with another element. Receives props to spread.

ProgressCircle

Circular progress indicator (full 360° circle) built with SVG.

PropTypeDefaultDescription
valuenumber0Progress value from 0 to 100.
sizenumber48Size of the circle in pixels.
strokeWidthnumber4Width of the progress stroke.
showValuebooleanfalseWhether to show the percentage value in the center.
indicatorClassNamestringAdditional className for the progress indicator stroke.
trackClassNamestringAdditional className for the progress track.
classNamestringAdditional CSS classes for the container.
childrenReactNodeCustom content to display in the center (overrides showValue).

ProgressRadial

Radial progress indicator (partial arc/gauge) built with SVG.

PropTypeDefaultDescription
valuenumber0Progress value from 0 to 100.
sizenumber120Size of the radial in pixels.
strokeWidthnumber8Width of the progress stroke.
startAnglenumber-90Start angle in degrees (-90 is top, 0 is right).
endAnglenumber90End angle in degrees (90 is bottom, 180 is left).
showValuebooleanfalseWhether to show the percentage value in the center.
indicatorClassNamestringAdditional className for the progress indicator stroke.
trackClassNamestringAdditional className for the progress track.
classNamestringAdditional CSS classes for the container.
childrenReactNodeCustom content to display in the center (overrides showValue).

Notes

  • Linear Progress uses Base UI primitives for accessibility and proper ARIA attributes
  • ProgressCircle is ideal for compact progress indicators, dashboards, and metrics
  • ProgressRadial is perfect for gauges, speedometers, and partial progress arcs
  • Both circular components support custom content in the center via children prop
  • Use showValue for automatic percentage display, or children for custom content
  • The indicatorClassName and trackClassName props allow full color customization using Tailwind's text-* classes

On this page