Headless wizard controller. Owns the cursor and gating; renders nothing.
Visible steps are recomputed from each step's when predicate on every
render, so branching is declarative — the caller never maintains a parallel
label array. If branching removes the active step, the index clamps to the
last visible step rather than pointing past the end.
Headless wizard controller. Owns the cursor and gating; renders nothing.
Visible steps are recomputed from each step's
whenpredicate on every render, so branching is declarative — the caller never maintains a parallel label array. If branching removes the active step, the index clamps to the last visible step rather than pointing past the end.