@wavemaker/app-ng-runtime 11.11.5-rc.6185 → 11.11.6-rc.6188

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.
Files changed (29) hide show
  1. package/components/base/bundles/index.umd.js +11 -1
  2. package/components/base/esm2022/widgets/common/redraw/redrawable.directive.mjs +12 -2
  3. package/components/base/fesm2022/index.mjs +11 -1
  4. package/components/base/fesm2022/index.mjs.map +1 -1
  5. package/components/basic/search/bundles/index.umd.js +2 -2
  6. package/components/basic/search/esm2022/search.component.mjs +3 -3
  7. package/components/basic/search/fesm2022/index.mjs +2 -2
  8. package/components/basic/search/fesm2022/index.mjs.map +1 -1
  9. package/components/data/pagination/bundles/index.umd.js +3 -1
  10. package/components/data/pagination/esm2022/pagination.component.mjs +4 -2
  11. package/components/data/pagination/fesm2022/index.mjs +3 -1
  12. package/components/data/pagination/fesm2022/index.mjs.map +1 -1
  13. package/components/dialogs/default/base-dialog.d.ts +1 -0
  14. package/components/dialogs/default/bundles/index.umd.js +15 -29
  15. package/components/dialogs/default/esm2022/base-dialog.mjs +9 -23
  16. package/components/dialogs/default/esm2022/dialog-header/dialog-header.component.mjs +4 -5
  17. package/components/dialogs/default/fesm2022/index.mjs +11 -26
  18. package/components/dialogs/default/fesm2022/index.mjs.map +1 -1
  19. package/components/dialogs/design-dialog/bundles/index.umd.js +28 -12
  20. package/components/dialogs/design-dialog/esm2022/dialog.component.mjs +29 -13
  21. package/components/dialogs/design-dialog/fesm2022/index.mjs +28 -12
  22. package/components/dialogs/design-dialog/fesm2022/index.mjs.map +1 -1
  23. package/components/dialogs/iframe-dialog/bundles/index.umd.js +33 -16
  24. package/components/dialogs/iframe-dialog/esm2022/iframe-dialog.component.mjs +32 -15
  25. package/components/dialogs/iframe-dialog/fesm2022/index.mjs +31 -14
  26. package/components/dialogs/iframe-dialog/fesm2022/index.mjs.map +1 -1
  27. package/npm-shrinkwrap.json +2 -2
  28. package/package-lock.json +2 -2
  29. package/package.json +1 -1
@@ -1,8 +1,8 @@
1
1
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('ngx-bootstrap/modal'), require('@wm/core'), require('@wm/components/base'), require('@angular/common'), require('@angular/router'), require('@wavemaker/focus-trap')) :
3
- typeof define === 'function' && define.amd ? define(['exports', '@angular/core', 'ngx-bootstrap/modal', '@wm/core', '@wm/components/base', '@angular/common', '@angular/router', '@wavemaker/focus-trap'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.wm = global.wm || {}, global.wm.components = global.wm.components || {}, global.wm.components.dialogs = {}), global.ng.core, global.modal, global.wm.core, global.wm.components.base, global.ng.common, global.ng.router, global.focusTrap));
5
- })(this, (function (exports, i0, i1, core, i2, i1$1, router, focusTrap) { 'use strict';
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('ngx-bootstrap/modal'), require('@wm/core'), require('@wm/components/base'), require('@angular/common'), require('@angular/router')) :
3
+ typeof define === 'function' && define.amd ? define(['exports', '@angular/core', 'ngx-bootstrap/modal', '@wm/core', '@wm/components/base', '@angular/common', '@angular/router'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.wm = global.wm || {}, global.wm.components = global.wm.components || {}, global.wm.components.dialogs = {}), global.ng.core, global.modal, global.wm.core, global.wm.components.base, global.ng.common, global.ng.router));
5
+ })(this, (function (exports, i0, i1, core, i2, i1$1, router) { 'use strict';
6
6
 
7
7
  function _interopNamespaceDefault(e) {
8
8
  var n = Object.create(null);
@@ -132,9 +132,6 @@
132
132
  }, {
133
133
  type: i0.Optional
134
134
  }] }], null); })();
135
- const focusTrapObj = {
136
- activeElement: null
137
- };
138
135
  const invokeOpenedCallback = (ref) => {
139
136
  if (ref) {
140
137
  setTimeout(() => {
@@ -144,19 +141,12 @@
144
141
  $('body > modal-container > div').wrap('<' + root + '/>');
145
142
  }
146
143
  ref.invokeEventCallback('opened', { $event: { type: 'opened' } });
147
- // focusTrapObj will create focus trap for the respective dialog according to the titleId assigned to them which is unique.
144
+ // Focusing the first focusable element when the dialog is opened
148
145
  const container = $('[aria-labelledby= ' + ref.titleId + ']')[0];
149
146
  const keyboardFocusableElements = [container.querySelectorAll('a, button, input, textarea, select, details, iframe, embed, object, summary dialog, audio[controls], video[controls], [contenteditable], [tabindex]:not([tabindex="-1"])')].filter(el => {
150
147
  return (!el[0].hasAttribute('disabled') && !el[0].hasAttribute('hidden'));
151
148
  })[0];
152
149
  $(keyboardFocusableElements[0]).focus();
153
- focusTrapObj[ref.titleId] = focusTrap.createFocusTrap(container, {
154
- onActivate: () => container.classList.add('is-active'),
155
- onDeactivate: () => container.classList.remove('is-active'),
156
- allowOutsideClick: true,
157
- setReturnFocus: focusTrapObj.activeElement,
158
- });
159
- focusTrapObj[ref.titleId].activate();
160
150
  const openedDialogs = ref.dialogService.getOpenedDialogs();
161
151
  if (openedDialogs.length > 1) {
162
152
  let zIndex = Number($("[aria-labelledby= " + openedDialogs[openedDialogs.length - 2].titleId + "]").css('z-index'));
@@ -182,6 +172,7 @@
182
172
  super(inj, config, explicitContext);
183
173
  this.modalOptions = modalOptions;
184
174
  this.titleId = 'wmdialog-' + core.generateGUId();
175
+ this.dialogOriginFocusStack = [];
185
176
  this.dialogService = inj.get(core.AbstractDialogService);
186
177
  this.bsModal = inj.get(i1.BsModalService);
187
178
  const router$1 = inj.get(router.Router);
@@ -194,9 +185,7 @@
194
185
  this.dialogId = id;
195
186
  }
196
187
  }),
197
- this.bsModal.onShow.subscribe(() => {
198
- focusTrapObj.activeElement = document.activeElement;
199
- }),
188
+ this.bsModal.onShow.subscribe(() => { }),
200
189
  this.bsModal.onHidden.subscribe((closeReason) => {
201
190
  let ref = this.dialogService.getDialogRefFromClosedDialogs();
202
191
  if (this.dialogId && closeReason?.id === this.dialogId) {
@@ -216,13 +205,7 @@
216
205
  }
217
206
  }
218
207
  }),
219
- this.bsModal.onHide.subscribe(() => {
220
- // Will de-activate focus trap for the respective dialog when they are closed.
221
- const ref = this.dialogService.getDialogRefFromClosedDialogs();
222
- if (ref && focusTrapObj[ref.titleId] !== undefined) {
223
- focusTrapObj[ref.titleId].deactivate();
224
- }
225
- }),
208
+ this.bsModal.onHide.subscribe(() => { }),
226
209
  router$1.events.subscribe(e => {
227
210
  if (e instanceof router.NavigationEnd) {
228
211
  this.close();
@@ -253,6 +236,7 @@
253
236
  // extend the context with the initState
254
237
  Object.assign(this.context, initState);
255
238
  this.modalOptions.ariaLabelledBy = this.titleId;
239
+ this.dialogOriginFocusStack.push(document.activeElement);
256
240
  this.dialogRef = this.bsModal.show(this.getTemplateRef(), this.modalOptions);
257
241
  // Fix for [WMS-23948]: Focus moving out of active Dialog widget
258
242
  if (this.dialogService.getOpenedDialogs().length === 1 && (core.isMobile())) {
@@ -269,8 +253,11 @@
269
253
  // remove the popovers in the page to avoid the overlap with dialog
270
254
  // closePopover(this.$element); Commenting this line because it is causing regression(if we have dialog inside popover as partail content, then the dialog close is not working because on closing the popover the partial get destroyed.)
271
255
  if (this.dialogRef) {
256
+ const lastDialogOrigin = this.dialogOriginFocusStack.pop();
272
257
  this.dialogService.addToClosedDialogs(this);
273
258
  this.dialogRef.hide();
259
+ // Return focus to the originating element upon dialog closure
260
+ lastDialogOrigin?.focus();
274
261
  }
275
262
  }
276
263
  /**
@@ -331,8 +318,7 @@
331
318
  i0__namespace.ɵɵelementEnd();
332
319
  } if (rf & 2) {
333
320
  const ctx_r1 = i0__namespace.ɵɵnextContext();
334
- i0__namespace.ɵɵpropertyInterpolate("title", ctx_r1.dialogRef.appLocale.LABEL_CLOSE);
335
- i0__namespace.ɵɵattribute("aria-label", "Close " + (ctx_r1.title ? ctx_r1.title : "") + " dialog");
321
+ i0__namespace.ɵɵattribute("aria-label", "Close " + (ctx_r1.title ? ctx_r1.title : "") + " dialog")("title", ctx_r1.title ? "Close " + ctx_r1.title + " dialog" : ctx_r1.dialogRef.appLocale.LABEL_CLOSE);
336
322
  } }
337
323
  function DialogHeaderComponent_Case_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
338
324
  i0__namespace.ɵɵelementContainer(0);
@@ -476,7 +462,7 @@
476
462
  this.dialogRef.close();
477
463
  }
478
464
  static { this.ɵfac = function DialogHeaderComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || DialogHeaderComponent)(i0__namespace.ɵɵdirectiveInject(i0__namespace.ElementRef), i0__namespace.ɵɵdirectiveInject(i2.DialogRef)); }; }
479
- static { this.ɵcmp = /*@__PURE__*/ i0__namespace.ɵɵdefineComponent({ type: DialogHeaderComponent, selectors: [["div", "wmDialogHeader", ""]], inputs: { iconwidth: "iconwidth", iconheight: "iconheight", iconmargin: "iconmargin", iconclass: "iconclass", iconurl: "iconurl", closable: "closable", heading: "heading", headinglevel: "headinglevel", subheading: "subheading", titleid: "titleid", title: "title" }, standalone: true, features: [i0__namespace.ɵɵStandaloneFeature], attrs: _c0, decls: 10, vars: 2, consts: [["headerTemplate", ""], [1, "app-dialog-close", "close", 3, "title"], [1, "app-dialog-title", "modal-title"], [1, "app-dialog-close", "close", 3, "click", "title"], ["aria-hidden", "true", 1, "app-icon", "wi", "wi-clear"], [4, "ngTemplateOutlet"], [3, "ngClass", "ngStyle"], ["data-identifier", "img", 3, "src", "ngStyle"], [1, "dialog-heading", 3, "textContent", "id"], [1, "dialog-sub-heading", 3, "title", "textContent"]], template: function DialogHeaderComponent_Template(rf, ctx) { if (rf & 1) {
465
+ static { this.ɵcmp = /*@__PURE__*/ i0__namespace.ɵɵdefineComponent({ type: DialogHeaderComponent, selectors: [["div", "wmDialogHeader", ""]], inputs: { iconwidth: "iconwidth", iconheight: "iconheight", iconmargin: "iconmargin", iconclass: "iconclass", iconurl: "iconurl", closable: "closable", heading: "heading", headinglevel: "headinglevel", subheading: "subheading", titleid: "titleid", title: "title" }, standalone: true, features: [i0__namespace.ɵɵStandaloneFeature], attrs: _c0, decls: 10, vars: 2, consts: [["headerTemplate", ""], [1, "app-dialog-close", "close"], [1, "app-dialog-title", "modal-title"], [1, "app-dialog-close", "close", 3, "click"], ["aria-hidden", "true", 1, "app-icon", "wi", "wi-clear"], [4, "ngTemplateOutlet"], [3, "ngClass", "ngStyle"], ["data-identifier", "img", 3, "src", "ngStyle"], [1, "dialog-heading", 3, "textContent", "id"], [1, "dialog-sub-heading", 3, "title", "textContent"]], template: function DialogHeaderComponent_Template(rf, ctx) { if (rf & 1) {
480
466
  i0__namespace.ɵɵtemplate(0, DialogHeaderComponent_Conditional_0_Template, 2, 2, "button", 1)(1, DialogHeaderComponent_Case_1_Template, 2, 1, "h1", 2)(2, DialogHeaderComponent_Case_2_Template, 2, 1, "h2", 2)(3, DialogHeaderComponent_Case_3_Template, 2, 1, "h3", 2)(4, DialogHeaderComponent_Case_4_Template, 2, 1, "h4", 2)(5, DialogHeaderComponent_Case_5_Template, 2, 1, "h5", 2)(6, DialogHeaderComponent_Case_6_Template, 2, 1, "h6", 2)(7, DialogHeaderComponent_Case_7_Template, 2, 1, "h4", 2)(8, DialogHeaderComponent_ng_template_8_Template, 4, 5, "ng-template", null, 0, i0__namespace.ɵɵtemplateRefExtractor);
481
467
  } if (rf & 2) {
482
468
  let tmp_2_0;
@@ -487,7 +473,7 @@
487
473
  }
488
474
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0__namespace.ɵsetClassMetadata(DialogHeaderComponent, [{
489
475
  type: i0.Component,
490
- args: [{ standalone: true, imports: [i1$1.CommonModule, i2.WmComponentsModule], selector: 'div[wmDialogHeader]', template: "@if (isClosable) {\n <button (click)=\"closeDialog();\"\n [attr.aria-label]=\"'Close ' + (title ? title : '') + ' dialog'\" class=\"app-dialog-close close\" title=\"{{dialogRef.appLocale.LABEL_CLOSE}}\" >\n <span class=\"app-icon wi wi-clear\" aria-hidden=\"true\"></span>\n </button>\n}\n\n@switch (headinglevel) {\n @case ('h1') {\n <h1 class=\"app-dialog-title modal-title\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </h1>\n }\n @case ('h2') {\n <h2 class=\"app-dialog-title modal-title\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </h2>\n }\n @case ('h3') {\n <h3 class=\"app-dialog-title modal-title\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </h3>\n }\n @case ('h4') {\n <h4 class=\"app-dialog-title modal-title\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </h4>\n }\n @case ('h5') {\n <h5 class=\"app-dialog-title modal-title\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </h5>\n }\n @case ('h6') {\n <h6 class=\"app-dialog-title modal-title\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </h6>\n }\n @default {\n <h4 class=\"app-dialog-title modal-title\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </h4>\n }\n}\n\n<ng-template #headerTemplate>\n @if (iconclass && !iconurl) {\n <i [ngClass]=\"iconclass\" [ngStyle]=\"{width: iconwidth, height: iconheight, margin: iconmargin}\"></i>\n }\n @if (iconurl) {\n <img data-identifier=\"img\" [src]=\"iconurl | image\" [ngStyle]=\"{width: iconwidth, height: iconheight, margin: iconmargin}\"/>\n }\n <span class=\"dialog-heading\" [textContent]=\"heading\" [id]=\"titleid\"></span>\n @if (subheading) {\n <span class=\"dialog-sub-heading\" [title]=\"subheading\" [textContent]=\"subheading\"></span>\n }\n</ng-template>\n" }]
476
+ args: [{ standalone: true, imports: [i1$1.CommonModule, i2.WmComponentsModule], selector: 'div[wmDialogHeader]', template: "@if (isClosable) {\n <button (click)=\"closeDialog();\"\n [attr.aria-label]=\"'Close ' + (title ? title : '') + ' dialog'\" class=\"app-dialog-close close\" [attr.title]=\"title ? 'Close ' + title + ' dialog' : dialogRef.appLocale.LABEL_CLOSE\" >\n <span class=\"app-icon wi wi-clear\" aria-hidden=\"true\"></span>\n </button>\n}\n\n@switch (headinglevel) {\n @case ('h1') {\n <h1 class=\"app-dialog-title modal-title\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </h1>\n }\n @case ('h2') {\n <h2 class=\"app-dialog-title modal-title\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </h2>\n }\n @case ('h3') {\n <h3 class=\"app-dialog-title modal-title\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </h3>\n }\n @case ('h4') {\n <h4 class=\"app-dialog-title modal-title\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </h4>\n }\n @case ('h5') {\n <h5 class=\"app-dialog-title modal-title\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </h5>\n }\n @case ('h6') {\n <h6 class=\"app-dialog-title modal-title\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </h6>\n }\n @default {\n <h4 class=\"app-dialog-title modal-title\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </h4>\n }\n}\n\n<ng-template #headerTemplate>\n @if (iconclass && !iconurl) {\n <i [ngClass]=\"iconclass\" [ngStyle]=\"{width: iconwidth, height: iconheight, margin: iconmargin}\"></i>\n }\n @if (iconurl) {\n <img data-identifier=\"img\" [src]=\"iconurl | image\" [ngStyle]=\"{width: iconwidth, height: iconheight, margin: iconmargin}\"/>\n }\n <span class=\"dialog-heading\" [textContent]=\"heading\" [id]=\"titleid\"></span>\n @if (subheading) {\n <span class=\"dialog-sub-heading\" [title]=\"subheading\" [textContent]=\"subheading\"></span>\n }\n</ng-template>\n" }]
491
477
  }], () => [{ type: i0__namespace.ElementRef }, { type: BaseDialog, decorators: [{
492
478
  type: i0.Inject,
493
479
  args: [i2.DialogRef]
@@ -3,13 +3,9 @@ import { NavigationEnd, Router } from '@angular/router';
3
3
  import { BsModalService, ModalOptions } from 'ngx-bootstrap/modal';
4
4
  import { AbstractDialogService, findRootContainer, generateGUId, isMobile } from '@wm/core';
5
5
  import { BaseComponent, WidgetConfig } from '@wm/components/base';
6
- import { createFocusTrap } from '@wavemaker/focus-trap';
7
6
  import * as i0 from "@angular/core";
8
7
  import * as i1 from "ngx-bootstrap/modal";
9
8
  const eventsRegistered = false;
10
- const focusTrapObj = {
11
- activeElement: null
12
- };
13
9
  const invokeOpenedCallback = (ref) => {
14
10
  if (ref) {
15
11
  setTimeout(() => {
@@ -19,19 +15,12 @@ const invokeOpenedCallback = (ref) => {
19
15
  $('body > modal-container > div').wrap('<' + root + '/>');
20
16
  }
21
17
  ref.invokeEventCallback('opened', { $event: { type: 'opened' } });
22
- // focusTrapObj will create focus trap for the respective dialog according to the titleId assigned to them which is unique.
18
+ // Focusing the first focusable element when the dialog is opened
23
19
  const container = $('[aria-labelledby= ' + ref.titleId + ']')[0];
24
20
  const keyboardFocusableElements = [container.querySelectorAll('a, button, input, textarea, select, details, iframe, embed, object, summary dialog, audio[controls], video[controls], [contenteditable], [tabindex]:not([tabindex="-1"])')].filter(el => {
25
21
  return (!el[0].hasAttribute('disabled') && !el[0].hasAttribute('hidden'));
26
22
  })[0];
27
23
  $(keyboardFocusableElements[0]).focus();
28
- focusTrapObj[ref.titleId] = createFocusTrap(container, {
29
- onActivate: () => container.classList.add('is-active'),
30
- onDeactivate: () => container.classList.remove('is-active'),
31
- allowOutsideClick: true,
32
- setReturnFocus: focusTrapObj.activeElement,
33
- });
34
- focusTrapObj[ref.titleId].activate();
35
24
  const openedDialogs = ref.dialogService.getOpenedDialogs();
36
25
  if (openedDialogs.length > 1) {
37
26
  let zIndex = Number($("[aria-labelledby= " + openedDialogs[openedDialogs.length - 2].titleId + "]").css('z-index'));
@@ -57,6 +46,7 @@ export class BaseDialog extends BaseComponent {
57
46
  super(inj, config, explicitContext);
58
47
  this.modalOptions = modalOptions;
59
48
  this.titleId = 'wmdialog-' + generateGUId();
49
+ this.dialogOriginFocusStack = [];
60
50
  this.dialogService = inj.get(AbstractDialogService);
61
51
  this.bsModal = inj.get(BsModalService);
62
52
  const router = inj.get(Router);
@@ -69,9 +59,7 @@ export class BaseDialog extends BaseComponent {
69
59
  this.dialogId = id;
70
60
  }
71
61
  }),
72
- this.bsModal.onShow.subscribe(() => {
73
- focusTrapObj.activeElement = document.activeElement;
74
- }),
62
+ this.bsModal.onShow.subscribe(() => { }),
75
63
  this.bsModal.onHidden.subscribe((closeReason) => {
76
64
  let ref = this.dialogService.getDialogRefFromClosedDialogs();
77
65
  if (this.dialogId && closeReason?.id === this.dialogId) {
@@ -91,13 +79,7 @@ export class BaseDialog extends BaseComponent {
91
79
  }
92
80
  }
93
81
  }),
94
- this.bsModal.onHide.subscribe(() => {
95
- // Will de-activate focus trap for the respective dialog when they are closed.
96
- const ref = this.dialogService.getDialogRefFromClosedDialogs();
97
- if (ref && focusTrapObj[ref.titleId] !== undefined) {
98
- focusTrapObj[ref.titleId].deactivate();
99
- }
100
- }),
82
+ this.bsModal.onHide.subscribe(() => { }),
101
83
  router.events.subscribe(e => {
102
84
  if (e instanceof NavigationEnd) {
103
85
  this.close();
@@ -128,6 +110,7 @@ export class BaseDialog extends BaseComponent {
128
110
  // extend the context with the initState
129
111
  Object.assign(this.context, initState);
130
112
  this.modalOptions.ariaLabelledBy = this.titleId;
113
+ this.dialogOriginFocusStack.push(document.activeElement);
131
114
  this.dialogRef = this.bsModal.show(this.getTemplateRef(), this.modalOptions);
132
115
  // Fix for [WMS-23948]: Focus moving out of active Dialog widget
133
116
  if (this.dialogService.getOpenedDialogs().length === 1 && (isMobile())) {
@@ -144,8 +127,11 @@ export class BaseDialog extends BaseComponent {
144
127
  // remove the popovers in the page to avoid the overlap with dialog
145
128
  // closePopover(this.$element); Commenting this line because it is causing regression(if we have dialog inside popover as partail content, then the dialog close is not working because on closing the popover the partial get destroyed.)
146
129
  if (this.dialogRef) {
130
+ const lastDialogOrigin = this.dialogOriginFocusStack.pop();
147
131
  this.dialogService.addToClosedDialogs(this);
148
132
  this.dialogRef.hide();
133
+ // Return focus to the originating element upon dialog closure
134
+ lastDialogOrigin?.focus();
149
135
  }
150
136
  }
151
137
  /**
@@ -195,4 +181,4 @@ export class BaseDialog extends BaseComponent {
195
181
  }, {
196
182
  type: Optional
197
183
  }] }], null); })();
198
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1kaWFsb2cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvZGlhbG9ncy9kZWZhdWx0L3NyYy9iYXNlLWRpYWxvZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQWEsUUFBUSxFQUFlLE1BQU0sZUFBZSxDQUFDO0FBQy9GLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFjLGNBQWMsRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUkvRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBeUIsTUFBTSxVQUFVLENBQUM7QUFFbkgsT0FBTyxFQUFFLGFBQWEsRUFBMEIsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDMUYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7QUFFeEQsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7QUFFL0IsTUFBTSxZQUFZLEdBQUc7SUFDakIsYUFBYSxFQUFFLElBQUk7Q0FDdEIsQ0FBQztBQUVGLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRTtJQUNqQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ04sVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNaLE1BQU0sSUFBSSxHQUFHLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM3QywyRkFBMkY7WUFDM0YsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDUCxDQUFDLENBQUMsOEJBQThCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQztZQUM5RCxDQUFDO1lBQ0QsR0FBRyxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbEUsMkhBQTJIO1lBQzNILE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxvQkFBb0IsR0FBRyxHQUFHLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRWpFLE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQ3pELDBLQUEwSyxDQUM3SyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFO2dCQUNYLE9BQU8sQ0FDSCxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDMUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFTixDQUFDLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUV4QyxZQUFZLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLGVBQWUsQ0FBQyxTQUFTLEVBQUU7Z0JBQ25ELFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUM7Z0JBQ3RELFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7Z0JBQzNELGlCQUFpQixFQUFFLElBQUk7Z0JBQ3ZCLGNBQWMsRUFBRSxZQUFZLENBQUMsYUFBYTthQUM3QyxDQUFDLENBQUM7WUFDSCxZQUFZLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMzRCxJQUFJLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzNCLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsb0JBQW9CLEdBQUcsYUFBYSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO2dCQUNwSCxDQUFDLENBQUMsb0JBQW9CLEdBQUcsR0FBRyxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDM0csQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDdEQsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztBQUNMLENBQUMsQ0FBQztBQUVGLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRTtJQUNqQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ04sR0FBRyxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzFCLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUMzRCxJQUFJLGFBQWEsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDNUIsSUFBSSxNQUFNLEdBQVEsTUFBTSxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsR0FBRyxhQUFhLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDekgsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdEQsQ0FBQztJQUNMLENBQUM7QUFDTCxDQUFDLENBQUM7QUFHRixNQUFNLE9BQWdCLFVBQVcsU0FBUSxhQUFhO0lBY2xELFlBQ0ksR0FBYSxFQUNTLE1BQXFCLEVBQ2pDLFlBQTBCLEVBQ0ksZUFBb0I7UUFFNUQsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFIMUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFSakMsWUFBTyxHQUFXLFdBQVcsR0FBRyxZQUFZLEVBQUUsQ0FBQztRQVlsRCxJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdkMsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUUvQixNQUFNLGFBQWEsR0FBbUI7WUFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO2dCQUN0QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLG1CQUFtQixFQUFFLENBQUM7Z0JBQ3JELElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDakMsMEZBQTBGO29CQUMxRixvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7Z0JBQ3ZCLENBQUM7WUFDTCxDQUFDLENBQUM7WUFDRixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUMvQixZQUFZLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUM7WUFDeEQsQ0FBQyxDQUFDO1lBQ0YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUU7Z0JBQzVDLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsNkJBQTZCLEVBQUUsQ0FBQztnQkFDN0QsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLFdBQVcsRUFBRSxFQUFFLEtBQUssSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUNyRCxHQUFHLEdBQUcsSUFBSSxDQUFDO2dCQUNmLENBQUM7cUJBQU0sSUFBSSxXQUFXLEtBQUssS0FBSyxJQUFJLFdBQVcsS0FBSyxnQkFBZ0IsRUFBRSxDQUFDO29CQUNuRSxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO2dCQUNuRCxDQUFDO2dCQUNELElBQUksR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO29CQUNmLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO29CQUNyQixxRUFBcUU7b0JBQ3JFLElBQUksQ0FBQyxhQUFhLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ2hELElBQUksQ0FBQyxhQUFhLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ2hELG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUMxQixJQUFJLEdBQUcsQ0FBQyxlQUFlLEVBQUUsQ0FBQzt3QkFDdEIsR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDO29CQUMxQixDQUFDO2dCQUNMLENBQUM7WUFDTCxDQUFDLENBQUM7WUFDRixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUMvQiwrRUFBK0U7Z0JBQy9FLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsNkJBQTZCLEVBQUUsQ0FBQztnQkFDL0QsSUFBSSxHQUFHLElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDakQsWUFBWSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDM0MsQ0FBQztZQUNMLENBQUMsQ0FBQztZQUNGLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUN4QixJQUFJLENBQUMsWUFBWSxhQUFhLEVBQUUsQ0FBQztvQkFDN0IsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNqQixDQUFDO1lBQ0wsQ0FBQyxDQUFDO1NBQ0wsQ0FBQztRQUNGLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLEVBQUU7WUFDOUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsYUFBYSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pELGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUNoRCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7O09BR0c7SUFDSSxJQUFJLENBQUMsU0FBZTtRQUV2QixtRUFBbUU7UUFDbkUsME9BQTBPO1FBRTFPLHVEQUF1RDtRQUN2RCxNQUFNLG9CQUFvQixHQUFHLENBQUMsWUFBWSxFQUFFLEVBQUU7WUFDMUMsT0FBTyxZQUFZLEtBQUssSUFBSSxDQUFDO1FBQ2pDLENBQUMsQ0FBQztRQUVGLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLENBQUM7WUFDbkUsT0FBTztRQUNYLENBQUM7UUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLHdDQUF3QztRQUN4QyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUNoRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDN0UsZ0VBQWdFO1FBQ2hFLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDckUsTUFBTSxjQUFjLEdBQUcsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0MsY0FBYyxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUNELENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksS0FBSztRQUNSLG1FQUFtRTtRQUNuRSwwT0FBME87UUFDMU8sSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1QyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzFCLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDTyxRQUFRLENBQUMsS0FBSztRQUNwQixxRkFBcUY7UUFDckYsNkVBQTZFO1FBQzdFLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRDs7T0FFRztJQUNPLFVBQVUsQ0FBQyxLQUFLO1FBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQVNTLGdCQUFnQixDQUFDLEdBQVcsRUFBRSxFQUFPLEVBQUUsRUFBUTtRQUNyRCw4QkFBOEI7UUFDOUIsb0VBQW9FO1FBQ3BFLElBQUksR0FBRyxLQUFLLE9BQU8sSUFBSSxHQUFHLEtBQUssTUFBTSxJQUFJLEdBQUcsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUMxRCxPQUFPO1FBQ1gsQ0FBQzthQUFNLElBQUksR0FBRyxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2pGLElBQUksRUFBRSxFQUFFLENBQUM7Z0JBQ0wsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsWUFBWSxHQUFHLEVBQUUsQ0FBQztZQUMxRSxDQUFDO1FBQ0wsQ0FBQztRQUNELEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFTSxXQUFXO1FBQ2QsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3hCLENBQUM7MkdBaEtpQixVQUFVLHdDQWdCaEIsWUFBWSw2Q0FFWixrQkFBa0I7dUVBbEJaLFVBQVUsV0FBVixVQUFVOztpRkFBVixVQUFVO2NBRC9CLFVBQVU7O3NCQWlCRixNQUFNO3VCQUFDLFlBQVk7O3NCQUVuQixNQUFNO3VCQUFDLGtCQUFrQjs7c0JBQUcsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIE9uRGVzdHJveSwgT3B0aW9uYWwsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQnNNb2RhbFJlZiwgQnNNb2RhbFNlcnZpY2UsIE1vZGFsT3B0aW9ucyB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQWJzdHJhY3REaWFsb2dTZXJ2aWNlLCBmaW5kUm9vdENvbnRhaW5lciwgZ2VuZXJhdGVHVUlkLCBpc01vYmlsZSwgZ2V0U2hlZXRQb3NpdGlvbkNsYXNzIH0gZnJvbSAnQHdtL2NvcmUnO1xuXG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50LCBJRGlhbG9nLCBJV2lkZ2V0Q29uZmlnLCBXaWRnZXRDb25maWcgfSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcbmltcG9ydCB7IGNyZWF0ZUZvY3VzVHJhcCB9IGZyb20gJ0B3YXZlbWFrZXIvZm9jdXMtdHJhcCc7XG5cbmNvbnN0IGV2ZW50c1JlZ2lzdGVyZWQgPSBmYWxzZTtcblxuY29uc3QgZm9jdXNUcmFwT2JqID0ge1xuICAgIGFjdGl2ZUVsZW1lbnQ6IG51bGxcbn07XG5cbmNvbnN0IGludm9rZU9wZW5lZENhbGxiYWNrID0gKHJlZikgPT4ge1xuICAgIGlmIChyZWYpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByb290ID0gZmluZFJvb3RDb250YWluZXIocmVmLiRlbGVtZW50KTtcbiAgICAgICAgICAgIC8vIGlmIHBhZ2Ugc3R5bGVzIGhhdmUgdG8gYmUgYXBwbGllZCB0byBkaWFsb2cgdGhlbiBkaWFsb2cgaGFzIHRvIGJlIGNoaWxkIG9mIHBhZ2UgZWxlbWVudC5cbiAgICAgICAgICAgIGlmIChyb290KSB7XG4gICAgICAgICAgICAgICAgJCgnYm9keSA+IG1vZGFsLWNvbnRhaW5lciA+IGRpdicpLndyYXAoJzwnICsgcm9vdCArICcvPicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVmLmludm9rZUV2ZW50Q2FsbGJhY2soJ29wZW5lZCcsIHsgJGV2ZW50OiB7IHR5cGU6ICdvcGVuZWQnIH0gfSk7XG4gICAgICAgICAgICAvLyBmb2N1c1RyYXBPYmogd2lsbCBjcmVhdGUgZm9jdXMgdHJhcCBmb3IgdGhlIHJlc3BlY3RpdmUgZGlhbG9nIGFjY29yZGluZyB0byB0aGUgdGl0bGVJZCBhc3NpZ25lZCB0byB0aGVtIHdoaWNoIGlzIHVuaXF1ZS5cbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9ICQoJ1thcmlhLWxhYmVsbGVkYnk9ICcgKyByZWYudGl0bGVJZCArICddJylbMF07XG5cbiAgICAgICAgICAgIGNvbnN0IGtleWJvYXJkRm9jdXNhYmxlRWxlbWVudHMgPSBbY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgICAgICAgICAgJ2EsIGJ1dHRvbiwgaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QsIGRldGFpbHMsIGlmcmFtZSwgZW1iZWQsIG9iamVjdCwgc3VtbWFyeSBkaWFsb2csIGF1ZGlvW2NvbnRyb2xzXSwgdmlkZW9bY29udHJvbHNdLCBbY29udGVudGVkaXRhYmxlXSwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJ1xuICAgICAgICAgICAgKV0uZmlsdGVyKGVsID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAhZWxbMF0uaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpICYmICFlbFswXS5oYXNBdHRyaWJ1dGUoJ2hpZGRlbicpKTtcbiAgICAgICAgICAgIH0pWzBdO1xuXG4gICAgICAgICAgICAkKGtleWJvYXJkRm9jdXNhYmxlRWxlbWVudHNbMF0pLmZvY3VzKCk7XG5cbiAgICAgICAgICAgIGZvY3VzVHJhcE9ialtyZWYudGl0bGVJZF0gPSBjcmVhdGVGb2N1c1RyYXAoY29udGFpbmVyLCB7XG4gICAgICAgICAgICAgICAgb25BY3RpdmF0ZTogKCkgPT4gY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ2lzLWFjdGl2ZScpLFxuICAgICAgICAgICAgICAgIG9uRGVhY3RpdmF0ZTogKCkgPT4gY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLWFjdGl2ZScpLFxuICAgICAgICAgICAgICAgIGFsbG93T3V0c2lkZUNsaWNrOiB0cnVlLFxuICAgICAgICAgICAgICAgIHNldFJldHVybkZvY3VzOiBmb2N1c1RyYXBPYmouYWN0aXZlRWxlbWVudCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZm9jdXNUcmFwT2JqW3JlZi50aXRsZUlkXS5hY3RpdmF0ZSgpO1xuICAgICAgICAgICAgY29uc3Qgb3BlbmVkRGlhbG9ncyA9IHJlZi5kaWFsb2dTZXJ2aWNlLmdldE9wZW5lZERpYWxvZ3MoKTtcbiAgICAgICAgICAgIGlmIChvcGVuZWREaWFsb2dzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICBsZXQgekluZGV4ID0gTnVtYmVyKCQoXCJbYXJpYS1sYWJlbGxlZGJ5PSBcIiArIG9wZW5lZERpYWxvZ3Nbb3BlbmVkRGlhbG9ncy5sZW5ndGggLSAyXS50aXRsZUlkICsgXCJdXCIpLmNzcygnei1pbmRleCcpKTtcbiAgICAgICAgICAgICAgICAkKCdbYXJpYS1sYWJlbGxlZGJ5PSAnICsgcmVmLmRpYWxvZ1NlcnZpY2UuZ2V0TGFzdE9wZW5lZERpYWxvZygpLnRpdGxlSWQgKyAnXScpLmNzcygnei1pbmRleCcsIHpJbmRleCArIDIpO1xuICAgICAgICAgICAgICAgICQoJ2JzLW1vZGFsLWJhY2tkcm9wJykuY3NzKCd6LWluZGV4JywgekluZGV4ICsgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn07XG5cbmNvbnN0IGludm9rZUNsb3NlZENhbGxiYWNrID0gKHJlZikgPT4ge1xuICAgIGlmIChyZWYpIHtcbiAgICAgICAgcmVmLmludm9rZUV2ZW50Q2FsbGJhY2soJ2Nsb3NlJyk7XG4gICAgICAgIHJlZi5kaWFsb2dSZWYgPSB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IG9wZW5lZERpYWxvZ3MgPSByZWYuZGlhbG9nU2VydmljZS5nZXRPcGVuZWREaWFsb2dzKCk7XG4gICAgICAgIGlmIChvcGVuZWREaWFsb2dzLmxlbmd0aCA+PSAxKSB7XG4gICAgICAgICAgICBsZXQgekluZGV4OiBhbnkgPSBOdW1iZXIoJChcIlthcmlhLWxhYmVsbGVkYnk9IFwiICsgb3BlbmVkRGlhbG9nc1tvcGVuZWREaWFsb2dzLmxlbmd0aCAtIDFdLnRpdGxlSWQgKyBcIl1cIikuY3NzKCd6LWluZGV4JykpO1xuICAgICAgICAgICAgJCgnYnMtbW9kYWwtYmFja2Ryb3AnKS5jc3MoJ3otaW5kZXgnLCB6SW5kZXggLSAxKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlRGlhbG9nIGV4dGVuZHMgQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIElEaWFsb2csIE9uRGVzdHJveSB7XG5cbiAgICBwdWJsaWMgbmFtZTogc3RyaW5nO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBkaWFsb2dTZXJ2aWNlOiBBYnN0cmFjdERpYWxvZ1NlcnZpY2U7XG4gICAgcHJpdmF0ZSByZWFkb25seSBic01vZGFsOiBCc01vZGFsU2VydmljZTtcblxuICAgIHByaXZhdGUgZGlhbG9nUmVmOiBCc01vZGFsUmVmO1xuICAgIHByaXZhdGUgZGlhbG9nSWQ6IG51bWJlcjtcbiAgICBwdWJsaWMgdGl0bGVJZDogc3RyaW5nID0gJ3dtZGlhbG9nLScgKyBnZW5lcmF0ZUdVSWQoKTtcbiAgICBwdWJsaWMgc2hlZXQ6IHN0cmluZyB8IGJvb2xlYW47XG4gICAgcHVibGljIHNoZWV0UG9zaXRpb246IHN0cmluZztcblxuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgICAgICBpbmo6IEluamVjdG9yLFxuICAgICAgICBASW5qZWN0KFdpZGdldENvbmZpZykgY29uZmlnOiBJV2lkZ2V0Q29uZmlnLFxuICAgICAgICBwcm90ZWN0ZWQgbW9kYWxPcHRpb25zOiBNb2RhbE9wdGlvbnMsXG4gICAgICAgIEBJbmplY3QoJ0VYUExJQ0lUX0NPTlRFWFQnKSBAT3B0aW9uYWwoKSBleHBsaWNpdENvbnRleHQ6IGFueVxuICAgICkge1xuICAgICAgICBzdXBlcihpbmosIGNvbmZpZywgZXhwbGljaXRDb250ZXh0KTtcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlID0gaW5qLmdldChBYnN0cmFjdERpYWxvZ1NlcnZpY2UpO1xuICAgICAgICB0aGlzLmJzTW9kYWwgPSBpbmouZ2V0KEJzTW9kYWxTZXJ2aWNlKTtcbiAgICAgICAgY29uc3Qgcm91dGVyID0gaW5qLmdldChSb3V0ZXIpO1xuXG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW1xuICAgICAgICAgICAgdGhpcy5ic01vZGFsLm9uU2hvd24uc3Vic2NyaWJlKCh7IGlkIH0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2UuZ2V0TGFzdE9wZW5lZERpYWxvZygpO1xuICAgICAgICAgICAgICAgIGlmIChyZWYgPT09IHRoaXMgJiYgIXRoaXMuZGlhbG9nSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQWx3YXlzIGdldCB0aGUgcmVmZXJlbmNlIG9mIGxhc3QgcHVzaGVkIGRpYWxvZyBpbiB0aGUgYXJyYXkgZm9yIGNhbGxpbmcgb25PcGVuIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgICAgIGludm9rZU9wZW5lZENhbGxiYWNrKHJlZik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nSWQgPSBpZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRoaXMuYnNNb2RhbC5vblNob3cuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBmb2N1c1RyYXBPYmouYWN0aXZlRWxlbWVudCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRoaXMuYnNNb2RhbC5vbkhpZGRlbi5zdWJzY3JpYmUoKGNsb3NlUmVhc29uKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHJlZiA9IHRoaXMuZGlhbG9nU2VydmljZS5nZXREaWFsb2dSZWZGcm9tQ2xvc2VkRGlhbG9ncygpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRpYWxvZ0lkICYmIGNsb3NlUmVhc29uPy5pZCA9PT0gdGhpcy5kaWFsb2dJZCkge1xuICAgICAgICAgICAgICAgICAgICByZWYgPSB0aGlzO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2xvc2VSZWFzb24gPT09ICdlc2MnIHx8IGNsb3NlUmVhc29uID09PSAnYmFja2Ryb3AtY2xpY2snKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZiA9IHRoaXMuZGlhbG9nU2VydmljZS5nZXRMYXN0T3BlbmVkRGlhbG9nKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZWYgPT09IHRoaXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dJZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIC8vIHJlbW92ZSB0aGUgZGlhbG9nIHJlZmVyZW5jZSBmcm9tIG9wZW5lZCBkaWFsb2dzIGFuZCBjbG9zZWQgZGlhbG9nc1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UucmVtb3ZlRnJvbU9wZW5lZERpYWxvZ3MocmVmKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnJlbW92ZUZyb21DbG9zZWREaWFsb2dzKHJlZik7XG4gICAgICAgICAgICAgICAgICAgIGludm9rZUNsb3NlZENhbGxiYWNrKHJlZik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWYuY2xvc2VDYWxsQmFja0ZuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWYuY2xvc2VDYWxsQmFja0ZuKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRoaXMuYnNNb2RhbC5vbkhpZGUuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyAgV2lsbCBkZS1hY3RpdmF0ZSBmb2N1cyB0cmFwIGZvciB0aGUgcmVzcGVjdGl2ZSBkaWFsb2cgd2hlbiB0aGV5IGFyZSBjbG9zZWQuXG4gICAgICAgICAgICAgICAgY29uc3QgcmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLmdldERpYWxvZ1JlZkZyb21DbG9zZWREaWFsb2dzKCk7XG4gICAgICAgICAgICAgICAgaWYgKHJlZiAmJiBmb2N1c1RyYXBPYmpbcmVmLnRpdGxlSWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNUcmFwT2JqW3JlZi50aXRsZUlkXS5kZWFjdGl2YXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICByb3V0ZXIuZXZlbnRzLnN1YnNjcmliZShlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIF07XG4gICAgICAgIHRoaXMucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoKCkgPT4gey8vIHJlbW92ZSB0aGUgZGlhbG9nIHJlZmVyZW5jZSBmcm9tIG9wZW5lZCBkaWFsb2dzIGFuZCBjbG9zZWQgZGlhbG9nc1xuICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnJlbW92ZUZyb21PcGVuZWREaWFsb2dzKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnJlbW92ZUZyb21DbG9zZWREaWFsb2dzKHRoaXMpO1xuICAgICAgICAgICAgc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT3BlbnMgdGhlIGRpYWxvZ1xuICAgICAqIFN1YnNjcmliZSB0byB0aGUgb25TaG93biBldmVudCBlbWl0dGVyIG9mIGJzTW9kYWwgYW5kIHRyaWdnZXIgb24tb3BlbmVkIGV2ZW50IGNhbGxiYWNrXG4gICAgICovXG4gICAgcHVibGljIG9wZW4oaW5pdFN0YXRlPzogYW55KSB7XG5cbiAgICAgICAgLy8gcmVtb3ZlIHRoZSBwb3BvdmVycyBpbiB0aGUgcGFnZSB0byBhdm9pZCB0aGUgb3ZlcmxhcCB3aXRoIGRpYWxvZ1xuICAgICAgICAvLyBjbG9zZVBvcG92ZXIodGhpcy4kZWxlbWVudCk7IENvbW1lbnRpbmcgdGhpcyBsaW5lIGJlY2F1c2UgaXQgaXMgY2F1c2luZyByZWdyZXNzaW9uKGlmIHdlIGhhdmUgZGlhbG9nIGluc2lkZSBwb3BvdmVyIGFzIHBhcnRhaWwgY29udGVudCwgdGhlbiB0aGUgZGlhbG9nIGNsb3NlIGlzIG5vdCB3b3JraW5nIGJlY2F1c2Ugb24gY2xvc2luZyB0aGUgcG9wb3ZlciB0aGUgcGFydGlhbCBnZXQgZGVzdHJveWVkLilcblxuICAgICAgICAvLyBkbyBub3Qgb3BlbiB0aGUgZGlhbG9nIGFnYWluIGlmIGl0IGlzIGFscmVhZHkgb3BlbmVkXG4gICAgICAgIGNvbnN0IGR1cGxpY2F0ZURpYWxvZ0NoZWNrID0gKG9wZW5lZERpYWxvZykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG9wZW5lZERpYWxvZyA9PT0gdGhpcztcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodGhpcy5kaWFsb2dTZXJ2aWNlLmdldE9wZW5lZERpYWxvZ3MoKS5zb21lKGR1cGxpY2F0ZURpYWxvZ0NoZWNrKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmFkZFRvT3BlbmVkRGlhbG9ncyh0aGlzKTtcbiAgICAgICAgLy8gZXh0ZW5kIHRoZSBjb250ZXh0IHdpdGggdGhlIGluaXRTdGF0ZVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuY29udGV4dCwgaW5pdFN0YXRlKTtcbiAgICAgICAgdGhpcy5tb2RhbE9wdGlvbnMuYXJpYUxhYmVsbGVkQnkgPSB0aGlzLnRpdGxlSWQ7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmID0gdGhpcy5ic01vZGFsLnNob3codGhpcy5nZXRUZW1wbGF0ZVJlZigpLCB0aGlzLm1vZGFsT3B0aW9ucyk7XG4gICAgICAgIC8vIEZpeCBmb3IgW1dNUy0yMzk0OF06IEZvY3VzIG1vdmluZyBvdXQgb2YgYWN0aXZlIERpYWxvZyB3aWRnZXRcbiAgICAgICAgaWYgKHRoaXMuZGlhbG9nU2VydmljZS5nZXRPcGVuZWREaWFsb2dzKCkubGVuZ3RoID09PSAxICYmIChpc01vYmlsZSgpKSkge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50U2VsZWN0b3IgPSAkKCdib2R5ID4gYXBwLXJvb3QnKVswXTtcbiAgICAgICAgICAgIHBhcmVudFNlbGVjdG9yLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xuICAgICAgICB9XG4gICAgICAgICQoJy5jZGstZm9jdXMtdHJhcC1hbmNob3InKS5yZW1vdmVBdHRyKCdhcmlhLWhpZGRlbicpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGNsb3NlcyB0aGUgZGlhbG9nXG4gICAgICogaW52b2tlcyB0aGUgb24tY2xvc2UgZXZlbnQgY2FsbGJhY2tcbiAgICAgKi9cbiAgICBwdWJsaWMgY2xvc2UoKSB7XG4gICAgICAgIC8vIHJlbW92ZSB0aGUgcG9wb3ZlcnMgaW4gdGhlIHBhZ2UgdG8gYXZvaWQgdGhlIG92ZXJsYXAgd2l0aCBkaWFsb2dcbiAgICAgICAgLy8gY2xvc2VQb3BvdmVyKHRoaXMuJGVsZW1lbnQpOyBDb21tZW50aW5nIHRoaXMgbGluZSBiZWNhdXNlIGl0IGlzIGNhdXNpbmcgcmVncmVzc2lvbihpZiB3ZSBoYXZlIGRpYWxvZyBpbnNpZGUgcG9wb3ZlciBhcyBwYXJ0YWlsIGNvbnRlbnQsIHRoZW4gdGhlIGRpYWxvZyBjbG9zZSBpcyBub3Qgd29ya2luZyBiZWNhdXNlIG9uIGNsb3NpbmcgdGhlIHBvcG92ZXIgdGhlIHBhcnRpYWwgZ2V0IGRlc3Ryb3llZC4pXG4gICAgICAgIGlmICh0aGlzLmRpYWxvZ1JlZikge1xuICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmFkZFRvQ2xvc2VkRGlhbG9ncyh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nUmVmLmhpZGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlZ2lzdGVyIHRoZSBkaWFsb2cgd2l0aCB0aGUgZGlhbG9nIHNlcnZpY2UgZm9yIHByb2dyYW1tYXRpYyBhY2Nlc3NcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVnaXN0ZXIoc2NvcGUpIHtcbiAgICAgICAgLy8gYWRkIHNjb3BlIGFsb25nIHdpdGggbmFtZSBpbiB0aGUgZGlhbG9nUmVmc0NvbGxlY3Rpb24gTWFwIHdoaWxlIHJlZ2lzdGVyaW5nIGRpYWxvZ1xuICAgICAgICAvLyBTbyB0aGF0IDIgZGlhbG9ncyBoYXZpbmcgc2FtZSBuYW1lIG9uIGRpZmZlcmVudCBwYWdlcyB3b24ndCBiZSBvdmVycmlkZGVuLlxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UucmVnaXN0ZXIodGhpcy5uYW1lLCB0aGlzLCBzY29wZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGUgUmVnaXN0ZXIgdGhlIGRpYWxvZyB3aXRoIHRoZSBkaWFsb2cgc2VydmljZSBhZnRlciBkaWFsb2cgZGVzdHJ1Y3Rpb25cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZGVSZWdpc3RlcihzY29wZSkge1xuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuZGVSZWdpc3Rlcih0aGlzLm5hbWUsIHNjb3BlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBzdWJjbGFzc2VzIG9mIEJhc2VEaWFsb2cgbXVzdCBpbXBsZW1lbnQgdGhpcyBtZXRob2QgdG8gcmV0dXJuIHRoZSBwcm9wZXIgdGVtcGxhdGUgZWxlbWVudCByZWZcbiAgICAgKiBic01vZGFsIHdpbGwgdXNlIHRoaXMgcmVmZW5jZSB0byBvcGVuIHRoZSBkaWFsb2dcbiAgICAgKiBAcmV0dXJucyB7VGVtcGxhdGVSZWY8YW55Pn1cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0VGVtcGxhdGVSZWYoKTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIHByb3RlY3RlZCBvblByb3BlcnR5Q2hhbmdlKGtleTogc3RyaW5nLCBudjogYW55LCBvdj86IGFueSkge1xuICAgICAgICAvLyBpZ25vcmUgdGhlIGNsYXNzIGF0dHJpYnV0ZS5cbiAgICAgICAgLy8gUHJldmVudCB0aGUgZnJhbWV3b3JrIGZyb20gc2V0dGluZyB0aGUgY2xhc3Mgb24gdGhlIGhvc3QgZWxlbWVudC5cbiAgICAgICAgaWYgKGtleSA9PT0gJ2NsYXNzJyB8fCBrZXkgPT09ICduYW1lJyB8fCBrZXkgPT09ICd0YWJpbmRleCcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdhbmltYXRpb24nKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGFsT3B0aW9ucy5jbGFzcyA9IHRoaXMubW9kYWxPcHRpb25zLmNsYXNzLnJlcGxhY2UoJyBhbmltYXRlZCAnICsgb3YsICcnKTtcbiAgICAgICAgICAgIGlmIChudikge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kYWxPcHRpb25zLmNsYXNzID0gdGhpcy5tb2RhbE9wdGlvbnMuY2xhc3MgKyAnIGFuaW1hdGVkICcgKyBudjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdXBlci5vblByb3BlcnR5Q2hhbmdlKGtleSwgbnYsIG92KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgdGhpcy5kZVJlZ2lzdGVyKHRoaXMudmlld1BhcmVudCk7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgfVxufVxuIl19
184
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1kaWFsb2cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvZGlhbG9ncy9kZWZhdWx0L3NyYy9iYXNlLWRpYWxvZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQWEsUUFBUSxFQUFlLE1BQU0sZUFBZSxDQUFDO0FBQy9GLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFjLGNBQWMsRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUkvRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBeUIsTUFBTSxVQUFVLENBQUM7QUFFbkgsT0FBTyxFQUFFLGFBQWEsRUFBMEIsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7OztBQUUxRixNQUFNLGdCQUFnQixHQUFHLEtBQUssQ0FBQztBQUUvQixNQUFNLG9CQUFvQixHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUU7SUFDakMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNOLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixNQUFNLElBQUksR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDN0MsMkZBQTJGO1lBQzNGLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ1AsQ0FBQyxDQUFDLDhCQUE4QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFDOUQsQ0FBQztZQUNELEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2xFLGlFQUFpRTtZQUNqRSxN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R0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRU0sV0FBVztRQUNkLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNiLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN4QixDQUFDOzJHQTVKaUIsVUFBVSx3Q0FnQmhCLFlBQVksNkNBRVosa0JBQWtCO3VFQWxCWixVQUFVLFdBQVYsVUFBVTs7aUZBQVYsVUFBVTtjQUQvQixVQUFVOztzQkFpQkYsTUFBTTt1QkFBQyxZQUFZOztzQkFFbkIsTUFBTTt1QkFBQyxrQkFBa0I7O3NCQUFHLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIEluamVjdG9yLCBPbkRlc3Ryb3ksIE9wdGlvbmFsLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmF2aWdhdGlvbkVuZCwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEJzTW9kYWxSZWYsIEJzTW9kYWxTZXJ2aWNlLCBNb2RhbE9wdGlvbnMgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcblxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEFic3RyYWN0RGlhbG9nU2VydmljZSwgZmluZFJvb3RDb250YWluZXIsIGdlbmVyYXRlR1VJZCwgaXNNb2JpbGUsIGdldFNoZWV0UG9zaXRpb25DbGFzcyB9IGZyb20gJ0B3bS9jb3JlJztcblxuaW1wb3J0IHsgQmFzZUNvbXBvbmVudCwgSURpYWxvZywgSVdpZGdldENvbmZpZywgV2lkZ2V0Q29uZmlnIH0gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzZSc7XG5cbmNvbnN0IGV2ZW50c1JlZ2lzdGVyZWQgPSBmYWxzZTtcblxuY29uc3QgaW52b2tlT3BlbmVkQ2FsbGJhY2sgPSAocmVmKSA9PiB7XG4gICAgaWYgKHJlZikge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJvb3QgPSBmaW5kUm9vdENvbnRhaW5lcihyZWYuJGVsZW1lbnQpO1xuICAgICAgICAgICAgLy8gaWYgcGFnZSBzdHlsZXMgaGF2ZSB0byBiZSBhcHBsaWVkIHRvIGRpYWxvZyB0aGVuIGRpYWxvZyBoYXMgdG8gYmUgY2hpbGQgb2YgcGFnZSBlbGVtZW50LlxuICAgICAgICAgICAgaWYgKHJvb3QpIHtcbiAgICAgICAgICAgICAgICAkKCdib2R5ID4gbW9kYWwtY29udGFpbmVyID4gZGl2Jykud3JhcCgnPCcgKyByb290ICsgJy8+Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZWYuaW52b2tlRXZlbnRDYWxsYmFjaygnb3BlbmVkJywgeyAkZXZlbnQ6IHsgdHlwZTogJ29wZW5lZCcgfSB9KTtcbiAgICAgICAgICAgIC8vIEZvY3VzaW5nIHRoZSBmaXJzdCBmb2N1c2FibGUgZWxlbWVudCB3aGVuIHRoZSBkaWFsb2cgaXMgb3BlbmVkXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSAkKCdbYXJpYS1sYWJlbGxlZGJ5PSAnICsgcmVmLnRpdGxlSWQgKyAnXScpWzBdO1xuICAgICAgICAgICAgY29uc3Qga2V5Ym9hcmRGb2N1c2FibGVFbGVtZW50cyA9IFtjb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgICAgICAgICAnYSwgYnV0dG9uLCBpbnB1dCwgdGV4dGFyZWEsIHNlbGVjdCwgZGV0YWlscywgaWZyYW1lLCBlbWJlZCwgb2JqZWN0LCBzdW1tYXJ5IGRpYWxvZywgYXVkaW9bY29udHJvbHNdLCB2aWRlb1tjb250cm9sc10sIFtjb250ZW50ZWRpdGFibGVdLCBbdGFiaW5kZXhdOm5vdChbdGFiaW5kZXg9XCItMVwiXSknXG4gICAgICAgICAgICApXS5maWx0ZXIoZWwgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICFlbFswXS5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykgJiYgIWVsWzBdLmhhc0F0dHJpYnV0ZSgnaGlkZGVuJykpO1xuICAgICAgICAgICAgfSlbMF07XG4gICAgICAgICAgICAkKGtleWJvYXJkRm9jdXNhYmxlRWxlbWVudHNbMF0pLmZvY3VzKCk7XG5cbiAgICAgICAgICAgIGNvbnN0IG9wZW5lZERpYWxvZ3MgPSByZWYuZGlhbG9nU2VydmljZS5nZXRPcGVuZWREaWFsb2dzKCk7XG4gICAgICAgICAgICBpZiAob3BlbmVkRGlhbG9ncy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgbGV0IHpJbmRleCA9IE51bWJlcigkKFwiW2FyaWEtbGFiZWxsZWRieT0gXCIgKyBvcGVuZWREaWFsb2dzW29wZW5lZERpYWxvZ3MubGVuZ3RoIC0gMl0udGl0bGVJZCArIFwiXVwiKS5jc3MoJ3otaW5kZXgnKSk7XG4gICAgICAgICAgICAgICAgJCgnW2FyaWEtbGFiZWxsZWRieT0gJyArIHJlZi5kaWFsb2dTZXJ2aWNlLmdldExhc3RPcGVuZWREaWFsb2coKS50aXRsZUlkICsgJ10nKS5jc3MoJ3otaW5kZXgnLCB6SW5kZXggKyAyKTtcbiAgICAgICAgICAgICAgICAkKCdicy1tb2RhbC1iYWNrZHJvcCcpLmNzcygnei1pbmRleCcsIHpJbmRleCArIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59O1xuXG5jb25zdCBpbnZva2VDbG9zZWRDYWxsYmFjayA9IChyZWYpID0+IHtcbiAgICBpZiAocmVmKSB7XG4gICAgICAgIHJlZi5pbnZva2VFdmVudENhbGxiYWNrKCdjbG9zZScpO1xuICAgICAgICByZWYuZGlhbG9nUmVmID0gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBvcGVuZWREaWFsb2dzID0gcmVmLmRpYWxvZ1NlcnZpY2UuZ2V0T3BlbmVkRGlhbG9ncygpO1xuICAgICAgICBpZiAob3BlbmVkRGlhbG9ncy5sZW5ndGggPj0gMSkge1xuICAgICAgICAgICAgbGV0IHpJbmRleDogYW55ID0gTnVtYmVyKCQoXCJbYXJpYS1sYWJlbGxlZGJ5PSBcIiArIG9wZW5lZERpYWxvZ3Nbb3BlbmVkRGlhbG9ncy5sZW5ndGggLSAxXS50aXRsZUlkICsgXCJdXCIpLmNzcygnei1pbmRleCcpKTtcbiAgICAgICAgICAgICQoJ2JzLW1vZGFsLWJhY2tkcm9wJykuY3NzKCd6LWluZGV4JywgekluZGV4IC0gMSk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZURpYWxvZyBleHRlbmRzIEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBJRGlhbG9nLCBPbkRlc3Ryb3kge1xuXG4gICAgcHVibGljIG5hbWU6IHN0cmluZztcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nU2VydmljZTogQWJzdHJhY3REaWFsb2dTZXJ2aWNlO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYnNNb2RhbDogQnNNb2RhbFNlcnZpY2U7XG5cbiAgICBwcml2YXRlIGRpYWxvZ1JlZjogQnNNb2RhbFJlZjtcbiAgICBwcml2YXRlIGRpYWxvZ0lkOiBudW1iZXI7XG4gICAgcHVibGljIHRpdGxlSWQ6IHN0cmluZyA9ICd3bWRpYWxvZy0nICsgZ2VuZXJhdGVHVUlkKCk7XG4gICAgcHVibGljIHNoZWV0OiBzdHJpbmcgfCBib29sZWFuO1xuICAgIHB1YmxpYyBzaGVldFBvc2l0aW9uOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBkaWFsb2dPcmlnaW5Gb2N1c1N0YWNrOiBIVE1MRWxlbWVudFtdID0gW107XG5cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgICAgIGluajogSW5qZWN0b3IsXG4gICAgICAgIEBJbmplY3QoV2lkZ2V0Q29uZmlnKSBjb25maWc6IElXaWRnZXRDb25maWcsXG4gICAgICAgIHByb3RlY3RlZCBtb2RhbE9wdGlvbnM6IE1vZGFsT3B0aW9ucyxcbiAgICAgICAgQEluamVjdCgnRVhQTElDSVRfQ09OVEVYVCcpIEBPcHRpb25hbCgpIGV4cGxpY2l0Q29udGV4dDogYW55XG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluaiwgY29uZmlnLCBleHBsaWNpdENvbnRleHQpO1xuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UgPSBpbmouZ2V0KEFic3RyYWN0RGlhbG9nU2VydmljZSk7XG4gICAgICAgIHRoaXMuYnNNb2RhbCA9IGluai5nZXQoQnNNb2RhbFNlcnZpY2UpO1xuICAgICAgICBjb25zdCByb3V0ZXIgPSBpbmouZ2V0KFJvdXRlcik7XG5cbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXG4gICAgICAgICAgICB0aGlzLmJzTW9kYWwub25TaG93bi5zdWJzY3JpYmUoKHsgaWQgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlZiA9IHRoaXMuZGlhbG9nU2VydmljZS5nZXRMYXN0T3BlbmVkRGlhbG9nKCk7XG4gICAgICAgICAgICAgICAgaWYgKHJlZiA9PT0gdGhpcyAmJiAhdGhpcy5kaWFsb2dJZCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBBbHdheXMgZ2V0IHRoZSByZWZlcmVuY2Ugb2YgbGFzdCBwdXNoZWQgZGlhbG9nIGluIHRoZSBhcnJheSBmb3IgY2FsbGluZyBvbk9wZW4gY2FsbGJhY2tcbiAgICAgICAgICAgICAgICAgICAgaW52b2tlT3BlbmVkQ2FsbGJhY2socmVmKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dJZCA9IGlkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGhpcy5ic01vZGFsLm9uU2hvdy5zdWJzY3JpYmUoKCkgPT4ge30pLFxuICAgICAgICAgICAgdGhpcy5ic01vZGFsLm9uSGlkZGVuLnN1YnNjcmliZSgoY2xvc2VSZWFzb24pID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgcmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLmdldERpYWxvZ1JlZkZyb21DbG9zZWREaWFsb2dzKCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGlhbG9nSWQgJiYgY2xvc2VSZWFzb24/LmlkID09PSB0aGlzLmRpYWxvZ0lkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZiA9IHRoaXM7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjbG9zZVJlYXNvbiA9PT0gJ2VzYycgfHwgY2xvc2VSZWFzb24gPT09ICdiYWNrZHJvcC1jbGljaycpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLmdldExhc3RPcGVuZWREaWFsb2coKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlZiA9PT0gdGhpcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ0lkID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlIHRoZSBkaWFsb2cgcmVmZXJlbmNlIGZyb20gb3BlbmVkIGRpYWxvZ3MgYW5kIGNsb3NlZCBkaWFsb2dzXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5yZW1vdmVGcm9tT3BlbmVkRGlhbG9ncyhyZWYpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UucmVtb3ZlRnJvbUNsb3NlZERpYWxvZ3MocmVmKTtcbiAgICAgICAgICAgICAgICAgICAgaW52b2tlQ2xvc2VkQ2FsbGJhY2socmVmKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZi5jbG9zZUNhbGxCYWNrRm4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZi5jbG9zZUNhbGxCYWNrRm4oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGhpcy5ic01vZGFsLm9uSGlkZS5zdWJzY3JpYmUoKCkgPT4ge30pLFxuICAgICAgICAgICAgcm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICBdO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKCgpID0+IHsvLyByZW1vdmUgdGhlIGRpYWxvZyByZWZlcmVuY2UgZnJvbSBvcGVuZWQgZGlhbG9ncyBhbmQgY2xvc2VkIGRpYWxvZ3NcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5yZW1vdmVGcm9tT3BlbmVkRGlhbG9ncyh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5yZW1vdmVGcm9tQ2xvc2VkRGlhbG9ncyh0aGlzKTtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9wZW5zIHRoZSBkaWFsb2dcbiAgICAgKiBTdWJzY3JpYmUgdG8gdGhlIG9uU2hvd24gZXZlbnQgZW1pdHRlciBvZiBic01vZGFsIGFuZCB0cmlnZ2VyIG9uLW9wZW5lZCBldmVudCBjYWxsYmFja1xuICAgICAqL1xuICAgIHB1YmxpYyBvcGVuKGluaXRTdGF0ZT86IGFueSkge1xuXG4gICAgICAgIC8vIHJlbW92ZSB0aGUgcG9wb3ZlcnMgaW4gdGhlIHBhZ2UgdG8gYXZvaWQgdGhlIG92ZXJsYXAgd2l0aCBkaWFsb2dcbiAgICAgICAgLy8gY2xvc2VQb3BvdmVyKHRoaXMuJGVsZW1lbnQpOyBDb21tZW50aW5nIHRoaXMgbGluZSBiZWNhdXNlIGl0IGlzIGNhdXNpbmcgcmVncmVzc2lvbihpZiB3ZSBoYXZlIGRpYWxvZyBpbnNpZGUgcG9wb3ZlciBhcyBwYXJ0YWlsIGNvbnRlbnQsIHRoZW4gdGhlIGRpYWxvZyBjbG9zZSBpcyBub3Qgd29ya2luZyBiZWNhdXNlIG9uIGNsb3NpbmcgdGhlIHBvcG92ZXIgdGhlIHBhcnRpYWwgZ2V0IGRlc3Ryb3llZC4pXG5cbiAgICAgICAgLy8gZG8gbm90IG9wZW4gdGhlIGRpYWxvZyBhZ2FpbiBpZiBpdCBpcyBhbHJlYWR5IG9wZW5lZFxuICAgICAgICBjb25zdCBkdXBsaWNhdGVEaWFsb2dDaGVjayA9IChvcGVuZWREaWFsb2cpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBvcGVuZWREaWFsb2cgPT09IHRoaXM7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHRoaXMuZGlhbG9nU2VydmljZS5nZXRPcGVuZWREaWFsb2dzKCkuc29tZShkdXBsaWNhdGVEaWFsb2dDaGVjaykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5hZGRUb09wZW5lZERpYWxvZ3ModGhpcyk7XG4gICAgICAgIC8vIGV4dGVuZCB0aGUgY29udGV4dCB3aXRoIHRoZSBpbml0U3RhdGVcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmNvbnRleHQsIGluaXRTdGF0ZSk7XG4gICAgICAgIHRoaXMubW9kYWxPcHRpb25zLmFyaWFMYWJlbGxlZEJ5ID0gdGhpcy50aXRsZUlkO1xuICAgICAgICB0aGlzLmRpYWxvZ09yaWdpbkZvY3VzU3RhY2sucHVzaChkb2N1bWVudC5hY3RpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYgPSB0aGlzLmJzTW9kYWwuc2hvdyh0aGlzLmdldFRlbXBsYXRlUmVmKCksIHRoaXMubW9kYWxPcHRpb25zKTtcbiAgICAgICAgLy8gRml4IGZvciBbV01TLTIzOTQ4XTogRm9jdXMgbW92aW5nIG91dCBvZiBhY3RpdmUgRGlhbG9nIHdpZGdldFxuICAgICAgICBpZiAodGhpcy5kaWFsb2dTZXJ2aWNlLmdldE9wZW5lZERpYWxvZ3MoKS5sZW5ndGggPT09IDEgJiYgKGlzTW9iaWxlKCkpKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRTZWxlY3RvciA9ICQoJ2JvZHkgPiBhcHAtcm9vdCcpWzBdO1xuICAgICAgICAgICAgcGFyZW50U2VsZWN0b3Iuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICd0cnVlJyk7XG4gICAgICAgIH1cbiAgICAgICAgJCgnLmNkay1mb2N1cy10cmFwLWFuY2hvcicpLnJlbW92ZUF0dHIoJ2FyaWEtaGlkZGVuJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY2xvc2VzIHRoZSBkaWFsb2dcbiAgICAgKiBpbnZva2VzIHRoZSBvbi1jbG9zZSBldmVudCBjYWxsYmFja1xuICAgICAqL1xuICAgIHB1YmxpYyBjbG9zZSgpIHtcbiAgICAgICAgLy8gcmVtb3ZlIHRoZSBwb3BvdmVycyBpbiB0aGUgcGFnZSB0byBhdm9pZCB0aGUgb3ZlcmxhcCB3aXRoIGRpYWxvZ1xuICAgICAgICAvLyBjbG9zZVBvcG92ZXIodGhpcy4kZWxlbWVudCk7IENvbW1lbnRpbmcgdGhpcyBsaW5lIGJlY2F1c2UgaXQgaXMgY2F1c2luZyByZWdyZXNzaW9uKGlmIHdlIGhhdmUgZGlhbG9nIGluc2lkZSBwb3BvdmVyIGFzIHBhcnRhaWwgY29udGVudCwgdGhlbiB0aGUgZGlhbG9nIGNsb3NlIGlzIG5vdCB3b3JraW5nIGJlY2F1c2Ugb24gY2xvc2luZyB0aGUgcG9wb3ZlciB0aGUgcGFydGlhbCBnZXQgZGVzdHJveWVkLilcbiAgICAgICAgaWYgKHRoaXMuZGlhbG9nUmVmKSB7XG4gICAgICAgICAgICBjb25zdCBsYXN0RGlhbG9nT3JpZ2luID0gdGhpcy5kaWFsb2dPcmlnaW5Gb2N1c1N0YWNrLnBvcCgpO1xuICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmFkZFRvQ2xvc2VkRGlhbG9ncyh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nUmVmLmhpZGUoKTtcbiAgICAgICAgICAgIC8vIFJldHVybiBmb2N1cyB0byB0aGUgb3JpZ2luYXRpbmcgZWxlbWVudCB1cG9uIGRpYWxvZyBjbG9zdXJlXG4gICAgICAgICAgICBsYXN0RGlhbG9nT3JpZ2luPy5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVnaXN0ZXIgdGhlIGRpYWxvZyB3aXRoIHRoZSBkaWFsb2cgc2VydmljZSBmb3IgcHJvZ3JhbW1hdGljIGFjY2Vzc1xuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWdpc3RlcihzY29wZSkge1xuICAgICAgICAvLyBhZGQgc2NvcGUgYWxvbmcgd2l0aCBuYW1lIGluIHRoZSBkaWFsb2dSZWZzQ29sbGVjdGlvbiBNYXAgd2hpbGUgcmVnaXN0ZXJpbmcgZGlhbG9nXG4gICAgICAgIC8vIFNvIHRoYXQgMiBkaWFsb2dzIGhhdmluZyBzYW1lIG5hbWUgb24gZGlmZmVyZW50IHBhZ2VzIHdvbid0IGJlIG92ZXJyaWRkZW4uXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5yZWdpc3Rlcih0aGlzLm5hbWUsIHRoaXMsIHNjb3BlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZSBSZWdpc3RlciB0aGUgZGlhbG9nIHdpdGggdGhlIGRpYWxvZyBzZXJ2aWNlIGFmdGVyIGRpYWxvZyBkZXN0cnVjdGlvblxuICAgICAqL1xuICAgIHByb3RlY3RlZCBkZVJlZ2lzdGVyKHNjb3BlKSB7XG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5kZVJlZ2lzdGVyKHRoaXMubmFtZSwgc2NvcGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHN1YmNsYXNzZXMgb2YgQmFzZURpYWxvZyBtdXN0IGltcGxlbWVudCB0aGlzIG1ldGhvZCB0byByZXR1cm4gdGhlIHByb3BlciB0ZW1wbGF0ZSBlbGVtZW50IHJlZlxuICAgICAqIGJzTW9kYWwgd2lsbCB1c2UgdGhpcyByZWZlbmNlIHRvIG9wZW4gdGhlIGRpYWxvZ1xuICAgICAqIEByZXR1cm5zIHtUZW1wbGF0ZVJlZjxhbnk+fVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBnZXRUZW1wbGF0ZVJlZigpOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgcHJvdGVjdGVkIG9uUHJvcGVydHlDaGFuZ2Uoa2V5OiBzdHJpbmcsIG52OiBhbnksIG92PzogYW55KSB7XG4gICAgICAgIC8vIGlnbm9yZSB0aGUgY2xhc3MgYXR0cmlidXRlLlxuICAgICAgICAvLyBQcmV2ZW50IHRoZSBmcmFtZXdvcmsgZnJvbSBzZXR0aW5nIHRoZSBjbGFzcyBvbiB0aGUgaG9zdCBlbGVtZW50LlxuICAgICAgICBpZiAoa2V5ID09PSAnY2xhc3MnIHx8IGtleSA9PT0gJ25hbWUnIHx8IGtleSA9PT0gJ3RhYmluZGV4Jykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2FuaW1hdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMubW9kYWxPcHRpb25zLmNsYXNzID0gdGhpcy5tb2RhbE9wdGlvbnMuY2xhc3MucmVwbGFjZSgnIGFuaW1hdGVkICcgKyBvdiwgJycpO1xuICAgICAgICAgICAgaWYgKG52KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RhbE9wdGlvbnMuY2xhc3MgPSB0aGlzLm1vZGFsT3B0aW9ucy5jbGFzcyArICcgYW5pbWF0ZWQgJyArIG52O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN1cGVyLm9uUHJvcGVydHlDaGFuZ2Uoa2V5LCBudiwgb3YpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB0aGlzLmRlUmVnaXN0ZXIodGhpcy52aWV3UGFyZW50KTtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG59XG4iXX0=
@@ -18,8 +18,7 @@ function DialogHeaderComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
18
18
  i0.ɵɵelementEnd();
19
19
  } if (rf & 2) {
20
20
  const ctx_r1 = i0.ɵɵnextContext();
21
- i0.ɵɵpropertyInterpolate("title", ctx_r1.dialogRef.appLocale.LABEL_CLOSE);
22
- i0.ɵɵattribute("aria-label", "Close " + (ctx_r1.title ? ctx_r1.title : "") + " dialog");
21
+ i0.ɵɵattribute("aria-label", "Close " + (ctx_r1.title ? ctx_r1.title : "") + " dialog")("title", ctx_r1.title ? "Close " + ctx_r1.title + " dialog" : ctx_r1.dialogRef.appLocale.LABEL_CLOSE);
23
22
  } }
24
23
  function DialogHeaderComponent_Case_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
25
24
  i0.ɵɵelementContainer(0);
@@ -163,7 +162,7 @@ export class DialogHeaderComponent {
163
162
  this.dialogRef.close();
164
163
  }
165
164
  static { this.ɵfac = function DialogHeaderComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || DialogHeaderComponent)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(DialogRef)); }; }
166
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DialogHeaderComponent, selectors: [["div", "wmDialogHeader", ""]], inputs: { iconwidth: "iconwidth", iconheight: "iconheight", iconmargin: "iconmargin", iconclass: "iconclass", iconurl: "iconurl", closable: "closable", heading: "heading", headinglevel: "headinglevel", subheading: "subheading", titleid: "titleid", title: "title" }, standalone: true, features: [i0.ɵɵStandaloneFeature], attrs: _c0, decls: 10, vars: 2, consts: [["headerTemplate", ""], [1, "app-dialog-close", "close", 3, "title"], [1, "app-dialog-title", "modal-title"], [1, "app-dialog-close", "close", 3, "click", "title"], ["aria-hidden", "true", 1, "app-icon", "wi", "wi-clear"], [4, "ngTemplateOutlet"], [3, "ngClass", "ngStyle"], ["data-identifier", "img", 3, "src", "ngStyle"], [1, "dialog-heading", 3, "textContent", "id"], [1, "dialog-sub-heading", 3, "title", "textContent"]], template: function DialogHeaderComponent_Template(rf, ctx) { if (rf & 1) {
165
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DialogHeaderComponent, selectors: [["div", "wmDialogHeader", ""]], inputs: { iconwidth: "iconwidth", iconheight: "iconheight", iconmargin: "iconmargin", iconclass: "iconclass", iconurl: "iconurl", closable: "closable", heading: "heading", headinglevel: "headinglevel", subheading: "subheading", titleid: "titleid", title: "title" }, standalone: true, features: [i0.ɵɵStandaloneFeature], attrs: _c0, decls: 10, vars: 2, consts: [["headerTemplate", ""], [1, "app-dialog-close", "close"], [1, "app-dialog-title", "modal-title"], [1, "app-dialog-close", "close", 3, "click"], ["aria-hidden", "true", 1, "app-icon", "wi", "wi-clear"], [4, "ngTemplateOutlet"], [3, "ngClass", "ngStyle"], ["data-identifier", "img", 3, "src", "ngStyle"], [1, "dialog-heading", 3, "textContent", "id"], [1, "dialog-sub-heading", 3, "title", "textContent"]], template: function DialogHeaderComponent_Template(rf, ctx) { if (rf & 1) {
167
166
  i0.ɵɵtemplate(0, DialogHeaderComponent_Conditional_0_Template, 2, 2, "button", 1)(1, DialogHeaderComponent_Case_1_Template, 2, 1, "h1", 2)(2, DialogHeaderComponent_Case_2_Template, 2, 1, "h2", 2)(3, DialogHeaderComponent_Case_3_Template, 2, 1, "h3", 2)(4, DialogHeaderComponent_Case_4_Template, 2, 1, "h4", 2)(5, DialogHeaderComponent_Case_5_Template, 2, 1, "h5", 2)(6, DialogHeaderComponent_Case_6_Template, 2, 1, "h6", 2)(7, DialogHeaderComponent_Case_7_Template, 2, 1, "h4", 2)(8, DialogHeaderComponent_ng_template_8_Template, 4, 5, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
168
167
  } if (rf & 2) {
169
168
  let tmp_2_0;
@@ -174,7 +173,7 @@ export class DialogHeaderComponent {
174
173
  }
175
174
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DialogHeaderComponent, [{
176
175
  type: Component,
177
- args: [{ standalone: true, imports: [CommonModule, WmComponentsModule], selector: 'div[wmDialogHeader]', template: "@if (isClosable) {\n <button (click)=\"closeDialog();\"\n [attr.aria-label]=\"'Close ' + (title ? title : '') + ' dialog'\" class=\"app-dialog-close close\" title=\"{{dialogRef.appLocale.LABEL_CLOSE}}\" >\n <span class=\"app-icon wi wi-clear\" aria-hidden=\"true\"></span>\n </button>\n}\n\n@switch (headinglevel) {\n @case ('h1') {\n <h1 class=\"app-dialog-title modal-title\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </h1>\n }\n @case ('h2') {\n <h2 class=\"app-dialog-title modal-title\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </h2>\n }\n @case ('h3') {\n <h3 class=\"app-dialog-title modal-title\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </h3>\n }\n @case ('h4') {\n <h4 class=\"app-dialog-title modal-title\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </h4>\n }\n @case ('h5') {\n <h5 class=\"app-dialog-title modal-title\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </h5>\n }\n @case ('h6') {\n <h6 class=\"app-dialog-title modal-title\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </h6>\n }\n @default {\n <h4 class=\"app-dialog-title modal-title\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </h4>\n }\n}\n\n<ng-template #headerTemplate>\n @if (iconclass && !iconurl) {\n <i [ngClass]=\"iconclass\" [ngStyle]=\"{width: iconwidth, height: iconheight, margin: iconmargin}\"></i>\n }\n @if (iconurl) {\n <img data-identifier=\"img\" [src]=\"iconurl | image\" [ngStyle]=\"{width: iconwidth, height: iconheight, margin: iconmargin}\"/>\n }\n <span class=\"dialog-heading\" [textContent]=\"heading\" [id]=\"titleid\"></span>\n @if (subheading) {\n <span class=\"dialog-sub-heading\" [title]=\"subheading\" [textContent]=\"subheading\"></span>\n }\n</ng-template>\n" }]
176
+ args: [{ standalone: true, imports: [CommonModule, WmComponentsModule], selector: 'div[wmDialogHeader]', template: "@if (isClosable) {\n <button (click)=\"closeDialog();\"\n [attr.aria-label]=\"'Close ' + (title ? title : '') + ' dialog'\" class=\"app-dialog-close close\" [attr.title]=\"title ? 'Close ' + title + ' dialog' : dialogRef.appLocale.LABEL_CLOSE\" >\n <span class=\"app-icon wi wi-clear\" aria-hidden=\"true\"></span>\n </button>\n}\n\n@switch (headinglevel) {\n @case ('h1') {\n <h1 class=\"app-dialog-title modal-title\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </h1>\n }\n @case ('h2') {\n <h2 class=\"app-dialog-title modal-title\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </h2>\n }\n @case ('h3') {\n <h3 class=\"app-dialog-title modal-title\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </h3>\n }\n @case ('h4') {\n <h4 class=\"app-dialog-title modal-title\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </h4>\n }\n @case ('h5') {\n <h5 class=\"app-dialog-title modal-title\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </h5>\n }\n @case ('h6') {\n <h6 class=\"app-dialog-title modal-title\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </h6>\n }\n @default {\n <h4 class=\"app-dialog-title modal-title\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </h4>\n }\n}\n\n<ng-template #headerTemplate>\n @if (iconclass && !iconurl) {\n <i [ngClass]=\"iconclass\" [ngStyle]=\"{width: iconwidth, height: iconheight, margin: iconmargin}\"></i>\n }\n @if (iconurl) {\n <img data-identifier=\"img\" [src]=\"iconurl | image\" [ngStyle]=\"{width: iconwidth, height: iconheight, margin: iconmargin}\"/>\n }\n <span class=\"dialog-heading\" [textContent]=\"heading\" [id]=\"titleid\"></span>\n @if (subheading) {\n <span class=\"dialog-sub-heading\" [title]=\"subheading\" [textContent]=\"subheading\"></span>\n }\n</ng-template>\n" }]
178
177
  }], () => [{ type: i0.ElementRef }, { type: i3.BaseDialog, decorators: [{
179
178
  type: Inject,
180
179
  args: [DialogRef]
@@ -202,4 +201,4 @@ export class DialogHeaderComponent {
202
201
  type: Input
203
202
  }] }); })();
204
203
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(DialogHeaderComponent, { className: "DialogHeaderComponent", filePath: "dialog-header/dialog-header.component.ts", lineNumber: 19 }); })();
205
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLWhlYWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvZGlhbG9ncy9kZWZhdWx0L3NyYy9kaWFsb2ctaGVhZGVyL2RpYWxvZy1oZWFkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy93aWRnZXRzL2RpYWxvZ3MvZGVmYXVsdC9zcmMvZGlhbG9nLWhlYWRlci9kaWFsb2ctaGVhZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRW5FLE9BQU8sRUFBQyxRQUFRLEVBQUUsU0FBUyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBRTdDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUM5QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7OztJQ054QyxpQ0FDOEk7SUFEdEkseUxBQVMsb0JBQWEsS0FBRTtJQUU5QiwwQkFBNkQ7SUFDL0QsaUJBQVM7OztJQUZ3Rix5RUFBMkM7Ozs7SUFReEksd0JBQWdFOzs7SUFEbEUsNkJBQXlDO0lBQ3ZDLCtGQUFpRDtJQUNuRCxpQkFBSzs7OztJQURZLGNBQWdDO0lBQWhDLG9EQUFnQzs7O0lBSy9DLHdCQUFnRTs7O0lBRGxFLDZCQUF5QztJQUN2QywrRkFBaUQ7SUFDbkQsaUJBQUs7Ozs7SUFEWSxjQUFnQztJQUFoQyxvREFBZ0M7OztJQUsvQyx3QkFBZ0U7OztJQURsRSw2QkFBeUM7SUFDdkMs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bic7XG5pbXBvcnQgeyBXbUNvbXBvbmVudHNNb2R1bGUgfSBmcm9tIFwiQHdtL2NvbXBvbmVudHMvYmFzZVwiO1xuaW1wb3J0IHtDb21wb25lbnQsIEVsZW1lbnRSZWYsIEluamVjdCwgSW5wdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge2FkZENsYXNzLCB0b0Jvb2xlYW59IGZyb20gJ0B3bS9jb3JlJztcblxuaW1wb3J0IHtEaWFsb2dSZWZ9IGZyb20gJ0B3bS9jb21wb25lbnRzL2Jhc2UnO1xuaW1wb3J0IHtCYXNlRGlhbG9nfSBmcm9tICcuLi9iYXNlLWRpYWxvZyc7XG5cbmNvbnN0IERFRkFVTFRfQ0xTID0gJ2FwcC1kaWFsb2ctaGVhZGVyIG1vZGFsLWhlYWRlcic7XG5jb25zdCBERUZBVUxUX0lDT05fRElNRU5TSU9OUyA9ICcyMXB4JztcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFdtQ29tcG9uZW50c01vZHVsZV0sXG4gICAgc2VsZWN0b3I6ICdkaXZbd21EaWFsb2dIZWFkZXJdJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZGlhbG9nLWhlYWRlci5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgRGlhbG9nSGVhZGVyQ29tcG9uZW50IHtcblxuICAgIEBJbnB1dCgpIHB1YmxpYyBpY29ud2lkdGggPSBERUZBVUxUX0lDT05fRElNRU5TSU9OUztcbiAgICBASW5wdXQoKSBwdWJsaWMgaWNvbmhlaWdodCA9IERFRkFVTFRfSUNPTl9ESU1FTlNJT05TO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpY29ubWFyZ2luOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIGljb25jbGFzczogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpY29udXJsOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIGNsb3NhYmxlID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgaGVhZGluZzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBoZWFkaW5nbGV2ZWw/OiBzdHJpbmcgPSAnaDQnO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBzdWJoZWFkaW5nOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIHRpdGxlaWQ6c3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyB0aXRsZTogc3RyaW5nO1xuXG4gICAgcHVibGljIGdldCBpc0Nsb3NhYmxlKCkge1xuICAgICAgICByZXR1cm4gdG9Cb29sZWFuKHRoaXMuY2xvc2FibGUpO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGVsUmVmOiBFbGVtZW50UmVmLCBASW5qZWN0KERpYWxvZ1JlZikgcHVibGljIGRpYWxvZ1JlZjogQmFzZURpYWxvZyApIHtcbiAgICAgICAgYWRkQ2xhc3MoZWxSZWYubmF0aXZlRWxlbWVudCwgREVGQVVMVF9DTFMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbG9zZURpYWxvZygpIHtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcbiAgICB9XG59XG4iLCJAaWYgKGlzQ2xvc2FibGUpIHtcbiAgPGJ1dHRvbiAoY2xpY2spPVwiY2xvc2VEaWFsb2coKTtcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0Nsb3NlICcgKyAodGl0bGUgPyB0aXRsZSA6ICcnKSArICcgZGlhbG9nJ1wiIGNsYXNzPVwiYXBwLWRpYWxvZy1jbG9zZSBjbG9zZVwiIHRpdGxlPVwie3tkaWFsb2dSZWYuYXBwTG9jYWxlLkxBQkVMX0NMT1NFfX1cIiA+XG4gICAgPHNwYW4gY2xhc3M9XCJhcHAtaWNvbiB3aSB3aS1jbGVhclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cbiAgPC9idXR0b24+XG59XG5cbkBzd2l0Y2ggKGhlYWRpbmdsZXZlbCkge1xuICBAY2FzZSAoJ2gxJykge1xuICAgIDxoMSBjbGFzcz1cImFwcC1kaWFsb2ctdGl0bGUgbW9kYWwtdGl0bGVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvaDE+XG4gIH1cbiAgQGNhc2UgKCdoMicpIHtcbiAgICA8aDIgY2xhc3M9XCJhcHAtZGlhbG9nLXRpdGxlIG1vZGFsLXRpdGxlXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2gyPlxuICB9XG4gIEBjYXNlICgnaDMnKSB7XG4gICAgPGgzIGNsYXNzPVwiYXBwLWRpYWxvZy10aXRsZSBtb2RhbC10aXRsZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9oMz5cbiAgfVxuICBAY2FzZSAoJ2g0Jykge1xuICAgIDxoNCBjbGFzcz1cImFwcC1kaWFsb2ctdGl0bGUgbW9kYWwtdGl0bGVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvaDQ+XG4gIH1cbiAgQGNhc2UgKCdoNScpIHtcbiAgICA8aDUgY2xhc3M9XCJhcHAtZGlhbG9nLXRpdGxlIG1vZGFsLXRpdGxlXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2g1PlxuICB9XG4gIEBjYXNlICgnaDYnKSB7XG4gICAgPGg2IGNsYXNzPVwiYXBwLWRpYWxvZy10aXRsZSBtb2RhbC10aXRsZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9oNj5cbiAgfVxuICBAZGVmYXVsdCB7XG4gICAgPGg0IGNsYXNzPVwiYXBwLWRpYWxvZy10aXRsZSBtb2RhbC10aXRsZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9oND5cbiAgfVxufVxuXG48bmctdGVtcGxhdGUgI2hlYWRlclRlbXBsYXRlPlxuICBAaWYgKGljb25jbGFzcyAmJiAhaWNvbnVybCkge1xuICAgIDxpIFtuZ0NsYXNzXT1cImljb25jbGFzc1wiIFtuZ1N0eWxlXT1cInt3aWR0aDogaWNvbndpZHRoLCBoZWlnaHQ6IGljb25oZWlnaHQsIG1hcmdpbjogaWNvbm1hcmdpbn1cIj48L2k+XG4gIH1cbiAgQGlmIChpY29udXJsKSB7XG4gICAgPGltZyBkYXRhLWlkZW50aWZpZXI9XCJpbWdcIiBbc3JjXT1cImljb251cmwgfCBpbWFnZVwiIFtuZ1N0eWxlXT1cInt3aWR0aDogaWNvbndpZHRoLCBoZWlnaHQ6IGljb25oZWlnaHQsIG1hcmdpbjogaWNvbm1hcmdpbn1cIi8+XG4gIH1cbiAgPHNwYW4gY2xhc3M9XCJkaWFsb2ctaGVhZGluZ1wiIFt0ZXh0Q29udGVudF09XCJoZWFkaW5nXCIgW2lkXT1cInRpdGxlaWRcIj48L3NwYW4+XG4gIEBpZiAoc3ViaGVhZGluZykge1xuICAgIDxzcGFuIGNsYXNzPVwiZGlhbG9nLXN1Yi1oZWFkaW5nXCIgW3RpdGxlXT1cInN1YmhlYWRpbmdcIiBbdGV4dENvbnRlbnRdPVwic3ViaGVhZGluZ1wiPjwvc3Bhbj5cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
204
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLWhlYWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvZGlhbG9ncy9kZWZhdWx0L3NyYy9kaWFsb2ctaGVhZGVyL2RpYWxvZy1oZWFkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy93aWRnZXRzL2RpYWxvZ3MvZGVmYXVsdC9zcmMvZGlhbG9nLWhlYWRlci9kaWFsb2ctaGVhZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRW5FLE9BQU8sRUFBQyxRQUFRLEVBQUUsU0FBUyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBRTdDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUM5QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7OztJQ054QyxpQ0FDd0w7SUFEaEwseUxBQVMsb0JBQWEsS0FBRTtJQUU5QiwwQkFBNkQ7SUFDL0QsaUJBQVM7Ozs7OztJQU1MLHdCQUFnRTs7O0lBRGxFLDZCQUF5QztJQUN2QywrRkFBaUQ7SUFDbkQsaUJBQUs7Ozs7SUFEWSxjQUFnQztJQUFoQyxvREFBZ0M7OztJQUsvQyx3QkFBZ0U7OztJQURsRSw2QkFBeUM7SUFDdkMsK0ZBQWlEO0lBQ25ELGlCQUFLOzs7O0lBRFksY0FBZ0M7SUFBaEMsb0RBQWdDOzs7SUFLL0Msd0JBQWdFOzs7SUFEbEUsNkJBQXlDO0lBQ3ZDLCtGQUFpRDtJQUNuRCxpQkFBSzs7OztJQURZLGNBQWdDO0lBQWhDLG9EQUFnQzs7O0lBSy9DLHdCQUFnRTs7O0lBRGxFLDZCQUF5QztJQUN2QywrRkFBaUQ7SUFDbkQsaUJBQUs7Ozs7SUFEWSxjQUFnQztJQUFoQyxvREFBZ0M7OztJQUsvQyx3QkFBZ0U7OztJQURsRSw2QkFBeUM7SUFDdkMsK0ZBQWlEO0lBQ25ELGlCQUFLOzs7O0lBRFksY0FBZ0M7SUFBaEMsb0RBQWdDOzs7SUFLL0Msd0JBQWdFOzs7SUFEbEUsNkJBQXlDO0lBQ3ZDLCtGQUFpRDtJQUNuRCxpQkFBSzs7OztJQURZLGNBQWdDO0lBQWhDLG9EQUFnQzs7O0lBSy9DLHdCQUFnRTs7O0lBRGxFLDZCQUF5QztJQUN2QywrRkFBaUQ7SUFDbkQsaUJBQUs7Ozs7SUFEWSxjQUFnQztJQUFoQyxvREFBZ0M7OztJQU9qRCx1QkFBb0c7OztJQUEzRSxBQUF0QiwwQ0FBcUIsK0ZBQXVFOzs7SUFHL0YseUJBQTJIOzs7O0lBQXhFLEFBQXhCLDRFQUF1QiwrRkFBdUU7OztJQUl6SCwwQkFBd0Y7OztJQUFsQyxBQUFyQix5Q0FBb0Isa0NBQTJCOzs7SUFMbEYsQUFIQSwwRkFBNkIsK0VBR2Q7SUFHZiwwQkFBMkU7SUFDM0UsNkZBQWtCOzs7SUFQbEIsOERBRUM7SUFDRCxjQUVDO0lBRkQseUNBRUM7SUFDNEIsY0FBdUI7SUFBQyxBQUF4Qiw0Q0FBdUIsc0JBQWU7SUFDbkUsY0FFQztJQUZELDRDQUVDOztBRDlDSCxNQUFNLFdBQVcsR0FBRyxnQ0FBZ0MsQ0FBQztBQUNyRCxNQUFNLHVCQUF1QixHQUFHLE1BQU0sQ0FBQztBQVF2QyxNQUFNLE9BQU8scUJBQXFCO0lBYzlCLElBQVcsVUFBVTtRQUNqQixPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELFlBQVksS0FBaUIsRUFBNEIsU0FBcUI7UUFBckIsY0FBUyxHQUFULFNBQVMsQ0FBWTtRQWhCOUQsY0FBUyxHQUFHLHVCQUF1QixDQUFDO1FBQ3BDLGVBQVUsR0FBRyx1QkFBdUIsQ0FBQztRQUlyQyxhQUFRLEdBQUcsSUFBSSxDQUFDO1FBRWhCLGlCQUFZLEdBQVksSUFBSSxDQUFDO1FBVXpDLFFBQVEsQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFTSxXQUFXO1FBQ2QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMzQixDQUFDO3NIQXhCUSxxQkFBcUIsNERBa0JTLFNBQVM7b0VBbEJ2QyxxQkFBcUI7WUMyQmxDLEFBUEUsQUFMQSxBQUxBLEFBTEEsQUFMQSxBQUxBLEFBTEEsQUFSRixpRkFBa0IseURBUUYseURBS0EseURBS0EseURBS0EseURBS0EseURBS0EseURBS0osMEdBT2lCOzs7WUE3QzdCLHlDQUtDO1lBRUQsY0FvQ0M7WUFwQ0Qsa0RBQUEsSUFBSSxtQkFBSixJQUFJLG1CQUFKLElBQUksbUJBQUosSUFBSSxtQkFBSixJQUFJLG1CQUFKLElBQUksU0FvQ0g7NEJEN0JXLFlBQVksK0NBQUUsa0JBQWtCOztpRkFJL0IscUJBQXFCO2NBTmpDLFNBQVM7NkJBQ0ksSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGtCQUFrQixDQUFDLFlBQy9CLHFCQUFxQjs7c0JBcUJDLE1BQU07dUJBQUMsU0FBUztxQkFoQmhDLFNBQVM7a0JBQXhCLEtBQUs7WUFDVSxVQUFVO2tCQUF6QixLQUFLO1lBQ1UsVUFBVTtrQkFBekIsS0FBSztZQUNVLFNBQVM7a0JBQXhCLEtBQUs7WUFDVSxPQUFPO2tCQUF0QixLQUFLO1lBQ1UsUUFBUTtrQkFBdkIsS0FBSztZQUNVLE9BQU87a0JBQXRCLEtBQUs7WUFDVSxZQUFZO2tCQUEzQixLQUFLO1lBQ1UsVUFBVTtrQkFBekIsS0FBSztZQUNVLE9BQU87a0JBQXRCLEtBQUs7WUFDVSxLQUFLO2tCQUFwQixLQUFLOztrRkFaRyxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgV21Db21wb25lbnRzTW9kdWxlIH0gZnJvbSBcIkB3bS9jb21wb25lbnRzL2Jhc2VcIjtcbmltcG9ydCB7Q29tcG9uZW50LCBFbGVtZW50UmVmLCBJbmplY3QsIElucHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHthZGRDbGFzcywgdG9Cb29sZWFufSBmcm9tICdAd20vY29yZSc7XG5cbmltcG9ydCB7RGlhbG9nUmVmfSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcbmltcG9ydCB7QmFzZURpYWxvZ30gZnJvbSAnLi4vYmFzZS1kaWFsb2cnO1xuXG5jb25zdCBERUZBVUxUX0NMUyA9ICdhcHAtZGlhbG9nLWhlYWRlciBtb2RhbC1oZWFkZXInO1xuY29uc3QgREVGQVVMVF9JQ09OX0RJTUVOU0lPTlMgPSAnMjFweCc7XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBXbUNvbXBvbmVudHNNb2R1bGVdLFxuICAgIHNlbGVjdG9yOiAnZGl2W3dtRGlhbG9nSGVhZGVyXScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2RpYWxvZy1oZWFkZXIuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIERpYWxvZ0hlYWRlckNvbXBvbmVudCB7XG5cbiAgICBASW5wdXQoKSBwdWJsaWMgaWNvbndpZHRoID0gREVGQVVMVF9JQ09OX0RJTUVOU0lPTlM7XG4gICAgQElucHV0KCkgcHVibGljIGljb25oZWlnaHQgPSBERUZBVUxUX0lDT05fRElNRU5TSU9OUztcbiAgICBASW5wdXQoKSBwdWJsaWMgaWNvbm1hcmdpbjogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpY29uY2xhc3M6IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgaWNvbnVybDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBjbG9zYWJsZSA9IHRydWU7XG4gICAgQElucHV0KCkgcHVibGljIGhlYWRpbmc6IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgaGVhZGluZ2xldmVsPzogc3RyaW5nID0gJ2g0JztcbiAgICBASW5wdXQoKSBwdWJsaWMgc3ViaGVhZGluZzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyB0aXRsZWlkOnN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgdGl0bGU6IHN0cmluZztcblxuICAgIHB1YmxpYyBnZXQgaXNDbG9zYWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRvQm9vbGVhbih0aGlzLmNsb3NhYmxlKTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihlbFJlZjogRWxlbWVudFJlZiwgQEluamVjdChEaWFsb2dSZWYpIHB1YmxpYyBkaWFsb2dSZWY6IEJhc2VEaWFsb2cgKSB7XG4gICAgICAgIGFkZENsYXNzKGVsUmVmLm5hdGl2ZUVsZW1lbnQsIERFRkFVTFRfQ0xTKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xvc2VEaWFsb2coKSB7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgfVxufVxuIiwiQGlmIChpc0Nsb3NhYmxlKSB7XG4gIDxidXR0b24gKGNsaWNrKT1cImNsb3NlRGlhbG9nKCk7XCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidDbG9zZSAnICsgKHRpdGxlID8gdGl0bGUgOiAnJykgKyAnIGRpYWxvZydcIiBjbGFzcz1cImFwcC1kaWFsb2ctY2xvc2UgY2xvc2VcIiBbYXR0ci50aXRsZV09XCJ0aXRsZSA/ICdDbG9zZSAnICsgdGl0bGUgKyAnIGRpYWxvZycgOiBkaWFsb2dSZWYuYXBwTG9jYWxlLkxBQkVMX0NMT1NFXCIgPlxuICAgIDxzcGFuIGNsYXNzPVwiYXBwLWljb24gd2kgd2ktY2xlYXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L3NwYW4+XG4gIDwvYnV0dG9uPlxufVxuXG5Ac3dpdGNoIChoZWFkaW5nbGV2ZWwpIHtcbiAgQGNhc2UgKCdoMScpIHtcbiAgICA8aDEgY2xhc3M9XCJhcHAtZGlhbG9nLXRpdGxlIG1vZGFsLXRpdGxlXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2gxPlxuICB9XG4gIEBjYXNlICgnaDInKSB7XG4gICAgPGgyIGNsYXNzPVwiYXBwLWRpYWxvZy10aXRsZSBtb2RhbC10aXRsZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9oMj5cbiAgfVxuICBAY2FzZSAoJ2gzJykge1xuICAgIDxoMyBjbGFzcz1cImFwcC1kaWFsb2ctdGl0bGUgbW9kYWwtdGl0bGVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvaDM+XG4gIH1cbiAgQGNhc2UgKCdoNCcpIHtcbiAgICA8aDQgY2xhc3M9XCJhcHAtZGlhbG9nLXRpdGxlIG1vZGFsLXRpdGxlXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2g0PlxuICB9XG4gIEBjYXNlICgnaDUnKSB7XG4gICAgPGg1IGNsYXNzPVwiYXBwLWRpYWxvZy10aXRsZSBtb2RhbC10aXRsZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9oNT5cbiAgfVxuICBAY2FzZSAoJ2g2Jykge1xuICAgIDxoNiBjbGFzcz1cImFwcC1kaWFsb2ctdGl0bGUgbW9kYWwtdGl0bGVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvaDY+XG4gIH1cbiAgQGRlZmF1bHQge1xuICAgIDxoNCBjbGFzcz1cImFwcC1kaWFsb2ctdGl0bGUgbW9kYWwtdGl0bGVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvaDQ+XG4gIH1cbn1cblxuPG5nLXRlbXBsYXRlICNoZWFkZXJUZW1wbGF0ZT5cbiAgQGlmIChpY29uY2xhc3MgJiYgIWljb251cmwpIHtcbiAgICA8aSBbbmdDbGFzc109XCJpY29uY2xhc3NcIiBbbmdTdHlsZV09XCJ7d2lkdGg6IGljb253aWR0aCwgaGVpZ2h0OiBpY29uaGVpZ2h0LCBtYXJnaW46IGljb25tYXJnaW59XCI+PC9pPlxuICB9XG4gIEBpZiAoaWNvbnVybCkge1xuICAgIDxpbWcgZGF0YS1pZGVudGlmaWVyPVwiaW1nXCIgW3NyY109XCJpY29udXJsIHwgaW1hZ2VcIiBbbmdTdHlsZV09XCJ7d2lkdGg6IGljb253aWR0aCwgaGVpZ2h0OiBpY29uaGVpZ2h0LCBtYXJnaW46IGljb25tYXJnaW59XCIvPlxuICB9XG4gIDxzcGFuIGNsYXNzPVwiZGlhbG9nLWhlYWRpbmdcIiBbdGV4dENvbnRlbnRdPVwiaGVhZGluZ1wiIFtpZF09XCJ0aXRsZWlkXCI+PC9zcGFuPlxuICBAaWYgKHN1YmhlYWRpbmcpIHtcbiAgICA8c3BhbiBjbGFzcz1cImRpYWxvZy1zdWItaGVhZGluZ1wiIFt0aXRsZV09XCJzdWJoZWFkaW5nXCIgW3RleHRDb250ZW50XT1cInN1YmhlYWRpbmdcIj48L3NwYW4+XG4gIH1cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -8,7 +8,6 @@ import { DialogRef, register, PROP_STRING, PROP_BOOLEAN, BaseComponent, provideA
8
8
  import * as i1$1 from '@angular/common';
9
9
  import { CommonModule } from '@angular/common';
10
10
  import { Router, NavigationEnd } from '@angular/router';
11
- import { createFocusTrap } from '@wavemaker/focus-trap';
12
11
 
13
12
  const DEFAULT_CLS$1 = 'app-dialog-body modal-body';
14
13
  class DialogBodyDirective {
@@ -118,9 +117,6 @@ class DialogFooterDirective extends BaseComponent {
118
117
  }] }], null); })();
119
118
 
120
119
  const eventsRegistered = false;
121
- const focusTrapObj = {
122
- activeElement: null
123
- };
124
120
  const invokeOpenedCallback = (ref) => {
125
121
  if (ref) {
126
122
  setTimeout(() => {
@@ -130,19 +126,12 @@ const invokeOpenedCallback = (ref) => {
130
126
  $('body > modal-container > div').wrap('<' + root + '/>');
131
127
  }
132
128
  ref.invokeEventCallback('opened', { $event: { type: 'opened' } });
133
- // focusTrapObj will create focus trap for the respective dialog according to the titleId assigned to them which is unique.
129
+ // Focusing the first focusable element when the dialog is opened
134
130
  const container = $('[aria-labelledby= ' + ref.titleId + ']')[0];
135
131
  const keyboardFocusableElements = [container.querySelectorAll('a, button, input, textarea, select, details, iframe, embed, object, summary dialog, audio[controls], video[controls], [contenteditable], [tabindex]:not([tabindex="-1"])')].filter(el => {
136
132
  return (!el[0].hasAttribute('disabled') && !el[0].hasAttribute('hidden'));
137
133
  })[0];
138
134
  $(keyboardFocusableElements[0]).focus();
139
- focusTrapObj[ref.titleId] = createFocusTrap(container, {
140
- onActivate: () => container.classList.add('is-active'),
141
- onDeactivate: () => container.classList.remove('is-active'),
142
- allowOutsideClick: true,
143
- setReturnFocus: focusTrapObj.activeElement,
144
- });
145
- focusTrapObj[ref.titleId].activate();
146
135
  const openedDialogs = ref.dialogService.getOpenedDialogs();
147
136
  if (openedDialogs.length > 1) {
148
137
  let zIndex = Number($("[aria-labelledby= " + openedDialogs[openedDialogs.length - 2].titleId + "]").css('z-index'));
@@ -168,6 +157,7 @@ class BaseDialog extends BaseComponent {
168
157
  super(inj, config, explicitContext);
169
158
  this.modalOptions = modalOptions;
170
159
  this.titleId = 'wmdialog-' + generateGUId();
160
+ this.dialogOriginFocusStack = [];
171
161
  this.dialogService = inj.get(AbstractDialogService);
172
162
  this.bsModal = inj.get(BsModalService);
173
163
  const router = inj.get(Router);
@@ -180,9 +170,7 @@ class BaseDialog extends BaseComponent {
180
170
  this.dialogId = id;
181
171
  }
182
172
  }),
183
- this.bsModal.onShow.subscribe(() => {
184
- focusTrapObj.activeElement = document.activeElement;
185
- }),
173
+ this.bsModal.onShow.subscribe(() => { }),
186
174
  this.bsModal.onHidden.subscribe((closeReason) => {
187
175
  let ref = this.dialogService.getDialogRefFromClosedDialogs();
188
176
  if (this.dialogId && closeReason?.id === this.dialogId) {
@@ -202,13 +190,7 @@ class BaseDialog extends BaseComponent {
202
190
  }
203
191
  }
204
192
  }),
205
- this.bsModal.onHide.subscribe(() => {
206
- // Will de-activate focus trap for the respective dialog when they are closed.
207
- const ref = this.dialogService.getDialogRefFromClosedDialogs();
208
- if (ref && focusTrapObj[ref.titleId] !== undefined) {
209
- focusTrapObj[ref.titleId].deactivate();
210
- }
211
- }),
193
+ this.bsModal.onHide.subscribe(() => { }),
212
194
  router.events.subscribe(e => {
213
195
  if (e instanceof NavigationEnd) {
214
196
  this.close();
@@ -239,6 +221,7 @@ class BaseDialog extends BaseComponent {
239
221
  // extend the context with the initState
240
222
  Object.assign(this.context, initState);
241
223
  this.modalOptions.ariaLabelledBy = this.titleId;
224
+ this.dialogOriginFocusStack.push(document.activeElement);
242
225
  this.dialogRef = this.bsModal.show(this.getTemplateRef(), this.modalOptions);
243
226
  // Fix for [WMS-23948]: Focus moving out of active Dialog widget
244
227
  if (this.dialogService.getOpenedDialogs().length === 1 && (isMobile())) {
@@ -255,8 +238,11 @@ class BaseDialog extends BaseComponent {
255
238
  // remove the popovers in the page to avoid the overlap with dialog
256
239
  // closePopover(this.$element); Commenting this line because it is causing regression(if we have dialog inside popover as partail content, then the dialog close is not working because on closing the popover the partial get destroyed.)
257
240
  if (this.dialogRef) {
241
+ const lastDialogOrigin = this.dialogOriginFocusStack.pop();
258
242
  this.dialogService.addToClosedDialogs(this);
259
243
  this.dialogRef.hide();
244
+ // Return focus to the originating element upon dialog closure
245
+ lastDialogOrigin?.focus();
260
246
  }
261
247
  }
262
248
  /**
@@ -317,8 +303,7 @@ function DialogHeaderComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
317
303
  i0.ɵɵelementEnd();
318
304
  } if (rf & 2) {
319
305
  const ctx_r1 = i0.ɵɵnextContext();
320
- i0.ɵɵpropertyInterpolate("title", ctx_r1.dialogRef.appLocale.LABEL_CLOSE);
321
- i0.ɵɵattribute("aria-label", "Close " + (ctx_r1.title ? ctx_r1.title : "") + " dialog");
306
+ i0.ɵɵattribute("aria-label", "Close " + (ctx_r1.title ? ctx_r1.title : "") + " dialog")("title", ctx_r1.title ? "Close " + ctx_r1.title + " dialog" : ctx_r1.dialogRef.appLocale.LABEL_CLOSE);
322
307
  } }
323
308
  function DialogHeaderComponent_Case_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
324
309
  i0.ɵɵelementContainer(0);
@@ -462,7 +447,7 @@ class DialogHeaderComponent {
462
447
  this.dialogRef.close();
463
448
  }
464
449
  static { this.ɵfac = function DialogHeaderComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || DialogHeaderComponent)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(DialogRef)); }; }
465
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DialogHeaderComponent, selectors: [["div", "wmDialogHeader", ""]], inputs: { iconwidth: "iconwidth", iconheight: "iconheight", iconmargin: "iconmargin", iconclass: "iconclass", iconurl: "iconurl", closable: "closable", heading: "heading", headinglevel: "headinglevel", subheading: "subheading", titleid: "titleid", title: "title" }, standalone: true, features: [i0.ɵɵStandaloneFeature], attrs: _c0, decls: 10, vars: 2, consts: [["headerTemplate", ""], [1, "app-dialog-close", "close", 3, "title"], [1, "app-dialog-title", "modal-title"], [1, "app-dialog-close", "close", 3, "click", "title"], ["aria-hidden", "true", 1, "app-icon", "wi", "wi-clear"], [4, "ngTemplateOutlet"], [3, "ngClass", "ngStyle"], ["data-identifier", "img", 3, "src", "ngStyle"], [1, "dialog-heading", 3, "textContent", "id"], [1, "dialog-sub-heading", 3, "title", "textContent"]], template: function DialogHeaderComponent_Template(rf, ctx) { if (rf & 1) {
450
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DialogHeaderComponent, selectors: [["div", "wmDialogHeader", ""]], inputs: { iconwidth: "iconwidth", iconheight: "iconheight", iconmargin: "iconmargin", iconclass: "iconclass", iconurl: "iconurl", closable: "closable", heading: "heading", headinglevel: "headinglevel", subheading: "subheading", titleid: "titleid", title: "title" }, standalone: true, features: [i0.ɵɵStandaloneFeature], attrs: _c0, decls: 10, vars: 2, consts: [["headerTemplate", ""], [1, "app-dialog-close", "close"], [1, "app-dialog-title", "modal-title"], [1, "app-dialog-close", "close", 3, "click"], ["aria-hidden", "true", 1, "app-icon", "wi", "wi-clear"], [4, "ngTemplateOutlet"], [3, "ngClass", "ngStyle"], ["data-identifier", "img", 3, "src", "ngStyle"], [1, "dialog-heading", 3, "textContent", "id"], [1, "dialog-sub-heading", 3, "title", "textContent"]], template: function DialogHeaderComponent_Template(rf, ctx) { if (rf & 1) {
466
451
  i0.ɵɵtemplate(0, DialogHeaderComponent_Conditional_0_Template, 2, 2, "button", 1)(1, DialogHeaderComponent_Case_1_Template, 2, 1, "h1", 2)(2, DialogHeaderComponent_Case_2_Template, 2, 1, "h2", 2)(3, DialogHeaderComponent_Case_3_Template, 2, 1, "h3", 2)(4, DialogHeaderComponent_Case_4_Template, 2, 1, "h4", 2)(5, DialogHeaderComponent_Case_5_Template, 2, 1, "h5", 2)(6, DialogHeaderComponent_Case_6_Template, 2, 1, "h6", 2)(7, DialogHeaderComponent_Case_7_Template, 2, 1, "h4", 2)(8, DialogHeaderComponent_ng_template_8_Template, 4, 5, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
467
452
  } if (rf & 2) {
468
453
  let tmp_2_0;
@@ -473,7 +458,7 @@ class DialogHeaderComponent {
473
458
  }
474
459
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DialogHeaderComponent, [{
475
460
  type: Component,
476
- args: [{ standalone: true, imports: [CommonModule, WmComponentsModule], selector: 'div[wmDialogHeader]', template: "@if (isClosable) {\n <button (click)=\"closeDialog();\"\n [attr.aria-label]=\"'Close ' + (title ? title : '') + ' dialog'\" class=\"app-dialog-close close\" title=\"{{dialogRef.appLocale.LABEL_CLOSE}}\" >\n <span class=\"app-icon wi wi-clear\" aria-hidden=\"true\"></span>\n </button>\n}\n\n@switch (headinglevel) {\n @case ('h1') {\n <h1 class=\"app-dialog-title modal-title\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </h1>\n }\n @case ('h2') {\n <h2 class=\"app-dialog-title modal-title\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </h2>\n }\n @case ('h3') {\n <h3 class=\"app-dialog-title modal-title\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </h3>\n }\n @case ('h4') {\n <h4 class=\"app-dialog-title modal-title\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </h4>\n }\n @case ('h5') {\n <h5 class=\"app-dialog-title modal-title\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </h5>\n }\n @case ('h6') {\n <h6 class=\"app-dialog-title modal-title\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </h6>\n }\n @default {\n <h4 class=\"app-dialog-title modal-title\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </h4>\n }\n}\n\n<ng-template #headerTemplate>\n @if (iconclass && !iconurl) {\n <i [ngClass]=\"iconclass\" [ngStyle]=\"{width: iconwidth, height: iconheight, margin: iconmargin}\"></i>\n }\n @if (iconurl) {\n <img data-identifier=\"img\" [src]=\"iconurl | image\" [ngStyle]=\"{width: iconwidth, height: iconheight, margin: iconmargin}\"/>\n }\n <span class=\"dialog-heading\" [textContent]=\"heading\" [id]=\"titleid\"></span>\n @if (subheading) {\n <span class=\"dialog-sub-heading\" [title]=\"subheading\" [textContent]=\"subheading\"></span>\n }\n</ng-template>\n" }]
461
+ args: [{ standalone: true, imports: [CommonModule, WmComponentsModule], selector: 'div[wmDialogHeader]', template: "@if (isClosable) {\n <button (click)=\"closeDialog();\"\n [attr.aria-label]=\"'Close ' + (title ? title : '') + ' dialog'\" class=\"app-dialog-close close\" [attr.title]=\"title ? 'Close ' + title + ' dialog' : dialogRef.appLocale.LABEL_CLOSE\" >\n <span class=\"app-icon wi wi-clear\" aria-hidden=\"true\"></span>\n </button>\n}\n\n@switch (headinglevel) {\n @case ('h1') {\n <h1 class=\"app-dialog-title modal-title\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </h1>\n }\n @case ('h2') {\n <h2 class=\"app-dialog-title modal-title\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </h2>\n }\n @case ('h3') {\n <h3 class=\"app-dialog-title modal-title\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </h3>\n }\n @case ('h4') {\n <h4 class=\"app-dialog-title modal-title\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </h4>\n }\n @case ('h5') {\n <h5 class=\"app-dialog-title modal-title\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </h5>\n }\n @case ('h6') {\n <h6 class=\"app-dialog-title modal-title\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </h6>\n }\n @default {\n <h4 class=\"app-dialog-title modal-title\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </h4>\n }\n}\n\n<ng-template #headerTemplate>\n @if (iconclass && !iconurl) {\n <i [ngClass]=\"iconclass\" [ngStyle]=\"{width: iconwidth, height: iconheight, margin: iconmargin}\"></i>\n }\n @if (iconurl) {\n <img data-identifier=\"img\" [src]=\"iconurl | image\" [ngStyle]=\"{width: iconwidth, height: iconheight, margin: iconmargin}\"/>\n }\n <span class=\"dialog-heading\" [textContent]=\"heading\" [id]=\"titleid\"></span>\n @if (subheading) {\n <span class=\"dialog-sub-heading\" [title]=\"subheading\" [textContent]=\"subheading\"></span>\n }\n</ng-template>\n" }]
477
462
  }], () => [{ type: i0.ElementRef }, { type: BaseDialog, decorators: [{
478
463
  type: Inject,
479
464
  args: [DialogRef]