import { Component, ElementRef, input, output, viewChild } from '@angular/core';
/** Molecule: the CIBG Huisstijl "stappenindicator" — numbered circles (`.step-list`),
visited steps clickable for back-only navigation, and the step title merged into
the same block (process name + "Stap X van Y: Titel", per the aanvraagproces
pattern). Domain-free; forward navigation only via the wizard's own buttons. */
@Component({
selector: 'app-stepper',
template: `
@for (label of steps(); track label; let i = $index) {
-
@if (i < current()) {
Stap {{ i + 1 }}
Voltooid
} @else if (i === current()) {
Stap {{ i + 1 }}
Huidige stap
} @else {
Stap {{ i + 1 }}
}
}
@if (processName()) {
{{ processName() }}
}
Stap {{ current() + 1 }} van {{ steps().length }}: {{ stepTitle() || steps()[current()] }}
`,
})
export class StepperComponent {
steps = input.required();
current = input.required();
/** Name of the overall process, shown above the step title (e.g. "Herregistratie aanvragen"). */
processName = input('');
/** Overrides the step label as the title; falls back to `steps()[current()]`. */
stepTitle = input('');
/** Emitted when a visited (earlier) step is clicked — back-navigation only. */
stepSelected = output();
private titleEl = viewChild>('title');
/** wizard-shell calls this after a step change so the new title is announced. */
focusTitle(): void {
this.titleEl()?.nativeElement.focus();
}
protected select(ev: Event, i: number) {
ev.preventDefault(); // fragment href resolves against , not the route
this.stepSelected.emit(i);
}
protected stap(i: number, label: string) {
return $localize`:@@stepper.naarStap:Stap ${i + 1}:nummer: ${label}:label:`;
}
protected huidigeStap(i: number, label: string) {
return $localize`:@@stepper.huidigeStapLabel:Huidige stap, stap ${i + 1}:nummer: ${label}:label:`;
}
protected terugNaar(i: number, label: string) {
return $localize`:@@stepper.terugNaarStap:Terug naar stap ${i + 1}:nummer: ${label}:label:`;
}
}