Select
A customizable select component for choosing from a list of options.
"use client";
import { Button } from "@/components/ui/button/button";
import {
Select,
SelectIcon,
SelectItem,
SelectItemIndicator,
SelectItemText,
SelectList,
SelectPopup,
SelectPortal,
SelectPositioner,
SelectSpacer,
SelectTrigger,
SelectValue,
} from "@/components/ui/select/select";
import styles from "./select-demo.module.css";
const subscriptionPlans = [
{ value: "placeholder", label: "Select a Plan" },
{ value: "Starter", label: "Starter" },
{ value: "Professional", label: "Professional" },
{ value: "Business", label: "Business" },
{ value: "Enterprise", label: "Enterprise" },
];
export default function SelectDemo() {
return (
<Select defaultValue="placeholder" items={subscriptionPlans}>
<SelectTrigger render={<Button className={styles.trigger} size="sm" variant="outline" />}>
<SelectValue>
{(value) => (
<span className={value === "placeholder" ? styles.placeholder : undefined}>
{subscriptionPlans.find((item) => item.value === value)?.label}
</span>
)}
</SelectValue>
<SelectIcon />
</SelectTrigger>
<SelectPortal>
<SelectPositioner alignItemWithTrigger={false} sideOffset={4}>
<SelectPopup>
<SelectSpacer />
<SelectList>
<SelectItem disabled value="placeholder">
<SelectItemText className={styles.itemText}>Select a Plan</SelectItemText>
</SelectItem>
<SelectItem value="Starter">
<SelectItemText>Starter</SelectItemText>
<SelectItemIndicator />
</SelectItem>
<SelectItem value="Professional">
<SelectItemText>Professional</SelectItemText>
<SelectItemIndicator />
</SelectItem>
<SelectItem value="Business">
<SelectItemText>Business</SelectItemText>
<SelectItemIndicator />
</SelectItem>
<SelectItem value="Enterprise">
<SelectItemText>Enterprise</SelectItemText>
<SelectItemIndicator />
</SelectItem>
</SelectList>
<SelectSpacer />
</SelectPopup>
</SelectPositioner>
</SelectPortal>
</Select>
);
}
npx shadcn@latest add @roiui/selectnpx shadcn@latest add @roiui/select-tailwindanatomy
<Select>
<SelectTrigger>
<SelectValue />
<SelectIcon />
</SelectTrigger>
<SelectPortal>
<SelectOverlay />
<SelectPositioner>
<SelectScrollUpArrow />
<SelectPopup>
<SelectArrow />
<SelectList>
<SelectItem>
<SelectItemText />
<SelectItemIndicator />
</SelectItem>
<SelectSeparator />
<SelectGroup>
<SelectGroupLabel />
<SelectItem>
<SelectItemText />
<SelectItemIndicator />
</SelectItem>
</SelectGroup>
</SelectList>
</SelectPopup>
<SelectScrollDownArrow />
</SelectPositioner>
</SelectPortal>
</Select>