<!-- source-hash: ab03748717bd50a809cf19a269adcb31 -->
Storybook stories for the `Textarea` UI component, covering all interactive states, variants, and compositional patterns used across the Flamingo/OpenFrame platform.

## Key Components

| Export | Description |
|--------|-------------|
| `Default` | Basic textarea with placeholder text |
| `WithValue` | Pre-filled textarea using `defaultValue` |
| `Disabled` / `DisabledWithValue` | Read-only disabled states |
| `CustomRows` | Textarea with a configurable `rows` count |
| `NoResize` | Fixed-height textarea via `!resize-none` class |
| `Invalid` | Error/invalid visual state |
| `WithLabel` | Textarea paired with a label |
| `WithLabelAndError` | Label + inline validation error message |
| `WithErrorOnly` | Validation error without a label |
| `AllVariants` | Side-by-side comparison of all variants |

## Configurable ArgTypes

| Arg | Type | Description |
|-----|------|-------------|
| `placeholder` | `text` | Hint text shown when empty |
| `disabled` | `boolean` | Prevents user interaction |
| `invalid` | `boolean` | Applies error styling |
| `rows` | `number` | Visible row height |

## Usage Example

```typescript
import { Textarea } from '@/components/ui/textarea'

// Basic usage
<Textarea placeholder="Enter description..." />

// With label and validation error
<Textarea
  label="Description"
  placeholder="Enter description..."
  error="Description is required"
  invalid
/>

// Disabled with pre-filled content
<Textarea
  defaultValue="This content is read-only."
  disabled
/>

// Fixed height, no resize
<Textarea
  placeholder="Fixed height..."
  rows={8}
  className="!resize-none"
/>
```