@piserve-tech/drop-down 1.2.110 → 1.2.111

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,211 @@
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\r\n #dropdown\r\n class=\"dropdown\"\r\n [ngClass]=\"{\r\n opened: showBorder && dropdownOpened,\r\n closed: showBorder && !dropdownOpened,\r\n 'dropdown-disabled': disable\r\n }\"\r\n>\r\n <div\r\n class=\"dropdown-field\"\r\n id=\"division\"\r\n [ngClass]=\"{\r\n opened: showBorder && dropdownOpened,\r\n closed: showBorder && !dropdownOpened,\r\n }\"\r\n (click)=\"openDropdown()\"\r\n >\r\n <!-- <div *ngIf=\"selectedValues !== '' && !selectedItemName\" class=\"selected\">\r\n {{ selectedValues }}\r\n </div> -->\r\n <div class=\"flexSection\">\r\n <div class=\"dataSection\" *ngIf=\"!selectedItem && multiple\">\r\n <div class=\"selected selectedList\">\r\n <ng-container *ngFor=\"let selectedItem of selectedItems\">\r\n <div class=\"selected-item\">\r\n <img\r\n *ngIf=\"selectedItem?.image\"\r\n class=\"multiSelected-icon-size\"\r\n [src]=\"selectedItem?.image\"\r\n alt=\"image\"\r\n />\r\n <span>{{ selectedItem.label }}</span>\r\n <span (click)=\"unselectItem(selectedItem)\" class=\"close-icon\"\r\n >&times;</span\r\n >\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"input-field\">\r\n <input\r\n [id]=\"'searchInput-' + dropdownId\"\r\n class=\"dropdown_text inline-input\"\r\n [(ngModel)]=\"searchText\"\r\n [placeholder]=\"placeholder\"\r\n (input)=\"search($event)\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"dataSection single-input\" *ngIf=\"!multiple\">\r\n <div class=\"input-field\">\r\n <div class=\"input-with-icon\">\r\n <img\r\n *ngIf=\"selectedItemImage\"\r\n class=\"selected-icon-size\"\r\n [src]=\"selectedItemImage\"\r\n alt=\"image\"\r\n />\r\n <input\r\n [id]=\"'searchInput-' + dropdownId\"\r\n class=\"dropdown_text inline-input\"\r\n [placeholder]=\"placeholder\"\r\n [(ngModel)]=\"selectedItemName\"\r\n (input)=\"search($event)\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"iconSection\">\r\n <div class=\"dropdown-icons-container\">\r\n <div>\r\n <span\r\n (click)=\"unselectAll()\"\r\n *ngIf=\"selectedItems.length > 0 && multiple\"\r\n class=\"deselect\"\r\n >&times;\r\n </span>\r\n </div>\r\n <div\r\n class=\"dropdown-down-arrow\"\r\n [ngClass]=\"{ opened: dropdownOpened, closed: !dropdownOpened }\"\r\n >\r\n <svg\r\n width=\"1em\"\r\n viewBox=\"0 0 24 25\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"down-arrow-img\"\r\n >\r\n <g id=\"Down Arrow\">\r\n <g id=\"Group\">\r\n <path\r\n id=\"Path\"\r\n d=\"M6 9.13741L12 15.229L18 9.13741\"\r\n stroke=\"#8E9AA0\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </g>\r\n </g>\r\n </svg>\r\n </div>\r\n <div\r\n class=\"dropdown-up-arrow\"\r\n [ngClass]=\"{ opened: dropdownOpened, closed: !dropdownOpened }\"\r\n >\r\n <svg\r\n width=\"1em\"\r\n viewBox=\"0 0 24 25\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"up-arrow-img\"\r\n >\r\n <path\r\n d=\"M18 15.229L12 9.1374L6 15.229\"\r\n stroke=\"#8E9AA0\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div\r\n #dropdownItems\r\n class=\"dropdown-items\"\r\n *ngIf=\"dropdownOpened\"\r\n (scroll)=\"dropdownScroll($event)\"\r\n >\r\n <div (click)=\"createNew()\">\r\n <a class=\"create_button\" *ngIf=\"showCreateNew\">Create new</a>\r\n </div>\r\n <ng-container *ngIf=\"items.length > 0; else noDataAvailable\">\r\n <ng-container *ngIf=\"multiple; else singleSelection\">\r\n <a\r\n [ngClass]=\"{\r\n compact: !item?.image && !item?.subLabel,\r\n expanded: item?.image || item?.subLabel\r\n }\"\r\n class=\"items d-block\"\r\n *ngFor=\"let item of _filteredItems\"\r\n (click)=\"selectItem(item)\"\r\n >\r\n <div class=\"dropdown-item\">\r\n <div class=\"item-details\">\r\n <div class=\"content-wrapper\">\r\n <img\r\n *ngIf=\"item?.image\"\r\n [src]=\"item?.image\"\r\n alt=\"Item Image\"\r\n class=\"item-image icon-size\"\r\n />\r\n <div class=\"text-content\">\r\n <div\r\n class=\"item-label\"\r\n [innerHTML]=\"highlightMatch(item.label)\"\r\n ></div>\r\n <div *ngIf=\"showSubLabel\" class=\"item-sublabel\">\r\n {{ item?.subLabel }}\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"dropdown_buttons\"\r\n [class.empty]=\"customButtons.length === 0\"\r\n >\r\n <button\r\n *ngFor=\"let button of customButtons\"\r\n (click)=\"handleButtonClick(button.action)\"\r\n >\r\n <i [class]=\"button.icon\" [style.color]=\"button.color\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </a>\r\n </ng-container>\r\n\r\n <ng-template #singleSelection>\r\n <a\r\n class=\"items d-block\"\r\n [ngClass]=\"{\r\n compact: !item?.image && !item?.subLabel,\r\n expanded: item?.image || item?.subLabel\r\n }\"\r\n *ngFor=\"let item of _filteredItems\"\r\n (click)=\"selectItem(item)\"\r\n >\r\n <div class=\"dropdown-item\">\r\n <div class=\"item-details\">\r\n <div class=\"content-wrapper\">\r\n <img\r\n *ngIf=\"item?.image\"\r\n [src]=\"item?.image\"\r\n alt=\"Item Image\"\r\n class=\"item-image icon-size\"\r\n />\r\n <div class=\"text-content\">\r\n <div\r\n class=\"item-label\"\r\n [innerHTML]=\"highlightMatch(item.label)\"\r\n ></div>\r\n <div *ngIf=\"showSubLabel\" class=\"item-sublabel\">\r\n {{ item?.subLabel }}\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"dropdown_buttons\"\r\n [class.empty]=\"customButtons.length === 0\"\r\n >\r\n <button\r\n *ngFor=\"let button of customButtons\"\r\n (click)=\"handleButtonClick(button.action)\"\r\n >\r\n <i [class]=\"button.icon\" [style.color]=\"button.color\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </a>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <!-- \"No data available\" message if the drop down is empty -->\r\n <ng-template #noDataAvailable>\r\n <div class=\"items\">No data available</div>\r\n </ng-template>\r\n </div>\r\n</div>\r\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\r\n #dropdown\r\n class=\"dropdown\"\r\n [ngClass]=\"{\r\n opened: showBorder && dropdownOpened,\r\n closed: showBorder && !dropdownOpened,\r\n 'dropdown-disabled': disable\r\n }\"\r\n>\r\n <div\r\n class=\"dropdown-field\"\r\n id=\"division\"\r\n [ngClass]=\"{\r\n opened: showBorder && dropdownOpened,\r\n closed: showBorder && !dropdownOpened,\r\n }\"\r\n (click)=\"openDropdown()\"\r\n >\r\n <!-- <div *ngIf=\"selectedValues !== '' && !selectedItemName\" class=\"selected\">\r\n {{ selectedValues }}\r\n </div> -->\r\n <div class=\"flexSection\">\r\n <div class=\"dataSection\" *ngIf=\"!selectedItem && multiple\">\r\n <div class=\"selected selectedList\">\r\n <ng-container *ngFor=\"let selectedItem of selectedItems\">\r\n <div class=\"selected-item\">\r\n <img\r\n *ngIf=\"selectedItem?.image\"\r\n class=\"multiSelected-icon-size\"\r\n [src]=\"selectedItem?.image\"\r\n alt=\"image\"\r\n />\r\n <span>{{ selectedItem.label }}</span>\r\n <span (click)=\"unselectItem(selectedItem)\" class=\"close-icon\"\r\n >&times;</span\r\n >\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"input-field\">\r\n <input\r\n [id]=\"'searchInput-' + dropdownId\"\r\n class=\"dropdown_text inline-input\"\r\n [(ngModel)]=\"searchText\"\r\n [placeholder]=\"placeholder\"\r\n (input)=\"search($event)\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"dataSection single-input\" *ngIf=\"!multiple\">\r\n <div class=\"input-field\">\r\n <div class=\"input-with-icon\">\r\n <img\r\n *ngIf=\"selectedItemImage\"\r\n class=\"selected-icon-size\"\r\n [src]=\"selectedItemImage\"\r\n alt=\"image\"\r\n />\r\n <input\r\n [id]=\"'searchInput-' + dropdownId\"\r\n class=\"dropdown_text inline-input\"\r\n [placeholder]=\"placeholder\"\r\n [(ngModel)]=\"selectedItemName\"\r\n (input)=\"search($event)\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"iconSection\">\r\n <div class=\"dropdown-icons-container\">\r\n <div>\r\n <span\r\n (click)=\"unselectAll()\"\r\n *ngIf=\"selectedItems.length > 0 && multiple\"\r\n class=\"deselect\"\r\n >&times;\r\n </span>\r\n </div>\r\n <div\r\n class=\"dropdown-down-arrow\"\r\n [ngClass]=\"{ opened: dropdownOpened, closed: !dropdownOpened }\"\r\n >\r\n <svg\r\n width=\"1em\"\r\n viewBox=\"0 0 24 25\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"down-arrow-img\"\r\n >\r\n <g id=\"Down Arrow\">\r\n <g id=\"Group\">\r\n <path\r\n id=\"Path\"\r\n d=\"M6 9.13741L12 15.229L18 9.13741\"\r\n stroke=\"#8E9AA0\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </g>\r\n </g>\r\n </svg>\r\n </div>\r\n <div\r\n class=\"dropdown-up-arrow\"\r\n [ngClass]=\"{ opened: dropdownOpened, closed: !dropdownOpened }\"\r\n >\r\n <svg\r\n width=\"1em\"\r\n viewBox=\"0 0 24 25\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"up-arrow-img\"\r\n >\r\n <path\r\n d=\"M18 15.229L12 9.1374L6 15.229\"\r\n stroke=\"#8E9AA0\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div\r\n #dropdownItems\r\n class=\"dropdown-items\"\r\n *ngIf=\"dropdownOpened\"\r\n (scroll)=\"dropdownScroll($event)\"\r\n >\r\n <div (click)=\"createNew()\">\r\n <a class=\"create_button\" *ngIf=\"showCreateNew\">Create new</a>\r\n </div>\r\n <ng-container *ngIf=\"items.length > 0; else noDataAvailable\">\r\n <ng-container *ngIf=\"multiple; else singleSelection\">\r\n <a\r\n [ngClass]=\"{\r\n compact: !item?.image && !item?.subLabel,\r\n expanded: item?.image || item?.subLabel\r\n }\"\r\n class=\"items d-block\"\r\n *ngFor=\"let item of _filteredItems\"\r\n (click)=\"selectItem(item)\"\r\n >\r\n <div class=\"dropdown-item\">\r\n <div class=\"item-details\">\r\n <div class=\"content-wrapper\">\r\n <img\r\n *ngIf=\"item?.image\"\r\n [src]=\"item?.image\"\r\n alt=\"Item Image\"\r\n class=\"item-image icon-size\"\r\n />\r\n <div class=\"text-content\">\r\n <div\r\n class=\"item-label\"\r\n [innerHTML]=\"highlightMatch(item.label)\"\r\n ></div>\r\n <div *ngIf=\"showSubLabel\" class=\"item-sublabel\">\r\n {{ item?.subLabel }}\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"dropdown_buttons\"\r\n [class.empty]=\"customButtons.length === 0\"\r\n >\r\n <button\r\n *ngFor=\"let button of customButtons\"\r\n (click)=\"handleButtonClick(button.action)\"\r\n >\r\n <i [class]=\"button.icon\" [style.color]=\"button.color\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </a>\r\n </ng-container>\r\n\r\n <ng-template #singleSelection>\r\n <a\r\n class=\"items d-block\"\r\n [ngClass]=\"{\r\n compact: !item?.image && !item?.subLabel,\r\n expanded: item?.image || item?.subLabel\r\n }\"\r\n *ngFor=\"let item of _filteredItems\"\r\n (click)=\"selectItem(item)\"\r\n >\r\n <div class=\"dropdown-item\">\r\n <div class=\"item-details\">\r\n <div class=\"content-wrapper\">\r\n <img\r\n *ngIf=\"item?.image\"\r\n [src]=\"item?.image\"\r\n alt=\"Item Image\"\r\n class=\"item-image icon-size\"\r\n />\r\n <div class=\"text-content\">\r\n <div\r\n class=\"item-label\"\r\n [innerHTML]=\"highlightMatch(item.label)\"\r\n ></div>\r\n <div *ngIf=\"showSubLabel\" class=\"item-sublabel\">\r\n {{ item?.subLabel }}\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"dropdown_buttons\"\r\n [class.empty]=\"customButtons.length === 0\"\r\n >\r\n <button\r\n *ngFor=\"let button of customButtons\"\r\n (click)=\"handleButtonClick(button.action)\"\r\n >\r\n <i [class]=\"button.icon\" [style.color]=\"button.color\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </a>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <!-- \"No data available\" message if the drop down is empty -->\r\n <ng-template #noDataAvailable>\r\n <div class=\"items\">No data available</div>\r\n </ng-template>\r\n </div>\r\n</div>\r\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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QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQU1HLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUdHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBRUUsWUFBWTtzQkFBcEIsS0FBSztnQkFlRixLQUFLO3NCQURSLEtBQUs7Z0JBOERzQixhQUFhO3NCQUF4QyxTQUFTO3VCQUFDLGVBQWU7Z0JBNENILFFBQVE7c0JBQTlCLFNBQVM7dUJBQUMsVUFBVTtnQkFFckIsZUFBZTtzQkFEZCxZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRHJvcGRvd25JdGVtIH0gZnJvbSBcIi4vZHJvcGRvd24ubW9kZWxcIjtcclxuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJsaWItZHJvcGRvd25cIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL2Ryb3Bkb3duLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL2Ryb3Bkb3duLmNvbXBvbmVudC5zY3NzXCJdLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEcm9wZG93bkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQElucHV0KCkgbXVsdGlwbGUhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkSXRlbXM6IGFueVtdID0gW107XHJcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IFN0cmluZyA9IFwiXCI7XHJcbiAgQElucHV0KCkgc2hvd0NyZWF0ZU5ldyE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgc2VsZWN0ZWRWYWx1ZXM6IHN0cmluZyA9IFwiXCI7XHJcbiAgQElucHV0KCkgY3VzdG9tQnV0dG9uczoge1xyXG4gICAgbGFiZWw6IHN0cmluZztcclxuICAgIGljb246IHN0cmluZztcclxuICAgIGNvbG9yOiBzdHJpbmc7XHJcbiAgICBhY3Rpb246ICgpID0+IHZvaWQ7XHJcbiAgfVtdID0gW107XHJcbiAgQElucHV0KCkgc2hvd0JvcmRlcjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgZGlzYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBPdXRwdXQoKSBidXR0b25DbGljazogRXZlbnRFbWl0dGVyPEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XHJcbiAgQE91dHB1dCgpIHNlbGVjdGVkSXRlbXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnlbXT4gPSBuZXcgRXZlbnRFbWl0dGVyPFxyXG4gICAgYW55W11cclxuICA+KCk7XHJcbiAgQE91dHB1dCgpIG9uRHJvcGRvd25TY3JvbGw6IEV2ZW50RW1pdHRlcjxFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xyXG4gIEBPdXRwdXQoKSBvbkNyZWF0ZU5ldzogRXZlbnRFbWl0dGVyPEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XHJcbiAgQE91dHB1dCgpIG9uU2VhcmNoOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIC8vc3ViTGFiZWxcclxuICBASW5wdXQoKSBzaG93U3ViTGFiZWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBkcm9wZG93bklkID0gdXVpZHY0KCk7XHJcbiAgZHJvcGRvd25PcGVuZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzZWxlY3RlZEl0ZW06IGFueTtcclxuICBzZWxlY3RlZEl0ZW1OYW1lOiBzdHJpbmcgPSBcIlwiO1xyXG4gIHNlbGVjdGVkSXRlbUltYWdlOiBzdHJpbmcgPSBcIlwiO1xyXG4gIG9yaWdpbmFsSXRlbXM6IERyb3Bkb3duSXRlbVtdID0gW107XHJcbiAgc2VhcmNoVGVybTogc3RyaW5nID0gXCJcIjtcclxuICBpbml0aWFsaXplZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNlYXJjaFRleHQ6IHN0cmluZyA9IFwiXCI7XHJcbiAgX2ZpbHRlcmVkSXRlbXM6IERyb3Bkb3duSXRlbVtdID0gW107XHJcblxyXG4gIHByaXZhdGUgX2l0ZW1zOiBEcm9wZG93bkl0ZW1bXSA9IFtdO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBpdGVtcyh2YWx1ZTogRHJvcGRvd25JdGVtW10pIHtcclxuICAgIHRoaXMuX2l0ZW1zID0gdmFsdWUgfHwgW107XHJcbiAgICB0aGlzLm9yaWdpbmFsSXRlbXMgPSB0aGlzLl9pdGVtcy5zbGljZSgpO1xyXG4gICAgdGhpcy5fZmlsdGVyZWRJdGVtcyA9IHRoaXMuX2l0ZW1zLnNsaWNlKCk7IC8vIHVzZSBhIHNlcGFyYXRlIHZhcmlhYmxlIGZvciByZW5kZXJpbmdcclxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuICBnZXQgaXRlbXMoKTogRHJvcGRvd25JdGVtW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHt9XHJcblxyXG5cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgaWYgKGNoYW5nZXNbXCJzZWxlY3RlZEl0ZW1zXCJdKSB7XHJcbiAgICAgIGNvbnN0IGl0ZW0gPSBjaGFuZ2VzW1wic2VsZWN0ZWRJdGVtc1wiXVtcImN1cnJlbnRWYWx1ZVwiXTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gaXRlbTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1OYW1lID0gdGhpcy5zZWxlY3RlZEl0ZW1zWzBdPy5sYWJlbDtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1JbWFnZSA9IHRoaXMuc2VsZWN0ZWRJdGVtc1swXT8uaW1hZ2U7XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1tcIml0ZW1zXCJdKSB7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZSgpO1xyXG4gICAgICB0aGlzLm9yaWdpbmFsSXRlbXMgPSB0aGlzLml0ZW1zLnNsaWNlKCk7XHJcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbXCJzZWxlY3RlZFZhbHVlc1wiXSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbU5hbWUgPSB0aGlzLnNlbGVjdGVkVmFsdWVzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGl6ZSgpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW1zICYmIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaFRleHQgPSBcIlwiO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1OYW1lID0gdGhpcy5zZWxlY3RlZEl0ZW1zWzBdPy5sYWJlbDtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtSW1hZ2UgPSB0aGlzLnNlbGVjdGVkSXRlbXNbMF0/LmltYWdlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSwgMTAwMCk7XHJcbiAgICBjb25zdCB1bmlxdWVJdGVtcyA9IHRoaXMuaXRlbXMuZmlsdGVyKFxyXG4gICAgICAoc2VsZWN0ZWQsIGluZGV4LCBzZWxmKSA9PlxyXG4gICAgICAgIGluZGV4ID09PSBzZWxmLmZpbmRJbmRleCgodCkgPT4gdC52YWx1ZSA9PT0gc2VsZWN0ZWQudmFsdWUpXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuaXRlbXMgPSB1bmlxdWVJdGVtcztcclxuICB9XHJcblxyXG4gIG9wZW5Ecm9wZG93bigpIHtcclxuICAgIHRoaXMuZHJvcGRvd25PcGVuZWQgPSAhdGhpcy5kcm9wZG93bk9wZW5lZDtcclxuICAgICBjb25zdCBpbnB1dElkID0gYHNlYXJjaElucHV0LSR7dGhpcy5kcm9wZG93bklkfWA7XHJcbiAgICBjb25zdCBpbnB1dEVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaW5wdXRJZCk7XHJcbiAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGlucHV0RWw/LmZvY3VzKCk7XHJcbiAgICB9LCAwKTtcclxuICAgIFxyXG4gIH1cclxuXHJcbiAgQFZpZXdDaGlsZChcImRyb3Bkb3duSXRlbXNcIikgZHJvcGRvd25pdGVtcyE6IEVsZW1lbnRSZWY8YW55PjtcclxuICBkcm9wZG93blNjcm9sbChldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5vbkRyb3Bkb3duU2Nyb2xsLm9ic2VydmVkKSB7XHJcbiAgICAgIHRoaXMub25Ecm9wZG93blNjcm9sbC5lbWl0KGV2ZW50KTtcclxuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY3RJdGVtKGl0ZW06IGFueSkge1xyXG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcclxuICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkSXRlbXMuaW5jbHVkZXMoaXRlbSkpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaChpdGVtKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXNDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkSXRlbXMpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5maWx0ZXIoXHJcbiAgICAgICAgICAoc2VsZWN0ZWQ6IGFueSkgPT4gc2VsZWN0ZWQgIT09IGl0ZW1cclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtc0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRJdGVtcyk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoVGV4dCA9IFwiXCI7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtc1swXSA9IGl0ZW07XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtTmFtZSA9IHRoaXMuc2VsZWN0ZWRJdGVtc1swXT8ubGFiZWw7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtSW1hZ2UgPSB0aGlzLnNlbGVjdGVkSXRlbXNbMF0/LmltYWdlO1xyXG4gICAgICB0aGlzLmRyb3Bkb3duT3BlbmVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtc0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRJdGVtcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1bnNlbGVjdEl0ZW0oaXRlbTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKFxyXG4gICAgICAoc2VsZWN0ZWQ6IGFueSkgPT4gc2VsZWN0ZWQgIT09IGl0ZW1cclxuICAgICk7XHJcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXNDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkSXRlbXMpO1xyXG4gIH1cclxuXHJcbiAgdW5zZWxlY3RBbGwoKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcclxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtTmFtZSA9IFwiXCI7XHJcbiAgICB0aGlzLnNlbGVjdGVkSXRlbUltYWdlID0gXCJcIjtcclxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtc0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRJdGVtcyk7XHJcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIEBWaWV3Q2hpbGQoXCJkcm9wZG93blwiKSBkcm9wZG93biE6IEVsZW1lbnRSZWY7XHJcbiAgQEhvc3RMaXN0ZW5lcihcImRvY3VtZW50OmNsaWNrXCIsIFtcIiRldmVudFwiXSlcclxuICBvbkRvY3VtZW50Q2xpY2soZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCBpc0NsaWNrSW5zaWRlRHJvcGRvd24gPSB0aGlzLmRyb3Bkb3duLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoXHJcbiAgICAgIGV2ZW50LnRhcmdldFxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoIWlzQ2xpY2tJbnNpZGVEcm9wZG93bikge1xyXG4gICAgICB0aGlzLmRyb3Bkb3duT3BlbmVkID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjcmVhdGVOZXcoKSB7XHJcbiAgICB0aGlzLm9uQ3JlYXRlTmV3LmVtaXQoKTtcclxuICAgIHRoaXMuZHJvcGRvd25PcGVuZWQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNlYXJjaChldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBrZXlDb2RlID0gZXZlbnQua2V5Q29kZTtcclxuICAgIHRoaXMuZHJvcGRvd25PcGVuZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5zZWFyY2hUZXJtID0gZXZlbnQudGFyZ2V0LnZhbHVlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICBpZiAoIXRoaXMub25TZWFyY2gub2JzZXJ2ZWQpIHtcclxuICAgICAgaWYgKHRoaXMuc2VhcmNoVGVybS50cmltKCkgPT09IFwiXCIpIHtcclxuICAgICAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcclxuICAgICAgICAgIHRoaXMudW5zZWxlY3RBbGwoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fZmlsdGVyZWRJdGVtcyA9IHRoaXMub3JpZ2luYWxJdGVtcy5zbGljZSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGxvd2VyQ2FzZVNlYXJjaFRlcm0gPSB0aGlzLnNlYXJjaFRlcm0udG9Mb3dlckNhc2UoKTtcclxuICAgICAgICB0aGlzLl9maWx0ZXJlZEl0ZW1zID0gdGhpcy5vcmlnaW5hbEl0ZW1zLmZpbHRlcihcclxuICAgICAgICAgIChpdGVtKSA9PlxyXG4gICAgICAgICAgICBpdGVtLmxhYmVsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobG93ZXJDYXNlU2VhcmNoVGVybSkgfHxcclxuICAgICAgICAgICAgKGl0ZW0udmFsdWUgJiZcclxuICAgICAgICAgICAgICBpdGVtLnZhbHVlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobG93ZXJDYXNlU2VhcmNoVGVybSkpXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5vblNlYXJjaC5lbWl0KHRoaXMuc2VhcmNoVGVybSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVCdXR0b25DbGljayhhY3Rpb246ICgpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIGFjdGlvbigpO1xyXG4gICAgdGhpcy5idXR0b25DbGljay5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBoaWdobGlnaHRNYXRjaCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3Qgc2VhcmNoID0gdGhpcy5zZWFyY2hUZXh0Py50cmltKCkgfHwgdGhpcy5zZWFyY2hUZXJtPy50cmltKCk7XHJcbiAgICBpZiAoIXNlYXJjaCB8fCAhdGV4dCkgcmV0dXJuIHRleHQ7XHJcblxyXG4gICAgY29uc3QgaW5kZXggPSB0ZXh0LnRvTG93ZXJDYXNlKCkuaW5kZXhPZihzZWFyY2gudG9Mb3dlckNhc2UoKSk7XHJcbiAgICBpZiAoaW5kZXggPT09IC0xKSByZXR1cm4gdGV4dDtcclxuXHJcbiAgICBjb25zdCBiZWZvcmUgPSB0ZXh0LnN1YnN0cmluZygwLCBpbmRleCk7XHJcbiAgICBjb25zdCBtYXRjaCA9IHRleHQuc3Vic3RyaW5nKGluZGV4LCBpbmRleCArIHNlYXJjaC5sZW5ndGgpO1xyXG4gICAgY29uc3QgYWZ0ZXIgPSB0ZXh0LnN1YnN0cmluZyhpbmRleCArIHNlYXJjaC5sZW5ndGgpO1xyXG5cclxuICAgIHJldHVybiBgJHtiZWZvcmV9PHNwYW4gY2xhc3M9XCJoaWdobGlnaHQtdGV4dFwiPiR7bWF0Y2h9PC9zcGFuPiR7YWZ0ZXJ9YDtcclxuICB9XHJcbn1cclxuIiwiPGRpdlxyXG4gICNkcm9wZG93blxyXG4gIGNsYXNzPVwiZHJvcGRvd25cIlxyXG4gIFtuZ0NsYXNzXT1cIntcclxuICAgIG9wZW5lZDogc2hvd0JvcmRlciAmJiBkcm9wZG93bk9wZW5lZCxcclxuICAgIGNsb3NlZDogc2hvd0JvcmRlciAmJiAhZHJvcGRvd25PcGVuZWQsXHJcbiAgICAnZHJvcGRvd24tZGlzYWJsZWQnOiBkaXNhYmxlXHJcbiAgfVwiXHJcbj5cclxuICA8ZGl2XHJcbiAgICBjbGFzcz1cImRyb3Bkb3duLWZpZWxkXCJcclxuICAgIGlkPVwiZGl2aXNpb25cIlxyXG4gICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICBvcGVuZWQ6IHNob3dCb3JkZXIgJiYgZHJvcGRvd25PcGVuZWQsXHJcbiAgICAgIGNsb3NlZDogc2hvd0JvcmRlciAmJiAhZHJvcGRvd25PcGVuZWQsXHJcbiAgICB9XCJcclxuICAgIChjbGljayk9XCJvcGVuRHJvcGRvd24oKVwiXHJcbiAgPlxyXG4gICAgPCEtLSA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWRWYWx1ZXMgIT09ICcnICYmICFzZWxlY3RlZEl0ZW1OYW1lXCIgY2xhc3M9XCJzZWxlY3RlZFwiPlxyXG4gICAgICB7eyBzZWxlY3RlZFZhbHVlcyB9fVxyXG4gICAgPC9kaXY+IC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImZsZXhTZWN0aW9uXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkYXRhU2VjdGlvblwiICpuZ0lmPVwiIXNlbGVjdGVkSXRlbSAmJiBtdWx0aXBsZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RlZCBzZWxlY3RlZExpc3RcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHNlbGVjdGVkSXRlbSBvZiBzZWxlY3RlZEl0ZW1zXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RlZC1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZEl0ZW0/LmltYWdlXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwibXVsdGlTZWxlY3RlZC1pY29uLXNpemVcIlxyXG4gICAgICAgICAgICAgICAgW3NyY109XCJzZWxlY3RlZEl0ZW0/LmltYWdlXCJcclxuICAgICAgICAgICAgICAgIGFsdD1cImltYWdlXCJcclxuICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgIDxzcGFuPnt7IHNlbGVjdGVkSXRlbS5sYWJlbCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwidW5zZWxlY3RJdGVtKHNlbGVjdGVkSXRlbSlcIiBjbGFzcz1cImNsb3NlLWljb25cIlxyXG4gICAgICAgICAgICAgICAgPiZ0aW1lczs8L3NwYW5cclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWZpZWxkXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgIFtpZF09XCInc2VhcmNoSW5wdXQtJyArIGRyb3Bkb3duSWRcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd25fdGV4dCBpbmxpbmUtaW5wdXRcIlxyXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoVGV4dFwiXHJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgICAgICAoaW5wdXQpPVwic2VhcmNoKCRldmVudClcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZGF0YVNlY3Rpb24gc2luZ2xlLWlucHV0XCIgKm5nSWY9XCIhbXVsdGlwbGVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZmllbGRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC13aXRoLWljb25cIj5cclxuICAgICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRJdGVtSW1hZ2VcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0ZWQtaWNvbi1zaXplXCJcclxuICAgICAgICAgICAgICBbc3JjXT1cInNlbGVjdGVkSXRlbUltYWdlXCJcclxuICAgICAgICAgICAgICBhbHQ9XCJpbWFnZVwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgIFtpZF09XCInc2VhcmNoSW5wdXQtJyArIGRyb3Bkb3duSWRcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd25fdGV4dCBpbmxpbmUtaW5wdXRcIlxyXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEl0ZW1OYW1lXCJcclxuICAgICAgICAgICAgICAoaW5wdXQpPVwic2VhcmNoKCRldmVudClcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaWNvblNlY3Rpb25cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24taWNvbnMtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJ1bnNlbGVjdEFsbCgpXCJcclxuICAgICAgICAgICAgICAqbmdJZj1cInNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCAmJiBtdWx0aXBsZVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJkZXNlbGVjdFwiXHJcbiAgICAgICAgICAgICAgPiZ0aW1lcztcclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24tZG93bi1hcnJvd1wiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgb3BlbmVkOiBkcm9wZG93bk9wZW5lZCwgY2xvc2VkOiAhZHJvcGRvd25PcGVuZWQgfVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxzdmdcclxuICAgICAgICAgICAgICB3aWR0aD1cIjFlbVwiXHJcbiAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNVwiXHJcbiAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZG93bi1hcnJvdy1pbWdcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGcgaWQ9XCJEb3duIEFycm93XCI+XHJcbiAgICAgICAgICAgICAgICA8ZyBpZD1cIkdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJQYXRoXCJcclxuICAgICAgICAgICAgICAgICAgICBkPVwiTTYgOS4xMzc0MUwxMiAxNS4yMjlMMTggOS4xMzc0MVwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzhFOUFBMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcclxuICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLXVwLWFycm93XCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBvcGVuZWQ6IGRyb3Bkb3duT3BlbmVkLCBjbG9zZWQ6ICFkcm9wZG93bk9wZW5lZCB9XCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPHN2Z1xyXG4gICAgICAgICAgICAgIHdpZHRoPVwiMWVtXCJcclxuICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI1XCJcclxuICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ1cC1hcnJvdy1pbWdcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgIGQ9XCJNMTggMTUuMjI5TDEyIDkuMTM3NEw2IDE1LjIyOVwiXHJcbiAgICAgICAgICAgICAgICBzdHJva2U9XCIjOEU5QUEwXCJcclxuICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNVwiXHJcbiAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2XHJcbiAgICAjZHJvcGRvd25JdGVtc1xyXG4gICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtc1wiXHJcbiAgICAqbmdJZj1cImRyb3Bkb3duT3BlbmVkXCJcclxuICAgIChzY3JvbGwpPVwiZHJvcGRvd25TY3JvbGwoJGV2ZW50KVwiXHJcbiAgPlxyXG4gICAgPGRpdiAoY2xpY2spPVwiY3JlYXRlTmV3KClcIj5cclxuICAgICAgPGEgY2xhc3M9XCJjcmVhdGVfYnV0dG9uXCIgKm5nSWY9XCJzaG93Q3JlYXRlTmV3XCI+Q3JlYXRlIG5ldzwvYT5cclxuICAgIDwvZGl2PlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW1zLmxlbmd0aCA+IDA7IGVsc2Ugbm9EYXRhQXZhaWxhYmxlXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtdWx0aXBsZTsgZWxzZSBzaW5nbGVTZWxlY3Rpb25cIj5cclxuICAgICAgICA8YVxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICBjb21wYWN0OiAhaXRlbT8uaW1hZ2UgJiYgIWl0ZW0/LnN1YkxhYmVsLFxyXG4gICAgICAgICAgICBleHBhbmRlZDogaXRlbT8uaW1hZ2UgfHwgaXRlbT8uc3ViTGFiZWxcclxuICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgY2xhc3M9XCJpdGVtcyBkLWJsb2NrXCJcclxuICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIF9maWx0ZXJlZEl0ZW1zXCJcclxuICAgICAgICAgIChjbGljayk9XCJzZWxlY3RJdGVtKGl0ZW0pXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24taXRlbVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1kZXRhaWxzXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnQtd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0/LmltYWdlXCJcclxuICAgICAgICAgICAgICAgICAgW3NyY109XCJpdGVtPy5pbWFnZVwiXHJcbiAgICAgICAgICAgICAgICAgIGFsdD1cIkl0ZW0gSW1hZ2VcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIml0ZW0taW1hZ2UgaWNvbi1zaXplXCJcclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIml0ZW0tbGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiaGlnaGxpZ2h0TWF0Y2goaXRlbS5sYWJlbClcIlxyXG4gICAgICAgICAgICAgICAgICA+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93U3ViTGFiZWxcIiBjbGFzcz1cIml0ZW0tc3VibGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBpdGVtPy5zdWJMYWJlbCB9fVxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duX2J1dHRvbnNcIlxyXG4gICAgICAgICAgICAgICAgW2NsYXNzLmVtcHR5XT1cImN1c3RvbUJ1dHRvbnMubGVuZ3RoID09PSAwXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBidXR0b24gb2YgY3VzdG9tQnV0dG9uc1wiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVCdXR0b25DbGljayhidXR0b24uYWN0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxpIFtjbGFzc109XCJidXR0b24uaWNvblwiIFtzdHlsZS5jb2xvcl09XCJidXR0b24uY29sb3JcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2E+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPG5nLXRlbXBsYXRlICNzaW5nbGVTZWxlY3Rpb24+XHJcbiAgICAgICAgPGFcclxuICAgICAgICAgIGNsYXNzPVwiaXRlbXMgZC1ibG9ja1wiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgIGNvbXBhY3Q6ICFpdGVtPy5pbWFnZSAmJiAhaXRlbT8uc3ViTGFiZWwsXHJcbiAgICAgICAgICAgIGV4cGFuZGVkOiBpdGVtPy5pbWFnZSB8fCBpdGVtPy5zdWJMYWJlbFxyXG4gICAgICAgICAgfVwiXHJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBfZmlsdGVyZWRJdGVtc1wiXHJcbiAgICAgICAgICAoY2xpY2spPVwic2VsZWN0SXRlbShpdGVtKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tZGV0YWlsc1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50LXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgIDxpbWdcclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtPy5pbWFnZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtzcmNdPVwiaXRlbT8uaW1hZ2VcIlxyXG4gICAgICAgICAgICAgICAgICBhbHQ9XCJJdGVtIEltYWdlXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpdGVtLWltYWdlIGljb24tc2l6ZVwiXHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpdGVtLWxhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImhpZ2hsaWdodE1hdGNoKGl0ZW0ubGFiZWwpXCJcclxuICAgICAgICAgICAgICAgICAgPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd1N1YkxhYmVsXCIgY2xhc3M9XCJpdGVtLXN1YmxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgaXRlbT8uc3ViTGFiZWwgfX1cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duX2J1dHRvbnNcIlxyXG4gICAgICAgICAgICAgICAgW2NsYXNzLmVtcHR5XT1cImN1c3RvbUJ1dHRvbnMubGVuZ3RoID09PSAwXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBidXR0b24gb2YgY3VzdG9tQnV0dG9uc1wiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVCdXR0b25DbGljayhidXR0b24uYWN0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxpIFtjbGFzc109XCJidXR0b24uaWNvblwiIFtzdHlsZS5jb2xvcl09XCJidXR0b24uY29sb3JcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2E+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8IS0tIFwiTm8gZGF0YSBhdmFpbGFibGVcIiBtZXNzYWdlIGlmIHRoZSBkcm9wIGRvd24gaXMgZW1wdHkgLS0+XHJcbiAgICA8bmctdGVtcGxhdGUgI25vRGF0YUF2YWlsYWJsZT5cclxuICAgICAgPGRpdiBjbGFzcz1cIml0ZW1zXCI+Tm8gZGF0YSBhdmFpbGFibGU8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24ubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9kcm9wZG93bi9zcmMvbGliL2Ryb3Bkb3duLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIERyb3Bkb3duSXRlbSB7XHJcbiAgICB2YWx1ZTogc3RyaW5nO1xyXG4gICAgbGFiZWw6IHN0cmluZztcclxuICAgIGltYWdlOiBzdHJpbmc7XHJcbiAgICBzdWJMYWJlbD86IHN0cmluZ1xyXG4gIH1cclxuICAiXX0=
@@ -0,0 +1,28 @@
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24ubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvZHJvcGRvd24vc3JjL2xpYi9kcm9wZG93bi5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQWdCL0MsTUFBTSxPQUFPLGNBQWM7K0dBQWQsY0FBYztnSEFBZCxjQUFjLGlCQVZ2QixpQkFBaUIsYUFHakIsV0FBVztZQUNYLFlBQVksYUFHWixpQkFBaUI7Z0hBR1IsY0FBYyxZQVB2QixXQUFXO1lBQ1gsWUFBWTs7NEZBTUgsY0FBYztrQkFaMUIsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUU7d0JBQ1osaUJBQWlCO3FCQUNsQjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsV0FBVzt3QkFDWCxZQUFZO3FCQUNiO29CQUNELE9BQU8sRUFBRTt3QkFDUCxpQkFBaUI7cUJBQ2xCO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICcuL2Ryb3Bkb3duLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5cclxuXHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGRlY2xhcmF0aW9uczogW1xyXG4gICAgRHJvcGRvd25Db21wb25lbnRcclxuICBdLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gIF0sXHJcbiAgZXhwb3J0czogW1xyXG4gICAgRHJvcGRvd25Db21wb25lbnRcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEcm9wZG93bk1vZHVsZSB7IH1cclxuIl19
@@ -0,0 +1,14 @@
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2Ryb3Bkb3duL3NyYy9saWIvZHJvcGRvd24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUszQyxNQUFNLE9BQU8sZUFBZTtJQUUxQixnQkFBZ0IsQ0FBQzsrR0FGTixlQUFlO21IQUFmLGVBQWUsY0FGZCxNQUFNOzs0RkFFUCxlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIERyb3Bkb3duU2VydmljZSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcbn1cclxuIl19
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlzZXJ2ZS10ZWNoLWRyb3AtZG93bi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2Ryb3Bkb3duL3NyYy9waXNlcnZlLXRlY2gtZHJvcC1kb3duLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG4iXX0=
@@ -0,0 +1,7 @@
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2Ryb3Bkb3duL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsdUJBQXVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgZHJvcGRvd25cclxuICovXHJcblxyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kcm9wZG93bi5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvZHJvcGRvd24uY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvZHJvcGRvd24ubW9kdWxlJztcclxuIl19