# Input
Single-line text input with label, hint, and error states.
## Props
| Name | Type | Default | Description |
| --- | --- | --- | --- |
| `value` | `string` | — | Controlled value. |
| `defaultValue` | `string` | — | Uncontrolled initial value. |
| `placeholder` | `string` | — | Placeholder shown when the input is empty. |
| `label` | `string` | — | Label rendered above the input. |
| `hint` | `string` | — | Helpful hint shown below the input. |
| `error` | `string` | — | Error message shown below the input — replaces the hint and applies error styling. |
| `disabled` | `boolean` | `false` | Disable the input. |
| `type` | `"number" \| "text" \| "email" \| "password" \| "tel" \| "url"` | `text` | HTML input type. |
| `onChange` | `((value: string) => void)` | — | Change handler — receives the new value. |
## Default
**`Default.stories.tsx`**
```tsx
import { Input } from '../../../src/pixie/Input.js';
export default () => ;
```
## With label and hint
**`WithLabelAndHint.stories.tsx`**
```tsx
import { Input } from '../../../src/pixie/Input.js';
export default () => (
);
```
## Error state
**`ErrorState.stories.tsx`**
```tsx
import { Input } from '../../../src/pixie/Input.js';
export default () => (
);
```
## Disabled
**`Disabled.stories.tsx`**
```tsx
import { Input } from '../../../src/pixie/Input.js';
export default () => ;
```