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

Textarea

Multi-line field that grows with its content and counts characters.

0 / 280 characters

Goes straight to the team. We read every one.

Installation#

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

Usage#

import { Textarea } from "@/components/ui/textarea"

<Textarea label="Feedback" maxLength={280} showCount />

Examples#

Auto-resize

The field grows with its content between minRows and maxRows, then scrolls.

Grows with each line up to 8, then scrolls.

Character limit

With maxLength, the count turns amber in the last 10% and red at the limit.

117 / 120 characters

Shown on your public profile.

Error and disabled

Major releases need release notes before they can ship.

Generated from the merge commit.

API reference#

Textarea

Also accepts every native textarea attribute, and the ref points at the <textarea>. className and style go to the field box around it.

PropTypeDefault
labelReactNode

Visible label, linked to the textarea.

—
descriptionReactNode

Helper text under the field.

—
errorReactNode

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

—
autoResizeboolean

Grow with the content. When off, rows applies and the field resizes by hand.

true
minRowsnumber

Starting height in lines.

3
maxRowsnumber

Height in lines before the field scrolls.

10
showCountboolean

Character count in the corner, as count / maxLength when maxLength is set.

false
colorNeonColor

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

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

Padding, text size and line height.

"md"
classNamestring

Classes for the field box: border, background, radius.

—
containerClassNamestring

Classes for the outer block with the label and message.

—

Accessibility#

  • The count is linked with aria-describedby, so screen readers read it when the field gets focus.
  • maxLength is the native attribute, so typing and pasting stop at the limit.
  • Auto-resize re-measures when the value changes and when the field's width changes.