Badge

Compact status labels — tone badges, channel chips, key/value pills, and status dots.

Preview

Live

running queued needs_review failed Jobs12
<span class="badge submitted">submitted</span>
<span class="chip channel email">email</span>
<span class="pill"><span class="pill-k">Jobs</span><span class="pill-v">12</span></span>
<span class="dot submitted" aria-label="Submitted"></span>

Variants

Tones

Status tones map to semantic colors.

queued running ok needs_review failed danger

Tiny

Denser padding for tight table cells.

failed

Chip

Neutral or channel-colored tags.

generic ats unknown

Pill

Key/value summary counts.

Ready3 Failed1

Dot

Icon-scale status for dense lists — needs an accessible name.

Accessibility

  • Prefer visible text in badges/chips; dots need aria-label (or adjacent text).
  • Do not rely on color alone — pair tone with a readable label.
  • Decorative status next to named rows can use aria-hidden if the row already conveys state.

API

HTML classes

Class Description
.badge Base status badge.
.badge.{tone} Tone: queued, running, submitted, ok, needs_review, failed, danger.
.badge.tiny Compact badge.
.chip Neutral chip tag.
.chip.channel.{email|ats|unknown} Channel-colored chip.
.pill / .pill-k / .pill-v Key/value pill.
.dot / .dot.{tone} Status dot (same tones as badge).

React props

From src/core/Badge.tsxBadge, Chip, Pill, Dot.

Prop Type Default Description
tone StatusTone Badge / Dot tone class.
tiny boolean false Badge compact size.
channel 'email' | 'ats' | 'unknown' Chip channel modifier.
label / value ReactNode Pill key and value (required).
className / …HTML string / attrs Native span attributes via forwardRef.