@energycap/components 0.28.11 → 0.28.13

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.
@@ -100,7 +100,7 @@ export class DropdownComponent {
100
100
  }
101
101
  if (this.popupFixed) {
102
102
  popperOptions.onCreate = () => {
103
- this.popup.fixPosition(undefined, true);
103
+ this.popup.fixPosition();
104
104
  };
105
105
  popperOptions.onUpdate = () => {
106
106
  // Hide the popup when the dropdown changes position due to window resize
@@ -172,7 +172,7 @@ DropdownComponent.decorators = [
172
172
  { type: Component, args: [{
173
173
  selector: 'ec-dropdown',
174
174
  template: "<div class=\"control\">\r\n <ec-button [disabled]=\"disabled\"\r\n id=\"{{id}}_toggle\"\r\n [ngClass]=\"{'has-arrow':showArrow, 'active': menuStatus === 'visible', 'text-left': buttonAlignment === 'left', 'text-right': buttonAlignment === 'right'}\"\r\n *ecPopup=\"dropdownMenu\"\r\n [label]=\"label\"\r\n [icon]=\"icon\"\r\n [tabindex]=\"tabindex\"\r\n [type]=\"buttonType\"\r\n [customTemplate]=\"buttonCustomTemplate\"\r\n [pending]=\"pending\"\r\n title=\"{{buttonTitle}}\"\r\n (click)=\"toggleMenu($event)\"\r\n (keydown)=\"keyNavigate($event)\"\r\n [autofocus]=\"autofocus\">\r\n </ec-button>\r\n <span class=\"arrow is-{{buttonType}}\"\r\n *ngIf=\"showArrow\"\r\n [class.is-disabled]=\"disabled\">\r\n <i class=\"ec-icon icon-caret-down\" [class.flip-y]=\"menuStatus === 'visible'\"></i>\r\n </span>\r\n</div>\r\n\r\n<ng-template #dropdownMenu>\r\n <div id=\"{{id}}_popup\"\r\n class=\"popup\"\r\n ecOverlay\r\n [status]=\"status?.status\"\r\n [message]=\"status?.message\"\r\n [displayAsMask]=\"true\">\r\n <!-- Dropdown Menu Title -->\r\n <header id=\"{{id}}_title\"\r\n class=\"text-heading-2 px-2 my-2\"\r\n *ngIf=\"menuTitle\">{{menuTitle}}\r\n </header>\r\n <!-- Dropdown Menu -->\r\n <ec-menu id=\"{{id}}_menu\"\r\n [class.wrap-items]=\"menuWidth\"\r\n [templateType]=\"menuTemplateType\"\r\n [style.width]=\"menuWidth ? menuWidth + 'px' : 'auto'\"\r\n [style.min-width]=\"menuMinWidth ? menuMinWidth + 'px' : 'auto'\"\r\n [style.height]=\"menuHeight ? menuHeight + 'px' : 'auto'\"\r\n [items]=\"items\"\r\n [showNoItems]=\"true\"\r\n [enableKeyNav]=\"true\"\r\n [highlightedItem]=\"highlightedItem\"\r\n (selectedChanged)=\"selectedChanged($event)\">\r\n </ec-menu>\r\n <footer *ngIf=\"menuFooter\">{{menuFooter}}</footer>\r\n </div>\r\n</ng-template>",
175
- styles: ["@-webkit-keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}:host{box-sizing:border-box;display:inline-block;vertical-align:top}:host(.font-size-inherit) ec-button,:host(.font-size-inherit) ec-button ::ng-deep button{font-size:inherit}:host(.fill),:host(.fill) .control,:host(.fill) .control ec-button{display:block;height:100%;width:100%}:host(.fill) .control ec-button ::ng-deep button{display:block;display:flex;height:100%;width:100%}:host(.fill) ec-menu{min-width:100%}:host(.td-fill){left:0;position:absolute;top:0}:host(.td-fill) ec-button ::ng-deep button{font-size:.75rem;padding-left:.375rem;padding-right:.375rem}:host(.is-action) .arrow,:host(.is-action) ec-button{color:#0084a9}:host(.is-condensed) ec-button ::ng-deep button{height:1.5rem}:host(.is-condensed) ec-button.has-arrow ::ng-deep button{padding:0 1.125rem 0 .25rem}:host(.is-condensed) ec-button.has-arrow~.arrow{right:.375rem}:host(.d-block) ec-button{display:block}:host(.d-block) ec-button ::ng-deep button{width:100%}:host-context(th){color:#1a1a23}.control{position:relative}ec-button{display:block}ec-button.has-arrow~.arrow{align-items:center;display:flex;height:100%;pointer-events:none;position:absolute;right:.5rem;top:0;width:.625rem;z-index:1}ec-button.has-arrow~.arrow .ec-icon{color:rgba(26,26,35,.66);transition:color .3s ease;width:auto}ec-button.has-arrow~.arrow.is-common .ec-icon{color:#fff}ec-button.has-arrow~.arrow.is-link .ec-icon{color:#0084a9}ec-button.has-arrow~.arrow.is-disabled .ec-icon{color:rgba(26,26,35,.66);opacity:.5}ec-button.has-arrow ::ng-deep button{padding-right:1.25rem;width:auto}ec-button.has-arrow ::ng-deep button:not(.ec-button-custom){padding-left:.5rem}.popup{background-color:#fff;border-radius:var(--ec-border-radius-card);box-shadow:var(--ec-box-shadow-overlay);margin-top:.25rem;overflow:hidden;z-index:50}.popup>header{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.popup footer{border-top:.0625rem solid #d2d7d9;color:rgba(26,26,35,.66);font-size:.75rem;line-height:1.2;padding:.1875rem .5rem}ec-menu ::ng-deep ul{max-height:50vh}ec-menu ::ng-deep li{white-space:nowrap}ec-menu.wrap-items ::ng-deep li{white-space:normal}"]
175
+ styles: ["@-webkit-keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}:host{box-sizing:border-box;display:inline-block;vertical-align:top}:host(.font-size-inherit) ec-button,:host(.font-size-inherit) ec-button ::ng-deep button{font-size:inherit}:host(.fill),:host(.fill) .control,:host(.fill) .control ec-button{display:block;height:100%;width:100%}:host(.fill) .control ec-button ::ng-deep button{display:block;display:flex;height:100%;width:100%}:host(.fill) ec-menu{min-width:100%}:host(.td-fill){left:0;position:absolute;top:0}:host(.td-fill) ec-button ::ng-deep button{font-size:.75rem;padding-left:.375rem;padding-right:.375rem}:host(.is-action) .arrow,:host(.is-action) ec-button{color:#0084a9}:host(.is-condensed) ec-button ::ng-deep button{height:1.5rem}:host(.is-condensed) ec-button.has-arrow ::ng-deep button{padding:0 1.125rem 0 .25rem}:host(.is-condensed) ec-button.has-arrow~.arrow{right:.375rem}:host(.d-block) ec-button{display:block}:host(.d-block) ec-button ::ng-deep button{width:100%}:host-context(th){color:#1a1a23}.control{position:relative}ec-button{display:block}ec-button.has-arrow~.arrow{align-items:center;display:flex;height:100%;pointer-events:none;position:absolute;right:.5rem;top:0;width:.625rem;z-index:1}ec-button.has-arrow~.arrow .ec-icon{color:rgba(26,26,35,.66);transition:color .3s ease;width:auto}ec-button.has-arrow~.arrow.is-common .ec-icon{color:#fff}ec-button.has-arrow~.arrow.is-link .ec-icon{color:#0084a9}ec-button.has-arrow~.arrow.is-disabled .ec-icon{color:rgba(26,26,35,.66);opacity:.5}ec-button.has-arrow ::ng-deep button{padding-right:1.25rem;width:auto}ec-button.has-arrow ::ng-deep button:not(.ec-button-custom){padding-left:.5rem}.popup{background-color:#fff;border-radius:var(--ec-border-radius-card);box-shadow:var(--ec-box-shadow-overlay);margin-top:.25rem;overflow:hidden;text-align:start;z-index:50}.popup>header{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.popup footer{border-top:.0625rem solid #d2d7d9;color:rgba(26,26,35,.66);font-size:.75rem;line-height:1.2;padding:.1875rem .5rem}ec-menu ::ng-deep ul{max-height:50vh}ec-menu ::ng-deep li{white-space:nowrap}ec-menu.wrap-items ::ng-deep li{white-space:normal}"]
176
176
  },] }
177
177
  ];
178
178
  DropdownComponent.ctorParameters = () => [];
@@ -204,4 +204,4 @@ DropdownComponent.propDecorators = {
204
204
  menuEl: [{ type: ViewChild, args: [MenuComponent, { read: ElementRef },] }],
205
205
  popup: [{ type: ViewChild, args: [PopupContainerDirective, { static: true },] }]
206
206
  };
207
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2NvbnRyb2xzL2Ryb3Bkb3duL2Ryb3Bkb3duLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQTRCLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3SSxPQUFPLEVBQThCLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRW5GLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzNDLE9BQU8sRUFBZSx1QkFBdUIsRUFBRSxNQUFNLHlEQUF5RCxDQUFDO0FBTy9HLE1BQU0sT0FBTyxpQkFBaUI7SUEwSjVCO1FBbkpBOztXQUVHO1FBQ2EsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUVsQzs7V0FFRztRQUNhLFdBQU0sR0FBa0IsRUFBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUMsQ0FBQztRQUV6RTs7V0FFRztRQUNhLGFBQVEsR0FBVyxLQUFLLENBQUM7UUFZekM7O1dBRUc7UUFDYSxlQUFVLEdBQWdCLE1BQU0sQ0FBQztRQVFqRDs7O1dBR0c7UUFDYSxnQkFBVyxHQUFXLEVBQUUsQ0FBQztRQU96Qzs7V0FFRztRQUNhLGNBQVMsR0FBWSxJQUFJLENBQUM7UUFFMUM7O1dBRUc7UUFDYSxVQUFLLEdBQWUsRUFBRSxDQUFDO1FBRXZDOztXQUVHO1FBQ2EscUJBQWdCLEdBQXFCLE9BQU8sQ0FBQztRQWlDN0Q7OztXQUdHO1FBQ2EsZUFBVSxHQUFZLEtBQUssQ0FBQztRQU81Qzs7VUFFRTtRQUNjLFlBQU8sR0FBWSxLQUFL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Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBFbGVtZW50UmVmLCBWaWV3Q2hpbGQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1lbnVUZW1wbGF0ZVR5cGUsIE1lbnVJdGVtLCBNZW51Q29tcG9uZW50IH0gZnJvbSAnLi4vbWVudS9tZW51LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEJ1dHRvblR5cGUgfSBmcm9tICcuLi9idXR0b24vYnV0dG9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgUG9wcGVyIGZyb20gJ3BvcHBlci5qcyc7XHJcbmltcG9ydCB7IERpc3BsYXlTdGF0dXMgfSBmcm9tICcuLi8uLi9zaGFyZWQvZGlzcGxheSc7XHJcbmltcG9ydCB7IFBvcHVwU3RhdHVzLCBQb3B1cENvbnRhaW5lckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9kaXJlY3RpdmVzL3BvcHVwL3BvcHVwLWNvbnRhaW5lci5kaXJlY3RpdmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdlYy1kcm9wZG93bicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Ryb3Bkb3duLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kcm9wZG93bi5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEcm9wZG93bkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgLyoqXHJcbiAgICogQmFzZSBpZCBmb3IgdGhlIGNvbXBvbmVudCdzIHN1Yi1lbGVtZW50c1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBpZD86IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogQXV0b21hdGljYWxseSBmb2N1cyB0aGUgZHJvcGRvd24gdG9nZ2xlIGJ1dHRvblxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBhdXRvZm9jdXMgPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogQ29udHJvbHMgdGhlIGRpc3BsYXkgc3RhdHVzIG92ZXJsYXkgZm9yIHRoZSBtZW51XHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIHN0YXR1cz86RGlzcGxheVN0YXR1cyA9IHtzdGF0dXM6ICdoYXNEYXRhJywgbWVzc2FnZTogJyd9O1xyXG5cclxuICAvKipcclxuICAgKiBEaXNhYmxlIHRoZSBidXR0b24gdG8gcHJldmVudCB0aGUgbWVudSBmcm9tIGJlaW5nIG9wZW5lZFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBkaXNhYmxlZDpib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIE9wdGlvbmFsIGxhYmVsIGZvciB0aGUgYnV0dG9uXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIGxhYmVsPzogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBPcHRpb25hbCBpY29uIGZvciB0aGUgYnV0dG9uXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIGljb24/OiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBidXR0b24gdHlwZSwgZGVmYXVsdHMgdG8gaWNvblxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBidXR0b25UeXBlPzogQnV0dG9uVHlwZSA9ICdpY29uJztcclxuXHJcbiAgLyoqXHJcbiAgICogT3B0aW9uYWxseSBhbGlnbiB0aGUgbGFiZWwgb2YgdGhlIGJ1dHRvbiB0byB0aGUgbGVmdCBvciByaWdodC4gSWYgbm90IHNldCxcclxuICAgKiB3aWxsIGJlIGNlbnRlcmVkLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBidXR0b25BbGlnbm1lbnQ/OiAnbGVmdCcgfCAncmlnaHQnO1xyXG5cclxuICAvKipcclxuICAgKiBBZGRzIGEgdG9vbHRpcCB0byB0aGUgZHJvcGRvd24gdG9nZ2xlIGJ1dHRvbi4gU2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuXHJcbiAgICogdGhlIHRvZ2dsZSBidXR0b25UeXBlIGlzICdpY29uJ1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBidXR0b25UaXRsZTogc3RyaW5nID0gJyc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSB0YWJpbmRleCBvZiB0aGUgYnV0dG9uXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIHRhYmluZGV4PzogbnVtYmVyO1xyXG5cclxuICAvKipcclxuICAgKiBEaXNwbGF5IGEgY2FyZXQgd2l0aCB0aGUgYnV0dG9uIGxhYmVsIG9yIGljb25cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgc2hvd0Fycm93OiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogSXRlbXMgdG8gZGlzcGxheSBpbiB0aGUgbWVudVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBpdGVtczogTWVudUl0ZW1bXSA9IFtdO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgbWVudSBpdGVtIHRlbXBsYXRlXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIG1lbnVUZW1wbGF0ZVR5cGU6IE1lbnVUZW1wbGF0ZVR5cGUgPSAnbGFiZWwnO1xyXG5cclxuICAvKipcclxuICAgKiBEaXNwbGF5IGEgaGVhZGVyIG9uIHRoZSBtZW51XHJcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGZpcnN0IG1lbnUgaXRlbSB3aXRoIGRpc3BsYXkgc2V0IHRvICdoZWFkaW5nJyBpbnN0ZWFkXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIG1lbnVUaXRsZT86IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IGEgZml4ZWQgaGVpZ2h0IGZvciB0aGUgbWVudSwgYXV0byBieSBkZWZhdWx0XHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIG1lbnVIZWlnaHQ/OiBudW1iZXI7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCBhIGZpeGVkIHdpZHRoIGluIHBpeGVscyBmb3IgdGhlIG1lbnUsIGF1dG8gYnkgZGVmYXVsdFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBtZW51V2lkdGg/OiBudW1iZXI7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCBhIG1pbi13aWR0aCBpbiBwaXhlbHMgb24gdGhlIG1lbnUuIEl0IHdpbGwgZXhwYW5kIGlmIHRoZSBjb250ZW50IGlzIGdyZWF0ZXIgdGhhbiB0aGUgbWluLXdpZHRoXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIG1lbnVNaW5XaWR0aD86IG51bWJlcjtcclxuXHJcbiAgLyoqXHJcbiAgICogUGluIHRoZSBtZW51IHRvIHRoZSBsZWZ0IG9yIHJpZ2h0IG9mIHRoZSBidXR0b24uIFJpZ2h0IGJ5IGRlZmF1bHRcclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgbWVudVBvc2l0aW9uPzogJ2xlZnQnIHwgJ3JpZ2h0JztcclxuXHJcbiAgLyoqXHJcbiAgICogU3RpY2t5IGZvb3RlciB0byBkaXNwbGF5IGF0IHRoZSBib3R0b20gb2YgdGhlIHBvcHVwIG1lbnVcclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgbWVudUZvb3Rlcj86IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogRml4IHBvc2l0aW9uIHRoZSBtZW51IGluc3RlYWQgb2YgYWJzb2x1dGUuIFVzZWZ1bCB3aGVuIHRoZSBkcm9wZG93biBpcyBpbiBhXHJcbiAgICogZGlhbG9nXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIHBvcHVwRml4ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogUGFzcyBhIGN1c3RvbSB0ZW1wbGF0ZSB0byB0aGUgdG9nZ2xlIGJ1dHRvblxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBidXR0b25DdXN0b21UZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIC8qKlxyXG4gICogVXNlZCB0byBzZXQgdGhlIG1lbnUgYnV0dG9ucyBzdGF0ZSB0byBwZW5kaW5nXHJcbiAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgcGVuZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBFbWl0cyBhbiBldmVudCB3aGVuIGEgbWVudSBpdGVtIGlzIHNlbGVjdGVkXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHB1YmxpYyBpdGVtU2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxNZW51SXRlbT4gPSBuZXcgRXZlbnRFbWl0dGVyPE1lbnVJdGVtPigpO1xyXG5cclxuICAvKipcclxuICAgKiBFbWl0cyBhbiBldmVudCB3aGVuIHRoZSBwb3B1cCBtZW51IG9wZW5zXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHB1YmxpYyBwb3B1cE9wZW5lZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgc3RhdHVzIG9mIHRoZSBtZW51XHJcbiAgICovXHJcbiAgcHVibGljIG1lbnVTdGF0dXM6IFBvcHVwU3RhdHVzID0gJ2hpZGRlbic7XHJcblxyXG4gIC8qKiBJdGVtIHRvIGhpZ2hsaWdodCB3aGVuIHRoZSBtZW51IGlzIG9wZW5lZCwgdXNlZCB3aGVuIHRoZSB1c2VyXHJcbiAgICogIG9wZW5zIHRoZSBtZW51IHZpYSB0aGUga2V5Ym9hcmRcclxuICAgKi9cclxuICBwdWJsaWMgaGlnaGxpZ2h0ZWRJdGVtOiBNZW51SXRlbSB8IG51bGwgPSBudWxsO1xyXG5cclxuICAvKiogVXNlZCB0byBrbm93IGlmIHRoZSBtZW51IHdhcyB0b2dnbGVkIHZpYSB0aGUga2V5Ym9hcmQgKi9cclxuICBwcml2YXRlIGlzS2V5Ym9hcmRFdmVudDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBJbnRlcm5hbCByZWZlcmVuY2UgdG8gdGhlIG1lbnUgZWxlbWVudFxyXG4gICAqL1xyXG4gIEBWaWV3Q2hpbGQoTWVudUNvbXBvbmVudCwgeyByZWFkOiBFbGVtZW50UmVmIH0pIHByaXZhdGUgbWVudUVsITpFbGVtZW50UmVmO1xyXG5cclxuICAvKipcclxuICAgKiBJbnRlcm5hbCByZWZlcmVuY2UgdG8gdGhlIHBvcHVwIGRpcmVjdGl2ZVxyXG4gICAqL1xyXG4gIEBWaWV3Q2hpbGQoUG9wdXBDb250YWluZXJEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pIHByaXZhdGUgcG9wdXAhOiBQb3B1cENvbnRhaW5lckRpcmVjdGl2ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogVW5zdWJzY3JpYmUgYW55IGFjdGl2ZSBzdWJzY3JpcHRpb25zIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBkZXN0cm95ZWRcclxuICAgKi9cclxuICBwcml2YXRlIGNvbXBvbmVudERlc3Ryb3llZDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN1YnNjcmliZSB0byBjaGFuZ2VzIHRvIHRoZSBtZW51IHN0YXR1c1xyXG4gICAqL1xyXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMucG9wdXAucG9wcGVyU3RhdHVzQ2hhbmdlXHJcbiAgICAucGlwZSh0YWtlVW50aWwodGhpcy5jb21wb25lbnREZXN0cm95ZWQpKVxyXG4gICAgLnN1YnNjcmliZSgoZXZlbnQ6ICd2aXNpYmxlJyB8ICdoaWRkZW4nKSA9PiB7XHJcbiAgICAgIHRoaXMubWVudVN0YXR1cyA9IGV2ZW50O1xyXG4gICAgICBpZih0aGlzLm1lbnVTdGF0dXMgPT09ICd2aXNpYmxlJykge1xyXG4gICAgICAgIHRoaXMucG9wdXBPcGVuZWQuZW1pdCgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB1cCB0aGUgcG9wdXBcclxuICAgKi9cclxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgbGV0IHBvcHBlck9wdGlvbnM6IFBvcHBlci5Qb3BwZXJPcHRpb25zID0ge1xyXG5cdFx0XHRtb2RpZmllcnM6IHtcclxuXHRcdFx0XHRwcmV2ZW50T3ZlcmZsb3c6IHtcclxuXHRcdFx0XHRcdGJvdW5kYXJpZXNFbGVtZW50OiAndmlld3BvcnQnXHJcblx0XHRcdFx0fVxyXG4gICAgICB9LFxyXG4gICAgICBwbGFjZW1lbnQ6ICdib3R0b20tZW5kJ1xyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodGhpcy5tZW51UG9zaXRpb24gPT09ICdsZWZ0Jykge1xyXG4gICAgICBwb3BwZXJPcHRpb25zLnBsYWNlbWVudCA9ICdib3R0b20tc3RhcnQnO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBpZiAodGhpcy5wb3B1cEZpeGVkKSB7XHJcbiAgICAgIHBvcHBlck9wdGlvbnMub25DcmVhdGUgPSAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5wb3B1cC5maXhQb3NpdGlvbih1bmRlZmluZWQsIHRydWUpO1xyXG4gICAgICB9XHJcblxyXG5cdFx0XHRwb3BwZXJPcHRpb25zLm9uVXBkYXRlID0gKCkgPT4ge1xyXG4gICAgICAgIC8vIEhpZGUgdGhlIHBvcHVwIHdoZW4gdGhlIGRyb3Bkb3duIGNoYW5nZXMgcG9zaXRpb24gZHVlIHRvIHdpbmRvdyByZXNpemVcclxuICAgICAgICAvLyBvciBjb250YWluZXIgc2Nyb2xsaW5nXHJcbiAgICAgICAgdGhpcy5wb3B1cC5oaWRlKCk7XHJcblx0XHRcdH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnBvcHVwLnBvcHBlck9wdGlvbnMgPSBwb3BwZXJPcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVW5zdWJzY3JpYmUgdG8gYW55IGFjdGl2ZSBzdWJzY3JpcHRpb25zXHJcbiAgICovXHJcbiAgcHVibGljIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5jb21wb25lbnREZXN0cm95ZWQubmV4dCgpO1xyXG4gICAgdGhpcy5jb21wb25lbnREZXN0cm95ZWQudW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9wZW4gYW5kIGNsb3NlIHRoZSBtZW51XHJcbiAgICovXHJcbiAgcHVibGljIHRvZ2dsZU1lbnUoZXZlbnQ/OkV2ZW50KTp2b2lkIHtcclxuICAgIGlmIChldmVudCkge1xyXG5cdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgaWYgKHRoaXMubWVudVN0YXR1cyA9PT0gJ2hpZGRlbicpIHtcclxuICAgICAgICBpZiAodGhpcy5pc0tleWJvYXJkRXZlbnQgJiYgdGhpcy5pdGVtcy5sZW5ndGgpIHtcclxuICAgICAgICAgIC8vIFNldHVwIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBsaXN0IHRvIGhpZ2hsaWdodCB3aGVuIG9wZW5pbmcgdGhlXHJcbiAgICAgICAgICAvLyBtZW51IHZpYSB0aGUga2V5Ym9hcmQsIGlnbm9yaW5nIGhlYWRpbmdzXHJcblxyXG4gICAgICAgICAgdGhpcy5oaWdobGlnaHRlZEl0ZW0gPSB0aGlzLml0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLmRpc3BsYXkgIT09ICdoZWFkaW5nJykgfHwgbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wb3B1cC5zaG93KCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5wb3B1cC5oaWRlKCk7XHJcblxyXG4gICAgICAgIC8vIFJlc2V0IHRoZSBoaWdobGlnaHRlZCBpdGVtIGFuZCBvdXIga2V5Ym9hcmQgZmxhZ1xyXG4gICAgICAgIC8vIHdoZW4gd2UgY2xvc2UgdGhlIHBvcHVwXHJcbiAgICAgICAgdGhpcy5oaWdobGlnaHRlZEl0ZW0gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuaXNLZXlib2FyZEV2ZW50ID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXQgdGhlIHNlbGVjdGVkIGl0ZW0gd2hlbiBpdCBjaGFuZ2VzIGFuZCBjbG9zZSB0aGUgbWVudVxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZWxlY3RlZENoYW5nZWQoaXRlbTpNZW51SXRlbSk6dm9pZCB7XHJcbiAgICB0aGlzLml0ZW1TZWxlY3RlZC5lbWl0KGl0ZW0pO1xyXG4gICAgdGhpcy50b2dnbGVNZW51KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbG9zZXMgdGhlIG1lbnUgaWYgdGhlIHRhYiBrZXkgaXMgcHJlc3NlZFxyXG4gICAqL1xyXG4gIHB1YmxpYyBrZXlOYXZpZ2F0ZShldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcclxuICAgICAgY2FzZSAnRW50ZXInOlxyXG4gICAgICAgIHRoaXMuaXNLZXlib2FyZEV2ZW50ID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnRXNjYXBlJzpcclxuICAgICAgY2FzZSAnVGFiJzpcclxuICAgICAgICBpZiAodGhpcy5tZW51U3RhdHVzID09PSAndmlzaWJsZScpIHtcclxuICAgICAgICAgIHRoaXMudG9nZ2xlTWVudShldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
207
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2NvbnRyb2xzL2Ryb3Bkb3duL2Ryb3Bkb3duLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQTRCLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3SSxPQUFPLEVBQThCLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRW5GLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzNDLE9BQU8sRUFBZSx1QkFBdUIsRUFBRSxNQUFNLHlEQUF5RCxDQUFDO0FBTy9HLE1BQU0sT0FBTyxpQkFBaUI7SUEwSjVCO1FBbkpBOztXQUVHO1FBQ2EsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUVsQzs7V0FFRztRQUNhLFdBQU0sR0FBa0IsRUFBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUMsQ0FBQztRQUV6RTs7V0FFRztRQUNhLGFBQVEsR0FBVyxLQUFLLENBQUM7UUFZekM7O1dBRUc7UUFDYSxlQUFVLEdBQWdCLE1BQU0sQ0FBQztRQVFqRDs7O1dBR0c7UUFDYSxnQkFBVyxHQUFXLEVBQUUsQ0FBQztRQU96Qzs7V0FFRztRQUNhLGNBQVMsR0FBWSxJQUFJLENBQUM7UUFFMUM7O1dBRUc7UUFDYSxVQUFLLEdBQWUsRUFBRSxDQUFDO1FBRXZDOztXQUVHO1FBQ2EscUJBQWdCLEdBQXFCLE9BQU8sQ0FBQztRQWlDN0Q7OztXQUdHO1FBQ2EsZUFBVSxHQUFZLEtBQUssQ0FBQztRQU81Qzs7VUFFRTtRQUNjLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFFekM7O1dBRUc7UUFDYyxpQkFBWSxHQUEyQixJQUFJLFlBQVksRUFBWSxDQUFDO1FBRXJGOztXQUVHO1FBQ2MsZ0JBQVcsR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUU1RTs7V0FFRztRQUNJLGVBQVUsR0FBZ0IsUUFBUSxDQUFDO1FBRTFDOztXQUVHO1FBQ0ksb0JBQWUsR0FBb0IsSUFBSSxDQUFDO1FBRS9DLDREQUE0RDtRQUNwRCxvQkFBZSxHQUFZLEtBQUssQ0FBQztRQVl6Qzs7V0FFRztRQUNLLHVCQUFrQixHQUFpQixJQUFJLE9BQU8sRUFBTyxDQUFDO0lBRS9DLENBQUM7SUFFaEI7O09BRUc7SUFDSSxRQUFRO1FBQ2IsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0I7YUFDNUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQzthQUN4QyxTQUFTLENBQUMsQ0FBQyxLQUEyQixFQUFFLEVBQUU7WUFDekMsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFDeEIsSUFBRyxJQUFJLENBQUMsVUFBVSxLQUFLLFNBQVMsRUFBRTtnQkFDaEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQzthQUN6QjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ksZUFBZTtRQUNwQixJQUFJLGFBQWEsR0FBeUI7WUFDM0MsU0FBUyxFQUFFO2dCQUNWLGVBQWUsRUFBRTtvQkFDaEIsaUJBQWlCLEVBQUUsVUFBVTtpQkFDN0I7YUFDRTtZQUNELFNBQVMsRUFBRSxZQUFZO1NBQ3hCLENBQUM7UUFFRixJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssTUFBTSxFQUFFO1lBQ2hDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsY0FBYyxDQUFDO1NBQzFDO1FBR0QsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25CLGFBQWEsQ0FBQyxRQUFRLEdBQUcsR0FBRyxFQUFFO2dCQUM1QixJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzNCLENBQUMsQ0FBQTtZQUVKLGFBQWEsQ0FBQyxRQUFRLEdBQUcsR0FBRyxFQUFFO2dCQUN6Qix5RUFBeUU7Z0JBQ3pFLHlCQUF5QjtnQkFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN2QixDQUFDLENBQUE7U0FDQztRQUVELElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksVUFBVSxDQUFDLEtBQVk7UUFDNUIsSUFBSSxLQUFLLEVBQUU7WUFDWixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDdEI7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNsQixJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssUUFBUSxFQUFFO2dCQUNoQyxJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7b0JBQzdDLGlFQUFpRTtvQkFDakUsMkNBQTJDO29CQUUzQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sS0FBSyxTQUFTLENBQUMsSUFBSSxJQUFJLENBQUM7aUJBQ3BGO2dCQUNELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDbkI7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFFbEIsbURBQW1EO2dCQUNuRCwwQkFBMEI7Z0JBQzFCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO2dCQUM1QixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQzthQUM5QjtTQUNGO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ksZUFBZSxDQUFDLElBQWE7UUFDbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7T0FFRztJQUNJLFdBQVcsQ0FBQyxLQUFvQjtRQUNyQyxRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUU7WUFDakIsS0FBSyxPQUFPO2dCQUNWLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO2dCQUM1QixNQUFNO1lBQ1IsS0FBSyxRQUFRLENBQUM7WUFDZCxLQUFLLEtBQUs7Z0JBQ1IsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLFNBQVMsRUFBRTtvQkFDakMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDeEI7Z0JBQ0QsTUFBTTtZQUVSO2dCQUNFLE9BQU87U0FDVjtJQUNILENBQUM7OztZQTlRRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLGFBQWE7Z0JBQ3ZCLHNtRUFBd0M7O2FBRXpDOzs7O2lCQU1FLEtBQUs7d0JBS0wsS0FBSztxQkFLTCxLQUFLO3VCQUtMLEtBQUs7b0JBS0wsS0FBSzttQkFLTCxLQUFLO3lCQUtMLEtBQUs7OEJBTUwsS0FBSzswQkFNTCxLQUFLO3VCQUtMLEtBQUs7d0JBS0wsS0FBSztvQkFLTCxLQUFLOytCQUtMLEtBQUs7d0JBTUwsS0FBSzt5QkFLTCxLQUFLO3dCQUtMLEtBQUs7MkJBS0wsS0FBSzsyQkFLTCxLQUFLO3lCQUtMLEtBQUs7eUJBTUwsS0FBSzttQ0FLTCxLQUFLO3NCQUtMLEtBQUs7MkJBS0wsTUFBTTswQkFLTixNQUFNO3FCQWtCTixTQUFTLFNBQUMsYUFBYSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtvQkFLN0MsU0FBUyxTQUFDLHVCQUF1QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgRWxlbWVudFJlZiwgVmlld0NoaWxkLCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNZW51VGVtcGxhdGVUeXBlLCBNZW51SXRlbSwgTWVudUNvbXBvbmVudCB9IGZyb20gJy4uL21lbnUvbWVudS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBCdXR0b25UeXBlIH0gZnJvbSAnLi4vYnV0dG9uL2J1dHRvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IFBvcHBlciBmcm9tICdwb3BwZXIuanMnO1xyXG5pbXBvcnQgeyBEaXNwbGF5U3RhdHVzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Rpc3BsYXknO1xyXG5pbXBvcnQgeyBQb3B1cFN0YXR1cywgUG9wdXBDb250YWluZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9zaGFyZWQvZGlyZWN0aXZlcy9wb3B1cC9wb3B1cC1jb250YWluZXIuZGlyZWN0aXZlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZWMtZHJvcGRvd24nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kcm9wZG93bi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZHJvcGRvd24uY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRHJvcGRvd25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gIC8qKlxyXG4gICAqIEJhc2UgaWQgZm9yIHRoZSBjb21wb25lbnQncyBzdWItZWxlbWVudHNcclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgaWQ/OiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIEF1dG9tYXRpY2FsbHkgZm9jdXMgdGhlIGRyb3Bkb3duIHRvZ2dsZSBidXR0b25cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgYXV0b2ZvY3VzID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnRyb2xzIHRoZSBkaXNwbGF5IHN0YXR1cyBvdmVybGF5IGZvciB0aGUgbWVudVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBzdGF0dXM/OkRpc3BsYXlTdGF0dXMgPSB7c3RhdHVzOiAnaGFzRGF0YScsIG1lc3NhZ2U6ICcnfTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGlzYWJsZSB0aGUgYnV0dG9uIHRvIHByZXZlbnQgdGhlIG1lbnUgZnJvbSBiZWluZyBvcGVuZWRcclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgZGlzYWJsZWQ6Ym9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBPcHRpb25hbCBsYWJlbCBmb3IgdGhlIGJ1dHRvblxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBsYWJlbD86IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogT3B0aW9uYWwgaWNvbiBmb3IgdGhlIGJ1dHRvblxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBpY29uPzogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgYnV0dG9uIHR5cGUsIGRlZmF1bHRzIHRvIGljb25cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgYnV0dG9uVHlwZT86IEJ1dHRvblR5cGUgPSAnaWNvbic7XHJcblxyXG4gIC8qKlxyXG4gICAqIE9wdGlvbmFsbHkgYWxpZ24gdGhlIGxhYmVsIG9mIHRoZSBidXR0b24gdG8gdGhlIGxlZnQgb3IgcmlnaHQuIElmIG5vdCBzZXQsXHJcbiAgICogd2lsbCBiZSBjZW50ZXJlZC5cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgYnV0dG9uQWxpZ25tZW50PzogJ2xlZnQnIHwgJ3JpZ2h0JztcclxuXHJcbiAgLyoqXHJcbiAgICogQWRkcyBhIHRvb2x0aXAgdG8gdGhlIGRyb3Bkb3duIHRvZ2dsZSBidXR0b24uIFNob3VsZCBvbmx5IGJlIHVzZWQgd2hlblxyXG4gICAqIHRoZSB0b2dnbGUgYnV0dG9uVHlwZSBpcyAnaWNvbidcclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgYnV0dG9uVGl0bGU6IHN0cmluZyA9ICcnO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgdGFiaW5kZXggb2YgdGhlIGJ1dHRvblxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyB0YWJpbmRleD86IG51bWJlcjtcclxuXHJcbiAgLyoqXHJcbiAgICogRGlzcGxheSBhIGNhcmV0IHdpdGggdGhlIGJ1dHRvbiBsYWJlbCBvciBpY29uXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIHNob3dBcnJvdzogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8qKlxyXG4gICAqIEl0ZW1zIHRvIGRpc3BsYXkgaW4gdGhlIG1lbnVcclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgaXRlbXM6IE1lbnVJdGVtW10gPSBbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIG1lbnUgaXRlbSB0ZW1wbGF0ZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBtZW51VGVtcGxhdGVUeXBlOiBNZW51VGVtcGxhdGVUeXBlID0gJ2xhYmVsJztcclxuXHJcbiAgLyoqXHJcbiAgICogRGlzcGxheSBhIGhlYWRlciBvbiB0aGUgbWVudVxyXG4gICAqIEBkZXByZWNhdGVkIHVzZSBmaXJzdCBtZW51IGl0ZW0gd2l0aCBkaXNwbGF5IHNldCB0byAnaGVhZGluZycgaW5zdGVhZFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBtZW51VGl0bGU/OiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCBhIGZpeGVkIGhlaWdodCBmb3IgdGhlIG1lbnUsIGF1dG8gYnkgZGVmYXVsdFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBtZW51SGVpZ2h0PzogbnVtYmVyO1xyXG5cclxuICAvKipcclxuICAgKiBTZXQgYSBmaXhlZCB3aWR0aCBpbiBwaXhlbHMgZm9yIHRoZSBtZW51LCBhdXRvIGJ5IGRlZmF1bHRcclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgbWVudVdpZHRoPzogbnVtYmVyO1xyXG5cclxuICAvKipcclxuICAgKiBTZXQgYSBtaW4td2lkdGggaW4gcGl4ZWxzIG9uIHRoZSBtZW51LiBJdCB3aWxsIGV4cGFuZCBpZiB0aGUgY29udGVudCBpcyBncmVhdGVyIHRoYW4gdGhlIG1pbi13aWR0aFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBtZW51TWluV2lkdGg/OiBudW1iZXI7XHJcblxyXG4gIC8qKlxyXG4gICAqIFBpbiB0aGUgbWVudSB0byB0aGUgbGVmdCBvciByaWdodCBvZiB0aGUgYnV0dG9uLiBSaWdodCBieSBkZWZhdWx0XHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIG1lbnVQb3NpdGlvbj86ICdsZWZ0JyB8ICdyaWdodCc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0aWNreSBmb290ZXIgdG8gZGlzcGxheSBhdCB0aGUgYm90dG9tIG9mIHRoZSBwb3B1cCBtZW51XHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIG1lbnVGb290ZXI/OiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpeCBwb3NpdGlvbiB0aGUgbWVudSBpbnN0ZWFkIG9mIGFic29sdXRlLiBVc2VmdWwgd2hlbiB0aGUgZHJvcGRvd24gaXMgaW4gYVxyXG4gICAqIGRpYWxvZ1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBwb3B1cEZpeGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhc3MgYSBjdXN0b20gdGVtcGxhdGUgdG8gdGhlIHRvZ2dsZSBidXR0b25cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgYnV0dG9uQ3VzdG9tVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAvKipcclxuICAqIFVzZWQgdG8gc2V0IHRoZSBtZW51IGJ1dHRvbnMgc3RhdGUgdG8gcGVuZGluZ1xyXG4gICovXHJcbiAgQElucHV0KCkgcHVibGljIHBlbmRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogRW1pdHMgYW4gZXZlbnQgd2hlbiBhIG1lbnUgaXRlbSBpcyBzZWxlY3RlZFxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBwdWJsaWMgaXRlbVNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8TWVudUl0ZW0+ID0gbmV3IEV2ZW50RW1pdHRlcjxNZW51SXRlbT4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRW1pdHMgYW4gZXZlbnQgd2hlbiB0aGUgcG9wdXAgbWVudSBvcGVuc1xyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBwdWJsaWMgcG9wdXBPcGVuZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIHN0YXR1cyBvZiB0aGUgbWVudVxyXG4gICAqL1xyXG4gIHB1YmxpYyBtZW51U3RhdHVzOiBQb3B1cFN0YXR1cyA9ICdoaWRkZW4nO1xyXG5cclxuICAvKiogSXRlbSB0byBoaWdobGlnaHQgd2hlbiB0aGUgbWVudSBpcyBvcGVuZWQsIHVzZWQgd2hlbiB0aGUgdXNlclxyXG4gICAqICBvcGVucyB0aGUgbWVudSB2aWEgdGhlIGtleWJvYXJkXHJcbiAgICovXHJcbiAgcHVibGljIGhpZ2hsaWdodGVkSXRlbTogTWVudUl0ZW0gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgLyoqIFVzZWQgdG8ga25vdyBpZiB0aGUgbWVudSB3YXMgdG9nZ2xlZCB2aWEgdGhlIGtleWJvYXJkICovXHJcbiAgcHJpdmF0ZSBpc0tleWJvYXJkRXZlbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogSW50ZXJuYWwgcmVmZXJlbmNlIHRvIHRoZSBtZW51IGVsZW1lbnRcclxuICAgKi9cclxuICBAVmlld0NoaWxkKE1lbnVDb21wb25lbnQsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBwcml2YXRlIG1lbnVFbCE6RWxlbWVudFJlZjtcclxuXHJcbiAgLyoqXHJcbiAgICogSW50ZXJuYWwgcmVmZXJlbmNlIHRvIHRoZSBwb3B1cCBkaXJlY3RpdmVcclxuICAgKi9cclxuICBAVmlld0NoaWxkKFBvcHVwQ29udGFpbmVyRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KSBwcml2YXRlIHBvcHVwITogUG9wdXBDb250YWluZXJEaXJlY3RpdmU7XHJcblxyXG4gIC8qKlxyXG4gICAqIFVuc3Vic2NyaWJlIGFueSBhY3RpdmUgc3Vic2NyaXB0aW9ucyB3aGVuIHRoZSBjb21wb25lbnQgaXMgZGVzdHJveWVkXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjb21wb25lbnREZXN0cm95ZWQ6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBTdWJzY3JpYmUgdG8gY2hhbmdlcyB0byB0aGUgbWVudSBzdGF0dXNcclxuICAgKi9cclxuICBwdWJsaWMgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnBvcHVwLnBvcHBlclN0YXR1c0NoYW5nZVxyXG4gICAgLnBpcGUodGFrZVVudGlsKHRoaXMuY29tcG9uZW50RGVzdHJveWVkKSlcclxuICAgIC5zdWJzY3JpYmUoKGV2ZW50OiAndmlzaWJsZScgfCAnaGlkZGVuJykgPT4ge1xyXG4gICAgICB0aGlzLm1lbnVTdGF0dXMgPSBldmVudDtcclxuICAgICAgaWYodGhpcy5tZW51U3RhdHVzID09PSAndmlzaWJsZScpIHtcclxuICAgICAgICB0aGlzLnBvcHVwT3BlbmVkLmVtaXQoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgdXAgdGhlIHBvcHVwXHJcbiAgICovXHJcbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIGxldCBwb3BwZXJPcHRpb25zOiBQb3BwZXIuUG9wcGVyT3B0aW9ucyA9IHtcclxuXHRcdFx0bW9kaWZpZXJzOiB7XHJcblx0XHRcdFx0cHJldmVudE92ZXJmbG93OiB7XHJcblx0XHRcdFx0XHRib3VuZGFyaWVzRWxlbWVudDogJ3ZpZXdwb3J0J1xyXG5cdFx0XHRcdH1cclxuICAgICAgfSxcclxuICAgICAgcGxhY2VtZW50OiAnYm90dG9tLWVuZCdcclxuICAgIH07XHJcblxyXG4gICAgaWYgKHRoaXMubWVudVBvc2l0aW9uID09PSAnbGVmdCcpIHtcclxuICAgICAgcG9wcGVyT3B0aW9ucy5wbGFjZW1lbnQgPSAnYm90dG9tLXN0YXJ0JztcclxuICAgIH1cclxuXHJcblxyXG4gICAgaWYgKHRoaXMucG9wdXBGaXhlZCkge1xyXG4gICAgICBwb3BwZXJPcHRpb25zLm9uQ3JlYXRlID0gKCkgPT4ge1xyXG4gICAgICAgIHRoaXMucG9wdXAuZml4UG9zaXRpb24oKTtcclxuICAgICAgfVxyXG5cclxuXHRcdFx0cG9wcGVyT3B0aW9ucy5vblVwZGF0ZSA9ICgpID0+IHtcclxuICAgICAgICAvLyBIaWRlIHRoZSBwb3B1cCB3aGVuIHRoZSBkcm9wZG93biBjaGFuZ2VzIHBvc2l0aW9uIGR1ZSB0byB3aW5kb3cgcmVzaXplXHJcbiAgICAgICAgLy8gb3IgY29udGFpbmVyIHNjcm9sbGluZ1xyXG4gICAgICAgIHRoaXMucG9wdXAuaGlkZSgpO1xyXG5cdFx0XHR9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wb3B1cC5wb3BwZXJPcHRpb25zID0gcG9wcGVyT3B0aW9ucztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVuc3Vic2NyaWJlIHRvIGFueSBhY3RpdmUgc3Vic2NyaXB0aW9uc1xyXG4gICAqL1xyXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuY29tcG9uZW50RGVzdHJveWVkLm5leHQoKTtcclxuICAgIHRoaXMuY29tcG9uZW50RGVzdHJveWVkLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPcGVuIGFuZCBjbG9zZSB0aGUgbWVudVxyXG4gICAqL1xyXG4gIHB1YmxpYyB0b2dnbGVNZW51KGV2ZW50PzpFdmVudCk6dm9pZCB7XHJcbiAgICBpZiAoZXZlbnQpIHtcclxuXHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgIGlmICh0aGlzLm1lbnVTdGF0dXMgPT09ICdoaWRkZW4nKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNLZXlib2FyZEV2ZW50ICYmIHRoaXMuaXRlbXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAvLyBTZXR1cCB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdCB0byBoaWdobGlnaHQgd2hlbiBvcGVuaW5nIHRoZVxyXG4gICAgICAgICAgLy8gbWVudSB2aWEgdGhlIGtleWJvYXJkLCBpZ25vcmluZyBoZWFkaW5nc1xyXG5cclxuICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRJdGVtID0gdGhpcy5pdGVtcy5maW5kKGl0ZW0gPT4gaXRlbS5kaXNwbGF5ICE9PSAnaGVhZGluZycpIHx8IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucG9wdXAuc2hvdygpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucG9wdXAuaGlkZSgpO1xyXG5cclxuICAgICAgICAvLyBSZXNldCB0aGUgaGlnaGxpZ2h0ZWQgaXRlbSBhbmQgb3VyIGtleWJvYXJkIGZsYWdcclxuICAgICAgICAvLyB3aGVuIHdlIGNsb3NlIHRoZSBwb3B1cFxyXG4gICAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRJdGVtID0gbnVsbDtcclxuICAgICAgICB0aGlzLmlzS2V5Ym9hcmRFdmVudCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbWl0IHRoZSBzZWxlY3RlZCBpdGVtIHdoZW4gaXQgY2hhbmdlcyBhbmQgY2xvc2UgdGhlIG1lbnVcclxuICAgKi9cclxuICBwdWJsaWMgc2VsZWN0ZWRDaGFuZ2VkKGl0ZW06TWVudUl0ZW0pOnZvaWQge1xyXG4gICAgdGhpcy5pdGVtU2VsZWN0ZWQuZW1pdChpdGVtKTtcclxuICAgIHRoaXMudG9nZ2xlTWVudSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xvc2VzIHRoZSBtZW51IGlmIHRoZSB0YWIga2V5IGlzIHByZXNzZWRcclxuICAgKi9cclxuICBwdWJsaWMga2V5TmF2aWdhdGUoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XHJcbiAgICAgIGNhc2UgJ0VudGVyJzpcclxuICAgICAgICB0aGlzLmlzS2V5Ym9hcmRFdmVudCA9IHRydWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ0VzY2FwZSc6XHJcbiAgICAgIGNhc2UgJ1RhYic6XHJcbiAgICAgICAgaWYgKHRoaXMubWVudVN0YXR1cyA9PT0gJ3Zpc2libGUnKSB7XHJcbiAgICAgICAgICB0aGlzLnRvZ2dsZU1lbnUoZXZlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
@@ -59,6 +59,11 @@ export class MenuComponent {
59
59
  * Will prevent text-wrapping of menu items and truncate instead. Also turns on a tooltip for the menu item. Default: false;
60
60
  */
61
61
  this.truncateItems = false;
62
+ /**
63
+ * When true, the space for the icon is preserved for menu items that do not have icons.
64
+ * Only applicable for iconAndLabel menus.
65
+ */
66
+ this.preserveIconSpace = false;
62
67
  /**
63
68
  * Emitted when `selected` is changed. Emits the referenced object.
64
69
  *
@@ -384,7 +389,7 @@ export class MenuComponent {
384
389
  MenuComponent.decorators = [
385
390
  { type: Component, args: [{
386
391
  selector: 'ec-menu',
387
- 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\" 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\" *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\" *ngIf=\"item.display !== 'heading'\"></i>\r\n\r\n <i class=\"ec-icon {{item.icon}} ml-2\" *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\" *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}}\" *ngIf=\"item.icon && 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\" *ngIf=\"item?.items\"></i>\r\n</ng-template>",
392
+ 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\" 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\" *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\" *ngIf=\"item.display !== 'heading'\"></i>\r\n\r\n <i class=\"ec-icon {{item.icon}} ml-2\" *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\" *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}}\" *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\" *ngIf=\"item?.items\"></i>\r\n</ng-template>",
388
393
  styles: ["@-webkit-keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}:host{background-color:#fff;display:block;font-size:.875rem;font-weight:400}:host.open>nav>.child,:host.open>nav>.parent{height:100%;left:0;position:absolute;right:0;top:0;transition:transform .25s ease}:host.open>nav>.parent{transform:translateX(0)}:host.open>nav>.child{transform:translateX(100%)}:host.open-active>nav>.parent{transform:translateX(-100%)}:host.open-active>nav>.child{transform:translateX(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{height:100%;overflow:hidden}.parent,nav{display:flex;position:relative}.parent{flex:auto;flex-direction:column;max-width:100%}.parent>header{cursor:pointer}.parent>header.is-highlighted .item-wrapper,.parent>header.is-selected .item-wrapper{background-color:#d9edf2}.parent>header:hover .item-wrapper{background-color:#bfe0e9}.parent.no-data ul{display:none}.parent.no-data .no-data-message{display:block}ul{flex:auto;height:100%;list-style:none;margin:0;overflow-y:auto;padding:0}ul li{cursor:pointer;padding:0 .25rem}ul li a{border-bottom:0;color:inherit;text-decoration:none}ul li.is-highlighted .item-wrapper,ul li.is-selected .item-wrapper{background-color:#d9edf2}ul li:hover .item-wrapper{background-color:#bfe0e9}ul li:focus .item-wrapper{background-color:rgba(26,26,35,.38);outline:none;position:relative;z-index:1}ul li.is-disabled .item-wrapper{color:rgba(26,26,35,.66);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 #d2d7d9;margin-bottom:.25rem;padding-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{border-radius:var(--ec-border-radius);color:inherit;cursor:inherit;display:flex;line-height:1.25rem;min-height:1.75rem;padding:.25rem .5rem}.item-wrapper .label{margin-right:auto}.item-wrapper .label+.ec-icon{margin-left:.5rem}.item-wrapper .ec-icon{flex:none;margin-top:.125rem}.item-wrapper .ec-icon+.label{margin-left:.5rem}.item-wrapper .ec-icon-sm{margin-top:.25rem}.item-wrapper .icon-check{opacity:0}.no-data-message{color:rgba(26,26,35,.38);display:none;font-size:1rem;margin-bottom:0;padding:1rem;text-align:center}:host-context(ec-tree) ul{overflow-x:hidden}:host-context(ec-tree) li.is-highlighted,:host-context(ec-tree) li.is-selected{font-weight:700}:host-context(ec-tree) li.is-highlighted:not(:hover),:host-context(ec-tree) li.is-selected:not(:hover){background-color:transparent}"]
389
394
  },] }
390
395
  ];
@@ -409,10 +414,11 @@ MenuComponent.propDecorators = {
409
414
  highlightedItem: [{ type: Input }],
410
415
  maintainSelectedItem: [{ type: Input }],
411
416
  truncateItems: [{ type: Input }],
417
+ preserveIconSpace: [{ type: Input }],
412
418
  selectedChanged: [{ type: Output }],
413
419
  menuClosed: [{ type: Output }],
414
420
  labelTemplate: [{ type: ViewChild, args: ['label', { static: true },] }],
415
421
  iconAndLabelTemplate: [{ type: ViewChild, args: ['iconAndLabel', { static: true },] }],
416
422
  checkAndLabelTemplate: [{ type: ViewChild, args: ['checkAndLabel', { static: true },] }]
417
423
  };
418
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvY29udHJvbHMvbWVudS9tZW51LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQW9CLFNBQVMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBRWhLLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFxQnpELENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLENBQUM7QUFFdEM7Ozs7R0FJRztBQU1ILE1BQU0sT0FBTyxhQUFhO0lBNkp0QixZQUNZLEVBQWMsRUFDZCxRQUFtQixFQUNuQixhQUE0QixFQUM1QixhQUE0QjtRQUg1QixPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQ2QsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQWxKeEM7Ozs7V0FJRztRQUNhLFVBQUssR0FBb0IsRUFBRSxDQUFDO1FBRzVDOzs7OztXQUtHO1FBQ2EsYUFBUSxHQUFvQixJQUFJLENBQUM7UUFVakQ7Ozs7V0FJRztRQUNhLGlCQUFZLEdBQXFCLE9BQU8sQ0FBQztRQW1CekQ7O1dBRUc7UUFDYSxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUU3Qzs7V0FFRztRQUNhLGVBQVUsR0FBVyxZQUFZLENBQUM7UUFHbEQ7O1dBRUc7UUFDYSxpQkFBWSxHQUFhLEtBQUssQ0FBQztRQUcvQzs7V0FFRztRQUNhLG9CQUFlLEdBQW9CLElBQUksQ0FBQztR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LEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDL0g7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxVQUFVO1FBQ2QsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1osSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQy9CLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQzVELENBQUMsQ0FBQyxDQUFDO1NBQ047SUFDTCxDQUFDOzs7WUFsZkosU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxTQUFTO2dCQUNuQiw2N0pBQW9DOzthQUV2Qzs7O1lBckNxRyxVQUFVO1lBQXJCLFNBQVM7WUFFM0YsYUFBYTtZQUNiLGFBQWE7OztpQkF5Q2pCLEtBQUs7cUJBTUwsV0FBVyxTQUFDLFNBQVM7b0JBUXJCLEtBQUs7dUJBU0wsS0FBSztxQkFPTCxLQUFLOzJCQVFMLEtBQUs7aUNBVUwsS0FBSztvQkFNTCxLQUFLOzBCQU1MLEtBQUs7eUJBS0wsS0FBSzsyQkFNTCxLQUFLOzhCQU1MLEtBQUs7bUNBT0wsS0FBSzs0QkFLTCxLQUFLOzhCQU9MLE1BQU07eUJBT04sTUFBTTs0QkFtQkwsU0FBUyxTQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7bUNBTXBDLFNBQVMsU0FBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO29DQU0xQyxTQUFTLFNBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCwgRXZlbnRFbWl0dGVyLCBBZnRlckNvbnRlbnRJbml0LCBSZW5kZXJlcjIsIEVsZW1lbnRSZWYsIEhvc3RCaW5kaW5nLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmF2SXRlbSB9IGZyb20gJy4uL25hdmlnYXRpb24vbmF2LWl0ZW0nO1xyXG5pbXBvcnQgeyBXaW5kb3dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS93aW5kb3cuc2VydmljZSc7XHJcbmltcG9ydCB7IFNjcm9sbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3Njcm9sbC5zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCB0eXBlIE1lbnVUZW1wbGF0ZVR5cGUgPSBcImxhYmVsXCIgfCBcImljb25BbmRMYWJlbFwiIHwgXCJjaGVja0FuZExhYmVsXCI7XHJcblxyXG5leHBvcnQgdHlwZSBNZW51SG9zdEVsZW1lbnRDbGFzc2VzID0gJ2JnLXRyYW5zcGFyZW50JztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTWVudUl0ZW08VFZhbHVlPWFueSwgU0l0ZW1zPWFueT4gZXh0ZW5kcyBOYXZJdGVtIHtcclxuICAvLyBMYWJlbCBpcyBvcHRpb25hbCBpbiBOYXZJdGVtIGJ1dCB3YXMgbm90IGluIE1lbnVJdGVtLFxyXG4gIC8vIG92ZXJyaWRpbmcgdG8gYmUgcmVxdWlyZWRcclxuICBsYWJlbDogc3RyaW5nLFxyXG4gIFxyXG4gIGl0ZW1zPzogTWVudUl0ZW08U0l0ZW1zPltdLFxyXG4gIGNoZWNrZWQ/OiBib29sZWFuLFxyXG4gIGRpc3BsYXk/OiAnZGVmYXVsdCd8J2hlYWRpbmcnfCdkaXZpZGVyJyxcclxuICB2YWx1ZT86VFZhbHVlLFxyXG4gIGNsYXNzTGlzdD86c3RyaW5nLFxyXG4gIGRpc2FibGVkPzogYm9vbGVhbixcclxuICBoaWRkZW4/OiBib29sZWFuLFxyXG4gIHJlYWRvbmx5PzogYm9vbGVhblxyXG4gIHRhcmdldD86ICdfc2VsZicgfCAnX2JsYW5rJyB8ICdfcGFyZW50JyB8ICdfdG9wJyxcclxuICBleHRlcm5hbExpbms/OiBib29sZWFuXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgbWVudUFuaW1hdGlvblNwZWVkID0gMzUwO1xyXG5cclxuLyoqXHJcbiAqIFByaW1pdGl2ZSBNZW51IGNvbXBvbmVudCB0aGF0IGVuY2Fwc3VsYXRlcyBrbm93biB0ZW1wbGF0ZXNcclxuICpcclxuICogQGV4cG9ydFxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2VjLW1lbnUnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL21lbnUuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vbWVudS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNZW51Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95IHtcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnB1dCBmb3IgdGhlIG1lbnUncyB0ZW1wbGF0ZSBpZFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgaWQ/OiBzdHJpbmc7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWQgYm91bmQgdG8gdGhlIGhvc3QgZWxlbWVudFxyXG4gICAgICovXHJcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKSBwdWJsaWMgYXR0cklkPzogc3RyaW5nO1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFycmF5IG9mIGl0ZW1zIHRvIGRpc3BsYXlcclxuICAgICAqXHJcbiAgICAgKiBAbWVtYmVyb2YgTWVudUNvbXBvbmVudFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgaXRlbXM6IEFycmF5PE1lbnVJdGVtPiA9IFtdO1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqICBTZWxlY3RlZCBpdGVtOyBhbm5vdGF0ZXMgdGhlIGl0ZW1cclxuICAgICAqICB3aGVuIGRpc3BsYXllZCB3aXRoICdzZWxlY3RlZCcgY2xhc3NcclxuICAgICAqXHJcbiAgICAgKiBAbWVtYmVyb2YgTWVudUNvbXBvbmVudFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgc2VsZWN0ZWQ6IE1lbnVJdGVtIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHBhcmVudCBtZW51IGl0ZW0uIElmIGRlZmluZWQsIGEgaGVhZGVyIHdpdGggdGhlIHBhcmVudCdzIGxhYmVsIGFuZCBhXHJcbiAgICAgKiBiYWNrIGJ1dHRvbiB3aWxsIGJlIGRpc3BsYXllZC5cclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgcHVibGljIHBhcmVudD86IE1lbnVJdGVtO1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3BsYXkgdGVtcGxhdGVcclxuICAgICAqXHJcbiAgICAgKiBAbWVtYmVyb2YgTWVudUNvbXBvbmVudFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgdGVtcGxhdGVUeXBlOiBNZW51VGVtcGxhdGVUeXBlID0gJ2xhYmVsJztcclxuXHJcblx0LyoqXHJcbiAgICAgKiBPcHRpb25hbCBjdXN0b20gdGVtcGxhdGUgZm9yIHRoZSBtZW51IGl0ZW1zLiBNdXN0IGRlY2xhcmUgYSB0ZW1wbGF0ZSBcclxuXHQgKiBpbnB1dCB2YXJpYWJsZSBjYWxsZWQgXCJpdGVtXCIgbGlrZSBzbzogPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZU5hbWUgbGV0LWl0ZW0+LCBcclxuXHQgKiB3aGVyZSBpdGVtIHJlcHJlc2VudHMgdGhlIG1lbnVJdGVtLlxyXG4gICAgICogV2lsbCBvdmVycmlkZSB0aGUgY2hvaWNlIGZvciB0ZW1wbGF0ZVR5cGUgaWYgcHJvdmlkZWQuXHJcbiAgICAgKiBcclxuICAgICAqIEBtZW1iZXJvZiBNZW51Q29tcG9uZW50XHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBjdXN0b21NZW51VGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtZW51J3MgdGl0bGVcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgcHVibGljIHRpdGxlPzpzdHJpbmc7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2hvdyBtZXNzYWdlIHdoZW4gdGhlcmUgYXJlIG5vIGl0ZW1zXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBzaG93Tm9JdGVtcz86Ym9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGV4dCB0byBzaG93IHdoZW4gbWVudSBpcyBlbXB0eSBhbmQgc2hvd05vSXRlbXMgaXMgdHJ1ZVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgbm9EYXRhVGV4dDogc3RyaW5nID0gJ05vSXRlbXNfVEMnO1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnRyb2xzIHdoZXRoZXIga2V5Ym9hcmQgbmF2aWdhdGlvbiBpcyBlbmFibGVkXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBlbmFibGVLZXlOYXY/OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXRlbSBjdXJyZW50bHkgaGlnaGxpZ2h0ZWQgYnkga2V5Ym9hcmQgbmF2aWdhdGlvblxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgaGlnaGxpZ2h0ZWRJdGVtOiBNZW51SXRlbSB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGVsbHMgdGhlIG1lbnUgdG8gbWFpbnRhaW4gdGhlIHNlbGVjdGVkL2xhc3RTZWxlY3RlZCBpdGVtLiBUdXJuaW5nIHRoaXMgb2ZmIGlzIHVzZWZ1bCBmb3JcclxuICAgICAqIGFjdGlvbiB0eXBlIG1lbnVzIHRoYXQgYXJlIGRpc3BsYXllZCBvbiB0aGUgc2NyZWVuIGF0IGFsbCB0aW1lcyBhbmQgeW91IGRvIG5vdFxyXG4gICAgICogd2FudCB0aGUgaXRlbSB0byBiZSBzZWxlY3RlZCB3aGVuIGNsaWNrZWQuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBtYWludGFpblNlbGVjdGVkSXRlbTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaWxsIHByZXZlbnQgdGV4dC13cmFwcGluZyBvZiBtZW51IGl0ZW1zIGFuZCB0cnVuY2F0ZSBpbnN0ZWFkLiBBbHNvIHR1cm5zIG9uIGEgdG9vbHRpcCBmb3IgdGhlIG1lbnUgaXRlbS4gRGVmYXVsdDogZmFsc2U7XHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyB0cnVuY2F0ZUl0ZW1zOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFbWl0dGVkIHdoZW4gYHNlbGVjdGVkYCBpcyBjaGFuZ2VkLiBFbWl0cyB0aGUgcmVmZXJlbmNlZCBvYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQG1lbWJlcm9mIE1lbnVDb21wb25lbnRcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIHB1YmxpYyBzZWxlY3RlZENoYW5nZWQ6IEV2ZW50RW1pdHRlcjxNZW51SXRlbT4gPSBuZXcgRXZlbnRFbWl0dGVyPE1lbnVJdGVtPigpO1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgbWVudSBoYXMgYSBwYXJlbnQgYW5kIGJhY2sgaXMgY2xpY2tlZFxyXG4gICAgICogQG1lbWJlcm9mIE1lbnVDb21wb25lbnRcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIHB1YmxpYyBtZW51Q2xvc2VkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGl0ZW0gdGVtcGxhdGUgdGhhdCBpcyBsb2FkZWQgaW50byB0aGUgY29tcG9uZW50IHRlbXBsYXRlXHJcbiAgICAgKlxyXG4gICAgICogQG1lbWJlcm9mIE1lbnVDb21wb25lbnRcclxuICAgICAqL1xyXG4gICAgcHVibGljIGludGVybmFsaXplZFRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGV4IG9mIHRoZSBpdGVtIGN1cnJlbnRseSBoaWdobGlnaHRlZCB1c2luZyBrZXlib2FyZCBuYXZcclxuICAgICAqL1xyXG4gICAgcHVibGljIGhpZ2hsaWdodGVkSXRlbUluZGV4OiBudW1iZXIgPSAtMTtcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgbWVudSBsYWJlbCB0ZW1wbGF0ZVxyXG4gICAgICovXHJcbiAgICAgQFZpZXdDaGlsZCgnbGFiZWwnLCB7IHN0YXRpYzogdHJ1ZSB9KSBwcml2YXRlIGxhYmVsVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBtZW51IGljb24gYW5kIGxhYmVsIHRlbXBsYXRlXHJcbiAgICAgKi9cclxuICAgIEBWaWV3Q2hpbGQoJ2ljb25BbmRMYWJlbCcsIHsgc3RhdGljOiB0cnVlIH0pIHByaXZhdGUgaWNvbkFuZExhYmVsVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBtZW51IGNoZWNrIGFuZCBsYWJlbCB0ZW1wbGF0ZVxyXG4gICAgICovXHJcbiAgICBAVmlld0NoaWxkKCdjaGVja0FuZExhYmVsJywgeyBzdGF0aWM6IHRydWUgfSkgcHJpdmF0ZSBjaGVja0FuZExhYmVsVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnRhaW5zIHRoZSBmdW5jdGlvbiB1c2VkIHRvIHJlbW92ZSB0aGUgZXZlbiBsaXN0ZW5lciBmcm9tIHRoZSByZW5kZXJlclxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHJlbW92ZUtleWRvd25MaXN0ZW5lcj86ICgpID0+IHZvaWQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBMYXN0IGl0ZW0gdGhpcy5zZWxlY3RlZCB3YXMgc2V0IHRvIHZpYSBzZWxlY3RJdGVtKCkuXHJcbiAgICAgKiBUaGlzIGlzbid0IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIGFzIHRoaXMuc2VsZWN0ZWQsIGJlY2F1c2UgdGhpcy5zZWxlY3RlZCBpcyBhbiBpbnB1dCBwcm9wZXJ0eVxyXG4gICAgICogYW5kIGNvdWxkIGhhdmUgYmVlbiBjaGFuZ2VkIGJ5IGEgY29uc3VtZXIgdGhyb3VnaCBzb21lIG1lYW5zIG90aGVyIHRoYW4gc2VsZWN0SXRlbSgpLlxyXG4gICAgICogVGhpcyBhbGxvd3MgdXMgdG8gcHJldmVudCBkb3VibGUtY2FsbHMgdG8gc2VsZWN0SXRlbSgpIHdpdGggdGhlIHNhbWUgaW5wdXQuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgbGFzdFNlbGVjdGVkOiBNZW51SXRlbSB8IG51bGwgPSBudWxsO1xyXG5cclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxyXG4gICAgICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgICAgICBwcml2YXRlIHdpbmRvd1NlcnZpY2U6IFdpbmRvd1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBzY3JvbGxTZXJ2aWNlOiBTY3JvbGxTZXJ2aWNlXHJcbiAgICApe1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyAmIGRpc3BsYXlzIHRoZSBpbnRlcmFsaXplZCB0ZW1wbGF0ZSBiYXNlZCBvblxyXG4gICAgICogdGhlIHNldCB0ZW1wbGF0ZS5cclxuICAgICAqIEBzZWUgeyBAbGluayBodHRwczovL2FuZ3VsYXIuaW8vZ3VpZGUvbGlmZWN5Y2xlLWhvb2tzfEFuZ3VsYXIgTGlmZWN5Y2xlIEhvb2tzfVxyXG4gICAgICpcclxuICAgICAqIEBtZW1iZXJvZiBNZW51Q29tcG9uZW50XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLnRlbXBsYXRlVHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIChcImxhYmVsXCIpOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5pbnRlcm5hbGl6ZWRUZW1wbGF0ZSA9IHRoaXMuaWNvbkFuZExhYmVsVGVtcGxhdGU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAoXCJpY29uQW5kTGFiZWxcIik6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmludGVybmFsaXplZFRlbXBsYXRlID0gdGhpcy5pY29uQW5kTGFiZWxUZW1wbGF0ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIChcImNoZWNrQW5kTGFiZWxcIik6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmludGVybmFsaXplZFRlbXBsYXRlID0gdGhpcy5jaGVja0FuZExhYmVsVGVtcGxhdGU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0ZW1wbGF0ZVR5cGUgZm9yIE1lbnVDb21wb25lbnQuIFBsZWFzZSB1c2UgZWl0aGVyOiAnbGFiZWwnLCAnaWNvbkFuZExhYmVsJyBvciAnY2hlY2tBbmRMYWJlbCdgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9pZiB0aGUgY29uc3VtZXIgcHJvdmlkZWQgYSBtZW51SXRlbVRlbXBsYXRlLCBvdmVycmlkZSB0aGUgaW50ZXJuYWxpemVkVGVtcGxhdGUgd2l0aCB0aGF0LlxyXG4gICAgICAgIGlmKHRoaXMuY3VzdG9tTWVudVRlbXBsYXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW50ZXJuYWxpemVkVGVtcGxhdGUgPSB0aGlzLmN1c3RvbU1lbnVUZW1wbGF0ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXR0cklkID0gdGhpcy5pZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0SXRlbUlkcygpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5oaWdobGlnaHRlZEl0ZW0gJiYgdGhpcy5pdGVtcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRlZEl0ZW1JbmRleCA9IHRoaXMuaXRlbXMuZmluZEluZGV4KGl0ZW0gPT4geyByZXR1cm4gdGhpcy5oaWdobGlnaHRlZEl0ZW0gPT09IGl0ZW19KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuYWRkS2V5ZG93bkxpc3RlbmVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIC8vIFJlbW92ZSB0aGUgbGlzdGVuZXIgd2hlbiB0aGUgY29tcG9uZW50IGlzIGRlc3Ryb3llZFxyXG4gICAgICAgIGlmICh0aGlzLnJlbW92ZUtleWRvd25MaXN0ZW5lcikge1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZUtleWRvd25MaXN0ZW5lcigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGVuIGEgbWVudSBpdGVtIGlzIHNlbGVjdGVkLCBvcGVuIGEgY2hpbGQgbWVudSBpZiB0aGUgaXRlbSBoYXMgaXRlbXMsIGNhbGxcclxuICAgICAqIHRoZSBpdGVtJ3MgY2xpY2sgbWV0aG9kIGlmIGRlZmluZWQsIG9yIGVtaXQgdGhlIHNlbGVjdGVkIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGl0ZW0gVGhlIHNlbGVjdGVkIGl0ZW1cclxuICAgICAqIEBtZW1iZXJvZiBNZW51Q29tcG9uZW50XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZWxlY3RJdGVtKGV2ZW50OiBFdmVudCwgaXRlbTogTWVudUl0ZW0sIGlzS2V5RXZlbnQ/OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgICAgIC8vSW4gdGhlIGNhc2UgdGhhdCB0aGUgdXNlciBjbGlja3MgYW4gaXRlbSwgc2VsZWN0SXRlbSgpIHdpbGwgYmUgY2FsbGVkIGZyb20gdGhlIGNsaWNrIGhhbmRsZXJcclxuICAgICAgICAvL2FuZCB0aHJvdWdoIG9uUm91dGVyTGlua0FjdGl2YXRlZC4gT25seSBvbmUgb2YgdGhlc2Ugd2lsbCBtYWtlIGl0IHRocm91Z2ggdGhpcyBpZiBzdGF0ZW1lbnRcclxuICAgICAgICAvL2JlY2F1c2UgdGhlIGZpcnN0IG9uZSB3aWxsIHNldCB0aGlzLmxhc3RTZWxlY3RlZCA9IGl0ZW0uXHJcbiAgICAgICAgaWYoIWl0ZW0uZGlzYWJsZWQgJiYgIWl0ZW0ucmVhZG9ubHkgJiYgdGhpcy5sYXN0U2VsZWN0ZWQgIT09IGl0ZW0pIHtcclxuXHJcbiAgICAgICAgICAgIGlmICghaXRlbS51cmwpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtLm9uQ2xpY2spIHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLm9uQ2xpY2soaXRlbSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChpdGVtLml0ZW1zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2dnbGVDaGlsZE1lbnUodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25TZWxlY3Rpb24oaXRlbSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gbWFudWFsbHkgaGFuZGxlIHRoZSB1cmwgbmF2aWdhdGlvbiBpZiB0aGUga2V5Ym9hcmQgd2FzIHVzZWRcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0tleUV2ZW50IHx8ICg8RWxlbWVudD5ldmVudC50YXJnZXQpPy50YWdOYW1lID09PSAnTEknKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS50YXJnZXQpIHtcclxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cub3BlbihpdGVtLnVybCwgaXRlbS50YXJnZXQpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLndpbmRvd1NlcnZpY2UubmF2aWdhdGVUb1VybChpdGVtLnVybCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBFbWl0IHNvIHVwc3RyZWFtIGNvbXBvbmVudHMga25vdyBhbiBpdGVtIHdhcyBzZWxlY3RlZFxyXG4gICAgICAgICAgICAgICAgdGhpcy5vblNlbGVjdGlvbihpdGVtKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub25TZWxlY3Rpb24oaXRlbSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm1haW50YWluU2VsZWN0ZWRJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkID0gaXRlbTtcclxuICAgICAgICAgICAgICAgIHRoaXMubGFzdFNlbGVjdGVkID0gaXRlbTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWQgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xvc2UgdGhlIGN1cnJlbnQgbWVudSBhbmQgb3BlbiB0aGUgcGFyZW50IG1lbnVcclxuICAgICAqIEBtZW1iZXJvZiBNZW51Q29tcG9uZW50XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBiYWNrKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGlmICh0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC5vbkNsaWNrKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFyZW50Lm9uQ2xpY2sobnVsbCwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubWVudUNsb3NlZC5lbWl0KCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRW1pdCB0aGUgc2VsZWN0ZWQgaXRlbVxyXG4gICAgICogQHBhcmFtIGl0ZW0gVGhlIHNlbGVjdGVkIGl0ZW1cclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uU2VsZWN0aW9uKGl0ZW06IE1lbnVJdGVtKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGl0ZW0uZGlzcGxheSAhPT0gJ2hlYWRpbmcnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDaGFuZ2VkLmVtaXQoaXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIE9wZW4gb3IgY2xvc2UgdGhlIGNoaWxkIG1lbnUuIFdoZW4gdGhlIGNoaWxkIG1lbnUgY2xvc2VzLCB0aGUgc2VsZWN0ZWRcclxuICAgICAqIGl0ZW0gaXMgcmVzZXQuXHJcbiAgICAgKiBAbWVtYmVyb2YgTWVudUNvbXBvbmVudFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdG9nZ2xlQ2hpbGRNZW51KG9wZW46Ym9vbGVhbik6dm9pZCB7XHJcbiAgICAgICAgbGV0IG5hdkVsID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ25hdicpO1xyXG5cclxuICAgICAgICBpZiAob3Blbikge1xyXG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGxpc3RlbmVyIG9uIHRoZSBwYXJlbnQgbWVudSB3aGVuIGEgY2hpbGQgbWVudSBpcyBvcGVuZWRcclxuICAgICAgICAgICAgLy8gVGhpcyBpcyB0byBhdm9pZCBpbnRlcmZlcmVuY2UgYmV0d2VlbiB0aGUgcGFyZW50IGFuZCBjaGlsZCBtZW51c1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZW1vdmVLZXlkb3duTGlzdGVuZXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlS2V5ZG93bkxpc3RlbmVyKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBoZWlnaHQ6bnVtYmVyID0gbmF2RWwub2Zmc2V0SGVpZ2h0O1xyXG4gICAgICAgICAgICBsZXQgd2lkdGg6bnVtYmVyID0gbmF2RWwub2Zmc2V0V2lkdGg7XHJcblxyXG4gICAgICAgICAgICAvLyBJbiBvcmRlciB0byBhbmltYXRlIHRoZSBjaGlsZCBtZW51LCB3ZSBuZWVkIHRvIHNldCBoZWlnaHQgb24gdGhlIG5hdiBlbGVtZW50XHJcbiAgICAgICAgICAgIC8vIHNvIHdlIGNhbiBhYnNvbHV0ZWx5IHBvc2l0aW9uIHRoZSB0d28gbWVudXMgYW5kIG1haW50YWluIHRoZSBjdXJyZW50IG1lbnUncyBoZWlnaHRcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShuYXZFbCwgJ2hlaWdodCcsIGAke2hlaWdodH1weGApO1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKG5hdkVsLCAnd2lkdGgnLCBgJHt3aWR0aH1weGApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsICdvcGVuJyk7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsICdvcGVuLWFjdGl2ZScpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIFJlLWFkZCB0aGUgbGlzdGVuZXIgb25jZSB0aGUgY2hpbGQgbWVudSBjbG9zZXNcclxuICAgICAgICAgICAgdGhpcy5hZGRLZXlkb3duTGlzdGVuZXIoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LCAnb3Blbi1hY3RpdmUnKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwgJ29wZW4nKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBSZXNldCB0aGUgbmF2IGVsZW1lbnQncyBoZWlnaHQgdG8gYXV0b1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShuYXZFbCwgJ2hlaWdodCcsICcxMDAlJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkID0gbnVsbDtcclxuICAgICAgICAgICAgfSwgbWVudUFuaW1hdGlvblNwZWVkKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhhbmRsZSBrZXkgcHJlc3NlcyB0byBuYXZpZ2F0ZSB0aGUgbWVudVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMga2V5TmF2aWdhdGUoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgICAgICBpZiAodGhpcy5lbmFibGVLZXlOYXYpIHtcclxuICAgICAgICAgICAgc3dpdGNoIChldmVudC5rZXkpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ0Fycm93VXAnOlxyXG4gICAgICAgICAgICAgICAgY2FzZSAnVXAnOlxyXG4gICAgICAgICAgICAgICAgY2FzZSAnQXJyb3dEb3duJzpcclxuICAgICAgICAgICAgICAgIGNhc2UgJ0Rvd24nOlxyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3ZlSGlnaGxpZ2h0ZWRVcE9yRG93bihldmVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAnQXJyb3dSaWdodCc6XHJcbiAgICAgICAgICAgICAgICBjYXNlICdSaWdodCc6XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBTZWxlY3QgdGhlIGl0ZW0gaWYgaXQgaGFzIGNoaWxkIGl0ZW1zXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaGlnaGxpZ2h0ZWRJdGVtICYmIHRoaXMuaGlnaGxpZ2h0ZWRJdGVtLml0ZW1zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0SXRlbShldmVudCwgdGhpcy5oaWdobGlnaHRlZEl0ZW0sIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlICdBcnJvd0xlZnQnOlxyXG4gICAgICAgICAgICAgICAgY2FzZSAnTGVmdCc6XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBDbG9zZSB0aGUgbWVudSBpZiBpdCBpcyBhIGNoaWxkIG1lbnVcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wYXJlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iYWNrKGV2ZW50KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAnICc6XHJcbiAgICAgICAgICAgICAgICBjYXNlICdTcGFjZWJhcic6XHJcbiAgICAgICAgICAgICAgICBjYXNlICdFbnRlcic6XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gUHJldmVudCAnZW50ZXInIGZyb20gZG9pbmcgd2hhdGV2ZXIgaXQgZG9lcyBvbiB0aGUgY3VycmVudGx5IGZvY3VzZWQgZWxlbWVudFxyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmhpZ2hsaWdodGVkSXRlbUluZGV4ID4gLTEgJiYgdGhpcy5oaWdobGlnaHRlZEl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RJdGVtKGV2ZW50LCB0aGlzLmhpZ2hsaWdodGVkSXRlbSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGhlYWRlciBpcyBoaWdobGlnaHRlZFxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5oaWdobGlnaHRlZEl0ZW1JbmRleCA9PT0gLTEpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENsb3NlIHRoZSBtZW51IGlmIGl0J3MgYSBjaGlsZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wYXJlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmFjayhldmVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTY3JvbGwgdG8gdGhlIGl0ZW0gY3VycmVudGx5IG1hcmtlZCBhcyAnaXMtc2VsZWN0ZWQnLiBXYWl0IGEgdGljayBmb3IgdGhlXHJcbiAgICAgKiBOZ0NsYXNzRGlyZWNpdHZlIG9yIE5hdkl0ZW1BY3RpdmVEaXJlY3RpdmUgdG8gcmVzcG9uZCB0byB0aGUgbW9kZWwgY2hhbmdlc1xyXG4gICAgICogYW5kIHVwZGF0ZSB0aGUgdmlldy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHNjcm9sbFRvU2VsZWN0ZWRJdGVtKCk6IHZvaWQge1xyXG4gICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbGlua1NlbGVjdG9yID0gYGxpLmlzLXNlbGVjdGVkYDtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxTZXJ2aWNlLnNjcm9sbFRvSXRlbShgIyR7dGhpcy5pZH1fbGlzdGAsIGxpbmtTZWxlY3Rvcik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBtb3ZlSGlnaGxpZ2h0ZWRVcE9yRG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93VXAnOlxyXG4gICAgICAgICAgICBjYXNlICdVcCc6XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5oaWdobGlnaHRlZEl0ZW1JbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRlZEl0ZW1JbmRleC0tO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFNraXAgYW55IGluLW1lbnUgaGVhZGluZyBpdGVtc1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmhpZ2hsaWdodGVkSXRlbUluZGV4ID4gLTEgJiYgdGhpcy5pdGVtc1t0aGlzLmhpZ2hsaWdodGVkSXRlbUluZGV4XS5kaXNwbGF5ID09PSAnaGVhZGluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRlZEl0ZW1JbmRleC0tO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSAnQXJyb3dEb3duJzpcclxuICAgICAgICAgICAgY2FzZSAnRG93bic6XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5oaWdobGlnaHRlZEl0ZW1JbmRleCA8IHRoaXMuaXRlbXMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRJdGVtSW5kZXgrKztcclxuICAgICAgICAgICAgICAgICAgICAvLyBTa2lwIGFueSBpbi1tZW51IGhlYWRpbmcgaXRlbXNcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5oaWdobGlnaHRlZEl0ZW1JbmRleCA8IHRoaXMuaXRlbXMubGVuZ3RoIC0gMSAmJiB0aGlzLml0ZW1zW3RoaXMuaGlnaGxpZ2h0ZWRJdGVtSW5kZXhdLmRpc3BsYXkgPT09ICdoZWFkaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZ2hsaWdodGVkSXRlbUluZGV4Kys7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaGlnaGxpZ2h0ZWRJdGVtSW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAvLyBTdG9yZSB0aGUgaXRlbSBhdCB0aGUgY3VycmVudCBoaWdobGlnaHQgaW5kZXhcclxuICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRlZEl0ZW0gPSB0aGlzLml0ZW1zW3RoaXMuaGlnaGxpZ2h0ZWRJdGVtSW5kZXhdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRJdGVtID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zY3JvbGxUb0hpZ2hsaWdodGVkSXRlbSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG5cdCAqIFNjcm9sbCB0byB0aGUgc3BlY2lmaWVkIG1lbnUgaXRlbS5cclxuICAgKiBJZiBubyBpdGVtIGlzIHByb3ZpZGVkLCBpdCB3aWxsIHNjcm9sbCB0byB0aGUgZmlyc3QgaXRlbS5cclxuXHQgKlxyXG4gICAqIEBwYXJhbSBpdGVtIFRoZSBtZW51IGl0ZW0gdG8gc2Nyb2xsIHRvLlxyXG5cdCAqIEBtZW1iZXJvZiBNZW51Q29tcG9uZW50XHJcblx0ICovXHJcblx0cHJpdmF0ZSBzY3JvbGxNZW51KGl0ZW0/OiBNZW51SXRlbSB8IG51bGwpOiB2b2lkIHtcclxuXHRcdGlmICh0aGlzLml0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgaXRlbSA9IGl0ZW0gPyBpdGVtIDogdGhpcy5pdGVtc1swXTtcclxuICAgICAgICAgICAgbGV0IGl0ZW1JbmRleCA9IHRoaXMuZmluZEl0ZW1JbmRleChpdGVtKTtcclxuXHJcblx0XHRcdGlmICh0aGlzLmlkKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgaXRlbVNlbGVjdG9yID0gaXRlbS5pZCA/IGAjJHtpdGVtLmlkfWAgOiBgIyR7dGhpcy5pZH1faXRlbSR7aXRlbUluZGV4fWA7XHJcblx0XHRcdFx0dGhpcy5zY3JvbGxTZXJ2aWNlLnNjcm9sbEl0ZW1DZW50ZXJlZChgIyR7dGhpcy5pZH1fbGlzdGAsIGl0ZW1TZWxlY3Rvcik7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNjcm9sbFRvSGlnaGxpZ2h0ZWRJdGVtKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsTWVudSh0aGlzLmhpZ2hsaWdodGVkSXRlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcblx0ICogRmluZCBhIGdpdmVuIGl0ZW0ncyBpbmRleCBpbiB0aGUgZmlsdGVyZWQgaXRlbXMgYXJyYXkuXHJcblx0ICpcclxuXHQgKiBSZXR1cm5zIC0xIGlmIG5vdCBmb3VuZFxyXG5cdCAqIEBwYXJhbSBpdGVtVG9GaW5kIFRoZSBtYXRjaGluZyBpdGVtIHRvIGZpbmQgaW4gdGhlIGl0ZW1zIGFycmF5LlxyXG5cdCAqIEBtZW1iZXJvZiBNZW51Q29tcG9uZW50XHJcblx0ICovXHJcblx0cHJpdmF0ZSBmaW5kSXRlbUluZGV4KGl0ZW1Ub0ZpbmQ/OiBNZW51SXRlbSB8IG51bGwpOiBudW1iZXIge1xyXG4gICAgICAgIGlmIChpdGVtVG9GaW5kKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLml0ZW1zLmZpbmRJbmRleChpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmxhYmVsID09PSAoPE1lbnVJdGVtPml0ZW1Ub0ZpbmQpLmxhYmVsO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYWRkS2V5ZG93bkxpc3RlbmVyKCk6IHZvaWQge1xyXG4gICAgICAgIC8vIE9ubHkgYXR0ZW1wdCB0byBhZGQgdGhlIGxpc3RlbmVyIGlmIGtleWJvYXJkIG5hdiBpcyBlbmFibGVkXHJcbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlS2V5TmF2KSB7XHJcbiAgICAgICAgICAgIC8vIHJlbmRlcmVyLmxpc3RlbiBhZGRzIHRoZSBsaXN0ZW5lciBhbmQgcmV0dXJucyBhIGZ1bmN0aW9uIHRvIHJlbW92ZSBpdCBmcm9tIHRoZSByZW5kZXJlci5cclxuICAgICAgICAgICAgLy8gVGhlIGxpc3RlbmVyIHJlbWFpbnMgYWN0aXZlIHVudGlsIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLlxyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZUtleWRvd25MaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKCdkb2N1bWVudCcsICdrZXlkb3duJywgKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB0aGlzLmtleU5hdmlnYXRlKGV2ZW50KSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgbWVudSBpdGVtIGlkcyB1c2luZyBpdHMgaW5kZXggaWYgaXRlbSBkb2Vzbid0IGFscmVhZHkgaGF2ZSBvbmVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBzZXRJdGVtSWRzKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLml0ZW1zKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgIGl0ZW0uaWQgPSBpdGVtLmlkID8gaXRlbS5pZCA6IHRoaXMuaWQgKyAnX2l0ZW0nICsgaW5kZXg7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXX0=
424
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvY29udHJvbHMvbWVudS9tZW51LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQW9CLFNBQVMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBRWhLLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFxQnpELENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLENBQUM7QUFFdEM7Ozs7R0FJRztBQU1ILE1BQU0sT0FBTyxhQUFhO0lBbUt0QixZQUNZLEVBQWMsRUFDZCxRQUFtQixFQUNuQixhQUE0QixFQUM1QixhQUE0QjtRQUg1QixPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQ2QsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQXhKeEM7Ozs7V0FJRztRQUNhLFVBQUssR0FBb0IsRUFBRSxDQUFDO1FBRzVDOzs7OztXQUtHO1FBQ2EsYUFBUSxHQUFvQixJQUFJLENBQUM7UUFVakQ7Ozs7V0FJRztRQUNhLGlCQUFZLEdBQXFCLE9BQU8sQ0FBQztRQW1CekQ7O1dBRUc7UUFDYSxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUU3Qzs7V0FFRztRQUNhLGVBQVUsR0FBVyxZQUFZLENBQUM7UUFHbEQ7O1dBRUc7UUFDYSxpQkFBWSxHQUFhLEtBQUssQ0FBQztRQUcvQzs7V0FFRztRQUNhLG9CQUFlLEdBQW9CLElBQUksQ0FBQztR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S0FBb0IsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQy9IO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ssVUFBVTtRQUNkLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNaLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUMvQixJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUM1RCxDQUFDLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQzs7O1lBeGZKLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUsU0FBUztnQkFDbkIsbzlKQUFvQzs7YUFFdkM7OztZQXJDcUcsVUFBVTtZQUFyQixTQUFTO1lBRTNGLGFBQWE7WUFDYixhQUFhOzs7aUJBeUNqQixLQUFLO3FCQU1MLFdBQVcsU0FBQyxTQUFTO29CQVFyQixLQUFLO3VCQVNMLEtBQUs7cUJBT0wsS0FBSzsyQkFRTCxLQUFLO2lDQVVMLEtBQUs7b0JBTUwsS0FBSzswQkFNTCxLQUFLO3lCQUtMLEtBQUs7MkJBTUwsS0FBSzs4QkFNTCxLQUFLO21DQU9MLEtBQUs7NEJBS0wsS0FBSztnQ0FNTCxLQUFLOzhCQU9MLE1BQU07eUJBT04sTUFBTTs0QkFtQkwsU0FBUyxTQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7bUNBTXBDLFNBQVMsU0FBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO29DQU0xQyxTQUFTLFNBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCwgRXZlbnRFbWl0dGVyLCBBZnRlckNvbnRlbnRJbml0LCBSZW5kZXJlcjIsIEVsZW1lbnRSZWYsIEhvc3RCaW5kaW5nLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmF2SXRlbSB9IGZyb20gJy4uL25hdmlnYXRpb24vbmF2LWl0ZW0nO1xyXG5pbXBvcnQgeyBXaW5kb3dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS93aW5kb3cuc2VydmljZSc7XHJcbmltcG9ydCB7IFNjcm9sbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3Njcm9sbC5zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCB0eXBlIE1lbnVUZW1wbGF0ZVR5cGUgPSBcImxhYmVsXCIgfCBcImljb25BbmRMYWJlbFwiIHwgXCJjaGVja0FuZExhYmVsXCI7XHJcblxyXG5leHBvcnQgdHlwZSBNZW51SG9zdEVsZW1lbnRDbGFzc2VzID0gJ2JnLXRyYW5zcGFyZW50JztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTWVudUl0ZW08VFZhbHVlPWFueSwgU0l0ZW1zPWFueT4gZXh0ZW5kcyBOYXZJdGVtIHtcclxuICAvLyBMYWJlbCBpcyBvcHRpb25hbCBpbiBOYXZJdGVtIGJ1dCB3YXMgbm90IGluIE1lbnVJdGVtLFxyXG4gIC8vIG92ZXJyaWRpbmcgdG8gYmUgcmVxdWlyZWRcclxuICBsYWJlbDogc3RyaW5nLFxyXG4gIFxyXG4gIGl0ZW1zPzogTWVudUl0ZW08U0l0ZW1zPltdLFxyXG4gIGNoZWNrZWQ/OiBib29sZWFuLFxyXG4gIGRpc3BsYXk/OiAnZGVmYXVsdCd8J2hlYWRpbmcnfCdkaXZpZGVyJyxcclxuICB2YWx1ZT86VFZhbHVlLFxyXG4gIGNsYXNzTGlzdD86c3RyaW5nLFxyXG4gIGRpc2FibGVkPzogYm9vbGVhbixcclxuICBoaWRkZW4/OiBib29sZWFuLFxyXG4gIHJlYWRvbmx5PzogYm9vbGVhblxyXG4gIHRhcmdldD86ICdfc2VsZicgfCAnX2JsYW5rJyB8ICdfcGFyZW50JyB8ICdfdG9wJyxcclxuICBleHRlcm5hbExpbms/OiBib29sZWFuXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgbWVudUFuaW1hdGlvblNwZWVkID0gMzUwO1xyXG5cclxuLyoqXHJcbiAqIFByaW1pdGl2ZSBNZW51IGNvbXBvbmVudCB0aGF0IGVuY2Fwc3VsYXRlcyBrbm93biB0ZW1wbGF0ZXNcclxuICpcclxuICogQGV4cG9ydFxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2VjLW1lbnUnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL21lbnUuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vbWVudS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNZW51Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95IHtcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnB1dCBmb3IgdGhlIG1lbnUncyB0ZW1wbGF0ZSBpZFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgaWQ/OiBzdHJpbmc7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWQgYm91bmQgdG8gdGhlIGhvc3QgZWxlbWVudFxyXG4gICAgICovXHJcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKSBwdWJsaWMgYXR0cklkPzogc3RyaW5nO1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFycmF5IG9mIGl0ZW1zIHRvIGRpc3BsYXlcclxuICAgICAqXHJcbiAgICAgKiBAbWVtYmVyb2YgTWVudUNvbXBvbmVudFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgaXRlbXM6IEFycmF5PE1lbnVJdGVtPiA9IFtdO1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqICBTZWxlY3RlZCBpdGVtOyBhbm5vdGF0ZXMgdGhlIGl0ZW1cclxuICAgICAqICB3aGVuIGRpc3BsYXllZCB3aXRoICdzZWxlY3RlZCcgY2xhc3NcclxuICAgICAqXHJcbiAgICAgKiBAbWVtYmVyb2YgTWVudUNvbXBvbmVudFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgc2VsZWN0ZWQ6IE1lbnVJdGVtIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHBhcmVudCBtZW51IGl0ZW0uIElmIGRlZmluZWQsIGEgaGVhZGVyIHdpdGggdGhlIHBhcmVudCdzIGxhYmVsIGFuZCBhXHJcbiAgICAgKiBiYWNrIGJ1dHRvbiB3aWxsIGJlIGRpc3BsYXllZC5cclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgcHVibGljIHBhcmVudD86IE1lbnVJdGVtO1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3BsYXkgdGVtcGxhdGVcclxuICAgICAqXHJcbiAgICAgKiBAbWVtYmVyb2YgTWVudUNvbXBvbmVudFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgdGVtcGxhdGVUeXBlOiBNZW51VGVtcGxhdGVUeXBlID0gJ2xhYmVsJztcclxuXHJcblx0LyoqXHJcbiAgICAgKiBPcHRpb25hbCBjdXN0b20gdGVtcGxhdGUgZm9yIHRoZSBtZW51IGl0ZW1zLiBNdXN0IGRlY2xhcmUgYSB0ZW1wbGF0ZSBcclxuXHQgKiBpbnB1dCB2YXJpYWJsZSBjYWxsZWQgXCJpdGVtXCIgbGlrZSBzbzogPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZU5hbWUgbGV0LWl0ZW0+LCBcclxuXHQgKiB3aGVyZSBpdGVtIHJlcHJlc2VudHMgdGhlIG1lbnVJdGVtLlxyXG4gICAgICogV2lsbCBvdmVycmlkZSB0aGUgY2hvaWNlIGZvciB0ZW1wbGF0ZVR5cGUgaWYgcHJvdmlkZWQuXHJcbiAgICAgKiBcclxuICAgICAqIEBtZW1iZXJvZiBNZW51Q29tcG9uZW50XHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBjdXN0b21NZW51VGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtZW51J3MgdGl0bGVcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgcHVibGljIHRpdGxlPzpzdHJpbmc7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2hvdyBtZXNzYWdlIHdoZW4gdGhlcmUgYXJlIG5vIGl0ZW1zXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBzaG93Tm9JdGVtcz86Ym9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGV4dCB0byBzaG93IHdoZW4gbWVudSBpcyBlbXB0eSBhbmQgc2hvd05vSXRlbXMgaXMgdHJ1ZVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgbm9EYXRhVGV4dDogc3RyaW5nID0gJ05vSXRlbXNfVEMnO1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnRyb2xzIHdoZXRoZXIga2V5Ym9hcmQgbmF2aWdhdGlvbiBpcyBlbmFibGVkXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBlbmFibGVLZXlOYXY/OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXRlbSBjdXJyZW50bHkgaGlnaGxpZ2h0ZWQgYnkga2V5Ym9hcmQgbmF2aWdhdGlvblxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgaGlnaGxpZ2h0ZWRJdGVtOiBNZW51SXRlbSB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGVsbHMgdGhlIG1lbnUgdG8gbWFpbnRhaW4gdGhlIHNlbGVjdGVkL2xhc3RTZWxlY3RlZCBpdGVtLiBUdXJuaW5nIHRoaXMgb2ZmIGlzIHVzZWZ1bCBmb3JcclxuICAgICAqIGFjdGlvbiB0eXBlIG1lbnVzIHRoYXQgYXJlIGRpc3BsYXllZCBvbiB0aGUgc2NyZWVuIGF0IGFsbCB0aW1lcyBhbmQgeW91IGRvIG5vdFxyXG4gICAgICogd2FudCB0aGUgaXRlbSB0byBiZSBzZWxlY3RlZCB3aGVuIGNsaWNrZWQuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBtYWludGFpblNlbGVjdGVkSXRlbTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaWxsIHByZXZlbnQgdGV4dC13cmFwcGluZyBvZiBtZW51IGl0ZW1zIGFuZCB0cnVuY2F0ZSBpbnN0ZWFkLiBBbHNvIHR1cm5zIG9uIGEgdG9vbHRpcCBmb3IgdGhlIG1lbnUgaXRlbS4gRGVmYXVsdDogZmFsc2U7XHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyB0cnVuY2F0ZUl0ZW1zOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIFxyXG4gICAgICogV2hlbiB0cnVlLCB0aGUgc3BhY2UgZm9yIHRoZSBpY29uIGlzIHByZXNlcnZlZCBmb3IgbWVudSBpdGVtcyB0aGF0IGRvIG5vdCBoYXZlIGljb25zLlxyXG4gICAgICogT25seSBhcHBsaWNhYmxlIGZvciBpY29uQW5kTGFiZWwgbWVudXMuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBwcmVzZXJ2ZUljb25TcGFjZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRW1pdHRlZCB3aGVuIGBzZWxlY3RlZGAgaXMgY2hhbmdlZC4gRW1pdHMgdGhlIHJlZmVyZW5jZWQgb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBtZW1iZXJvZiBNZW51Q29tcG9uZW50XHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKSBwdWJsaWMgc2VsZWN0ZWRDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8TWVudUl0ZW0+ID0gbmV3IEV2ZW50RW1pdHRlcjxNZW51SXRlbT4oKTtcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIG1lbnUgaGFzIGEgcGFyZW50IGFuZCBiYWNrIGlzIGNsaWNrZWRcclxuICAgICAqIEBtZW1iZXJvZiBNZW51Q29tcG9uZW50XHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKSBwdWJsaWMgbWVudUNsb3NlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBpdGVtIHRlbXBsYXRlIHRoYXQgaXMgbG9hZGVkIGludG8gdGhlIGNvbXBvbmVudCB0ZW1wbGF0ZVxyXG4gICAgICpcclxuICAgICAqIEBtZW1iZXJvZiBNZW51Q29tcG9uZW50XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpbnRlcm5hbGl6ZWRUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRleCBvZiB0aGUgaXRlbSBjdXJyZW50bHkgaGlnaGxpZ2h0ZWQgdXNpbmcga2V5Ym9hcmQgbmF2XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBoaWdobGlnaHRlZEl0ZW1JbmRleDogbnVtYmVyID0gLTE7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSByZWZlcmVuY2UgdG8gdGhlIG1lbnUgbGFiZWwgdGVtcGxhdGVcclxuICAgICAqL1xyXG4gICAgIEBWaWV3Q2hpbGQoJ2xhYmVsJywgeyBzdGF0aWM6IHRydWUgfSkgcHJpdmF0ZSBsYWJlbFRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgbWVudSBpY29uIGFuZCBsYWJlbCB0ZW1wbGF0ZVxyXG4gICAgICovXHJcbiAgICBAVmlld0NoaWxkKCdpY29uQW5kTGFiZWwnLCB7IHN0YXRpYzogdHJ1ZSB9KSBwcml2YXRlIGljb25BbmRMYWJlbFRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgbWVudSBjaGVjayBhbmQgbGFiZWwgdGVtcGxhdGVcclxuICAgICAqL1xyXG4gICAgQFZpZXdDaGlsZCgnY2hlY2tBbmRMYWJlbCcsIHsgc3RhdGljOiB0cnVlIH0pIHByaXZhdGUgY2hlY2tBbmRMYWJlbFRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb250YWlucyB0aGUgZnVuY3Rpb24gdXNlZCB0byByZW1vdmUgdGhlIGV2ZW4gbGlzdGVuZXIgZnJvbSB0aGUgcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSByZW1vdmVLZXlkb3duTGlzdGVuZXI/OiAoKSA9PiB2b2lkO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogTGFzdCBpdGVtIHRoaXMuc2VsZWN0ZWQgd2FzIHNldCB0byB2aWEgc2VsZWN0SXRlbSgpLlxyXG4gICAgICogVGhpcyBpc24ndCBuZWNlc3NhcmlseSB0aGUgc2FtZSBhcyB0aGlzLnNlbGVjdGVkLCBiZWNhdXNlIHRoaXMuc2VsZWN0ZWQgaXMgYW4gaW5wdXQgcHJvcGVydHlcclxuICAgICAqIGFuZCBjb3VsZCBoYXZlIGJlZW4gY2hhbmdlZCBieSBhIGNvbnN1bWVyIHRocm91Z2ggc29tZSBtZWFucyBvdGhlciB0aGFuIHNlbGVjdEl0ZW0oKS5cclxuICAgICAqIFRoaXMgYWxsb3dzIHVzIHRvIHByZXZlbnQgZG91YmxlLWNhbGxzIHRvIHNlbGVjdEl0ZW0oKSB3aXRoIHRoZSBzYW1lIGlucHV0LlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGxhc3RTZWxlY3RlZDogTWVudUl0ZW0gfCBudWxsID0gbnVsbDtcclxuXHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZixcclxuICAgICAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICAgICAgcHJpdmF0ZSB3aW5kb3dTZXJ2aWNlOiBXaW5kb3dTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgc2Nyb2xsU2VydmljZTogU2Nyb2xsU2VydmljZVxyXG4gICAgKXtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgJiBkaXNwbGF5cyB0aGUgaW50ZXJhbGl6ZWQgdGVtcGxhdGUgYmFzZWQgb25cclxuICAgICAqIHRoZSBzZXQgdGVtcGxhdGUuXHJcbiAgICAgKiBAc2VlIHsgQGxpbmsgaHR0cHM6Ly9hbmd1bGFyLmlvL2d1aWRlL2xpZmVjeWNsZS1ob29rc3xBbmd1bGFyIExpZmVjeWNsZSBIb29rc31cclxuICAgICAqXHJcbiAgICAgKiBAbWVtYmVyb2YgTWVudUNvbXBvbmVudFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHN3aXRjaCAodGhpcy50ZW1wbGF0ZVR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSAoXCJsYWJlbFwiKTpcclxuICAgICAgICAgICAgICAgIHRoaXMuaW50ZXJuYWxpemVkVGVtcGxhdGUgPSB0aGlzLmljb25BbmRMYWJlbFRlbXBsYXRlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgKFwiaWNvbkFuZExhYmVsXCIpOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5pbnRlcm5hbGl6ZWRUZW1wbGF0ZSA9IHRoaXMuaWNvbkFuZExhYmVsVGVtcGxhdGU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAoXCJjaGVja0FuZExhYmVsXCIpOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5pbnRlcm5hbGl6ZWRUZW1wbGF0ZSA9IHRoaXMuY2hlY2tBbmRMYWJlbFRlbXBsYXRlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdGVtcGxhdGVUeXBlIGZvciBNZW51Q29tcG9uZW50LiBQbGVhc2UgdXNlIGVpdGhlcjogJ2xhYmVsJywgJ2ljb25BbmRMYWJlbCcgb3IgJ2NoZWNrQW5kTGFiZWwnYClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vaWYgdGhlIGNvbnN1bWVyIHByb3ZpZGVkIGEgbWVudUl0ZW1UZW1wbGF0ZSwgb3ZlcnJpZGUgdGhlIGludGVybmFsaXplZFRlbXBsYXRlIHdpdGggdGhhdC5cclxuICAgICAgICBpZih0aGlzLmN1c3RvbU1lbnVUZW1wbGF0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmludGVybmFsaXplZFRlbXBsYXRlID0gdGhpcy5jdXN0b21NZW51VGVtcGxhdGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5pZCkge1xyXG4gICAgICAgICAgICB0aGlzLmF0dHJJZCA9IHRoaXMuaWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldEl0ZW1JZHMoKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaGlnaGxpZ2h0ZWRJdGVtICYmIHRoaXMuaXRlbXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRJdGVtSW5kZXggPSB0aGlzLml0ZW1zLmZpbmRJbmRleChpdGVtID0+IHsgcmV0dXJuIHRoaXMuaGlnaGxpZ2h0ZWRJdGVtID09PSBpdGVtfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmFkZEtleWRvd25MaXN0ZW5lcigpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICAvLyBSZW1vdmUgdGhlIGxpc3RlbmVyIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBkZXN0cm95ZWRcclxuICAgICAgICBpZiAodGhpcy5yZW1vdmVLZXlkb3duTGlzdGVuZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVLZXlkb3duTGlzdGVuZXIoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hlbiBhIG1lbnUgaXRlbSBpcyBzZWxlY3RlZCwgb3BlbiBhIGNoaWxkIG1lbnUgaWYgdGhlIGl0ZW0gaGFzIGl0ZW1zLCBjYWxsXHJcbiAgICAgKiB0aGUgaXRlbSdzIGNsaWNrIG1ldGhvZCBpZiBkZWZpbmVkLCBvciBlbWl0IHRoZSBzZWxlY3RlZCBpdGVtLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBpdGVtIFRoZSBzZWxlY3RlZCBpdGVtXHJcbiAgICAgKiBAbWVtYmVyb2YgTWVudUNvbXBvbmVudFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2VsZWN0SXRlbShldmVudDogRXZlbnQsIGl0ZW06IE1lbnVJdGVtLCBpc0tleUV2ZW50PzogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgICAgICAvL0luIHRoZSBjYXNlIHRoYXQgdGhlIHVzZXIgY2xpY2tzIGFuIGl0ZW0sIHNlbGVjdEl0ZW0oKSB3aWxsIGJlIGNhbGxlZCBmcm9tIHRoZSBjbGljayBoYW5kbGVyXHJcbiAgICAgICAgLy9hbmQgdGhyb3VnaCBvblJvdXRlckxpbmtBY3RpdmF0ZWQuIE9ubHkgb25lIG9mIHRoZXNlIHdpbGwgbWFrZSBpdCB0aHJvdWdoIHRoaXMgaWYgc3RhdGVtZW50XHJcbiAgICAgICAgLy9iZWNhdXNlIHRoZSBmaXJzdCBvbmUgd2lsbCBzZXQgdGhpcy5sYXN0U2VsZWN0ZWQgPSBpdGVtLlxyXG4gICAgICAgIGlmKCFpdGVtLmRpc2FibGVkICYmICFpdGVtLnJlYWRvbmx5ICYmIHRoaXMubGFzdFNlbGVjdGVkICE9PSBpdGVtKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWl0ZW0udXJsKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5vbkNsaWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5vbkNsaWNrKGl0ZW0sIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5pdGVtcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlQ2hpbGRNZW51KHRydWUpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uU2VsZWN0aW9uKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBXZSBuZWVkIHRvIG1hbnVhbGx5IGhhbmRsZSB0aGUgdXJsIG5hdmlnYXRpb24gaWYgdGhlIGtleWJvYXJkIHdhcyB1c2VkXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNLZXlFdmVudCB8fCAoPEVsZW1lbnQ+ZXZlbnQudGFyZ2V0KT8udGFnTmFtZSA9PT0gJ0xJJykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0udGFyZ2V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2luZG93Lm9wZW4oaXRlbS51cmwsIGl0ZW0udGFyZ2V0KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53aW5kb3dTZXJ2aWNlLm5hdmlnYXRlVG9VcmwoaXRlbS51cmwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gRW1pdCBzbyB1cHN0cmVhbSBjb21wb25lbnRzIGtub3cgYW4gaXRlbSB3YXMgc2VsZWN0ZWRcclxuICAgICAgICAgICAgICAgIHRoaXMub25TZWxlY3Rpb24oaXRlbSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uU2VsZWN0aW9uKGl0ZW0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5tYWludGFpblNlbGVjdGVkSXRlbSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZCA9IGl0ZW07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZCA9IGl0ZW07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHRoaXMubGFzdFNlbGVjdGVkID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb3NlIHRoZSBjdXJyZW50IG1lbnUgYW5kIG9wZW4gdGhlIHBhcmVudCBtZW51XHJcbiAgICAgKiBAbWVtYmVyb2YgTWVudUNvbXBvbmVudFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYmFjayhldmVudDogRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICBpZiAodGhpcy5wYXJlbnQgJiYgdGhpcy5wYXJlbnQub25DbGljaykge1xyXG4gICAgICAgICAgICB0aGlzLnBhcmVudC5vbkNsaWNrKG51bGwsIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm1lbnVDbG9zZWQuZW1pdCgpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEVtaXQgdGhlIHNlbGVjdGVkIGl0ZW1cclxuICAgICAqIEBwYXJhbSBpdGVtIFRoZSBzZWxlY3RlZCBpdGVtXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvblNlbGVjdGlvbihpdGVtOiBNZW51SXRlbSk6IHZvaWQge1xyXG4gICAgICAgIGlmIChpdGVtLmRpc3BsYXkgIT09ICdoZWFkaW5nJykge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2hhbmdlZC5lbWl0KGl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPcGVuIG9yIGNsb3NlIHRoZSBjaGlsZCBtZW51LiBXaGVuIHRoZSBjaGlsZCBtZW51IGNsb3NlcywgdGhlIHNlbGVjdGVkXHJcbiAgICAgKiBpdGVtIGlzIHJlc2V0LlxyXG4gICAgICogQG1lbWJlcm9mIE1lbnVDb21wb25lbnRcclxuICAgICAqL1xyXG4gICAgcHVibGljIHRvZ2dsZUNoaWxkTWVudShvcGVuOmJvb2xlYW4pOnZvaWQge1xyXG4gICAgICAgIGxldCBuYXZFbCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCduYXYnKTtcclxuXHJcbiAgICAgICAgaWYgKG9wZW4pIHtcclxuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBsaXN0ZW5lciBvbiB0aGUgcGFyZW50IG1lbnUgd2hlbiBhIGNoaWxkIG1lbnUgaXMgb3BlbmVkXHJcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgdG8gYXZvaWQgaW50ZXJmZXJlbmNlIGJldHdlZW4gdGhlIHBhcmVudCBhbmQgY2hpbGQgbWVudXNcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVtb3ZlS2V5ZG93bkxpc3RlbmVyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUtleWRvd25MaXN0ZW5lcigpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgaGVpZ2h0Om51bWJlciA9IG5hdkVsLm9mZnNldEhlaWdodDtcclxuICAgICAgICAgICAgbGV0IHdpZHRoOm51bWJlciA9IG5hdkVsLm9mZnNldFdpZHRoO1xyXG5cclxuICAgICAgICAgICAgLy8gSW4gb3JkZXIgdG8gYW5pbWF0ZSB0aGUgY2hpbGQgbWVudSwgd2UgbmVlZCB0byBzZXQgaGVpZ2h0IG9uIHRoZSBuYXYgZWxlbWVudFxyXG4gICAgICAgICAgICAvLyBzbyB3ZSBjYW4gYWJzb2x1dGVseSBwb3NpdGlvbiB0aGUgdHdvIG1lbnVzIGFuZCBtYWludGFpbiB0aGUgY3VycmVudCBtZW51J3MgaGVpZ2h0XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUobmF2RWwsICdoZWlnaHQnLCBgJHtoZWlnaHR9cHhgKTtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShuYXZFbCwgJ3dpZHRoJywgYCR7d2lkdGh9cHhgKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LCAnb3BlbicpO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LCAnb3Blbi1hY3RpdmUnKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBSZS1hZGQgdGhlIGxpc3RlbmVyIG9uY2UgdGhlIGNoaWxkIG1lbnUgY2xvc2VzXHJcbiAgICAgICAgICAgIHRoaXMuYWRkS2V5ZG93bkxpc3RlbmVyKCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwgJ29wZW4tYWN0aXZlJyk7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsICdvcGVuJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gUmVzZXQgdGhlIG5hdiBlbGVtZW50J3MgaGVpZ2h0IHRvIGF1dG9cclxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUobmF2RWwsICdoZWlnaHQnLCAnMTAwJScpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZCA9IG51bGw7XHJcbiAgICAgICAgICAgIH0sIG1lbnVBbmltYXRpb25TcGVlZClcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIYW5kbGUga2V5IHByZXNzZXMgdG8gbmF2aWdhdGUgdGhlIG1lbnVcclxuICAgICAqL1xyXG4gICAgcHVibGljIGtleU5hdmlnYXRlKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlS2V5TmF2KSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdBcnJvd1VwJzpcclxuICAgICAgICAgICAgICAgIGNhc2UgJ1VwJzpcclxuICAgICAgICAgICAgICAgIGNhc2UgJ0Fycm93RG93bic6XHJcbiAgICAgICAgICAgICAgICBjYXNlICdEb3duJzpcclxuICAgICAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW92ZUhpZ2hsaWdodGVkVXBPckRvd24oZXZlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxyXG4gICAgICAgICAgICAgICAgY2FzZSAnUmlnaHQnOlxyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gU2VsZWN0IHRoZSBpdGVtIGlmIGl0IGhhcyBjaGlsZCBpdGVtc1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmhpZ2hsaWdodGVkSXRlbSAmJiB0aGlzLmhpZ2hsaWdodGVkSXRlbS5pdGVtcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEl0ZW0oZXZlbnQsIHRoaXMuaGlnaGxpZ2h0ZWRJdGVtLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSAnQXJyb3dMZWZ0JzpcclxuICAgICAgICAgICAgICAgIGNhc2UgJ0xlZnQnOlxyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2xvc2UgdGhlIG1lbnUgaWYgaXQgaXMgYSBjaGlsZCBtZW51XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmFjayhldmVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgJyAnOlxyXG4gICAgICAgICAgICAgICAgY2FzZSAnU3BhY2ViYXInOlxyXG4gICAgICAgICAgICAgICAgY2FzZSAnRW50ZXInOlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFByZXZlbnQgJ2VudGVyJyBmcm9tIGRvaW5nIHdoYXRldmVyIGl0IGRvZXMgb24gdGhlIGN1cnJlbnRseSBmb2N1c2VkIGVsZW1lbnRcclxuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5oaWdobGlnaHRlZEl0ZW1JbmRleCA+IC0xICYmIHRoaXMuaGlnaGxpZ2h0ZWRJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0SXRlbShldmVudCwgdGhpcy5oaWdobGlnaHRlZEl0ZW0sIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBoZWFkZXIgaXMgaGlnaGxpZ2h0ZWRcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaGlnaGxpZ2h0ZWRJdGVtSW5kZXggPT09IC0xKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDbG9zZSB0aGUgbWVudSBpZiBpdCdzIGEgY2hpbGRcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJhY2soZXZlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2Nyb2xsIHRvIHRoZSBpdGVtIGN1cnJlbnRseSBtYXJrZWQgYXMgJ2lzLXNlbGVjdGVkJy4gV2FpdCBhIHRpY2sgZm9yIHRoZVxyXG4gICAgICogTmdDbGFzc0RpcmVjaXR2ZSBvciBOYXZJdGVtQWN0aXZlRGlyZWN0aXZlIHRvIHJlc3BvbmQgdG8gdGhlIG1vZGVsIGNoYW5nZXNcclxuICAgICAqIGFuZCB1cGRhdGUgdGhlIHZpZXcuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzY3JvbGxUb1NlbGVjdGVkSXRlbSgpOiB2b2lkIHtcclxuICAgICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxpbmtTZWxlY3RvciA9IGBsaS5pcy1zZWxlY3RlZGA7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsU2VydmljZS5zY3JvbGxUb0l0ZW0oYCMke3RoaXMuaWR9X2xpc3RgLCBsaW5rU2VsZWN0b3IpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbW92ZUhpZ2hsaWdodGVkVXBPckRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xyXG4gICAgICAgICAgICBjYXNlICdBcnJvd1VwJzpcclxuICAgICAgICAgICAgY2FzZSAnVXAnOlxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaGlnaGxpZ2h0ZWRJdGVtSW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRJdGVtSW5kZXgtLTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBTa2lwIGFueSBpbi1tZW51IGhlYWRpbmcgaXRlbXNcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5oaWdobGlnaHRlZEl0ZW1JbmRleCA+IC0xICYmIHRoaXMuaXRlbXNbdGhpcy5oaWdobGlnaHRlZEl0ZW1JbmRleF0uZGlzcGxheSA9PT0gJ2hlYWRpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRJdGVtSW5kZXgtLTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93RG93bic6XHJcbiAgICAgICAgICAgIGNhc2UgJ0Rvd24nOlxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaGlnaGxpZ2h0ZWRJdGVtSW5kZXggPCB0aGlzLml0ZW1zLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZ2hsaWdodGVkSXRlbUluZGV4Kys7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gU2tpcCBhbnkgaW4tbWVudSBoZWFkaW5nIGl0ZW1zXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaGlnaGxpZ2h0ZWRJdGVtSW5kZXggPCB0aGlzLml0ZW1zLmxlbmd0aCAtIDEgJiYgdGhpcy5pdGVtc1t0aGlzLmhpZ2hsaWdodGVkSXRlbUluZGV4XS5kaXNwbGF5ID09PSAnaGVhZGluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRlZEl0ZW1JbmRleCsrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmhpZ2hsaWdodGVkSXRlbUluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgLy8gU3RvcmUgdGhlIGl0ZW0gYXQgdGhlIGN1cnJlbnQgaGlnaGxpZ2h0IGluZGV4XHJcbiAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRJdGVtID0gdGhpcy5pdGVtc1t0aGlzLmhpZ2hsaWdodGVkSXRlbUluZGV4XTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmhpZ2hsaWdodGVkSXRlbSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2Nyb2xsVG9IaWdobGlnaHRlZEl0ZW0oKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuXHQgKiBTY3JvbGwgdG8gdGhlIHNwZWNpZmllZCBtZW51IGl0ZW0uXHJcbiAgICogSWYgbm8gaXRlbSBpcyBwcm92aWRlZCwgaXQgd2lsbCBzY3JvbGwgdG8gdGhlIGZpcnN0IGl0ZW0uXHJcblx0ICpcclxuICAgKiBAcGFyYW0gaXRlbSBUaGUgbWVudSBpdGVtIHRvIHNjcm9sbCB0by5cclxuXHQgKiBAbWVtYmVyb2YgTWVudUNvbXBvbmVudFxyXG5cdCAqL1xyXG5cdHByaXZhdGUgc2Nyb2xsTWVudShpdGVtPzogTWVudUl0ZW0gfCBudWxsKTogdm9pZCB7XHJcblx0XHRpZiAodGhpcy5pdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGl0ZW0gPSBpdGVtID8gaXRlbSA6IHRoaXMuaXRlbXNbMF07XHJcbiAgICAgICAgICAgIGxldCBpdGVtSW5kZXggPSB0aGlzLmZpbmRJdGVtSW5kZXgoaXRlbSk7XHJcblxyXG5cdFx0XHRpZiAodGhpcy5pZCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGl0ZW1TZWxlY3RvciA9IGl0ZW0uaWQgPyBgIyR7aXRlbS5pZH1gIDogYCMke3RoaXMuaWR9X2l0ZW0ke2l0ZW1JbmRleH1gO1xyXG5cdFx0XHRcdHRoaXMuc2Nyb2xsU2VydmljZS5zY3JvbGxJdGVtQ2VudGVyZWQoYCMke3RoaXMuaWR9X2xpc3RgLCBpdGVtU2VsZWN0b3IpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzY3JvbGxUb0hpZ2hsaWdodGVkSXRlbSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNjcm9sbE1lbnUodGhpcy5oaWdobGlnaHRlZEl0ZW0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG5cdCAqIEZpbmQgYSBnaXZlbiBpdGVtJ3MgaW5kZXggaW4gdGhlIGZpbHRlcmVkIGl0ZW1zIGFycmF5LlxyXG5cdCAqXHJcblx0ICogUmV0dXJucyAtMSBpZiBub3QgZm91bmRcclxuXHQgKiBAcGFyYW0gaXRlbVRvRmluZCBUaGUgbWF0Y2hpbmcgaXRlbSB0byBmaW5kIGluIHRoZSBpdGVtcyBhcnJheS5cclxuXHQgKiBAbWVtYmVyb2YgTWVudUNvbXBvbmVudFxyXG5cdCAqL1xyXG5cdHByaXZhdGUgZmluZEl0ZW1JbmRleChpdGVtVG9GaW5kPzogTWVudUl0ZW0gfCBudWxsKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAoaXRlbVRvRmluZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pdGVtcy5maW5kSW5kZXgoaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5sYWJlbCA9PT0gKDxNZW51SXRlbT5pdGVtVG9GaW5kKS5sYWJlbDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFkZEtleWRvd25MaXN0ZW5lcigpOiB2b2lkIHtcclxuICAgICAgICAvLyBPbmx5IGF0dGVtcHQgdG8gYWRkIHRoZSBsaXN0ZW5lciBpZiBrZXlib2FyZCBuYXYgaXMgZW5hYmxlZFxyXG4gICAgICAgIGlmICh0aGlzLmVuYWJsZUtleU5hdikge1xyXG4gICAgICAgICAgICAvLyByZW5kZXJlci5saXN0ZW4gYWRkcyB0aGUgbGlzdGVuZXIgYW5kIHJldHVybnMgYSBmdW5jdGlvbiB0byByZW1vdmUgaXQgZnJvbSB0aGUgcmVuZGVyZXIuXHJcbiAgICAgICAgICAgIC8vIFRoZSBsaXN0ZW5lciByZW1haW5zIGFjdGl2ZSB1bnRpbCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC5cclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVLZXlkb3duTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbignZG9jdW1lbnQnLCAna2V5ZG93bicsIChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4gdGhpcy5rZXlOYXZpZ2F0ZShldmVudCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIG1lbnUgaXRlbSBpZHMgdXNpbmcgaXRzIGluZGV4IGlmIGl0ZW0gZG9lc24ndCBhbHJlYWR5IGhhdmUgb25lXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgc2V0SXRlbUlkcygpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5pdGVtcykge1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpdGVtLmlkID0gaXRlbS5pZCA/IGl0ZW0uaWQgOiB0aGlzLmlkICsgJ19pdGVtJyArIGluZGV4O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -26,6 +26,11 @@ export class TreeComponent {
26
26
  this.menuStatus = new Overlay('hasData');
27
27
  /** The menu item template */
28
28
  this.menuTemplateType = "checkAndLabel";
29
+ /**
30
+ * When true, the space for the icon is preserved for menu items that do not have icons.
31
+ * Only applicable for iconAndLabel menus. Not applicable to hierarchy trees.
32
+ */
33
+ this.preserveIconSpace = false;
29
34
  /** Emits the item currently selected item in the tree */
30
35
  this.treeSelection = new EventEmitter();
31
36
  /** Emits when a hierarchy tree item is expanded as a hook to load the item's children */
@@ -65,7 +70,7 @@ export class TreeComponent {
65
70
  TreeComponent.decorators = [
66
71
  { type: Component, args: [{
67
72
  selector: 'ec-tree',
68
- template: "<header *ngIf=\"!hideTreeHeader\"\r\n class=\"flex-shrink d-flex align-items-center border-bottom bg-content pl-2 pr-1\">\r\n <h2 id=\"{{id}}_title\"\r\n class=\"flex-grow mr-2 text-heading-1\">{{treeTitle | translate}}</h2>\r\n <ec-dropdown *ngIf=\"menuItems?.length\"\r\n id=\"{{id}}_dropdown\"\r\n class=\"flex-shrink\"\r\n icon=\"icon-menu\"\r\n [menuTemplateType]=\"menuTemplateType\"\r\n menuPosition=\"left\"\r\n [status]=\"menuStatus\"\r\n [popupFixed]=\"true\"\r\n [showArrow]=\"false\"\r\n [menuMinWidth]=\"240\"\r\n [items]=\"menuItems\">\r\n </ec-dropdown>\r\n</header>\r\n\r\n<div class=\"flex-grow d-flex\"\r\n ecOverlay\r\n [status]=\"status?.status\"\r\n [displayAsMask]=\"true\">\r\n <ng-container *ngIf=\"type === 'menu'\">\r\n <ec-menu [id]=\"id\"\r\n [items]=\"treeItems\"\r\n [templateType]=\"templateType\"\r\n [maintainSelectedItem]=\"treeMenuMaintainSelectedItem\"\r\n [truncateItems]=\"true\"\r\n (selectedChanged)=\"onItemSelected($event)\"\r\n [customMenuTemplate]=\"customTreeMenuTemplate ? customTreeMenuTemplate : undefined\"\r\n class=\"flex-grow\">\r\n </ec-menu>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"type === 'hierarchy'\">\r\n <ec-hierarchy-tree [id]=\"id\"\r\n [rootNode]=\"treeHierarchy\"\r\n [hideRootNode]=\"treeHierarchyHideRootNode\"\r\n (getItemChildren)=\"onHierarchyGetItemChildren($event)\"\r\n (itemSelected)=\"onItemSelected($event)\"\r\n class=\"flex-grow d-flex\">\r\n </ec-hierarchy-tree>\r\n </ng-container>\r\n</div>",
73
+ template: "<header *ngIf=\"!hideTreeHeader\"\r\n class=\"flex-shrink d-flex align-items-center border-bottom bg-content pl-2 pr-1\">\r\n <h2 id=\"{{id}}_title\"\r\n class=\"flex-grow mr-2 text-heading-1\">{{treeTitle | translate}}</h2>\r\n <ec-dropdown *ngIf=\"menuItems?.length\"\r\n id=\"{{id}}_dropdown\"\r\n class=\"flex-shrink\"\r\n icon=\"icon-menu\"\r\n [menuTemplateType]=\"menuTemplateType\"\r\n menuPosition=\"left\"\r\n [status]=\"menuStatus\"\r\n [popupFixed]=\"true\"\r\n [showArrow]=\"false\"\r\n [menuMinWidth]=\"240\"\r\n [items]=\"menuItems\">\r\n </ec-dropdown>\r\n</header>\r\n\r\n<div class=\"flex-grow d-flex\"\r\n ecOverlay\r\n [status]=\"status?.status\"\r\n [displayAsMask]=\"true\">\r\n <ng-container *ngIf=\"type === 'menu'\">\r\n <ec-menu [id]=\"id\"\r\n [items]=\"treeItems\"\r\n [templateType]=\"templateType\"\r\n [maintainSelectedItem]=\"treeMenuMaintainSelectedItem\"\r\n [truncateItems]=\"true\"\r\n (selectedChanged)=\"onItemSelected($event)\"\r\n [customMenuTemplate]=\"customTreeMenuTemplate ? customTreeMenuTemplate : undefined\"\r\n [preserveIconSpace]=\"preserveIconSpace\"\r\n class=\"flex-grow\">\r\n </ec-menu>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"type === 'hierarchy'\">\r\n <ec-hierarchy-tree [id]=\"id\"\r\n [rootNode]=\"treeHierarchy\"\r\n [hideRootNode]=\"treeHierarchyHideRootNode\"\r\n (getItemChildren)=\"onHierarchyGetItemChildren($event)\"\r\n (itemSelected)=\"onItemSelected($event)\"\r\n class=\"flex-grow d-flex\">\r\n </ec-hierarchy-tree>\r\n </ng-container>\r\n</div>",
69
74
  styles: [":host{display:flex;flex-direction:column}header{height:3rem}ec-dropdown.fill{height:3rem;width:3rem}"]
70
75
  },] }
71
76
  ];
@@ -85,10 +90,11 @@ TreeComponent.propDecorators = {
85
90
  menuItems: [{ type: Input }],
86
91
  menuStatus: [{ type: Input }],
87
92
  menuTemplateType: [{ type: Input }],
93
+ preserveIconSpace: [{ type: Input }],
88
94
  treeSelection: [{ type: Output }],
89
95
  getTreeItemChildren: [{ type: Output }],
90
96
  menuComponent: [{ type: ViewChild, args: [MenuComponent,] }],
91
97
  hierarchyTreeComponent: [{ type: ViewChild, args: [HierarchyTreeComponent,] }],
92
98
  templateType: [{ type: Input }]
93
99
  };
94
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvZGlzcGxheS90cmVlL3RyZWUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUcsT0FBTyxFQUFFLGFBQWEsRUFBOEIsTUFBTSxvQ0FBb0MsQ0FBQztBQUMvRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDNUQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDOUYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBU2pFLE1BQU0sT0FBTyxhQUFhO0lBeUV4QjtRQXZFQSxrREFBa0Q7UUFDbkIsV0FBTSxHQUFXLEVBQUUsQ0FBQztRQWMzQyxRQUFHLEdBQVcsRUFBRSxDQUFDO1FBRXpCLCtDQUErQztRQUMvQixjQUFTLEdBQVcsRUFBRSxDQUFDO1FBRXZDLDZDQUE2QztRQUM3QixtQkFBYyxHQUFhLEtBQUssQ0FBQztRQVdqRDs7OztXQUlHO1FBQ2EsaUNBQTRCLEdBQVksSUFBSSxDQUFDO1FBSzdELG1CQUFtQjtRQUNILFdBQU0sR0FBYSxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUUxRCw4RUFBOEU7UUFDOUQsU0FBSSxHQUFjLFdBQVcsQ0FBQztRQUs5QyxpQ0FBaUM7UUFDakIsZUFBVSxHQUFhLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTlELDZCQUE2QjtRQUNiLHFCQUFnQixHQUFzQixlQUFlLENBQUM7UUFFdEUseURBQXlEO1FBQ3hDLGtCQUFhLEdBQTJDLElBQUksWUFBWSxFQUFFLENBQUM7UUFFNUYseUZBQXlGO1FBQ3hFLHdCQUFtQixHQUFnQyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBUXZFLGlCQUFZLEdBQXFCLE9BQU8sQ0FBQztJQUV6QyxDQUFDO0lBcEVqQjs7O09BR0c7SUFDSCxJQUNXLEVBQUUsQ0FBQyxLQUFhO1FBQ3pCLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ3RCLENBQUM7SUFBQSxDQUFDO0lBQ0YsSUFBVyxFQUFFO1FBQ1gsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ2xCLENBQUM7SUEyREQseUNBQXlDO0lBQ2xDLGNBQWMsQ0FBQyxJQUE4QjtRQUNsRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsK0VBQStFO0lBQ3hFLDBCQUEwQixDQUFDLElBQW1CO1FBQ25ELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELDBEQUEwRDtJQUNuRCxvQkFBb0I7UUFDekIsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztTQUMzQztRQUVELElBQUksSUFBSSxDQUFDLHNCQUFzQixFQUFFO1lBQy9CLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1NBQ3BEO0lBQ0gsQ0FBQzs7O1lBbkdGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsU0FBUztnQkFDbkIsNjBEQUFvQzs7YUFFckM7Ozs7cUJBSUUsV0FBVyxTQUFDLFNBQVM7aUJBTXJCLEtBQUs7d0JBV0wsS0FBSzs2QkFHTCxLQUFLO3dCQUdMLEtBQUs7d0NBR0wsS0FBSzs0QkFHTCxLQUFLOzJDQU9MLEtBQUs7cUNBR0wsS0FBSztxQkFHTCxLQUFLO21CQUdMLEtBQUs7d0JBR0wsS0FBSzt5QkFHTCxLQUFLOytCQUdMLEtBQUs7NEJBR0wsTUFBTTtrQ0FHTixNQUFNOzRCQUdOLFNBQVMsU0FBQyxhQUFhO3FDQUd2QixTQUFTLFNBQUMsc0JBQXNCOzJCQUVoQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgSG9zdEJpbmRpbmcsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBWaWV3Q2hpbGQsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1lbnVDb21wb25lbnQsIE1lbnVJdGVtLCBNZW51VGVtcGxhdGVUeXBlIH0gZnJvbSAnLi4vLi4vY29udHJvbHMvbWVudS9tZW51LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEhpZXJhcmNoeUl0ZW0gfSBmcm9tICcuLi9oaWVyYXJjaHkvaGllcmFyY2h5LWJhc2UnO1xyXG5pbXBvcnQgeyBIaWVyYXJjaHlUcmVlQ29tcG9uZW50IH0gZnJvbSAnLi4vaGllcmFyY2h5L2hpZXJhcmNoeS10cmVlL2hpZXJhcmNoeS10cmVlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE92ZXJsYXkgfSBmcm9tICcuLi92aWV3LW92ZXJsYXkvdmlldy1vdmVybGF5LmNvbXBvbmVudCc7XHJcblxyXG5leHBvcnQgdHlwZSBUcmVlVHlwZSA9ICdoaWVyYXJjaHknIHwgJ21lbnUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdlYy10cmVlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdHJlZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdHJlZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUcmVlQ29tcG9uZW50IHtcclxuXHJcbiAgLyoqIFRoZSB2YWx1ZSBvZiB0aGUgaG9zdCBlbGVtZW50cyBpZCBhdHRyaWJ1dGUgKi9cclxuICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKSBwdWJsaWMgYXR0cklkOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIElEIG9mIHRoZSBjb21wb25lbnQsIGJvdW5kIHRvIHRoZSBob3N0IGVsZW1lbnQncyBpZCBhdHRyaWJ1dGUgYW5kIHBhc3NlZFxyXG4gICAqIHRvIGNoaWxkIGNvbXBvbmVudHNcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgaWQodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5faWQgPSB2YWx1ZTtcclxuICAgIHRoaXMuYXR0cklkID0gdmFsdWU7XHJcbiAgfTtcclxuICBwdWJsaWMgZ2V0IGlkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5faWQ7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2lkOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLyoqIFRoZSB0cmVlJ3MgdGl0bGUgZGlzcGxheWVkIGluIHRoZSBoZWFkZXIgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgdHJlZVRpdGxlOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLyoqIEhpZGVzIHRoZSB0cmVlIGhlYWRlciB3aGVuIHNldCB0byB0cnVlICovXHJcbiAgQElucHV0KCkgcHVibGljIGhpZGVUcmVlSGVhZGVyPzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKiogSXRlbXMgdG8gZGlzcGxheSBpbiB0aGUgdHJlZSB3aGVuIHR5cGUgaXMgJ21lbnUnICovXHJcbiAgQElucHV0KCkgcHVibGljIHRyZWVJdGVtcz86IE1lbnVJdGVtW107XHJcblxyXG4gIC8qKiBIaWRlIHRoZSByb290IHRyZWUgaXRlbSB3aGVuIHR5cGUgaXMgJ2hpZXJhcmNoeScgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgdHJlZUhpZXJhcmNoeUhpZGVSb290Tm9kZT86IGJvb2xlYW47XHJcblxyXG4gIC8qKiBJdGVtcyB0byBkaXNwbGF5IGluIHRoZSB0cmVlIHdoZW4gdHlwZSBpcyAnaGllcmFyY2h5JyAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyB0cmVlSGllcmFyY2h5PzogSGllcmFyY2h5SXRlbTtcclxuXHJcbiAgLyoqIFVzZWQgd2hlbiB0aGUgdHJlZSBpcyBpbiBtZW51IG1vZGUgdG8gdGVsbCB0aGUgbWVudSBpZiBpdCBzaG91bGQgbWFpbnRhaW4gdGhlIHNlbGVjdGVkIGl0ZW1cclxuICAgKiAgVXNlZnVsIGluIHNpZGUgbmF2IGNvbXBvbmVudHMgd2hlcmUgdGhpcyB0cmVlIGNvbXBvbmVudCBtYXkgZXhpc3QgYWxvbmdzaWRlIG90aGVyIHRyZWVzIG9yIG1lbnVzXHJcbiAgICogIHVzZWQgZm9yIG5hdmlnYXRpb24uIElmIHRoaXMgdHJlZSBpcyBpbiBtZW51IG1vZGUgeW91IHdvdWxkIHdhbnQgdGhpcyBzZXQgdG8gZmFsc2Ugc28gd2hlbiB5b3Ugc2VsZWN0IGFuIGl0ZW1cclxuICAgKiAgZnJvbSBhIHNpYmxpbmcgbmF2aWdhdGlvbiBlbGVtZW50IHRoZSBzZWxlY3Rpb24gd2lsbCBub3QgYmUgbWFpbnRhaW5lZC5cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgdHJlZU1lbnVNYWludGFpblNlbGVjdGVkSXRlbTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8qKiBVc2VkIHdoZW4gYSBjdXN0b20gdGVtcGxhdGUgaXMgbmVlZGVkIGZvciB0aGUgbWVudSBpdGVtcyB3aGVuIHRoZSB0cmVlIGlzIGluIG1lbnUgbW9kZSAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBjdXN0b21UcmVlTWVudVRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgLyoqIFRyZWUgb3ZlcmxheSAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBzdGF0dXM/OiBPdmVybGF5ID0gbmV3IE92ZXJsYXkoJ2hhc0RhdGEnKTtcclxuXHJcbiAgLyoqIERpc3BsYXkgdGhlIHRyZWUgaXRlbXMgd2l0aCBhIE1lbnVDb21wb25lbnQgb3IgYSBIaWVyYXJjaHlUcmVlQ29tcG9uZW50ICovXHJcbiAgQElucHV0KCkgcHVibGljIHR5cGU/OiBUcmVlVHlwZSA9ICdoaWVyYXJjaHknO1xyXG5cclxuICAvKiogSXRlbXMgdG8gZGlzcGxheSBpbiB0aGUgZHJvcGRvd24gbWVudSAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBtZW51SXRlbXM/OiBNZW51SXRlbVtdO1xyXG5cclxuICAvKiogVHJlZSBkcm9wZG93biBtZW51IG92ZXJsYXkgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgbWVudVN0YXR1cz86IE92ZXJsYXkgPSBuZXcgT3ZlcmxheSgnaGFzRGF0YScpO1xyXG5cclxuICAvKiogVGhlIG1lbnUgaXRlbSB0ZW1wbGF0ZSAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBtZW51VGVtcGxhdGVUeXBlPzogTWVudVRlbXBsYXRlVHlwZSA9IFwiY2hlY2tBbmRMYWJlbFwiO1xyXG5cclxuICAvKiogRW1pdHMgdGhlIGl0ZW0gY3VycmVudGx5IHNlbGVjdGVkIGl0ZW0gaW4gdGhlIHRyZWUgKi9cclxuICBAT3V0cHV0KCkgcHVibGljIHRyZWVTZWxlY3Rpb246IEV2ZW50RW1pdHRlcjxNZW51SXRlbSB8IEhpZXJhcmNoeUl0ZW0+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvKiogRW1pdHMgd2hlbiBhIGhpZXJhcmNoeSB0cmVlIGl0ZW0gaXMgZXhwYW5kZWQgYXMgYSBob29rIHRvIGxvYWQgdGhlIGl0ZW0ncyBjaGlsZHJlbiAqL1xyXG4gIEBPdXRwdXQoKSBwdWJsaWMgZ2V0VHJlZUl0ZW1DaGlsZHJlbjogRXZlbnRFbWl0dGVyPEhpZXJhcmNoeUl0ZW0+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvKiogUmVmZXJlbmNlIHRvIHRoZSBNZW51Q29tcG9uZW50IGluc3RhbmNlIGluIHRoZSB0ZW1wbGF0ZSAqL1xyXG4gIEBWaWV3Q2hpbGQoTWVudUNvbXBvbmVudCkgcHVibGljIG1lbnVDb21wb25lbnQ/OiBNZW51Q29tcG9uZW50O1xyXG5cclxuICAvKiogUmVmZXJlbmNlIHRvIHRoZSBIaWVyYXJjaHlUcmVlQ29tcG9uZW50IGluc3RhbmNlIGluIHRoZSB0ZW1wbGF0ZSAqL1xyXG4gIEBWaWV3Q2hpbGQoSGllcmFyY2h5VHJlZUNvbXBvbmVudCkgcHVibGljIGhpZXJhcmNoeVRyZWVDb21wb25lbnQ/OiBIaWVyYXJjaHlUcmVlQ29tcG9uZW50O1xyXG5cclxuICBASW5wdXQoKSBwdWJsaWMgdGVtcGxhdGVUeXBlOiBNZW51VGVtcGxhdGVUeXBlID0gJ2xhYmVsJztcclxuICBcclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICAvKiogRW1pdHMgd2hlbiBhIHRyZWUgaXRlbSBpcyBzZWxlY3RlZCAqL1xyXG4gIHB1YmxpYyBvbkl0ZW1TZWxlY3RlZChpdGVtOiBNZW51SXRlbSB8IEhpZXJhcmNoeUl0ZW0pIHtcclxuICAgIHRoaXMudHJlZVNlbGVjdGlvbi5lbWl0KGl0ZW0pO1xyXG4gIH1cclxuXHJcbiAgLyoqIEVtaXRzIHdoZW4gYSBoaWVyYXJjaHkgdHJlZSBpdGVtIGlzIGV4cGFuZGVkIHRvIGxvYWQgdGhlIGl0ZW0ncyBjaGlsZHJlbiAqL1xyXG4gIHB1YmxpYyBvbkhpZXJhcmNoeUdldEl0ZW1DaGlsZHJlbihpdGVtOiBIaWVyYXJjaHlJdGVtKSB7XHJcbiAgICB0aGlzLmdldFRyZWVJdGVtQ2hpbGRyZW4uZW1pdChpdGVtKTtcclxuICB9XHJcblxyXG4gIC8qKiBTY3JvbGwgdG8gdGhlIHRyZWUgaXRlbSB0aGF0IGlzIGN1cnJlbnRseSBzZWxlY3RlZC4gKi9cclxuICBwdWJsaWMgc2Nyb2xsVG9TZWxlY3RlZEl0ZW0oKSB7XHJcbiAgICBpZiAodGhpcy5tZW51Q29tcG9uZW50KSB7XHJcbiAgICAgIHRoaXMubWVudUNvbXBvbmVudC5zY3JvbGxUb1NlbGVjdGVkSXRlbSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmhpZXJhcmNoeVRyZWVDb21wb25lbnQpIHtcclxuICAgICAgdGhpcy5oaWVyYXJjaHlUcmVlQ29tcG9uZW50LnNjcm9sbFRvU2VsZWN0ZWRJdGVtKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvZGlzcGxheS90cmVlL3RyZWUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUcsT0FBTyxFQUFFLGFBQWEsRUFBOEIsTUFBTSxvQ0FBb0MsQ0FBQztBQUMvRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDNUQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDOUYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBU2pFLE1BQU0sT0FBTyxhQUFhO0lBK0V4QjtRQTdFQSxrREFBa0Q7UUFDbkIsV0FBTSxHQUFXLEVBQUUsQ0FBQztRQWMzQyxRQUFHLEdBQVcsRUFBRSxDQUFDO1FBRXpCLCtDQUErQztRQUMvQixjQUFTLEdBQVcsRUFBRSxDQUFDO1FBRXZDLDZDQUE2QztRQUM3QixtQkFBYyxHQUFhLEtBQUssQ0FBQztRQVdqRDs7OztXQUlHO1FBQ2EsaUNBQTRCLEdBQVksSUFBSSxDQUFDO1FBSzdELG1CQUFtQjtRQUNILFdBQU0sR0FBYSxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUUxRCw4RUFBOEU7UUFDOUQsU0FBSSxHQUFjLFdBQVcsQ0FBQztRQUs5QyxpQ0FBaUM7UUFDakIsZUFBVSxHQUFhLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTlELDZCQUE2QjtRQUNiLHFCQUFnQixHQUFzQixlQUFlLENBQUM7UUFFdEU7OztXQUdHO1FBQ2Esc0JBQWlCLEdBQVksS0FBSyxDQUFDO1FBRW5ELHlEQUF5RDtRQUN4QyxrQkFBYSxHQUEyQyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRTVGLHlGQUF5RjtRQUN4RSx3QkFBbUIsR0FBZ0MsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQVF2RSxpQkFBWSxHQUFxQixPQUFPLENBQUM7SUFFekMsQ0FBQztJQTFFakI7OztPQUdHO0lBQ0gsSUFDVyxFQUFFLENBQUMsS0FBYTtRQUN6QixJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQztRQUNqQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBQUEsQ0FBQztJQUNGLElBQVcsRUFBRTtRQUNYLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNsQixDQUFDO0lBaUVELHlDQUF5QztJQUNsQyxjQUFjLENBQUMsSUFBOEI7UUFDbEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELCtFQUErRTtJQUN4RSwwQkFBMEIsQ0FBQyxJQUFtQjtRQUNuRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCwwREFBMEQ7SUFDbkQsb0JBQW9CO1FBQ3pCLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLG9CQUFvQixFQUFFLENBQUM7U0FDM0M7UUFFRCxJQUFJLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtZQUMvQixJQUFJLENBQUMsc0JBQXNCLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztTQUNwRDtJQUNILENBQUM7OztZQXpHRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLFNBQVM7Z0JBQ25CLHU0REFBb0M7O2FBRXJDOzs7O3FCQUlFLFdBQVcsU0FBQyxTQUFTO2lCQU1yQixLQUFLO3dCQVdMLEtBQUs7NkJBR0wsS0FBSzt3QkFHTCxLQUFLO3dDQUdMLEtBQUs7NEJBR0wsS0FBSzsyQ0FPTCxLQUFLO3FDQUdMLEtBQUs7cUJBR0wsS0FBSzttQkFHTCxLQUFLO3dCQUdMLEtBQUs7eUJBR0wsS0FBSzsrQkFHTCxLQUFLO2dDQU1MLEtBQUs7NEJBR0wsTUFBTTtrQ0FHTixNQUFNOzRCQUdOLFNBQVMsU0FBQyxhQUFhO3FDQUd2QixTQUFTLFNBQUMsc0JBQXNCOzJCQUVoQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgSG9zdEJpbmRpbmcsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBWaWV3Q2hpbGQsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1lbnVDb21wb25lbnQsIE1lbnVJdGVtLCBNZW51VGVtcGxhdGVUeXBlIH0gZnJvbSAnLi4vLi4vY29udHJvbHMvbWVudS9tZW51LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEhpZXJhcmNoeUl0ZW0gfSBmcm9tICcuLi9oaWVyYXJjaHkvaGllcmFyY2h5LWJhc2UnO1xyXG5pbXBvcnQgeyBIaWVyYXJjaHlUcmVlQ29tcG9uZW50IH0gZnJvbSAnLi4vaGllcmFyY2h5L2hpZXJhcmNoeS10cmVlL2hpZXJhcmNoeS10cmVlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE92ZXJsYXkgfSBmcm9tICcuLi92aWV3LW92ZXJsYXkvdmlldy1vdmVybGF5LmNvbXBvbmVudCc7XHJcblxyXG5leHBvcnQgdHlwZSBUcmVlVHlwZSA9ICdoaWVyYXJjaHknIHwgJ21lbnUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdlYy10cmVlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdHJlZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdHJlZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUcmVlQ29tcG9uZW50IHtcclxuXHJcbiAgLyoqIFRoZSB2YWx1ZSBvZiB0aGUgaG9zdCBlbGVtZW50cyBpZCBhdHRyaWJ1dGUgKi9cclxuICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKSBwdWJsaWMgYXR0cklkOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIElEIG9mIHRoZSBjb21wb25lbnQsIGJvdW5kIHRvIHRoZSBob3N0IGVsZW1lbnQncyBpZCBhdHRyaWJ1dGUgYW5kIHBhc3NlZFxyXG4gICAqIHRvIGNoaWxkIGNvbXBvbmVudHNcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgaWQodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5faWQgPSB2YWx1ZTtcclxuICAgIHRoaXMuYXR0cklkID0gdmFsdWU7XHJcbiAgfTtcclxuICBwdWJsaWMgZ2V0IGlkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5faWQ7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2lkOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLyoqIFRoZSB0cmVlJ3MgdGl0bGUgZGlzcGxheWVkIGluIHRoZSBoZWFkZXIgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgdHJlZVRpdGxlOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLyoqIEhpZGVzIHRoZSB0cmVlIGhlYWRlciB3aGVuIHNldCB0byB0cnVlICovXHJcbiAgQElucHV0KCkgcHVibGljIGhpZGVUcmVlSGVhZGVyPzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKiogSXRlbXMgdG8gZGlzcGxheSBpbiB0aGUgdHJlZSB3aGVuIHR5cGUgaXMgJ21lbnUnICovXHJcbiAgQElucHV0KCkgcHVibGljIHRyZWVJdGVtcz86IE1lbnVJdGVtW107XHJcblxyXG4gIC8qKiBIaWRlIHRoZSByb290IHRyZWUgaXRlbSB3aGVuIHR5cGUgaXMgJ2hpZXJhcmNoeScgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgdHJlZUhpZXJhcmNoeUhpZGVSb290Tm9kZT86IGJvb2xlYW47XHJcblxyXG4gIC8qKiBJdGVtcyB0byBkaXNwbGF5IGluIHRoZSB0cmVlIHdoZW4gdHlwZSBpcyAnaGllcmFyY2h5JyAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyB0cmVlSGllcmFyY2h5PzogSGllcmFyY2h5SXRlbTtcclxuXHJcbiAgLyoqIFVzZWQgd2hlbiB0aGUgdHJlZSBpcyBpbiBtZW51IG1vZGUgdG8gdGVsbCB0aGUgbWVudSBpZiBpdCBzaG91bGQgbWFpbnRhaW4gdGhlIHNlbGVjdGVkIGl0ZW1cclxuICAgKiAgVXNlZnVsIGluIHNpZGUgbmF2IGNvbXBvbmVudHMgd2hlcmUgdGhpcyB0cmVlIGNvbXBvbmVudCBtYXkgZXhpc3QgYWxvbmdzaWRlIG90aGVyIHRyZWVzIG9yIG1lbnVzXHJcbiAgICogIHVzZWQgZm9yIG5hdmlnYXRpb24uIElmIHRoaXMgdHJlZSBpcyBpbiBtZW51IG1vZGUgeW91IHdvdWxkIHdhbnQgdGhpcyBzZXQgdG8gZmFsc2Ugc28gd2hlbiB5b3Ugc2VsZWN0IGFuIGl0ZW1cclxuICAgKiAgZnJvbSBhIHNpYmxpbmcgbmF2aWdhdGlvbiBlbGVtZW50IHRoZSBzZWxlY3Rpb24gd2lsbCBub3QgYmUgbWFpbnRhaW5lZC5cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgdHJlZU1lbnVNYWludGFpblNlbGVjdGVkSXRlbTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8qKiBVc2VkIHdoZW4gYSBjdXN0b20gdGVtcGxhdGUgaXMgbmVlZGVkIGZvciB0aGUgbWVudSBpdGVtcyB3aGVuIHRoZSB0cmVlIGlzIGluIG1lbnUgbW9kZSAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBjdXN0b21UcmVlTWVudVRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgLyoqIFRyZWUgb3ZlcmxheSAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBzdGF0dXM/OiBPdmVybGF5ID0gbmV3IE92ZXJsYXkoJ2hhc0RhdGEnKTtcclxuXHJcbiAgLyoqIERpc3BsYXkgdGhlIHRyZWUgaXRlbXMgd2l0aCBhIE1lbnVDb21wb25lbnQgb3IgYSBIaWVyYXJjaHlUcmVlQ29tcG9uZW50ICovXHJcbiAgQElucHV0KCkgcHVibGljIHR5cGU/OiBUcmVlVHlwZSA9ICdoaWVyYXJjaHknO1xyXG5cclxuICAvKiogSXRlbXMgdG8gZGlzcGxheSBpbiB0aGUgZHJvcGRvd24gbWVudSAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBtZW51SXRlbXM/OiBNZW51SXRlbVtdO1xyXG5cclxuICAvKiogVHJlZSBkcm9wZG93biBtZW51IG92ZXJsYXkgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgbWVudVN0YXR1cz86IE92ZXJsYXkgPSBuZXcgT3ZlcmxheSgnaGFzRGF0YScpO1xyXG5cclxuICAvKiogVGhlIG1lbnUgaXRlbSB0ZW1wbGF0ZSAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBtZW51VGVtcGxhdGVUeXBlPzogTWVudVRlbXBsYXRlVHlwZSA9IFwiY2hlY2tBbmRMYWJlbFwiO1xyXG5cclxuICAvKiogXHJcbiAgICogV2hlbiB0cnVlLCB0aGUgc3BhY2UgZm9yIHRoZSBpY29uIGlzIHByZXNlcnZlZCBmb3IgbWVudSBpdGVtcyB0aGF0IGRvIG5vdCBoYXZlIGljb25zLlxyXG4gICAqIE9ubHkgYXBwbGljYWJsZSBmb3IgaWNvbkFuZExhYmVsIG1lbnVzLiBOb3QgYXBwbGljYWJsZSB0byBoaWVyYXJjaHkgdHJlZXMuXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIHByZXNlcnZlSWNvblNwYWNlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKiBFbWl0cyB0aGUgaXRlbSBjdXJyZW50bHkgc2VsZWN0ZWQgaXRlbSBpbiB0aGUgdHJlZSAqL1xyXG4gIEBPdXRwdXQoKSBwdWJsaWMgdHJlZVNlbGVjdGlvbjogRXZlbnRFbWl0dGVyPE1lbnVJdGVtIHwgSGllcmFyY2h5SXRlbT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIC8qKiBFbWl0cyB3aGVuIGEgaGllcmFyY2h5IHRyZWUgaXRlbSBpcyBleHBhbmRlZCBhcyBhIGhvb2sgdG8gbG9hZCB0aGUgaXRlbSdzIGNoaWxkcmVuICovXHJcbiAgQE91dHB1dCgpIHB1YmxpYyBnZXRUcmVlSXRlbUNoaWxkcmVuOiBFdmVudEVtaXR0ZXI8SGllcmFyY2h5SXRlbT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIC8qKiBSZWZlcmVuY2UgdG8gdGhlIE1lbnVDb21wb25lbnQgaW5zdGFuY2UgaW4gdGhlIHRlbXBsYXRlICovXHJcbiAgQFZpZXdDaGlsZChNZW51Q29tcG9uZW50KSBwdWJsaWMgbWVudUNvbXBvbmVudD86IE1lbnVDb21wb25lbnQ7XHJcblxyXG4gIC8qKiBSZWZlcmVuY2UgdG8gdGhlIEhpZXJhcmNoeVRyZWVDb21wb25lbnQgaW5zdGFuY2UgaW4gdGhlIHRlbXBsYXRlICovXHJcbiAgQFZpZXdDaGlsZChIaWVyYXJjaHlUcmVlQ29tcG9uZW50KSBwdWJsaWMgaGllcmFyY2h5VHJlZUNvbXBvbmVudD86IEhpZXJhcmNoeVRyZWVDb21wb25lbnQ7XHJcblxyXG4gIEBJbnB1dCgpIHB1YmxpYyB0ZW1wbGF0ZVR5cGU6IE1lbnVUZW1wbGF0ZVR5cGUgPSAnbGFiZWwnO1xyXG4gIFxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gIC8qKiBFbWl0cyB3aGVuIGEgdHJlZSBpdGVtIGlzIHNlbGVjdGVkICovXHJcbiAgcHVibGljIG9uSXRlbVNlbGVjdGVkKGl0ZW06IE1lbnVJdGVtIHwgSGllcmFyY2h5SXRlbSkge1xyXG4gICAgdGhpcy50cmVlU2VsZWN0aW9uLmVtaXQoaXRlbSk7XHJcbiAgfVxyXG5cclxuICAvKiogRW1pdHMgd2hlbiBhIGhpZXJhcmNoeSB0cmVlIGl0ZW0gaXMgZXhwYW5kZWQgdG8gbG9hZCB0aGUgaXRlbSdzIGNoaWxkcmVuICovXHJcbiAgcHVibGljIG9uSGllcmFyY2h5R2V0SXRlbUNoaWxkcmVuKGl0ZW06IEhpZXJhcmNoeUl0ZW0pIHtcclxuICAgIHRoaXMuZ2V0VHJlZUl0ZW1DaGlsZHJlbi5lbWl0KGl0ZW0pO1xyXG4gIH1cclxuXHJcbiAgLyoqIFNjcm9sbCB0byB0aGUgdHJlZSBpdGVtIHRoYXQgaXMgY3VycmVudGx5IHNlbGVjdGVkLiAqL1xyXG4gIHB1YmxpYyBzY3JvbGxUb1NlbGVjdGVkSXRlbSgpIHtcclxuICAgIGlmICh0aGlzLm1lbnVDb21wb25lbnQpIHtcclxuICAgICAgdGhpcy5tZW51Q29tcG9uZW50LnNjcm9sbFRvU2VsZWN0ZWRJdGVtKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaGllcmFyY2h5VHJlZUNvbXBvbmVudCkge1xyXG4gICAgICB0aGlzLmhpZXJhcmNoeVRyZWVDb21wb25lbnQuc2Nyb2xsVG9TZWxlY3RlZEl0ZW0oKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
@@ -2537,6 +2537,11 @@ class MenuComponent {
2537
2537
  * Will prevent text-wrapping of menu items and truncate instead. Also turns on a tooltip for the menu item. Default: false;
2538
2538
  */
2539
2539
  this.truncateItems = false;
2540
+ /**
2541
+ * When true, the space for the icon is preserved for menu items that do not have icons.
2542
+ * Only applicable for iconAndLabel menus.
2543
+ */
2544
+ this.preserveIconSpace = false;
2540
2545
  /**
2541
2546
  * Emitted when `selected` is changed. Emits the referenced object.
2542
2547
  *
@@ -2862,7 +2867,7 @@ class MenuComponent {
2862
2867
  MenuComponent.decorators = [
2863
2868
  { type: Component, args: [{
2864
2869
  selector: 'ec-menu',
2865
- 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\" 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\" *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\" *ngIf=\"item.display !== 'heading'\"></i>\r\n\r\n <i class=\"ec-icon {{item.icon}} ml-2\" *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\" *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}}\" *ngIf=\"item.icon && 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\" *ngIf=\"item?.items\"></i>\r\n</ng-template>",
2870
+ 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\" 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\" *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\" *ngIf=\"item.display !== 'heading'\"></i>\r\n\r\n <i class=\"ec-icon {{item.icon}} ml-2\" *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\" *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}}\" *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\" *ngIf=\"item?.items\"></i>\r\n</ng-template>",
2866
2871
  styles: ["@-webkit-keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}:host{background-color:#fff;display:block;font-size:.875rem;font-weight:400}:host.open>nav>.child,:host.open>nav>.parent{height:100%;left:0;position:absolute;right:0;top:0;transition:transform .25s ease}:host.open>nav>.parent{transform:translateX(0)}:host.open>nav>.child{transform:translateX(100%)}:host.open-active>nav>.parent{transform:translateX(-100%)}:host.open-active>nav>.child{transform:translateX(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{height:100%;overflow:hidden}.parent,nav{display:flex;position:relative}.parent{flex:auto;flex-direction:column;max-width:100%}.parent>header{cursor:pointer}.parent>header.is-highlighted .item-wrapper,.parent>header.is-selected .item-wrapper{background-color:#d9edf2}.parent>header:hover .item-wrapper{background-color:#bfe0e9}.parent.no-data ul{display:none}.parent.no-data .no-data-message{display:block}ul{flex:auto;height:100%;list-style:none;margin:0;overflow-y:auto;padding:0}ul li{cursor:pointer;padding:0 .25rem}ul li a{border-bottom:0;color:inherit;text-decoration:none}ul li.is-highlighted .item-wrapper,ul li.is-selected .item-wrapper{background-color:#d9edf2}ul li:hover .item-wrapper{background-color:#bfe0e9}ul li:focus .item-wrapper{background-color:rgba(26,26,35,.38);outline:none;position:relative;z-index:1}ul li.is-disabled .item-wrapper{color:rgba(26,26,35,.66);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 #d2d7d9;margin-bottom:.25rem;padding-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{border-radius:var(--ec-border-radius);color:inherit;cursor:inherit;display:flex;line-height:1.25rem;min-height:1.75rem;padding:.25rem .5rem}.item-wrapper .label{margin-right:auto}.item-wrapper .label+.ec-icon{margin-left:.5rem}.item-wrapper .ec-icon{flex:none;margin-top:.125rem}.item-wrapper .ec-icon+.label{margin-left:.5rem}.item-wrapper .ec-icon-sm{margin-top:.25rem}.item-wrapper .icon-check{opacity:0}.no-data-message{color:rgba(26,26,35,.38);display:none;font-size:1rem;margin-bottom:0;padding:1rem;text-align:center}:host-context(ec-tree) ul{overflow-x:hidden}:host-context(ec-tree) li.is-highlighted,:host-context(ec-tree) li.is-selected{font-weight:700}:host-context(ec-tree) li.is-highlighted:not(:hover),:host-context(ec-tree) li.is-selected:not(:hover){background-color:transparent}"]
2867
2872
  },] }
2868
2873
  ];
@@ -2887,6 +2892,7 @@ MenuComponent.propDecorators = {
2887
2892
  highlightedItem: [{ type: Input }],
2888
2893
  maintainSelectedItem: [{ type: Input }],
2889
2894
  truncateItems: [{ type: Input }],
2895
+ preserveIconSpace: [{ type: Input }],
2890
2896
  selectedChanged: [{ type: Output }],
2891
2897
  menuClosed: [{ type: Output }],
2892
2898
  labelTemplate: [{ type: ViewChild, args: ['label', { static: true },] }],
@@ -2991,7 +2997,7 @@ class DropdownComponent {
2991
2997
  }
2992
2998
  if (this.popupFixed) {
2993
2999
  popperOptions.onCreate = () => {
2994
- this.popup.fixPosition(undefined, true);
3000
+ this.popup.fixPosition();
2995
3001
  };
2996
3002
  popperOptions.onUpdate = () => {
2997
3003
  // Hide the popup when the dropdown changes position due to window resize
@@ -3063,7 +3069,7 @@ DropdownComponent.decorators = [
3063
3069
  { type: Component, args: [{
3064
3070
  selector: 'ec-dropdown',
3065
3071
  template: "<div class=\"control\">\r\n <ec-button [disabled]=\"disabled\"\r\n id=\"{{id}}_toggle\"\r\n [ngClass]=\"{'has-arrow':showArrow, 'active': menuStatus === 'visible', 'text-left': buttonAlignment === 'left', 'text-right': buttonAlignment === 'right'}\"\r\n *ecPopup=\"dropdownMenu\"\r\n [label]=\"label\"\r\n [icon]=\"icon\"\r\n [tabindex]=\"tabindex\"\r\n [type]=\"buttonType\"\r\n [customTemplate]=\"buttonCustomTemplate\"\r\n [pending]=\"pending\"\r\n title=\"{{buttonTitle}}\"\r\n (click)=\"toggleMenu($event)\"\r\n (keydown)=\"keyNavigate($event)\"\r\n [autofocus]=\"autofocus\">\r\n </ec-button>\r\n <span class=\"arrow is-{{buttonType}}\"\r\n *ngIf=\"showArrow\"\r\n [class.is-disabled]=\"disabled\">\r\n <i class=\"ec-icon icon-caret-down\" [class.flip-y]=\"menuStatus === 'visible'\"></i>\r\n </span>\r\n</div>\r\n\r\n<ng-template #dropdownMenu>\r\n <div id=\"{{id}}_popup\"\r\n class=\"popup\"\r\n ecOverlay\r\n [status]=\"status?.status\"\r\n [message]=\"status?.message\"\r\n [displayAsMask]=\"true\">\r\n <!-- Dropdown Menu Title -->\r\n <header id=\"{{id}}_title\"\r\n class=\"text-heading-2 px-2 my-2\"\r\n *ngIf=\"menuTitle\">{{menuTitle}}\r\n </header>\r\n <!-- Dropdown Menu -->\r\n <ec-menu id=\"{{id}}_menu\"\r\n [class.wrap-items]=\"menuWidth\"\r\n [templateType]=\"menuTemplateType\"\r\n [style.width]=\"menuWidth ? menuWidth + 'px' : 'auto'\"\r\n [style.min-width]=\"menuMinWidth ? menuMinWidth + 'px' : 'auto'\"\r\n [style.height]=\"menuHeight ? menuHeight + 'px' : 'auto'\"\r\n [items]=\"items\"\r\n [showNoItems]=\"true\"\r\n [enableKeyNav]=\"true\"\r\n [highlightedItem]=\"highlightedItem\"\r\n (selectedChanged)=\"selectedChanged($event)\">\r\n </ec-menu>\r\n <footer *ngIf=\"menuFooter\">{{menuFooter}}</footer>\r\n </div>\r\n</ng-template>",
3066
- styles: ["@-webkit-keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}:host{box-sizing:border-box;display:inline-block;vertical-align:top}:host(.font-size-inherit) ec-button,:host(.font-size-inherit) ec-button ::ng-deep button{font-size:inherit}:host(.fill),:host(.fill) .control,:host(.fill) .control ec-button{display:block;height:100%;width:100%}:host(.fill) .control ec-button ::ng-deep button{display:block;display:flex;height:100%;width:100%}:host(.fill) ec-menu{min-width:100%}:host(.td-fill){left:0;position:absolute;top:0}:host(.td-fill) ec-button ::ng-deep button{font-size:.75rem;padding-left:.375rem;padding-right:.375rem}:host(.is-action) .arrow,:host(.is-action) ec-button{color:#0084a9}:host(.is-condensed) ec-button ::ng-deep button{height:1.5rem}:host(.is-condensed) ec-button.has-arrow ::ng-deep button{padding:0 1.125rem 0 .25rem}:host(.is-condensed) ec-button.has-arrow~.arrow{right:.375rem}:host(.d-block) ec-button{display:block}:host(.d-block) ec-button ::ng-deep button{width:100%}:host-context(th){color:#1a1a23}.control{position:relative}ec-button{display:block}ec-button.has-arrow~.arrow{align-items:center;display:flex;height:100%;pointer-events:none;position:absolute;right:.5rem;top:0;width:.625rem;z-index:1}ec-button.has-arrow~.arrow .ec-icon{color:rgba(26,26,35,.66);transition:color .3s ease;width:auto}ec-button.has-arrow~.arrow.is-common .ec-icon{color:#fff}ec-button.has-arrow~.arrow.is-link .ec-icon{color:#0084a9}ec-button.has-arrow~.arrow.is-disabled .ec-icon{color:rgba(26,26,35,.66);opacity:.5}ec-button.has-arrow ::ng-deep button{padding-right:1.25rem;width:auto}ec-button.has-arrow ::ng-deep button:not(.ec-button-custom){padding-left:.5rem}.popup{background-color:#fff;border-radius:var(--ec-border-radius-card);box-shadow:var(--ec-box-shadow-overlay);margin-top:.25rem;overflow:hidden;z-index:50}.popup>header{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.popup footer{border-top:.0625rem solid #d2d7d9;color:rgba(26,26,35,.66);font-size:.75rem;line-height:1.2;padding:.1875rem .5rem}ec-menu ::ng-deep ul{max-height:50vh}ec-menu ::ng-deep li{white-space:nowrap}ec-menu.wrap-items ::ng-deep li{white-space:normal}"]
3072
+ styles: ["@-webkit-keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}:host{box-sizing:border-box;display:inline-block;vertical-align:top}:host(.font-size-inherit) ec-button,:host(.font-size-inherit) ec-button ::ng-deep button{font-size:inherit}:host(.fill),:host(.fill) .control,:host(.fill) .control ec-button{display:block;height:100%;width:100%}:host(.fill) .control ec-button ::ng-deep button{display:block;display:flex;height:100%;width:100%}:host(.fill) ec-menu{min-width:100%}:host(.td-fill){left:0;position:absolute;top:0}:host(.td-fill) ec-button ::ng-deep button{font-size:.75rem;padding-left:.375rem;padding-right:.375rem}:host(.is-action) .arrow,:host(.is-action) ec-button{color:#0084a9}:host(.is-condensed) ec-button ::ng-deep button{height:1.5rem}:host(.is-condensed) ec-button.has-arrow ::ng-deep button{padding:0 1.125rem 0 .25rem}:host(.is-condensed) ec-button.has-arrow~.arrow{right:.375rem}:host(.d-block) ec-button{display:block}:host(.d-block) ec-button ::ng-deep button{width:100%}:host-context(th){color:#1a1a23}.control{position:relative}ec-button{display:block}ec-button.has-arrow~.arrow{align-items:center;display:flex;height:100%;pointer-events:none;position:absolute;right:.5rem;top:0;width:.625rem;z-index:1}ec-button.has-arrow~.arrow .ec-icon{color:rgba(26,26,35,.66);transition:color .3s ease;width:auto}ec-button.has-arrow~.arrow.is-common .ec-icon{color:#fff}ec-button.has-arrow~.arrow.is-link .ec-icon{color:#0084a9}ec-button.has-arrow~.arrow.is-disabled .ec-icon{color:rgba(26,26,35,.66);opacity:.5}ec-button.has-arrow ::ng-deep button{padding-right:1.25rem;width:auto}ec-button.has-arrow ::ng-deep button:not(.ec-button-custom){padding-left:.5rem}.popup{background-color:#fff;border-radius:var(--ec-border-radius-card);box-shadow:var(--ec-box-shadow-overlay);margin-top:.25rem;overflow:hidden;text-align:start;z-index:50}.popup>header{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.popup footer{border-top:.0625rem solid #d2d7d9;color:rgba(26,26,35,.66);font-size:.75rem;line-height:1.2;padding:.1875rem .5rem}ec-menu ::ng-deep ul{max-height:50vh}ec-menu ::ng-deep li{white-space:nowrap}ec-menu.wrap-items ::ng-deep li{white-space:normal}"]
3067
3073
  },] }
3068
3074
  ];
3069
3075
  DropdownComponent.ctorParameters = () => [];
@@ -7380,6 +7386,11 @@ class TreeComponent {
7380
7386
  this.menuStatus = new Overlay('hasData');
7381
7387
  /** The menu item template */
7382
7388
  this.menuTemplateType = "checkAndLabel";
7389
+ /**
7390
+ * When true, the space for the icon is preserved for menu items that do not have icons.
7391
+ * Only applicable for iconAndLabel menus. Not applicable to hierarchy trees.
7392
+ */
7393
+ this.preserveIconSpace = false;
7383
7394
  /** Emits the item currently selected item in the tree */
7384
7395
  this.treeSelection = new EventEmitter();
7385
7396
  /** Emits when a hierarchy tree item is expanded as a hook to load the item's children */
@@ -7419,7 +7430,7 @@ class TreeComponent {
7419
7430
  TreeComponent.decorators = [
7420
7431
  { type: Component, args: [{
7421
7432
  selector: 'ec-tree',
7422
- template: "<header *ngIf=\"!hideTreeHeader\"\r\n class=\"flex-shrink d-flex align-items-center border-bottom bg-content pl-2 pr-1\">\r\n <h2 id=\"{{id}}_title\"\r\n class=\"flex-grow mr-2 text-heading-1\">{{treeTitle | translate}}</h2>\r\n <ec-dropdown *ngIf=\"menuItems?.length\"\r\n id=\"{{id}}_dropdown\"\r\n class=\"flex-shrink\"\r\n icon=\"icon-menu\"\r\n [menuTemplateType]=\"menuTemplateType\"\r\n menuPosition=\"left\"\r\n [status]=\"menuStatus\"\r\n [popupFixed]=\"true\"\r\n [showArrow]=\"false\"\r\n [menuMinWidth]=\"240\"\r\n [items]=\"menuItems\">\r\n </ec-dropdown>\r\n</header>\r\n\r\n<div class=\"flex-grow d-flex\"\r\n ecOverlay\r\n [status]=\"status?.status\"\r\n [displayAsMask]=\"true\">\r\n <ng-container *ngIf=\"type === 'menu'\">\r\n <ec-menu [id]=\"id\"\r\n [items]=\"treeItems\"\r\n [templateType]=\"templateType\"\r\n [maintainSelectedItem]=\"treeMenuMaintainSelectedItem\"\r\n [truncateItems]=\"true\"\r\n (selectedChanged)=\"onItemSelected($event)\"\r\n [customMenuTemplate]=\"customTreeMenuTemplate ? customTreeMenuTemplate : undefined\"\r\n class=\"flex-grow\">\r\n </ec-menu>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"type === 'hierarchy'\">\r\n <ec-hierarchy-tree [id]=\"id\"\r\n [rootNode]=\"treeHierarchy\"\r\n [hideRootNode]=\"treeHierarchyHideRootNode\"\r\n (getItemChildren)=\"onHierarchyGetItemChildren($event)\"\r\n (itemSelected)=\"onItemSelected($event)\"\r\n class=\"flex-grow d-flex\">\r\n </ec-hierarchy-tree>\r\n </ng-container>\r\n</div>",
7433
+ template: "<header *ngIf=\"!hideTreeHeader\"\r\n class=\"flex-shrink d-flex align-items-center border-bottom bg-content pl-2 pr-1\">\r\n <h2 id=\"{{id}}_title\"\r\n class=\"flex-grow mr-2 text-heading-1\">{{treeTitle | translate}}</h2>\r\n <ec-dropdown *ngIf=\"menuItems?.length\"\r\n id=\"{{id}}_dropdown\"\r\n class=\"flex-shrink\"\r\n icon=\"icon-menu\"\r\n [menuTemplateType]=\"menuTemplateType\"\r\n menuPosition=\"left\"\r\n [status]=\"menuStatus\"\r\n [popupFixed]=\"true\"\r\n [showArrow]=\"false\"\r\n [menuMinWidth]=\"240\"\r\n [items]=\"menuItems\">\r\n </ec-dropdown>\r\n</header>\r\n\r\n<div class=\"flex-grow d-flex\"\r\n ecOverlay\r\n [status]=\"status?.status\"\r\n [displayAsMask]=\"true\">\r\n <ng-container *ngIf=\"type === 'menu'\">\r\n <ec-menu [id]=\"id\"\r\n [items]=\"treeItems\"\r\n [templateType]=\"templateType\"\r\n [maintainSelectedItem]=\"treeMenuMaintainSelectedItem\"\r\n [truncateItems]=\"true\"\r\n (selectedChanged)=\"onItemSelected($event)\"\r\n [customMenuTemplate]=\"customTreeMenuTemplate ? customTreeMenuTemplate : undefined\"\r\n [preserveIconSpace]=\"preserveIconSpace\"\r\n class=\"flex-grow\">\r\n </ec-menu>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"type === 'hierarchy'\">\r\n <ec-hierarchy-tree [id]=\"id\"\r\n [rootNode]=\"treeHierarchy\"\r\n [hideRootNode]=\"treeHierarchyHideRootNode\"\r\n (getItemChildren)=\"onHierarchyGetItemChildren($event)\"\r\n (itemSelected)=\"onItemSelected($event)\"\r\n class=\"flex-grow d-flex\">\r\n </ec-hierarchy-tree>\r\n </ng-container>\r\n</div>",
7423
7434
  styles: [":host{display:flex;flex-direction:column}header{height:3rem}ec-dropdown.fill{height:3rem;width:3rem}"]
7424
7435
  },] }
7425
7436
  ];
@@ -7439,6 +7450,7 @@ TreeComponent.propDecorators = {
7439
7450
  menuItems: [{ type: Input }],
7440
7451
  menuStatus: [{ type: Input }],
7441
7452
  menuTemplateType: [{ type: Input }],
7453
+ preserveIconSpace: [{ type: Input }],
7442
7454
  treeSelection: [{ type: Output }],
7443
7455
  getTreeItemChildren: [{ type: Output }],
7444
7456
  menuComponent: [{ type: ViewChild, args: [MenuComponent,] }],