0.1.0

Meter

Meters display a scalar value within a known range (storage used, quiz score, or battery level) without implying user input.

Try it

Storage used72%

Usage

Set value, min, and max to define the range. Add label text so the measurement is self-explanatory, it is also the accessible name.

import { RuiMeter } from '@ecopages/radiant-ui/meter';
 
<RuiMeter value={72} min={0} max={100} label="Storage used" />

The percent readout is derived from value / min / max and shown next to the bar. value below min or above max is clamped to the range, so the bar and readout stop at 0% / 100% like the native element.

Meter vs progress bar

Use Meter for static measurements. Use a progress element when showing completion of an in-flight task.

Theming

Meters use primary for the filled bar, track tokens for the unfilled track (--rui-track-fill, overridable with --rui-track-color on an ancestor), and --radius-control for corner rounding so the bar follows the active radius pack (default, soft, or sharp). The value readout uses --on-surface. No status role is applied; the meter is a neutral scalar display, not a status indicator.

Override bar chrome on the host:

rui-meter {
	--rui-meter-fill-color: var(--primary);
	--rui-meter-radius: var(--radius-control);
}
<RuiMeter value={72} min={0} max={100} label="Storage used" />

Accessibility

  • The bar is the native <meter> element, exposing role="meter" with aria-valuenow, aria-valuemin, and aria-valuemax.
  • Include a text label describing what is being measured; the numeric readout is decorative (aria-hidden="true").
  • Supplement the bar with a numeric value when precision matters.

API

RuiMeter is a Derived Tree host (<rui-meter>): the element render() owns the label, native <meter>, and percent readout. Pass props only; there is no authored child contract.

Attributes

AttributeTypeDefaultDescription
valuenumber0Current value.
minnumber0Range minimum.
maxnumber100Range maximum.
labelstring''Text describing what is measured (accessible name).

CSS classes

Public BEM classes on the composed light-DOM surface (documented via @cssclass on the element):

ClassDescription
.rui-meterRoot row (label, bar, value).
.rui-meter__labelText describing the measurement.
.rui-meter__barThe visually hidden native <meter>.
.rui-meter__trackPresentational track.
.rui-meter__fillPresentational filled portion.
.rui-meter__valueNumeric readout (aria-hidden).

CSS custom properties

PropertyDefaultDescription
--rui-meter-track-color--rui-track-color / --rui-track-fillUnfilled track.
--rui-meter-fill-color--primaryFilled portion.
--rui-meter-radius--radius-controlTrack and fill corner radius.
--rui-meter-height0.75remBar block size.
--rui-meter-width12remBar inline size.

Theme roles

RoleCSS variables consumed
primary--primary (bar fill)
track--rui-track-fill (bar track)
control radius--radius-control (bar shape)
surface text--on-surface (value readout)