Progress Orbit

PreviousNext

Compact circular progress indicator with a minimal ring, inline copy, and milestone chips.

"use client";

import { ShieldCheck } from "lucide-react";

import { ProgressOrbit } from "@/components/matos-ui/progress-orbit";

export function ProgressOrbitDemo() {
  return (
    <div className="flex w-full justify-center">
      <ProgressOrbit
        className="max-w-[360px]"
        label="Security"
        description="Identity posture"
        value={72}
        tone="primary"
        icon={<ShieldCheck />}
        milestones={[
          { value: 30, label: "MFA" },
          { value: 55, label: "SAML" },
          { value: 80, label: "Audit" },
        ]}
        footer="3 checks verified"
      />
    </div>
  );
}

Installation

pnpm dlx shadcn@latest add https://matos-ui.com/r/progress-orbit.json

Usage

import { ProgressOrbit } from "@/components/matos-ui/progress-orbit"
<ProgressOrbit
  className="max-w-56"
  label="Launch"
  description="Checklist"
  value={86}
  tone="primary"
  milestones={[
    { value: 25, label: "Plan" },
    { value: 60, label: "QA" },
    { value: 90, label: "Ship" },
  ]}
/>

Reference

ProgressOrbit Props

PropTypeDefaultDescription
valuenumber-Current progress value.
maxnumber100Max value used to compute percent.
labelReactNode-Card title and accessible label.
descriptionReactNode?-Optional short description.
iconReactNode?-Optional header icon.
tone"neutral" | "primary" | "muted" | "destructive""neutral"Subtle progress accent tone.
suffixstring"%"Value suffix.
milestonesProgressOrbitMilestone[][]Compact threshold chips.
footerReactNode?-Optional footer text or content.
size"sm" | "md" | "lg""md"Internal spacing and ring stroke.

ProgressOrbitMilestone

FieldTypeDescription
valuenumberThreshold value.
labelReactNodeLabel shown in the milestone chip.

Also exported: AnimatedProgressValue, progressOrbitVariants, and related types.