# Input
A native text input in the theme's control chrome, with a two-way value.
```ehtml Example
import { Input } from "@elements/ui/input";
```
## Parts
| Part | What it is |
|---|---|
| `.input` | The ``. Usable without the template: class="input is-sm". |
## Attributes
| Attribute | Type | Default | Description |
|---|---|---|---|
| `value` | `string` (two-way) | `""` | The text. Bind it to state; typing writes back. |
| `files` | `File[]` (two-way) | `[]` | type=file: the picked files, read by the runtime. |
| `type` | `"text" \| "email" \| "password" \| "search" \| "tel" \| "url" \| "number" \| "date" \| "time" \| "datetime-local" \| "month" \| "week" \| "file"` | `"text"` | The native type: keyboards and validation follow it. |
| `multiple` | `boolean` | `false` | type=file: allow several files. |
| `size` | `"sm" \| "md" \| "lg"` | `"md"` | Height, padding and type size from the control tokens. |
| `placeholder` | `string` | `""` | Hint text shown while empty. |
| `name` | `string` | `""` | Form field name. |
| `invalid` | `boolean` | `false` | Sets aria-invalid and the danger border and ring. |
| `disabled` | `boolean` | `false` | Native disabled. |
| `readonly` | `boolean` | `false` | Focusable and selectable, not editable. |
| `required` | `boolean` | `false` | Native required: the form will not submit while empty. |
| `class` | `string` | `""` | Extra classes on the input. |
| `attrs` | `Record` | `{}` | Any other attribute: id, minlength, pattern, autocomplete, inputmode, aria-\*, data-\*. |
| `onValueChange` | `(value: string, details: ChangeDetails) => void` | `() => {}` | Called on each edit before the value changes, with details: { reason: "none", event, cancel(), allowPropagation(), isCanceled, isPropagationAllowed }. details.cancel() keeps the old value in the box and the binding. Not called for changes the caller makes. |
| `oninput` | `(e: InputEvent) => void` | `() => {}` | Each edit. |
| `onchange` | `(e: Event) => void` | `() => {}` | Committed change (blur, Enter, file picked). |
| `onfocus / onblur` | `(e: FocusEvent) => void` | `() => {}` | Focus events. |
| `onkeydown` | `(e: KeyboardEvent) => void` | `() => {}` | Key presses. |
## Keyboard
| Keys | Action |
|---|---|
| `Enter` | Submits the form the input is in. |
| `Tab` | Moves to the next control. A disabled input is skipped. |
## Data attributes
| Attribute | Values | On |
|---|---|---|
| `data-size` | `"sm" \| "md" \| "lg"` | input |
| `data-invalid` | present while invalid | input |
| `data-disabled` | present while disabled | input |
## Accessibility
- A native ``: typing, selection, autofill, mobile keyboards and form validation are the browser's.
- invalid sets aria-invalid="true"; inside a Field the field sets it and wires aria-describedby to the description and error.
- Label it with `