@klippa/ngx-enhancy-forms 9.1.2 → 9.2.0

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,20 +1,22 @@
1
- import { Component, EventEmitter, Host, Inject, InjectionToken, Input, Optional, Output, ViewChild } from '@angular/core';
1
+ import { Component, ElementRef, EventEmitter, Host, Inject, InjectionToken, Input, Optional, Output, ViewChild } from '@angular/core';
2
2
  import { ControlContainer, NG_VALUE_ACCESSOR } from '@angular/forms';
3
3
  import { ValueAccessorBase } from '../value-accessor-base/value-accessor-base.component';
4
4
  import { FormElementComponent } from '../../form/form-element/form-element.component';
5
5
  import { isValueSet, stringIsSetAndFilled } from '../../util/values';
6
6
  export const SELECT_TRANSLATIONS = new InjectionToken('klp.form.select.translations');
7
7
  export class SelectComponent extends ValueAccessorBase {
8
- constructor(parent, controlContainer, translations) {
8
+ constructor(parent, controlContainer, translations, elRef) {
9
9
  super(parent, controlContainer);
10
10
  this.parent = parent;
11
11
  this.controlContainer = controlContainer;
12
12
  this.translations = translations;
13
+ this.elRef = elRef;
13
14
  this.multiple = false;
14
15
  this.multipleDisplayedAsAmount = false;
15
16
  this.clearable = true;
16
17
  this.onSearch = new EventEmitter();
17
18
  this.onEndReached = new EventEmitter();
19
+ this.onOpened = new EventEmitter();
18
20
  this.lastItemIndexReached = -1;
19
21
  }
20
22
  ngOnChanges(changes) {
@@ -48,11 +50,17 @@ export class SelectComponent extends ValueAccessorBase {
48
50
  searchQueryChanged(searchQuery) {
49
51
  this.onSearch.emit(searchQuery);
50
52
  }
53
+ onOpen() {
54
+ // waiting for the thing to render until we fire the event
55
+ setTimeout(() => {
56
+ this.onOpened.emit();
57
+ });
58
+ }
51
59
  }
52
60
  SelectComponent.decorators = [
53
61
  { type: Component, args: [{
54
62
  selector: 'klp-form-select',
55
- template: "<ng-select\n\t#ngSelect\n\t[placeholder]=\"getTranslation('placeholder')\"\n\tbindLabel=\"name\"\n\tbindValue=\"id\"\n\t[items]=\"options\"\n\t[clearable]=\"clearable\"\n\t[(ngModel)]=\"innerValue\"\n\t[ngClass]=\"{showErrors: isInErrorState()}\"\n\t(change)=\"setInnerValueAndNotify(innerValue)\"\n\t[multiple]=\"multiple\"\n\t[disabled]=\"disabled\"\n\t(blur)=\"touch()\"\n\t(search)=\"searchQueryChanged($event.term)\"\n\t[dropdownPosition]=\"dropdownPosition\"\n\t[searchFn]=\"customSearchFn\"\n\t[selectOnTab]=\"true\"\n\t[virtualScroll]=\"true\"\n\t(scroll)=\"onScroll($event.end)\"\n>\n\t<ng-template let-item=\"item\" ng-option-tmp>\n\t\t<div [attr.data-cy]=\"item.id\">\n\t\t\t{{ item.name }}\n\t\t\t<div *ngIf=\"item.description\" class=\"dropdown-item-description\">\n\t\t\t\t{{ item.description }}\n\t\t\t</div>\n\t\t</div>\n\t</ng-template>\n\t<ng-container *ngIf=\"multiple && multipleDisplayedAsAmount && innerValue?.length > 1\">\n\t\t<ng-template ng-multi-label-tmp>\n\t\t\t<div class=\"ng-value\">\n\t\t\t\t<span class=\"ng-value-label\">{{getTranslation('amountSelected', innerValue?.length)}}</span>\n\t\t\t</div>\n\t\t</ng-template>\n\t</ng-container>\n\t<ng-template ng-footer-tmp *ngIf=\"footerElement\">\n\t\t<ng-container [ngTemplateOutlet]=\"footerElement\"></ng-container>\n\t</ng-template>\n</ng-select>\n",
63
+ template: "<ng-select\n\t#ngSelect\n\t[placeholder]=\"getTranslation('placeholder')\"\n\tbindLabel=\"name\"\n\tbindValue=\"id\"\n\t[items]=\"options\"\n\t[clearable]=\"clearable\"\n\t[(ngModel)]=\"innerValue\"\n\t[ngClass]=\"{showErrors: isInErrorState()}\"\n\t(change)=\"setInnerValueAndNotify(innerValue)\"\n\t[multiple]=\"multiple\"\n\t[disabled]=\"disabled\"\n\t(blur)=\"touch()\"\n\t(search)=\"searchQueryChanged($event.term)\"\n\t[dropdownPosition]=\"dropdownPosition\"\n\t[searchFn]=\"customSearchFn\"\n\t[selectOnTab]=\"true\"\n\t[virtualScroll]=\"true\"\n\t(scroll)=\"onScroll($event.end)\"\n\t(open)=\"onOpen()\"\n>\n\t<ng-template let-item=\"item\" ng-option-tmp>\n\t\t<div [attr.data-cy]=\"item.id\">\n\t\t\t{{ item.name }}\n\t\t\t<div *ngIf=\"item.description\" class=\"dropdown-item-description\">\n\t\t\t\t{{ item.description }}\n\t\t\t</div>\n\t\t</div>\n\t</ng-template>\n\t<ng-container *ngIf=\"multiple && multipleDisplayedAsAmount && innerValue?.length > 1\">\n\t\t<ng-template ng-multi-label-tmp>\n\t\t\t<div class=\"ng-value\">\n\t\t\t\t<span class=\"ng-value-label\">{{getTranslation('amountSelected', innerValue?.length)}}</span>\n\t\t\t</div>\n\t\t</ng-template>\n\t</ng-container>\n\t<ng-template ng-footer-tmp *ngIf=\"footerElement\">\n\t\t<ng-container [ngTemplateOutlet]=\"footerElement\"></ng-container>\n\t</ng-template>\n</ng-select>\n",
56
64
  providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: SelectComponent, multi: true }],
57
65
  styles: [":host{display:block}ng-select.showErrors::ng-deep .ng-select-container{border-color:#ff8000}:host ::ng-deep ng-select.ng-select .ng-select-container{color:#888da8}:host ::ng-deep .ng-select.ng-select-opened>.ng-select-container{background:#fff;border-color:#3ed778}:host ::ng-deep .ng-select.ng-select-opened>.ng-select-container:hover{box-shadow:none}:host ::ng-deep .ng-select.ng-select-opened>.ng-select-container .ng-arrow{border-color:transparent transparent #999;border-width:0 5px 5px;top:-2px}:host ::ng-deep .ng-select.ng-select-opened>.ng-select-container .ng-arrow:hover{border-color:transparent transparent #666}:host ::ng-deep .ng-select.ng-select-opened.ng-select-bottom>.ng-select-container{border-bottom-left-radius:0;border-bottom-right-radius:0}:host ::ng-deep .ng-select.ng-select-opened.ng-select-top>.ng-select-container{border-top-left-radius:0;border-top-right-radius:0}:host ::ng-deep .ng-select.ng-select-disabled>.ng-select-container{background-color:#f9f9f9}:host ::ng-deep .ng-select .ng-has-value .ng-placeholder{display:none}:host ::ng-deep .ng-select .ng-select-container{align-items:center;background-clip:padding-box;background-color:#fff;border:1px solid #e6ecf5;border-radius:4px;border-radius:2px;box-shadow:none;box-sizing:border-box;color:#888da8;display:flex;flex-direction:row;font-size:1rem;font-size:14px;line-height:1.5;margin:0;min-height:42px;outline:none;overflow:visible;padding:.375rem .75rem;transition-delay:0s;transition-duration:.2s;transition-property:all;transition-timing-function:ease-in;width:100%}:host ::ng-deep .ng-select .ng-select-container:hover{box-shadow:0 1px 0 rgba(0,0,0,.06)}:host ::ng-deep .ng-select .ng-select-container .ng-value-container{align-items:center;overflow:hidden;padding-left:10px}:host ::ng-deep .ng-select .ng-select-container .ng-value-container .ng-placeholder{color:#aaa}:host ::ng-deep .ng-select.ng-select-single .ng-select-container{height:42px}:host ::ng-deep .ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{left:0;padding-left:10px;padding-right:50px;top:5px}:host ::ng-deep .ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value{background-color:#f9f9f9;border:1px solid #e3e3e3}:host ::ng-deep .ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value .ng-value-label{padding:0 5px}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{background-color:#e7faee;border:1px solid #93e8b3;border-radius:2px;display:flex;font-size:.9em;margin-bottom:3px;margin-right:5px;margin-top:3px;overflow:hidden}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled{background-color:#f9f9f9;border:1px solid #e3e3e3}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled .ng-value-label{padding-left:5px}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-label{display:inline-block;overflow:hidden;padding:0 5px;text-overflow:ellipsis}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon{display:inline-block;padding:0 5px}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon:hover{background-color:#93e8b3}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.left{border-right:1px solid #93e8b3}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.right{border-left:1px solid #c2e0ff}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input{padding-bottom:3px;padding-left:3px}:host ::ng-deep ng-select.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{padding-bottom:3px;padding-left:3px;position:static;top:5px}:host ::ng-deep .ng-select .ng-clear-wrapper{color:#999}:host ::ng-deep .ng-select .ng-clear-wrapper .ng-clear:hover{color:#dc3545}:host ::ng-deep .ng-select .ng-spinner-zone{padding-right:5px;padding-top:5px}:host ::ng-deep .ng-select .ng-arrow-wrapper{padding-right:5px;width:25px}:host ::ng-deep .ng-select .ng-arrow-wrapper:hover .ng-arrow{border-top-color:#666}:host ::ng-deep .ng-select .ng-arrow-wrapper .ng-arrow{border-color:#999 transparent transparent;border-style:solid;border-width:5px 5px 2.5px}:host ::ng-deep .ng-dropdown-panel{background-color:#fff;border:1px solid #3ed778;box-shadow:0 1px 0 rgba(0,0,0,.06)}:host ::ng-deep .ng-dropdown-panel.ng-select-bottom{border-bottom-left-radius:4px;border-bottom-right-radius:4px;border-top-color:#e6e6e6;margin-top:-1px;top:100%}:host ::ng-deep .ng-dropdown-panel.ng-select-bottom .ng-dropdown-panel-items .ng-option:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px}:host ::ng-deep .ng-dropdown-panel.ng-select-top{border-bottom-color:#e6e6e6;border-top-left-radius:4px;border-top-right-radius:4px;bottom:100%;margin-bottom:-1px}:host ::ng-deep .ng-dropdown-panel.ng-select-top .ng-dropdown-panel-items .ng-option:first-child{border-top-left-radius:4px;border-top-right-radius:4px}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-header{border-bottom:1px solid #ccc;padding:5px 7px}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-footer{border-top:1px solid #ccc;padding:5px 7px}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items{margin-bottom:1px}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;color:rgba(0,0,0,.54);cursor:default;cursor:pointer;font-weight:500;padding:8px 10px;user-select:none}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-disabled{cursor:default}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-marked{background-color:#ebf5ff}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected{background-color:#f5faff;font-weight:600}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{background-color:#fff;color:rgba(0,0,0,.87);padding:8px 10px}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option div{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected{background-color:#e7faee;color:#333}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected .ng-option-label{font-weight:600}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-marked{background-color:#e7faee;color:#333}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-disabled{color:#ccc}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-child{padding-left:22px}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option .ng-tag-label{font-size:80%;font-weight:400;padding-right:5px}:host ::ng-deep ng-select.ng-select .ng-select-container .ng-value-container{padding-left:0}:host ::ng-deep ng-select.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{color:#888da8;top:9px}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option,:host ::ng-deep .ng-select .ng-select-container .ng-value-container .ng-input>input{color:#888da8}:host ::ng-deep .ng-select.ng-select-auto-grow{max-width:inherit}:host ::ng-deep .ng-select.ng-select-auto-grow .ng-dropdown-panel{width:auto}"]
58
66
  },] }
@@ -60,7 +68,8 @@ SelectComponent.decorators = [
60
68
  SelectComponent.ctorParameters = () => [
61
69
  { type: FormElementComponent, decorators: [{ type: Optional }, { type: Host }] },
62
70
  { type: ControlContainer, decorators: [{ type: Optional }, { type: Host }] },
63
- { type: undefined, decorators: [{ type: Inject, args: [SELECT_TRANSLATIONS,] }, { type: Optional }] }
71
+ { type: undefined, decorators: [{ type: Inject, args: [SELECT_TRANSLATIONS,] }, { type: Optional }] },
72
+ { type: ElementRef }
64
73
  ];
65
74
  SelectComponent.propDecorators = {
66
75
  placeholder: [{ type: Input }],
@@ -73,6 +82,7 @@ SelectComponent.propDecorators = {
73
82
  footerElement: [{ type: Input }],
74
83
  onSearch: [{ type: Output }],
75
84
  onEndReached: [{ type: Output }],
85
+ onOpened: [{ type: Output }],
76
86
  ngSelect: [{ type: ViewChild, args: ['ngSelect',] }]
77
87
  };
78
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIvaG9tZS9ydW5uZXIvd29yay9uZ3gtZW5oYW5jeS1mb3Jtcy9uZ3gtZW5oYW5jeS1mb3Jtcy9wcm9qZWN0cy9rbGlwcGEvbmd4LWVuaGFuY3ktZm9ybXMvc3JjLyIsInNvdXJjZXMiOlsibGliL2VsZW1lbnRzL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTixTQUFTLEVBQ1QsWUFBWSxFQUNaLElBQUksRUFDSixNQUFNLEVBQ04sY0FBYyxFQUNkLEtBQUssRUFFTCxRQUFRLEVBQ1IsTUFBTSxFQUVPLFNBQVMsRUFDdEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGdCQUFnQixFQUFFLGlCQUFpQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sc0RBQXNELENBQUM7QUFDdkYsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sZ0RBQWdELENBQUM7QUFDcEYsT0FBTyxFQUFDLFVBQVUsRUFBRSxvQkFBb0IsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBV25FLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLElBQUksY0FBYyxDQUFNLDhCQUE4QixDQUFDLENBQUM7QUFRM0YsTUFBTSxPQUFPLGVBQWdCLFNBQVEsaUJBQW9DO0lBZXhFLFlBQytCLE1BQTRCLEVBQzVCLGdCQUFrQyxFQUNmLFlBQWlCO1FBRWxFLEtBQUssQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUpGLFdBQU0sR0FBTixNQUFNLENBQXNCO1FBQzVCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDZixpQkFBWSxHQUFaLFlBQVksQ0FBSztRQWYxRCxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLDhCQUF5QixHQUFHLEtBQUssQ0FBQztRQUNsQyxjQUFTLEdBQUcsSUFBSSxDQUFDO1FBSVQsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDdEMsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBR2pELHlCQUFvQixHQUFHLENBQUMsQ0FBQyxDQUFDO0lBUWxDLENBQUM7SUFHRCxXQUFXLENBQUMsT0FBc0I7UUFDakMsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ2hDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUMvQjtJQUNGLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxHQUFXO1FBQ2hDLFFBQVEsR0FBRyxFQUFFO1lBQ1osS0FBSyxhQUFhO2dCQUNqQixPQUFPLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixDQUFDO1lBQy9CLEtBQUssZ0JBQWdCO2dCQUNwQixPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxHQUFHLE1BQU0sV0FBVyxDQUFDO1NBQ3pDO0lBQ0YsQ0FBQztJQUVELGNBQWMsQ0FBQyxHQUFXLEVBQUUsU0FBYyxJQUFJOztRQUM3QyxJQUFJLEdBQUcsS0FBSyxhQUFhLElBQUksb0JBQW9CLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQ3BFLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztTQUN4QjtRQUNELHlCQUFPLElBQUksQ0FBQyxZQUFZLDBDQUFHLEdBQUcsb0RBQUksTUFBTSxvQ0FBSyxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUVELFFBQVEsQ0FBQyxhQUFxQjs7UUFDN0IsTUFBTSxZQUFZLDJCQUFHLElBQUksQ0FBQyxRQUFRLDBDQUFFLFNBQVMsMENBQUUsYUFBYSwwQ0FBRSxNQUFNLG1DQUFJLENBQUMsQ0FBQztRQUMxRSxJQUFJLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxhQUFhLElBQUksYUFBYSxLQUFLLFlBQVksRUFBRTtZQUNoRixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ3pCO1FBQ0QsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxXQUFtQjtRQUNyQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNqQyxDQUFDOzs7WUE5REQsU0FBUyxTQUFDO2dCQUNWLFFBQVEsRUFBRSxpQkFBaUI7Z0JBQzNCLGkwQ0FBc0M7Z0JBRXRDLFNBQVMsRUFBRSxDQUFDLEVBQUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBQyxDQUFDOzthQUNwRjs7O1lBbkJPLG9CQUFvQix1QkFvQ3pCLFFBQVEsWUFBSSxJQUFJO1lBdENYLGdCQUFnQix1QkF1Q3JCLFFBQVEsWUFBSSxJQUFJOzRDQUNoQixNQUFNLFNBQUMsbUJBQW1CLGNBQUcsUUFBUTs7OzBCQWpCdEMsS0FBSztzQkFDTCxLQUFLO3VCQUNMLEtBQUs7d0NBQ0wsS0FBSzt3QkFDTCxLQUFLOytCQUNMLEtBQUs7NkJBQ0wsS0FBSzs0QkFDTCxLQUFLO3VCQUNMLE1BQU07MkJBQ04sTUFBTTt1QkFDTixTQUFTLFNBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdENvbXBvbmVudCxcblx0RXZlbnRFbWl0dGVyLFxuXHRIb3N0LFxuXHRJbmplY3QsXG5cdEluamVjdGlvblRva2VuLFxuXHRJbnB1dCxcblx0T25DaGFuZ2VzLFxuXHRPcHRpb25hbCxcblx0T3V0cHV0LFxuXHRTaW1wbGVDaGFuZ2VzLFxuXHRUZW1wbGF0ZVJlZiwgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb250cm9sQ29udGFpbmVyLCBOR19WQUxVRV9BQ0NFU1NPUn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtWYWx1ZUFjY2Vzc29yQmFzZX0gZnJvbSAnLi4vdmFsdWUtYWNjZXNzb3ItYmFzZS92YWx1ZS1hY2Nlc3Nvci1iYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQge0Zvcm1FbGVtZW50Q29tcG9uZW50fSBmcm9tICcuLi8uLi9mb3JtL2Zvcm0tZWxlbWVudC9mb3JtLWVsZW1lbnQuY29tcG9uZW50JztcbmltcG9ydCB7aXNWYWx1ZVNldCwgc3RyaW5nSXNTZXRBbmRGaWxsZWR9IGZyb20gJy4uLy4uL3V0aWwvdmFsdWVzJztcblxuZXhwb3J0IHR5cGUgQXBwU2VsZWN0T3B0aW9ucyA9IEFycmF5PEFwcFNlbGVjdE9wdGlvbj47XG5leHBvcnQgdHlwZSBBcHBTZWxlY3RPcHRpb24gPSB7XG5cdGlkOiBhbnk7XG5cdG5hbWU6IHN0cmluZztcblx0ZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cdGFjdGl2ZT86IGJvb2xlYW47XG5cdGRpc2FibGVkPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBjb25zdCBTRUxFQ1RfVFJBTlNMQVRJT05TID0gbmV3IEluamVjdGlvblRva2VuPGFueT4oJ2tscC5mb3JtLnNlbGVjdC50cmFuc2xhdGlvbnMnKTtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAna2xwLWZvcm0tc2VsZWN0Jyxcblx0dGVtcGxhdGVVcmw6ICcuL3NlbGVjdC5jb21wb25lbnQuaHRtbCcsXG5cdHN0eWxlVXJsczogWycuL3NlbGVjdC5jb21wb25lbnQuc2NzcyddLFxuXHRwcm92aWRlcnM6IFt7cHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsIHVzZUV4aXN0aW5nOiBTZWxlY3RDb21wb25lbnQsIG11bHRpOiB0cnVlfV0sXG59KVxuZXhwb3J0IGNsYXNzIFNlbGVjdENvbXBvbmVudCBleHRlbmRzIFZhbHVlQWNjZXNzb3JCYXNlPHN0cmluZyB8IHN0cmluZ1tdPiBpbXBsZW1lbnRzIE9uQ2hhbmdlc3tcblx0QElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZztcblx0QElucHV0KCkgb3B0aW9uczogQXBwU2VsZWN0T3B0aW9ucztcblx0QElucHV0KCkgbXVsdGlwbGUgPSBmYWxzZTtcblx0QElucHV0KCkgbXVsdGlwbGVEaXNwbGF5ZWRBc0Ftb3VudCA9IGZhbHNlO1xuXHRASW5wdXQoKSBjbGVhcmFibGUgPSB0cnVlO1xuXHRASW5wdXQoKSBwdWJsaWMgZHJvcGRvd25Qb3NpdGlvbjogc3RyaW5nO1xuXHRASW5wdXQoKSBwdWJsaWMgY3VzdG9tU2VhcmNoRm46ICh0ZXJtOiBzdHJpbmcsIGl0ZW06IHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nOyBkZXNjcmlwdGlvbjogc3RyaW5nIH0pID0+IGJvb2xlYW47XG5cdEBJbnB1dCgpIHB1YmxpYyBmb290ZXJFbGVtZW50OiBUZW1wbGF0ZVJlZjxhbnk+O1xuXHRAT3V0cHV0KCkgcHVibGljIG9uU2VhcmNoID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cdEBPdXRwdXQoKSBwdWJsaWMgb25FbmRSZWFjaGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXHRAVmlld0NoaWxkKCduZ1NlbGVjdCcpIG5nU2VsZWN0O1xuXG5cdHByaXZhdGUgbGFzdEl0ZW1JbmRleFJlYWNoZWQgPSAtMTtcblxuXHRjb25zdHJ1Y3Rvcihcblx0XHRAT3B0aW9uYWwoKSBASG9zdCgpIHByb3RlY3RlZCBwYXJlbnQ6IEZvcm1FbGVtZW50Q29tcG9uZW50LFxuXHRcdEBPcHRpb25hbCgpIEBIb3N0KCkgcHJvdGVjdGVkIGNvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXIsXG5cdFx0QEluamVjdChTRUxFQ1RfVFJBTlNMQVRJT05TKSBAT3B0aW9uYWwoKSBwcml2YXRlIHRyYW5zbGF0aW9uczogYW55LFxuXHQpIHtcblx0XHRzdXBlcihwYXJlbnQsIGNvbnRyb2xDb250YWluZXIpO1xuXHR9XG5cblxuXHRuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG5cdFx0aWYgKGlzVmFsdWVTZXQoY2hhbmdlcy5vcHRpb25zKSkge1xuXHRcdFx0dGhpcy5sYXN0SXRlbUluZGV4UmVhY2hlZCA9IC0xO1xuXHRcdH1cblx0fVxuXG5cdGdldERlZmF1bHRUcmFuc2xhdGlvbihrZXk6IHN0cmluZyk6ICh4OiBhbnkpID0+IHN0cmluZyB7XG5cdFx0c3dpdGNoIChrZXkpIHtcblx0XHRcdGNhc2UgJ3BsYWNlaG9sZGVyJzpcblx0XHRcdFx0cmV0dXJuICgpID0+ICdQaWNrIGFuIG9wdGlvbic7XG5cdFx0XHRjYXNlICdhbW91bnRTZWxlY3RlZCc6XG5cdFx0XHRcdHJldHVybiAoYW1vdW50KSA9PiBgJHthbW91bnR9IHNlbGVjdGVkYDtcblx0XHR9XG5cdH1cblxuXHRnZXRUcmFuc2xhdGlvbihrZXk6IHN0cmluZywgcGFyYW1zOiBhbnkgPSBudWxsKTogc3RyaW5nIHtcblx0XHRpZiAoa2V5ID09PSAncGxhY2Vob2xkZXInICYmIHN0cmluZ0lzU2V0QW5kRmlsbGVkKHRoaXMucGxhY2Vob2xkZXIpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5wbGFjZWhvbGRlcjtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMudHJhbnNsYXRpb25zPy5ba2V5XT8uKHBhcmFtcykgPz8gdGhpcy5nZXREZWZhdWx0VHJhbnNsYXRpb24oa2V5KShwYXJhbXMpO1xuXHR9XG5cblx0b25TY3JvbGwobGFzdEl0ZW1JbmRleDogbnVtYmVyKTogdm9pZCB7XG5cdFx0Y29uc3QgdmlzaWJsZUl0ZW1zID0gdGhpcy5uZ1NlbGVjdD8uaXRlbXNMaXN0Py5maWx0ZXJlZEl0ZW1zPy5sZW5ndGggPz8gMDtcblx0XHRpZiAodGhpcy5sYXN0SXRlbUluZGV4UmVhY2hlZCA8IGxhc3RJdGVtSW5kZXggJiYgbGFzdEl0ZW1JbmRleCA9PT0gdmlzaWJsZUl0ZW1zKSB7XG5cdFx0XHR0aGlzLm9uRW5kUmVhY2hlZC5lbWl0KCk7XG5cdFx0fVxuXHRcdHRoaXMubGFzdEl0ZW1JbmRleFJlYWNoZWQgPSBNYXRoLm1heChsYXN0SXRlbUluZGV4LCB0aGlzLmxhc3RJdGVtSW5kZXhSZWFjaGVkKTtcblx0fVxuXG5cdHNlYXJjaFF1ZXJ5Q2hhbmdlZChzZWFyY2hRdWVyeTogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5vblNlYXJjaC5lbWl0KHNlYXJjaFF1ZXJ5KTtcblx0fVxufVxuIl19
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIvaG9tZS9ydW5uZXIvd29yay9uZ3gtZW5oYW5jeS1mb3Jtcy9uZ3gtZW5oYW5jeS1mb3Jtcy9wcm9qZWN0cy9rbGlwcGEvbmd4LWVuaGFuY3ktZm9ybXMvc3JjLyIsInNvdXJjZXMiOlsibGliL2VsZW1lbnRzL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTixTQUFTLEVBQUUsVUFBVSxFQUNyQixZQUFZLEVBQ1osSUFBSSxFQUNKLE1BQU0sRUFDTixjQUFjLEVBQ2QsS0FBSyxFQUVMLFFBQVEsRUFDUixNQUFNLEVBRU8sU0FBUyxFQUN0QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxzREFBc0QsQ0FBQztBQUN2RixPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxnREFBZ0QsQ0FBQztBQUNwRixPQUFPLEVBQUMsVUFBVSxFQUFFLG9CQUFvQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFXbkUsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxjQUFjLENBQU0sOEJBQThCLENBQUMsQ0FBQztBQVEzRixNQUFNLE9BQU8sZUFBZ0IsU0FBUSxpQkFBb0M7SUFnQnhFLFlBQytCLE1BQTRCLEVBQzVCLGdCQUFrQyxFQUNmLFlBQWlCLEVBQzFELEtBQWlCO1FBRXpCLEtBQUssQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUxGLFdBQU0sR0FBTixNQUFNLENBQXNCO1FBQzVCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDZixpQkFBWSxHQUFaLFlBQVksQ0FBSztRQUMxRCxVQUFLLEdBQUwsS0FBSyxDQUFZO1FBakJqQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLDhCQUF5QixHQUFHLEtBQUssQ0FBQztRQUNsQyxjQUFTLEdBQUcsSUFBSSxDQUFDO1FBSVQsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDdEMsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3hDLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRzdDLHlCQUFvQixHQUFHLENBQUMsQ0FBQyxDQUFDO0lBU2xDLENBQUM7SUFHRCxXQUFXLENBQUMsT0FBc0I7UUFDakMsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ2hDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUMvQjtJQUNGLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxHQUFXO1FBQ2hDLFFBQVEsR0FBRyxFQUFFO1lBQ1osS0FBSyxhQUFhO2dCQUNqQixPQUFPLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixDQUFDO1lBQy9CLEtBQUssZ0JBQWdCO2dCQUNwQixPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxHQUFHLE1BQU0sV0FBVyxDQUFDO1NBQ3pDO0lBQ0YsQ0FBQztJQUVELGNBQWMsQ0FBQyxHQUFXLEVBQUUsU0FBYyxJQUFJOztRQUM3QyxJQUFJLEdBQUcsS0FBSyxhQUFhLElBQUksb0JBQW9CLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQ3BFLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztTQUN4QjtRQUNELHlCQUFPLElBQUksQ0FBQyxZQUFZLDBDQUFHLEdBQUcsb0RBQUksTUFBTSxvQ0FBSyxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUVELFFBQVEsQ0FBQyxhQUFxQjs7UUFDN0IsTUFBTSxZQUFZLDJCQUFHLElBQUksQ0FBQyxRQUFRLDBDQUFFLFNBQVMsMENBQUUsYUFBYSwwQ0FBRSxNQUFNLG1DQUFJLENBQUMsQ0FBQztRQUMxRSxJQUFJLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxhQUFhLElBQUksYUFBYSxLQUFLLFlBQVksRUFBRTtZQUNoRixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ3pCO1FBQ0QsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxXQUFtQjtRQUNyQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsTUFBTTtRQUNMLDBEQUEwRDtRQUMxRCxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7OztZQXZFRCxTQUFTLFNBQUM7Z0JBQ1YsUUFBUSxFQUFFLGlCQUFpQjtnQkFDM0IsdzFDQUFzQztnQkFFdEMsU0FBUyxFQUFFLENBQUMsRUFBQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFDLENBQUM7O2FBQ3BGOzs7WUFuQk8sb0JBQW9CLHVCQXFDekIsUUFBUSxZQUFJLElBQUk7WUF2Q1gsZ0JBQWdCLHVCQXdDckIsUUFBUSxZQUFJLElBQUk7NENBQ2hCLE1BQU0sU0FBQyxtQkFBbUIsY0FBRyxRQUFRO1lBckQ1QixVQUFVOzs7MEJBbUNwQixLQUFLO3NCQUNMLEtBQUs7dUJBQ0wsS0FBSzt3Q0FDTCxLQUFLO3dCQUNMLEtBQUs7K0JBQ0wsS0FBSzs2QkFDTCxLQUFLOzRCQUNMLEtBQUs7dUJBQ0wsTUFBTTsyQkFDTixNQUFNO3VCQUNOLE1BQU07dUJBQ04sU0FBUyxTQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDb21wb25lbnQsIEVsZW1lbnRSZWYsXG5cdEV2ZW50RW1pdHRlcixcblx0SG9zdCxcblx0SW5qZWN0LFxuXHRJbmplY3Rpb25Ub2tlbixcblx0SW5wdXQsXG5cdE9uQ2hhbmdlcyxcblx0T3B0aW9uYWwsXG5cdE91dHB1dCxcblx0U2ltcGxlQ2hhbmdlcyxcblx0VGVtcGxhdGVSZWYsIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29udHJvbENvbnRhaW5lciwgTkdfVkFMVUVfQUNDRVNTT1J9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7VmFsdWVBY2Nlc3NvckJhc2V9IGZyb20gJy4uL3ZhbHVlLWFjY2Vzc29yLWJhc2UvdmFsdWUtYWNjZXNzb3ItYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHtGb3JtRWxlbWVudENvbXBvbmVudH0gZnJvbSAnLi4vLi4vZm9ybS9mb3JtLWVsZW1lbnQvZm9ybS1lbGVtZW50LmNvbXBvbmVudCc7XG5pbXBvcnQge2lzVmFsdWVTZXQsIHN0cmluZ0lzU2V0QW5kRmlsbGVkfSBmcm9tICcuLi8uLi91dGlsL3ZhbHVlcyc7XG5cbmV4cG9ydCB0eXBlIEFwcFNlbGVjdE9wdGlvbnMgPSBBcnJheTxBcHBTZWxlY3RPcHRpb24+O1xuZXhwb3J0IHR5cGUgQXBwU2VsZWN0T3B0aW9uID0ge1xuXHRpZDogYW55O1xuXHRuYW1lOiBzdHJpbmc7XG5cdGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXHRhY3RpdmU/OiBib29sZWFuO1xuXHRkaXNhYmxlZD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgY29uc3QgU0VMRUNUX1RSQU5TTEFUSU9OUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxhbnk+KCdrbHAuZm9ybS5zZWxlY3QudHJhbnNsYXRpb25zJyk7XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ2tscC1mb3JtLXNlbGVjdCcsXG5cdHRlbXBsYXRlVXJsOiAnLi9zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxuXHRzdHlsZVVybHM6IFsnLi9zZWxlY3QuY29tcG9uZW50LnNjc3MnXSxcblx0cHJvdmlkZXJzOiBbe3Byb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLCB1c2VFeGlzdGluZzogU2VsZWN0Q29tcG9uZW50LCBtdWx0aTogdHJ1ZX1dLFxufSlcbmV4cG9ydCBjbGFzcyBTZWxlY3RDb21wb25lbnQgZXh0ZW5kcyBWYWx1ZUFjY2Vzc29yQmFzZTxzdHJpbmcgfCBzdHJpbmdbXT4gaW1wbGVtZW50cyBPbkNoYW5nZXN7XG5cdEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG5cdEBJbnB1dCgpIG9wdGlvbnM6IEFwcFNlbGVjdE9wdGlvbnM7XG5cdEBJbnB1dCgpIG11bHRpcGxlID0gZmFsc2U7XG5cdEBJbnB1dCgpIG11bHRpcGxlRGlzcGxheWVkQXNBbW91bnQgPSBmYWxzZTtcblx0QElucHV0KCkgY2xlYXJhYmxlID0gdHJ1ZTtcblx0QElucHV0KCkgcHVibGljIGRyb3Bkb3duUG9zaXRpb246IHN0cmluZztcblx0QElucHV0KCkgcHVibGljIGN1c3RvbVNlYXJjaEZuOiAodGVybTogc3RyaW5nLCBpdGVtOiB7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgZGVzY3JpcHRpb246IHN0cmluZyB9KSA9PiBib29sZWFuO1xuXHRASW5wdXQoKSBwdWJsaWMgZm9vdGVyRWxlbWVudDogVGVtcGxhdGVSZWY8YW55Pjtcblx0QE91dHB1dCgpIHB1YmxpYyBvblNlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXHRAT3V0cHV0KCkgcHVibGljIG9uRW5kUmVhY2hlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblx0QE91dHB1dCgpIHB1YmxpYyBvbk9wZW5lZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblx0QFZpZXdDaGlsZCgnbmdTZWxlY3QnKSBuZ1NlbGVjdDtcblxuXHRwcml2YXRlIGxhc3RJdGVtSW5kZXhSZWFjaGVkID0gLTE7XG5cblx0Y29uc3RydWN0b3IoXG5cdFx0QE9wdGlvbmFsKCkgQEhvc3QoKSBwcm90ZWN0ZWQgcGFyZW50OiBGb3JtRWxlbWVudENvbXBvbmVudCxcblx0XHRAT3B0aW9uYWwoKSBASG9zdCgpIHByb3RlY3RlZCBjb250cm9sQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyLFxuXHRcdEBJbmplY3QoU0VMRUNUX1RSQU5TTEFUSU9OUykgQE9wdGlvbmFsKCkgcHJpdmF0ZSB0cmFuc2xhdGlvbnM6IGFueSxcblx0XHRwcml2YXRlIGVsUmVmOiBFbGVtZW50UmVmLFxuXHQpIHtcblx0XHRzdXBlcihwYXJlbnQsIGNvbnRyb2xDb250YWluZXIpO1xuXHR9XG5cblxuXHRuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG5cdFx0aWYgKGlzVmFsdWVTZXQoY2hhbmdlcy5vcHRpb25zKSkge1xuXHRcdFx0dGhpcy5sYXN0SXRlbUluZGV4UmVhY2hlZCA9IC0xO1xuXHRcdH1cblx0fVxuXG5cdGdldERlZmF1bHRUcmFuc2xhdGlvbihrZXk6IHN0cmluZyk6ICh4OiBhbnkpID0+IHN0cmluZyB7XG5cdFx0c3dpdGNoIChrZXkpIHtcblx0XHRcdGNhc2UgJ3BsYWNlaG9sZGVyJzpcblx0XHRcdFx0cmV0dXJuICgpID0+ICdQaWNrIGFuIG9wdGlvbic7XG5cdFx0XHRjYXNlICdhbW91bnRTZWxlY3RlZCc6XG5cdFx0XHRcdHJldHVybiAoYW1vdW50KSA9PiBgJHthbW91bnR9IHNlbGVjdGVkYDtcblx0XHR9XG5cdH1cblxuXHRnZXRUcmFuc2xhdGlvbihrZXk6IHN0cmluZywgcGFyYW1zOiBhbnkgPSBudWxsKTogc3RyaW5nIHtcblx0XHRpZiAoa2V5ID09PSAncGxhY2Vob2xkZXInICYmIHN0cmluZ0lzU2V0QW5kRmlsbGVkKHRoaXMucGxhY2Vob2xkZXIpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5wbGFjZWhvbGRlcjtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMudHJhbnNsYXRpb25zPy5ba2V5XT8uKHBhcmFtcykgPz8gdGhpcy5nZXREZWZhdWx0VHJhbnNsYXRpb24oa2V5KShwYXJhbXMpO1xuXHR9XG5cblx0b25TY3JvbGwobGFzdEl0ZW1JbmRleDogbnVtYmVyKTogdm9pZCB7XG5cdFx0Y29uc3QgdmlzaWJsZUl0ZW1zID0gdGhpcy5uZ1NlbGVjdD8uaXRlbXNMaXN0Py5maWx0ZXJlZEl0ZW1zPy5sZW5ndGggPz8gMDtcblx0XHRpZiAodGhpcy5sYXN0SXRlbUluZGV4UmVhY2hlZCA8IGxhc3RJdGVtSW5kZXggJiYgbGFzdEl0ZW1JbmRleCA9PT0gdmlzaWJsZUl0ZW1zKSB7XG5cdFx0XHR0aGlzLm9uRW5kUmVhY2hlZC5lbWl0KCk7XG5cdFx0fVxuXHRcdHRoaXMubGFzdEl0ZW1JbmRleFJlYWNoZWQgPSBNYXRoLm1heChsYXN0SXRlbUluZGV4LCB0aGlzLmxhc3RJdGVtSW5kZXhSZWFjaGVkKTtcblx0fVxuXG5cdHNlYXJjaFF1ZXJ5Q2hhbmdlZChzZWFyY2hRdWVyeTogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5vblNlYXJjaC5lbWl0KHNlYXJjaFF1ZXJ5KTtcblx0fVxuXG5cdG9uT3BlbigpOiB2b2lkIHtcblx0XHQvLyB3YWl0aW5nIGZvciB0aGUgdGhpbmcgdG8gcmVuZGVyIHVudGlsIHdlIGZpcmUgdGhlIGV2ZW50XG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0aGlzLm9uT3BlbmVkLmVtaXQoKTtcblx0XHR9KTtcblx0fVxufVxuIl19
@@ -1,4 +1,4 @@
1
- import { Directive, Input, Component, SkipSelf, Optional, InjectionToken, Host, Inject, ViewChild, EventEmitter, Output, HostBinding, ContentChild, TemplateRef, ChangeDetectorRef, NgModule } from '@angular/core';
1
+ import { Directive, Input, Component, SkipSelf, Optional, InjectionToken, Host, Inject, ViewChild, EventEmitter, Output, HostBinding, ElementRef, ContentChild, TemplateRef, ChangeDetectorRef, NgModule } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import { FormArray, FormGroup, FormControl, ControlContainer, NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';
4
4
  import { isString, isArray } from 'lodash';
@@ -624,16 +624,18 @@ PasswordFieldComponent.propDecorators = {
624
624
 
625
625
  const SELECT_TRANSLATIONS = new InjectionToken('klp.form.select.translations');
626
626
  class SelectComponent extends ValueAccessorBase {
627
- constructor(parent, controlContainer, translations) {
627
+ constructor(parent, controlContainer, translations, elRef) {
628
628
  super(parent, controlContainer);
629
629
  this.parent = parent;
630
630
  this.controlContainer = controlContainer;
631
631
  this.translations = translations;
632
+ this.elRef = elRef;
632
633
  this.multiple = false;
633
634
  this.multipleDisplayedAsAmount = false;
634
635
  this.clearable = true;
635
636
  this.onSearch = new EventEmitter();
636
637
  this.onEndReached = new EventEmitter();
638
+ this.onOpened = new EventEmitter();
637
639
  this.lastItemIndexReached = -1;
638
640
  }
639
641
  ngOnChanges(changes) {
@@ -667,11 +669,17 @@ class SelectComponent extends ValueAccessorBase {
667
669
  searchQueryChanged(searchQuery) {
668
670
  this.onSearch.emit(searchQuery);
669
671
  }
672
+ onOpen() {
673
+ // waiting for the thing to render until we fire the event
674
+ setTimeout(() => {
675
+ this.onOpened.emit();
676
+ });
677
+ }
670
678
  }
671
679
  SelectComponent.decorators = [
672
680
  { type: Component, args: [{
673
681
  selector: 'klp-form-select',
674
- template: "<ng-select\n\t#ngSelect\n\t[placeholder]=\"getTranslation('placeholder')\"\n\tbindLabel=\"name\"\n\tbindValue=\"id\"\n\t[items]=\"options\"\n\t[clearable]=\"clearable\"\n\t[(ngModel)]=\"innerValue\"\n\t[ngClass]=\"{showErrors: isInErrorState()}\"\n\t(change)=\"setInnerValueAndNotify(innerValue)\"\n\t[multiple]=\"multiple\"\n\t[disabled]=\"disabled\"\n\t(blur)=\"touch()\"\n\t(search)=\"searchQueryChanged($event.term)\"\n\t[dropdownPosition]=\"dropdownPosition\"\n\t[searchFn]=\"customSearchFn\"\n\t[selectOnTab]=\"true\"\n\t[virtualScroll]=\"true\"\n\t(scroll)=\"onScroll($event.end)\"\n>\n\t<ng-template let-item=\"item\" ng-option-tmp>\n\t\t<div [attr.data-cy]=\"item.id\">\n\t\t\t{{ item.name }}\n\t\t\t<div *ngIf=\"item.description\" class=\"dropdown-item-description\">\n\t\t\t\t{{ item.description }}\n\t\t\t</div>\n\t\t</div>\n\t</ng-template>\n\t<ng-container *ngIf=\"multiple && multipleDisplayedAsAmount && innerValue?.length > 1\">\n\t\t<ng-template ng-multi-label-tmp>\n\t\t\t<div class=\"ng-value\">\n\t\t\t\t<span class=\"ng-value-label\">{{getTranslation('amountSelected', innerValue?.length)}}</span>\n\t\t\t</div>\n\t\t</ng-template>\n\t</ng-container>\n\t<ng-template ng-footer-tmp *ngIf=\"footerElement\">\n\t\t<ng-container [ngTemplateOutlet]=\"footerElement\"></ng-container>\n\t</ng-template>\n</ng-select>\n",
682
+ template: "<ng-select\n\t#ngSelect\n\t[placeholder]=\"getTranslation('placeholder')\"\n\tbindLabel=\"name\"\n\tbindValue=\"id\"\n\t[items]=\"options\"\n\t[clearable]=\"clearable\"\n\t[(ngModel)]=\"innerValue\"\n\t[ngClass]=\"{showErrors: isInErrorState()}\"\n\t(change)=\"setInnerValueAndNotify(innerValue)\"\n\t[multiple]=\"multiple\"\n\t[disabled]=\"disabled\"\n\t(blur)=\"touch()\"\n\t(search)=\"searchQueryChanged($event.term)\"\n\t[dropdownPosition]=\"dropdownPosition\"\n\t[searchFn]=\"customSearchFn\"\n\t[selectOnTab]=\"true\"\n\t[virtualScroll]=\"true\"\n\t(scroll)=\"onScroll($event.end)\"\n\t(open)=\"onOpen()\"\n>\n\t<ng-template let-item=\"item\" ng-option-tmp>\n\t\t<div [attr.data-cy]=\"item.id\">\n\t\t\t{{ item.name }}\n\t\t\t<div *ngIf=\"item.description\" class=\"dropdown-item-description\">\n\t\t\t\t{{ item.description }}\n\t\t\t</div>\n\t\t</div>\n\t</ng-template>\n\t<ng-container *ngIf=\"multiple && multipleDisplayedAsAmount && innerValue?.length > 1\">\n\t\t<ng-template ng-multi-label-tmp>\n\t\t\t<div class=\"ng-value\">\n\t\t\t\t<span class=\"ng-value-label\">{{getTranslation('amountSelected', innerValue?.length)}}</span>\n\t\t\t</div>\n\t\t</ng-template>\n\t</ng-container>\n\t<ng-template ng-footer-tmp *ngIf=\"footerElement\">\n\t\t<ng-container [ngTemplateOutlet]=\"footerElement\"></ng-container>\n\t</ng-template>\n</ng-select>\n",
675
683
  providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: SelectComponent, multi: true }],
676
684
  styles: [":host{display:block}ng-select.showErrors::ng-deep .ng-select-container{border-color:#ff8000}:host ::ng-deep ng-select.ng-select .ng-select-container{color:#888da8}:host ::ng-deep .ng-select.ng-select-opened>.ng-select-container{background:#fff;border-color:#3ed778}:host ::ng-deep .ng-select.ng-select-opened>.ng-select-container:hover{box-shadow:none}:host ::ng-deep .ng-select.ng-select-opened>.ng-select-container .ng-arrow{border-color:transparent transparent #999;border-width:0 5px 5px;top:-2px}:host ::ng-deep .ng-select.ng-select-opened>.ng-select-container .ng-arrow:hover{border-color:transparent transparent #666}:host ::ng-deep .ng-select.ng-select-opened.ng-select-bottom>.ng-select-container{border-bottom-left-radius:0;border-bottom-right-radius:0}:host ::ng-deep .ng-select.ng-select-opened.ng-select-top>.ng-select-container{border-top-left-radius:0;border-top-right-radius:0}:host ::ng-deep .ng-select.ng-select-disabled>.ng-select-container{background-color:#f9f9f9}:host ::ng-deep .ng-select .ng-has-value .ng-placeholder{display:none}:host ::ng-deep .ng-select .ng-select-container{align-items:center;background-clip:padding-box;background-color:#fff;border:1px solid #e6ecf5;border-radius:4px;border-radius:2px;box-shadow:none;box-sizing:border-box;color:#888da8;display:flex;flex-direction:row;font-size:1rem;font-size:14px;line-height:1.5;margin:0;min-height:42px;outline:none;overflow:visible;padding:.375rem .75rem;transition-delay:0s;transition-duration:.2s;transition-property:all;transition-timing-function:ease-in;width:100%}:host ::ng-deep .ng-select .ng-select-container:hover{box-shadow:0 1px 0 rgba(0,0,0,.06)}:host ::ng-deep .ng-select .ng-select-container .ng-value-container{align-items:center;overflow:hidden;padding-left:10px}:host ::ng-deep .ng-select .ng-select-container .ng-value-container .ng-placeholder{color:#aaa}:host ::ng-deep .ng-select.ng-select-single .ng-select-container{height:42px}:host ::ng-deep .ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{left:0;padding-left:10px;padding-right:50px;top:5px}:host ::ng-deep .ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value{background-color:#f9f9f9;border:1px solid #e3e3e3}:host ::ng-deep .ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value .ng-value-label{padding:0 5px}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{background-color:#e7faee;border:1px solid #93e8b3;border-radius:2px;display:flex;font-size:.9em;margin-bottom:3px;margin-right:5px;margin-top:3px;overflow:hidden}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled{background-color:#f9f9f9;border:1px solid #e3e3e3}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled .ng-value-label{padding-left:5px}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-label{display:inline-block;overflow:hidden;padding:0 5px;text-overflow:ellipsis}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon{display:inline-block;padding:0 5px}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon:hover{background-color:#93e8b3}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.left{border-right:1px solid #93e8b3}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.right{border-left:1px solid #c2e0ff}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input{padding-bottom:3px;padding-left:3px}:host ::ng-deep ng-select.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{padding-bottom:3px;padding-left:3px;position:static;top:5px}:host ::ng-deep .ng-select .ng-clear-wrapper{color:#999}:host ::ng-deep .ng-select .ng-clear-wrapper .ng-clear:hover{color:#dc3545}:host ::ng-deep .ng-select .ng-spinner-zone{padding-right:5px;padding-top:5px}:host ::ng-deep .ng-select .ng-arrow-wrapper{padding-right:5px;width:25px}:host ::ng-deep .ng-select .ng-arrow-wrapper:hover .ng-arrow{border-top-color:#666}:host ::ng-deep .ng-select .ng-arrow-wrapper .ng-arrow{border-color:#999 transparent transparent;border-style:solid;border-width:5px 5px 2.5px}:host ::ng-deep .ng-dropdown-panel{background-color:#fff;border:1px solid #3ed778;box-shadow:0 1px 0 rgba(0,0,0,.06)}:host ::ng-deep .ng-dropdown-panel.ng-select-bottom{border-bottom-left-radius:4px;border-bottom-right-radius:4px;border-top-color:#e6e6e6;margin-top:-1px;top:100%}:host ::ng-deep .ng-dropdown-panel.ng-select-bottom .ng-dropdown-panel-items .ng-option:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px}:host ::ng-deep .ng-dropdown-panel.ng-select-top{border-bottom-color:#e6e6e6;border-top-left-radius:4px;border-top-right-radius:4px;bottom:100%;margin-bottom:-1px}:host ::ng-deep .ng-dropdown-panel.ng-select-top .ng-dropdown-panel-items .ng-option:first-child{border-top-left-radius:4px;border-top-right-radius:4px}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-header{border-bottom:1px solid #ccc;padding:5px 7px}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-footer{border-top:1px solid #ccc;padding:5px 7px}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items{margin-bottom:1px}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;color:rgba(0,0,0,.54);cursor:default;cursor:pointer;font-weight:500;padding:8px 10px;user-select:none}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-disabled{cursor:default}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-marked{background-color:#ebf5ff}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected{background-color:#f5faff;font-weight:600}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{background-color:#fff;color:rgba(0,0,0,.87);padding:8px 10px}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option div{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected{background-color:#e7faee;color:#333}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected .ng-option-label{font-weight:600}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-marked{background-color:#e7faee;color:#333}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-disabled{color:#ccc}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-child{padding-left:22px}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option .ng-tag-label{font-size:80%;font-weight:400;padding-right:5px}:host ::ng-deep ng-select.ng-select .ng-select-container .ng-value-container{padding-left:0}:host ::ng-deep ng-select.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{color:#888da8;top:9px}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option,:host ::ng-deep .ng-select .ng-select-container .ng-value-container .ng-input>input{color:#888da8}:host ::ng-deep .ng-select.ng-select-auto-grow{max-width:inherit}:host ::ng-deep .ng-select.ng-select-auto-grow .ng-dropdown-panel{width:auto}"]
677
685
  },] }
@@ -679,7 +687,8 @@ SelectComponent.decorators = [
679
687
  SelectComponent.ctorParameters = () => [
680
688
  { type: FormElementComponent, decorators: [{ type: Optional }, { type: Host }] },
681
689
  { type: ControlContainer, decorators: [{ type: Optional }, { type: Host }] },
682
- { type: undefined, decorators: [{ type: Inject, args: [SELECT_TRANSLATIONS,] }, { type: Optional }] }
690
+ { type: undefined, decorators: [{ type: Inject, args: [SELECT_TRANSLATIONS,] }, { type: Optional }] },
691
+ { type: ElementRef }
683
692
  ];
684
693
  SelectComponent.propDecorators = {
685
694
  placeholder: [{ type: Input }],
@@ -692,6 +701,7 @@ SelectComponent.propDecorators = {
692
701
  footerElement: [{ type: Input }],
693
702
  onSearch: [{ type: Output }],
694
703
  onEndReached: [{ type: Output }],
704
+ onOpened: [{ type: Output }],
695
705
  ngSelect: [{ type: ViewChild, args: ['ngSelect',] }]
696
706
  };
697
707