@energycap/components 0.37.4-ECAP-18945-record-view-mask.20230829-1745 → 0.37.4-ECAP-19248-factor-searcher-updates.20230831-1041

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.
@@ -18,23 +18,6 @@ export class DialogComponent {
18
18
  this.close(new DialogResult(false));
19
19
  }
20
20
  }
21
- /**
22
- * Defines the width of the dialog (height is auto). Can be a number that will be converted to pixels, or xsmall(320px), small(480px), medium(640px), or large(1024px)
23
- */
24
- set size(value) {
25
- this._size = value;
26
- // If the size is a string, set the dialog class. Otherwise, clear it.
27
- if (typeof value == 'string') {
28
- this.dialogSizeClass = `dialog-${value}`;
29
- }
30
- else {
31
- this.dialogSizeClass = undefined;
32
- }
33
- }
34
- ;
35
- get size() {
36
- return this._size;
37
- }
38
21
  constructor(componentFactoryResolver, windowService, dialogService, documentRef) {
39
22
  this.componentFactoryResolver = componentFactoryResolver;
40
23
  this.windowService = windowService;
@@ -58,16 +41,10 @@ export class DialogComponent {
58
41
  this.displayAsPanel = false;
59
42
  this.alignToTop = false;
60
43
  this.transparentMask = false;
61
- this.noMask = false;
62
44
  /**
63
45
  * Defines the width of the dialog (height is auto). Can be a number that will be converted to pixels, or xsmall(320px), small(480px), medium(640px), or large(1024px)
64
46
  */
65
- this._size = 'small';
66
- /**
67
- * Bound to the host. The classes set the --ec-dialog-width variable to our default 'small', 'medium', etc. sizes.
68
- * Undefined when the size is a number, which is used for custom sizes.
69
- */
70
- this.dialogSizeClass = `dialog-${this._size}`;
47
+ this.size = "small";
71
48
  /**
72
49
  * Emits an event when the dialog is opened
73
50
  */
@@ -116,9 +93,6 @@ export class DialogComponent {
116
93
  if (options.transparentMask !== undefined) {
117
94
  this.transparentMask = options.transparentMask;
118
95
  }
119
- if (options.noMask !== undefined) {
120
- this.noMask = options.noMask;
121
- }
122
96
  if (options.canOpenDialog !== undefined) {
123
97
  const canOpen = await options.canOpenDialog();
124
98
  if (!canOpen) {
@@ -219,13 +193,10 @@ export class DialogComponent {
219
193
  }
220
194
  }
221
195
  DialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DialogComponent, deps: [{ token: i0.ComponentFactoryResolver }, { token: i1.WindowService }, { token: i2.DialogService }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });
222
- DialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: DialogComponent, selector: "ec-dialog", inputs: { size: "size", content: "content", context: "context", options: "options", dialogOpenStartEventId: "dialogOpenStartEventId" }, outputs: { opened: "opened", closed: "closed" }, host: { listeners: { "click": "onOverlayClick($event)" }, properties: { "class": "dialogSizeClass", "style.--ec-dialog-width.px": "width", "class.is-open": "this.isOpen", "class.fade-in": "this.fadeIn", "class.fade-out": "this.fadeOut", "class.is-panel": "this.displayAsPanel", "class.is-top-aligned": "this.alignToTop", "class.is-transparent": "this.transparentMask", "class.no-mask": "this.noMask" } }, viewQueries: [{ propertyName: "contentContainer", first: true, predicate: ["content"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: '<article [style.min-width]="minWidth" cdkTrapFocus cdkTrapFocusAutoCapture><ng-template #content></ng-template></article>', isInline: true, styles: ["@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideIn{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes panelMaskFadeIn{0%{background-color:transparent}to{background-color:var(--ec-dialog-background-color)}}:host{--ec-dialog-background-color: var(--ec-background-color-dialog);align-items:center;background-color:var(--ec-dialog-background-color);justify-content:center;position:fixed;z-index:var(--ec-z-index-dialog);inset:0;display:none}:host.is-open{display:flex}:host.fade-in{animation-name:fadeIn;animation-duration:125ms;animation-fill-mode:forwards;animation-timing-function:ease-in-out}:host.fade-out{animation-name:fadeIn;animation-duration:.1s;animation-direction:reverse;animation-fill-mode:forwards;animation-timing-function:ease-in-out}:host.is-panel article{position:absolute;top:0;bottom:0;right:0;max-height:none;border-right:0;border-top:0;border-bottom:0;border-radius:0;box-shadow:0 0 .5rem var(--ec-color-shadow)}:host.is-panel.fade-in{animation-name:panelMaskFadeIn;animation-duration:.25s;animation-fill-mode:forwards}:host.is-panel.fade-in article{animation-name:slideIn;animation-duration:.25s;animation-fill-mode:forwards;animation-timing-function:ease-out}:host.is-panel.fade-out{animation-name:panelMaskFadeIn;animation-direction:reverse;animation-fill-mode:forwards}:host.is-panel.fade-out article{animation-name:slideIn;animation-duration:225ms;animation-direction:reverse;animation-fill-mode:forwards;animation-timing-function:ease-in}:host.is-panel.no-mask{left:auto;width:var(--ec-dialog-width)}:host.is-top-aligned{align-items:flex-start}:host.is-top-aligned article{min-height:auto;margin-top:20vh}:host.is-transparent{--ec-dialog-background-color: transparent}article{background-color:var(--ec-background-color-body);background-clip:padding-box;box-shadow:0 0 .625rem #1a1a2333;border-radius:var(--ec-border-radius-dialog);overflow:hidden;display:flex;flex:none;min-height:9rem;max-height:90vh;max-width:90vw;width:var(--ec-dialog-width)}:host.dialog-xsmall{--ec-dialog-width: 20rem}:host.dialog-small{--ec-dialog-width: 30rem}:host.dialog-medium{--ec-dialog-width: 40rem}:host.dialog-large{--ec-dialog-width: 50rem}:host.dialog-xlarge{--ec-dialog-width: 60rem}:host.dialog-full{--ec-dialog-width: 90vw}\n"], dependencies: [{ kind: "directive", type: i3.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }] });
196
+ DialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: DialogComponent, selector: "ec-dialog", inputs: { size: "size", content: "content", context: "context", options: "options", dialogOpenStartEventId: "dialogOpenStartEventId" }, outputs: { opened: "opened", closed: "closed" }, host: { listeners: { "click": "onOverlayClick($event)" }, properties: { "class.is-open": "this.isOpen", "class.fade-in": "this.fadeIn", "class.fade-out": "this.fadeOut", "class.is-panel": "this.displayAsPanel", "class.is-top-aligned": "this.alignToTop", "class.is-transparent": "this.transparentMask" } }, viewQueries: [{ propertyName: "contentContainer", first: true, predicate: ["content"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: '<article [style.width.px]="width" [style.min-width]="minWidth" class="dialog-{{size}}" cdkTrapFocus cdkTrapFocusAutoCapture><ng-template #content></ng-template></article>', isInline: true, styles: ["@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideIn{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes panelMaskFadeIn{0%{background-color:transparent}to{background-color:var(--ec-dialog-background-color)}}:host{--ec-dialog-background-color: var(--ec-background-color-dialog);align-items:center;background-color:var(--ec-dialog-background-color);justify-content:center;position:fixed;z-index:var(--ec-z-index-dialog);inset:0;display:none}:host.is-open{display:flex}:host.fade-in{animation-name:fadeIn;animation-duration:125ms;animation-fill-mode:forwards;animation-timing-function:ease-in-out}:host.fade-out{animation-name:fadeIn;animation-duration:.1s;animation-direction:reverse;animation-fill-mode:forwards;animation-timing-function:ease-in-out}:host.is-panel article{position:absolute;top:0;bottom:0;right:0;max-height:none;border-right:0;border-top:0;border-bottom:0;border-radius:0;box-shadow:0 0 .5rem var(--ec-color-shadow)}:host.is-panel.fade-in{animation-name:panelMaskFadeIn;animation-duration:.25s;animation-fill-mode:forwards}:host.is-panel.fade-in article{animation-name:slideIn;animation-duration:.25s;animation-fill-mode:forwards;animation-timing-function:ease-out}:host.is-panel.fade-out{animation-name:panelMaskFadeIn;animation-direction:reverse;animation-fill-mode:forwards}:host.is-panel.fade-out article{animation-name:slideIn;animation-duration:225ms;animation-direction:reverse;animation-fill-mode:forwards;animation-timing-function:ease-in}:host.is-top-aligned{align-items:flex-start}:host.is-top-aligned article{min-height:auto;margin-top:20vh}:host.is-transparent{--ec-dialog-background-color: transparent}article{background-color:var(--ec-background-color-body);background-clip:padding-box;box-shadow:0 0 .625rem #1a1a2333;border-radius:var(--ec-border-radius-dialog);overflow:hidden;display:flex;flex:none;min-height:9rem;max-height:90vh;max-width:90vw}.dialog-xsmall{width:20rem}.dialog-small{width:30rem}.dialog-medium{width:40rem}.dialog-large{width:50rem}.dialog-xlarge{width:60rem}.dialog-full{width:90vw}\n"], dependencies: [{ kind: "directive", type: i3.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }] });
223
197
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DialogComponent, decorators: [{
224
198
  type: Component,
225
- args: [{ selector: 'ec-dialog', template: '<article [style.min-width]="minWidth" cdkTrapFocus cdkTrapFocusAutoCapture><ng-template #content></ng-template></article>', host: {
226
- '[class]': 'dialogSizeClass',
227
- '[style.--ec-dialog-width.px]': 'width'
228
- }, styles: ["@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideIn{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes panelMaskFadeIn{0%{background-color:transparent}to{background-color:var(--ec-dialog-background-color)}}:host{--ec-dialog-background-color: var(--ec-background-color-dialog);align-items:center;background-color:var(--ec-dialog-background-color);justify-content:center;position:fixed;z-index:var(--ec-z-index-dialog);inset:0;display:none}:host.is-open{display:flex}:host.fade-in{animation-name:fadeIn;animation-duration:125ms;animation-fill-mode:forwards;animation-timing-function:ease-in-out}:host.fade-out{animation-name:fadeIn;animation-duration:.1s;animation-direction:reverse;animation-fill-mode:forwards;animation-timing-function:ease-in-out}:host.is-panel article{position:absolute;top:0;bottom:0;right:0;max-height:none;border-right:0;border-top:0;border-bottom:0;border-radius:0;box-shadow:0 0 .5rem var(--ec-color-shadow)}:host.is-panel.fade-in{animation-name:panelMaskFadeIn;animation-duration:.25s;animation-fill-mode:forwards}:host.is-panel.fade-in article{animation-name:slideIn;animation-duration:.25s;animation-fill-mode:forwards;animation-timing-function:ease-out}:host.is-panel.fade-out{animation-name:panelMaskFadeIn;animation-direction:reverse;animation-fill-mode:forwards}:host.is-panel.fade-out article{animation-name:slideIn;animation-duration:225ms;animation-direction:reverse;animation-fill-mode:forwards;animation-timing-function:ease-in}:host.is-panel.no-mask{left:auto;width:var(--ec-dialog-width)}:host.is-top-aligned{align-items:flex-start}:host.is-top-aligned article{min-height:auto;margin-top:20vh}:host.is-transparent{--ec-dialog-background-color: transparent}article{background-color:var(--ec-background-color-body);background-clip:padding-box;box-shadow:0 0 .625rem #1a1a2333;border-radius:var(--ec-border-radius-dialog);overflow:hidden;display:flex;flex:none;min-height:9rem;max-height:90vh;max-width:90vw;width:var(--ec-dialog-width)}:host.dialog-xsmall{--ec-dialog-width: 20rem}:host.dialog-small{--ec-dialog-width: 30rem}:host.dialog-medium{--ec-dialog-width: 40rem}:host.dialog-large{--ec-dialog-width: 50rem}:host.dialog-xlarge{--ec-dialog-width: 60rem}:host.dialog-full{--ec-dialog-width: 90vw}\n"] }]
199
+ args: [{ selector: 'ec-dialog', template: '<article [style.width.px]="width" [style.min-width]="minWidth" class="dialog-{{size}}" cdkTrapFocus cdkTrapFocusAutoCapture><ng-template #content></ng-template></article>', styles: ["@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideIn{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes panelMaskFadeIn{0%{background-color:transparent}to{background-color:var(--ec-dialog-background-color)}}:host{--ec-dialog-background-color: var(--ec-background-color-dialog);align-items:center;background-color:var(--ec-dialog-background-color);justify-content:center;position:fixed;z-index:var(--ec-z-index-dialog);inset:0;display:none}:host.is-open{display:flex}:host.fade-in{animation-name:fadeIn;animation-duration:125ms;animation-fill-mode:forwards;animation-timing-function:ease-in-out}:host.fade-out{animation-name:fadeIn;animation-duration:.1s;animation-direction:reverse;animation-fill-mode:forwards;animation-timing-function:ease-in-out}:host.is-panel article{position:absolute;top:0;bottom:0;right:0;max-height:none;border-right:0;border-top:0;border-bottom:0;border-radius:0;box-shadow:0 0 .5rem var(--ec-color-shadow)}:host.is-panel.fade-in{animation-name:panelMaskFadeIn;animation-duration:.25s;animation-fill-mode:forwards}:host.is-panel.fade-in article{animation-name:slideIn;animation-duration:.25s;animation-fill-mode:forwards;animation-timing-function:ease-out}:host.is-panel.fade-out{animation-name:panelMaskFadeIn;animation-direction:reverse;animation-fill-mode:forwards}:host.is-panel.fade-out article{animation-name:slideIn;animation-duration:225ms;animation-direction:reverse;animation-fill-mode:forwards;animation-timing-function:ease-in}:host.is-top-aligned{align-items:flex-start}:host.is-top-aligned article{min-height:auto;margin-top:20vh}:host.is-transparent{--ec-dialog-background-color: transparent}article{background-color:var(--ec-background-color-body);background-clip:padding-box;box-shadow:0 0 .625rem #1a1a2333;border-radius:var(--ec-border-radius-dialog);overflow:hidden;display:flex;flex:none;min-height:9rem;max-height:90vh;max-width:90vw}.dialog-xsmall{width:20rem}.dialog-small{width:30rem}.dialog-medium{width:40rem}.dialog-large{width:50rem}.dialog-xlarge{width:60rem}.dialog-full{width:90vw}\n"] }]
229
200
  }], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }, { type: i1.WindowService }, { type: i2.DialogService }, { type: Document, decorators: [{
230
201
  type: Inject,
231
202
  args: [DOCUMENT]
@@ -247,9 +218,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
247
218
  }], transparentMask: [{
248
219
  type: HostBinding,
249
220
  args: ['class.is-transparent']
250
- }], noMask: [{
251
- type: HostBinding,
252
- args: ['class.no-mask']
253
221
  }], onOverlayClick: [{
254
222
  type: HostListener,
255
223
  args: ['click', ['$event']]
@@ -271,4 +239,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
271
239
  type: ViewChild,
272
240
  args: ['content', { read: ViewContainerRef, static: true }]
273
241
  }] } });
274
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9kaXNwbGF5L2RpYWxvZy9kaWFsb2cuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUEwQyxZQUFZLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFRLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xNLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHdEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUE2QixZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFHL0csaUVBQWlFO0FBQ2pFLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFXLEdBQUcsQ0FBQztBQUM5QyxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBVyxHQUFHLENBQUM7QUFDL0MsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQVcsR0FBRyxDQUFDO0FBQzdDLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFXLEdBQUcsQ0FBQztBQVc5QyxNQUFNLE9BQU8sZUFBZTtJQTJCZ0IsY0FBYyxDQUFDLEtBQWlCO1FBQ3hFLElBQWtCLEtBQUssQ0FBQyxNQUFPLENBQUMsT0FBTyxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQzlFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUNyQztJQUNI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QUFXO3VCQUFDLGVBQWU7Z0JBRWMsY0FBYztzQkFBdkQsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBU2IsSUFBSTtzQkFBdkIsS0FBSztnQkF1QkcsT0FBTztzQkFBZixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBT0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUtXLE1BQU07c0JBQXRCLE1BQU07Z0JBS1UsTUFBTTtzQkFBdEIsTUFBTTtnQkFLZ0UsZ0JBQWdCO3NCQUF0RixTQUFTO3VCQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgQ29tcG9uZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RCaW5kaW5nLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPdXRwdXQsIFR5cGUsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiwgVGVtcGxhdGVSZWYsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyB0aW1lciB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgV2luZG93U2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvd2luZG93LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEaWFsb2dDb250ZW50IH0gZnJvbSAnLi9kaWFsb2ctY29udGVudCc7XHJcbmltcG9ydCB7IERpYWxvZ09wZW5FbmRFdmVudCwgRGlhbG9nQ2xvc2VFdmVudCwgRGlhbG9nU2l6ZSwgRGlhbG9nT3B0aW9ucywgRGlhbG9nUmVzdWx0IH0gZnJvbSAnLi9kaWFsb2ctdHlwZXMnO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi9kaWFsb2cuc2VydmljZSc7XHJcblxyXG4vKiogVGhlc2UgdmFsdWVzIG5lZWQgdG8gYmUga2VwdCBpbiBzeW5jIHdpdGggZGlhbG9nLWJhc2Uuc2NzcyAqL1xyXG5leHBvcnQgY29uc3QgRGlhbG9nT3BlbkR1cmF0aW9uOiBudW1iZXIgPSAxMjU7XHJcbmV4cG9ydCBjb25zdCBEaWFsb2dDbG9zZUR1cmF0aW9uOiBudW1iZXIgPSAxMDA7XHJcbmV4cG9ydCBjb25zdCBQYW5lbE9wZW5EdXJhdGlvbjogbnVtYmVyID0gMjUwO1xyXG5leHBvcnQgY29uc3QgUGFuZWxDbG9zZUR1cmF0aW9uOiBudW1iZXIgPSAyMjU7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2VjLWRpYWxvZycsXHJcbiAgdGVtcGxhdGU6ICc8YXJ0aWNsZSBbc3R5bGUubWluLXdpZHRoXT1cIm1pbldpZHRoXCIgY2RrVHJhcEZvY3VzIGNka1RyYXBGb2N1c0F1dG9DYXB0dXJlPjxuZy10ZW1wbGF0ZSAjY29udGVudD48L25nLXRlbXBsYXRlPjwvYXJ0aWNsZT4nLFxyXG4gIHN0eWxlVXJsczogWycuL2RpYWxvZy5jb21wb25lbnQuc2NzcyddLFxyXG4gIGhvc3Q6IHtcclxuICAgICdbY2xhc3NdJzogJ2RpYWxvZ1NpemVDbGFzcycsXHJcbiAgICAnW3N0eWxlLi0tZWMtZGlhbG9nLXdpZHRoLnB4XSc6ICd3aWR0aCdcclxuICB9XHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEaWFsb2dDb21wb25lbnQge1xyXG4gIC8qKlxyXG4gICAqIEFkZC9yZW1vdmUgdGhlIGlzLW9wZW4gY3NzIGNsYXNzIHRvIHRoZSBob3N0IGVsZW1lbnQgd2hlbiB0aGUgZGlhbG9nIGlzIG9wZW5lZC9jbG9zZWQuXHJcbiAgICogU3R5bGVzIHVzZSB0aGUgaXMtb3BlbiBjbGFzcyB0byBzaG93L2hpZGUgdGhlIGRpYWxvZy5cclxuICAgKi9cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlzLW9wZW4nKSBwdWJsaWMgaXNPcGVuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCB0aGUgZmFkZS1pbiBjc3MgY2xhc3MgdG8gdGhlIGhvc3QgZWxlbWVudCB3aGVuIHRoZSBkaWFsb2cgaXMgb3BlbmluZy4gUmVtb3ZlIHdoZW4gdHJhbnNpdGlvbiBpcyBjb21wbGV0ZS5cclxuICAgKiBTdHlsZXMgdXNlIHRoZSBmYWRlLWluIGNsYXNzIHRvIGFwcGx5IGEgZmFkZS1pbiB0cmFuc2l0aW9uIHdoaWxlIHRoZSBkaWFsb2cgaXMgb3BlbmluZy5cclxuICAgKi9cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZhZGUtaW4nKSBwdWJsaWMgZmFkZUluID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCB0aGUgZmFkZS1vdXQgY3NzIGNsYXNzIHRvIHRoZSBob3N0IGVsZW1lbnQgd2hlbiB0aGUgZGlhbG9nIGlzIGNsb3NpbmcuIFJlbW92ZSB3aGVuIHRyYW5zaXRpb24gaXMgY29tcGxldGUuXHJcbiAgICogU3R5bGVzIHVzZSB0aGUgZmFkZS1vdXQgY2xhc3MgdG8gYXBwbHkgYSBmYWRlLW91dCB0cmFuc2l0aW9uIHdoaWxlIHRoZSBkaWFsb2cgaXMgY2xvc2luZy5cclxuICAgKi9cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZhZGUtb3V0JykgcHVibGljIGZhZGVPdXQgPSBmYWxzZTtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pcy1wYW5lbCcpIHB1YmxpYyBkaXNwbGF5QXNQYW5lbCA9IGZhbHNlO1xyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlzLXRvcC1hbGlnbmVkJykgcHVibGljIGFsaWduVG9Ub3AgPSBmYWxzZTtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pcy10cmFuc3BhcmVudCcpIHB1YmxpYyB0cmFuc3BhcmVudE1hc2sgPSBmYWxzZTtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5uby1tYXNrJykgcHVibGljIG5vTWFzayA9IGZhbHNlO1xyXG5cclxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pIHB1YmxpYyBvbk92ZXJsYXlDbGljayhldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgaWYgKCg8SFRNTEVsZW1lbnQ+ZXZlbnQudGFyZ2V0KS50YWdOYW1lID09PSAnRUMtRElBTE9HJyAmJiB0aGlzLmRpc3BsYXlBc1BhbmVsKSB7XHJcbiAgICAgIHRoaXMuY2xvc2UobmV3IERpYWxvZ1Jlc3VsdChmYWxzZSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVmaW5lcyB0aGUgd2lkdGggb2YgdGhlIGRpYWxvZyAoaGVpZ2h0IGlzIGF1dG8pLiBDYW4gYmUgYSBudW1iZXIgdGhhdCB3aWxsIGJlIGNvbnZlcnRlZCB0byBwaXhlbHMsIG9yIHhzbWFsbCgzMjBweCksIHNtYWxsKDQ4MHB4KSwgbWVkaXVtKDY0MHB4KSwgb3IgbGFyZ2UoMTAyNHB4KVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgc2l6ZSh2YWx1ZTogRGlhbG9nU2l6ZSkge1xyXG4gICAgdGhpcy5fc2l6ZSA9IHZhbHVlO1xyXG4gICAgLy8gSWYgdGhlIHNpemUgaXMgYSBzdHJpbmcsIHNldCB0aGUgZGlhbG9nIGNsYXNzLiBPdGhlcndpc2UsIGNsZWFyIGl0LlxyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykge1xyXG4gICAgICB0aGlzLmRpYWxvZ1NpemVDbGFzcyA9IGBkaWFsb2ctJHt2YWx1ZX1gO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kaWFsb2dTaXplQ2xhc3MgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgfTtcclxuICBwdWJsaWMgZ2V0IHNpemUoKTogRGlhbG9nU2l6ZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2l6ZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogRGVmaW5lcyB0aGUgd2lkdGggb2YgdGhlIGRpYWxvZyAoaGVpZ2h0IGlzIGF1dG8pLiBDYW4gYmUgYSBudW1iZXIgdGhhdCB3aWxsIGJlIGNvbnZlcnRlZCB0byBwaXhlbHMsIG9yIHhzbWFsbCgzMjBweCksIHNtYWxsKDQ4MHB4KSwgbWVkaXVtKDY0MHB4KSwgb3IgbGFyZ2UoMTAyNHB4KVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3NpemU6IERpYWxvZ1NpemUgPSAnc21hbGwnO1xyXG5cclxuICAvKipcclxuICAgKiBCb3VuZCB0byB0aGUgaG9zdC4gVGhlIGNsYXNzZXMgc2V0IHRoZSAtLWVjLWRpYWxvZy13aWR0aCB2YXJpYWJsZSB0byBvdXIgZGVmYXVsdCAnc21hbGwnLCAnbWVkaXVtJywgZXRjLiBzaXplcy5cclxuICAgKiBVbmRlZmluZWQgd2hlbiB0aGUgc2l6ZSBpcyBhIG51bWJlciwgd2hpY2ggaXMgdXNlZCBmb3IgY3VzdG9tIHNpemVzLlxyXG4gICAqL1xyXG4gIGRpYWxvZ1NpemVDbGFzcz86IHN0cmluZyA9IGBkaWFsb2ctJHt0aGlzLl9zaXplfWA7XHJcblxyXG4gIEBJbnB1dCgpIGNvbnRlbnQ/OiBUeXBlPERpYWxvZ0NvbnRlbnQ8YW55Pj4gfCBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBJbnB1dCgpIGNvbnRleHQ/OiBhbnk7XHJcbiAgQElucHV0KCkgb3B0aW9ucz86IERpYWxvZ09wdGlvbnM7XHJcblxyXG4gIC8qKk9ubHkgc2V0IGlmIHRoaXMgcGFydGljdWxhciBpbnN0YW5jZSBvZiBhIGRpYWxvZyBzaG91bGQgYmUgaWRlbnRpZmllZCBzZXBhcmF0ZWx5IGZyb20gb3RoZXJzLlxyXG4gICAqIElmIHByb3ZpZGVkLCB0aGlzIGlzIGVtaXR0ZWQgdG8gdGhlIGRpYWxvZyBzZXJ2aWNlIHdpdGggT3BlbkVuZCBhbmQgQ2xvc2UgZXZlbnRzLiBEaXJlY3QgdXNhZ2VcclxuICAgKiBvZiB0aGUgRGlhbG9nQ29tcG9uZW50IGZyb20gb3V0c2lkZSBhIERpYWxvZ0dyb3VwIGRvZXMgbm90IHVzdWFsbHkgcmVxdWlyZSB1c2luZyB0aGlzIHBhcmFtZXRlciBhc1xyXG4gICAqIHRoZSBkaWFsb2cgcmVmZXJlbmNlIGl0c2VsZiBmdW5jdGlvbnMgYXMgdGhlIGlkZW50aWZpZXJcclxuICAgKi9cclxuICBASW5wdXQoKSBkaWFsb2dPcGVuU3RhcnRFdmVudElkPzogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBFbWl0cyBhbiBldmVudCB3aGVuIHRoZSBkaWFsb2cgaXMgb3BlbmVkXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHB1YmxpYyBvcGVuZWQ6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvKipcclxuICAgKiBFbWl0cyBhbiBldmVudCB3aGVuIHRoZSBkaWFsb2cgaXMgY2xvc2VkXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHB1YmxpYyBjbG9zZWQ6IEV2ZW50RW1pdHRlcjxEaWFsb2dSZXN1bHQ8YW55Pj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBjb250YWluZXIgd2hlcmUgdGhlIGNvbXBvbmVudCB3aWxsIGJlIGxvYWRlZFxyXG4gICAqL1xyXG4gIEBWaWV3Q2hpbGQoJ2NvbnRlbnQnLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYsIHN0YXRpYzogdHJ1ZSB9KSBwdWJsaWMgY29udGVudENvbnRhaW5lciE6IFZpZXdDb250YWluZXJSZWY7XHJcblxyXG4gIC8qKlxyXG4gICAqIEN1c3RvbSB3aWR0aCBvZiB0aGUgZGlhbG9nIGluIHBpeGVscy4gU2V0IGJ5IGRlZmluaW5nIHRoZSBzaXplIHByb3BlcnR5XHJcbiAgICogYXMgYSBudW1iZXIgdmFsdWUuXHJcbiAgICovXHJcbiAgcHVibGljIHdpZHRoPzogbnVtYmVyO1xyXG5cclxuICAvKipcclxuICAgKiBDdXN0b20gbWluLXdpZHRoIG9mIHRoZSBkaWFsb2cuIE9ubHkgdGFrZXMgZWZmZWN0IGlmIHNpemUgaXMgc2V0IHRvIGR5bmFtaWMuXHJcbiAgICogTXVzdCBpbmNsdWRlIHVuaXRzLCBpLmUuIFwiMzJyZW1cIiBvciBcIjY0MHB4XCJcclxuICAgKi9cclxuICBwdWJsaWMgbWluV2lkdGg/OiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIEEgcmVmZXJlbmNlIG9mIHRoZSBjb21wb25lbnQgb25jZSBpdCBoYXMgYmVlbiBsb2FkZWRcclxuICAgKi9cclxuICBwdWJsaWMgY29tcG9uZW50UmVmPzogQ29tcG9uZW50UmVmPGFueT47XHJcblxyXG4gIHByaXZhdGUgcHJldmlvdXNseUZvY3VzZWRFbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgICBwcml2YXRlIHdpbmRvd1NlcnZpY2U6IFdpbmRvd1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXHJcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50UmVmOiBEb2N1bWVudFxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY29udGVudCkge1xyXG4gICAgICB0aGlzLm9wZW4odGhpcy5jb250ZW50LCB0aGlzLmNvbnRleHQsIHRoaXMub3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIC8vIFJlc3RvcmUgZm9jdXMgdG8gdGhlIHByZXZpb3VzbHkgZm9jdXNlZCBlbGVtZW50IHdoZW4gdGhlIGRpYWxvZyBpcyBkZXN0cm95ZWQuXHJcbiAgICAvLyBOZWVkIHRvIGRvIHRoaXMgaGVyZSBhbmQgbm90IGluIGNsb3NlKCkgYmVjYXVzZSBjZGtUcmFwRm9jdXNBdXRvQ2FwdHVyZSdzIHJlLWZvY3VzIGhhcHBlbnMgaW4gbmdPbkRlc3Ryb3kuXHJcbiAgICAvLyBUaGlzIGRvZXNuJ3Qgd29yayBmb3IgZGlhbG9nIGltcGxlbWVudGF0aW9ucyBvdXRzaWRlIG9mIHRoZSBkaWFsb2cgc2VydmljZSBiZWNhdXNlIG5nT25EZXN0cm95IGlzbid0IGNhbGxlZCB3aGVuXHJcbiAgICAvLyB0aGUgZGlhbG9nIGlzIGNsb3NlZCBpbiB0aG9zZSBjYXNlcy5cclxuICAgIGlmICh0aGlzLnByZXZpb3VzbHlGb2N1c2VkRWxlbWVudCkge1xyXG4gICAgICB0aGlzLnByZXZpb3VzbHlGb2N1c2VkRWxlbWVudC5mb2N1cygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xlYXIgYW5kIHByZXZpb3VzbHkgbG9hZGVkIGNvbnRlbnRcclxuICAgKiBMb2FkIHRoZSBjb21wb25lbnRcclxuICAgKiBTYXZlIGEgcmVmZXJlbmNlIG9mIHRoZSBsb2FkZWQgY29tcG9uZW50XHJcbiAgICogU2hvdyB0aGUgZGlhbG9nIGFuZCBmYWRlIGluXHJcbiAgICovXHJcbiAgcHVibGljIGFzeW5jIG9wZW48VD4oY29tcG9uZW50OiBUeXBlPERpYWxvZ0NvbnRlbnQ8VD4+IHwgVGVtcGxhdGVSZWY8YW55PiwgY29udGV4dD86IFQsIG9wdGlvbnM/OiBEaWFsb2dPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIXRoaXMuaXNPcGVuKSB7XHJcbiAgICAgIFxyXG4gICAgICAvLyBDYXB0dXJlIHRoZSBjdXJyZW50bHkgZm9jdXNlZCBlbGVtZW50LCBhbHNvIGxvb2tpbmcgaW4gdGhlIHNoYWRvdyBkb20uIEZvY3VzIGlzIHJlc3RvcmVkIHRvIHRoaXMgZWxlbWVudCBvbmNlIHRoZSBkaWFsb2cgaXNcclxuICAgICAgLy8gZGVzdHJveWVkLiBTZWUgbmdPbkRlc3Ryb3koKS4gV2UgbmVlZCB0byBkbyB0aGlzIGhlcmUgaW4gYWRkaXRpb24gdG8gdGhlIGNka1RyYXBGb2N1c0F1dG9DYXB0dXJlIGJlY2F1c2Ugc29tZXRpbWVzIHRoZSBkaWFsb2cnc1xyXG4gICAgICAvLyBjb250ZW50IGlzIGRyYXduIGFuZCBncmFicyBmb2N1cyBiZWZvcmUgdGhlIGNka1RyYXBGb2N1c0F1dG9DYXB0dXJlIGlzIGFibGUgdG8gcmVhZCB0aGUgcHJldmlvdXNseSBmb2N1c2VkIGVsZW1lbnQuXHJcbiAgICAgIGNvbnN0IGFjdGl2ZUVsZW1lbnQgPSA8SFRNTEVsZW1lbnQgfCBudWxsPnRoaXMuZG9jdW1lbnRSZWY/LmFjdGl2ZUVsZW1lbnQ7XHJcbiAgICAgIHRoaXMucHJldmlvdXNseUZvY3VzZWRFbGVtZW50ID0gPEhUTUxFbGVtZW50PmFjdGl2ZUVsZW1lbnQ/LnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQgfHwgYWN0aXZlRWxlbWVudDtcclxuXHJcbiAgICAgIGlmIChvcHRpb25zKSB7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMuYWxpZ25Ub1RvcCkge1xyXG4gICAgICAgICAgdGhpcy5hbGlnblRvVG9wID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvcHRpb25zLmRpc3BsYXlBc1BhbmVsKSB7XHJcbiAgICAgICAgICB0aGlzLmRpc3BsYXlBc1BhbmVsID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMudHJhbnNwYXJlbnRNYXNrID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvcHRpb25zLnRyYW5zcGFyZW50TWFzayAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICB0aGlzLnRyYW5zcGFyZW50TWFzayA9IG9wdGlvbnMudHJhbnNwYXJlbnRNYXNrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG9wdGlvbnMubm9NYXNrICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIHRoaXMubm9NYXNrID0gb3B0aW9ucy5ub01hc2s7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAob3B0aW9ucy5jYW5PcGVuRGlhbG9nICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGNvbnN0IGNhbk9wZW4gPSBhd2FpdCBvcHRpb25zLmNhbk9wZW5EaWFsb2coKTtcclxuICAgICAgICAgIGlmICghY2FuT3Blbikge1xyXG4gICAgICAgICAgICB0aGlzLmNsb3NlKG5ldyBEaWFsb2dSZXN1bHQoZmFsc2UpKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gc2V0IHRoZSBzaXplIGJlZm9yZSBvcGVuaW5nXHJcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5zaXplID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgIHRoaXMud2lkdGggPSB0aGlzLnNpemU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gUmVzZXQgdGhlIHdpZHRoIGlmIHRoZSBzaXplIGlzIG5vdCBhIG51bWJlci4gVGhpcyBpcyB0byBwcmV2ZW50IHRoZSB3aWR0aCBwcm9wZXJ0eSBjb25mbGljdGluZyB3aXRoIHRoZSBzaXplLlxyXG4gICAgICAgIHRoaXMud2lkdGggPSB1bmRlZmluZWQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMubWluV2lkdGggPSBvcHRpb25zPy5taW5XaWR0aDtcclxuXHJcbiAgICAgIHRoaXMuZmFkZUluID0gdHJ1ZTtcclxuICAgICAgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmKSB7XHJcbiAgICAgICAgdGhpcy5jb250ZW50Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyhjb21wb25lbnQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBjb21wb25lbnRGYWN0b3J5ID0gdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoY29tcG9uZW50KTtcclxuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZiA9IHRoaXMuY29udGVudENvbnRhaW5lci5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50RmFjdG9yeSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMub3BlbkRpYWxvZ0NvbXBvbmVudDxUPihjb250ZXh0KTtcclxuXHJcbiAgICAgIC8vIE9uY2UgdGhlIGFuaW1hdGlvbiBpcyBjb21wbGV0ZSB3ZSBjYW4gcmVtb3ZlIHRoZSBhbmltYXRpb24gY2xhc3MgYW5kXHJcbiAgICAgIC8vIGVtaXQgdGhlIG9wZW5lZCBldmVudCwgYm90aCB0byB0aGUgaG9zdGluZyBjb21wb25lbnQgYW5kIHZpYSBEaWFsb2dTZXJ2aWNlXHJcbiAgICAgIGF3YWl0IHRpbWVyKHRoaXMuZGlzcGxheUFzUGFuZWwgPyBQYW5lbE9wZW5EdXJhdGlvbiA6IERpYWxvZ09wZW5EdXJhdGlvbikucGlwZShcclxuICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBkaWFsb2dJZCA9IHRoaXMuZ2V0RGlhbG9nSWQoKTtcclxuICAgICAgICAgIHRoaXMuZmFkZUluID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLm9wZW5lZC5lbWl0KGRpYWxvZ0lkKTtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS50cmlnZ2VyRXZlbnQobmV3IERpYWxvZ09wZW5FbmRFdmVudCh0aGlzLmRpYWxvZ09wZW5TdGFydEV2ZW50SWQsIGRpYWxvZ0lkKSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKS50b1Byb21pc2UoKTtcclxuXHJcbiAgICAgIHRoaXMuaGFuZGxlQ2xvc2VPblJlc2l6ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmFkZSB0aGUgZGlhbG9nIG91dCBhbmQgaGlkZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBjbG9zZTxUPihyZXN1bHQ/OiBEaWFsb2dSZXN1bHQ8VD4pOiB2b2lkIHtcclxuICAgIHRoaXMuZmFkZU91dCA9IHRydWU7XHJcbiAgICBjb25zdCBkaWFsb2dJZCA9IHRoaXMuZ2V0RGlhbG9nSWQoKTsgIC8vY2FsbCBiZWZvcmUgd2lwaW5nIG91dCB0aGUgY29udGVudFxyXG5cclxuICAgIC8vIFdoZW4gdGhlIGZhZGUgb3V0IGFuaW1hdGlvbiBpcyBjb21wbGV0ZSB3ZSB3aWxsIGhpZGUgdGhlIGRpYWxvZ1xyXG4gICAgLy8gYW5kIHJlbW92ZSB0aGUgYW5pbWF0aW9uIGNsYXNzIGFzIHdlbGwgYXMgbGV0IHRoZSB3b3JsZCBrbm93IHRoYXRcclxuICAgIC8vIHdlJ3JlIGNsb3NlZCBzbyB0aGV5IGNhbiBjb21wbGV0ZSBhbnkgb3RoZXIgY2xlYW51cFxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZmFkZU91dCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNvbnRlbnRDb250YWluZXI/LmNsZWFyKCk7XHJcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmID0gdW5kZWZpbmVkO1xyXG4gICAgICB0aGlzLmNsb3NlZC5lbWl0KHJlc3VsdCk7XHJcbiAgICAgIHRoaXMuZGlhbG9nU2VydmljZS50cmlnZ2VyRXZlbnQobmV3IERpYWxvZ0Nsb3NlRXZlbnQodGhpcy5kaWFsb2dPcGVuU3RhcnRFdmVudElkLCBkaWFsb2dJZCwgcmVzdWx0Py5zYXZlLCByZXN1bHQ/LmNvbnRleHQpKTtcclxuICAgICAgdGhpcy5yZXNldE9wdGlvbnMoKTtcclxuICAgIH0sIHRoaXMuZGlzcGxheUFzUGFuZWwgPyBQYW5lbENsb3NlRHVyYXRpb24gOiBEaWFsb2dDbG9zZUR1cmF0aW9uKVxyXG4gIH1cclxuXHJcbiAgLyoqT3BlbiB0aGUgZGlhbG9nIGFuZCBhdHRhY2ggaGFuZGxlcnMgdG8gdGhlIGNhbmNlbCBhbmQgc2F2ZSBldmVudHMgdG8gY2xvc2UgaXQgYW5kIG5vdGlmeSB0aGUgaG9zdGluZyBwYWdlICovXHJcbiAgcHJpdmF0ZSBvcGVuRGlhbG9nQ29tcG9uZW50PFQ+KGNvbnRleHQ/OiBUKSB7XHJcbiAgICBpZiAodGhpcy5jb21wb25lbnRSZWYgJiYgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UpIHtcclxuICAgICAgY29uc3QgZGlhbG9nQ29udGVudCA9IHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlIGFzIERpYWxvZ0NvbnRlbnQ8VD47XHJcblxyXG4gICAgICAvLyBPbk9wZW4gaXMgb3B0aW9uYWwgLSBjcmVhdGUgZGlhbG9ncyBkb24ndCBuZWNlc3NhcmlseSBkZWZpbmUgaXRcclxuICAgICAgaWYgKGRpYWxvZ0NvbnRlbnQub25PcGVuKSB7XHJcbiAgICAgICAgZGlhbG9nQ29udGVudC5vbk9wZW4oY29udGV4dCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGRpYWxvZ0NvbnRlbnQub25EaWFsb2dDYW5jZWwucGlwZSh0YWtlVW50aWwodGhpcy5jbG9zZWQpKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2xvc2U8VD4obmV3IERpYWxvZ1Jlc3VsdDxUPihmYWxzZSkpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGRpYWxvZ0NvbnRlbnQub25EaWFsb2dTYXZlLnBpcGUodGFrZVVudGlsKHRoaXMuY2xvc2VkKSkuc3Vic2NyaWJlKHZhbCA9PiB7XHJcbiAgICAgICAgdGhpcy5jbG9zZTxUPihuZXcgRGlhbG9nUmVzdWx0PFQ+KHRydWUsIHZhbCkpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc2V0IG9wdGlvbnMgc28gdGhleSBkb24ndCBwZXJzaXN0IG5leHQgdGltZSB0aGVcclxuICAgKiByb290IGRpYWxvZyBpcyBvcGVuZWRcclxuICAgKiBAZGVwcmVjYXRlZFxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVzZXRPcHRpb25zKCkge1xyXG4gICAgdGhpcy5hbGlnblRvVG9wID0gZmFsc2U7XHJcbiAgICB0aGlzLmRpc3BsYXlBc1BhbmVsID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKiogSWYgdGhleSB0dXJuZWQgb24gY2xvc2VPblJlc2l6ZSwgYXV0b21hdGljYWxseSBjbG9zZSB0aGUgZGlhbG9nIGFueSB0aW1lIHNvbWVib2R5IHJlc2l6ZXMgdGhlIHdpbmRvdy5cclxuICAgICogVGhpcyBpcyB1c2VmdWwgZm9yIHJlc3BvbnNpdmUgbGF5b3V0cyB0byBwcmV2ZW50IGhhdmluZyB0aGUgZGlhbG9nQ29udGVudCBvbiB0aGUgc2NyZWVuIHR3aWNlICovXHJcbiAgcHJpdmF0ZSBoYW5kbGVDbG9zZU9uUmVzaXplKCkge1xyXG4gICAgaWYodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5jbG9zZU9uUmVzaXplKXtcclxuICAgICAgdGhpcy53aW5kb3dTZXJ2aWNlLnJlc2l6ZWQhLnBpcGUodGFrZVVudGlsKHRoaXMuY2xvc2VkKSwgdGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLmNsb3NlKG5ldyBEaWFsb2dSZXN1bHQoZmFsc2UpKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipFeHRyYWN0IHRoZSBkaWFsb2dJZCBmcm9tIHRoZSBkaWFsb2cgY29udGVudCwgaWYgaXQgaGFzIG9uZS4gVGVtcGxhdGUtYmFzZWQgZGlhbG9ncyBnZW5lcmFsbHkgZG9uJ3QuXHJcbiAgICogV2UgZmFsbCBiYWNrIHRvIGVtcHR5IHN0cmluZyB0byBhbGxvdyBhbnlib2R5IGxpc3RlbmluZyBmb3IgZGlhbG9nRXZlbnRzIHRvIHN0aWxsIHJlY29yZCB0aGUgb3Blbi9jbG9zZSBldmVuIGlmXHJcbiAgICogdGhlIGRpYWxvZyBpdHNlbGYgZG9lcyBub3Qgc2F5IHdoYXQgdGhlIG5hbWUgaXMuIFxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0RGlhbG9nSWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRSZWY/Lmluc3RhbmNlLmRpYWxvZ0lkIHx8ICcnO1xyXG4gIH1cclxufVxyXG4iXX0=
242
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9kaXNwbGF5L2RpYWxvZy9kaWFsb2cuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUEwQyxZQUFZLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFRLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xNLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHdEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUE2QixZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFHL0csaUVBQWlFO0FBQ2pFLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFXLEdBQUcsQ0FBQztBQUM5QyxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBVyxHQUFHLENBQUM7QUFDL0MsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQVcsR0FBRyxDQUFDO0FBQzdDLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFXLEdBQUcsQ0FBQztBQU85QyxNQUFNLE9BQU8sZUFBZTtJQXlCZ0IsY0FBYyxDQUFDLEtBQWlCO1FBQ3hFLElBQWtCLEtBQUssQ0FBQyxNQUFPLENBQUMsT0FBTyxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQzlFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUNyQztJQUNI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QWUsb0hBcUZoQixRQUFRO2dHQXJGUCxlQUFlLG9uQkE0REksZ0JBQWdCLDJDQS9EcEMsNEtBQTRLOzJGQUczSyxlQUFlO2tCQUwzQixTQUFTOytCQUNFLFdBQVcsWUFDWCw0S0FBNEs7OzBCQXdGbkwsTUFBTTsyQkFBQyxRQUFROzRDQWhGbUIsTUFBTTtzQkFBMUMsV0FBVzt1QkFBQyxlQUFlO2dCQU1TLE1BQU07c0JBQTFDLFdBQVc7dUJBQUMsZUFBZTtnQkFNVSxPQUFPO3NCQUE1QyxXQUFXO3VCQUFDLGdCQUFnQjtnQkFFUyxjQUFjO3NCQUFuRCxXQUFXO3VCQUFDLGdCQUFnQjtnQkFFZSxVQUFVO3NCQUFyRCxXQUFXO3VCQUFDLHNCQUFzQjtnQkFFUyxlQUFlO3NCQUExRCxXQUFXO3VCQUFDLHNCQUFzQjtnQkFFTyxjQUFjO3NCQUF2RCxZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFTakIsSUFBSTtzQkFBbkIsS0FBSztnQkFFRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFPRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBS1csTUFBTTtzQkFBdEIsTUFBTTtnQkFLVSxNQUFNO3NCQUF0QixNQUFNO2dCQUtnRSxnQkFBZ0I7c0JBQXRGLFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBDb21wb25lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE91dHB1dCwgVHlwZSwgVmlld0NoaWxkLCBWaWV3Q29udGFpbmVyUmVmLCBUZW1wbGF0ZVJlZiwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IHRpbWVyIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRha2UsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBXaW5kb3dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS93aW5kb3cuc2VydmljZSc7XHJcbmltcG9ydCB7IERpYWxvZ0NvbnRlbnQgfSBmcm9tICcuL2RpYWxvZy1jb250ZW50JztcclxuaW1wb3J0IHsgRGlhbG9nT3BlbkVuZEV2ZW50LCBEaWFsb2dDbG9zZUV2ZW50LCBEaWFsb2dTaXplLCBEaWFsb2dPcHRpb25zLCBEaWFsb2dSZXN1bHQgfSBmcm9tICcuL2RpYWxvZy10eXBlcyc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICcuL2RpYWxvZy5zZXJ2aWNlJztcclxuXHJcbi8qKiBUaGVzZSB2YWx1ZXMgbmVlZCB0byBiZSBrZXB0IGluIHN5bmMgd2l0aCBkaWFsb2ctYmFzZS5zY3NzICovXHJcbmV4cG9ydCBjb25zdCBEaWFsb2dPcGVuRHVyYXRpb246IG51bWJlciA9IDEyNTtcclxuZXhwb3J0IGNvbnN0IERpYWxvZ0Nsb3NlRHVyYXRpb246IG51bWJlciA9IDEwMDtcclxuZXhwb3J0IGNvbnN0IFBhbmVsT3BlbkR1cmF0aW9uOiBudW1iZXIgPSAyNTA7XHJcbmV4cG9ydCBjb25zdCBQYW5lbENsb3NlRHVyYXRpb246IG51bWJlciA9IDIyNTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZWMtZGlhbG9nJyxcclxuICB0ZW1wbGF0ZTogJzxhcnRpY2xlIFtzdHlsZS53aWR0aC5weF09XCJ3aWR0aFwiIFtzdHlsZS5taW4td2lkdGhdPVwibWluV2lkdGhcIiBjbGFzcz1cImRpYWxvZy17e3NpemV9fVwiIGNka1RyYXBGb2N1cyBjZGtUcmFwRm9jdXNBdXRvQ2FwdHVyZT48bmctdGVtcGxhdGUgI2NvbnRlbnQ+PC9uZy10ZW1wbGF0ZT48L2FydGljbGU+JyxcclxuICBzdHlsZVVybHM6IFsnLi9kaWFsb2cuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGlhbG9nQ29tcG9uZW50IHtcclxuICAvKipcclxuICAgKiBBZGQvcmVtb3ZlIHRoZSBpcy1vcGVuIGNzcyBjbGFzcyB0byB0aGUgaG9zdCBlbGVtZW50IHdoZW4gdGhlIGRpYWxvZyBpcyBvcGVuZWQvY2xvc2VkLlxyXG4gICAqIFN0eWxlcyB1c2UgdGhlIGlzLW9wZW4gY2xhc3MgdG8gc2hvdy9oaWRlIHRoZSBkaWFsb2cuXHJcbiAgICovXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pcy1vcGVuJykgcHVibGljIGlzT3BlbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBBZGQgdGhlIGZhZGUtaW4gY3NzIGNsYXNzIHRvIHRoZSBob3N0IGVsZW1lbnQgd2hlbiB0aGUgZGlhbG9nIGlzIG9wZW5pbmcuIFJlbW92ZSB3aGVuIHRyYW5zaXRpb24gaXMgY29tcGxldGUuXHJcbiAgICogU3R5bGVzIHVzZSB0aGUgZmFkZS1pbiBjbGFzcyB0byBhcHBseSBhIGZhZGUtaW4gdHJhbnNpdGlvbiB3aGlsZSB0aGUgZGlhbG9nIGlzIG9wZW5pbmcuXHJcbiAgICovXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mYWRlLWluJykgcHVibGljIGZhZGVJbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBBZGQgdGhlIGZhZGUtb3V0IGNzcyBjbGFzcyB0byB0aGUgaG9zdCBlbGVtZW50IHdoZW4gdGhlIGRpYWxvZyBpcyBjbG9zaW5nLiBSZW1vdmUgd2hlbiB0cmFuc2l0aW9uIGlzIGNvbXBsZXRlLlxyXG4gICAqIFN0eWxlcyB1c2UgdGhlIGZhZGUtb3V0IGNsYXNzIHRvIGFwcGx5IGEgZmFkZS1vdXQgdHJhbnNpdGlvbiB3aGlsZSB0aGUgZGlhbG9nIGlzIGNsb3NpbmcuXHJcbiAgICovXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mYWRlLW91dCcpIHB1YmxpYyBmYWRlT3V0ID0gZmFsc2U7XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuaXMtcGFuZWwnKSBwdWJsaWMgZGlzcGxheUFzUGFuZWwgPSBmYWxzZTtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pcy10b3AtYWxpZ25lZCcpIHB1YmxpYyBhbGlnblRvVG9wID0gZmFsc2U7XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuaXMtdHJhbnNwYXJlbnQnKSBwdWJsaWMgdHJhbnNwYXJlbnRNYXNrID0gZmFsc2U7XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSkgcHVibGljIG9uT3ZlcmxheUNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICBpZiAoKDxIVE1MRWxlbWVudD5ldmVudC50YXJnZXQpLnRhZ05hbWUgPT09ICdFQy1ESUFMT0cnICYmIHRoaXMuZGlzcGxheUFzUGFuZWwpIHtcclxuICAgICAgdGhpcy5jbG9zZShuZXcgRGlhbG9nUmVzdWx0KGZhbHNlKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWZpbmVzIHRoZSB3aWR0aCBvZiB0aGUgZGlhbG9nIChoZWlnaHQgaXMgYXV0bykuIENhbiBiZSBhIG51bWJlciB0aGF0IHdpbGwgYmUgY29udmVydGVkIHRvIHBpeGVscywgb3IgeHNtYWxsKDMyMHB4KSwgc21hbGwoNDgwcHgpLCBtZWRpdW0oNjQwcHgpLCBvciBsYXJnZSgxMDI0cHgpXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIHNpemU6IERpYWxvZ1NpemUgPSBcInNtYWxsXCI7XHJcblxyXG4gIEBJbnB1dCgpIGNvbnRlbnQ/OiBUeXBlPERpYWxvZ0NvbnRlbnQ8YW55Pj4gfCBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBJbnB1dCgpIGNvbnRleHQ/OiBhbnk7XHJcbiAgQElucHV0KCkgb3B0aW9ucz86IERpYWxvZ09wdGlvbnM7XHJcblxyXG4gIC8qKk9ubHkgc2V0IGlmIHRoaXMgcGFydGljdWxhciBpbnN0YW5jZSBvZiBhIGRpYWxvZyBzaG91bGQgYmUgaWRlbnRpZmllZCBzZXBhcmF0ZWx5IGZyb20gb3RoZXJzLlxyXG4gICAqIElmIHByb3ZpZGVkLCB0aGlzIGlzIGVtaXR0ZWQgdG8gdGhlIGRpYWxvZyBzZXJ2aWNlIHdpdGggT3BlbkVuZCBhbmQgQ2xvc2UgZXZlbnRzLiBEaXJlY3QgdXNhZ2VcclxuICAgKiBvZiB0aGUgRGlhbG9nQ29tcG9uZW50IGZyb20gb3V0c2lkZSBhIERpYWxvZ0dyb3VwIGRvZXMgbm90IHVzdWFsbHkgcmVxdWlyZSB1c2luZyB0aGlzIHBhcmFtZXRlciBhc1xyXG4gICAqIHRoZSBkaWFsb2cgcmVmZXJlbmNlIGl0c2VsZiBmdW5jdGlvbnMgYXMgdGhlIGlkZW50aWZpZXJcclxuICAgKi9cclxuICBASW5wdXQoKSBkaWFsb2dPcGVuU3RhcnRFdmVudElkPzogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBFbWl0cyBhbiBldmVudCB3aGVuIHRoZSBkaWFsb2cgaXMgb3BlbmVkXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHB1YmxpYyBvcGVuZWQ6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvKipcclxuICAgKiBFbWl0cyBhbiBldmVudCB3aGVuIHRoZSBkaWFsb2cgaXMgY2xvc2VkXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHB1YmxpYyBjbG9zZWQ6IEV2ZW50RW1pdHRlcjxEaWFsb2dSZXN1bHQ8YW55Pj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBjb250YWluZXIgd2hlcmUgdGhlIGNvbXBvbmVudCB3aWxsIGJlIGxvYWRlZFxyXG4gICAqL1xyXG4gIEBWaWV3Q2hpbGQoJ2NvbnRlbnQnLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYsIHN0YXRpYzogdHJ1ZSB9KSBwdWJsaWMgY29udGVudENvbnRhaW5lciE6IFZpZXdDb250YWluZXJSZWY7XHJcblxyXG4gIC8qKlxyXG4gICAqIEN1c3RvbSB3aWR0aCBvZiB0aGUgZGlhbG9nIGluIHBpeGVscy4gU2V0IGJ5IGRlZmluaW5nIHRoZSBzaXplIHByb3BlcnR5XHJcbiAgICogYXMgYSBudW1iZXIgdmFsdWUuXHJcbiAgICovXHJcbiAgcHVibGljIHdpZHRoPzogbnVtYmVyO1xyXG5cclxuICAvKipcclxuICAgKiBDdXN0b20gbWluLXdpZHRoIG9mIHRoZSBkaWFsb2cuIE9ubHkgdGFrZXMgZWZmZWN0IGlmIHNpemUgaXMgc2V0IHRvIGR5bmFtaWMuXHJcbiAgICogTXVzdCBpbmNsdWRlIHVuaXRzLCBpLmUuIFwiMzJyZW1cIiBvciBcIjY0MHB4XCJcclxuICAgKi9cclxuICBwdWJsaWMgbWluV2lkdGg/OiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIEEgcmVmZXJlbmNlIG9mIHRoZSBjb21wb25lbnQgb25jZSBpdCBoYXMgYmVlbiBsb2FkZWRcclxuICAgKi9cclxuICBwdWJsaWMgY29tcG9uZW50UmVmPzogQ29tcG9uZW50UmVmPGFueT47XHJcblxyXG4gIHByaXZhdGUgcHJldmlvdXNseUZvY3VzZWRFbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgICBwcml2YXRlIHdpbmRvd1NlcnZpY2U6IFdpbmRvd1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXHJcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50UmVmOiBEb2N1bWVudFxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY29udGVudCkge1xyXG4gICAgICB0aGlzLm9wZW4odGhpcy5jb250ZW50LCB0aGlzLmNvbnRleHQsIHRoaXMub3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIC8vIFJlc3RvcmUgZm9jdXMgdG8gdGhlIHByZXZpb3VzbHkgZm9jdXNlZCBlbGVtZW50IHdoZW4gdGhlIGRpYWxvZyBpcyBkZXN0cm95ZWQuXHJcbiAgICAvLyBOZWVkIHRvIGRvIHRoaXMgaGVyZSBhbmQgbm90IGluIGNsb3NlKCkgYmVjYXVzZSBjZGtUcmFwRm9jdXNBdXRvQ2FwdHVyZSdzIHJlLWZvY3VzIGhhcHBlbnMgaW4gbmdPbkRlc3Ryb3kuXHJcbiAgICAvLyBUaGlzIGRvZXNuJ3Qgd29yayBmb3IgZGlhbG9nIGltcGxlbWVudGF0aW9ucyBvdXRzaWRlIG9mIHRoZSBkaWFsb2cgc2VydmljZSBiZWNhdXNlIG5nT25EZXN0cm95IGlzbid0IGNhbGxlZCB3aGVuXHJcbiAgICAvLyB0aGUgZGlhbG9nIGlzIGNsb3NlZCBpbiB0aG9zZSBjYXNlcy5cclxuICAgIGlmICh0aGlzLnByZXZpb3VzbHlGb2N1c2VkRWxlbWVudCkge1xyXG4gICAgICB0aGlzLnByZXZpb3VzbHlGb2N1c2VkRWxlbWVudC5mb2N1cygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xlYXIgYW5kIHByZXZpb3VzbHkgbG9hZGVkIGNvbnRlbnRcclxuICAgKiBMb2FkIHRoZSBjb21wb25lbnRcclxuICAgKiBTYXZlIGEgcmVmZXJlbmNlIG9mIHRoZSBsb2FkZWQgY29tcG9uZW50XHJcbiAgICogU2hvdyB0aGUgZGlhbG9nIGFuZCBmYWRlIGluXHJcbiAgICovXHJcbiAgcHVibGljIGFzeW5jIG9wZW48VD4oY29tcG9uZW50OiBUeXBlPERpYWxvZ0NvbnRlbnQ8VD4+IHwgVGVtcGxhdGVSZWY8YW55PiwgY29udGV4dD86IFQsIG9wdGlvbnM/OiBEaWFsb2dPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIXRoaXMuaXNPcGVuKSB7XHJcbiAgICAgIFxyXG4gICAgICAvLyBDYXB0dXJlIHRoZSBjdXJyZW50bHkgZm9jdXNlZCBlbGVtZW50LCBhbHNvIGxvb2tpbmcgaW4gdGhlIHNoYWRvdyBkb20uIEZvY3VzIGlzIHJlc3RvcmVkIHRvIHRoaXMgZWxlbWVudCBvbmNlIHRoZSBkaWFsb2cgaXNcclxuICAgICAgLy8gZGVzdHJveWVkLiBTZWUgbmdPbkRlc3Ryb3koKS4gV2UgbmVlZCB0byBkbyB0aGlzIGhlcmUgaW4gYWRkaXRpb24gdG8gdGhlIGNka1RyYXBGb2N1c0F1dG9DYXB0dXJlIGJlY2F1c2Ugc29tZXRpbWVzIHRoZSBkaWFsb2cnc1xyXG4gICAgICAvLyBjb250ZW50IGlzIGRyYXduIGFuZCBncmFicyBmb2N1cyBiZWZvcmUgdGhlIGNka1RyYXBGb2N1c0F1dG9DYXB0dXJlIGlzIGFibGUgdG8gcmVhZCB0aGUgcHJldmlvdXNseSBmb2N1c2VkIGVsZW1lbnQuXHJcbiAgICAgIGNvbnN0IGFjdGl2ZUVsZW1lbnQgPSA8SFRNTEVsZW1lbnQgfCBudWxsPnRoaXMuZG9jdW1lbnRSZWY/LmFjdGl2ZUVsZW1lbnQ7XHJcbiAgICAgIHRoaXMucHJldmlvdXNseUZvY3VzZWRFbGVtZW50ID0gPEhUTUxFbGVtZW50PmFjdGl2ZUVsZW1lbnQ/LnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQgfHwgYWN0aXZlRWxlbWVudDtcclxuXHJcbiAgICAgIGlmIChvcHRpb25zKSB7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMuYWxpZ25Ub1RvcCkge1xyXG4gICAgICAgICAgdGhpcy5hbGlnblRvVG9wID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvcHRpb25zLmRpc3BsYXlBc1BhbmVsKSB7XHJcbiAgICAgICAgICB0aGlzLmRpc3BsYXlBc1BhbmVsID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMudHJhbnNwYXJlbnRNYXNrID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvcHRpb25zLnRyYW5zcGFyZW50TWFzayAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICB0aGlzLnRyYW5zcGFyZW50TWFzayA9IG9wdGlvbnMudHJhbnNwYXJlbnRNYXNrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG9wdGlvbnMuY2FuT3BlbkRpYWxvZyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBjb25zdCBjYW5PcGVuID0gYXdhaXQgb3B0aW9ucy5jYW5PcGVuRGlhbG9nKCk7XHJcbiAgICAgICAgICBpZiAoIWNhbk9wZW4pIHtcclxuICAgICAgICAgICAgdGhpcy5jbG9zZShuZXcgRGlhbG9nUmVzdWx0KGZhbHNlKSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIHNldCB0aGUgc2l6ZSBiZWZvcmUgb3BlbmluZ1xyXG4gICAgICBpZiAodHlwZW9mIHRoaXMuc2l6ZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICB0aGlzLndpZHRoID0gdGhpcy5zaXplO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIFJlc2V0IHRoZSB3aWR0aCBpZiB0aGUgc2l6ZSBpcyBub3QgYSBudW1iZXIuIFRoaXMgaXMgdG8gcHJldmVudCB0aGUgd2lkdGggcHJvcGVydHkgY29uZmxpY3Rpbmcgd2l0aCB0aGUgc2l6ZS5cclxuICAgICAgICB0aGlzLndpZHRoID0gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLm1pbldpZHRoID0gb3B0aW9ucz8ubWluV2lkdGg7XHJcblxyXG4gICAgICB0aGlzLmZhZGVJbiA9IHRydWU7XHJcbiAgICAgIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZikge1xyXG4gICAgICAgIHRoaXMuY29udGVudENvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcoY29tcG9uZW50KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgY29tcG9uZW50RmFjdG9yeSA9IHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGNvbXBvbmVudCk7XHJcbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWYgPSB0aGlzLmNvbnRlbnRDb250YWluZXIuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudEZhY3RvcnkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmlzT3BlbiA9IHRydWU7XHJcblxyXG4gICAgICB0aGlzLm9wZW5EaWFsb2dDb21wb25lbnQ8VD4oY29udGV4dCk7XHJcblxyXG4gICAgICAvLyBPbmNlIHRoZSBhbmltYXRpb24gaXMgY29tcGxldGUgd2UgY2FuIHJlbW92ZSB0aGUgYW5pbWF0aW9uIGNsYXNzIGFuZFxyXG4gICAgICAvLyBlbWl0IHRoZSBvcGVuZWQgZXZlbnQsIGJvdGggdG8gdGhlIGhvc3RpbmcgY29tcG9uZW50IGFuZCB2aWEgRGlhbG9nU2VydmljZVxyXG4gICAgICBhd2FpdCB0aW1lcih0aGlzLmRpc3BsYXlBc1BhbmVsID8gUGFuZWxPcGVuRHVyYXRpb24gOiBEaWFsb2dPcGVuRHVyYXRpb24pLnBpcGUoXHJcbiAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgZGlhbG9nSWQgPSB0aGlzLmdldERpYWxvZ0lkKCk7XHJcbiAgICAgICAgICB0aGlzLmZhZGVJbiA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5vcGVuZWQuZW1pdChkaWFsb2dJZCk7XHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UudHJpZ2dlckV2ZW50KG5ldyBEaWFsb2dPcGVuRW5kRXZlbnQodGhpcy5kaWFsb2dPcGVuU3RhcnRFdmVudElkLCBkaWFsb2dJZCkpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICkudG9Qcm9taXNlKCk7XHJcblxyXG4gICAgICB0aGlzLmhhbmRsZUNsb3NlT25SZXNpemUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZhZGUgdGhlIGRpYWxvZyBvdXQgYW5kIGhpZGVcclxuICAgKi9cclxuICBwdWJsaWMgY2xvc2U8VD4ocmVzdWx0PzogRGlhbG9nUmVzdWx0PFQ+KTogdm9pZCB7XHJcbiAgICB0aGlzLmZhZGVPdXQgPSB0cnVlO1xyXG4gICAgY29uc3QgZGlhbG9nSWQgPSB0aGlzLmdldERpYWxvZ0lkKCk7ICAvL2NhbGwgYmVmb3JlIHdpcGluZyBvdXQgdGhlIGNvbnRlbnRcclxuXHJcbiAgICAvLyBXaGVuIHRoZSBmYWRlIG91dCBhbmltYXRpb24gaXMgY29tcGxldGUgd2Ugd2lsbCBoaWRlIHRoZSBkaWFsb2dcclxuICAgIC8vIGFuZCByZW1vdmUgdGhlIGFuaW1hdGlvbiBjbGFzcyBhcyB3ZWxsIGFzIGxldCB0aGUgd29ybGQga25vdyB0aGF0XHJcbiAgICAvLyB3ZSdyZSBjbG9zZWQgc28gdGhleSBjYW4gY29tcGxldGUgYW55IG90aGVyIGNsZWFudXBcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmZhZGVPdXQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5jb250ZW50Q29udGFpbmVyPy5jbGVhcigpO1xyXG4gICAgICB0aGlzLmNvbXBvbmVudFJlZiA9IHVuZGVmaW5lZDtcclxuICAgICAgdGhpcy5jbG9zZWQuZW1pdChyZXN1bHQpO1xyXG4gICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UudHJpZ2dlckV2ZW50KG5ldyBEaWFsb2dDbG9zZUV2ZW50KHRoaXMuZGlhbG9nT3BlblN0YXJ0RXZlbnRJZCwgZGlhbG9nSWQsIHJlc3VsdD8uc2F2ZSwgcmVzdWx0Py5jb250ZXh0KSk7XHJcbiAgICAgIHRoaXMucmVzZXRPcHRpb25zKCk7XHJcbiAgICB9LCB0aGlzLmRpc3BsYXlBc1BhbmVsID8gUGFuZWxDbG9zZUR1cmF0aW9uIDogRGlhbG9nQ2xvc2VEdXJhdGlvbilcclxuICB9XHJcblxyXG4gIC8qKk9wZW4gdGhlIGRpYWxvZyBhbmQgYXR0YWNoIGhhbmRsZXJzIHRvIHRoZSBjYW5jZWwgYW5kIHNhdmUgZXZlbnRzIHRvIGNsb3NlIGl0IGFuZCBub3RpZnkgdGhlIGhvc3RpbmcgcGFnZSAqL1xyXG4gIHByaXZhdGUgb3BlbkRpYWxvZ0NvbXBvbmVudDxUPihjb250ZXh0PzogVCkge1xyXG4gICAgaWYgKHRoaXMuY29tcG9uZW50UmVmICYmIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlKSB7XHJcbiAgICAgIGNvbnN0IGRpYWxvZ0NvbnRlbnQgPSB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBEaWFsb2dDb250ZW50PFQ+O1xyXG5cclxuICAgICAgLy8gT25PcGVuIGlzIG9wdGlvbmFsIC0gY3JlYXRlIGRpYWxvZ3MgZG9uJ3QgbmVjZXNzYXJpbHkgZGVmaW5lIGl0XHJcbiAgICAgIGlmIChkaWFsb2dDb250ZW50Lm9uT3Blbikge1xyXG4gICAgICAgIGRpYWxvZ0NvbnRlbnQub25PcGVuKGNvbnRleHQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBkaWFsb2dDb250ZW50Lm9uRGlhbG9nQ2FuY2VsLnBpcGUodGFrZVVudGlsKHRoaXMuY2xvc2VkKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLmNsb3NlPFQ+KG5ldyBEaWFsb2dSZXN1bHQ8VD4oZmFsc2UpKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBkaWFsb2dDb250ZW50Lm9uRGlhbG9nU2F2ZS5waXBlKHRha2VVbnRpbCh0aGlzLmNsb3NlZCkpLnN1YnNjcmliZSh2YWwgPT4ge1xyXG4gICAgICAgIHRoaXMuY2xvc2U8VD4obmV3IERpYWxvZ1Jlc3VsdDxUPih0cnVlLCB2YWwpKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXNldCBvcHRpb25zIHNvIHRoZXkgZG9uJ3QgcGVyc2lzdCBuZXh0IHRpbWUgdGhlXHJcbiAgICogcm9vdCBkaWFsb2cgaXMgb3BlbmVkXHJcbiAgICogQGRlcHJlY2F0ZWRcclxuICAgKi9cclxuICBwcml2YXRlIHJlc2V0T3B0aW9ucygpIHtcclxuICAgIHRoaXMuYWxpZ25Ub1RvcCA9IGZhbHNlO1xyXG4gICAgdGhpcy5kaXNwbGF5QXNQYW5lbCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqIElmIHRoZXkgdHVybmVkIG9uIGNsb3NlT25SZXNpemUsIGF1dG9tYXRpY2FsbHkgY2xvc2UgdGhlIGRpYWxvZyBhbnkgdGltZSBzb21lYm9keSByZXNpemVzIHRoZSB3aW5kb3cuXHJcbiAgICAqIFRoaXMgaXMgdXNlZnVsIGZvciByZXNwb25zaXZlIGxheW91dHMgdG8gcHJldmVudCBoYXZpbmcgdGhlIGRpYWxvZ0NvbnRlbnQgb24gdGhlIHNjcmVlbiB0d2ljZSAqL1xyXG4gIHByaXZhdGUgaGFuZGxlQ2xvc2VPblJlc2l6ZSgpIHtcclxuICAgIGlmKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuY2xvc2VPblJlc2l6ZSl7XHJcbiAgICAgIHRoaXMud2luZG93U2VydmljZS5yZXNpemVkIS5waXBlKHRha2VVbnRpbCh0aGlzLmNsb3NlZCksIHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jbG9zZShuZXcgRGlhbG9nUmVzdWx0KGZhbHNlKSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqRXh0cmFjdCB0aGUgZGlhbG9nSWQgZnJvbSB0aGUgZGlhbG9nIGNvbnRlbnQsIGlmIGl0IGhhcyBvbmUuIFRlbXBsYXRlLWJhc2VkIGRpYWxvZ3MgZ2VuZXJhbGx5IGRvbid0LlxyXG4gICAqIFdlIGZhbGwgYmFjayB0byBlbXB0eSBzdHJpbmcgdG8gYWxsb3cgYW55Ym9keSBsaXN0ZW5pbmcgZm9yIGRpYWxvZ0V2ZW50cyB0byBzdGlsbCByZWNvcmQgdGhlIG9wZW4vY2xvc2UgZXZlbiBpZlxyXG4gICAqIHRoZSBkaWFsb2cgaXRzZWxmIGRvZXMgbm90IHNheSB3aGF0IHRoZSBuYW1lIGlzLiBcclxuICAgKi9cclxuICBwcml2YXRlIGdldERpYWxvZ0lkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50UmVmPy5pbnN0YW5jZS5kaWFsb2dJZCB8fCAnJztcclxuICB9XHJcbn1cclxuIl19
@@ -2291,10 +2291,10 @@ class MenuComponent {
2291
2291
  }
2292
2292
  }
2293
2293
  MenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: MenuComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: WindowService }, { token: ScrollService }], target: i0.ɵɵFactoryTarget.Component });
2294
- MenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: MenuComponent, selector: "ec-menu", inputs: { id: "id", items: "items", selected: "selected", parent: "parent", templateType: "templateType", customMenuTemplate: "customMenuTemplate", title: "title", showNoItems: "showNoItems", noDataText: "noDataText", enableKeyNav: "enableKeyNav", highlightedItem: "highlightedItem", maintainSelectedItem: "maintainSelectedItem", truncateItems: "truncateItems", preserveIconSpace: "preserveIconSpace", dropdownToggleButton: "dropdownToggleButton" }, outputs: { selectedChanged: "selectedChanged", menuClosed: "menuClosed" }, host: { properties: { "attr.id": "this.attrId" } }, viewQueries: [{ propertyName: "labelTemplate", first: true, predicate: ["label"], descendants: true, static: true }, { propertyName: "iconAndLabelTemplate", first: true, predicate: ["iconAndLabel"], descendants: true, static: true }, { propertyName: "checkAndLabelTemplate", first: true, predicate: ["checkAndLabel"], descendants: true, static: true }, { propertyName: "iconLabelCaptionTemplate", first: true, predicate: ["iconLabelCaption"], descendants: true, static: true }], ngImport: i0, template: "<nav>\r\n <div class=\"parent\"\r\n [class.no-data]=\"showNoItems && (!items || items.length === 0)\">\r\n <header id=\"{{id}}_header\"\r\n class=\"text-heading-3 p-1\"\r\n [class.is-selected]=\"highlightedItemIndex === -1\"\r\n *ngIf=\"parent\"\r\n (click)=\"back($event)\">\r\n <div class=\"item-wrapper\">\r\n <i class=\"ec-icon icon-angle-down rotate-90 flex-shrink\"></i>\r\n <span class=\"label text-truncate flex-grow\">{{parent?.label}}</span>\r\n </div>\r\n </header>\r\n\r\n <ul id=\"{{id}}_list\"\r\n class=\"py-1\">\r\n <li *ngFor=\"let item of items; index as i\"\r\n id=\"{{item.id || id + '_item' + i}}\"\r\n class=\"{{item.display || 'item'}} {{item.classList}}\"\r\n [attr.disabled]=\"item.disabled\"\r\n [hidden]=\"item.hidden\"\r\n ecNavItemActive=\"is-selected\"\r\n [ecNavItemActiveQueryParams]=\"item.queryParams\"\r\n [ecNavItemActiveUrl]=\"item.url\"\r\n [ecNavItemActiveExactMatch]='item.isActiveExactMatch'\r\n (routerLinkActivated)=\"selectItem($event, item)\"\r\n [ngClass]=\"{'is-highlighted':(selected === item && item?.display !== 'heading') || highlightedItem === item, 'is-link': item.url, 'is-disabled': item.disabled, 'is-readonly': item.readonly, 'is-checked': item.checked, 'text-heading-3': item?.display === 'heading'}\"\r\n (click)=\"selectItem($event, item)\">\r\n\r\n <a *ngIf=\"item.url && !item.externalLink\"\r\n id=\"{{item.id}}_link\"\r\n title=\"{{truncateItems ? item.label : ''}}\"\r\n class=\"item-wrapper\"\r\n [routerLink]=\"item.url\"\r\n [queryParams]=\"item.queryParams || null\"\r\n target=\"{{item.target || '_self'}}\">\r\n\r\n <ng-container *ngTemplateOutlet=\"internalizedTemplate; context: {$implicit: item}\"></ng-container>\r\n </a>\r\n\r\n <a *ngIf=\"item.url && item.externalLink\"\r\n id=\"{{item.id}}_link\"\r\n title=\"{{truncateItems ? item.label : ''}}\"\r\n class=\"item-wrapper\"\r\n href=\"{{item.url}}\"\r\n target=\"{{item.target || '_self'}}\">\r\n\r\n <ng-container *ngTemplateOutlet=\"internalizedTemplate; context: {$implicit: item}\"></ng-container>\r\n </a>\r\n\r\n <div *ngIf=\"!item.url\"\r\n title=\"{{truncateItems ? item.label : ''}}\"\r\n class=\"item-wrapper\">\r\n <ng-container *ngTemplateOutlet=\"internalizedTemplate; context: {$implicit: item}\"></ng-container>\r\n </div>\r\n </li>\r\n </ul>\r\n\r\n <p class=\"no-data-message\">{{noDataText | translate}}</p>\r\n </div>\r\n\r\n <!-- Child menu (Rendered to the right) -->\r\n <ec-menu *ngIf=\"selected?.items\"\r\n id=\"{{id}}_child\"\r\n class=\"child\"\r\n [parent]=\"selected\"\r\n [items]=\"selected?.items\"\r\n [showNoItems]=\"true\"\r\n [templateType]=\"templateType\"\r\n [enableKeyNav]=\"true\"\r\n [truncateItems]=\"truncateItems\"\r\n (selectedChanged)=\"onSelection($event)\"\r\n (menuClosed)=\"toggleChildMenu(false)\">\r\n </ec-menu>\r\n</nav>\r\n\r\n<!-- 'label' Item Template -->\r\n<ng-template #label\r\n let-item>\r\n <span id=\"{{item.id}}_label\"\r\n class=\"label\"\r\n [class.text-truncate]=\"truncateItems\">{{item.label}}</span>\r\n\r\n <i class=\"ec-icon icon-angle-down rotate-270\"\r\n *ngIf=\"item?.items\"></i>\r\n</ng-template>\r\n\r\n<!-- 'checkAndLabel' Item Template -->\r\n<ng-template #checkAndLabel\r\n let-item>\r\n\r\n <i class=\"ec-icon icon-check ec-icon-sm\"\r\n *ngIf=\"item.display !== 'heading'\"></i>\r\n\r\n <i class=\"ec-icon {{item.icon}} ml-2\"\r\n *ngIf=\"item.icon\"></i>\r\n\r\n <span id=\"{{item.id}}_label\"\r\n class=\"label\"\r\n [class.text-truncate]=\"truncateItems\">{{item.label}}</span>\r\n\r\n <i class=\"ec-icon icon-angle-down rotate-270\"\r\n *ngIf=\"item?.items\"></i>\r\n</ng-template>\r\n\r\n<!-- 'iconAndLabel' Item Template -->\r\n<ng-template #iconAndLabel\r\n let-item>\r\n <!-- If menuItem.icon exists and is not blank, show the icon in the menu -->\r\n <i class=\"ec-icon {{item.icon}}\"\r\n *ngIf=\"(item.icon && item.icon !== '') || preserveIconSpace\"></i>\r\n\r\n <span id=\"{{item.id}}_label\"\r\n class=\"label\"\r\n [class.text-truncate]=\"truncateItems\">{{item.label}}</span>\r\n\r\n <i class=\"ec-icon icon-angle-down rotate-270\"\r\n *ngIf=\"item?.items\"></i>\r\n</ng-template>\r\n\r\n<ng-template #iconLabelCaption\r\n let-item>\r\n <i class=\"ec-icon {{item.icon}}\"\r\n *ngIf=\"(item.icon && item.icon !== '') || preserveIconSpace\"></i>\r\n <div class=\"label flex-grow\">\r\n <p id=\"{{item.id}}_label\"\r\n class=\"text-body-1\"\r\n [class.text-truncate]=\"truncateItems\">{{item.label}}</p>\r\n <p id=\"{{item.id}}_caption\"\r\n *ngIf=\"item.caption\"\r\n class=\"text-caption-1\"\r\n [class.text-truncate]=\"truncateItems\">{{item.caption}}</p>\r\n </div>\r\n <i class=\"ec-icon icon-angle-down rotate-270 align-self-center\"\r\n *ngIf=\"item?.items\"></i>\r\n</ng-template>", styles: ["@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}:host{display:block;font-size:var(--ec-font-size-action);font-weight:400;background-color:var(--ec-menu-background-color, var(--ec-background-color))}:host.open>nav>.parent,:host.open>nav>.child{position:absolute;left:0;top:0;right:0;height:100%;transition:transform .25s ease}:host.open>nav>.parent{transform:translate(0)}:host.open>nav>.child{transform:translate(100%)}:host.open-active>nav>.parent{transform:translate(-100%)}:host.open-active>nav>.child{transform:translate(0)}:host(.bg-transparent){background-color:transparent}:host-context(.is-always-open){height:100%}:host-context(.is-always-open) .item-wrapper{padding-left:1rem;padding-right:1rem}nav{display:flex;position:relative;height:100%;overflow:hidden}.parent{display:flex;flex-direction:column;flex:auto;position:relative;max-width:100%}.parent>header{cursor:pointer}.parent>header.is-selected .item-wrapper,.parent>header.is-highlighted .item-wrapper{background-color:var(--ec-background-color-selected)}.parent>header:hover .item-wrapper{background-color:var(--ec-background-color-hover)}.parent.no-data ul{display:none}.parent.no-data .no-data-message{display:block}ul{padding:0;margin:0;list-style:none;flex:auto;height:100%;overflow-y:auto}ul li{cursor:pointer;padding:0 .25rem}ul li a{color:inherit;border-bottom:0;text-decoration:none}ul li.is-selected .item-wrapper,ul li.is-highlighted .item-wrapper{background-color:var(--ec-background-color-selected)}ul li:hover .item-wrapper{background-color:var(--ec-background-color-hover)}ul li:focus .item-wrapper{background-color:var(--ec-color-disabled-dark);position:relative;z-index:1;outline:none}ul li.is-disabled .item-wrapper{color:var(--ec-color-secondary-dark);opacity:.65}ul li.is-disabled,ul li.is-readonly{cursor:default}ul li.is-disabled .item-wrapper,ul li.is-readonly .item-wrapper{background-color:transparent;color:inherit}ul li.is-checked .icon-check{opacity:1}ul li.heading{cursor:default}ul li.heading .item-wrapper{background-color:transparent}ul li.heading:not(:first-child){margin-top:.5rem}ul li.divider{border-bottom:1px solid var(--ec-border-color);padding-bottom:.25rem;margin-bottom:.25rem}ul li.indent-1 .item-wrapper{padding-left:1.5rem}ul li.indent-2 .item-wrapper{padding-left:2.5rem}ul li.indent-3 .item-wrapper{padding-left:3.5rem}.item-wrapper{cursor:inherit;line-height:1.25rem;min-height:1.75rem;padding:.25rem .5rem;border-radius:var(--ec-border-radius);display:flex;color:inherit}.item-wrapper .label{margin-right:auto}.item-wrapper .label+.ec-icon{margin-left:.5rem}.item-wrapper .ec-icon{margin-top:calc((1.25rem - var(--ec-font-size-icon)) / 2);flex:none}.item-wrapper .ec-icon+.label{margin-left:.5rem}.item-wrapper .ec-icon-sm{margin-top:calc((1.25rem - calc(var(--ec-font-size-icon) * .75)) / 2)}.item-wrapper .icon-check{opacity:0}.no-data-message{display:none;text-align:center;padding:1rem;color:var(--ec-color-hint-dark);margin-bottom:0;font-size:var(--ec-font-size-body)}:host-context(ec-tree) ul{overflow-x:hidden}:host-context(ec-tree) li.is-selected,:host-context(ec-tree) li.is-highlighted{font-weight:700;color:var(--ec-menu-color-highlighted, inherit)}:host-context(ec-tree) li.is-selected:not(:hover),:host-context(ec-tree) li.is-highlighted:not(:hover){background-color:transparent}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: NavItemActiveDirective, selector: "[ecNavItemActive]", inputs: ["ecNavItemActive", "ecNavItemActiveExactMatch", "ecNavItemActiveQueryParams", "ecNavItemActiveUrl"], outputs: ["routerLinkActivated"] }, { kind: "component", type: MenuComponent, selector: "ec-menu", inputs: ["id", "items", "selected", "parent", "templateType", "customMenuTemplate", "title", "showNoItems", "noDataText", "enableKeyNav", "highlightedItem", "maintainSelectedItem", "truncateItems", "preserveIconSpace", "dropdownToggleButton"], outputs: ["selectedChanged", "menuClosed"] }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] });
2294
+ MenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: MenuComponent, selector: "ec-menu", inputs: { id: "id", items: "items", selected: "selected", parent: "parent", templateType: "templateType", customMenuTemplate: "customMenuTemplate", title: "title", showNoItems: "showNoItems", noDataText: "noDataText", enableKeyNav: "enableKeyNav", highlightedItem: "highlightedItem", maintainSelectedItem: "maintainSelectedItem", truncateItems: "truncateItems", preserveIconSpace: "preserveIconSpace", dropdownToggleButton: "dropdownToggleButton" }, outputs: { selectedChanged: "selectedChanged", menuClosed: "menuClosed" }, host: { properties: { "attr.id": "this.attrId" } }, viewQueries: [{ propertyName: "labelTemplate", first: true, predicate: ["label"], descendants: true, static: true }, { propertyName: "iconAndLabelTemplate", first: true, predicate: ["iconAndLabel"], descendants: true, static: true }, { propertyName: "checkAndLabelTemplate", first: true, predicate: ["checkAndLabel"], descendants: true, static: true }, { propertyName: "iconLabelCaptionTemplate", first: true, predicate: ["iconLabelCaption"], descendants: true, static: true }], ngImport: i0, template: "<nav>\r\n <div class=\"parent\"\r\n [class.no-data]=\"showNoItems && (!items || items.length === 0)\">\r\n <header id=\"{{id}}_header\"\r\n class=\"text-heading-3 p-1\"\r\n [class.is-selected]=\"highlightedItemIndex === -1\"\r\n *ngIf=\"parent\"\r\n (click)=\"back($event)\">\r\n <div class=\"item-wrapper\">\r\n <i class=\"ec-icon icon-angle-down rotate-90 flex-shrink\"></i>\r\n <span class=\"label text-truncate flex-grow\">{{parent?.label}}</span>\r\n </div>\r\n </header>\r\n\r\n <ul id=\"{{id}}_list\"\r\n class=\"py-1\">\r\n <li *ngFor=\"let item of items; index as i\"\r\n id=\"{{item.id || id + '_item' + i}}\"\r\n class=\"{{item.display || 'item'}} {{item.classList}}\"\r\n [attr.disabled]=\"item.disabled\"\r\n [hidden]=\"item.hidden\"\r\n ecNavItemActive=\"is-selected\"\r\n [ecNavItemActiveQueryParams]=\"item.queryParams\"\r\n [ecNavItemActiveUrl]=\"item.url\"\r\n [ecNavItemActiveExactMatch]='item.isActiveExactMatch'\r\n (routerLinkActivated)=\"selectItem($event, item)\"\r\n [ngClass]=\"{'is-highlighted':(selected === item && item?.display !== 'heading') || highlightedItem === item, 'is-link': item.url, 'is-disabled': item.disabled, 'is-readonly': item.readonly, 'is-checked': item.checked, 'text-heading-3': item?.display === 'heading'}\"\r\n (click)=\"selectItem($event, item)\">\r\n\r\n <a *ngIf=\"item.url && !item.externalLink\"\r\n id=\"{{item.id}}_link\"\r\n title=\"{{truncateItems ? item.label : ''}}\"\r\n class=\"item-wrapper\"\r\n [routerLink]=\"item.url\"\r\n [queryParams]=\"item.queryParams || null\"\r\n target=\"{{item.target || '_self'}}\">\r\n\r\n <ng-container *ngTemplateOutlet=\"internalizedTemplate; context: {$implicit: item}\"></ng-container>\r\n </a>\r\n\r\n <a *ngIf=\"item.url && item.externalLink\"\r\n id=\"{{item.id}}_link\"\r\n title=\"{{truncateItems ? item.label : ''}}\"\r\n class=\"item-wrapper\"\r\n href=\"{{item.url}}\"\r\n target=\"{{item.target || '_self'}}\">\r\n\r\n <ng-container *ngTemplateOutlet=\"internalizedTemplate; context: {$implicit: item}\"></ng-container>\r\n </a>\r\n\r\n <div *ngIf=\"!item.url\"\r\n title=\"{{truncateItems ? item.label : ''}}\"\r\n class=\"item-wrapper\">\r\n <ng-container *ngTemplateOutlet=\"internalizedTemplate; context: {$implicit: item}\"></ng-container>\r\n </div>\r\n </li>\r\n </ul>\r\n\r\n <p class=\"no-data-message\">{{noDataText | translate}}</p>\r\n </div>\r\n\r\n <!-- Child menu (Rendered to the right) -->\r\n <ec-menu *ngIf=\"selected?.items\"\r\n id=\"{{id}}_child\"\r\n class=\"child\"\r\n [parent]=\"selected\"\r\n [items]=\"selected?.items\"\r\n [showNoItems]=\"true\"\r\n [templateType]=\"templateType\"\r\n [enableKeyNav]=\"true\"\r\n [truncateItems]=\"truncateItems\"\r\n (selectedChanged)=\"onSelection($event)\"\r\n (menuClosed)=\"toggleChildMenu(false)\">\r\n </ec-menu>\r\n</nav>\r\n\r\n<!-- 'label' Item Template -->\r\n<ng-template #label\r\n let-item>\r\n <span id=\"{{item.id}}_label\"\r\n class=\"label\"\r\n [class.text-truncate]=\"truncateItems\">{{item.label}}</span>\r\n\r\n <i class=\"ec-icon icon-angle-down rotate-270\"\r\n *ngIf=\"item?.items\"></i>\r\n</ng-template>\r\n\r\n<!-- 'checkAndLabel' Item Template -->\r\n<ng-template #checkAndLabel\r\n let-item>\r\n\r\n <i class=\"ec-icon icon-check ec-icon-sm\"\r\n *ngIf=\"item.display !== 'heading'\"></i>\r\n\r\n <i class=\"ec-icon {{item.icon}} ml-2\"\r\n *ngIf=\"item.icon\"></i>\r\n\r\n <span id=\"{{item.id}}_label\"\r\n class=\"label\"\r\n [class.text-truncate]=\"truncateItems\">{{item.label}}</span>\r\n\r\n <i class=\"ec-icon icon-angle-down rotate-270\"\r\n *ngIf=\"item?.items\"></i>\r\n</ng-template>\r\n\r\n<!-- 'iconAndLabel' Item Template -->\r\n<ng-template #iconAndLabel\r\n let-item>\r\n <!-- If menuItem.icon exists and is not blank, show the icon in the menu -->\r\n <i class=\"ec-icon {{item.icon}}\"\r\n *ngIf=\"(item.icon && item.icon !== '') || preserveIconSpace\"></i>\r\n\r\n <span id=\"{{item.id}}_label\"\r\n class=\"label\"\r\n [class.text-truncate]=\"truncateItems\">{{item.label}}</span>\r\n\r\n <i class=\"ec-icon icon-angle-down rotate-270\"\r\n *ngIf=\"item?.items\"></i>\r\n</ng-template>\r\n\r\n<ng-template #iconLabelCaption\r\n let-item>\r\n <i class=\"ec-icon {{item.icon}}\"\r\n *ngIf=\"(item.icon && item.icon !== '') || preserveIconSpace\"></i>\r\n <div *ngIf=\"item.display !== 'heading'\"\r\n class=\"label flex-grow\">\r\n <div id=\"{{item.id}}_label\"\r\n class=\"text-body-1\"\r\n [class.text-truncate]=\"truncateItems\">{{item.label}}</div>\r\n <div id=\"{{item.id}}_caption\"\r\n *ngIf=\"item.caption\"\r\n class=\"text-caption-1\"\r\n [class.text-truncate]=\"truncateItems\">{{item.caption}}</div>\r\n </div>\r\n <h3 *ngIf=\"item.display === 'heading'\"\r\n class=\"flex-grow text-heading-3 align-self-center\"\r\n [class.text-truncate]=\"truncateItems\">{{item.label}}</h3>\r\n <i class=\"ec-icon icon-angle-down rotate-270 align-self-center\"\r\n *ngIf=\"item?.items\"></i>\r\n</ng-template>", styles: ["@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}:host{display:block;font-size:var(--ec-font-size-action);font-weight:400;background-color:var(--ec-menu-background-color, var(--ec-background-color))}:host.open>nav>.parent,:host.open>nav>.child{position:absolute;left:0;top:0;right:0;height:100%;transition:transform .25s ease}:host.open>nav>.parent{transform:translate(0)}:host.open>nav>.child{transform:translate(100%)}:host.open-active>nav>.parent{transform:translate(-100%)}:host.open-active>nav>.child{transform:translate(0)}:host(.bg-transparent){background-color:transparent}:host-context(.is-always-open){height:100%}:host-context(.is-always-open) .item-wrapper{padding-left:1rem;padding-right:1rem}nav{display:flex;position:relative;height:100%;overflow:hidden}.parent{display:flex;flex-direction:column;flex:auto;position:relative;max-width:100%}.parent>header{cursor:pointer}.parent>header.is-selected .item-wrapper,.parent>header.is-highlighted .item-wrapper{background-color:var(--ec-background-color-selected)}.parent>header:hover .item-wrapper{background-color:var(--ec-background-color-hover)}.parent.no-data ul{display:none}.parent.no-data .no-data-message{display:block}ul{padding:0;margin:0;list-style:none;flex:auto;height:100%;overflow-y:auto}ul li{cursor:pointer;padding:0 .25rem}ul li a{color:inherit;border-bottom:0;text-decoration:none}ul li.is-selected .item-wrapper,ul li.is-highlighted .item-wrapper{background-color:var(--ec-background-color-selected)}ul li:hover .item-wrapper{background-color:var(--ec-background-color-hover)}ul li:focus .item-wrapper{background-color:var(--ec-color-disabled-dark);position:relative;z-index:1;outline:none}ul li.is-disabled .item-wrapper{color:var(--ec-color-secondary-dark);opacity:.65}ul li.is-disabled,ul li.is-readonly{cursor:default}ul li.is-disabled .item-wrapper,ul li.is-readonly .item-wrapper{background-color:transparent;color:inherit}ul li.is-checked .icon-check{opacity:1}ul li.heading{cursor:default}ul li.heading .item-wrapper{background-color:transparent}ul li.heading:not(:first-child){margin-top:.5rem}ul li.divider{border-bottom:1px solid var(--ec-border-color);padding-bottom:.25rem;margin-bottom:.25rem}ul li.indent-1 .item-wrapper{padding-left:1.5rem}ul li.indent-2 .item-wrapper{padding-left:2.5rem}ul li.indent-3 .item-wrapper{padding-left:3.5rem}.item-wrapper{cursor:inherit;line-height:1.25rem;min-height:1.75rem;padding:.25rem .5rem;border-radius:var(--ec-border-radius);display:flex;color:inherit}.item-wrapper .label{margin-right:auto}.item-wrapper .label+.ec-icon{margin-left:.5rem}.item-wrapper .ec-icon{margin-top:calc((1.25rem - var(--ec-font-size-icon)) / 2);flex:none}.item-wrapper .ec-icon+.label{margin-left:.5rem}.item-wrapper .ec-icon-sm{margin-top:calc((1.25rem - calc(var(--ec-font-size-icon) * .75)) / 2)}.item-wrapper .icon-check{opacity:0}.no-data-message{display:none;text-align:center;padding:1rem;color:var(--ec-color-hint-dark);margin-bottom:0;font-size:var(--ec-font-size-body)}:host-context(ec-tree) ul{overflow-x:hidden}:host-context(ec-tree) li.is-selected,:host-context(ec-tree) li.is-highlighted{font-weight:700;color:var(--ec-menu-color-highlighted, inherit)}:host-context(ec-tree) li.is-selected:not(:hover),:host-context(ec-tree) li.is-highlighted:not(:hover){background-color:transparent}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: NavItemActiveDirective, selector: "[ecNavItemActive]", inputs: ["ecNavItemActive", "ecNavItemActiveExactMatch", "ecNavItemActiveQueryParams", "ecNavItemActiveUrl"], outputs: ["routerLinkActivated"] }, { kind: "component", type: MenuComponent, selector: "ec-menu", inputs: ["id", "items", "selected", "parent", "templateType", "customMenuTemplate", "title", "showNoItems", "noDataText", "enableKeyNav", "highlightedItem", "maintainSelectedItem", "truncateItems", "preserveIconSpace", "dropdownToggleButton"], outputs: ["selectedChanged", "menuClosed"] }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] });
2295
2295
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: MenuComponent, decorators: [{
2296
2296
  type: Component,
2297
- args: [{ selector: 'ec-menu', template: "<nav>\r\n <div class=\"parent\"\r\n [class.no-data]=\"showNoItems && (!items || items.length === 0)\">\r\n <header id=\"{{id}}_header\"\r\n class=\"text-heading-3 p-1\"\r\n [class.is-selected]=\"highlightedItemIndex === -1\"\r\n *ngIf=\"parent\"\r\n (click)=\"back($event)\">\r\n <div class=\"item-wrapper\">\r\n <i class=\"ec-icon icon-angle-down rotate-90 flex-shrink\"></i>\r\n <span class=\"label text-truncate flex-grow\">{{parent?.label}}</span>\r\n </div>\r\n </header>\r\n\r\n <ul id=\"{{id}}_list\"\r\n class=\"py-1\">\r\n <li *ngFor=\"let item of items; index as i\"\r\n id=\"{{item.id || id + '_item' + i}}\"\r\n class=\"{{item.display || 'item'}} {{item.classList}}\"\r\n [attr.disabled]=\"item.disabled\"\r\n [hidden]=\"item.hidden\"\r\n ecNavItemActive=\"is-selected\"\r\n [ecNavItemActiveQueryParams]=\"item.queryParams\"\r\n [ecNavItemActiveUrl]=\"item.url\"\r\n [ecNavItemActiveExactMatch]='item.isActiveExactMatch'\r\n (routerLinkActivated)=\"selectItem($event, item)\"\r\n [ngClass]=\"{'is-highlighted':(selected === item && item?.display !== 'heading') || highlightedItem === item, 'is-link': item.url, 'is-disabled': item.disabled, 'is-readonly': item.readonly, 'is-checked': item.checked, 'text-heading-3': item?.display === 'heading'}\"\r\n (click)=\"selectItem($event, item)\">\r\n\r\n <a *ngIf=\"item.url && !item.externalLink\"\r\n id=\"{{item.id}}_link\"\r\n title=\"{{truncateItems ? item.label : ''}}\"\r\n class=\"item-wrapper\"\r\n [routerLink]=\"item.url\"\r\n [queryParams]=\"item.queryParams || null\"\r\n target=\"{{item.target || '_self'}}\">\r\n\r\n <ng-container *ngTemplateOutlet=\"internalizedTemplate; context: {$implicit: item}\"></ng-container>\r\n </a>\r\n\r\n <a *ngIf=\"item.url && item.externalLink\"\r\n id=\"{{item.id}}_link\"\r\n title=\"{{truncateItems ? item.label : ''}}\"\r\n class=\"item-wrapper\"\r\n href=\"{{item.url}}\"\r\n target=\"{{item.target || '_self'}}\">\r\n\r\n <ng-container *ngTemplateOutlet=\"internalizedTemplate; context: {$implicit: item}\"></ng-container>\r\n </a>\r\n\r\n <div *ngIf=\"!item.url\"\r\n title=\"{{truncateItems ? item.label : ''}}\"\r\n class=\"item-wrapper\">\r\n <ng-container *ngTemplateOutlet=\"internalizedTemplate; context: {$implicit: item}\"></ng-container>\r\n </div>\r\n </li>\r\n </ul>\r\n\r\n <p class=\"no-data-message\">{{noDataText | translate}}</p>\r\n </div>\r\n\r\n <!-- Child menu (Rendered to the right) -->\r\n <ec-menu *ngIf=\"selected?.items\"\r\n id=\"{{id}}_child\"\r\n class=\"child\"\r\n [parent]=\"selected\"\r\n [items]=\"selected?.items\"\r\n [showNoItems]=\"true\"\r\n [templateType]=\"templateType\"\r\n [enableKeyNav]=\"true\"\r\n [truncateItems]=\"truncateItems\"\r\n (selectedChanged)=\"onSelection($event)\"\r\n (menuClosed)=\"toggleChildMenu(false)\">\r\n </ec-menu>\r\n</nav>\r\n\r\n<!-- 'label' Item Template -->\r\n<ng-template #label\r\n let-item>\r\n <span id=\"{{item.id}}_label\"\r\n class=\"label\"\r\n [class.text-truncate]=\"truncateItems\">{{item.label}}</span>\r\n\r\n <i class=\"ec-icon icon-angle-down rotate-270\"\r\n *ngIf=\"item?.items\"></i>\r\n</ng-template>\r\n\r\n<!-- 'checkAndLabel' Item Template -->\r\n<ng-template #checkAndLabel\r\n let-item>\r\n\r\n <i class=\"ec-icon icon-check ec-icon-sm\"\r\n *ngIf=\"item.display !== 'heading'\"></i>\r\n\r\n <i class=\"ec-icon {{item.icon}} ml-2\"\r\n *ngIf=\"item.icon\"></i>\r\n\r\n <span id=\"{{item.id}}_label\"\r\n class=\"label\"\r\n [class.text-truncate]=\"truncateItems\">{{item.label}}</span>\r\n\r\n <i class=\"ec-icon icon-angle-down rotate-270\"\r\n *ngIf=\"item?.items\"></i>\r\n</ng-template>\r\n\r\n<!-- 'iconAndLabel' Item Template -->\r\n<ng-template #iconAndLabel\r\n let-item>\r\n <!-- If menuItem.icon exists and is not blank, show the icon in the menu -->\r\n <i class=\"ec-icon {{item.icon}}\"\r\n *ngIf=\"(item.icon && item.icon !== '') || preserveIconSpace\"></i>\r\n\r\n <span id=\"{{item.id}}_label\"\r\n class=\"label\"\r\n [class.text-truncate]=\"truncateItems\">{{item.label}}</span>\r\n\r\n <i class=\"ec-icon icon-angle-down rotate-270\"\r\n *ngIf=\"item?.items\"></i>\r\n</ng-template>\r\n\r\n<ng-template #iconLabelCaption\r\n let-item>\r\n <i class=\"ec-icon {{item.icon}}\"\r\n *ngIf=\"(item.icon && item.icon !== '') || preserveIconSpace\"></i>\r\n <div class=\"label flex-grow\">\r\n <p id=\"{{item.id}}_label\"\r\n class=\"text-body-1\"\r\n [class.text-truncate]=\"truncateItems\">{{item.label}}</p>\r\n <p id=\"{{item.id}}_caption\"\r\n *ngIf=\"item.caption\"\r\n class=\"text-caption-1\"\r\n [class.text-truncate]=\"truncateItems\">{{item.caption}}</p>\r\n </div>\r\n <i class=\"ec-icon icon-angle-down rotate-270 align-self-center\"\r\n *ngIf=\"item?.items\"></i>\r\n</ng-template>", styles: ["@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}:host{display:block;font-size:var(--ec-font-size-action);font-weight:400;background-color:var(--ec-menu-background-color, var(--ec-background-color))}:host.open>nav>.parent,:host.open>nav>.child{position:absolute;left:0;top:0;right:0;height:100%;transition:transform .25s ease}:host.open>nav>.parent{transform:translate(0)}:host.open>nav>.child{transform:translate(100%)}:host.open-active>nav>.parent{transform:translate(-100%)}:host.open-active>nav>.child{transform:translate(0)}:host(.bg-transparent){background-color:transparent}:host-context(.is-always-open){height:100%}:host-context(.is-always-open) .item-wrapper{padding-left:1rem;padding-right:1rem}nav{display:flex;position:relative;height:100%;overflow:hidden}.parent{display:flex;flex-direction:column;flex:auto;position:relative;max-width:100%}.parent>header{cursor:pointer}.parent>header.is-selected .item-wrapper,.parent>header.is-highlighted .item-wrapper{background-color:var(--ec-background-color-selected)}.parent>header:hover .item-wrapper{background-color:var(--ec-background-color-hover)}.parent.no-data ul{display:none}.parent.no-data .no-data-message{display:block}ul{padding:0;margin:0;list-style:none;flex:auto;height:100%;overflow-y:auto}ul li{cursor:pointer;padding:0 .25rem}ul li a{color:inherit;border-bottom:0;text-decoration:none}ul li.is-selected .item-wrapper,ul li.is-highlighted .item-wrapper{background-color:var(--ec-background-color-selected)}ul li:hover .item-wrapper{background-color:var(--ec-background-color-hover)}ul li:focus .item-wrapper{background-color:var(--ec-color-disabled-dark);position:relative;z-index:1;outline:none}ul li.is-disabled .item-wrapper{color:var(--ec-color-secondary-dark);opacity:.65}ul li.is-disabled,ul li.is-readonly{cursor:default}ul li.is-disabled .item-wrapper,ul li.is-readonly .item-wrapper{background-color:transparent;color:inherit}ul li.is-checked .icon-check{opacity:1}ul li.heading{cursor:default}ul li.heading .item-wrapper{background-color:transparent}ul li.heading:not(:first-child){margin-top:.5rem}ul li.divider{border-bottom:1px solid var(--ec-border-color);padding-bottom:.25rem;margin-bottom:.25rem}ul li.indent-1 .item-wrapper{padding-left:1.5rem}ul li.indent-2 .item-wrapper{padding-left:2.5rem}ul li.indent-3 .item-wrapper{padding-left:3.5rem}.item-wrapper{cursor:inherit;line-height:1.25rem;min-height:1.75rem;padding:.25rem .5rem;border-radius:var(--ec-border-radius);display:flex;color:inherit}.item-wrapper .label{margin-right:auto}.item-wrapper .label+.ec-icon{margin-left:.5rem}.item-wrapper .ec-icon{margin-top:calc((1.25rem - var(--ec-font-size-icon)) / 2);flex:none}.item-wrapper .ec-icon+.label{margin-left:.5rem}.item-wrapper .ec-icon-sm{margin-top:calc((1.25rem - calc(var(--ec-font-size-icon) * .75)) / 2)}.item-wrapper .icon-check{opacity:0}.no-data-message{display:none;text-align:center;padding:1rem;color:var(--ec-color-hint-dark);margin-bottom:0;font-size:var(--ec-font-size-body)}:host-context(ec-tree) ul{overflow-x:hidden}:host-context(ec-tree) li.is-selected,:host-context(ec-tree) li.is-highlighted{font-weight:700;color:var(--ec-menu-color-highlighted, inherit)}:host-context(ec-tree) li.is-selected:not(:hover),:host-context(ec-tree) li.is-highlighted:not(:hover){background-color:transparent}\n"] }]
2297
+ args: [{ selector: 'ec-menu', template: "<nav>\r\n <div class=\"parent\"\r\n [class.no-data]=\"showNoItems && (!items || items.length === 0)\">\r\n <header id=\"{{id}}_header\"\r\n class=\"text-heading-3 p-1\"\r\n [class.is-selected]=\"highlightedItemIndex === -1\"\r\n *ngIf=\"parent\"\r\n (click)=\"back($event)\">\r\n <div class=\"item-wrapper\">\r\n <i class=\"ec-icon icon-angle-down rotate-90 flex-shrink\"></i>\r\n <span class=\"label text-truncate flex-grow\">{{parent?.label}}</span>\r\n </div>\r\n </header>\r\n\r\n <ul id=\"{{id}}_list\"\r\n class=\"py-1\">\r\n <li *ngFor=\"let item of items; index as i\"\r\n id=\"{{item.id || id + '_item' + i}}\"\r\n class=\"{{item.display || 'item'}} {{item.classList}}\"\r\n [attr.disabled]=\"item.disabled\"\r\n [hidden]=\"item.hidden\"\r\n ecNavItemActive=\"is-selected\"\r\n [ecNavItemActiveQueryParams]=\"item.queryParams\"\r\n [ecNavItemActiveUrl]=\"item.url\"\r\n [ecNavItemActiveExactMatch]='item.isActiveExactMatch'\r\n (routerLinkActivated)=\"selectItem($event, item)\"\r\n [ngClass]=\"{'is-highlighted':(selected === item && item?.display !== 'heading') || highlightedItem === item, 'is-link': item.url, 'is-disabled': item.disabled, 'is-readonly': item.readonly, 'is-checked': item.checked, 'text-heading-3': item?.display === 'heading'}\"\r\n (click)=\"selectItem($event, item)\">\r\n\r\n <a *ngIf=\"item.url && !item.externalLink\"\r\n id=\"{{item.id}}_link\"\r\n title=\"{{truncateItems ? item.label : ''}}\"\r\n class=\"item-wrapper\"\r\n [routerLink]=\"item.url\"\r\n [queryParams]=\"item.queryParams || null\"\r\n target=\"{{item.target || '_self'}}\">\r\n\r\n <ng-container *ngTemplateOutlet=\"internalizedTemplate; context: {$implicit: item}\"></ng-container>\r\n </a>\r\n\r\n <a *ngIf=\"item.url && item.externalLink\"\r\n id=\"{{item.id}}_link\"\r\n title=\"{{truncateItems ? item.label : ''}}\"\r\n class=\"item-wrapper\"\r\n href=\"{{item.url}}\"\r\n target=\"{{item.target || '_self'}}\">\r\n\r\n <ng-container *ngTemplateOutlet=\"internalizedTemplate; context: {$implicit: item}\"></ng-container>\r\n </a>\r\n\r\n <div *ngIf=\"!item.url\"\r\n title=\"{{truncateItems ? item.label : ''}}\"\r\n class=\"item-wrapper\">\r\n <ng-container *ngTemplateOutlet=\"internalizedTemplate; context: {$implicit: item}\"></ng-container>\r\n </div>\r\n </li>\r\n </ul>\r\n\r\n <p class=\"no-data-message\">{{noDataText | translate}}</p>\r\n </div>\r\n\r\n <!-- Child menu (Rendered to the right) -->\r\n <ec-menu *ngIf=\"selected?.items\"\r\n id=\"{{id}}_child\"\r\n class=\"child\"\r\n [parent]=\"selected\"\r\n [items]=\"selected?.items\"\r\n [showNoItems]=\"true\"\r\n [templateType]=\"templateType\"\r\n [enableKeyNav]=\"true\"\r\n [truncateItems]=\"truncateItems\"\r\n (selectedChanged)=\"onSelection($event)\"\r\n (menuClosed)=\"toggleChildMenu(false)\">\r\n </ec-menu>\r\n</nav>\r\n\r\n<!-- 'label' Item Template -->\r\n<ng-template #label\r\n let-item>\r\n <span id=\"{{item.id}}_label\"\r\n class=\"label\"\r\n [class.text-truncate]=\"truncateItems\">{{item.label}}</span>\r\n\r\n <i class=\"ec-icon icon-angle-down rotate-270\"\r\n *ngIf=\"item?.items\"></i>\r\n</ng-template>\r\n\r\n<!-- 'checkAndLabel' Item Template -->\r\n<ng-template #checkAndLabel\r\n let-item>\r\n\r\n <i class=\"ec-icon icon-check ec-icon-sm\"\r\n *ngIf=\"item.display !== 'heading'\"></i>\r\n\r\n <i class=\"ec-icon {{item.icon}} ml-2\"\r\n *ngIf=\"item.icon\"></i>\r\n\r\n <span id=\"{{item.id}}_label\"\r\n class=\"label\"\r\n [class.text-truncate]=\"truncateItems\">{{item.label}}</span>\r\n\r\n <i class=\"ec-icon icon-angle-down rotate-270\"\r\n *ngIf=\"item?.items\"></i>\r\n</ng-template>\r\n\r\n<!-- 'iconAndLabel' Item Template -->\r\n<ng-template #iconAndLabel\r\n let-item>\r\n <!-- If menuItem.icon exists and is not blank, show the icon in the menu -->\r\n <i class=\"ec-icon {{item.icon}}\"\r\n *ngIf=\"(item.icon && item.icon !== '') || preserveIconSpace\"></i>\r\n\r\n <span id=\"{{item.id}}_label\"\r\n class=\"label\"\r\n [class.text-truncate]=\"truncateItems\">{{item.label}}</span>\r\n\r\n <i class=\"ec-icon icon-angle-down rotate-270\"\r\n *ngIf=\"item?.items\"></i>\r\n</ng-template>\r\n\r\n<ng-template #iconLabelCaption\r\n let-item>\r\n <i class=\"ec-icon {{item.icon}}\"\r\n *ngIf=\"(item.icon && item.icon !== '') || preserveIconSpace\"></i>\r\n <div *ngIf=\"item.display !== 'heading'\"\r\n class=\"label flex-grow\">\r\n <div id=\"{{item.id}}_label\"\r\n class=\"text-body-1\"\r\n [class.text-truncate]=\"truncateItems\">{{item.label}}</div>\r\n <div id=\"{{item.id}}_caption\"\r\n *ngIf=\"item.caption\"\r\n class=\"text-caption-1\"\r\n [class.text-truncate]=\"truncateItems\">{{item.caption}}</div>\r\n </div>\r\n <h3 *ngIf=\"item.display === 'heading'\"\r\n class=\"flex-grow text-heading-3 align-self-center\"\r\n [class.text-truncate]=\"truncateItems\">{{item.label}}</h3>\r\n <i class=\"ec-icon icon-angle-down rotate-270 align-self-center\"\r\n *ngIf=\"item?.items\"></i>\r\n</ng-template>", styles: ["@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}:host{display:block;font-size:var(--ec-font-size-action);font-weight:400;background-color:var(--ec-menu-background-color, var(--ec-background-color))}:host.open>nav>.parent,:host.open>nav>.child{position:absolute;left:0;top:0;right:0;height:100%;transition:transform .25s ease}:host.open>nav>.parent{transform:translate(0)}:host.open>nav>.child{transform:translate(100%)}:host.open-active>nav>.parent{transform:translate(-100%)}:host.open-active>nav>.child{transform:translate(0)}:host(.bg-transparent){background-color:transparent}:host-context(.is-always-open){height:100%}:host-context(.is-always-open) .item-wrapper{padding-left:1rem;padding-right:1rem}nav{display:flex;position:relative;height:100%;overflow:hidden}.parent{display:flex;flex-direction:column;flex:auto;position:relative;max-width:100%}.parent>header{cursor:pointer}.parent>header.is-selected .item-wrapper,.parent>header.is-highlighted .item-wrapper{background-color:var(--ec-background-color-selected)}.parent>header:hover .item-wrapper{background-color:var(--ec-background-color-hover)}.parent.no-data ul{display:none}.parent.no-data .no-data-message{display:block}ul{padding:0;margin:0;list-style:none;flex:auto;height:100%;overflow-y:auto}ul li{cursor:pointer;padding:0 .25rem}ul li a{color:inherit;border-bottom:0;text-decoration:none}ul li.is-selected .item-wrapper,ul li.is-highlighted .item-wrapper{background-color:var(--ec-background-color-selected)}ul li:hover .item-wrapper{background-color:var(--ec-background-color-hover)}ul li:focus .item-wrapper{background-color:var(--ec-color-disabled-dark);position:relative;z-index:1;outline:none}ul li.is-disabled .item-wrapper{color:var(--ec-color-secondary-dark);opacity:.65}ul li.is-disabled,ul li.is-readonly{cursor:default}ul li.is-disabled .item-wrapper,ul li.is-readonly .item-wrapper{background-color:transparent;color:inherit}ul li.is-checked .icon-check{opacity:1}ul li.heading{cursor:default}ul li.heading .item-wrapper{background-color:transparent}ul li.heading:not(:first-child){margin-top:.5rem}ul li.divider{border-bottom:1px solid var(--ec-border-color);padding-bottom:.25rem;margin-bottom:.25rem}ul li.indent-1 .item-wrapper{padding-left:1.5rem}ul li.indent-2 .item-wrapper{padding-left:2.5rem}ul li.indent-3 .item-wrapper{padding-left:3.5rem}.item-wrapper{cursor:inherit;line-height:1.25rem;min-height:1.75rem;padding:.25rem .5rem;border-radius:var(--ec-border-radius);display:flex;color:inherit}.item-wrapper .label{margin-right:auto}.item-wrapper .label+.ec-icon{margin-left:.5rem}.item-wrapper .ec-icon{margin-top:calc((1.25rem - var(--ec-font-size-icon)) / 2);flex:none}.item-wrapper .ec-icon+.label{margin-left:.5rem}.item-wrapper .ec-icon-sm{margin-top:calc((1.25rem - calc(var(--ec-font-size-icon) * .75)) / 2)}.item-wrapper .icon-check{opacity:0}.no-data-message{display:none;text-align:center;padding:1rem;color:var(--ec-color-hint-dark);margin-bottom:0;font-size:var(--ec-font-size-body)}:host-context(ec-tree) ul{overflow-x:hidden}:host-context(ec-tree) li.is-selected,:host-context(ec-tree) li.is-highlighted{font-weight:700;color:var(--ec-menu-color-highlighted, inherit)}:host-context(ec-tree) li.is-selected:not(:hover),:host-context(ec-tree) li.is-highlighted:not(:hover){background-color:transparent}\n"] }]
2298
2298
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: WindowService }, { type: ScrollService }]; }, propDecorators: { id: [{
2299
2299
  type: Input
2300
2300
  }], attrId: [{
@@ -5273,23 +5273,6 @@ class DialogComponent {
5273
5273
  this.close(new DialogResult(false));
5274
5274
  }
5275
5275
  }
5276
- /**
5277
- * Defines the width of the dialog (height is auto). Can be a number that will be converted to pixels, or xsmall(320px), small(480px), medium(640px), or large(1024px)
5278
- */
5279
- set size(value) {
5280
- this._size = value;
5281
- // If the size is a string, set the dialog class. Otherwise, clear it.
5282
- if (typeof value == 'string') {
5283
- this.dialogSizeClass = `dialog-${value}`;
5284
- }
5285
- else {
5286
- this.dialogSizeClass = undefined;
5287
- }
5288
- }
5289
- ;
5290
- get size() {
5291
- return this._size;
5292
- }
5293
5276
  constructor(componentFactoryResolver, windowService, dialogService, documentRef) {
5294
5277
  this.componentFactoryResolver = componentFactoryResolver;
5295
5278
  this.windowService = windowService;
@@ -5313,16 +5296,10 @@ class DialogComponent {
5313
5296
  this.displayAsPanel = false;
5314
5297
  this.alignToTop = false;
5315
5298
  this.transparentMask = false;
5316
- this.noMask = false;
5317
5299
  /**
5318
5300
  * Defines the width of the dialog (height is auto). Can be a number that will be converted to pixels, or xsmall(320px), small(480px), medium(640px), or large(1024px)
5319
5301
  */
5320
- this._size = 'small';
5321
- /**
5322
- * Bound to the host. The classes set the --ec-dialog-width variable to our default 'small', 'medium', etc. sizes.
5323
- * Undefined when the size is a number, which is used for custom sizes.
5324
- */
5325
- this.dialogSizeClass = `dialog-${this._size}`;
5302
+ this.size = "small";
5326
5303
  /**
5327
5304
  * Emits an event when the dialog is opened
5328
5305
  */
@@ -5373,9 +5350,6 @@ class DialogComponent {
5373
5350
  if (options.transparentMask !== undefined) {
5374
5351
  this.transparentMask = options.transparentMask;
5375
5352
  }
5376
- if (options.noMask !== undefined) {
5377
- this.noMask = options.noMask;
5378
- }
5379
5353
  if (options.canOpenDialog !== undefined) {
5380
5354
  const canOpen = yield options.canOpenDialog();
5381
5355
  if (!canOpen) {
@@ -5479,13 +5453,10 @@ class DialogComponent {
5479
5453
  }
5480
5454
  }
5481
5455
  DialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DialogComponent, deps: [{ token: i0.ComponentFactoryResolver }, { token: WindowService }, { token: DialogService }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });
5482
- DialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: DialogComponent, selector: "ec-dialog", inputs: { size: "size", content: "content", context: "context", options: "options", dialogOpenStartEventId: "dialogOpenStartEventId" }, outputs: { opened: "opened", closed: "closed" }, host: { listeners: { "click": "onOverlayClick($event)" }, properties: { "class": "dialogSizeClass", "style.--ec-dialog-width.px": "width", "class.is-open": "this.isOpen", "class.fade-in": "this.fadeIn", "class.fade-out": "this.fadeOut", "class.is-panel": "this.displayAsPanel", "class.is-top-aligned": "this.alignToTop", "class.is-transparent": "this.transparentMask", "class.no-mask": "this.noMask" } }, viewQueries: [{ propertyName: "contentContainer", first: true, predicate: ["content"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: '<article [style.min-width]="minWidth" cdkTrapFocus cdkTrapFocusAutoCapture><ng-template #content></ng-template></article>', isInline: true, styles: ["@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideIn{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes panelMaskFadeIn{0%{background-color:transparent}to{background-color:var(--ec-dialog-background-color)}}:host{--ec-dialog-background-color: var(--ec-background-color-dialog);align-items:center;background-color:var(--ec-dialog-background-color);justify-content:center;position:fixed;z-index:var(--ec-z-index-dialog);inset:0;display:none}:host.is-open{display:flex}:host.fade-in{animation-name:fadeIn;animation-duration:125ms;animation-fill-mode:forwards;animation-timing-function:ease-in-out}:host.fade-out{animation-name:fadeIn;animation-duration:.1s;animation-direction:reverse;animation-fill-mode:forwards;animation-timing-function:ease-in-out}:host.is-panel article{position:absolute;top:0;bottom:0;right:0;max-height:none;border-right:0;border-top:0;border-bottom:0;border-radius:0;box-shadow:0 0 .5rem var(--ec-color-shadow)}:host.is-panel.fade-in{animation-name:panelMaskFadeIn;animation-duration:.25s;animation-fill-mode:forwards}:host.is-panel.fade-in article{animation-name:slideIn;animation-duration:.25s;animation-fill-mode:forwards;animation-timing-function:ease-out}:host.is-panel.fade-out{animation-name:panelMaskFadeIn;animation-direction:reverse;animation-fill-mode:forwards}:host.is-panel.fade-out article{animation-name:slideIn;animation-duration:225ms;animation-direction:reverse;animation-fill-mode:forwards;animation-timing-function:ease-in}:host.is-panel.no-mask{left:auto;width:var(--ec-dialog-width)}:host.is-top-aligned{align-items:flex-start}:host.is-top-aligned article{min-height:auto;margin-top:20vh}:host.is-transparent{--ec-dialog-background-color: transparent}article{background-color:var(--ec-background-color-body);background-clip:padding-box;box-shadow:0 0 .625rem #1a1a2333;border-radius:var(--ec-border-radius-dialog);overflow:hidden;display:flex;flex:none;min-height:9rem;max-height:90vh;max-width:90vw;width:var(--ec-dialog-width)}:host.dialog-xsmall{--ec-dialog-width: 20rem}:host.dialog-small{--ec-dialog-width: 30rem}:host.dialog-medium{--ec-dialog-width: 40rem}:host.dialog-large{--ec-dialog-width: 50rem}:host.dialog-xlarge{--ec-dialog-width: 60rem}:host.dialog-full{--ec-dialog-width: 90vw}\n"], dependencies: [{ kind: "directive", type: i3.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }] });
5456
+ DialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: DialogComponent, selector: "ec-dialog", inputs: { size: "size", content: "content", context: "context", options: "options", dialogOpenStartEventId: "dialogOpenStartEventId" }, outputs: { opened: "opened", closed: "closed" }, host: { listeners: { "click": "onOverlayClick($event)" }, properties: { "class.is-open": "this.isOpen", "class.fade-in": "this.fadeIn", "class.fade-out": "this.fadeOut", "class.is-panel": "this.displayAsPanel", "class.is-top-aligned": "this.alignToTop", "class.is-transparent": "this.transparentMask" } }, viewQueries: [{ propertyName: "contentContainer", first: true, predicate: ["content"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: '<article [style.width.px]="width" [style.min-width]="minWidth" class="dialog-{{size}}" cdkTrapFocus cdkTrapFocusAutoCapture><ng-template #content></ng-template></article>', isInline: true, styles: ["@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideIn{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes panelMaskFadeIn{0%{background-color:transparent}to{background-color:var(--ec-dialog-background-color)}}:host{--ec-dialog-background-color: var(--ec-background-color-dialog);align-items:center;background-color:var(--ec-dialog-background-color);justify-content:center;position:fixed;z-index:var(--ec-z-index-dialog);inset:0;display:none}:host.is-open{display:flex}:host.fade-in{animation-name:fadeIn;animation-duration:125ms;animation-fill-mode:forwards;animation-timing-function:ease-in-out}:host.fade-out{animation-name:fadeIn;animation-duration:.1s;animation-direction:reverse;animation-fill-mode:forwards;animation-timing-function:ease-in-out}:host.is-panel article{position:absolute;top:0;bottom:0;right:0;max-height:none;border-right:0;border-top:0;border-bottom:0;border-radius:0;box-shadow:0 0 .5rem var(--ec-color-shadow)}:host.is-panel.fade-in{animation-name:panelMaskFadeIn;animation-duration:.25s;animation-fill-mode:forwards}:host.is-panel.fade-in article{animation-name:slideIn;animation-duration:.25s;animation-fill-mode:forwards;animation-timing-function:ease-out}:host.is-panel.fade-out{animation-name:panelMaskFadeIn;animation-direction:reverse;animation-fill-mode:forwards}:host.is-panel.fade-out article{animation-name:slideIn;animation-duration:225ms;animation-direction:reverse;animation-fill-mode:forwards;animation-timing-function:ease-in}:host.is-top-aligned{align-items:flex-start}:host.is-top-aligned article{min-height:auto;margin-top:20vh}:host.is-transparent{--ec-dialog-background-color: transparent}article{background-color:var(--ec-background-color-body);background-clip:padding-box;box-shadow:0 0 .625rem #1a1a2333;border-radius:var(--ec-border-radius-dialog);overflow:hidden;display:flex;flex:none;min-height:9rem;max-height:90vh;max-width:90vw}.dialog-xsmall{width:20rem}.dialog-small{width:30rem}.dialog-medium{width:40rem}.dialog-large{width:50rem}.dialog-xlarge{width:60rem}.dialog-full{width:90vw}\n"], dependencies: [{ kind: "directive", type: i3.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }] });
5483
5457
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DialogComponent, decorators: [{
5484
5458
  type: Component,
5485
- args: [{ selector: 'ec-dialog', template: '<article [style.min-width]="minWidth" cdkTrapFocus cdkTrapFocusAutoCapture><ng-template #content></ng-template></article>', host: {
5486
- '[class]': 'dialogSizeClass',
5487
- '[style.--ec-dialog-width.px]': 'width'
5488
- }, styles: ["@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideIn{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes panelMaskFadeIn{0%{background-color:transparent}to{background-color:var(--ec-dialog-background-color)}}:host{--ec-dialog-background-color: var(--ec-background-color-dialog);align-items:center;background-color:var(--ec-dialog-background-color);justify-content:center;position:fixed;z-index:var(--ec-z-index-dialog);inset:0;display:none}:host.is-open{display:flex}:host.fade-in{animation-name:fadeIn;animation-duration:125ms;animation-fill-mode:forwards;animation-timing-function:ease-in-out}:host.fade-out{animation-name:fadeIn;animation-duration:.1s;animation-direction:reverse;animation-fill-mode:forwards;animation-timing-function:ease-in-out}:host.is-panel article{position:absolute;top:0;bottom:0;right:0;max-height:none;border-right:0;border-top:0;border-bottom:0;border-radius:0;box-shadow:0 0 .5rem var(--ec-color-shadow)}:host.is-panel.fade-in{animation-name:panelMaskFadeIn;animation-duration:.25s;animation-fill-mode:forwards}:host.is-panel.fade-in article{animation-name:slideIn;animation-duration:.25s;animation-fill-mode:forwards;animation-timing-function:ease-out}:host.is-panel.fade-out{animation-name:panelMaskFadeIn;animation-direction:reverse;animation-fill-mode:forwards}:host.is-panel.fade-out article{animation-name:slideIn;animation-duration:225ms;animation-direction:reverse;animation-fill-mode:forwards;animation-timing-function:ease-in}:host.is-panel.no-mask{left:auto;width:var(--ec-dialog-width)}:host.is-top-aligned{align-items:flex-start}:host.is-top-aligned article{min-height:auto;margin-top:20vh}:host.is-transparent{--ec-dialog-background-color: transparent}article{background-color:var(--ec-background-color-body);background-clip:padding-box;box-shadow:0 0 .625rem #1a1a2333;border-radius:var(--ec-border-radius-dialog);overflow:hidden;display:flex;flex:none;min-height:9rem;max-height:90vh;max-width:90vw;width:var(--ec-dialog-width)}:host.dialog-xsmall{--ec-dialog-width: 20rem}:host.dialog-small{--ec-dialog-width: 30rem}:host.dialog-medium{--ec-dialog-width: 40rem}:host.dialog-large{--ec-dialog-width: 50rem}:host.dialog-xlarge{--ec-dialog-width: 60rem}:host.dialog-full{--ec-dialog-width: 90vw}\n"] }]
5459
+ args: [{ selector: 'ec-dialog', template: '<article [style.width.px]="width" [style.min-width]="minWidth" class="dialog-{{size}}" cdkTrapFocus cdkTrapFocusAutoCapture><ng-template #content></ng-template></article>', styles: ["@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideIn{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes panelMaskFadeIn{0%{background-color:transparent}to{background-color:var(--ec-dialog-background-color)}}:host{--ec-dialog-background-color: var(--ec-background-color-dialog);align-items:center;background-color:var(--ec-dialog-background-color);justify-content:center;position:fixed;z-index:var(--ec-z-index-dialog);inset:0;display:none}:host.is-open{display:flex}:host.fade-in{animation-name:fadeIn;animation-duration:125ms;animation-fill-mode:forwards;animation-timing-function:ease-in-out}:host.fade-out{animation-name:fadeIn;animation-duration:.1s;animation-direction:reverse;animation-fill-mode:forwards;animation-timing-function:ease-in-out}:host.is-panel article{position:absolute;top:0;bottom:0;right:0;max-height:none;border-right:0;border-top:0;border-bottom:0;border-radius:0;box-shadow:0 0 .5rem var(--ec-color-shadow)}:host.is-panel.fade-in{animation-name:panelMaskFadeIn;animation-duration:.25s;animation-fill-mode:forwards}:host.is-panel.fade-in article{animation-name:slideIn;animation-duration:.25s;animation-fill-mode:forwards;animation-timing-function:ease-out}:host.is-panel.fade-out{animation-name:panelMaskFadeIn;animation-direction:reverse;animation-fill-mode:forwards}:host.is-panel.fade-out article{animation-name:slideIn;animation-duration:225ms;animation-direction:reverse;animation-fill-mode:forwards;animation-timing-function:ease-in}:host.is-top-aligned{align-items:flex-start}:host.is-top-aligned article{min-height:auto;margin-top:20vh}:host.is-transparent{--ec-dialog-background-color: transparent}article{background-color:var(--ec-background-color-body);background-clip:padding-box;box-shadow:0 0 .625rem #1a1a2333;border-radius:var(--ec-border-radius-dialog);overflow:hidden;display:flex;flex:none;min-height:9rem;max-height:90vh;max-width:90vw}.dialog-xsmall{width:20rem}.dialog-small{width:30rem}.dialog-medium{width:40rem}.dialog-large{width:50rem}.dialog-xlarge{width:60rem}.dialog-full{width:90vw}\n"] }]
5489
5460
  }], ctorParameters: function () {
5490
5461
  return [{ type: i0.ComponentFactoryResolver }, { type: WindowService }, { type: DialogService }, { type: Document, decorators: [{
5491
5462
  type: Inject,
@@ -5509,9 +5480,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
5509
5480
  }], transparentMask: [{
5510
5481
  type: HostBinding,
5511
5482
  args: ['class.is-transparent']
5512
- }], noMask: [{
5513
- type: HostBinding,
5514
- args: ['class.no-mask']
5515
5483
  }], onOverlayClick: [{
5516
5484
  type: HostListener,
5517
5485
  args: ['click', ['$event']]