Components
Select
Dropdown component for selecting from a list of options.
Import
import {
Select,
SelectTrigger,
SelectValue,
SelectContent,
SelectItem,
SelectGroup,
SelectLabel,
} from '@framingui/ui';Basic Usage
<Select>
<SelectTrigger className="w-[200px]">
<SelectValue placeholder="Select a fruit" />
</SelectTrigger>
<SelectContent>
<SelectItem value="apple">Apple</SelectItem>
<SelectItem value="banana">Banana</SelectItem>
<SelectItem value="orange">Orange</SelectItem>
</SelectContent>
</Select>With Label
<div className="space-y-2">
<Label htmlFor="country">Country</Label>
<Select>
<SelectTrigger id="country">
<SelectValue placeholder="Select country" />
</SelectTrigger>
<SelectContent>
<SelectItem value="us">United States</SelectItem>
<SelectItem value="uk">United Kingdom</SelectItem>
<SelectItem value="ca">Canada</SelectItem>
<SelectItem value="au">Australia</SelectItem>
</SelectContent>
</Select>
</div>Grouped Options
<Select>
<SelectTrigger className="w-[280px]">
<SelectValue placeholder="Select a timezone" />
</SelectTrigger>
<SelectContent>
<SelectGroup>
<SelectLabel>North America</SelectLabel>
<SelectItem value="est">Eastern (EST)</SelectItem>
<SelectItem value="cst">Central (CST)</SelectItem>
<SelectItem value="pst">Pacific (PST)</SelectItem>
</SelectGroup>
<SelectGroup>
<SelectLabel>Europe</SelectLabel>
<SelectItem value="gmt">GMT</SelectItem>
<SelectItem value="cet">Central European (CET)</SelectItem>
</SelectGroup>
<SelectGroup>
<SelectLabel>Asia</SelectLabel>
<SelectItem value="jst">Japan (JST)</SelectItem>
<SelectItem value="kst">Korea (KST)</SelectItem>
</SelectGroup>
</SelectContent>
</Select>Controlled Select
function ControlledSelect() {
const [value, setValue] = useState('');
return (
<div className="space-y-4">
<Select value={value} onValueChange={setValue}>
<SelectTrigger>
<SelectValue placeholder="Select status" />
</SelectTrigger>
<SelectContent>
<SelectItem value="draft">Draft</SelectItem>
<SelectItem value="published">Published</SelectItem>
<SelectItem value="archived">Archived</SelectItem>
</SelectContent>
</Select>
<p className="text-sm text-neutral-500">
Selected: {value || 'none'}
</p>
</div>
);
}With Icons
<Select>
<SelectTrigger className="w-[200px]">
<SelectValue placeholder="Select priority" />
</SelectTrigger>
<SelectContent>
<SelectItem value="low">
<div className="flex items-center gap-2">
<div className="w-2 h-2 rounded-full bg-green-500" />
Low
</div>
</SelectItem>
<SelectItem value="medium">
<div className="flex items-center gap-2">
<div className="w-2 h-2 rounded-full bg-yellow-500" />
Medium
</div>
</SelectItem>
<SelectItem value="high">
<div className="flex items-center gap-2">
<div className="w-2 h-2 rounded-full bg-red-500" />
High
</div>
</SelectItem>
</SelectContent>
</Select>Disabled States
// Disabled select
<Select disabled>
<SelectTrigger>
<SelectValue placeholder="Disabled" />
</SelectTrigger>
<SelectContent>
<SelectItem value="1">Option 1</SelectItem>
</SelectContent>
</Select>
// Disabled option
<Select>
<SelectTrigger>
<SelectValue placeholder="Choose plan" />
</SelectTrigger>
<SelectContent>
<SelectItem value="free">Free</SelectItem>
<SelectItem value="pro">Pro</SelectItem>
<SelectItem value="enterprise" disabled>
Enterprise (Coming soon)
</SelectItem>
</SelectContent>
</Select>Form Integration
import { useForm, Controller } from 'react-hook-form';
function ProfileForm() {
const { control, handleSubmit } = useForm();
return (
<form onSubmit={handleSubmit(onSubmit)} className="space-y-4">
<div className="space-y-2">
<Label>Role</Label>
<Controller
name="role"
control={control}
render={({ field }) => (
<Select onValueChange={field.onChange} value={field.value}>
<SelectTrigger>
<SelectValue placeholder="Select role" />
</SelectTrigger>
<SelectContent>
<SelectItem value="admin">Admin</SelectItem>
<SelectItem value="editor">Editor</SelectItem>
<SelectItem value="viewer">Viewer</SelectItem>
</SelectContent>
</Select>
)}
/>
</div>
<Button type="submit">Save</Button>
</form>
);
}Searchable Select (Combobox)
For searchable/filterable dropdowns, use the Combobox component instead.
// Use Combobox for searchable select
import { Combobox } from '@framingui/ui';
// See Combobox documentation for usageProps
| Prop | Type | Description |
|---|---|---|
| value | string | Controlled value |
| onValueChange | (value: string) => void | Change handler |
| defaultValue | string | Default value (uncontrolled) |
| disabled | boolean | Disable select |