windows-plus-utilities 0.0.81 → 0.0.83

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,7 +2,11 @@
2
2
  * Public API Surface of windows-plus-utilities
3
3
  */
4
4
  export * from './components/step/step.component';
5
- export * from './util/interface/stepped-modal.interface';
5
+ export * from './util/helper/wizard-builder.service';
6
6
  export * from './util/interface/modal-step.interface';
7
+ export * from './util/interface/step-definition.interface';
8
+ export * from './util/interface/stepped-modal.interface';
9
+ export * from './util/interface/wizard-state.interface';
10
+ export * from './util/service/wizard-step.service';
7
11
  export * from './util/service/step.service';
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3dpbmRvd3MtcGx1cy11dGlsaXRpZXMvbW9kYWwtd2l6YXJkL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGtDQUFrQyxDQUFDO0FBRWpELGNBQWMsMENBQTBDLENBQUE7QUFDeEQsY0FBYyx1Q0FBdUMsQ0FBQTtBQUNyRCxjQUFjLDZCQUE2QixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIHdpbmRvd3MtcGx1cy11dGlsaXRpZXNcclxuICovXHJcblxyXG5leHBvcnQgKiBmcm9tICcuL2NvbXBvbmVudHMvc3RlcC9zdGVwLmNvbXBvbmVudCc7XHJcblxyXG5leHBvcnQgKiBmcm9tICcuL3V0aWwvaW50ZXJmYWNlL3N0ZXBwZWQtbW9kYWwuaW50ZXJmYWNlJ1xyXG5leHBvcnQgKiBmcm9tICcuL3V0aWwvaW50ZXJmYWNlL21vZGFsLXN0ZXAuaW50ZXJmYWNlJ1xyXG5leHBvcnQgKiBmcm9tICcuL3V0aWwvc2VydmljZS9zdGVwLnNlcnZpY2UnIl19
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3dpbmRvd3MtcGx1cy11dGlsaXRpZXMvbW9kYWwtd2l6YXJkL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxjQUFjLGtDQUFrQyxDQUFDO0FBRWpELGNBQWMsc0NBQXNDLENBQUE7QUFFcEQsY0FBYyx1Q0FBdUMsQ0FBQTtBQUNyRCxjQUFjLDRDQUE0QyxDQUFBO0FBQzFELGNBQWMsMENBQTBDLENBQUE7QUFDeEQsY0FBYyx5Q0FBeUMsQ0FBQTtBQUV2RCxjQUFjLG9DQUFvQyxDQUFBO0FBQ2xELGNBQWMsNkJBQTZCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2Ygd2luZG93cy1wbHVzLXV0aWxpdGllc1xyXG4gKi9cclxuZXhwb3J0ICogZnJvbSAnLi9jb21wb25lbnRzL3N0ZXAvc3RlcC5jb21wb25lbnQnO1xyXG5cclxuZXhwb3J0ICogZnJvbSAnLi91dGlsL2hlbHBlci93aXphcmQtYnVpbGRlci5zZXJ2aWNlJ1xyXG5cclxuZXhwb3J0ICogZnJvbSAnLi91dGlsL2ludGVyZmFjZS9tb2RhbC1zdGVwLmludGVyZmFjZSdcclxuZXhwb3J0ICogZnJvbSAnLi91dGlsL2ludGVyZmFjZS9zdGVwLWRlZmluaXRpb24uaW50ZXJmYWNlJ1xyXG5leHBvcnQgKiBmcm9tICcuL3V0aWwvaW50ZXJmYWNlL3N0ZXBwZWQtbW9kYWwuaW50ZXJmYWNlJ1xyXG5leHBvcnQgKiBmcm9tICcuL3V0aWwvaW50ZXJmYWNlL3dpemFyZC1zdGF0ZS5pbnRlcmZhY2UnXHJcblxyXG5leHBvcnQgKiBmcm9tICcuL3V0aWwvc2VydmljZS93aXphcmQtc3RlcC5zZXJ2aWNlJ1xyXG5leHBvcnQgKiBmcm9tICcuL3V0aWwvc2VydmljZS9zdGVwLnNlcnZpY2UnIl19
@@ -0,0 +1,13 @@
1
+ export class WizardBuilder {
2
+ constructor() {
3
+ this.steps = [];
4
+ }
5
+ addStep(step) {
6
+ this.steps.push(step);
7
+ return this;
8
+ }
9
+ build() {
10
+ return [...this.steps]; // Immutable copy
11
+ }
12
+ }
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l6YXJkLWJ1aWxkZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dpbmRvd3MtcGx1cy11dGlsaXRpZXMvbW9kYWwtd2l6YXJkL3V0aWwvaGVscGVyL3dpemFyZC1idWlsZGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxPQUFPLGFBQWE7SUFBMUI7UUFDUyxVQUFLLEdBQW1CLEVBQUUsQ0FBQTtJQVduQyxDQUFDO0lBVEEsT0FBTyxDQUFDLElBQWtCO1FBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBRXJCLE9BQU8sSUFBSSxDQUFBO0lBQ1osQ0FBQztJQUVELEtBQUs7UUFDSixPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUEsQ0FBQyxpQkFBaUI7SUFDekMsQ0FBQztDQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RlcE1vZGVsIH0gZnJvbSAnLi4vaW50ZXJmYWNlL21vZGFsLXN0ZXAuaW50ZXJmYWNlJ1xyXG5cclxuZXhwb3J0IGNsYXNzIFdpemFyZEJ1aWxkZXI8VD4ge1xyXG5cdHByaXZhdGUgc3RlcHM6IFN0ZXBNb2RlbDxUPltdID0gW11cclxuXHJcblx0YWRkU3RlcChzdGVwOiBTdGVwTW9kZWw8VD4pOiBXaXphcmRCdWlsZGVyPFQ+IHtcclxuXHRcdHRoaXMuc3RlcHMucHVzaChzdGVwKVxyXG5cclxuXHRcdHJldHVybiB0aGlzXHJcblx0fVxyXG5cclxuXHRidWlsZCgpOiBTdGVwTW9kZWw8VD5bXSB7XHJcblx0XHRyZXR1cm4gWy4uLnRoaXMuc3RlcHNdIC8vIEltbXV0YWJsZSBjb3B5XHJcblx0fVxyXG59Il19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1kZWZpbml0aW9uLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dpbmRvd3MtcGx1cy11dGlsaXRpZXMvbW9kYWwtd2l6YXJkL3V0aWwvaW50ZXJmYWNlL3N0ZXAtZGVmaW5pdGlvbi5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgU3RlcERlZmluaXRpb248VD4ge1xyXG4gIGlkOiBzdHJpbmdcclxuICB0aXRsZTogc3RyaW5nXHJcbiAgc2x1Zzogc3RyaW5nXHJcbiAgcGFyYW1ldGVycz86IFRbXVxyXG4gIG9uRW50ZXI/OiAoY29udGV4dD86IGFueSkgPT4gUHJvbWlzZTxib29sZWFuPiB8IGJvb2xlYW5cclxufSJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l6YXJkLXN0YXRlLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dpbmRvd3MtcGx1cy11dGlsaXRpZXMvbW9kYWwtd2l6YXJkL3V0aWwvaW50ZXJmYWNlL3dpemFyZC1zdGF0ZS5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN0ZXBEZWZpbml0aW9uIH0gZnJvbSAnLi9zdGVwLWRlZmluaXRpb24uaW50ZXJmYWNlJ1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBXaXphcmRTdGF0ZTxUPiB7XHJcblx0c3RlcHM6IFN0ZXBEZWZpbml0aW9uPFQ+W11cclxuXHRjdXJyZW50SW5kZXg6IG51bWJlclxyXG59Il19
@@ -1,16 +1,21 @@
1
- import { __decorate, __param } from "tslib";
2
- import { Inject } from '@angular/core';
1
+ import { Inject, Injectable } from '@angular/core';
3
2
  import { BehaviorSubject } from 'rxjs';
4
- let StepService = class StepService {
5
- /**
6
- * @author Alex Hodson
7
- * @description class constructor specifying the required services and properties
8
- * @param steps the steps in the modal
9
- */
10
- constructor(router, activatedRoute, steps) {
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/router";
5
+ export class StepService {
6
+ /**
7
+ * @author Alex Hodson
8
+ * @description class constructor specifying the required services and properties
9
+ * @param steps the steps in the modal
10
+ */
11
+ constructor(router, activatedRoute, stepConfig) {
11
12
  this.router = router;
12
13
  this.activatedRoute = activatedRoute;
13
- this.steps = steps;
14
+ this.stepConfig = stepConfig;
15
+ /**
16
+ * @description the current index
17
+ */
18
+ this.currentIndex = 0;
14
19
  /**
15
20
  * @description the subject for the current modal step
16
21
  */
@@ -19,17 +24,26 @@ let StepService = class StepService {
19
24
  * @description the subject for the step forward availability
20
25
  */
21
26
  this.stepForwardAvailability$ = new BehaviorSubject(false);
22
- this.steps$ = new BehaviorSubject(steps);
23
- this.currentStep$.next(this.steps$.value[0]);
27
+ this.originalSteps = this.buildSteps(stepConfig);
28
+ this.steps$ = new BehaviorSubject(this.originalSteps);
29
+ this.currentStep$.next(this.originalSteps[0]);
30
+ }
31
+ buildSteps(config) {
32
+ return config.map((step, index) => ({
33
+ ...step,
34
+ stepIndex: index + 1
35
+ }));
24
36
  }
25
37
  /**
26
38
  * @author Alex Hodson
27
39
  * @description adjusts the step indexes to be sequential based on their position in the steps array
28
40
  */
29
41
  adjustStepIndexes() {
30
- const currentSteps = [...this.steps];
31
- currentSteps.forEach((element, index) => element.stepIndex = index + 1);
32
- this.steps$.next(currentSteps);
42
+ const rebuilt = this.steps$.value.map((step, index) => ({
43
+ ...step,
44
+ stepIndex: index + 1
45
+ }));
46
+ this.steps$.next(rebuilt);
33
47
  }
34
48
  /**
35
49
  * @author Alex Hodson
@@ -37,11 +51,16 @@ let StepService = class StepService {
37
51
  * @param step the step to be inserted
38
52
  */
39
53
  insertStep(step) {
40
- const { stepIndex } = step;
41
- const currentSteps = [...this.steps];
42
- currentSteps.forEach(element => element.stepIndex = (stepIndex <= element.stepIndex ? element.stepIndex + 1 : element.stepIndex));
43
- currentSteps.splice(stepIndex - 1, 0, step);
44
- this.steps$.next(currentSteps);
54
+ const current = this.steps$.value;
55
+ const updated = [
56
+ ...current.slice(0, step.stepIndex - 1),
57
+ step,
58
+ ...current.slice(step.stepIndex - 1)
59
+ ].map((s, index) => ({
60
+ ...s,
61
+ stepIndex: index + 1
62
+ }));
63
+ this.steps$.next(updated);
45
64
  }
46
65
  /**
47
66
  * @author Alex Hodson
@@ -104,15 +123,9 @@ let StepService = class StepService {
104
123
  * @description moves to the next modal step
105
124
  */
106
125
  moveToNextStep() {
107
- const index = this.currentStep$.value.stepIndex;
108
- if (index < this.steps$.value.length) {
109
- const nextStep = this.steps$.value[index];
110
- const currentStep = this.steps$.value[index - 1];
111
- this.currentStep$.next({
112
- ...nextStep,
113
- 'stepCallbackName': currentStep.stepCallbackName,
114
- 'triggerCallback': !!currentStep.stepCallbackName
115
- });
126
+ if (this.currentIndex < this.steps$.value.length - 1) {
127
+ this.currentIndex++;
128
+ this.currentStep$.next(this.steps$.value[this.currentIndex]);
116
129
  }
117
130
  }
118
131
  /**
@@ -120,8 +133,7 @@ let StepService = class StepService {
120
133
  * @description moves to the previous modal step
121
134
  */
122
135
  moveToPreviousStep() {
123
- const index = this.currentStep$.value.stepIndex;
124
- const previous = this.steps$.value.find(element => element.stepIndex === index - 1);
136
+ const previous = this.steps$.getValue()[this.currentIndex - 1];
125
137
  if (!previous)
126
138
  return;
127
139
  this.currentStep$.next({
@@ -135,7 +147,7 @@ let StepService = class StepService {
135
147
  * @returns whether the step is the last one
136
148
  */
137
149
  isLastStep() {
138
- return this.currentStep$.value.stepIndex === this.steps$.value.length;
150
+ return this.currentIndex === this.steps$.value.length;
139
151
  }
140
152
  /**
141
153
  * @author Alex Hodson
@@ -180,9 +192,16 @@ let StepService = class StepService {
180
192
  const [initial] = url.split('/step-');
181
193
  this.router.navigate([initial]);
182
194
  }
183
- };
184
- StepService = __decorate([
185
- __param(2, Inject('steps'))
186
- ], StepService);
187
- export { StepService };
188
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd2luZG93cy1wbHVzLXV0aWxpdGllcy9tb2RhbC13aXphcmQvdXRpbC9zZXJ2aWNlL3N0ZXAuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLE1BQU0sRUFBYyxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBSTVDLElBQU0sV0FBVyxHQUFqQixNQUFNLFdBQVc7SUFhdEI7Ozs7T0FJRTtJQUNGLFlBQ1EsTUFBYyxFQUNkLGNBQThCLEVBQ3JCLEtBQTZCO1FBRnRDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDYixVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQWhCL0M7O1dBRUc7UUFDRixpQkFBWSxHQUF1QyxJQUFJLGVBQWUsQ0FBb0IsSUFBSSxDQUFDLENBQUM7UUFDakc7O1dBRUc7UUFDSCw2QkFBd0IsR0FBNkIsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUE7UUFXdkYsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLGVBQWUsQ0FBaUIsS0FBSyxDQUFDLENBQUE7UUFDdEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBQ0Y7OztPQUdHO0lBQ0gsaUJBQWlCO1FBQ2hCLE1BQU0sWUFBWSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDcEMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFBO1FBQ3ZFLElBQUks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QTtRQUMxQixJQUFJLGlCQUFpQjtZQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEtBQUssSUFBSSxJQUFJLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUNqRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFBO0lBQ25FLENBQUM7SUFDRDs7O09BR0c7SUFDSCxjQUFjO1FBQ2IsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUE7UUFDM0IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDckMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBO0lBQ2hDLENBQUM7Q0FDRCxDQUFBO0FBL0xZLFdBQVc7SUFxQnJCLFdBQUEsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0dBckJMLFdBQVcsQ0ErTHZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBTdGVwTW9kZWwgfSBmcm9tICcuLi9pbnRlcmZhY2UvbW9kYWwtc3RlcC5pbnRlcmZhY2UnXHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInXHJcblxyXG5leHBvcnQgY2xhc3MgU3RlcFNlcnZpY2U8VD4ge1xyXG5cdC8qKlxyXG5cdCAqIEBkZXNjcmlwdGlvbiB0aGUgc3ViamVjdCBmb3IgdGhlIG1vZGFsIHN0ZXBzXHJcblx0ICovXHJcbiAgc3RlcHMkOiBCZWhhdmlvclN1YmplY3Q8U3RlcE1vZGVsPFQ+W10+O1xyXG5cdC8qKlxyXG5cdCAqIEBkZXNjcmlwdGlvbiB0aGUgc3ViamVjdCBmb3IgdGhlIGN1cnJlbnQgbW9kYWwgc3RlcFxyXG5cdCAqL1xyXG4gIGN1cnJlbnRTdGVwJDogQmVoYXZpb3JTdWJqZWN0PFN0ZXBNb2RlbDxUPnxudWxsPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U3RlcE1vZGVsPFQ+fG51bGw+KG51bGwpO1xyXG5cdC8qKlxyXG5cdCAqIEBkZXNjcmlwdGlvbiB0aGUgc3ViamVjdCBmb3IgdGhlIHN0ZXAgZm9yd2FyZCBhdmFpbGFiaWxpdHlcclxuXHQgKi9cclxuXHRzdGVwRm9yd2FyZEF2YWlsYWJpbGl0eSQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpXHJcbiBcdC8qKlxyXG5cdCAqIEBhdXRob3IgQWxleCBIb2Rzb25cclxuXHQgKiBAZGVzY3JpcHRpb24gY2xhc3MgY29uc3RydWN0b3Igc3BlY2lmeWluZyB0aGUgcmVxdWlyZWQgc2VydmljZXMgYW5kIHByb3BlcnRpZXNcclxuXHQgKiBAcGFyYW0gc3RlcHMgdGhlIHN0ZXBzIGluIHRoZSBtb2RhbFxyXG5cdCAqL1xyXG4gIGNvbnN0cnVjdG9yKFxyXG5cdFx0cHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuXHRcdHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG5cdFx0QEluamVjdCgnc3RlcHMnKSBwcml2YXRlIHN0ZXBzOiBTdGVwTW9kZWw8VD5bXVxyXG5cdCkge1xyXG5cdFx0dGhpcy5zdGVwcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFN0ZXBNb2RlbDxUPltdPihzdGVwcylcclxuICAgIHRoaXMuY3VycmVudFN0ZXAkLm5leHQodGhpcy5zdGVwcyQudmFsdWVbMF0pO1xyXG4gIH1cclxuXHQvKipcclxuXHQgKiBAYXV0aG9yIEFsZXggSG9kc29uXHJcblx0ICogQGRlc2NyaXB0aW9uIGFkanVzdHMgdGhlIHN0ZXAgaW5kZXhlcyB0byBiZSBzZXF1ZW50aWFsIGJhc2VkIG9uIHRoZWlyIHBvc2l0aW9uIGluIHRoZSBzdGVwcyBhcnJheVxyXG5cdCAqL1xyXG5cdGFkanVzdFN0ZXBJbmRleGVzKCk6IHZvaWQge1xyXG5cdFx0Y29uc3QgY3VycmVudFN0ZXBzID0gWy4uLnRoaXMuc3RlcHNdXHJcblx0XHRjdXJyZW50U3RlcHMuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IGVsZW1lbnQuc3RlcEluZGV4ID0gaW5kZXggKyAxKVxyXG5cdFx0dGhpcy5zdGVwcyQubmV4dChjdXJyZW50U3RlcHMpXHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIEBhdXRob3IgQWxleCBIb2Rzb25cclxuXHQgKiBAZGVzY3JpcHRpb24gaW5zZXJ0cyBhIG5ldyBzdGVwIGF0IGEgc3BlY2lmaWMgaW5kZXgsIHNwZWNpZmllZCBieSB0aGUgc3RlcCBpbmRleCBwcm9wZXJ0eVxyXG5cdCAqIEBwYXJhbSBzdGVwIHRoZSBzdGVwIHRvIGJlIGluc2VydGVkXHJcblx0ICovXHJcblx0aW5zZXJ0U3RlcChzdGVwOiBTdGVwTW9kZWw8VD4pOiB2b2lkIHtcclxuXHRcdGNvbnN0IHsgc3RlcEluZGV4IH0gPSBzdGVwXHJcblx0XHRjb25zdCBjdXJyZW50U3RlcHMgPSBbLi4udGhpcy5zdGVwc11cclxuXHRcdGN1cnJlbnRTdGVwcy5mb3JFYWNoKGVsZW1lbnQgPT4gZWxlbWVudC5zdGVwSW5kZXggPSAoc3RlcEluZGV4IDw9IGVsZW1lbnQuc3RlcEluZGV4ID8gZWxlbWVudC5zdGVwSW5kZXggKyAxIDogZWxlbWVudC5zdGVwSW5kZXgpKVxyXG5cdFx0Y3VycmVudFN0ZXBzLnNwbGljZShzdGVwSW5kZXggLSAxLCAwLCBzdGVwKVxyXG5cdFx0dGhpcy5zdGVwcyQubmV4dChjdXJyZW50U3RlcHMpXHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIEBhdXRob3IgQWxleCBIb2Rzb25cclxuXHQgKiBAZGVzY3JpcHRpb24gc2V0cyB0aGUgY3VycmVudCBtb2RhbCBzdGVwXHJcblx0ICogQHBhcmFtIHN0ZXAgdGhlIHN0ZXAgdG8gYmUgc2V0XHJcblx0ICovXHJcbiAgc2V0Q3VycmVudFN0ZXAoc3RlcDogU3RlcE1vZGVsPFQ+KTogdm9pZCB7XHJcbiAgICB0aGlzLmN1cnJlbnRTdGVwJC5uZXh0KHN0ZXApO1xyXG4gIH1cclxuXHQvKipcclxuXHQgKiBAYXV0aG9yIEFsZXggSG9kc29uXHJcblx0ICogQGRlc2NyaXB0aW9uIHJldHVybnMgdGhlIGN1cnJlbnQgbW9kYWwgc3RlcCBvYnNlcnZhYmxlXHJcblx0ICogQHJldHVybnMgdGhlIGN1cnJlbnQgbW9kYWwgc3RlcCBvYnNlcnZhYmxlXHJcblx0ICovXHJcbiAgZ2V0Q3VycmVudFN0ZXBPYnNlcnZhYmxlKCk6IE9ic2VydmFibGU8U3RlcE1vZGVsPFQ+fG51bGw+IHtcclxuICAgIHJldHVybiB0aGlzLmN1cnJlbnRTdGVwJC5hc09ic2VydmFibGUoKTtcclxuICB9XHJcblx0LyoqXHJcblx0ICogQGF1dGhvciBBbGV4IEhvZHNvblxyXG5cdCAqIEBkZXNjcmlwdGlvbiByZXR1cm5zIHRoZSBjdXJyZW50IG1vZGFsIHN0ZXAgb2JzZXJ2YWJsZVxyXG5cdCAqIEByZXR1cm5zIHRoZSBjdXJyZW50IG1vZGFsIHN0ZXAgb2JzZXJ2YWJsZVxyXG5cdCAqL1xyXG4gIGdldEN1cnJlbnRTdGVwKCk6IFN0ZXBNb2RlbDxUPnxudWxsIHtcclxuICAgIHJldHVybiB0aGlzLmN1cnJlbnRTdGVwJC5nZXRWYWx1ZSgpO1xyXG4gIH1cclxuXHQvKipcclxuXHQgKiBAYXV0aG9yIEFsZXggSG9kc29uXHJcblx0ICogQGRlc2NyaXB0aW9uIHJldHJpZXZlcyB0aGUgY3VycmVudCBzdGVwc1xyXG5cdCAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHN0ZXBzXHJcblx0ICovXHJcblx0Z2V0U3RlcHMoKTogU3RlcE1vZGVsPFQ+W10ge1xyXG5cdFx0cmV0dXJuIHRoaXMuc3RlcHMkLmdldFZhbHVlKClcclxuXHR9XHJcblx0LyoqXHJcblx0ICogQGF1dGhvciBBbGV4IEhvZHNvblxyXG5cdCAqIEBkZXNjcmlwdGlvbiByZXR1cm5zIHRoZSBtb2RhbCBzdGVwIG9ic2VydmFibGVcclxuXHQgKiBAcmV0dXJucyB0aGUgbW9kYWwgc3RlcCBvYnNlcnZhYmxlXHJcblx0ICovXHJcbiAgZ2V0U3RlcHNPYnNlcnZhYmxlKCk6IE9ic2VydmFibGU8U3RlcE1vZGVsPFQ+W10+IHtcclxuICAgIHJldHVybiB0aGlzLnN0ZXBzJC5hc09ic2VydmFibGUoKTtcclxuICB9XHJcblx0LyoqXHJcblx0ICogQGF1dGhvciBBbGV4IEhvZHNvblxyXG5cdCAqIEBkZXNjcmlwdGlvbiBzZXRzIHRoZSBzdGVwIGZvcndhcmQgYXZhaWxhYmlsaXR5XHJcblx0ICogQHBhcmFtIGF2YWlsYWJsZSB3aGV0aGVyIGEgc3RlcCBmb3J3YXJkIGlzIGF2YWlsYWJsZVxyXG5cdCAqL1xyXG5cdHNldFN0ZXBGb3J3YXJkQXZhaWxhYmlsaXR5KGF2YWlsYWJsZTogYm9vbGVhbik6IHZvaWQge1xyXG5cdFx0dGhpcy5zdGVwRm9yd2FyZEF2YWlsYWJpbGl0eSQubmV4dChhdmFpbGFibGUpXHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIEBhdXRob3IgQWxleCBIb2Rzb25cclxuXHQgKiBAZGVzY3JpcHRpb24gcmV0dXJucyB0aGUgc3RlcCBmb3J3YXJkIGF2YWlsYWJpbGl0eSBvYnNlcnZhYmxlXHJcblx0ICogQHJldHVybnMgdGhlIHN0ZXAgZm9yd2FyZCBhdmFpbGFiaWxpdHkgb2JzZXJ2YWJsZVxyXG5cdCAqL1xyXG5cdGdldFN0ZXBGb3J3YXJkQXZhaWxhYmlsaXR5KCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuc3RlcEZvcndhcmRBdmFpbGFiaWxpdHkkLmFzT2JzZXJ2YWJsZSgpXHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIEBhdXRob3IgQWxleCBIb2Rzb25cclxuXHQgKiBAZGVzY3JpcHRpb24gbW92ZXMgdG8gdGhlIG5leHQgbW9kYWwgc3RlcFxyXG5cdCAqL1xyXG4gIG1vdmVUb05leHRTdGVwKCk6IHZvaWQge1xyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmN1cnJlbnRTdGVwJC52YWx1ZSEuc3RlcEluZGV4O1xyXG5cclxuICAgIGlmIChpbmRleCA8IHRoaXMuc3RlcHMkLnZhbHVlLmxlbmd0aCkge1xyXG5cdFx0XHRjb25zdCBuZXh0U3RlcCA9IHRoaXMuc3RlcHMkLnZhbHVlW2luZGV4XVxyXG5cdFx0XHRjb25zdCBjdXJyZW50U3RlcCA9IHRoaXMuc3RlcHMkLnZhbHVlW2luZGV4IC0gMV1cclxuICAgICAgdGhpcy5jdXJyZW50U3RlcCQubmV4dCh7XHJcblx0XHRcdFx0Li4ubmV4dFN0ZXAsXHJcblx0XHRcdFx0J3N0ZXBDYWxsYmFja05hbWUnOiBjdXJyZW50U3RlcC5zdGVwQ2FsbGJhY2tOYW1lLFxyXG5cdFx0XHRcdCd0cmlnZ2VyQ2FsbGJhY2snOiAhIWN1cnJlbnRTdGVwLnN0ZXBDYWxsYmFja05hbWVcclxuXHRcdFx0fSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cdC8qKlxyXG5cdCAqIEBhdXRob3IgQWxleCBIb2Rzb25cclxuXHQgKiBAZGVzY3JpcHRpb24gbW92ZXMgdG8gdGhlIHByZXZpb3VzIG1vZGFsIHN0ZXBcclxuXHQgKi9cclxuXHRtb3ZlVG9QcmV2aW91c1N0ZXAoKTogdm9pZCB7XHJcblx0XHRjb25zdCBpbmRleCA9IHRoaXMuY3VycmVudFN0ZXAkLnZhbHVlIS5zdGVwSW5kZXhcclxuXHRcdGNvbnN0IHByZXZpb3VzID0gdGhpcy5zdGVwcyQudmFsdWUuZmluZChlbGVtZW50ID0+IGVsZW1lbnQuc3RlcEluZGV4ID09PSBpbmRleCAtIDEpXHJcblxyXG5cdFx0aWYgKCFwcmV2aW91cykgcmV0dXJuXHJcblxyXG5cdFx0dGhpcy5jdXJyZW50U3RlcCQubmV4dCh7XHJcblx0XHRcdC4uLnByZXZpb3VzLFxyXG5cdFx0XHQndHJpZ2dlckNhbGxiYWNrJzogZmFsc2VcclxuXHRcdH0pO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBAYXV0aG9yIEFsZXggSG9kc29uXHJcblx0ICogQGRlc2NyaXB0aW9uIGRldGVybWluZXMgd2hldGhlciB0aGUgY3VycmVudCBzdGVwIGlzIHRoZSBsYXN0XHJcblx0ICogQHJldHVybnMgd2hldGhlciB0aGUgc3RlcCBpcyB0aGUgbGFzdCBvbmVcclxuXHQgKi9cclxuICBpc0xhc3RTdGVwKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFN0ZXAkLnZhbHVlIS5zdGVwSW5kZXggPT09IHRoaXMuc3RlcHMkLnZhbHVlLmxlbmd0aDtcclxuICB9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBhdXRob3IgQWxleCBIb2Rzb25cclxuXHQgKiBAZGVzY3JpcHRpb24gdHJpZ2dlcnMgYW55IHBvdGVudGlhbCBcImFmdGVyLXN0ZXBcIiBmdW5jdGlvbmFsaXR5IGZvciB0aGUgY3VycmVudCBzdGVwIGFuZCBjaGFuZ2VzIHRoZSBjdXJyZW50IHJvdXRlIHdpdGggYW55IHJlcXVpcmVkIHBhcmFtZXRlcnNcclxuXHQgKiBAcGFyYW0gZ2V0UGFyYW1ldGVyVmFsdWUgdGhlIGNhbGxiYWNrIHdoaWNoIHJldHJpZXZlcyB0aGUgdmFsdWUgZm9yIGEgc3RlcCBwYXJhbWV0ZXJcclxuXHQgKiBAcGFyYW0gdHJpZ2dlclN0ZXBDYWxsYmFjayB0aGUgY2FsbGJhY2sgd2hpY2ggdHJpZ2dlcnMgdGhlIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHkgZm9yIHRoZSBzcGVjaWZpZWQgc3RlcCBpbmRleFxyXG5cdCAqL1xyXG5cdGFzeW5jIGhhbmRsZVN0ZXBDaGFuZ2UoZ2V0UGFyYW1ldGVyVmFsdWU/OiAoLi4uYXJnczogYW55KSA9PiBhbnksIHRyaWdnZXJTdGVwQ2FsbGJhY2s/OiAoLi4uYXJnczogYW55KSA9PiBQcm9taXNlPGJvb2xlYW4+LCByZXZlcnQ6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8dm9pZHxudWxsPiB7XHJcblx0XHRjb25zdCBjdXJyZW50U3RlcCA9IHRoaXMuY3VycmVudFN0ZXAkLnZhbHVlXHJcblx0XHRcdFxyXG5cdFx0aWYgKCFjdXJyZW50U3RlcCkgcmV0dXJuXHJcblxyXG5cdFx0Y29uc3QgeyBzdGVwSW5kZXgsIHRyaWdnZXJDYWxsYmFjayB9ID0gY3VycmVudFN0ZXBcclxuXHJcblx0XHRpZiAodHJpZ2dlckNhbGxiYWNrICYmIHRyaWdnZXJTdGVwQ2FsbGJhY2spIHtcclxuXHRcdFx0Y29uc3QgcmVzdWx0cyA9IGF3YWl0IHRyaWdnZXJTdGVwQ2FsbGJhY2soc3RlcEluZGV4KVxyXG5cclxuXHRcdFx0aWYgKCFyZXN1bHRzICYmIHJldmVydCkgcmV0dXJuIHRoaXMubW92ZVRvUHJldmlvdXNTdGVwKClcclxuXHRcdH0gXHJcblxyXG5cdFx0dGhpcy5oYW5kbGVOYXZpZ2F0aW9uKGdldFBhcmFtZXRlclZhbHVlLCBjdXJyZW50U3RlcClcclxuXHR9XHJcblx0LyoqXHJcblx0ICogQGF1dGhvciBBbGV4IEhvZHNvblxyXG5cdCAqIEBkZXNjcmlwdGlvbiBoYW5kbGVzIHRoZSBtb2RpZmljYXRpb24gb2YgdGhlIHN5c3RlbSByb3V0ZSB3aGljaCB3aWxsIG5hdmlnYXRlIHRvIHRoZSBzcGVjaWZpZWQgc3RlcC4gSWYgbm8gc3RlcCBpcyBwcm92aWRlZCwgdGhlbiB0aGUgc3RvcmVkIGN1cnJlbnQgc3RlcCBpcyB1c2VkXHJcblx0ICogQHBhcmFtIGdldFBhcmFtZXRlclZhbHVlIHRoZSBjYWxsYmFjayB3aGljaCByZXRyaWV2ZXMgdGhlIHZhbHVlIGZvciBhIHN0ZXAgcGFyYW1ldGVyXHJcblx0ICogQHBhcmFtIHN0ZXAgYW4gb3B0aW9uYWwgc3RlcCB3aGljaCB3aWxsIGJlIHVzZWQgdG8gbmF2aWdhdGUgdG9cclxuXHQgKi9cclxuXHRoYW5kbGVOYXZpZ2F0aW9uKGdldFBhcmFtZXRlclZhbHVlPzogKC4uLmFyZ3M6IGFueSkgPT4gYW55LCBzdGVwPzogU3RlcE1vZGVsPFQ+KTogdm9pZCB7XHJcblx0XHRjb25zdCBjdXJyZW50U3RlcCA9IHN0ZXAgfHwgdGhpcy5jdXJyZW50U3RlcCQudmFsdWVcclxuXHRcdFx0XHJcblx0XHRpZiAoIWN1cnJlbnRTdGVwKSByZXR1cm5cclxuXHJcblx0XHRjb25zdCB7IHNsdWcsIHBhcmFtZXRlcnMgfSA9IGN1cnJlbnRTdGVwXHJcblxyXG5cdFx0bGV0IHJvdXRlID0gYHN0ZXAtJHtzbHVnfWBcclxuXHRcdGlmIChnZXRQYXJhbWV0ZXJWYWx1ZSkgcGFyYW1ldGVycy5mb3JFYWNoKChlbGVtZW50KSA9PiByb3V0ZSArPSBgLyR7Z2V0UGFyYW1ldGVyVmFsdWUoZWxlbWVudCl9YClcclxuXHRcdHRoaXMucm91dGVyLm5hdmlnYXRlKFtyb3V0ZV0sIHsgcmVsYXRpdmVUbzogdGhpcy5hY3RpdmF0ZWRSb3V0ZSB9KVxyXG5cdH0gXHJcblx0LyoqXHJcblx0ICogQGF1dGhvciBBbGV4IEhvZHNvblxyXG5cdCAqIEBkZXNjcmlwdGlvbiBjbGVhcnMgYW55IHJvdXRlIHBhdGhzIGFuZC9vciBwYXJhbWV0ZXJzIGNyZWF0ZWQgZHVyaW5nIHRoZSBzdGVwIGZ1bmN0aW9uYWxpdHksIHJldmVydGluZyB0aGUgdXJsIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHN0YXRlIHdoZW4gdGhlIHN0ZXAgcGF0aHMgd2VyZSBhcHBlbmRlZFxyXG5cdCAqL1xyXG5cdGNsZWFyU3RlcFJvdXRlKCk6IHZvaWQge1xyXG5cdFx0Y29uc3QgdXJsID0gdGhpcy5yb3V0ZXIudXJsXHJcblx0XHRjb25zdCBbaW5pdGlhbF0gPSB1cmwuc3BsaXQoJy9zdGVwLScpXHJcblx0XHR0aGlzLnJvdXRlci5uYXZpZ2F0ZShbaW5pdGlhbF0pXHJcblx0fVxyXG59XHJcbiJdfQ==
195
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: StepService, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: 'steps' }], target: i0.ɵɵFactoryTarget.Injectable }); }
196
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: StepService, providedIn: 'root' }); }
197
+ }
198
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: StepService, decorators: [{
199
+ type: Injectable,
200
+ args: [{
201
+ providedIn: 'root'
202
+ }]
203
+ }], ctorParameters: () => [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: undefined, decorators: [{
204
+ type: Inject,
205
+ args: ['steps']
206
+ }] }] });
207
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd2luZG93cy1wbHVzLXV0aWxpdGllcy9tb2RhbC13aXphcmQvdXRpbC9zZXJ2aWNlL3N0ZXAuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUNsRCxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFBOzs7QUFPbEQsTUFBTSxPQUFPLFdBQVc7SUFxQnZCOzs7O0dBSUU7SUFDRixZQUNTLE1BQWMsRUFDZCxjQUE4QixFQUNiLFVBQTBCO1FBRjNDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDYixlQUFVLEdBQVYsVUFBVSxDQUFnQjtRQTVCcEQ7O1dBRUc7UUFDSyxpQkFBWSxHQUFHLENBQUMsQ0FBQTtRQVN4Qjs7V0FFRztRQUNILGlCQUFZLEdBQXlDLElBQUksZUFBZSxDQUFzQixJQUFJLENBQUMsQ0FBQztRQUNwRzs7V0FFRztRQUNILDZCQUF3QixHQUE2QixJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQTtRQVd2RixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDaEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUE7UUFDckQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzlDLENBQUM7SUFDTyxVQUFVLENBQUMsTUFBeUM7UUFDM0QsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNuQyxH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RSxFQUFFLENBQUMsS0FBSyxJQUFJLElBQUksaUJBQWlCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ2pHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUE7SUFDbkUsQ0FBQztJQUNEOzs7T0FHRztJQUNILGNBQWM7UUFDYixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQTtRQUMzQixNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUNyQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUE7SUFDaEMsQ0FBQzs4R0EvTVcsV0FBVyxzRUE2QmQsT0FBTztrSEE3QkosV0FBVyxjQUZYLE1BQU07OzJGQUVOLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1gsVUFBVSxFQUFFLE1BQU07aUJBQ2xCOzswQkE4QkUsTUFBTTsyQkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcydcclxuaW1wb3J0IHsgU3RlcE1vZGVsIH0gZnJvbSAnLi4vaW50ZXJmYWNlL21vZGFsLXN0ZXAuaW50ZXJmYWNlJ1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJ1xyXG5cclxuQEluamVjdGFibGUoe1xyXG5cdHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgU3RlcFNlcnZpY2U8VD4ge1xyXG5cdC8qKlxyXG5cdCAqIEBkZXNjcmlwdGlvbiB0aGUgY3VycmVudCBpbmRleFxyXG5cdCAqL1xyXG5cdHByaXZhdGUgY3VycmVudEluZGV4ID0gMFxyXG5cdC8qKlxyXG5cdCAqIEBkZXNjcmlwdGlvbiB0aGUgb3JpZ2luYWwgc3RlcCBjb25maWd1cmF0aW9uXHJcblx0ICovXHJcblx0b3JpZ2luYWxTdGVwczogU3RlcE1vZGVsPFQ+W11cclxuXHQvKipcclxuXHQgKiBAZGVzY3JpcHRpb24gdGhlIHN1YmplY3QgZm9yIHRoZSBtb2RhbCBzdGVwc1xyXG5cdCAqL1xyXG5cdHN0ZXBzJDogQmVoYXZpb3JTdWJqZWN0PFN0ZXBNb2RlbDxUPltdPlxyXG5cdC8qKlxyXG5cdCAqIEBkZXNjcmlwdGlvbiB0aGUgc3ViamVjdCBmb3IgdGhlIGN1cnJlbnQgbW9kYWwgc3RlcFxyXG5cdCAqL1xyXG5cdGN1cnJlbnRTdGVwJDogQmVoYXZpb3JTdWJqZWN0PFN0ZXBNb2RlbDxUPiB8IG51bGw+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTdGVwTW9kZWw8VD4gfCBudWxsPihudWxsKTtcclxuXHQvKipcclxuXHQgKiBAZGVzY3JpcHRpb24gdGhlIHN1YmplY3QgZm9yIHRoZSBzdGVwIGZvcndhcmQgYXZhaWxhYmlsaXR5XHJcblx0ICovXHJcblx0c3RlcEZvcndhcmRBdmFpbGFiaWxpdHkkOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKVxyXG5cdC8qKlxyXG4gKiBAYXV0aG9yIEFsZXggSG9kc29uXHJcbiAqIEBkZXNjcmlwdGlvbiBjbGFzcyBjb25zdHJ1Y3RvciBzcGVjaWZ5aW5nIHRoZSByZXF1aXJlZCBzZXJ2aWNlcyBhbmQgcHJvcGVydGllc1xyXG4gKiBAcGFyYW0gc3RlcHMgdGhlIHN0ZXBzIGluIHRoZSBtb2RhbFxyXG4gKi9cclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcblx0XHRwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuXHRcdEBJbmplY3QoJ3N0ZXBzJykgcHJpdmF0ZSBzdGVwQ29uZmlnOiBTdGVwTW9kZWw8VD5bXVxyXG5cdCkge1xyXG5cdFx0dGhpcy5vcmlnaW5hbFN0ZXBzID0gdGhpcy5idWlsZFN0ZXBzKHN0ZXBDb25maWcpXHJcblx0XHR0aGlzLnN0ZXBzJCA9IG5ldyBCZWhhdmlvclN1YmplY3QodGhpcy5vcmlnaW5hbFN0ZXBzKVxyXG5cdFx0dGhpcy5jdXJyZW50U3RlcCQubmV4dCh0aGlzLm9yaWdpbmFsU3RlcHNbMF0pXHJcblx0fVxyXG5cdHByaXZhdGUgYnVpbGRTdGVwcyhjb25maWc6IE9taXQ8U3RlcE1vZGVsPFQ+LCAnc3RlcEluZGV4Jz5bXSk6IFN0ZXBNb2RlbDxUPltdIHtcclxuXHRcdHJldHVybiBjb25maWcubWFwKChzdGVwLCBpbmRleCkgPT4gKHtcclxuXHRcdFx0Li4uc3RlcCxcclxuXHRcdFx0c3RlcEluZGV4OiBpbmRleCArIDFcclxuXHRcdH0pKVxyXG5cdH1cclxuXHQvKipcclxuXHQgKiBAYXV0aG9yIEFsZXggSG9kc29uXHJcblx0ICogQGRlc2NyaXB0aW9uIGFkanVzdHMgdGhlIHN0ZXAgaW5kZXhlcyB0byBiZSBzZXF1ZW50aWFsIGJhc2VkIG9uIHRoZWlyIHBvc2l0aW9uIGluIHRoZSBzdGVwcyBhcnJheVxyXG5cdCAqL1xyXG5cdGFkanVzdFN0ZXBJbmRleGVzKCk6IHZvaWQge1xyXG5cdFx0Y29uc3QgcmVidWlsdCA9IHRoaXMuc3RlcHMkLnZhbHVlLm1hcCgoc3RlcCwgaW5kZXgpID0+ICh7XHJcblx0XHRcdC4uLnN0ZXAsXHJcblx0XHRcdHN0ZXBJbmRleDogaW5kZXggKyAxXHJcblx0XHR9KSlcclxuXHJcblx0XHR0aGlzLnN0ZXBzJC5uZXh0KHJlYnVpbHQpXHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIEBhdXRob3IgQWxleCBIb2Rzb25cclxuXHQgKiBAZGVzY3JpcHRpb24gaW5zZXJ0cyBhIG5ldyBzdGVwIGF0IGEgc3BlY2lmaWMgaW5kZXgsIHNwZWNpZmllZCBieSB0aGUgc3RlcCBpbmRleCBwcm9wZXJ0eVxyXG5cdCAqIEBwYXJhbSBzdGVwIHRoZSBzdGVwIHRvIGJlIGluc2VydGVkXHJcblx0ICovXHJcblx0aW5zZXJ0U3RlcChzdGVwOiBTdGVwTW9kZWw8VD4pOiB2b2lkIHtcclxuXHRcdGNvbnN0IGN1cnJlbnQgPSB0aGlzLnN0ZXBzJC52YWx1ZVxyXG5cclxuXHRcdGNvbnN0IHVwZGF0ZWQgPSBbXHJcblx0XHRcdC4uLmN1cnJlbnQuc2xpY2UoMCwgc3RlcC5zdGVwSW5kZXggLSAxKSxcclxuXHRcdFx0c3RlcCxcclxuXHRcdFx0Li4uY3VycmVudC5zbGljZShzdGVwLnN0ZXBJbmRleCAtIDEpXHJcblx0XHRdLm1hcCgocywgaW5kZXgpID0+ICh7XHJcblx0XHRcdC4uLnMsXHJcblx0XHRcdHN0ZXBJbmRleDogaW5kZXggKyAxXHJcblx0XHR9KSlcclxuXHJcblx0XHR0aGlzLnN0ZXBzJC5uZXh0KHVwZGF0ZWQpXHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIEBhdXRob3IgQWxleCBIb2Rzb25cclxuXHQgKiBAZGVzY3JpcHRpb24gc2V0cyB0aGUgY3VycmVudCBtb2RhbCBzdGVwXHJcblx0ICogQHBhcmFtIHN0ZXAgdGhlIHN0ZXAgdG8gYmUgc2V0XHJcblx0ICovXHJcblx0c2V0Q3VycmVudFN0ZXAoc3RlcDogU3RlcE1vZGVsPFQ+KTogdm9pZCB7XHJcblx0XHR0aGlzLmN1cnJlbnRTdGVwJC5uZXh0KHN0ZXApXHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIEBhdXRob3IgQWxleCBIb2Rzb25cclxuXHQgKiBAZGVzY3JpcHRpb24gcmV0dXJucyB0aGUgY3VycmVudCBtb2RhbCBzdGVwIG9ic2VydmFibGVcclxuXHQgKiBAcmV0dXJucyB0aGUgY3VycmVudCBtb2RhbCBzdGVwIG9ic2VydmFibGVcclxuXHQgKi9cclxuXHRnZXRDdXJyZW50U3RlcE9ic2VydmFibGUoKTogT2JzZXJ2YWJsZTxTdGVwTW9kZWw8VD4gfCBudWxsPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5jdXJyZW50U3RlcCQuYXNPYnNlcnZhYmxlKClcclxuXHR9XHJcblx0LyoqXHJcblx0ICogQGF1dGhvciBBbGV4IEhvZHNvblxyXG5cdCAqIEBkZXNjcmlwdGlvbiByZXR1cm5zIHRoZSBjdXJyZW50IG1vZGFsIHN0ZXAgb2JzZXJ2YWJsZVxyXG5cdCAqIEByZXR1cm5zIHRoZSBjdXJyZW50IG1vZGFsIHN0ZXAgb2JzZXJ2YWJsZVxyXG5cdCAqL1xyXG5cdGdldEN1cnJlbnRTdGVwKCk6IFN0ZXBNb2RlbDxUPiB8IG51bGwge1xyXG5cdFx0cmV0dXJuIHRoaXMuY3VycmVudFN0ZXAkLmdldFZhbHVlKClcclxuXHR9XHJcblx0LyoqXHJcblx0ICogQGF1dGhvciBBbGV4IEhvZHNvblxyXG5cdCAqIEBkZXNjcmlwdGlvbiByZXRyaWV2ZXMgdGhlIGN1cnJlbnQgc3RlcHNcclxuXHQgKiBAcmV0dXJucyB0aGUgY3VycmVudCBzdGVwc1xyXG5cdCAqL1xyXG5cdGdldFN0ZXBzKCk6IFN0ZXBNb2RlbDxUPltdIHtcclxuXHRcdHJldHVybiB0aGlzLnN0ZXBzJC5nZXRWYWx1ZSgpXHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIEBhdXRob3IgQWxleCBIb2Rzb25cclxuXHQgKiBAZGVzY3JpcHRpb24gcmV0dXJucyB0aGUgbW9kYWwgc3RlcCBvYnNlcnZhYmxlXHJcblx0ICogQHJldHVybnMgdGhlIG1vZGFsIHN0ZXAgb2JzZXJ2YWJsZVxyXG5cdCAqL1xyXG5cdGdldFN0ZXBzT2JzZXJ2YWJsZSgpOiBPYnNlcnZhYmxlPFN0ZXBNb2RlbDxUPltdPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5zdGVwcyQuYXNPYnNlcnZhYmxlKClcclxuXHR9XHJcblx0LyoqXHJcblx0ICogQGF1dGhvciBBbGV4IEhvZHNvblxyXG5cdCAqIEBkZXNjcmlwdGlvbiBzZXRzIHRoZSBzdGVwIGZvcndhcmQgYXZhaWxhYmlsaXR5XHJcblx0ICogQHBhcmFtIGF2YWlsYWJsZSB3aGV0aGVyIGEgc3RlcCBmb3J3YXJkIGlzIGF2YWlsYWJsZVxyXG5cdCAqL1xyXG5cdHNldFN0ZXBGb3J3YXJkQXZhaWxhYmlsaXR5KGF2YWlsYWJsZTogYm9vbGVhbik6IHZvaWQge1xyXG5cdFx0dGhpcy5zdGVwRm9yd2FyZEF2YWlsYWJpbGl0eSQubmV4dChhdmFpbGFibGUpXHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIEBhdXRob3IgQWxleCBIb2Rzb25cclxuXHQgKiBAZGVzY3JpcHRpb24gcmV0dXJucyB0aGUgc3RlcCBmb3J3YXJkIGF2YWlsYWJpbGl0eSBvYnNlcnZhYmxlXHJcblx0ICogQHJldHVybnMgdGhlIHN0ZXAgZm9yd2FyZCBhdmFpbGFiaWxpdHkgb2JzZXJ2YWJsZVxyXG5cdCAqL1xyXG5cdGdldFN0ZXBGb3J3YXJkQXZhaWxhYmlsaXR5KCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuc3RlcEZvcndhcmRBdmFpbGFiaWxpdHkkLmFzT2JzZXJ2YWJsZSgpXHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIEBhdXRob3IgQWxleCBIb2Rzb25cclxuXHQgKiBAZGVzY3JpcHRpb24gbW92ZXMgdG8gdGhlIG5leHQgbW9kYWwgc3RlcFxyXG5cdCAqL1xyXG5cdG1vdmVUb05leHRTdGVwKCk6IHZvaWQge1xyXG5cdFx0aWYgKHRoaXMuY3VycmVudEluZGV4IDwgdGhpcy5zdGVwcyQudmFsdWUubGVuZ3RoIC0gMSkge1xyXG5cdFx0XHR0aGlzLmN1cnJlbnRJbmRleCsrXHJcblx0XHRcdHRoaXMuY3VycmVudFN0ZXAkLm5leHQodGhpcy5zdGVwcyQudmFsdWVbdGhpcy5jdXJyZW50SW5kZXhdKVxyXG5cdFx0fVxyXG5cdH1cclxuXHQvKipcclxuXHQgKiBAYXV0aG9yIEFsZXggSG9kc29uXHJcblx0ICogQGRlc2NyaXB0aW9uIG1vdmVzIHRvIHRoZSBwcmV2aW91cyBtb2RhbCBzdGVwXHJcblx0ICovXHJcblx0bW92ZVRvUHJldmlvdXNTdGVwKCk6IHZvaWQge1xyXG5cdFx0Y29uc3QgcHJldmlvdXMgPSB0aGlzLnN0ZXBzJC5nZXRWYWx1ZSgpW3RoaXMuY3VycmVudEluZGV4IC0gMV1cclxuXHJcblx0XHRpZiAoIXByZXZpb3VzKSByZXR1cm5cclxuXHJcblx0XHR0aGlzLmN1cnJlbnRTdGVwJC5uZXh0KHtcclxuXHRcdFx0Li4ucHJldmlvdXMsXHJcblx0XHRcdCd0cmlnZ2VyQ2FsbGJhY2snOiBmYWxzZVxyXG5cdFx0fSlcclxuXHR9XHJcblx0LyoqXHJcblx0ICogQGF1dGhvciBBbGV4IEhvZHNvblxyXG5cdCAqIEBkZXNjcmlwdGlvbiBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGN1cnJlbnQgc3RlcCBpcyB0aGUgbGFzdFxyXG5cdCAqIEByZXR1cm5zIHdoZXRoZXIgdGhlIHN0ZXAgaXMgdGhlIGxhc3Qgb25lXHJcblx0ICovXHJcblx0aXNMYXN0U3RlcCgpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLmN1cnJlbnRJbmRleCA9PT0gdGhpcy5zdGVwcyQudmFsdWUubGVuZ3RoXHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBAYXV0aG9yIEFsZXggSG9kc29uXHJcblx0ICogQGRlc2NyaXB0aW9uIHRyaWdnZXJzIGFueSBwb3RlbnRpYWwgXCJhZnRlci1zdGVwXCIgZnVuY3Rpb25hbGl0eSBmb3IgdGhlIGN1cnJlbnQgc3RlcCBhbmQgY2hhbmdlcyB0aGUgY3VycmVudCByb3V0ZSB3aXRoIGFueSByZXF1aXJlZCBwYXJhbWV0ZXJzXHJcblx0ICogQHBhcmFtIGdldFBhcmFtZXRlclZhbHVlIHRoZSBjYWxsYmFjayB3aGljaCByZXRyaWV2ZXMgdGhlIHZhbHVlIGZvciBhIHN0ZXAgcGFyYW1ldGVyXHJcblx0ICogQHBhcmFtIHRyaWdnZXJTdGVwQ2FsbGJhY2sgdGhlIGNhbGxiYWNrIHdoaWNoIHRyaWdnZXJzIHRoZSBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5IGZvciB0aGUgc3BlY2lmaWVkIHN0ZXAgaW5kZXhcclxuXHQgKi9cclxuXHRhc3luYyBoYW5kbGVTdGVwQ2hhbmdlKGdldFBhcmFtZXRlclZhbHVlPzogKC4uLmFyZ3M6IGFueSkgPT4gYW55LCB0cmlnZ2VyU3RlcENhbGxiYWNrPzogKC4uLmFyZ3M6IGFueSkgPT4gUHJvbWlzZTxib29sZWFuPiwgcmV2ZXJ0OiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHZvaWQgfCBudWxsPiB7XHJcblx0XHRjb25zdCBjdXJyZW50U3RlcCA9IHRoaXMuY3VycmVudFN0ZXAkLnZhbHVlXHJcblxyXG5cdFx0aWYgKCFjdXJyZW50U3RlcCkgcmV0dXJuXHJcblxyXG5cdFx0Y29uc3QgeyBzdGVwSW5kZXgsIHRyaWdnZXJDYWxsYmFjayB9ID0gY3VycmVudFN0ZXBcclxuXHJcblx0XHRpZiAodHJpZ2dlckNhbGxiYWNrICYmIHRyaWdnZXJTdGVwQ2FsbGJhY2spIHtcclxuXHRcdFx0Y29uc3QgcmVzdWx0cyA9IGF3YWl0IHRyaWdnZXJTdGVwQ2FsbGJhY2soc3RlcEluZGV4KVxyXG5cclxuXHRcdFx0aWYgKCFyZXN1bHRzICYmIHJldmVydCkgcmV0dXJuIHRoaXMubW92ZVRvUHJldmlvdXNTdGVwKClcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLmhhbmRsZU5hdmlnYXRpb24oZ2V0UGFyYW1ldGVyVmFsdWUsIGN1cnJlbnRTdGVwKVxyXG5cdH1cclxuXHQvKipcclxuXHQgKiBAYXV0aG9yIEFsZXggSG9kc29uXHJcblx0ICogQGRlc2NyaXB0aW9uIGhhbmRsZXMgdGhlIG1vZGlmaWNhdGlvbiBvZiB0aGUgc3lzdGVtIHJvdXRlIHdoaWNoIHdpbGwgbmF2aWdhdGUgdG8gdGhlIHNwZWNpZmllZCBzdGVwLiBJZiBubyBzdGVwIGlzIHByb3ZpZGVkLCB0aGVuIHRoZSBzdG9yZWQgY3VycmVudCBzdGVwIGlzIHVzZWRcclxuXHQgKiBAcGFyYW0gZ2V0UGFyYW1ldGVyVmFsdWUgdGhlIGNhbGxiYWNrIHdoaWNoIHJldHJpZXZlcyB0aGUgdmFsdWUgZm9yIGEgc3RlcCBwYXJhbWV0ZXJcclxuXHQgKiBAcGFyYW0gc3RlcCBhbiBvcHRpb25hbCBzdGVwIHdoaWNoIHdpbGwgYmUgdXNlZCB0byBuYXZpZ2F0ZSB0b1xyXG5cdCAqL1xyXG5cdGhhbmRsZU5hdmlnYXRpb24oZ2V0UGFyYW1ldGVyVmFsdWU/OiAoLi4uYXJnczogYW55KSA9PiBhbnksIHN0ZXA/OiBTdGVwTW9kZWw8VD4pOiB2b2lkIHtcclxuXHRcdGNvbnN0IGN1cnJlbnRTdGVwID0gc3RlcCB8fCB0aGlzLmN1cnJlbnRTdGVwJC52YWx1ZVxyXG5cclxuXHRcdGlmICghY3VycmVudFN0ZXApIHJldHVyblxyXG5cclxuXHRcdGNvbnN0IHsgc2x1ZywgcGFyYW1ldGVycyB9ID0gY3VycmVudFN0ZXBcclxuXHJcblx0XHRsZXQgcm91dGUgPSBgc3RlcC0ke3NsdWd9YFxyXG5cdFx0aWYgKGdldFBhcmFtZXRlclZhbHVlKSBwYXJhbWV0ZXJzLmZvckVhY2goKGVsZW1lbnQpID0+IHJvdXRlICs9IGAvJHtnZXRQYXJhbWV0ZXJWYWx1ZShlbGVtZW50KX1gKVxyXG5cdFx0dGhpcy5yb3V0ZXIubmF2aWdhdGUoW3JvdXRlXSwgeyByZWxhdGl2ZVRvOiB0aGlzLmFjdGl2YXRlZFJvdXRlIH0pXHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIEBhdXRob3IgQWxleCBIb2Rzb25cclxuXHQgKiBAZGVzY3JpcHRpb24gY2xlYXJzIGFueSByb3V0ZSBwYXRocyBhbmQvb3IgcGFyYW1ldGVycyBjcmVhdGVkIGR1cmluZyB0aGUgc3RlcCBmdW5jdGlvbmFsaXR5LCByZXZlcnRpbmcgdGhlIHVybCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzdGF0ZSB3aGVuIHRoZSBzdGVwIHBhdGhzIHdlcmUgYXBwZW5kZWRcclxuXHQgKi9cclxuXHRjbGVhclN0ZXBSb3V0ZSgpOiB2b2lkIHtcclxuXHRcdGNvbnN0IHVybCA9IHRoaXMucm91dGVyLnVybFxyXG5cdFx0Y29uc3QgW2luaXRpYWxdID0gdXJsLnNwbGl0KCcvc3RlcC0nKVxyXG5cdFx0dGhpcy5yb3V0ZXIubmF2aWdhdGUoW2luaXRpYWxdKVxyXG5cdH1cclxufVxyXG4iXX0=
@@ -0,0 +1,72 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { BehaviorSubject, map } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/router";
5
+ export class WizardStepService {
6
+ constructor(router, activatedRoute) {
7
+ this.router = router;
8
+ this.activatedRoute = activatedRoute;
9
+ this.state$ = new BehaviorSubject(null);
10
+ }
11
+ initialize(steps) {
12
+ this.state$.next({
13
+ steps: [...steps],
14
+ currentIndex: 0
15
+ });
16
+ this.navigate();
17
+ }
18
+ getCurrentStep() {
19
+ return this.state$.value?.steps[this.state$.value.currentIndex] ?? null;
20
+ }
21
+ getCurrentStep$() {
22
+ return this.state$.pipe(map(state => state ? state.steps[state.currentIndex] : null));
23
+ }
24
+ async next(context) {
25
+ const state = this.state$.value;
26
+ if (!state)
27
+ return;
28
+ const current = state.steps[state.currentIndex];
29
+ if (current.onEnter) {
30
+ const allowed = await current.onEnter(context);
31
+ if (!allowed)
32
+ return;
33
+ }
34
+ if (state.currentIndex < state.steps.length - 1) {
35
+ this.state$.next({
36
+ ...state,
37
+ currentIndex: state.currentIndex + 1
38
+ });
39
+ this.navigate();
40
+ }
41
+ }
42
+ previous() {
43
+ const state = this.state$.value;
44
+ if (!state)
45
+ return;
46
+ if (state.currentIndex > 0) {
47
+ this.state$.next({
48
+ ...state,
49
+ currentIndex: state.currentIndex - 1
50
+ });
51
+ this.navigate();
52
+ }
53
+ }
54
+ isLast() {
55
+ const state = this.state$.value;
56
+ if (!state)
57
+ return false;
58
+ return state.currentIndex === state.steps.length - 1;
59
+ }
60
+ navigate() {
61
+ const step = this.getCurrentStep();
62
+ if (!step)
63
+ return;
64
+ this.router.navigate([`step-${step.slug}`], { relativeTo: this.activatedRoute });
65
+ }
66
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: WizardStepService, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Injectable }); }
67
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: WizardStepService }); }
68
+ }
69
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: WizardStepService, decorators: [{
70
+ type: Injectable
71
+ }], ctorParameters: () => [{ type: i1.Router }, { type: i1.ActivatedRoute }] });
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l6YXJkLXN0ZXAuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dpbmRvd3MtcGx1cy11dGlsaXRpZXMvbW9kYWwtd2l6YXJkL3V0aWwvc2VydmljZS93aXphcmQtc3RlcC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFMUMsT0FBTyxFQUFFLGVBQWUsRUFBYyxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUE7OztBQUt2RCxNQUFNLE9BQU8saUJBQWlCO0lBSTVCLFlBQ1UsTUFBYyxFQUNkLGNBQThCO1FBRDlCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFKaEMsV0FBTSxHQUFHLElBQUksZUFBZSxDQUF3QixJQUFJLENBQUMsQ0FBQTtJQUs5RCxDQUFDO0lBRUosVUFBVSxDQUFDLEtBQTBCO1FBQ25DLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ2YsS0FBSyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDakIsWUFBWSxFQUFFLENBQUM7U0FDaEIsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFBO0lBQ2pCLENBQUM7SUFFRCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxDQUFBO0lBQ3pFLENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDckIsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQ1YsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUMvQyxDQUNGLENBQUE7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFhO1FBQ3RCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFBO1FBQy9CLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTTtRQUVsQixNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQTtRQUUvQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNwQixNQUFNLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUE7WUFDOUMsSUFBSSxDQUFDLE9BQU87Z0JBQUUsT0FBTTtRQUN0QixDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUNmLEdBQUcsS0FBSztnQkFDUixZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVksR0FBRyxDQUFDO2FBQ3JDLENBQUMsQ0FBQTtZQUVGLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQTtRQUNqQixDQUFDO0lBQ0gsQ0FBQztJQUVELFFBQVE7UUFDTixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQTtRQUMvQixJQUFJLENBQUMsS0FBSztZQUFFLE9BQU07UUFFbEIsSUFBSSxLQUFLLENBQUMsWUFBWSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUNmLEdBQUcsS0FBSztnQkFDUixZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVksR0FBRyxDQUFDO2FBQ3JDLENBQUMsQ0FBQTtZQUVGLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQTtRQUNqQixDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU07UUFDSixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQTtRQUMvQixJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sS0FBSyxDQUFBO1FBQ3hCLE9BQU8sS0FBSyxDQUFDLFlBQVksS0FBSyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUE7SUFDdEQsQ0FBQztJQUVPLFFBQVE7UUFDZCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUE7UUFDbEMsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFNO1FBRWpCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUNsQixDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQ3JCLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FDcEMsQ0FBQTtJQUNILENBQUM7OEdBL0VVLGlCQUFpQjtrSEFBakIsaUJBQWlCOzsyRkFBakIsaUJBQWlCO2tCQUQ3QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXHJcbmltcG9ydCB7IFJvdXRlciwgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInXHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgbWFwIH0gZnJvbSAncnhqcydcclxuaW1wb3J0IHsgU3RlcERlZmluaXRpb24gfSBmcm9tICcuLi9pbnRlcmZhY2Uvc3RlcC1kZWZpbml0aW9uLmludGVyZmFjZSdcclxuaW1wb3J0IHsgV2l6YXJkU3RhdGUgfSBmcm9tICcuLi9pbnRlcmZhY2Uvd2l6YXJkLXN0YXRlLmludGVyZmFjZSdcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFdpemFyZFN0ZXBTZXJ2aWNlPFQ+IHtcclxuXHJcbiAgcHJpdmF0ZSBzdGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFdpemFyZFN0YXRlPFQ+IHwgbnVsbD4obnVsbClcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGVcclxuICApIHt9XHJcblxyXG4gIGluaXRpYWxpemUoc3RlcHM6IFN0ZXBEZWZpbml0aW9uPFQ+W10pOiB2b2lkIHtcclxuICAgIHRoaXMuc3RhdGUkLm5leHQoe1xyXG4gICAgICBzdGVwczogWy4uLnN0ZXBzXSxcclxuICAgICAgY3VycmVudEluZGV4OiAwXHJcbiAgICB9KVxyXG5cclxuICAgIHRoaXMubmF2aWdhdGUoKVxyXG4gIH1cclxuXHJcbiAgZ2V0Q3VycmVudFN0ZXAoKTogU3RlcERlZmluaXRpb248VD4gfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLnN0YXRlJC52YWx1ZT8uc3RlcHNbdGhpcy5zdGF0ZSQudmFsdWUuY3VycmVudEluZGV4XSA/PyBudWxsXHJcbiAgfVxyXG5cclxuICBnZXRDdXJyZW50U3RlcCQoKTogT2JzZXJ2YWJsZTxTdGVwRGVmaW5pdGlvbjxUPiB8IG51bGw+IHtcclxuICAgIHJldHVybiB0aGlzLnN0YXRlJC5waXBlKFxyXG4gICAgICBtYXAoc3RhdGUgPT5cclxuICAgICAgICBzdGF0ZSA/IHN0YXRlLnN0ZXBzW3N0YXRlLmN1cnJlbnRJbmRleF0gOiBudWxsXHJcbiAgICAgIClcclxuICAgIClcclxuICB9XHJcblxyXG4gIGFzeW5jIG5leHQoY29udGV4dD86IGFueSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLnN0YXRlJC52YWx1ZVxyXG4gICAgaWYgKCFzdGF0ZSkgcmV0dXJuXHJcblxyXG4gICAgY29uc3QgY3VycmVudCA9IHN0YXRlLnN0ZXBzW3N0YXRlLmN1cnJlbnRJbmRleF1cclxuXHJcbiAgICBpZiAoY3VycmVudC5vbkVudGVyKSB7XHJcbiAgICAgIGNvbnN0IGFsbG93ZWQgPSBhd2FpdCBjdXJyZW50Lm9uRW50ZXIoY29udGV4dClcclxuICAgICAgaWYgKCFhbGxvd2VkKSByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICBpZiAoc3RhdGUuY3VycmVudEluZGV4IDwgc3RhdGUuc3RlcHMubGVuZ3RoIC0gMSkge1xyXG4gICAgICB0aGlzLnN0YXRlJC5uZXh0KHtcclxuICAgICAgICAuLi5zdGF0ZSxcclxuICAgICAgICBjdXJyZW50SW5kZXg6IHN0YXRlLmN1cnJlbnRJbmRleCArIDFcclxuICAgICAgfSlcclxuXHJcbiAgICAgIHRoaXMubmF2aWdhdGUoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJldmlvdXMoKTogdm9pZCB7XHJcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuc3RhdGUkLnZhbHVlXHJcbiAgICBpZiAoIXN0YXRlKSByZXR1cm5cclxuXHJcbiAgICBpZiAoc3RhdGUuY3VycmVudEluZGV4ID4gMCkge1xyXG4gICAgICB0aGlzLnN0YXRlJC5uZXh0KHtcclxuICAgICAgICAuLi5zdGF0ZSxcclxuICAgICAgICBjdXJyZW50SW5kZXg6IHN0YXRlLmN1cnJlbnRJbmRleCAtIDFcclxuICAgICAgfSlcclxuXHJcbiAgICAgIHRoaXMubmF2aWdhdGUoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNMYXN0KCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLnN0YXRlJC52YWx1ZVxyXG4gICAgaWYgKCFzdGF0ZSkgcmV0dXJuIGZhbHNlXHJcbiAgICByZXR1cm4gc3RhdGUuY3VycmVudEluZGV4ID09PSBzdGF0ZS5zdGVwcy5sZW5ndGggLSAxXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG5hdmlnYXRlKCk6IHZvaWQge1xyXG4gICAgY29uc3Qgc3RlcCA9IHRoaXMuZ2V0Q3VycmVudFN0ZXAoKVxyXG4gICAgaWYgKCFzdGVwKSByZXR1cm5cclxuXHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShcclxuICAgICAgW2BzdGVwLSR7c3RlcC5zbHVnfWBdLFxyXG4gICAgICB7IHJlbGF0aXZlVG86IHRoaXMuYWN0aXZhdGVkUm91dGUgfVxyXG4gICAgKVxyXG4gIH1cclxufVxyXG4iXX0=
@@ -1,20 +1,24 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Inject, Component } from '@angular/core';
2
+ import { Injectable, Inject, Component } from '@angular/core';
3
3
  import * as i2 from '@angular/common';
4
4
  import { CommonModule } from '@angular/common';
5
- import { __decorate, __param } from 'tslib';
6
- import { BehaviorSubject } from 'rxjs';
5
+ import { BehaviorSubject, map } from 'rxjs';
6
+ import * as i1 from '@angular/router';
7
7
 
8
- let StepService = class StepService {
8
+ class StepService {
9
9
  /**
10
- * @author Alex Hodson
11
- * @description class constructor specifying the required services and properties
12
- * @param steps the steps in the modal
13
- */
14
- constructor(router, activatedRoute, steps) {
10
+ * @author Alex Hodson
11
+ * @description class constructor specifying the required services and properties
12
+ * @param steps the steps in the modal
13
+ */
14
+ constructor(router, activatedRoute, stepConfig) {
15
15
  this.router = router;
16
16
  this.activatedRoute = activatedRoute;
17
- this.steps = steps;
17
+ this.stepConfig = stepConfig;
18
+ /**
19
+ * @description the current index
20
+ */
21
+ this.currentIndex = 0;
18
22
  /**
19
23
  * @description the subject for the current modal step
20
24
  */
@@ -23,17 +27,26 @@ let StepService = class StepService {
23
27
  * @description the subject for the step forward availability
24
28
  */
25
29
  this.stepForwardAvailability$ = new BehaviorSubject(false);
26
- this.steps$ = new BehaviorSubject(steps);
27
- this.currentStep$.next(this.steps$.value[0]);
30
+ this.originalSteps = this.buildSteps(stepConfig);
31
+ this.steps$ = new BehaviorSubject(this.originalSteps);
32
+ this.currentStep$.next(this.originalSteps[0]);
33
+ }
34
+ buildSteps(config) {
35
+ return config.map((step, index) => ({
36
+ ...step,
37
+ stepIndex: index + 1
38
+ }));
28
39
  }
29
40
  /**
30
41
  * @author Alex Hodson
31
42
  * @description adjusts the step indexes to be sequential based on their position in the steps array
32
43
  */
33
44
  adjustStepIndexes() {
34
- const currentSteps = [...this.steps];
35
- currentSteps.forEach((element, index) => element.stepIndex = index + 1);
36
- this.steps$.next(currentSteps);
45
+ const rebuilt = this.steps$.value.map((step, index) => ({
46
+ ...step,
47
+ stepIndex: index + 1
48
+ }));
49
+ this.steps$.next(rebuilt);
37
50
  }
38
51
  /**
39
52
  * @author Alex Hodson
@@ -41,11 +54,16 @@ let StepService = class StepService {
41
54
  * @param step the step to be inserted
42
55
  */
43
56
  insertStep(step) {
44
- const { stepIndex } = step;
45
- const currentSteps = [...this.steps];
46
- currentSteps.forEach(element => element.stepIndex = (stepIndex <= element.stepIndex ? element.stepIndex + 1 : element.stepIndex));
47
- currentSteps.splice(stepIndex - 1, 0, step);
48
- this.steps$.next(currentSteps);
57
+ const current = this.steps$.value;
58
+ const updated = [
59
+ ...current.slice(0, step.stepIndex - 1),
60
+ step,
61
+ ...current.slice(step.stepIndex - 1)
62
+ ].map((s, index) => ({
63
+ ...s,
64
+ stepIndex: index + 1
65
+ }));
66
+ this.steps$.next(updated);
49
67
  }
50
68
  /**
51
69
  * @author Alex Hodson
@@ -108,15 +126,9 @@ let StepService = class StepService {
108
126
  * @description moves to the next modal step
109
127
  */
110
128
  moveToNextStep() {
111
- const index = this.currentStep$.value.stepIndex;
112
- if (index < this.steps$.value.length) {
113
- const nextStep = this.steps$.value[index];
114
- const currentStep = this.steps$.value[index - 1];
115
- this.currentStep$.next({
116
- ...nextStep,
117
- 'stepCallbackName': currentStep.stepCallbackName,
118
- 'triggerCallback': !!currentStep.stepCallbackName
119
- });
129
+ if (this.currentIndex < this.steps$.value.length - 1) {
130
+ this.currentIndex++;
131
+ this.currentStep$.next(this.steps$.value[this.currentIndex]);
120
132
  }
121
133
  }
122
134
  /**
@@ -124,8 +136,7 @@ let StepService = class StepService {
124
136
  * @description moves to the previous modal step
125
137
  */
126
138
  moveToPreviousStep() {
127
- const index = this.currentStep$.value.stepIndex;
128
- const previous = this.steps$.value.find(element => element.stepIndex === index - 1);
139
+ const previous = this.steps$.getValue()[this.currentIndex - 1];
129
140
  if (!previous)
130
141
  return;
131
142
  this.currentStep$.next({
@@ -139,7 +150,7 @@ let StepService = class StepService {
139
150
  * @returns whether the step is the last one
140
151
  */
141
152
  isLastStep() {
142
- return this.currentStep$.value.stepIndex === this.steps$.value.length;
153
+ return this.currentIndex === this.steps$.value.length;
143
154
  }
144
155
  /**
145
156
  * @author Alex Hodson
@@ -184,10 +195,18 @@ let StepService = class StepService {
184
195
  const [initial] = url.split('/step-');
185
196
  this.router.navigate([initial]);
186
197
  }
187
- };
188
- StepService = __decorate([
189
- __param(2, Inject('steps'))
190
- ], StepService);
198
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: StepService, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: 'steps' }], target: i0.ɵɵFactoryTarget.Injectable }); }
199
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: StepService, providedIn: 'root' }); }
200
+ }
201
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: StepService, decorators: [{
202
+ type: Injectable,
203
+ args: [{
204
+ providedIn: 'root'
205
+ }]
206
+ }], ctorParameters: () => [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: undefined, decorators: [{
207
+ type: Inject,
208
+ args: ['steps']
209
+ }] }] });
191
210
 
192
211
  class StepComponent {
193
212
  /**
@@ -222,6 +241,87 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImpor
222
241
  args: [{ selector: 'step', standalone: true, imports: [CommonModule], template: "<div class=\"form-steps-container\">\r\n\t<ng-container *ngFor=\"let step of steps | async; let i = index;\">\r\n\t\t<div class=\"d-flex flex-column align-items-center\">\r\n\t\t\t<div \r\n\t\t\t\t(click)=\"onStepClick(step)\"\r\n\t\t\t\t[ngClass]=\"{ 'step-complete': step.isComplete, 'step-incomplete': !step.isComplete, 'step-current': (currentStep | async)?.stepIndex === step.stepIndex }\"\r\n\t\t\t\tclass=\"step-bubble cursor-pointer\"\r\n\t\t\t>{{ step.stepIndex }}</div>\r\n\t\t\t<div>\r\n\t\t\t\t<span class=\"text-grey\">{{step.title}}</span>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<div *ngIf=\"i < (steps | async)?.length - 1\" class=\"step-divider\"></div>\r\n\t</ng-container>\r\n</div>", styles: [".form-steps-container{display:flex;justify-content:space-between;align-items:center;padding:0 32px;margin-bottom:32px}.step-bubble{padding:20px;border:3px solid var(--wp-primaryBlue);width:12px;height:12px;display:flex;justify-content:center;align-items:center;border-radius:50%;color:var(--wp-primaryBlue);font-size:1em;cursor:pointer;-webkit-user-select:none;user-select:none}.step-divider{height:2px;background:var(--wp-primaryBlue);flex:1;margin:0 10px}.step-current,.step-complete{background:var(--wp-primaryBlue);color:#fff}.step-incomplete{cursor:not-allowed;pointer-events:none}\n"] }]
223
242
  }], ctorParameters: () => [{ type: StepService }] });
224
243
 
244
+ class WizardBuilder {
245
+ constructor() {
246
+ this.steps = [];
247
+ }
248
+ addStep(step) {
249
+ this.steps.push(step);
250
+ return this;
251
+ }
252
+ build() {
253
+ return [...this.steps]; // Immutable copy
254
+ }
255
+ }
256
+
257
+ class WizardStepService {
258
+ constructor(router, activatedRoute) {
259
+ this.router = router;
260
+ this.activatedRoute = activatedRoute;
261
+ this.state$ = new BehaviorSubject(null);
262
+ }
263
+ initialize(steps) {
264
+ this.state$.next({
265
+ steps: [...steps],
266
+ currentIndex: 0
267
+ });
268
+ this.navigate();
269
+ }
270
+ getCurrentStep() {
271
+ return this.state$.value?.steps[this.state$.value.currentIndex] ?? null;
272
+ }
273
+ getCurrentStep$() {
274
+ return this.state$.pipe(map(state => state ? state.steps[state.currentIndex] : null));
275
+ }
276
+ async next(context) {
277
+ const state = this.state$.value;
278
+ if (!state)
279
+ return;
280
+ const current = state.steps[state.currentIndex];
281
+ if (current.onEnter) {
282
+ const allowed = await current.onEnter(context);
283
+ if (!allowed)
284
+ return;
285
+ }
286
+ if (state.currentIndex < state.steps.length - 1) {
287
+ this.state$.next({
288
+ ...state,
289
+ currentIndex: state.currentIndex + 1
290
+ });
291
+ this.navigate();
292
+ }
293
+ }
294
+ previous() {
295
+ const state = this.state$.value;
296
+ if (!state)
297
+ return;
298
+ if (state.currentIndex > 0) {
299
+ this.state$.next({
300
+ ...state,
301
+ currentIndex: state.currentIndex - 1
302
+ });
303
+ this.navigate();
304
+ }
305
+ }
306
+ isLast() {
307
+ const state = this.state$.value;
308
+ if (!state)
309
+ return false;
310
+ return state.currentIndex === state.steps.length - 1;
311
+ }
312
+ navigate() {
313
+ const step = this.getCurrentStep();
314
+ if (!step)
315
+ return;
316
+ this.router.navigate([`step-${step.slug}`], { relativeTo: this.activatedRoute });
317
+ }
318
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: WizardStepService, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Injectable }); }
319
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: WizardStepService }); }
320
+ }
321
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: WizardStepService, decorators: [{
322
+ type: Injectable
323
+ }], ctorParameters: () => [{ type: i1.Router }, { type: i1.ActivatedRoute }] });
324
+
225
325
  /*
226
326
  * Public API Surface of windows-plus-utilities
227
327
  */
@@ -230,5 +330,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImpor
230
330
  * Generated bundle index. Do not edit.
231
331
  */
232
332
 
233
- export { StepComponent, StepService };
333
+ export { StepComponent, StepService, WizardBuilder, WizardStepService };
234
334
  //# sourceMappingURL=windows-plus-utilities-modal-wizard.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"windows-plus-utilities-modal-wizard.mjs","sources":["../../../projects/windows-plus-utilities/modal-wizard/util/service/step.service.ts","../../../projects/windows-plus-utilities/modal-wizard/components/step/step.component.ts","../../../projects/windows-plus-utilities/modal-wizard/components/step/step.component.html","../../../projects/windows-plus-utilities/modal-wizard/public-api.ts","../../../projects/windows-plus-utilities/modal-wizard/windows-plus-utilities-modal-wizard.ts"],"sourcesContent":["import { Inject, Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { StepModel } from '../interface/modal-step.interface'\r\nimport { ActivatedRoute, Router } from '@angular/router'\r\n\r\nexport class StepService<T> {\r\n\t/**\r\n\t * @description the subject for the modal steps\r\n\t */\r\n steps$: BehaviorSubject<StepModel<T>[]>;\r\n\t/**\r\n\t * @description the subject for the current modal step\r\n\t */\r\n currentStep$: BehaviorSubject<StepModel<T>|null> = new BehaviorSubject<StepModel<T>|null>(null);\r\n\t/**\r\n\t * @description the subject for the step forward availability\r\n\t */\r\n\tstepForwardAvailability$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false)\r\n \t/**\r\n\t * @author Alex Hodson\r\n\t * @description class constructor specifying the required services and properties\r\n\t * @param steps the steps in the modal\r\n\t */\r\n constructor(\r\n\t\tprivate router: Router,\r\n\t\tprivate activatedRoute: ActivatedRoute,\r\n\t\t@Inject('steps') private steps: StepModel<T>[]\r\n\t) {\r\n\t\tthis.steps$ = new BehaviorSubject<StepModel<T>[]>(steps)\r\n this.currentStep$.next(this.steps$.value[0]);\r\n }\r\n\t/**\r\n\t * @author Alex Hodson\r\n\t * @description adjusts the step indexes to be sequential based on their position in the steps array\r\n\t */\r\n\tadjustStepIndexes(): void {\r\n\t\tconst currentSteps = [...this.steps]\r\n\t\tcurrentSteps.forEach((element, index) => element.stepIndex = index + 1)\r\n\t\tthis.steps$.next(currentSteps)\r\n\t}\r\n\t/**\r\n\t * @author Alex Hodson\r\n\t * @description inserts a new step at a specific index, specified by the step index property\r\n\t * @param step the step to be inserted\r\n\t */\r\n\tinsertStep(step: StepModel<T>): void {\r\n\t\tconst { stepIndex } = step\r\n\t\tconst currentSteps = [...this.steps]\r\n\t\tcurrentSteps.forEach(element => element.stepIndex = (stepIndex <= element.stepIndex ? element.stepIndex + 1 : element.stepIndex))\r\n\t\tcurrentSteps.splice(stepIndex - 1, 0, step)\r\n\t\tthis.steps$.next(currentSteps)\r\n\t}\r\n\t/**\r\n\t * @author Alex Hodson\r\n\t * @description sets the current modal step\r\n\t * @param step the step to be set\r\n\t */\r\n setCurrentStep(step: StepModel<T>): void {\r\n this.currentStep$.next(step);\r\n }\r\n\t/**\r\n\t * @author Alex Hodson\r\n\t * @description returns the current modal step observable\r\n\t * @returns the current modal step observable\r\n\t */\r\n getCurrentStepObservable(): Observable<StepModel<T>|null> {\r\n return this.currentStep$.asObservable();\r\n }\r\n\t/**\r\n\t * @author Alex Hodson\r\n\t * @description returns the current modal step observable\r\n\t * @returns the current modal step observable\r\n\t */\r\n getCurrentStep(): StepModel<T>|null {\r\n return this.currentStep$.getValue();\r\n }\r\n\t/**\r\n\t * @author Alex Hodson\r\n\t * @description retrieves the current steps\r\n\t * @returns the current steps\r\n\t */\r\n\tgetSteps(): StepModel<T>[] {\r\n\t\treturn this.steps$.getValue()\r\n\t}\r\n\t/**\r\n\t * @author Alex Hodson\r\n\t * @description returns the modal step observable\r\n\t * @returns the modal step observable\r\n\t */\r\n getStepsObservable(): Observable<StepModel<T>[]> {\r\n return this.steps$.asObservable();\r\n }\r\n\t/**\r\n\t * @author Alex Hodson\r\n\t * @description sets the step forward availability\r\n\t * @param available whether a step forward is available\r\n\t */\r\n\tsetStepForwardAvailability(available: boolean): void {\r\n\t\tthis.stepForwardAvailability$.next(available)\r\n\t}\r\n\t/**\r\n\t * @author Alex Hodson\r\n\t * @description returns the step forward availability observable\r\n\t * @returns the step forward availability observable\r\n\t */\r\n\tgetStepForwardAvailability(): Observable<boolean> {\r\n\t\treturn this.stepForwardAvailability$.asObservable()\r\n\t}\r\n\t/**\r\n\t * @author Alex Hodson\r\n\t * @description moves to the next modal step\r\n\t */\r\n moveToNextStep(): void {\r\n const index = this.currentStep$.value!.stepIndex;\r\n\r\n if (index < this.steps$.value.length) {\r\n\t\t\tconst nextStep = this.steps$.value[index]\r\n\t\t\tconst currentStep = this.steps$.value[index - 1]\r\n this.currentStep$.next({\r\n\t\t\t\t...nextStep,\r\n\t\t\t\t'stepCallbackName': currentStep.stepCallbackName,\r\n\t\t\t\t'triggerCallback': !!currentStep.stepCallbackName\r\n\t\t\t});\r\n }\r\n }\r\n\t/**\r\n\t * @author Alex Hodson\r\n\t * @description moves to the previous modal step\r\n\t */\r\n\tmoveToPreviousStep(): void {\r\n\t\tconst index = this.currentStep$.value!.stepIndex\r\n\t\tconst previous = this.steps$.value.find(element => element.stepIndex === index - 1)\r\n\r\n\t\tif (!previous) return\r\n\r\n\t\tthis.currentStep$.next({\r\n\t\t\t...previous,\r\n\t\t\t'triggerCallback': false\r\n\t\t});\r\n\t}\r\n\t/**\r\n\t * @author Alex Hodson\r\n\t * @description determines whether the current step is the last\r\n\t * @returns whether the step is the last one\r\n\t */\r\n isLastStep(): boolean {\r\n return this.currentStep$.value!.stepIndex === this.steps$.value.length;\r\n }\r\n\r\n\t/**\r\n\t * @author Alex Hodson\r\n\t * @description triggers any potential \"after-step\" functionality for the current step and changes the current route with any required parameters\r\n\t * @param getParameterValue the callback which retrieves the value for a step parameter\r\n\t * @param triggerStepCallback the callback which triggers the specific functionality for the specified step index\r\n\t */\r\n\tasync handleStepChange(getParameterValue?: (...args: any) => any, triggerStepCallback?: (...args: any) => Promise<boolean>, revert: boolean = false): Promise<void|null> {\r\n\t\tconst currentStep = this.currentStep$.value\r\n\t\t\t\r\n\t\tif (!currentStep) return\r\n\r\n\t\tconst { stepIndex, triggerCallback } = currentStep\r\n\r\n\t\tif (triggerCallback && triggerStepCallback) {\r\n\t\t\tconst results = await triggerStepCallback(stepIndex)\r\n\r\n\t\t\tif (!results && revert) return this.moveToPreviousStep()\r\n\t\t} \r\n\r\n\t\tthis.handleNavigation(getParameterValue, currentStep)\r\n\t}\r\n\t/**\r\n\t * @author Alex Hodson\r\n\t * @description handles the modification of the system route which will navigate to the specified step. If no step is provided, then the stored current step is used\r\n\t * @param getParameterValue the callback which retrieves the value for a step parameter\r\n\t * @param step an optional step which will be used to navigate to\r\n\t */\r\n\thandleNavigation(getParameterValue?: (...args: any) => any, step?: StepModel<T>): void {\r\n\t\tconst currentStep = step || this.currentStep$.value\r\n\t\t\t\r\n\t\tif (!currentStep) return\r\n\r\n\t\tconst { slug, parameters } = currentStep\r\n\r\n\t\tlet route = `step-${slug}`\r\n\t\tif (getParameterValue) parameters.forEach((element) => route += `/${getParameterValue(element)}`)\r\n\t\tthis.router.navigate([route], { relativeTo: this.activatedRoute })\r\n\t} \r\n\t/**\r\n\t * @author Alex Hodson\r\n\t * @description clears any route paths and/or parameters created during the step functionality, reverting the url back to the original state when the step paths were appended\r\n\t */\r\n\tclearStepRoute(): void {\r\n\t\tconst url = this.router.url\r\n\t\tconst [initial] = url.split('/step-')\r\n\t\tthis.router.navigate([initial])\r\n\t}\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Observable } from 'rxjs'\r\nimport { StepModel } from '../../util/interface/modal-step.interface'\r\nimport { StepService } from '../../util/service/step.service'\r\n\r\n@Component({\r\n selector: 'step',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './step.component.html',\r\n styleUrls: ['./step.component.sass']\r\n})\r\nexport class StepComponent {\r\n\t/**\r\n\t * @description an observable to the modal steps\r\n\t */\r\n steps: Observable<StepModel<any>[]>\r\n\t/**\r\n\t * @description an observable to the current step\r\n\t */\r\n currentStep: Observable<StepModel<any>|null>;\r\n\t/**\r\n\t * @author Alex Hodson\r\n\t * @description class constructor specifying the required services and properties\r\n\t * @param stepService the service class which contains access to the modal steps functionality\r\n\t */\r\n constructor(private stepService: StepService<any>) { }\r\n\t/**\r\n\t * @author Alex Hodson\r\n\t * @description the method to be run when the component is rendered\r\n\t */\r\n ngOnInit(): void {\r\n this.steps = this.stepService.getStepsObservable();\r\n this.currentStep = this.stepService.getCurrentStepObservable();\r\n }\r\n\t/**\r\n\t * @author Alex Hodson\r\n\t * @description handles the user clicking a step\r\n\t * @param step the step clicked\r\n\t */\r\n onStepClick(step: StepModel<any>) {\r\n this.stepService.setCurrentStep(step);\r\n }\r\n}\r\n","<div class=\"form-steps-container\">\r\n\t<ng-container *ngFor=\"let step of steps | async; let i = index;\">\r\n\t\t<div class=\"d-flex flex-column align-items-center\">\r\n\t\t\t<div \r\n\t\t\t\t(click)=\"onStepClick(step)\"\r\n\t\t\t\t[ngClass]=\"{ 'step-complete': step.isComplete, 'step-incomplete': !step.isComplete, 'step-current': (currentStep | async)?.stepIndex === step.stepIndex }\"\r\n\t\t\t\tclass=\"step-bubble cursor-pointer\"\r\n\t\t\t>{{ step.stepIndex }}</div>\r\n\t\t\t<div>\r\n\t\t\t\t<span class=\"text-grey\">{{step.title}}</span>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<div *ngIf=\"i < (steps | async)?.length - 1\" class=\"step-divider\"></div>\r\n\t</ng-container>\r\n</div>","/*\r\n * Public API Surface of windows-plus-utilities\r\n */\r\n\r\nexport * from './components/step/step.component';\r\n\r\nexport * from './util/interface/stepped-modal.interface'\r\nexport * from './util/interface/modal-step.interface'\r\nexport * from './util/service/step.service'","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.StepService"],"mappings":"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"}
1
+ {"version":3,"file":"windows-plus-utilities-modal-wizard.mjs","sources":["../../../projects/windows-plus-utilities/modal-wizard/util/service/step.service.ts","../../../projects/windows-plus-utilities/modal-wizard/components/step/step.component.ts","../../../projects/windows-plus-utilities/modal-wizard/components/step/step.component.html","../../../projects/windows-plus-utilities/modal-wizard/util/helper/wizard-builder.service.ts","../../../projects/windows-plus-utilities/modal-wizard/util/service/wizard-step.service.ts","../../../projects/windows-plus-utilities/modal-wizard/public-api.ts","../../../projects/windows-plus-utilities/modal-wizard/windows-plus-utilities-modal-wizard.ts"],"sourcesContent":["import { Inject, Injectable } from '@angular/core'\r\nimport { BehaviorSubject, Observable } from 'rxjs'\r\nimport { StepModel } from '../interface/modal-step.interface'\r\nimport { ActivatedRoute, Router } from '@angular/router'\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class StepService<T> {\r\n\t/**\r\n\t * @description the current index\r\n\t */\r\n\tprivate currentIndex = 0\r\n\t/**\r\n\t * @description the original step configuration\r\n\t */\r\n\toriginalSteps: StepModel<T>[]\r\n\t/**\r\n\t * @description the subject for the modal steps\r\n\t */\r\n\tsteps$: BehaviorSubject<StepModel<T>[]>\r\n\t/**\r\n\t * @description the subject for the current modal step\r\n\t */\r\n\tcurrentStep$: BehaviorSubject<StepModel<T> | null> = new BehaviorSubject<StepModel<T> | null>(null);\r\n\t/**\r\n\t * @description the subject for the step forward availability\r\n\t */\r\n\tstepForwardAvailability$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false)\r\n\t/**\r\n * @author Alex Hodson\r\n * @description class constructor specifying the required services and properties\r\n * @param steps the steps in the modal\r\n */\r\n\tconstructor(\r\n\t\tprivate router: Router,\r\n\t\tprivate activatedRoute: ActivatedRoute,\r\n\t\t@Inject('steps') private stepConfig: StepModel<T>[]\r\n\t) {\r\n\t\tthis.originalSteps = this.buildSteps(stepConfig)\r\n\t\tthis.steps$ = new BehaviorSubject(this.originalSteps)\r\n\t\tthis.currentStep$.next(this.originalSteps[0])\r\n\t}\r\n\tprivate buildSteps(config: Omit<StepModel<T>, 'stepIndex'>[]): StepModel<T>[] {\r\n\t\treturn config.map((step, index) => ({\r\n\t\t\t...step,\r\n\t\t\tstepIndex: index + 1\r\n\t\t}))\r\n\t}\r\n\t/**\r\n\t * @author Alex Hodson\r\n\t * @description adjusts the step indexes to be sequential based on their position in the steps array\r\n\t */\r\n\tadjustStepIndexes(): void {\r\n\t\tconst rebuilt = this.steps$.value.map((step, index) => ({\r\n\t\t\t...step,\r\n\t\t\tstepIndex: index + 1\r\n\t\t}))\r\n\r\n\t\tthis.steps$.next(rebuilt)\r\n\t}\r\n\t/**\r\n\t * @author Alex Hodson\r\n\t * @description inserts a new step at a specific index, specified by the step index property\r\n\t * @param step the step to be inserted\r\n\t */\r\n\tinsertStep(step: StepModel<T>): void {\r\n\t\tconst current = this.steps$.value\r\n\r\n\t\tconst updated = [\r\n\t\t\t...current.slice(0, step.stepIndex - 1),\r\n\t\t\tstep,\r\n\t\t\t...current.slice(step.stepIndex - 1)\r\n\t\t].map((s, index) => ({\r\n\t\t\t...s,\r\n\t\t\tstepIndex: index + 1\r\n\t\t}))\r\n\r\n\t\tthis.steps$.next(updated)\r\n\t}\r\n\t/**\r\n\t * @author Alex Hodson\r\n\t * @description sets the current modal step\r\n\t * @param step the step to be set\r\n\t */\r\n\tsetCurrentStep(step: StepModel<T>): void {\r\n\t\tthis.currentStep$.next(step)\r\n\t}\r\n\t/**\r\n\t * @author Alex Hodson\r\n\t * @description returns the current modal step observable\r\n\t * @returns the current modal step observable\r\n\t */\r\n\tgetCurrentStepObservable(): Observable<StepModel<T> | null> {\r\n\t\treturn this.currentStep$.asObservable()\r\n\t}\r\n\t/**\r\n\t * @author Alex Hodson\r\n\t * @description returns the current modal step observable\r\n\t * @returns the current modal step observable\r\n\t */\r\n\tgetCurrentStep(): StepModel<T> | null {\r\n\t\treturn this.currentStep$.getValue()\r\n\t}\r\n\t/**\r\n\t * @author Alex Hodson\r\n\t * @description retrieves the current steps\r\n\t * @returns the current steps\r\n\t */\r\n\tgetSteps(): StepModel<T>[] {\r\n\t\treturn this.steps$.getValue()\r\n\t}\r\n\t/**\r\n\t * @author Alex Hodson\r\n\t * @description returns the modal step observable\r\n\t * @returns the modal step observable\r\n\t */\r\n\tgetStepsObservable(): Observable<StepModel<T>[]> {\r\n\t\treturn this.steps$.asObservable()\r\n\t}\r\n\t/**\r\n\t * @author Alex Hodson\r\n\t * @description sets the step forward availability\r\n\t * @param available whether a step forward is available\r\n\t */\r\n\tsetStepForwardAvailability(available: boolean): void {\r\n\t\tthis.stepForwardAvailability$.next(available)\r\n\t}\r\n\t/**\r\n\t * @author Alex Hodson\r\n\t * @description returns the step forward availability observable\r\n\t * @returns the step forward availability observable\r\n\t */\r\n\tgetStepForwardAvailability(): Observable<boolean> {\r\n\t\treturn this.stepForwardAvailability$.asObservable()\r\n\t}\r\n\t/**\r\n\t * @author Alex Hodson\r\n\t * @description moves to the next modal step\r\n\t */\r\n\tmoveToNextStep(): void {\r\n\t\tif (this.currentIndex < this.steps$.value.length - 1) {\r\n\t\t\tthis.currentIndex++\r\n\t\t\tthis.currentStep$.next(this.steps$.value[this.currentIndex])\r\n\t\t}\r\n\t}\r\n\t/**\r\n\t * @author Alex Hodson\r\n\t * @description moves to the previous modal step\r\n\t */\r\n\tmoveToPreviousStep(): void {\r\n\t\tconst previous = this.steps$.getValue()[this.currentIndex - 1]\r\n\r\n\t\tif (!previous) return\r\n\r\n\t\tthis.currentStep$.next({\r\n\t\t\t...previous,\r\n\t\t\t'triggerCallback': false\r\n\t\t})\r\n\t}\r\n\t/**\r\n\t * @author Alex Hodson\r\n\t * @description determines whether the current step is the last\r\n\t * @returns whether the step is the last one\r\n\t */\r\n\tisLastStep(): boolean {\r\n\t\treturn this.currentIndex === this.steps$.value.length\r\n\t}\r\n\r\n\t/**\r\n\t * @author Alex Hodson\r\n\t * @description triggers any potential \"after-step\" functionality for the current step and changes the current route with any required parameters\r\n\t * @param getParameterValue the callback which retrieves the value for a step parameter\r\n\t * @param triggerStepCallback the callback which triggers the specific functionality for the specified step index\r\n\t */\r\n\tasync handleStepChange(getParameterValue?: (...args: any) => any, triggerStepCallback?: (...args: any) => Promise<boolean>, revert: boolean = false): Promise<void | null> {\r\n\t\tconst currentStep = this.currentStep$.value\r\n\r\n\t\tif (!currentStep) return\r\n\r\n\t\tconst { stepIndex, triggerCallback } = currentStep\r\n\r\n\t\tif (triggerCallback && triggerStepCallback) {\r\n\t\t\tconst results = await triggerStepCallback(stepIndex)\r\n\r\n\t\t\tif (!results && revert) return this.moveToPreviousStep()\r\n\t\t}\r\n\r\n\t\tthis.handleNavigation(getParameterValue, currentStep)\r\n\t}\r\n\t/**\r\n\t * @author Alex Hodson\r\n\t * @description handles the modification of the system route which will navigate to the specified step. If no step is provided, then the stored current step is used\r\n\t * @param getParameterValue the callback which retrieves the value for a step parameter\r\n\t * @param step an optional step which will be used to navigate to\r\n\t */\r\n\thandleNavigation(getParameterValue?: (...args: any) => any, step?: StepModel<T>): void {\r\n\t\tconst currentStep = step || this.currentStep$.value\r\n\r\n\t\tif (!currentStep) return\r\n\r\n\t\tconst { slug, parameters } = currentStep\r\n\r\n\t\tlet route = `step-${slug}`\r\n\t\tif (getParameterValue) parameters.forEach((element) => route += `/${getParameterValue(element)}`)\r\n\t\tthis.router.navigate([route], { relativeTo: this.activatedRoute })\r\n\t}\r\n\t/**\r\n\t * @author Alex Hodson\r\n\t * @description clears any route paths and/or parameters created during the step functionality, reverting the url back to the original state when the step paths were appended\r\n\t */\r\n\tclearStepRoute(): void {\r\n\t\tconst url = this.router.url\r\n\t\tconst [initial] = url.split('/step-')\r\n\t\tthis.router.navigate([initial])\r\n\t}\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Observable } from 'rxjs'\r\nimport { StepModel } from '../../util/interface/modal-step.interface'\r\nimport { StepService } from '../../util/service/step.service'\r\n\r\n@Component({\r\n selector: 'step',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './step.component.html',\r\n styleUrls: ['./step.component.sass']\r\n})\r\nexport class StepComponent {\r\n\t/**\r\n\t * @description an observable to the modal steps\r\n\t */\r\n steps: Observable<StepModel<any>[]>\r\n\t/**\r\n\t * @description an observable to the current step\r\n\t */\r\n currentStep: Observable<StepModel<any>|null>;\r\n\t/**\r\n\t * @author Alex Hodson\r\n\t * @description class constructor specifying the required services and properties\r\n\t * @param stepService the service class which contains access to the modal steps functionality\r\n\t */\r\n constructor(private stepService: StepService<any>) { }\r\n\t/**\r\n\t * @author Alex Hodson\r\n\t * @description the method to be run when the component is rendered\r\n\t */\r\n ngOnInit(): void {\r\n this.steps = this.stepService.getStepsObservable();\r\n this.currentStep = this.stepService.getCurrentStepObservable();\r\n }\r\n\t/**\r\n\t * @author Alex Hodson\r\n\t * @description handles the user clicking a step\r\n\t * @param step the step clicked\r\n\t */\r\n onStepClick(step: StepModel<any>) {\r\n this.stepService.setCurrentStep(step);\r\n }\r\n}\r\n","<div class=\"form-steps-container\">\r\n\t<ng-container *ngFor=\"let step of steps | async; let i = index;\">\r\n\t\t<div class=\"d-flex flex-column align-items-center\">\r\n\t\t\t<div \r\n\t\t\t\t(click)=\"onStepClick(step)\"\r\n\t\t\t\t[ngClass]=\"{ 'step-complete': step.isComplete, 'step-incomplete': !step.isComplete, 'step-current': (currentStep | async)?.stepIndex === step.stepIndex }\"\r\n\t\t\t\tclass=\"step-bubble cursor-pointer\"\r\n\t\t\t>{{ step.stepIndex }}</div>\r\n\t\t\t<div>\r\n\t\t\t\t<span class=\"text-grey\">{{step.title}}</span>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<div *ngIf=\"i < (steps | async)?.length - 1\" class=\"step-divider\"></div>\r\n\t</ng-container>\r\n</div>","import { StepModel } from '../interface/modal-step.interface'\r\n\r\nexport class WizardBuilder<T> {\r\n\tprivate steps: StepModel<T>[] = []\r\n\r\n\taddStep(step: StepModel<T>): WizardBuilder<T> {\r\n\t\tthis.steps.push(step)\r\n\r\n\t\treturn this\r\n\t}\r\n\r\n\tbuild(): StepModel<T>[] {\r\n\t\treturn [...this.steps] // Immutable copy\r\n\t}\r\n}","import { Injectable } from '@angular/core'\r\nimport { Router, ActivatedRoute } from '@angular/router'\r\nimport { BehaviorSubject, Observable, map } from 'rxjs'\r\nimport { StepDefinition } from '../interface/step-definition.interface'\r\nimport { WizardState } from '../interface/wizard-state.interface'\r\n\r\n@Injectable()\r\nexport class WizardStepService<T> {\r\n\r\n private state$ = new BehaviorSubject<WizardState<T> | null>(null)\r\n\r\n constructor(\r\n private router: Router,\r\n private activatedRoute: ActivatedRoute\r\n ) {}\r\n\r\n initialize(steps: StepDefinition<T>[]): void {\r\n this.state$.next({\r\n steps: [...steps],\r\n currentIndex: 0\r\n })\r\n\r\n this.navigate()\r\n }\r\n\r\n getCurrentStep(): StepDefinition<T> | null {\r\n return this.state$.value?.steps[this.state$.value.currentIndex] ?? null\r\n }\r\n\r\n getCurrentStep$(): Observable<StepDefinition<T> | null> {\r\n return this.state$.pipe(\r\n map(state =>\r\n state ? state.steps[state.currentIndex] : null\r\n )\r\n )\r\n }\r\n\r\n async next(context?: any): Promise<void> {\r\n const state = this.state$.value\r\n if (!state) return\r\n\r\n const current = state.steps[state.currentIndex]\r\n\r\n if (current.onEnter) {\r\n const allowed = await current.onEnter(context)\r\n if (!allowed) return\r\n }\r\n\r\n if (state.currentIndex < state.steps.length - 1) {\r\n this.state$.next({\r\n ...state,\r\n currentIndex: state.currentIndex + 1\r\n })\r\n\r\n this.navigate()\r\n }\r\n }\r\n\r\n previous(): void {\r\n const state = this.state$.value\r\n if (!state) return\r\n\r\n if (state.currentIndex > 0) {\r\n this.state$.next({\r\n ...state,\r\n currentIndex: state.currentIndex - 1\r\n })\r\n\r\n this.navigate()\r\n }\r\n }\r\n\r\n isLast(): boolean {\r\n const state = this.state$.value\r\n if (!state) return false\r\n return state.currentIndex === state.steps.length - 1\r\n }\r\n\r\n private navigate(): void {\r\n const step = this.getCurrentStep()\r\n if (!step) return\r\n\r\n this.router.navigate(\r\n [`step-${step.slug}`],\r\n { relativeTo: this.activatedRoute }\r\n )\r\n }\r\n}\r\n","/*\r\n * Public API Surface of windows-plus-utilities\r\n */\r\nexport * from './components/step/step.component';\r\n\r\nexport * from './util/helper/wizard-builder.service'\r\n\r\nexport * from './util/interface/modal-step.interface'\r\nexport * from './util/interface/step-definition.interface'\r\nexport * from './util/interface/stepped-modal.interface'\r\nexport * from './util/interface/wizard-state.interface'\r\n\r\nexport * from './util/service/wizard-step.service'\r\nexport * from './util/service/step.service'","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.StepService"],"mappings":";;;;;;;MAQa,WAAW,CAAA;AAqBvB;;;;AAIE;AACF,IAAA,WAAA,CACS,MAAc,EACd,cAA8B,EACb,UAA0B,EAAA;QAF3C,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QACd,IAAc,CAAA,cAAA,GAAd,cAAc,CAAgB;QACb,IAAU,CAAA,UAAA,GAAV,UAAU,CAAgB;AA5BpD;;AAEG;QACK,IAAY,CAAA,YAAA,GAAG,CAAC,CAAA;AASxB;;AAEG;AACH,QAAA,IAAA,CAAA,YAAY,GAAyC,IAAI,eAAe,CAAsB,IAAI,CAAC,CAAC;AACpG;;AAEG;AACH,QAAA,IAAA,CAAA,wBAAwB,GAA6B,IAAI,eAAe,CAAU,KAAK,CAAC,CAAA;QAWvF,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;QAChD,IAAI,CAAC,MAAM,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;AACrD,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAA;KAC7C;AACO,IAAA,UAAU,CAAC,MAAyC,EAAA;QAC3D,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,MAAM;AACnC,YAAA,GAAG,IAAI;YACP,SAAS,EAAE,KAAK,GAAG,CAAC;AACpB,SAAA,CAAC,CAAC,CAAA;KACH;AACD;;;AAGG;IACH,iBAAiB,GAAA;AAChB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,MAAM;AACvD,YAAA,GAAG,IAAI;YACP,SAAS,EAAE,KAAK,GAAG,CAAC;AACpB,SAAA,CAAC,CAAC,CAAA;AAEH,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;KACzB;AACD;;;;AAIG;AACH,IAAA,UAAU,CAAC,IAAkB,EAAA;AAC5B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAA;AAEjC,QAAA,MAAM,OAAO,GAAG;YACf,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;YACvC,IAAI;YACJ,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;SACpC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM;AACpB,YAAA,GAAG,CAAC;YACJ,SAAS,EAAE,KAAK,GAAG,CAAC;AACpB,SAAA,CAAC,CAAC,CAAA;AAEH,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;KACzB;AACD;;;;AAIG;AACH,IAAA,cAAc,CAAC,IAAkB,EAAA;AAChC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;KAC5B;AACD;;;;AAIG;IACH,wBAAwB,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAA;KACvC;AACD;;;;AAIG;IACH,cAAc,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAA;KACnC;AACD;;;;AAIG;IACH,QAAQ,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAA;KAC7B;AACD;;;;AAIG;IACH,kBAAkB,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAA;KACjC;AACD;;;;AAIG;AACH,IAAA,0BAA0B,CAAC,SAAkB,EAAA;AAC5C,QAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;KAC7C;AACD;;;;AAIG;IACH,0BAA0B,GAAA;AACzB,QAAA,OAAO,IAAI,CAAC,wBAAwB,CAAC,YAAY,EAAE,CAAA;KACnD;AACD;;;AAGG;IACH,cAAc,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YACrD,IAAI,CAAC,YAAY,EAAE,CAAA;AACnB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAA;SAC5D;KACD;AACD;;;AAGG;IACH,kBAAkB,GAAA;AACjB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAA;AAE9D,QAAA,IAAI,CAAC,QAAQ;YAAE,OAAM;AAErB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACtB,YAAA,GAAG,QAAQ;AACX,YAAA,iBAAiB,EAAE,KAAK;AACxB,SAAA,CAAC,CAAA;KACF;AACD;;;;AAIG;IACH,UAAU,GAAA;QACT,OAAO,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAA;KACrD;AAED;;;;;AAKG;IACH,MAAM,gBAAgB,CAAC,iBAAyC,EAAE,mBAAwD,EAAE,SAAkB,KAAK,EAAA;AAClJ,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAA;AAE3C,QAAA,IAAI,CAAC,WAAW;YAAE,OAAM;AAExB,QAAA,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,WAAW,CAAA;AAElD,QAAA,IAAI,eAAe,IAAI,mBAAmB,EAAE;AAC3C,YAAA,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,SAAS,CAAC,CAAA;YAEpD,IAAI,CAAC,OAAO,IAAI,MAAM;AAAE,gBAAA,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAA;SACxD;AAED,QAAA,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAA;KACrD;AACD;;;;;AAKG;IACH,gBAAgB,CAAC,iBAAyC,EAAE,IAAmB,EAAA;QAC9E,MAAM,WAAW,GAAG,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAA;AAEnD,QAAA,IAAI,CAAC,WAAW;YAAE,OAAM;AAExB,QAAA,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,WAAW,CAAA;AAExC,QAAA,IAAI,KAAK,GAAG,CAAQ,KAAA,EAAA,IAAI,EAAE,CAAA;AAC1B,QAAA,IAAI,iBAAiB;AAAE,YAAA,UAAU,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK,KAAK,IAAI,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAA,CAAE,CAAC,CAAA;AACjG,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAA;KAClE;AACD;;;AAGG;IACH,cAAc,GAAA;AACb,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAA;QAC3B,MAAM,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QACrC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAA;KAC/B;AA/MW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,sEA6Bd,OAAO,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AA7BJ,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cAFX,MAAM,EAAA,CAAA,CAAA,EAAA;;2FAEN,WAAW,EAAA,UAAA,EAAA,CAAA;kBAHvB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACX,oBAAA,UAAU,EAAE,MAAM;AAClB,iBAAA,CAAA;;0BA8BE,MAAM;2BAAC,OAAO,CAAA;;;MCxBJ,aAAa,CAAA;AASzB;;;;AAIG;AACF,IAAA,WAAA,CAAoB,WAA6B,EAAA;QAA7B,IAAW,CAAA,WAAA,GAAX,WAAW,CAAkB;KAAK;AACvD;;;AAGG;IACF,QAAQ,GAAA;QACN,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,kBAAkB,EAAE,CAAC;QACnD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,wBAAwB,EAAE,CAAC;KAChE;AACF;;;;AAIG;AACF,IAAA,WAAW,CAAC,IAAoB,EAAA;AAC9B,QAAA,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;KACvC;8GA9BU,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECb1B,4rBAcM,EAAA,MAAA,EAAA,CAAA,8kBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDLM,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAIX,aAAa,EAAA,UAAA,EAAA,CAAA;kBAPzB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,MAAM,EACJ,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,CAAC,EAAA,QAAA,EAAA,4rBAAA,EAAA,MAAA,EAAA,CAAA,8kBAAA,CAAA,EAAA,CAAA;;;MEPZ,aAAa,CAAA;AAA1B,IAAA,WAAA,GAAA;QACS,IAAK,CAAA,KAAA,GAAmB,EAAE,CAAA;KAWlC;AATA,IAAA,OAAO,CAAC,IAAkB,EAAA;AACzB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAErB,QAAA,OAAO,IAAI,CAAA;KACX;IAED,KAAK,GAAA;QACJ,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAA;KACtB;AACD;;MCPY,iBAAiB,CAAA;IAI5B,WACU,CAAA,MAAc,EACd,cAA8B,EAAA;QAD9B,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QACd,IAAc,CAAA,cAAA,GAAd,cAAc,CAAgB;AAJhC,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,eAAe,CAAwB,IAAI,CAAC,CAAA;KAK7D;AAEJ,IAAA,UAAU,CAAC,KAA0B,EAAA;AACnC,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AACf,YAAA,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC;AACjB,YAAA,YAAY,EAAE,CAAC;AAChB,SAAA,CAAC,CAAA;QAEF,IAAI,CAAC,QAAQ,EAAE,CAAA;KAChB;IAED,cAAc,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,IAAI,CAAA;KACxE;IAED,eAAe,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CACrB,GAAG,CAAC,KAAK,IACP,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,IAAI,CAC/C,CACF,CAAA;KACF;IAED,MAAM,IAAI,CAAC,OAAa,EAAA;AACtB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAA;AAC/B,QAAA,IAAI,CAAC,KAAK;YAAE,OAAM;QAElB,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;AAE/C,QAAA,IAAI,OAAO,CAAC,OAAO,EAAE;YACnB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;AAC9C,YAAA,IAAI,CAAC,OAAO;gBAAE,OAAM;SACrB;AAED,QAAA,IAAI,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/C,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AACf,gBAAA,GAAG,KAAK;AACR,gBAAA,YAAY,EAAE,KAAK,CAAC,YAAY,GAAG,CAAC;AACrC,aAAA,CAAC,CAAA;YAEF,IAAI,CAAC,QAAQ,EAAE,CAAA;SAChB;KACF;IAED,QAAQ,GAAA;AACN,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAA;AAC/B,QAAA,IAAI,CAAC,KAAK;YAAE,OAAM;AAElB,QAAA,IAAI,KAAK,CAAC,YAAY,GAAG,CAAC,EAAE;AAC1B,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AACf,gBAAA,GAAG,KAAK;AACR,gBAAA,YAAY,EAAE,KAAK,CAAC,YAAY,GAAG,CAAC;AACrC,aAAA,CAAC,CAAA;YAEF,IAAI,CAAC,QAAQ,EAAE,CAAA;SAChB;KACF;IAED,MAAM,GAAA;AACJ,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAA;AAC/B,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,KAAK,CAAA;QACxB,OAAO,KAAK,CAAC,YAAY,KAAK,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAA;KACrD;IAEO,QAAQ,GAAA;AACd,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,CAAA;AAClC,QAAA,IAAI,CAAC,IAAI;YAAE,OAAM;QAEjB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAClB,CAAC,CAAA,KAAA,EAAQ,IAAI,CAAC,IAAI,EAAE,CAAC,EACrB,EAAE,UAAU,EAAE,IAAI,CAAC,cAAc,EAAE,CACpC,CAAA;KACF;8GA/EU,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;kHAAjB,iBAAiB,EAAA,CAAA,CAAA,EAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B,UAAU;;;ACNX;;AAEG;;ACFH;;AAEG;;;;"}
@@ -1,4 +1,8 @@
1
1
  export * from './components/step/step.component';
2
- export * from './util/interface/stepped-modal.interface';
2
+ export * from './util/helper/wizard-builder.service';
3
3
  export * from './util/interface/modal-step.interface';
4
+ export * from './util/interface/step-definition.interface';
5
+ export * from './util/interface/stepped-modal.interface';
6
+ export * from './util/interface/wizard-state.interface';
7
+ export * from './util/service/wizard-step.service';
4
8
  export * from './util/service/step.service';
@@ -0,0 +1,6 @@
1
+ import { StepModel } from '../interface/modal-step.interface';
2
+ export declare class WizardBuilder<T> {
3
+ private steps;
4
+ addStep(step: StepModel<T>): WizardBuilder<T>;
5
+ build(): StepModel<T>[];
6
+ }
@@ -0,0 +1,7 @@
1
+ export interface StepDefinition<T> {
2
+ id: string;
3
+ title: string;
4
+ slug: string;
5
+ parameters?: T[];
6
+ onEnter?: (context?: any) => Promise<boolean> | boolean;
7
+ }
@@ -0,0 +1,5 @@
1
+ import { StepDefinition } from './step-definition.interface';
2
+ export interface WizardState<T> {
3
+ steps: StepDefinition<T>[];
4
+ currentIndex: number;
5
+ }
@@ -1,10 +1,19 @@
1
1
  import { BehaviorSubject, Observable } from 'rxjs';
2
2
  import { StepModel } from '../interface/modal-step.interface';
3
3
  import { ActivatedRoute, Router } from '@angular/router';
4
+ import * as i0 from "@angular/core";
4
5
  export declare class StepService<T> {
5
6
  private router;
6
7
  private activatedRoute;
7
- private steps;
8
+ private stepConfig;
9
+ /**
10
+ * @description the current index
11
+ */
12
+ private currentIndex;
13
+ /**
14
+ * @description the original step configuration
15
+ */
16
+ originalSteps: StepModel<T>[];
8
17
  /**
9
18
  * @description the subject for the modal steps
10
19
  */
@@ -18,11 +27,12 @@ export declare class StepService<T> {
18
27
  */
19
28
  stepForwardAvailability$: BehaviorSubject<boolean>;
20
29
  /**
21
- * @author Alex Hodson
22
- * @description class constructor specifying the required services and properties
23
- * @param steps the steps in the modal
24
- */
25
- constructor(router: Router, activatedRoute: ActivatedRoute, steps: StepModel<T>[]);
30
+ * @author Alex Hodson
31
+ * @description class constructor specifying the required services and properties
32
+ * @param steps the steps in the modal
33
+ */
34
+ constructor(router: Router, activatedRoute: ActivatedRoute, stepConfig: StepModel<T>[]);
35
+ private buildSteps;
26
36
  /**
27
37
  * @author Alex Hodson
28
38
  * @description adjusts the step indexes to be sequential based on their position in the steps array
@@ -111,4 +121,6 @@ export declare class StepService<T> {
111
121
  * @description clears any route paths and/or parameters created during the step functionality, reverting the url back to the original state when the step paths were appended
112
122
  */
113
123
  clearStepRoute(): void;
124
+ static ɵfac: i0.ɵɵFactoryDeclaration<StepService<any>, never>;
125
+ static ɵprov: i0.ɵɵInjectableDeclaration<StepService<any>>;
114
126
  }
@@ -0,0 +1,19 @@
1
+ import { Router, ActivatedRoute } from '@angular/router';
2
+ import { Observable } from 'rxjs';
3
+ import { StepDefinition } from '../interface/step-definition.interface';
4
+ import * as i0 from "@angular/core";
5
+ export declare class WizardStepService<T> {
6
+ private router;
7
+ private activatedRoute;
8
+ private state$;
9
+ constructor(router: Router, activatedRoute: ActivatedRoute);
10
+ initialize(steps: StepDefinition<T>[]): void;
11
+ getCurrentStep(): StepDefinition<T> | null;
12
+ getCurrentStep$(): Observable<StepDefinition<T> | null>;
13
+ next(context?: any): Promise<void>;
14
+ previous(): void;
15
+ isLast(): boolean;
16
+ private navigate;
17
+ static ɵfac: i0.ɵɵFactoryDeclaration<WizardStepService<any>, never>;
18
+ static ɵprov: i0.ɵɵInjectableDeclaration<WizardStepService<any>>;
19
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "windows-plus-utilities",
3
- "version": "0.0.81",
3
+ "version": "0.0.83",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^17.3.8",
6
6
  "@angular/core": "^17.3.8",
@@ -43,18 +43,18 @@
43
43
  "esm": "./esm2022/empty-display/windows-plus-utilities-empty-display.mjs",
44
44
  "default": "./fesm2022/windows-plus-utilities-empty-display.mjs"
45
45
  },
46
- "./job-label": {
47
- "types": "./job-label/index.d.ts",
48
- "esm2022": "./esm2022/job-label/windows-plus-utilities-job-label.mjs",
49
- "esm": "./esm2022/job-label/windows-plus-utilities-job-label.mjs",
50
- "default": "./fesm2022/windows-plus-utilities-job-label.mjs"
51
- },
52
46
  "./main-menu": {
53
47
  "types": "./main-menu/index.d.ts",
54
48
  "esm2022": "./esm2022/main-menu/windows-plus-utilities-main-menu.mjs",
55
49
  "esm": "./esm2022/main-menu/windows-plus-utilities-main-menu.mjs",
56
50
  "default": "./fesm2022/windows-plus-utilities-main-menu.mjs"
57
51
  },
52
+ "./job-label": {
53
+ "types": "./job-label/index.d.ts",
54
+ "esm2022": "./esm2022/job-label/windows-plus-utilities-job-label.mjs",
55
+ "esm": "./esm2022/job-label/windows-plus-utilities-job-label.mjs",
56
+ "default": "./fesm2022/windows-plus-utilities-job-label.mjs"
57
+ },
58
58
  "./modal-wizard": {
59
59
  "types": "./modal-wizard/index.d.ts",
60
60
  "esm2022": "./esm2022/modal-wizard/windows-plus-utilities-modal-wizard.mjs",