Skip to content

Custom Wizard From Headless Kit

Use this pattern when:

  • built-in wizard visuals are not enough
  • navigation must match an existing product shell
  • steps need app-specific chrome
const view = createFormView({
transport,
schema,
layout: {
kind: "wizard",
steps: [
{ title: "Profile", children: [{ kind: "field", field: "name" }] },
{ title: "Review", children: [{ kind: "field", field: "email" }] },
],
},
});
view.subscribe((snapshot) => render(snapshot));

Host actions:

  • previous button -> view.prevStep()
  • next button -> await view.nextStep()
  • final submit -> await view.submit()

Keep the layout config the same if you later switch to mountWizardForm().