tango-app-ui-manage-tickets 3.7.0-beta.8 → 3.7.0-beta.81

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 (46) hide show
  1. package/esm2022/lib/components/audit-mapping-list/audit-mapping-list.component.mjs +519 -0
  2. package/esm2022/lib/components/audit-report-popup/audit-report-popup.component.mjs +389 -0
  3. package/esm2022/lib/components/audit-retag/audit-retag.component.mjs +464 -0
  4. package/esm2022/lib/components/custom-select/custom-select.component.mjs +187 -0
  5. package/esm2022/lib/components/filter-options/filter-options.component.mjs +41 -0
  6. package/esm2022/lib/components/footfall-dic/footfall-dic.component.mjs +334 -206
  7. package/esm2022/lib/components/footfall-dicview/footfall-dicview.component.mjs +1014 -0
  8. package/esm2022/lib/components/footfall-popup/footfall-popup.component.mjs +15 -0
  9. package/esm2022/lib/components/reactive-select/reactive-select.component.mjs +3 -3
  10. package/esm2022/lib/components/remove-audit/remove-audit.component.mjs +81 -0
  11. package/esm2022/lib/components/start-audit/start-audit.component.mjs +761 -0
  12. package/esm2022/lib/components/tango-manage-tickets/tango-manage-tickets.component.mjs +7 -3
  13. package/esm2022/lib/components/ticket-filter-panel/ticket-filter-panel.component.mjs +520 -0
  14. package/esm2022/lib/components/ticket-footfall-new/ticket-footfall-new.component.mjs +2558 -0
  15. package/esm2022/lib/components/ticketclosepopup/ticketclosepopup.component.mjs +43 -0
  16. package/esm2022/lib/components/tickets/tickets.component.mjs +62 -8
  17. package/esm2022/lib/components/viewcategory/viewcategory.component.mjs +89 -0
  18. package/esm2022/lib/services/audit.service.mjs +88 -0
  19. package/esm2022/lib/services/ticket.service.mjs +196 -35
  20. package/esm2022/lib/services/timer.service.mjs +84 -0
  21. package/esm2022/lib/tango-manage-tickets-routing.module.mjs +22 -2
  22. package/esm2022/lib/tango-manage-tickets.module.mjs +60 -5
  23. package/fesm2022/tango-app-ui-manage-tickets.mjs +7459 -327
  24. package/fesm2022/tango-app-ui-manage-tickets.mjs.map +1 -1
  25. package/lib/components/audit-mapping-list/audit-mapping-list.component.d.ts +73 -0
  26. package/lib/components/audit-metrics/audit-metrics.component.d.ts +1 -1
  27. package/lib/components/audit-report-popup/audit-report-popup.component.d.ts +52 -0
  28. package/lib/components/audit-retag/audit-retag.component.d.ts +59 -0
  29. package/lib/components/custom-select/custom-select.component.d.ts +35 -0
  30. package/lib/components/filter-options/filter-options.component.d.ts +15 -0
  31. package/lib/components/footfall-dic/footfall-dic.component.d.ts +18 -9
  32. package/lib/components/footfall-dicview/footfall-dicview.component.d.ts +132 -0
  33. package/lib/components/footfall-popup/footfall-popup.component.d.ts +8 -0
  34. package/lib/components/remove-audit/remove-audit.component.d.ts +16 -0
  35. package/lib/components/start-audit/start-audit.component.d.ts +86 -0
  36. package/lib/components/tango-manage-tickets/tango-manage-tickets.component.d.ts +1 -0
  37. package/lib/components/ticket-filter-panel/ticket-filter-panel.component.d.ts +89 -0
  38. package/lib/components/ticket-footfall-new/ticket-footfall-new.component.d.ts +301 -0
  39. package/lib/components/ticketclosepopup/ticketclosepopup.component.d.ts +15 -0
  40. package/lib/components/tickets/tickets.component.d.ts +4 -0
  41. package/lib/components/viewcategory/viewcategory.component.d.ts +16 -0
  42. package/lib/services/audit.service.d.ts +36 -0
  43. package/lib/services/ticket.service.d.ts +46 -8
  44. package/lib/services/timer.service.d.ts +22 -0
  45. package/lib/tango-manage-tickets.module.d.ts +22 -5
  46. package/package.json +1 -1
@@ -0,0 +1,187 @@
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, HostListener, Input, Output } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "../../services/ticket.service";
4
+ import * as i2 from "@angular/common";
5
+ import * as i3 from "@angular/forms";
6
+ // import { ManageUsersService } from '../../services-v2/manage-users.service';
7
+ export class CustomSelectComponent {
8
+ cd;
9
+ authService;
10
+ onClick(event) {
11
+ const target = event.target;
12
+ if (!target.closest('.dropdown')) {
13
+ this.showDropdown = false;
14
+ }
15
+ }
16
+ items;
17
+ searchField;
18
+ multi;
19
+ idField;
20
+ selectedValues = [];
21
+ disabled;
22
+ label;
23
+ selected = new EventEmitter();
24
+ filteredValues = [];
25
+ showDropdown;
26
+ searchValue;
27
+ instanceId;
28
+ constructor(cd, authService) {
29
+ this.cd = cd;
30
+ this.authService = authService;
31
+ }
32
+ ngOnInit() {
33
+ this.instanceId = crypto.randomUUID();
34
+ this.authService.dropDownTrigger.subscribe((e) => {
35
+ if (e !== this.instanceId) {
36
+ this.showDropdown = false;
37
+ this.cd.detectChanges();
38
+ }
39
+ });
40
+ }
41
+ ngOnChanges(changes) {
42
+ if (changes['items'] && this.items?.length) {
43
+ this.initializeItems();
44
+ }
45
+ if (changes['selectedValues'] && Array.isArray(changes['selectedValues']?.currentValue) && changes['selectedValues']?.currentValue?.length > 0 && changes['selectedValues']?.currentValue[0]) {
46
+ this.updateSelectedValues();
47
+ }
48
+ }
49
+ initializeItems() {
50
+ this.filteredValues = this.items.map((item) => ({ ...item }));
51
+ this.updateSelectedValues();
52
+ }
53
+ updateSelectedValues() {
54
+ this.selectedValues?.forEach((selectedItem) => {
55
+ const item = this.filteredValues?.find((filteredItem) => filteredItem?.[this.idField] === selectedItem?.[this.idField]);
56
+ if (item) {
57
+ item.isSelected = true;
58
+ }
59
+ });
60
+ }
61
+ openDropdown(event) {
62
+ this.authService.dropDownTrigger.next(this.instanceId);
63
+ event.stopPropagation();
64
+ this.showDropdown = !this.showDropdown;
65
+ }
66
+ onInput(event) {
67
+ if (!event.target.value) {
68
+ this.filteredValues = [...this.items];
69
+ }
70
+ else {
71
+ const searchTerm = event.target.value.toLowerCase();
72
+ this.filteredValues = this.items.filter((item) => item[this.searchField].toLowerCase().includes(searchTerm));
73
+ }
74
+ this.updateSelectedValues();
75
+ this.cd.detectChanges();
76
+ }
77
+ onSelect(event, item) {
78
+ if (this.multi) {
79
+ if (event.currentTarget.checked) {
80
+ this.selectedValues.push(item);
81
+ }
82
+ else {
83
+ this.selectedValues = this.selectedValues.filter((elem) => elem[this.idField] !== item[this.idField]);
84
+ }
85
+ }
86
+ else {
87
+ this.selectedValues = [{ ...item }];
88
+ this.filteredValues.forEach((element) => {
89
+ if (element[this.idField] !== item[this.idField]) {
90
+ element.isSelected = false;
91
+ }
92
+ });
93
+ this.showDropdown = false;
94
+ }
95
+ const valuesToEmit = this.selectedValues.map((value) => {
96
+ const selectedItem = { ...value };
97
+ delete selectedItem.isSelected;
98
+ return selectedItem;
99
+ });
100
+ this.cd.detectChanges();
101
+ this.emitSelectedValues(valuesToEmit);
102
+ }
103
+ onSelectAll(event) {
104
+ const selectAll = event.currentTarget.checked;
105
+ this.filteredValues.forEach((item) => item.isSelected = selectAll);
106
+ if (selectAll) {
107
+ this.selectedValues = [...this.filteredValues];
108
+ }
109
+ else {
110
+ this.selectedValues = [];
111
+ }
112
+ const valuesToEmit = this.selectedValues.map((value) => {
113
+ const { isSelected, ...selectedItem } = value;
114
+ return selectedItem;
115
+ });
116
+ this.cd.detectChanges();
117
+ this.emitSelectedValues(valuesToEmit);
118
+ }
119
+ emitSelectedValues(values) {
120
+ if (this.multi) {
121
+ this.selected.emit(values);
122
+ }
123
+ else {
124
+ this.selected.emit(values[0]);
125
+ }
126
+ }
127
+ checkIfAllSelected() {
128
+ return this.filteredValues.every((item) => item.isSelected);
129
+ }
130
+ onItemClick(item, event) {
131
+ event.stopPropagation();
132
+ // For multi-select, row click should not do anything special;
133
+ // checkbox + onSelect already handle it
134
+ if (this.multi) {
135
+ return;
136
+ }
137
+ // Mark this item as selected so UI highlights it
138
+ item.isSelected = true;
139
+ // Fake an event with `currentTarget.checked = true`
140
+ const fakeEvent = {
141
+ currentTarget: {
142
+ checked: true
143
+ }
144
+ };
145
+ // Reuse your existing logic
146
+ this.onSelect(fakeEvent, item);
147
+ }
148
+ getInitialsFromEmail(email) {
149
+ if (!email)
150
+ return "";
151
+ // take text before @
152
+ const namePart = email.split("@")[0];
153
+ // split by . or space (e.g. "sandeep.pal" -> ["sandeep", "pal"])
154
+ const parts = namePart.split(/[.\s_-]+/).filter(Boolean);
155
+ if (parts.length >= 2) {
156
+ return (parts[0][0] + parts[1][0]).toUpperCase(); // S + P = SP
157
+ }
158
+ // fallback: first two chars of whole namePart
159
+ return namePart.substring(0, 2).toUpperCase();
160
+ }
161
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CustomSelectComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.TicketService }], target: i0.ɵɵFactoryTarget.Component });
162
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CustomSelectComponent, selector: "team-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 <!-- TRIGGER -->\r\n <div\r\n [ngClass]=\"disabled ? 'disable-input' : ''\"\r\n class=\"select-trigger form-select\"\r\n (click)=\"openDropdown($event)\"\r\n >\r\n <ng-container *ngIf=\"multi; else singleMode\">\r\n <span *ngIf=\"selectedValues?.length\" class=\"select-value mx-2\">\r\n <!-- <img class=\"me-2 trigger-avatar\" alt=\"Pic\" src=\"./assets/tango/Image/users-teams.svg\" /> -->\r\n {{ selectedValues?.[0]?.[searchField] }}\r\n </span>\r\n <span class=\"select-value mx-2\" *ngIf=\"selectedValues?.length > 1\">\r\n +{{ selectedValues?.length - 1 }}\r\n </span>\r\n <span *ngIf=\"!selectedValues?.length\">{{ label || 'Select' }}</span>\r\n </ng-container>\r\n\r\n <ng-template #singleMode>\r\n <span *ngIf=\"selectedValues?.[0]; else placeholderSingle\">\r\n {{ selectedValues?.[0]?.[searchField] || 'Select' }}\r\n </span>\r\n <ng-template #placeholderSingle>\r\n <span >{{ label || 'Select' }}</span>\r\n </ng-template>\r\n </ng-template>\r\n\r\n\r\n </div>\r\n\r\n <!-- DROPDOWN PANEL -->\r\n <div\r\n class=\"input-container dropdown\"\r\n [ngClass]=\"showDropdown ? '' : 'd-none'\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <!-- Search -->\r\n <div class=\"w-100 input-wrapper\">\r\n <input\r\n [(ngModel)]=\"searchValue\"\r\n placeholder=\"Search\"\r\n (input)=\"onInput($event)\"\r\n type=\"text\"\r\n />\r\n <svg\r\n class=\"search-icon\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"16\"\r\n height=\"17\"\r\n viewBox=\"0 0 16 17\"\r\n fill=\"none\"\r\n >\r\n <path\r\n 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\"\r\n stroke=\"#667085\"\r\n stroke-width=\"1.3\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n\r\n <ul>\r\n <!-- Select all (multi mode only) -->\r\n <li *ngIf=\"multi && filteredValues?.length\">\r\n <label class=\"form-check\" [for]=\"instanceId\">\r\n <input\r\n (change)=\"onSelectAll($event)\"\r\n [checked]=\"checkIfAllSelected()\"\r\n class=\"form-check-input me-3\"\r\n type=\"checkbox\"\r\n [id]=\"instanceId\"\r\n />\r\n <span class=\"form-check-label\"> Select All </span>\r\n </label>\r\n </li>\r\n\r\n <!-- LIST ITEMS -->\r\n <li\r\n *ngFor=\"let item of filteredValues\"\r\n [ngClass]=\"item.isSelected && !multi ? 'selected' : ''\"\r\n (click)=\"onItemClick(item, $event)\"\r\n >\r\n <!-- multi \u2192 checkbox + label ; single \u2192 user row (avatar + name + email) -->\r\n <ng-container *ngIf=\"multi; else singleItemTemplate\">\r\n <label\r\n [for]=\"item[idField] + instanceId\"\r\n [ngClass]=\"multi ? '' : 'ps-0'\"\r\n class=\"form-check\"\r\n >\r\n <input\r\n (change)=\"onSelect($event, item)\"\r\n [(ngModel)]=\"item.isSelected\"\r\n class=\"form-check-input me-3\"\r\n type=\"checkbox\"\r\n [id]=\"item[idField] + instanceId\"\r\n />\r\n <span class=\"form-check-label\">\r\n {{ item[searchField] }}\r\n </span>\r\n </label>\r\n </ng-container>\r\n\r\n <ng-template #singleItemTemplate>\r\n <div class=\"user-row\">\r\n <div class=\"avatar avatar-text light-primary p-3\">\r\n {{ getInitialsFromEmail(item.email ||\r\n item.email) }}\r\n </div>\r\n <!-- <img\r\n class=\"user-avatar\"\r\n [src]=\"item.avatarUrl || './assets/tango/Image/Avatar.svg'\"\r\n alt=\"{{ item[searchField] }}\"\r\n /> -->\r\n <div class=\"user-text\">\r\n <div class=\"user-name\">\r\n {{ item[searchField] }}\r\n </div>\r\n <div class=\"user-email\">\r\n {{ item.email }}\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </li>\r\n\r\n <li *ngIf=\"!filteredValues?.length\">\r\n <span class=\"d-flex align-items-center justify-content-center\">\r\n No data found\r\n </span>\r\n </li>\r\n </ul>\r\n </div>\r\n</div>\r\n", 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{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}.user-row{display:flex;align-items:center;padding:8px 14px;cursor:pointer;border-bottom:1px solid #f3f4f6}.user-row:last-child{border-bottom:none}.user-row:hover{background:#f5f7ff}.user-avatar{width:36px;height:36px;border-radius:50%;object-fit:cover;margin-right:10px}.user-text{display:flex;flex-direction:column}.user-name{font-size:14px;font-weight:500;color:#111827}.user-email{font-size:12px;color:#6b7280}.disable-input{pointer-events:none;opacity:.6}.avatar{width:42px;height:40px;border-radius:50%;margin-right:15px;font-size:14px;color:#1d2939;font-weight:600}.light-primary{background:#eaf8ff!important}\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 });
163
+ }
164
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CustomSelectComponent, decorators: [{
165
+ type: Component,
166
+ args: [{ selector: 'team-select', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"outer-container\">\r\n <!-- TRIGGER -->\r\n <div\r\n [ngClass]=\"disabled ? 'disable-input' : ''\"\r\n class=\"select-trigger form-select\"\r\n (click)=\"openDropdown($event)\"\r\n >\r\n <ng-container *ngIf=\"multi; else singleMode\">\r\n <span *ngIf=\"selectedValues?.length\" class=\"select-value mx-2\">\r\n <!-- <img class=\"me-2 trigger-avatar\" alt=\"Pic\" src=\"./assets/tango/Image/users-teams.svg\" /> -->\r\n {{ selectedValues?.[0]?.[searchField] }}\r\n </span>\r\n <span class=\"select-value mx-2\" *ngIf=\"selectedValues?.length > 1\">\r\n +{{ selectedValues?.length - 1 }}\r\n </span>\r\n <span *ngIf=\"!selectedValues?.length\">{{ label || 'Select' }}</span>\r\n </ng-container>\r\n\r\n <ng-template #singleMode>\r\n <span *ngIf=\"selectedValues?.[0]; else placeholderSingle\">\r\n {{ selectedValues?.[0]?.[searchField] || 'Select' }}\r\n </span>\r\n <ng-template #placeholderSingle>\r\n <span >{{ label || 'Select' }}</span>\r\n </ng-template>\r\n </ng-template>\r\n\r\n\r\n </div>\r\n\r\n <!-- DROPDOWN PANEL -->\r\n <div\r\n class=\"input-container dropdown\"\r\n [ngClass]=\"showDropdown ? '' : 'd-none'\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <!-- Search -->\r\n <div class=\"w-100 input-wrapper\">\r\n <input\r\n [(ngModel)]=\"searchValue\"\r\n placeholder=\"Search\"\r\n (input)=\"onInput($event)\"\r\n type=\"text\"\r\n />\r\n <svg\r\n class=\"search-icon\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"16\"\r\n height=\"17\"\r\n viewBox=\"0 0 16 17\"\r\n fill=\"none\"\r\n >\r\n <path\r\n 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\"\r\n stroke=\"#667085\"\r\n stroke-width=\"1.3\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n\r\n <ul>\r\n <!-- Select all (multi mode only) -->\r\n <li *ngIf=\"multi && filteredValues?.length\">\r\n <label class=\"form-check\" [for]=\"instanceId\">\r\n <input\r\n (change)=\"onSelectAll($event)\"\r\n [checked]=\"checkIfAllSelected()\"\r\n class=\"form-check-input me-3\"\r\n type=\"checkbox\"\r\n [id]=\"instanceId\"\r\n />\r\n <span class=\"form-check-label\"> Select All </span>\r\n </label>\r\n </li>\r\n\r\n <!-- LIST ITEMS -->\r\n <li\r\n *ngFor=\"let item of filteredValues\"\r\n [ngClass]=\"item.isSelected && !multi ? 'selected' : ''\"\r\n (click)=\"onItemClick(item, $event)\"\r\n >\r\n <!-- multi \u2192 checkbox + label ; single \u2192 user row (avatar + name + email) -->\r\n <ng-container *ngIf=\"multi; else singleItemTemplate\">\r\n <label\r\n [for]=\"item[idField] + instanceId\"\r\n [ngClass]=\"multi ? '' : 'ps-0'\"\r\n class=\"form-check\"\r\n >\r\n <input\r\n (change)=\"onSelect($event, item)\"\r\n [(ngModel)]=\"item.isSelected\"\r\n class=\"form-check-input me-3\"\r\n type=\"checkbox\"\r\n [id]=\"item[idField] + instanceId\"\r\n />\r\n <span class=\"form-check-label\">\r\n {{ item[searchField] }}\r\n </span>\r\n </label>\r\n </ng-container>\r\n\r\n <ng-template #singleItemTemplate>\r\n <div class=\"user-row\">\r\n <div class=\"avatar avatar-text light-primary p-3\">\r\n {{ getInitialsFromEmail(item.email ||\r\n item.email) }}\r\n </div>\r\n <!-- <img\r\n class=\"user-avatar\"\r\n [src]=\"item.avatarUrl || './assets/tango/Image/Avatar.svg'\"\r\n alt=\"{{ item[searchField] }}\"\r\n /> -->\r\n <div class=\"user-text\">\r\n <div class=\"user-name\">\r\n {{ item[searchField] }}\r\n </div>\r\n <div class=\"user-email\">\r\n {{ item.email }}\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </li>\r\n\r\n <li *ngIf=\"!filteredValues?.length\">\r\n <span class=\"d-flex align-items-center justify-content-center\">\r\n No data found\r\n </span>\r\n </li>\r\n </ul>\r\n </div>\r\n</div>\r\n", 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{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}.user-row{display:flex;align-items:center;padding:8px 14px;cursor:pointer;border-bottom:1px solid #f3f4f6}.user-row:last-child{border-bottom:none}.user-row:hover{background:#f5f7ff}.user-avatar{width:36px;height:36px;border-radius:50%;object-fit:cover;margin-right:10px}.user-text{display:flex;flex-direction:column}.user-name{font-size:14px;font-weight:500;color:#111827}.user-email{font-size:12px;color:#6b7280}.disable-input{pointer-events:none;opacity:.6}.avatar{width:42px;height:40px;border-radius:50%;margin-right:15px;font-size:14px;color:#1d2939;font-weight:600}.light-primary{background:#eaf8ff!important}\n"] }]
167
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.TicketService }], propDecorators: { onClick: [{
168
+ type: HostListener,
169
+ args: ['document:click', ['$event']]
170
+ }], items: [{
171
+ type: Input
172
+ }], searchField: [{
173
+ type: Input
174
+ }], multi: [{
175
+ type: Input
176
+ }], idField: [{
177
+ type: Input
178
+ }], selectedValues: [{
179
+ type: Input
180
+ }], disabled: [{
181
+ type: Input
182
+ }], label: [{
183
+ type: Input
184
+ }], selected: [{
185
+ type: Output
186
+ }] } });
187
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXNlbGVjdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1tYW5hZ2UtdGlja2V0cy9zcmMvbGliL2NvbXBvbmVudHMvY3VzdG9tLXNlbGVjdC9jdXN0b20tc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLW1hbmFnZS10aWNrZXRzL3NyYy9saWIvY29tcG9uZW50cy9jdXN0b20tc2VsZWN0L2N1c3RvbS1zZWxlY3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7Ozs7O0FBRW5LLCtFQUErRTtBQVMvRSxNQUFNLE9BQU8scUJBQXFCO0lBd0JaO0lBQStCO0lBckJuRCxPQUFPLENBQUMsS0FBaUI7UUFDdkIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQXFCLENBQUM7UUFDM0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDaEMsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7U0FDM0I7SUFDSCxDQUFDO0lBRVEsS0FBSyxDQUFLO0lBQ1YsV0FBVyxDQUFRO0lBQ25CLEtBQUssQ0FBUztJQUNkLE9BQU8sQ0FBUTtJQUNmLGNBQWMsR0FBUSxFQUFFLENBQUE7SUFDeEIsUUFBUSxDQUFxQjtJQUM3QixLQUFLLENBQVE7SUFDWixRQUFRLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQTtJQUM1QyxjQUFjLEdBQVEsRUFBRSxDQUFBO0lBQ3hCLFlBQVksQ0FBUztJQUNyQixXQUFXLENBQVE7SUFDbkIsVUFBVSxDQUFNO0lBR2hCLFlBQW9CLEVBQXFCLEVBQVUsV0FBeUI7UUFBeEQs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Qzt3R0EvS1UscUJBQXFCOzRGQUFyQixxQkFBcUIsNlVDWGxDLDJ2SkFzSUE7OzRGRDNIYSxxQkFBcUI7a0JBUGpDLFNBQVM7K0JBRUUsYUFBYSxtQkFHTix1QkFBdUIsQ0FBQyxNQUFNO2tIQUsvQyxPQUFPO3NCQUROLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBUWpDLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDSSxRQUFRO3NCQUFqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUaWNrZXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGlja2V0LnNlcnZpY2UnO1xyXG4vLyBpbXBvcnQgeyBNYW5hZ2VVc2Vyc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy12Mi9tYW5hZ2UtdXNlcnMuc2VydmljZSc7XHJcbiBcclxuQENvbXBvbmVudCh7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcclxuICBzZWxlY3RvcjogJ3RlYW0tc2VsZWN0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY3VzdG9tLXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2N1c3RvbS1zZWxlY3QuY29tcG9uZW50LnNjc3MnLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ3VzdG9tU2VsZWN0Q29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQge1xyXG4gXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxyXG4gIG9uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgIGlmICghdGFyZ2V0LmNsb3Nlc3QoJy5kcm9wZG93bicpKSB7XHJcbiAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG4gXHJcbiAgQElucHV0KCkgaXRlbXM6IGFueVxyXG4gIEBJbnB1dCgpIHNlYXJjaEZpZWxkOiBzdHJpbmdcclxuICBASW5wdXQoKSBtdWx0aTogYm9vbGVhblxyXG4gIEBJbnB1dCgpIGlkRmllbGQ6IHN0cmluZ1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkVmFsdWVzOiBhbnkgPSBbXVxyXG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkXHJcbiAgQElucHV0KCkgbGFiZWw6IHN0cmluZ1xyXG4gIEBPdXRwdXQoKSBzZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXHJcbiAgZmlsdGVyZWRWYWx1ZXM6IGFueSA9IFtdXHJcbiAgc2hvd0Ryb3Bkb3duOiBib29sZWFuXHJcbiAgc2VhcmNoVmFsdWU6IHN0cmluZ1xyXG4gIGluc3RhbmNlSWQ6IGFueTtcclxuIFxyXG4gXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgYXV0aFNlcnZpY2U6VGlja2V0U2VydmljZSkgeyB9XHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmluc3RhbmNlSWQgPSBjcnlwdG8ucmFuZG9tVVVJRCgpO1xyXG4gICAgdGhpcy5hdXRoU2VydmljZS5kcm9wRG93blRyaWdnZXIuc3Vic2NyaWJlKChlKT0+eyAgICAgICAgICAgXHJcbiAgICAgIGlmKGUgIT09IHRoaXMuaW5zdGFuY2VJZCl7ICAgICAgICBcclxuICAgICAgICB0aGlzLnNob3dEcm9wZG93biA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKClcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbiBcclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiBcclxuICAgIGlmIChjaGFuZ2VzWydpdGVtcyddICYmIHRoaXMuaXRlbXM/Lmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmluaXRpYWxpemVJdGVtcygpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ3NlbGVjdGVkVmFsdWVzJ10gJiYgQXJyYXkuaXNBcnJheShjaGFuZ2VzWydzZWxlY3RlZFZhbHVlcyddPy5jdXJyZW50VmFsdWUpICYmIGNoYW5nZXNbJ3NlbGVjdGVkVmFsdWVzJ10/LmN1cnJlbnRWYWx1ZT8ubGVuZ3RoID4gMCAmJiBjaGFuZ2VzWydzZWxlY3RlZFZhbHVlcyddPy5jdXJyZW50VmFsdWVbMF0pIHsgICAgICAgICAgICBcclxuICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuIFxyXG4gIGluaXRpYWxpemVJdGVtcygpIHtcclxuICAgIHRoaXMuZmlsdGVyZWRWYWx1ZXMgPSB0aGlzLml0ZW1zLm1hcCgoaXRlbTogYW55KSA9PiAoeyAuLi5pdGVtIH0pKTtcclxuICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZXMoKVxyXG4gIH1cclxuIFxyXG4gIHVwZGF0ZVNlbGVjdGVkVmFsdWVzKCkgeyAgICBcclxuICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXM/LmZvckVhY2goKHNlbGVjdGVkSXRlbTogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmZpbHRlcmVkVmFsdWVzPy5maW5kKChmaWx0ZXJlZEl0ZW06IGFueSkgPT4gZmlsdGVyZWRJdGVtPy5bdGhpcy5pZEZpZWxkXSA9PT0gc2VsZWN0ZWRJdGVtPy5bdGhpcy5pZEZpZWxkXSk7XHJcbiAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgaXRlbS5pc1NlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgIFxyXG4gIH1cclxuIFxyXG4gIG9wZW5Ecm9wZG93bihldmVudDogYW55KSB7XHJcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLmRyb3BEb3duVHJpZ2dlci5uZXh0KHRoaXMuaW5zdGFuY2VJZClcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy5zaG93RHJvcGRvd24gPSAhdGhpcy5zaG93RHJvcGRvd247XHJcbiAgfVxyXG4gXHJcbiAgb25JbnB1dChldmVudDogYW55KSB7XHJcbiAgICBpZiAoIWV2ZW50LnRhcmdldC52YWx1ZSkge1xyXG4gICAgICB0aGlzLmZpbHRlcmVkVmFsdWVzID0gWy4uLnRoaXMuaXRlbXNdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3Qgc2VhcmNoVGVybSA9IGV2ZW50LnRhcmdldC52YWx1ZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICB0aGlzLmZpbHRlcmVkVmFsdWVzID0gdGhpcy5pdGVtcy5maWx0ZXIoKGl0ZW06IGFueSkgPT5cclxuICAgICAgICBpdGVtW3RoaXMuc2VhcmNoRmllbGRdLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVGVybSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZXMoKTtcclxuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuIFxyXG4gIG9uU2VsZWN0KGV2ZW50OiBhbnksIGl0ZW06IGFueSkgeyAgICBcclxuICAgIGlmICh0aGlzLm11bHRpKSB7XHJcbiAgICAgIGlmIChldmVudC5jdXJyZW50VGFyZ2V0LmNoZWNrZWQpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzLnB1c2goaXRlbSApOyAgICAgICAgXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcyA9IHRoaXMuc2VsZWN0ZWRWYWx1ZXMuZmlsdGVyKChlbGVtOiBhbnkpID0+IGVsZW1bdGhpcy5pZEZpZWxkXSAhPT0gaXRlbVt0aGlzLmlkRmllbGRdKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcyA9IFt7IC4uLml0ZW0gfV07XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRWYWx1ZXMuZm9yRWFjaCgoZWxlbWVudDphbnkpID0+IHtcclxuICAgICAgICBpZihlbGVtZW50W3RoaXMuaWRGaWVsZF0gIT09IGl0ZW1bdGhpcy5pZEZpZWxkXSl7XHJcbiAgICAgICAgICBlbGVtZW50LmlzU2VsZWN0ZWQgPSBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duID0gZmFsc2U7XHJcbiAgICB9XHJcbiBcclxuICAgIGNvbnN0IHZhbHVlc1RvRW1pdCA9IHRoaXMuc2VsZWN0ZWRWYWx1ZXMubWFwKCh2YWx1ZTogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbSA9IHsgLi4udmFsdWUgfTtcclxuICAgICAgZGVsZXRlIHNlbGVjdGVkSXRlbS5pc1NlbGVjdGVkO1xyXG4gICAgICByZXR1cm4gc2VsZWN0ZWRJdGVtO1xyXG4gICAgfSk7XHJcbiBcclxuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgdGhpcy5lbWl0U2VsZWN0ZWRWYWx1ZXModmFsdWVzVG9FbWl0KTtcclxuIFxyXG4gIH1cclxuIFxyXG4gIG9uU2VsZWN0QWxsKGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IHNlbGVjdEFsbCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQuY2hlY2tlZDtcclxuICAgIHRoaXMuZmlsdGVyZWRWYWx1ZXMuZm9yRWFjaCgoaXRlbTogYW55KSA9PiBpdGVtLmlzU2VsZWN0ZWQgPSBzZWxlY3RBbGwpO1xyXG4gXHJcbiAgICBpZiAoc2VsZWN0QWxsKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMgPSBbLi4udGhpcy5maWx0ZXJlZFZhbHVlc107XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzID0gW107XHJcbiAgICB9XHJcbiBcclxuICAgIGNvbnN0IHZhbHVlc1RvRW1pdCA9IHRoaXMuc2VsZWN0ZWRWYWx1ZXMubWFwKCh2YWx1ZTogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHsgaXNTZWxlY3RlZCwgLi4uc2VsZWN0ZWRJdGVtIH0gPSB2YWx1ZTtcclxuICAgICAgcmV0dXJuIHNlbGVjdGVkSXRlbTtcclxuICAgIH0pO1xyXG4gXHJcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgIHRoaXMuZW1pdFNlbGVjdGVkVmFsdWVzKHZhbHVlc1RvRW1pdCk7XHJcbiAgfVxyXG4gXHJcbiBcclxuICBlbWl0U2VsZWN0ZWRWYWx1ZXModmFsdWVzOiBhbnlbXSkge1xyXG4gICAgaWYgKHRoaXMubXVsdGkpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZC5lbWl0KHZhbHVlcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkLmVtaXQodmFsdWVzWzBdKTtcclxuICAgIH1cclxuICB9XHJcbiBcclxuICBjaGVja0lmQWxsU2VsZWN0ZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJlZFZhbHVlcy5ldmVyeSgoaXRlbTogYW55KSA9PiBpdGVtLmlzU2VsZWN0ZWQpO1xyXG4gIH1cclxuICBvbkl0ZW1DbGljayhpdGVtOiBhbnksIGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gIC8vIEZvciBtdWx0aS1zZWxlY3QsIHJvdyBjbGljayBzaG91bGQgbm90IGRvIGFueXRoaW5nIHNwZWNpYWw7XHJcbiAgLy8gY2hlY2tib3ggKyBvblNlbGVjdCBhbHJlYWR5IGhhbmRsZSBpdFxyXG4gIGlmICh0aGlzLm11bHRpKSB7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICAvLyBNYXJrIHRoaXMgaXRlbSBhcyBzZWxlY3RlZCBzbyBVSSBoaWdobGlnaHRzIGl0XHJcbiAgaXRlbS5pc1NlbGVjdGVkID0gdHJ1ZTtcclxuXHJcbiAgLy8gRmFrZSBhbiBldmVudCB3aXRoIGBjdXJyZW50VGFyZ2V0LmNoZWNrZWQgPSB0cnVlYFxyXG4gIGNvbnN0IGZha2VFdmVudDogYW55ID0ge1xyXG4gICAgY3VycmVudFRhcmdldDoge1xyXG4gICAgICBjaGVja2VkOiB0cnVlXHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgLy8gUmV1c2UgeW91ciBleGlzdGluZyBsb2dpY1xyXG4gIHRoaXMub25TZWxlY3QoZmFrZUV2ZW50LCBpdGVtKTtcclxufVxyXG4gIGdldEluaXRpYWxzRnJvbUVtYWlsKGVtYWlsPzogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmICghZW1haWwpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIC8vIHRha2UgdGV4dCBiZWZvcmUgQFxyXG4gICAgY29uc3QgbmFtZVBhcnQgPSBlbWFpbC5zcGxpdChcIkBcIilbMF07XHJcblxyXG4gICAgLy8gc3BsaXQgYnkgLiBvciBzcGFjZSAoZS5nLiBcInNhbmRlZXAucGFsXCIgLT4gW1wic2FuZGVlcFwiLCBcInBhbFwiXSlcclxuICAgIGNvbnN0IHBhcnRzID0gbmFtZVBhcnQuc3BsaXQoL1suXFxzXy1dKy8pLmZpbHRlcihCb29sZWFuKTtcclxuXHJcbiAgICBpZiAocGFydHMubGVuZ3RoID49IDIpIHtcclxuICAgICAgcmV0dXJuIChwYXJ0c1swXVswXSArIHBhcnRzWzFdWzBdKS50b1VwcGVyQ2FzZSgpOyAvLyBTICsgUCA9IFNQXHJcbiAgICB9XHJcblxyXG4gICAgLy8gZmFsbGJhY2s6IGZpcnN0IHR3byBjaGFycyBvZiB3aG9sZSBuYW1lUGFydFxyXG4gICAgcmV0dXJuIG5hbWVQYXJ0LnN1YnN0cmluZygwLCAyKS50b1VwcGVyQ2FzZSgpO1xyXG4gIH1cclxuXHJcbn0iLCI8ZGl2IGNsYXNzPVwib3V0ZXItY29udGFpbmVyXCI+XHJcbiAgPCEtLSBUUklHR0VSIC0tPlxyXG4gIDxkaXZcclxuICAgIFtuZ0NsYXNzXT1cImRpc2FibGVkID8gJ2Rpc2FibGUtaW5wdXQnIDogJydcIlxyXG4gICAgY2xhc3M9XCJzZWxlY3QtdHJpZ2dlciBmb3JtLXNlbGVjdFwiXHJcbiAgICAoY2xpY2spPVwib3BlbkRyb3Bkb3duKCRldmVudClcIlxyXG4gID5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtdWx0aTsgZWxzZSBzaW5nbGVNb2RlXCI+XHJcbiAgICAgIDxzcGFuICpuZ0lmPVwic2VsZWN0ZWRWYWx1ZXM/Lmxlbmd0aFwiIGNsYXNzPVwic2VsZWN0LXZhbHVlIG14LTJcIj5cclxuICAgICAgICA8IS0tIDxpbWcgY2xhc3M9XCJtZS0yIHRyaWdnZXItYXZhdGFyXCIgYWx0PVwiUGljXCIgc3JjPVwiLi9hc3NldHMvdGFuZ28vSW1hZ2UvdXNlcnMtdGVhbXMuc3ZnXCIgLz4gLS0+XHJcbiAgICAgICAge3sgc2VsZWN0ZWRWYWx1ZXM/LlswXT8uW3NlYXJjaEZpZWxkXSB9fVxyXG4gICAgICA8L3NwYW4+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwic2VsZWN0LXZhbHVlIG14LTJcIiAqbmdJZj1cInNlbGVjdGVkVmFsdWVzPy5sZW5ndGggPiAxXCI+XHJcbiAgICAgICAgK3t7IHNlbGVjdGVkVmFsdWVzPy5sZW5ndGggLSAxIH19XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgICAgPHNwYW4gICpuZ0lmPVwiIXNlbGVjdGVkVmFsdWVzPy5sZW5ndGhcIj57eyBsYWJlbCAgfHwgJ1NlbGVjdCcgfX08L3NwYW4+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgI3NpbmdsZU1vZGU+XHJcbiAgICAgIDxzcGFuICpuZ0lmPVwic2VsZWN0ZWRWYWx1ZXM/LlswXTsgZWxzZSBwbGFjZWhvbGRlclNpbmdsZVwiPlxyXG4gICAgICAgIHt7IHNlbGVjdGVkVmFsdWVzPy5bMF0/LltzZWFyY2hGaWVsZF0gfHwgJ1NlbGVjdCcgfX1cclxuICAgICAgPC9zcGFuPlxyXG4gICAgICA8bmctdGVtcGxhdGUgI3BsYWNlaG9sZGVyU2luZ2xlPlxyXG4gICAgICAgIDxzcGFuID57eyBsYWJlbCB8fCAnU2VsZWN0JyB9fTwvc3Bhbj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBEUk9QRE9XTiBQQU5FTCAtLT5cclxuICA8ZGl2XHJcbiAgICBjbGFzcz1cImlucHV0LWNvbnRhaW5lciBkcm9wZG93blwiXHJcbiAgICBbbmdDbGFzc109XCJzaG93RHJvcGRvd24gPyAnJyA6ICdkLW5vbmUnXCJcclxuICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gID5cclxuICAgIDwhLS0gU2VhcmNoIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cInctMTAwIGlucHV0LXdyYXBwZXJcIj5cclxuICAgICAgPGlucHV0XHJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hWYWx1ZVwiXHJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2hcIlxyXG4gICAgICAgIChpbnB1dCk9XCJvbklucHV0KCRldmVudClcIlxyXG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgLz5cclxuICAgICAgPHN2Z1xyXG4gICAgICAgIGNsYXNzPVwic2VhcmNoLWljb25cIlxyXG4gICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgIHdpZHRoPVwiMTZcIlxyXG4gICAgICAgIGhlaWdodD1cIjE3XCJcclxuICAgICAgICB2aWV3Qm94PVwiMCAwIDE2IDE3XCJcclxuICAgICAgICBmaWxsPVwibm9uZVwiXHJcbiAgICAgID5cclxuICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgZD1cIk0xNCAxNC41TDExLjEgMTEuNk0xMi42NjY3IDcuODMzMzNDMTIuNjY2NyAxMC43Nzg5IDEwLjI3ODkgMTMuMTY2NyA3LjMzMzMzIDEzLjE2NjdDNC4zODc4MSAxMy4xNjY3IDIgMTAuNzc4OSAyIDcuODMzMzNDMiA0Ljg4NzgxIDQuMzg3ODEgMi41IDcuMzMzMzMgMi41QzEwLjI3ODkgMi41IDEyLjY2NjcgNC44ODc4MSAxMi42NjY3IDcuODMzMzNaXCJcclxuICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIlxyXG4gICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS4zXCJcclxuICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvc3ZnPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPHVsPlxyXG4gICAgICA8IS0tIFNlbGVjdCBhbGwgKG11bHRpIG1vZGUgb25seSkgLS0+XHJcbiAgICAgIDxsaSAqbmdJZj1cIm11bHRpICYmIGZpbHRlcmVkVmFsdWVzPy5sZW5ndGhcIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrXCIgW2Zvcl09XCJpbnN0YW5jZUlkXCI+XHJcbiAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgKGNoYW5nZSk9XCJvblNlbGVjdEFsbCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgW2NoZWNrZWRdPVwiY2hlY2tJZkFsbFNlbGVjdGVkKClcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgbWUtM1wiXHJcbiAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgIFtpZF09XCJpbnN0YW5jZUlkXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIj4gU2VsZWN0IEFsbCA8L3NwYW4+XHJcbiAgICAgICAgPC9sYWJlbD5cclxuICAgICAgPC9saT5cclxuXHJcbiAgICAgIDwhLS0gTElTVCBJVEVNUyAtLT5cclxuICAgICAgPGxpXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZmlsdGVyZWRWYWx1ZXNcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cIml0ZW0uaXNTZWxlY3RlZCAmJiAhbXVsdGkgPyAnc2VsZWN0ZWQnIDogJydcIlxyXG4gICAgICAgIChjbGljayk9XCJvbkl0ZW1DbGljayhpdGVtLCAkZXZlbnQpXCJcclxuICAgICAgPlxyXG4gICAgICAgIDwhLS0gbXVsdGkg4oaSIGNoZWNrYm94ICsgbGFiZWwgOyBzaW5nbGUg4oaSIHVzZXIgcm93IChhdmF0YXIgKyBuYW1lICsgZW1haWwpIC0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtdWx0aTsgZWxzZSBzaW5nbGVJdGVtVGVtcGxhdGVcIj5cclxuICAgICAgICAgIDxsYWJlbFxyXG4gICAgICAgICAgICBbZm9yXT1cIml0ZW1baWRGaWVsZF0gKyBpbnN0YW5jZUlkXCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwibXVsdGkgPyAnJyA6ICdwcy0wJ1wiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVja1wiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwib25TZWxlY3QoJGV2ZW50LCBpdGVtKVwiXHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJpdGVtLmlzU2VsZWN0ZWRcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBtZS0zXCJcclxuICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgIFtpZF09XCJpdGVtW2lkRmllbGRdICsgaW5zdGFuY2VJZFwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgIHt7IGl0ZW1bc2VhcmNoRmllbGRdIH19XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjc2luZ2xlSXRlbVRlbXBsYXRlPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInVzZXItcm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXIgYXZhdGFyLXRleHQgbGlnaHQtcHJpbWFyeSBwLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGdldEluaXRpYWxzRnJvbUVtYWlsKGl0ZW0uZW1haWwgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZW1haWwpIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIDxpbWdcclxuICAgICAgICAgICAgICBjbGFzcz1cInVzZXItYXZhdGFyXCJcclxuICAgICAgICAgICAgICBbc3JjXT1cIml0ZW0uYXZhdGFyVXJsIHx8ICcuL2Fzc2V0cy90YW5nby9JbWFnZS9BdmF0YXIuc3ZnJ1wiXHJcbiAgICAgICAgICAgICAgYWx0PVwie3sgaXRlbVtzZWFyY2hGaWVsZF0gfX1cIlxyXG4gICAgICAgICAgICAvPiAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVzZXItdGV4dFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLW5hbWVcIj5cclxuICAgICAgICAgICAgICAgIHt7IGl0ZW1bc2VhcmNoRmllbGRdIH19XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVzZXItZW1haWxcIj5cclxuICAgICAgICAgICAgICAgIHt7IGl0ZW0uZW1haWwgfX1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8L2xpPlxyXG5cclxuICAgICAgPGxpICpuZ0lmPVwiIWZpbHRlcmVkVmFsdWVzPy5sZW5ndGhcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgICAgTm8gZGF0YSBmb3VuZFxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9saT5cclxuICAgIDwvdWw+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -0,0 +1,41 @@
1
+ import { Component, EventEmitter, Output } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/forms";
4
+ export class FilterOptionsComponent {
5
+ applyFilters = new EventEmitter();
6
+ closePanel = new EventEmitter();
7
+ // sample model
8
+ status = '';
9
+ condition = '';
10
+ ticketValue = null;
11
+ reviewer = '';
12
+ apply() {
13
+ const filters = {
14
+ status: this.status,
15
+ condition: this.condition,
16
+ ticketValue: this.ticketValue,
17
+ reviewer: this.reviewer
18
+ };
19
+ this.applyFilters.emit(filters); // send to parent
20
+ }
21
+ close() {
22
+ this.closePanel.emit();
23
+ }
24
+ reset() {
25
+ this.status = '';
26
+ this.condition = '';
27
+ this.ticketValue = null;
28
+ this.reviewer = '';
29
+ }
30
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FilterOptionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
31
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FilterOptionsComponent, selector: "lib-filter-options", outputs: { applyFilters: "applyFilters", closePanel: "closePanel" }, ngImport: i0, template: "<div class=\"filter-card\">\r\n <div class=\"filter-header\">\r\n <span>Filter Options</span>\r\n <button class=\"close-btn\" (click)=\"close()\">\u2715</button>\r\n </div>\r\n\r\n <div class=\"field\">\r\n <label>Status</label>\r\n <select [(ngModel)]=\"status\" class=\"select\">\r\n <option value=\"\">Select</option>\r\n <option>Open</option>\r\n <option>Closed</option>\r\n <option>In Progress</option>\r\n </select>\r\n </div>\r\n\r\n <div class=\"field\">\r\n <label>Store accuracy (%) by condition</label>\r\n <div class=\"inline-row\">\r\n <select [(ngModel)]=\"condition\" class=\"select\">\r\n <option value=\"\">Select</option>\r\n <option value=\">\">Greater than</option>\r\n <option value=\"<\">Lesser than</option>\r\n <option value=\">=\">Greater than or equal to</option>\r\n <option value=\"<=\">Lesser than or equal to</option>\r\n </select>\r\n\r\n <input\r\n type=\"number\"\r\n [(ngModel)]=\"ticketValue\"\r\n placeholder=\"1 to 100%\"\r\n class=\"percent-input\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div class=\"field\">\r\n <label>Reviewed by</label>\r\n <select [(ngModel)]=\"reviewer\" class=\"select\">\r\n <option value=\"\">Select</option>\r\n <option>drewlenskart.com</option>\r\n <option>user1lenskart.com</option>\r\n <option>user2lenskart.com</option>\r\n </select>\r\n </div>\r\n\r\n <div class=\"btn-row\">\r\n <button class=\"btn btn-reset\" (click)=\"reset()\">Reset</button>\r\n <button class=\"btn btn-apply\" (click)=\"apply()\">Apply</button>\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";:host{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}body,.page-bg{background:#f3f4f7}.filter-card{width:360px;padding:18px 20px 16px;background:#fff;border-radius:16px;box-shadow:0 8px 20px #0f172a1f;font-size:13px}.filter-header{display:flex;justify-content:space-between;align-items:center;font-weight:600;margin-bottom:16px}.close-btn{border:none;background:transparent;cursor:pointer;font-size:14px}.field{margin-bottom:14px}.field label{display:block;font-size:12px;margin-bottom:4px;color:#4b5563}.inline-row{display:flex;gap:8px;align-items:center}.select{width:100%;padding:8px 10px;border-radius:10px;border:1px solid #e5e7eb;background:#f9fafb;font-size:13px;outline:none;appearance:none;background-image:linear-gradient(45deg,transparent 50%,#9ca3af 50%),linear-gradient(135deg,#9ca3af 50%,transparent 50%);background-position:calc(100% - 18px) 12px,calc(100% - 13px) 12px;background-size:5px 5px,5px 5px;background-repeat:no-repeat}.percent-input{width:110px;padding:8px 10px;border-radius:10px;border:1px solid #e5e7eb;background:#f9fafb;font-size:13px}.btn-row{display:flex;gap:10px;margin-top:10px}.btn{flex:1;border-radius:10px;padding:8px 0;font-size:13px;border:1px solid transparent;cursor:pointer}.btn-reset{background:#f9fafb;border-color:#e5e7eb}.btn-apply{background:#60b8ff;color:#fff}\n"], dependencies: [{ kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { 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.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { 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"] }] });
32
+ }
33
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FilterOptionsComponent, decorators: [{
34
+ type: Component,
35
+ args: [{ selector: 'lib-filter-options', template: "<div class=\"filter-card\">\r\n <div class=\"filter-header\">\r\n <span>Filter Options</span>\r\n <button class=\"close-btn\" (click)=\"close()\">\u2715</button>\r\n </div>\r\n\r\n <div class=\"field\">\r\n <label>Status</label>\r\n <select [(ngModel)]=\"status\" class=\"select\">\r\n <option value=\"\">Select</option>\r\n <option>Open</option>\r\n <option>Closed</option>\r\n <option>In Progress</option>\r\n </select>\r\n </div>\r\n\r\n <div class=\"field\">\r\n <label>Store accuracy (%) by condition</label>\r\n <div class=\"inline-row\">\r\n <select [(ngModel)]=\"condition\" class=\"select\">\r\n <option value=\"\">Select</option>\r\n <option value=\">\">Greater than</option>\r\n <option value=\"<\">Lesser than</option>\r\n <option value=\">=\">Greater than or equal to</option>\r\n <option value=\"<=\">Lesser than or equal to</option>\r\n </select>\r\n\r\n <input\r\n type=\"number\"\r\n [(ngModel)]=\"ticketValue\"\r\n placeholder=\"1 to 100%\"\r\n class=\"percent-input\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div class=\"field\">\r\n <label>Reviewed by</label>\r\n <select [(ngModel)]=\"reviewer\" class=\"select\">\r\n <option value=\"\">Select</option>\r\n <option>drewlenskart.com</option>\r\n <option>user1lenskart.com</option>\r\n <option>user2lenskart.com</option>\r\n </select>\r\n </div>\r\n\r\n <div class=\"btn-row\">\r\n <button class=\"btn btn-reset\" (click)=\"reset()\">Reset</button>\r\n <button class=\"btn btn-apply\" (click)=\"apply()\">Apply</button>\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";:host{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}body,.page-bg{background:#f3f4f7}.filter-card{width:360px;padding:18px 20px 16px;background:#fff;border-radius:16px;box-shadow:0 8px 20px #0f172a1f;font-size:13px}.filter-header{display:flex;justify-content:space-between;align-items:center;font-weight:600;margin-bottom:16px}.close-btn{border:none;background:transparent;cursor:pointer;font-size:14px}.field{margin-bottom:14px}.field label{display:block;font-size:12px;margin-bottom:4px;color:#4b5563}.inline-row{display:flex;gap:8px;align-items:center}.select{width:100%;padding:8px 10px;border-radius:10px;border:1px solid #e5e7eb;background:#f9fafb;font-size:13px;outline:none;appearance:none;background-image:linear-gradient(45deg,transparent 50%,#9ca3af 50%),linear-gradient(135deg,#9ca3af 50%,transparent 50%);background-position:calc(100% - 18px) 12px,calc(100% - 13px) 12px;background-size:5px 5px,5px 5px;background-repeat:no-repeat}.percent-input{width:110px;padding:8px 10px;border-radius:10px;border:1px solid #e5e7eb;background:#f9fafb;font-size:13px}.btn-row{display:flex;gap:10px;margin-top:10px}.btn{flex:1;border-radius:10px;padding:8px 0;font-size:13px;border:1px solid transparent;cursor:pointer}.btn-reset{background:#f9fafb;border-color:#e5e7eb}.btn-apply{background:#60b8ff;color:#fff}\n"] }]
36
+ }], propDecorators: { applyFilters: [{
37
+ type: Output
38
+ }], closePanel: [{
39
+ type: Output
40
+ }] } });
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLW9wdGlvbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tbWFuYWdlLXRpY2tldHMvc3JjL2xpYi9jb21wb25lbnRzL2ZpbHRlci1vcHRpb25zL2ZpbHRlci1vcHRpb25zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLW1hbmFnZS10aWNrZXRzL3NyYy9saWIvY29tcG9uZW50cy9maWx0ZXItb3B0aW9ucy9maWx0ZXItb3B0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQU9oRSxNQUFNLE9BQU8sc0JBQXNCO0lBQ3hCLFlBQVksR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQ3RDLFVBQVUsR0FBSyxJQUFJLFlBQVksRUFBUSxDQUFDO0lBRWxELGVBQWU7SUFDZixNQUFNLEdBQVcsRUFBRSxDQUFDO0lBQ3BCLFNBQVMsR0FBVyxFQUFFLENBQUM7SUFDdkIsV0FBVyxHQUFrQixJQUFJLENBQUM7SUFDbEMsUUFBUSxHQUFXLEVBQUUsQ0FBQztJQUV0QixLQUFLO1FBQ0gsTUFBTSxPQUFPLEdBQUc7WUFDZCxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3pCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7U0FDeEIsQ0FBQztRQUNGLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUcsaUJBQWlCO0lBQ3RELENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7d0dBN0JVLHNCQUFzQjs0RkFBdEIsc0JBQXNCLCtIQ1BuQyxvcERBbURBOzs0RkQ1Q2Esc0JBQXNCO2tCQUxsQyxTQUFTOytCQUNFLG9CQUFvQjs4QkFLckIsWUFBWTtzQkFBckIsTUFBTTtnQkFDSSxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItZmlsdGVyLW9wdGlvbnMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9maWx0ZXItb3B0aW9ucy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2ZpbHRlci1vcHRpb25zLmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRmlsdGVyT3B0aW9uc0NvbXBvbmVudCB7XHJcbiBAT3V0cHV0KCkgYXBwbHlGaWx0ZXJzID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGNsb3NlUGFuZWwgICA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgLy8gc2FtcGxlIG1vZGVsXHJcbiAgc3RhdHVzOiBzdHJpbmcgPSAnJztcclxuICBjb25kaXRpb246IHN0cmluZyA9ICcnO1xyXG4gIHRpY2tldFZhbHVlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICByZXZpZXdlcjogc3RyaW5nID0gJyc7XHJcblxyXG4gIGFwcGx5KCkge1xyXG4gICAgY29uc3QgZmlsdGVycyA9IHtcclxuICAgICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcclxuICAgICAgY29uZGl0aW9uOiB0aGlzLmNvbmRpdGlvbixcclxuICAgICAgdGlja2V0VmFsdWU6IHRoaXMudGlja2V0VmFsdWUsXHJcbiAgICAgIHJldmlld2VyOiB0aGlzLnJldmlld2VyXHJcbiAgICB9O1xyXG4gICAgdGhpcy5hcHBseUZpbHRlcnMuZW1pdChmaWx0ZXJzKTsgICAvLyBzZW5kIHRvIHBhcmVudFxyXG4gIH1cclxuXHJcbiAgY2xvc2UoKSB7XHJcbiAgICB0aGlzLmNsb3NlUGFuZWwuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICB0aGlzLnN0YXR1cyA9ICcnO1xyXG4gICAgdGhpcy5jb25kaXRpb24gPSAnJztcclxuICAgIHRoaXMudGlja2V0VmFsdWUgPSBudWxsO1xyXG4gICAgdGhpcy5yZXZpZXdlciA9ICcnO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZmlsdGVyLWNhcmRcIj5cclxuICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWhlYWRlclwiPlxyXG4gICAgPHNwYW4+RmlsdGVyIE9wdGlvbnM8L3NwYW4+XHJcbiAgICA8YnV0dG9uIGNsYXNzPVwiY2xvc2UtYnRuXCIgKGNsaWNrKT1cImNsb3NlKClcIj7inJU8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImZpZWxkXCI+XHJcbiAgICA8bGFiZWw+U3RhdHVzPC9sYWJlbD5cclxuICAgIDxzZWxlY3QgWyhuZ01vZGVsKV09XCJzdGF0dXNcIiBjbGFzcz1cInNlbGVjdFwiPlxyXG4gICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+U2VsZWN0PC9vcHRpb24+XHJcbiAgICAgIDxvcHRpb24+T3Blbjwvb3B0aW9uPlxyXG4gICAgICA8b3B0aW9uPkNsb3NlZDwvb3B0aW9uPlxyXG4gICAgICA8b3B0aW9uPkluIFByb2dyZXNzPC9vcHRpb24+XHJcbiAgICA8L3NlbGVjdD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImZpZWxkXCI+XHJcbiAgICA8bGFiZWw+U3RvcmUgYWNjdXJhY3kgKCUpIGJ5IGNvbmRpdGlvbjwvbGFiZWw+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaW5saW5lLXJvd1wiPlxyXG4gICAgICA8c2VsZWN0IFsobmdNb2RlbCldPVwiY29uZGl0aW9uXCIgY2xhc3M9XCJzZWxlY3RcIj5cclxuICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+U2VsZWN0PC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIj5cIj5HcmVhdGVyIHRoYW48L29wdGlvbj5cclxuICAgICAgICA8b3B0aW9uIHZhbHVlPVwiPFwiPkxlc3NlciB0aGFuPC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIj49XCI+R3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvPC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjw9XCI+TGVzc2VyIHRoYW4gb3IgZXF1YWwgdG88L29wdGlvbj5cclxuICAgICAgPC9zZWxlY3Q+XHJcblxyXG4gICAgICA8aW5wdXRcclxuICAgICAgICB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICBbKG5nTW9kZWwpXT1cInRpY2tldFZhbHVlXCJcclxuICAgICAgICBwbGFjZWhvbGRlcj1cIjEgdG8gMTAwJVwiXHJcbiAgICAgICAgY2xhc3M9XCJwZXJjZW50LWlucHV0XCJcclxuICAgICAgLz5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiZmllbGRcIj5cclxuICAgIDxsYWJlbD5SZXZpZXdlZCBieTwvbGFiZWw+XHJcbiAgICA8c2VsZWN0IFsobmdNb2RlbCldPVwicmV2aWV3ZXJcIiBjbGFzcz1cInNlbGVjdFwiPlxyXG4gICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+U2VsZWN0PC9vcHRpb24+XHJcbiAgICAgIDxvcHRpb24+ZHJld2xlbnNrYXJ0LmNvbTwvb3B0aW9uPlxyXG4gICAgICA8b3B0aW9uPnVzZXIxbGVuc2thcnQuY29tPC9vcHRpb24+XHJcbiAgICAgIDxvcHRpb24+dXNlcjJsZW5za2FydC5jb208L29wdGlvbj5cclxuICAgIDwvc2VsZWN0PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiYnRuLXJvd1wiPlxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcmVzZXRcIiAoY2xpY2spPVwicmVzZXQoKVwiPlJlc2V0PC9idXR0b24+XHJcbiAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1hcHBseVwiIChjbGljayk9XCJhcHBseSgpXCI+QXBwbHk8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==