Component
Select
A dropdown select component for choosing from a list of options. Provides native browser behavior with consistent styling across light and dark modes.
Preview
Rendered from Storybook storiesDefault
With Value
Disabled
Code
select.tsx
import * as React from "react";
type SelectProps = React.SelectHTMLAttributes<HTMLSelectElement>;
export function Select({ className = "", children, ...props }: SelectProps) {
return (
<select
className={[
"flex h-9 w-full rounded-md border px-3 py-1 text-sm shadow-sm transition-colors cursor-pointer",
"bg-white text-zinc-900",
"dark:bg-zinc-900 dark:text-zinc-100",
"border-zinc-200 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-indigo-500",
"dark:border-zinc-700 dark:focus-visible:ring-indigo-400",
"disabled:cursor-not-allowed disabled:opacity-50",
className,
]
.filter(Boolean)
.join(" ")}
{...props}
>
{children}
</select>
);
}
Tests
Powered by Vitestselect.test.tsxPassed
Ran at build time✓ Select renders a select element 33ms✓ Select displays all options 17ms✓ Select changes value on selection 142ms✓ Select can be disabled 3ms✓ Select respects defaultValue prop 4ms✓ Select dark mode applies dark mode styles 3ms✓ Select dark mode applies dark mode focus styles 2ms✓ Select dark mode applies dark mode disabled styles 2msTests 8 passed (8)