Tabs and Wizard
Tabs and wizard steps are configured on the root layout object.
Tabs
TS
export const usersSchema = {
resource: "users",
layout: {
type: "tabs",
tabs: [
{ key: "profile", title: "Profile", fields: ["name", "email"] },
{ key: "access", title: "Access", fields: ["roleId", "status"] }
]
},
form: {
fields: [
{ name: "name", type: "text" },
{ name: "email", type: "email" },
{ name: "roleId", label: "Role", type: "select" },
{ name: "status", type: "select" }
]
}
} as const;Tabs render a tab bar and only render fields assigned to the active tab.
Wizard
TS
export const projectSchema = {
resource: "projects",
layout: {
type: "wizard",
steps: [
{ key: "basic", title: "Basic Information", fields: ["name", "ownerId"] },
{ key: "scope", title: "Scope", fields: ["budget", "startDate", "endDate"] },
{ key: "settings", title: "Settings", fields: ["visibility", "metadata"] }
]
},
form: {
mode: "page",
fields: [
{ name: "name", type: "text", required: true },
{ name: "ownerId", label: "Owner", type: "combobox" },
{ name: "budget", type: "number", min: 0 },
{ name: "startDate", type: "date" },
{ name: "endDate", type: "date" },
{ name: "visibility", type: "radio-group" },
{ name: "metadata", type: "json" }
]
}
} as const;Wizard behavior:
- The
Backbutton moves to the previous step. - The
Nextbutton validates the active step fields before advancing. - The final step shows the submit button.
- Final submit validates the full form.
Tabs versus wizard
Use tabs when the user can move freely between related field groups.
Use wizard when each step should be completed before moving forward.