City
Where the desk is
The platform list. Vlak chrome.
Presents browser-native options inside a 1px control border.
Where the desk is
The platform list. Vlak chrome.
Three ways in. They share one source, so the pixels match whichever you pick.
npm install @noorddev/vlak-react
// once, next to your app's root
import "@noorddev/vlak-react/css";
import { NativeSelect } from "@noorddev/vlak-react";Precompiled React and one stylesheet. No compiler to configure. Per-component imports work too: @noorddev/vlak-react/components/native-select.
npx @noorddev/vlak-cli add native-select
The StyleX leaf lands in components/vlak/ with its dependencies, for your own compiler to own. See StyleX.
npx shadcn add https://vlak.dev/r/native-select.json
The same registry item, installed by shadcn's CLI.
<link rel="stylesheet" href="node_modules/@noorddev/vlak/css/vlak.css" />
No React. Link vlak.css and use the markup and classes below.
import { NativeSelect } from "@noorddev/vlak-react";
<NativeSelect label="City" defaultValue="alkmaar">
<option value="alkmaar">Alkmaar</option>
<option value="amsterdam">Amsterdam</option>
<option value="rotterdam">Rotterdam</option>
</NativeSelect>The platform list. Vlak chrome.
| Prop | Type | Default | Description |
|---|---|---|---|
label | ReactNode |
Also accepts SelectHTMLAttributes<HTMLSelectElement>.
| Keys | Does |
|---|---|
| Space, Alt + Arrow down | Opens the platform list |
| Arrow up, Arrow down | Changes the value |
| Type a letter | Jumps to a matching option |
<div class="rs-native-select-control"><select class="rs-native-select" aria-label="City"><option>Alkmaar</option><option>Amsterdam</option><option>Rotterdam</option></select><svg class="rs-native-select-icon rs-icon" width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" aria-hidden="true"><path d="M5.5 3.75 L10.5 8.25 L5.5 12.75" transform="rotate(90 8 8)" vector-effect="non-scaling-stroke" /></svg></div>