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) {
  1. @if (i < current()) { Stap {{ i + 1 }} Voltooid } @else if (i === current()) { Stap {{ i + 1 }} Huidige stap } @else { Stap {{ i + 1 }} }
  2. }

@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:`; } }