VVibeFlui

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 Back button moves to the previous step.
  • The Next button 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.