--- ## FormField Layout wrapper for composite form fields that need a label, helper text, and error message but cannot rely on the built-in slots of primitives like `InputProps` or `SelectProps`. Examples: a custom file picker, a slider/number-input pair, a media uploader. The `id` is auto-generated and forwarded to the slot via the `for` snippet parameter so the rendered control can wire `aria-describedby` and `aria-invalid` correctly. **Import:** `import { FormField } from '@urbicon-ui/blocks';` ### Examples ```svelte {#snippet children({ id, describedBy, invalid })} {/snippet} ``` ### Variants - required: true (default: false) ### Api | Prop | Type | Required | Default | Description | | --- | --- | :---: | --- | --- | | children | `Snippet<[FormFieldSlotContext]>` | yes | | Snippet receiving wiring metadata (`id`, `describedBy`, `invalid`, `required`, `disabled`). The wrapped control should spread or apply these to itself for accessibility. | | ...HTMLAttributes | `HTMLAttributes` | no | | HTML attributes (excluding: 'children') | | class | `string` | no | | Extra classes merged onto the wrapper element. In the same Tailwind bucket `class` wins over the `slotClasses` entry for the element it lands on. | | disabled | `boolean` | no | false | Handed to the `children` snippet as `disabled`; FormField renders nothing differently itself. The wrapped control has to apply it. | | error | `string` | no | | Error message shown below the control. Replaces the helper text and propagates `invalid: true` to the slot for ARIA wiring. | | helper | `string` | no | | Helper text shown below the control. Hidden when `error` is present. Named `helper` to match the built-in helper prop of the form primitives (Input, Select, Toggle, …) — one vocabulary across the API seam. | | id | `string` | no | | Explicit HTML `id` for the control. Auto-generated when omitted, then forwarded to the slot. Caller may use it to attach external `