Skip to content
Unkey Design Docs
Esc
navigateopen⌘Jpreview
On this page

Meter

A basic meter component.

import { Meter, MeterHeader, MeterIndicator, MeterLabel, MeterTrack, MeterValue } from "@unkey/ui";

export default function BasicMeter() {
  return (
    <Meter value={32_400} max={150_000}>
      <MeterHeader>
        <MeterLabel>Key verifications this month</MeterLabel>
        <MeterValue>{() => "32,400 / 150,000"}</MeterValue>
      </MeterHeader>
      <MeterTrack>
        <MeterIndicator className="bg-info-9" />
      </MeterTrack>
    </Meter>
  );
}

Examples

Thresholds

import { Meter, MeterHeader, MeterIndicator, MeterLabel, MeterTrack, MeterValue } from "@unkey/ui";

const QUOTA = 150_000;

function indicatorColor(percent: number) {
  if (percent >= 100) {
    return "bg-error-9";
  }
  if (percent >= 80) {
    return "bg-warning-9";
  }
  return "bg-info-9";
}

function QuotaMeter({ label, used }: { label: string; used: number }) {
  const percent = (used / QUOTA) * 100;

  return (
    <Meter value={used} max={QUOTA}>
      <MeterHeader>
        <MeterLabel>{label}</MeterLabel>
        <MeterValue>
          {used.toLocaleString()} / {QUOTA.toLocaleString()}
        </MeterValue>
      </MeterHeader>
      <MeterTrack>
        <MeterIndicator className={indicatorColor(percent)} />
      </MeterTrack>
    </Meter>
  );
}

export default function ThresholdMeter() {
  return (
    <div className="flex flex-col gap-6">
      <QuotaMeter label="Within budget" used={32_400} />
      <QuotaMeter label="Approaching limit" used={132_000} />
      <QuotaMeter label="Limit reached" used={150_000} />
    </div>
  );
}

Usage

Use a meter to show how much of a resource has been used. It works best against a fixed limit, like a monthly request quota or a workspace CPU ceiling.