Field
Form field wrapper with description and error parts; pass a name for Laravel-native old()/$errors wiring.
Preview
We will only use this for account updates.
Please enter a valid email address.
Controls
Device view renders in an isolated frame so real responsive breakpoints apply. Switch to Full for overflowing popovers.
Installation
php artisan ui:add field
Registry contract
Install confidence
php artisan ui:add field
writes only the generated targets below. The CLI validates each file hash before writing and
prompts before replacing local changes unless --force is used.
- Version
- 1.2.0
- License
- open
- Stability
- stable
- Contract
- v2
- Foundation
- ≥ 1.0.0
| Type | Generated target |
|---|---|
| blade | resources/views/components/ui/field.blade.php |
| blade | resources/views/components/ui/field/description.blade.php |
| blade | resources/views/components/ui/field/error.blade.php |
Registry dependencies
None.
Package dependencies
composer: jml/brok:^1.0
Guidance
Form structure and labelingCollect and organize related user input.
Use when
- Use to collect, group, and clearly label related input so users understand what is being asked and can recover from errors. Do not create dense unlabeled forms; start from one thing per page or one conceptual question per step when the task is unfamiliar or high stakes.
- A control needs a label, optional hint, and Laravel validation wiring.
- Classic Blade and Livewire forms should share the same accessible field structure.
Avoid when
- Avoid using field as a default simply because it is available in the library. Choose it only when its interaction cost, visibility, and behavior match the job to be done.
- Grouping several related controls under one legend; use fieldset.
- The child is not a form control.
- Task length
- medium
- Interaction cost
- medium
- Interruptiveness
- none
- Input precision
- constrained
- Mobile / touch risk
- medium
- Accessibility risk
- high
- Needs background context
- No
- Comparison needed
- No
Preferred alternatives
- Focused question pages
- A smaller set of directly labeled fields
Anti-patterns
- Dense unlabeled forms
- Collecting information without a task need
Anatomy
root
label
control slot
description
error
Theming hooks
field label
field description
field error
Canonical examples
defaultdescriptionvalidationrequired
API
manifest knowledge + registry-derived coverageProps
| Prop | Type / values | Default | Description |
|---|---|---|---|
| name | string|null | null | Laravel validation key and the default control name/id source. |
| label | string|null | null | Visible label associated with the slotted control. |
| description | string|null | null | Helpful text referenced through aria-describedby. |
| required | bool | false | Displays required affordance and passes required state to compatible controls. |
| invalid | bool | false | Marks the field group invalid for styling and assistive context. |
| hint | mixed|null | null | Declared by @props in the registry Blade source. |
Slots
default— The input, select, textarea, or other form control.x-ui.field.description— Standalone description part for custom compositions.x-ui.field.error— Standalone validation error part with alert semantics.
Data slots
field
field-description
field-error
field-label
Capabilities
Behavior
- Reads the shared Laravel error bag, forwards old input context, and wires invalid/description identifiers.
- Groups a form control with supporting text using consistent spacing and state styling.
- Declares registry capability flags: a11y, responsive, rtl, darkMode, localized.
Usage
<x-ui.field class="w-full max-w-sm text-start">
<x-ui.label for="preview-field-email" :required="true">{{ __('Email') }}</x-ui.label>
<x-ui.input id="preview-field-email" type="email" placeholder="jane@example.com" />
<x-ui.field.description>{{ __('We will only use this for account updates.') }}</x-ui.field.description>
<x-ui.field.error>{{ __('Please enter a valid email address.') }}</x-ui.field.error>
</x-ui.field>
Accessibility & localization
data-slot
Keyboard focus-visible
Localized labels
- Every interactive control needs a programmatically associated label.
- Error text uses an alert region and remains linked through aria-describedby.
- Uses semantic HTML and a stable
data-slotattribute for styling/scripting hooks. - Focus-visible rings use the
ringtoken so keyboard focus is always visible. - Disabled and invalid states are conveyed to assistive tech, not by color alone.
- Targets WCAG 2.2 AA; verify contrast in light, dark, admin and customer surfaces above.
- Labels go through
__()and the component uses logical properties (ms-*,text-start,start-*) so it mirrors correctly — flip the preview to RTL to confirm.
Source
The exact, editable file ui:add writes
into your app — copy it or own the whole thing. Previews
render this same code; there are no preview-only components.
Changelog
Current version: v1.2.0. See the site changelog for the full release history.