Select

Select displays a collapsible list of options and allows a user to select one of them.

<Select
  aria-label={trimmedLabel ? undefined : "Provider"}
  placeholder={trimmedPlaceholder || undefined}
  isDisabled={isDisabled}
>
  {trimmedLabel ? <Label>{trimmedLabel}</Label> : null}
  <SelectTrigger />
  <SelectContent selectionMode={selectionMode === "multiple" ? "multiple" : undefined}>
    <SelectItem id="perplexity">Perplexity</SelectItem>
    <SelectItem id="replicate">Replicate</SelectItem>
    <SelectItem id="together-ai">Together AI</SelectItem>
    <SelectItem id="eleven-labs">ElevenLabs</SelectItem>
  </SelectContent>
</Select>

Installation

npx shadcn@latest add @dotui/select

Usage

Use Select to allow users to choose a single option from a collapsible list of options when space is limited.

import { Select, SelectContent, SelectItem, SelectTrigger } from "@/components/ui/select";
<Select>
  <SelectTrigger />
  <SelectContent>
    <SelectItem>Option 1</SelectItem>
    <SelectItem>Option 2</SelectItem>
  </SelectContent>
</Select>

Composition

Select is built on top of primitive components that you can use directly for full customization:

  • SelectTrigger → wraps Button
  • SelectContent → wraps Popover + ListBox
  • SelectItem → re-exports ListBoxItem

When you need more control, you can compose the primitives directly:

import { Select, SelectValue } from "@/components/ui/select";
import { Button } from "@/components/ui/button";
import { Popover } from "@/components/ui/popover";
import { ListBox, ListBoxItem, ListBoxSection, ListBoxSectionHeader } from "@/components/ui/list-box";
<Select>
  <Button variant="outline">
    <SelectValue placeholder="Select provider" />
    <ChevronDownIcon />
  </Button>
  <Popover placement="bottom-start">
    <ListBox>
      <ListBoxSection>
        <ListBoxSectionHeader>AI Providers</ListBoxSectionHeader>
        <ListBoxItem id="openai">OpenAI</ListBoxItem>
        <ListBoxItem id="anthropic">Anthropic</ListBoxItem>
      </ListBoxSection>
    </ListBox>
  </Popover>
</Select>

This approach lets you:

  • Use any Button variant or custom trigger
  • Control Popover placement and behavior
  • Add sections, headers, and custom ListBoxItem content
  • Reuse the same primitives across Select, Combobox, Menu, etc.

Playground

Use the controls below to experiment with different select props and see the live preview and code update.

Country
<Select placeholder="Select a country">
  <Label>Country</Label>
  <SelectTrigger />
  <SelectContent>
    <SelectItem id="us">United States</SelectItem>
    <SelectItem id="uk">United Kingdom</SelectItem>
    <SelectItem id="fr">France</SelectItem>
    <SelectItem id="de">Germany</SelectItem>
    <SelectItem id="jp">Japan</SelectItem>
  </SelectContent>
</Select>

API Reference

Select

A select displays a collapsible list of options and allows a user to select one of them.

PropType
string
boolean
ReactNode | function
"single"
Key | null
Key
function
Iterable<Key>
Key | null
Key | null
function

SelectContent

Missing description.

PropType
Placement
boolean
boolean
DragAndDropHooks<NoInfer<T>>
"grid" | "stack"
Orientation
ReactNode | function
Iterable<T>
ReactNode | function
readonly any[]
SelectionMode
SelectionBehavior
Iterable<Key> | "all"
Iterable<Key> | "all"
function
Iterable<Key>
boolean
boolean
boolean
boolean
"none" | "clearSelection"

Last updated on 1/13/2026

Built with passion by @mehdibha.