Zephora UI

Form

MultiSelect

Multi-value select with removable chips in the trigger and checkbox-style options; the popup stays open while toggling values.

Import

import { MultiSelect } from "@zephora/react";

Examples

Basic

Controlled

Selected: react

Chip overflow

`maxDisplay` collapses chips beyond the given count into a +N chip.

Search, clear and a selection limit

`searchable` adds a filter input inside the popup, `clearable` shows a clear-all button, and `maxCount` disables unselected options once the limit is reached. `renderValue` replaces the chips with your own trigger content.

API

MultiSelect props

PropTypeDefaultDescription
options *MultiSelectOption[]Options shown in the listbox. Same shape as SelectOption (label, value, disabled?, icon?, description?, group?, textValue?).
valuestring[]Controlled selected values.
defaultValuestring[][]Initial values in uncontrolled mode.
onValueChange(value: string[]) => voidCalled with the new value array on every change.
placeholderstring"Select…"Text shown when nothing is selected.
maxDisplaynumberCollapses chips beyond this count into "+N".
maxCountnumberSelection limit — once reached, unselected options are disabled.
searchablebooleanfalseShows a search input in the popup that filters options client-side.
clearablebooleanfalseShows a clear-all button while something is selected.
renderValue(selected: MultiSelectOption[]) => ReactNodeCustom trigger value renderer — replaces the chips when something is selected.
size"sm" | "md" | "lg""md"Trigger scale.
invalidbooleanfalseMarks the trigger invalid (aria-invalid).
disabledbooleanfalseDisables the trigger.
aria-label / aria-labelledbystringAccessible name for the trigger and listbox.
unstyledbooleanfalseHeadless mode — drops Zephora classes so your own CSS can style it.
…restHTMLAttributes<HTMLDivElement>Forwarded to the root wrapper element.

Keyboard

KeyAction
Enter / Space / Arrow Down / Arrow UpOpens the listbox from the trigger.
Arrow Down / Arrow UpMoves the active option (skips disabled).
Enter / SpaceToggles the active option; the popup stays open.
BackspaceRemoves the last selected value from the trigger.
EscapeCloses the listbox.
A-ZTypeahead — jumps to the next matching option.