v0.5.1

Progress Circle

Circular progress indicator showing completion percentage.

Installation

npx paubha@latest 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
valuenumber—Current progress value, from 0 to max.
maxnumber100Maximum value.
size"sm" | "md" | "lg""md"Circle diameter.
showPercentagebooleantrueShows the percentage as text in the center.
aria-labelstring—Required. 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, 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