Fast, touch-friendly picker for React and vanilla JS.
Type to filter on desktop, tap to select on mobile.
These are real widgets running in your browser. Try typing to filter (desktop) or tapping to select (mobile).
Pass a plain string array. One line of code.
Placeholder, label, change callback.
CSV shorthand — "CA:California,NY:New York"
Set value to pre-select an item.
Works great with long lists. On desktop, start typing to narrow results — try "new" or "north".
The same picker as specialized React components — time selector, generic select, and business hours editor.
Time grid with business hours. Type to filter on desktop — try "2p" to jump to 2 PM.
Value/label pairs as a general-purpose select. Same component, different data.
Dual start/end time pickers. Type "2p" to jump to 2 PM, or tab through to auto-fill defaults.
Full prop listing for each React component.
Detailed interaction behavior across input modes and devices.
autoSelectOnTab is enabled)role="listbox", aria-selected, aria-haspopup attributesprefers-reduced-motion for animationsEverything you need from a picker, nothing you don't.
On desktop, just start typing in the input. The grid filters instantly. Enter selects the first match.
On mobile, tap to open a bottom sheet with large tap targets. Tap backdrop to close. Input stays read-only.
Arrow keys, Home/End, Tab to close, Escape to dismiss. Full keyboard support without a mouse.
Enable autoSelectOnTab to let users fill forms by tabbing alone. Tab in opens the picker, tab out auto-selects the first option. Ideal for repetitive data entry with predictable defaults.
role="listbox", aria-selected, aria-haspopup. Screen reader tested.
Use as React components or drop in a single <script> tag. Web Components under the hood.
Auto column count based on label length. Auto-positioning above/below. Reduced motion support.
Two ways to use Quickpick — pick the one that fits your project.