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:
default
anticipate
quickOut
overshootOut
swiftOut
snappyOut
inOut
inQuad
inCubic
inQuart
inQuint
inExpo
inCirc
outQuad
outCubic
outQuart
outQuint
outExpo
outCirc
inOutQuad
inOutCubic
inOutQuart
inOutQuint
inOutExpo
inOutCirc
inOutBase
in
out
linear
Additionaly, 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 | enum TransitionPreset | ― |
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 | enum TransitionPreset | ― |
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.