A listbox-style select built on Dropdown — an options array, not <option> children, so it's
no longer a native <select> underneath. That trades the free native behavior (real
<select>/<option>, "menu"/"menuitem" ARIA roles rather than the more semantically exact
"listbox"/"option") for the same look, keyboard nav, and positioning every other Dropdown-based
menu in this system already has.
tsx
<Select defaultValue="fr" label="Country" />defaultValue
label
Examples
options takes plain data, not JSX — each entry's own disabled flag skips it during keyboard
navigation without needing a conditionally-rendered <DropdownItem>:
tsx
<Select
label="Country"
placeholder="Choose a country…"
options={[
{ value: "us", label: "United States" },
{ value: "ca", label: "Canada" },
{ value: "mx", label: "Mexico", disabled: true },
]}
/>Controlled, for when the selection drives something else on the page (a shipping estimate, a
dependent second Select):
tsx
const [country, setCountry] = useState("us");
<Select label="Country" value={country} onChange={setCountry} options={countries} />;Props
| Prop | Type | Default | Description |
|---|---|---|---|
| className | text | — | — |
| defaultValue | text | — | — |
| description | text | — | — |
| disabled | boolean | — | — |
| error | text | — | — |
| label | text | — | — |
| onChange | readonly | — | — |
| options * | readonly | — | — |
| placeholder | text | — | Shown on the trigger when nothing is selected yet. |
| size | s | m | l | "m" | — |
| success | text | — | — |
| value | text | — | — |