Activity Rings

Concentric activity rings lap their goal while three metrics count up beside them

Installation
$ pnpm dlx shadcn@latest add @remocn/activity-rings

Usage

tsx
// src/Root.tsx
import { Composition } from "remotion";
import { ActivityRings } from "@/components/remocn/activity-rings";
 
const ActivityRingsScene = () => (
  <ActivityRings
    title="This quarter"
    rings={[
      { label: "Renders", value: 2400, goal: 1.2 },
      { label: "Templates", value: 64, goal: 1.1 },
      { label: "Hours saved", value: 420, unit: "h", goal: 1.05 },
    ]}
  />
);
 
export const RemotionRoot = () => (
  <Composition
    id="ActivityRings"
    component={ActivityRingsScene}
    durationInFrames={130}
    fps={30}
    width={1280}
    height={720}
  />
);

Three concentric rings fill clockwise one after another, snap closed, then lap past their goal with a check mark while the labels count up beside them. Pass rings (label, value, optional unit, and a goal fraction such as 1.14) and a title. Ships dark and light via theme.

Props5

PropTypeDefault
rings
ActivityRing[]DEFAULT_RINGS

Up to three rings, outermost first.

title
string"This month"

Small heading above the readouts.

accent
string"#3B5BFD"

Color of the outer hero ring.

speed
number1

Playback multiplier.

theme
"dark" | "light""dark"

Dark or light palette.

  • ringsActivityRing[]

    Up to three rings, outermost first.

    DefaultDEFAULT_RINGS

  • titlestring

    Small heading above the readouts.

    Default"This month"

  • accentstring

    Color of the outer hero ring.

    Default"#3B5BFD"

  • speednumber

    Playback multiplier.

    Default1

  • theme"dark" | "light"

    Dark or light palette.

    Default"dark"