NeonKit
esc
  • IntroductionGetting started
  • InstallationGetting started
  • ThemingGetting started
  • Use with AIGetting started
  • All componentsGetting started
  • ButtonSolid, outline, soft, ghost and link buttons that light up on hover.Forms
  • InputText field with an animated neon focus ring, icons, labels and error states.Forms
  • TextareaMulti-line field that grows with its content and counts characters.Forms
  • SelectKeyboard-friendly listbox with a glowing popover and typeahead.Forms
  • CheckboxCheckbox with a drawn-on checkmark and indeterminate state.Forms
  • Radio GroupSingle choice from a set, with arrow-key navigation and card layouts.Forms
  • SwitchA toggle that powers on like a neon tube.Forms
  • SliderPointer and keyboard slider with a glowing track and optional range.Forms
  • OTP InputOne-time code input with auto-advance, paste and backspace handling.Forms
  • BadgeStatus labels with optional live dot and remove button.Data Display
  • AvatarProfile image with initials fallback, status light and stacked groups.Data Display
  • CardSurface with header, content and footer slots and a lit edge.Data Display
  • KbdKeyboard keys and shortcuts that glow when pressed.Data Display
  • TabsTabbed panels with a sliding light indicator and roving focus.Data Display
  • AccordionCollapsible sections with smooth height animation.Data Display
  • ProgressLinear and circular progress with a moving highlight.Feedback
  • SpinnerRing, dots and bars loaders in any neon color.Feedback
  • SkeletonLoading placeholders with a scanning shimmer.Feedback
  • AlertInline messages for info, success, warning and errors.Feedback
  • ToastStacked notifications with a tiny toast() API. No provider needed.Feedback
  • DialogAccessible modal built on the native dialog element.Overlay
  • TooltipHover and focus hints on four sides.Overlay
  • Neon TextText rendered as a glowing tube sign, with optional power-on flicker.Effects
  • Border BeamA beam of light that travels around any element's border.Effects
  • Spotlight CardCard whose border and surface light up under the cursor.Effects
  • Retro GridSynthwave perspective grid that scrolls toward the horizon.Effects

Components/Forms

Select

Keyboard-friendly listbox with a glowing popover and typeahead.

Where your functions run. Pick the one closest to your database.

Installation#

npx shadcn@latest add https://get-neonkit.vercel.app/r/select.json

Usage#

import { Select } from "@/components/ui/select"

<Select
  label="Region"
  defaultValue="fra1"
  options={[
    { value: "fra1", label: "Frankfurt" },
    { value: "iad1", label: "Washington, D.C." },
  ]}
/>

Examples#

In a form

Give it a name and the value submits with the form through a hidden input.

Sizes

Error and disabled

Pick a timezone so the weekly report lands on Monday morning.

Only workspace owners can change the plan.

API reference#

Select

Also accepts native button attributes, and the ref points at the trigger. className and style go to the trigger.

PropTypeDefault
optionsSelectOption[]

The choices, in order.

—
valuestring

Controlled value.

—
defaultValuestring

Initial value when uncontrolled.

—
onValueChange(value: string) => void

Called when the user picks a different option.

—
placeholderReactNode

Shown while nothing is selected.

"Select…"
namestring

Submits the value with a surrounding form.

—
labelReactNode

Visible label. Names both the trigger and the list.

—
descriptionReactNode

Helper text under the trigger.

—
errorReactNode

Red invalid state and message. Replaces description. Pass true for the state without a message.

—
disabledboolean

Blocks opening and leaves the value out of form data.

false
colorNeonColor

Palette name or hex. Falls back to --neon-accent, then cyan.

inherited
size"sm" | "md" | "lg"

Trigger height and option padding.

"md"
containerClassNamestring

Classes for the outer block with the label, list and message.

—

SelectOption

PropTypeDefault
valuestring

Unique value, also the React key.

—
labelstring

Shown in the list and the trigger. Typeahead matches against it.

—
descriptionstring

Second line, shown in the list only.

—
iconReactNode

Shown before the label in the list and the trigger.

—
disabledboolean

Visible but can't be picked.

false

Accessibility#

  • Follows the WAI-ARIA select-only combobox pattern: focus stays on the trigger and aria-activedescendant tracks the highlighted option.
  • Enter, Space and the arrow keys open the list. Arrows move, Home and End jump, Enter or Space picks, Escape and Tab close.
  • Typing letters jumps to the first matching option. Pressing the same letter again cycles through matches.
  • Without a visible label, pass aria-label. It names both the trigger and the list.
  • The list is positioned below the trigger, so an overflow-hidden ancestor will clip it.