Native Select
---import { NativeSelect, NativeSelectOption } from "@/components/ui/native-select"---
<NativeSelect class="w-full max-w-xs"> <NativeSelectOption value="">Select status</NativeSelectOption> <NativeSelectOption value="todo">Todo</NativeSelectOption> <NativeSelectOption value="in-progress">In Progress</NativeSelectOption> <NativeSelectOption value="done">Done</NativeSelectOption> <NativeSelectOption value="cancelled">Cancelled</NativeSelectOption></NativeSelect>Installation
Section titled “Installation”To install the native select component, run the following command:
npx shadcn@latest add @fulldev/native-selectimport { NativeSelect, NativeSelectOptGroup, NativeSelectOption,} from "@/components/ui/native-select"<NativeSelect> <NativeSelectOption value="">Select a fruit</NativeSelectOption> <NativeSelectOption value="apple">Apple</NativeSelectOption> <NativeSelectOption value="banana">Banana</NativeSelectOption> <NativeSelectOption value="blueberry">Blueberry</NativeSelectOption> <NativeSelectOption value="grapes" disabled> Grapes </NativeSelectOption> <NativeSelectOption value="pineapple">Pineapple</NativeSelectOption></NativeSelect>Examples
Section titled “Examples”With Groups
Section titled “With Groups”Organize options using NativeSelectOptGroup for better categorization.
---import { NativeSelect, NativeSelectOptGroup, NativeSelectOption,} from "@/components/ui/native-select"---
<NativeSelect class="w-full max-w-xs"> <NativeSelectOption value="">Select department</NativeSelectOption> <NativeSelectOptGroup label="Engineering"> <NativeSelectOption value="frontend">Frontend</NativeSelectOption> <NativeSelectOption value="backend">Backend</NativeSelectOption> <NativeSelectOption value="devops">DevOps</NativeSelectOption> </NativeSelectOptGroup> <NativeSelectOptGroup label="Sales"> <NativeSelectOption value="sales-rep">Sales Rep</NativeSelectOption> <NativeSelectOption value="account-manager"> Account Manager </NativeSelectOption> <NativeSelectOption value="sales-director"> Sales Director </NativeSelectOption> </NativeSelectOptGroup> <NativeSelectOptGroup label="Operations"> <NativeSelectOption value="support">Customer Support</NativeSelectOption> <NativeSelectOption value="product-manager"> Product Manager </NativeSelectOption> <NativeSelectOption value="ops-manager"> Operations Manager </NativeSelectOption> </NativeSelectOptGroup></NativeSelect>Disabled State
Section titled “Disabled State”Disable individual options or the entire select component.
---import { NativeSelect, NativeSelectOption } from "@/components/ui/native-select"---
<NativeSelect disabled class="w-full max-w-xs"> <NativeSelectOption value="">Select priority</NativeSelectOption> <NativeSelectOption value="low">Low</NativeSelectOption> <NativeSelectOption value="medium">Medium</NativeSelectOption> <NativeSelectOption value="high">High</NativeSelectOption> <NativeSelectOption value="critical">Critical</NativeSelectOption></NativeSelect>Invalid State
Section titled “Invalid State”Show validation errors with the aria-invalid attribute and error styling.
---import { NativeSelect, NativeSelectOption } from "@/components/ui/native-select"---
<NativeSelect aria-invalid="true" class="w-full max-w-xs"> <NativeSelectOption value="">Select role</NativeSelectOption> <NativeSelectOption value="admin">Admin</NativeSelectOption> <NativeSelectOption value="editor">Editor</NativeSelectOption> <NativeSelectOption value="viewer">Viewer</NativeSelectOption> <NativeSelectOption value="guest">Guest</NativeSelectOption></NativeSelect>Accessibility
Section titled “Accessibility”- The component maintains all native HTML select accessibility features.
- Screen readers can navigate through options using arrow keys.
- The chevron icon is marked as
aria-hidden="true"to avoid duplication. - Use
aria-labeloraria-labelledbyfor additional context when needed.
<NativeSelect aria-label="Choose your preferred language"> <NativeSelectOption value="en">English</NativeSelectOption> <NativeSelectOption value="es">Spanish</NativeSelectOption> <NativeSelectOption value="fr">French</NativeSelectOption></NativeSelect>