Live Preview
When the controller has a Change() method, the framework auto-binds it to input/change events on form fields with a 300ms debounce — no lvt-on:input attribute needed. The handler reads ctx.GetString("input") and updates state.Preview only; writing back to state.Input would patch the input's value attribute mid-typing and reset the cursor.
Try: Type in the input — the preview updates ~300ms after you stop typing. Click Save to commit the value to state.Input (the field is lvt:"persist", so it survives reconnect). The cursor never jumps because Change() only updates the preview.