You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Like Filament, every prop can be a closure evaluated with injected arguments ($get, $set, $record, $operation, $state, $livewire-free equivalents): ->visible(fn (Get $get) => $get('type') === 'company'), ->options(fn ($record) => …). Dependent fields re-evaluate when their dependencies change, in Blade (small JS) and Inertia (partial reload or an evaluation endpoint).
Done in 2e6b66a (server side), 53cbb92 (React) and 52da11f (Blade script); docs in closures-and-conditions.md and live-fields.md. Every prop takes a closure, with arguments injected by name ($get, $set, $state, $old, $record, $model, $operation, $component, $form) or by type. There are two ways to re-evaluate. Declarative conditions (visibleWhen and friends) are checked in the browser through forms' conditional-wrapper, with no round trip, and on the server for validation and saving. Live fields (->live(), afterStateUpdated() with $set) post the state to an evaluation endpoint (Route::stencil()) carrying an encrypted, user-bound, expiring token. Blade replaces only the components that changed; React re-renders from the returned schema. I chose the endpoint over Inertia partial reloads because it works the same for both drivers and doesn't depend on the page's controller. The trade-off is that live fields need a form class.
Activity
Fluent schema API, closure evaluation, renderer drivers, binding and …
React renderer: StencilForm, StencilFields, registry and live evaluation
Blade script: wizard steps and live fields; prebuilt dist
n4ff4h commentedon Nov 4, 2026
Done in 2e6b66a (server side), 53cbb92 (React) and 52da11f (Blade script); docs in closures-and-conditions.md and live-fields.md. Every prop takes a closure, with arguments injected by name ($get, $set, $state, $old, $record, $model, $operation, $component, $form) or by type. There are two ways to re-evaluate. Declarative conditions (
visibleWhenand friends) are checked in the browser through forms' conditional-wrapper, with no round trip, and on the server for validation and saving. Live fields (->live(),afterStateUpdated()with$set) post the state to an evaluation endpoint (Route::stencil()) carrying an encrypted, user-bound, expiring token. Blade replaces only the components that changed; React re-renders from the returned schema. I chose the endpoint over Inertia partial reloads because it works the same for both drivers and doesn't depend on the page's controller. The trade-off is that live fields need a form class.