# Textarea

**When to use:** Multiline text input — comments, descriptions, notes, code snippets, long-form content. Same API as `Input` but pre-configured for multiline.

**Keywords:** multiline field, comment box, text area

**Import:** `import { Textarea } from '@ahrowe/ui'`

```tsx
import { Textarea, FormValidator, Validators } from '@ahrowe/ui';

// Basic
<Textarea
  label="Description"
  value={description}
  onChange={(value) => setDescription(value)}
  rows={4}
/>

// Auto-resize with validation
const descValidator = new FormValidator('', [Validators.required(), Validators.maxLength(500)]);
<Textarea
  label="Bio"
  formValidator={descValidator}
  autoResize
/>
```

**Key props:**

`Textarea` accepts the same props as `Input` except `multiline`, `type`, `min`, and `max`. Key ones:

| Prop | Type | Description |
|------|------|-------------|
| `label` | `string` | Floating label |
| `value` | `string` | Controlled value |
| `onChange` | `(value: string) => void` | Change handler |
| `rows` | `number` | Initial visible row count |
| `autoResize` | `boolean` | Grows with content, in place of the resize grip. To drop the grip without it: `styles={{ container: { resize: 'none' } }}` |
| `formValidator` | `FormValidator` | Connects to validation |
| `placeholder` | `string` | |
| `readOnly` | `boolean` | |
| `ref` | `Ref<HTMLTextAreaElement>` | Ref to the inner `<textarea>` |

**Slots:** Same as `Input` — `label` `container` `input` `suffix` `upperRightLabel` `fieldset`
