Field
Label, control, help text and error message, wired together so none of the four can be forgotten.
This is the component the library pays for itself with. Without it you write `for`/`id` pairs that have to match, an `aria-describedby` that has to point at both the help text and the error, and an `aria-invalid` that has to be set and unset again — per field, every time. Four things to forget, and none of them visible to the person building the page. Inside a [`Form`](/components/form) it finds its own error message by name. Outside one it takes `error` as a prop, so an app using Inertia's `useForm` directly gets exactly the same wiring. **A group of choices is not a label and a control.** It is a set of controls under a heading, so `as="fieldset"` turns the label into a `<legend>` — the only thing a screen reader reads before every radio in the group. The error message carries `role="alert"`, because it arrives after a round trip to the server, which means after focus has moved somewhere else. Without a live region nothing tells the person who cannot see it appear. ```svelte <Field name="email" label="Email" description="We never share it."> <Input type="email" /> </Field> ```