4.3k

Stepper

A stage stepper: step children joined by hairline connectors, with active naming the current step index — earlier steps render completed (a check indicator), later ones pending, and an index past the last step renders every step completed. Display-only: driving active belongs to the app model. Step children are text leaves only (the label supports {} interpolation); their completed/active/pending state derives entirely from the stepper's active index. For a vertical run ledger, see timeline.

stepper
A stage stepper rendered by the engine (light theme)
a completed step, the active step, and a pending step

Markup

active is required — a number or one {binding}.

<stepper active="{publish_step}">
  <step>Draft</step>
  <step>Review</step>
  <step>Publish</step>
</stepper>

Zig builder

ui.stepper(.{ .active = model.publish_step }, &.{
    .{ .label = "Draft" },
    .{ .label = "Review" },
    .{ .label = "Publish" },
})

Eject

When theming is not enough and you need to own the stepper’s shape, eject it: the canonical source lands in your project as your code — SDK updates never touch it, and ejecting twice errors instead of overwriting your edits. stepper ejects as a Zig view function (src/components/stepper.zig).

native eject component stepper

The ownership model and what to do after ejecting are in Use, eject, or build.

Attributes

AttributeDescription
activestepper: the active step index (a number or one {binding}); earlier steps render completed, later ones pending. Required.
keySibling-scoped identity key.
global-keyParent-independent identity: ids survive reparenting between containers.
labelAccessible name; when set it REPLACES the element's text as the announced name - screen readers and automation snapshots see the label, never the text it shadows.