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

Getting started

Theming

Every component reads its color from one CSS variable, --neon. Set it per component, per section or for the whole app.
LiveBetaNew
Upload

--neon-accent: 168 85 247

Per component#

Pass a palette name or any hex value.

<Button color="lime">Approve</Button>
<Badge color="#ff6a00">Beta</Badge>

Per section#

Components that are not given a color inherit --neon-accent from the nearest parent that sets it. neonVars sets it for you.

import { neonVars } from "@/lib/neon"

<section style={neonVars("violet")}>
  <Tabs>…</Tabs>      {/* violet */}
  <Switch />          {/* violet */}
  <Button color="red">Delete</Button> {/* still red */}
</section>

App-wide#

Set the accent once in your global CSS. The value is three space-separated RGB channels, which lets components apply their own alpha.

globals.css
:root {
  --neon-accent: 255 95 162; /* pink */
}

Palette#

Eleven tuned colors. Each one keeps 4.5:1 contrast with dark text when used as a solid fill.

cyan#22d3ee
blue#4f8bff
violet#a855f7
magenta#f046eb
pink#ff5fa2
red#ff4d5e
orange#ff8a3d
amber#fbbf24
lime#a3e635
green#34d399
white#e6edf7

Changing the palette#

The palette lives in lib/neon.ts. Rename, add or retune entries and the color prop picks them up, types included.

lib/neon.ts
export const neonColors = {
  brand: "0 255 170", // your color, as r g b
  cyan: "34 211 238",
  // …
} as const