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/Overlay

Tooltip

Hover and focus hints on four sides.

Usesmotion

Installation#

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

Usage#

import { Tooltip } from "@/components/ui/tooltip"

<Tooltip content="Bold ⌘B">
  <Button size="icon" aria-label="Bold"><Bold /></Button>
</Tooltip>

Examples#

Sides

Colors

Pass a palette name or any hex value to color.

On a disabled button

Disabled buttons get no pointer or focus events, so wrap them in a focusable span.

Longer text

Tooltips stay on one line by default. Set a max width and whitespace-normal through className to wrap.

Usage-based billing

API reference#

Tooltip

Other props, including className, go to the tooltip bubble.

PropTypeDefault
contentReactNode

What the tooltip says. Keep it short and non-interactive.

—
childrenReactElement

The trigger. A single element that accepts focus and aria-describedby.

—
side"top" | "right" | "bottom" | "left"

Side of the trigger the tooltip appears on.

"top"
align"start" | "center" | "end"

Alignment along that side.

"center"
delaynumber

Milliseconds before opening on hover. Focus opens immediately and closing is always immediate.

300
colorNeonColor

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

inherited
disabledboolean

Never opens.

false
openboolean

Controlled open state.

—
defaultOpenboolean

Initial state when uncontrolled.

false
onOpenChange(open: boolean) => void

Called when the tooltip wants to open or close.

—

Accessibility#

  • The trigger gets aria-describedby pointing at the tooltip while it's open.
  • Opens on mouse hover and keyboard focus, never on touch, so don't put anything essential in a tooltip.
  • Escape, blur, pointer down and leaving the trigger all close it; you can move the pointer onto the tooltip without it closing.
  • Positioned with CSS, not measured: it won't flip at the viewport edge and an overflow-hidden ancestor will clip it.