K

Forms

Form Fields

Reference for the built-in Wire Forms field and layout components.

On this page

Reference for the built-in Wire Forms field and layout components.

Choose by Use Case

Use case Component
Single-line text TextInput
Multi-line text Textarea
Select one option Select
Toggle a boolean value Toggle or Checkbox
Select multiple options CheckboxList
Pick one visible option Radio
Free-form tags / chips Tags
Numeric range slider Slider
Key-value pair editor KeyValue
Star rating Rating
Choose date or date/time DateTimePicker
Pick a color ColorPicker
Upload files FileUpload
Rich text editing RichEditor or TiptapEditor
Markdown editing MarkdownEditor
Code / script input CodeEditor
OTP / PIN code OtpInput
Hidden form metadata Hidden
Run an action from the schema Button
Select a related record BelongsToSelect
Select a polymorphic target MorphToSelect
Manage repeated groups or child rows Repeater

Layout Components

Layout components (Grid, Flex, Section, Fieldset, Tabs, Wizard) live in the shared Schema section — the same vocabulary is reused by forms, infolists, and modals.

Display Components

Component Purpose
Placeholder Read-only value display
Alert Contextual message inside the form
Html Render trusted HTML content
ViewField Render a custom Blade partial as a field

Build Your Own

Need a field that is not listed here? See Extending Forms for building custom fields and display components, reusable presets, and packaging fields into a plugin.

Common Field API

Every field inherits the following methods from the shared Field base class. Individual field docs focus on field-specific options; refer back here for anything not listed there.

Label and help text

Method Example
label(string|Closure) ->label('Full name')
helperText(string|Closure) ->helperText('Used for login')
hint(string|Closure) ->hint('Optional')
hintIcon(string) ->hintIcon('information-circle')
hintColor(string) ->hintColor('warning')
tooltip(string|Closure) ->tooltip('Shown on hover')

Visibility and state

Method Example
visible(bool|Closure) ->visible(fn () => $this->showField)
hidden(bool|Closure) ->hidden()
disabled(bool|Closure) ->disabled()
readOnly(bool|Closure) ->readOnly()

Default value

TextInput::make('status')->default('draft')
TextInput::make('user_id')->default(fn () => auth()->id())

When a form is filled, every field in the schema is seeded automatically: its ->default() when set, otherwise a type-correct blank (''/null for text, [] for array fields like CheckboxList/Tags/multi-select, false for toggles). You never have to pre-list a field just so its key exists — array fields in particular start as [] instead of collapsing.

Defaults fill only keys the incoming data does not provide, so they apply in create mode and to new/virtual fields, and never overwrite a record's stored value — even an intentional null. For record- or context-driven prefill on top of defaults, use fillFormUsing() on the action (see Actions).

Filling defaults over null

Opt a single field into treating an edit-mode null (or empty string) as unset, so its default fills there too:

TextInput::make('quantity')->numeric()->default(1)->defaultOnNull()
Select::make('status')->options(Status::class)->default(Status::Draft)->defaultOnNull()

Use this only where null is not a value the user can deliberately choose — for example a column that must always carry a value. If the user can clear the field on purpose, leave defaultOnNull() off so their choice survives; to show a hint for the empty state use placeholder() instead. When the column should simply never be null, prefer a model/DB default so create and edit stay consistent at the data layer.

Validation

Method Example
required() ->required()
rules(array|string) ->rules(['min:2', 'max:255'])
validationMessages(array) ->validationMessages(['required' => 'Povinné pole'])

Live updates

Method Behaviour
live() Triggers Livewire update on every input event (with 250 ms debounce)
lazy() Triggers Livewire update on blur
debounce(int $ms) Overrides debounce delay for live()

Prefix and suffix

Available on TextInput, Textarea, and Select.

Method Example
prefix(string) ->prefix('CZK')
suffix(string) ->suffix('%')
prefixIcon(string) ->prefixIcon('magnifying-glass')
suffixIcon(string) ->suffixIcon('check')
prefixAction(Action) ->prefixAction(Action::make('lookup')->action(fn ($get, $set) => …))
suffixAction(Action) ->suffixAction(Action::make('verify')->action(fn ($get, $set) => …))
hintAction(Action) ->hintAction(Action::make('help'))

Affix and hint actions run on the server with the field's reactive $get / $set context — see Field actions and buttons.

Other

Method Example
placeholder(string|Closure) ->placeholder('Enter value...')
autofocus() ->autofocus()
extraAttributes(array) ->extraAttributes(['data-testid' => 'name'])
columnSpan(int|string) ->columnSpan(2) — span columns inside a Grid

Common Patterns

Basic create or edit form

use NyonCode\WireForms\Components\TextInput;
use NyonCode\WireForms\Components\Select;
use NyonCode\WireForms\Components\Toggle;
 
->schema([
TextInput::make('name')
->required()
->maxLength(255),
 
TextInput::make('email')
->email()
->required(),
 
Select::make('role')
->options([
'admin' => 'Admin',
'editor' => 'Editor',
'viewer' => 'Viewer',
])
->required(),
 
Toggle::make('active'),
])

Group fields into sections

use NyonCode\WireForms\Components\Layout\Grid;
use NyonCode\WireForms\Components\Layout\Section;
 
->schema([
Section::make('User')
->schema([
Grid::make()->columns(2)->schema([
TextInput::make('name')->required(),
TextInput::make('email')->email()->required(),
]),
]),
])