Preserve or refill inputs
Initial rendering receives the configured inputs unchanged. Later interactive reads receive that JSON object plus$widget:
Read current values from
$widget.values before falling back to configured api.input() defaults. set changes declared INPUT state, not the configured arguments. An input binding refers only to an actual INPUT cell in the current frame. In a child view without controls, read passed arguments from api.input() and forward scalar values in the next action’s input map.
Do not supply the reserved $widget key in configured interactive inputs. Form fields commit together on submit. A standalone INPUT commits on change by default; optional commit: 'blur' and debounceMs control when it commits.
valueMode: 'initial' is the default: returned defaults do not replace an existing value. Use valueMode: 'sync' when low-code should refill an input, such as a delivery method derived from a selected country. A synchronized value applies only when no newer edit or pending draft exists. Ordinary refresh keeps drafts and mounted renderer instances; stale responses cannot overwrite newer committed state.
State belongs to the mounted widget. Back retains previous drill-down frames, including drafts and selection, for up to 12 levels. A page reload initializes a new widget; panels and inline destinations have independent state.
Continue with reactive widgets.
