windows-plus-utilities 0.0.89 → 0.0.90

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.
@@ -34,8 +34,9 @@ export class WizardStepService {
34
34
  * @param factory The step factory defining the wizard flow.
35
35
  * @param initialContext Initial shared context object.
36
36
  */
37
- initialize(factory, initialContext) {
37
+ initialize(factory, initialContext, onComplete) {
38
38
  this.factory = factory;
39
+ this.completionHandler = onComplete;
39
40
  const steps = factory.build(initialContext);
40
41
  this.state$.next({
41
42
  steps,
@@ -87,6 +88,7 @@ export class WizardStepService {
87
88
  * - navigation
88
89
  *
89
90
  * @param partialContext Optional context updates.
91
+ * @param completionProcedure Optional procedure to run when the wizard is completed.
90
92
  */
91
93
  async next(partialContext) {
92
94
  const state = this.state$.value;
@@ -97,18 +99,26 @@ export class WizardStepService {
97
99
  ...state.context,
98
100
  ...partialContext
99
101
  };
102
+ // Run exit guard
100
103
  if (current.onExit) {
101
104
  const allowed = await current.onExit(updatedContext);
102
105
  if (!allowed)
103
106
  return;
104
107
  }
105
- const newSteps = this.factory.build(updatedContext);
108
+ // 🔥 Re-resolve steps AFTER context update
109
+ const resolved = this.factory.build(updatedContext);
106
110
  const currentSlug = current.slug;
107
- const newIndex = newSteps.findIndex(s => s.slug === currentSlug);
108
- const nextIndex = Math.min(newIndex + 1, newSteps.length - 1);
111
+ const newIndex = resolved.findIndex(s => s.slug === currentSlug);
112
+ const isLastAfterResolution = newIndex === resolved.length - 1;
113
+ // If last after re-evaluation → complete
114
+ if (isLastAfterResolution) {
115
+ await this.completionHandler?.(updatedContext);
116
+ return;
117
+ }
118
+ // Otherwise move forward
109
119
  this.state$.next({
110
- steps: newSteps,
111
- currentIndex: nextIndex,
120
+ steps: resolved,
121
+ currentIndex: newIndex + 1,
112
122
  context: updatedContext
113
123
  });
114
124
  this.navigate();
@@ -164,4 +174,4 @@ export class WizardStepService {
164
174
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: WizardStepService, decorators: [{
165
175
  type: Injectable
166
176
  }], ctorParameters: () => [{ type: i1.Router }, { type: i1.ActivatedRoute }] });
167
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l6YXJkLXN0ZXAuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dpbmRvd3MtcGx1cy11dGlsaXRpZXMvbW9kYWwtd2l6YXJkL3V0aWwvc2VydmljZS93aXphcmQtc3RlcC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFMUMsT0FBTyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQTtBQUNsRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7OztBQUtwQzs7Ozs7Ozs7Ozs7R0FXRztBQUVILE1BQU0sT0FBTyxpQkFBaUI7SUFrQjVCLFlBQ21CLE1BQWMsRUFDZCxjQUE4QjtRQUQ5QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBbEJqRDs7V0FFRztRQUNjLFdBQU0sR0FBRyxJQUFJLGVBQWUsQ0FBd0IsSUFBSSxDQUFDLENBQUE7UUFFMUU7O1dBRUc7UUFDYyw2QkFBd0IsR0FDdkMsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUE7SUFVakMsQ0FBQztJQUVMOzs7OztPQUtHO0lBQ0gsVUFBVSxDQUFDLE9BQTZCLEVBQUUsY0FBaUI7UUFDekQsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUE7UUFFdEIsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQTtRQUUzQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNmLEtBQUs7WUFDTCxZQUFZLEVBQUUsQ0FBQztZQUNmLE9BQU8sRUFBRSxjQUFjO1NBQ3hCLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQTtJQUNqQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxjQUFjO1FBQ1osTUFBTSxLQUFLLEdBQUcs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QUNmLEdBQUcsS0FBSztZQUNSLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWSxHQUFHLENBQUM7U0FDckMsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFBO0lBQ2pCLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU07UUFDSixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQTtRQUMvQixJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sS0FBSyxDQUFBO1FBQ3hCLE9BQU8sS0FBSyxDQUFDLFlBQVksS0FBSyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUE7SUFDdEQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsMEJBQTBCLENBQUMsU0FBa0I7UUFDM0MsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUMvQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCwwQkFBMEI7UUFDeEIsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsWUFBWSxFQUFFLENBQUE7SUFDckQsQ0FBQztJQUVEOztPQUVHO0lBQ0ssUUFBUTtRQUNkLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQTtRQUNsQyxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU07UUFFakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQ2xCLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFDckIsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUNwQyxDQUFBO0lBQ0gsQ0FBQzs4R0ExTFUsaUJBQWlCO2tIQUFqQixpQkFBaUI7OzJGQUFqQixpQkFBaUI7a0JBRDdCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcidcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcydcclxuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXHJcbmltcG9ydCB7IFdpemFyZFN0YXRlIH0gZnJvbSAnLi4vaW50ZXJmYWNlL3dpemFyZC1zdGF0ZS5pbnRlcmZhY2UnXHJcbmltcG9ydCB7IFdpemFyZFN0ZXBGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yeS93aXphcmQtc3RlcC1mYWN0b3J5J1xyXG5pbXBvcnQgeyBTdGVwRGVmaW5pdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZS9zdGVwLWRlZmluaXRpb24uaW50ZXJmYWNlJ1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyaWMgcmV1c2FibGUgd2l6YXJkIHN0ZXAgY29udHJvbGxlci5cclxuICpcclxuICogSGFuZGxlczpcclxuICogLSBOYXZpZ2F0aW9uXHJcbiAqIC0gQ29uZGl0aW9uYWwgc3RlcCByZXNvbHV0aW9uXHJcbiAqIC0gRHluYW1pYyBzdGVwIGluc2VydGlvbi9yZW1vdmFsXHJcbiAqIC0gQ29udGV4dCBwZXJzaXN0ZW5jZVxyXG4gKiAtIFJvdXRlciBzeW5jaHJvbml6YXRpb25cclxuICpcclxuICogQHRlbXBsYXRlIFQgVGhlIHNoYXJlZCB3aXphcmQgY29udGV4dCB0eXBlLlxyXG4gKi9cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgV2l6YXJkU3RlcFNlcnZpY2U8VD4ge1xyXG5cclxuICAvKipcclxuICAgKiBJbnRlcm5hbCB3aXphcmQgc3RhdGUgY29udGFpbmVyLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxXaXphcmRTdGF0ZTxUPiB8IG51bGw+KG51bGwpXHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnRyb2xzIHdoZXRoZXIgZm9yd2FyZCBuYXZpZ2F0aW9uIGlzIGFsbG93ZWQuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZWFkb25seSBzdGVwRm9yd2FyZEF2YWlsYWJpbGl0eSQgPVxyXG4gICAgbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSlcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIHN0ZXAgZmFjdG9yeSB1c2VkIHRvIHJlc29sdmUgYWN0aXZlIHN0ZXBzLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgZmFjdG9yeT86IFdpemFyZFN0ZXBGYWN0b3J5PFQ+XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlXHJcbiAgKSB7IH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5pdGlhbGl6ZXMgdGhlIHdpemFyZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBmYWN0b3J5IFRoZSBzdGVwIGZhY3RvcnkgZGVmaW5pbmcgdGhlIHdpemFyZCBmbG93LlxyXG4gICAqIEBwYXJhbSBpbml0aWFsQ29udGV4dCBJbml0aWFsIHNoYXJlZCBjb250ZXh0IG9iamVjdC5cclxuICAgKi9cclxuICBpbml0aWFsaXplKGZhY3Rvcnk6IFdpemFyZFN0ZXBGYWN0b3J5PFQ+LCBpbml0aWFsQ29udGV4dDogVCk6IHZvaWQge1xyXG4gICAgdGhpcy5mYWN0b3J5ID0gZmFjdG9yeVxyXG5cclxuICAgIGNvbnN0IHN0ZXBzID0gZmFjdG9yeS5idWlsZChpbml0aWFsQ29udGV4dClcclxuXHJcbiAgICB0aGlzLnN0YXRlJC5uZXh0KHtcclxuICAgICAgc3RlcHMsXHJcbiAgICAgIGN1cnJlbnRJbmRleDogMCxcclxuICAgICAgY29udGV4dDogaW5pdGlhbENvbnRleHRcclxuICAgIH0pXHJcblxyXG4gICAgdGhpcy5uYXZpZ2F0ZSgpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHN0ZXAgc3luY2hyb25vdXNseS5cclxuICAgKi9cclxuICBnZXRDdXJyZW50U3RlcCgpOiBTdGVwRGVmaW5pdGlvbjxUPiB8IG51bGwge1xyXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLnN0YXRlJC52YWx1ZVxyXG4gICAgaWYgKCFzdGF0ZSkgcmV0dXJuIG51bGxcclxuICAgIHJldHVybiBzdGF0ZS5zdGVwc1tzdGF0ZS5jdXJyZW50SW5kZXhdID8/IG51bGxcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9ic2VydmFibGUgc3RyZWFtIG9mIGN1cnJlbnQgc3RlcC5cclxuICAgKi9cclxuICBnZXRDdXJyZW50U3RlcCQoKTogT2JzZXJ2YWJsZTxTdGVwRGVmaW5pdGlvbjxUPiB8IG51bGw+IHtcclxuICAgIHJldHVybiB0aGlzLnN0YXRlJC5waXBlKFxyXG4gICAgICBtYXAoc3RhdGUgPT5cclxuICAgICAgICBzdGF0ZSA/IHN0YXRlLnN0ZXBzW3N0YXRlLmN1cnJlbnRJbmRleF0gOiBudWxsXHJcbiAgICAgIClcclxuICAgIClcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9ic2VydmFibGUgc3RyZWFtIG9mIGFsbCBhY3RpdmUgc3RlcHMuXHJcbiAgICovXHJcbiAgZ2V0U3RlcHMkKCk6IE9ic2VydmFibGU8U3RlcERlZmluaXRpb248VD5bXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RhdGUkLnBpcGUoXHJcbiAgICAgIG1hcChzdGF0ZSA9PiBzdGF0ZT8uc3RlcHMgPz8gW10pXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPYnNlcnZhYmxlIHN0cmVhbSBvZiB0aGUgY3VycmVudCBpbmRleC5cclxuICAgKi9cclxuICBnZXRDdXJyZW50SW5kZXgkKCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0ZSQucGlwZShcclxuICAgICAgbWFwKHN0YXRlID0+IHN0YXRlPy5jdXJyZW50SW5kZXggPz8gMClcclxuICAgIClcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHNoYXJlZCB3aXphcmQgY29udGV4dC5cclxuICAgKi9cclxuICBnZXRDb250ZXh0KCk6IFQgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLnN0YXRlJC52YWx1ZT8uY29udGV4dCA/PyBudWxsXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZHZhbmNlcyB0byB0aGUgbmV4dCBzdGVwLlxyXG4gICAqXHJcbiAgICogRXhlY3V0ZXM6XHJcbiAgICogLSBvbkV4aXQgZ3VhcmRcclxuICAgKiAtIGNvbnRleHQgbWVyZ2VcclxuICAgKiAtIHN0ZXAgcmVjb21wb3NpdGlvblxyXG4gICAqIC0gbmF2aWdhdGlvblxyXG4gICAqXHJcbiAgICogQHBhcmFtIHBhcnRpYWxDb250ZXh0IE9wdGlvbmFsIGNvbnRleHQgdXBkYXRlcy5cclxuICAgKi9cclxuICBhc3luYyBuZXh0KHBhcnRpYWxDb250ZXh0PzogUGFydGlhbDxUPik6IFByb21pc2U8dm9pZD4ge1xyXG5cclxuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5zdGF0ZSQudmFsdWVcclxuICAgIGlmICghc3RhdGUgfHwgIXRoaXMuZmFjdG9yeSkgcmV0dXJuXHJcblxyXG4gICAgY29uc3QgY3VycmVudCA9IHN0YXRlLnN0ZXBzW3N0YXRlLmN1cnJlbnRJbmRleF1cclxuXHJcbiAgICBjb25zdCB1cGRhdGVkQ29udGV4dCA9IHtcclxuICAgICAgLi4uc3RhdGUuY29udGV4dCxcclxuICAgICAgLi4ucGFydGlhbENvbnRleHRcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY3VycmVudC5vbkV4aXQpIHtcclxuICAgICAgY29uc3QgYWxsb3dlZCA9IGF3YWl0IGN1cnJlbnQub25FeGl0KHVwZGF0ZWRDb250ZXh0KVxyXG4gICAgICBpZiAoIWFsbG93ZWQpIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG5ld1N0ZXBzID0gdGhpcy5mYWN0b3J5LmJ1aWxkKHVwZGF0ZWRDb250ZXh0KVxyXG5cclxuICAgIGNvbnN0IGN1cnJlbnRTbHVnID0gY3VycmVudC5zbHVnXHJcbiAgICBjb25zdCBuZXdJbmRleCA9IG5ld1N0ZXBzLmZpbmRJbmRleChzID0+IHMuc2x1ZyA9PT0gY3VycmVudFNsdWcpXHJcblxyXG4gICAgY29uc3QgbmV4dEluZGV4ID0gTWF0aC5taW4oXHJcbiAgICAgIG5ld0luZGV4ICsgMSxcclxuICAgICAgbmV3U3RlcHMubGVuZ3RoIC0gMVxyXG4gICAgKVxyXG5cclxuICAgIHRoaXMuc3RhdGUkLm5leHQoe1xyXG4gICAgICBzdGVwczogbmV3U3RlcHMsXHJcbiAgICAgIGN1cnJlbnRJbmRleDogbmV4dEluZGV4LFxyXG4gICAgICBjb250ZXh0OiB1cGRhdGVkQ29udGV4dFxyXG4gICAgfSlcclxuXHJcbiAgICB0aGlzLm5hdmlnYXRlKClcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE5hdmlnYXRlcyB0byB0aGUgcHJldmlvdXMgc3RlcC5cclxuICAgKi9cclxuICBwcmV2aW91cygpOiB2b2lkIHtcclxuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5zdGF0ZSQudmFsdWVcclxuICAgIGlmICghc3RhdGUpIHJldHVyblxyXG5cclxuICAgIGlmIChzdGF0ZS5jdXJyZW50SW5kZXggPT09IDApIHJldHVyblxyXG5cclxuICAgIHRoaXMuc3RhdGUkLm5leHQoe1xyXG4gICAgICAuLi5zdGF0ZSxcclxuICAgICAgY3VycmVudEluZGV4OiBzdGF0ZS5jdXJyZW50SW5kZXggLSAxXHJcbiAgICB9KVxyXG5cclxuICAgIHRoaXMubmF2aWdhdGUoKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB3aGV0aGVyIHRoZSB3aXphcmQgaXMgY3VycmVudGx5IG9uIHRoZSBsYXN0IHN0ZXAuXHJcbiAgICovXHJcbiAgaXNMYXN0KCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLnN0YXRlJC52YWx1ZVxyXG4gICAgaWYgKCFzdGF0ZSkgcmV0dXJuIGZhbHNlXHJcbiAgICByZXR1cm4gc3RhdGUuY3VycmVudEluZGV4ID09PSBzdGF0ZS5zdGVwcy5sZW5ndGggLSAxXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIGZvcndhcmQgbmF2aWdhdGlvbiBhdmFpbGFiaWxpdHkuXHJcbiAgICovXHJcbiAgc2V0U3RlcEZvcndhcmRBdmFpbGFiaWxpdHkoYXZhaWxhYmxlOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLnN0ZXBGb3J3YXJkQXZhaWxhYmlsaXR5JC5uZXh0KGF2YWlsYWJsZSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgb2JzZXJ2YWJsZSBmb3J3YXJkIG5hdmlnYXRpb24gc3RhdGUuXHJcbiAgICovXHJcbiAgZ2V0U3RlcEZvcndhcmRBdmFpbGFiaWxpdHkoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGVwRm9yd2FyZEF2YWlsYWJpbGl0eSQuYXNPYnNlcnZhYmxlKClcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE5hdmlnYXRlcyB0aGUgQW5ndWxhciByb3V0ZXIgdG8gdGhlIGN1cnJlbnQgc3RlcC5cclxuICAgKi9cclxuICBwcml2YXRlIG5hdmlnYXRlKCk6IHZvaWQge1xyXG4gICAgY29uc3Qgc3RlcCA9IHRoaXMuZ2V0Q3VycmVudFN0ZXAoKVxyXG4gICAgaWYgKCFzdGVwKSByZXR1cm5cclxuXHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShcclxuICAgICAgW2BzdGVwLSR7c3RlcC5zbHVnfWBdLFxyXG4gICAgICB7IHJlbGF0aXZlVG86IHRoaXMuYWN0aXZhdGVkUm91dGUgfVxyXG4gICAgKVxyXG4gIH1cclxufSJdfQ==
177
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l6YXJkLXN0ZXAuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dpbmRvd3MtcGx1cy11dGlsaXRpZXMvbW9kYWwtd2l6YXJkL3V0aWwvc2VydmljZS93aXphcmQtc3RlcC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFMUMsT0FBTyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQTtBQUNsRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7OztBQUtwQzs7Ozs7Ozs7Ozs7R0FXRztBQUVILE1BQU0sT0FBTyxpQkFBaUI7SUFvQjVCLFlBQ21CLE1BQWMsRUFDZCxjQUE4QjtRQUQ5QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBcEJqRDs7V0FFRztRQUNjLFdBQU0sR0FBRyxJQUFJLGVBQWUsQ0FBd0IsSUFBSSxDQUFDLENBQUE7UUFJMUU7O1dBRUc7UUFDYyw2QkFBd0IsR0FDdkMsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUE7SUFVakMsQ0FBQztJQUVMOzs7OztPQUtHO0lBQ0gsVUFBVSxDQUFDLE9BQTZCLEVBQUUsY0FBaUIsRUFBSSxVQUFnRDtRQUU3RyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQTtRQUN4QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsVUFBVSxDQUFBO1FBRWpDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUE7UUFFM0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDZixLQUFLO1lBQ0wsWUFBWSxFQUFFLENBQUM7WUFDZixPQUFPLEVBQUUsY0FBYztTQUN4QixDQUFDLENBQUE7UUFFRixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUE7SUFD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TVUsaUJBQWlCO2tIQUFqQixpQkFBaUI7OzJGQUFqQixpQkFBaUI7a0JBRDdCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcidcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcydcclxuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXHJcbmltcG9ydCB7IFdpemFyZFN0YXRlIH0gZnJvbSAnLi4vaW50ZXJmYWNlL3dpemFyZC1zdGF0ZS5pbnRlcmZhY2UnXHJcbmltcG9ydCB7IFdpemFyZFN0ZXBGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yeS93aXphcmQtc3RlcC1mYWN0b3J5J1xyXG5pbXBvcnQgeyBTdGVwRGVmaW5pdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZS9zdGVwLWRlZmluaXRpb24uaW50ZXJmYWNlJ1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyaWMgcmV1c2FibGUgd2l6YXJkIHN0ZXAgY29udHJvbGxlci5cclxuICpcclxuICogSGFuZGxlczpcclxuICogLSBOYXZpZ2F0aW9uXHJcbiAqIC0gQ29uZGl0aW9uYWwgc3RlcCByZXNvbHV0aW9uXHJcbiAqIC0gRHluYW1pYyBzdGVwIGluc2VydGlvbi9yZW1vdmFsXHJcbiAqIC0gQ29udGV4dCBwZXJzaXN0ZW5jZVxyXG4gKiAtIFJvdXRlciBzeW5jaHJvbml6YXRpb25cclxuICpcclxuICogQHRlbXBsYXRlIFQgVGhlIHNoYXJlZCB3aXphcmQgY29udGV4dCB0eXBlLlxyXG4gKi9cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgV2l6YXJkU3RlcFNlcnZpY2U8VD4ge1xyXG5cclxuICAvKipcclxuICAgKiBJbnRlcm5hbCB3aXphcmQgc3RhdGUgY29udGFpbmVyLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxXaXphcmRTdGF0ZTxUPiB8IG51bGw+KG51bGwpXHJcblxyXG5cdHByaXZhdGUgY29tcGxldGlvbkhhbmRsZXI/OiAoY29udGV4dDogVCkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWRcclxuXHJcbiAgLyoqXHJcbiAgICogQ29udHJvbHMgd2hldGhlciBmb3J3YXJkIG5hdmlnYXRpb24gaXMgYWxsb3dlZC5cclxuICAgKi9cclxuICBwcml2YXRlIHJlYWRvbmx5IHN0ZXBGb3J3YXJkQXZhaWxhYmlsaXR5JCA9XHJcbiAgICBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKVxyXG5cclxuICAvKipcclxuICAgKiBUaGUgc3RlcCBmYWN0b3J5IHVzZWQgdG8gcmVzb2x2ZSBhY3RpdmUgc3RlcHMuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBmYWN0b3J5PzogV2l6YXJkU3RlcEZhY3Rvcnk8VD5cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGVcclxuICApIHsgfVxyXG5cclxuICAvKipcclxuICAgKiBJbml0aWFsaXplcyB0aGUgd2l6YXJkLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGZhY3RvcnkgVGhlIHN0ZXAgZmFjdG9yeSBkZWZpbmluZyB0aGUgd2l6YXJkIGZsb3cuXHJcbiAgICogQHBhcmFtIGluaXRpYWxDb250ZXh0IEluaXRpYWwgc2hhcmVkIGNvbnRleHQgb2JqZWN0LlxyXG4gICAqL1xyXG4gIGluaXRpYWxpemUoZmFjdG9yeTogV2l6YXJkU3RlcEZhY3Rvcnk8VD4sIGluaXRpYWxDb250ZXh0OiBULCAgIG9uQ29tcGxldGU6IChjb250ZXh0OiBUKSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZFxyXG4pOiB2b2lkIHtcclxuICAgIHRoaXMuZmFjdG9yeSA9IGZhY3RvcnlcclxuXHRcdHRoaXMuY29tcGxldGlvbkhhbmRsZXIgPSBvbkNvbXBsZXRlXHJcblxyXG4gICAgY29uc3Qgc3RlcHMgPSBmYWN0b3J5LmJ1aWxkKGluaXRpYWxDb250ZXh0KVxyXG5cclxuICAgIHRoaXMuc3RhdGUkLm5leHQoe1xyXG4gICAgICBzdGVwcyxcclxuICAgICAgY3VycmVudEluZGV4OiAwLFxyXG4gICAgICBjb250ZXh0OiBpbml0aWFsQ29udGV4dFxyXG4gICAgfSlcclxuXHJcbiAgICB0aGlzLm5hdmlnYXRlKClcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgc3RlcCBzeW5jaHJvbm91c2x5LlxyXG4gICAqL1xyXG4gIGdldEN1cnJlbnRTdGVwKCk6IFN0ZXBEZWZpbml0aW9uPFQ+IHwgbnVsbCB7XHJcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuc3RhdGUkLnZhbHVlXHJcbiAgICBpZiAoIXN0YXRlKSByZXR1cm4gbnVsbFxyXG4gICAgcmV0dXJuIHN0YXRlLnN0ZXBzW3N0YXRlLmN1cnJlbnRJbmRleF0gPz8gbnVsbFxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT2JzZXJ2YWJsZSBzdHJlYW0gb2YgY3VycmVudCBzdGVwLlxyXG4gICAqL1xyXG4gIGdldEN1cnJlbnRTdGVwJCgpOiBPYnNlcnZhYmxlPFN0ZXBEZWZpbml0aW9uPFQ+IHwgbnVsbD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RhdGUkLnBpcGUoXHJcbiAgICAgIG1hcChzdGF0ZSA9PlxyXG4gICAgICAgIHN0YXRlID8gc3RhdGUuc3RlcHNbc3RhdGUuY3VycmVudEluZGV4XSA6IG51bGxcclxuICAgICAgKVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT2JzZXJ2YWJsZSBzdHJlYW0gb2YgYWxsIGFjdGl2ZSBzdGVwcy5cclxuICAgKi9cclxuICBnZXRTdGVwcyQoKTogT2JzZXJ2YWJsZTxTdGVwRGVmaW5pdGlvbjxUPltdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0ZSQucGlwZShcclxuICAgICAgbWFwKHN0YXRlID0+IHN0YXRlPy5zdGVwcyA/PyBbXSlcclxuICAgIClcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9ic2VydmFibGUgc3RyZWFtIG9mIHRoZSBjdXJyZW50IGluZGV4LlxyXG4gICAqL1xyXG4gIGdldEN1cnJlbnRJbmRleCQoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcclxuICAgIHJldHVybiB0aGlzLnN0YXRlJC5waXBlKFxyXG4gICAgICBtYXAoc3RhdGUgPT4gc3RhdGU/LmN1cnJlbnRJbmRleCA/PyAwKVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgc2hhcmVkIHdpemFyZCBjb250ZXh0LlxyXG4gICAqL1xyXG4gIGdldENvbnRleHQoKTogVCB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RhdGUkLnZhbHVlPy5jb250ZXh0ID8/IG51bGxcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkdmFuY2VzIHRvIHRoZSBuZXh0IHN0ZXAuXHJcbiAgICpcclxuICAgKiBFeGVjdXRlczpcclxuICAgKiAtIG9uRXhpdCBndWFyZFxyXG4gICAqIC0gY29udGV4dCBtZXJnZVxyXG4gICAqIC0gc3RlcCByZWNvbXBvc2l0aW9uXHJcbiAgICogLSBuYXZpZ2F0aW9uXHJcbiAgICpcclxuICAgKiBAcGFyYW0gcGFydGlhbENvbnRleHQgT3B0aW9uYWwgY29udGV4dCB1cGRhdGVzLlxyXG4gICAqIEBwYXJhbSBjb21wbGV0aW9uUHJvY2VkdXJlIE9wdGlvbmFsIHByb2NlZHVyZSB0byBydW4gd2hlbiB0aGUgd2l6YXJkIGlzIGNvbXBsZXRlZC5cclxuICAgKi9cclxuIGFzeW5jIG5leHQocGFydGlhbENvbnRleHQ/OiBQYXJ0aWFsPFQ+KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgY29uc3Qgc3RhdGUgPSB0aGlzLnN0YXRlJC52YWx1ZVxyXG4gIGlmICghc3RhdGUgfHwgIXRoaXMuZmFjdG9yeSkgcmV0dXJuXHJcblxyXG4gIGNvbnN0IGN1cnJlbnQgPSBzdGF0ZS5zdGVwc1tzdGF0ZS5jdXJyZW50SW5kZXhdXHJcblxyXG4gIGNvbnN0IHVwZGF0ZWRDb250ZXh0ID0ge1xyXG4gICAgLi4uc3RhdGUuY29udGV4dCxcclxuICAgIC4uLnBhcnRpYWxDb250ZXh0XHJcbiAgfVxyXG5cclxuICAvLyBSdW4gZXhpdCBndWFyZFxyXG4gIGlmIChjdXJyZW50Lm9uRXhpdCkge1xyXG4gICAgY29uc3QgYWxsb3dlZCA9IGF3YWl0IGN1cnJlbnQub25FeGl0KHVwZGF0ZWRDb250ZXh0KVxyXG4gICAgaWYgKCFhbGxvd2VkKSByZXR1cm5cclxuICB9XHJcblxyXG4gIC8vIPCflKUgUmUtcmVzb2x2ZSBzdGVwcyBBRlRFUiBjb250ZXh0IHVwZGF0ZVxyXG4gIGNvbnN0IHJlc29sdmVkID0gdGhpcy5mYWN0b3J5LmJ1aWxkKHVwZGF0ZWRDb250ZXh0KVxyXG5cclxuICBjb25zdCBjdXJyZW50U2x1ZyA9IGN1cnJlbnQuc2x1Z1xyXG4gIGNvbnN0IG5ld0luZGV4ID0gcmVzb2x2ZWQuZmluZEluZGV4KHMgPT4gcy5zbHVnID09PSBjdXJyZW50U2x1ZylcclxuXHJcbiAgY29uc3QgaXNMYXN0QWZ0ZXJSZXNvbHV0aW9uID1cclxuICAgIG5ld0luZGV4ID09PSByZXNvbHZlZC5sZW5ndGggLSAxXHJcblxyXG4gIC8vIElmIGxhc3QgYWZ0ZXIgcmUtZXZhbHVhdGlvbiDihpIgY29tcGxldGVcclxuICBpZiAoaXNMYXN0QWZ0ZXJSZXNvbHV0aW9uKSB7XHJcbiAgICBhd2FpdCB0aGlzLmNvbXBsZXRpb25IYW5kbGVyPy4odXBkYXRlZENvbnRleHQpXHJcbiAgICByZXR1cm5cclxuICB9XHJcblxyXG4gIC8vIE90aGVyd2lzZSBtb3ZlIGZvcndhcmRcclxuICB0aGlzLnN0YXRlJC5uZXh0KHtcclxuICAgIHN0ZXBzOiByZXNvbHZlZCxcclxuICAgIGN1cnJlbnRJbmRleDogbmV3SW5kZXggKyAxLFxyXG4gICAgY29udGV4dDogdXBkYXRlZENvbnRleHRcclxuICB9KVxyXG5cclxuICB0aGlzLm5hdmlnYXRlKClcclxufVxyXG5cclxuICAvKipcclxuICAgKiBOYXZpZ2F0ZXMgdG8gdGhlIHByZXZpb3VzIHN0ZXAuXHJcbiAgICovXHJcbiAgcHJldmlvdXMoKTogdm9pZCB7XHJcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuc3RhdGUkLnZhbHVlXHJcbiAgICBpZiAoIXN0YXRlKSByZXR1cm5cclxuXHJcbiAgICBpZiAoc3RhdGUuY3VycmVudEluZGV4ID09PSAwKSByZXR1cm5cclxuXHJcbiAgICB0aGlzLnN0YXRlJC5uZXh0KHtcclxuICAgICAgLi4uc3RhdGUsXHJcbiAgICAgIGN1cnJlbnRJbmRleDogc3RhdGUuY3VycmVudEluZGV4IC0gMVxyXG4gICAgfSlcclxuXHJcbiAgICB0aGlzLm5hdmlnYXRlKClcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgd2hldGhlciB0aGUgd2l6YXJkIGlzIGN1cnJlbnRseSBvbiB0aGUgbGFzdCBzdGVwLlxyXG4gICAqL1xyXG4gIGlzTGFzdCgpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5zdGF0ZSQudmFsdWVcclxuICAgIGlmICghc3RhdGUpIHJldHVybiBmYWxzZVxyXG4gICAgcmV0dXJuIHN0YXRlLmN1cnJlbnRJbmRleCA9PT0gc3RhdGUuc3RlcHMubGVuZ3RoIC0gMVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyBmb3J3YXJkIG5hdmlnYXRpb24gYXZhaWxhYmlsaXR5LlxyXG4gICAqL1xyXG4gIHNldFN0ZXBGb3J3YXJkQXZhaWxhYmlsaXR5KGF2YWlsYWJsZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5zdGVwRm9yd2FyZEF2YWlsYWJpbGl0eSQubmV4dChhdmFpbGFibGUpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIG9ic2VydmFibGUgZm9yd2FyZCBuYXZpZ2F0aW9uIHN0YXRlLlxyXG4gICAqL1xyXG4gIGdldFN0ZXBGb3J3YXJkQXZhaWxhYmlsaXR5KCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RlcEZvcndhcmRBdmFpbGFiaWxpdHkkLmFzT2JzZXJ2YWJsZSgpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBOYXZpZ2F0ZXMgdGhlIEFuZ3VsYXIgcm91dGVyIHRvIHRoZSBjdXJyZW50IHN0ZXAuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBuYXZpZ2F0ZSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHN0ZXAgPSB0aGlzLmdldEN1cnJlbnRTdGVwKClcclxuICAgIGlmICghc3RlcCkgcmV0dXJuXHJcblxyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoXHJcbiAgICAgIFtgc3RlcC0ke3N0ZXAuc2x1Z31gXSxcclxuICAgICAgeyByZWxhdGl2ZVRvOiB0aGlzLmFjdGl2YXRlZFJvdXRlIH1cclxuICAgIClcclxuICB9XHJcbn0iXX0=
@@ -37,8 +37,9 @@ class WizardStepService {
37
37
  * @param factory The step factory defining the wizard flow.
38
38
  * @param initialContext Initial shared context object.
39
39
  */
40
- initialize(factory, initialContext) {
40
+ initialize(factory, initialContext, onComplete) {
41
41
  this.factory = factory;
42
+ this.completionHandler = onComplete;
42
43
  const steps = factory.build(initialContext);
43
44
  this.state$.next({
44
45
  steps,
@@ -90,6 +91,7 @@ class WizardStepService {
90
91
  * - navigation
91
92
  *
92
93
  * @param partialContext Optional context updates.
94
+ * @param completionProcedure Optional procedure to run when the wizard is completed.
93
95
  */
94
96
  async next(partialContext) {
95
97
  const state = this.state$.value;
@@ -100,18 +102,26 @@ class WizardStepService {
100
102
  ...state.context,
101
103
  ...partialContext
102
104
  };
105
+ // Run exit guard
103
106
  if (current.onExit) {
104
107
  const allowed = await current.onExit(updatedContext);
105
108
  if (!allowed)
106
109
  return;
107
110
  }
108
- const newSteps = this.factory.build(updatedContext);
111
+ // 🔥 Re-resolve steps AFTER context update
112
+ const resolved = this.factory.build(updatedContext);
109
113
  const currentSlug = current.slug;
110
- const newIndex = newSteps.findIndex(s => s.slug === currentSlug);
111
- const nextIndex = Math.min(newIndex + 1, newSteps.length - 1);
114
+ const newIndex = resolved.findIndex(s => s.slug === currentSlug);
115
+ const isLastAfterResolution = newIndex === resolved.length - 1;
116
+ // If last after re-evaluation → complete
117
+ if (isLastAfterResolution) {
118
+ await this.completionHandler?.(updatedContext);
119
+ return;
120
+ }
121
+ // Otherwise move forward
112
122
  this.state$.next({
113
- steps: newSteps,
114
- currentIndex: nextIndex,
123
+ steps: resolved,
124
+ currentIndex: newIndex + 1,
115
125
  context: updatedContext
116
126
  });
117
127
  this.navigate();
@@ -1 +1 @@
1
- {"version":3,"file":"windows-plus-utilities-modal-wizard.mjs","sources":["../../../projects/windows-plus-utilities/modal-wizard/util/service/wizard-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/factory/wizard-step-factory.ts","../../../projects/windows-plus-utilities/modal-wizard/util/helper/wizard-builder.service.ts","../../../projects/windows-plus-utilities/modal-wizard/util/service/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 { Injectable } from '@angular/core'\r\nimport { ActivatedRoute, Router } from '@angular/router'\r\nimport { BehaviorSubject, Observable } from 'rxjs'\r\nimport { map } from 'rxjs/operators'\r\nimport { WizardState } from '../interface/wizard-state.interface'\r\nimport { WizardStepFactory } from '../factory/wizard-step-factory'\r\nimport { StepDefinition } from '../interface/step-definition.interface'\r\n\r\n/**\r\n * Generic reusable wizard step controller.\r\n *\r\n * Handles:\r\n * - Navigation\r\n * - Conditional step resolution\r\n * - Dynamic step insertion/removal\r\n * - Context persistence\r\n * - Router synchronization\r\n *\r\n * @template T The shared wizard context type.\r\n */\r\n@Injectable()\r\nexport class WizardStepService<T> {\r\n\r\n /**\r\n * Internal wizard state container.\r\n */\r\n private readonly state$ = new BehaviorSubject<WizardState<T> | null>(null)\r\n\r\n /**\r\n * Controls whether forward navigation is allowed.\r\n */\r\n private readonly stepForwardAvailability$ =\r\n new BehaviorSubject<boolean>(false)\r\n\r\n /**\r\n * The step factory used to resolve active steps.\r\n */\r\n private factory?: WizardStepFactory<T>\r\n\r\n constructor(\r\n private readonly router: Router,\r\n private readonly activatedRoute: ActivatedRoute\r\n ) { }\r\n\r\n /**\r\n * Initializes the wizard.\r\n *\r\n * @param factory The step factory defining the wizard flow.\r\n * @param initialContext Initial shared context object.\r\n */\r\n initialize(factory: WizardStepFactory<T>, initialContext: T): void {\r\n this.factory = factory\r\n\r\n const steps = factory.build(initialContext)\r\n\r\n this.state$.next({\r\n steps,\r\n currentIndex: 0,\r\n context: initialContext\r\n })\r\n\r\n this.navigate()\r\n }\r\n\r\n /**\r\n * Returns the current step synchronously.\r\n */\r\n getCurrentStep(): StepDefinition<T> | null {\r\n const state = this.state$.value\r\n if (!state) return null\r\n return state.steps[state.currentIndex] ?? null\r\n }\r\n\r\n /**\r\n * Observable stream of current step.\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 /**\r\n * Observable stream of all active steps.\r\n */\r\n getSteps$(): Observable<StepDefinition<T>[]> {\r\n return this.state$.pipe(\r\n map(state => state?.steps ?? [])\r\n )\r\n }\r\n\r\n /**\r\n * Observable stream of the current index.\r\n */\r\n getCurrentIndex$(): Observable<number> {\r\n return this.state$.pipe(\r\n map(state => state?.currentIndex ?? 0)\r\n )\r\n }\r\n\r\n /**\r\n * Returns the shared wizard context.\r\n */\r\n getContext(): T | null {\r\n return this.state$.value?.context ?? null\r\n }\r\n\r\n /**\r\n * Advances to the next step.\r\n *\r\n * Executes:\r\n * - onExit guard\r\n * - context merge\r\n * - step recomposition\r\n * - navigation\r\n *\r\n * @param partialContext Optional context updates.\r\n */\r\n async next(partialContext?: Partial<T>): Promise<void> {\r\n\r\n const state = this.state$.value\r\n if (!state || !this.factory) return\r\n\r\n const current = state.steps[state.currentIndex]\r\n\r\n const updatedContext = {\r\n ...state.context,\r\n ...partialContext\r\n }\r\n\r\n if (current.onExit) {\r\n const allowed = await current.onExit(updatedContext)\r\n if (!allowed) return\r\n }\r\n\r\n const newSteps = this.factory.build(updatedContext)\r\n\r\n const currentSlug = current.slug\r\n const newIndex = newSteps.findIndex(s => s.slug === currentSlug)\r\n\r\n const nextIndex = Math.min(\r\n newIndex + 1,\r\n newSteps.length - 1\r\n )\r\n\r\n this.state$.next({\r\n steps: newSteps,\r\n currentIndex: nextIndex,\r\n context: updatedContext\r\n })\r\n\r\n this.navigate()\r\n }\r\n\r\n /**\r\n * Navigates to the previous step.\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) return\r\n\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 * Returns whether the wizard is currently on the last step.\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 /**\r\n * Sets forward navigation availability.\r\n */\r\n setStepForwardAvailability(available: boolean): void {\r\n this.stepForwardAvailability$.next(available)\r\n }\r\n\r\n /**\r\n * Returns observable forward navigation state.\r\n */\r\n getStepForwardAvailability(): Observable<boolean> {\r\n return this.stepForwardAvailability$.asObservable()\r\n }\r\n\r\n /**\r\n * Navigates the Angular router to the current step.\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}","import { Component } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Observable } from 'rxjs'\r\nimport { StepDefinition } from '../../util/interface/step-definition.interface'\r\nimport { WizardStepService } from '../../util/service/wizard-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<StepDefinition<any>[]>\r\n\t/**\r\n\t * @description an observable to the current step\r\n\t */\r\n currentIndex: Observable<number>;\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: WizardStepService<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.getSteps$();\r\n this.currentIndex = this.stepService.getCurrentIndex$();\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: StepDefinition<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': (currentIndex | async) === i }\"\r\n\t\t\t\tclass=\"step-bubble cursor-pointer\"\r\n\t\t\t>{{ i + 1}}</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 { StepDefinition } from '../interface/step-definition.interface'\r\n\r\n/**\r\n * Factory helper for building dynamic wizard step flows.\r\n */\r\nexport class WizardStepFactory<T> {\r\n constructor(\r\n private readonly masterSteps: StepDefinition<T>[]\r\n ) { }\r\n\r\n /**\r\n * Resolves the active step list based on context conditions.\r\n *\r\n * @param context The current wizard context.\r\n */\r\n build(context: T): StepDefinition<T>[] {\r\n return this.masterSteps.filter(step =>\r\n !step.condition || step.condition(context)\r\n )\r\n }\r\n}","import { StepDefinition } from '../interface/step-definition.interface'\r\n\r\nexport class WizardBuilder<T> {\r\n\t/**\r\n\t * @description an array containing the configuration for the wizard's steps\r\n\t */\r\n\tprivate steps: StepDefinition<T>[] = []\r\n\t/**\r\n\t * @author Alex Hodson\r\n\t * @description adds the specified step to the step array\r\n\t * @param step the step to be added\r\n\t * @returns {WizardBuilder<T>} the wizard builder instance\r\n\t */\r\n\taddStep(step: StepDefinition<T>): WizardBuilder<T> {\r\n\t\tthis.steps.push(step)\r\n\r\n\t\treturn this\r\n\t}\r\n\t/**\r\n\t * @author Alex Hodson\r\n\t * @description builds the wizard steps to be used\r\n\t * @returns {StepDefinition<T>[]} an immutable copy of the steps\r\n\t */\r\n\tbuild(): StepDefinition<T>[] {\r\n\t\treturn [...this.steps] // Immutable copy\r\n\t}\r\n}","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","/*\r\n * Public API Surface of windows-plus-utilities\r\n */\r\nexport * from './components/step/step.component';\r\n\r\nexport * from './util/factory/wizard-step-factory'\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-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.WizardStepService"],"mappings":"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"}
1
+ {"version":3,"file":"windows-plus-utilities-modal-wizard.mjs","sources":["../../../projects/windows-plus-utilities/modal-wizard/util/service/wizard-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/factory/wizard-step-factory.ts","../../../projects/windows-plus-utilities/modal-wizard/util/helper/wizard-builder.service.ts","../../../projects/windows-plus-utilities/modal-wizard/util/service/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 { Injectable } from '@angular/core'\r\nimport { ActivatedRoute, Router } from '@angular/router'\r\nimport { BehaviorSubject, Observable } from 'rxjs'\r\nimport { map } from 'rxjs/operators'\r\nimport { WizardState } from '../interface/wizard-state.interface'\r\nimport { WizardStepFactory } from '../factory/wizard-step-factory'\r\nimport { StepDefinition } from '../interface/step-definition.interface'\r\n\r\n/**\r\n * Generic reusable wizard step controller.\r\n *\r\n * Handles:\r\n * - Navigation\r\n * - Conditional step resolution\r\n * - Dynamic step insertion/removal\r\n * - Context persistence\r\n * - Router synchronization\r\n *\r\n * @template T The shared wizard context type.\r\n */\r\n@Injectable()\r\nexport class WizardStepService<T> {\r\n\r\n /**\r\n * Internal wizard state container.\r\n */\r\n private readonly state$ = new BehaviorSubject<WizardState<T> | null>(null)\r\n\r\n\tprivate completionHandler?: (context: T) => Promise<void> | void\r\n\r\n /**\r\n * Controls whether forward navigation is allowed.\r\n */\r\n private readonly stepForwardAvailability$ =\r\n new BehaviorSubject<boolean>(false)\r\n\r\n /**\r\n * The step factory used to resolve active steps.\r\n */\r\n private factory?: WizardStepFactory<T>\r\n\r\n constructor(\r\n private readonly router: Router,\r\n private readonly activatedRoute: ActivatedRoute\r\n ) { }\r\n\r\n /**\r\n * Initializes the wizard.\r\n *\r\n * @param factory The step factory defining the wizard flow.\r\n * @param initialContext Initial shared context object.\r\n */\r\n initialize(factory: WizardStepFactory<T>, initialContext: T, onComplete: (context: T) => Promise<void> | void\r\n): void {\r\n this.factory = factory\r\n\t\tthis.completionHandler = onComplete\r\n\r\n const steps = factory.build(initialContext)\r\n\r\n this.state$.next({\r\n steps,\r\n currentIndex: 0,\r\n context: initialContext\r\n })\r\n\r\n this.navigate()\r\n }\r\n\r\n /**\r\n * Returns the current step synchronously.\r\n */\r\n getCurrentStep(): StepDefinition<T> | null {\r\n const state = this.state$.value\r\n if (!state) return null\r\n return state.steps[state.currentIndex] ?? null\r\n }\r\n\r\n /**\r\n * Observable stream of current step.\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 /**\r\n * Observable stream of all active steps.\r\n */\r\n getSteps$(): Observable<StepDefinition<T>[]> {\r\n return this.state$.pipe(\r\n map(state => state?.steps ?? [])\r\n )\r\n }\r\n\r\n /**\r\n * Observable stream of the current index.\r\n */\r\n getCurrentIndex$(): Observable<number> {\r\n return this.state$.pipe(\r\n map(state => state?.currentIndex ?? 0)\r\n )\r\n }\r\n\r\n /**\r\n * Returns the shared wizard context.\r\n */\r\n getContext(): T | null {\r\n return this.state$.value?.context ?? null\r\n }\r\n\r\n /**\r\n * Advances to the next step.\r\n *\r\n * Executes:\r\n * - onExit guard\r\n * - context merge\r\n * - step recomposition\r\n * - navigation\r\n *\r\n * @param partialContext Optional context updates.\r\n * @param completionProcedure Optional procedure to run when the wizard is completed.\r\n */\r\n async next(partialContext?: Partial<T>): Promise<void> {\r\n const state = this.state$.value\r\n if (!state || !this.factory) return\r\n\r\n const current = state.steps[state.currentIndex]\r\n\r\n const updatedContext = {\r\n ...state.context,\r\n ...partialContext\r\n }\r\n\r\n // Run exit guard\r\n if (current.onExit) {\r\n const allowed = await current.onExit(updatedContext)\r\n if (!allowed) return\r\n }\r\n\r\n // 🔥 Re-resolve steps AFTER context update\r\n const resolved = this.factory.build(updatedContext)\r\n\r\n const currentSlug = current.slug\r\n const newIndex = resolved.findIndex(s => s.slug === currentSlug)\r\n\r\n const isLastAfterResolution =\r\n newIndex === resolved.length - 1\r\n\r\n // If last after re-evaluation → complete\r\n if (isLastAfterResolution) {\r\n await this.completionHandler?.(updatedContext)\r\n return\r\n }\r\n\r\n // Otherwise move forward\r\n this.state$.next({\r\n steps: resolved,\r\n currentIndex: newIndex + 1,\r\n context: updatedContext\r\n })\r\n\r\n this.navigate()\r\n}\r\n\r\n /**\r\n * Navigates to the previous step.\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) return\r\n\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 * Returns whether the wizard is currently on the last step.\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 /**\r\n * Sets forward navigation availability.\r\n */\r\n setStepForwardAvailability(available: boolean): void {\r\n this.stepForwardAvailability$.next(available)\r\n }\r\n\r\n /**\r\n * Returns observable forward navigation state.\r\n */\r\n getStepForwardAvailability(): Observable<boolean> {\r\n return this.stepForwardAvailability$.asObservable()\r\n }\r\n\r\n /**\r\n * Navigates the Angular router to the current step.\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}","import { Component } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Observable } from 'rxjs'\r\nimport { StepDefinition } from '../../util/interface/step-definition.interface'\r\nimport { WizardStepService } from '../../util/service/wizard-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<StepDefinition<any>[]>\r\n\t/**\r\n\t * @description an observable to the current step\r\n\t */\r\n currentIndex: Observable<number>;\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: WizardStepService<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.getSteps$();\r\n this.currentIndex = this.stepService.getCurrentIndex$();\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: StepDefinition<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': (currentIndex | async) === i }\"\r\n\t\t\t\tclass=\"step-bubble cursor-pointer\"\r\n\t\t\t>{{ i + 1}}</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 { StepDefinition } from '../interface/step-definition.interface'\r\n\r\n/**\r\n * Factory helper for building dynamic wizard step flows.\r\n */\r\nexport class WizardStepFactory<T> {\r\n constructor(\r\n private readonly masterSteps: StepDefinition<T>[]\r\n ) { }\r\n\r\n /**\r\n * Resolves the active step list based on context conditions.\r\n *\r\n * @param context The current wizard context.\r\n */\r\n build(context: T): StepDefinition<T>[] {\r\n return this.masterSteps.filter(step =>\r\n !step.condition || step.condition(context)\r\n )\r\n }\r\n}","import { StepDefinition } from '../interface/step-definition.interface'\r\n\r\nexport class WizardBuilder<T> {\r\n\t/**\r\n\t * @description an array containing the configuration for the wizard's steps\r\n\t */\r\n\tprivate steps: StepDefinition<T>[] = []\r\n\t/**\r\n\t * @author Alex Hodson\r\n\t * @description adds the specified step to the step array\r\n\t * @param step the step to be added\r\n\t * @returns {WizardBuilder<T>} the wizard builder instance\r\n\t */\r\n\taddStep(step: StepDefinition<T>): WizardBuilder<T> {\r\n\t\tthis.steps.push(step)\r\n\r\n\t\treturn this\r\n\t}\r\n\t/**\r\n\t * @author Alex Hodson\r\n\t * @description builds the wizard steps to be used\r\n\t * @returns {StepDefinition<T>[]} an immutable copy of the steps\r\n\t */\r\n\tbuild(): StepDefinition<T>[] {\r\n\t\treturn [...this.steps] // Immutable copy\r\n\t}\r\n}","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","/*\r\n * Public API Surface of windows-plus-utilities\r\n */\r\nexport * from './components/step/step.component';\r\n\r\nexport * from './util/factory/wizard-step-factory'\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-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.WizardStepService"],"mappings":"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"}
@@ -22,6 +22,7 @@ export declare class WizardStepService<T> {
22
22
  * Internal wizard state container.
23
23
  */
24
24
  private readonly state$;
25
+ private completionHandler?;
25
26
  /**
26
27
  * Controls whether forward navigation is allowed.
27
28
  */
@@ -37,7 +38,7 @@ export declare class WizardStepService<T> {
37
38
  * @param factory The step factory defining the wizard flow.
38
39
  * @param initialContext Initial shared context object.
39
40
  */
40
- initialize(factory: WizardStepFactory<T>, initialContext: T): void;
41
+ initialize(factory: WizardStepFactory<T>, initialContext: T, onComplete: (context: T) => Promise<void> | void): void;
41
42
  /**
42
43
  * Returns the current step synchronously.
43
44
  */
@@ -68,6 +69,7 @@ export declare class WizardStepService<T> {
68
69
  * - navigation
69
70
  *
70
71
  * @param partialContext Optional context updates.
72
+ * @param completionProcedure Optional procedure to run when the wizard is completed.
71
73
  */
72
74
  next(partialContext?: Partial<T>): Promise<void>;
73
75
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "windows-plus-utilities",
3
- "version": "0.0.89",
3
+ "version": "0.0.90",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^17.3.8",
6
6
  "@angular/core": "^17.3.8",
@@ -43,6 +43,12 @@
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
+ },
46
52
  "./main-menu": {
47
53
  "types": "./main-menu/index.d.ts",
48
54
  "esm2022": "./esm2022/main-menu/windows-plus-utilities-main-menu.mjs",
@@ -55,12 +61,6 @@
55
61
  "esm": "./esm2022/modal-wizard/windows-plus-utilities-modal-wizard.mjs",
56
62
  "default": "./fesm2022/windows-plus-utilities-modal-wizard.mjs"
57
63
  },
58
- "./job-label": {
59
- "types": "./job-label/index.d.ts",
60
- "esm2022": "./esm2022/job-label/windows-plus-utilities-job-label.mjs",
61
- "esm": "./esm2022/job-label/windows-plus-utilities-job-label.mjs",
62
- "default": "./fesm2022/windows-plus-utilities-job-label.mjs"
63
- },
64
64
  "./section-header": {
65
65
  "types": "./section-header/index.d.ts",
66
66
  "esm2022": "./esm2022/section-header/windows-plus-utilities-section-header.mjs",