Form

The Inertia form: errors find their fields, controls bind by name, the submit button spins.

Three things happen with nothing wired up: `Field` finds its error message by
name, the control gets a matching `id`, `aria-describedby` and
`aria-invalid`, and `Button type="submit"` shows a spinner while the request
is out.

**It sits on `router`, not on `useForm`.** The values have to be readable and
writable from another component through context, and `$state` is something we
control while a store from the adapter is something we hope about. `useForm`
is still open to you — drop `Form` and give `Field` an `error` and the control
a `bind:value`.

Two sources of error with no rule between them leave messages standing after
they have been fixed. The rule here: what the server sent with the page
applies until you submit, and after that the answer to *that* submission wins.

**It lives behind `@askrcode/lauf/inertia`** because it is the only component
that imports Inertia, and ESM resolves that at build time. A JSON service that
never installs Inertia should still be able to import a button.

```svelte
<Form action="/customers" data={sent ?? {}} {errors}>
  <Field name="name" label="Name"><Input /></Field>
  <Field name="email" label="Email"><Input type="email" /></Field>
  <Button type="submit" variant="primary">Create</Button>
</Form>
```