Skip to main content

Select

A dropdown component for selecting one or more options from a list. Supports search, multi-select, and keyboard navigation.

Basic Usage

Variants

Searchable

Multi-Select

Mobile behavior

Select adapts automatically to the input device — no extra wiring needed:

VariantTouch device behavior
searchableOpens as a bottom sheet with a search field pinned at top and the option list filling the height — easier to type-and-pick than a floating dropdown.
Non-searchableFalls back to the native <select> element so users get the OS-native scroller (iOS wheel, Android list).
multipleOpens as a bottom sheet on touch when searchable; otherwise a checkbox list.

Desktop layout is unaffected — a floating dropdown anchored to the trigger.

Mobile considerations

  • Bottom sheet uses .tui-glass surface with drag-to-dismiss.
  • The search input gets font-size: 16px automatically on coarse pointer to prevent iOS auto-zoom.
  • For 4 or fewer fixed options, prefer non-searchable mode so the OS-native picker takes over (more familiar to users).

Error State

Props

PropTypeDefaultDescription
optionsSelectOption[]-Available options ({ value, label, disabled? })
valuestring | string[]-Controlled value (string for single, string[] for multi)
defaultValuestring | string[]-Default value (uncontrolled)
onChange(value: string | string[]) => void-Change callback
placeholderstring'Select...'Placeholder text
variant'outlined' | 'filled''outlined'Visual variant
size'sm' | 'md' | 'lg''md'Size
searchablebooleanfalseEnable search/filter
multiplebooleanfalseEnable multi-select
labelstring-Label displayed above the select
requiredbooleanfalseWhether the field is required (shows red asterisk)
disabledbooleanfalseWhether the select is disabled
errorbooleanfalseWhether the field is in error state
errorMessagestring-Error message
fullWidthbooleanfalseStretches to fill container
classNamestring-Additional CSS class
styleCSSProperties-Inline styles