Надеюсь, вы ищете похожий ответ
https://stackblitz.com/edit/pxblue-dynamic-stepper-angular-n7bnmh
Добавьте div и зациклите ваш массив шагов вместо цикла mat-step
<div *ngFor="let step of steps; let i = index">
<mat-step [completed]="step.completed" [state]=myState[i]>
<form>
<ng-template matStepLabel>{{step.title || 'Choose an action'}}
<mat-icon class="delete_icon" *ngIf="stepper.selectedIndex === i" (click)="removeStep(i)"
matTooltip="Remove step" matTooltipPosition="right">delete</mat-icon>
</ng-template>
<mat-radio-group class="radio-group" (change)="changeStepSelection($event, i)">
<mat-radio-button style=" margin: 10px 0 " *ngFor="let option of stepOptions" [value]="option.value">
{{option.label}}
</mat-radio-button>
</mat-radio-group>
</form>
</mat-step>
</div>
поместите его в массивтекст шаблона вашего значка, чтобы получить соответствующий значок (вы можете создать собственную логику здесь)
myState = ['category','apps','search'];