Meter
A meter represents a quantity within a known range, or a fractional value.
Completeness: styles-sufficient
The stylesheet is the whole component. There is no keyboard map beyond what the native element already does and nothing sets state at runtime that the CSS keys on, so a CSS-only port reproduces it.
Import
import { Meter, Label } from '@blakeui/react';Usage
import {Label, Meter} from "@blakeui/react";
export function Basic() {
return (
<Meter aria-label="Storage" className="w-64" value={60}>Anatomy
import { Meter, Label } from '@blakeui/react';
export default () => (
<Meter value={60}>
<Label>Storage</Label>
<Meter.Output />
<Meter.Track>
<Meter.Fill />
</Meter.Track>
</Meter>
);Sizes
import {Label, Meter} from "@blakeui/react";
export function Sizes() {
return (
<div className="flex w-64 flex-col gap-6">Colors
import {Label, Meter} from "@blakeui/react";
export function Colors() {
return (
<div className="flex w-64 flex-col gap-6">Custom Value Scale
Use minValue, maxValue, and formatOptions to customize the value range and display format.
import {Label, Meter} from "@blakeui/react";
export function CustomValue() {
return (
<MeterWithout Label
When no visible label is needed, use aria-label for accessibility.
import {Meter} from "@blakeui/react";
export function WithoutLabel() {
return (
<Meter aria-label="Storage usage" className="w-64" value={45}>Styling
Passing Tailwind CSS classes
You can customize individual Meter parts:
import { Meter, Label } from '@blakeui/react';
function CustomMeter() {
return (
<Meter value={60}>
<Label>Storage</Label>
<Meter.Output />
<Meter.Track className="bg-purple-100 dark:bg-purple-900">
<Meter.Fill className="bg-purple-500" />
</Meter.Track>
</Meter>
);
}Customizing the component classes
To customize the Meter component classes, you can use the @layer components directive.
Learn more.
A worked example is in Styling.
blakeUI follows the BEM methodology to ensure component variants and states are reusable and easy to customize.
CSS Classes
The Meter component uses these CSS classes (View source styles):
Base & Element Classes
.meter- Base container (grid layout).meter__output- Value text display.meter__track- Track background.meter__fill- Filled portion of the track
Size Classes
.meter--sm- Small size variant (thinner track).meter--md- Medium size variant (default).meter--lg- Large size variant (thicker track)
Color Classes
.meter--default- Default color variant.meter--accent- Accent color variant.meter--success- Success color variant.meter--warning- Warning color variant.meter--danger- Danger color variant
API Reference
Meter Props
Inherits from React Aria Meter.
| Prop | Type | Default | Description |
|---|---|---|---|
value | number | 0 | The current value |
minValue | number | 0 | The minimum value |
maxValue | number | 100 | The maximum value |
size | "sm" | "md" | "lg" | "md" | Size of the meter track |
color | "default" | "accent" | "success" | "warning" | "danger" | "accent" | Color of the fill bar |
formatOptions | Intl.NumberFormatOptions | {style: 'percent'} | Number format for the value display |
valueLabel | ReactNode | - | Custom value label content |
children | ReactNode | (values: MeterRenderProps) => ReactNode | - | Content or render prop |
MeterRenderProps
When using the render prop pattern, these values are provided:
| Prop | Type | Description |
|---|---|---|
percentage | number | The percentage of the meter (0-100) |
valueText | string | The formatted value text |