OGE logoOGE

Stepper

A step-by-step process: a list of step headers plus the body of the active one. Steps come from projected children, from a data-driven steps array, or both.

There is no WAI-ARIA APG pattern for a stepper, so the semantics are a decision rather than an inheritance: an ordered list of <button> headers carrying aria-current="step", each body a role="group" labelled by its header — group rather than region on purpose, because a landmark per step would push a five-step wizard past the handful the APG asks a page to keep. That is one semantic in both orientations — Angular Material instead emits role="tablist" when horizontal and aria-current when vertical, so the same widget reads as two different things to a screen reader, and a tablist claims panels may be browsed freely, which is exactly what linear forbids.

linear stepGuard aria-current wizard

Commands

The built-in Back / Next bar becomes Finish on the last step. None of Angular Material, Kendo or PrimeNG ships navigation buttons at all — every one of them makes you hand-roll a wizard's most predictable part. icon takes SVG path data and replaces the step number.

activeIndex showNavigation icon optional

Account fields…

Linear flow

linear blocks moving past a step that is neither completed nor optional; editable: false blocks coming back. Every refusal emits stepBlocked with the reason — Material refuses silently and its own docs tell you to add a live region yourself.

linear completed editable stepBlocked

last refusal → —

Step states

The indicator state is derived from the step's own flags. error outranks done, so a completed step that later fails still reads as needing attention. The glyph is aria-hidden, so the state is announced in text as well.

number active done error

Leave guard

stepGuard runs when the user leaves a step, inside the same pipeline the headers use. false, a throw and a rejection all veto; a promise reports changePending and a second gesture meanwhile is dropped. It gates the finish on the last step too.

stepGuard changePending

Details…

Orientation

Vertical stacks the bodies under their own headers. The ARIA model is identical either way — the headers stay buttons with aria-current='step', so a screen reader hears the same widget.

orientation display
  1. First body…

The directives route through the same pipeline the headers use, so linear and stepGuard still apply. They find the stepper by DI when written inside it, or take one explicitly from outside — which Material's equivalents cannot do.

ogeStepperNext ogeStepperPrevious

First body…

Inside a form

wraps the stepper the way wraps the tabs. Step completion comes from the form's own per-step error rollup, so it behaves identically with [fieldTree], [formGroup] and [(formData)] — and leaving a step touches only that step's fields, so the steps ahead stay quiet instead of turning red.

oge-form-steps linear per-step touched

Configuration

Every user-facing string — including the two announced only to screen readers, because the indicator glyph is aria-hidden — lives in the messages interface.

provideOgeStepperConfig