import type { JSX } from "preact"; import { cn } from "../../utils/cn.ts"; type TextareaSize = "sm" | "md" | "lg"; export interface TextareaProps extends Omit { label?: string; error?: string; size?: TextareaSize; } export function Textarea(props: TextareaProps): JSX.Element { const { class: classProp, label, error, size = "lg", ...rest } = props; const sizeClasses = { sm: "px-2.5 py-0.5 text-xs", md: "px-3 py-1 text-sm", lg: "px-4 py-2 text-sm", }; const className = cn( "block w-full border border-zinc-200 dark:border-zinc-700 rounded-md bg-white dark:bg-zinc-900 text-zinc-900 dark:text-white placeholder:text-zinc-500 dark:placeholder:text-zinc-400 focus:outline-none focus:ring-2 focus:border-transparent", sizeClasses[size], error ? "border-red-500 dark:border-red-400 focus:ring-red-500 dark:focus:ring-red-400" : "focus:ring-blue-500 dark:focus:ring-blue-400", props.disabled && "bg-zinc-50 dark:bg-zinc-800 text-zinc-500 dark:text-zinc-400 cursor-not-allowed", classProp, ); return (
{label && ( )}