Skip to content

Chips & filters

Chip is a small rounded label for tags and categorization (removable when you pass onRemove). FilterChip is the toggleable pill used for list/inbox filters.

BeveragesWest DCRushPriority

Top row toggles FilterChips (with counts); bottom row is removable Chips plus one accent chip.

import Chip from '@repo/ui/Chip';
<Chip>Beverages</Chip>
<Chip intent="accent" leadingDot>Priority</Chip>
<Chip onRemove={() => removeTag(id)} removeLabel="Remove Beverages">Beverages</Chip>
Prop Type Notes
intent neutral | accent accent for one brand moment only
onRemove () => void Renders an accessible Γ— button (this is the β€œtag” use)
removeLabel string aria-label for the Γ— (default β€œRemove”)
leadingDot boolean Small status dot

There’s no separate Tag component β€” a removable Chip is the tag.

import FilterChip from '@repo/ui/FilterChip';
<FilterChip selected={active} count={12} onClick={toggle}>Unread</FilterChip>
Prop Type Notes
selected boolean Sets aria-pressed; filled (ink) when on
count number Optional trailing count
onClick () => void Toggle handler
disabled boolean
  • Do use FilterChip for multi-select list filters; selected reads as filled.
  • Do give removable chips a descriptive removeLabel.
  • Don’t use accent chips for more than one thing per view β€” orange stays ~2%.
  • FilterChip is a real button with aria-pressed; Chip’s Γ— is a labelled button. Keyboard-operable, focus-visible ring on --om-orange-press. Verified with jest-axe.