Skip to content
Kappa
Meter
@dicehub/kappav0.4.2

Meter

Displays a scalar measurement within a known range.

Storage used65%
<script setup>
import { Meter } from "@dicehub/kappa/components/meter";
</script>

<template>
  <Meter label="Storage used" :value="65" />
</template>

Installation

Meter is part of the main Kappa package. It uses Vue and native WAI-ARIA meter semantics. It adds no behavior dependency.

Barrel

import { Meter } from "@dicehub/kappa";

Granular

import { Meter } from "@dicehub/kappa/components/meter";

Usage

Use Meter for a measurement with a meaningful minimum and maximum, such as storage, battery charge, or capacity. Do not use it for task completion.

Storage used65%
<script setup>
import { Meter } from "@dicehub/kappa/components/meter";
</script>

<template>
  <Meter label="Storage used" :value="65" />
</template>

Composition

Typical part hierarchy
Meter <div role="meter">
├── meter-header
│   ├── meter-label
│   └── meter-value (optional)
└── meter-track
    └── meter-indicator

The internal anatomy followsBase UI Meter. Ark UI has no Meter primitive. Kappa therefore owns this small WAI-ARIA composition and exposes stable data slots.

Examples

Custom Range and Value Text

Set the numeric range independently from the human-readable value text.

API request quota750 / 1,000 requests
<script setup>
import { Meter } from "@dicehub/kappa/components/meter";
</script>

<template>
  <Meter
    label="API request quota"
    :value="750"
    :max="1000"
    value-text="750 / 1,000 requests"
  />
</template>

Sizes

Use the small, default, and large densities to match the surrounding information.

Small meter24%
Default meter56%
Large meter82%
<script setup>
import { Meter, type MeterSize } from "@dicehub/kappa/components/meter";

const sizes = [
  { label: "Small meter", size: "sm", value: 24 },
  { label: "Default meter", size: "base", value: 56 },
  { label: "Large meter", size: "lg", value: 82 },
] satisfies Array<{ label: string; size: MeterSize; value: number }>;
</script>

<template>
  <Meter
    v-for="item in sizes"
    :key="item.size"
    :label="item.label"
    :size="item.size"
    :value="item.value"
  />
</template>

Semantic Tones

Select a tone from the meaning of the measurement. Meter does not infer whether a high or low value is good.

Accent62%
Neutral52%
Healthy capacity38%
Capacity warning78%
Capacity critical94%
<script setup>
import { Meter, type MeterTone } from "@dicehub/kappa/components/meter";

const readings = [
  { label: "Accent", tone: "accent", value: 62 },
  { label: "Neutral", tone: "neutral", value: 52 },
  { label: "Healthy capacity", tone: "success", value: 38 },
  { label: "Capacity warning", tone: "warning", value: 78 },
  { label: "Capacity critical", tone: "danger", value: 94 },
] satisfies Array<{ label: string; tone: MeterTone; value: number }>;
</script>

<template>
  <Meter
    v-for="reading in readings"
    :key="reading.tone"
    :label="reading.label"
    :tone="reading.tone"
    :value="reading.value"
  />
</template>

Hidden Visual Value

Hide repeated visual text without removing the value from assistive technology.

Battery charge

The numeric value remains available to assistive technology.

<script setup>
import { Meter } from "@dicehub/kappa/components/meter";
</script>

<template>
  <Meter label="Battery charge" :value="48" :show-value="false" />
</template>

Accessibility

  • Meter always has a visible label and an accessible name.
  • Kappa clamps aria-valuenow between the resolved minimum and maximum.
  • Use valueText when a percentage does not explain the measurement.
  • showValue=false hides only the visual value. Assistive value text remains.
  • Do not use Meter for loading or task completion. Those states require a progress bar.
  • Color is supplementary. Keep the label and value text sufficient without color.

API Reference

Meter

Renders a labelled div with role=meter. Native attributes, data attributes, consumer classes, and CSS variables pass to the root.

PropTypeDefaultDescription
label*string—Visible label and accessible name for the measurement.
value*number—Current measurement. Values outside the range are clamped.
minnumber0Lowest value in the known range.
maxnumber100Highest value in the known range. It must be greater than min.
valueTextstringpercentageHuman-readable visible and assistive value text.
showValuebooleantrueShows the formatted value beside the label.
size"sm" | "base" | "lg""base"Controls text and track density.
tone"accent" | "neutral" | "success" | "warning" | "danger""accent"Applies a consumer-selected semantic indicator color.

Data Slots

SlotElementDescription
meterdivLabelled meter root.
meter-headerdivLabel and visible value row.
meter-labelspanVisible accessible name.
meter-valuespanOptional visible value text.
meter-trackdivVisual representation of the complete range.
meter-indicatordivFilled portion of the range.

Data Attributes

AttributeValueDescription
data-size"sm" | "base" | "lg"Resolved density.
data-tone"accent" | "neutral" | "success" | "warning" | "danger"Resolved indicator tone.
data-value-state"empty" | "partial" | "full"Clamped position in the range.

Exports

ExportDescription
MeterLabelled scalar measurement component.
MeterPropsPublic prop contract.
MeterSize / MeterTone / MeterValueStatePublic visual and value-state types.
METER_SIZES / METER_TONESSupported size and tone lists.
METER_DEFAULT_*Public default values.
clampMeterValue / getMeterPercentage / formatMeterValueRange and formatting helpers.
resolveMeter*Safe range, value, label, size, and tone resolvers.