Search

Jump to any page.

Forms

Textarea

Auto-growing multi-line input with the same states as Input.

pnpm dlx shadcn@latest add @paragon/textarea
Brings incn

States

Same state language as Input.

Focus
Invalid
Disabled
Read-only
registry/paragon/ui/textarea.tsx
import * as React from "react"
import { cn } from "cn"

/** Grows with its content (field-sizing). Cap it with max-h-* when needed. */
function Textarea({ className, ...props }: React.ComponentProps<"textarea">) {
  return (
    <textarea
      data-slot="textarea"
      className={cn(
        "flex field-sizing-content min-h-24 w-full rounded-button border border-input bg-card/70 px-3.5 py-2.5 text-base leading-relaxed text-foreground outline-none md:text-[0.9375rem]",
        "transition-[border-color,box-shadow,background-color] duration-(--duration-base) ease-paragon",
        "placeholder:text-muted-foreground",
        "hover:border-foreground/35",
        "focus-visible:border-ring focus-visible:bg-card focus-visible:ring-4 focus-visible:ring-ring/15",
        "aria-invalid:border-destructive aria-invalid:focus-visible:ring-destructive/15",
        "read-only:not-disabled:border-dashed read-only:not-disabled:bg-transparent",
        "disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-secondary/60 disabled:opacity-55",
        "dark:bg-input/15 dark:focus-visible:bg-input/25",
        className
      )}
      {...props}
    />
  )
}

export { Textarea }