Select

Choose one option from a list — a dropdown on desktop, a bottom sheet on touch devices.
Stable
Web
iOS
Android
@advui/core
Source

Basic

Installation

pnpm
pnpm add @advui/core
npm
npm install @advui/core

Usage

import { Label, Select } from '@advui/core'

<Label htmlFor="country">Country</Label>
<Select id="country" value={country} onValueChange={setCountry} placeholder="Choose…">
  <Select.Item value="mm">Myanmar</Select.Item>
  <Select.Item value="th">Thailand</Select.Item>
</Select>

Examples

Grouped options

API reference

Select

PropTypeDefaultDescription
valuestring—Selected value.
defaultValuestring—Starting `value` when uncontrolled.
onValueChange(value: string) => void—Called with the chosen value.
placeholderstring'Select…'Shown when nothing is selected.
size'sm' | 'md' | 'lg''md'Trigger height.
invalidboolean—Error styling and `aria-invalid`.
disabledboolean—Not focusable or editable.
idstring—Links the trigger to a Label’s `htmlFor`.
aria-labelstring—Names the select when there is no visible label.
widthSizeTokens | string'100%'Trigger width.

Select.Item

PropTypeDefaultDescription
value requiredstring—Option value. Children are the label.

Select.Group

PropTypeDefaultDescription
labelstring—Group heading.

Accessibility

  • The trigger is a combobox with aria-expanded; options use role="option" and aria-selected.
  • Typeahead: typing letters jumps to matching options.
  • On touch devices options open in a modal sheet with large touch targets.
Keyboard interactions
KeyAction
Enter / Space / ↓Opens the list.
↑ ↓Moves between options.
EnterSelects the focused option.
EscapeCloses without changing the value.

Responsive behavior

Below the md breakpoint on touch devices the list becomes a bottom sheet.

Platform notes

Web
Server-renders a static trigger and mounts the interactive select after hydration (avoids SSR mismatches).
iOS
Opens in a bottom sheet (Tamagui Sheet).
Android
Opens in a bottom sheet; back button closes it. With androidRipple (on in material()), presses show the native ripple.
Since v0.1.0Last updated Nov 2, 2026Edit this page on GitHub