Skip to content

Progress Ring

A circular progress indicator with an optional percentage label in the centre. Use for compact progress displays.

Preview

70%
25%
100%

Indeterminate

Props

PropTypeDefaultDescription
valuenumber--Progress percentage (0–100)
sizenumber64Diameter in pixels
strokeWidthnumber6Ring thickness
indeterminatebooleanfalseSpinning mode
showValuebooleantrueShows percentage label

Code example

React

tsx
import { ProgressRing } from '@thepace/lexicon/components';

<ProgressRing value={70} />
<ProgressRing value={100} size={48} />
<ProgressRing indeterminate size={48} />

CSS class reference

ClassPurpose
.lex-progress-ringContainer
.lex-progress-ring__svgSVG element (rotated -90deg)
.lex-progress-ring__trackBackground circle
.lex-progress-ring__fillProgress arc
.lex-progress-ring__labelCentre percentage text
.lex-progress-ring--indeterminateSpinning animation

Accessibility

  • Use role="progressbar" with aria-valuenow, aria-valuemin, aria-valuemax on the SVG.
  • For indeterminate mode, omit aria-valuenow and set aria-label="Loading".

Guidelines

Do

  • Use for compact spaces like cards, list items, or dashboards.
  • Show the percentage label for clarity.

Don't

  • Don't use at sizes smaller than 32 px — the label becomes unreadable.
  • Don't use for long-running operations — a progress bar with text is more informative.

Released under the MIT License. A product by the pace.