Form

Textarea

Multi-line text field. Shares Input's visual language — same fill, border, and radius, with a taller minimum height and a vertical resize handle.

Preview

Code

src/components/ui/Textarea.tsx
import type { TextareaHTMLAttributes } from "react";

/**
 * Textarea — `textarea` token from hyliox-waitlist-card.md. Shares the
 * `input` visual language (fill, border, radius); only the min-height and
 * resize handle differ.
 */
export function Textarea({
  className = "",
  ...props
}: TextareaHTMLAttributes<HTMLTextAreaElement> & { className?: string }) {
  return (
    <textarea
      {...props}
      className={`min-h-26 w-full resize-y rounded-md border border-border-subtle bg-(--glass-input-bg) px-4 py-3.5 text-base text-on-surface placeholder:text-secondary transition-colors focus:border-primary focus:outline-none md:text-sm ${className}`}
    />
  );
}

Installation

Usage
import { Textarea } from "@/components/ui/Textarea";

<Textarea placeholder="Describe what you're trying to build…" />

Props

PropTypeDefaultDescription
classNamestring""Extra classes merged onto the textarea.
...propsTextareaHTMLAttributes<HTMLTextAreaElement>Any native textarea prop (value, onChange, rows, etc.).

Accessibility

Same labeling note as Input — pair with a visible label in real usage.

web design.