shadcn-remix
GitHub

Select

Displays a list of options for the user to pick from—triggered by a button.

import { css } from 'remix/component'

import {
  Select,
  SelectContent,
  SelectGroup,
import { css } from 'remix/component'

import {
  Select,
  SelectContent,
  SelectGroup,
  SelectItem,
  SelectLabel,
  SelectTrigger,
  SelectValue,
} from '#app/ui/select.tsx'

export function SelectDemo() {
  return () => (
    <Select>
      <SelectTrigger mix={css({ width: '180px' })}>
        <SelectValue placeholder="Select a fruit" />
      </SelectTrigger>
      <SelectContent>
        <SelectGroup>
          <SelectLabel>Fruits</SelectLabel>
          <SelectItem value="apple">Apple</SelectItem>
          <SelectItem value="banana">Banana</SelectItem>
          <SelectItem value="blueberry">Blueberry</SelectItem>
          <SelectItem value="grapes">Grapes</SelectItem>
          <SelectItem value="pineapple">Pineapple</SelectItem>
        </SelectGroup>
      </SelectContent>
    </Select>
  )
}

Installation

$ pnpm dlx shadcn@latest add https://www.shadcn-remix.com/r/select.json

Usage

import { css } from 'remix/component'

import {
  Select,
  SelectContent,
  SelectGroup,
  SelectItem,
  SelectTrigger,
  SelectValue,
} from '#app/ui/select.tsx'
<Select>
  <SelectTrigger mix={css({ width: '180px' })}>
    <SelectValue placeholder="Theme" />
  </SelectTrigger>
  <SelectContent>
    <SelectGroup>
      <SelectItem value="light">Light</SelectItem>
      <SelectItem value="dark">Dark</SelectItem>
      <SelectItem value="system">System</SelectItem>
    </SelectGroup>
  </SelectContent>
</Select>

Examples

Scrollable

A select with many items that scrolls.

import { css } from 'remix/component'

import {
  Select,
  SelectContent,
  SelectGroup,
import { css } from 'remix/component'

import {
  Select,
  SelectContent,
  SelectGroup,
  SelectItem,
  SelectLabel,
  SelectTrigger,
  SelectValue,
} from '#app/ui/select.tsx'

export function SelectScrollable() {
  return () => (
    <Select>
      <SelectTrigger mix={css({ width: '280px' })}>
        <SelectValue placeholder="Select a timezone" />
      </SelectTrigger>
      <SelectContent>
        <SelectGroup>
          <SelectLabel>North America</SelectLabel>
          <SelectItem value="est">Eastern Standard Time (EST)</SelectItem>
          <SelectItem value="cst">Central Standard Time (CST)</SelectItem>
          <SelectItem value="mst">Mountain Standard Time (MST)</SelectItem>
          <SelectItem value="pst">Pacific Standard Time (PST)</SelectItem>
          <SelectItem value="akst">Alaska Standard Time (AKST)</SelectItem>
          <SelectItem value="hst">Hawaii Standard Time (HST)</SelectItem>
        </SelectGroup>
        <SelectGroup>
          <SelectLabel>Europe & Africa</SelectLabel>
          <SelectItem value="gmt">Greenwich Mean Time (GMT)</SelectItem>
          <SelectItem value="cet">Central European Time (CET)</SelectItem>
          <SelectItem value="eet">Eastern European Time (EET)</SelectItem>
          <SelectItem value="west">
            Western European Summer Time (WEST)
          </SelectItem>
          <SelectItem value="cat">Central Africa Time (CAT)</SelectItem>
          <SelectItem value="eat">East Africa Time (EAT)</SelectItem>
        </SelectGroup>
        <SelectGroup>
          <SelectLabel>Asia</SelectLabel>
          <SelectItem value="msk">Moscow Time (MSK)</SelectItem>
          <SelectItem value="ist">India Standard Time (IST)</SelectItem>
          <SelectItem value="cst_china">China Standard Time (CST)</SelectItem>
          <SelectItem value="jst">Japan Standard Time (JST)</SelectItem>
          <SelectItem value="kst">Korea Standard Time (KST)</SelectItem>
          <SelectItem value="ist_indonesia">
            Indonesia Central Standard Time (WITA)
          </SelectItem>
        </SelectGroup>
        <SelectGroup>
          <SelectLabel>Australia & Pacific</SelectLabel>
          <SelectItem value="awst">
            Australian Western Standard Time (AWST)
          </SelectItem>
          <SelectItem value="acst">
            Australian Central Standard Time (ACST)
          </SelectItem>
          <SelectItem value="aest">
            Australian Eastern Standard Time (AEST)
          </SelectItem>
          <SelectItem value="nzst">New Zealand Standard Time (NZST)</SelectItem>
          <SelectItem value="fjt">Fiji Time (FJT)</SelectItem>
        </SelectGroup>
        <SelectGroup>
          <SelectLabel>South America</SelectLabel>
          <SelectItem value="art">Argentina Time (ART)</SelectItem>
          <SelectItem value="bot">Bolivia Time (BOT)</SelectItem>
          <SelectItem value="brt">Brasilia Time (BRT)</SelectItem>
          <SelectItem value="clt">Chile Standard Time (CLT)</SelectItem>
        </SelectGroup>
      </SelectContent>
    </Select>
  )
}

API Reference

Select

PropTypeDefault
valuestring-
defaultValuestring-
onValueChange((value: string) => void)-
openboolean-
defaultOpenboolean-
onOpenChange((open: boolean) => void)-
namestring-
disabledboolean-
requiredboolean-
formstring-
autoCompletestring-

SelectGroup

PropTypeDefault
mixMixValue-

SelectValue

PropTypeDefault
placeholderRemixNode-
mixMixValue-

SelectTrigger

PropTypeDefault
size"default" | "sm""default"
mixMixValue-

SelectContent

PropTypeDefault
position"item-aligned" | "popper""item-aligned"
sideSide"bottom"
alignAlign"center"
sideOffsetnumber0
alignOffsetnumber0
mixMixValue-

SelectLabel

PropTypeDefault
mixMixValue-

SelectItem

PropTypeDefault
valuestring-
disabledboolean-
textValuestring-
mixMixValue-

SelectSeparator

PropTypeDefault
mixMixValue-