@leanix/components 0.3.132 → 0.3.134
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.
- package/esm2020/lib/forms-ui/components/basic-dropdown/basic-dropdown.component.mjs +35 -11
- package/fesm2015/leanix-components.mjs +28 -6
- package/fesm2015/leanix-components.mjs.map +1 -1
- package/fesm2020/leanix-components.mjs +28 -6
- package/fesm2020/leanix-components.mjs.map +1 -1
- package/lib/forms-ui/components/basic-dropdown/basic-dropdown.component.d.ts +13 -3
- package/package.json +1 -1
|
@@ -1,16 +1,19 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, Input, Output } from '@angular/core';
|
|
1
|
+
import { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
2
2
|
import { isEqual, some, toLower } from 'lodash/fp';
|
|
3
|
+
import { delay, distinctUntilChanged, ReplaySubject, startWith } from 'rxjs';
|
|
3
4
|
import { KeyboardSelectDirective } from '../keyboard-select.directive';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
6
|
import * as i1 from "@angular/common";
|
|
6
7
|
import * as i2 from "ngx-infinite-scroll";
|
|
7
|
-
import * as i3 from "
|
|
8
|
-
import * as i4 from "../../../core-ui/components/
|
|
9
|
-
import * as i5 from "
|
|
10
|
-
import * as i6 from "
|
|
8
|
+
import * as i3 from "@angular/cdk/overlay";
|
|
9
|
+
import * as i4 from "../../../core-ui/components/badge/badge.component";
|
|
10
|
+
import * as i5 from "../../../core-ui/components/spinner/spinner.component";
|
|
11
|
+
import * as i6 from "../../directives/selectable-item.directive";
|
|
12
|
+
import * as i7 from "@ngx-translate/core";
|
|
11
13
|
export class BasicDropdownComponent extends KeyboardSelectDirective {
|
|
12
14
|
constructor() {
|
|
13
|
-
super(
|
|
15
|
+
super();
|
|
16
|
+
this.overlayOpenState = new ReplaySubject(1);
|
|
14
17
|
this.NAME = 'BasicDropdownComponent';
|
|
15
18
|
this.options = [];
|
|
16
19
|
this.initiallySelectedIndex = -1;
|
|
@@ -18,10 +21,14 @@ export class BasicDropdownComponent extends KeyboardSelectDirective {
|
|
|
18
21
|
this.padding = 'default';
|
|
19
22
|
this.showCreateNewOption = false;
|
|
20
23
|
this.disabledOptions = {};
|
|
24
|
+
this.overlayPositioning = false;
|
|
25
|
+
this.truncateOptions = false;
|
|
21
26
|
this.onItemSelected = new EventEmitter();
|
|
22
27
|
this.triggerRequestForMoreEntries = new EventEmitter();
|
|
23
28
|
this.newOptionLabelSelected = new EventEmitter();
|
|
24
29
|
this.createNewOptionSelected = new EventEmitter();
|
|
30
|
+
this.isTopDropdown = false;
|
|
31
|
+
this.overlayOpen$ = this.overlayOpenState.asObservable().pipe(startWith(false), delay(0), distinctUntilChanged());
|
|
25
32
|
}
|
|
26
33
|
static isNewItem(items, term, key) {
|
|
27
34
|
if (!term) {
|
|
@@ -33,6 +40,13 @@ export class BasicDropdownComponent extends KeyboardSelectDirective {
|
|
|
33
40
|
};
|
|
34
41
|
return !some(isEqualIgnoringCase, items);
|
|
35
42
|
}
|
|
43
|
+
ngAfterViewChecked() {
|
|
44
|
+
if (this.overlayPositioning && this.selectOrigin) {
|
|
45
|
+
// Emit current selectOrigin DOM connection state
|
|
46
|
+
// when dropdown is attached to DOM - it gets set to true
|
|
47
|
+
this.overlayOpenState.next(this.selectOrigin.elementRef.nativeElement.isConnected);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
36
50
|
selectOption(option) {
|
|
37
51
|
if (!option || !this.itemKey) {
|
|
38
52
|
this.onItemSelected.emit(option);
|
|
@@ -41,6 +55,9 @@ export class BasicDropdownComponent extends KeyboardSelectDirective {
|
|
|
41
55
|
this.onItemSelected.emit(option);
|
|
42
56
|
}
|
|
43
57
|
}
|
|
58
|
+
onPositionChange(event) {
|
|
59
|
+
this.isTopDropdown = event.connectionPair.originY === 'top';
|
|
60
|
+
}
|
|
44
61
|
get isNewItem() {
|
|
45
62
|
return BasicDropdownComponent.isNewItem(this.options, this.newOptionLabel, this.labelKey);
|
|
46
63
|
}
|
|
@@ -60,12 +77,12 @@ export class BasicDropdownComponent extends KeyboardSelectDirective {
|
|
|
60
77
|
this.createNewOptionSelected.emit();
|
|
61
78
|
}
|
|
62
79
|
}
|
|
63
|
-
BasicDropdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: BasicDropdownComponent, deps:
|
|
64
|
-
BasicDropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.1", type: BasicDropdownComponent, selector: "lx-basic-dropdown", inputs: { options: "options", initiallySelectedIndex: "initiallySelectedIndex", labelKey: "labelKey", itemKey: "itemKey", placeholder: "placeholder", loading: "loading", newOptionLabel: "newOptionLabel", padding: "padding", showCreateNewOption: "showCreateNewOption", disabledOptions: "disabledOptions" }, outputs: { onItemSelected: "onItemSelected", triggerRequestForMoreEntries: "triggerRequestForMoreEntries", newOptionLabelSelected: "newOptionLabelSelected", createNewOptionSelected: "createNewOptionSelected" }, queries: [{ propertyName: "optionTemplateRef", first: true, predicate: ["optionTemplate"], descendants: true }, { propertyName: "createNewOptionTemplateRef", first: true, predicate: ["createNewOptionTemplate"], descendants: true }, { propertyName: "descriptionTemplateRef", first: true, predicate: ["descriptionTemplateRef"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ul\n class=\"options {{ padding }}Padding lxThinScrollbar\"\n #keyboardSelectContainer\n infinite-scroll\n [scrollWindow]=\"false\"\n [fromRoot]=\"true\"\n (scrolled)=\"onScroll()\"\n>\n <li\n *ngIf=\"newOptionLabel && isNewItem\"\n tabindex=\"-1\"\n lxSelectableItem\n [scrollInContainer]=\"keyboardSelectContainer\"\n #item\n (click)=\"onNewItemSelected()\"\n (select)=\"onNewItemSelected()\"\n [class.selected]=\"isItemSelected(item, (selectedItem$ | async)?.element)\"\n class=\"option keyboardSelectable onTheFlyOption\"\n >\n <span class=\"newEntryContent\">\n {{ newOptionLabel }}\n </span>\n <lx-badge class=\"lx-margin-left\" size=\"small\" [content]=\"'common.new' | translate | uppercase\"></lx-badge>\n </li>\n <li\n *ngIf=\"showCreateNewOption\"\n tabindex=\"-1\"\n lxSelectableItem\n [scrollInContainer]=\"keyboardSelectContainer\"\n #item\n (click)=\"onCreateNewOptionSelected()\"\n (select)=\"onCreateNewOptionSelected()\"\n [class.selected]=\"isItemSelected(item, (selectedItem$ | async)?.element)\"\n class=\"option keyboardSelectable newEntryOption\"\n >\n <span class=\"newEntryContent\">\n <ng-container *ngIf=\"createNewOptionTemplateRef; else defaultNewOption\">\n <ng-container *ngTemplateOutlet=\"createNewOptionTemplateRef\"></ng-container>\n </ng-container>\n <ng-template #defaultNewOption>\n <span>\n {{ NAME + '.new' | translate }}\n </span>\n </ng-template>\n </span>\n </li>\n <li\n *ngIf=\"descriptionTemplateRef\"\n tabindex=\"-1\"\n lxSelectableItem\n [scrollInContainer]=\"keyboardSelectContainer\"\n #item\n class=\"option description disabledItem\"\n >\n <span class=\"descriptionContent\">\n <ng-container *ngTemplateOutlet=\"descriptionTemplateRef\"></ng-container>\n </span>\n </li>\n <li\n *ngIf=\"options?.length === 0 && !newOptionLabel && !loading\"\n tabindex=\"-1\"\n lxSelectableItem\n [scrollInContainer]=\"keyboardSelectContainer\"\n #item\n [class.selected]=\"isItemSelected(item, (selectedItem$ | async)?.element)\"\n class=\"option keyboardSelectable noOptionsAvailable\"\n >\n {{ NAME + '.noResults' | translate }}\n </li>\n <li\n *ngIf=\"placeholder\"\n tabindex=\"-1\"\n class=\"option keyboardSelectable clearSelection\"\n lxSelectableItem\n [scrollInContainer]=\"keyboardSelectContainer\"\n #item\n (click)=\"selectOption(null)\"\n (select)=\"selectOption(null)\"\n [class.selected]=\"isItemSelected(item, (selectedItem$ | async)?.element)\"\n >\n {{ placeholder }}\n </li>\n <li\n *ngFor=\"let option of options; let index = index; trackBy: trackByProp(itemKey)\"\n tabindex=\"-1\"\n lxSelectableItem\n [scrollInContainer]=\"keyboardSelectContainer\"\n #item\n class=\"option keyboardSelectable\"\n (click)=\"selectOption(option)\"\n (select)=\"selectOption(option)\"\n [class.selected]=\"isItemSelected(item, (selectedItem$ | async)?.element)\"\n [class.initiallySelected]=\"index === initiallySelectedIndex\"\n [class.disabledItem]=\"itemKey ? !!disabledOptions[option[itemKey]] : false\"\n >\n <ng-container *ngIf=\"optionTemplateRef; else simpleStringDisplay\">\n <ng-container *ngTemplateOutlet=\"optionTemplateRef; context: { $implicit: option, index: index }\"></ng-container>\n </ng-container>\n <ng-template #simpleStringDisplay>\n <span>\n {{ labelKey ? option[labelKey] : option }}\n </span>\n </ng-template>\n </li>\n <lx-spinner *ngIf=\"loading\" [fadeBackground]=\"true\"></lx-spinner>\n</ul>\n", styles: [":host(.noOptionPadding) .options .option{padding:0}.defaultPadding .newEntryOption,.defaultPadding .onTheFlyOption,.defaultPadding .noOptionsAvailable{padding:4px 12px!important}.narrowPadding .newEntryOption,.narrowPadding .onTheFlyOption,.narrowPadding .noOptionsAvailable{padding:4px!important}.options{list-style:none;margin:0;padding:0;overflow-y:auto;max-height:250px}.options.defaultPadding .option{padding:4px 12px}.options.narrowPadding .option{padding:4px}.optionSearch{padding:2px}.option{cursor:pointer;display:block}.option:hover:not(.disabledItem){background-color:#e1e5eb!important}.option.selected{background:#eaedf1}.option.initiallySelected{color:var(--lx-primarybutton-backgroundcolor)}.option.disabledItem{cursor:default;opacity:.5}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.InfiniteScrollDirective, selector: "[infiniteScroll], [infinite-scroll], [data-infinite-scroll]", inputs: ["infiniteScrollDistance", "infiniteScrollUpDistance", "infiniteScrollThrottle", "infiniteScrollDisabled", "infiniteScrollContainer", "scrollWindow", "immediateCheck", "horizontal", "alwaysCallback", "fromRoot"], outputs: ["scrolled", "scrolledUp"] }, { kind: "component", type: i3.BadgeComponent, selector: "lx-badge", inputs: ["content", "size", "color"] }, { kind: "component", type: i4.SpinnerComponent, selector: "lx-spinner", inputs: ["fadeBackground"] }, { kind: "directive", type: i5.SelectableItemDirective, selector: "[lxSelectableItem]", inputs: ["scrollInContainer", "lxSelectableItem"], outputs: ["select"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.UpperCasePipe, name: "uppercase" }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
80
|
+
BasicDropdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: BasicDropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
81
|
+
BasicDropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.1", type: BasicDropdownComponent, selector: "lx-basic-dropdown", inputs: { options: "options", initiallySelectedIndex: "initiallySelectedIndex", labelKey: "labelKey", itemKey: "itemKey", placeholder: "placeholder", loading: "loading", newOptionLabel: "newOptionLabel", padding: "padding", showCreateNewOption: "showCreateNewOption", disabledOptions: "disabledOptions", overlayPositioning: "overlayPositioning", truncateOptions: "truncateOptions" }, outputs: { onItemSelected: "onItemSelected", triggerRequestForMoreEntries: "triggerRequestForMoreEntries", newOptionLabelSelected: "newOptionLabelSelected", createNewOptionSelected: "createNewOptionSelected" }, queries: [{ propertyName: "optionTemplateRef", first: true, predicate: ["optionTemplate"], descendants: true }, { propertyName: "createNewOptionTemplateRef", first: true, predicate: ["createNewOptionTemplate"], descendants: true }, { propertyName: "descriptionTemplateRef", first: true, predicate: ["descriptionTemplateRef"], descendants: true }], viewQueries: [{ propertyName: "selectOrigin", first: true, predicate: ["selectOrigin"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container [ngTemplateOutlet]=\"dropdown\" *ngIf=\"!overlayPositioning\"></ng-container>\n<ng-container *ngIf=\"overlayPositioning\">\n <div class=\"overlayOrigin\" cdkOverlayOrigin #selectOrigin=\"cdkOverlayOrigin\"></div>\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"selectOrigin\"\n [cdkConnectedOverlayOpen]=\"!!(overlayOpen$ | async)\"\n [cdkConnectedOverlayWidth]=\"selectOrigin.elementRef.nativeElement.offsetWidth\"\n (positionChange)=\"onPositionChange($event)\"\n >\n <div class=\"overlayDropdown\" [ngClass]=\"{ top: isTopDropdown }\">\n <ng-container [ngTemplateOutlet]=\"dropdown\"></ng-container>\n </div>\n </ng-template>\n</ng-container>\n\n<ng-template #dropdown>\n <ul\n class=\"options {{ padding }}Padding lxThinScrollbar\"\n #keyboardSelectContainer\n infinite-scroll\n [scrollWindow]=\"false\"\n [fromRoot]=\"true\"\n [ngClass]=\"{ truncateOptions: truncateOptions }\"\n (scrolled)=\"onScroll()\"\n >\n <li\n *ngIf=\"newOptionLabel && isNewItem\"\n tabindex=\"-1\"\n lxSelectableItem\n [scrollInContainer]=\"keyboardSelectContainer\"\n #item\n (click)=\"onNewItemSelected()\"\n (select)=\"onNewItemSelected()\"\n [class.selected]=\"isItemSelected(item, (selectedItem$ | async)?.element)\"\n class=\"option keyboardSelectable onTheFlyOption\"\n [attr.aria-label]=\"newOptionLabel\"\n >\n <span class=\"newEntryContent\">\n {{ newOptionLabel }}\n </span>\n <lx-badge class=\"lx-margin-left\" size=\"small\" [content]=\"'common.new' | translate | uppercase\"></lx-badge>\n </li>\n <li\n *ngIf=\"showCreateNewOption\"\n tabindex=\"-1\"\n lxSelectableItem\n [scrollInContainer]=\"keyboardSelectContainer\"\n #item\n (click)=\"onCreateNewOptionSelected()\"\n (select)=\"onCreateNewOptionSelected()\"\n [class.selected]=\"isItemSelected(item, (selectedItem$ | async)?.element)\"\n class=\"option keyboardSelectable newEntryOption\"\n >\n <span class=\"newEntryContent\">\n <ng-container *ngIf=\"createNewOptionTemplateRef; else defaultNewOption\">\n <ng-container *ngTemplateOutlet=\"createNewOptionTemplateRef\"></ng-container>\n </ng-container>\n <ng-template #defaultNewOption>\n <span>\n {{ NAME + '.new' | translate }}\n </span>\n </ng-template>\n </span>\n </li>\n <li\n *ngIf=\"descriptionTemplateRef\"\n tabindex=\"-1\"\n lxSelectableItem\n [scrollInContainer]=\"keyboardSelectContainer\"\n #item\n class=\"option description disabledItem\"\n >\n <span class=\"descriptionContent\">\n <ng-container *ngTemplateOutlet=\"descriptionTemplateRef\"></ng-container>\n </span>\n </li>\n <li\n *ngIf=\"options?.length === 0 && !newOptionLabel && !loading\"\n tabindex=\"-1\"\n lxSelectableItem\n [scrollInContainer]=\"keyboardSelectContainer\"\n #item\n [class.selected]=\"isItemSelected(item, (selectedItem$ | async)?.element)\"\n class=\"option keyboardSelectable noOptionsAvailable\"\n [attr.aria-label]=\"NAME + '.noResults' | translate\"\n >\n {{ NAME + '.noResults' | translate }}\n </li>\n <li\n *ngIf=\"placeholder\"\n tabindex=\"-1\"\n class=\"option keyboardSelectable clearSelection\"\n lxSelectableItem\n [scrollInContainer]=\"keyboardSelectContainer\"\n #item\n (click)=\"selectOption(null)\"\n (select)=\"selectOption(null)\"\n [class.selected]=\"isItemSelected(item, (selectedItem$ | async)?.element)\"\n [attr.aria-label]=\"placeholder\"\n >\n {{ placeholder }}\n </li>\n <li\n *ngFor=\"let option of options; let index = index; trackBy: trackByProp(itemKey)\"\n tabindex=\"-1\"\n lxSelectableItem\n [scrollInContainer]=\"keyboardSelectContainer\"\n #item\n class=\"option keyboardSelectable\"\n (click)=\"selectOption(option)\"\n (select)=\"selectOption(option)\"\n [class.selected]=\"isItemSelected(item, (selectedItem$ | async)?.element)\"\n [class.initiallySelected]=\"index === initiallySelectedIndex\"\n [class.disabledItem]=\"itemKey ? !!disabledOptions[option[itemKey]] : false\"\n [attr.aria-label]=\"labelKey ? option[labelKey] : option\"\n >\n <ng-container *ngIf=\"optionTemplateRef; else simpleStringDisplay\">\n <ng-container *ngTemplateOutlet=\"optionTemplateRef; context: { $implicit: option, index: index }\"></ng-container>\n </ng-container>\n <ng-template #simpleStringDisplay>\n <span>\n {{ labelKey ? option[labelKey] : option }}\n </span>\n </ng-template>\n </li>\n <lx-spinner *ngIf=\"loading\" [fadeBackground]=\"true\"></lx-spinner>\n </ul>\n</ng-template>\n", styles: [":host(.noOptionPadding) .options .option{padding:0}.overlayDropdown{width:100%;background:#fff;border-radius:3px;border-left:solid 1px #e1e5eb;border-right:solid 1px #e1e5eb;margin:0 -1px;width:calc(100% + 2px)}.overlayDropdown:not(.top){box-shadow:0 6px 6px #21252933;border-top:0;border-bottom:solid 1px #e1e5eb;border-top-left-radius:0;border-top-right-radius:0}.overlayDropdown.top{box-shadow:0 -4px 6px #21252933;border-top:solid 1px #e1e5eb;border-bottom:0;border-bottom-left-radius:0;border-bottom-right-radius:0}.truncateOptions li{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.defaultPadding .newEntryOption,.defaultPadding .onTheFlyOption,.defaultPadding .noOptionsAvailable{padding:4px 12px!important}.narrowPadding .newEntryOption,.narrowPadding .onTheFlyOption,.narrowPadding .noOptionsAvailable{padding:4px!important}.options{list-style:none;margin:0;padding:0;overflow-y:auto;max-height:250px}.options.defaultPadding .option{padding:4px 12px}.options.narrowPadding .option{padding:4px}.optionSearch{padding:2px}.option{cursor:pointer;display:block}.option:hover:not(.disabledItem){background-color:#e1e5eb!important}.option.selected{background:#eaedf1}.option.initiallySelected{color:var(--lx-primarybutton-backgroundcolor)}.option.disabledItem{cursor:default;opacity:.5}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.InfiniteScrollDirective, selector: "[infiniteScroll], [infinite-scroll], [data-infinite-scroll]", inputs: ["infiniteScrollDistance", "infiniteScrollUpDistance", "infiniteScrollThrottle", "infiniteScrollDisabled", "infiniteScrollContainer", "scrollWindow", "immediateCheck", "horizontal", "alwaysCallback", "fromRoot"], outputs: ["scrolled", "scrolledUp"] }, { kind: "directive", type: i3.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i3.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: i4.BadgeComponent, selector: "lx-badge", inputs: ["content", "size", "color"] }, { kind: "component", type: i5.SpinnerComponent, selector: "lx-spinner", inputs: ["fadeBackground"] }, { kind: "directive", type: i6.SelectableItemDirective, selector: "[lxSelectableItem]", inputs: ["scrollInContainer", "lxSelectableItem"], outputs: ["select"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.UpperCasePipe, name: "uppercase" }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
65
82
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: BasicDropdownComponent, decorators: [{
|
|
66
83
|
type: Component,
|
|
67
|
-
args: [{ selector: 'lx-basic-dropdown', changeDetection: ChangeDetectionStrategy.OnPush, template: "<
|
|
68
|
-
}], propDecorators: { options: [{
|
|
84
|
+
args: [{ selector: 'lx-basic-dropdown', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container [ngTemplateOutlet]=\"dropdown\" *ngIf=\"!overlayPositioning\"></ng-container>\n<ng-container *ngIf=\"overlayPositioning\">\n <div class=\"overlayOrigin\" cdkOverlayOrigin #selectOrigin=\"cdkOverlayOrigin\"></div>\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"selectOrigin\"\n [cdkConnectedOverlayOpen]=\"!!(overlayOpen$ | async)\"\n [cdkConnectedOverlayWidth]=\"selectOrigin.elementRef.nativeElement.offsetWidth\"\n (positionChange)=\"onPositionChange($event)\"\n >\n <div class=\"overlayDropdown\" [ngClass]=\"{ top: isTopDropdown }\">\n <ng-container [ngTemplateOutlet]=\"dropdown\"></ng-container>\n </div>\n </ng-template>\n</ng-container>\n\n<ng-template #dropdown>\n <ul\n class=\"options {{ padding }}Padding lxThinScrollbar\"\n #keyboardSelectContainer\n infinite-scroll\n [scrollWindow]=\"false\"\n [fromRoot]=\"true\"\n [ngClass]=\"{ truncateOptions: truncateOptions }\"\n (scrolled)=\"onScroll()\"\n >\n <li\n *ngIf=\"newOptionLabel && isNewItem\"\n tabindex=\"-1\"\n lxSelectableItem\n [scrollInContainer]=\"keyboardSelectContainer\"\n #item\n (click)=\"onNewItemSelected()\"\n (select)=\"onNewItemSelected()\"\n [class.selected]=\"isItemSelected(item, (selectedItem$ | async)?.element)\"\n class=\"option keyboardSelectable onTheFlyOption\"\n [attr.aria-label]=\"newOptionLabel\"\n >\n <span class=\"newEntryContent\">\n {{ newOptionLabel }}\n </span>\n <lx-badge class=\"lx-margin-left\" size=\"small\" [content]=\"'common.new' | translate | uppercase\"></lx-badge>\n </li>\n <li\n *ngIf=\"showCreateNewOption\"\n tabindex=\"-1\"\n lxSelectableItem\n [scrollInContainer]=\"keyboardSelectContainer\"\n #item\n (click)=\"onCreateNewOptionSelected()\"\n (select)=\"onCreateNewOptionSelected()\"\n [class.selected]=\"isItemSelected(item, (selectedItem$ | async)?.element)\"\n class=\"option keyboardSelectable newEntryOption\"\n >\n <span class=\"newEntryContent\">\n <ng-container *ngIf=\"createNewOptionTemplateRef; else defaultNewOption\">\n <ng-container *ngTemplateOutlet=\"createNewOptionTemplateRef\"></ng-container>\n </ng-container>\n <ng-template #defaultNewOption>\n <span>\n {{ NAME + '.new' | translate }}\n </span>\n </ng-template>\n </span>\n </li>\n <li\n *ngIf=\"descriptionTemplateRef\"\n tabindex=\"-1\"\n lxSelectableItem\n [scrollInContainer]=\"keyboardSelectContainer\"\n #item\n class=\"option description disabledItem\"\n >\n <span class=\"descriptionContent\">\n <ng-container *ngTemplateOutlet=\"descriptionTemplateRef\"></ng-container>\n </span>\n </li>\n <li\n *ngIf=\"options?.length === 0 && !newOptionLabel && !loading\"\n tabindex=\"-1\"\n lxSelectableItem\n [scrollInContainer]=\"keyboardSelectContainer\"\n #item\n [class.selected]=\"isItemSelected(item, (selectedItem$ | async)?.element)\"\n class=\"option keyboardSelectable noOptionsAvailable\"\n [attr.aria-label]=\"NAME + '.noResults' | translate\"\n >\n {{ NAME + '.noResults' | translate }}\n </li>\n <li\n *ngIf=\"placeholder\"\n tabindex=\"-1\"\n class=\"option keyboardSelectable clearSelection\"\n lxSelectableItem\n [scrollInContainer]=\"keyboardSelectContainer\"\n #item\n (click)=\"selectOption(null)\"\n (select)=\"selectOption(null)\"\n [class.selected]=\"isItemSelected(item, (selectedItem$ | async)?.element)\"\n [attr.aria-label]=\"placeholder\"\n >\n {{ placeholder }}\n </li>\n <li\n *ngFor=\"let option of options; let index = index; trackBy: trackByProp(itemKey)\"\n tabindex=\"-1\"\n lxSelectableItem\n [scrollInContainer]=\"keyboardSelectContainer\"\n #item\n class=\"option keyboardSelectable\"\n (click)=\"selectOption(option)\"\n (select)=\"selectOption(option)\"\n [class.selected]=\"isItemSelected(item, (selectedItem$ | async)?.element)\"\n [class.initiallySelected]=\"index === initiallySelectedIndex\"\n [class.disabledItem]=\"itemKey ? !!disabledOptions[option[itemKey]] : false\"\n [attr.aria-label]=\"labelKey ? option[labelKey] : option\"\n >\n <ng-container *ngIf=\"optionTemplateRef; else simpleStringDisplay\">\n <ng-container *ngTemplateOutlet=\"optionTemplateRef; context: { $implicit: option, index: index }\"></ng-container>\n </ng-container>\n <ng-template #simpleStringDisplay>\n <span>\n {{ labelKey ? option[labelKey] : option }}\n </span>\n </ng-template>\n </li>\n <lx-spinner *ngIf=\"loading\" [fadeBackground]=\"true\"></lx-spinner>\n </ul>\n</ng-template>\n", styles: [":host(.noOptionPadding) .options .option{padding:0}.overlayDropdown{width:100%;background:#fff;border-radius:3px;border-left:solid 1px #e1e5eb;border-right:solid 1px #e1e5eb;margin:0 -1px;width:calc(100% + 2px)}.overlayDropdown:not(.top){box-shadow:0 6px 6px #21252933;border-top:0;border-bottom:solid 1px #e1e5eb;border-top-left-radius:0;border-top-right-radius:0}.overlayDropdown.top{box-shadow:0 -4px 6px #21252933;border-top:solid 1px #e1e5eb;border-bottom:0;border-bottom-left-radius:0;border-bottom-right-radius:0}.truncateOptions li{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.defaultPadding .newEntryOption,.defaultPadding .onTheFlyOption,.defaultPadding .noOptionsAvailable{padding:4px 12px!important}.narrowPadding .newEntryOption,.narrowPadding .onTheFlyOption,.narrowPadding .noOptionsAvailable{padding:4px!important}.options{list-style:none;margin:0;padding:0;overflow-y:auto;max-height:250px}.options.defaultPadding .option{padding:4px 12px}.options.narrowPadding .option{padding:4px}.optionSearch{padding:2px}.option{cursor:pointer;display:block}.option:hover:not(.disabledItem){background-color:#e1e5eb!important}.option.selected{background:#eaedf1}.option.initiallySelected{color:var(--lx-primarybutton-backgroundcolor)}.option.disabledItem{cursor:default;opacity:.5}\n"] }]
|
|
85
|
+
}], ctorParameters: function () { return []; }, propDecorators: { options: [{
|
|
69
86
|
type: Input
|
|
70
87
|
}], initiallySelectedIndex: [{
|
|
71
88
|
type: Input
|
|
@@ -85,6 +102,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImpor
|
|
|
85
102
|
type: Input
|
|
86
103
|
}], disabledOptions: [{
|
|
87
104
|
type: Input
|
|
105
|
+
}], overlayPositioning: [{
|
|
106
|
+
type: Input
|
|
107
|
+
}], truncateOptions: [{
|
|
108
|
+
type: Input
|
|
88
109
|
}], onItemSelected: [{
|
|
89
110
|
type: Output
|
|
90
111
|
}], triggerRequestForMoreEntries: [{
|
|
@@ -102,5 +123,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImpor
|
|
|
102
123
|
}], descriptionTemplateRef: [{
|
|
103
124
|
type: ContentChild,
|
|
104
125
|
args: ['descriptionTemplateRef']
|
|
126
|
+
}], selectOrigin: [{
|
|
127
|
+
type: ViewChild,
|
|
128
|
+
args: ['selectOrigin', { static: false }]
|
|
105
129
|
}] } });
|
|
106
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaWMtZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3NyYy9saWIvZm9ybXMtdWkvY29tcG9uZW50cy9iYXNpYy1kcm9wZG93bi9iYXNpYy1kcm9wZG93bi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvc3JjL2xpYi9mb3Jtcy11aS9jb21wb25lbnRzL2Jhc2ljLWRyb3Bkb3duL2Jhc2ljLWRyb3Bkb3duLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBZSxNQUFNLGVBQWUsQ0FBQztBQUMxSSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFbkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7O0FBUXZFLE1BQU0sT0FBTyxzQkFBdUIsU0FBUSx1QkFBdUI7SUFObkU7O1FBa0JXLFNBQUksR0FBRyx3QkFBd0IsQ0FBQztRQUVoQyxZQUFPLEdBQVUsRUFBRSxDQUFDO1FBQ3BCLDJCQUFzQixHQUFHLENBQUMsQ0FBQyxDQUFDO1FBSTVCLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFFekIsWUFBTyxHQUF5QixTQUFTLENBQUM7UUFDMUMsd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBRTVCLG9CQUFlLEdBQStCLEVBQUUsQ0FBQztRQUVoRCxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDekMsaUNBQTRCLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUN4RCwyQkFBc0IsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ3BELDRCQUF1QixHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7S0FvQzlEO0lBaEVRLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBWSxFQUFFLElBQVksRUFBRSxHQUFZO1FBQzlELElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLElBQVMsRUFBRSxFQUFFO1lBQ3hDLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDckMsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2hELENBQUMsQ0FBQztRQUNGLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQXlCRCxZQUFZLENBQUMsTUFBVztRQUN0QixJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUM1QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNsQzthQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRTtZQUN0RCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNsQztJQUNILENBQUM7SUFFRCxJQUFXLFNBQVM7UUFDbEIsT0FBTyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM1RixDQUFDO0lBRU0sV0FBVyxDQUFDLElBQWE7UUFDOUIsT0FBTyxDQUFDLEtBQWEsRUFBRSxJQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFTSxRQUFRO1FBQ2IsSUFBSSxDQUFDLDRCQUE0QixDQUFDLElBQUksRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFFTSxpQkFBaUI7UUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDakIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4QixJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUN2RDtJQUNILENBQUM7SUFFTSx5QkFBeUI7UUFDOUIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3RDLENBQUM7O21IQWhFVSxzQkFBc0I7dUdBQXRCLHNCQUFzQixpN0JDWG5DLHFsSEEwR0E7MkZEL0ZhLHNCQUFzQjtrQkFObEMsU0FBUzsrQkFDRSxtQkFBbUIsbUJBR1osdUJBQXVCLENBQUMsTUFBTTs4QkFnQnRDLE9BQU87c0JBQWYsS0FBSztnQkFDRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUVHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBRUksY0FBYztzQkFBdkIsTUFBTTtnQkFDRyw0QkFBNEI7c0JBQXJDLE1BQU07Z0JBQ0csc0JBQXNCO3NCQUEvQixNQUFNO2dCQUNHLHVCQUF1QjtzQkFBaEMsTUFBTTtnQkFFeUIsaUJBQWlCO3NCQUFoRCxZQUFZO3VCQUFDLGdCQUFnQjtnQkFDVywwQkFBMEI7c0JBQWxFLFlBQVk7dUJBQUMseUJBQXlCO2dCQUNDLHNCQUFzQjtzQkFBN0QsWUFBWTt1QkFBQyx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzRXF1YWwsIHNvbWUsIHRvTG93ZXIgfSBmcm9tICdsb2Rhc2gvZnAnO1xuaW1wb3J0IHsgU2luZ2xlU2VsZWN0UGFkZGluZyB9IGZyb20gJy4uLy4uL21vZGVscy9zaW5nbGUtc2VsZWN0LXBhZGRpbmcuaW50ZXJmYWNlJztcbmltcG9ydCB7IEtleWJvYXJkU2VsZWN0RGlyZWN0aXZlIH0gZnJvbSAnLi4va2V5Ym9hcmQtc2VsZWN0LmRpcmVjdGl2ZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2x4LWJhc2ljLWRyb3Bkb3duJyxcbiAgdGVtcGxhdGVVcmw6ICdiYXNpYy1kcm9wZG93bi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWydiYXNpYy1kcm9wZG93bi5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBCYXNpY0Ryb3Bkb3duQ29tcG9uZW50IGV4dGVuZHMgS2V5Ym9hcmRTZWxlY3REaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgcHVibGljIHN0YXRpYyBpc05ld0l0ZW0oaXRlbXM6IGFueVtdLCB0ZXJtOiBzdHJpbmcsIGtleT86IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghdGVybSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBpc0VxdWFsSWdub3JpbmdDYXNlID0gKGl0ZW06IGFueSkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBrZXkgPyBpdGVtW2tleV0gOiBpdGVtO1xuICAgICAgcmV0dXJuIGlzRXF1YWwodG9Mb3dlcih2YWx1ZSksIHRvTG93ZXIodGVybSkpO1xuICAgIH07XG4gICAgcmV0dXJuICFzb21lKGlzRXF1YWxJZ25vcmluZ0Nhc2UsIGl0ZW1zKTtcbiAgfVxuXG4gIHJlYWRvbmx5IE5BTUUgPSAnQmFzaWNEcm9wZG93bkNvbXBvbmVudCc7XG5cbiAgQElucHV0KCkgb3B0aW9uczogYW55W10gPSBbXTtcbiAgQElucHV0KCkgaW5pdGlhbGx5U2VsZWN0ZWRJbmRleCA9IC0xO1xuICBASW5wdXQoKSBsYWJlbEtleT86IHN0cmluZztcbiAgQElucHV0KCkgaXRlbUtleT86IHN0cmluZztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgbmV3T3B0aW9uTGFiZWwhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHBhZGRpbmc/OiBTaW5nbGVTZWxlY3RQYWRkaW5nID0gJ2RlZmF1bHQnO1xuICBASW5wdXQoKSBzaG93Q3JlYXRlTmV3T3B0aW9uID0gZmFsc2U7XG5cbiAgQElucHV0KCkgZGlzYWJsZWRPcHRpb25zOiB7IFtpdGVtS2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuXG4gIEBPdXRwdXQoKSBvbkl0ZW1TZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgdHJpZ2dlclJlcXVlc3RGb3JNb3JlRW50cmllcyA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIG5ld09wdGlvbkxhYmVsU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIGNyZWF0ZU5ld09wdGlvblNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIEBDb250ZW50Q2hpbGQoJ29wdGlvblRlbXBsYXRlJykgb3B0aW9uVGVtcGxhdGVSZWYhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAQ29udGVudENoaWxkKCdjcmVhdGVOZXdPcHRpb25UZW1wbGF0ZScpIGNyZWF0ZU5ld09wdGlvblRlbXBsYXRlUmVmITogVGVtcGxhdGVSZWY8YW55PjtcbiAgQENvbnRlbnRDaGlsZCgnZGVzY3JpcHRpb25UZW1wbGF0ZVJlZicpIGRlc2NyaXB0aW9uVGVtcGxhdGVSZWYhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIHNlbGVjdE9wdGlvbihvcHRpb246IGFueSkge1xuICAgIGlmICghb3B0aW9uIHx8ICF0aGlzLml0ZW1LZXkpIHtcbiAgICAgIHRoaXMub25JdGVtU2VsZWN0ZWQuZW1pdChvcHRpb24pO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuZGlzYWJsZWRPcHRpb25zW29wdGlvblt0aGlzLml0ZW1LZXldXSkge1xuICAgICAgdGhpcy5vbkl0ZW1TZWxlY3RlZC5lbWl0KG9wdGlvbik7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBpc05ld0l0ZW0oKSB7XG4gICAgcmV0dXJuIEJhc2ljRHJvcGRvd25Db21wb25lbnQuaXNOZXdJdGVtKHRoaXMub3B0aW9ucywgdGhpcy5uZXdPcHRpb25MYWJlbCwgdGhpcy5sYWJlbEtleSk7XG4gIH1cblxuICBwdWJsaWMgdHJhY2tCeVByb3AocHJvcD86IHN0cmluZykge1xuICAgIHJldHVybiAoaW5kZXg6IG51bWJlciwgcGlsbDogYW55KSA9PiAocHJvcCA/IHBpbGxbcHJvcF0gOiBpbmRleCk7XG4gIH1cblxuICBwdWJsaWMgb25TY3JvbGwoKSB7XG4gICAgdGhpcy50cmlnZ2VyUmVxdWVzdEZvck1vcmVFbnRyaWVzLmVtaXQoKTtcbiAgfVxuXG4gIHB1YmxpYyBvbk5ld0l0ZW1TZWxlY3RlZCgpIHtcbiAgICBpZiAoIXRoaXMubG9hZGluZykge1xuICAgICAgdGhpcy5zZWxlY3RPcHRpb24obnVsbCk7XG4gICAgICB0aGlzLm5ld09wdGlvbkxhYmVsU2VsZWN0ZWQuZW1pdCh0aGlzLm5ld09wdGlvbkxhYmVsKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25DcmVhdGVOZXdPcHRpb25TZWxlY3RlZCgpIHtcbiAgICB0aGlzLmNyZWF0ZU5ld09wdGlvblNlbGVjdGVkLmVtaXQoKTtcbiAgfVxufVxuIiwiPHVsXG4gIGNsYXNzPVwib3B0aW9ucyB7eyBwYWRkaW5nIH19UGFkZGluZyBseFRoaW5TY3JvbGxiYXJcIlxuICAja2V5Ym9hcmRTZWxlY3RDb250YWluZXJcbiAgaW5maW5pdGUtc2Nyb2xsXG4gIFtzY3JvbGxXaW5kb3ddPVwiZmFsc2VcIlxuICBbZnJvbVJvb3RdPVwidHJ1ZVwiXG4gIChzY3JvbGxlZCk9XCJvblNjcm9sbCgpXCJcbj5cbiAgPGxpXG4gICAgKm5nSWY9XCJuZXdPcHRpb25MYWJlbCAmJiBpc05ld0l0ZW1cIlxuICAgIHRhYmluZGV4PVwiLTFcIlxuICAgIGx4U2VsZWN0YWJsZUl0ZW1cbiAgICBbc2Nyb2xsSW5Db250YWluZXJdPVwia2V5Ym9hcmRTZWxlY3RDb250YWluZXJcIlxuICAgICNpdGVtXG4gICAgKGNsaWNrKT1cIm9uTmV3SXRlbVNlbGVjdGVkKClcIlxuICAgIChzZWxlY3QpPVwib25OZXdJdGVtU2VsZWN0ZWQoKVwiXG4gICAgW2NsYXNzLnNlbGVjdGVkXT1cImlzSXRlbVNlbGVjdGVkKGl0ZW0sIChzZWxlY3RlZEl0ZW0kIHwgYXN5bmMpPy5lbGVtZW50KVwiXG4gICAgY2xhc3M9XCJvcHRpb24ga2V5Ym9hcmRTZWxlY3RhYmxlIG9uVGhlRmx5T3B0aW9uXCJcbiAgPlxuICAgIDxzcGFuIGNsYXNzPVwibmV3RW50cnlDb250ZW50XCI+XG4gICAgICB7eyBuZXdPcHRpb25MYWJlbCB9fVxuICAgIDwvc3Bhbj5cbiAgICA8bHgtYmFkZ2UgY2xhc3M9XCJseC1tYXJnaW4tbGVmdFwiIHNpemU9XCJzbWFsbFwiIFtjb250ZW50XT1cIidjb21tb24ubmV3JyB8IHRyYW5zbGF0ZSB8IHVwcGVyY2FzZVwiPjwvbHgtYmFkZ2U+XG4gIDwvbGk+XG4gIDxsaVxuICAgICpuZ0lmPVwic2hvd0NyZWF0ZU5ld09wdGlvblwiXG4gICAgdGFiaW5kZXg9XCItMVwiXG4gICAgbHhTZWxlY3RhYmxlSXRlbVxuICAgIFtzY3JvbGxJbkNvbnRhaW5lcl09XCJrZXlib2FyZFNlbGVjdENvbnRhaW5lclwiXG4gICAgI2l0ZW1cbiAgICAoY2xpY2spPVwib25DcmVhdGVOZXdPcHRpb25TZWxlY3RlZCgpXCJcbiAgICAoc2VsZWN0KT1cIm9uQ3JlYXRlTmV3T3B0aW9uU2VsZWN0ZWQoKVwiXG4gICAgW2NsYXNzLnNlbGVjdGVkXT1cImlzSXRlbVNlbGVjdGVkKGl0ZW0sIChzZWxlY3RlZEl0ZW0kIHwgYXN5bmMpPy5lbGVtZW50KVwiXG4gICAgY2xhc3M9XCJvcHRpb24ga2V5Ym9hcmRTZWxlY3RhYmxlIG5ld0VudHJ5T3B0aW9uXCJcbiAgPlxuICAgIDxzcGFuIGNsYXNzPVwibmV3RW50cnlDb250ZW50XCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3JlYXRlTmV3T3B0aW9uVGVtcGxhdGVSZWY7IGVsc2UgZGVmYXVsdE5ld09wdGlvblwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3JlYXRlTmV3T3B0aW9uVGVtcGxhdGVSZWZcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0TmV3T3B0aW9uPlxuICAgICAgICA8c3Bhbj5cbiAgICAgICAgICB7eyBOQU1FICsgJy5uZXcnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9zcGFuPlxuICA8L2xpPlxuICA8bGlcbiAgICAqbmdJZj1cImRlc2NyaXB0aW9uVGVtcGxhdGVSZWZcIlxuICAgIHRhYmluZGV4PVwiLTFcIlxuICAgIGx4U2VsZWN0YWJsZUl0ZW1cbiAgICBbc2Nyb2xsSW5Db250YWluZXJdPVwia2V5Ym9hcmRTZWxlY3RDb250YWluZXJcIlxuICAgICNpdGVtXG4gICAgY2xhc3M9XCJvcHRpb24gZGVzY3JpcHRpb24gZGlzYWJsZWRJdGVtXCJcbiAgPlxuICAgIDxzcGFuIGNsYXNzPVwiZGVzY3JpcHRpb25Db250ZW50XCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZGVzY3JpcHRpb25UZW1wbGF0ZVJlZlwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvc3Bhbj5cbiAgPC9saT5cbiAgPGxpXG4gICAgKm5nSWY9XCJvcHRpb25zPy5sZW5ndGggPT09IDAgJiYgIW5ld09wdGlvbkxhYmVsICYmICFsb2FkaW5nXCJcbiAgICB0YWJpbmRleD1cIi0xXCJcbiAgICBseFNlbGVjdGFibGVJdGVtXG4gICAgW3Njcm9sbEluQ29udGFpbmVyXT1cImtleWJvYXJkU2VsZWN0Q29udGFpbmVyXCJcbiAgICAjaXRlbVxuICAgIFtjbGFzcy5zZWxlY3RlZF09XCJpc0l0ZW1TZWxlY3RlZChpdGVtLCAoc2VsZWN0ZWRJdGVtJCB8IGFzeW5jKT8uZWxlbWVudClcIlxuICAgIGNsYXNzPVwib3B0aW9uIGtleWJvYXJkU2VsZWN0YWJsZSBub09wdGlvbnNBdmFpbGFibGVcIlxuICA+XG4gICAge3sgTkFNRSArICcubm9SZXN1bHRzJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2xpPlxuICA8bGlcbiAgICAqbmdJZj1cInBsYWNlaG9sZGVyXCJcbiAgICB0YWJpbmRleD1cIi0xXCJcbiAgICBjbGFzcz1cIm9wdGlvbiBrZXlib2FyZFNlbGVjdGFibGUgY2xlYXJTZWxlY3Rpb25cIlxuICAgIGx4U2VsZWN0YWJsZUl0ZW1cbiAgICBbc2Nyb2xsSW5Db250YWluZXJdPVwia2V5Ym9hcmRTZWxlY3RDb250YWluZXJcIlxuICAgICNpdGVtXG4gICAgKGNsaWNrKT1cInNlbGVjdE9wdGlvbihudWxsKVwiXG4gICAgKHNlbGVjdCk9XCJzZWxlY3RPcHRpb24obnVsbClcIlxuICAgIFtjbGFzcy5zZWxlY3RlZF09XCJpc0l0ZW1TZWxlY3RlZChpdGVtLCAoc2VsZWN0ZWRJdGVtJCB8IGFzeW5jKT8uZWxlbWVudClcIlxuICA+XG4gICAge3sgcGxhY2Vob2xkZXIgfX1cbiAgPC9saT5cbiAgPGxpXG4gICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBvcHRpb25zOyBsZXQgaW5kZXggPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeVByb3AoaXRlbUtleSlcIlxuICAgIHRhYmluZGV4PVwiLTFcIlxuICAgIGx4U2VsZWN0YWJsZUl0ZW1cbiAgICBbc2Nyb2xsSW5Db250YWluZXJdPVwia2V5Ym9hcmRTZWxlY3RDb250YWluZXJcIlxuICAgICNpdGVtXG4gICAgY2xhc3M9XCJvcHRpb24ga2V5Ym9hcmRTZWxlY3RhYmxlXCJcbiAgICAoY2xpY2spPVwic2VsZWN0T3B0aW9uKG9wdGlvbilcIlxuICAgIChzZWxlY3QpPVwic2VsZWN0T3B0aW9uKG9wdGlvbilcIlxuICAgIFtjbGFzcy5zZWxlY3RlZF09XCJpc0l0ZW1TZWxlY3RlZChpdGVtLCAoc2VsZWN0ZWRJdGVtJCB8IGFzeW5jKT8uZWxlbWVudClcIlxuICAgIFtjbGFzcy5pbml0aWFsbHlTZWxlY3RlZF09XCJpbmRleCA9PT0gaW5pdGlhbGx5U2VsZWN0ZWRJbmRleFwiXG4gICAgW2NsYXNzLmRpc2FibGVkSXRlbV09XCJpdGVtS2V5ID8gISFkaXNhYmxlZE9wdGlvbnNbb3B0aW9uW2l0ZW1LZXldXSA6IGZhbHNlXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcHRpb25UZW1wbGF0ZVJlZjsgZWxzZSBzaW1wbGVTdHJpbmdEaXNwbGF5XCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwib3B0aW9uVGVtcGxhdGVSZWY7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBvcHRpb24sIGluZGV4OiBpbmRleCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNzaW1wbGVTdHJpbmdEaXNwbGF5PlxuICAgICAgPHNwYW4+XG4gICAgICAgIHt7IGxhYmVsS2V5ID8gb3B0aW9uW2xhYmVsS2V5XSA6IG9wdGlvbiB9fVxuICAgICAgPC9zcGFuPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbGk+XG4gIDxseC1zcGlubmVyICpuZ0lmPVwibG9hZGluZ1wiIFtmYWRlQmFja2dyb3VuZF09XCJ0cnVlXCI+PC9seC1zcGlubmVyPlxuPC91bD5cbiJdfQ==
|
|
130
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaWMtZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3NyYy9saWIvZm9ybXMtdWkvY29tcG9uZW50cy9iYXNpYy1kcm9wZG93bi9iYXNpYy1kcm9wZG93bi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvc3JjL2xpYi9mb3Jtcy11aS9jb21wb25lbnRzL2Jhc2ljLWRyb3Bkb3duL2Jhc2ljLWRyb3Bkb3duLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFHTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFFTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU3RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7Ozs7O0FBUXZFLE1BQU0sT0FBTyxzQkFBdUIsU0FBUSx1QkFBdUI7SUF5Q2pFO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUF6Q0YscUJBQWdCLEdBQUcsSUFBSSxhQUFhLENBQVUsQ0FBQyxDQUFDLENBQUM7UUFZaEQsU0FBSSxHQUFHLHdCQUF3QixDQUFDO1FBRWhDLFlBQU8sR0FBVSxFQUFFLENBQUM7UUFDcEIsMkJBQXNCLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFJNUIsWUFBTyxHQUFZLEtBQUssQ0FBQztRQUV6QixZQUFPLEdBQXlCLFNBQVMsQ0FBQztRQUMxQyx3QkFBbUIsR0FBRyxLQUFLLENBQUM7UUFFNUIsb0JBQWUsR0FBK0IsRUFBRSxDQUFDO1FBQ2pELHVCQUFrQixHQUFHLEtBQUssQ0FBQztRQUMzQixvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUV2QixtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDekMsaUNBQTRCLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUN4RCwyQkFBc0IsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ3BELDRCQUF1QixHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFNN0Qsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFDdEIsaUJBQVksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO0lBSTdHLENBQUM7SUF6Q00sTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFZLEVBQUUsSUFBWSxFQUFFLEdBQVk7UUFDOUQsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNULE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxNQUFNLG1CQUFtQixHQUFHLENBQUMsSUFBUyxFQUFFLEVBQUU7WUFDeEMsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNyQyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDO1FBQ0YsT0FBTyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBa0NELGtCQUFrQjtRQUNoQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2hELGlEQUFpRDtZQUNqRCx5REFBeUQ7WUFDekQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDcEY7SUFDSCxDQUFDO0lBRUQsWUFBWSxDQUFDLE1BQVc7UUFDdEIsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDNUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDbEM7YUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUU7WUFDdEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDbEM7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBcUM7UUFDcEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sS0FBSyxLQUFLLENBQUM7SUFDOUQsQ0FBQztJQUVELElBQVcsU0FBUztRQUNsQixPQUFPLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzVGLENBQUM7SUFFTSxXQUFXLENBQUMsSUFBYTtRQUM5QixPQUFPLENBQUMsS0FBYSxFQUFFLElBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVNLFFBQVE7UUFDYixJQUFJLENBQUMsNEJBQTRCLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVNLGlCQUFpQjtRQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNqQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQ3ZEO0lBQ0gsQ0FBQztJQUVNLHlCQUF5QjtRQUM5QixJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdEMsQ0FBQzs7bUhBdEZVLHNCQUFzQjt1R0FBdEIsc0JBQXNCLDZtQ0N4Qm5DLHd5SkFpSUE7MkZEekdhLHNCQUFzQjtrQkFObEMsU0FBUzsrQkFDRSxtQkFBbUIsbUJBR1osdUJBQXVCLENBQUMsTUFBTTswRUFpQnRDLE9BQU87c0JBQWYsS0FBSztnQkFDRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUVHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBRUksY0FBYztzQkFBdkIsTUFBTTtnQkFDRyw0QkFBNEI7c0JBQXJDLE1BQU07Z0JBQ0csc0JBQXNCO3NCQUEvQixNQUFNO2dCQUNHLHVCQUF1QjtzQkFBaEMsTUFBTTtnQkFFeUIsaUJBQWlCO3NCQUFoRCxZQUFZO3VCQUFDLGdCQUFnQjtnQkFDVywwQkFBMEI7c0JBQWxFLFlBQVk7dUJBQUMseUJBQXlCO2dCQUNDLHNCQUFzQjtzQkFBN0QsWUFBWTt1QkFBQyx3QkFBd0I7Z0JBQ1EsWUFBWTtzQkFBekQsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrT3ZlcmxheU9yaWdpbiwgQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uQ2hhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpc0VxdWFsLCBzb21lLCB0b0xvd2VyIH0gZnJvbSAnbG9kYXNoL2ZwJztcbmltcG9ydCB7IGRlbGF5LCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgUmVwbGF5U3ViamVjdCwgc3RhcnRXaXRoIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBTaW5nbGVTZWxlY3RQYWRkaW5nIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3NpbmdsZS1zZWxlY3QtcGFkZGluZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgS2V5Ym9hcmRTZWxlY3REaXJlY3RpdmUgfSBmcm9tICcuLi9rZXlib2FyZC1zZWxlY3QuZGlyZWN0aXZlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbHgtYmFzaWMtZHJvcGRvd24nLFxuICB0ZW1wbGF0ZVVybDogJ2Jhc2ljLWRyb3Bkb3duLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJ2Jhc2ljLWRyb3Bkb3duLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEJhc2ljRHJvcGRvd25Db21wb25lbnQgZXh0ZW5kcyBLZXlib2FyZFNlbGVjdERpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIEFmdGVyVmlld0NoZWNrZWQge1xuICBwcml2YXRlIG92ZXJsYXlPcGVuU3RhdGUgPSBuZXcgUmVwbGF5U3ViamVjdDxib29sZWFuPigxKTtcbiAgcHVibGljIHN0YXRpYyBpc05ld0l0ZW0oaXRlbXM6IGFueVtdLCB0ZXJtOiBzdHJpbmcsIGtleT86IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghdGVybSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBpc0VxdWFsSWdub3JpbmdDYXNlID0gKGl0ZW06IGFueSkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBrZXkgPyBpdGVtW2tleV0gOiBpdGVtO1xuICAgICAgcmV0dXJuIGlzRXF1YWwodG9Mb3dlcih2YWx1ZSksIHRvTG93ZXIodGVybSkpO1xuICAgIH07XG4gICAgcmV0dXJuICFzb21lKGlzRXF1YWxJZ25vcmluZ0Nhc2UsIGl0ZW1zKTtcbiAgfVxuXG4gIHJlYWRvbmx5IE5BTUUgPSAnQmFzaWNEcm9wZG93bkNvbXBvbmVudCc7XG5cbiAgQElucHV0KCkgb3B0aW9uczogYW55W10gPSBbXTtcbiAgQElucHV0KCkgaW5pdGlhbGx5U2VsZWN0ZWRJbmRleCA9IC0xO1xuICBASW5wdXQoKSBsYWJlbEtleT86IHN0cmluZztcbiAgQElucHV0KCkgaXRlbUtleT86IHN0cmluZztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgbmV3T3B0aW9uTGFiZWwhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHBhZGRpbmc/OiBTaW5nbGVTZWxlY3RQYWRkaW5nID0gJ2RlZmF1bHQnO1xuICBASW5wdXQoKSBzaG93Q3JlYXRlTmV3T3B0aW9uID0gZmFsc2U7XG5cbiAgQElucHV0KCkgZGlzYWJsZWRPcHRpb25zOiB7IFtpdGVtS2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICBASW5wdXQoKSBvdmVybGF5UG9zaXRpb25pbmcgPSBmYWxzZTtcbiAgQElucHV0KCkgdHJ1bmNhdGVPcHRpb25zID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIG9uSXRlbVNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSB0cmlnZ2VyUmVxdWVzdEZvck1vcmVFbnRyaWVzID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgbmV3T3B0aW9uTGFiZWxTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgY3JlYXRlTmV3T3B0aW9uU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQENvbnRlbnRDaGlsZCgnb3B0aW9uVGVtcGxhdGUnKSBvcHRpb25UZW1wbGF0ZVJlZiE6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBDb250ZW50Q2hpbGQoJ2NyZWF0ZU5ld09wdGlvblRlbXBsYXRlJykgY3JlYXRlTmV3T3B0aW9uVGVtcGxhdGVSZWYhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAQ29udGVudENoaWxkKCdkZXNjcmlwdGlvblRlbXBsYXRlUmVmJykgZGVzY3JpcHRpb25UZW1wbGF0ZVJlZiE6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBWaWV3Q2hpbGQoJ3NlbGVjdE9yaWdpbicsIHsgc3RhdGljOiBmYWxzZSB9KSBzZWxlY3RPcmlnaW4hOiBDZGtPdmVybGF5T3JpZ2luO1xuICBpc1RvcERyb3Bkb3duID0gZmFsc2U7XG4gIG92ZXJsYXlPcGVuJCA9IHRoaXMub3ZlcmxheU9wZW5TdGF0ZS5hc09ic2VydmFibGUoKS5waXBlKHN0YXJ0V2l0aChmYWxzZSksIGRlbGF5KDApLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm92ZXJsYXlQb3NpdGlvbmluZyAmJiB0aGlzLnNlbGVjdE9yaWdpbikge1xuICAgICAgLy8gRW1pdCBjdXJyZW50IHNlbGVjdE9yaWdpbiBET00gY29ubmVjdGlvbiBzdGF0ZVxuICAgICAgLy8gd2hlbiBkcm9wZG93biBpcyBhdHRhY2hlZCB0byBET00gLSBpdCBnZXRzIHNldCB0byB0cnVlXG4gICAgICB0aGlzLm92ZXJsYXlPcGVuU3RhdGUubmV4dCh0aGlzLnNlbGVjdE9yaWdpbi5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuaXNDb25uZWN0ZWQpO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdE9wdGlvbihvcHRpb246IGFueSkge1xuICAgIGlmICghb3B0aW9uIHx8ICF0aGlzLml0ZW1LZXkpIHtcbiAgICAgIHRoaXMub25JdGVtU2VsZWN0ZWQuZW1pdChvcHRpb24pO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuZGlzYWJsZWRPcHRpb25zW29wdGlvblt0aGlzLml0ZW1LZXldXSkge1xuICAgICAgdGhpcy5vbkl0ZW1TZWxlY3RlZC5lbWl0KG9wdGlvbik7XG4gICAgfVxuICB9XG5cbiAgb25Qb3NpdGlvbkNoYW5nZShldmVudDogQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uQ2hhbmdlKSB7XG4gICAgdGhpcy5pc1RvcERyb3Bkb3duID0gZXZlbnQuY29ubmVjdGlvblBhaXIub3JpZ2luWSA9PT0gJ3RvcCc7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzTmV3SXRlbSgpIHtcbiAgICByZXR1cm4gQmFzaWNEcm9wZG93bkNvbXBvbmVudC5pc05ld0l0ZW0odGhpcy5vcHRpb25zLCB0aGlzLm5ld09wdGlvbkxhYmVsLCB0aGlzLmxhYmVsS2V5KTtcbiAgfVxuXG4gIHB1YmxpYyB0cmFja0J5UHJvcChwcm9wPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIChpbmRleDogbnVtYmVyLCBwaWxsOiBhbnkpID0+IChwcm9wID8gcGlsbFtwcm9wXSA6IGluZGV4KTtcbiAgfVxuXG4gIHB1YmxpYyBvblNjcm9sbCgpIHtcbiAgICB0aGlzLnRyaWdnZXJSZXF1ZXN0Rm9yTW9yZUVudHJpZXMuZW1pdCgpO1xuICB9XG5cbiAgcHVibGljIG9uTmV3SXRlbVNlbGVjdGVkKCkge1xuICAgIGlmICghdGhpcy5sb2FkaW5nKSB7XG4gICAgICB0aGlzLnNlbGVjdE9wdGlvbihudWxsKTtcbiAgICAgIHRoaXMubmV3T3B0aW9uTGFiZWxTZWxlY3RlZC5lbWl0KHRoaXMubmV3T3B0aW9uTGFiZWwpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbkNyZWF0ZU5ld09wdGlvblNlbGVjdGVkKCkge1xuICAgIHRoaXMuY3JlYXRlTmV3T3B0aW9uU2VsZWN0ZWQuZW1pdCgpO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImRyb3Bkb3duXCIgKm5nSWY9XCIhb3ZlcmxheVBvc2l0aW9uaW5nXCI+PC9uZy1jb250YWluZXI+XG48bmctY29udGFpbmVyICpuZ0lmPVwib3ZlcmxheVBvc2l0aW9uaW5nXCI+XG4gIDxkaXYgY2xhc3M9XCJvdmVybGF5T3JpZ2luXCIgY2RrT3ZlcmxheU9yaWdpbiAjc2VsZWN0T3JpZ2luPVwiY2RrT3ZlcmxheU9yaWdpblwiPjwvZGl2PlxuICA8bmctdGVtcGxhdGVcbiAgICBjZGtDb25uZWN0ZWRPdmVybGF5XG4gICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcmlnaW5dPVwic2VsZWN0T3JpZ2luXCJcbiAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW5dPVwiISEob3ZlcmxheU9wZW4kIHwgYXN5bmMpXCJcbiAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheVdpZHRoXT1cInNlbGVjdE9yaWdpbi5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGhcIlxuICAgIChwb3NpdGlvbkNoYW5nZSk9XCJvblBvc2l0aW9uQ2hhbmdlKCRldmVudClcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cIm92ZXJsYXlEcm9wZG93blwiIFtuZ0NsYXNzXT1cInsgdG9wOiBpc1RvcERyb3Bkb3duIH1cIj5cbiAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZHJvcGRvd25cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI2Ryb3Bkb3duPlxuICA8dWxcbiAgICBjbGFzcz1cIm9wdGlvbnMge3sgcGFkZGluZyB9fVBhZGRpbmcgbHhUaGluU2Nyb2xsYmFyXCJcbiAgICAja2V5Ym9hcmRTZWxlY3RDb250YWluZXJcbiAgICBpbmZpbml0ZS1zY3JvbGxcbiAgICBbc2Nyb2xsV2luZG93XT1cImZhbHNlXCJcbiAgICBbZnJvbVJvb3RdPVwidHJ1ZVwiXG4gICAgW25nQ2xhc3NdPVwieyB0cnVuY2F0ZU9wdGlvbnM6IHRydW5jYXRlT3B0aW9ucyB9XCJcbiAgICAoc2Nyb2xsZWQpPVwib25TY3JvbGwoKVwiXG4gID5cbiAgICA8bGlcbiAgICAgICpuZ0lmPVwibmV3T3B0aW9uTGFiZWwgJiYgaXNOZXdJdGVtXCJcbiAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgbHhTZWxlY3RhYmxlSXRlbVxuICAgICAgW3Njcm9sbEluQ29udGFpbmVyXT1cImtleWJvYXJkU2VsZWN0Q29udGFpbmVyXCJcbiAgICAgICNpdGVtXG4gICAgICAoY2xpY2spPVwib25OZXdJdGVtU2VsZWN0ZWQoKVwiXG4gICAgICAoc2VsZWN0KT1cIm9uTmV3SXRlbVNlbGVjdGVkKClcIlxuICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImlzSXRlbVNlbGVjdGVkKGl0ZW0sIChzZWxlY3RlZEl0ZW0kIHwgYXN5bmMpPy5lbGVtZW50KVwiXG4gICAgICBjbGFzcz1cIm9wdGlvbiBrZXlib2FyZFNlbGVjdGFibGUgb25UaGVGbHlPcHRpb25cIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJuZXdPcHRpb25MYWJlbFwiXG4gICAgPlxuICAgICAgPHNwYW4gY2xhc3M9XCJuZXdFbnRyeUNvbnRlbnRcIj5cbiAgICAgICAge3sgbmV3T3B0aW9uTGFiZWwgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxseC1iYWRnZSBjbGFzcz1cImx4LW1hcmdpbi1sZWZ0XCIgc2l6ZT1cInNtYWxsXCIgW2NvbnRlbnRdPVwiJ2NvbW1vbi5uZXcnIHwgdHJhbnNsYXRlIHwgdXBwZXJjYXNlXCI+PC9seC1iYWRnZT5cbiAgICA8L2xpPlxuICAgIDxsaVxuICAgICAgKm5nSWY9XCJzaG93Q3JlYXRlTmV3T3B0aW9uXCJcbiAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgbHhTZWxlY3RhYmxlSXRlbVxuICAgICAgW3Njcm9sbEluQ29udGFpbmVyXT1cImtleWJvYXJkU2VsZWN0Q29udGFpbmVyXCJcbiAgICAgICNpdGVtXG4gICAgICAoY2xpY2spPVwib25DcmVhdGVOZXdPcHRpb25TZWxlY3RlZCgpXCJcbiAgICAgIChzZWxlY3QpPVwib25DcmVhdGVOZXdPcHRpb25TZWxlY3RlZCgpXCJcbiAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJpc0l0ZW1TZWxlY3RlZChpdGVtLCAoc2VsZWN0ZWRJdGVtJCB8IGFzeW5jKT8uZWxlbWVudClcIlxuICAgICAgY2xhc3M9XCJvcHRpb24ga2V5Ym9hcmRTZWxlY3RhYmxlIG5ld0VudHJ5T3B0aW9uXCJcbiAgICA+XG4gICAgICA8c3BhbiBjbGFzcz1cIm5ld0VudHJ5Q29udGVudFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3JlYXRlTmV3T3B0aW9uVGVtcGxhdGVSZWY7IGVsc2UgZGVmYXVsdE5ld09wdGlvblwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjcmVhdGVOZXdPcHRpb25UZW1wbGF0ZVJlZlwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0TmV3T3B0aW9uPlxuICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAge3sgTkFNRSArICcubmV3JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2xpPlxuICAgIDxsaVxuICAgICAgKm5nSWY9XCJkZXNjcmlwdGlvblRlbXBsYXRlUmVmXCJcbiAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgbHhTZWxlY3RhYmxlSXRlbVxuICAgICAgW3Njcm9sbEluQ29udGFpbmVyXT1cImtleWJvYXJkU2VsZWN0Q29udGFpbmVyXCJcbiAgICAgICNpdGVtXG4gICAgICBjbGFzcz1cIm9wdGlvbiBkZXNjcmlwdGlvbiBkaXNhYmxlZEl0ZW1cIlxuICAgID5cbiAgICAgIDxzcGFuIGNsYXNzPVwiZGVzY3JpcHRpb25Db250ZW50XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkZXNjcmlwdGlvblRlbXBsYXRlUmVmXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L3NwYW4+XG4gICAgPC9saT5cbiAgICA8bGlcbiAgICAgICpuZ0lmPVwib3B0aW9ucz8ubGVuZ3RoID09PSAwICYmICFuZXdPcHRpb25MYWJlbCAmJiAhbG9hZGluZ1wiXG4gICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgIGx4U2VsZWN0YWJsZUl0ZW1cbiAgICAgIFtzY3JvbGxJbkNvbnRhaW5lcl09XCJrZXlib2FyZFNlbGVjdENvbnRhaW5lclwiXG4gICAgICAjaXRlbVxuICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImlzSXRlbVNlbGVjdGVkKGl0ZW0sIChzZWxlY3RlZEl0ZW0kIHwgYXN5bmMpPy5lbGVtZW50KVwiXG4gICAgICBjbGFzcz1cIm9wdGlvbiBrZXlib2FyZFNlbGVjdGFibGUgbm9PcHRpb25zQXZhaWxhYmxlXCJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiTkFNRSArICcubm9SZXN1bHRzJyB8IHRyYW5zbGF0ZVwiXG4gICAgPlxuICAgICAge3sgTkFNRSArICcubm9SZXN1bHRzJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvbGk+XG4gICAgPGxpXG4gICAgICAqbmdJZj1cInBsYWNlaG9sZGVyXCJcbiAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgY2xhc3M9XCJvcHRpb24ga2V5Ym9hcmRTZWxlY3RhYmxlIGNsZWFyU2VsZWN0aW9uXCJcbiAgICAgIGx4U2VsZWN0YWJsZUl0ZW1cbiAgICAgIFtzY3JvbGxJbkNvbnRhaW5lcl09XCJrZXlib2FyZFNlbGVjdENvbnRhaW5lclwiXG4gICAgICAjaXRlbVxuICAgICAgKGNsaWNrKT1cInNlbGVjdE9wdGlvbihudWxsKVwiXG4gICAgICAoc2VsZWN0KT1cInNlbGVjdE9wdGlvbihudWxsKVwiXG4gICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwiaXNJdGVtU2VsZWN0ZWQoaXRlbSwgKHNlbGVjdGVkSXRlbSQgfCBhc3luYyk/LmVsZW1lbnQpXCJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwicGxhY2Vob2xkZXJcIlxuICAgID5cbiAgICAgIHt7IHBsYWNlaG9sZGVyIH19XG4gICAgPC9saT5cbiAgICA8bGlcbiAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygb3B0aW9uczsgbGV0IGluZGV4ID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlQcm9wKGl0ZW1LZXkpXCJcbiAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgbHhTZWxlY3RhYmxlSXRlbVxuICAgICAgW3Njcm9sbEluQ29udGFpbmVyXT1cImtleWJvYXJkU2VsZWN0Q29udGFpbmVyXCJcbiAgICAgICNpdGVtXG4gICAgICBjbGFzcz1cIm9wdGlvbiBrZXlib2FyZFNlbGVjdGFibGVcIlxuICAgICAgKGNsaWNrKT1cInNlbGVjdE9wdGlvbihvcHRpb24pXCJcbiAgICAgIChzZWxlY3QpPVwic2VsZWN0T3B0aW9uKG9wdGlvbilcIlxuICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImlzSXRlbVNlbGVjdGVkKGl0ZW0sIChzZWxlY3RlZEl0ZW0kIHwgYXN5bmMpPy5lbGVtZW50KVwiXG4gICAgICBbY2xhc3MuaW5pdGlhbGx5U2VsZWN0ZWRdPVwiaW5kZXggPT09IGluaXRpYWxseVNlbGVjdGVkSW5kZXhcIlxuICAgICAgW2NsYXNzLmRpc2FibGVkSXRlbV09XCJpdGVtS2V5ID8gISFkaXNhYmxlZE9wdGlvbnNbb3B0aW9uW2l0ZW1LZXldXSA6IGZhbHNlXCJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwibGFiZWxLZXkgPyBvcHRpb25bbGFiZWxLZXldIDogb3B0aW9uXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3B0aW9uVGVtcGxhdGVSZWY7IGVsc2Ugc2ltcGxlU3RyaW5nRGlzcGxheVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwib3B0aW9uVGVtcGxhdGVSZWY7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBvcHRpb24sIGluZGV4OiBpbmRleCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjc2ltcGxlU3RyaW5nRGlzcGxheT5cbiAgICAgICAgPHNwYW4+XG4gICAgICAgICAge3sgbGFiZWxLZXkgPyBvcHRpb25bbGFiZWxLZXldIDogb3B0aW9uIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9saT5cbiAgICA8bHgtc3Bpbm5lciAqbmdJZj1cImxvYWRpbmdcIiBbZmFkZUJhY2tncm91bmRdPVwidHJ1ZVwiPjwvbHgtc3Bpbm5lcj5cbiAgPC91bD5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
@@ -9,7 +9,7 @@ import { OverlayModule, CdkConnectedOverlay } from '@angular/cdk/overlay';
|
|
|
9
9
|
import { __decorate, __awaiter } from 'tslib';
|
|
10
10
|
import { escape, trimEnd, sortBy, get, isEqual, toLower, some, padCharsStart, toString, toNumber, isNaN as isNaN$1, includes, last, findIndex, filter as filter$1, isObject, find, uniqueId } from 'lodash/fp';
|
|
11
11
|
import * as i6 from 'rxjs';
|
|
12
|
-
import { BehaviorSubject, timer, Subject, combineLatest, merge, concat, fromEvent, Observable, ReplaySubject, of, map as map$1 } from 'rxjs';
|
|
12
|
+
import { BehaviorSubject, timer, Subject, combineLatest, merge, concat, fromEvent, Observable, ReplaySubject, startWith as startWith$1, delay as delay$1, distinctUntilChanged as distinctUntilChanged$1, of, map as map$1 } from 'rxjs';
|
|
13
13
|
import { skipWhile, map, switchMap, startWith, pairwise, filter, take, debounceTime, skip, withLatestFrom, distinctUntilChanged, takeUntil, delay, tap } from 'rxjs/operators';
|
|
14
14
|
import * as i1$2 from '@ngx-translate/core';
|
|
15
15
|
import { TranslatePipe, TranslateModule } from '@ngx-translate/core';
|
|
@@ -2146,7 +2146,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImpor
|
|
|
2146
2146
|
|
|
2147
2147
|
class BasicDropdownComponent extends KeyboardSelectDirective {
|
|
2148
2148
|
constructor() {
|
|
2149
|
-
super(
|
|
2149
|
+
super();
|
|
2150
|
+
this.overlayOpenState = new ReplaySubject(1);
|
|
2150
2151
|
this.NAME = 'BasicDropdownComponent';
|
|
2151
2152
|
this.options = [];
|
|
2152
2153
|
this.initiallySelectedIndex = -1;
|
|
@@ -2154,10 +2155,14 @@ class BasicDropdownComponent extends KeyboardSelectDirective {
|
|
|
2154
2155
|
this.padding = 'default';
|
|
2155
2156
|
this.showCreateNewOption = false;
|
|
2156
2157
|
this.disabledOptions = {};
|
|
2158
|
+
this.overlayPositioning = false;
|
|
2159
|
+
this.truncateOptions = false;
|
|
2157
2160
|
this.onItemSelected = new EventEmitter();
|
|
2158
2161
|
this.triggerRequestForMoreEntries = new EventEmitter();
|
|
2159
2162
|
this.newOptionLabelSelected = new EventEmitter();
|
|
2160
2163
|
this.createNewOptionSelected = new EventEmitter();
|
|
2164
|
+
this.isTopDropdown = false;
|
|
2165
|
+
this.overlayOpen$ = this.overlayOpenState.asObservable().pipe(startWith$1(false), delay$1(0), distinctUntilChanged$1());
|
|
2161
2166
|
}
|
|
2162
2167
|
static isNewItem(items, term, key) {
|
|
2163
2168
|
if (!term) {
|
|
@@ -2169,6 +2174,13 @@ class BasicDropdownComponent extends KeyboardSelectDirective {
|
|
|
2169
2174
|
};
|
|
2170
2175
|
return !some(isEqualIgnoringCase, items);
|
|
2171
2176
|
}
|
|
2177
|
+
ngAfterViewChecked() {
|
|
2178
|
+
if (this.overlayPositioning && this.selectOrigin) {
|
|
2179
|
+
// Emit current selectOrigin DOM connection state
|
|
2180
|
+
// when dropdown is attached to DOM - it gets set to true
|
|
2181
|
+
this.overlayOpenState.next(this.selectOrigin.elementRef.nativeElement.isConnected);
|
|
2182
|
+
}
|
|
2183
|
+
}
|
|
2172
2184
|
selectOption(option) {
|
|
2173
2185
|
if (!option || !this.itemKey) {
|
|
2174
2186
|
this.onItemSelected.emit(option);
|
|
@@ -2177,6 +2189,9 @@ class BasicDropdownComponent extends KeyboardSelectDirective {
|
|
|
2177
2189
|
this.onItemSelected.emit(option);
|
|
2178
2190
|
}
|
|
2179
2191
|
}
|
|
2192
|
+
onPositionChange(event) {
|
|
2193
|
+
this.isTopDropdown = event.connectionPair.originY === 'top';
|
|
2194
|
+
}
|
|
2180
2195
|
get isNewItem() {
|
|
2181
2196
|
return BasicDropdownComponent.isNewItem(this.options, this.newOptionLabel, this.labelKey);
|
|
2182
2197
|
}
|
|
@@ -2196,12 +2211,12 @@ class BasicDropdownComponent extends KeyboardSelectDirective {
|
|
|
2196
2211
|
this.createNewOptionSelected.emit();
|
|
2197
2212
|
}
|
|
2198
2213
|
}
|
|
2199
|
-
BasicDropdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: BasicDropdownComponent, deps:
|
|
2200
|
-
BasicDropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.1", type: BasicDropdownComponent, selector: "lx-basic-dropdown", inputs: { options: "options", initiallySelectedIndex: "initiallySelectedIndex", labelKey: "labelKey", itemKey: "itemKey", placeholder: "placeholder", loading: "loading", newOptionLabel: "newOptionLabel", padding: "padding", showCreateNewOption: "showCreateNewOption", disabledOptions: "disabledOptions" }, outputs: { onItemSelected: "onItemSelected", triggerRequestForMoreEntries: "triggerRequestForMoreEntries", newOptionLabelSelected: "newOptionLabelSelected", createNewOptionSelected: "createNewOptionSelected" }, queries: [{ propertyName: "optionTemplateRef", first: true, predicate: ["optionTemplate"], descendants: true }, { propertyName: "createNewOptionTemplateRef", first: true, predicate: ["createNewOptionTemplate"], descendants: true }, { propertyName: "descriptionTemplateRef", first: true, predicate: ["descriptionTemplateRef"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ul\n class=\"options {{ padding }}Padding lxThinScrollbar\"\n #keyboardSelectContainer\n infinite-scroll\n [scrollWindow]=\"false\"\n [fromRoot]=\"true\"\n (scrolled)=\"onScroll()\"\n>\n <li\n *ngIf=\"newOptionLabel && isNewItem\"\n tabindex=\"-1\"\n lxSelectableItem\n [scrollInContainer]=\"keyboardSelectContainer\"\n #item\n (click)=\"onNewItemSelected()\"\n (select)=\"onNewItemSelected()\"\n [class.selected]=\"isItemSelected(item, (selectedItem$ | async)?.element)\"\n class=\"option keyboardSelectable onTheFlyOption\"\n >\n <span class=\"newEntryContent\">\n {{ newOptionLabel }}\n </span>\n <lx-badge class=\"lx-margin-left\" size=\"small\" [content]=\"'common.new' | translate | uppercase\"></lx-badge>\n </li>\n <li\n *ngIf=\"showCreateNewOption\"\n tabindex=\"-1\"\n lxSelectableItem\n [scrollInContainer]=\"keyboardSelectContainer\"\n #item\n (click)=\"onCreateNewOptionSelected()\"\n (select)=\"onCreateNewOptionSelected()\"\n [class.selected]=\"isItemSelected(item, (selectedItem$ | async)?.element)\"\n class=\"option keyboardSelectable newEntryOption\"\n >\n <span class=\"newEntryContent\">\n <ng-container *ngIf=\"createNewOptionTemplateRef; else defaultNewOption\">\n <ng-container *ngTemplateOutlet=\"createNewOptionTemplateRef\"></ng-container>\n </ng-container>\n <ng-template #defaultNewOption>\n <span>\n {{ NAME + '.new' | translate }}\n </span>\n </ng-template>\n </span>\n </li>\n <li\n *ngIf=\"descriptionTemplateRef\"\n tabindex=\"-1\"\n lxSelectableItem\n [scrollInContainer]=\"keyboardSelectContainer\"\n #item\n class=\"option description disabledItem\"\n >\n <span class=\"descriptionContent\">\n <ng-container *ngTemplateOutlet=\"descriptionTemplateRef\"></ng-container>\n </span>\n </li>\n <li\n *ngIf=\"options?.length === 0 && !newOptionLabel && !loading\"\n tabindex=\"-1\"\n lxSelectableItem\n [scrollInContainer]=\"keyboardSelectContainer\"\n #item\n [class.selected]=\"isItemSelected(item, (selectedItem$ | async)?.element)\"\n class=\"option keyboardSelectable noOptionsAvailable\"\n >\n {{ NAME + '.noResults' | translate }}\n </li>\n <li\n *ngIf=\"placeholder\"\n tabindex=\"-1\"\n class=\"option keyboardSelectable clearSelection\"\n lxSelectableItem\n [scrollInContainer]=\"keyboardSelectContainer\"\n #item\n (click)=\"selectOption(null)\"\n (select)=\"selectOption(null)\"\n [class.selected]=\"isItemSelected(item, (selectedItem$ | async)?.element)\"\n >\n {{ placeholder }}\n </li>\n <li\n *ngFor=\"let option of options; let index = index; trackBy: trackByProp(itemKey)\"\n tabindex=\"-1\"\n lxSelectableItem\n [scrollInContainer]=\"keyboardSelectContainer\"\n #item\n class=\"option keyboardSelectable\"\n (click)=\"selectOption(option)\"\n (select)=\"selectOption(option)\"\n [class.selected]=\"isItemSelected(item, (selectedItem$ | async)?.element)\"\n [class.initiallySelected]=\"index === initiallySelectedIndex\"\n [class.disabledItem]=\"itemKey ? !!disabledOptions[option[itemKey]] : false\"\n >\n <ng-container *ngIf=\"optionTemplateRef; else simpleStringDisplay\">\n <ng-container *ngTemplateOutlet=\"optionTemplateRef; context: { $implicit: option, index: index }\"></ng-container>\n </ng-container>\n <ng-template #simpleStringDisplay>\n <span>\n {{ labelKey ? option[labelKey] : option }}\n </span>\n </ng-template>\n </li>\n <lx-spinner *ngIf=\"loading\" [fadeBackground]=\"true\"></lx-spinner>\n</ul>\n", styles: [":host(.noOptionPadding) .options .option{padding:0}.defaultPadding .newEntryOption,.defaultPadding .onTheFlyOption,.defaultPadding .noOptionsAvailable{padding:4px 12px!important}.narrowPadding .newEntryOption,.narrowPadding .onTheFlyOption,.narrowPadding .noOptionsAvailable{padding:4px!important}.options{list-style:none;margin:0;padding:0;overflow-y:auto;max-height:250px}.options.defaultPadding .option{padding:4px 12px}.options.narrowPadding .option{padding:4px}.optionSearch{padding:2px}.option{cursor:pointer;display:block}.option:hover:not(.disabledItem){background-color:#e1e5eb!important}.option.selected{background:#eaedf1}.option.initiallySelected{color:var(--lx-primarybutton-backgroundcolor)}.option.disabledItem{cursor:default;opacity:.5}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.InfiniteScrollDirective, selector: "[infiniteScroll], [infinite-scroll], [data-infinite-scroll]", inputs: ["infiniteScrollDistance", "infiniteScrollUpDistance", "infiniteScrollThrottle", "infiniteScrollDisabled", "infiniteScrollContainer", "scrollWindow", "immediateCheck", "horizontal", "alwaysCallback", "fromRoot"], outputs: ["scrolled", "scrolledUp"] }, { kind: "component", type: BadgeComponent, selector: "lx-badge", inputs: ["content", "size", "color"] }, { kind: "component", type: SpinnerComponent, selector: "lx-spinner", inputs: ["fadeBackground"] }, { kind: "directive", type: SelectableItemDirective, selector: "[lxSelectableItem]", inputs: ["scrollInContainer", "lxSelectableItem"], outputs: ["select"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.UpperCasePipe, name: "uppercase" }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2214
|
+
BasicDropdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: BasicDropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2215
|
+
BasicDropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.1", type: BasicDropdownComponent, selector: "lx-basic-dropdown", inputs: { options: "options", initiallySelectedIndex: "initiallySelectedIndex", labelKey: "labelKey", itemKey: "itemKey", placeholder: "placeholder", loading: "loading", newOptionLabel: "newOptionLabel", padding: "padding", showCreateNewOption: "showCreateNewOption", disabledOptions: "disabledOptions", overlayPositioning: "overlayPositioning", truncateOptions: "truncateOptions" }, outputs: { onItemSelected: "onItemSelected", triggerRequestForMoreEntries: "triggerRequestForMoreEntries", newOptionLabelSelected: "newOptionLabelSelected", createNewOptionSelected: "createNewOptionSelected" }, queries: [{ propertyName: "optionTemplateRef", first: true, predicate: ["optionTemplate"], descendants: true }, { propertyName: "createNewOptionTemplateRef", first: true, predicate: ["createNewOptionTemplate"], descendants: true }, { propertyName: "descriptionTemplateRef", first: true, predicate: ["descriptionTemplateRef"], descendants: true }], viewQueries: [{ propertyName: "selectOrigin", first: true, predicate: ["selectOrigin"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container [ngTemplateOutlet]=\"dropdown\" *ngIf=\"!overlayPositioning\"></ng-container>\n<ng-container *ngIf=\"overlayPositioning\">\n <div class=\"overlayOrigin\" cdkOverlayOrigin #selectOrigin=\"cdkOverlayOrigin\"></div>\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"selectOrigin\"\n [cdkConnectedOverlayOpen]=\"!!(overlayOpen$ | async)\"\n [cdkConnectedOverlayWidth]=\"selectOrigin.elementRef.nativeElement.offsetWidth\"\n (positionChange)=\"onPositionChange($event)\"\n >\n <div class=\"overlayDropdown\" [ngClass]=\"{ top: isTopDropdown }\">\n <ng-container [ngTemplateOutlet]=\"dropdown\"></ng-container>\n </div>\n </ng-template>\n</ng-container>\n\n<ng-template #dropdown>\n <ul\n class=\"options {{ padding }}Padding lxThinScrollbar\"\n #keyboardSelectContainer\n infinite-scroll\n [scrollWindow]=\"false\"\n [fromRoot]=\"true\"\n [ngClass]=\"{ truncateOptions: truncateOptions }\"\n (scrolled)=\"onScroll()\"\n >\n <li\n *ngIf=\"newOptionLabel && isNewItem\"\n tabindex=\"-1\"\n lxSelectableItem\n [scrollInContainer]=\"keyboardSelectContainer\"\n #item\n (click)=\"onNewItemSelected()\"\n (select)=\"onNewItemSelected()\"\n [class.selected]=\"isItemSelected(item, (selectedItem$ | async)?.element)\"\n class=\"option keyboardSelectable onTheFlyOption\"\n [attr.aria-label]=\"newOptionLabel\"\n >\n <span class=\"newEntryContent\">\n {{ newOptionLabel }}\n </span>\n <lx-badge class=\"lx-margin-left\" size=\"small\" [content]=\"'common.new' | translate | uppercase\"></lx-badge>\n </li>\n <li\n *ngIf=\"showCreateNewOption\"\n tabindex=\"-1\"\n lxSelectableItem\n [scrollInContainer]=\"keyboardSelectContainer\"\n #item\n (click)=\"onCreateNewOptionSelected()\"\n (select)=\"onCreateNewOptionSelected()\"\n [class.selected]=\"isItemSelected(item, (selectedItem$ | async)?.element)\"\n class=\"option keyboardSelectable newEntryOption\"\n >\n <span class=\"newEntryContent\">\n <ng-container *ngIf=\"createNewOptionTemplateRef; else defaultNewOption\">\n <ng-container *ngTemplateOutlet=\"createNewOptionTemplateRef\"></ng-container>\n </ng-container>\n <ng-template #defaultNewOption>\n <span>\n {{ NAME + '.new' | translate }}\n </span>\n </ng-template>\n </span>\n </li>\n <li\n *ngIf=\"descriptionTemplateRef\"\n tabindex=\"-1\"\n lxSelectableItem\n [scrollInContainer]=\"keyboardSelectContainer\"\n #item\n class=\"option description disabledItem\"\n >\n <span class=\"descriptionContent\">\n <ng-container *ngTemplateOutlet=\"descriptionTemplateRef\"></ng-container>\n </span>\n </li>\n <li\n *ngIf=\"options?.length === 0 && !newOptionLabel && !loading\"\n tabindex=\"-1\"\n lxSelectableItem\n [scrollInContainer]=\"keyboardSelectContainer\"\n #item\n [class.selected]=\"isItemSelected(item, (selectedItem$ | async)?.element)\"\n class=\"option keyboardSelectable noOptionsAvailable\"\n [attr.aria-label]=\"NAME + '.noResults' | translate\"\n >\n {{ NAME + '.noResults' | translate }}\n </li>\n <li\n *ngIf=\"placeholder\"\n tabindex=\"-1\"\n class=\"option keyboardSelectable clearSelection\"\n lxSelectableItem\n [scrollInContainer]=\"keyboardSelectContainer\"\n #item\n (click)=\"selectOption(null)\"\n (select)=\"selectOption(null)\"\n [class.selected]=\"isItemSelected(item, (selectedItem$ | async)?.element)\"\n [attr.aria-label]=\"placeholder\"\n >\n {{ placeholder }}\n </li>\n <li\n *ngFor=\"let option of options; let index = index; trackBy: trackByProp(itemKey)\"\n tabindex=\"-1\"\n lxSelectableItem\n [scrollInContainer]=\"keyboardSelectContainer\"\n #item\n class=\"option keyboardSelectable\"\n (click)=\"selectOption(option)\"\n (select)=\"selectOption(option)\"\n [class.selected]=\"isItemSelected(item, (selectedItem$ | async)?.element)\"\n [class.initiallySelected]=\"index === initiallySelectedIndex\"\n [class.disabledItem]=\"itemKey ? !!disabledOptions[option[itemKey]] : false\"\n [attr.aria-label]=\"labelKey ? option[labelKey] : option\"\n >\n <ng-container *ngIf=\"optionTemplateRef; else simpleStringDisplay\">\n <ng-container *ngTemplateOutlet=\"optionTemplateRef; context: { $implicit: option, index: index }\"></ng-container>\n </ng-container>\n <ng-template #simpleStringDisplay>\n <span>\n {{ labelKey ? option[labelKey] : option }}\n </span>\n </ng-template>\n </li>\n <lx-spinner *ngIf=\"loading\" [fadeBackground]=\"true\"></lx-spinner>\n </ul>\n</ng-template>\n", styles: [":host(.noOptionPadding) .options .option{padding:0}.overlayDropdown{width:100%;background:#fff;border-radius:3px;border-left:solid 1px #e1e5eb;border-right:solid 1px #e1e5eb;margin:0 -1px;width:calc(100% + 2px)}.overlayDropdown:not(.top){box-shadow:0 6px 6px #21252933;border-top:0;border-bottom:solid 1px #e1e5eb;border-top-left-radius:0;border-top-right-radius:0}.overlayDropdown.top{box-shadow:0 -4px 6px #21252933;border-top:solid 1px #e1e5eb;border-bottom:0;border-bottom-left-radius:0;border-bottom-right-radius:0}.truncateOptions li{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.defaultPadding .newEntryOption,.defaultPadding .onTheFlyOption,.defaultPadding .noOptionsAvailable{padding:4px 12px!important}.narrowPadding .newEntryOption,.narrowPadding .onTheFlyOption,.narrowPadding .noOptionsAvailable{padding:4px!important}.options{list-style:none;margin:0;padding:0;overflow-y:auto;max-height:250px}.options.defaultPadding .option{padding:4px 12px}.options.narrowPadding .option{padding:4px}.optionSearch{padding:2px}.option{cursor:pointer;display:block}.option:hover:not(.disabledItem){background-color:#e1e5eb!important}.option.selected{background:#eaedf1}.option.initiallySelected{color:var(--lx-primarybutton-backgroundcolor)}.option.disabledItem{cursor:default;opacity:.5}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.InfiniteScrollDirective, selector: "[infiniteScroll], [infinite-scroll], [data-infinite-scroll]", inputs: ["infiniteScrollDistance", "infiniteScrollUpDistance", "infiniteScrollThrottle", "infiniteScrollDisabled", "infiniteScrollContainer", "scrollWindow", "immediateCheck", "horizontal", "alwaysCallback", "fromRoot"], outputs: ["scrolled", "scrolledUp"] }, { kind: "directive", type: i1$1.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1$1.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: BadgeComponent, selector: "lx-badge", inputs: ["content", "size", "color"] }, { kind: "component", type: SpinnerComponent, selector: "lx-spinner", inputs: ["fadeBackground"] }, { kind: "directive", type: SelectableItemDirective, selector: "[lxSelectableItem]", inputs: ["scrollInContainer", "lxSelectableItem"], outputs: ["select"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.UpperCasePipe, name: "uppercase" }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2201
2216
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: BasicDropdownComponent, decorators: [{
|
|
2202
2217
|
type: Component,
|
|
2203
|
-
args: [{ selector: 'lx-basic-dropdown', changeDetection: ChangeDetectionStrategy.OnPush, template: "<
|
|
2204
|
-
}], propDecorators: { options: [{
|
|
2218
|
+
args: [{ selector: 'lx-basic-dropdown', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container [ngTemplateOutlet]=\"dropdown\" *ngIf=\"!overlayPositioning\"></ng-container>\n<ng-container *ngIf=\"overlayPositioning\">\n <div class=\"overlayOrigin\" cdkOverlayOrigin #selectOrigin=\"cdkOverlayOrigin\"></div>\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"selectOrigin\"\n [cdkConnectedOverlayOpen]=\"!!(overlayOpen$ | async)\"\n [cdkConnectedOverlayWidth]=\"selectOrigin.elementRef.nativeElement.offsetWidth\"\n (positionChange)=\"onPositionChange($event)\"\n >\n <div class=\"overlayDropdown\" [ngClass]=\"{ top: isTopDropdown }\">\n <ng-container [ngTemplateOutlet]=\"dropdown\"></ng-container>\n </div>\n </ng-template>\n</ng-container>\n\n<ng-template #dropdown>\n <ul\n class=\"options {{ padding }}Padding lxThinScrollbar\"\n #keyboardSelectContainer\n infinite-scroll\n [scrollWindow]=\"false\"\n [fromRoot]=\"true\"\n [ngClass]=\"{ truncateOptions: truncateOptions }\"\n (scrolled)=\"onScroll()\"\n >\n <li\n *ngIf=\"newOptionLabel && isNewItem\"\n tabindex=\"-1\"\n lxSelectableItem\n [scrollInContainer]=\"keyboardSelectContainer\"\n #item\n (click)=\"onNewItemSelected()\"\n (select)=\"onNewItemSelected()\"\n [class.selected]=\"isItemSelected(item, (selectedItem$ | async)?.element)\"\n class=\"option keyboardSelectable onTheFlyOption\"\n [attr.aria-label]=\"newOptionLabel\"\n >\n <span class=\"newEntryContent\">\n {{ newOptionLabel }}\n </span>\n <lx-badge class=\"lx-margin-left\" size=\"small\" [content]=\"'common.new' | translate | uppercase\"></lx-badge>\n </li>\n <li\n *ngIf=\"showCreateNewOption\"\n tabindex=\"-1\"\n lxSelectableItem\n [scrollInContainer]=\"keyboardSelectContainer\"\n #item\n (click)=\"onCreateNewOptionSelected()\"\n (select)=\"onCreateNewOptionSelected()\"\n [class.selected]=\"isItemSelected(item, (selectedItem$ | async)?.element)\"\n class=\"option keyboardSelectable newEntryOption\"\n >\n <span class=\"newEntryContent\">\n <ng-container *ngIf=\"createNewOptionTemplateRef; else defaultNewOption\">\n <ng-container *ngTemplateOutlet=\"createNewOptionTemplateRef\"></ng-container>\n </ng-container>\n <ng-template #defaultNewOption>\n <span>\n {{ NAME + '.new' | translate }}\n </span>\n </ng-template>\n </span>\n </li>\n <li\n *ngIf=\"descriptionTemplateRef\"\n tabindex=\"-1\"\n lxSelectableItem\n [scrollInContainer]=\"keyboardSelectContainer\"\n #item\n class=\"option description disabledItem\"\n >\n <span class=\"descriptionContent\">\n <ng-container *ngTemplateOutlet=\"descriptionTemplateRef\"></ng-container>\n </span>\n </li>\n <li\n *ngIf=\"options?.length === 0 && !newOptionLabel && !loading\"\n tabindex=\"-1\"\n lxSelectableItem\n [scrollInContainer]=\"keyboardSelectContainer\"\n #item\n [class.selected]=\"isItemSelected(item, (selectedItem$ | async)?.element)\"\n class=\"option keyboardSelectable noOptionsAvailable\"\n [attr.aria-label]=\"NAME + '.noResults' | translate\"\n >\n {{ NAME + '.noResults' | translate }}\n </li>\n <li\n *ngIf=\"placeholder\"\n tabindex=\"-1\"\n class=\"option keyboardSelectable clearSelection\"\n lxSelectableItem\n [scrollInContainer]=\"keyboardSelectContainer\"\n #item\n (click)=\"selectOption(null)\"\n (select)=\"selectOption(null)\"\n [class.selected]=\"isItemSelected(item, (selectedItem$ | async)?.element)\"\n [attr.aria-label]=\"placeholder\"\n >\n {{ placeholder }}\n </li>\n <li\n *ngFor=\"let option of options; let index = index; trackBy: trackByProp(itemKey)\"\n tabindex=\"-1\"\n lxSelectableItem\n [scrollInContainer]=\"keyboardSelectContainer\"\n #item\n class=\"option keyboardSelectable\"\n (click)=\"selectOption(option)\"\n (select)=\"selectOption(option)\"\n [class.selected]=\"isItemSelected(item, (selectedItem$ | async)?.element)\"\n [class.initiallySelected]=\"index === initiallySelectedIndex\"\n [class.disabledItem]=\"itemKey ? !!disabledOptions[option[itemKey]] : false\"\n [attr.aria-label]=\"labelKey ? option[labelKey] : option\"\n >\n <ng-container *ngIf=\"optionTemplateRef; else simpleStringDisplay\">\n <ng-container *ngTemplateOutlet=\"optionTemplateRef; context: { $implicit: option, index: index }\"></ng-container>\n </ng-container>\n <ng-template #simpleStringDisplay>\n <span>\n {{ labelKey ? option[labelKey] : option }}\n </span>\n </ng-template>\n </li>\n <lx-spinner *ngIf=\"loading\" [fadeBackground]=\"true\"></lx-spinner>\n </ul>\n</ng-template>\n", styles: [":host(.noOptionPadding) .options .option{padding:0}.overlayDropdown{width:100%;background:#fff;border-radius:3px;border-left:solid 1px #e1e5eb;border-right:solid 1px #e1e5eb;margin:0 -1px;width:calc(100% + 2px)}.overlayDropdown:not(.top){box-shadow:0 6px 6px #21252933;border-top:0;border-bottom:solid 1px #e1e5eb;border-top-left-radius:0;border-top-right-radius:0}.overlayDropdown.top{box-shadow:0 -4px 6px #21252933;border-top:solid 1px #e1e5eb;border-bottom:0;border-bottom-left-radius:0;border-bottom-right-radius:0}.truncateOptions li{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.defaultPadding .newEntryOption,.defaultPadding .onTheFlyOption,.defaultPadding .noOptionsAvailable{padding:4px 12px!important}.narrowPadding .newEntryOption,.narrowPadding .onTheFlyOption,.narrowPadding .noOptionsAvailable{padding:4px!important}.options{list-style:none;margin:0;padding:0;overflow-y:auto;max-height:250px}.options.defaultPadding .option{padding:4px 12px}.options.narrowPadding .option{padding:4px}.optionSearch{padding:2px}.option{cursor:pointer;display:block}.option:hover:not(.disabledItem){background-color:#e1e5eb!important}.option.selected{background:#eaedf1}.option.initiallySelected{color:var(--lx-primarybutton-backgroundcolor)}.option.disabledItem{cursor:default;opacity:.5}\n"] }]
|
|
2219
|
+
}], ctorParameters: function () { return []; }, propDecorators: { options: [{
|
|
2205
2220
|
type: Input
|
|
2206
2221
|
}], initiallySelectedIndex: [{
|
|
2207
2222
|
type: Input
|
|
@@ -2221,6 +2236,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImpor
|
|
|
2221
2236
|
type: Input
|
|
2222
2237
|
}], disabledOptions: [{
|
|
2223
2238
|
type: Input
|
|
2239
|
+
}], overlayPositioning: [{
|
|
2240
|
+
type: Input
|
|
2241
|
+
}], truncateOptions: [{
|
|
2242
|
+
type: Input
|
|
2224
2243
|
}], onItemSelected: [{
|
|
2225
2244
|
type: Output
|
|
2226
2245
|
}], triggerRequestForMoreEntries: [{
|
|
@@ -2238,6 +2257,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImpor
|
|
|
2238
2257
|
}], descriptionTemplateRef: [{
|
|
2239
2258
|
type: ContentChild,
|
|
2240
2259
|
args: ['descriptionTemplateRef']
|
|
2260
|
+
}], selectOrigin: [{
|
|
2261
|
+
type: ViewChild,
|
|
2262
|
+
args: ['selectOrigin', { static: false }]
|
|
2241
2263
|
}] } });
|
|
2242
2264
|
|
|
2243
2265
|
// We can only use 'keyCode' because 'key' depends on the browser
|