Components/Select

Forms component

Select

Custom ink-bordered dropdown — no native <select> styling. Click-outside close, full keyboard navigation (↑↓ Enter Esc), selected option shown with a checkmark. Focus lifts with hard shadow.

FormKeyboard navControlledClick-outsideFocus motion
components/forms/Select.jsx
Interactive demos — click to open
Click outside to close · keyboard: ↑↓ Enter Esc
PriorityCampaign visibility priority.
Owner
Category *This field is required.
RegionRegion is locked to your account.
Visual states
idle · selected · invalid · disabled
This field is required.
Region is locked to your account.
Props
PropTypeDefaultDescription
optionsstring[] | {value, label, disabled?}[][]Array of options. Strings auto-convert to {value, label}.
valuestringControlled selected value.
defaultValuestringInitial value for uncontrolled use.
onChange(value: string) => voidCalled when selection changes.
placeholderstring"Select…"Trigger text when nothing is selected.
labelstringnullMono uppercase label above trigger.
hintstringnullHelper text below. Turns coral when invalid.
invalidbooleanfalseCoral border state.
disabledbooleanfalseMutes and disables interaction.
styleCSSProperties{}Merged onto the root element.
Usage
import { Select } from "components/forms/Select";

// Simple string options
<Select
  label="Priority"
  options={["High", "Medium", "Low"]}
  value={priority}
  onChange={setPriority}
/>

// Object options with disabled entry
<Select
  label="Owner"
  options={[
    { value: "maya", label: "Maya Chen" },
    { value: "sam",  label: "Sam Osei", disabled: true },
  ]}
  placeholder="Select owner…"
  onChange={setOwner}
/>