--- title: Meter description: Meters display a scalar value within a known range (storage used, quiz score, or battery level) without implying user input. category: Feedback --- import { meta as MeterMeta, Default } from '@/content/stories/meter'; import Canvas from '@/components/component-docs/canvas'; import Demo from '@/components/component-docs/demo'; export const config = { dependencies: { components: [Canvas, Demo], scripts: [ '../../components/component-docs/demo.script.tsx', '../../components/component-docs/canvas.script.tsx', '../../components/component-docs/controls.script.tsx', ], }, }; # Meter

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

## Try it ## 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. ```tsx import { RuiMeter } from '@ecopages/radiant-ui/meter'; ``` 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: ```css rui-meter { --rui-meter-fill-color: var(--primary); --rui-meter-radius: var(--radius-control); } ``` ```tsx ``` ## Accessibility - The bar is the native `` 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 (``): the element `render()` owns the label, native ``, and percent readout. Pass props only; there is no authored child contract. ### Attributes | Attribute | Type | Default | Description | | --- | --- | --- | --- | | `value` | `number` | `0` | Current value. | | `min` | `number` | `0` | Range minimum. | | `max` | `number` | `100` | Range maximum. | | `label` | `string` | `''` | Text describing what is measured (accessible name). | ### CSS classes Public BEM classes on the composed light-DOM surface (documented via `@cssclass` on the element): | Class | Description | | --- | --- | | `.rui-meter` | Root row (label, bar, value). | | `.rui-meter__label` | Text describing the measurement. | | `.rui-meter__bar` | The visually hidden native ``. | | `.rui-meter__track` | Presentational track. | | `.rui-meter__fill` | Presentational filled portion. | | `.rui-meter__value` | Numeric readout (`aria-hidden`). | ### CSS custom properties | Property | Default | Description | | --- | --- | --- | | `--rui-meter-track-color` | `--rui-track-color` / `--rui-track-fill` | Unfilled track. | | `--rui-meter-fill-color` | `--primary` | Filled portion. | | `--rui-meter-radius` | `--radius-control` | Track and fill corner radius. | | `--rui-meter-height` | `0.75rem` | Bar block size. | | `--rui-meter-width` | `12rem` | Bar inline size. | ### Theme roles | Role | CSS variables consumed | | --- | --- | | primary | `--primary` (bar fill) | | track | `--rui-track-fill` (bar track) | | control radius | `--radius-control` (bar shape) | | surface text | `--on-surface` (value readout) |