@piserve-tech/drop-down 1.2.109 → 1.2.110

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.
@@ -0,0 +1,14 @@
1
+ /* To learn more about this file see: https://angular.io/config/tsconfig. */
2
+ {
3
+ "extends": "../../tsconfig.json",
4
+ "compilerOptions": {
5
+ "outDir": "../../out-tsc/spec",
6
+ "types": [
7
+ "jasmine"
8
+ ]
9
+ },
10
+ "include": [
11
+ "**/*.spec.ts",
12
+ "**/*.d.ts"
13
+ ]
14
+ }
@@ -1,211 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, EventEmitter, HostListener, Input, Output, ViewChild, ViewEncapsulation, } from "@angular/core";
2
- import { v4 as uuidv4 } from 'uuid';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/forms";
5
- import * as i2 from "@angular/common";
6
- export class DropdownComponent {
7
- set items(value) {
8
- this._items = value || [];
9
- this.originalItems = this._items.slice();
10
- this._filteredItems = this._items.slice(); // use a separate variable for rendering
11
- this.cdr.markForCheck();
12
- }
13
- get items() {
14
- return this._items;
15
- }
16
- constructor(cdr) {
17
- this.cdr = cdr;
18
- this.selectedItems = [];
19
- this.placeholder = "";
20
- this.selectedValues = "";
21
- this.customButtons = [];
22
- this.showBorder = true;
23
- this.disable = false;
24
- this.buttonClick = new EventEmitter();
25
- this.selectedItemsChange = new EventEmitter();
26
- this.onDropdownScroll = new EventEmitter();
27
- this.onCreateNew = new EventEmitter();
28
- this.onSearch = new EventEmitter();
29
- //subLabel
30
- this.showSubLabel = false;
31
- this.dropdownId = uuidv4();
32
- this.dropdownOpened = false;
33
- this.selectedItemName = "";
34
- this.selectedItemImage = "";
35
- this.originalItems = [];
36
- this.searchTerm = "";
37
- this.initialized = false;
38
- this.searchText = "";
39
- this._filteredItems = [];
40
- this._items = [];
41
- }
42
- ngOnInit() { }
43
- ngOnChanges(changes) {
44
- if (changes["selectedItems"]) {
45
- const item = changes["selectedItems"]["currentValue"];
46
- this.selectedItems = item;
47
- this.selectedItemName = this.selectedItems[0]?.label;
48
- this.selectedItemImage = this.selectedItems[0]?.image;
49
- }
50
- if (changes["items"]) {
51
- this.initialize();
52
- this.originalItems = this.items.slice();
53
- this.cdr.markForCheck();
54
- }
55
- if (changes["selectedValues"]) {
56
- this.selectedItemName = this.selectedValues;
57
- }
58
- }
59
- initialize() {
60
- setTimeout(() => {
61
- if (this.selectedItems && this.selectedItems.length > 0) {
62
- if (!this.multiple) {
63
- this.searchText = "";
64
- this.selectedItemName = this.selectedItems[0]?.label;
65
- this.selectedItemImage = this.selectedItems[0]?.image;
66
- }
67
- }
68
- }, 1000);
69
- const uniqueItems = this.items.filter((selected, index, self) => index === self.findIndex((t) => t.value === selected.value));
70
- this.items = uniqueItems;
71
- }
72
- openDropdown() {
73
- this.dropdownOpened = !this.dropdownOpened;
74
- const inputId = `searchInput-${this.dropdownId}`;
75
- const inputEl = document.getElementById(inputId);
76
- setTimeout(() => {
77
- inputEl?.focus();
78
- }, 0);
79
- }
80
- dropdownScroll(event) {
81
- if (this.onDropdownScroll.observed) {
82
- this.onDropdownScroll.emit(event);
83
- this.cdr.markForCheck();
84
- }
85
- }
86
- selectItem(item) {
87
- if (this.multiple) {
88
- if (!this.selectedItems.includes(item)) {
89
- this.selectedItems.push(item);
90
- this.selectedItemsChange.emit(this.selectedItems);
91
- }
92
- else {
93
- this.selectedItems = this.selectedItems.filter((selected) => selected !== item);
94
- this.selectedItemsChange.emit(this.selectedItems);
95
- }
96
- }
97
- else {
98
- this.searchText = "";
99
- this.selectedItems[0] = item;
100
- this.selectedItemName = this.selectedItems[0]?.label;
101
- this.selectedItemImage = this.selectedItems[0]?.image;
102
- this.dropdownOpened = false;
103
- this.selectedItemsChange.emit(this.selectedItems);
104
- }
105
- }
106
- unselectItem(item) {
107
- this.selectedItems = this.selectedItems.filter((selected) => selected !== item);
108
- this.selectedItemsChange.emit(this.selectedItems);
109
- }
110
- unselectAll() {
111
- this.selectedItems = [];
112
- this.selectedItemName = "";
113
- this.selectedItemImage = "";
114
- this.selectedItemsChange.emit(this.selectedItems);
115
- this.cdr.markForCheck();
116
- }
117
- onDocumentClick(event) {
118
- const isClickInsideDropdown = this.dropdown.nativeElement.contains(event.target);
119
- if (!isClickInsideDropdown) {
120
- this.dropdownOpened = false;
121
- }
122
- }
123
- createNew() {
124
- this.onCreateNew.emit();
125
- this.dropdownOpened = false;
126
- }
127
- search(event) {
128
- const keyCode = event.keyCode;
129
- this.dropdownOpened = true;
130
- this.searchTerm = event.target.value.toLowerCase();
131
- if (!this.onSearch.observed) {
132
- if (this.searchTerm.trim() === "") {
133
- if (!this.multiple) {
134
- this.unselectAll();
135
- }
136
- this._filteredItems = this.originalItems.slice();
137
- }
138
- else {
139
- const lowerCaseSearchTerm = this.searchTerm.toLowerCase();
140
- this._filteredItems = this.originalItems.filter((item) => item.label.toLowerCase().includes(lowerCaseSearchTerm) ||
141
- (item.value &&
142
- item.value.toLowerCase().includes(lowerCaseSearchTerm)));
143
- }
144
- }
145
- else {
146
- this.onSearch.emit(this.searchTerm);
147
- }
148
- }
149
- handleButtonClick(action) {
150
- action();
151
- this.buttonClick.emit();
152
- }
153
- highlightMatch(text) {
154
- const search = this.searchText?.trim() || this.searchTerm?.trim();
155
- if (!search || !text)
156
- return text;
157
- const index = text.toLowerCase().indexOf(search.toLowerCase());
158
- if (index === -1)
159
- return text;
160
- const before = text.substring(0, index);
161
- const match = text.substring(index, index + search.length);
162
- const after = text.substring(index + search.length);
163
- return `${before}<span class="highlight-text">${match}</span>${after}`;
164
- }
165
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DropdownComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
166
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DropdownComponent, selector: "lib-dropdown", inputs: { multiple: "multiple", selectedItems: "selectedItems", placeholder: "placeholder", showCreateNew: "showCreateNew", selectedValues: "selectedValues", customButtons: "customButtons", showBorder: "showBorder", disable: "disable", showSubLabel: "showSubLabel", items: "items" }, outputs: { buttonClick: "buttonClick", selectedItemsChange: "selectedItemsChange", onDropdownScroll: "onDropdownScroll", onCreateNew: "onCreateNew", onSearch: "onSearch" }, host: { listeners: { "document:click": "onDocumentClick($event)" } }, viewQueries: [{ propertyName: "dropdownitems", first: true, predicate: ["dropdownItems"], descendants: true }, { propertyName: "dropdown", first: true, predicate: ["dropdown"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n #dropdown\n class=\"dropdown\"\n [ngClass]=\"{\n opened: showBorder && dropdownOpened,\n closed: showBorder && !dropdownOpened,\n 'dropdown-disabled': disable\n }\"\n>\n <div\n class=\"dropdown-field\"\n id=\"division\"\n [ngClass]=\"{\n opened: showBorder && dropdownOpened,\n closed: showBorder && !dropdownOpened,\n }\"\n (click)=\"openDropdown()\"\n >\n <!-- <div *ngIf=\"selectedValues !== '' && !selectedItemName\" class=\"selected\">\n {{ selectedValues }}\n </div> -->\n <div class=\"flexSection\">\n <div class=\"dataSection\" *ngIf=\"!selectedItem && multiple\">\n <div class=\"selected selectedList\">\n <ng-container *ngFor=\"let selectedItem of selectedItems\">\n <div class=\"selected-item\">\n <img\n *ngIf=\"selectedItem?.image\"\n class=\"multiSelected-icon-size\"\n [src]=\"selectedItem?.image\"\n alt=\"image\"\n />\n <span>{{ selectedItem.label }}</span>\n <span (click)=\"unselectItem(selectedItem)\" class=\"close-icon\"\n >&times;</span\n >\n </div>\n </ng-container>\n\n <div class=\"input-field\">\n <input\n [id]=\"'searchInput-' + dropdownId\"\n class=\"dropdown_text inline-input\"\n [(ngModel)]=\"searchText\"\n [placeholder]=\"placeholder\"\n (input)=\"search($event)\"\n />\n </div>\n </div>\n </div>\n <div class=\"dataSection single-input\" *ngIf=\"!multiple\">\n <div class=\"input-field\">\n <div class=\"input-with-icon\">\n <img\n *ngIf=\"selectedItemImage\"\n class=\"selected-icon-size\"\n [src]=\"selectedItemImage\"\n alt=\"image\"\n />\n <input\n [id]=\"'searchInput-' + dropdownId\"\n class=\"dropdown_text inline-input\"\n [placeholder]=\"placeholder\"\n [(ngModel)]=\"selectedItemName\"\n (input)=\"search($event)\"\n />\n </div>\n </div>\n </div>\n <div class=\"iconSection\">\n <div class=\"dropdown-icons-container\">\n <div>\n <span\n (click)=\"unselectAll()\"\n *ngIf=\"selectedItems.length > 0 && multiple\"\n class=\"deselect\"\n >&times;\n </span>\n </div>\n <div\n class=\"dropdown-down-arrow\"\n [ngClass]=\"{ opened: dropdownOpened, closed: !dropdownOpened }\"\n >\n <svg\n width=\"1em\"\n viewBox=\"0 0 24 25\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"down-arrow-img\"\n >\n <g id=\"Down Arrow\">\n <g id=\"Group\">\n <path\n id=\"Path\"\n d=\"M6 9.13741L12 15.229L18 9.13741\"\n stroke=\"#8E9AA0\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </g>\n </g>\n </svg>\n </div>\n <div\n class=\"dropdown-up-arrow\"\n [ngClass]=\"{ opened: dropdownOpened, closed: !dropdownOpened }\"\n >\n <svg\n width=\"1em\"\n viewBox=\"0 0 24 25\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"up-arrow-img\"\n >\n <path\n d=\"M18 15.229L12 9.1374L6 15.229\"\n stroke=\"#8E9AA0\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div\n #dropdownItems\n class=\"dropdown-items\"\n *ngIf=\"dropdownOpened\"\n (scroll)=\"dropdownScroll($event)\"\n >\n <div (click)=\"createNew()\">\n <a class=\"create_button\" *ngIf=\"showCreateNew\">Create new</a>\n </div>\n <ng-container *ngIf=\"items.length > 0; else noDataAvailable\">\n <ng-container *ngIf=\"multiple; else singleSelection\">\n <a\n [ngClass]=\"{\n compact: !item?.image && !item?.subLabel,\n expanded: item?.image || item?.subLabel\n }\"\n class=\"items d-block\"\n *ngFor=\"let item of _filteredItems\"\n (click)=\"selectItem(item)\"\n >\n <div class=\"dropdown-item\">\n <div class=\"item-details\">\n <div class=\"content-wrapper\">\n <img\n *ngIf=\"item?.image\"\n [src]=\"item?.image\"\n alt=\"Item Image\"\n class=\"item-image icon-size\"\n />\n <div class=\"text-content\">\n <div\n class=\"item-label\"\n [innerHTML]=\"highlightMatch(item.label)\"\n ></div>\n <div *ngIf=\"showSubLabel\" class=\"item-sublabel\">\n {{ item?.subLabel }}\n </div>\n </div>\n </div>\n <div\n class=\"dropdown_buttons\"\n [class.empty]=\"customButtons.length === 0\"\n >\n <button\n *ngFor=\"let button of customButtons\"\n (click)=\"handleButtonClick(button.action)\"\n >\n <i [class]=\"button.icon\" [style.color]=\"button.color\"></i>\n </button>\n </div>\n </div>\n </div>\n </a>\n </ng-container>\n\n <ng-template #singleSelection>\n <a\n class=\"items d-block\"\n [ngClass]=\"{\n compact: !item?.image && !item?.subLabel,\n expanded: item?.image || item?.subLabel\n }\"\n *ngFor=\"let item of _filteredItems\"\n (click)=\"selectItem(item)\"\n >\n <div class=\"dropdown-item\">\n <div class=\"item-details\">\n <div class=\"content-wrapper\">\n <img\n *ngIf=\"item?.image\"\n [src]=\"item?.image\"\n alt=\"Item Image\"\n class=\"item-image icon-size\"\n />\n <div class=\"text-content\">\n <div\n class=\"item-label\"\n [innerHTML]=\"highlightMatch(item.label)\"\n ></div>\n <div *ngIf=\"showSubLabel\" class=\"item-sublabel\">\n {{ item?.subLabel }}\n </div>\n </div>\n </div>\n <div\n class=\"dropdown_buttons\"\n [class.empty]=\"customButtons.length === 0\"\n >\n <button\n *ngFor=\"let button of customButtons\"\n (click)=\"handleButtonClick(button.action)\"\n >\n <i [class]=\"button.icon\" [style.color]=\"button.color\"></i>\n </button>\n </div>\n </div>\n </div>\n </a>\n </ng-template>\n </ng-container>\n\n <!-- \"No data available\" message if the drop down is empty -->\n <ng-template #noDataAvailable>\n <div class=\"items\">No data available</div>\n </ng-template>\n </div>\n</div>\n", styles: [".dropdown{background:#fff;border-radius:6px}.dropdown .dropdown-field{background:#fff;border-radius:6px;position:relative;cursor:pointer}.dropdown .dropdown-field .selected.selectedList{display:flex;flex-wrap:wrap;max-height:80px;overflow-y:auto;overflow-x:hidden}.dropdown .dropdown-field .selected .selected-item{background:#e3e3da;display:inline;margin:5px;padding:2px;border-radius:5px;font-size:small}.dropdown .dropdown-field .selected .remaining-items{margin:5px;padding:2px;font-size:smaller;display:block}.dropdown .dropdown-field .input-field .dropdown_text{width:100%;border:none;padding:2px;margin-left:3px;margin-right:3px;outline:none;box-sizing:border-box;font-style:normal}@media (max-width: 576px){.dropdown .dropdown-field .input-field .dropdown_text{width:53%;margin-left:3px;padding-left:2px}}@media (max-width: 420px){.dropdown .dropdown-field .input-field .dropdown_text{width:53%;margin-left:3px;padding-left:2px}}@media only screen and (min-width: 576px){.dropdown .dropdown-field .input-field .dropdown_text{height:25px}}@media only screen and (min-width: 992px){.dropdown .dropdown-field .input-field .dropdown_text{height:30px}}@media only screen and (min-width: 1200px){.dropdown .dropdown-field .input-field .dropdown_text{height:35px}}.dropdown .dropdown-field.closed{border:1px solid #d8d8d8}.dropdown .dropdown-field.opened{border-bottom:1px solid #d8d8d8}.dropdown .dropdown-items{overflow-y:auto;overflow-x:auto;position:absolute!important;top:100%;left:0;width:100%;background:#fff;z-index:9999999;border:solid 1px #dbdbdb;box-shadow:0 4px 4px -5px #00000040;transition:transform .3s ease-out;scroll-behavior:smooth;cursor:pointer}@media only screen and (min-width: 276px){.dropdown .dropdown-items{max-height:150px;padding:3px}}@media only screen and (min-width: 576px){.dropdown .dropdown-items{max-height:150px;padding:3px}}@media only screen and (min-width: 992px){.dropdown .dropdown-items{max-height:150px;padding:5px}}@media only screen and (min-width: 1441px){.dropdown .dropdown-items{max-height:200px;padding:7px}}.dropdown .dropdown-items .create_button{text-decoration:none;cursor:pointer}@media only screen and (min-width: 576px){.dropdown .dropdown-items .create_button{padding-left:8px}}@media only screen and (min-width: 992px){.dropdown .dropdown-items .create_button{padding-left:8px}}@media only screen and (min-width: 1200px){.dropdown .dropdown-items .create_button{padding-left:8px}}.dropdown .dropdown-items .items{text-decoration:none;color:inherit;position:relative;cursor:pointer}@media only screen and (min-width: 576px){.dropdown .dropdown-items .items{padding-left:8px;font-size:small}}@media only screen and (min-width: 992px){.dropdown .dropdown-items .items{padding-left:8px}}@media only screen and (min-width: 1200px){.dropdown .dropdown-items .items{padding-left:8px;font-size:small}}.dropdown .dropdown-items .items:hover{background:#ebedef;border-radius:6px}.dropdown .dropdown-items .items:hover button{visibility:visible}.dropdown .dropdown-items .items .dropdown_buttons{display:inline}.dropdown .dropdown-items .items button{border:0;background:transparent;visibility:hidden}.dropdown.opened{border:1px #d8d8d8 solid}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background-color:transparent}::-webkit-scrollbar-thumb{background-color:#b2b2b2;border-radius:6px}.space{width:10px}.icon-size{width:30px;height:30px;margin-right:7px}.smallSpace{width:3px}.selected-icon-size{width:25px;height:20px;margin-left:10px}@media (max-width: 576px){.selected-icon-size{width:21px;height:15px;margin-right:7px;margin-bottom:1px}}.multiSelected-icon-size{width:25px;height:20px;margin-left:1px;margin-bottom:1px;margin-right:3px}.flexSection{display:flex;justify-content:space-between}.dropdown-down-arrow,.dropdown-up-arrow,.deselect{width:20px;height:20px;display:flex;align-items:center;justify-content:center;cursor:pointer}.dropdown-down-arrow{cursor:pointer}.dropdown-down-arrow.opened{display:none}.dropdown-down-arrow.closed{display:block}.dropdown-up-arrow{cursor:pointer}.dropdown-up-arrow.closed{display:none}.close-icon{margin-left:8px;margin-right:5px}.iconSection{display:flex;flex-direction:row-reverse;padding:1px;position:relative;justify-content:center;align-items:center}.dropdown-icons-container{display:flex;gap:10px}.item-details{display:flex;align-items:center;justify-content:space-between}.content-wrapper{display:flex;align-items:center;gap:8px;flex:1}.text-content{display:flex;flex-direction:column}.item-label{font-size:14px;font-weight:400;line-height:1.3}.item-sublabel{font-size:11px;color:#666;line-height:1.2}.dropdown_buttons{display:flex;gap:4px}.dropdown_buttons.empty:after{content:\"\";display:inline-block;width:4px;height:1px}.compact{line-height:32px}.expanded{line-height:41px}.input-field{width:100%}.input-with-icon{display:flex;align-items:center;gap:8px;width:100%}.selected-icon-size{width:20px;height:20px;flex-shrink:0}.dropdown_text.inline-input{flex:1;border:none;outline:none;padding:0;background:transparent;font-family:inherit;font-size:inherit;color:inherit}.single-input{width:80%;white-space:nowrap}.item-label{font-size:14px;line-height:1.4;color:#333}.highlight-text{font-weight:600;background-repeat:no-repeat;background-size:100% .3em;background-position:0 88%;padding:.1em .05em;border-radius:2px;color:#1a1a1a;transition:all .2s ease-in-out}.dropdown .dropdown-field .input-field .dropdown_text{background:#fff!important}.dropdown.dropdown-disabled .dropdown-field .input-field .dropdown_text,.dropdown.dropdown-disabled .dropdown-field{background:#e9ecef!important;pointer-events:none}\n"], dependencies: [{ kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
167
- }
168
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DropdownComponent, decorators: [{
169
- type: Component,
170
- args: [{ selector: "lib-dropdown", encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n #dropdown\n class=\"dropdown\"\n [ngClass]=\"{\n opened: showBorder && dropdownOpened,\n closed: showBorder && !dropdownOpened,\n 'dropdown-disabled': disable\n }\"\n>\n <div\n class=\"dropdown-field\"\n id=\"division\"\n [ngClass]=\"{\n opened: showBorder && dropdownOpened,\n closed: showBorder && !dropdownOpened,\n }\"\n (click)=\"openDropdown()\"\n >\n <!-- <div *ngIf=\"selectedValues !== '' && !selectedItemName\" class=\"selected\">\n {{ selectedValues }}\n </div> -->\n <div class=\"flexSection\">\n <div class=\"dataSection\" *ngIf=\"!selectedItem && multiple\">\n <div class=\"selected selectedList\">\n <ng-container *ngFor=\"let selectedItem of selectedItems\">\n <div class=\"selected-item\">\n <img\n *ngIf=\"selectedItem?.image\"\n class=\"multiSelected-icon-size\"\n [src]=\"selectedItem?.image\"\n alt=\"image\"\n />\n <span>{{ selectedItem.label }}</span>\n <span (click)=\"unselectItem(selectedItem)\" class=\"close-icon\"\n >&times;</span\n >\n </div>\n </ng-container>\n\n <div class=\"input-field\">\n <input\n [id]=\"'searchInput-' + dropdownId\"\n class=\"dropdown_text inline-input\"\n [(ngModel)]=\"searchText\"\n [placeholder]=\"placeholder\"\n (input)=\"search($event)\"\n />\n </div>\n </div>\n </div>\n <div class=\"dataSection single-input\" *ngIf=\"!multiple\">\n <div class=\"input-field\">\n <div class=\"input-with-icon\">\n <img\n *ngIf=\"selectedItemImage\"\n class=\"selected-icon-size\"\n [src]=\"selectedItemImage\"\n alt=\"image\"\n />\n <input\n [id]=\"'searchInput-' + dropdownId\"\n class=\"dropdown_text inline-input\"\n [placeholder]=\"placeholder\"\n [(ngModel)]=\"selectedItemName\"\n (input)=\"search($event)\"\n />\n </div>\n </div>\n </div>\n <div class=\"iconSection\">\n <div class=\"dropdown-icons-container\">\n <div>\n <span\n (click)=\"unselectAll()\"\n *ngIf=\"selectedItems.length > 0 && multiple\"\n class=\"deselect\"\n >&times;\n </span>\n </div>\n <div\n class=\"dropdown-down-arrow\"\n [ngClass]=\"{ opened: dropdownOpened, closed: !dropdownOpened }\"\n >\n <svg\n width=\"1em\"\n viewBox=\"0 0 24 25\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"down-arrow-img\"\n >\n <g id=\"Down Arrow\">\n <g id=\"Group\">\n <path\n id=\"Path\"\n d=\"M6 9.13741L12 15.229L18 9.13741\"\n stroke=\"#8E9AA0\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </g>\n </g>\n </svg>\n </div>\n <div\n class=\"dropdown-up-arrow\"\n [ngClass]=\"{ opened: dropdownOpened, closed: !dropdownOpened }\"\n >\n <svg\n width=\"1em\"\n viewBox=\"0 0 24 25\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"up-arrow-img\"\n >\n <path\n d=\"M18 15.229L12 9.1374L6 15.229\"\n stroke=\"#8E9AA0\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div\n #dropdownItems\n class=\"dropdown-items\"\n *ngIf=\"dropdownOpened\"\n (scroll)=\"dropdownScroll($event)\"\n >\n <div (click)=\"createNew()\">\n <a class=\"create_button\" *ngIf=\"showCreateNew\">Create new</a>\n </div>\n <ng-container *ngIf=\"items.length > 0; else noDataAvailable\">\n <ng-container *ngIf=\"multiple; else singleSelection\">\n <a\n [ngClass]=\"{\n compact: !item?.image && !item?.subLabel,\n expanded: item?.image || item?.subLabel\n }\"\n class=\"items d-block\"\n *ngFor=\"let item of _filteredItems\"\n (click)=\"selectItem(item)\"\n >\n <div class=\"dropdown-item\">\n <div class=\"item-details\">\n <div class=\"content-wrapper\">\n <img\n *ngIf=\"item?.image\"\n [src]=\"item?.image\"\n alt=\"Item Image\"\n class=\"item-image icon-size\"\n />\n <div class=\"text-content\">\n <div\n class=\"item-label\"\n [innerHTML]=\"highlightMatch(item.label)\"\n ></div>\n <div *ngIf=\"showSubLabel\" class=\"item-sublabel\">\n {{ item?.subLabel }}\n </div>\n </div>\n </div>\n <div\n class=\"dropdown_buttons\"\n [class.empty]=\"customButtons.length === 0\"\n >\n <button\n *ngFor=\"let button of customButtons\"\n (click)=\"handleButtonClick(button.action)\"\n >\n <i [class]=\"button.icon\" [style.color]=\"button.color\"></i>\n </button>\n </div>\n </div>\n </div>\n </a>\n </ng-container>\n\n <ng-template #singleSelection>\n <a\n class=\"items d-block\"\n [ngClass]=\"{\n compact: !item?.image && !item?.subLabel,\n expanded: item?.image || item?.subLabel\n }\"\n *ngFor=\"let item of _filteredItems\"\n (click)=\"selectItem(item)\"\n >\n <div class=\"dropdown-item\">\n <div class=\"item-details\">\n <div class=\"content-wrapper\">\n <img\n *ngIf=\"item?.image\"\n [src]=\"item?.image\"\n alt=\"Item Image\"\n class=\"item-image icon-size\"\n />\n <div class=\"text-content\">\n <div\n class=\"item-label\"\n [innerHTML]=\"highlightMatch(item.label)\"\n ></div>\n <div *ngIf=\"showSubLabel\" class=\"item-sublabel\">\n {{ item?.subLabel }}\n </div>\n </div>\n </div>\n <div\n class=\"dropdown_buttons\"\n [class.empty]=\"customButtons.length === 0\"\n >\n <button\n *ngFor=\"let button of customButtons\"\n (click)=\"handleButtonClick(button.action)\"\n >\n <i [class]=\"button.icon\" [style.color]=\"button.color\"></i>\n </button>\n </div>\n </div>\n </div>\n </a>\n </ng-template>\n </ng-container>\n\n <!-- \"No data available\" message if the drop down is empty -->\n <ng-template #noDataAvailable>\n <div class=\"items\">No data available</div>\n </ng-template>\n </div>\n</div>\n", styles: [".dropdown{background:#fff;border-radius:6px}.dropdown .dropdown-field{background:#fff;border-radius:6px;position:relative;cursor:pointer}.dropdown .dropdown-field .selected.selectedList{display:flex;flex-wrap:wrap;max-height:80px;overflow-y:auto;overflow-x:hidden}.dropdown .dropdown-field .selected .selected-item{background:#e3e3da;display:inline;margin:5px;padding:2px;border-radius:5px;font-size:small}.dropdown .dropdown-field .selected .remaining-items{margin:5px;padding:2px;font-size:smaller;display:block}.dropdown .dropdown-field .input-field .dropdown_text{width:100%;border:none;padding:2px;margin-left:3px;margin-right:3px;outline:none;box-sizing:border-box;font-style:normal}@media (max-width: 576px){.dropdown .dropdown-field .input-field .dropdown_text{width:53%;margin-left:3px;padding-left:2px}}@media (max-width: 420px){.dropdown .dropdown-field .input-field .dropdown_text{width:53%;margin-left:3px;padding-left:2px}}@media only screen and (min-width: 576px){.dropdown .dropdown-field .input-field .dropdown_text{height:25px}}@media only screen and (min-width: 992px){.dropdown .dropdown-field .input-field .dropdown_text{height:30px}}@media only screen and (min-width: 1200px){.dropdown .dropdown-field .input-field .dropdown_text{height:35px}}.dropdown .dropdown-field.closed{border:1px solid #d8d8d8}.dropdown .dropdown-field.opened{border-bottom:1px solid #d8d8d8}.dropdown .dropdown-items{overflow-y:auto;overflow-x:auto;position:absolute!important;top:100%;left:0;width:100%;background:#fff;z-index:9999999;border:solid 1px #dbdbdb;box-shadow:0 4px 4px -5px #00000040;transition:transform .3s ease-out;scroll-behavior:smooth;cursor:pointer}@media only screen and (min-width: 276px){.dropdown .dropdown-items{max-height:150px;padding:3px}}@media only screen and (min-width: 576px){.dropdown .dropdown-items{max-height:150px;padding:3px}}@media only screen and (min-width: 992px){.dropdown .dropdown-items{max-height:150px;padding:5px}}@media only screen and (min-width: 1441px){.dropdown .dropdown-items{max-height:200px;padding:7px}}.dropdown .dropdown-items .create_button{text-decoration:none;cursor:pointer}@media only screen and (min-width: 576px){.dropdown .dropdown-items .create_button{padding-left:8px}}@media only screen and (min-width: 992px){.dropdown .dropdown-items .create_button{padding-left:8px}}@media only screen and (min-width: 1200px){.dropdown .dropdown-items .create_button{padding-left:8px}}.dropdown .dropdown-items .items{text-decoration:none;color:inherit;position:relative;cursor:pointer}@media only screen and (min-width: 576px){.dropdown .dropdown-items .items{padding-left:8px;font-size:small}}@media only screen and (min-width: 992px){.dropdown .dropdown-items .items{padding-left:8px}}@media only screen and (min-width: 1200px){.dropdown .dropdown-items .items{padding-left:8px;font-size:small}}.dropdown .dropdown-items .items:hover{background:#ebedef;border-radius:6px}.dropdown .dropdown-items .items:hover button{visibility:visible}.dropdown .dropdown-items .items .dropdown_buttons{display:inline}.dropdown .dropdown-items .items button{border:0;background:transparent;visibility:hidden}.dropdown.opened{border:1px #d8d8d8 solid}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background-color:transparent}::-webkit-scrollbar-thumb{background-color:#b2b2b2;border-radius:6px}.space{width:10px}.icon-size{width:30px;height:30px;margin-right:7px}.smallSpace{width:3px}.selected-icon-size{width:25px;height:20px;margin-left:10px}@media (max-width: 576px){.selected-icon-size{width:21px;height:15px;margin-right:7px;margin-bottom:1px}}.multiSelected-icon-size{width:25px;height:20px;margin-left:1px;margin-bottom:1px;margin-right:3px}.flexSection{display:flex;justify-content:space-between}.dropdown-down-arrow,.dropdown-up-arrow,.deselect{width:20px;height:20px;display:flex;align-items:center;justify-content:center;cursor:pointer}.dropdown-down-arrow{cursor:pointer}.dropdown-down-arrow.opened{display:none}.dropdown-down-arrow.closed{display:block}.dropdown-up-arrow{cursor:pointer}.dropdown-up-arrow.closed{display:none}.close-icon{margin-left:8px;margin-right:5px}.iconSection{display:flex;flex-direction:row-reverse;padding:1px;position:relative;justify-content:center;align-items:center}.dropdown-icons-container{display:flex;gap:10px}.item-details{display:flex;align-items:center;justify-content:space-between}.content-wrapper{display:flex;align-items:center;gap:8px;flex:1}.text-content{display:flex;flex-direction:column}.item-label{font-size:14px;font-weight:400;line-height:1.3}.item-sublabel{font-size:11px;color:#666;line-height:1.2}.dropdown_buttons{display:flex;gap:4px}.dropdown_buttons.empty:after{content:\"\";display:inline-block;width:4px;height:1px}.compact{line-height:32px}.expanded{line-height:41px}.input-field{width:100%}.input-with-icon{display:flex;align-items:center;gap:8px;width:100%}.selected-icon-size{width:20px;height:20px;flex-shrink:0}.dropdown_text.inline-input{flex:1;border:none;outline:none;padding:0;background:transparent;font-family:inherit;font-size:inherit;color:inherit}.single-input{width:80%;white-space:nowrap}.item-label{font-size:14px;line-height:1.4;color:#333}.highlight-text{font-weight:600;background-repeat:no-repeat;background-size:100% .3em;background-position:0 88%;padding:.1em .05em;border-radius:2px;color:#1a1a1a;transition:all .2s ease-in-out}.dropdown .dropdown-field .input-field .dropdown_text{background:#fff!important}.dropdown.dropdown-disabled .dropdown-field .input-field .dropdown_text,.dropdown.dropdown-disabled .dropdown-field{background:#e9ecef!important;pointer-events:none}\n"] }]
171
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { multiple: [{
172
- type: Input
173
- }], selectedItems: [{
174
- type: Input
175
- }], placeholder: [{
176
- type: Input
177
- }], showCreateNew: [{
178
- type: Input
179
- }], selectedValues: [{
180
- type: Input
181
- }], customButtons: [{
182
- type: Input
183
- }], showBorder: [{
184
- type: Input
185
- }], disable: [{
186
- type: Input
187
- }], buttonClick: [{
188
- type: Output
189
- }], selectedItemsChange: [{
190
- type: Output
191
- }], onDropdownScroll: [{
192
- type: Output
193
- }], onCreateNew: [{
194
- type: Output
195
- }], onSearch: [{
196
- type: Output
197
- }], showSubLabel: [{
198
- type: Input
199
- }], items: [{
200
- type: Input
201
- }], dropdownitems: [{
202
- type: ViewChild,
203
- args: ["dropdownItems"]
204
- }], dropdown: [{
205
- type: ViewChild,
206
- args: ["dropdown"]
207
- }], onDocumentClick: [{
208
- type: HostListener,
209
- args: ["document:click", ["$event"]]
210
- }] } });
211
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvZHJvcGRvd24vc3JjL2xpYi9kcm9wZG93bi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9kcm9wZG93bi9zcmMvbGliL2Ryb3Bkb3duLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUVULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFFTixTQUFTLEVBQ1QsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxFQUFFLElBQUksTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7O0FBU3BDLE1BQU0sT0FBTyxpQkFBaUI7SUFvQzVCLElBQ0ksS0FBSyxDQUFDLEtBQXFCO1FBQzdCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDekMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsd0NBQXdDO1FBQ25GLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUNELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBRUQsWUFBb0IsR0FBc0I7UUFBdEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUE3Q2pDLGtCQUFhLEdBQVUsRUFBRSxDQUFDO1FBQzFCLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBRXpCLG1CQUFjLEdBQVcsRUFBRSxDQUFDO1FBQzVCLGtCQUFhLEdBS2hCLEVBQUUsQ0FBQztRQUNBLGVBQVUsR0FBWSxJ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QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQU1HLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUdHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBRUUsWUFBWTtzQkFBcEIsS0FBSztnQkFlRixLQUFLO3NCQURSLEtBQUs7Z0JBOERzQixhQUFhO3NCQUF4QyxTQUFTO3VCQUFDLGVBQWU7Z0JBNENILFFBQVE7c0JBQTlCLFNBQVM7dUJBQUMsVUFBVTtnQkFFckIsZUFBZTtzQkFEZCxZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBEcm9wZG93bkl0ZW0gfSBmcm9tIFwiLi9kcm9wZG93bi5tb2RlbFwiO1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJsaWItZHJvcGRvd25cIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9kcm9wZG93bi5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vZHJvcGRvd24uY29tcG9uZW50LnNjc3NcIl0sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBEcm9wZG93bkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIG11bHRpcGxlITogYm9vbGVhbjtcbiAgQElucHV0KCkgc2VsZWN0ZWRJdGVtczogYW55W10gPSBbXTtcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IFN0cmluZyA9IFwiXCI7XG4gIEBJbnB1dCgpIHNob3dDcmVhdGVOZXchOiBib29sZWFuO1xuICBASW5wdXQoKSBzZWxlY3RlZFZhbHVlczogc3RyaW5nID0gXCJcIjtcbiAgQElucHV0KCkgY3VzdG9tQnV0dG9uczoge1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgaWNvbjogc3RyaW5nO1xuICAgIGNvbG9yOiBzdHJpbmc7XG4gICAgYWN0aW9uOiAoKSA9PiB2b2lkO1xuICB9W10gPSBbXTtcbiAgQElucHV0KCkgc2hvd0JvcmRlcjogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIGRpc2FibGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQE91dHB1dCgpIGJ1dHRvbkNsaWNrOiBFdmVudEVtaXR0ZXI8RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcbiAgQE91dHB1dCgpIHNlbGVjdGVkSXRlbXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnlbXT4gPSBuZXcgRXZlbnRFbWl0dGVyPFxuICAgIGFueVtdXG4gID4oKTtcbiAgQE91dHB1dCgpIG9uRHJvcGRvd25TY3JvbGw6IEV2ZW50RW1pdHRlcjxFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuICBAT3V0cHV0KCkgb25DcmVhdGVOZXc6IEV2ZW50RW1pdHRlcjxFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuICBAT3V0cHV0KCkgb25TZWFyY2g6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIC8vc3ViTGFiZWxcbiAgQElucHV0KCkgc2hvd1N1YkxhYmVsOiBib29sZWFuID0gZmFsc2U7XG4gIGRyb3Bkb3duSWQgPSB1dWlkdjQoKTtcbiAgZHJvcGRvd25PcGVuZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2VsZWN0ZWRJdGVtOiBhbnk7XG4gIHNlbGVjdGVkSXRlbU5hbWU6IHN0cmluZyA9IFwiXCI7XG4gIHNlbGVjdGVkSXRlbUltYWdlOiBzdHJpbmcgPSBcIlwiO1xuICBvcmlnaW5hbEl0ZW1zOiBEcm9wZG93bkl0ZW1bXSA9IFtdO1xuICBzZWFyY2hUZXJtOiBzdHJpbmcgPSBcIlwiO1xuICBpbml0aWFsaXplZDogYm9vbGVhbiA9IGZhbHNlO1xuICBzZWFyY2hUZXh0OiBzdHJpbmcgPSBcIlwiO1xuICBfZmlsdGVyZWRJdGVtczogRHJvcGRvd25JdGVtW10gPSBbXTtcblxuICBwcml2YXRlIF9pdGVtczogRHJvcGRvd25JdGVtW10gPSBbXTtcblxuICBASW5wdXQoKVxuICBzZXQgaXRlbXModmFsdWU6IERyb3Bkb3duSXRlbVtdKSB7XG4gICAgdGhpcy5faXRlbXMgPSB2YWx1ZSB8fCBbXTtcbiAgICB0aGlzLm9yaWdpbmFsSXRlbXMgPSB0aGlzLl9pdGVtcy5zbGljZSgpO1xuICAgIHRoaXMuX2ZpbHRlcmVkSXRlbXMgPSB0aGlzLl9pdGVtcy5zbGljZSgpOyAvLyB1c2UgYSBzZXBhcmF0ZSB2YXJpYWJsZSBmb3IgcmVuZGVyaW5nXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cbiAgZ2V0IGl0ZW1zKCk6IERyb3Bkb3duSXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbXM7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7fVxuXG5cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXNbXCJzZWxlY3RlZEl0ZW1zXCJdKSB7XG4gICAgICBjb25zdCBpdGVtID0gY2hhbmdlc1tcInNlbGVjdGVkSXRlbXNcIl1bXCJjdXJyZW50VmFsdWVcIl07XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBpdGVtO1xuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1OYW1lID0gdGhpcy5zZWxlY3RlZEl0ZW1zWzBdPy5sYWJlbDtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtSW1hZ2UgPSB0aGlzLnNlbGVjdGVkSXRlbXNbMF0/LmltYWdlO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1tcIml0ZW1zXCJdKSB7XG4gICAgICB0aGlzLmluaXRpYWxpemUoKTtcbiAgICAgIHRoaXMub3JpZ2luYWxJdGVtcyA9IHRoaXMuaXRlbXMuc2xpY2UoKTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1tcInNlbGVjdGVkVmFsdWVzXCJdKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbU5hbWUgPSB0aGlzLnNlbGVjdGVkVmFsdWVzO1xuICAgIH1cbiAgfVxuXG4gIGluaXRpYWxpemUoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW1zICYmIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgIHRoaXMuc2VhcmNoVGV4dCA9IFwiXCI7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1OYW1lID0gdGhpcy5zZWxlY3RlZEl0ZW1zWzBdPy5sYWJlbDtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUltYWdlID0gdGhpcy5zZWxlY3RlZEl0ZW1zWzBdPy5pbWFnZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIDEwMDApO1xuICAgIGNvbnN0IHVuaXF1ZUl0ZW1zID0gdGhpcy5pdGVtcy5maWx0ZXIoXG4gICAgICAoc2VsZWN0ZWQsIGluZGV4LCBzZWxmKSA9PlxuICAgICAgICBpbmRleCA9PT0gc2VsZi5maW5kSW5kZXgoKHQpID0+IHQudmFsdWUgPT09IHNlbGVjdGVkLnZhbHVlKVxuICAgICk7XG5cbiAgICB0aGlzLml0ZW1zID0gdW5pcXVlSXRlbXM7XG4gIH1cblxuICBvcGVuRHJvcGRvd24oKSB7XG4gICAgdGhpcy5kcm9wZG93bk9wZW5lZCA9ICF0aGlzLmRyb3Bkb3duT3BlbmVkO1xuICAgICBjb25zdCBpbnB1dElkID0gYHNlYXJjaElucHV0LSR7dGhpcy5kcm9wZG93bklkfWA7XG4gICAgY29uc3QgaW5wdXRFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlucHV0SWQpO1xuICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlucHV0RWw/LmZvY3VzKCk7XG4gICAgfSwgMCk7XG4gICAgXG4gIH1cblxuICBAVmlld0NoaWxkKFwiZHJvcGRvd25JdGVtc1wiKSBkcm9wZG93bml0ZW1zITogRWxlbWVudFJlZjxhbnk+O1xuICBkcm9wZG93blNjcm9sbChldmVudDogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMub25Ecm9wZG93blNjcm9sbC5vYnNlcnZlZCkge1xuICAgICAgdGhpcy5vbkRyb3Bkb3duU2Nyb2xsLmVtaXQoZXZlbnQpO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0SXRlbShpdGVtOiBhbnkpIHtcbiAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkSXRlbXMuaW5jbHVkZXMoaXRlbSkpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtc0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRJdGVtcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKFxuICAgICAgICAgIChzZWxlY3RlZDogYW55KSA9PiBzZWxlY3RlZCAhPT0gaXRlbVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXNDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkSXRlbXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlYXJjaFRleHQgPSBcIlwiO1xuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zWzBdID0gaXRlbTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtTmFtZSA9IHRoaXMuc2VsZWN0ZWRJdGVtc1swXT8ubGFiZWw7XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbUltYWdlID0gdGhpcy5zZWxlY3RlZEl0ZW1zWzBdPy5pbWFnZTtcbiAgICAgIHRoaXMuZHJvcGRvd25PcGVuZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtc0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRJdGVtcyk7XG4gICAgfVxuICB9XG5cbiAgdW5zZWxlY3RJdGVtKGl0ZW06IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5maWx0ZXIoXG4gICAgICAoc2VsZWN0ZWQ6IGFueSkgPT4gc2VsZWN0ZWQgIT09IGl0ZW1cbiAgICApO1xuICAgIHRoaXMuc2VsZWN0ZWRJdGVtc0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRJdGVtcyk7XG4gIH1cblxuICB1bnNlbGVjdEFsbCgpIHtcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcbiAgICB0aGlzLnNlbGVjdGVkSXRlbU5hbWUgPSBcIlwiO1xuICAgIHRoaXMuc2VsZWN0ZWRJdGVtSW1hZ2UgPSBcIlwiO1xuICAgIHRoaXMuc2VsZWN0ZWRJdGVtc0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRJdGVtcyk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBAVmlld0NoaWxkKFwiZHJvcGRvd25cIikgZHJvcGRvd24hOiBFbGVtZW50UmVmO1xuICBASG9zdExpc3RlbmVyKFwiZG9jdW1lbnQ6Y2xpY2tcIiwgW1wiJGV2ZW50XCJdKVxuICBvbkRvY3VtZW50Q2xpY2soZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgaXNDbGlja0luc2lkZURyb3Bkb3duID0gdGhpcy5kcm9wZG93bi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKFxuICAgICAgZXZlbnQudGFyZ2V0XG4gICAgKTtcblxuICAgIGlmICghaXNDbGlja0luc2lkZURyb3Bkb3duKSB7XG4gICAgICB0aGlzLmRyb3Bkb3duT3BlbmVkID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgY3JlYXRlTmV3KCkge1xuICAgIHRoaXMub25DcmVhdGVOZXcuZW1pdCgpO1xuICAgIHRoaXMuZHJvcGRvd25PcGVuZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHNlYXJjaChldmVudDogYW55KTogdm9pZCB7XG4gICAgY29uc3Qga2V5Q29kZSA9IGV2ZW50LmtleUNvZGU7XG4gICAgdGhpcy5kcm9wZG93bk9wZW5lZCA9IHRydWU7XG4gICAgdGhpcy5zZWFyY2hUZXJtID0gZXZlbnQudGFyZ2V0LnZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKCF0aGlzLm9uU2VhcmNoLm9ic2VydmVkKSB7XG4gICAgICBpZiAodGhpcy5zZWFyY2hUZXJtLnRyaW0oKSA9PT0gXCJcIikge1xuICAgICAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICB0aGlzLnVuc2VsZWN0QWxsKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZmlsdGVyZWRJdGVtcyA9IHRoaXMub3JpZ2luYWxJdGVtcy5zbGljZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbG93ZXJDYXNlU2VhcmNoVGVybSA9IHRoaXMuc2VhcmNoVGVybS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICB0aGlzLl9maWx0ZXJlZEl0ZW1zID0gdGhpcy5vcmlnaW5hbEl0ZW1zLmZpbHRlcihcbiAgICAgICAgICAoaXRlbSkgPT5cbiAgICAgICAgICAgIGl0ZW0ubGFiZWwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhsb3dlckNhc2VTZWFyY2hUZXJtKSB8fFxuICAgICAgICAgICAgKGl0ZW0udmFsdWUgJiZcbiAgICAgICAgICAgICAgaXRlbS52YWx1ZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGxvd2VyQ2FzZVNlYXJjaFRlcm0pKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9uU2VhcmNoLmVtaXQodGhpcy5zZWFyY2hUZXJtKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVCdXR0b25DbGljayhhY3Rpb246ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBhY3Rpb24oKTtcbiAgICB0aGlzLmJ1dHRvbkNsaWNrLmVtaXQoKTtcbiAgfVxuXG4gIGhpZ2hsaWdodE1hdGNoKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3Qgc2VhcmNoID0gdGhpcy5zZWFyY2hUZXh0Py50cmltKCkgfHwgdGhpcy5zZWFyY2hUZXJtPy50cmltKCk7XG4gICAgaWYgKCFzZWFyY2ggfHwgIXRleHQpIHJldHVybiB0ZXh0O1xuXG4gICAgY29uc3QgaW5kZXggPSB0ZXh0LnRvTG93ZXJDYXNlKCkuaW5kZXhPZihzZWFyY2gudG9Mb3dlckNhc2UoKSk7XG4gICAgaWYgKGluZGV4ID09PSAtMSkgcmV0dXJuIHRleHQ7XG5cbiAgICBjb25zdCBiZWZvcmUgPSB0ZXh0LnN1YnN0cmluZygwLCBpbmRleCk7XG4gICAgY29uc3QgbWF0Y2ggPSB0ZXh0LnN1YnN0cmluZyhpbmRleCwgaW5kZXggKyBzZWFyY2gubGVuZ3RoKTtcbiAgICBjb25zdCBhZnRlciA9IHRleHQuc3Vic3RyaW5nKGluZGV4ICsgc2VhcmNoLmxlbmd0aCk7XG5cbiAgICByZXR1cm4gYCR7YmVmb3JlfTxzcGFuIGNsYXNzPVwiaGlnaGxpZ2h0LXRleHRcIj4ke21hdGNofTwvc3Bhbj4ke2FmdGVyfWA7XG4gIH1cbn1cbiIsIjxkaXZcbiAgI2Ryb3Bkb3duXG4gIGNsYXNzPVwiZHJvcGRvd25cIlxuICBbbmdDbGFzc109XCJ7XG4gICAgb3BlbmVkOiBzaG93Qm9yZGVyICYmIGRyb3Bkb3duT3BlbmVkLFxuICAgIGNsb3NlZDogc2hvd0JvcmRlciAmJiAhZHJvcGRvd25PcGVuZWQsXG4gICAgJ2Ryb3Bkb3duLWRpc2FibGVkJzogZGlzYWJsZVxuICB9XCJcbj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiZHJvcGRvd24tZmllbGRcIlxuICAgIGlkPVwiZGl2aXNpb25cIlxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgIG9wZW5lZDogc2hvd0JvcmRlciAmJiBkcm9wZG93bk9wZW5lZCxcbiAgICAgIGNsb3NlZDogc2hvd0JvcmRlciAmJiAhZHJvcGRvd25PcGVuZWQsXG4gICAgfVwiXG4gICAgKGNsaWNrKT1cIm9wZW5Ecm9wZG93bigpXCJcbiAgPlxuICAgIDwhLS0gPGRpdiAqbmdJZj1cInNlbGVjdGVkVmFsdWVzICE9PSAnJyAmJiAhc2VsZWN0ZWRJdGVtTmFtZVwiIGNsYXNzPVwic2VsZWN0ZWRcIj5cbiAgICAgIHt7IHNlbGVjdGVkVmFsdWVzIH19XG4gICAgPC9kaXY+IC0tPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4U2VjdGlvblwiPlxuICAgICAgPGRpdiBjbGFzcz1cImRhdGFTZWN0aW9uXCIgKm5nSWY9XCIhc2VsZWN0ZWRJdGVtICYmIG11bHRpcGxlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RlZCBzZWxlY3RlZExpc3RcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzZWxlY3RlZEl0ZW0gb2Ygc2VsZWN0ZWRJdGVtc1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkLWl0ZW1cIj5cbiAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRJdGVtPy5pbWFnZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtdWx0aVNlbGVjdGVkLWljb24tc2l6ZVwiXG4gICAgICAgICAgICAgICAgW3NyY109XCJzZWxlY3RlZEl0ZW0/LmltYWdlXCJcbiAgICAgICAgICAgICAgICBhbHQ9XCJpbWFnZVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxzcGFuPnt7IHNlbGVjdGVkSXRlbS5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cInVuc2VsZWN0SXRlbShzZWxlY3RlZEl0ZW0pXCIgY2xhc3M9XCJjbG9zZS1pY29uXCJcbiAgICAgICAgICAgICAgICA+JnRpbWVzOzwvc3BhblxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1maWVsZFwiPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIFtpZF09XCInc2VhcmNoSW5wdXQtJyArIGRyb3Bkb3duSWRcIlxuICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duX3RleHQgaW5saW5lLWlucHV0XCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXh0XCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgKGlucHV0KT1cInNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGF0YVNlY3Rpb24gc2luZ2xlLWlucHV0XCIgKm5nSWY9XCIhbXVsdGlwbGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWZpZWxkXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXdpdGgtaWNvblwiPlxuICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAqbmdJZj1cInNlbGVjdGVkSXRlbUltYWdlXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RlZC1pY29uLXNpemVcIlxuICAgICAgICAgICAgICBbc3JjXT1cInNlbGVjdGVkSXRlbUltYWdlXCJcbiAgICAgICAgICAgICAgYWx0PVwiaW1hZ2VcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBbaWRdPVwiJ3NlYXJjaElucHV0LScgKyBkcm9wZG93bklkXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bl90ZXh0IGlubGluZS1pbnB1dFwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRJdGVtTmFtZVwiXG4gICAgICAgICAgICAgIChpbnB1dCk9XCJzZWFyY2goJGV2ZW50KVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImljb25TZWN0aW9uXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1pY29ucy1jb250YWluZXJcIj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgKGNsaWNrKT1cInVuc2VsZWN0QWxsKClcIlxuICAgICAgICAgICAgICAqbmdJZj1cInNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCAmJiBtdWx0aXBsZVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZGVzZWxlY3RcIlxuICAgICAgICAgICAgICA+JnRpbWVzO1xuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24tZG93bi1hcnJvd1wiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7IG9wZW5lZDogZHJvcGRvd25PcGVuZWQsIGNsb3NlZDogIWRyb3Bkb3duT3BlbmVkIH1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgd2lkdGg9XCIxZW1cIlxuICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI1XCJcbiAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJkb3duLWFycm93LWltZ1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxnIGlkPVwiRG93biBBcnJvd1wiPlxuICAgICAgICAgICAgICAgIDxnIGlkPVwiR3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgIGlkPVwiUGF0aFwiXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNNiA5LjEzNzQxTDEyIDE1LjIyOUwxOCA5LjEzNzQxXCJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzhFOUFBMFwiXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNVwiXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi11cC1hcnJvd1wiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7IG9wZW5lZDogZHJvcGRvd25PcGVuZWQsIGNsb3NlZDogIWRyb3Bkb3duT3BlbmVkIH1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgd2lkdGg9XCIxZW1cIlxuICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI1XCJcbiAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ1cC1hcnJvdy1pbWdcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgIGQ9XCJNMTggMTUuMjI5TDEyIDkuMTM3NEw2IDE1LjIyOVwiXG4gICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzhFOUFBMFwiXG4gICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdlxuICAgICNkcm9wZG93bkl0ZW1zXG4gICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtc1wiXG4gICAgKm5nSWY9XCJkcm9wZG93bk9wZW5lZFwiXG4gICAgKHNjcm9sbCk9XCJkcm9wZG93blNjcm9sbCgkZXZlbnQpXCJcbiAgPlxuICAgIDxkaXYgKGNsaWNrKT1cImNyZWF0ZU5ldygpXCI+XG4gICAgICA8YSBjbGFzcz1cImNyZWF0ZV9idXR0b25cIiAqbmdJZj1cInNob3dDcmVhdGVOZXdcIj5DcmVhdGUgbmV3PC9hPlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtcy5sZW5ndGggPiAwOyBlbHNlIG5vRGF0YUF2YWlsYWJsZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm11bHRpcGxlOyBlbHNlIHNpbmdsZVNlbGVjdGlvblwiPlxuICAgICAgICA8YVxuICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgIGNvbXBhY3Q6ICFpdGVtPy5pbWFnZSAmJiAhaXRlbT8uc3ViTGFiZWwsXG4gICAgICAgICAgICBleHBhbmRlZDogaXRlbT8uaW1hZ2UgfHwgaXRlbT8uc3ViTGFiZWxcbiAgICAgICAgICB9XCJcbiAgICAgICAgICBjbGFzcz1cIml0ZW1zIGQtYmxvY2tcIlxuICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIF9maWx0ZXJlZEl0ZW1zXCJcbiAgICAgICAgICAoY2xpY2spPVwic2VsZWN0SXRlbShpdGVtKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24taXRlbVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tZGV0YWlsc1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtPy5pbWFnZVwiXG4gICAgICAgICAgICAgICAgICBbc3JjXT1cIml0ZW0/LmltYWdlXCJcbiAgICAgICAgICAgICAgICAgIGFsdD1cIkl0ZW0gSW1hZ2VcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpdGVtLWltYWdlIGljb24tc2l6ZVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaXRlbS1sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiaGlnaGxpZ2h0TWF0Y2goaXRlbS5sYWJlbClcIlxuICAgICAgICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dTdWJMYWJlbFwiIGNsYXNzPVwiaXRlbS1zdWJsYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBpdGVtPy5zdWJMYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd25fYnV0dG9uc1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmVtcHR5XT1cImN1c3RvbUJ1dHRvbnMubGVuZ3RoID09PSAwXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBidXR0b24gb2YgY3VzdG9tQnV0dG9uc1wiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQnV0dG9uQ2xpY2soYnV0dG9uLmFjdGlvbilcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxpIFtjbGFzc109XCJidXR0b24uaWNvblwiIFtzdHlsZS5jb2xvcl09XCJidXR0b24uY29sb3JcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctdGVtcGxhdGUgI3NpbmdsZVNlbGVjdGlvbj5cbiAgICAgICAgPGFcbiAgICAgICAgICBjbGFzcz1cIml0ZW1zIGQtYmxvY2tcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgIGNvbXBhY3Q6ICFpdGVtPy5pbWFnZSAmJiAhaXRlbT8uc3ViTGFiZWwsXG4gICAgICAgICAgICBleHBhbmRlZDogaXRlbT8uaW1hZ2UgfHwgaXRlbT8uc3ViTGFiZWxcbiAgICAgICAgICB9XCJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBfZmlsdGVyZWRJdGVtc1wiXG4gICAgICAgICAgKGNsaWNrKT1cInNlbGVjdEl0ZW0oaXRlbSlcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLWRldGFpbHNcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnQtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbT8uaW1hZ2VcIlxuICAgICAgICAgICAgICAgICAgW3NyY109XCJpdGVtPy5pbWFnZVwiXG4gICAgICAgICAgICAgICAgICBhbHQ9XCJJdGVtIEltYWdlXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaXRlbS1pbWFnZSBpY29uLXNpemVcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIml0ZW0tbGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImhpZ2hsaWdodE1hdGNoKGl0ZW0ubGFiZWwpXCJcbiAgICAgICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93U3ViTGFiZWxcIiBjbGFzcz1cIml0ZW0tc3VibGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgaXRlbT8uc3ViTGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd25fYnV0dG9uc1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmVtcHR5XT1cImN1c3RvbUJ1dHRvbnMubGVuZ3RoID09PSAwXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBidXR0b24gb2YgY3VzdG9tQnV0dG9uc1wiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQnV0dG9uQ2xpY2soYnV0dG9uLmFjdGlvbilcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxpIFtjbGFzc109XCJidXR0b24uaWNvblwiIFtzdHlsZS5jb2xvcl09XCJidXR0b24uY29sb3JcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIFwiTm8gZGF0YSBhdmFpbGFibGVcIiBtZXNzYWdlIGlmIHRoZSBkcm9wIGRvd24gaXMgZW1wdHkgLS0+XG4gICAgPG5nLXRlbXBsYXRlICNub0RhdGFBdmFpbGFibGU+XG4gICAgICA8ZGl2IGNsYXNzPVwiaXRlbXNcIj5ObyBkYXRhIGF2YWlsYWJsZTwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24ubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9kcm9wZG93bi9zcmMvbGliL2Ryb3Bkb3duLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIERyb3Bkb3duSXRlbSB7XG4gICAgdmFsdWU6IHN0cmluZztcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIGltYWdlOiBzdHJpbmc7XG4gICAgc3ViTGFiZWw/OiBzdHJpbmdcbiAgfVxuICAiXX0=
@@ -1,28 +0,0 @@
1
- import { NgModule } from '@angular/core';
2
- import { DropdownComponent } from './dropdown.component';
3
- import { FormsModule } from '@angular/forms';
4
- import { CommonModule } from '@angular/common';
5
- import * as i0 from "@angular/core";
6
- export class DropdownModule {
7
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DropdownModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
8
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: DropdownModule, declarations: [DropdownComponent], imports: [FormsModule,
9
- CommonModule], exports: [DropdownComponent] }); }
10
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DropdownModule, imports: [FormsModule,
11
- CommonModule] }); }
12
- }
13
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DropdownModule, decorators: [{
14
- type: NgModule,
15
- args: [{
16
- declarations: [
17
- DropdownComponent
18
- ],
19
- imports: [
20
- FormsModule,
21
- CommonModule,
22
- ],
23
- exports: [
24
- DropdownComponent
25
- ]
26
- }]
27
- }] });
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24ubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvZHJvcGRvd24vc3JjL2xpYi9kcm9wZG93bi5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQWdCL0MsTUFBTSxPQUFPLGNBQWM7K0dBQWQsY0FBYztnSEFBZCxjQUFjLGlCQVZ2QixpQkFBaUIsYUFHakIsV0FBVztZQUNYLFlBQVksYUFHWixpQkFBaUI7Z0hBR1IsY0FBYyxZQVB2QixXQUFXO1lBQ1gsWUFBWTs7NEZBTUgsY0FBYztrQkFaMUIsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUU7d0JBQ1osaUJBQWlCO3FCQUNsQjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsV0FBVzt3QkFDWCxZQUFZO3FCQUNiO29CQUNELE9BQU8sRUFBRTt3QkFDUCxpQkFBaUI7cUJBQ2xCO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERyb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnLi9kcm9wZG93bi5jb21wb25lbnQnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5cblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgRHJvcGRvd25Db21wb25lbnRcbiAgXSxcbiAgaW1wb3J0czogW1xuICAgIEZvcm1zTW9kdWxlLFxuICAgIENvbW1vbk1vZHVsZSxcbiAgXSxcbiAgZXhwb3J0czogW1xuICAgIERyb3Bkb3duQ29tcG9uZW50XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRHJvcGRvd25Nb2R1bGUgeyB9XG4iXX0=
@@ -1,14 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class DropdownService {
4
- constructor() { }
5
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DropdownService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
6
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DropdownService, providedIn: 'root' }); }
7
- }
8
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DropdownService, decorators: [{
9
- type: Injectable,
10
- args: [{
11
- providedIn: 'root'
12
- }]
13
- }], ctorParameters: function () { return []; } });
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2Ryb3Bkb3duL3NyYy9saWIvZHJvcGRvd24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUszQyxNQUFNLE9BQU8sZUFBZTtJQUUxQixnQkFBZ0IsQ0FBQzsrR0FGTixlQUFlO21IQUFmLGVBQWUsY0FGZCxNQUFNOzs0RkFFUCxlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRHJvcGRvd25TZXJ2aWNlIHtcblxuICBjb25zdHJ1Y3RvcigpIHsgfVxufVxuIl19
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './public-api';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlzZXJ2ZS10ZWNoLWRyb3AtZG93bi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2Ryb3Bkb3duL3NyYy9waXNlcnZlLXRlY2gtZHJvcC1kb3duLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG4iXX0=
@@ -1,7 +0,0 @@
1
- /*
2
- * Public API Surface of dropdown
3
- */
4
- export * from './lib/dropdown.service';
5
- export * from './lib/dropdown.component';
6
- export * from './lib/dropdown.module';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2Ryb3Bkb3duL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsdUJBQXVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIGRyb3Bkb3duXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9saWIvZHJvcGRvd24uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kcm9wZG93bi5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZHJvcGRvd24ubW9kdWxlJztcbiJdfQ==