Select
A dropdown menu for choosing one option from a list..
select-demo.tsx
import {
Select,
SelectContent,
SelectItem,
SelectTrigger,
SelectValue,
} from "@/components/ui/select"
export function SelectDemo() {
return (
<div className="w-80">
<Select>
<SelectTrigger>
<SelectValue placeholder="Select a fruit" />
</SelectTrigger>
<SelectContent>
<SelectItem value="apple">Apple</SelectItem>
<SelectItem value="banana">Banana</SelectItem>
<SelectItem value="cherry">Cherry</SelectItem>
</SelectContent>
</Select>
</div>
)
}
Installation
npx shadcn@latest add https://9ui.dev/r/select
Usage
Imports
import {
Select,
SelectContent,
SelectGroup,
SelectItem,
SelectTrigger,
SelectValue,
} from "@/components/ui/select"
Anatomy
<Select>
<SelectTrigger>
<SelectValue />
</SelectTrigger>
<SelectContent>
<SelectGroup>
<SelectGroupLabel />
<SelectItem />
</SelectGroup>
</SelectContent>
</Select>
Examples
Custom value
select-with-custom-value.tsx
import { useState } from "react"
import Image from "next/image"
import {
Select,
SelectContent,
SelectItem,
SelectTrigger,
SelectValue,
} from "@/components/ui/select"
const users = {
"karen-smith": {
name: "Karen Smith",
image: "/memoji-1.png",
},
"chris-williams": {
name: "Chris Williams",
image: "/memoji-3.png",
},
"melissa-johnson": {
name: "Melissa Johnson",
image: "/memoji-2.png",
},
"frank-lee": {
name: "Frank Lee",
image: "/memoji-4.png",
},
}
export function SelectWithCustomValue() {
const [selected, setSelected] = useState<keyof typeof users | null>(null)
return (
<div className="w-80">
<Select value={selected} onValueChange={setSelected}>
<SelectTrigger>
<SelectValue>
{() =>
selected ? (
<div className="flex items-center gap-2">
<Image
src={users[selected].image}
alt={users[selected].name}
width={16}
height={16}
/>
{users[selected].name}
</div>
) : (
"Assign to"
)
}
</SelectValue>
</SelectTrigger>
<SelectContent>
{Object.entries(users).map(([id, user]) => (
<SelectItem key={id} value={id}>
<div className="flex items-center gap-2">
<Image
src={user.image}
alt={user.name}
width={16}
height={16}
/>
{user.name}
</div>
</SelectItem>
))}
</SelectContent>
</Select>
</div>
)
}
With groups
select-with-groups.tsx
import {
Select,
SelectContent,
SelectGroup,
SelectGroupLabel,
SelectItem,
SelectTrigger,
SelectValue,
} from "@/components/ui/select"
export function SelectWithGroups() {
return (
<div className="w-80">
<Select>
<SelectTrigger>
<SelectValue placeholder="Select an option" />
</SelectTrigger>
<SelectContent>
<SelectGroup>
<SelectGroupLabel>Fruits</SelectGroupLabel>
<SelectItem value="apple">Apple</SelectItem>
<SelectItem value="banana">Banana</SelectItem>
<SelectItem value="cherry">Cherry</SelectItem>
</SelectGroup>
<SelectGroup>
<SelectGroupLabel>Vegetables</SelectGroupLabel>
<SelectItem value="carrot">Carrot</SelectItem>
<SelectItem value="potato">Potato</SelectItem>
<SelectItem value="tomato">Tomato</SelectItem>
</SelectGroup>
</SelectContent>
</Select>
</div>
)
}