tango-app-ui-analyse-trax 3.0.0-dev → 3.3.1-alpha-task.62

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/esm2022/lib/components/action-centre/action-centre.component.mjs +303 -0
  2. package/esm2022/lib/components/activity-log/activity-log.component.mjs +94 -0
  3. package/esm2022/lib/components/add-checklist/add-checklist.component.mjs +1439 -0
  4. package/esm2022/lib/components/checklist/checklist.component.mjs +252 -0
  5. package/esm2022/lib/components/checklist-configure/checklist-configure.component.mjs +1954 -0
  6. package/esm2022/lib/components/checklistlayout/checklistlayout.component.mjs +12 -0
  7. package/esm2022/lib/components/chip-dropdown/chip-dropdown.component.mjs +84 -0
  8. package/esm2022/lib/components/create-task/create-task.component.mjs +367 -0
  9. package/esm2022/lib/components/create-task/create-task.data.mjs +306 -0
  10. package/esm2022/lib/components/create-task/create-task.interface.mjs +2 -0
  11. package/esm2022/lib/components/custom-select/custom-select.component.mjs +236 -0
  12. package/esm2022/lib/components/dashboard/dashboard.component.mjs +597 -0
  13. package/esm2022/lib/components/dashboard-info/dashboard-info.component.mjs +635 -0
  14. package/esm2022/lib/components/dashboard-info/monthlyperformance-datepicker/monthlyperformance-datepicker.component.mjs +172 -0
  15. package/esm2022/lib/components/dashboard-layout/dashboard-layout.component.mjs +12 -0
  16. package/esm2022/lib/components/export-gallery/export-gallery.component.mjs +119 -0
  17. package/esm2022/lib/components/flag-layout/flag-layout.component.mjs +12 -0
  18. package/esm2022/lib/components/flags/flags.component.mjs +257 -0
  19. package/esm2022/lib/components/flags/flags.interface.mjs +2 -0
  20. package/esm2022/lib/components/flags-info/flags-info.component.mjs +388 -0
  21. package/esm2022/lib/components/flags-info/flags-info.interface.mjs +2 -0
  22. package/esm2022/lib/components/flags-info/unattended-pie-chart/unattended-pie-chart.component.mjs +71 -0
  23. package/esm2022/lib/components/gallery/gallery.component.mjs +1181 -0
  24. package/esm2022/lib/components/group-select/group-select.component.mjs +155 -0
  25. package/esm2022/lib/components/managechecklist/managechecklist.component.mjs +172 -0
  26. package/esm2022/lib/components/multi-date-datepicker/multi-date-datepicker.component.mjs +117 -0
  27. package/esm2022/lib/components/orders/orders.component.mjs +171 -0
  28. package/esm2022/lib/components/pagination/pagination.component.mjs +62 -0
  29. package/esm2022/lib/components/reactive-select/reactive-select.component.mjs +105 -0
  30. package/esm2022/lib/components/reports/date-picker/date-picker.component.mjs +60 -0
  31. package/esm2022/lib/components/reports/reports.component.mjs +299 -0
  32. package/esm2022/lib/components/reports/reports.interface.mjs +2 -0
  33. package/esm2022/lib/components/tango-analyse-trax/tango-analyse-trax.component.mjs +27 -6
  34. package/esm2022/lib/components/task/task.component.mjs +271 -0
  35. package/esm2022/lib/components/task-configure/task-configure.component.mjs +504 -0
  36. package/esm2022/lib/components/task-configure/task-configure.interface.mjs +2 -0
  37. package/esm2022/lib/components/task-info/task-info.component.mjs +300 -0
  38. package/esm2022/lib/components/task-info/taskinfo-edit/taskinfo-edit.component.mjs +203 -0
  39. package/esm2022/lib/components/task-layout/task-layout.component.mjs +12 -0
  40. package/esm2022/lib/components/trax-store/trax-store.component.mjs +153 -0
  41. package/esm2022/lib/components/traxpopup/traxpopup.component.mjs +67 -0
  42. package/esm2022/lib/services/trax.service.mjs +334 -0
  43. package/esm2022/lib/tango-analyse-trax-routing.module.mjs +124 -6
  44. package/esm2022/lib/tango-analyse-trax.module.mjs +144 -9
  45. package/fesm2022/tango-app-ui-analyse-trax.mjs +11412 -21
  46. package/fesm2022/tango-app-ui-analyse-trax.mjs.map +1 -1
  47. package/lib/components/action-centre/action-centre.component.d.ts +56 -0
  48. package/lib/components/activity-log/activity-log.component.d.ts +30 -0
  49. package/lib/components/add-checklist/add-checklist.component.d.ts +99 -0
  50. package/lib/components/checklist/checklist.component.d.ts +39 -0
  51. package/lib/components/checklist-configure/checklist-configure.component.d.ts +160 -0
  52. package/lib/components/checklistlayout/checklistlayout.component.d.ts +5 -0
  53. package/lib/components/chip-dropdown/chip-dropdown.component.d.ts +24 -0
  54. package/lib/components/create-task/create-task.component.d.ts +58 -0
  55. package/lib/components/create-task/create-task.data.d.ts +244 -0
  56. package/lib/components/create-task/create-task.interface.d.ts +147 -0
  57. package/lib/components/custom-select/custom-select.component.d.ts +35 -0
  58. package/lib/components/dashboard/dashboard.component.d.ts +75 -0
  59. package/lib/components/dashboard-info/dashboard-info.component.d.ts +102 -0
  60. package/lib/components/dashboard-info/monthlyperformance-datepicker/monthlyperformance-datepicker.component.d.ts +40 -0
  61. package/lib/components/dashboard-layout/dashboard-layout.component.d.ts +5 -0
  62. package/lib/components/export-gallery/export-gallery.component.d.ts +33 -0
  63. package/lib/components/flag-layout/flag-layout.component.d.ts +5 -0
  64. package/lib/components/flags/flags.component.d.ts +51 -0
  65. package/lib/components/flags/flags.interface.d.ts +64 -0
  66. package/lib/components/flags-info/flags-info.component.d.ts +62 -0
  67. package/lib/components/flags-info/flags-info.interface.d.ts +212 -0
  68. package/lib/components/flags-info/unattended-pie-chart/unattended-pie-chart.component.d.ts +13 -0
  69. package/lib/components/gallery/gallery.component.d.ts +125 -0
  70. package/lib/components/group-select/group-select.component.d.ts +33 -0
  71. package/lib/components/managechecklist/managechecklist.component.d.ts +32 -0
  72. package/lib/components/multi-date-datepicker/multi-date-datepicker.component.d.ts +27 -0
  73. package/lib/components/orders/orders.component.d.ts +38 -0
  74. package/lib/components/pagination/pagination.component.d.ts +16 -0
  75. package/lib/components/reactive-select/reactive-select.component.d.ts +32 -0
  76. package/lib/components/reports/date-picker/date-picker.component.d.ts +23 -0
  77. package/lib/components/reports/reports.component.d.ts +55 -0
  78. package/lib/components/reports/reports.interface.d.ts +46 -0
  79. package/lib/components/tango-analyse-trax/tango-analyse-trax.component.d.ts +10 -1
  80. package/lib/components/task/task.component.d.ts +59 -0
  81. package/lib/components/task-configure/task-configure.component.d.ts +69 -0
  82. package/lib/components/task-configure/task-configure.interface.d.ts +124 -0
  83. package/lib/components/task-info/task-info.component.d.ts +68 -0
  84. package/lib/components/task-info/taskinfo-edit/taskinfo-edit.component.d.ts +60 -0
  85. package/lib/components/task-layout/task-layout.component.d.ts +5 -0
  86. package/lib/components/trax-store/trax-store.component.d.ts +44 -0
  87. package/lib/components/traxpopup/traxpopup.component.d.ts +23 -0
  88. package/lib/services/trax.service.d.ts +107 -0
  89. package/lib/tango-analyse-trax.module.d.ts +42 -3
  90. package/package.json +1 -1
@@ -0,0 +1,236 @@
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, HostListener, Input, Output } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "../../services/trax.service";
4
+ import * as i2 from "@angular/common";
5
+ import * as i3 from "@angular/forms";
6
+ export class CustomSelectComponent {
7
+ cd;
8
+ authService;
9
+ onClick(event) {
10
+ const target = event.target;
11
+ if (!target.closest('.dropdown')) {
12
+ this.showDropdown = false;
13
+ }
14
+ }
15
+ items;
16
+ searchField;
17
+ multi;
18
+ idField;
19
+ selectedValues = [];
20
+ disabled;
21
+ label;
22
+ selected = new EventEmitter();
23
+ filteredValues = [];
24
+ showDropdown;
25
+ searchValue;
26
+ instanceId;
27
+ constructor(cd, authService) {
28
+ this.cd = cd;
29
+ this.authService = authService;
30
+ }
31
+ ngOnInit() {
32
+ this.instanceId = crypto.randomUUID();
33
+ this.authService.dropDownTrigger.subscribe((e) => {
34
+ if (e !== this.instanceId) {
35
+ this.showDropdown = false;
36
+ this.cd.detectChanges();
37
+ }
38
+ });
39
+ }
40
+ get selectedValuesDisplay() {
41
+ return this.selectedValues?.map((item) => item[this.searchField]).join(', ') || '';
42
+ }
43
+ ngOnChanges(changes) {
44
+ if (changes['items'] && this.items?.length) {
45
+ this.initializeItems();
46
+ }
47
+ if (changes['selectedValues'] && Array.isArray(changes['selectedValues']?.currentValue) && changes['selectedValues']?.currentValue?.length > 0 && changes['selectedValues']?.currentValue[0]) {
48
+ this.updateSelectedValues();
49
+ }
50
+ }
51
+ initializeItems() {
52
+ this.filteredValues = this.items?.map((item) => ({ ...item }));
53
+ this.updateSelectedValues();
54
+ }
55
+ updateSelectedValues() {
56
+ this.selectedValues?.forEach((selectedItem) => {
57
+ const item = this.filteredValues?.find((filteredItem) => filteredItem?.[this.idField] === selectedItem?.[this.idField]);
58
+ if (item) {
59
+ item.isSelected = true;
60
+ }
61
+ });
62
+ }
63
+ openDropdown(event) {
64
+ console.log(event);
65
+ this.searchTerm = '';
66
+ console.log(" ------------", this.selectedValues);
67
+ this.authService.dropDownTrigger.next(this.instanceId);
68
+ event.stopPropagation();
69
+ this.showDropdown = !this.showDropdown;
70
+ // this.filteredValues = this.selectedValues
71
+ this.filteredValues.forEach((data) => {
72
+ data.isSelected = false;
73
+ });
74
+ this.selectedValues = [];
75
+ console.log(this.selectedValues);
76
+ console.log(this.filteredValues);
77
+ this.searchValue = '';
78
+ }
79
+ // onInput(event: any) {
80
+ // if (!event.target.value) {
81
+ // this.filteredValues = [...this.items];
82
+ // } else {
83
+ // const searchTerm = event.target.value.toLowerCase();
84
+ // if(searchTerm.includes(",")){
85
+ // console.log(searchTerm.split(','))
86
+ // this.filteredValues = []
87
+ // searchTerm.split(',').map((data:any)=>{
88
+ // if(data!=''){
89
+ // let filterArray = this.items.filter((item: any) =>{
90
+ // console.log(item[this.searchField].toLowerCase(),data.trim().toLowerCase() )
91
+ // item[this.searchField].toLowerCase().includes(data.trim().toLowerCase() )
92
+ // })
93
+ // console.log(filterArray)
94
+ // this.filteredValues = [...this.filteredValues,...filterArray]
95
+ // }
96
+ // })
97
+ // console.log(this.filteredValues)
98
+ // }else{
99
+ // this.filteredValues = this.items.filter((item: any) =>
100
+ // item[this.searchField].toLowerCase().includes(searchTerm)
101
+ // );
102
+ // }
103
+ // }
104
+ // this.updateSelectedValues();
105
+ // this.cd.detectChanges();
106
+ // }
107
+ searchTerm;
108
+ onInput(event) {
109
+ const input = event.target.value.trim();
110
+ // debugger
111
+ this.searchTerm = input;
112
+ if (!input) {
113
+ this.filteredValues = [...this.items];
114
+ }
115
+ else {
116
+ const searchTerms = input
117
+ .split(',')
118
+ .map((term) => term.trim().toLowerCase())
119
+ .filter((term) => term); // Remove empty terms
120
+ this.filteredValues = this.items.filter((item) => searchTerms.some((term) => item[this.searchField]?.toLowerCase() === term));
121
+ }
122
+ this.filteredValues.forEach((item) => {
123
+ item.isSelected = this.selectedValues.some((selected) => selected[this.idField] === item[this.idField]);
124
+ });
125
+ this.emitSelectedValues(this.filteredValues);
126
+ this.updateSelectedValues();
127
+ this.cd.detectChanges();
128
+ }
129
+ onSelect(event, item) {
130
+ console.log(item);
131
+ console.log(this.selectedValues);
132
+ const isChecked = event.currentTarget.checked;
133
+ // debugger
134
+ if (this.multi) {
135
+ if (isChecked) {
136
+ if (!this.selectedValues.some((elem) => elem[this.idField] === item[this.idField])) {
137
+ this.selectedValues.push(item);
138
+ }
139
+ }
140
+ else {
141
+ this.selectedValues = this.selectedValues.filter((elem) => elem[this.idField] !== item[this.idField]);
142
+ }
143
+ }
144
+ else {
145
+ this.selectedValues = [{ ...item }];
146
+ console.log(this.selectedValues);
147
+ this.filteredValues.forEach((element) => {
148
+ element.isSelected = element[this.idField] === item[this.idField];
149
+ });
150
+ this.showDropdown = false;
151
+ }
152
+ this.filteredValues.forEach((listItem) => {
153
+ listItem.isSelected = this.selectedValues.some((selected) => selected[this.idField] === listItem[this.idField]);
154
+ });
155
+ console.log(this.filteredValues);
156
+ if (this.searchTerm) {
157
+ const searchTerms = this.searchTerm
158
+ .split(',')
159
+ .map((term) => term.trim().toLowerCase())
160
+ .filter((term) => term);
161
+ this.filteredValues = this.items.filter((listItem) => searchTerms.some((term) => listItem[this.searchField]?.toLowerCase() === term));
162
+ }
163
+ console.log(this.filteredValues);
164
+ // Emit selected values without `isSelected` property
165
+ const valuesToEmit = this.selectedValues.map((value) => {
166
+ const { isSelected, ...selectedItem } = value;
167
+ return selectedItem;
168
+ });
169
+ console.log(valuesToEmit);
170
+ this.emitSelectedValues(valuesToEmit); // Emit updated selections
171
+ this.cd.detectChanges();
172
+ }
173
+ onSelectAll(event) {
174
+ const selectAll = event.currentTarget.checked;
175
+ if (selectAll) {
176
+ this.filteredValues.forEach((item) => {
177
+ if (!this.selectedValues.some((elem) => elem[this.idField] === item[this.idField])) {
178
+ this.selectedValues.push(item);
179
+ }
180
+ });
181
+ }
182
+ else {
183
+ console.log(this.selectedValues);
184
+ console.log(this.filteredValues);
185
+ this.selectedValues = this.selectedValues.filter((item) => !this.filteredValues.some((filteredItem) => filteredItem[this.idField] === item[this.idField]));
186
+ }
187
+ // Update the `isSelected` state in the filtered list
188
+ this.filteredValues.forEach((item) => {
189
+ item.isSelected = selectAll;
190
+ });
191
+ // Emit selected values without `isSelected` property
192
+ const valuesToEmit = this.selectedValues.map((value) => {
193
+ const { isSelected, ...selectedItem } = value;
194
+ return selectedItem;
195
+ });
196
+ this.emitSelectedValues(valuesToEmit);
197
+ this.cd.detectChanges();
198
+ }
199
+ emitSelectedValues(values) {
200
+ if (this.multi) {
201
+ this.selected.emit(values);
202
+ }
203
+ else {
204
+ this.selected.emit(values[0]);
205
+ }
206
+ }
207
+ checkIfAllSelected() {
208
+ return this.filteredValues.every((item) => item.isSelected);
209
+ }
210
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CustomSelectComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.TraxService }], target: i0.ɵɵFactoryTarget.Component });
211
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CustomSelectComponent, selector: "lib-stores-select", inputs: { items: "items", searchField: "searchField", multi: "multi", idField: "idField", selectedValues: "selectedValues", disabled: "disabled", label: "label" }, outputs: { selected: "selected" }, host: { listeners: { "document:click": "onClick($event)" } }, usesOnChanges: true, ngImport: i0, template: "<div class=\"outer-container\">\r\n <div [ngClass]=\"disabled ? 'disable-input':''\" (click)=\"openDropdown($event)\" class=\"form-select\">\r\n <ng-container *ngIf=\"multi\" >\r\n <span *ngIf=\"selectedValues?.length\" class=\"select-value mx-2\"> <img class=\"me-2\" alt=\"Pic\" src=\"./assets/tango/Image/users-teams.svg\">{{selectedValues?.[0]?.[searchField]}}</span> \r\n <!-- <span *ngIf=\"selectedValues?.length > 1\" class=\"select-value mx-2\"><img class=\"me-2\" alt=\"Pic\" src=\"./assets/tango/Image/users-teams.svg\">{{selectedValues?.[1]?.[searchField]}}</span> -->\r\n <span class=\"select-value mx-2\" *ngIf=\"selectedValues?.length > 1\">+{{selectedValues?.length -1}}</span> {{label}} \r\n </ng-container>\r\n <ng-container *ngIf=\"!multi\" >\r\n {{selectedValues?.[0]?.[searchField]}}\r\n </ng-container>\r\n </div>\r\n <div [ngClass]=\"showDropdown ? '' : 'd-none'\" class=\"input-container dropdown\" >\r\n <div class=\"w-100 input-wrapper\">\r\n <input [(ngModel)]=\"searchValue\" placeholder=\"Search\" (input)=\"onInput($event)\" type=\"text\"> \r\n <svg class=\"search-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"17\" viewBox=\"0 0 16 17\" fill=\"none\">\r\n <path d=\"M14 14.5L11.1 11.6M12.6667 7.83333C12.6667 10.7789 10.2789 13.1667 7.33333 13.1667C4.38781 13.1667 2 10.7789 2 7.83333C2 4.88781 4.38781 2.5 7.33333 2.5C10.2789 2.5 12.6667 4.88781 12.6667 7.83333Z\" stroke=\"#667085\" stroke-width=\"1.3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg> \r\n </div>\r\n <ul>\r\n <li *ngIf=\"multi && filteredValues?.length\">\r\n <label class=\"form-check\" [for]=\"instanceId\">\r\n <input (change)=\"onSelectAll($event)\" [checked]=\"checkIfAllSelected()\" class=\"form-check-input me-3\" type=\"checkbox\"\r\n [id]=\"instanceId\">\r\n <span class=\"form-check-label\" >\r\n Select All\r\n </span>\r\n </label>\r\n </li>\r\n <li *ngFor=\"let item of filteredValues\" [ngClass]=\"item.isSelected && !multi ? 'selected' : ''\" >\r\n <label [for]=\"item[idField] + instanceId\" [ngClass]=\"multi ? '': 'ps-0'\" class=\"form-check\">\r\n <input [ngClass]=\"multi ? '': 'd-none'\" (change)=\"onSelect($event, item)\" [(ngModel)]=\"item.isSelected\" class=\"form-check-input me-3\" type=\"checkbox\" value=\"\"\r\n [id]=\"item[idField] + instanceId\">\r\n <span class=\"form-check-label\" >\r\n {{item[searchField]}}\r\n </span>\r\n </label>\r\n </li>\r\n <li *ngIf=\"!filteredValues?.length\" >\r\n <span class=\"d-flex align-items-center justify-content-center\" >No data found</span>\r\n </li>\r\n </ul> \r\n </div> \r\n \r\n</div>", styles: [":host{width:100%;height:100%}.outer-container{position:relative;background-color:#fff}.outer-container .form-select{font-size:1.1rem;font-weight:600;border-radius:8px!important;color:var(--Gray-500, #344054);border:1px solid var(--Gray-300, #D0D5DD)!important;height:42.5px}.outer-container .disable-input{pointer-events:none;background-color:#f9fafb!important}.outer-container .input-container{position:absolute;width:100%;z-index:1}.outer-container .input-container .input-wrapper{padding:8px 10px;background-color:#fff;border-top-right-radius:8px;border-top-left-radius:8px;border-top:1px solid rgba(16,24,40,.08);border-right:1px solid rgba(16,24,40,.08);border-left:1px solid rgba(16,24,40,.08)}.outer-container .input-container .input-wrapper input{width:100%;border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF);box-shadow:0 1px 2px #1018280d;padding:10px 14px 10px 30px;outline:none}.outer-container .input-container .input-wrapper input ::placeholder{color:var(--Gray-500, #667085);font-family:Inter;font-size:14px;font-weight:500;line-height:20px}.outer-container .input-container .input-wrapper .search-icon{position:absolute;left:20px;top:20px}.outer-container .input-container ul{position:relative;background-color:#fff;margin:0;padding:0;max-height:200px;min-height:auto;overflow-y:auto;border-bottom-right-radius:8px;border-bottom-left-radius:8px;border-bottom:1px solid rgba(16,24,40,.08);border-right:1px solid rgba(16,24,40,.08);border-left:1px solid rgba(16,24,40,.08)}.outer-container .input-container ul .selected{background:#f9fafb}.outer-container .input-container ul li{list-style:none;padding:10px 16px;cursor:pointer}.outer-container .input-container ul li label{cursor:pointer}.outer-container .input-container ul li:hover{background:#f9fafb}.form-check{display:flex;align-items:center}.form-check-input{height:16px;width:16px;border-radius:4px;border:1px solid var(--Primary-600, #00A3FF)}.form-check-input:checked{--bs-form-check-bg-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAICAYAAADA+m62AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAB4SURBVHgBhY7NDUBQEIRnqcJNKXTg6qYTStCB+Isy6IQSNMDa9SLh5eWZZPcw+81kCX/quABhD73QyKXsGoyIvNCJSto2hEhNtY4N9cwYeMXEsVqB1GaSauRQOpty2tSmO3FgloAmF5nEhgyoesMO6CuFW66fn2xdFyA3ZzcRLrMAAAAASUVORK5CYII=);background-color:#eaf8ff;border-color:#00a3ff}.form-check-label{color:var(--Gray-700, #344054);font-family:Inter;font-size:14px;font-style:normal;font-weight:500;line-height:20px}.select-value{border-radius:16px!important;background:var(--Gray-100, #F2F4F7)!important;mix-blend-mode:multiply;color:var(--Gray-700, #344054)!important;text-align:center;font-size:14px;font-style:normal;font-weight:500;line-height:20px;padding:4px 12px 4px 6px}\n"], dependencies: [{ 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"] }, { kind: "directive", type: i3.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: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
212
+ }
213
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CustomSelectComponent, decorators: [{
214
+ type: Component,
215
+ args: [{ selector: 'lib-stores-select', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"outer-container\">\r\n <div [ngClass]=\"disabled ? 'disable-input':''\" (click)=\"openDropdown($event)\" class=\"form-select\">\r\n <ng-container *ngIf=\"multi\" >\r\n <span *ngIf=\"selectedValues?.length\" class=\"select-value mx-2\"> <img class=\"me-2\" alt=\"Pic\" src=\"./assets/tango/Image/users-teams.svg\">{{selectedValues?.[0]?.[searchField]}}</span> \r\n <!-- <span *ngIf=\"selectedValues?.length > 1\" class=\"select-value mx-2\"><img class=\"me-2\" alt=\"Pic\" src=\"./assets/tango/Image/users-teams.svg\">{{selectedValues?.[1]?.[searchField]}}</span> -->\r\n <span class=\"select-value mx-2\" *ngIf=\"selectedValues?.length > 1\">+{{selectedValues?.length -1}}</span> {{label}} \r\n </ng-container>\r\n <ng-container *ngIf=\"!multi\" >\r\n {{selectedValues?.[0]?.[searchField]}}\r\n </ng-container>\r\n </div>\r\n <div [ngClass]=\"showDropdown ? '' : 'd-none'\" class=\"input-container dropdown\" >\r\n <div class=\"w-100 input-wrapper\">\r\n <input [(ngModel)]=\"searchValue\" placeholder=\"Search\" (input)=\"onInput($event)\" type=\"text\"> \r\n <svg class=\"search-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"17\" viewBox=\"0 0 16 17\" fill=\"none\">\r\n <path d=\"M14 14.5L11.1 11.6M12.6667 7.83333C12.6667 10.7789 10.2789 13.1667 7.33333 13.1667C4.38781 13.1667 2 10.7789 2 7.83333C2 4.88781 4.38781 2.5 7.33333 2.5C10.2789 2.5 12.6667 4.88781 12.6667 7.83333Z\" stroke=\"#667085\" stroke-width=\"1.3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg> \r\n </div>\r\n <ul>\r\n <li *ngIf=\"multi && filteredValues?.length\">\r\n <label class=\"form-check\" [for]=\"instanceId\">\r\n <input (change)=\"onSelectAll($event)\" [checked]=\"checkIfAllSelected()\" class=\"form-check-input me-3\" type=\"checkbox\"\r\n [id]=\"instanceId\">\r\n <span class=\"form-check-label\" >\r\n Select All\r\n </span>\r\n </label>\r\n </li>\r\n <li *ngFor=\"let item of filteredValues\" [ngClass]=\"item.isSelected && !multi ? 'selected' : ''\" >\r\n <label [for]=\"item[idField] + instanceId\" [ngClass]=\"multi ? '': 'ps-0'\" class=\"form-check\">\r\n <input [ngClass]=\"multi ? '': 'd-none'\" (change)=\"onSelect($event, item)\" [(ngModel)]=\"item.isSelected\" class=\"form-check-input me-3\" type=\"checkbox\" value=\"\"\r\n [id]=\"item[idField] + instanceId\">\r\n <span class=\"form-check-label\" >\r\n {{item[searchField]}}\r\n </span>\r\n </label>\r\n </li>\r\n <li *ngIf=\"!filteredValues?.length\" >\r\n <span class=\"d-flex align-items-center justify-content-center\" >No data found</span>\r\n </li>\r\n </ul> \r\n </div> \r\n \r\n</div>", styles: [":host{width:100%;height:100%}.outer-container{position:relative;background-color:#fff}.outer-container .form-select{font-size:1.1rem;font-weight:600;border-radius:8px!important;color:var(--Gray-500, #344054);border:1px solid var(--Gray-300, #D0D5DD)!important;height:42.5px}.outer-container .disable-input{pointer-events:none;background-color:#f9fafb!important}.outer-container .input-container{position:absolute;width:100%;z-index:1}.outer-container .input-container .input-wrapper{padding:8px 10px;background-color:#fff;border-top-right-radius:8px;border-top-left-radius:8px;border-top:1px solid rgba(16,24,40,.08);border-right:1px solid rgba(16,24,40,.08);border-left:1px solid rgba(16,24,40,.08)}.outer-container .input-container .input-wrapper input{width:100%;border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF);box-shadow:0 1px 2px #1018280d;padding:10px 14px 10px 30px;outline:none}.outer-container .input-container .input-wrapper input ::placeholder{color:var(--Gray-500, #667085);font-family:Inter;font-size:14px;font-weight:500;line-height:20px}.outer-container .input-container .input-wrapper .search-icon{position:absolute;left:20px;top:20px}.outer-container .input-container ul{position:relative;background-color:#fff;margin:0;padding:0;max-height:200px;min-height:auto;overflow-y:auto;border-bottom-right-radius:8px;border-bottom-left-radius:8px;border-bottom:1px solid rgba(16,24,40,.08);border-right:1px solid rgba(16,24,40,.08);border-left:1px solid rgba(16,24,40,.08)}.outer-container .input-container ul .selected{background:#f9fafb}.outer-container .input-container ul li{list-style:none;padding:10px 16px;cursor:pointer}.outer-container .input-container ul li label{cursor:pointer}.outer-container .input-container ul li:hover{background:#f9fafb}.form-check{display:flex;align-items:center}.form-check-input{height:16px;width:16px;border-radius:4px;border:1px solid var(--Primary-600, #00A3FF)}.form-check-input:checked{--bs-form-check-bg-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAICAYAAADA+m62AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAB4SURBVHgBhY7NDUBQEIRnqcJNKXTg6qYTStCB+Isy6IQSNMDa9SLh5eWZZPcw+81kCX/quABhD73QyKXsGoyIvNCJSto2hEhNtY4N9cwYeMXEsVqB1GaSauRQOpty2tSmO3FgloAmF5nEhgyoesMO6CuFW66fn2xdFyA3ZzcRLrMAAAAASUVORK5CYII=);background-color:#eaf8ff;border-color:#00a3ff}.form-check-label{color:var(--Gray-700, #344054);font-family:Inter;font-size:14px;font-style:normal;font-weight:500;line-height:20px}.select-value{border-radius:16px!important;background:var(--Gray-100, #F2F4F7)!important;mix-blend-mode:multiply;color:var(--Gray-700, #344054)!important;text-align:center;font-size:14px;font-style:normal;font-weight:500;line-height:20px;padding:4px 12px 4px 6px}\n"] }]
216
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.TraxService }], propDecorators: { onClick: [{
217
+ type: HostListener,
218
+ args: ['document:click', ['$event']]
219
+ }], items: [{
220
+ type: Input
221
+ }], searchField: [{
222
+ type: Input
223
+ }], multi: [{
224
+ type: Input
225
+ }], idField: [{
226
+ type: Input
227
+ }], selectedValues: [{
228
+ type: Input
229
+ }], disabled: [{
230
+ type: Input
231
+ }], label: [{
232
+ type: Input
233
+ }], selected: [{
234
+ type: Output
235
+ }] } });
236
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXNlbGVjdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hbmFseXNlLXRyYXgvc3JjL2xpYi9jb21wb25lbnRzL2N1c3RvbS1zZWxlY3QvY3VzdG9tLXNlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hbmFseXNlLXRyYXgvc3JjL2xpYi9jb21wb25lbnRzL2N1c3RvbS1zZWxlY3QvY3VzdG9tLXNlbGVjdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQXFCLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFTbkssTUFBTSxPQUFPLHFCQUFxQjtJQXlCWjtJQUErQjtJQXRCbkQsT0FBTyxDQUFDLEtBQWlCO1FBQ3ZCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFxQixDQUFDO1FBQzNDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQ2hDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1NBQzNCO0lBQ0gsQ0FBQztJQUVRLEtBQUssQ0FBSztJQUNWLFdBQVcsQ0FBUTtJQUNuQixLQUFLLENBQVM7SUFDZCxPQUFPLENBQVE7SUFDZixjQUFjLEdBQVEsRUFBRSxDQUFBO0lBQ3hCLFFBQVEsQ0FBcUI7SUFDN0IsS0FBSyxDQUFRO0lBRVosUUFBUSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUE7SUFDNUMsY0FBYyxHQUFRLEVBQUUsQ0FBQTtJQUN4QixZQUFZLENBQVM7SUFDckIsV0FBVyxDQUFRO0lBQ25CLFVBQVUsQ0FBTTtJQUdoQixZQUFvQixFQUFxQixFQUFVLFdBQXVCO1FBQXRELE9BQUUsR0FBRixFQUFFLENB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aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUcmF4U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RyYXguc2VydmljZSc7XHJcbiBcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItc3RvcmVzLXNlbGVjdCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2N1c3RvbS1zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9jdXN0b20tc2VsZWN0LmNvbXBvbmVudC5zY3NzJyxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIEN1c3RvbVNlbGVjdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0IHtcclxuIFxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcclxuICBvbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBpZiAoIXRhcmdldC5jbG9zZXN0KCcuZHJvcGRvd24nKSkge1xyXG4gICAgICB0aGlzLnNob3dEcm9wZG93biA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuIFxyXG4gIEBJbnB1dCgpIGl0ZW1zOiBhbnlcclxuICBASW5wdXQoKSBzZWFyY2hGaWVsZDogc3RyaW5nXHJcbiAgQElucHV0KCkgbXVsdGk6IGJvb2xlYW5cclxuICBASW5wdXQoKSBpZEZpZWxkOiBzdHJpbmdcclxuICBASW5wdXQoKSBzZWxlY3RlZFZhbHVlczogYW55ID0gW11cclxuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiB8IHVuZGVmaW5lZFxyXG4gIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmdcclxuIFxyXG4gIEBPdXRwdXQoKSBzZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXHJcbiAgZmlsdGVyZWRWYWx1ZXM6IGFueSA9IFtdXHJcbiAgc2hvd0Ryb3Bkb3duOiBib29sZWFuXHJcbiAgc2VhcmNoVmFsdWU6IHN0cmluZ1xyXG4gIGluc3RhbmNlSWQ6IGFueTtcclxuIFxyXG4gXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgYXV0aFNlcnZpY2U6VHJheFNlcnZpY2UpIHsgfVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5pbnN0YW5jZUlkID0gY3J5cHRvLnJhbmRvbVVVSUQoKTtcclxuICAgIHRoaXMuYXV0aFNlcnZpY2UuZHJvcERvd25UcmlnZ2VyLnN1YnNjcmliZSgoZSk9PnsgICAgICAgICAgIFxyXG4gICAgICBpZihlICE9PSB0aGlzLmluc3RhbmNlSWQpeyAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zaG93RHJvcGRvd24gPSBmYWxzZVxyXG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG4gIGdldCBzZWxlY3RlZFZhbHVlc0Rpc3BsYXkoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVmFsdWVzPy5tYXAoKGl0ZW06YW55KSA9PiBpdGVtW3RoaXMuc2VhcmNoRmllbGRdKS5qb2luKCcsICcpIHx8ICcnO1xyXG4gIH1cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgXHJcbiAgICBpZiAoY2hhbmdlc1snaXRlbXMnXSAmJiB0aGlzLml0ZW1zPy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplSXRlbXMoKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydzZWxlY3RlZFZhbHVlcyddICYmIEFycmF5LmlzQXJyYXkoY2hhbmdlc1snc2VsZWN0ZWRWYWx1ZXMnXT8uY3VycmVudFZhbHVlKSAmJiBjaGFuZ2VzWydzZWxlY3RlZFZhbHVlcyddPy5jdXJyZW50VmFsdWU/Lmxlbmd0aCA+IDAgJiYgY2hhbmdlc1snc2VsZWN0ZWRWYWx1ZXMnXT8uY3VycmVudFZhbHVlWzBdKSB7ICAgICAgICAgICAgXHJcbiAgICBcclxuXHJcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZXMoKTtcclxuXHJcbiAgICB9XHJcbiAgfVxyXG4gXHJcbiAgaW5pdGlhbGl6ZUl0ZW1zKCkgeyAgICBcclxuICAgIFxyXG4gICAgdGhpcy5maWx0ZXJlZFZhbHVlcyA9IHRoaXMuaXRlbXM/Lm1hcCgoaXRlbTogYW55KSA9PiAoeyAuLi5pdGVtIH0pKTtcclxuICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZXMoKVxyXG4gIH1cclxuIFxyXG4gIHVwZGF0ZVNlbGVjdGVkVmFsdWVzKCkgeyAgIFxyXG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlcz8uZm9yRWFjaCgoc2VsZWN0ZWRJdGVtOiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZmlsdGVyZWRWYWx1ZXM/LmZpbmQoKGZpbHRlcmVkSXRlbTogYW55KSA9PiBmaWx0ZXJlZEl0ZW0/Llt0aGlzLmlkRmllbGRdID09PSBzZWxlY3RlZEl0ZW0/Llt0aGlzLmlkRmllbGRdKTtcclxuICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICBpdGVtLmlzU2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgXHJcbiAgfVxyXG4gXHJcbiAgb3BlbkRyb3Bkb3duKGV2ZW50OiBhbnkpIHtcclxuICAgICAgY29uc29sZS5sb2coZXZlbnQpXHJcbiAgICAgIHRoaXMuc2VhcmNoVGVybSA9ICcnXHJcbiAgICBjb25zb2xlLmxvZyhcIiAtLS0tLS0tLS0tLS1cIix0aGlzLnNlbGVjdGVkVmFsdWVzKVxyXG4gICAgdGhpcy5hdXRoU2VydmljZS5kcm9wRG93blRyaWdnZXIubmV4dCh0aGlzLmluc3RhbmNlSWQpXHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMuc2hvd0Ryb3Bkb3duID0gIXRoaXMuc2hvd0Ryb3Bkb3duO1xyXG4gICAgLy8gdGhpcy5maWx0ZXJlZFZhbHVlcyA9IHRoaXMuc2VsZWN0ZWRWYWx1ZXNcclxuICAgIHRoaXMuZmlsdGVyZWRWYWx1ZXMuZm9yRWFjaCgoZGF0YTphbnkpPT57XHJcbiAgICAgIGRhdGEuaXNTZWxlY3RlZCA9IGZhbHNlXHJcbiAgICB9KVxyXG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlcyA9IFtdXHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLnNlbGVjdGVkVmFsdWVzKVxyXG4gICAgY29uc29sZS5sb2codGhpcy5maWx0ZXJlZFZhbHVlcyk7XHJcbiAgICB0aGlzLnNlYXJjaFZhbHVlID0gJydcclxuICB9XHJcbiAgLy8gb25JbnB1dChldmVudDogYW55KSB7XHJcbiAgLy8gICBpZiAoIWV2ZW50LnRhcmdldC52YWx1ZSkge1xyXG4gIC8vICAgICB0aGlzLmZpbHRlcmVkVmFsdWVzID0gWy4uLnRoaXMuaXRlbXNdO1xyXG4gIC8vICAgfSBlbHNlIHtcclxuICAvLyAgICAgY29uc3Qgc2VhcmNoVGVybSA9IGV2ZW50LnRhcmdldC52YWx1ZS50b0xvd2VyQ2FzZSgpO1xyXG4gIC8vICAgICBpZihzZWFyY2hUZXJtLmluY2x1ZGVzKFwiLFwiKSl7XHJcbiAgLy8gICAgICAgY29uc29sZS5sb2coc2VhcmNoVGVybS5zcGxpdCgnLCcpKVxyXG4gIC8vICAgICAgIHRoaXMuZmlsdGVyZWRWYWx1ZXMgPSBbXVxyXG4gIC8vICAgICAgIHNlYXJjaFRlcm0uc3BsaXQoJywnKS5tYXAoKGRhdGE6YW55KT0+e1xyXG4gIC8vICAgICAgICAgaWYoZGF0YSE9Jycpe1xyXG4gIC8vICAgICAgICBsZXQgZmlsdGVyQXJyYXkgICA9IHRoaXMuaXRlbXMuZmlsdGVyKChpdGVtOiBhbnkpID0+e1xyXG4gIC8vICAgICAgICAgY29uc29sZS5sb2coaXRlbVt0aGlzLnNlYXJjaEZpZWxkXS50b0xvd2VyQ2FzZSgpLGRhdGEudHJpbSgpLnRvTG93ZXJDYXNlKCkgKVxyXG4gIC8vICAgICAgICAgICBpdGVtW3RoaXMuc2VhcmNoRmllbGRdLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZGF0YS50cmltKCkudG9Mb3dlckNhc2UoKSApXHJcbiAgLy8gICAgICAgICB9KVxyXG4gIC8vICAgICAgIGNvbnNvbGUubG9nKGZpbHRlckFycmF5KVxyXG5cclxuICAvLyAgICAgICAgIHRoaXMuZmlsdGVyZWRWYWx1ZXMgPSBbLi4udGhpcy5maWx0ZXJlZFZhbHVlcywuLi5maWx0ZXJBcnJheV1cclxuXHJcbiAgLy8gICAgICAgfVxyXG4gICAgICAgIFxyXG4gIC8vICAgICB9KVxyXG4gIC8vICAgICBjb25zb2xlLmxvZyh0aGlzLmZpbHRlcmVkVmFsdWVzKVxyXG4gIC8vICAgICB9ZWxzZXtcclxuICAvLyAgICAgICB0aGlzLmZpbHRlcmVkVmFsdWVzID0gdGhpcy5pdGVtcy5maWx0ZXIoKGl0ZW06IGFueSkgPT5cclxuICAvLyAgICAgICAgIGl0ZW1bdGhpcy5zZWFyY2hGaWVsZF0udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hUZXJtKVxyXG4gIC8vICAgICAgICk7XHJcbiAgLy8gICAgIH1cclxuICAgICAgXHJcbiAgLy8gICB9XHJcbiAgLy8gICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWVzKCk7XHJcbiAgLy8gICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAvLyB9XHJcbiAgc2VhcmNoVGVybTphbnk7XHJcbiAgb25JbnB1dChldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldC52YWx1ZS50cmltKCk7XHJcbiAgICAvLyBkZWJ1Z2dlclxyXG4gIHRoaXMuc2VhcmNoVGVybSA9IGlucHV0O1xyXG5cclxuICBpZiAoIWlucHV0KSB7XHJcbiAgICB0aGlzLmZpbHRlcmVkVmFsdWVzID0gWy4uLnRoaXMuaXRlbXNdO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBjb25zdCBzZWFyY2hUZXJtcyA9IGlucHV0XHJcbiAgICAgIC5zcGxpdCgnLCcpXHJcbiAgICAgIC5tYXAoKHRlcm06YW55KSA9PiB0ZXJtLnRyaW0oKS50b0xvd2VyQ2FzZSgpKVxyXG4gICAgICAuZmlsdGVyKCh0ZXJtOmFueSkgPT4gdGVybSk7IC8vIFJlbW92ZSBlbXB0eSB0ZXJtc1xyXG4gICAgdGhpcy5maWx0ZXJlZFZhbHVlcyA9IHRoaXMuaXRlbXMuZmlsdGVyKChpdGVtOiBhbnkpID0+XHJcbiAgICAgIHNlYXJjaFRlcm1zLnNvbWUoKHRlcm06YW55KSA9PiBpdGVtW3RoaXMuc2VhcmNoRmllbGRdPy50b0xvd2VyQ2FzZSgpID09PSB0ZXJtKVxyXG4gICAgKTtcclxuICAgIFxyXG4gIH1cclxuXHJcbiAgdGhpcy5maWx0ZXJlZFZhbHVlcy5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcclxuICAgIGl0ZW0uaXNTZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRWYWx1ZXMuc29tZShcclxuICAgICAgKHNlbGVjdGVkOiBhbnkpID0+IHNlbGVjdGVkW3RoaXMuaWRGaWVsZF0gPT09IGl0ZW1bdGhpcy5pZEZpZWxkXVxyXG4gICAgKTtcclxuICB9KTtcclxuICB0aGlzLmVtaXRTZWxlY3RlZFZhbHVlcyh0aGlzLmZpbHRlcmVkVmFsdWVzKTtcclxuICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZXMoKTsgICAgXHJcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcbiAgXHJcbiAgXHJcbiBcclxuICBvblNlbGVjdChldmVudDogYW55LCBpdGVtOiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKGl0ZW0pXHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLnNlbGVjdGVkVmFsdWVzKTtcclxuICAgIFxyXG4gICAgY29uc3QgaXNDaGVja2VkID0gZXZlbnQuY3VycmVudFRhcmdldC5jaGVja2VkO1xyXG4gIC8vIGRlYnVnZ2VyXHJcbiAgICBpZiAodGhpcy5tdWx0aSkge1xyXG4gICAgICBpZiAoaXNDaGVja2VkKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkVmFsdWVzLnNvbWUoKGVsZW06IGFueSkgPT4gZWxlbVt0aGlzLmlkRmllbGRdID09PSBpdGVtW3RoaXMuaWRGaWVsZF0pKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzLnB1c2goaXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMgPSB0aGlzLnNlbGVjdGVkVmFsdWVzLmZpbHRlcihcclxuICAgICAgICAgIChlbGVtOiBhbnkpID0+IGVsZW1bdGhpcy5pZEZpZWxkXSAhPT0gaXRlbVt0aGlzLmlkRmllbGRdXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcyA9IFt7IC4uLml0ZW0gfV07XHJcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuc2VsZWN0ZWRWYWx1ZXMpO1xyXG4gICAgICBcclxuICAgICAgdGhpcy5maWx0ZXJlZFZhbHVlcy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICBlbGVtZW50LmlzU2VsZWN0ZWQgPSBlbGVtZW50W3RoaXMuaWRGaWVsZF0gPT09IGl0ZW1bdGhpcy5pZEZpZWxkXTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duID0gZmFsc2U7IFxyXG4gICAgfVxyXG4gICAgdGhpcy5maWx0ZXJlZFZhbHVlcy5mb3JFYWNoKChsaXN0SXRlbTogYW55KSA9PiB7XHJcbiAgICAgIGxpc3RJdGVtLmlzU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkVmFsdWVzLnNvbWUoXHJcbiAgICAgICAgKHNlbGVjdGVkOiBhbnkpID0+IHNlbGVjdGVkW3RoaXMuaWRGaWVsZF0gPT09IGxpc3RJdGVtW3RoaXMuaWRGaWVsZF1cclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gICAgY29uc29sZS5sb2codGhpcy5maWx0ZXJlZFZhbHVlcylcclxuICAgIGlmKHRoaXMuc2VhcmNoVGVybSl7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlYXJjaFRlcm1zID0gdGhpcy5zZWFyY2hUZXJtXHJcbiAgICAgICAgICAgIC5zcGxpdCgnLCcpXHJcbiAgICAgICAgICAgIC5tYXAoKHRlcm06YW55KSA9PiB0ZXJtLnRyaW0oKS50b0xvd2VyQ2FzZSgpKVxyXG4gICAgICAgICAgICAuZmlsdGVyKCh0ZXJtOmFueSkgPT4gdGVybSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5maWx0ZXJlZFZhbHVlcyA9IHRoaXMuaXRlbXMuZmlsdGVyKChsaXN0SXRlbTogYW55KSA9PlxyXG4gICAgICAgICAgICBzZWFyY2hUZXJtcy5zb21lKCh0ZXJtOmFueSkgPT4gbGlzdEl0ZW1bdGhpcy5zZWFyY2hGaWVsZF0/LnRvTG93ZXJDYXNlKCkgPT09IHRlcm0pXHJcbiAgICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgXHJcbmNvbnNvbGUubG9nKHRoaXMuZmlsdGVyZWRWYWx1ZXMpXHJcbiAgXHJcbiAgICAvLyBFbWl0IHNlbGVjdGVkIHZhbHVlcyB3aXRob3V0IGBpc1NlbGVjdGVkYCBwcm9wZXJ0eVxyXG4gICAgY29uc3QgdmFsdWVzVG9FbWl0ID0gdGhpcy5zZWxlY3RlZFZhbHVlcy5tYXAoKHZhbHVlOiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgeyBpc1NlbGVjdGVkLCAuLi5zZWxlY3RlZEl0ZW0gfSA9IHZhbHVlO1xyXG4gICAgICByZXR1cm4gc2VsZWN0ZWRJdGVtO1xyXG4gICAgfSk7XHJcbiAgY29uc29sZS5sb2codmFsdWVzVG9FbWl0KVxyXG4gICAgdGhpcy5lbWl0U2VsZWN0ZWRWYWx1ZXModmFsdWVzVG9FbWl0KTsgLy8gRW1pdCB1cGRhdGVkIHNlbGVjdGlvbnNcclxuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuICBcclxuICBcclxuICBvblNlbGVjdEFsbChldmVudDogYW55KSB7XHJcbiAgICBjb25zdCBzZWxlY3RBbGwgPSBldmVudC5jdXJyZW50VGFyZ2V0LmNoZWNrZWQ7XHJcbiAgXHJcbiAgICBpZiAoc2VsZWN0QWxsKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRWYWx1ZXMuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkVmFsdWVzLnNvbWUoKGVsZW06IGFueSkgPT4gZWxlbVt0aGlzLmlkRmllbGRdID09PSBpdGVtW3RoaXMuaWRGaWVsZF0pKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzLnB1c2goaXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuc2VsZWN0ZWRWYWx1ZXMpXHJcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuZmlsdGVyZWRWYWx1ZXMpO1xyXG4gICAgICBcclxuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcyA9IHRoaXMuc2VsZWN0ZWRWYWx1ZXMuZmlsdGVyKFxyXG4gICAgICAgIChpdGVtOiBhbnkpID0+ICF0aGlzLmZpbHRlcmVkVmFsdWVzLnNvbWUoXHJcbiAgICAgICAgICAoZmlsdGVyZWRJdGVtOiBhbnkpID0+IGZpbHRlcmVkSXRlbVt0aGlzLmlkRmllbGRdID09PSBpdGVtW3RoaXMuaWRGaWVsZF1cclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgXHJcbiAgICAvLyBVcGRhdGUgdGhlIGBpc1NlbGVjdGVkYCBzdGF0ZSBpbiB0aGUgZmlsdGVyZWQgbGlzdFxyXG4gICAgdGhpcy5maWx0ZXJlZFZhbHVlcy5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgaXRlbS5pc1NlbGVjdGVkID0gc2VsZWN0QWxsO1xyXG4gICAgfSk7XHJcbiAgXHJcbiAgICAvLyBFbWl0IHNlbGVjdGVkIHZhbHVlcyB3aXRob3V0IGBpc1NlbGVjdGVkYCBwcm9wZXJ0eVxyXG4gICAgY29uc3QgdmFsdWVzVG9FbWl0ID0gdGhpcy5zZWxlY3RlZFZhbHVlcy5tYXAoKHZhbHVlOiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgeyBpc1NlbGVjdGVkLCAuLi5zZWxlY3RlZEl0ZW0gfSA9IHZhbHVlO1xyXG4gICAgICByZXR1cm4gc2VsZWN0ZWRJdGVtO1xyXG4gICAgfSk7XHJcbiAgXHJcbiAgICB0aGlzLmVtaXRTZWxlY3RlZFZhbHVlcyh2YWx1ZXNUb0VtaXQpO1xyXG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG4gIFxyXG4gIFxyXG4gIFxyXG4gXHJcbiBcclxuICBlbWl0U2VsZWN0ZWRWYWx1ZXModmFsdWVzOiBhbnlbXSkge1xyXG4gICAgaWYgKHRoaXMubXVsdGkpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZC5lbWl0KHZhbHVlcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkLmVtaXQodmFsdWVzWzBdKTtcclxuICAgIH1cclxuICB9XHJcbiBcclxuICBjaGVja0lmQWxsU2VsZWN0ZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJlZFZhbHVlcy5ldmVyeSgoaXRlbTogYW55KSA9PiBpdGVtLmlzU2VsZWN0ZWQpO1xyXG4gIH1cclxufSIsIjxkaXYgY2xhc3M9XCJvdXRlci1jb250YWluZXJcIj5cclxuICAgIDxkaXYgW25nQ2xhc3NdPVwiZGlzYWJsZWQgPyAnZGlzYWJsZS1pbnB1dCc6JydcIiAgKGNsaWNrKT1cIm9wZW5Ecm9wZG93bigkZXZlbnQpXCIgIGNsYXNzPVwiZm9ybS1zZWxlY3RcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtdWx0aVwiID5cclxuICAgIDxzcGFuICpuZ0lmPVwic2VsZWN0ZWRWYWx1ZXM/Lmxlbmd0aFwiIGNsYXNzPVwic2VsZWN0LXZhbHVlIG14LTJcIj4gPGltZyBjbGFzcz1cIm1lLTJcIiBhbHQ9XCJQaWNcIiBzcmM9XCIuL2Fzc2V0cy90YW5nby9JbWFnZS91c2Vycy10ZWFtcy5zdmdcIj57e3NlbGVjdGVkVmFsdWVzPy5bMF0/LltzZWFyY2hGaWVsZF19fTwvc3Bhbj4gXHJcbiAgICA8IS0tIDxzcGFuICpuZ0lmPVwic2VsZWN0ZWRWYWx1ZXM/Lmxlbmd0aCA+IDFcIiBjbGFzcz1cInNlbGVjdC12YWx1ZSBteC0yXCI+PGltZyBjbGFzcz1cIm1lLTJcIiAgYWx0PVwiUGljXCIgc3JjPVwiLi9hc3NldHMvdGFuZ28vSW1hZ2UvdXNlcnMtdGVhbXMuc3ZnXCI+e3tzZWxlY3RlZFZhbHVlcz8uWzFdPy5bc2VhcmNoRmllbGRdfX08L3NwYW4+ICAtLT5cclxuICAgIDxzcGFuIGNsYXNzPVwic2VsZWN0LXZhbHVlIG14LTJcIiAqbmdJZj1cInNlbGVjdGVkVmFsdWVzPy5sZW5ndGggPiAxXCI+K3t7c2VsZWN0ZWRWYWx1ZXM/Lmxlbmd0aCAtMX19PC9zcGFuPiB7e2xhYmVsfX0gICAgXHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbXVsdGlcIiA+XHJcbiAgICAgICAge3tzZWxlY3RlZFZhbHVlcz8uWzBdPy5bc2VhcmNoRmllbGRdfX1cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IFtuZ0NsYXNzXT1cInNob3dEcm9wZG93biA/ICcnIDogJ2Qtbm9uZSdcIiBjbGFzcz1cImlucHV0LWNvbnRhaW5lciBkcm9wZG93blwiID5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDAgaW5wdXQtd3JhcHBlclwiPlxyXG4gICAgICAgIDxpbnB1dCBbKG5nTW9kZWwpXT1cInNlYXJjaFZhbHVlXCIgcGxhY2Vob2xkZXI9XCJTZWFyY2hcIiAgKGlucHV0KT1cIm9uSW5wdXQoJGV2ZW50KVwiIHR5cGU9XCJ0ZXh0XCI+ICBcclxuICAgICAgICA8c3ZnIGNsYXNzPVwic2VhcmNoLWljb25cIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE3XCIgdmlld0JveD1cIjAgMCAxNiAxN1wiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTQgMTQuNUwxMS4xIDExLjZNMTIuNjY2NyA3LjgzMzMzQzEyLjY2NjcgMTAuNzc4OSAxMC4yNzg5IDEzLjE2NjcgNy4zMzMzMyAxMy4xNjY3QzQuMzg3ODEgMTMuMTY2NyAyIDEwLjc3ODkgMiA3LjgzMzMzQzIgNC44ODc4MSA0LjM4NzgxIDIuNSA3LjMzMzMzIDIuNUMxMC4yNzg5IDIuNSAxMi42NjY3IDQuODg3ODEgMTIuNjY2NyA3LjgzMzMzWlwiIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICA8L3N2Zz4gIFxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDx1bD5cclxuICAgICAgICAgICAgPGxpICpuZ0lmPVwibXVsdGkgJiYgZmlsdGVyZWRWYWx1ZXM/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVja1wiIFtmb3JdPVwiaW5zdGFuY2VJZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCAoY2hhbmdlKT1cIm9uU2VsZWN0QWxsKCRldmVudClcIiBbY2hlY2tlZF09XCJjaGVja0lmQWxsU2VsZWN0ZWQoKVwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBtZS0zXCIgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICBbaWRdPVwiaW5zdGFuY2VJZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0IEFsbFxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaWx0ZXJlZFZhbHVlc1wiIFtuZ0NsYXNzXT1cIml0ZW0uaXNTZWxlY3RlZCAmJiAhbXVsdGkgPyAnc2VsZWN0ZWQnIDogJydcIiA+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgW2Zvcl09XCJpdGVtW2lkRmllbGRdICsgaW5zdGFuY2VJZFwiIFtuZ0NsYXNzXT1cIm11bHRpICA/ICcnOiAncHMtMCdcIiBjbGFzcz1cImZvcm0tY2hlY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW25nQ2xhc3NdPVwibXVsdGkgID8gJyc6ICdkLW5vbmUnXCIgKGNoYW5nZSk9XCJvblNlbGVjdCgkZXZlbnQsIGl0ZW0pXCIgWyhuZ01vZGVsKV09XCJpdGVtLmlzU2VsZWN0ZWRcIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgbWUtM1wiIHR5cGU9XCJjaGVja2JveFwiIHZhbHVlPVwiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cIml0ZW1baWRGaWVsZF0gKyBpbnN0YW5jZUlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW1bc2VhcmNoRmllbGRdfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8bGkgKm5nSWY9XCIhZmlsdGVyZWRWYWx1ZXM/Lmxlbmd0aFwiID5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCIgPk5vIGRhdGEgZm91bmQ8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgPC91bD4gIFxyXG4gICAgPC9kaXY+ICBcclxuICAgXHJcbjwvZGl2PiJdfQ==