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 Root Radix API.
| Prop | Type | Default |
|---|---|---|
size | enum | "default" |
radius | enum | ― |
placeholder | ReactNode | ― |
icon | ReactNode | ― |
invalid | boolean | ― |
Support all Trigger Radix API.
Support all Value Radix API.
Support all Icon Radix API.
Support all Portal Radix API.
| Prop | Type | Default |
|---|---|---|
size | enum | "default" |
radius | enum | ― |
animation | AnimationProps | ― |
animationPreset | enum | ― |
transition | Transition | ― |
transitionPreset | enumTransitionPreset | ― |
Support all Portal and Content Radix API.
Support all Viewport Radix API.
Support all Item Radix API.
Support all ItemText Radix API.
Support all ItemIndicator 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 ScrollUpButton Radix API.
Support all ScrollDownButton Radix API.
Support all Group Radix API.
Support all Label Radix API.
Support all Separator Radix API.
Support all Arrow Radix API.