<!-- source-hash: 0d873ee81fa30b5916e604a92d4925d2 -->
A layout wrapper component that provides consistent label and error message chrome for form fields, with reserved space to prevent layout shifts.

## Key Components

### `FieldWrapper`
A `forwardRef` component that wraps form field children with optional label and error/warning message display.

### `FieldWrapperProps`
| Prop | Type | Default | Description |
|------|------|---------|-------------|
| `label` | `string` | — | Label text rendered above the field |
| `error` | `string` | — | Error message rendered below the field |
| `errorVariant` | `"error" \| "warning"` | `"error"` | Controls error text color (red vs yellow) |
| `className` | `string` | — | Additional classes for the outer wrapper |
| `children` | `React.ReactNode` | — | The form field element(s) |

### Behavior Notes
- When neither `label` nor `error` is provided, the wrapper renders as `contents` (no extra DOM box).
- The error message is absolutely positioned (`translate-y-full`) below the field, preventing layout shifts in the surrounding form.
- Long error messages are `truncate`d with the full text accessible via the `title` attribute.

## Usage Example

```typescript
import { FieldWrapper } from "./field-wrapper"
import { TextInput } from "./text-input"

// Standard field with label and error
<FieldWrapper label="Email address" error="Invalid email format">
  <TextInput type="email" value={email} onChange={handleChange} />
</FieldWrapper>

// Warning variant
<FieldWrapper
  label="Username"
  error="Username is already taken"
  errorVariant="warning"
>
  <TextInput value={username} onChange={handleChange} />
</FieldWrapper>

// No chrome — wrapper renders as contents
<FieldWrapper>
  <TextInput placeholder="Search..." />
</FieldWrapper>
```