@ethlete/cdk 3.21.0 → 3.22.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/esm2022/lib/components/forms/components/select/components/combobox/components/combobox/combobox.component.mjs +9 -5
  3. package/esm2022/lib/components/forms/components/select/components/combobox/directives/combobox/combobox.directive.mjs +33 -7
  4. package/esm2022/lib/components/forms/components/select/components/combobox/partials/combobox-body/combobox-body.component.mjs +3 -3
  5. package/esm2022/lib/components/forms/components/select/components/combobox/partials/combobox-option/combobox-option.component.mjs +3 -4
  6. package/esm2022/lib/components/forms/components/select/components/combobox/private/combobox.private.types.mjs +1 -1
  7. package/esm2022/lib/components/forms/components/select/components/combobox/utils/public-api.mjs +1 -2
  8. package/esm2022/lib/components/forms/components/select/components/select/components/select/select.component.mjs +3 -3
  9. package/esm2022/lib/components/forms/components/select/components/select/directives/select/select.directive.mjs +144 -312
  10. package/esm2022/lib/components/forms/components/select/components/select/directives/select-body/select-body.directive.mjs +4 -3
  11. package/esm2022/lib/components/forms/components/select/components/select/directives/select-option/select-option.directive.mjs +15 -40
  12. package/esm2022/lib/components/forms/components/select/components/select/partials/select-body/select-body.component.mjs +8 -5
  13. package/esm2022/lib/components/forms/components/select/components/{combobox/utils → select/private}/index.mjs +2 -2
  14. package/esm2022/lib/components/forms/components/select/components/select/private/select.private.types.mjs +2 -0
  15. package/esm2022/lib/components/overlay/components/bottom-sheet/partials/bottom-sheet-container-base/bottom-sheet-container-base.component.mjs +4 -4
  16. package/esm2022/lib/components/overlay/components/dialog/partials/dialog-container-base/dialog-container-base.component.mjs +4 -4
  17. package/esm2022/lib/components/overlay/components/overlay/components/overlay-container/overlay-container.component.mjs +6 -4
  18. package/esm2022/lib/components/overlay/components/overlay/services/overlay.service.mjs +10 -3
  19. package/esm2022/lib/components/overlay/components/overlay/utils/overlay-ref.mjs +35 -6
  20. package/esm2022/lib/components/overlay/components/toggletip/directives/toggletip/toggletip.directive.mjs +5 -3
  21. package/esm2022/lib/components/overlay/components/tooltip/directives/tooltip/tooltip.directive.mjs +5 -3
  22. package/esm2022/lib/components/overlay/directives/overlay-close-auto-blocker/index.mjs +2 -0
  23. package/esm2022/lib/components/overlay/directives/overlay-close-auto-blocker/overlay-close-auto-blocker.directive.mjs +51 -0
  24. package/esm2022/lib/components/overlay/directives/overlay-close-auto-blocker/public-api.mjs +2 -0
  25. package/esm2022/lib/components/overlay/directives/public-api.mjs +2 -1
  26. package/esm2022/lib/components/overlay/public-api.mjs +2 -1
  27. package/esm2022/lib/components/overlay/utils/overlay-dismiss-checker.util.mjs +79 -0
  28. package/esm2022/lib/components/overlay/utils/public-api.mjs +2 -0
  29. package/fesm2022/ethlete-cdk.mjs +397 -409
  30. package/fesm2022/ethlete-cdk.mjs.map +1 -1
  31. package/lib/components/forms/components/select/components/combobox/components/combobox/combobox.component.d.ts +4 -3
  32. package/lib/components/forms/components/select/components/combobox/directives/combobox/combobox.directive.d.ts +4 -1
  33. package/lib/components/forms/components/select/components/combobox/private/combobox.private.types.d.ts +1 -1
  34. package/lib/components/forms/components/select/components/combobox/utils/public-api.d.ts +0 -1
  35. package/lib/components/forms/components/select/components/select/directives/select/select.directive.d.ts +16 -53
  36. package/lib/components/forms/components/select/components/select/directives/select-body/select-body.directive.d.ts +2 -1
  37. package/lib/components/forms/components/select/components/select/directives/select-option/select-option.directive.d.ts +7 -9
  38. package/lib/components/forms/components/select/components/select/partials/select-body/select-body.component.d.ts +2 -1
  39. package/lib/components/forms/components/select/components/select/private/index.d.ts +1 -0
  40. package/lib/components/forms/components/select/components/select/private/select.private.types.d.ts +13 -0
  41. package/lib/components/overlay/components/bottom-sheet/partials/bottom-sheet-container-base/bottom-sheet-container-base.component.d.ts +1 -1
  42. package/lib/components/overlay/components/dialog/partials/dialog-container-base/dialog-container-base.component.d.ts +1 -1
  43. package/lib/components/overlay/components/overlay/components/overlay-container/overlay-container.component.d.ts +5 -3
  44. package/lib/components/overlay/components/overlay/utils/overlay-ref.d.ts +12 -3
  45. package/lib/components/overlay/components/toggletip/directives/toggletip/toggletip.directive.d.ts +2 -1
  46. package/lib/components/overlay/components/tooltip/directives/tooltip/tooltip.directive.d.ts +2 -1
  47. package/lib/components/overlay/directives/overlay-close-auto-blocker/overlay-close-auto-blocker.directive.d.ts +12 -0
  48. package/lib/components/overlay/directives/overlay-close-auto-blocker/public-api.d.ts +1 -0
  49. package/lib/components/overlay/directives/public-api.d.ts +1 -0
  50. package/lib/components/overlay/public-api.d.ts +1 -0
  51. package/lib/components/overlay/utils/overlay-dismiss-checker.util.d.ts +60 -0
  52. package/lib/components/overlay/utils/public-api.d.ts +1 -0
  53. package/package.json +2 -2
  54. package/esm2022/lib/components/forms/components/select/components/combobox/utils/option.utils.mjs +0 -7
  55. package/lib/components/forms/components/select/components/combobox/utils/option.utils.d.ts +0 -1
  56. /package/lib/components/{forms/components/select/components/combobox/utils → overlay/directives/overlay-close-auto-blocker}/index.d.ts +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,27 @@
1
1
  # @ethlete/cdk
2
2
 
3
+ ## 3.22.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [`acfb8522`](https://github.com/ethlete-io/ethdk/commit/acfb852234a177ba9d4b4fab78905a586656a9fa) Thanks [@TomTomB](https://github.com/TomTomB)! - Fix selection model options always being disabled
8
+
9
+ ## 3.22.0
10
+
11
+ ### Minor Changes
12
+
13
+ - [`bd94df6f`](https://github.com/ethlete-io/ethdk/commit/bd94df6f5508c32ea4e170f38fc2490dddea0f77) Thanks [@TomTomB](https://github.com/TomTomB)! - Add bindDisabled input to combobox
14
+
15
+ - [`f2465c10`](https://github.com/ethlete-io/ethdk/commit/f2465c105d96c203d3e313f5e116f42025928453) Thanks [@TomTomB](https://github.com/TomTomB)! - Add createOverlayDismissChecker util for preventing accidentally closing overlays containing changed form data.
16
+
17
+ ### Patch Changes
18
+
19
+ - [`3b59594a`](https://github.com/ethlete-io/ethdk/commit/3b59594a993b3ccf06e64d872d2c17dfa96412a4) Thanks [@TomTomB](https://github.com/TomTomB)! - Overlay no longer closes by pressing esc if an inner overlay (like a tooltip) is open
20
+
21
+ - [`376248cf`](https://github.com/ethlete-io/ethdk/commit/376248cf8ed47d7d8330862ea531f0350effc873) Thanks [@TomTomB](https://github.com/TomTomB)! - Dont render combobox options if error is present
22
+
23
+ - [`03a8c31b`](https://github.com/ethlete-io/ethdk/commit/03a8c31b369167a185f681a53bf621ab371d7b08) Thanks [@TomTomB](https://github.com/TomTomB)! - Fix conflicting angular selectors
24
+
3
25
  ## 3.21.0
4
26
 
5
27
  ### Minor Changes
@@ -2,14 +2,16 @@ import { AsyncPipe, NgComponentOutlet, NgFor, NgIf, NgTemplateOutlet } from '@an
2
2
  import { ChangeDetectionStrategy, Component, ViewEncapsulation, inject } from '@angular/core';
3
3
  import { AnimatedOverlayDirective, LetDirective } from '@ethlete/core';
4
4
  import { ChevronIconComponent } from '../../../../../../../icons';
5
+ import { OverlayCloseBlockerDirective } from '../../../../../../../overlay';
5
6
  import { InputDirective, NativeInputRefDirective } from '../../../../../../directives';
6
7
  import { DecoratedInputBase } from '../../../../../../utils';
7
8
  import { COMBOBOX_TOKEN, ComboboxDirective } from '../../directives';
8
9
  import { ComboboxBodyComponent } from '../../partials';
9
10
  import * as i0 from "@angular/core";
10
11
  import * as i1 from "@ethlete/core";
11
- import * as i2 from "../../../../../../directives/input/input.directive";
12
- import * as i3 from "../../directives/combobox/combobox.directive";
12
+ import * as i2 from "../../../../../../../overlay/directives/overlay-close-auto-blocker/overlay-close-auto-blocker.directive";
13
+ import * as i3 from "../../../../../../directives/input/input.directive";
14
+ import * as i4 from "../../directives/combobox/combobox.directive";
13
15
  export class ComboboxComponent extends DecoratedInputBase {
14
16
  constructor() {
15
17
  super();
@@ -17,7 +19,7 @@ export class ComboboxComponent extends DecoratedInputBase {
17
19
  this.combobox.setBodyComponent(ComboboxBodyComponent);
18
20
  }
19
21
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: ComboboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
20
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.5", type: ComboboxComponent, isStandalone: true, selector: "et-combobox", host: { listeners: { "click": "combobox.selectInputAndOpen()" }, classAttribute: "et-combobox" }, usesInheritance: true, hostDirectives: [{ directive: i1.AnimatedOverlayDirective }, { directive: i2.InputDirective, inputs: ["placeholder", "placeholder"] }, { directive: i3.ComboboxDirective, inputs: ["options", "options", "initialValue", "initialValue", "filterInternal", "filterInternal", "loading", "loading", "error", "error", "emptyText", "emptyText", "placeholder", "placeholder", "multiple", "multiple", "bindLabel", "bindLabel", "bindValue", "bindValue", "allowCustomValues", "allowCustomValues", "selectedOptionComponent", "selectedOptionComponent", "optionComponent", "optionComponent", "bodyErrorComponent", "bodyErrorComponent", "bodyLoadingComponent", "bodyLoadingComponent", "bodyEmptyComponent", "bodyEmptyComponent", "bodyMoreItemsHintComponent", "bodyMoreItemsHintComponent", "showBodyMoreItemsHint", "showBodyMoreItemsHint", "bodyEmptyText", "bodyEmptyText", "bodyMoreItemsHintText", "bodyMoreItemsHintText", "optionComponentInputs", "optionComponentInputs", "selectedOptionComponentInputs", "selectedOptionComponentInputs", "bodyErrorComponentInputs", "bodyErrorComponentInputs", "bodyLoadingComponentInputs", "bodyLoadingComponentInputs", "bodyEmptyComponentInputs", "bodyEmptyComponentInputs", "bodyMoreItemsHintComponentInputs", "bodyMoreItemsHintComponentInputs"], outputs: ["filterChange", "filterChange"] }], ngImport: i0, template: "<ng-content select=\"[etInputPrefix]\" />\n\n<div>\n <div *ngIf=\"combobox.multiple$ | async\" class=\"et-combobox-selected-options\">\n <div\n *ngFor=\"let item of combobox.selectedOptions$ | async; trackBy: combobox.trackByOptionKeyFn\"\n class=\"et-combobox-selected-option\"\n aria-hidden=\"true\"\n >\n <ng-container\n *ngIf=\"\n combobox.customSelectedOptionTpl$ | async as customSelectedOptionTpl;\n else compOrDefaultSelectedOptionLabelTpl\n \"\n >\n <ng-container *ngTemplateOutlet=\"customSelectedOptionTpl; context: { option: item }\" />\n </ng-container>\n\n <ng-template #compOrDefaultSelectedOptionLabelTpl>\n <ng-container\n *ngIf=\"combobox.customSelectedOptionComponent$ | async as comp; else defaultSelectedOptionLabelTpl\"\n >\n <ng-container\n *ngComponentOutlet=\"\n comp;\n inputs: (combobox.combineSelectedOptionWithComponentInputs(item) | async) ?? { option: item }\n \"\n ></ng-container>\n </ng-container>\n <ng-template #defaultSelectedOptionLabelTpl>\n {{ combobox.getOptionLabel(item) | async }}\n </ng-template>\n </ng-template>\n\n <button\n (click)=\"combobox.removeSelectedOption(item); $event.stopPropagation()\"\n class=\"et-combobox-selected-option-remove\"\n tabindex=\"-1\"\n >\n x\n </button>\n </div>\n <div class=\"et-combobox-muliple-input\">\n <ng-container *ngTemplateOutlet=\"inputTpl\" />\n </div>\n </div>\n\n <ng-template #inputTpl>\n <input\n [disabled]=\"input.disabled\"\n [attr.id]=\"input.id\"\n [attr.aria-required]=\"(input.required$ | async) || null\"\n [attr.aria-disabled]=\"(input.disabled$ | async) || null\"\n [attr.aria-invalid]=\"(input.invalid$ | async) || null\"\n [attr.aria-expanded]=\"combobox.isOpen$ | async\"\n [attr.aria-describedby]=\"input.describedBy$ | async\"\n [attr.placeholder]=\"input.placeholder || null\"\n [attr.aria-activedescendant]=\"combobox.activeOptionId$ | async\"\n [attr.aria-controls]=\"(combobox.selectBodyId$ | async) || null\"\n [attr.aria-owns]=\"(combobox.selectBodyId$ | async) || null\"\n (keydown)=\"combobox._processKeydownEvent($event)\"\n (keyup)=\"combobox._processKeyupEvent()\"\n (click)=\"combobox.open()\"\n (blur)=\"combobox._handleBlurEvent()\"\n (input)=\"combobox._processInputEvent($event)\"\n class=\"et-combobox-wrapper\"\n aria-haspopup=\"listbox\"\n role=\"combobox\"\n aria-autocomplete=\"list\"\n type=\"text\"\n value=\"{{ combobox.currentFilter }}\"\n etNativeInputRef\n />\n </ng-template>\n\n <ng-container *ngIf=\"(combobox.multiple$ | async) === false\">\n <ng-container *ngTemplateOutlet=\"inputTpl\" />\n </ng-container>\n\n <et-chevron-icon class=\"et-combobox-chevron\" />\n</div>\n\n<ng-content select=\"[etInputSuffix]\" />\n\n<ng-template>\n <ng-content />\n</ng-template>\n", styles: [".et-combobox-body.et-with-default-animation .et-combobox-body-container.et-animation-enter-from,.et-combobox-body.et-with-default-animation .et-combobox-body-container.et-animation-leave-to{opacity:0;transform:scaleY(0)}.et-combobox-body.et-with-default-animation .et-combobox-body-container.et-animation-enter-active{transition:transform 125ms var(--ease-out-5),opacity 125ms var(--ease-out-5)}.et-combobox-body.et-with-default-animation .et-combobox-body-container.et-animation-leave-active{transition:transform 50ms var(--ease-in-5),opacity 50ms var(--ease-in-5)}.et-combobox-body.et-with-default-animation[et-floating-placement^=top] .et-combobox-body-container{transform-origin:bottom}.et-combobox-body.et-with-default-animation[et-floating-placement^=bottom] .et-combobox-body-container{transform-origin:top}.et-combobox-body-container{display:block;background-color:#3d3d3d;color:#fff;max-height:min(200px,var(--et-floating-max-height, 200px));overflow:auto}@supports (overflow: overlay){.et-combobox-body-container{overflow:overlay}}.et-combobox-body{width:100%;display:grid;transform:var(--et-floating-translate);will-change:transform}.et-combobox-option{display:block}:where(.et-combobox-option--active){background-color:#1e1e1e}.et-combobox{display:block;border:1px solid #ccc;padding:15px;position:relative}.et-combobox-chevron{transform:rotate(180deg);display:block;inline-size:15px;block-size:15px;position:absolute;inset-inline-end:15px;inset-block-start:7px}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NativeInputRefDirective, selector: "input[etNativeInputRef], textarea[etNativeInputRef], select[etNativeInputRef], button[etNativeInputRef]" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: ChevronIconComponent, selector: "et-chevron-icon" }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
22
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.5", type: ComboboxComponent, isStandalone: true, selector: "et-combobox", host: { listeners: { "click": "combobox.selectInputAndOpen()" }, classAttribute: "et-combobox" }, usesInheritance: true, hostDirectives: [{ directive: i1.AnimatedOverlayDirective }, { directive: i2.OverlayCloseBlockerDirective }, { directive: i3.InputDirective, inputs: ["placeholder", "placeholder"] }, { directive: i4.ComboboxDirective, inputs: ["options", "options", "initialValue", "initialValue", "filterInternal", "filterInternal", "loading", "loading", "error", "error", "emptyText", "emptyText", "placeholder", "placeholder", "multiple", "multiple", "bindLabel", "bindLabel", "bindValue", "bindValue", "bindDisabled", "bindDisabled", "allowCustomValues", "allowCustomValues", "selectedOptionComponent", "selectedOptionComponent", "optionComponent", "optionComponent", "bodyErrorComponent", "bodyErrorComponent", "bodyLoadingComponent", "bodyLoadingComponent", "bodyEmptyComponent", "bodyEmptyComponent", "bodyMoreItemsHintComponent", "bodyMoreItemsHintComponent", "showBodyMoreItemsHint", "showBodyMoreItemsHint", "bodyEmptyText", "bodyEmptyText", "bodyMoreItemsHintText", "bodyMoreItemsHintText", "optionComponentInputs", "optionComponentInputs", "selectedOptionComponentInputs", "selectedOptionComponentInputs", "bodyErrorComponentInputs", "bodyErrorComponentInputs", "bodyLoadingComponentInputs", "bodyLoadingComponentInputs", "bodyEmptyComponentInputs", "bodyEmptyComponentInputs", "bodyMoreItemsHintComponentInputs", "bodyMoreItemsHintComponentInputs"], outputs: ["filterChange", "filterChange"] }], ngImport: i0, template: "<ng-content select=\"[etInputPrefix]\" />\n\n<div>\n <div *ngIf=\"combobox.multiple$ | async\" class=\"et-combobox-selected-options\">\n <div\n *ngFor=\"let item of combobox.selectedOptions$ | async; trackBy: combobox.trackByOptionKeyFn\"\n class=\"et-combobox-selected-option\"\n aria-hidden=\"true\"\n >\n <ng-container\n *ngIf=\"\n combobox.customSelectedOptionTpl$ | async as customSelectedOptionTpl;\n else compOrDefaultSelectedOptionLabelTpl\n \"\n >\n <ng-container *ngTemplateOutlet=\"customSelectedOptionTpl; context: { option: item }\" />\n </ng-container>\n\n <ng-template #compOrDefaultSelectedOptionLabelTpl>\n <ng-container\n *ngIf=\"combobox.customSelectedOptionComponent$ | async as comp; else defaultSelectedOptionLabelTpl\"\n >\n <ng-container\n *ngComponentOutlet=\"\n comp;\n inputs: (combobox.combineSelectedOptionWithComponentInputs(item) | async) ?? { option: item }\n \"\n ></ng-container>\n </ng-container>\n <ng-template #defaultSelectedOptionLabelTpl>\n {{ combobox.getOptionLabel(item) | async }}\n </ng-template>\n </ng-template>\n\n <button\n (click)=\"combobox.removeSelectedOption(item); $event.stopPropagation(); combobox.focus()\"\n class=\"et-combobox-selected-option-remove\"\n tabindex=\"-1\"\n >\n x\n </button>\n </div>\n <div class=\"et-combobox-muliple-input\">\n <ng-container *ngTemplateOutlet=\"inputTpl\" />\n </div>\n </div>\n\n <ng-template #inputTpl>\n <input\n [disabled]=\"input.disabled\"\n [attr.id]=\"input.id\"\n [attr.aria-required]=\"(input.required$ | async) || null\"\n [attr.aria-disabled]=\"(input.disabled$ | async) || null\"\n [attr.aria-invalid]=\"(input.invalid$ | async) || null\"\n [attr.aria-expanded]=\"combobox.isOpen$ | async\"\n [attr.aria-describedby]=\"input.describedBy$ | async\"\n [attr.placeholder]=\"input.placeholder || null\"\n [attr.aria-activedescendant]=\"combobox.activeOptionId$ | async\"\n [attr.aria-controls]=\"(combobox.selectBodyId$ | async) || null\"\n [attr.aria-owns]=\"(combobox.selectBodyId$ | async) || null\"\n (keydown)=\"combobox._processKeydownEvent($event)\"\n (keyup)=\"combobox._processKeyupEvent()\"\n (click)=\"combobox.open()\"\n (blur)=\"combobox._handleBlurEvent()\"\n (input)=\"combobox._processInputEvent($event)\"\n class=\"et-combobox-wrapper\"\n autocomplete=\"off\"\n aria-haspopup=\"listbox\"\n role=\"combobox\"\n aria-autocomplete=\"list\"\n type=\"text\"\n value=\"{{ combobox.currentFilter }}\"\n etNativeInputRef\n />\n </ng-template>\n\n <ng-container *ngIf=\"(combobox.multiple$ | async) === false\">\n <ng-container *ngTemplateOutlet=\"inputTpl\" />\n </ng-container>\n\n <et-chevron-icon class=\"et-combobox-chevron\" />\n</div>\n\n<ng-content select=\"[etInputSuffix]\" />\n\n<ng-template>\n <ng-content />\n</ng-template>\n", styles: [".et-combobox-body.et-with-default-animation .et-combobox-body-container.et-animation-enter-from,.et-combobox-body.et-with-default-animation .et-combobox-body-container.et-animation-leave-to{opacity:0;transform:scaleY(0)}.et-combobox-body.et-with-default-animation .et-combobox-body-container.et-animation-enter-active{transition:transform 125ms var(--ease-out-5),opacity 125ms var(--ease-out-5)}.et-combobox-body.et-with-default-animation .et-combobox-body-container.et-animation-leave-active{transition:transform 50ms var(--ease-in-5),opacity 50ms var(--ease-in-5)}.et-combobox-body.et-with-default-animation[et-floating-placement^=top] .et-combobox-body-container{transform-origin:bottom}.et-combobox-body.et-with-default-animation[et-floating-placement^=bottom] .et-combobox-body-container{transform-origin:top}.et-combobox-body-container{display:block;background-color:#3d3d3d;color:#fff;max-height:min(200px,var(--et-floating-max-height, 200px));overflow:auto}@supports (overflow: overlay){.et-combobox-body-container{overflow:overlay}}.et-combobox-body{width:100%;display:grid;transform:var(--et-floating-translate);will-change:transform}.et-combobox-option{display:block}:where(.et-combobox-option--active){background-color:#1e1e1e}.et-combobox{display:block;border:1px solid #ccc;padding:15px;position:relative}.et-combobox-chevron{transform:rotate(180deg);display:block;inline-size:15px;block-size:15px;position:absolute;inset-inline-end:15px;inset-block-start:7px}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NativeInputRefDirective, selector: "input[etNativeInputRef], textarea[etNativeInputRef], select[etNativeInputRef], button[etNativeInputRef]" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: ChevronIconComponent, selector: "et-chevron-icon" }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
21
23
  }
22
24
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: ComboboxComponent, decorators: [{
23
25
  type: Component,
@@ -35,6 +37,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImpor
35
37
  NgComponentOutlet,
36
38
  ], hostDirectives: [
37
39
  AnimatedOverlayDirective,
40
+ OverlayCloseBlockerDirective,
38
41
  { directive: InputDirective, inputs: ['placeholder'] },
39
42
  {
40
43
  directive: ComboboxDirective,
@@ -49,6 +52,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImpor
49
52
  'multiple',
50
53
  'bindLabel',
51
54
  'bindValue',
55
+ 'bindDisabled',
52
56
  'allowCustomValues',
53
57
  'selectedOptionComponent',
54
58
  'optionComponent',
@@ -69,6 +73,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImpor
69
73
  // eslint-disable-next-line @angular-eslint/no-outputs-metadata-property
70
74
  outputs: ['filterChange'],
71
75
  },
72
- ], template: "<ng-content select=\"[etInputPrefix]\" />\n\n<div>\n <div *ngIf=\"combobox.multiple$ | async\" class=\"et-combobox-selected-options\">\n <div\n *ngFor=\"let item of combobox.selectedOptions$ | async; trackBy: combobox.trackByOptionKeyFn\"\n class=\"et-combobox-selected-option\"\n aria-hidden=\"true\"\n >\n <ng-container\n *ngIf=\"\n combobox.customSelectedOptionTpl$ | async as customSelectedOptionTpl;\n else compOrDefaultSelectedOptionLabelTpl\n \"\n >\n <ng-container *ngTemplateOutlet=\"customSelectedOptionTpl; context: { option: item }\" />\n </ng-container>\n\n <ng-template #compOrDefaultSelectedOptionLabelTpl>\n <ng-container\n *ngIf=\"combobox.customSelectedOptionComponent$ | async as comp; else defaultSelectedOptionLabelTpl\"\n >\n <ng-container\n *ngComponentOutlet=\"\n comp;\n inputs: (combobox.combineSelectedOptionWithComponentInputs(item) | async) ?? { option: item }\n \"\n ></ng-container>\n </ng-container>\n <ng-template #defaultSelectedOptionLabelTpl>\n {{ combobox.getOptionLabel(item) | async }}\n </ng-template>\n </ng-template>\n\n <button\n (click)=\"combobox.removeSelectedOption(item); $event.stopPropagation()\"\n class=\"et-combobox-selected-option-remove\"\n tabindex=\"-1\"\n >\n x\n </button>\n </div>\n <div class=\"et-combobox-muliple-input\">\n <ng-container *ngTemplateOutlet=\"inputTpl\" />\n </div>\n </div>\n\n <ng-template #inputTpl>\n <input\n [disabled]=\"input.disabled\"\n [attr.id]=\"input.id\"\n [attr.aria-required]=\"(input.required$ | async) || null\"\n [attr.aria-disabled]=\"(input.disabled$ | async) || null\"\n [attr.aria-invalid]=\"(input.invalid$ | async) || null\"\n [attr.aria-expanded]=\"combobox.isOpen$ | async\"\n [attr.aria-describedby]=\"input.describedBy$ | async\"\n [attr.placeholder]=\"input.placeholder || null\"\n [attr.aria-activedescendant]=\"combobox.activeOptionId$ | async\"\n [attr.aria-controls]=\"(combobox.selectBodyId$ | async) || null\"\n [attr.aria-owns]=\"(combobox.selectBodyId$ | async) || null\"\n (keydown)=\"combobox._processKeydownEvent($event)\"\n (keyup)=\"combobox._processKeyupEvent()\"\n (click)=\"combobox.open()\"\n (blur)=\"combobox._handleBlurEvent()\"\n (input)=\"combobox._processInputEvent($event)\"\n class=\"et-combobox-wrapper\"\n aria-haspopup=\"listbox\"\n role=\"combobox\"\n aria-autocomplete=\"list\"\n type=\"text\"\n value=\"{{ combobox.currentFilter }}\"\n etNativeInputRef\n />\n </ng-template>\n\n <ng-container *ngIf=\"(combobox.multiple$ | async) === false\">\n <ng-container *ngTemplateOutlet=\"inputTpl\" />\n </ng-container>\n\n <et-chevron-icon class=\"et-combobox-chevron\" />\n</div>\n\n<ng-content select=\"[etInputSuffix]\" />\n\n<ng-template>\n <ng-content />\n</ng-template>\n", styles: [".et-combobox-body.et-with-default-animation .et-combobox-body-container.et-animation-enter-from,.et-combobox-body.et-with-default-animation .et-combobox-body-container.et-animation-leave-to{opacity:0;transform:scaleY(0)}.et-combobox-body.et-with-default-animation .et-combobox-body-container.et-animation-enter-active{transition:transform 125ms var(--ease-out-5),opacity 125ms var(--ease-out-5)}.et-combobox-body.et-with-default-animation .et-combobox-body-container.et-animation-leave-active{transition:transform 50ms var(--ease-in-5),opacity 50ms var(--ease-in-5)}.et-combobox-body.et-with-default-animation[et-floating-placement^=top] .et-combobox-body-container{transform-origin:bottom}.et-combobox-body.et-with-default-animation[et-floating-placement^=bottom] .et-combobox-body-container{transform-origin:top}.et-combobox-body-container{display:block;background-color:#3d3d3d;color:#fff;max-height:min(200px,var(--et-floating-max-height, 200px));overflow:auto}@supports (overflow: overlay){.et-combobox-body-container{overflow:overlay}}.et-combobox-body{width:100%;display:grid;transform:var(--et-floating-translate);will-change:transform}.et-combobox-option{display:block}:where(.et-combobox-option--active){background-color:#1e1e1e}.et-combobox{display:block;border:1px solid #ccc;padding:15px;position:relative}.et-combobox-chevron{transform:rotate(180deg);display:block;inline-size:15px;block-size:15px;position:absolute;inset-inline-end:15px;inset-block-start:7px}\n"] }]
76
+ ], template: "<ng-content select=\"[etInputPrefix]\" />\n\n<div>\n <div *ngIf=\"combobox.multiple$ | async\" class=\"et-combobox-selected-options\">\n <div\n *ngFor=\"let item of combobox.selectedOptions$ | async; trackBy: combobox.trackByOptionKeyFn\"\n class=\"et-combobox-selected-option\"\n aria-hidden=\"true\"\n >\n <ng-container\n *ngIf=\"\n combobox.customSelectedOptionTpl$ | async as customSelectedOptionTpl;\n else compOrDefaultSelectedOptionLabelTpl\n \"\n >\n <ng-container *ngTemplateOutlet=\"customSelectedOptionTpl; context: { option: item }\" />\n </ng-container>\n\n <ng-template #compOrDefaultSelectedOptionLabelTpl>\n <ng-container\n *ngIf=\"combobox.customSelectedOptionComponent$ | async as comp; else defaultSelectedOptionLabelTpl\"\n >\n <ng-container\n *ngComponentOutlet=\"\n comp;\n inputs: (combobox.combineSelectedOptionWithComponentInputs(item) | async) ?? { option: item }\n \"\n ></ng-container>\n </ng-container>\n <ng-template #defaultSelectedOptionLabelTpl>\n {{ combobox.getOptionLabel(item) | async }}\n </ng-template>\n </ng-template>\n\n <button\n (click)=\"combobox.removeSelectedOption(item); $event.stopPropagation(); combobox.focus()\"\n class=\"et-combobox-selected-option-remove\"\n tabindex=\"-1\"\n >\n x\n </button>\n </div>\n <div class=\"et-combobox-muliple-input\">\n <ng-container *ngTemplateOutlet=\"inputTpl\" />\n </div>\n </div>\n\n <ng-template #inputTpl>\n <input\n [disabled]=\"input.disabled\"\n [attr.id]=\"input.id\"\n [attr.aria-required]=\"(input.required$ | async) || null\"\n [attr.aria-disabled]=\"(input.disabled$ | async) || null\"\n [attr.aria-invalid]=\"(input.invalid$ | async) || null\"\n [attr.aria-expanded]=\"combobox.isOpen$ | async\"\n [attr.aria-describedby]=\"input.describedBy$ | async\"\n [attr.placeholder]=\"input.placeholder || null\"\n [attr.aria-activedescendant]=\"combobox.activeOptionId$ | async\"\n [attr.aria-controls]=\"(combobox.selectBodyId$ | async) || null\"\n [attr.aria-owns]=\"(combobox.selectBodyId$ | async) || null\"\n (keydown)=\"combobox._processKeydownEvent($event)\"\n (keyup)=\"combobox._processKeyupEvent()\"\n (click)=\"combobox.open()\"\n (blur)=\"combobox._handleBlurEvent()\"\n (input)=\"combobox._processInputEvent($event)\"\n class=\"et-combobox-wrapper\"\n autocomplete=\"off\"\n aria-haspopup=\"listbox\"\n role=\"combobox\"\n aria-autocomplete=\"list\"\n type=\"text\"\n value=\"{{ combobox.currentFilter }}\"\n etNativeInputRef\n />\n </ng-template>\n\n <ng-container *ngIf=\"(combobox.multiple$ | async) === false\">\n <ng-container *ngTemplateOutlet=\"inputTpl\" />\n </ng-container>\n\n <et-chevron-icon class=\"et-combobox-chevron\" />\n</div>\n\n<ng-content select=\"[etInputSuffix]\" />\n\n<ng-template>\n <ng-content />\n</ng-template>\n", styles: [".et-combobox-body.et-with-default-animation .et-combobox-body-container.et-animation-enter-from,.et-combobox-body.et-with-default-animation .et-combobox-body-container.et-animation-leave-to{opacity:0;transform:scaleY(0)}.et-combobox-body.et-with-default-animation .et-combobox-body-container.et-animation-enter-active{transition:transform 125ms var(--ease-out-5),opacity 125ms var(--ease-out-5)}.et-combobox-body.et-with-default-animation .et-combobox-body-container.et-animation-leave-active{transition:transform 50ms var(--ease-in-5),opacity 50ms var(--ease-in-5)}.et-combobox-body.et-with-default-animation[et-floating-placement^=top] .et-combobox-body-container{transform-origin:bottom}.et-combobox-body.et-with-default-animation[et-floating-placement^=bottom] .et-combobox-body-container{transform-origin:top}.et-combobox-body-container{display:block;background-color:#3d3d3d;color:#fff;max-height:min(200px,var(--et-floating-max-height, 200px));overflow:auto}@supports (overflow: overlay){.et-combobox-body-container{overflow:overlay}}.et-combobox-body{width:100%;display:grid;transform:var(--et-floating-translate);will-change:transform}.et-combobox-option{display:block}:where(.et-combobox-option--active){background-color:#1e1e1e}.et-combobox{display:block;border:1px solid #ccc;padding:15px;position:relative}.et-combobox-chevron{transform:rotate(180deg);display:block;inline-size:15px;block-size:15px;position:absolute;inset-inline-end:15px;inset-block-start:7px}\n"] }]
73
77
  }], ctorParameters: function () { return []; } });
74
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jZGsvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm1zL2NvbXBvbmVudHMvc2VsZWN0L2NvbXBvbmVudHMvY29tYm9ib3gvY29tcG9uZW50cy9jb21ib2JveC9jb21ib2JveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9zcmMvbGliL2NvbXBvbmVudHMvZm9ybXMvY29tcG9uZW50cy9zZWxlY3QvY29tcG9uZW50cy9jb21ib2JveC9jb21wb25lbnRzL2NvbWJvYm94L2NvbWJvYm94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdELE9BQU8sRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUE2RHZELE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxrQkFBa0I7SUFHdkQ7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQUhTLGFBQVEsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFLbkQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQ3hELENBQUM7OEdBUFUsaUJBQWlCO2tHQUFqQixpQkFBaUIsZytDQ3BFOUIsK2hHQXVGQSw4L0NEbEVJLElBQUksNkZBQ0osdUJBQXVCLCtJQUN2QixTQUFTLDhDQUNULG9CQUFvQiw0REFFcEIsS0FBSyxtSEFDTCxnQkFBZ0Isb0pBQ2hCLGlCQUFpQjs7MkZBd0NSLGlCQUFpQjtrQkEzRDdCLFNBQVM7K0JBQ0UsYUFBYSxjQUdYLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxRQUMvQjt3QkFDSixLQUFLLEVBQUUsYUFBYTt3QkFDcEIsU0FBUyxFQUFFLCtCQUErQjtxQkFDM0MsV0FDUTt3QkFDUCxJQUFJO3dCQUNKLHVCQUF1Qjt3QkFDdkIsU0FBUzt3QkFDVCxvQkFBb0I7d0JBQ3BCLFlBQVk7d0JBQ1osS0FBSzt3QkFDTCxnQkFBZ0I7d0JBQ2hCLGlCQUFpQjtxQkFDbEIsa0JBQ2U7d0JBQ2Qsd0JBQXdCO3dCQUN4QixFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLENBQUMsYUFBYSxDQUFDLEVBQUU7d0JBQ3REOzRCQUNFLFNBQVMsRUFBRSxpQkFBaUI7NEJBQzVCLE1BQU0sRUFBRTtnQ0FDTixTQUFTO2dDQUNULGNBQWM7Z0NBQ2QsZ0JBQWdCO2dDQUNoQixTQUFTO2dDQUNULE9BQU87Z0NBQ1AsV0FBVztnQ0FDWCxhQUFhO2dDQUNiLFVBQVU7Z0NBQ1YsV0FBVztnQ0FDWCxXQUFXO2dDQUNYLG1CQUFtQjtnQ0FDbkIseUJBQXlCO2dDQUN6QixpQkFBaUI7Z0NBQ2pCLG9CQUFvQjtnQ0FDcEIsc0JBQXNCO2dDQUN0QixvQkFBb0I7Z0NBQ3BCLDRCQUE0QjtnQ0FDNUIsdUJBQXVCO2dDQUN2QixlQUFlO2dDQUNmLHVCQUF1QjtnQ0FDdkIsdUJBQXVCO2dDQUN2QiwrQkFBK0I7Z0NBQy9CLDBCQUEwQjtnQ0FDMUIsNEJBQTRCO2dDQUM1QiwwQkFBMEI7Z0NBQzFCLGtDQUFrQzs2QkFDbkM7NEJBQ0Qsd0VBQXdFOzRCQUN4RSxPQUFPLEVBQUUsQ0FBQyxjQUFjLENBQUM7eUJBQzFCO3FCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ0NvbXBvbmVudE91dGxldCwgTmdGb3IsIE5nSWYsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgVmlld0VuY2Fwc3VsYXRpb24sIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQW5pbWF0ZWRPdmVybGF5RGlyZWN0aXZlLCBMZXREaXJlY3RpdmUgfSBmcm9tICdAZXRobGV0ZS9jb3JlJztcbmltcG9ydCB7IENoZXZyb25JY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vLi4vaWNvbnMnO1xuaW1wb3J0IHsgSW5wdXREaXJlY3RpdmUsIE5hdGl2ZUlucHV0UmVmRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBEZWNvcmF0ZWRJbnB1dEJhc2UgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi91dGlscyc7XG5pbXBvcnQgeyBDT01CT0JPWF9UT0tFTiwgQ29tYm9ib3hEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzJztcbmltcG9ydCB7IENvbWJvYm94Qm9keUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3BhcnRpYWxzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZXQtY29tYm9ib3gnLFxuICB0ZW1wbGF0ZVVybDogJy4vY29tYm9ib3guY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jb21ib2JveC5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnZXQtY29tYm9ib3gnLFxuICAgICcoY2xpY2spJzogJ2NvbWJvYm94LnNlbGVjdElucHV0QW5kT3BlbigpJyxcbiAgfSxcbiAgaW1wb3J0czogW1xuICAgIE5nSWYsXG4gICAgTmF0aXZlSW5wdXRSZWZEaXJlY3RpdmUsXG4gICAgQXN5bmNQaXBlLFxuICAgIENoZXZyb25JY29uQ29tcG9uZW50LFxuICAgIExldERpcmVjdGl2ZSxcbiAgICBOZ0ZvcixcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIE5nQ29tcG9uZW50T3V0bGV0LFxuICBdLFxuICBob3N0RGlyZWN0aXZlczogW1xuICAgIEFuaW1hdGVkT3ZlcmxheURpcmVjdGl2ZSxcbiAgICB7IGRpcmVjdGl2ZTogSW5wdXREaXJlY3RpdmUsIGlucHV0czogWydwbGFjZWhvbGRlciddIH0sXG4gICAge1xuICAgICAgZGlyZWN0aXZlOiBDb21ib2JveERpcmVjdGl2ZSxcbiAgICAgIGlucHV0czogW1xuICAgICAgICAnb3B0aW9ucycsXG4gICAgICAgICdpbml0aWFsVmFsdWUnLFxuICAgICAgICAnZmlsdGVySW50ZXJuYWwnLFxuICAgICAgICAnbG9hZGluZycsXG4gICAgICAgICdlcnJvcicsXG4gICAgICAgICdlbXB0eVRleHQnLFxuICAgICAgICAncGxhY2Vob2xkZXInLFxuICAgICAgICAnbXVsdGlwbGUnLFxuICAgICAgICAnYmluZExhYmVsJyxcbiAgICAgICAgJ2JpbmRWYWx1ZScsXG4gICAgICAgICdhbGxvd0N1c3RvbVZhbHVlcycsXG4gICAgICAgICdzZWxlY3RlZE9wdGlvbkNvbXBvbmVudCcsXG4gICAgICAgICdvcHRpb25Db21wb25lbnQnLFxuICAgICAgICAnYm9keUVycm9yQ29tcG9uZW50JyxcbiAgICAgICAgJ2JvZHlMb2FkaW5nQ29tcG9uZW50JyxcbiAgICAgICAgJ2JvZHlFbXB0eUNvbXBvbmVudCcsXG4gICAgICAgICdib2R5TW9yZUl0ZW1zSGludENvbXBvbmVudCcsXG4gICAgICAgICdzaG93Qm9keU1vcmVJdGVtc0hpbnQnLFxuICAgICAgICAnYm9keUVtcHR5VGV4dCcsXG4gICAgICAgICdib2R5TW9yZUl0ZW1zSGludFRleHQnLFxuICAgICAgICAnb3B0aW9uQ29tcG9uZW50SW5wdXRzJyxcbiAgICAgICAgJ3NlbGVjdGVkT3B0aW9uQ29tcG9uZW50SW5wdXRzJyxcbiAgICAgICAgJ2JvZHlFcnJvckNvbXBvbmVudElucHV0cycsXG4gICAgICAgICdib2R5TG9hZGluZ0NvbXBvbmVudElucHV0cycsXG4gICAgICAgICdib2R5RW1wdHlDb21wb25lbnRJbnB1dHMnLFxuICAgICAgICAnYm9keU1vcmVJdGVtc0hpbnRDb21wb25lbnRJbnB1dHMnLFxuICAgICAgXSxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0cy1tZXRhZGF0YS1wcm9wZXJ0eVxuICAgICAgb3V0cHV0czogWydmaWx0ZXJDaGFuZ2UnXSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBDb21ib2JveENvbXBvbmVudCBleHRlbmRzIERlY29yYXRlZElucHV0QmFzZSB7XG4gIHByb3RlY3RlZCByZWFkb25seSBjb21ib2JveCA9IGluamVjdChDT01CT0JPWF9UT0tFTik7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuY29tYm9ib3guc2V0Qm9keUNvbXBvbmVudChDb21ib2JveEJvZHlDb21wb25lbnQpO1xuICB9XG59XG4iLCI8bmctY29udGVudCBzZWxlY3Q9XCJbZXRJbnB1dFByZWZpeF1cIiAvPlxuXG48ZGl2PlxuICA8ZGl2ICpuZ0lmPVwiY29tYm9ib3gubXVsdGlwbGUkIHwgYXN5bmNcIiBjbGFzcz1cImV0LWNvbWJvYm94LXNlbGVjdGVkLW9wdGlvbnNcIj5cbiAgICA8ZGl2XG4gICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjb21ib2JveC5zZWxlY3RlZE9wdGlvbnMkIHwgYXN5bmM7IHRyYWNrQnk6IGNvbWJvYm94LnRyYWNrQnlPcHRpb25LZXlGblwiXG4gICAgICBjbGFzcz1cImV0LWNvbWJvYm94LXNlbGVjdGVkLW9wdGlvblwiXG4gICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICBjb21ib2JveC5jdXN0b21TZWxlY3RlZE9wdGlvblRwbCQgfCBhc3luYyBhcyBjdXN0b21TZWxlY3RlZE9wdGlvblRwbDtcbiAgICAgICAgICBlbHNlIGNvbXBPckRlZmF1bHRTZWxlY3RlZE9wdGlvbkxhYmVsVHBsXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjdXN0b21TZWxlY3RlZE9wdGlvblRwbDsgY29udGV4dDogeyBvcHRpb246IGl0ZW0gfVwiIC8+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLXRlbXBsYXRlICNjb21wT3JEZWZhdWx0U2VsZWN0ZWRPcHRpb25MYWJlbFRwbD5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0lmPVwiY29tYm9ib3guY3VzdG9tU2VsZWN0ZWRPcHRpb25Db21wb25lbnQkIHwgYXN5bmMgYXMgY29tcDsgZWxzZSBkZWZhdWx0U2VsZWN0ZWRPcHRpb25MYWJlbFRwbFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdDb21wb25lbnRPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgY29tcDtcbiAgICAgICAgICAgICAgaW5wdXRzOiAoY29tYm9ib3guY29tYmluZVNlbGVjdGVkT3B0aW9uV2l0aENvbXBvbmVudElucHV0cyhpdGVtKSB8IGFzeW5jKSA/PyB7IG9wdGlvbjogaXRlbSB9XG4gICAgICAgICAgICBcIlxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFNlbGVjdGVkT3B0aW9uTGFiZWxUcGw+XG4gICAgICAgICAge3sgY29tYm9ib3guZ2V0T3B0aW9uTGFiZWwoaXRlbSkgfCBhc3luYyB9fVxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgPGJ1dHRvblxuICAgICAgICAoY2xpY2spPVwiY29tYm9ib3gucmVtb3ZlU2VsZWN0ZWRPcHRpb24oaXRlbSk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgIGNsYXNzPVwiZXQtY29tYm9ib3gtc2VsZWN0ZWQtb3B0aW9uLXJlbW92ZVwiXG4gICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgPlxuICAgICAgICB4XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZXQtY29tYm9ib3gtbXVsaXBsZS1pbnB1dFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlucHV0VHBsXCIgLz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPG5nLXRlbXBsYXRlICNpbnB1dFRwbD5cbiAgICA8aW5wdXRcbiAgICAgIFtkaXNhYmxlZF09XCJpbnB1dC5kaXNhYmxlZFwiXG4gICAgICBbYXR0ci5pZF09XCJpbnB1dC5pZFwiXG4gICAgICBbYXR0ci5hcmlhLXJlcXVpcmVkXT1cIihpbnB1dC5yZXF1aXJlZCQgfCBhc3luYykgfHwgbnVsbFwiXG4gICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cIihpbnB1dC5kaXNhYmxlZCQgfCBhc3luYykgfHwgbnVsbFwiXG4gICAgICBbYXR0ci5hcmlhLWludmFsaWRdPVwiKGlucHV0LmludmFsaWQkIHwgYXN5bmMpIHx8IG51bGxcIlxuICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJjb21ib2JveC5pc09wZW4kIHwgYXN5bmNcIlxuICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJpbnB1dC5kZXNjcmliZWRCeSQgfCBhc3luY1wiXG4gICAgICBbYXR0ci5wbGFjZWhvbGRlcl09XCJpbnB1dC5wbGFjZWhvbGRlciB8fCBudWxsXCJcbiAgICAgIFthdHRyLmFyaWEtYWN0aXZlZGVzY2VuZGFudF09XCJjb21ib2JveC5hY3RpdmVPcHRpb25JZCQgfCBhc3luY1wiXG4gICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cIihjb21ib2JveC5zZWxlY3RCb2R5SWQkIHwgYXN5bmMpIHx8IG51bGxcIlxuICAgICAgW2F0dHIuYXJpYS1vd25zXT1cIihjb21ib2JveC5zZWxlY3RCb2R5SWQkIHwgYXN5bmMpIHx8IG51bGxcIlxuICAgICAgKGtleWRvd24pPVwiY29tYm9ib3guX3Byb2Nlc3NLZXlkb3duRXZlbnQoJGV2ZW50KVwiXG4gICAgICAoa2V5dXApPVwiY29tYm9ib3guX3Byb2Nlc3NLZXl1cEV2ZW50KClcIlxuICAgICAgKGNsaWNrKT1cImNvbWJvYm94Lm9wZW4oKVwiXG4gICAgICAoYmx1cik9XCJjb21ib2JveC5faGFuZGxlQmx1ckV2ZW50KClcIlxuICAgICAgKGlucHV0KT1cImNvbWJvYm94Ll9wcm9jZXNzSW5wdXRFdmVudCgkZXZlbnQpXCJcbiAgICAgIGNsYXNzPVwiZXQtY29tYm9ib3gtd3JhcHBlclwiXG4gICAgICBhcmlhLWhhc3BvcHVwPVwibGlzdGJveFwiXG4gICAgICByb2xlPVwiY29tYm9ib3hcIlxuICAgICAgYXJpYS1hdXRvY29tcGxldGU9XCJsaXN0XCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIHZhbHVlPVwie3sgY29tYm9ib3guY3VycmVudEZpbHRlciB9fVwiXG4gICAgICBldE5hdGl2ZUlucHV0UmVmXG4gICAgLz5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiKGNvbWJvYm94Lm11bHRpcGxlJCB8IGFzeW5jKSA9PT0gZmFsc2VcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaW5wdXRUcGxcIiAvPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8ZXQtY2hldnJvbi1pY29uIGNsYXNzPVwiZXQtY29tYm9ib3gtY2hldnJvblwiIC8+XG48L2Rpdj5cblxuPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2V0SW5wdXRTdWZmaXhdXCIgLz5cblxuPG5nLXRlbXBsYXRlPlxuICA8bmctY29udGVudCAvPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jZGsvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm1zL2NvbXBvbmVudHMvc2VsZWN0L2NvbXBvbmVudHMvY29tYm9ib3gvY29tcG9uZW50cy9jb21ib2JveC9jb21ib2JveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9zcmMvbGliL2NvbXBvbmVudHMvZm9ybXMvY29tcG9uZW50cy9zZWxlY3QvY29tcG9uZW50cy9jb21ib2JveC9jb21wb25lbnRzL2NvbWJvYm94L2NvbWJvYm94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbEUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGNBQWMsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdELE9BQU8sRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7O0FBK0R2RCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsa0JBQWtCO0lBR3ZEO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUFIUyxhQUFRLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBS25ELElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUN4RCxDQUFDOzhHQVBVLGlCQUFpQjtrR0FBakIsaUJBQWlCLGdqREN2RTlCLDZrR0F3RkEsOC9DRGxFSSxJQUFJLDZGQUNKLHVCQUF1QiwrSUFDdkIsU0FBUyw4Q0FDVCxvQkFBb0IsNERBRXBCLEtBQUssbUhBQ0wsZ0JBQWdCLG9KQUNoQixpQkFBaUI7OzJGQTBDUixpQkFBaUI7a0JBN0Q3QixTQUFTOytCQUNFLGFBQWEsY0FHWCxJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksUUFDL0I7d0JBQ0osS0FBSyxFQUFFLGFBQWE7d0JBQ3BCLFNBQVMsRUFBRSwrQkFBK0I7cUJBQzNDLFdBQ1E7d0JBQ1AsSUFBSTt3QkFDSix1QkFBdUI7d0JBQ3ZCLFNBQVM7d0JBQ1Qsb0JBQW9CO3dCQUNwQixZQUFZO3dCQUNaLEtBQUs7d0JBQ0wsZ0JBQWdCO3dCQUNoQixpQkFBaUI7cUJBQ2xCLGtCQUNlO3dCQUNkLHdCQUF3Qjt3QkFDeEIsNEJBQTRCO3dCQUM1QixFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLENBQUMsYUFBYSxDQUFDLEVBQUU7d0JBQ3REOzRCQUNFLFNBQVMsRUFBRSxpQkFBaUI7NEJBQzVCLE1BQU0sRUFBRTtnQ0FDTixTQUFTO2dDQUNULGNBQWM7Z0NBQ2QsZ0JBQWdCO2dDQUNoQixTQUFTO2dDQUNULE9BQU87Z0NBQ1AsV0FBVztnQ0FDWCxhQUFhO2dDQUNiLFVBQVU7Z0NBQ1YsV0FBVztnQ0FDWCxXQUFXO2dDQUNYLGNBQWM7Z0NBQ2QsbUJBQW1CO2dDQUNuQix5QkFBeUI7Z0NBQ3pCLGlCQUFpQjtnQ0FDakIsb0JBQW9CO2dDQUNwQixzQkFBc0I7Z0NBQ3RCLG9CQUFvQjtnQ0FDcEIsNEJBQTRCO2dDQUM1Qix1QkFBdUI7Z0NBQ3ZCLGVBQWU7Z0NBQ2YsdUJBQXVCO2dDQUN2Qix1QkFBdUI7Z0NBQ3ZCLCtCQUErQjtnQ0FDL0IsMEJBQTBCO2dDQUMxQiw0QkFBNEI7Z0NBQzVCLDBCQUEwQjtnQ0FDMUIsa0NBQWtDOzZCQUNuQzs0QkFDRCx3RUFBd0U7NEJBQ3hFLE9BQU8sRUFBRSxDQUFDLGNBQWMsQ0FBQzt5QkFDMUI7cUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc3luY1BpcGUsIE5nQ29tcG9uZW50T3V0bGV0LCBOZ0ZvciwgTmdJZiwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBWaWV3RW5jYXBzdWxhdGlvbiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBbmltYXRlZE92ZXJsYXlEaXJlY3RpdmUsIExldERpcmVjdGl2ZSB9IGZyb20gJ0BldGhsZXRlL2NvcmUnO1xuaW1wb3J0IHsgQ2hldnJvbkljb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi8uLi9pY29ucyc7XG5pbXBvcnQgeyBPdmVybGF5Q2xvc2VCbG9ja2VyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcmxheSc7XG5pbXBvcnQgeyBJbnB1dERpcmVjdGl2ZSwgTmF0aXZlSW5wdXRSZWZEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9kaXJlY3RpdmVzJztcbmltcG9ydCB7IERlY29yYXRlZElucHV0QmFzZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IENPTUJPQk9YX1RPS0VOLCBDb21ib2JveERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgQ29tYm9ib3hCb2R5Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcGFydGlhbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdldC1jb21ib2JveCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb21ib2JveC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbWJvYm94LmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdldC1jb21ib2JveCcsXG4gICAgJyhjbGljayknOiAnY29tYm9ib3guc2VsZWN0SW5wdXRBbmRPcGVuKCknLFxuICB9LFxuICBpbXBvcnRzOiBbXG4gICAgTmdJZixcbiAgICBOYXRpdmVJbnB1dFJlZkRpcmVjdGl2ZSxcbiAgICBBc3luY1BpcGUsXG4gICAgQ2hldnJvbkljb25Db21wb25lbnQsXG4gICAgTGV0RGlyZWN0aXZlLFxuICAgIE5nRm9yLFxuICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgTmdDb21wb25lbnRPdXRsZXQsXG4gIF0sXG4gIGhvc3REaXJlY3RpdmVzOiBbXG4gICAgQW5pbWF0ZWRPdmVybGF5RGlyZWN0aXZlLFxuICAgIE92ZXJsYXlDbG9zZUJsb2NrZXJEaXJlY3RpdmUsXG4gICAgeyBkaXJlY3RpdmU6IElucHV0RGlyZWN0aXZlLCBpbnB1dHM6IFsncGxhY2Vob2xkZXInXSB9LFxuICAgIHtcbiAgICAgIGRpcmVjdGl2ZTogQ29tYm9ib3hEaXJlY3RpdmUsXG4gICAgICBpbnB1dHM6IFtcbiAgICAgICAgJ29wdGlvbnMnLFxuICAgICAgICAnaW5pdGlhbFZhbHVlJyxcbiAgICAgICAgJ2ZpbHRlckludGVybmFsJyxcbiAgICAgICAgJ2xvYWRpbmcnLFxuICAgICAgICAnZXJyb3InLFxuICAgICAgICAnZW1wdHlUZXh0JyxcbiAgICAgICAgJ3BsYWNlaG9sZGVyJyxcbiAgICAgICAgJ211bHRpcGxlJyxcbiAgICAgICAgJ2JpbmRMYWJlbCcsXG4gICAgICAgICdiaW5kVmFsdWUnLFxuICAgICAgICAnYmluZERpc2FibGVkJyxcbiAgICAgICAgJ2FsbG93Q3VzdG9tVmFsdWVzJyxcbiAgICAgICAgJ3NlbGVjdGVkT3B0aW9uQ29tcG9uZW50JyxcbiAgICAgICAgJ29wdGlvbkNvbXBvbmVudCcsXG4gICAgICAgICdib2R5RXJyb3JDb21wb25lbnQnLFxuICAgICAgICAnYm9keUxvYWRpbmdDb21wb25lbnQnLFxuICAgICAgICAnYm9keUVtcHR5Q29tcG9uZW50JyxcbiAgICAgICAgJ2JvZHlNb3JlSXRlbXNIaW50Q29tcG9uZW50JyxcbiAgICAgICAgJ3Nob3dCb2R5TW9yZUl0ZW1zSGludCcsXG4gICAgICAgICdib2R5RW1wdHlUZXh0JyxcbiAgICAgICAgJ2JvZHlNb3JlSXRlbXNIaW50VGV4dCcsXG4gICAgICAgICdvcHRpb25Db21wb25lbnRJbnB1dHMnLFxuICAgICAgICAnc2VsZWN0ZWRPcHRpb25Db21wb25lbnRJbnB1dHMnLFxuICAgICAgICAnYm9keUVycm9yQ29tcG9uZW50SW5wdXRzJyxcbiAgICAgICAgJ2JvZHlMb2FkaW5nQ29tcG9uZW50SW5wdXRzJyxcbiAgICAgICAgJ2JvZHlFbXB0eUNvbXBvbmVudElucHV0cycsXG4gICAgICAgICdib2R5TW9yZUl0ZW1zSGludENvbXBvbmVudElucHV0cycsXG4gICAgICBdLFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXRzLW1ldGFkYXRhLXByb3BlcnR5XG4gICAgICBvdXRwdXRzOiBbJ2ZpbHRlckNoYW5nZSddLFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIENvbWJvYm94Q29tcG9uZW50IGV4dGVuZHMgRGVjb3JhdGVkSW5wdXRCYXNlIHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbWJvYm94ID0gaW5qZWN0KENPTUJPQk9YX1RPS0VOKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5jb21ib2JveC5zZXRCb2R5Q29tcG9uZW50KENvbWJvYm94Qm9keUNvbXBvbmVudCk7XG4gIH1cbn1cbiIsIjxuZy1jb250ZW50IHNlbGVjdD1cIltldElucHV0UHJlZml4XVwiIC8+XG5cbjxkaXY+XG4gIDxkaXYgKm5nSWY9XCJjb21ib2JveC5tdWx0aXBsZSQgfCBhc3luY1wiIGNsYXNzPVwiZXQtY29tYm9ib3gtc2VsZWN0ZWQtb3B0aW9uc1wiPlxuICAgIDxkaXZcbiAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNvbWJvYm94LnNlbGVjdGVkT3B0aW9ucyQgfCBhc3luYzsgdHJhY2tCeTogY29tYm9ib3gudHJhY2tCeU9wdGlvbktleUZuXCJcbiAgICAgIGNsYXNzPVwiZXQtY29tYm9ib3gtc2VsZWN0ZWQtb3B0aW9uXCJcbiAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgIGNvbWJvYm94LmN1c3RvbVNlbGVjdGVkT3B0aW9uVHBsJCB8IGFzeW5jIGFzIGN1c3RvbVNlbGVjdGVkT3B0aW9uVHBsO1xuICAgICAgICAgIGVsc2UgY29tcE9yRGVmYXVsdFNlbGVjdGVkT3B0aW9uTGFiZWxUcGxcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImN1c3RvbVNlbGVjdGVkT3B0aW9uVHBsOyBjb250ZXh0OiB7IG9wdGlvbjogaXRlbSB9XCIgLz5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctdGVtcGxhdGUgI2NvbXBPckRlZmF1bHRTZWxlY3RlZE9wdGlvbkxhYmVsVHBsPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nSWY9XCJjb21ib2JveC5jdXN0b21TZWxlY3RlZE9wdGlvbkNvbXBvbmVudCQgfCBhc3luYyBhcyBjb21wOyBlbHNlIGRlZmF1bHRTZWxlY3RlZE9wdGlvbkxhYmVsVHBsXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0NvbXBvbmVudE91dGxldD1cIlxuICAgICAgICAgICAgICBjb21wO1xuICAgICAgICAgICAgICBpbnB1dHM6IChjb21ib2JveC5jb21iaW5lU2VsZWN0ZWRPcHRpb25XaXRoQ29tcG9uZW50SW5wdXRzKGl0ZW0pIHwgYXN5bmMpID8/IHsgb3B0aW9uOiBpdGVtIH1cbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0U2VsZWN0ZWRPcHRpb25MYWJlbFRwbD5cbiAgICAgICAgICB7eyBjb21ib2JveC5nZXRPcHRpb25MYWJlbChpdGVtKSB8IGFzeW5jIH19XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICA8YnV0dG9uXG4gICAgICAgIChjbGljayk9XCJjb21ib2JveC5yZW1vdmVTZWxlY3RlZE9wdGlvbihpdGVtKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBjb21ib2JveC5mb2N1cygpXCJcbiAgICAgICAgY2xhc3M9XCJldC1jb21ib2JveC1zZWxlY3RlZC1vcHRpb24tcmVtb3ZlXCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICA+XG4gICAgICAgIHhcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJldC1jb21ib2JveC1tdWxpcGxlLWlucHV0XCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaW5wdXRUcGxcIiAvPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8bmctdGVtcGxhdGUgI2lucHV0VHBsPlxuICAgIDxpbnB1dFxuICAgICAgW2Rpc2FibGVkXT1cImlucHV0LmRpc2FibGVkXCJcbiAgICAgIFthdHRyLmlkXT1cImlucHV0LmlkXCJcbiAgICAgIFthdHRyLmFyaWEtcmVxdWlyZWRdPVwiKGlucHV0LnJlcXVpcmVkJCB8IGFzeW5jKSB8fCBudWxsXCJcbiAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiKGlucHV0LmRpc2FibGVkJCB8IGFzeW5jKSB8fCBudWxsXCJcbiAgICAgIFthdHRyLmFyaWEtaW52YWxpZF09XCIoaW5wdXQuaW52YWxpZCQgfCBhc3luYykgfHwgbnVsbFwiXG4gICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImNvbWJvYm94LmlzT3BlbiQgfCBhc3luY1wiXG4gICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImlucHV0LmRlc2NyaWJlZEJ5JCB8IGFzeW5jXCJcbiAgICAgIFthdHRyLnBsYWNlaG9sZGVyXT1cImlucHV0LnBsYWNlaG9sZGVyIHx8IG51bGxcIlxuICAgICAgW2F0dHIuYXJpYS1hY3RpdmVkZXNjZW5kYW50XT1cImNvbWJvYm94LmFjdGl2ZU9wdGlvbklkJCB8IGFzeW5jXCJcbiAgICAgIFthdHRyLmFyaWEtY29udHJvbHNdPVwiKGNvbWJvYm94LnNlbGVjdEJvZHlJZCQgfCBhc3luYykgfHwgbnVsbFwiXG4gICAgICBbYXR0ci5hcmlhLW93bnNdPVwiKGNvbWJvYm94LnNlbGVjdEJvZHlJZCQgfCBhc3luYykgfHwgbnVsbFwiXG4gICAgICAoa2V5ZG93bik9XCJjb21ib2JveC5fcHJvY2Vzc0tleWRvd25FdmVudCgkZXZlbnQpXCJcbiAgICAgIChrZXl1cCk9XCJjb21ib2JveC5fcHJvY2Vzc0tleXVwRXZlbnQoKVwiXG4gICAgICAoY2xpY2spPVwiY29tYm9ib3gub3BlbigpXCJcbiAgICAgIChibHVyKT1cImNvbWJvYm94Ll9oYW5kbGVCbHVyRXZlbnQoKVwiXG4gICAgICAoaW5wdXQpPVwiY29tYm9ib3guX3Byb2Nlc3NJbnB1dEV2ZW50KCRldmVudClcIlxuICAgICAgY2xhc3M9XCJldC1jb21ib2JveC13cmFwcGVyXCJcbiAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICBhcmlhLWhhc3BvcHVwPVwibGlzdGJveFwiXG4gICAgICByb2xlPVwiY29tYm9ib3hcIlxuICAgICAgYXJpYS1hdXRvY29tcGxldGU9XCJsaXN0XCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIHZhbHVlPVwie3sgY29tYm9ib3guY3VycmVudEZpbHRlciB9fVwiXG4gICAgICBldE5hdGl2ZUlucHV0UmVmXG4gICAgLz5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiKGNvbWJvYm94Lm11bHRpcGxlJCB8IGFzeW5jKSA9PT0gZmFsc2VcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaW5wdXRUcGxcIiAvPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8ZXQtY2hldnJvbi1pY29uIGNsYXNzPVwiZXQtY29tYm9ib3gtY2hldnJvblwiIC8+XG48L2Rpdj5cblxuPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2V0SW5wdXRTdWZmaXhdXCIgLz5cblxuPG5nLXRlbXBsYXRlPlxuICA8bmctY29udGVudCAvPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==