@coolon/angular-ui-powerups 16.1.0-alpha.294 → 16.1.0-alpha.295

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.
@@ -44,29 +44,36 @@ export class DialogInteractionContext extends AbstractInteractionContext {
44
44
  }
45
45
  };
46
46
  const matDialogRef = this.dialogService.open(ActivityContainerComponent, config);
47
+ // Everything below works on this dialog's own container, never the activityContainer field.
48
+ // The field tracks the *current* dialog, and the next one can claim it while this one is still
49
+ // closing: MatDialog's exit animation (75ms) is shorter than its enter (150ms), so a dialog
50
+ // opened as this one closes sees this one's afterClosed land before its own afterOpened.
47
51
  const activityContainer = this.activityContainer = matDialogRef.componentInstance;
48
- this.activityContainer.initialise(this.identifier, this.api);
49
- const activityResult = this.activityContainer.startActivity(activityType, data);
52
+ activityContainer.initialise(this.identifier, this.api);
53
+ const activityResult = activityContainer.startActivity(activityType, data);
50
54
  // Tear the overlay down the moment the activity completes — decoupled from route sync. The
51
55
  // route sync still runs (via activityResult / waitActivitiesSynchronised) but can wedge under
52
56
  // some browser/extension combinations; gating close() on it would leave a stranded backdrop.
53
57
  activityContainer.onceInactive(() => matDialogRef.close());
54
58
  // Backstop: also close when the (route-synced) result settles, in case the inactive signal is
55
59
  // ever missed. MatDialogRef.close() is idempotent, so a second call is a harmless no-op.
56
- activityResult.finally(() => matDialogRef.close());
60
+ // then(close, close), not finally(close): finally's promise re-rejects on a cancel and nothing
61
+ // holds it. zone.js 0.13 happens not to report that, but native promises (zoneless) would.
62
+ const close = () => matDialogRef.close();
63
+ activityResult.then(close, close);
57
64
  // we need to check if our onDone/onCancel methods above we called or if we were
58
65
  // closed by the user clicking the backdrop. If the later then we need to cancel our
59
66
  // activity.
60
67
  if (enableCloseOnBackdropClick) {
61
68
  matDialogRef.backdropClick().subscribe(event => {
62
- if (this.canClose(options)) {
69
+ if (this.canClose(activityContainer, options)) {
63
70
  activityContainer.cancelActiveActivity();
64
71
  }
65
72
  });
66
73
  }
67
74
  matDialogRef.keydownEvents().subscribe(event => {
68
75
  if (event.key === 'Escape') {
69
- if (this.canClose(options)) {
76
+ if (this.canClose(activityContainer, options)) {
70
77
  activityContainer.cancelActiveActivity();
71
78
  }
72
79
  }
@@ -75,18 +82,22 @@ export class DialogInteractionContext extends AbstractInteractionContext {
75
82
  if (activityContainer.isActive()) {
76
83
  activityContainer.cancelActiveActivity();
77
84
  }
78
- this.activityContainer = null;
85
+ // Release the field only if it's still ours: nulling a successor's would orphan the live
86
+ // dialog (isActive() false, its afterOpened and Escape handlers reading null).
87
+ if (this.activityContainer === activityContainer) {
88
+ this.activityContainer = null;
89
+ }
79
90
  });
80
91
  matDialogRef.updateSize();
81
92
  matDialogRef.afterOpened().subscribe(promiseAlreadyFinished => {
82
93
  matDialogRef.updateSize();
83
- this.activityContainer.notifyReady(true);
94
+ activityContainer.notifyReady(true);
84
95
  });
85
96
  return activityResult;
86
97
  }
87
- canClose(options) {
98
+ canClose(activityContainer, options) {
88
99
  const disableClose = Opts.get(options).getOptional('disableClose', false);
89
- return this.activityContainer.isActive() && (!this.activityContainer.disableClose && !disableClose);
100
+ return activityContainer.isActive() && (!activityContainer.disableClose && !disableClose);
90
101
  }
91
102
  }
92
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLWludGVyYWN0aW9uLWNvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdWktcG93ZXJ1cHMvc3JjL2xpYi9pbnRlcmFjdGlvbi9zZXJ2aWNlcy9tYXQtZGlhbG9nLWludGVyYWN0aW9uL2RpYWxvZy1pbnRlcmFjdGlvbi1jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBNkIsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkYsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RCxPQUFPLEVBQUMsMEJBQTBCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUc5RSxPQUFPLEVBQUMsMEJBQTBCLEVBQUMsTUFBTSxrRUFBa0UsQ0FBQztBQUk1RyxNQUFNLE9BQU8sd0JBQXlCLFNBQVEsMEJBQTBCO0lBTWpEO0lBQ1E7SUFDQTtJQUNSO0lBUGIsT0FBTyxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztJQUNqQyxtQkFBbUIsQ0FBeUM7SUFDNUQsaUJBQWlCLENBQXdEO0lBRWpGLFlBQXFCLFVBQWtCLEVBQ1YsR0FBMkIsRUFDM0IsYUFBd0IsRUFDaEMsTUFBdUI7UUFDMUMsS0FBSyxFQUFFLENBQUM7UUFKVyxlQUFVLEdBQVYsVUFBVSxDQUFRO1FBQ1YsUUFBRyxHQUFILEdBQUcsQ0FBd0I7UUFDM0Isa0JBQWEsR0FBYixhQUFhLENBQVc7UUFDaEMsV0FBTSxHQUFOLE1BQU0sQ0FBaUI7UUFFMUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsb0JBQW9CO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDdkQsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLElBQUksQ0FBQyxR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QzFCLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsc0JBQXNCLENBQUMsRUFBRTtZQUM1RCxZQUFZLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sY0FBYyxDQUFDO0lBQ3hCLENBQUM7SUFFTyxRQUFRLENBQUMsT0FBbUM7UUFDbEQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzFFLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDdEcsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dDb25maWcsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3RhYmxlLCBEaXNwb3NhYmxlLCBHYXJiYWdlQ29sbGVjdG9yLCBsYW5nIH0gZnJvbSAnQGNvb2xvbi9wZWN0aW4nO1xuaW1wb3J0IHsgYXNzZXJ0LCBPcHRzIH0gZnJvbSAnQGNvb2xvbi90eXBlc2NyaXB0LXV0aWxpdGllcyc7XG5pbXBvcnQge0Fic3RyYWN0SW50ZXJhY3Rpb25Db250ZXh0fSBmcm9tICcuLi8uLi9hYnN0cmFjdC1pbnRlcmFjdGlvbi1jb250ZXh0JztcbmltcG9ydCB0eXBlIHtBY3Rpdml0eX0gZnJvbSAnLi4vLi4vYWN0aXZpdHknO1xuaW1wb3J0IHR5cGUge0FjdGl2aXR5UmVmfSBmcm9tICcuLi8uLi9hY3Rpdml0eS1yZWYnO1xuaW1wb3J0IHtBY3Rpdml0eUNvbnRhaW5lckNvbXBvbmVudH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9hY3Rpdml0eS1jb250YWluZXIvYWN0aXZpdHktY29udGFpbmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgdHlwZSB7SW50ZXJhY3Rpb25Db250ZXh0fSBmcm9tICcuLi8uLi9pbnRlcmFjdGlvbi1jb250ZXh0JztcbmltcG9ydCB0eXBlIHtJbnRlcmFjdGlvblNlcnZpY2V9IGZyb20gJy4uL2ludGVyYWN0aW9uLnNlcnZpY2UnO1xuXG5leHBvcnQgY2xhc3MgRGlhbG9nSW50ZXJhY3Rpb25Db250ZXh0IGV4dGVuZHMgQWJzdHJhY3RJbnRlcmFjdGlvbkNvbnRleHQge1xuXG4gIHByaXZhdGUgZ2FyYmFnZSA9IG5ldyBHYXJiYWdlQ29sbGVjdG9yKCk7XG4gIHByaXZhdGUgX2N1cnJlbnRBY3Rpdml0eVJlZjogQWN0aXZpdHlSZWY8dW5rbm93biwgdW5rbm93biwgdW5rbm93bj47XG4gIHByaXZhdGUgYWN0aXZpdHlDb250YWluZXI6IEFjdGl2aXR5Q29udGFpbmVyQ29tcG9uZW50PHVua25vd24sIHVua25vd24sIHVua25vd24+O1xuXG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGlkZW50aWZpZXI6IHN0cmluZyxcbiAgICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBhcGk6IEludGVyYWN0aW9uU2VydmljZS5BcGksXG4gICAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nU2VydmljZTogTWF0RGlhbG9nLFxuICAgICAgICAgICAgICByZWFkb25seSBjb25maWc6IE1hdERpYWxvZ0NvbmZpZykge1xuICAgIHN1cGVyKCk7XG4gICAgYXNzZXJ0Lm5vdE5pbChkaWFsb2dTZXJ2aWNlKTtcbiAgfVxuXG4gIGNhbmNlbEFjdGl2ZUFjdGl2aXR5KCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmFjdGl2aXR5Q29udGFpbmVyLmNhbmNlbEFjdGl2ZUFjdGl2aXR5KCk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzQWN0aXZlKCkpIHtcbiAgICAgIGxhbmcuaWxsZWdhbFN0YXRlKCdEaXNwb3NlIGNhbGxlZCB3aGlsZSBhY3RpdmUuJyk7XG4gICAgfVxuICAgIHRoaXMuZ2FyYmFnZS5kaXNwb3NlKCk7XG4gIH1cblxuICByZWdpc3RlckRpc3Bvc2FibGU8VCBleHRlbmRzIERpc3Bvc2FibGU+KGRpc3Bvc2FibGU6IFQpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5nYXJiYWdlLnJlZ2lzdGVyRGlzcG9zYWJsZShkaXNwb3NhYmxlKTtcbiAgfVxuXG4gIGlzQWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuYWN0aXZpdHlDb250YWluZXIgJiYgdGhpcy5hY3Rpdml0eUNvbnRhaW5lci5pc0FjdGl2ZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZUFuZExhdW5jaEFjdGl2aXR5PEQsIFIsIEU+KGFjdGl2aXR5VHlwZTogQ29uc3RydWN0YWJsZTxBY3Rpdml0eTxELCBSLCBFPj4sIGRhdGE6IEQsIG9wdGlvbnM/OiBJbnRlcmFjdGlvbkNvbnRleHQuT3B0aW9ucyk6IFByb21pc2U8Uj4ge1xuICAgIGFzc2VydC5pc05pbCh0aGlzLl9jdXJyZW50QWN0aXZpdHlSZWYpO1xuXG4gICAgY29uc3QgZW5hYmxlQ2xvc2VPbkJhY2tkcm9wQ2xpY2sgPSBPcHRzLmdldChvcHRpb25zKS5nZXRPcHRpb25hbCgnZW5hYmxlQ2xvc2VPbkJhY2tkcm9wQ2xpY2snLCBmYWxzZSk7XG4gICAgY29uc3QgY29uZmlnOiBNYXREaWFsb2dDb25maWcgPSB7XG4gICAgICAuLi50aGlzLmNvbmZpZyxcbiAgICAgIC4uLntcbiAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLCAvLyB3ZSdsbCBoYW5kbGUgdGhpcyBvdXJzZWx2ZXNcbiAgICAgICAgcGFuZWxDbGFzczogJ2RpYWxvZy1pbnRlcmFjdGlvbi1jb250ZXh0J1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgbWF0RGlhbG9nUmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oQWN0aXZpdHlDb250YWluZXJDb21wb25lbnQsIGNvbmZpZykgYXMgTWF0RGlhbG9nUmVmPEFjdGl2aXR5Q29udGFpbmVyQ29tcG9uZW50PEQsIFIsIEU+PjtcbiAgICBjb25zdCBhY3Rpdml0eUNvbnRhaW5lciA9IHRoaXMuYWN0aXZpdHlDb250YWluZXIgPSBtYXREaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgdGhpcy5hY3Rpdml0eUNvbnRhaW5lci5pbml0aWFsaXNlKHRoaXMuaWRlbnRpZmllciwgdGhpcy5hcGkpO1xuICAgIGNvbnN0IGFjdGl2aXR5UmVzdWx0ID0gdGhpcy5hY3Rpdml0eUNvbnRhaW5lci5zdGFydEFjdGl2aXR5KGFjdGl2aXR5VHlwZSwgZGF0YSk7XG5cbiAgICAvLyBUZWFyIHRoZSBvdmVybGF5IGRvd24gdGhlIG1vbWVudCB0aGUgYWN0aXZpdHkgY29tcGxldGVzIOKAlCBkZWNvdXBsZWQgZnJvbSByb3V0ZSBzeW5jLiBUaGVcbiAgICAvLyByb3V0ZSBzeW5jIHN0aWxsIHJ1bnMgKHZpYSBhY3Rpdml0eVJlc3VsdCAvIHdhaXRBY3Rpdml0aWVzU3luY2hyb25pc2VkKSBidXQgY2FuIHdlZGdlIHVuZGVyXG4gICAgLy8gc29tZSBicm93c2VyL2V4dGVuc2lvbiBjb21iaW5hdGlvbnM7IGdhdGluZyBjbG9zZSgpIG9uIGl0IHdvdWxkIGxlYXZlIGEgc3RyYW5kZWQgYmFja2Ryb3AuXG4gICAgYWN0aXZpdHlDb250YWluZXIub25jZUluYWN0aXZlKCgpID0+IG1hdERpYWxvZ1JlZi5jbG9zZSgpKTtcbiAgICAvLyBCYWNrc3RvcDogYWxzbyBjbG9zZSB3aGVuIHRoZSAocm91dGUtc3luY2VkKSByZXN1bHQgc2V0dGxlcywgaW4gY2FzZSB0aGUgaW5hY3RpdmUgc2lnbmFsIGlzXG4gICAgLy8gZXZlciBtaXNzZWQuIE1hdERpYWxvZ1JlZi5jbG9zZSgpIGlzIGlkZW1wb3RlbnQsIHNvIGEgc2Vjb25kIGNhbGwgaXMgYSBoYXJtbGVzcyBuby1vcC5cbiAgICBhY3Rpdml0eVJlc3VsdC5maW5hbGx5KCgpID0+IG1hdERpYWxvZ1JlZi5jbG9zZSgpKTtcbiAgICAvLyB3ZSBuZWVkIHRvIGNoZWNrIGlmIG91ciBvbkRvbmUvb25DYW5jZWwgbWV0aG9kcyBhYm92ZSB3ZSBjYWxsZWQgb3IgaWYgd2Ugd2VyZVxuICAgIC8vIGNsb3NlZCBieSB0aGUgdXNlciBjbGlja2luZyB0aGUgYmFja2Ryb3AuICBJZiB0aGUgbGF0ZXIgdGhlbiB3ZSBuZWVkIHRvIGNhbmNlbCBvdXJcbiAgICAvLyBhY3Rpdml0eS5cbiAgICBpZiAoZW5hYmxlQ2xvc2VPbkJhY2tkcm9wQ2xpY2spIHtcbiAgICAgIG1hdERpYWxvZ1JlZi5iYWNrZHJvcENsaWNrKCkuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY2FuQ2xvc2Uob3B0aW9ucykpIHtcbiAgICAgICAgICBhY3Rpdml0eUNvbnRhaW5lci5jYW5jZWxBY3RpdmVBY3Rpdml0eSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBtYXREaWFsb2dSZWYua2V5ZG93bkV2ZW50cygpLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgICBpZiAodGhpcy5jYW5DbG9zZShvcHRpb25zKSkge1xuICAgICAgICAgIGFjdGl2aXR5Q29udGFpbmVyLmNhbmNlbEFjdGl2ZUFjdGl2aXR5KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBtYXREaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocHJvbWlzZUFscmVhZHlGaW5pc2hlZCA9PiB7XG4gICAgICBpZiAoYWN0aXZpdHlDb250YWluZXIuaXNBY3RpdmUoKSkge1xuICAgICAgICBhY3Rpdml0eUNvbnRhaW5lci5jYW5jZWxBY3RpdmVBY3Rpdml0eSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5hY3Rpdml0eUNvbnRhaW5lciA9IG51bGw7XG4gICAgfSk7XG4gICAgbWF0RGlhbG9nUmVmLnVwZGF0ZVNpemUoKTtcbiAgICBtYXREaWFsb2dSZWYuYWZ0ZXJPcGVuZWQoKS5zdWJzY3JpYmUocHJvbWlzZUFscmVhZHlGaW5pc2hlZCA9PiB7XG4gICAgICBtYXREaWFsb2dSZWYudXBkYXRlU2l6ZSgpO1xuICAgICAgdGhpcy5hY3Rpdml0eUNvbnRhaW5lci5ub3RpZnlSZWFkeSh0cnVlKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBhY3Rpdml0eVJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgY2FuQ2xvc2Uob3B0aW9uczogSW50ZXJhY3Rpb25Db250ZXh0Lk9wdGlvbnMpIHtcbiAgICBjb25zdCBkaXNhYmxlQ2xvc2UgPSBPcHRzLmdldChvcHRpb25zKS5nZXRPcHRpb25hbCgnZGlzYWJsZUNsb3NlJywgZmFsc2UpO1xuICAgIHJldHVybiB0aGlzLmFjdGl2aXR5Q29udGFpbmVyLmlzQWN0aXZlKCkgJiYgKCF0aGlzLmFjdGl2aXR5Q29udGFpbmVyLmRpc2FibGVDbG9zZSAmJiAhZGlzYWJsZUNsb3NlKTtcbiAgfVxufVxuIl19
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLWludGVyYWN0aW9uLWNvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdWktcG93ZXJ1cHMvc3JjL2xpYi9pbnRlcmFjdGlvbi9zZXJ2aWNlcy9tYXQtZGlhbG9nLWludGVyYWN0aW9uL2RpYWxvZy1pbnRlcmFjdGlvbi1jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBNkIsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkYsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RCxPQUFPLEVBQUMsMEJBQTBCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUc5RSxPQUFPLEVBQUMsMEJBQTBCLEVBQUMsTUFBTSxrRUFBa0UsQ0FBQztBQUk1RyxNQUFNLE9BQU8sd0JBQXlCLFNBQVEsMEJBQTBCO0lBTWpEO0lBQ1E7SUFDQTtJQUNSO0lBUGIsT0FBTyxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztJQUNqQyxtQkFBbUIsQ0FBeUM7SUFDNUQsaUJBQWlCLENBQXdEO0lBRWpGLFlBQXFCLFVBQWtCLEVBQ1YsR0FBMkIsRUFDM0IsYUFBd0IsRUFDaEMsTUFBdUI7UUFDMUMsS0FBSyxFQUFFLENBQUM7UUFKVyxlQUFVLEdBQVYsVUFBVSxDQUFRO1FBQ1YsUUFBRyxHQUFILEdBQUcsQ0FBd0I7UUFDM0Isa0JBQWEsR0FBYixhQUFhLENBQVc7UUFDaEMsV0FBTSxHQUFOLE1BQU0sQ0FBaUI7UUFFMUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsb0JBQW9CO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDdkQsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLElBQUksQ0FBQyxR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QUFpQixDQUFDLG9CQUFvQixFQUFFLENBQUM7YUFDMUM7WUFDRCx5RkFBeUY7WUFDekYsK0VBQStFO1lBQy9FLElBQUksSUFBSSxDQUFDLGlCQUFpQixLQUFLLGlCQUFpQixFQUFFO2dCQUNoRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO2FBQy9CO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxZQUFZLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDMUIsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFO1lBQzVELFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUMxQixpQkFBaUIsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDO0lBRU8sUUFBUSxDQUFDLGlCQUF3RSxFQUFFLE9BQW1DO1FBQzVILE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMxRSxPQUFPLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM1RixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ0NvbmZpZywgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IENvbnN0cnVjdGFibGUsIERpc3Bvc2FibGUsIEdhcmJhZ2VDb2xsZWN0b3IsIGxhbmcgfSBmcm9tICdAY29vbG9uL3BlY3Rpbic7XG5pbXBvcnQgeyBhc3NlcnQsIE9wdHMgfSBmcm9tICdAY29vbG9uL3R5cGVzY3JpcHQtdXRpbGl0aWVzJztcbmltcG9ydCB7QWJzdHJhY3RJbnRlcmFjdGlvbkNvbnRleHR9IGZyb20gJy4uLy4uL2Fic3RyYWN0LWludGVyYWN0aW9uLWNvbnRleHQnO1xuaW1wb3J0IHR5cGUge0FjdGl2aXR5fSBmcm9tICcuLi8uLi9hY3Rpdml0eSc7XG5pbXBvcnQgdHlwZSB7QWN0aXZpdHlSZWZ9IGZyb20gJy4uLy4uL2FjdGl2aXR5LXJlZic7XG5pbXBvcnQge0FjdGl2aXR5Q29udGFpbmVyQ29tcG9uZW50fSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2FjdGl2aXR5LWNvbnRhaW5lci9hY3Rpdml0eS1jb250YWluZXIuY29tcG9uZW50JztcbmltcG9ydCB0eXBlIHtJbnRlcmFjdGlvbkNvbnRleHR9IGZyb20gJy4uLy4uL2ludGVyYWN0aW9uLWNvbnRleHQnO1xuaW1wb3J0IHR5cGUge0ludGVyYWN0aW9uU2VydmljZX0gZnJvbSAnLi4vaW50ZXJhY3Rpb24uc2VydmljZSc7XG5cbmV4cG9ydCBjbGFzcyBEaWFsb2dJbnRlcmFjdGlvbkNvbnRleHQgZXh0ZW5kcyBBYnN0cmFjdEludGVyYWN0aW9uQ29udGV4dCB7XG5cbiAgcHJpdmF0ZSBnYXJiYWdlID0gbmV3IEdhcmJhZ2VDb2xsZWN0b3IoKTtcbiAgcHJpdmF0ZSBfY3VycmVudEFjdGl2aXR5UmVmOiBBY3Rpdml0eVJlZjx1bmtub3duLCB1bmtub3duLCB1bmtub3duPjtcbiAgcHJpdmF0ZSBhY3Rpdml0eUNvbnRhaW5lcjogQWN0aXZpdHlDb250YWluZXJDb21wb25lbnQ8dW5rbm93biwgdW5rbm93biwgdW5rbm93bj47XG5cbiAgY29uc3RydWN0b3IocmVhZG9ubHkgaWRlbnRpZmllcjogc3RyaW5nLFxuICAgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGFwaTogSW50ZXJhY3Rpb25TZXJ2aWNlLkFwaSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBkaWFsb2dTZXJ2aWNlOiBNYXREaWFsb2csXG4gICAgICAgICAgICAgIHJlYWRvbmx5IGNvbmZpZzogTWF0RGlhbG9nQ29uZmlnKSB7XG4gICAgc3VwZXIoKTtcbiAgICBhc3NlcnQubm90TmlsKGRpYWxvZ1NlcnZpY2UpO1xuICB9XG5cbiAgY2FuY2VsQWN0aXZlQWN0aXZpdHkoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZpdHlDb250YWluZXIuY2FuY2VsQWN0aXZlQWN0aXZpdHkoKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNBY3RpdmUoKSkge1xuICAgICAgbGFuZy5pbGxlZ2FsU3RhdGUoJ0Rpc3Bvc2UgY2FsbGVkIHdoaWxlIGFjdGl2ZS4nKTtcbiAgICB9XG4gICAgdGhpcy5nYXJiYWdlLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHJlZ2lzdGVyRGlzcG9zYWJsZTxUIGV4dGVuZHMgRGlzcG9zYWJsZT4oZGlzcG9zYWJsZTogVCk6IFQge1xuICAgIHJldHVybiB0aGlzLmdhcmJhZ2UucmVnaXN0ZXJEaXNwb3NhYmxlKGRpc3Bvc2FibGUpO1xuICB9XG5cbiAgaXNBY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5hY3Rpdml0eUNvbnRhaW5lciAmJiB0aGlzLmFjdGl2aXR5Q29udGFpbmVyLmlzQWN0aXZlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlQW5kTGF1bmNoQWN0aXZpdHk8RCwgUiwgRT4oYWN0aXZpdHlUeXBlOiBDb25zdHJ1Y3RhYmxlPEFjdGl2aXR5PEQsIFIsIEU+PiwgZGF0YTogRCwgb3B0aW9ucz86IEludGVyYWN0aW9uQ29udGV4dC5PcHRpb25zKTogUHJvbWlzZTxSPiB7XG4gICAgYXNzZXJ0LmlzTmlsKHRoaXMuX2N1cnJlbnRBY3Rpdml0eVJlZik7XG5cbiAgICBjb25zdCBlbmFibGVDbG9zZU9uQmFja2Ryb3BDbGljayA9IE9wdHMuZ2V0KG9wdGlvbnMpLmdldE9wdGlvbmFsKCdlbmFibGVDbG9zZU9uQmFja2Ryb3BDbGljaycsIGZhbHNlKTtcbiAgICBjb25zdCBjb25maWc6IE1hdERpYWxvZ0NvbmZpZyA9IHtcbiAgICAgIC4uLnRoaXMuY29uZmlnLFxuICAgICAgLi4ue1xuICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsIC8vIHdlJ2xsIGhhbmRsZSB0aGlzIG91cnNlbHZlc1xuICAgICAgICBwYW5lbENsYXNzOiAnZGlhbG9nLWludGVyYWN0aW9uLWNvbnRleHQnXG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBtYXREaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihBY3Rpdml0eUNvbnRhaW5lckNvbXBvbmVudCwgY29uZmlnKSBhcyBNYXREaWFsb2dSZWY8QWN0aXZpdHlDb250YWluZXJDb21wb25lbnQ8RCwgUiwgRT4+O1xuICAgIC8vIEV2ZXJ5dGhpbmcgYmVsb3cgd29ya3Mgb24gdGhpcyBkaWFsb2cncyBvd24gY29udGFpbmVyLCBuZXZlciB0aGUgYWN0aXZpdHlDb250YWluZXIgZmllbGQuXG4gICAgLy8gVGhlIGZpZWxkIHRyYWNrcyB0aGUgKmN1cnJlbnQqIGRpYWxvZywgYW5kIHRoZSBuZXh0IG9uZSBjYW4gY2xhaW0gaXQgd2hpbGUgdGhpcyBvbmUgaXMgc3RpbGxcbiAgICAvLyBjbG9zaW5nOiBNYXREaWFsb2cncyBleGl0IGFuaW1hdGlvbiAoNzVtcykgaXMgc2hvcnRlciB0aGFuIGl0cyBlbnRlciAoMTUwbXMpLCBzbyBhIGRpYWxvZ1xuICAgIC8vIG9wZW5lZCBhcyB0aGlzIG9uZSBjbG9zZXMgc2VlcyB0aGlzIG9uZSdzIGFmdGVyQ2xvc2VkIGxhbmQgYmVmb3JlIGl0cyBvd24gYWZ0ZXJPcGVuZWQuXG4gICAgY29uc3QgYWN0aXZpdHlDb250YWluZXIgPSB0aGlzLmFjdGl2aXR5Q29udGFpbmVyID0gbWF0RGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlO1xuICAgIGFjdGl2aXR5Q29udGFpbmVyLmluaXRpYWxpc2UodGhpcy5pZGVudGlmaWVyLCB0aGlzLmFwaSk7XG4gICAgY29uc3QgYWN0aXZpdHlSZXN1bHQgPSBhY3Rpdml0eUNvbnRhaW5lci5zdGFydEFjdGl2aXR5KGFjdGl2aXR5VHlwZSwgZGF0YSk7XG5cbiAgICAvLyBUZWFyIHRoZSBvdmVybGF5IGRvd24gdGhlIG1vbWVudCB0aGUgYWN0aXZpdHkgY29tcGxldGVzIOKAlCBkZWNvdXBsZWQgZnJvbSByb3V0ZSBzeW5jLiBUaGVcbiAgICAvLyByb3V0ZSBzeW5jIHN0aWxsIHJ1bnMgKHZpYSBhY3Rpdml0eVJlc3VsdCAvIHdhaXRBY3Rpdml0aWVzU3luY2hyb25pc2VkKSBidXQgY2FuIHdlZGdlIHVuZGVyXG4gICAgLy8gc29tZSBicm93c2VyL2V4dGVuc2lvbiBjb21iaW5hdGlvbnM7IGdhdGluZyBjbG9zZSgpIG9uIGl0IHdvdWxkIGxlYXZlIGEgc3RyYW5kZWQgYmFja2Ryb3AuXG4gICAgYWN0aXZpdHlDb250YWluZXIub25jZUluYWN0aXZlKCgpID0+IG1hdERpYWxvZ1JlZi5jbG9zZSgpKTtcbiAgICAvLyBCYWNrc3RvcDogYWxzbyBjbG9zZSB3aGVuIHRoZSAocm91dGUtc3luY2VkKSByZXN1bHQgc2V0dGxlcywgaW4gY2FzZSB0aGUgaW5hY3RpdmUgc2lnbmFsIGlzXG4gICAgLy8gZXZlciBtaXNzZWQuIE1hdERpYWxvZ1JlZi5jbG9zZSgpIGlzIGlkZW1wb3RlbnQsIHNvIGEgc2Vjb25kIGNhbGwgaXMgYSBoYXJtbGVzcyBuby1vcC5cbiAgICAvLyB0aGVuKGNsb3NlLCBjbG9zZSksIG5vdCBmaW5hbGx5KGNsb3NlKTogZmluYWxseSdzIHByb21pc2UgcmUtcmVqZWN0cyBvbiBhIGNhbmNlbCBhbmQgbm90aGluZ1xuICAgIC8vIGhvbGRzIGl0LiB6b25lLmpzIDAuMTMgaGFwcGVucyBub3QgdG8gcmVwb3J0IHRoYXQsIGJ1dCBuYXRpdmUgcHJvbWlzZXMgKHpvbmVsZXNzKSB3b3VsZC5cbiAgICBjb25zdCBjbG9zZSA9ICgpID0+IG1hdERpYWxvZ1JlZi5jbG9zZSgpO1xuICAgIGFjdGl2aXR5UmVzdWx0LnRoZW4oY2xvc2UsIGNsb3NlKTtcbiAgICAvLyB3ZSBuZWVkIHRvIGNoZWNrIGlmIG91ciBvbkRvbmUvb25DYW5jZWwgbWV0aG9kcyBhYm92ZSB3ZSBjYWxsZWQgb3IgaWYgd2Ugd2VyZVxuICAgIC8vIGNsb3NlZCBieSB0aGUgdXNlciBjbGlja2luZyB0aGUgYmFja2Ryb3AuICBJZiB0aGUgbGF0ZXIgdGhlbiB3ZSBuZWVkIHRvIGNhbmNlbCBvdXJcbiAgICAvLyBhY3Rpdml0eS5cbiAgICBpZiAoZW5hYmxlQ2xvc2VPbkJhY2tkcm9wQ2xpY2spIHtcbiAgICAgIG1hdERpYWxvZ1JlZi5iYWNrZHJvcENsaWNrKCkuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY2FuQ2xvc2UoYWN0aXZpdHlDb250YWluZXIsIG9wdGlvbnMpKSB7XG4gICAgICAgICAgYWN0aXZpdHlDb250YWluZXIuY2FuY2VsQWN0aXZlQWN0aXZpdHkoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbWF0RGlhbG9nUmVmLmtleWRvd25FdmVudHMoKS5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgaWYgKHRoaXMuY2FuQ2xvc2UoYWN0aXZpdHlDb250YWluZXIsIG9wdGlvbnMpKSB7XG4gICAgICAgICAgYWN0aXZpdHlDb250YWluZXIuY2FuY2VsQWN0aXZlQWN0aXZpdHkoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIG1hdERpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShwcm9taXNlQWxyZWFkeUZpbmlzaGVkID0+IHtcbiAgICAgIGlmIChhY3Rpdml0eUNvbnRhaW5lci5pc0FjdGl2ZSgpKSB7XG4gICAgICAgIGFjdGl2aXR5Q29udGFpbmVyLmNhbmNlbEFjdGl2ZUFjdGl2aXR5KCk7XG4gICAgICB9XG4gICAgICAvLyBSZWxlYXNlIHRoZSBmaWVsZCBvbmx5IGlmIGl0J3Mgc3RpbGwgb3VyczogbnVsbGluZyBhIHN1Y2Nlc3NvcidzIHdvdWxkIG9ycGhhbiB0aGUgbGl2ZVxuICAgICAgLy8gZGlhbG9nIChpc0FjdGl2ZSgpIGZhbHNlLCBpdHMgYWZ0ZXJPcGVuZWQgYW5kIEVzY2FwZSBoYW5kbGVycyByZWFkaW5nIG51bGwpLlxuICAgICAgaWYgKHRoaXMuYWN0aXZpdHlDb250YWluZXIgPT09IGFjdGl2aXR5Q29udGFpbmVyKSB7XG4gICAgICAgIHRoaXMuYWN0aXZpdHlDb250YWluZXIgPSBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuICAgIG1hdERpYWxvZ1JlZi51cGRhdGVTaXplKCk7XG4gICAgbWF0RGlhbG9nUmVmLmFmdGVyT3BlbmVkKCkuc3Vic2NyaWJlKHByb21pc2VBbHJlYWR5RmluaXNoZWQgPT4ge1xuICAgICAgbWF0RGlhbG9nUmVmLnVwZGF0ZVNpemUoKTtcbiAgICAgIGFjdGl2aXR5Q29udGFpbmVyLm5vdGlmeVJlYWR5KHRydWUpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGFjdGl2aXR5UmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBjYW5DbG9zZShhY3Rpdml0eUNvbnRhaW5lcjogQWN0aXZpdHlDb250YWluZXJDb21wb25lbnQ8dW5rbm93biwgdW5rbm93biwgdW5rbm93bj4sIG9wdGlvbnM6IEludGVyYWN0aW9uQ29udGV4dC5PcHRpb25zKSB7XG4gICAgY29uc3QgZGlzYWJsZUNsb3NlID0gT3B0cy5nZXQob3B0aW9ucykuZ2V0T3B0aW9uYWwoJ2Rpc2FibGVDbG9zZScsIGZhbHNlKTtcbiAgICByZXR1cm4gYWN0aXZpdHlDb250YWluZXIuaXNBY3RpdmUoKSAmJiAoIWFjdGl2aXR5Q29udGFpbmVyLmRpc2FibGVDbG9zZSAmJiAhZGlzYWJsZUNsb3NlKTtcbiAgfVxufVxuIl19
@@ -15239,29 +15239,36 @@ class DialogInteractionContext extends AbstractInteractionContext {
15239
15239
  }
15240
15240
  };
15241
15241
  const matDialogRef = this.dialogService.open(ActivityContainerComponent, config);
15242
+ // Everything below works on this dialog's own container, never the activityContainer field.
15243
+ // The field tracks the *current* dialog, and the next one can claim it while this one is still
15244
+ // closing: MatDialog's exit animation (75ms) is shorter than its enter (150ms), so a dialog
15245
+ // opened as this one closes sees this one's afterClosed land before its own afterOpened.
15242
15246
  const activityContainer = this.activityContainer = matDialogRef.componentInstance;
15243
- this.activityContainer.initialise(this.identifier, this.api);
15244
- const activityResult = this.activityContainer.startActivity(activityType, data);
15247
+ activityContainer.initialise(this.identifier, this.api);
15248
+ const activityResult = activityContainer.startActivity(activityType, data);
15245
15249
  // Tear the overlay down the moment the activity completes — decoupled from route sync. The
15246
15250
  // route sync still runs (via activityResult / waitActivitiesSynchronised) but can wedge under
15247
15251
  // some browser/extension combinations; gating close() on it would leave a stranded backdrop.
15248
15252
  activityContainer.onceInactive(() => matDialogRef.close());
15249
15253
  // Backstop: also close when the (route-synced) result settles, in case the inactive signal is
15250
15254
  // ever missed. MatDialogRef.close() is idempotent, so a second call is a harmless no-op.
15251
- activityResult.finally(() => matDialogRef.close());
15255
+ // then(close, close), not finally(close): finally's promise re-rejects on a cancel and nothing
15256
+ // holds it. zone.js 0.13 happens not to report that, but native promises (zoneless) would.
15257
+ const close = () => matDialogRef.close();
15258
+ activityResult.then(close, close);
15252
15259
  // we need to check if our onDone/onCancel methods above we called or if we were
15253
15260
  // closed by the user clicking the backdrop. If the later then we need to cancel our
15254
15261
  // activity.
15255
15262
  if (enableCloseOnBackdropClick) {
15256
15263
  matDialogRef.backdropClick().subscribe(event => {
15257
- if (this.canClose(options)) {
15264
+ if (this.canClose(activityContainer, options)) {
15258
15265
  activityContainer.cancelActiveActivity();
15259
15266
  }
15260
15267
  });
15261
15268
  }
15262
15269
  matDialogRef.keydownEvents().subscribe(event => {
15263
15270
  if (event.key === 'Escape') {
15264
- if (this.canClose(options)) {
15271
+ if (this.canClose(activityContainer, options)) {
15265
15272
  activityContainer.cancelActiveActivity();
15266
15273
  }
15267
15274
  }
@@ -15270,18 +15277,22 @@ class DialogInteractionContext extends AbstractInteractionContext {
15270
15277
  if (activityContainer.isActive()) {
15271
15278
  activityContainer.cancelActiveActivity();
15272
15279
  }
15273
- this.activityContainer = null;
15280
+ // Release the field only if it's still ours: nulling a successor's would orphan the live
15281
+ // dialog (isActive() false, its afterOpened and Escape handlers reading null).
15282
+ if (this.activityContainer === activityContainer) {
15283
+ this.activityContainer = null;
15284
+ }
15274
15285
  });
15275
15286
  matDialogRef.updateSize();
15276
15287
  matDialogRef.afterOpened().subscribe(promiseAlreadyFinished => {
15277
15288
  matDialogRef.updateSize();
15278
- this.activityContainer.notifyReady(true);
15289
+ activityContainer.notifyReady(true);
15279
15290
  });
15280
15291
  return activityResult;
15281
15292
  }
15282
- canClose(options) {
15293
+ canClose(activityContainer, options) {
15283
15294
  const disableClose = Opts.get(options).getOptional('disableClose', false);
15284
- return this.activityContainer.isActive() && (!this.activityContainer.disableClose && !disableClose);
15295
+ return activityContainer.isActive() && (!activityContainer.disableClose && !disableClose);
15285
15296
  }
15286
15297
  }
15287
15298