Select is a user interface control that lets users choose a single option from a dropdown list. Triggered by a button, it displays a list of options and collapses once an option is selected, showing the chosen value.
Can be controlled or uncontrolled
Multiple variants, sizes and border radii
Animated using Motion
Two positioning modes
Fully managed focus, keyboard navigation
Handles invalid appearance
Easy to customize
Respects reduce motion via system settings and props
Provides additional control over the styling, icons and data, while still being simple to use.
Select component fully support original Radix API. Customize anything you want.
There’s an additional SelectField component built specifically for easy and clean isomorphic form validation. It leverages Conform and Zod, providing a single source of truth for both frontend and backend while preserving native browser validation APIs. It also seamlessly integrates with the latest React 19 features, such as useServerAction:
Control motion with reduceMotion prop. Additionally, Select respects user system "Reduce motion" settings.
Animations work only when position set to popper.
You can use any Motion Animation values:
Each animation comes with predefined transitionPreset
Alternatively, you can choose transition from this list:
defaultanticipatequickOutovershootOutswiftOutsnappyOutinOutinQuadinCubicinQuartinQuintinExpoinCircoutQuadoutCubicoutQuartoutQuintoutExpooutCircinOutQuadinOutCubicinOutQuartinOutQuintinOutExpoinOutCircinOutBaseinoutlinearAdditionaly, you can control the duration of the transition:
You can use any Motion Transition values:
| Prop | Type | Default |
|---|---|---|
options* | OptionDataProps[] | ― |
groupedOptions* | GroupedOptionDataProps[] | ― |
size | enum | "default" |
radius | enum | ― |
reduceMotion | boolean | false |
indicator | ReactNode | ― |
animation | AnimationProps | ― |
animationPreset | enum | ― |
transition | Transition | ― |
transitionPreset | enumTransitionPreset | ― |
placeholder | ReactNode | ― |
icon | ReactNode | ― |
invalid | boolean | ― |
| Prop | Type | Default |
|---|---|---|
size | enum | "default" |
radius | enum | ― |
reduceMotion | boolean | false |
Support all Radix API
| Prop | Type | Default |
|---|---|---|
size | enum | "default" |
radius | enum | ― |
placeholder | ReactNode | ― |
icon | ReactNode | ― |
invalid | boolean | ― |
Support all Radix API
Support all Radix API
Support all Radix API
Support all Radix API
| Prop | Type | Default |
|---|---|---|
size | enum | "default" |
radius | enum | ― |
animation | AnimationProps | ― |
animationPreset | enum | ― |
transition | Transition | ― |
transitionPreset | enumTransitionPreset | ― |
Support all Radix API
Support all Radix API
Support all Radix API
Support all Radix API
Support all Radix API
Uses CheckIcon as default icon, but could be replaced with any custom.
Abstracted Radix Item components, contains SelectItem, SelectItemText, SelectItemIndicator.
| Prop | Type | Default |
|---|---|---|
indicator | ReactNode | ― |
Support all Radix API
Support all Radix API
Support all Radix API
Support all Radix API
Support all Radix API
Support all Radix API