Chip
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.
A Chip is a LOW-emphasis tag, not a call to action: the neutral chip is Dark Factory's quiet pill (the soft surface color under the foreground), and a coloured chip is its soft pill (the color's wash under the color's ink, the recipe Alert and the other toned surfaces share). A selected filter chip is Dark Factory's selected chip, the solid primary (the tonal primary on Android, where Material 3 draws its selected filter chip). 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 a border-only chip in the same color; primary is the primary color's soft pill. These compose with any color, e.g. <Chip blue outline>.
Design
iOS
Android
Design
Web
tsx
Default
Colors
Status
Emphasis
With leading icon
Removable filters
Selectable
Props
Do & Don’t
Removable filter
Don’t
Hand-build the pill from a raw Pressable with border-radius, padding, and a text "×".
Do
Status: Active
Use a Chip with onRemove so the pill and its "×" stay consistent and accessible.
Touch area
On Android a tappable Chip's touch area grows to the 48dp minimum without the chip changing size: 7dp above and below the 34dp chip, and nothing sideways once it is 48dp wide. On iOS it keeps 11pt of extra touch area on every side, which clears the 44pt minimum around the 25pt 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 22pt do, and a tap on the edge of one toggles the next. Leave room between chips on iOS where a mistaken toggle matters.