Forms
Textarea
Auto-growing multi-line input with the same states as Input.
pnpm dlx shadcn@latest add @paragon/textareaBrings 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 }