Select
A styled native select for choosing one option from a list.
Default
tsx
import { Select } from "@hummingbirdui/react";
export default function SelectDefault() {
return (
<Select defaultValue="">
<option value="" disabled>
Choose a plan
</option>
<option value="free">Free</option>
<option value="pro">Pro</option>
<option value="team">Team</option>
</Select>
);
}Variants
The variant prop switches between outline (default, bordered) and fill (a filled surface).
tsx
import { Select } from "@hummingbirdui/react";
export default function SelectVariants() {
return (
<div className="space-y-4 max-w-sm mx-auto">
<Select variant="outline" defaultValue="pro">
<option value="free">Free</option>
<option value="pro">Pro</option>
<option value="team">Team</option>
</Select>
<Select variant="fill" defaultValue="pro">
<option value="free">Free</option>
<option value="pro">Pro</option>
<option value="team">Team</option>
</Select>
</div>
);
}Sizes
The size prop offers three sizes: sm, md (default), and lg.
tsx
import { Select } from "@hummingbirdui/react";
export default function SelectSizes() {
return (
<div className="space-y-4 max-w-sm mx-auto">
<Select size="sm" defaultValue="pro">
<option value="free">Free</option>
<option value="pro">Pro</option>
<option value="team">Team</option>
</Select>
<Select size="md" defaultValue="pro">
<option value="free">Free</option>
<option value="pro">Pro</option>
<option value="team">Team</option>
</Select>
<Select size="lg" defaultValue="pro">
<option value="free">Free</option>
<option value="pro">Pro</option>
<option value="team">Team</option>
</Select>
</div>
);
}Colors
The color prop sets the focus accent: secondary, info, success, or warning.
tsx
import { Select } from "@hummingbirdui/react";
export default function SelectColors() {
return (
<div className="space-y-4 max-w-sm mx-auto">
<Select color="secondary" defaultValue="pro">
<option value="free">Secondary</option>
<option value="pro">Pro</option>
</Select>
<Select color="info" defaultValue="pro">
<option value="free">Info</option>
<option value="pro">Pro</option>
</Select>
<Select color="success" defaultValue="pro">
<option value="free">Success</option>
<option value="pro">Pro</option>
</Select>
<Select color="warning" defaultValue="pro">
<option value="free">Warning</option>
<option value="pro">Pro</option>
</Select>
</div>
);
}Validation state
The state prop marks the select valid or invalid, and pairs with a FormText of the matching variant. The invalid state also sets aria-invalid.
Looks good.
Select a plan to continue.
tsx
import { FormField, Select, FormText } from "@hummingbirdui/react";
export default function SelectValidation() {
return (
<div className="space-y-4 max-w-sm mx-auto">
<FormField>
<Select state="valid" defaultValue="pro">
<option value="free">Free</option>
<option value="pro">Pro</option>
</Select>
<FormText variant="valid">Looks good.</FormText>
</FormField>
<FormField>
<Select state="invalid" defaultValue="">
<option value="" disabled>
Choose a plan
</option>
<option value="pro">Pro</option>
</Select>
<FormText variant="invalid">Select a plan to continue.</FormText>
</FormField>
</div>
);
}Disabled
tsx
import { Select } from "@hummingbirdui/react";
export default function SelectDisabled() {
return (
<Select defaultValue="pro" disabled>
<option value="free">Free</option>
<option value="pro">Pro</option>
<option value="team">Team</option>
</Select>
);
}API Reference
Select
| Prop | Type | Default | Description |
|---|---|---|---|
| variant | "outline" | "fill" | "outline" | Visual style of the select. |
| size | "sm" | "md" | "lg" | "md" | Size of the select. |
| color | "secondary" | "info" | "success" | "warning" | — | Focus accent color. |
| state | "valid" | "invalid" | — | Validation state; invalid also sets aria-invalid. |
| asChild | boolean | false | Render as a child element instead of the default. |
| className | string | — | Additional classes merged with the generated classes. |
Styling
Hummingbird React select is styled entirely through Hummingbird's utility classes and CSS variables.
- See the full list of available select classes in the Class overview.
- Visit the CSS Variables documentation to explore all available variables.