# UI Component Contracts

This document defines the strict API contracts for the standardized UI components.

## Button Component

### Description
A standard interactive button element that triggers an action.

### Props
| Prop | Type | Default | Description |
|------|------|---------|-------------|
| `variant` | `'primary' \| 'secondary' \| 'danger' \| 'ghost'` | `'primary'` | Visual style of the button. |
| `size` | `'sm' \| 'md' \| 'lg'` | `'md'` | Size of the button. |
| `isLoading` | `boolean` | `false` | If true, shows a spinner and disables interaction. |
| `disabled` | `boolean` | `false` | If true, prevents interaction. |
| `type` | `'button' \| 'submit' \| 'reset'` | `'button'` | HTML button type. |
| `onclick` | `(event: MouseEvent) => void` | `undefined` | Click handler. |
| `class` | `string` | `''` | Additional CSS classes (use sparingly). |

### Slots
- `default`: The content of the button (text or icon).

## Input Component

### Description
A standard text input field with support for labels and error messages.

### Props
| Prop | Type | Default | Description |
|------|------|---------|-------------|
| `label` | `string` | `undefined` | Text label displayed above the input. |
| `value` | `string` | `''` | The current value (bindable). |
| `placeholder` | `string` | `''` | Placeholder text. |
| `error` | `string` | `undefined` | Error message displayed below the input. |
| `disabled` | `boolean` | `false` | If true, prevents interaction. |
| `type` | `'text' \| 'password' \| 'email' \| 'number'` | `'text'` | HTML input type. |

## Select Component

### Description
A standard dropdown selection component.

### Props
| Prop | Type | Default | Description |
|------|------|---------|-------------|
| `label` | `string` | `undefined` | Text label displayed above the select. |
| `value` | `string \| number` | `''` | The selected value (bindable). |
| `options` | `{ value: string \| number, label: string }[]` | `[]` | List of options to display. |
| `disabled` | `boolean` | `false` | If true, prevents interaction. |