Select
A common form component for choosing a predefined value in a dropdown menu.
API reference
Import the component and assemble its parts:
import { Select } from '@base-ui-components/react/select';
<Select.Root>
  <Select.Trigger>
    <Select.Value />
    <Select.Icon />
  </Select.Trigger>
  <Select.Portal>
    <Select.Backdrop />
    <Select.Positioner>
      <Select.ScrollUpArrow />
      <Select.Popup>
        <Select.Arrow />
        <Select.Item>
          <Select.ItemText />
          <Select.ItemIndicator />
        </Select.Item>
        <Select.Separator />
        <Select.Group>
          <Select.GroupLabel />
        </Select.Group>
      </Select.Popup>
      <Select.ScrollDownArrow />
    </Select.Positioner>
  </Select.Portal>
</Select.Root>Root
Groups all parts of the select. Doesn’t render its own HTML element.
| Prop | Type | Default | |
|---|---|---|---|
name | 
  | 
  | |
defaultValue | 
  | 
  | |
value | 
  | 
  | |
onValueChange | 
  | 
  | |
defaultOpen | 
  | 
  | |
open | 
  | 
  | |
onOpenChange | 
  | 
  | |
actionsRef | 
  | 
  | |
alignItemToTrigger | 
  | 
  | |
modal | 
  | 
  | |
onOpenChangeComplete | 
  | 
  | |
disabled | 
  | 
  | |
readOnly | 
  | 
  | |
required | 
  | 
  | 
Trigger
A button that opens the select menu.
Renders a <div> element.
| Prop | Type | Default | |
|---|---|---|---|
disabled | 
  | 
  | |
className | 
  | 
  | |
render | 
  | 
  | 
| Attribute | Description  | |
|---|---|---|
data-popup-open | Present when the corresponding select is open.  | |
data-pressed | Present when the trigger is pressed.  | |
data-disabled | Present when the select is disabled.  | |
data-readonly | Present when the select is readonly.  | |
data-required | Present when the select is required.  | |
data-valid | Present when the select is in valid state (when wrapped in Field.Root).  | |
data-invalid | Present when the select is in invalid state (when wrapped in Field.Root).  | |
data-dirty | Present when the select's value has changed (when wrapped in Field.Root).  | |
data-touched | Present when the select has been touched (when wrapped in Field.Root).  | |
data-filled | Present when the select has a value (when wrapped in Field.Root).  | |
data-focused | Present when the select trigger is focused (when wrapped in Field.Root).  | |
Value
A text label of the currently selected item.
Renders a <span> element.
| Prop | Type | Default | |
|---|---|---|---|
placeholder | 
  | 
  | |
children | 
  | 
  | |
className | 
  | 
  | |
render | 
  | 
  | 
Icon
An icon that indicates that the trigger button opens a select menu.
Renders a <span> element.
| Prop | Type | Default | |
|---|---|---|---|
className | 
  | 
  | |
render | 
  | 
  | 
Backdrop
An overlay displayed beneath the menu popup.
Renders a <div> element.
| Prop | Type | Default | |
|---|---|---|---|
className | 
  | 
  | |
render | 
  | 
  | 
| Attribute | Description  | |
|---|---|---|
data-open | Present when the select is open.  | |
data-closed | Present when the select is closed.  | |
data-starting-style | Present when the select is animating in.  | |
data-ending-style | Present when the select is animating out.  | |
Portal
A portal element that moves the popup to a different part of the DOM.
By default, the portal element is appended to <body>.
| Prop | Type | Default | |
|---|---|---|---|
container | 
  | 
  | 
Positioner
Positions the select menu popup against the trigger.
Renders a <div> element.
| Prop | Type | Default | |
|---|---|---|---|
align | 
  | 
  | |
alignOffset | 
  | 
  | |
side | 
  | 
  | |
sideOffset | 
  | 
  | |
arrowPadding | 
  | 
  | |
anchor | 
  | 
  | |
collisionBoundary | 
  | 
  | |
collisionPadding | 
  | 
  | |
sticky | 
  | 
  | |
positionMethod | 
  | 
  | |
trackAnchor | 
  | 
  | |
className | 
  | 
  | |
render | 
  | 
  | 
| Attribute | Description  | |
|---|---|---|
data-open | Present when the select popup is open.  | |
data-closed | Present when the select popup is closed.  | |
data-anchor-hidden | Present when the anchor is hidden.  | |
data-side | Indicates which side the select is positioned relative to the trigger.  | |
| CSS Variable | Description  | |
|---|---|---|
--anchor-height | The anchor's height.  | |
--anchor-width | The anchor's width.  | |
--available-height | The available height between the trigger and the edge of the viewport.  | |
--available-width | The available width between the trigger and the edge of the viewport.  | |
--transform-origin | The coordinates that this element is anchored to. Used for animations and transitions.  | |
Popup
A container for the select items.
Renders a <div> element.
| Prop | Type | Default | |
|---|---|---|---|
className | 
  | 
  | |
render | 
  | 
  | 
| Attribute | Description  | |
|---|---|---|
data-open | Present when the select is open.  | |
data-closed | Present when the select is closed.  | |
data-side | Indicates which side the select is positioned relative to the trigger.  | |
data-starting-style | Present when the select is animating in.  | |
data-ending-style | Present when the select is animating out.  | |
Arrow
Displays an element positioned against the select menu anchor.
Renders a <div> element.
| Prop | Type | Default | |
|---|---|---|---|
className | 
  | 
  | |
render | 
  | 
  | 
| Attribute | Description  | |
|---|---|---|
data-open | Present when the select popup is open.  | |
data-closed | Present when the select popup is closed.  | |
data-uncentered | Present when the select arrow is uncentered.  | |
data-anchor-hidden | Present when the anchor is hidden.  | |
data-side | Indicates which side the select is positioned relative to the trigger.  | |
Item
An individual option in the select menu.
Renders a <div> element.
| Prop | Type | Default | |
|---|---|---|---|
label | 
  | 
  | |
value | 
  | 
  | |
disabled | 
  | 
  | |
className | 
  | 
  | |
render | 
  | 
  | 
ItemText
A text label of the select item.
Renders a <div> element.
| Prop | Type | Default | |
|---|---|---|---|
className | 
  | 
  | |
render | 
  | 
  | 
ItemIndicator
Indicates whether the select item is selected.
Renders a <div> element.
| Prop | Type | Default | |
|---|---|---|---|
className | 
  | 
  | |
keepMounted | 
  | 
  | |
render | 
  | 
  | 
Group
Groups related select items with the corresponding label.
Renders a <div> element.
| Prop | Type | Default | |
|---|---|---|---|
className | 
  | 
  | |
render | 
  | 
  | 
GroupLabel
An accessible label that is automatically associated with its parent group.
Renders a <div> element.
| Prop | Type | Default | |
|---|---|---|---|
className | 
  | 
  | |
render | 
  | 
  | 
ScrollUpArrow
An element that scrolls the select menu down when hovered.
Renders a <div> element.
| Prop | Type | Default | |
|---|---|---|---|
className | 
  | 
  | |
keepMounted | 
  | 
  | |
render | 
  | 
  | 
| Attribute | Description  | |
|---|---|---|
data-direction | Indicates the direction of the arrow.  | |
data-side | Indicates which side the arrow is positioned relative to the select.  | |
data-visible | Present when the arrow is visible.  | |
ScrollDownArrow
An element that scrolls the select menu down when hovered.
Renders a <div> element.
| Prop | Type | Default | |
|---|---|---|---|
className | 
  | 
  | |
keepMounted | 
  | 
  | |
render | 
  | 
  | 
| Attribute | Description  | |
|---|---|---|
data-direction | Indicates the direction of the arrow.  | |
data-side | Indicates which side the arrow is positioned relative to the select.  | |
data-visible | Present when the arrow is visible.  | |
Separator
A separator element accessible to screen readers.
Renders a <div> element.
| Prop | Type | Default | |
|---|---|---|---|
orientation | 
  | 
  | |
className | 
  | 
  | |
render | 
  | 
  |