Skip to main content
The Meter component displays a visual representation of a scalar measurement or fractional value within a known range, such as disk space usage, battery level, or rating scores.

Installation

npx shadcn@latest add @eo-n/meter

Usage

import { Meter, MeterLabel, MeterValue } from "@/components/ui/meter";
<Meter value={34}>
  <MeterLabel>Battery Level</MeterLabel>
  <MeterValue />
</Meter>

Examples

Basic Meter

<Meter value={75} className="w-80" />

With Label

<Meter value={45}>
  <MeterLabel>Storage Used</MeterLabel>
</Meter>

With Value Display

<Meter value={67}>
  <MeterLabel>CPU Usage</MeterLabel>
  <MeterValue />
</Meter>

Battery Indicator

import { Meter, MeterLabel, MeterValue } from "@/components/ui/meter";

export default function BatteryMeter() {
  const batteryLevel = 34;

  return (
    <Meter value={batteryLevel}>
      <MeterLabel>Battery Level</MeterLabel>
      <MeterValue />
    </Meter>
  );
}

Disk Space Usage

import { Meter, MeterLabel, MeterValue } from "@/components/ui/meter";

export default function DiskSpace() {
  const usedSpace = 68.5;

  return (
    <div className="space-y-2">
      <Meter value={usedSpace}>
        <MeterLabel>Disk Space</MeterLabel>
        <MeterValue />
      </Meter>
      <p className="text-sm text-muted-foreground">
        68.5 GB of 100 GB used
      </p>
    </div>
  );
}

Multiple Meters

import { Meter, MeterLabel, MeterValue } from "@/components/ui/meter";

export default function SystemMetrics() {
  return (
    <div className="space-y-4">
      <Meter value={72}>
        <MeterLabel>CPU</MeterLabel>
        <MeterValue />
      </Meter>
      
      <Meter value={45}>
        <MeterLabel>Memory</MeterLabel>
        <MeterValue />
      </Meter>
      
      <Meter value={88}>
        <MeterLabel>Disk</MeterLabel>
        <MeterValue />
      </Meter>
    </div>
  );
}

Component API

Meter

The root container component.
value
number
required
The current meter value (0-100).
min
number
The minimum value. Defaults to 0.
max
number
The maximum value. Defaults to 100.
optimum
number
The optimal value. Used to determine if the current value is in a good, suboptimal, or bad range.
low
number
The lower boundary of the low range.
high
number
The lower boundary of the high range.
className
string
Additional CSS classes to apply to the root element.
children
React.ReactNode
Optional label and value components.

MeterLabel

Displays a label for the meter.
children
React.ReactNode
required
The label text.
className
string
Additional CSS classes.

MeterValue

Displays the current meter value as text.
className
string
Additional CSS classes.
format
(value: number, max: number) => string
Custom formatter for the value display.

Meter vs Progress

While both components display a horizontal bar, they serve different purposes: Meter: Represents a scalar measurement within a known range (e.g., disk space, battery level, ratings). The value is meaningful on its own and doesn’t necessarily represent completion. Progress: Represents the completion status of a task (e.g., file upload, processing). The value represents progress toward completion.

Accessibility

The Meter component is built on Base UI and includes:
  • Proper semantic HTML using the <meter> element
  • ARIA attributes for value, min, max, optimum, low, and high
  • Screen reader support for value announcements

Reference

Built on top of Base UI Meter.

Build docs developers (and LLMs) love