Metrics & Status
KPI tiles, meters, gauges, progress indicators, trend badges, status markers, tags, and avatars for dashboards.
Components in this category
Key performance indicator card with trend sparkline.
MetricCardSingle metric with label, value and trend indicator.
MetricGridGrid layout for MetricCards.
MeterGauge-like meter with thresholds.
UsageBarHorizontal usage bar with percentage and threshold.
GaugeSemi-circular gauge with value and range.
ProgressBarHorizontal progress bar with tone and label.
ProgressCircleCircular progress indicator.
TrendBadgeUp/down/flat trend indicator with color.
UptimeStripHorizontal strip of uptime status segments.
StatusDotSmall colored dot for status indication.
StatusTextText with status dot prefix.
StatusBadgeA state in a container, for headers and toolbars.
TagSmall label for categorization.
TokenCompact chip for a single input value.
FilterChipToggleable chip for filter UI.
CountBadgeNumeric badge for counts and notifications.
AvatarUser avatar with fallback to initials.
AvatarGroupOverlapping avatar stack with overflow count.
KPIs & metrics
Dashboard headline numbers with optional trend indicators and sparklines. KpiCard shows a label, a value, and a sparkline. MetricCard adds a delta with color-coded intent, so a rising number can render green or red depending on whether an increase is good (intent defaults to sign-based inference). MetricGrid arranges them in a responsive auto-fit row.
KpiCard
| Prop | Type | Default | Description |
|---|---|---|---|
label | ReactNode | — | Stat label above the value. |
value | ReactNode | — | Headline number. |
unit | ReactNode | — | Trailing unit (GB, req/s, …). |
sub | ReactNode | — | Dim line under the value. |
subTone | "default" | "warn" | "default" | Tone for the sub line. |
spark | number[] | — | Trailing sparkline series. |
sparkColor | string | — | Sparkline color override. |
<KpiCard
label="Requests"
value="1,423"
unit="/min"
sub="+12% vs last hour"
spark={[10, 14, 23, 18, 27, 42, 35, 28]}
sparkColor="var(--m-color-primary)"
/>MetricCard
| Prop | Type | Default | Description |
|---|---|---|---|
metric | MetricDatum | — | A single metric record. |
variant | "bordered" | "plain" | "bordered" | Drop the border for cards inside a bordered panel. |
| Prop | Type | Default | Description |
|---|---|---|---|
label | ReactNode | — | Stat label. |
value | ReactNode | — | Headline number. |
unit | ReactNode | — | Trailing unit. |
delta | number | — | Signed change; sign drives arrow, intent drives color. |
formatDelta | (d: number) => string | — | Formats the delta. Default: signed percentage. |
intent | MetricIntent | — | "positive" | "negative" | "neutral". Explicit override for when up is bad (error rate, cost). |
caption | ReactNode | — | Dim label under the value. |
spark | number[] | — | Trend sparkline. |
sparkColor | string | — | Sparkline color override. |
icon | ReactNode | — | Leading icon. |
loading | boolean | — | Shimmer placeholder. |
onClick | () => void | — | Makes the card clickable. |
MetricGrid
| Prop | Type | Default | Description |
|---|---|---|---|
metrics | MetricDatum[] | — | Metrics to render. |
columns | number | — | Fixed column count. Omit for auto-fit. |
minColumnWidth | number | 150 | Minimum tile width when auto-fitting. |
variant | "bordered" | "plain" | — | Passed through to each MetricCard. |
connected | boolean | — | Removes gaps and adds borders between metrics. |
Meters & gauges
Quantity-at-a-glance readouts. Meter and UsageBar are thin horizontal bars for quota or inline table-cell usage. Gauge is a larger semi-circular arc for a headline attainment number.
Meter
| Prop | Type | Default | Description |
|---|---|---|---|
value | number | — | 0-100 fill. |
UsageBar
| Prop | Type | Default | Description |
|---|---|---|---|
value | number | — | 0-100 fill. |
tone | "default" | "ok" | "warn" | "high" | "default" | Color tone. 'high' is the red alarm. |
Gauge
| Prop | Type | Default | Description |
|---|---|---|---|
value | number | — | Percentage from 0 to 100. Normalize other value ranges before passing them. |
size | number | 132 | Overall width in px. |
strokeWidth | number | 9 | Arc thickness. |
tone | ProgressTone | "primary" | "primary" | "ok" | "warn" | "err". |
target | number | — | Threshold marker on the arc. |
children | ReactNode | — | Center readout override. |
sub | ReactNode | — | Dim line under center value. |
startLabel | ReactNode | — | Left label under arc end. |
endLabel | ReactNode | — | Right label under arc end. |
<Gauge
value={73}
tone="ok"
target={85}
sub="of €1.2M annual quota"
startLabel="0"
endLabel="150%"
/>Progress
Task or batch progress indicators. ProgressBar is a horizontal track for sequential operations; ProgressCircle is a ring gauge for compact percent readouts. Both accept a tone prop of type ProgressTone ("primary" | "ok" | "warn" | "err"). ProgressBar also supports an indeterminate mode with a sliding shimmer for operations of unknown duration.
ProgressBar
| Prop | Type | Default | Description |
|---|---|---|---|
value | number | 0 | 0-100. Ignored when indeterminate. |
tone | ProgressTone | "primary" | "primary" | "ok" | "warn" | "err". |
indeterminate | boolean | — | Sliding shimmer for unknown durations. |
label | ReactNode | — | Right-aligned mono label above the track. |
labelLeft | ReactNode | — | Left-aligned label above the track. |
ProgressCircle
| Prop | Type | Default | Description |
|---|---|---|---|
value | number | — | 0-100. |
size | number | 44 | Diameter in px. |
strokeWidth | number | 4 | Ring thickness. |
tone | ProgressTone | "primary" | "primary" | "ok" | "warn" | "err". |
children | ReactNode | — | Center content. Defaults to the rounded percentage. |
Trends & status
Small indicators that convey direction, health, or activity at a glance.
TrendBadge
| Prop | Type | Default | Description |
|---|---|---|---|
delta | number | — | Signed percentage change. |
positiveIsGood | boolean | true | Whether an increase is good (revenue) or bad (error rate). |
format | (d: number) => string | — | Formats the delta. Default: signed percentage. |
label | string | — | Dim comparison label after the number. |
UptimeStrip
| Prop | Type | Default | Description |
|---|---|---|---|
segments | UptimeTone[] | — | Oldest-first array of per-bucket tones ("ok" | "warn" | "err" | "idle"). |
height | number | 22 | Strip height in px. |
startLabel | ReactNode | — | Left label (e.g. '90d ago'). |
endLabel | ReactNode | — | Right label (e.g. 'today'). |
renderTooltip | (index: number) => ReactNode | — | Hover tooltip renderer. |
StatusDot
A small colored circle driven by StatusTone ("ok" | "warn" | "err" | "idle" | "prov" | "dim").
StatusText
| Prop | Type | Default | Description |
|---|---|---|---|
tone | StatusTone | — | "ok" | "warn" | "err" | "idle" | "prov" | "dim". |
children | ReactNode | — | Status label text. |
Tags & badges
Small metadata pills and numeric counts. Tag labels entities. FilterChip is a toggleable filter pill that renders as a button. CountBadge is a mono numeric badge for nav or tab items.
Tag
FilterChip
| Prop | Type | Default | Description |
|---|---|---|---|
set | boolean | — | Filled state once a value is chosen. |
onRemove | () => void | — | Renders a remove button. Click does not bubble. |
expandable | boolean | true when no onRemove | Shows a chevron down icon. |
CountBadge
| Prop | Type | Default | Description |
|---|---|---|---|
tone | "default" | "warn" | "default" | Tone override. |
Avatars
User identity indicators. Avatar shows an image or fallback initials. AvatarGroup is an overlapping stack with an overflow count chip.
Avatar
| Prop | Type | Default | Description |
|---|---|---|---|
src | string | — | Image URL. |
alt | string | "" | Image alt text. |
initials | string | — | Fallback text shown when src is absent. |
size | "sm" | "md" | "lg" | "md" | Avatar size. |
color | string | — | Background color override. |
AvatarGroup
| Prop | Type | Default | Description |
|---|---|---|---|
people | AvatarGroupPerson[] | — | People to display. Each has src, initials, color, and name. |
max | number | 4 | Avatars shown before collapsing into +N. |
size | "sm" | "md" | "lg" | "sm" | Avatar size. |