Select

An accessible Select dropdown component with single selection, keyboard navigation, typeahead matching, and reduced motion support.

Open in v0

Last updated: March 29, 2026

Basic Select

Grouped Select

Disabled Select

Installation

npx smoothui-cli add select

Features

  • Single selection from a list of options
  • Flat and grouped option lists
  • Keyboard navigation with arrow keys, Home, End
  • Typeahead character matching for quick selection
  • Controlled and uncontrolled modes
  • Disabled state for individual options or the entire select
  • Smooth open/close animations with spring physics
  • Small and default size variants

Accessibility

Keyboard Interactions

KeyDescription
Enter / SpaceOpens the dropdown when trigger is focused, or selects the focused item
EscapeCloses the dropdown and returns focus to the trigger
Arrow DownMoves focus to the next option
Arrow UpMoves focus to the previous option
HomeMoves focus to the first option
EndMoves focus to the last option
Character keysTypeahead matching — focuses the first option starting with the typed character

ARIA Attributes

AttributeElementPurpose
role="listbox"ContentIdentifies the dropdown as a listbox (provided by Radix)
role="option"ItemIdentifies each item as a selectable option (provided by Radix)
aria-expandedTriggerIndicates whether the dropdown is open or closed
aria-selectedItemIndicates the currently selected option
aria-disabledItem/TriggerIndicates disabled state
aria-labelTriggerProvides an accessible name for the select
aria-labelledbyTriggerReferences an external label element

Screen Reader

  • The trigger announces its expanded/collapsed state and the currently selected value
  • Each option announces its label and selected state
  • Group labels are announced when navigating between groups

Reduced Motion

This component respects the prefers-reduced-motion media query via useReducedMotion from Motion. When reduced motion is preferred, all open/close and transition animations are disabled instantly.

Props

SelectOptionProps