Installation
npx logic2b@latest add native-selectUsage
import { NativeSelect } from "@/components/ui/native-select"
<NativeSelect defaultValue="apple" className="w-[180px]">
<option value="apple">Apple</option>
<option value="banana">Banana</option>
</NativeSelect>
Native Select vs. Select
Use NativeSelect instead of Select when you
want the browser’s own picker rather than a custom listbox:
- Mobile — opens the OS-native wheel/sheet picker instead of a popover, which is what most users expect on touch devices.
- Long option lists — native scrolling and type-ahead, no virtualization needed.
- Forms without JS interactivity budget — it’s a real
<select>, so it works with native form submission and<form>validation out of the box.
Reach for Select instead when you need custom option content (icons,
descriptions, grouping headers) or a listbox that visually matches Radix’s
popover styling exactly.
Examples
Disabled
API
| Prop | Type | Default |
|---|---|---|
size |
sm | default |
default |
disabled |
boolean |
false |
aria-invalid |
boolean |
— |
| …props | React.ComponentProps<"select"> |
— |
Accessibility
Renders a real <select> element, so it inherits the browser’s built-in
listbox semantics and keyboard support for free:
- Opens with Enter/Space/↓, closes with Esc or a selection.
- Type-ahead jumps to the first matching option.
- Assistive technology announces the control as a native select — no ARIA wiring needed.
- Pair with a
<label htmlFor>(or wrap in aField) for an accessible name.