✦ Asteria UI
Components

Progress Circle

Circular progress indicator showing completion percentage.

Installation

npx asteria-ui add progress-circle

Usage

import { ProgressCircle } from "@/components/ui/progress-circle";

<ProgressCircle value={75} aria-label="Upload progress" />

Examples

Sizes

Without the percentage label

API reference

PropTypeDefaultDescription
valuenumberCurrent progress value, from 0 to max.
maxnumber100Maximum value.
size"sm" | "md" | "lg""md"Circle diameter.
showPercentagebooleantrueShows the percentage as text in the center.
aria-labelstringRequired — describes what is loading, since the value is conveyed via ARIA, not the visual arc.

Accessibility

Accessibility

  • Role. role="progressbar" with aria-valuenow, aria-valuemin="0", and aria-valuemax="100" (or your custom max).

  • Label. Always pass aria-label describing what is loading — it's required, since the circular rendering itself is purely decorative and conveys nothing to assistive tech on its own.

When to use

Use for circular progress — skill completion, dashboard metrics, timer countdowns. Works well in compact spaces where a linear bar would be too wide.

Do:

  • Display the value in the center
  • Use consistent sizing
  • Animate smoothly as the value changes

Don't:

  • Use below 32px — the percentage text becomes unreadable
  • Show multiple sizes in the same row
  • Use for indeterminate loading — use Spinner instead