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>
PropTypeNotes
intentneutral | accentaccent for one brand moment only
onRemove() => voidRenders an accessible Γ— button (this is the β€œtag” use)
removeLabelstringaria-label for the Γ— (default β€œRemove”)
leadingDotbooleanSmall 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>
PropTypeNotes
selectedbooleanSets aria-pressed; filled (ink) when on
countnumberOptional trailing count
onClick() => voidToggle handler
disabledboolean
  • 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.