@model OnboardingJourneyHeaderViewModel @{ var steps = BuildDefaultSteps(); var totalSteps = Math.Max(Model.TotalSteps, steps.Count); var currentStep = Math.Clamp(Model.CurrentStep, 1, totalSteps); var progressWidth = totalSteps <= 1 ? 100 : ((currentStep - 1) * 100) / (totalSteps - 1); }
Step @currentStep of @totalSteps
    @foreach (var step in steps) {
  1. @step.Order @step.Label
  2. }
@functions { private sealed record HeaderStep(string Label, int Order); private static IReadOnlyList BuildDefaultSteps() => [ new("Welcome", 1), new("Writing Stage", 2), new("Writing Software", 3), new("Project", 4), new("Book", 5), new("Connect Word", 6), new("Review Chapters", 7), new("Detect Scenes", 8), new("Review Characters", 9), new("Complete", 10) ]; private static string StepClass(int order, int currentStep) { if (order < currentStep) { return "is-complete"; } return order == currentStep ? "is-current" : "is-upcoming"; } }