Chip
Atom
An interactive pill for filter chips, tags, and selectable tokens. It carries an optional leading icon and a label, becomes tappable with onPress, and grows a trailing "×" remove button with onRemove.
Playground
Every control sets a real prop of ChipProps. The JSX below updates as you go.
Web
iOS
Android
JSX · ChipProps
Variants
6 examples from src/atoms/chip/chip.md, each rendered live from its own JSX.
States
Hover, focus and press are pinned so they can be compared side by side; the rest are real props.
Anatomy
1
Container
2
Leading icon
3
Label
4
Count
5
Trailing control
Dimmed parts appear only in some states or variants.
Props
50 props on ChipProps, grouped as they are declared in source. Required props are marked *.
Accessibility and keyboard
Keyboard
Enter
Activates
Space
Activates
Tab
Moves focus on
Semantics
Roles
button
link
radio
States
checked
disabled
selected
ARIA on web
aria-checked
aria-disabled
aria-label
aria-pressed
Below the platform minimum, the touch area grows to 44 pt on iOS and 48 dp on Android without moving the layout.
From the docs
On Android a tappable Chip's touch area grows to the 48dp minimum without the chip changing size: 8dp above and below the 32dp chip, and nothing sideways once it is 48dp wide. On iOS it keeps 8pt of extra touch area on every side, which clears the 44pt minimum around the 28pt chip. The remove "×" pads out to the minimum on both, biased away from the label. Inside one chip the two never overlap: the chip splits the gap between its label and its "×", so a tap on the label never removes it. Between chips, React Native
Platform skins
The playground's props on each platform: same tree, native shapes, type and touch sizes.
Usage
A Chip is a LOW-emphasis tag, not a call to action: the neutral chip is a 28 px outlined pill (the raised neutral fill inside a hairline, its label at weight 500). A status chip is its soft pill (the status wash under the status ink, the recipe Alert and the other toned surfaces share); a palette hue is that hue's 16% wash inside the same hue at 30%, under a deep ink in the hue that holds 4.5:1 on the wash. A selectable chip rests as the bare pill in the field border, and once selected it is the accent's soft wash in the accent ink, inside an accent edge and leading with a check. On Android the chip is Material 3's: a 32dp outlined container at the 8dp chip corner, its selected filter chip tonal with an 18dp check and no outline. The chip owns that whole look, so no call site hand-composes a borderRadius + backgroundColor + padding Pressable.
Two orthogonal axes drive the look:
- Color (pick one; default the neutral tag). A semantic status (success, warning, destructive, info, neutral) or a free-form palette hue (red, orange, amber, yellow, lime, green, emerald, teal, cyan, sky, blue, indigo, violet, fuchsia, purple, pink, rose, gray). Status names read the theme's status colors (statusColors), so a success chip matches a success Badge and Alert; info is the primary color. Precedence when more than one is set: status names first, then hues in the order above.
- Emphasis. outline drops the fill for the field-border edge around the color's ink; primary is the solid accent; secondary is the higher raised fill with no edge (on Android, the filled chip beside the bare outlined container that is its idle chip). neutral is the muted tag with no edge; gray is the same muted fill and ink inside the chip's own edge. outline composes with any color, e.g. <Chip blue outline>. Precedence: a color wins over primary, and outline wins over primary's fill.
Touch area
On Android a tappable Chip's touch area grows to the 48dp minimum without the chip changing size: 8dp above and below the 32dp chip, and nothing sideways once it is 48dp wide. On iOS it keeps 8pt of extra touch area on every side, which clears the 44pt minimum around the 28pt chip. The remove "×" pads out to the minimum on both, biased away from the label. Inside one chip the two never overlap: the chip splits the gap between its label and its "×", so a tap on the label never removes it. Between chips, React Native's own rule applies: where two touch areas overlap, the later chip takes the tap. Android chips that meet the minimum's width reach nothing sideways, so a Row of them never overlaps; on iOS two tappable chips closer than 16pt do, and a tap on the edge of one toggles the next. Leave room between chips on iOS where a mistaken toggle matters.
Tokens
Read from the playground render. Values follow the scheme and the ion hue.
--fd
--ft
--ln
--sf3
--tx