@wizishop/angular-components 14.3.3 → 14.3.5

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.
@@ -1,11 +1,15 @@
1
- import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
1
+ import { Attribute, Component, EventEmitter, Inject, Input, Optional, Output, ViewChild } from '@angular/core';
2
+ import { FormGroupDirective } from '@angular/forms';
2
3
  import { interval } from 'rxjs';
3
4
  import { takeWhile } from 'rxjs/operators';
4
5
  import * as i0 from "@angular/core";
5
6
  import * as i1 from "@angular/common";
6
7
  import * as i2 from "../../directives/auto-hide/auto-hide.directive";
8
+ import * as i3 from "@angular/forms";
7
9
  export class ButtonComponent {
8
- constructor() {
10
+ constructor(type, formGroup) {
11
+ this.type = type;
12
+ this.formGroup = formGroup;
9
13
  // todo add button type (ex: for submit and check if it works with template driven forms)
10
14
  this.extraClasses = 'is-info'; // todo make a list of existing class
11
15
  this.label = '';
@@ -79,6 +83,9 @@ export class ButtonComponent {
79
83
  if (this.disabled) {
80
84
  return;
81
85
  }
86
+ if (this.type === 'submit' && this.formGroup) { // Maybe there is a better way to handle submit
87
+ this.formGroup.onSubmit(this.formGroup.value);
88
+ }
82
89
  if (this.hasLoader) {
83
90
  this.isLoading = false;
84
91
  setTimeout(() => {
@@ -106,12 +113,20 @@ export class ButtonComponent {
106
113
  }, 1000);
107
114
  }
108
115
  }
109
- ButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.7", ngImport: i0, type: ButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
116
+ ButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.7", ngImport: i0, type: ButtonComponent, deps: [{ token: 'type', attribute: true }, { token: FormGroupDirective, optional: true }], target: i0.ɵɵFactoryTarget.Component });
110
117
  ButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.7", type: ButtonComponent, selector: "wac-button", inputs: { extraClasses: "extraClasses", label: "label", icon: "icon", iconNext: "iconNext", textcolor: "textcolor", widthAuto: "widthAuto", contentHorizontalPosition: "contentHorizontalPosition", iconFontSize: "iconFontSize", hasLoader: "hasLoader", disabled: "disabled", whiteSpaceNowrap: "whiteSpaceNowrap", opacity: "opacity", animation: "animation", animationRight: "animationRight", animationText: "animationText", confirmDelete: "confirmDelete", confirmDeleteText: "confirmDeleteText", coin: "coin", tooltip: "tooltip", tooltipWidth: "tooltipWidth", noPadding: "noPadding", tooltipPosition: "tooltipPosition", tooltipOneline: "tooltipOneline", confirmDeletePosition: "confirmDeletePosition", isLoading: "isLoading" }, outputs: { click: "click", isLoadingChange: "isLoadingChange" }, viewQueries: [{ propertyName: "calculWidth", first: true, predicate: ["calculWidth"], descendants: true }, { propertyName: "calculWidthDelete", first: true, predicate: ["calculWidthDelete"], descendants: true }], ngImport: i0, template: "<a\n [class]=\"'wac-button ' + extraClasses\"\n (click)=\"confirmDelete && waitForConfirmDelete ? addMaxWidthDelete() : '';onButtonClick($event);\"\n (mouseleave)=\"animation ? resetMaxWidth() : '';\"\n (mouseenter)=\"animation ? addMaxWidth() : '';\"\n wzAutoHide (clickOutside)=\"confirmDelete && !waitForConfirmDelete ? resetMaxWidthDelete() : ''\"\n [ngClass]=\"[\n label === '' ? 'alone' : '',\n coin ? 'has-coin width-auto' : '',\n animationRight ? 'animation-right' : '',\n animation ? 'animationText' : '',\n isLoading ? 'is-loading' : '',\n opacity ? 'opacity' : '',\n disabled ? 'disabled' : '',\n widthAuto ? 'width-auto' : '',\n noPadding ? 'no-padding' : '',\n whiteSpaceNowrap ? 'white-space-no-wrap' : '',\n !waitForConfirmDelete && confirmDelete ? 'step-delete' : '',\n confirmDelete ? 'deletePosition-' + confirmDeletePosition : ''\n ]\"\n [ngStyle]=\"{\n 'text-align': contentHorizontalPosition\n }\"\n>\n <span class=\"wac-button__wrapper\" [style.color]=\"textcolor ? textcolor : ''\">\n <i *ngIf=\"icon\" [ngClass]=\"icon\" [style.font-size.px]=\"iconFontSize\"></i>\n {{ label }}\n <i *ngIf=\"iconNext\" [ngClass]=\"iconNext\" [style.font-size.px]=\"iconFontSize\"></i>\n </span>\n <span class=\"wac-button__animation\" [style.maxWidth]=\"buttonMaxWidth\" [style.width]=\"buttonWidth + 'px'\">\n <span #calculWidth class=\"wac-button__animation__text\" [innerHTML]=\"animationText\"></span>\n </span>\n <span class=\"wac-button__confirmDelete\" [style.maxWidth]=\"buttonMaxWidthDelete\" [style.width]=\"buttonWidthDelete + 'px'\">\n <span #calculWidthDelete class=\"wac-button__confirmDelete__text\" [innerHTML]=\"confirmDeleteText\"></span>\n </span>\n <span *ngIf=\"coin\" class=\"wac-button__coin\"><i class=\"fa-solid fa-coin-front\"></i><span [innerHTML]=\"coin\"></span></span>\n <span\n class=\"wac-button__loader\"\n [ngClass]=\"extraClasses.includes('is-outlined') ? 'outlined' : ''\"\n *ngIf=\"isLoading\"\n [style.width]=\"currentLoading + '%'\"\n >\n <span *ngIf=\"extraClasses.includes('is-outlined')\">\n <i *ngIf=\"icon !== ''\" [ngClass]=\"icon\" [style.font-size.px]=\"iconFontSize\"></i>\n {{ label }}\n <i *ngIf=\"iconNext !== ''\" [ngClass]=\"iconNext\" [style.font-size.px]=\"iconFontSize\"></i>\n </span>\n </span>\n <span class=\"wac-button__tooltips {{ tooltipPosition }}\" [ngClass]=\"{'oneline': tooltipOneline}\" [style.minWidth]=\"tooltipWidth\" *ngIf=\"tooltip\">\n {{ tooltip }}\n </span>\n</a>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.AutoHideDirective, selector: "[wzAutoHide]", inputs: ["triggerElement", "forceOn"], outputs: ["clickOutside"] }] });
111
118
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.7", ngImport: i0, type: ButtonComponent, decorators: [{
112
119
  type: Component,
113
120
  args: [{ selector: 'wac-button', template: "<a\n [class]=\"'wac-button ' + extraClasses\"\n (click)=\"confirmDelete && waitForConfirmDelete ? addMaxWidthDelete() : '';onButtonClick($event);\"\n (mouseleave)=\"animation ? resetMaxWidth() : '';\"\n (mouseenter)=\"animation ? addMaxWidth() : '';\"\n wzAutoHide (clickOutside)=\"confirmDelete && !waitForConfirmDelete ? resetMaxWidthDelete() : ''\"\n [ngClass]=\"[\n label === '' ? 'alone' : '',\n coin ? 'has-coin width-auto' : '',\n animationRight ? 'animation-right' : '',\n animation ? 'animationText' : '',\n isLoading ? 'is-loading' : '',\n opacity ? 'opacity' : '',\n disabled ? 'disabled' : '',\n widthAuto ? 'width-auto' : '',\n noPadding ? 'no-padding' : '',\n whiteSpaceNowrap ? 'white-space-no-wrap' : '',\n !waitForConfirmDelete && confirmDelete ? 'step-delete' : '',\n confirmDelete ? 'deletePosition-' + confirmDeletePosition : ''\n ]\"\n [ngStyle]=\"{\n 'text-align': contentHorizontalPosition\n }\"\n>\n <span class=\"wac-button__wrapper\" [style.color]=\"textcolor ? textcolor : ''\">\n <i *ngIf=\"icon\" [ngClass]=\"icon\" [style.font-size.px]=\"iconFontSize\"></i>\n {{ label }}\n <i *ngIf=\"iconNext\" [ngClass]=\"iconNext\" [style.font-size.px]=\"iconFontSize\"></i>\n </span>\n <span class=\"wac-button__animation\" [style.maxWidth]=\"buttonMaxWidth\" [style.width]=\"buttonWidth + 'px'\">\n <span #calculWidth class=\"wac-button__animation__text\" [innerHTML]=\"animationText\"></span>\n </span>\n <span class=\"wac-button__confirmDelete\" [style.maxWidth]=\"buttonMaxWidthDelete\" [style.width]=\"buttonWidthDelete + 'px'\">\n <span #calculWidthDelete class=\"wac-button__confirmDelete__text\" [innerHTML]=\"confirmDeleteText\"></span>\n </span>\n <span *ngIf=\"coin\" class=\"wac-button__coin\"><i class=\"fa-solid fa-coin-front\"></i><span [innerHTML]=\"coin\"></span></span>\n <span\n class=\"wac-button__loader\"\n [ngClass]=\"extraClasses.includes('is-outlined') ? 'outlined' : ''\"\n *ngIf=\"isLoading\"\n [style.width]=\"currentLoading + '%'\"\n >\n <span *ngIf=\"extraClasses.includes('is-outlined')\">\n <i *ngIf=\"icon !== ''\" [ngClass]=\"icon\" [style.font-size.px]=\"iconFontSize\"></i>\n {{ label }}\n <i *ngIf=\"iconNext !== ''\" [ngClass]=\"iconNext\" [style.font-size.px]=\"iconFontSize\"></i>\n </span>\n </span>\n <span class=\"wac-button__tooltips {{ tooltipPosition }}\" [ngClass]=\"{'oneline': tooltipOneline}\" [style.minWidth]=\"tooltipWidth\" *ngIf=\"tooltip\">\n {{ tooltip }}\n </span>\n</a>\n" }]
114
- }], ctorParameters: function () { return []; }, propDecorators: { extraClasses: [{
121
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
122
+ type: Attribute,
123
+ args: ['type']
124
+ }] }, { type: i3.FormGroupDirective, decorators: [{
125
+ type: Optional
126
+ }, {
127
+ type: Inject,
128
+ args: [FormGroupDirective]
129
+ }] }]; }, propDecorators: { extraClasses: [{
115
130
  type: Input
116
131
  }], label: [{
117
132
  type: Input
@@ -172,4 +187,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.7", ngImpor
172
187
  type: ViewChild,
173
188
  args: ['calculWidthDelete']
174
189
  }] } });
175
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvYnV0dG9uL2J1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2J1dHRvbi9idXR0b24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ25ILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBTTNDLE1BQU0sT0FBTyxlQUFlO0lBNkcxQjtRQTVHQSx5RkFBeUY7UUFFekYsaUJBQVksR0FBRyxTQUFTLENBQUMsQ0FBQyxxQ0FBcUM7UUFHL0QsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUdYLFNBQUksR0FBRyxFQUFFLENBQUM7UUFNVixjQUFTLEdBQUcsSUFBSSxDQUFDO1FBRWpCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFHbEIsOEJBQXlCLEdBQWdDLFFBQVEsQ0FBQztRQUdsRSxpQkFBWSxHQUFHLEVBQUUsQ0FBQztRQUdsQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBR2xCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFHakIscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBR3pCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsdUhBQXVIO1FBRXZILGNBQVMsR0FBRyxLQUFLLENBQUM7UUFHbEIsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFHdkIsa0JBQWEsR0FBRyxFQUFFLENBQUM7UUFHbkIs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Z0JBSU4sSUFBSTtzQkFESCxLQUFLO2dCQUlOLE9BQU87c0JBRE4sS0FBSztnQkFJTixZQUFZO3NCQURYLEtBQUs7Z0JBSU4sU0FBUztzQkFEUixLQUFLO2dCQUlOLGVBQWU7c0JBRGQsS0FBSztnQkFJTixjQUFjO3NCQURiLEtBQUs7Z0JBSU4scUJBQXFCO3NCQURwQixLQUFLO2dCQUlXLEtBQUs7c0JBQXJCLE1BQU07Z0JBRU0sU0FBUztzQkFBckIsS0FBSztnQkFNSSxlQUFlO3NCQUF4QixNQUFNO2dCQXNCUCxXQUFXO3NCQURWLFNBQVM7dUJBQUMsYUFBYTtnQkFJeEIsaUJBQWlCO3NCQURoQixTQUFTO3VCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGludGVydmFsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlV2hpbGUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3dhYy1idXR0b24nLFxuICB0ZW1wbGF0ZVVybDogJy4vYnV0dG9uLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBCdXR0b25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICAvLyB0b2RvIGFkZCBidXR0b24gdHlwZSAoZXg6IGZvciBzdWJtaXQgYW5kIGNoZWNrIGlmIGl0IHdvcmtzIHdpdGggdGVtcGxhdGUgZHJpdmVuIGZvcm1zKVxuICBASW5wdXQoKVxuICBleHRyYUNsYXNzZXMgPSAnaXMtaW5mbyc7IC8vIHRvZG8gbWFrZSBhIGxpc3Qgb2YgZXhpc3RpbmcgY2xhc3NcblxuICBASW5wdXQoKVxuICBsYWJlbCA9ICcnO1xuXG4gIEBJbnB1dCgpXG4gIGljb24gPSAnJztcblxuICBASW5wdXQoKVxuICBpY29uTmV4dDogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIHRleHRjb2xvciA9IG51bGw7XG4gIEBJbnB1dCgpXG4gIHdpZHRoQXV0byA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIGNvbnRlbnRIb3Jpem9udGFsUG9zaXRpb246ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0JyA9ICdjZW50ZXInO1xuXG4gIEBJbnB1dCgpXG4gIGljb25Gb250U2l6ZSA9IDEyO1xuXG4gIEBJbnB1dCgpXG4gIGhhc0xvYWRlciA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgd2hpdGVTcGFjZU5vd3JhcCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIG9wYWNpdHkgPSBmYWxzZTtcbiAgLy8gVE9ETyBNQUtFIEFOTklNQVRJT04gQVZBSUxBQkxFIEZPUiBNT0JJTEUgYXMgQ09ORklSTSBERUxFVEUgRE8gKGJlY2F1c2UsIGl0cyBkb2VhbnQgc2hvdyB0aGUgdGV4dCBhbmQgdHJpZ2dlciBjbGljaylcbiAgQElucHV0KClcbiAgYW5pbWF0aW9uID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgYW5pbWF0aW9uUmlnaHQgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBhbmltYXRpb25UZXh0ID0gJyc7XG5cbiAgQElucHV0KClcbiAgY29uZmlybURlbGV0ZSA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIGNvbmZpcm1EZWxldGVUZXh0ID0gJyc7XG5cbiAgQElucHV0KClcbiAgY29pbjogbnVtYmVyIHwgc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIHRvb2x0aXA6IHN0cmluZztcblxuICBASW5wdXQoKVxuICB0b29sdGlwV2lkdGg6IHN0cmluZztcblxuICBASW5wdXQoKVxuICBub1BhZGRpbmcgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICB0b29sdGlwUG9zaXRpb246ICd0b3AtY2VudGVyJyB8ICd0b3AtcmlnaHQnIHwgJ3RvcC1sZWZ0JyB8ICdib3R0b20tY2VudGVyJyB8ICdib3R0b20tcmlnaHQnIHwgJ2JvdHRvbS1sZWZ0JyB8ICdsZWZ0JyB8ICdyaWdodCcgPSAndG9wLWNlbnRlcic7XG5cbiAgQElucHV0KClcbiAgdG9vbHRpcE9uZWxpbmUgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBjb25maXJtRGVsZXRlUG9zaXRpb24gPSAncmlnaHQnO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW5hdGl2ZVxuICBAT3V0cHV0KCkgcHVibGljIGNsaWNrOiBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQElucHV0KCkgc2V0IGlzTG9hZGluZyhpc0xvYWRpbmcgOiBib29sZWFuKSB7XG4gICAgdGhpcy5faXNMb2FkaW5nID0gaXNMb2FkaW5nO1xuICAgIHRoaXMuaXNMb2FkaW5nQ2hhbmdlLm5leHQoaXNMb2FkaW5nKTtcbiAgICB0aGlzLnRvZ2dsZUxvYWRpbmcoKTtcbiAgfVxuXG4gIEBPdXRwdXQoKSBpc0xvYWRpbmdDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgZ2V0IGlzTG9hZGluZygpIDogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzTG9hZGluZztcbiAgfVxuXG4gIHByaXZhdGUgX2lzTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG5cbiAgaW50ZXJ2YWwgPSBudWxsO1xuXG4gIHdhaXRGb3JDb25maXJtRGVsZXRlID0gZmFsc2U7XG5cbiAgYnV0dG9uTWF4V2lkdGggPSAnMHB4JztcbiAgYnV0dG9uV2lkdGggPSAnMHB4JztcblxuICBidXR0b25NYXhXaWR0aERlbGV0ZSA9ICcwcHgnO1xuICBidXR0b25XaWR0aERlbGV0ZSA9ICcwcHgnO1xuXG4gIGN1cnJlbnRMb2FkaW5nID0gMDtcblxuICBAVmlld0NoaWxkKCdjYWxjdWxXaWR0aCcpXG4gIGNhbGN1bFdpZHRoOiBFbGVtZW50UmVmO1xuXG4gIEBWaWV3Q2hpbGQoJ2NhbGN1bFdpZHRoRGVsZXRlJylcbiAgY2FsY3VsV2lkdGhEZWxldGU6IEVsZW1lbnRSZWY7XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLmNvbmZpcm1EZWxldGUpIHtcbiAgICAgIHRoaXMud2FpdEZvckNvbmZpcm1EZWxldGUgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZUxvYWRpbmcoKSB7XG4gICAgdGhpcy5jdXJyZW50TG9hZGluZyA9IHRoaXMuaXNMb2FkaW5nID8gMTAgOiAxMDA7XG5cbiAgICBpbnRlcnZhbCgyMDApLnBpcGUodGFrZVdoaWxlKCB0aW1lPT4gdGhpcy5pc0xvYWRpbmcpKS5zdWJzY3JpYmUoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRMb2FkaW5nIDwgODUpIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRMb2FkaW5nICs9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDE1KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBhZGRNYXhXaWR0aCgpIHtcbiAgICB0aGlzLmJ1dHRvbk1heFdpZHRoID0gdGhpcy5idXR0b25XaWR0aCArICdweCc7XG4gIH1cblxuICByZXNldE1heFdpZHRoKCkge1xuICAgIHRoaXMuYnV0dG9uTWF4V2lkdGggPSAnMHB4JztcbiAgfVxuXG4gIGFkZE1heFdpZHRoRGVsZXRlKCkge1xuICAgIHRoaXMuYnV0dG9uTWF4V2lkdGhEZWxldGUgPSB0aGlzLmJ1dHRvbldpZHRoRGVsZXRlICsgJ3B4JztcbiAgfVxuXG4gIHJlc2V0TWF4V2lkdGhEZWxldGUoKSB7XG4gICAgdGhpcy5idXR0b25NYXhXaWR0aERlbGV0ZSA9ICcwcHgnO1xuICAgIHRoaXMud2FpdEZvckNvbmZpcm1EZWxldGUgPSB0cnVlO1xuICB9XG5cbiAgb25CdXR0b25DbGljayhldmVudCl7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuaGFzTG9hZGVyKSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7IC8vIHRyaWNrIHRvIHJlc2V0IHRoZSBhbmltYXRpb24gbG9hZGluZ1xuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMud2FpdEZvckNvbmZpcm1EZWxldGUpIHtcbiAgICAgIHRoaXMuY2xpY2suZW1pdChldmVudCk7XG4gICAgICBpZiAodGhpcy5jb25maXJtRGVsZXRlKSB7XG4gICAgICAgIHRoaXMucmVzZXRNYXhXaWR0aERlbGV0ZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLndhaXRGb3JDb25maXJtRGVsZXRlID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuYW5pbWF0aW9uKSB7XG4gICAgICAgIHRoaXMuYnV0dG9uV2lkdGggPSB0aGlzLmNhbGN1bFdpZHRoLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jb25maXJtRGVsZXRlKSB7XG4gICAgICAgIHRoaXMuYnV0dG9uV2lkdGhEZWxldGUgPSB0aGlzLmNhbGN1bFdpZHRoRGVsZXRlLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICB9XG4gICAgfSwgMTAwMCk7XG4gIH1cbn1cbiIsIjxhXG4gIFtjbGFzc109XCInd2FjLWJ1dHRvbiAnICsgZXh0cmFDbGFzc2VzXCJcbiAgKGNsaWNrKT1cImNvbmZpcm1EZWxldGUgJiYgd2FpdEZvckNvbmZpcm1EZWxldGUgPyBhZGRNYXhXaWR0aERlbGV0ZSgpIDogJyc7b25CdXR0b25DbGljaygkZXZlbnQpO1wiXG4gIChtb3VzZWxlYXZlKT1cImFuaW1hdGlvbiA/IHJlc2V0TWF4V2lkdGgoKSA6ICcnO1wiXG4gIChtb3VzZWVudGVyKT1cImFuaW1hdGlvbiA/IGFkZE1heFdpZHRoKCkgOiAnJztcIlxuICB3ekF1dG9IaWRlIChjbGlja091dHNpZGUpPVwiY29uZmlybURlbGV0ZSAmJiAhd2FpdEZvckNvbmZpcm1EZWxldGUgPyByZXNldE1heFdpZHRoRGVsZXRlKCkgOiAnJ1wiXG4gIFtuZ0NsYXNzXT1cIltcbiAgICBsYWJlbCA9PT0gJycgPyAnYWxvbmUnIDogJycsXG4gICAgY29pbiA/ICdoYXMtY29pbiB3aWR0aC1hdXRvJyA6ICcnLFxuICAgIGFuaW1hdGlvblJpZ2h0ID8gJ2FuaW1hdGlvbi1yaWdodCcgOiAnJyxcbiAgICBhbmltYXRpb24gPyAnYW5pbWF0aW9uVGV4dCcgOiAnJyxcbiAgICBpc0xvYWRpbmcgPyAnaXMtbG9hZGluZycgOiAnJyxcbiAgICBvcGFjaXR5ID8gJ29wYWNpdHknIDogJycsXG4gICAgZGlzYWJsZWQgPyAnZGlzYWJsZWQnIDogJycsXG4gICAgd2lkdGhBdXRvID8gJ3dpZHRoLWF1dG8nIDogJycsXG4gICAgbm9QYWRkaW5nID8gJ25vLXBhZGRpbmcnIDogJycsXG4gICAgd2hpdGVTcGFjZU5vd3JhcCA/ICd3aGl0ZS1zcGFjZS1uby13cmFwJyA6ICcnLFxuICAgICF3YWl0Rm9yQ29uZmlybURlbGV0ZSAmJiBjb25maXJtRGVsZXRlID8gJ3N0ZXAtZGVsZXRlJyA6ICcnLFxuICAgIGNvbmZpcm1EZWxldGUgPyAnZGVsZXRlUG9zaXRpb24tJyArIGNvbmZpcm1EZWxldGVQb3NpdGlvbiA6ICcnXG4gICAgXVwiXG4gICAgW25nU3R5bGVdPVwie1xuICAgICAgJ3RleHQtYWxpZ24nOiBjb250ZW50SG9yaXpvbnRhbFBvc2l0aW9uXG4gICAgfVwiXG4+XG4gIDxzcGFuIGNsYXNzPVwid2FjLWJ1dHRvbl9fd3JhcHBlclwiIFtzdHlsZS5jb2xvcl09XCJ0ZXh0Y29sb3IgPyB0ZXh0Y29sb3IgOiAnJ1wiPlxuICAgIDxpICpuZ0lmPVwiaWNvblwiIFtuZ0NsYXNzXT1cImljb25cIiBbc3R5bGUuZm9udC1zaXplLnB4XT1cImljb25Gb250U2l6ZVwiPjwvaT5cbiAgICB7eyBsYWJlbCB9fVxuICAgIDxpICpuZ0lmPVwiaWNvbk5leHRcIiBbbmdDbGFzc109XCJpY29uTmV4dFwiIFtzdHlsZS5mb250LXNpemUucHhdPVwiaWNvbkZvbnRTaXplXCI+PC9pPlxuICA8L3NwYW4+XG4gIDxzcGFuIGNsYXNzPVwid2FjLWJ1dHRvbl9fYW5pbWF0aW9uXCIgW3N0eWxlLm1heFdpZHRoXT1cImJ1dHRvbk1heFdpZHRoXCIgW3N0eWxlLndpZHRoXT1cImJ1dHRvbldpZHRoICsgJ3B4J1wiPlxuICAgIDxzcGFuICNjYWxjdWxXaWR0aCBjbGFzcz1cIndhYy1idXR0b25fX2FuaW1hdGlvbl9fdGV4dFwiIFtpbm5lckhUTUxdPVwiYW5pbWF0aW9uVGV4dFwiPjwvc3Bhbj5cbiAgPC9zcGFuPlxuICA8c3BhbiBjbGFzcz1cIndhYy1idXR0b25fX2NvbmZpcm1EZWxldGVcIiBbc3R5bGUubWF4V2lkdGhdPVwiYnV0dG9uTWF4V2lkdGhEZWxldGVcIiBbc3R5bGUud2lkdGhdPVwiYnV0dG9uV2lkdGhEZWxldGUgKyAncHgnXCI+XG4gICAgPHNwYW4gI2NhbGN1bFdpZHRoRGVsZXRlIGNsYXNzPVwid2FjLWJ1dHRvbl9fY29uZmlybURlbGV0ZV9fdGV4dFwiIFtpbm5lckhUTUxdPVwiY29uZmlybURlbGV0ZVRleHRcIj48L3NwYW4+XG4gIDwvc3Bhbj5cbiAgPHNwYW4gKm5nSWY9XCJjb2luXCIgY2xhc3M9XCJ3YWMtYnV0dG9uX19jb2luXCI+PGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1jb2luLWZyb250XCI+PC9pPjxzcGFuIFtpbm5lckhUTUxdPVwiY29pblwiPjwvc3Bhbj48L3NwYW4+XG4gIDxzcGFuXG4gICAgY2xhc3M9XCJ3YWMtYnV0dG9uX19sb2FkZXJcIlxuICAgIFtuZ0NsYXNzXT1cImV4dHJhQ2xhc3Nlcy5pbmNsdWRlcygnaXMtb3V0bGluZWQnKSA/ICdvdXRsaW5lZCcgOiAnJ1wiXG4gICAgKm5nSWY9XCJpc0xvYWRpbmdcIlxuICAgIFtzdHlsZS53aWR0aF09XCJjdXJyZW50TG9hZGluZyArICclJ1wiXG4gID5cbiAgICA8c3BhbiAqbmdJZj1cImV4dHJhQ2xhc3Nlcy5pbmNsdWRlcygnaXMtb3V0bGluZWQnKVwiPlxuICAgICAgPGkgKm5nSWY9XCJpY29uICE9PSAnJ1wiIFtuZ0NsYXNzXT1cImljb25cIiBbc3R5bGUuZm9udC1zaXplLnB4XT1cImljb25Gb250U2l6ZVwiPjwvaT5cbiAgICAgIHt7IGxhYmVsIH19XG4gICAgICA8aSAqbmdJZj1cImljb25OZXh0ICE9PSAnJ1wiIFtuZ0NsYXNzXT1cImljb25OZXh0XCIgW3N0eWxlLmZvbnQtc2l6ZS5weF09XCJpY29uRm9udFNpemVcIj48L2k+XG4gICAgPC9zcGFuPlxuICA8L3NwYW4+XG4gIDxzcGFuIGNsYXNzPVwid2FjLWJ1dHRvbl9fdG9vbHRpcHMge3sgdG9vbHRpcFBvc2l0aW9uIH19XCIgW25nQ2xhc3NdPVwieydvbmVsaW5lJzogdG9vbHRpcE9uZWxpbmV9XCIgW3N0eWxlLm1pbldpZHRoXT1cInRvb2x0aXBXaWR0aFwiICpuZ0lmPVwidG9vbHRpcFwiPlxuICAgIHt7IHRvb2x0aXAgfX1cbiAgPC9zcGFuPlxuPC9hPlxuIl19
190
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvYnV0dG9uL2J1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2J1dHRvbi9idXR0b24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixTQUFTLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2hKLE9BQU8sRUFBYSxrQkFBa0IsRUFBVSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7OztBQU0zQyxNQUFNLE9BQU8sZUFBZTtJQTZHMUIsWUFDNkIsSUFBWSxFQUNTLFNBQTZCO1FBRGxELFNBQUksR0FBSixJQUFJLENBQVE7UUFDUyxjQUFTLEdBQVQsU0FBUyxDQUFvQjtRQTlHL0UseUZBQXlGO1FBRXpGLGlCQUFZLEdBQUcsU0FBUyxDQUFDLENBQUMscUNBQXFDO1FBRy9ELFVBQUssR0FBRyxFQUFFLENBQUM7UUFHWCxTQUFJLEdBQUcsRUFBRSxDQUFDO1FBTVYsY0FBUyxHQUFHLElBQUksQ0FBQztRQUVqQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBR2xCLDhCQUF5QixHQUFnQyxRQUFRLENBQUM7UUFHbEUsaUJBQVksR0FBRyxFQUFFLENBQUM7UUFHbEIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUdsQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FB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a0JBQWtCOzRDQTVHeEMsWUFBWTtzQkFEWCxLQUFLO2dCQUlOLEtBQUs7c0JBREosS0FBSztnQkFJTixJQUFJO3NCQURILEtBQUs7Z0JBSU4sUUFBUTtzQkFEUCxLQUFLO2dCQUlOLFNBQVM7c0JBRFIsS0FBSztnQkFHTixTQUFTO3NCQURSLEtBQUs7Z0JBSU4seUJBQXlCO3NCQUR4QixLQUFLO2dCQUlOLFlBQVk7c0JBRFgsS0FBSztnQkFJTixTQUFTO3NCQURSLEtBQUs7Z0JBSU4sUUFBUTtzQkFEUCxLQUFLO2dCQUlOLGdCQUFnQjtzQkFEZixLQUFLO2dCQUlOLE9BQU87c0JBRE4sS0FBSztnQkFJTixTQUFTO3NCQURSLEtBQUs7Z0JBSU4sY0FBYztzQkFEYixLQUFLO2dCQUlOLGFBQWE7c0JBRFosS0FBSztnQkFJTixhQUFhO3NCQURaLEtBQUs7Z0JBSU4saUJBQWlCO3NCQURoQixLQUFLO2dCQUlOLElBQUk7c0JBREgsS0FBSztnQkFJTixPQUFPO3NCQUROLEtBQUs7Z0JBSU4sWUFBWTtzQkFEWCxLQUFLO2dCQUlOLFNBQVM7c0JBRFIsS0FBSztnQkFJTixlQUFlO3NCQURkLEtBQUs7Z0JBSU4sY0FBYztzQkFEYixLQUFLO2dCQUlOLHFCQUFxQjtzQkFEcEIsS0FBSztnQkFJVyxLQUFLO3NCQUFyQixNQUFNO2dCQUVNLFNBQVM7c0JBQXJCLEtBQUs7Z0JBTUksZUFBZTtzQkFBeEIsTUFBTTtnQkFzQlAsV0FBVztzQkFEVixTQUFTO3VCQUFDLGFBQWE7Z0JBSXhCLGlCQUFpQjtzQkFEaEIsU0FBUzt1QkFBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FmdGVyVmlld0luaXQsIEF0dHJpYnV0ZSwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEluamVjdCwgSW5wdXQsIE9uSW5pdCwgT3B0aW9uYWwsIE91dHB1dCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUdyb3VwRGlyZWN0aXZlLCBOZ0Zvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBpbnRlcnZhbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVdoaWxlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd3YWMtYnV0dG9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2J1dHRvbi5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgQnV0dG9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgLy8gdG9kbyBhZGQgYnV0dG9uIHR5cGUgKGV4OiBmb3Igc3VibWl0IGFuZCBjaGVjayBpZiBpdCB3b3JrcyB3aXRoIHRlbXBsYXRlIGRyaXZlbiBmb3JtcylcbiAgQElucHV0KClcbiAgZXh0cmFDbGFzc2VzID0gJ2lzLWluZm8nOyAvLyB0b2RvIG1ha2UgYSBsaXN0IG9mIGV4aXN0aW5nIGNsYXNzXG5cbiAgQElucHV0KClcbiAgbGFiZWwgPSAnJztcblxuICBASW5wdXQoKVxuICBpY29uID0gJyc7XG5cbiAgQElucHV0KClcbiAgaWNvbk5leHQ6IHN0cmluZztcblxuICBASW5wdXQoKVxuICB0ZXh0Y29sb3IgPSBudWxsO1xuICBASW5wdXQoKVxuICB3aWR0aEF1dG8gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBjb250ZW50SG9yaXpvbnRhbFBvc2l0aW9uOiAnbGVmdCcgfCAnY2VudGVyJyB8ICdyaWdodCcgPSAnY2VudGVyJztcblxuICBASW5wdXQoKVxuICBpY29uRm9udFNpemUgPSAxMjtcblxuICBASW5wdXQoKVxuICBoYXNMb2FkZXIgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHdoaXRlU3BhY2VOb3dyYXAgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBvcGFjaXR5ID0gZmFsc2U7XG4gIC8vIFRPRE8gTUFLRSBBTk5JTUFUSU9OIEFWQUlMQUJMRSBGT1IgTU9CSUxFIGFzIENPTkZJUk0gREVMRVRFIERPIChiZWNhdXNlLCBpdHMgZG9lYW50IHNob3cgdGhlIHRleHQgYW5kIHRyaWdnZXIgY2xpY2spXG4gIEBJbnB1dCgpXG4gIGFuaW1hdGlvbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIGFuaW1hdGlvblJpZ2h0ID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgYW5pbWF0aW9uVGV4dCA9ICcnO1xuXG4gIEBJbnB1dCgpXG4gIGNvbmZpcm1EZWxldGUgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBjb25maXJtRGVsZXRlVGV4dCA9ICcnO1xuXG4gIEBJbnB1dCgpXG4gIGNvaW46IG51bWJlciB8IHN0cmluZztcblxuICBASW5wdXQoKVxuICB0b29sdGlwOiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgdG9vbHRpcFdpZHRoOiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgbm9QYWRkaW5nID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgdG9vbHRpcFBvc2l0aW9uOiAndG9wLWNlbnRlcicgfCAndG9wLXJpZ2h0JyB8ICd0b3AtbGVmdCcgfCAnYm90dG9tLWNlbnRlcicgfCAnYm90dG9tLXJpZ2h0JyB8ICdib3R0b20tbGVmdCcgfCAnbGVmdCcgfCAncmlnaHQnID0gJ3RvcC1jZW50ZXInO1xuXG4gIEBJbnB1dCgpXG4gIHRvb2x0aXBPbmVsaW5lID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgY29uZmlybURlbGV0ZVBvc2l0aW9uID0gJ3JpZ2h0JztcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1uYXRpdmVcbiAgQE91dHB1dCgpIHB1YmxpYyBjbGljazogRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBJbnB1dCgpIHNldCBpc0xvYWRpbmcoaXNMb2FkaW5nIDogYm9vbGVhbikge1xuICAgIHRoaXMuX2lzTG9hZGluZyA9IGlzTG9hZGluZztcbiAgICB0aGlzLmlzTG9hZGluZ0NoYW5nZS5uZXh0KGlzTG9hZGluZyk7XG4gICAgdGhpcy50b2dnbGVMb2FkaW5nKCk7XG4gIH1cblxuICBAT3V0cHV0KCkgaXNMb2FkaW5nQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIGdldCBpc0xvYWRpbmcoKSA6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc0xvYWRpbmc7XG4gIH1cblxuICBwcml2YXRlIF9pc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuXG4gIGludGVydmFsID0gbnVsbDtcblxuICB3YWl0Rm9yQ29uZmlybURlbGV0ZSA9IGZhbHNlO1xuXG4gIGJ1dHRvbk1heFdpZHRoID0gJzBweCc7XG4gIGJ1dHRvbldpZHRoID0gJzBweCc7XG5cbiAgYnV0dG9uTWF4V2lkdGhEZWxldGUgPSAnMHB4JztcbiAgYnV0dG9uV2lkdGhEZWxldGUgPSAnMHB4JztcblxuICBjdXJyZW50TG9hZGluZyA9IDA7XG5cbiAgQFZpZXdDaGlsZCgnY2FsY3VsV2lkdGgnKVxuICBjYWxjdWxXaWR0aDogRWxlbWVudFJlZjtcblxuICBAVmlld0NoaWxkKCdjYWxjdWxXaWR0aERlbGV0ZScpXG4gIGNhbGN1bFdpZHRoRGVsZXRlOiBFbGVtZW50UmVmO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBBdHRyaWJ1dGUoJ3R5cGUnKSBwcml2YXRlIHR5cGU6IHN0cmluZyxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEZvcm1Hcm91cERpcmVjdGl2ZSkgcHJpdmF0ZSBmb3JtR3JvdXA6IEZvcm1Hcm91cERpcmVjdGl2ZVxuICAgICkge1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuY29uZmlybURlbGV0ZSkge1xuICAgICAgdGhpcy53YWl0Rm9yQ29uZmlybURlbGV0ZSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlTG9hZGluZygpIHtcbiAgICB0aGlzLmN1cnJlbnRMb2FkaW5nID0gdGhpcy5pc0xvYWRpbmcgPyAxMCA6IDEwMDtcblxuICAgIGludGVydmFsKDIwMCkucGlwZSh0YWtlV2hpbGUoIHRpbWU9PiB0aGlzLmlzTG9hZGluZykpLnN1YnNjcmliZShcbiAgICAgICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudExvYWRpbmcgPCA4NSkge1xuICAgICAgICAgIHRoaXMuY3VycmVudExvYWRpbmcgKz0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIGFkZE1heFdpZHRoKCkge1xuICAgIHRoaXMuYnV0dG9uTWF4V2lkdGggPSB0aGlzLmJ1dHRvbldpZHRoICsgJ3B4JztcbiAgfVxuXG4gIHJlc2V0TWF4V2lkdGgoKSB7XG4gICAgdGhpcy5idXR0b25NYXhXaWR0aCA9ICcwcHgnO1xuICB9XG5cbiAgYWRkTWF4V2lkdGhEZWxldGUoKSB7XG4gICAgdGhpcy5idXR0b25NYXhXaWR0aERlbGV0ZSA9IHRoaXMuYnV0dG9uV2lkdGhEZWxldGUgKyAncHgnO1xuICB9XG5cbiAgcmVzZXRNYXhXaWR0aERlbGV0ZSgpIHtcbiAgICB0aGlzLmJ1dHRvbk1heFdpZHRoRGVsZXRlID0gJzBweCc7XG4gICAgdGhpcy53YWl0Rm9yQ29uZmlybURlbGV0ZSA9IHRydWU7XG4gIH1cblxuICBvbkJ1dHRvbkNsaWNrKGV2ZW50KXtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy50eXBlID09PSAnc3VibWl0JyAmJiB0aGlzLmZvcm1Hcm91cCkgeyAvLyBNYXliZSB0aGVyZSBpcyBhIGJldHRlciB3YXkgdG8gaGFuZGxlIHN1Ym1pdFxuICAgICAgdGhpcy5mb3JtR3JvdXAub25TdWJtaXQodGhpcy5mb3JtR3JvdXAudmFsdWUpO1xuICAgIH1cbiAgICBpZiAodGhpcy5oYXNMb2FkZXIpIHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHsgLy8gdHJpY2sgdG8gcmVzZXQgdGhlIGFuaW1hdGlvbiBsb2FkaW5nXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgIH0sIDApO1xuICAgIH1cblxuICAgIGlmICghdGhpcy53YWl0Rm9yQ29uZmlybURlbGV0ZSkge1xuICAgICAgdGhpcy5jbGljay5lbWl0KGV2ZW50KTtcbiAgICAgIGlmICh0aGlzLmNvbmZpcm1EZWxldGUpIHtcbiAgICAgICAgdGhpcy5yZXNldE1heFdpZHRoRGVsZXRlKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMud2FpdEZvckNvbmZpcm1EZWxldGUgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5hbmltYXRpb24pIHtcbiAgICAgICAgdGhpcy5idXR0b25XaWR0aCA9IHRoaXMuY2FsY3VsV2lkdGgubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvbmZpcm1EZWxldGUpIHtcbiAgICAgICAgdGhpcy5idXR0b25XaWR0aERlbGV0ZSA9IHRoaXMuY2FsY3VsV2lkdGhEZWxldGUubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgIH1cbiAgICB9LCAxMDAwKTtcbiAgfVxufVxuIiwiPGFcbiAgW2NsYXNzXT1cIid3YWMtYnV0dG9uICcgKyBleHRyYUNsYXNzZXNcIlxuICAoY2xpY2spPVwiY29uZmlybURlbGV0ZSAmJiB3YWl0Rm9yQ29uZmlybURlbGV0ZSA/IGFkZE1heFdpZHRoRGVsZXRlKCkgOiAnJztvbkJ1dHRvbkNsaWNrKCRldmVudCk7XCJcbiAgKG1vdXNlbGVhdmUpPVwiYW5pbWF0aW9uID8gcmVzZXRNYXhXaWR0aCgpIDogJyc7XCJcbiAgKG1vdXNlZW50ZXIpPVwiYW5pbWF0aW9uID8gYWRkTWF4V2lkdGgoKSA6ICcnO1wiXG4gIHd6QXV0b0hpZGUgKGNsaWNrT3V0c2lkZSk9XCJjb25maXJtRGVsZXRlICYmICF3YWl0Rm9yQ29uZmlybURlbGV0ZSA/IHJlc2V0TWF4V2lkdGhEZWxldGUoKSA6ICcnXCJcbiAgW25nQ2xhc3NdPVwiW1xuICAgIGxhYmVsID09PSAnJyA/ICdhbG9uZScgOiAnJyxcbiAgICBjb2luID8gJ2hhcy1jb2luIHdpZHRoLWF1dG8nIDogJycsXG4gICAgYW5pbWF0aW9uUmlnaHQgPyAnYW5pbWF0aW9uLXJpZ2h0JyA6ICcnLFxuICAgIGFuaW1hdGlvbiA/ICdhbmltYXRpb25UZXh0JyA6ICcnLFxuICAgIGlzTG9hZGluZyA/ICdpcy1sb2FkaW5nJyA6ICcnLFxuICAgIG9wYWNpdHkgPyAnb3BhY2l0eScgOiAnJyxcbiAgICBkaXNhYmxlZCA/ICdkaXNhYmxlZCcgOiAnJyxcbiAgICB3aWR0aEF1dG8gPyAnd2lkdGgtYXV0bycgOiAnJyxcbiAgICBub1BhZGRpbmcgPyAnbm8tcGFkZGluZycgOiAnJyxcbiAgICB3aGl0ZVNwYWNlTm93cmFwID8gJ3doaXRlLXNwYWNlLW5vLXdyYXAnIDogJycsXG4gICAgIXdhaXRGb3JDb25maXJtRGVsZXRlICYmIGNvbmZpcm1EZWxldGUgPyAnc3RlcC1kZWxldGUnIDogJycsXG4gICAgY29uZmlybURlbGV0ZSA/ICdkZWxldGVQb3NpdGlvbi0nICsgY29uZmlybURlbGV0ZVBvc2l0aW9uIDogJydcbiAgICBdXCJcbiAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAndGV4dC1hbGlnbic6IGNvbnRlbnRIb3Jpem9udGFsUG9zaXRpb25cbiAgICB9XCJcbj5cbiAgPHNwYW4gY2xhc3M9XCJ3YWMtYnV0dG9uX193cmFwcGVyXCIgW3N0eWxlLmNvbG9yXT1cInRleHRjb2xvciA/IHRleHRjb2xvciA6ICcnXCI+XG4gICAgPGkgKm5nSWY9XCJpY29uXCIgW25nQ2xhc3NdPVwiaWNvblwiIFtzdHlsZS5mb250LXNpemUucHhdPVwiaWNvbkZvbnRTaXplXCI+PC9pPlxuICAgIHt7IGxhYmVsIH19XG4gICAgPGkgKm5nSWY9XCJpY29uTmV4dFwiIFtuZ0NsYXNzXT1cImljb25OZXh0XCIgW3N0eWxlLmZvbnQtc2l6ZS5weF09XCJpY29uRm9udFNpemVcIj48L2k+XG4gIDwvc3Bhbj5cbiAgPHNwYW4gY2xhc3M9XCJ3YWMtYnV0dG9uX19hbmltYXRpb25cIiBbc3R5bGUubWF4V2lkdGhdPVwiYnV0dG9uTWF4V2lkdGhcIiBbc3R5bGUud2lkdGhdPVwiYnV0dG9uV2lkdGggKyAncHgnXCI+XG4gICAgPHNwYW4gI2NhbGN1bFdpZHRoIGNsYXNzPVwid2FjLWJ1dHRvbl9fYW5pbWF0aW9uX190ZXh0XCIgW2lubmVySFRNTF09XCJhbmltYXRpb25UZXh0XCI+PC9zcGFuPlxuICA8L3NwYW4+XG4gIDxzcGFuIGNsYXNzPVwid2FjLWJ1dHRvbl9fY29uZmlybURlbGV0ZVwiIFtzdHlsZS5tYXhXaWR0aF09XCJidXR0b25NYXhXaWR0aERlbGV0ZVwiIFtzdHlsZS53aWR0aF09XCJidXR0b25XaWR0aERlbGV0ZSArICdweCdcIj5cbiAgICA8c3BhbiAjY2FsY3VsV2lkdGhEZWxldGUgY2xhc3M9XCJ3YWMtYnV0dG9uX19jb25maXJtRGVsZXRlX190ZXh0XCIgW2lubmVySFRNTF09XCJjb25maXJtRGVsZXRlVGV4dFwiPjwvc3Bhbj5cbiAgPC9zcGFuPlxuICA8c3BhbiAqbmdJZj1cImNvaW5cIiBjbGFzcz1cIndhYy1idXR0b25fX2NvaW5cIj48aSBjbGFzcz1cImZhLXNvbGlkIGZhLWNvaW4tZnJvbnRcIj48L2k+PHNwYW4gW2lubmVySFRNTF09XCJjb2luXCI+PC9zcGFuPjwvc3Bhbj5cbiAgPHNwYW5cbiAgICBjbGFzcz1cIndhYy1idXR0b25fX2xvYWRlclwiXG4gICAgW25nQ2xhc3NdPVwiZXh0cmFDbGFzc2VzLmluY2x1ZGVzKCdpcy1vdXRsaW5lZCcpID8gJ291dGxpbmVkJyA6ICcnXCJcbiAgICAqbmdJZj1cImlzTG9hZGluZ1wiXG4gICAgW3N0eWxlLndpZHRoXT1cImN1cnJlbnRMb2FkaW5nICsgJyUnXCJcbiAgPlxuICAgIDxzcGFuICpuZ0lmPVwiZXh0cmFDbGFzc2VzLmluY2x1ZGVzKCdpcy1vdXRsaW5lZCcpXCI+XG4gICAgICA8aSAqbmdJZj1cImljb24gIT09ICcnXCIgW25nQ2xhc3NdPVwiaWNvblwiIFtzdHlsZS5mb250LXNpemUucHhdPVwiaWNvbkZvbnRTaXplXCI+PC9pPlxuICAgICAge3sgbGFiZWwgfX1cbiAgICAgIDxpICpuZ0lmPVwiaWNvbk5leHQgIT09ICcnXCIgW25nQ2xhc3NdPVwiaWNvbk5leHRcIiBbc3R5bGUuZm9udC1zaXplLnB4XT1cImljb25Gb250U2l6ZVwiPjwvaT5cbiAgICA8L3NwYW4+XG4gIDwvc3Bhbj5cbiAgPHNwYW4gY2xhc3M9XCJ3YWMtYnV0dG9uX190b29sdGlwcyB7eyB0b29sdGlwUG9zaXRpb24gfX1cIiBbbmdDbGFzc109XCJ7J29uZWxpbmUnOiB0b29sdGlwT25lbGluZX1cIiBbc3R5bGUubWluV2lkdGhdPVwidG9vbHRpcFdpZHRoXCIgKm5nSWY9XCJ0b29sdGlwXCI+XG4gICAge3sgdG9vbHRpcCB9fVxuICA8L3NwYW4+XG48L2E+XG4iXX0=
@@ -18,7 +18,6 @@ export class SelectTestComponent {
18
18
  constructor(valueChangeService) {
19
19
  this.valueChangeService = valueChangeService;
20
20
  //! Refacto improve sroll on mobile, see with Pauline
21
- // todo handle when user search with first letter from keyboard event
22
21
  // angular material select https://github.com/angular/components/blob/main/src/material/select/select.ts
23
22
  this.role = 'combobox';
24
23
  this.valueChange = new EventEmitter();
@@ -134,7 +133,6 @@ export class SelectTestComponent {
134
133
  }
135
134
  /** Handles keyboard events when the selected is open. */
136
135
  _handleOpenKeydown(event) {
137
- console.log('event', event);
138
136
  const keyCode = event.keyCode;
139
137
  const isArrowKey = keyCode === DOWN_ARROW ||
140
138
  keyCode === UP_ARROW ||
@@ -181,7 +179,7 @@ export class SelectTestComponent {
181
179
  }
182
180
  }
183
181
  SelectTestComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.7", ngImport: i0, type: SelectTestComponent, deps: [{ token: i1.ValueChangeService }], target: i0.ɵɵFactoryTarget.Component });
184
- SelectTestComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.7", type: SelectTestComponent, selector: "wac-select-test", inputs: { value: "value", required: "required", disabled: "disabled", keepPanelOpen: "keepPanelOpen", openPanel: "openPanel", enableSearch: "enableSearch" }, outputs: { valueChange: "valueChange", openPanelChange: "openPanelChange" }, host: { listeners: { "document:keydown": "_handleKeydown($event)" }, properties: { "attr.role": "this.role" } }, providers: [
182
+ SelectTestComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.7", type: SelectTestComponent, selector: "wac-select-test", inputs: { value: "value", required: "required", disabled: "disabled", keepPanelOpen: "keepPanelOpen", openPanel: "openPanel", enableSearch: "enableSearch" }, outputs: { valueChange: "valueChange", openPanelChange: "openPanelChange" }, host: { listeners: { "keydown": "_handleKeydown($event)" }, properties: { "attr.role": "this.role" } }, providers: [
185
183
  { provide: NG_VALUE_ACCESSOR, useExisting: SelectTestComponent, multi: true },
186
184
  ValueChangeService
187
185
  ], queries: [{ propertyName: "customSearchTrigger", first: true, predicate: SelectSearchTriggerComponent, descendants: true }, { propertyName: "label", first: true, predicate: LabelComponent, descendants: true }, { propertyName: "optionChildren", predicate: OPTION_SELECTION_HANDLER, descendants: true }], ngImport: i0, template: "<p *ngIf=\"!!label\" class=\"wac-select-test__label\">\n <ng-content select=\"wac-label, .wac-label\" ></ng-content>\n</p>\n\n\n<div\n class=\"wac-select-test\"\n wzAutoHide\n (clickOutside)=\"onClosePanel()\"\n [triggerElement]=\"'wac-select-test__header__selection'\"\n [zIndexToggle]=\"openPanel\"\n >\n\n <div class=\"wac-select-test__header\" [ngClass]=\"{ 'select-disabled' : disabled }\" (click)=\"!disabled && onTogglePanel()\" tabindex=\"0\">\n\n <ng-container [ngTemplateOutlet]=\"openPanel ? openPanelTrigger : closePanelTrigger\" >\n\n <ng-template #closePanelTrigger>\n <ng-container [ngTemplateOutlet]=\"defaultTrigger\"></ng-container>\n </ng-template>\n\n <ng-template #openPanelTrigger>\n <ng-content *ngIf=\"!!customSearchTrigger; else defaultTrigger\" select=\"wac-select-search-trigger\" ></ng-content>\n </ng-template>\n\n <ng-template #defaultTrigger>\n <ng-content *ngIf=\"!selectedOptionContent\" select=\"wac-placeholder,[role=placeholder]\"></ng-content>\n <div\n class=\"wac-select-test__header__selection wac-option__placeholder\"\n *ngIf=\"!!selectedOptionContent\"\n [innerHtml]=\"selectedOptionContent\">\n </div>\n </ng-template>\n\n </ng-container>\n\n <span class=\"wac-select-test__header__chevron\"><i class=\"fas fa-chevron-down\"></i></span>\n\n </div>\n\n\n <div class=\"wac-select-test__content\" *ngIf=\"!disabled\" [ngClass]=\"{ hidden: !openPanel, open: openPanel }\">\n\n <perfect-scrollbar [config]=\"{ suppressScrollX: true }\">\n <ng-content\n select=\"wac-option-call-to-action, wac-option, option, .option, [selectOption]\">\n </ng-content>\n </perfect-scrollbar>\n\n <div *ngIf=\"!optionChildren?.length\" class=\"wac-select-test__content__empty\">\n <span>{{'wac.datatable.noresult' | translate}}</span>\n </div>\n\n </div>\n</div>", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.AutoHideDirective, selector: "[wzAutoHide]", inputs: ["triggerElement", "forceOn"], outputs: ["clickOutside"] }, { kind: "directive", type: i4.ZindexToggleDirective, selector: "[zIndexToggle]", inputs: ["zIndexToggle"], outputs: ["onEventChange"] }, { kind: "component", type: i5.PerfectScrollbarComponent, selector: "perfect-scrollbar", inputs: ["disabled", "usePSClass", "autoPropagation", "scrollIndicators", "config"], outputs: ["psScrollY", "psScrollX", "psScrollUp", "psScrollDown", "psScrollLeft", "psScrollRight", "psYReachEnd", "psYReachStart", "psXReachEnd", "psXReachStart"], exportAs: ["ngxPerfectScrollbar"] }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
@@ -221,6 +219,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.7", ngImpor
221
219
  type: Input
222
220
  }], _handleKeydown: [{
223
221
  type: HostListener,
224
- args: ['document:keydown', ['$event']]
222
+ args: ['keydown', ['$event']]
225
223
  }] } });
226
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvc2VsZWN0cy9zZWxlY3QtdGVzdC9zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9zZWxlY3RzL3NlbGVjdC10ZXN0L3NlbGVjdC10ZXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsdUJBQXVCLEVBQXFCLFNBQVMsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFhLGlCQUFpQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzVPLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFcEYsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDeEcsT0FBTyxFQUNMLENBQUMsRUFDRCxVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sRUFDTixjQUFjLEVBQ2QsVUFBVSxFQUNWLElBQUksRUFDSixXQUFXLEVBQ1gsS0FBSyxFQUNMLFFBQVEsRUFDUixDQUFDLEVBQ0QsSUFBSSxHQUNMLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FB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Z0JBMkMwQyxjQUFjO3NCQUEzRCxZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIENvbnRlbnRDaGlsZCwgQ29udGVudENoaWxkcmVuLCBFdmVudEVtaXR0ZXIsIEhvc3RCaW5kaW5nLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBRdWVyeUxpc3QsIFZpZXdFbmNhcHN1bGF0aW9ufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IHN0YXJ0V2l0aCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVmFsdWVDaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnLi92YWx1ZS1jaGFuZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBPUFRJT05fU0VMRUNUSU9OX0hBTkRMRVIgfSBmcm9tICcuLi9vcHRpb24vb3B0aW9uLXNlbGVjdGlvbi1oYW5kbGVyLnRva2VuJztcbmltcG9ydCB7IE9wdGlvblNlbGVjdGlvbkhhbmRsZXIgfSBmcm9tICcuLi9vcHRpb24vb3B0aW9uLXNlbGVjdGlvbi1oYW5kbGVyLmludGVyZmFjZSc7XG5pbXBvcnQgeyBTZWxlY3RTZWFyY2hUcmlnZ2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vc2VsZWN0LXNlYXJjaC10cmlnZ2VyL3NlbGVjdC1zZWFyY2gtdHJpZ2dlci5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgQSxcbiAgRE9XTl9BUlJPVyxcbiAgRU5URVIsXG4gIEVTQ0FQRSxcbiAgaGFzTW9kaWZpZXJLZXksXG4gIExFRlRfQVJST1csXG4gIE5JTkUsXG4gIFJJR0hUX0FSUk9XLFxuICBTUEFDRSxcbiAgVVBfQVJST1csXG4gIFosXG4gIFpFUk8sXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQgeyBMYWJlbENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbW1vbi9sYWJlbC9sYWJlbC5jb21wb25lbnQnO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3dhYy1zZWxlY3QtdGVzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWxlY3QtdGVzdC5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW1xuICAgIHsgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsIHVzZUV4aXN0aW5nOiBTZWxlY3RUZXN0Q29tcG9uZW50LCBtdWx0aTogdHJ1ZSB9LFxuICAgIFZhbHVlQ2hhbmdlU2VydmljZVxuICBdLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU2VsZWN0VGVzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIC8vISBSZWZhY3RvIGltcHJvdmUgc3JvbGwgb24gbW9iaWxlLCBzZWUgd2l0aCBQYXVsaW5lXG4gIC8vIHRvZG8gaGFuZGxlIHdoZW4gdXNlciBzZWFyY2ggd2l0aCBmaXJzdCBsZXR0ZXIgZnJvbSBrZXlib2FyZCBldmVudFxuICAvLyBhbmd1bGFyIG1hdGVyaWFsIHNlbGVjdCBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9jb21wb25lbnRzL2Jsb2IvbWFpbi9zcmMvbWF0ZXJpYWwvc2VsZWN0L3NlbGVjdC50c1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJykgcm9sZSA9ICdjb21ib2JveCc7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihPUFRJT05fU0VMRUNUSU9OX0hBTkRMRVIgYXMgYW55LCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIG9wdGlvbkNoaWxkcmVuITogUXVlcnlMaXN0PE9wdGlvblNlbGVjdGlvbkhhbmRsZXI+O1xuXG4gIEBDb250ZW50Q2hpbGQoU2VsZWN0U2VhcmNoVHJpZ2dlckNvbXBvbmVudCkgY3VzdG9tU2VhcmNoVHJpZ2dlcjogU2VsZWN0U2VhcmNoVHJpZ2dlckNvbXBvbmVudDtcblxuICBAQ29udGVudENoaWxkKExhYmVsQ29tcG9uZW50KSBsYWJlbDogTGFiZWxDb21wb25lbnRcblxuICBASW5wdXQoKVxuICBzZXQgdmFsdWUodmFsdWU6IGFueSkge1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG5cbiAgICBpZiAoIXRoaXMub3B0aW9uQ2hpbGRyZW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnZhbHVlQ2hhbmdlU2VydmljZS5hc3NpZ25WYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICBnZXQgdmFsdWUoKSA6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG4gIF92YWx1ZTogYW55O1xuXG4gIEBPdXRwdXQoKVxuICB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBjb21wb25lbnQgaXMgcmVxdWlyZWQuICovXG4gIEBJbnB1dCgpXG4gIGdldCByZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQgPz8gZmFsc2U7XG4gIH1cblxuICBzZXQgcmVxdWlyZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9yZXF1aXJlZCA9IHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVxdWlyZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgQElucHV0KClcbiAgZGlzYWJsZWQgPSBmYWxzZTtcblxuICBnZXQgc2VsZWN0ZWRPcHRpb25Db250ZW50KCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVDaGFuZ2VTZXJ2aWNlLnNlbGVjdGVkT3B0aW9uQ29udGVudDtcbiAgfTtcblxuICBASW5wdXQoKVxuICBzZXQga2VlcFBhbmVsT3BlbihrZWVwUGFuZWxPcGVuOiBib29sZWFuKSB7XG4gICAgdGhpcy5vcGVuUGFuZWwgPSBrZWVwUGFuZWxPcGVuO1xuICAgIHRoaXMuX2tlZXBQYW5lbE9wZW4gPSBrZWVwUGFuZWxPcGVuO1xuICB9XG5cbiAgZ2V0IGtlZXBQYW5lbE9wZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2tlZXBQYW5lbE9wZW4gO1xuICB9XG5cbiAgcHJpdmF0ZSBfa2VlcFBhbmVsT3BlbjogYm9vbGVhbjtcblxuXG4gIEBJbnB1dCgpXG4gIHNldCBvcGVuUGFuZWwob3BlblBhbmVsOiBib29sZWFuKSB7XG4gICAgY29uc3Qgd2FzT3BlbiA9IHRoaXMuX29wZW5QYW5lbDtcbiAgICB0aGlzLl9vcGVuUGFuZWwgPSB0aGlzLmtlZXBQYW5lbE9wZW4gfHwgb3BlblBhbmVsO1xuXG4gICAgaWYgKG9wZW5QYW5lbCkge1xuICAgICAgdGhpcy5jdXN0b21TZWFyY2hUcmlnZ2VyPy5zZXRGb2N1cygpO1xuICAgIH1cblxuICAgIGlmICh3YXNPcGVuKSB7XG4gICAgICB0aGlzLm9uVG91Y2godGhpcy52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IG9wZW5QYW5lbCgpIDogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX29wZW5QYW5lbDtcbiAgfVxuICBfb3BlblBhbmVsOiBib29sZWFuID0gZmFsc2U7XG5cblxuICBAT3V0cHV0KCkgb3BlblBhbmVsQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIEBJbnB1dCgpIGVuYWJsZVNlYXJjaDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGlzRGVzdHJveWVkJDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB2YWx1ZUNoYW5nZVNlcnZpY2U6IFZhbHVlQ2hhbmdlU2VydmljZVxuICAgICkge1xuICAgIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmhhbmRsZVZhbHVlQ2hhbmdlKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5oYW5kbGVPcHRpb25DaGlsZHJlbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVWYWx1ZUNoYW5nZSgpIHtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlU2VydmljZS52YWx1ZUNoYW5nZSQucGlwZSh0YWtlVW50aWwodGhpcy5pc0Rlc3Ryb3llZCQpKS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICAgIHRoaXMub25DaGFuZ2UodGhpcy52YWx1ZSk7XG4gICAgICB0aGlzLm9uQ2xvc2VQYW5lbCgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVPcHRpb25DaGlsZHJlbigpIHtcbiAgICB0aGlzLm9wdGlvbkNoaWxkcmVuLmNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5pc0Rlc3Ryb3llZCQpLCBzdGFydFdpdGgodGhpcy5vcHRpb25DaGlsZHJlbikpLnN1YnNjcmliZShvcHRpb25DaGlsZHJlbiA9PiB7IC8vIHRvZG8gdW5zdWJzY3JpYmUgYW5kIGRlc3Ryb3lcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2VTZXJ2aWNlLmhhbmRsZVNlbGVjdE9wdGlvbnNDaGFuZ2Uob3B0aW9uQ2hpbGRyZW4sIHRoaXMudmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgb25Ub2dnbGVQYW5lbCgpIHtcbiAgICB0aGlzLm9wZW5QYW5lbCA9ICF0aGlzLm9wZW5QYW5lbDtcbiAgICB0aGlzLm9wZW5QYW5lbENoYW5nZS5lbWl0KHRoaXMub3BlblBhbmVsKTtcbiAgfVxuXG4gIG9uQ2xvc2VQYW5lbCgpIHtcbiAgICB0aGlzLm9wZW5QYW5lbCA9IGZhbHNlO1xuICAgIHRoaXMub3BlblBhbmVsQ2hhbmdlLmVtaXQodGhpcy5vcGVuUGFuZWwpO1xuICB9XG5cbiAgICAvKiogSGFuZGxlcyBhbGwga2V5ZG93biBldmVudHMgb24gdGhlIHNlbGVjdC4gKi9cbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duJywgWyckZXZlbnQnXSkgX2hhbmRsZUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMub3BlblBhbmVsID8gdGhpcy5faGFuZGxlT3BlbktleWRvd24oZXZlbnQpIDogdGhpcy5faGFuZGxlQ2xvc2VkS2V5ZG93bihldmVudCk7XG4gICAgfVxuXG4gIC8qKiBIYW5kbGVzIGtleWJvYXJkIGV2ZW50cyB3aGlsZSB0aGUgc2VsZWN0IGlzIGNsb3NlZC4gKi9cbiAgcHJpdmF0ZSBfaGFuZGxlQ2xvc2VkS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGtleUNvZGUgPSBldmVudC5rZXlDb2RlO1xuICAgIGNvbnN0IGlzQXJyb3dLZXkgPVxuICAgICAga2V5Q29kZSA9PT0gRE9XTl9BUlJPVyB8fFxuICAgICAga2V5Q29kZSA9PT0gVVBfQVJST1cgfHxcbiAgICAgIGtleUNvZGUgPT09IExFRlRfQVJST1cgfHxcbiAgICAgIGtleUNvZGUgPT09IFJJR0hUX0FSUk9XO1xuICAgIGNvbnN0IGlzT3BlbktleSA9IGtleUNvZGUgPT09IEVOVEVSIHx8IGtleUNvZGUgPT09IFNQQUNFO1xuXG4gICAgLy8gT3BlbiB0aGUgc2VsZWN0IG9uIEFMVCArIGFycm93IGtleSB0byBtYXRjaCB0aGUgbmF0aXZlIDxzZWxlY3Q+XG4gICAgaWYgKFxuICAgICAgKGlzT3BlbktleSAmJiAhaGFzTW9kaWZpZXJLZXkoZXZlbnQpKSB8fFxuICAgICAgKGV2ZW50LmFsdEtleSAmJiBpc0Fycm93S2V5KVxuICAgICkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsgLy8gcHJldmVudHMgdGhlIHBhZ2UgZnJvbSBzY3JvbGxpbmcgZG93biB3aGVuIHByZXNzaW5nIHNwYWNlXG4gICAgICB0aGlzLm9wZW5QYW5lbCA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFpc0Fycm93S2V5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsgLy8gcHJldmVudHMgdGhlIHBhZ2UgZnJvbSBzY3JvbGxpbmdcblxuICAgIC8vIHNlbGVjdCB0aGUgbmV4dCBvcHRpb24gb24gYXJyb3cga2V5IGRvd25cbiAgICBpZiAoa2V5Q29kZSA9PT0gRE9XTl9BUlJPVyB8fCBrZXlDb2RlID09PSBSSUdIVF9BUlJPVykge1xuICAgICAgdGhpcy52YWx1ZUNoYW5nZVNlcnZpY2Uuc2VsZWN0TmV4dE9wdGlvbigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnZhbHVlQ2hhbmdlU2VydmljZS5zZWxlY3RQcmV2aW91c09wdGlvbigpO1xuXG4gIH1cblxuICAvKiogSGFuZGxlcyBrZXlib2FyZCBldmVudHMgd2hlbiB0aGUgc2VsZWN0ZWQgaXMgb3Blbi4gKi9cbiAgcHJpdmF0ZSBfaGFuZGxlT3BlbktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnZXZlbnQnLCBldmVudCk7XG4gICAgY29uc3Qga2V5Q29kZSA9IGV2ZW50LmtleUNvZGU7XG4gICAgY29uc3QgaXNBcnJvd0tleSA9XG4gICAgICBrZXlDb2RlID09PSBET1dOX0FSUk9XIHx8XG4gICAgICBrZXlDb2RlID09PSBVUF9BUlJPVyB8fFxuICAgICAga2V5Q29kZSA9PT0gTEVGVF9BUlJPVyB8fFxuICAgICAga2V5Q29kZSA9PT0gUklHSFRfQVJST1c7XG4gICAgY29uc3QgaXNFc2NhcGVLZXkgPSBrZXlDb2RlID09PSBFU0NBUEUgfHwga2V5Q29kZSA9PT0gRU5URVIgfHwga2V5Q29kZSA9PT0gU1BBQ0U7XG4gICAgY29uc3QgaXNUeXBpbmcgPSAoa2V5Q29kZSA+PSBBICYmIGtleUNvZGUgPD0gWikgfHwgKGtleUNvZGUgPj0gWkVSTyAmJiBrZXlDb2RlIDw9IE5JTkUpO1xuXG4gICAgaWYgKChpc0Fycm93S2V5ICYmIGV2ZW50LmFsdEtleSkgfHwgaXNFc2NhcGVLZXkpIHtcbiAgICAgIC8vIENsb3NlIHRoZSBzZWxlY3Qgb24gQUxUICsgYXJyb3cga2V5IHRvIG1hdGNoIHRoZSBuYXRpdmUgPHNlbGVjdD5cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLm9wZW5QYW5lbCA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJvd0tleSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsgLy8gcHJldmVudHMgdGhlIHBhZ2UgZnJvbSBzY3JvbGxpbmdcblxuICAgICAgLy8gc2VsZWN0IHRoZSBuZXh0IG9wdGlvbiBvbiBhcnJvdyBrZXkgZG93blxuICAgICAgaWYgKGtleUNvZGUgPT09IERPV05fQVJST1cgfHwga2V5Q29kZSA9PT0gUklHSFRfQVJST1cpIHtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZVNlcnZpY2Uuc2VsZWN0TmV4dE9wdGlvbigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlU2VydmljZS5zZWxlY3RQcmV2aW91c09wdGlvbigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpc1R5cGluZyAmJiAhdGhpcy5jdXN0b21TZWFyY2hUcmlnZ2VyKSB7XG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlU2VydmljZS5zZWFyY2hPcHRpb25CeUZpcnN0TGV0dGVyKGV2ZW50LmtleSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gIH1cblxuICAvLyBDb250cm9sVmFsdWVBY2Nlc3NvciBtZXRob2RzXG5cbiAgb25DaGFuZ2U6ICh2YWx1ZTogbnVtYmVyKSA9PiB2b2lkID0gKCkgPT4ge307XG5cbiAgb25Ub3VjaDogKHZhbHVlOiBhbnkpID0+IHZvaWQgPSAoKSA9PiB7fTsgLy8gdG9kbyBjYWxsIGl0IG9uIGJsdXIgYW5kIG9uIGNsb3NlIGlmIG5vdCBkaXNhYmxlIGFuZCBvcGVuZWRcblxuICB3cml0ZVZhbHVlKHZhbHVlOiBudW1iZXIpe1xuICAgIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KXtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSl7XG4gICAgdGhpcy5vblRvdWNoID0gZm47XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmlzRGVzdHJveWVkJC5uZXh0KCk7XG4gICAgdGhpcy5pc0Rlc3Ryb3llZCQuY29tcGxldGUoKTtcbiAgfVxufVxuIiwiPHAgKm5nSWY9XCIhIWxhYmVsXCIgY2xhc3M9XCJ3YWMtc2VsZWN0LXRlc3RfX2xhYmVsXCI+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIndhYy1sYWJlbCwgLndhYy1sYWJlbFwiID48L25nLWNvbnRlbnQ+XG48L3A+XG5cblxuPGRpdlxuICBjbGFzcz1cIndhYy1zZWxlY3QtdGVzdFwiXG4gIHd6QXV0b0hpZGVcbiAgKGNsaWNrT3V0c2lkZSk9XCJvbkNsb3NlUGFuZWwoKVwiXG4gIFt0cmlnZ2VyRWxlbWVudF09XCInd2FjLXNlbGVjdC10ZXN0X19oZWFkZXJfX3NlbGVjdGlvbidcIlxuICBbekluZGV4VG9nZ2xlXT1cIm9wZW5QYW5lbFwiXG4gID5cblxuICAgIDxkaXYgY2xhc3M9XCJ3YWMtc2VsZWN0LXRlc3RfX2hlYWRlclwiIFtuZ0NsYXNzXT1cInsgJ3NlbGVjdC1kaXNhYmxlZCcgOiBkaXNhYmxlZCB9XCIgKGNsaWNrKT1cIiFkaXNhYmxlZCAmJiBvblRvZ2dsZVBhbmVsKClcIiB0YWJpbmRleD1cIjBcIj5cblxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJvcGVuUGFuZWwgPyBvcGVuUGFuZWxUcmlnZ2VyIDogY2xvc2VQYW5lbFRyaWdnZXJcIiA+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNjbG9zZVBhbmVsVHJpZ2dlcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImRlZmF1bHRUcmlnZ2VyXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNvcGVuUGFuZWxUcmlnZ2VyPlxuICAgICAgICAgIDxuZy1jb250ZW50ICpuZ0lmPVwiISFjdXN0b21TZWFyY2hUcmlnZ2VyOyBlbHNlIGRlZmF1bHRUcmlnZ2VyXCIgc2VsZWN0PVwid2FjLXNlbGVjdC1zZWFyY2gtdHJpZ2dlclwiID48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0VHJpZ2dlcj5cbiAgICAgICAgICA8bmctY29udGVudCAqbmdJZj1cIiFzZWxlY3RlZE9wdGlvbkNvbnRlbnRcIiBzZWxlY3Q9XCJ3YWMtcGxhY2Vob2xkZXIsW3JvbGU9cGxhY2Vob2xkZXJdXCI+PC9uZy1jb250ZW50PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwid2FjLXNlbGVjdC10ZXN0X19oZWFkZXJfX3NlbGVjdGlvbiB3YWMtb3B0aW9uX19wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAqbmdJZj1cIiEhc2VsZWN0ZWRPcHRpb25Db250ZW50XCJcbiAgICAgICAgICAgIFtpbm5lckh0bWxdPVwic2VsZWN0ZWRPcHRpb25Db250ZW50XCI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8c3BhbiBjbGFzcz1cIndhYy1zZWxlY3QtdGVzdF9faGVhZGVyX19jaGV2cm9uXCI+PGkgY2xhc3M9XCJmYXMgZmEtY2hldnJvbi1kb3duXCI+PC9pPjwvc3Bhbj5cblxuICAgIDwvZGl2PlxuXG5cbiAgICA8ZGl2IGNsYXNzPVwid2FjLXNlbGVjdC10ZXN0X19jb250ZW50XCIgKm5nSWY9XCIhZGlzYWJsZWRcIiBbbmdDbGFzc109XCJ7IGhpZGRlbjogIW9wZW5QYW5lbCwgb3Blbjogb3BlblBhbmVsIH1cIj5cblxuICAgICAgPHBlcmZlY3Qtc2Nyb2xsYmFyIFtjb25maWddPVwieyBzdXBwcmVzc1Njcm9sbFg6IHRydWUgfVwiPlxuICAgICAgICA8bmctY29udGVudFxuICAgICAgICAgIHNlbGVjdD1cIndhYy1vcHRpb24tY2FsbC10by1hY3Rpb24sIHdhYy1vcHRpb24sIG9wdGlvbiwgLm9wdGlvbiwgW3NlbGVjdE9wdGlvbl1cIj5cbiAgICAgICAgPC9uZy1jb250ZW50PlxuICAgICAgPC9wZXJmZWN0LXNjcm9sbGJhcj5cblxuICAgICAgPGRpdiAqbmdJZj1cIiFvcHRpb25DaGlsZHJlbj8ubGVuZ3RoXCIgY2xhc3M9XCJ3YWMtc2VsZWN0LXRlc3RfX2NvbnRlbnRfX2VtcHR5XCI+XG4gICAgICAgIDxzcGFuPnt7J3dhYy5kYXRhdGFibGUubm9yZXN1bHQnIHwgdHJhbnNsYXRlfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cblxuICAgIDwvZGl2PlxuPC9kaXY+Il19
224
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvc2VsZWN0cy9zZWxlY3QtdGVzdC9zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9zZWxlY3RzL3NlbGVjdC10ZXN0L3NlbGVjdC10ZXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWEsaUJBQWlCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDek4sT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUVwRixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUN4RyxPQUFPLEVBQ0wsQ0FBQyxFQUNELFVBQVUsRUFDVixLQUFLLEVBQ0wsTUFBTSxFQUNOLGNBQWMsRUFDZCxVQUFVLEVBQ1YsSUFBSSxFQUNKLFdBQVcsRUFDWCxLQUFLLEVBQ0wsUUFBUSxFQUNSLENBQUMsRUFDRCxJQUFJLEdBQ0wsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFP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Q29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIENvbnRlbnRDaGlsZHJlbiwgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgUXVlcnlMaXN0LCBWaWV3RW5jYXBzdWxhdGlvbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBzdGFydFdpdGgsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFZhbHVlQ2hhbmdlU2VydmljZSB9IGZyb20gJy4vdmFsdWUtY2hhbmdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgT1BUSU9OX1NFTEVDVElPTl9IQU5ETEVSIH0gZnJvbSAnLi4vb3B0aW9uL29wdGlvbi1zZWxlY3Rpb24taGFuZGxlci50b2tlbic7XG5pbXBvcnQgeyBPcHRpb25TZWxlY3Rpb25IYW5kbGVyIH0gZnJvbSAnLi4vb3B0aW9uL29wdGlvbi1zZWxlY3Rpb24taGFuZGxlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgU2VsZWN0U2VhcmNoVHJpZ2dlckNvbXBvbmVudCB9IGZyb20gJy4uL3NlbGVjdC1zZWFyY2gtdHJpZ2dlci9zZWxlY3Qtc2VhcmNoLXRyaWdnZXIuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIEEsXG4gIERPV05fQVJST1csXG4gIEVOVEVSLFxuICBFU0NBUEUsXG4gIGhhc01vZGlmaWVyS2V5LFxuICBMRUZUX0FSUk9XLFxuICBOSU5FLFxuICBSSUdIVF9BUlJPVyxcbiAgU1BBQ0UsXG4gIFVQX0FSUk9XLFxuICBaLFxuICBaRVJPLFxufSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHsgTGFiZWxDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21tb24vbGFiZWwvbGFiZWwuY29tcG9uZW50JztcblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd3YWMtc2VsZWN0LXRlc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0LXRlc3QuY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtcbiAgICB7IHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLCB1c2VFeGlzdGluZzogU2VsZWN0VGVzdENvbXBvbmVudCwgbXVsdGk6IHRydWUgfSxcbiAgICBWYWx1ZUNoYW5nZVNlcnZpY2VcbiAgXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNlbGVjdFRlc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAvLyEgUmVmYWN0byBpbXByb3ZlIHNyb2xsIG9uIG1vYmlsZSwgc2VlIHdpdGggUGF1bGluZVxuICAvLyBhbmd1bGFyIG1hdGVyaWFsIHNlbGVjdCBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9jb21wb25lbnRzL2Jsb2IvbWFpbi9zcmMvbWF0ZXJpYWwvc2VsZWN0L3NlbGVjdC50c1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJykgcm9sZSA9ICdjb21ib2JveCc7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihPUFRJT05fU0VMRUNUSU9OX0hBTkRMRVIgYXMgYW55LCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIG9wdGlvbkNoaWxkcmVuITogUXVlcnlMaXN0PE9wdGlvblNlbGVjdGlvbkhhbmRsZXI+O1xuXG4gIEBDb250ZW50Q2hpbGQoU2VsZWN0U2VhcmNoVHJpZ2dlckNvbXBvbmVudCkgY3VzdG9tU2VhcmNoVHJpZ2dlcjogU2VsZWN0U2VhcmNoVHJpZ2dlckNvbXBvbmVudDtcblxuICBAQ29udGVudENoaWxkKExhYmVsQ29tcG9uZW50KSBsYWJlbDogTGFiZWxDb21wb25lbnRcblxuICBASW5wdXQoKVxuICBzZXQgdmFsdWUodmFsdWU6IGFueSkge1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG5cbiAgICBpZiAoIXRoaXMub3B0aW9uQ2hpbGRyZW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnZhbHVlQ2hhbmdlU2VydmljZS5hc3NpZ25WYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICBnZXQgdmFsdWUoKSA6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG4gIF92YWx1ZTogYW55O1xuXG4gIEBPdXRwdXQoKVxuICB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBjb21wb25lbnQgaXMgcmVxdWlyZWQuICovXG4gIEBJbnB1dCgpXG4gIGdldCByZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQgPz8gZmFsc2U7XG4gIH1cblxuICBzZXQgcmVxdWlyZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9yZXF1aXJlZCA9IHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVxdWlyZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgQElucHV0KClcbiAgZGlzYWJsZWQgPSBmYWxzZTtcblxuICBnZXQgc2VsZWN0ZWRPcHRpb25Db250ZW50KCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVDaGFuZ2VTZXJ2aWNlLnNlbGVjdGVkT3B0aW9uQ29udGVudDtcbiAgfTtcblxuICBASW5wdXQoKVxuICBzZXQga2VlcFBhbmVsT3BlbihrZWVwUGFuZWxPcGVuOiBib29sZWFuKSB7XG4gICAgdGhpcy5vcGVuUGFuZWwgPSBrZWVwUGFuZWxPcGVuO1xuICAgIHRoaXMuX2tlZXBQYW5lbE9wZW4gPSBrZWVwUGFuZWxPcGVuO1xuICB9XG5cbiAgZ2V0IGtlZXBQYW5lbE9wZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2tlZXBQYW5lbE9wZW4gO1xuICB9XG5cbiAgcHJpdmF0ZSBfa2VlcFBhbmVsT3BlbjogYm9vbGVhbjtcblxuXG4gIEBJbnB1dCgpXG4gIHNldCBvcGVuUGFuZWwob3BlblBhbmVsOiBib29sZWFuKSB7XG4gICAgY29uc3Qgd2FzT3BlbiA9IHRoaXMuX29wZW5QYW5lbDtcbiAgICB0aGlzLl9vcGVuUGFuZWwgPSB0aGlzLmtlZXBQYW5lbE9wZW4gfHwgb3BlblBhbmVsO1xuXG4gICAgaWYgKG9wZW5QYW5lbCkge1xuICAgICAgdGhpcy5jdXN0b21TZWFyY2hUcmlnZ2VyPy5zZXRGb2N1cygpO1xuICAgIH1cblxuICAgIGlmICh3YXNPcGVuKSB7XG4gICAgICB0aGlzLm9uVG91Y2godGhpcy52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IG9wZW5QYW5lbCgpIDogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX29wZW5QYW5lbDtcbiAgfVxuICBfb3BlblBhbmVsOiBib29sZWFuID0gZmFsc2U7XG5cblxuICBAT3V0cHV0KCkgb3BlblBhbmVsQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIEBJbnB1dCgpIGVuYWJsZVNlYXJjaDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGlzRGVzdHJveWVkJDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB2YWx1ZUNoYW5nZVNlcnZpY2U6IFZhbHVlQ2hhbmdlU2VydmljZVxuICAgICkge1xuICAgIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmhhbmRsZVZhbHVlQ2hhbmdlKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5oYW5kbGVPcHRpb25DaGlsZHJlbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVWYWx1ZUNoYW5nZSgpIHtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlU2VydmljZS52YWx1ZUNoYW5nZSQucGlwZSh0YWtlVW50aWwodGhpcy5pc0Rlc3Ryb3llZCQpKS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICAgIHRoaXMub25DaGFuZ2UodGhpcy52YWx1ZSk7XG4gICAgICB0aGlzLm9uQ2xvc2VQYW5lbCgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVPcHRpb25DaGlsZHJlbigpIHtcbiAgICB0aGlzLm9wdGlvbkNoaWxkcmVuLmNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5pc0Rlc3Ryb3llZCQpLCBzdGFydFdpdGgodGhpcy5vcHRpb25DaGlsZHJlbikpLnN1YnNjcmliZShvcHRpb25DaGlsZHJlbiA9PiB7IC8vIHRvZG8gdW5zdWJzY3JpYmUgYW5kIGRlc3Ryb3lcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2VTZXJ2aWNlLmhhbmRsZVNlbGVjdE9wdGlvbnNDaGFuZ2Uob3B0aW9uQ2hpbGRyZW4sIHRoaXMudmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgb25Ub2dnbGVQYW5lbCgpIHtcbiAgICB0aGlzLm9wZW5QYW5lbCA9ICF0aGlzLm9wZW5QYW5lbDtcbiAgICB0aGlzLm9wZW5QYW5lbENoYW5nZS5lbWl0KHRoaXMub3BlblBhbmVsKTtcbiAgfVxuXG4gIG9uQ2xvc2VQYW5lbCgpIHtcbiAgICB0aGlzLm9wZW5QYW5lbCA9IGZhbHNlO1xuICAgIHRoaXMub3BlblBhbmVsQ2hhbmdlLmVtaXQodGhpcy5vcGVuUGFuZWwpO1xuICB9XG5cbiAgICAvKiogSGFuZGxlcyBhbGwga2V5ZG93biBldmVudHMgb24gdGhlIHNlbGVjdC4gKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSkgX2hhbmRsZUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMub3BlblBhbmVsID8gdGhpcy5faGFuZGxlT3BlbktleWRvd24oZXZlbnQpIDogdGhpcy5faGFuZGxlQ2xvc2VkS2V5ZG93bihldmVudCk7XG4gICAgfVxuXG4gIC8qKiBIYW5kbGVzIGtleWJvYXJkIGV2ZW50cyB3aGlsZSB0aGUgc2VsZWN0IGlzIGNsb3NlZC4gKi9cbiAgcHJpdmF0ZSBfaGFuZGxlQ2xvc2VkS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGtleUNvZGUgPSBldmVudC5rZXlDb2RlO1xuICAgIGNvbnN0IGlzQXJyb3dLZXkgPVxuICAgICAga2V5Q29kZSA9PT0gRE9XTl9BUlJPVyB8fFxuICAgICAga2V5Q29kZSA9PT0gVVBfQVJST1cgfHxcbiAgICAgIGtleUNvZGUgPT09IExFRlRfQVJST1cgfHxcbiAgICAgIGtleUNvZGUgPT09IFJJR0hUX0FSUk9XO1xuICAgIGNvbnN0IGlzT3BlbktleSA9IGtleUNvZGUgPT09IEVOVEVSIHx8IGtleUNvZGUgPT09IFNQQUNFO1xuXG4gICAgLy8gT3BlbiB0aGUgc2VsZWN0IG9uIEFMVCArIGFycm93IGtleSB0byBtYXRjaCB0aGUgbmF0aXZlIDxzZWxlY3Q+XG4gICAgaWYgKFxuICAgICAgKGlzT3BlbktleSAmJiAhaGFzTW9kaWZpZXJLZXkoZXZlbnQpKSB8fFxuICAgICAgKGV2ZW50LmFsdEtleSAmJiBpc0Fycm93S2V5KVxuICAgICkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsgLy8gcHJldmVudHMgdGhlIHBhZ2UgZnJvbSBzY3JvbGxpbmcgZG93biB3aGVuIHByZXNzaW5nIHNwYWNlXG4gICAgICB0aGlzLm9wZW5QYW5lbCA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFpc0Fycm93S2V5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsgLy8gcHJldmVudHMgdGhlIHBhZ2UgZnJvbSBzY3JvbGxpbmdcblxuICAgIC8vIHNlbGVjdCB0aGUgbmV4dCBvcHRpb24gb24gYXJyb3cga2V5IGRvd25cbiAgICBpZiAoa2V5Q29kZSA9PT0gRE9XTl9BUlJPVyB8fCBrZXlDb2RlID09PSBSSUdIVF9BUlJPVykge1xuICAgICAgdGhpcy52YWx1ZUNoYW5nZVNlcnZpY2Uuc2VsZWN0TmV4dE9wdGlvbigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnZhbHVlQ2hhbmdlU2VydmljZS5zZWxlY3RQcmV2aW91c09wdGlvbigpO1xuXG4gIH1cblxuICAvKiogSGFuZGxlcyBrZXlib2FyZCBldmVudHMgd2hlbiB0aGUgc2VsZWN0ZWQgaXMgb3Blbi4gKi9cbiAgcHJpdmF0ZSBfaGFuZGxlT3BlbktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBrZXlDb2RlID0gZXZlbnQua2V5Q29kZTtcbiAgICBjb25zdCBpc0Fycm93S2V5ID1cbiAgICAgIGtleUNvZGUgPT09IERPV05fQVJST1cgfHxcbiAgICAgIGtleUNvZGUgPT09IFVQX0FSUk9XIHx8XG4gICAgICBrZXlDb2RlID09PSBMRUZUX0FSUk9XIHx8XG4gICAgICBrZXlDb2RlID09PSBSSUdIVF9BUlJPVztcbiAgICBjb25zdCBpc0VzY2FwZUtleSA9IGtleUNvZGUgPT09IEVTQ0FQRSB8fCBrZXlDb2RlID09PSBFTlRFUiB8fCBrZXlDb2RlID09PSBTUEFDRTtcbiAgICBjb25zdCBpc1R5cGluZyA9IChrZXlDb2RlID49IEEgJiYga2V5Q29kZSA8PSBaKSB8fCAoa2V5Q29kZSA+PSBaRVJPICYmIGtleUNvZGUgPD0gTklORSk7XG5cbiAgICBpZiAoKGlzQXJyb3dLZXkgJiYgZXZlbnQuYWx0S2V5KSB8fCBpc0VzY2FwZUtleSkge1xuICAgICAgLy8gQ2xvc2UgdGhlIHNlbGVjdCBvbiBBTFQgKyBhcnJvdyBrZXkgdG8gbWF0Y2ggdGhlIG5hdGl2ZSA8c2VsZWN0PlxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMub3BlblBhbmVsID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChpc0Fycm93S2V5KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAvLyBwcmV2ZW50cyB0aGUgcGFnZSBmcm9tIHNjcm9sbGluZ1xuXG4gICAgICAvLyBzZWxlY3QgdGhlIG5leHQgb3B0aW9uIG9uIGFycm93IGtleSBkb3duXG4gICAgICBpZiAoa2V5Q29kZSA9PT0gRE9XTl9BUlJPVyB8fCBrZXlDb2RlID09PSBSSUdIVF9BUlJPVykge1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlU2VydmljZS5zZWxlY3ROZXh0T3B0aW9uKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMudmFsdWVDaGFuZ2VTZXJ2aWNlLnNlbGVjdFByZXZpb3VzT3B0aW9uKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGlzVHlwaW5nICYmICF0aGlzLmN1c3RvbVNlYXJjaFRyaWdnZXIpIHtcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2VTZXJ2aWNlLnNlYXJjaE9wdGlvbkJ5Rmlyc3RMZXR0ZXIoZXZlbnQua2V5KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgfVxuXG4gIC8vIENvbnRyb2xWYWx1ZUFjY2Vzc29yIG1ldGhvZHNcblxuICBvbkNoYW5nZTogKHZhbHVlOiBudW1iZXIpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICBvblRvdWNoOiAodmFsdWU6IGFueSkgPT4gdm9pZCA9ICgpID0+IHt9OyAvLyB0b2RvIGNhbGwgaXQgb24gYmx1ciBhbmQgb24gY2xvc2UgaWYgbm90IGRpc2FibGUgYW5kIG9wZW5lZFxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IG51bWJlcil7XG4gICAgaWYgKGlzTmFOKHZhbHVlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpe1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KXtcbiAgICB0aGlzLm9uVG91Y2ggPSBmbjtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuaXNEZXN0cm95ZWQkLm5leHQoKTtcbiAgICB0aGlzLmlzRGVzdHJveWVkJC5jb21wbGV0ZSgpO1xuICB9XG59XG4iLCI8cCAqbmdJZj1cIiEhbGFiZWxcIiBjbGFzcz1cIndhYy1zZWxlY3QtdGVzdF9fbGFiZWxcIj5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwid2FjLWxhYmVsLCAud2FjLWxhYmVsXCIgPjwvbmctY29udGVudD5cbjwvcD5cblxuXG48ZGl2XG4gIGNsYXNzPVwid2FjLXNlbGVjdC10ZXN0XCJcbiAgd3pBdXRvSGlkZVxuICAoY2xpY2tPdXRzaWRlKT1cIm9uQ2xvc2VQYW5lbCgpXCJcbiAgW3RyaWdnZXJFbGVtZW50XT1cIid3YWMtc2VsZWN0LXRlc3RfX2hlYWRlcl9fc2VsZWN0aW9uJ1wiXG4gIFt6SW5kZXhUb2dnbGVdPVwib3BlblBhbmVsXCJcbiAgPlxuXG4gICAgPGRpdiBjbGFzcz1cIndhYy1zZWxlY3QtdGVzdF9faGVhZGVyXCIgW25nQ2xhc3NdPVwieyAnc2VsZWN0LWRpc2FibGVkJyA6IGRpc2FibGVkIH1cIiAoY2xpY2spPVwiIWRpc2FibGVkICYmIG9uVG9nZ2xlUGFuZWwoKVwiIHRhYmluZGV4PVwiMFwiPlxuXG4gICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm9wZW5QYW5lbCA/IG9wZW5QYW5lbFRyaWdnZXIgOiBjbG9zZVBhbmVsVHJpZ2dlclwiID5cblxuICAgICAgICA8bmctdGVtcGxhdGUgI2Nsb3NlUGFuZWxUcmlnZ2VyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZGVmYXVsdFRyaWdnZXJcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8bmctdGVtcGxhdGUgI29wZW5QYW5lbFRyaWdnZXI+XG4gICAgICAgICAgPG5nLWNvbnRlbnQgKm5nSWY9XCIhIWN1c3RvbVNlYXJjaFRyaWdnZXI7IGVsc2UgZGVmYXVsdFRyaWdnZXJcIiBzZWxlY3Q9XCJ3YWMtc2VsZWN0LXNlYXJjaC10cmlnZ2VyXCIgPjwvbmctY29udGVudD5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRUcmlnZ2VyPlxuICAgICAgICAgIDxuZy1jb250ZW50ICpuZ0lmPVwiIXNlbGVjdGVkT3B0aW9uQ29udGVudFwiIHNlbGVjdD1cIndhYy1wbGFjZWhvbGRlcixbcm9sZT1wbGFjZWhvbGRlcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJ3YWMtc2VsZWN0LXRlc3RfX2hlYWRlcl9fc2VsZWN0aW9uIHdhYy1vcHRpb25fX3BsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICpuZ0lmPVwiISFzZWxlY3RlZE9wdGlvbkNvbnRlbnRcIlxuICAgICAgICAgICAgW2lubmVySHRtbF09XCJzZWxlY3RlZE9wdGlvbkNvbnRlbnRcIj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxzcGFuIGNsYXNzPVwid2FjLXNlbGVjdC10ZXN0X19oZWFkZXJfX2NoZXZyb25cIj48aSBjbGFzcz1cImZhcyBmYS1jaGV2cm9uLWRvd25cIj48L2k+PC9zcGFuPlxuXG4gICAgPC9kaXY+XG5cblxuICAgIDxkaXYgY2xhc3M9XCJ3YWMtc2VsZWN0LXRlc3RfX2NvbnRlbnRcIiAqbmdJZj1cIiFkaXNhYmxlZFwiIFtuZ0NsYXNzXT1cInsgaGlkZGVuOiAhb3BlblBhbmVsLCBvcGVuOiBvcGVuUGFuZWwgfVwiPlxuXG4gICAgICA8cGVyZmVjdC1zY3JvbGxiYXIgW2NvbmZpZ109XCJ7IHN1cHByZXNzU2Nyb2xsWDogdHJ1ZSB9XCI+XG4gICAgICAgIDxuZy1jb250ZW50XG4gICAgICAgICAgc2VsZWN0PVwid2FjLW9wdGlvbi1jYWxsLXRvLWFjdGlvbiwgd2FjLW9wdGlvbiwgb3B0aW9uLCAub3B0aW9uLCBbc2VsZWN0T3B0aW9uXVwiPlxuICAgICAgICA8L25nLWNvbnRlbnQ+XG4gICAgICA8L3BlcmZlY3Qtc2Nyb2xsYmFyPlxuXG4gICAgICA8ZGl2ICpuZ0lmPVwiIW9wdGlvbkNoaWxkcmVuPy5sZW5ndGhcIiBjbGFzcz1cIndhYy1zZWxlY3QtdGVzdF9fY29udGVudF9fZW1wdHlcIj5cbiAgICAgICAgPHNwYW4+e3snd2FjLmRhdGF0YWJsZS5ub3Jlc3VsdCcgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgPC9kaXY+XG48L2Rpdj4iXX0=
@@ -8,6 +8,22 @@ export class ValueChangeService {
8
8
  this.valueChange$ = new Subject();
9
9
  this.indexSelectedOption = null;
10
10
  this.resetListeners$ = new Subject();
11
+ this.indexOfMatchedOption = (option, index, letter) => {
12
+ const textOption = option.getContentRef().nativeElement.textContent.trim().toLowerCase();
13
+ return textOption.startsWith(letter) ? index : null;
14
+ };
15
+ this.isNotNull = (index) => {
16
+ return index !== null;
17
+ };
18
+ this.highestAndClosestIndex = (index) => {
19
+ if (isNaN(this.indexSelectedOption)) {
20
+ return true;
21
+ }
22
+ if (index > this.indexSelectedOption) {
23
+ return true;
24
+ }
25
+ return false;
26
+ };
11
27
  }
12
28
  set value(value) {
13
29
  this._value = value;
@@ -57,26 +73,15 @@ export class ValueChangeService {
57
73
  }
58
74
  searchOptionByFirstLetter(letter) {
59
75
  const matchedOptionsIndex = this.optionChildren
60
- .map((option, index) => {
61
- const textOption = option.getContentRef().nativeElement.textContent.trim().toLowerCase();
62
- return textOption.startsWith(letter) ? index : null;
63
- })
64
- .filter((index) => index !== null);
76
+ .map((option, index) => this.indexOfMatchedOption(option, index, letter))
77
+ .filter(this.isNotNull);
65
78
  if (!matchedOptionsIndex.length) { // reset the selection
66
79
  this.indexSelectedOption = null;
67
80
  this.assignValue(null);
68
81
  return;
69
82
  }
70
83
  // find the next option after the current selected option, or the first option
71
- const validOptionIndex = matchedOptionsIndex.find((index) => {
72
- if (isNaN(this.indexSelectedOption)) {
73
- return true;
74
- }
75
- if (index > this.indexSelectedOption) {
76
- return true;
77
- }
78
- return false;
79
- });
84
+ const validOptionIndex = matchedOptionsIndex.find(this.highestAndClosestIndex);
80
85
  this.indexSelectedOption = isNaN(validOptionIndex) ? matchedOptionsIndex[0] : validOptionIndex;
81
86
  this.assignValue(this.optionChildren.get(this.indexSelectedOption).value);
82
87
  }
@@ -140,4 +145,4 @@ ValueChangeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", v
140
145
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.7", ngImport: i0, type: ValueChangeService, decorators: [{
141
146
  type: Injectable
142
147
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; } });
143
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsdWUtY2hhbmdlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3NlbGVjdHMvc2VsZWN0LXRlc3QvdmFsdWUtY2hhbmdlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixVQUFVLEVBQXdCLE1BQU0sZUFBZSxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxLQUFLLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBUWhELE1BQU0sT0FBTyxrQkFBa0I7SUF3QjNCLFlBQW9CLGlCQUFvQztRQUFwQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBdEJ4RCxpQkFBWSxHQUFpQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBa0IzQyx3QkFBbUIsR0FBVyxJQUFJLENBQUM7UUFFbkMsb0JBQWUsR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUVhLENBQUM7SUFwQjdELElBQUksS0FBSyxDQUFDLEtBQVU7UUFDaEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELElBQUksS0FBSztRQUNMLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBY0QseUJBQXlCLENBQUMsY0FBMEMsRUFBRSxLQUFVO1FBQzVFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFNUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7UUFDckMsSUFBSSxDQUFDLE1BQU0sR0FB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SSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNwQyxDQUFDOzsrR0E3S1Esa0JBQWtCO21IQUFsQixrQkFBa0I7MkZBQWxCLGtCQUFrQjtrQkFEOUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBJbmplY3RhYmxlLCBPbkRlc3Ryb3ksIFF1ZXJ5TGlzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbWVyZ2UsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgT3B0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vb3B0aW9uL29wdGlvbi5jb21wb25lbnQnO1xuXG50eXBlIFNlbGVjdGVkRXZlbnQgPSB7XG4gICAgdmFsdWU6IGFueVxuICB9XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBWYWx1ZUNoYW5nZVNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gICAgdmFsdWVDaGFuZ2UkOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgc2V0IHZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5oYW5kbGVWYWx1ZUNoYW5nZSgpO1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlJC5uZXh0KHZhbHVlKTtcbiAgICB9XG5cbiAgICBnZXQgdmFsdWUoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3ZhbHVlOiBhbnk7XG5cbiAgICBvcHRpb25DaGlsZHJlbjogUXVlcnlMaXN0PE9wdGlvbkNvbXBvbmVudD47XG5cbiAgICBzZWxlY3RlZE9wdGlvbkNvbnRlbnQ6IGFueTtcblxuICAgIGluZGV4U2VsZWN0ZWRPcHRpb246IG51bWJlciA9IG51bGw7XG5cbiAgICByZXNldExpc3RlbmVycyQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHsgfVxuXG4gICAgaGFuZGxlU2VsZWN0T3B0aW9uc0NoYW5nZShvcHRpb25DaGlsZHJlbjogUXVlcnlMaXN0PE9wdGlvbkNvbXBvbmVudD4sIHZhbHVlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5yZXNldExpc3RlbmVycyQubmV4dCgpO1xuXG4gICAgICAgIHRoaXMub3B0aW9uQ2hpbGRyZW4gPSBvcHRpb25DaGlsZHJlbjtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5pbmRleFNlbGVjdGVkT3B0aW9uID0gbnVsbDtcblxuICAgICAgICB0aGlzLmhhbmRsZUluaXRpYWxTZWxlY3RlZE9wdGlvbigpO1xuICAgICAgICB0aGlzLmhhbmRsZVNlbGVjdGVkT3B0aW9uc0V2ZW50KCk7XG4gICAgfVxuXG4gICAgYXNzaWduVmFsdWUodmFsdWU6IGFueSkge1xuICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmhhbmRsZVZhbHVlQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgaGFuZGxlVmFsdWVDaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlU2VsZWN0ZWRPcHRpb24oKTtcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RQbGFjZWhvbGRlcigpO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIHNlbGVjdE5leHRPcHRpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmluZGV4U2VsZWN0ZWRPcHRpb24gKzEgPj0gdGhpcy5vcHRpb25DaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmluZGV4U2VsZWN0ZWRPcHRpb24gPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZE9wdGlvbiA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmluZGV4U2VsZWN0ZWRPcHRpb24gPSB0aGlzLmluZGV4U2VsZWN0ZWRPcHRpb24gKyAxO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hc3NpZ25WYWx1ZSh0aGlzLm9wdGlvbkNoaWxkcmVuLmdldCh0aGlzLmluZGV4U2VsZWN0ZWRPcHRpb24pLnZhbHVlKTtcbiAgICB9XG5cbiAgICBzZWxlY3RQcmV2aW91c09wdGlvbigpIHtcblxuICAgICAgICBpZiAoIXRoaXMuaW5kZXhTZWxlY3RlZE9wdGlvbikge1xuICAgICAgICAgICAgdGhpcy5pbmRleFNlbGVjdGVkT3B0aW9uID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuYXNzaWduVmFsdWUobnVsbCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmluZGV4U2VsZWN0ZWRPcHRpb24gPSB0aGlzLmluZGV4U2VsZWN0ZWRPcHRpb24gLSAxO1xuICAgICAgICB0aGlzLmFzc2lnblZhbHVlKHRoaXMub3B0aW9uQ2hpbGRyZW4uZ2V0KHRoaXMuaW5kZXhTZWxlY3RlZE9wdGlvbikudmFsdWUpO1xuICAgIH1cblxuICAgIHNlYXJjaE9wdGlvbkJ5Rmlyc3RMZXR0ZXIobGV0dGVyOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlZE9wdGlvbnNJbmRleCA9IHRoaXMub3B0aW9uQ2hpbGRyZW5cbiAgICAgICAgICAgIC5tYXAoKG9wdGlvbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRleHRPcHRpb24gPSBvcHRpb24uZ2V0Q29udGVudFJlZigpLm5hdGl2ZUVsZW1lbnQudGV4dENvbnRlbnQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICByZXR1cm4gdGV4dE9wdGlvbi5zdGFydHNXaXRoKGxldHRlcikgPyBpbmRleCA6IG51bGw7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmZpbHRlcigoaW5kZXgpID0+IGluZGV4ICE9PSBudWxsKTtcblxuICAgICAgICBpZiAoIW1hdGNoZWRPcHRpb25zSW5kZXgubGVuZ3RoKSB7IC8vIHJlc2V0IHRoZSBzZWxlY3Rpb25cbiAgICAgICAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZE9wdGlvbiA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmFzc2lnblZhbHVlKG51bGwpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZmluZCB0aGUgbmV4dCBvcHRpb24gYWZ0ZXIgdGhlIGN1cnJlbnQgc2VsZWN0ZWQgb3B0aW9uLCBvciB0aGUgZmlyc3Qgb3B0aW9uXG5cbiAgICAgICAgY29uc3QgdmFsaWRPcHRpb25JbmRleCA9XG4gICAgICAgICAgICBtYXRjaGVkT3B0aW9uc0luZGV4LmZpbmQoKGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKHRoaXMuaW5kZXhTZWxlY3RlZE9wdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IHRoaXMuaW5kZXhTZWxlY3RlZE9wdGlvbikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB0aGlzLmluZGV4U2VsZWN0ZWRPcHRpb24gPSBpc05hTih2YWxpZE9wdGlvbkluZGV4KSA/IG1hdGNoZWRPcHRpb25zSW5kZXhbMF0gOiB2YWxpZE9wdGlvbkluZGV4O1xuICAgICAgICAgIHRoaXMuYXNzaWduVmFsdWUodGhpcy5vcHRpb25DaGlsZHJlbi5nZXQodGhpcy5pbmRleFNlbGVjdGVkT3B0aW9uKS52YWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVJbml0aWFsU2VsZWN0ZWRPcHRpb24oKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyAvLyAhIEF2b2lkIEV4cHJlc3Npb24gaGFzIGNoYW5nZWQuLi5cbiAgICAgICAgICAgIGlmICghdGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgICB0aGlzLmZpbmRJbml0aWFsU2VsZWN0ZWRPcHRpb24oKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5oYW5kbGVWYWx1ZUNoYW5nZSgpO1xuICAgICAgICAgIH0sIDApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmluZEluaXRpYWxTZWxlY3RlZE9wdGlvbigpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRPcHRpb24gPSB0aGlzLmdldFNlbGVjdGVkT3B0aW9uQ29tcG9uZW50KCk7XG5cbiAgICAgICAgaWYgKCFzZWxlY3RlZE9wdGlvbikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbHVlID0gc2VsZWN0ZWRPcHRpb24udmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVTZWxlY3RlZE9wdGlvbnNFdmVudCgpIHtcbiAgICAgICAgdGhpcy5vcHRpb25TZWxlY3RlZENoYW5nZUxpc3RlbmVycygpLnN1YnNjcmliZSgoc2VsZWN0RXZlbnQpID0+IHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gc2VsZWN0RXZlbnQudmFsdWU7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlU2VsZWN0UGxhY2Vob2xkZXIoKSB7XG4gICAgICAgIGlmICghdGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbkNvbnRlbnQgPSBudWxsO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRPcHRpb24gPSB0aGlzLmdldFNlbGVjdGVkT3B0aW9uQ29tcG9uZW50KCk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25Db250ZW50ID0gc2VsZWN0ZWRPcHRpb24/LmdldENvbnRlbnRSZWYoKS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCB8fCB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTZWxlY3RlZE9wdGlvbkNvbXBvbmVudCgpOiBPcHRpb25Db21wb25lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25DaGlsZHJlbi5maW5kKChvcHRpb24pID0+IG9wdGlvbi5zZWxlY3RlZCApO1xuICAgIH1cblxuICAgIHByaXZhdGUgb3B0aW9uU2VsZWN0ZWRDaGFuZ2VMaXN0ZW5lcnMoKTogT2JzZXJ2YWJsZTxTZWxlY3RlZEV2ZW50PiB7XG5cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRDaGFuZ2UkID0gIHRoaXMub3B0aW9uQ2hpbGRyZW4ubWFwKChvcHRpb24pID0+IHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb24uc2VsZWN0ZWRDaGFuZ2UucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgfSBhcyBTZWxlY3RlZEV2ZW50XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBtZXJnZSguLi5zZWxlY3RlZENoYW5nZSQpLnBpcGUodGFrZVVudGlsKHRoaXMucmVzZXRMaXN0ZW5lcnMkKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGFuZ2VTZWxlY3RlZE9wdGlvbigpIHtcbiAgICAgICAgdGhpcy5vcHRpb25DaGlsZHJlbi5mb3JFYWNoKChvcHRpb25Db21wb25lbnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBvcHRpb25Db21wb25lbnQuc2VsZWN0ZWQgPSB0aGlzLnZhbHVlID09IHVuZGVmaW5lZCA/IGZhbHNlIDogb3B0aW9uQ29tcG9uZW50LnZhbHVlID09PSB0aGlzLnZhbHVlO1xuXG4gICAgICAgICAgICBpZiAob3B0aW9uQ29tcG9uZW50LnNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbmRleFNlbGVjdGVkT3B0aW9uID0gaW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnJlc2V0TGlzdGVuZXJzJC5uZXh0KCk7XG4gICAgICAgIHRoaXMucmVzZXRMaXN0ZW5lcnMkLmNvbXBsZXRlKCk7XG4gICAgfVxufSJdfQ==
148
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsdWUtY2hhbmdlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3NlbGVjdHMvc2VsZWN0LXRlc3QvdmFsdWUtY2hhbmdlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixVQUFVLEVBQXdCLE1BQU0sZUFBZSxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxLQUFLLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBUWhELE1BQU0sT0FBTyxrQkFBa0I7SUF3QjNCLFlBQW9CLGlCQUFvQztRQUFwQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBdEJ4RCxpQkFBWSxHQUFpQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBa0IzQyx3QkFBbUIsR0FBVyxJQUFJLENBQUM7UUFFbkMsb0JBQWUsR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQXVFdkMseUJBQW9CLEdBQUcsQ0FBQyxNQUF1QixFQUFFLEtBQWEsRUFBRSxNQUFjLEVBQUUsRUFBRTtZQUN0RixNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN6RixPQUFPLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3RELENBQUMsQ0FBQTtRQUVLLGNBQVMsR0FBRyxDQUFDLEtBQW9CLEVBQUUsRUFBRTtZQUN6QyxPQUFPLEtBQUssS0FBSyxJQUFJLENBQUM7UUFDMUIsQ0FBQyxDQUFBO1FBRU8sMkJBQXNCLEdBQUcs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QUssQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBRWxHLElBQUksZUFBZSxDQUFDLFFBQVEsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQzthQUNwQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDcEMsQ0FBQzs7K0dBcExRLGtCQUFrQjttSEFBbEIsa0JBQWtCOzJGQUFsQixrQkFBa0I7a0JBRDlCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgSW5qZWN0YWJsZSwgT25EZXN0cm95LCBRdWVyeUxpc3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG1lcmdlLCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE9wdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL29wdGlvbi9vcHRpb24uY29tcG9uZW50JztcblxudHlwZSBTZWxlY3RlZEV2ZW50ID0ge1xuICAgIHZhbHVlOiBhbnlcbiAgfVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVmFsdWVDaGFuZ2VTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcblxuICAgIHZhbHVlQ2hhbmdlJDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcblxuICAgIHNldCB2YWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuaGFuZGxlVmFsdWVDaGFuZ2UoKTtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZSQubmV4dCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF92YWx1ZTogYW55O1xuXG4gICAgb3B0aW9uQ2hpbGRyZW46IFF1ZXJ5TGlzdDxPcHRpb25Db21wb25lbnQ+O1xuXG4gICAgc2VsZWN0ZWRPcHRpb25Db250ZW50OiBhbnk7XG5cbiAgICBpbmRleFNlbGVjdGVkT3B0aW9uOiBudW1iZXIgPSBudWxsO1xuXG4gICAgcmVzZXRMaXN0ZW5lcnMkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7IH1cblxuICAgIGhhbmRsZVNlbGVjdE9wdGlvbnNDaGFuZ2Uob3B0aW9uQ2hpbGRyZW46IFF1ZXJ5TGlzdDxPcHRpb25Db21wb25lbnQ+LCB2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMucmVzZXRMaXN0ZW5lcnMkLm5leHQoKTtcblxuICAgICAgICB0aGlzLm9wdGlvbkNoaWxkcmVuID0gb3B0aW9uQ2hpbGRyZW47XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZE9wdGlvbiA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5oYW5kbGVJbml0aWFsU2VsZWN0ZWRPcHRpb24oKTtcbiAgICAgICAgdGhpcy5oYW5kbGVTZWxlY3RlZE9wdGlvbnNFdmVudCgpO1xuICAgIH1cblxuICAgIGFzc2lnblZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5oYW5kbGVWYWx1ZUNoYW5nZSgpO1xuICAgIH1cblxuICAgIGhhbmRsZVZhbHVlQ2hhbmdlKCkge1xuICAgICAgICB0aGlzLmNoYW5nZVNlbGVjdGVkT3B0aW9uKCk7XG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0UGxhY2Vob2xkZXIoKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICBzZWxlY3ROZXh0T3B0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5pbmRleFNlbGVjdGVkT3B0aW9uICsxID49IHRoaXMub3B0aW9uQ2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pbmRleFNlbGVjdGVkT3B0aW9uID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmluZGV4U2VsZWN0ZWRPcHRpb24gPSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pbmRleFNlbGVjdGVkT3B0aW9uID0gdGhpcy5pbmRleFNlbGVjdGVkT3B0aW9uICsgMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYXNzaWduVmFsdWUodGhpcy5vcHRpb25DaGlsZHJlbi5nZXQodGhpcy5pbmRleFNlbGVjdGVkT3B0aW9uKS52YWx1ZSk7XG4gICAgfVxuXG4gICAgc2VsZWN0UHJldmlvdXNPcHRpb24oKSB7XG5cbiAgICAgICAgaWYgKCF0aGlzLmluZGV4U2VsZWN0ZWRPcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZE9wdGlvbiA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmFzc2lnblZhbHVlKG51bGwpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbmRleFNlbGVjdGVkT3B0aW9uID0gdGhpcy5pbmRleFNlbGVjdGVkT3B0aW9uIC0gMTtcbiAgICAgICAgdGhpcy5hc3NpZ25WYWx1ZSh0aGlzLm9wdGlvbkNoaWxkcmVuLmdldCh0aGlzLmluZGV4U2VsZWN0ZWRPcHRpb24pLnZhbHVlKTtcbiAgICB9XG5cbiAgICBzZWFyY2hPcHRpb25CeUZpcnN0TGV0dGVyKGxldHRlcjogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoZWRPcHRpb25zSW5kZXggPSB0aGlzLm9wdGlvbkNoaWxkcmVuXG4gICAgICAgICAgICAubWFwKChvcHRpb24sIGluZGV4KSA9PiB0aGlzLmluZGV4T2ZNYXRjaGVkT3B0aW9uKG9wdGlvbiwgaW5kZXgsIGxldHRlcikpXG4gICAgICAgICAgICAuZmlsdGVyKHRoaXMuaXNOb3ROdWxsKTtcblxuICAgICAgICBpZiAoIW1hdGNoZWRPcHRpb25zSW5kZXgubGVuZ3RoKSB7IC8vIHJlc2V0IHRoZSBzZWxlY3Rpb25cbiAgICAgICAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZE9wdGlvbiA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmFzc2lnblZhbHVlKG51bGwpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZmluZCB0aGUgbmV4dCBvcHRpb24gYWZ0ZXIgdGhlIGN1cnJlbnQgc2VsZWN0ZWQgb3B0aW9uLCBvciB0aGUgZmlyc3Qgb3B0aW9uXG5cbiAgICAgICAgY29uc3QgdmFsaWRPcHRpb25JbmRleCA9IG1hdGNoZWRPcHRpb25zSW5kZXguZmluZCh0aGlzLmhpZ2hlc3RBbmRDbG9zZXN0SW5kZXgpO1xuXG4gICAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZE9wdGlvbiA9IGlzTmFOKHZhbGlkT3B0aW9uSW5kZXgpID8gbWF0Y2hlZE9wdGlvbnNJbmRleFswXSA6IHZhbGlkT3B0aW9uSW5kZXg7XG4gICAgICAgIHRoaXMuYXNzaWduVmFsdWUodGhpcy5vcHRpb25DaGlsZHJlbi5nZXQodGhpcy5pbmRleFNlbGVjdGVkT3B0aW9uKS52YWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbmRleE9mTWF0Y2hlZE9wdGlvbiA9IChvcHRpb246IE9wdGlvbkNvbXBvbmVudCwgaW5kZXg6IG51bWJlciwgbGV0dGVyOiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3QgdGV4dE9wdGlvbiA9IG9wdGlvbi5nZXRDb250ZW50UmVmKCkubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudC50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgcmV0dXJuIHRleHRPcHRpb24uc3RhcnRzV2l0aChsZXR0ZXIpID8gaW5kZXggOiBudWxsO1xuICAgICAgfVxuXG4gICAgcHJpdmF0ZSBpc05vdE51bGwgPSAoaW5kZXg6IG51bWJlciB8IG51bGwpID0+IHtcbiAgICAgICAgcmV0dXJuIGluZGV4ICE9PSBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGlnaGVzdEFuZENsb3Nlc3RJbmRleCA9IChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGlmIChpc05hTih0aGlzLmluZGV4U2VsZWN0ZWRPcHRpb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5kZXggPiB0aGlzLmluZGV4U2VsZWN0ZWRPcHRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlSW5pdGlhbFNlbGVjdGVkT3B0aW9uKCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgLy8gISBBdm9pZCBFeHByZXNzaW9uIGhhcyBjaGFuZ2VkLi4uXG4gICAgICAgICAgICBpZiAoIXRoaXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5maW5kSW5pdGlhbFNlbGVjdGVkT3B0aW9uKCk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaGFuZGxlVmFsdWVDaGFuZ2UoKTtcbiAgICAgICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbmRJbml0aWFsU2VsZWN0ZWRPcHRpb24oKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uID0gdGhpcy5nZXRTZWxlY3RlZE9wdGlvbkNvbXBvbmVudCgpO1xuXG4gICAgICAgIGlmICghc2VsZWN0ZWRPcHRpb24pIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWx1ZSA9IHNlbGVjdGVkT3B0aW9uLnZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlU2VsZWN0ZWRPcHRpb25zRXZlbnQoKSB7XG4gICAgICAgIHRoaXMub3B0aW9uU2VsZWN0ZWRDaGFuZ2VMaXN0ZW5lcnMoKS5zdWJzY3JpYmUoKHNlbGVjdEV2ZW50KSA9PiB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHNlbGVjdEV2ZW50LnZhbHVlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVNlbGVjdFBsYWNlaG9sZGVyKCkge1xuICAgICAgICBpZiAoIXRoaXMudmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25Db250ZW50ID0gbnVsbDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uID0gdGhpcy5nZXRTZWxlY3RlZE9wdGlvbkNvbXBvbmVudCgpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uQ29udGVudCA9IHNlbGVjdGVkT3B0aW9uPy5nZXRDb250ZW50UmVmKCkubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgfHwgdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2VsZWN0ZWRPcHRpb25Db21wb25lbnQoKTogT3B0aW9uQ29tcG9uZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uQ2hpbGRyZW4uZmluZCgob3B0aW9uKSA9PiBvcHRpb24uc2VsZWN0ZWQgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9wdGlvblNlbGVjdGVkQ2hhbmdlTGlzdGVuZXJzKCk6IE9ic2VydmFibGU8U2VsZWN0ZWRFdmVudD4ge1xuXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkQ2hhbmdlJCA9ICB0aGlzLm9wdGlvbkNoaWxkcmVuLm1hcCgob3B0aW9uKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9uLnNlbGVjdGVkQ2hhbmdlLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKCh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgIH0gYXMgU2VsZWN0ZWRFdmVudFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gbWVyZ2UoLi4uc2VsZWN0ZWRDaGFuZ2UkKS5waXBlKHRha2VVbnRpbCh0aGlzLnJlc2V0TGlzdGVuZXJzJCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2hhbmdlU2VsZWN0ZWRPcHRpb24oKSB7XG4gICAgICAgIHRoaXMub3B0aW9uQ2hpbGRyZW4uZm9yRWFjaCgob3B0aW9uQ29tcG9uZW50LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgb3B0aW9uQ29tcG9uZW50LnNlbGVjdGVkID0gdGhpcy52YWx1ZSA9PSB1bmRlZmluZWQgPyBmYWxzZSA6IG9wdGlvbkNvbXBvbmVudC52YWx1ZSA9PT0gdGhpcy52YWx1ZTtcblxuICAgICAgICAgICAgaWYgKG9wdGlvbkNvbXBvbmVudC5zZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZE9wdGlvbiA9IGluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5yZXNldExpc3RlbmVycyQubmV4dCgpO1xuICAgICAgICB0aGlzLnJlc2V0TGlzdGVuZXJzJC5jb21wbGV0ZSgpO1xuICAgIH1cbn0iXX0=
@@ -1,11 +1,11 @@
1
1
  import * as i1$2 from '@wizishop/ng-wizi-bulma';
2
2
  import { NwbAllModule, NwbFilterGroup } from '@wizishop/ng-wizi-bulma';
3
3
  import * as i0 from '@angular/core';
4
- import { Component, ViewEncapsulation, Input, EventEmitter, Directive, Output, HostListener, Injectable, InjectionToken, NgModule, Inject, Pipe, ContentChildren, ViewChild, ChangeDetectionStrategy, HostBinding, ContentChild } from '@angular/core';
4
+ import { Component, ViewEncapsulation, Input, EventEmitter, Directive, Output, HostListener, Injectable, InjectionToken, NgModule, Inject, Pipe, ContentChildren, Attribute, Optional, ViewChild, ChangeDetectionStrategy, HostBinding, ContentChild } from '@angular/core';
5
5
  import * as i1 from '@angular/common';
6
6
  import { CommonModule, DOCUMENT } from '@angular/common';
7
7
  import * as i2 from '@angular/forms';
8
- import { NG_VALUE_ACCESSOR, FormsModule, ReactiveFormsModule } from '@angular/forms';
8
+ import { NG_VALUE_ACCESSOR, FormsModule, FormGroupDirective, ReactiveFormsModule } from '@angular/forms';
9
9
  import * as i4$1 from 'ngx-perfect-scrollbar';
10
10
  import { PerfectScrollbarModule } from 'ngx-perfect-scrollbar';
11
11
  import { Subject, merge, fromEvent, ReplaySubject, interval, takeUntil as takeUntil$1, startWith as startWith$1, map as map$1 } from 'rxjs';
@@ -1103,7 +1103,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.7", ngImpor
1103
1103
  }] } });
1104
1104
 
1105
1105
  class ButtonComponent {
1106
- constructor() {
1106
+ constructor(type, formGroup) {
1107
+ this.type = type;
1108
+ this.formGroup = formGroup;
1107
1109
  // todo add button type (ex: for submit and check if it works with template driven forms)
1108
1110
  this.extraClasses = 'is-info'; // todo make a list of existing class
1109
1111
  this.label = '';
@@ -1177,6 +1179,9 @@ class ButtonComponent {
1177
1179
  if (this.disabled) {
1178
1180
  return;
1179
1181
  }
1182
+ if (this.type === 'submit' && this.formGroup) { // Maybe there is a better way to handle submit
1183
+ this.formGroup.onSubmit(this.formGroup.value);
1184
+ }
1180
1185
  if (this.hasLoader) {
1181
1186
  this.isLoading = false;
1182
1187
  setTimeout(() => {
@@ -1204,12 +1209,22 @@ class ButtonComponent {
1204
1209
  }, 1000);
1205
1210
  }
1206
1211
  }
1207
- ButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.7", ngImport: i0, type: ButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1212
+ ButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.7", ngImport: i0, type: ButtonComponent, deps: [{ token: 'type', attribute: true }, { token: FormGroupDirective, optional: true }], target: i0.ɵɵFactoryTarget.Component });
1208
1213
  ButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.7", type: ButtonComponent, selector: "wac-button", inputs: { extraClasses: "extraClasses", label: "label", icon: "icon", iconNext: "iconNext", textcolor: "textcolor", widthAuto: "widthAuto", contentHorizontalPosition: "contentHorizontalPosition", iconFontSize: "iconFontSize", hasLoader: "hasLoader", disabled: "disabled", whiteSpaceNowrap: "whiteSpaceNowrap", opacity: "opacity", animation: "animation", animationRight: "animationRight", animationText: "animationText", confirmDelete: "confirmDelete", confirmDeleteText: "confirmDeleteText", coin: "coin", tooltip: "tooltip", tooltipWidth: "tooltipWidth", noPadding: "noPadding", tooltipPosition: "tooltipPosition", tooltipOneline: "tooltipOneline", confirmDeletePosition: "confirmDeletePosition", isLoading: "isLoading" }, outputs: { click: "click", isLoadingChange: "isLoadingChange" }, viewQueries: [{ propertyName: "calculWidth", first: true, predicate: ["calculWidth"], descendants: true }, { propertyName: "calculWidthDelete", first: true, predicate: ["calculWidthDelete"], descendants: true }], ngImport: i0, template: "<a\n [class]=\"'wac-button ' + extraClasses\"\n (click)=\"confirmDelete && waitForConfirmDelete ? addMaxWidthDelete() : '';onButtonClick($event);\"\n (mouseleave)=\"animation ? resetMaxWidth() : '';\"\n (mouseenter)=\"animation ? addMaxWidth() : '';\"\n wzAutoHide (clickOutside)=\"confirmDelete && !waitForConfirmDelete ? resetMaxWidthDelete() : ''\"\n [ngClass]=\"[\n label === '' ? 'alone' : '',\n coin ? 'has-coin width-auto' : '',\n animationRight ? 'animation-right' : '',\n animation ? 'animationText' : '',\n isLoading ? 'is-loading' : '',\n opacity ? 'opacity' : '',\n disabled ? 'disabled' : '',\n widthAuto ? 'width-auto' : '',\n noPadding ? 'no-padding' : '',\n whiteSpaceNowrap ? 'white-space-no-wrap' : '',\n !waitForConfirmDelete && confirmDelete ? 'step-delete' : '',\n confirmDelete ? 'deletePosition-' + confirmDeletePosition : ''\n ]\"\n [ngStyle]=\"{\n 'text-align': contentHorizontalPosition\n }\"\n>\n <span class=\"wac-button__wrapper\" [style.color]=\"textcolor ? textcolor : ''\">\n <i *ngIf=\"icon\" [ngClass]=\"icon\" [style.font-size.px]=\"iconFontSize\"></i>\n {{ label }}\n <i *ngIf=\"iconNext\" [ngClass]=\"iconNext\" [style.font-size.px]=\"iconFontSize\"></i>\n </span>\n <span class=\"wac-button__animation\" [style.maxWidth]=\"buttonMaxWidth\" [style.width]=\"buttonWidth + 'px'\">\n <span #calculWidth class=\"wac-button__animation__text\" [innerHTML]=\"animationText\"></span>\n </span>\n <span class=\"wac-button__confirmDelete\" [style.maxWidth]=\"buttonMaxWidthDelete\" [style.width]=\"buttonWidthDelete + 'px'\">\n <span #calculWidthDelete class=\"wac-button__confirmDelete__text\" [innerHTML]=\"confirmDeleteText\"></span>\n </span>\n <span *ngIf=\"coin\" class=\"wac-button__coin\"><i class=\"fa-solid fa-coin-front\"></i><span [innerHTML]=\"coin\"></span></span>\n <span\n class=\"wac-button__loader\"\n [ngClass]=\"extraClasses.includes('is-outlined') ? 'outlined' : ''\"\n *ngIf=\"isLoading\"\n [style.width]=\"currentLoading + '%'\"\n >\n <span *ngIf=\"extraClasses.includes('is-outlined')\">\n <i *ngIf=\"icon !== ''\" [ngClass]=\"icon\" [style.font-size.px]=\"iconFontSize\"></i>\n {{ label }}\n <i *ngIf=\"iconNext !== ''\" [ngClass]=\"iconNext\" [style.font-size.px]=\"iconFontSize\"></i>\n </span>\n </span>\n <span class=\"wac-button__tooltips {{ tooltipPosition }}\" [ngClass]=\"{'oneline': tooltipOneline}\" [style.minWidth]=\"tooltipWidth\" *ngIf=\"tooltip\">\n {{ tooltip }}\n </span>\n</a>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: AutoHideDirective, selector: "[wzAutoHide]", inputs: ["triggerElement", "forceOn"], outputs: ["clickOutside"] }] });
1209
1214
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.7", ngImport: i0, type: ButtonComponent, decorators: [{
1210
1215
  type: Component,
1211
1216
  args: [{ selector: 'wac-button', template: "<a\n [class]=\"'wac-button ' + extraClasses\"\n (click)=\"confirmDelete && waitForConfirmDelete ? addMaxWidthDelete() : '';onButtonClick($event);\"\n (mouseleave)=\"animation ? resetMaxWidth() : '';\"\n (mouseenter)=\"animation ? addMaxWidth() : '';\"\n wzAutoHide (clickOutside)=\"confirmDelete && !waitForConfirmDelete ? resetMaxWidthDelete() : ''\"\n [ngClass]=\"[\n label === '' ? 'alone' : '',\n coin ? 'has-coin width-auto' : '',\n animationRight ? 'animation-right' : '',\n animation ? 'animationText' : '',\n isLoading ? 'is-loading' : '',\n opacity ? 'opacity' : '',\n disabled ? 'disabled' : '',\n widthAuto ? 'width-auto' : '',\n noPadding ? 'no-padding' : '',\n whiteSpaceNowrap ? 'white-space-no-wrap' : '',\n !waitForConfirmDelete && confirmDelete ? 'step-delete' : '',\n confirmDelete ? 'deletePosition-' + confirmDeletePosition : ''\n ]\"\n [ngStyle]=\"{\n 'text-align': contentHorizontalPosition\n }\"\n>\n <span class=\"wac-button__wrapper\" [style.color]=\"textcolor ? textcolor : ''\">\n <i *ngIf=\"icon\" [ngClass]=\"icon\" [style.font-size.px]=\"iconFontSize\"></i>\n {{ label }}\n <i *ngIf=\"iconNext\" [ngClass]=\"iconNext\" [style.font-size.px]=\"iconFontSize\"></i>\n </span>\n <span class=\"wac-button__animation\" [style.maxWidth]=\"buttonMaxWidth\" [style.width]=\"buttonWidth + 'px'\">\n <span #calculWidth class=\"wac-button__animation__text\" [innerHTML]=\"animationText\"></span>\n </span>\n <span class=\"wac-button__confirmDelete\" [style.maxWidth]=\"buttonMaxWidthDelete\" [style.width]=\"buttonWidthDelete + 'px'\">\n <span #calculWidthDelete class=\"wac-button__confirmDelete__text\" [innerHTML]=\"confirmDeleteText\"></span>\n </span>\n <span *ngIf=\"coin\" class=\"wac-button__coin\"><i class=\"fa-solid fa-coin-front\"></i><span [innerHTML]=\"coin\"></span></span>\n <span\n class=\"wac-button__loader\"\n [ngClass]=\"extraClasses.includes('is-outlined') ? 'outlined' : ''\"\n *ngIf=\"isLoading\"\n [style.width]=\"currentLoading + '%'\"\n >\n <span *ngIf=\"extraClasses.includes('is-outlined')\">\n <i *ngIf=\"icon !== ''\" [ngClass]=\"icon\" [style.font-size.px]=\"iconFontSize\"></i>\n {{ label }}\n <i *ngIf=\"iconNext !== ''\" [ngClass]=\"iconNext\" [style.font-size.px]=\"iconFontSize\"></i>\n </span>\n </span>\n <span class=\"wac-button__tooltips {{ tooltipPosition }}\" [ngClass]=\"{'oneline': tooltipOneline}\" [style.minWidth]=\"tooltipWidth\" *ngIf=\"tooltip\">\n {{ tooltip }}\n </span>\n</a>\n" }]
1212
- }], ctorParameters: function () { return []; }, propDecorators: { extraClasses: [{
1217
+ }], ctorParameters: function () {
1218
+ return [{ type: undefined, decorators: [{
1219
+ type: Attribute,
1220
+ args: ['type']
1221
+ }] }, { type: i2.FormGroupDirective, decorators: [{
1222
+ type: Optional
1223
+ }, {
1224
+ type: Inject,
1225
+ args: [FormGroupDirective]
1226
+ }] }];
1227
+ }, propDecorators: { extraClasses: [{
1213
1228
  type: Input
1214
1229
  }], label: [{
1215
1230
  type: Input
@@ -4238,6 +4253,22 @@ class ValueChangeService {
4238
4253
  this.valueChange$ = new Subject();
4239
4254
  this.indexSelectedOption = null;
4240
4255
  this.resetListeners$ = new Subject();
4256
+ this.indexOfMatchedOption = (option, index, letter) => {
4257
+ const textOption = option.getContentRef().nativeElement.textContent.trim().toLowerCase();
4258
+ return textOption.startsWith(letter) ? index : null;
4259
+ };
4260
+ this.isNotNull = (index) => {
4261
+ return index !== null;
4262
+ };
4263
+ this.highestAndClosestIndex = (index) => {
4264
+ if (isNaN(this.indexSelectedOption)) {
4265
+ return true;
4266
+ }
4267
+ if (index > this.indexSelectedOption) {
4268
+ return true;
4269
+ }
4270
+ return false;
4271
+ };
4241
4272
  }
4242
4273
  set value(value) {
4243
4274
  this._value = value;
@@ -4287,26 +4318,15 @@ class ValueChangeService {
4287
4318
  }
4288
4319
  searchOptionByFirstLetter(letter) {
4289
4320
  const matchedOptionsIndex = this.optionChildren
4290
- .map((option, index) => {
4291
- const textOption = option.getContentRef().nativeElement.textContent.trim().toLowerCase();
4292
- return textOption.startsWith(letter) ? index : null;
4293
- })
4294
- .filter((index) => index !== null);
4321
+ .map((option, index) => this.indexOfMatchedOption(option, index, letter))
4322
+ .filter(this.isNotNull);
4295
4323
  if (!matchedOptionsIndex.length) { // reset the selection
4296
4324
  this.indexSelectedOption = null;
4297
4325
  this.assignValue(null);
4298
4326
  return;
4299
4327
  }
4300
4328
  // find the next option after the current selected option, or the first option
4301
- const validOptionIndex = matchedOptionsIndex.find((index) => {
4302
- if (isNaN(this.indexSelectedOption)) {
4303
- return true;
4304
- }
4305
- if (index > this.indexSelectedOption) {
4306
- return true;
4307
- }
4308
- return false;
4309
- });
4329
+ const validOptionIndex = matchedOptionsIndex.find(this.highestAndClosestIndex);
4310
4330
  this.indexSelectedOption = isNaN(validOptionIndex) ? matchedOptionsIndex[0] : validOptionIndex;
4311
4331
  this.assignValue(this.optionChildren.get(this.indexSelectedOption).value);
4312
4332
  }
@@ -4423,7 +4443,6 @@ class SelectTestComponent {
4423
4443
  constructor(valueChangeService) {
4424
4444
  this.valueChangeService = valueChangeService;
4425
4445
  //! Refacto improve sroll on mobile, see with Pauline
4426
- // todo handle when user search with first letter from keyboard event
4427
4446
  // angular material select https://github.com/angular/components/blob/main/src/material/select/select.ts
4428
4447
  this.role = 'combobox';
4429
4448
  this.valueChange = new EventEmitter();
@@ -4541,7 +4560,6 @@ class SelectTestComponent {
4541
4560
  }
4542
4561
  /** Handles keyboard events when the selected is open. */
4543
4562
  _handleOpenKeydown(event) {
4544
- console.log('event', event);
4545
4563
  const keyCode = event.keyCode;
4546
4564
  const isArrowKey = keyCode === DOWN_ARROW ||
4547
4565
  keyCode === UP_ARROW ||
@@ -4588,7 +4606,7 @@ class SelectTestComponent {
4588
4606
  }
4589
4607
  }
4590
4608
  SelectTestComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.7", ngImport: i0, type: SelectTestComponent, deps: [{ token: ValueChangeService }], target: i0.ɵɵFactoryTarget.Component });
4591
- SelectTestComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.7", type: SelectTestComponent, selector: "wac-select-test", inputs: { value: "value", required: "required", disabled: "disabled", keepPanelOpen: "keepPanelOpen", openPanel: "openPanel", enableSearch: "enableSearch" }, outputs: { valueChange: "valueChange", openPanelChange: "openPanelChange" }, host: { listeners: { "document:keydown": "_handleKeydown($event)" }, properties: { "attr.role": "this.role" } }, providers: [
4609
+ SelectTestComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.7", type: SelectTestComponent, selector: "wac-select-test", inputs: { value: "value", required: "required", disabled: "disabled", keepPanelOpen: "keepPanelOpen", openPanel: "openPanel", enableSearch: "enableSearch" }, outputs: { valueChange: "valueChange", openPanelChange: "openPanelChange" }, host: { listeners: { "keydown": "_handleKeydown($event)" }, properties: { "attr.role": "this.role" } }, providers: [
4592
4610
  { provide: NG_VALUE_ACCESSOR, useExisting: SelectTestComponent, multi: true },
4593
4611
  ValueChangeService
4594
4612
  ], queries: [{ propertyName: "customSearchTrigger", first: true, predicate: SelectSearchTriggerComponent, descendants: true }, { propertyName: "label", first: true, predicate: LabelComponent, descendants: true }, { propertyName: "optionChildren", predicate: OPTION_SELECTION_HANDLER, descendants: true }], ngImport: i0, template: "<p *ngIf=\"!!label\" class=\"wac-select-test__label\">\n <ng-content select=\"wac-label, .wac-label\" ></ng-content>\n</p>\n\n\n<div\n class=\"wac-select-test\"\n wzAutoHide\n (clickOutside)=\"onClosePanel()\"\n [triggerElement]=\"'wac-select-test__header__selection'\"\n [zIndexToggle]=\"openPanel\"\n >\n\n <div class=\"wac-select-test__header\" [ngClass]=\"{ 'select-disabled' : disabled }\" (click)=\"!disabled && onTogglePanel()\" tabindex=\"0\">\n\n <ng-container [ngTemplateOutlet]=\"openPanel ? openPanelTrigger : closePanelTrigger\" >\n\n <ng-template #closePanelTrigger>\n <ng-container [ngTemplateOutlet]=\"defaultTrigger\"></ng-container>\n </ng-template>\n\n <ng-template #openPanelTrigger>\n <ng-content *ngIf=\"!!customSearchTrigger; else defaultTrigger\" select=\"wac-select-search-trigger\" ></ng-content>\n </ng-template>\n\n <ng-template #defaultTrigger>\n <ng-content *ngIf=\"!selectedOptionContent\" select=\"wac-placeholder,[role=placeholder]\"></ng-content>\n <div\n class=\"wac-select-test__header__selection wac-option__placeholder\"\n *ngIf=\"!!selectedOptionContent\"\n [innerHtml]=\"selectedOptionContent\">\n </div>\n </ng-template>\n\n </ng-container>\n\n <span class=\"wac-select-test__header__chevron\"><i class=\"fas fa-chevron-down\"></i></span>\n\n </div>\n\n\n <div class=\"wac-select-test__content\" *ngIf=\"!disabled\" [ngClass]=\"{ hidden: !openPanel, open: openPanel }\">\n\n <perfect-scrollbar [config]=\"{ suppressScrollX: true }\">\n <ng-content\n select=\"wac-option-call-to-action, wac-option, option, .option, [selectOption]\">\n </ng-content>\n </perfect-scrollbar>\n\n <div *ngIf=\"!optionChildren?.length\" class=\"wac-select-test__content__empty\">\n <span>{{'wac.datatable.noresult' | translate}}</span>\n </div>\n\n </div>\n</div>", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: AutoHideDirective, selector: "[wzAutoHide]", inputs: ["triggerElement", "forceOn"], outputs: ["clickOutside"] }, { kind: "directive", type: ZindexToggleDirective, selector: "[zIndexToggle]", inputs: ["zIndexToggle"], outputs: ["onEventChange"] }, { kind: "component", type: i4$1.PerfectScrollbarComponent, selector: "perfect-scrollbar", inputs: ["disabled", "usePSClass", "autoPropagation", "scrollIndicators", "config"], outputs: ["psScrollY", "psScrollX", "psScrollUp", "psScrollDown", "psScrollLeft", "psScrollRight", "psYReachEnd", "psYReachStart", "psXReachEnd", "psXReachStart"], exportAs: ["ngxPerfectScrollbar"] }, { kind: "pipe", type: i1$3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
@@ -4628,7 +4646,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.7", ngImpor
4628
4646
  type: Input
4629
4647
  }], _handleKeydown: [{
4630
4648
  type: HostListener,
4631
- args: ['document:keydown', ['$event']]
4649
+ args: ['keydown', ['$event']]
4632
4650
  }] } });
4633
4651
 
4634
4652
  class OptionComponent {