Live primitives

APIs you can click

This chrome is a nested layout chain. Desk pages sit in two shells; Motion only uses the outer one. Sibling navigations keep parent controllers mounted.

useForm

Sync rules run first. Async rules run on submit. Try the title taken to see an async error. A valid submit appends to the shared list used by the List page.

const form = useForm({ initialValues: { title: '' }, rules: { title: [required('Title is required')] }, asyncRules: { title: [async (value) => { if (String(value).trim().toLowerCase() === 'taken') { return 'That title is taken'; } return null; }], }, }); form.bindField('title', this.titleInput); this.on(this.saveBtn, 'click', form.handleSubmit((values) => { addLiveTask(values.title); }));

Live example

Add task