Components

Native Select

A styled native HTML select element.

Installation

Cortexcn
pnpm dlx shadcn@latest add @cortexcn/native-select

Usage

import { NativeSelect, NativeSelectOptGroup, NativeSelectOption } from "@/components/native-select";

Examples

Basic

import { NativeSelect, NativeSelectOption } from "@/components/native-select"export function NativeSelectBasic() {  return (    <div className="flex flex-col gap-6">      <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>    </div>  )}

With groups

import { NativeSelect, NativeSelectOptGroup, NativeSelectOption } from "@/components/native-select"export function NativeSelectWithGroups() {  return (    <div className="flex flex-col gap-6">      <NativeSelect>        <NativeSelectOption value="">Select a food</NativeSelectOption>        <NativeSelectOptGroup label="Fruits">          <NativeSelectOption value="apple">Apple</NativeSelectOption>          <NativeSelectOption value="banana">Banana</NativeSelectOption>          <NativeSelectOption value="blueberry">Blueberry</NativeSelectOption>        </NativeSelectOptGroup>        <NativeSelectOptGroup label="Vegetables">          <NativeSelectOption value="carrot">Carrot</NativeSelectOption>          <NativeSelectOption value="broccoli">Broccoli</NativeSelectOption>          <NativeSelectOption value="spinach">Spinach</NativeSelectOption>        </NativeSelectOptGroup>      </NativeSelect>    </div>  )}

Sizes

import { NativeSelect, NativeSelectOption } from "@/components/native-select"export function NativeSelectSizes() {  return (    <div className="flex flex-col gap-6">      <div className="flex flex-col gap-4">        <NativeSelect size="sm">          <NativeSelectOption value="">Select a fruit</NativeSelectOption>          <NativeSelectOption value="apple">Apple</NativeSelectOption>          <NativeSelectOption value="banana">Banana</NativeSelectOption>          <NativeSelectOption value="blueberry">Blueberry</NativeSelectOption>        </NativeSelect>        <NativeSelect size="default">          <NativeSelectOption value="">Select a fruit</NativeSelectOption>          <NativeSelectOption value="apple">Apple</NativeSelectOption>          <NativeSelectOption value="banana">Banana</NativeSelectOption>          <NativeSelectOption value="blueberry">Blueberry</NativeSelectOption>        </NativeSelect>      </div>    </div>  )}

With field

Select your country of residence.

import { Field, FieldDescription, FieldLabel } from "@/components/field"import { NativeSelect, NativeSelectOption } from "@/components/native-select"export function NativeSelectWithField() {  return (    <div className="flex flex-col gap-6">      <Field>        <FieldLabel htmlFor="native-select-country">Country</FieldLabel>        <NativeSelect id="native-select-country">          <NativeSelectOption value="">Select a country</NativeSelectOption>          <NativeSelectOption value="us">United States</NativeSelectOption>          <NativeSelectOption value="uk">United Kingdom</NativeSelectOption>          <NativeSelectOption value="ca">Canada</NativeSelectOption>          <NativeSelectOption value="au">Australia</NativeSelectOption>        </NativeSelect>        <FieldDescription>Select your country of residence.</FieldDescription>      </Field>    </div>  )}

Disabled

import { NativeSelect, NativeSelectOption } from "@/components/native-select"export function NativeSelectDisabled() {  return (    <div className="flex flex-col gap-6">      <NativeSelect disabled>        <NativeSelectOption value="">Disabled</NativeSelectOption>        <NativeSelectOption value="apple">Apple</NativeSelectOption>        <NativeSelectOption value="banana">Banana</NativeSelectOption>        <NativeSelectOption value="blueberry">Blueberry</NativeSelectOption>      </NativeSelect>    </div>  )}

Invalid

import { NativeSelect, NativeSelectOption } from "@/components/native-select"export function NativeSelectInvalid() {  return (    <div className="flex flex-col gap-6">      <NativeSelect aria-invalid="true">        <NativeSelectOption value="">Error state</NativeSelectOption>        <NativeSelectOption value="apple">Apple</NativeSelectOption>        <NativeSelectOption value="banana">Banana</NativeSelectOption>        <NativeSelectOption value="blueberry">Blueberry</NativeSelectOption>      </NativeSelect>    </div>  )}

Adapted from the shadcn/ui Native Select (MIT).