@alaarab/ogrid-angular-material 2.5.9 → 2.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,487 @@
1
+ import { Component, ChangeDetectionStrategy, ViewChild } from '@angular/core';
2
+ import { BaseColumnHeaderFilterComponent } from '@alaarab/ogrid-angular';
3
+ import * as i0 from "@angular/core";
4
+ const _c0 = ["headerEl"];
5
+ const _c1 = () => [];
6
+ const _forTrack0 = ($index, $item) => $item.id || $item.email || $item.displayName;
7
+ function ColumnHeaderFilterComponent_Conditional_6_Conditional_2_Template(rf, ctx) { if (rf & 1) {
8
+ i0.ɵɵdomElement(0, "span", 9);
9
+ } }
10
+ function ColumnHeaderFilterComponent_Conditional_6_Template(rf, ctx) { if (rf & 1) {
11
+ const _r1 = i0.ɵɵgetCurrentView();
12
+ i0.ɵɵdomElementStart(0, "button", 7);
13
+ i0.ɵɵdomListener("click", function ColumnHeaderFilterComponent_Conditional_6_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleFilter($event)); });
14
+ i0.ɵɵdomElement(1, "span", 8);
15
+ i0.ɵɵconditionalCreate(2, ColumnHeaderFilterComponent_Conditional_6_Conditional_2_Template, 1, 0, "span", 9);
16
+ i0.ɵɵdomElementEnd();
17
+ } if (rf & 2) {
18
+ const ctx_r1 = i0.ɵɵnextContext();
19
+ i0.ɵɵclassProp("ogrid-header-filter__filter-btn--active", ctx_r1.hasActiveFilter() || ctx_r1.isFilterOpen());
20
+ i0.ɵɵdomProperty("title", "Filter " + ctx_r1.columnName);
21
+ i0.ɵɵattribute("aria-label", "Filter " + ctx_r1.columnName)("aria-expanded", ctx_r1.isFilterOpen());
22
+ i0.ɵɵadvance(2);
23
+ i0.ɵɵconditional(ctx_r1.hasActiveFilter() ? 2 : -1);
24
+ } }
25
+ function ColumnHeaderFilterComponent_Conditional_7_Case_3_Template(rf, ctx) { if (rf & 1) {
26
+ const _r4 = i0.ɵɵgetCurrentView();
27
+ i0.ɵɵdomElementStart(0, "div", 12)(1, "div", 16)(2, "input", 17);
28
+ i0.ɵɵdomListener("input", function ColumnHeaderFilterComponent_Conditional_7_Case_3_Template_input_input_2_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.tempTextValue.set(ctx_r1.asInputValue($event))); })("keydown", function ColumnHeaderFilterComponent_Conditional_7_Case_3_Template_input_keydown_2_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onTextKeydown($event)); });
29
+ i0.ɵɵdomElementEnd()();
30
+ i0.ɵɵdomElementStart(3, "div", 18)(4, "button", 19);
31
+ i0.ɵɵdomListener("click", function ColumnHeaderFilterComponent_Conditional_7_Case_3_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.handleTextClear()); });
32
+ i0.ɵɵtext(5, "Clear");
33
+ i0.ɵɵdomElementEnd();
34
+ i0.ɵɵdomElementStart(6, "button", 20);
35
+ i0.ɵɵdomListener("click", function ColumnHeaderFilterComponent_Conditional_7_Case_3_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.handleTextApply()); });
36
+ i0.ɵɵtext(7, "Apply");
37
+ i0.ɵɵdomElementEnd()()();
38
+ } if (rf & 2) {
39
+ const ctx_r1 = i0.ɵɵnextContext(2);
40
+ i0.ɵɵadvance(2);
41
+ i0.ɵɵdomProperty("value", ctx_r1.tempTextValue());
42
+ i0.ɵɵadvance(2);
43
+ i0.ɵɵdomProperty("disabled", !ctx_r1.tempTextValue());
44
+ } }
45
+ function ColumnHeaderFilterComponent_Conditional_7_Case_4_Conditional_11_Template(rf, ctx) { if (rf & 1) {
46
+ i0.ɵɵdomElementStart(0, "div", 27);
47
+ i0.ɵɵtext(1, "Loading...");
48
+ i0.ɵɵdomElementEnd();
49
+ } }
50
+ function ColumnHeaderFilterComponent_Conditional_7_Case_4_Conditional_12_Template(rf, ctx) { if (rf & 1) {
51
+ i0.ɵɵdomElementStart(0, "div", 28);
52
+ i0.ɵɵtext(1, "No options found");
53
+ i0.ɵɵdomElementEnd();
54
+ } }
55
+ function ColumnHeaderFilterComponent_Conditional_7_Case_4_Conditional_13_For_1_Template(rf, ctx) { if (rf & 1) {
56
+ const _r6 = i0.ɵɵgetCurrentView();
57
+ i0.ɵɵdomElementStart(0, "label", 30)(1, "input", 31);
58
+ i0.ɵɵdomListener("change", function ColumnHeaderFilterComponent_Conditional_7_Case_4_Conditional_13_For_1_Template_input_change_1_listener($event) { const option_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.handleCheckboxChange(option_r7, $event)); });
59
+ i0.ɵɵdomElementEnd();
60
+ i0.ɵɵdomElementStart(2, "span");
61
+ i0.ɵɵtext(3);
62
+ i0.ɵɵdomElementEnd()();
63
+ } if (rf & 2) {
64
+ const option_r7 = ctx.$implicit;
65
+ const ctx_r1 = i0.ɵɵnextContext(4);
66
+ i0.ɵɵadvance();
67
+ i0.ɵɵdomProperty("checked", ctx_r1.tempSelected().has(option_r7));
68
+ i0.ɵɵadvance(2);
69
+ i0.ɵɵtextInterpolate(option_r7);
70
+ } }
71
+ function ColumnHeaderFilterComponent_Conditional_7_Case_4_Conditional_13_Template(rf, ctx) { if (rf & 1) {
72
+ i0.ɵɵrepeaterCreate(0, ColumnHeaderFilterComponent_Conditional_7_Case_4_Conditional_13_For_1_Template, 4, 2, "label", 30, i0.ɵɵrepeaterTrackByIdentity);
73
+ } if (rf & 2) {
74
+ const ctx_r1 = i0.ɵɵnextContext(3);
75
+ i0.ɵɵrepeater(ctx_r1.filteredOptions());
76
+ } }
77
+ function ColumnHeaderFilterComponent_Conditional_7_Case_4_Template(rf, ctx) { if (rf & 1) {
78
+ const _r5 = i0.ɵɵgetCurrentView();
79
+ i0.ɵɵdomElementStart(0, "div", 13)(1, "div", 21)(2, "input", 22);
80
+ i0.ɵɵdomListener("input", function ColumnHeaderFilterComponent_Conditional_7_Case_4_Template_input_input_2_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.searchText.set(ctx_r1.asInputValue($event))); })("keydown", function ColumnHeaderFilterComponent_Conditional_7_Case_4_Template_input_keydown_2_listener($event) { i0.ɵɵrestoreView(_r5); return i0.ɵɵresetView($event.stopPropagation()); });
81
+ i0.ɵɵdomElementEnd();
82
+ i0.ɵɵdomElementStart(3, "div", 23);
83
+ i0.ɵɵtext(4);
84
+ i0.ɵɵdomElementEnd()();
85
+ i0.ɵɵdomElementStart(5, "div", 24)(6, "button", 25);
86
+ i0.ɵɵdomListener("click", function ColumnHeaderFilterComponent_Conditional_7_Case_4_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.handleSelectAllFiltered()); });
87
+ i0.ɵɵtext(7);
88
+ i0.ɵɵdomElementEnd();
89
+ i0.ɵɵdomElementStart(8, "button", 25);
90
+ i0.ɵɵdomListener("click", function ColumnHeaderFilterComponent_Conditional_7_Case_4_Template_button_click_8_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.handleClearSelection()); });
91
+ i0.ɵɵtext(9, "Clear");
92
+ i0.ɵɵdomElementEnd()();
93
+ i0.ɵɵdomElementStart(10, "div", 26);
94
+ i0.ɵɵconditionalCreate(11, ColumnHeaderFilterComponent_Conditional_7_Case_4_Conditional_11_Template, 2, 0, "div", 27)(12, ColumnHeaderFilterComponent_Conditional_7_Case_4_Conditional_12_Template, 2, 0, "div", 28)(13, ColumnHeaderFilterComponent_Conditional_7_Case_4_Conditional_13_Template, 2, 0);
95
+ i0.ɵɵdomElementEnd();
96
+ i0.ɵɵdomElementStart(14, "div", 29)(15, "button", 25);
97
+ i0.ɵɵdomListener("click", function ColumnHeaderFilterComponent_Conditional_7_Case_4_Template_button_click_15_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.handleClearSelection()); });
98
+ i0.ɵɵtext(16, "Clear");
99
+ i0.ɵɵdomElementEnd();
100
+ i0.ɵɵdomElementStart(17, "button", 20);
101
+ i0.ɵɵdomListener("click", function ColumnHeaderFilterComponent_Conditional_7_Case_4_Template_button_click_17_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.handleApplyMultiSelect()); });
102
+ i0.ɵɵtext(18, "Apply");
103
+ i0.ɵɵdomElementEnd()()();
104
+ } if (rf & 2) {
105
+ const ctx_r1 = i0.ɵɵnextContext(2);
106
+ i0.ɵɵadvance(2);
107
+ i0.ɵɵdomProperty("value", ctx_r1.searchText());
108
+ i0.ɵɵadvance(2);
109
+ i0.ɵɵtextInterpolate2(" ", ctx_r1.filteredOptions().length, " of ", (ctx_r1.options ?? i0.ɵɵpureFunction0(5, _c1)).length, " options ");
110
+ i0.ɵɵadvance(3);
111
+ i0.ɵɵtextInterpolate1(" Select All (", ctx_r1.filteredOptions().length, ") ");
112
+ i0.ɵɵadvance(4);
113
+ i0.ɵɵconditional(ctx_r1.isLoadingOptions ? 11 : ctx_r1.filteredOptions().length === 0 ? 12 : 13);
114
+ } }
115
+ function ColumnHeaderFilterComponent_Conditional_7_Case_5_Conditional_1_Template(rf, ctx) { if (rf & 1) {
116
+ const _r9 = i0.ɵɵgetCurrentView();
117
+ i0.ɵɵdomElementStart(0, "div", 32)(1, "div", 35);
118
+ i0.ɵɵtext(2, "Currently filtered by:");
119
+ i0.ɵɵdomElementEnd();
120
+ i0.ɵɵdomElementStart(3, "div", 36)(4, "div", 37);
121
+ i0.ɵɵtext(5);
122
+ i0.ɵɵdomElementEnd();
123
+ i0.ɵɵdomElementStart(6, "div", 38)(7, "div");
124
+ i0.ɵɵtext(8);
125
+ i0.ɵɵdomElementEnd();
126
+ i0.ɵɵdomElementStart(9, "div", 39);
127
+ i0.ɵɵtext(10);
128
+ i0.ɵɵdomElementEnd()();
129
+ i0.ɵɵdomElementStart(11, "button", 40);
130
+ i0.ɵɵdomListener("click", function ColumnHeaderFilterComponent_Conditional_7_Case_5_Conditional_1_Template_button_click_11_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.handleClearUser()); });
131
+ i0.ɵɵtext(12, "\u00D7");
132
+ i0.ɵɵdomElementEnd()()();
133
+ } if (rf & 2) {
134
+ const ctx_r1 = i0.ɵɵnextContext(3);
135
+ i0.ɵɵadvance(5);
136
+ i0.ɵɵtextInterpolate((ctx_r1.selectedUser.displayName == null ? null : ctx_r1.selectedUser.displayName[0]) ?? "?");
137
+ i0.ɵɵadvance(3);
138
+ i0.ɵɵtextInterpolate(ctx_r1.selectedUser.displayName);
139
+ i0.ɵɵadvance(2);
140
+ i0.ɵɵtextInterpolate(ctx_r1.selectedUser.email);
141
+ } }
142
+ function ColumnHeaderFilterComponent_Conditional_7_Case_5_Conditional_5_Template(rf, ctx) { if (rf & 1) {
143
+ i0.ɵɵdomElementStart(0, "div", 27);
144
+ i0.ɵɵtext(1, "Loading...");
145
+ i0.ɵɵdomElementEnd();
146
+ } }
147
+ function ColumnHeaderFilterComponent_Conditional_7_Case_5_Conditional_6_Template(rf, ctx) { if (rf & 1) {
148
+ i0.ɵɵdomElementStart(0, "div", 28);
149
+ i0.ɵɵtext(1, "No results found");
150
+ i0.ɵɵdomElementEnd();
151
+ } }
152
+ function ColumnHeaderFilterComponent_Conditional_7_Case_5_Conditional_7_For_1_Template(rf, ctx) { if (rf & 1) {
153
+ const _r10 = i0.ɵɵgetCurrentView();
154
+ i0.ɵɵdomElementStart(0, "div", 42);
155
+ i0.ɵɵdomListener("click", function ColumnHeaderFilterComponent_Conditional_7_Case_5_Conditional_7_For_1_Template_div_click_0_listener() { const user_r11 = i0.ɵɵrestoreView(_r10).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.handleUserSelect(user_r11)); });
156
+ i0.ɵɵdomElementStart(1, "div", 37);
157
+ i0.ɵɵtext(2);
158
+ i0.ɵɵdomElementEnd();
159
+ i0.ɵɵdomElementStart(3, "div", 38)(4, "div");
160
+ i0.ɵɵtext(5);
161
+ i0.ɵɵdomElementEnd();
162
+ i0.ɵɵdomElementStart(6, "div", 39);
163
+ i0.ɵɵtext(7);
164
+ i0.ɵɵdomElementEnd()()();
165
+ } if (rf & 2) {
166
+ const user_r11 = ctx.$implicit;
167
+ i0.ɵɵadvance(2);
168
+ i0.ɵɵtextInterpolate((user_r11.displayName == null ? null : user_r11.displayName[0]) ?? "?");
169
+ i0.ɵɵadvance(3);
170
+ i0.ɵɵtextInterpolate(user_r11.displayName);
171
+ i0.ɵɵadvance(2);
172
+ i0.ɵɵtextInterpolate(user_r11.email);
173
+ } }
174
+ function ColumnHeaderFilterComponent_Conditional_7_Case_5_Conditional_7_Template(rf, ctx) { if (rf & 1) {
175
+ i0.ɵɵrepeaterCreate(0, ColumnHeaderFilterComponent_Conditional_7_Case_5_Conditional_7_For_1_Template, 8, 3, "div", 41, _forTrack0);
176
+ } if (rf & 2) {
177
+ const ctx_r1 = i0.ɵɵnextContext(3);
178
+ i0.ɵɵrepeater(ctx_r1.peopleSuggestions());
179
+ } }
180
+ function ColumnHeaderFilterComponent_Conditional_7_Case_5_Conditional_8_Template(rf, ctx) { if (rf & 1) {
181
+ i0.ɵɵdomElementStart(0, "div", 28);
182
+ i0.ɵɵtext(1, "Type to search...");
183
+ i0.ɵɵdomElementEnd();
184
+ } }
185
+ function ColumnHeaderFilterComponent_Conditional_7_Case_5_Conditional_9_Template(rf, ctx) { if (rf & 1) {
186
+ const _r12 = i0.ɵɵgetCurrentView();
187
+ i0.ɵɵdomElementStart(0, "div", 34)(1, "button", 43);
188
+ i0.ɵɵdomListener("click", function ColumnHeaderFilterComponent_Conditional_7_Case_5_Conditional_9_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.handleClearUser()); });
189
+ i0.ɵɵtext(2, "Clear Filter");
190
+ i0.ɵɵdomElementEnd()();
191
+ } }
192
+ function ColumnHeaderFilterComponent_Conditional_7_Case_5_Template(rf, ctx) { if (rf & 1) {
193
+ const _r8 = i0.ɵɵgetCurrentView();
194
+ i0.ɵɵdomElementStart(0, "div", 14);
195
+ i0.ɵɵconditionalCreate(1, ColumnHeaderFilterComponent_Conditional_7_Case_5_Conditional_1_Template, 13, 3, "div", 32);
196
+ i0.ɵɵdomElementStart(2, "div", 21)(3, "input", 33);
197
+ i0.ɵɵdomListener("input", function ColumnHeaderFilterComponent_Conditional_7_Case_5_Template_input_input_3_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onPeopleSearchInput($event)); })("keydown", function ColumnHeaderFilterComponent_Conditional_7_Case_5_Template_input_keydown_3_listener($event) { i0.ɵɵrestoreView(_r8); return i0.ɵɵresetView($event.stopPropagation()); });
198
+ i0.ɵɵdomElementEnd()();
199
+ i0.ɵɵdomElementStart(4, "div", 26);
200
+ i0.ɵɵconditionalCreate(5, ColumnHeaderFilterComponent_Conditional_7_Case_5_Conditional_5_Template, 2, 0, "div", 27)(6, ColumnHeaderFilterComponent_Conditional_7_Case_5_Conditional_6_Template, 2, 0, "div", 28)(7, ColumnHeaderFilterComponent_Conditional_7_Case_5_Conditional_7_Template, 2, 0)(8, ColumnHeaderFilterComponent_Conditional_7_Case_5_Conditional_8_Template, 2, 0, "div", 28);
201
+ i0.ɵɵdomElementEnd();
202
+ i0.ɵɵconditionalCreate(9, ColumnHeaderFilterComponent_Conditional_7_Case_5_Conditional_9_Template, 3, 0, "div", 34);
203
+ i0.ɵɵdomElementEnd();
204
+ } if (rf & 2) {
205
+ const ctx_r1 = i0.ɵɵnextContext(2);
206
+ i0.ɵɵadvance();
207
+ i0.ɵɵconditional(ctx_r1.selectedUser ? 1 : -1);
208
+ i0.ɵɵadvance(2);
209
+ i0.ɵɵdomProperty("value", ctx_r1.peopleSearchText());
210
+ i0.ɵɵadvance(2);
211
+ i0.ɵɵconditional(ctx_r1.isPeopleLoading() && ctx_r1.peopleSearchText().trim() ? 5 : ctx_r1.peopleSuggestions().length === 0 && ctx_r1.peopleSearchText().trim() ? 6 : ctx_r1.peopleSearchText().trim() ? 7 : 8);
212
+ i0.ɵɵadvance(4);
213
+ i0.ɵɵconditional(ctx_r1.selectedUser ? 9 : -1);
214
+ } }
215
+ function ColumnHeaderFilterComponent_Conditional_7_Case_6_Template(rf, ctx) { if (rf & 1) {
216
+ const _r13 = i0.ɵɵgetCurrentView();
217
+ i0.ɵɵdomElementStart(0, "div", 15)(1, "div", 44)(2, "span", 45);
218
+ i0.ɵɵtext(3, "From:");
219
+ i0.ɵɵdomElementEnd();
220
+ i0.ɵɵdomElementStart(4, "input", 46);
221
+ i0.ɵɵdomListener("input", function ColumnHeaderFilterComponent_Conditional_7_Case_6_Template_input_input_4_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.tempDateFrom.set(ctx_r1.asInputValue($event))); });
222
+ i0.ɵɵdomElementEnd()();
223
+ i0.ɵɵdomElementStart(5, "div", 44)(6, "span", 45);
224
+ i0.ɵɵtext(7, "To:");
225
+ i0.ɵɵdomElementEnd();
226
+ i0.ɵɵdomElementStart(8, "input", 46);
227
+ i0.ɵɵdomListener("input", function ColumnHeaderFilterComponent_Conditional_7_Case_6_Template_input_input_8_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.tempDateTo.set(ctx_r1.asInputValue($event))); });
228
+ i0.ɵɵdomElementEnd()();
229
+ i0.ɵɵdomElementStart(9, "div", 47)(10, "button", 19);
230
+ i0.ɵɵdomListener("click", function ColumnHeaderFilterComponent_Conditional_7_Case_6_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.handleDateClear()); });
231
+ i0.ɵɵtext(11, "Clear");
232
+ i0.ɵɵdomElementEnd();
233
+ i0.ɵɵdomElementStart(12, "button", 20);
234
+ i0.ɵɵdomListener("click", function ColumnHeaderFilterComponent_Conditional_7_Case_6_Template_button_click_12_listener() { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.handleDateApply()); });
235
+ i0.ɵɵtext(13, "Apply");
236
+ i0.ɵɵdomElementEnd()()();
237
+ } if (rf & 2) {
238
+ const ctx_r1 = i0.ɵɵnextContext(2);
239
+ i0.ɵɵadvance(4);
240
+ i0.ɵɵdomProperty("value", ctx_r1.tempDateFrom());
241
+ i0.ɵɵadvance(4);
242
+ i0.ɵɵdomProperty("value", ctx_r1.tempDateTo());
243
+ i0.ɵɵadvance(2);
244
+ i0.ɵɵdomProperty("disabled", !ctx_r1.tempDateFrom() && !ctx_r1.tempDateTo());
245
+ } }
246
+ function ColumnHeaderFilterComponent_Conditional_7_Template(rf, ctx) { if (rf & 1) {
247
+ const _r3 = i0.ɵɵgetCurrentView();
248
+ i0.ɵɵdomElementStart(0, "div", 10);
249
+ i0.ɵɵdomListener("click", function ColumnHeaderFilterComponent_Conditional_7_Template_div_click_0_listener($event) { i0.ɵɵrestoreView(_r3); return i0.ɵɵresetView($event.stopPropagation()); });
250
+ i0.ɵɵdomElementStart(1, "div", 11);
251
+ i0.ɵɵtext(2);
252
+ i0.ɵɵdomElementEnd();
253
+ i0.ɵɵconditionalCreate(3, ColumnHeaderFilterComponent_Conditional_7_Case_3_Template, 8, 2, "div", 12)(4, ColumnHeaderFilterComponent_Conditional_7_Case_4_Template, 19, 6, "div", 13)(5, ColumnHeaderFilterComponent_Conditional_7_Case_5_Template, 10, 4, "div", 14)(6, ColumnHeaderFilterComponent_Conditional_7_Case_6_Template, 14, 3, "div", 15);
254
+ i0.ɵɵdomElementEnd();
255
+ } if (rf & 2) {
256
+ let tmp_5_0;
257
+ const ctx_r1 = i0.ɵɵnextContext();
258
+ i0.ɵɵstyleProp("top", ctx_r1.popoverTop(), "px")("left", ctx_r1.popoverLeft(), "px");
259
+ i0.ɵɵadvance(2);
260
+ i0.ɵɵtextInterpolate1(" Filter: ", ctx_r1.columnName, " ");
261
+ i0.ɵɵadvance();
262
+ i0.ɵɵconditional((tmp_5_0 = ctx_r1.filterType) === "text" ? 3 : tmp_5_0 === "multiSelect" ? 4 : tmp_5_0 === "people" ? 5 : tmp_5_0 === "date" ? 6 : -1);
263
+ } }
264
+ /**
265
+ * Column header filter component with sort + filter icon + popover.
266
+ * Standalone component with inline template.
267
+ */
268
+ export class ColumnHeaderFilterComponent extends BaseColumnHeaderFilterComponent {
269
+ getHeaderEl() {
270
+ return this.headerEl;
271
+ }
272
+ onDocumentClickWrapper(event) {
273
+ this.onDocumentClick(event, 'ogrid-column-header-filter');
274
+ }
275
+ static { this.ɵfac = /*@__PURE__*/ (() => { let ɵColumnHeaderFilterComponent_BaseFactory; return function ColumnHeaderFilterComponent_Factory(__ngFactoryType__) { return (ɵColumnHeaderFilterComponent_BaseFactory || (ɵColumnHeaderFilterComponent_BaseFactory = i0.ɵɵgetInheritedFactory(ColumnHeaderFilterComponent)))(__ngFactoryType__ || ColumnHeaderFilterComponent); }; })(); }
276
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ColumnHeaderFilterComponent, selectors: [["ogrid-column-header-filter"]], viewQuery: function ColumnHeaderFilterComponent_Query(rf, ctx) { if (rf & 1) {
277
+ i0.ɵɵviewQuery(_c0, 5);
278
+ } if (rf & 2) {
279
+ let _t;
280
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.headerEl = _t.first);
281
+ } }, hostBindings: function ColumnHeaderFilterComponent_HostBindings(rf, ctx) { if (rf & 1) {
282
+ i0.ɵɵlistener("click", function ColumnHeaderFilterComponent_click_HostBindingHandler($event) { return ctx.onDocumentClickWrapper($event); }, i0.ɵɵresolveDocument);
283
+ } }, features: [i0.ɵɵInheritDefinitionFeature], decls: 8, vars: 4, consts: [["headerEl", ""], [1, "ogrid-header-filter"], [1, "ogrid-header-filter__label"], ["data-header-label", "", 1, "ogrid-header-filter__name", 3, "title"], [1, "ogrid-header-filter__actions"], ["aria-haspopup", "dialog", 1, "ogrid-header-filter__filter-btn", 3, "ogrid-header-filter__filter-btn--active", "title"], [1, "ogrid-header-filter__popover", 3, "top", "left"], ["aria-haspopup", "dialog", 1, "ogrid-header-filter__filter-btn", 3, "click", "title"], [1, "ogrid-header-filter__funnel"], [1, "ogrid-header-filter__dot"], [1, "ogrid-header-filter__popover", 3, "click"], [1, "ogrid-header-filter__popover-header"], [1, "ogrid-header-filter__popover-body", 2, "width", "260px"], [1, "ogrid-header-filter__popover-body", 2, "width", "280px"], [1, "ogrid-header-filter__popover-body", 2, "width", "300px"], [1, "ogrid-header-filter__popover-body", 2, "padding", "12px", "display", "flex", "flex-direction", "column", "gap", "8px"], [2, "padding", "12px"], ["type", "text", "placeholder", "Enter search term...", "autocomplete", "off", 1, "ogrid-header-filter__input", 3, "input", "keydown", "value"], [1, "ogrid-header-filter__popover-actions"], [1, "ogrid-header-filter__action-btn", 3, "click", "disabled"], [1, "ogrid-header-filter__action-btn", "ogrid-header-filter__action-btn--primary", 3, "click"], [2, "padding", "12px 12px 4px"], ["type", "text", "placeholder", "Search...", "autocomplete", "off", 1, "ogrid-header-filter__input", 3, "input", "keydown", "value"], [1, "ogrid-header-filter__options-info"], [1, "ogrid-header-filter__select-actions"], [1, "ogrid-header-filter__action-btn", 3, "click"], [1, "ogrid-header-filter__options-list"], [1, "ogrid-header-filter__loading"], [1, "ogrid-header-filter__empty"], [1, "ogrid-header-filter__popover-actions", 2, "border-top", "1px solid rgba(0,0,0,0.12)"], [1, "ogrid-header-filter__option"], ["type", "checkbox", 3, "change", "checked"], [1, "ogrid-header-filter__people-selected"], ["type", "text", "placeholder", "Search for a person...", "autocomplete", "off", 1, "ogrid-header-filter__input", 3, "input", "keydown", "value"], [2, "padding", "8px 12px", "border-top", "1px solid rgba(0,0,0,0.12)"], [1, "ogrid-header-filter__people-info-label"], [1, "ogrid-header-filter__people-card"], [1, "ogrid-header-filter__people-avatar"], [1, "ogrid-header-filter__people-details"], [1, "ogrid-header-filter__people-email"], ["aria-label", "Remove filter", 1, "ogrid-header-filter__btn", 3, "click"], [1, "ogrid-header-filter__people-option"], [1, "ogrid-header-filter__people-option", 3, "click"], [1, "ogrid-header-filter__action-btn", 2, "width", "100%", 3, "click"], [2, "display", "flex", "align-items", "center", "gap", "8px"], [2, "min-width", "36px", "font-size", "12px"], ["type", "date", 2, "flex", "1", "padding", "4px 6px", 3, "input", "value"], [1, "ogrid-header-filter__popover-actions", 2, "margin-top", "4px"]], template: function ColumnHeaderFilterComponent_Template(rf, ctx) { if (rf & 1) {
284
+ i0.ɵɵdomElementStart(0, "div", 1, 0)(2, "div", 2)(3, "span", 3);
285
+ i0.ɵɵtext(4);
286
+ i0.ɵɵdomElementEnd()();
287
+ i0.ɵɵdomElementStart(5, "div", 4);
288
+ i0.ɵɵconditionalCreate(6, ColumnHeaderFilterComponent_Conditional_6_Template, 3, 6, "button", 5);
289
+ i0.ɵɵdomElementEnd()();
290
+ i0.ɵɵconditionalCreate(7, ColumnHeaderFilterComponent_Conditional_7_Template, 7, 6, "div", 6);
291
+ } if (rf & 2) {
292
+ i0.ɵɵadvance(3);
293
+ i0.ɵɵdomProperty("title", ctx.columnName);
294
+ i0.ɵɵadvance();
295
+ i0.ɵɵtextInterpolate1(" ", ctx.columnName, " ");
296
+ i0.ɵɵadvance(2);
297
+ i0.ɵɵconditional(ctx.filterType !== "none" ? 6 : -1);
298
+ i0.ɵɵadvance();
299
+ i0.ɵɵconditional(ctx.isFilterOpen() && ctx.filterType !== "none" ? 7 : -1);
300
+ } }, styles: ["[_nghost-%COMP%] { display: flex; align-items: center; flex: 1; min-width: 0; position: relative; }\n .ogrid-header-filter[_ngcontent-%COMP%] { display: flex; align-items: center; width: 100%; min-width: 0; }\n .ogrid-header-filter__label[_ngcontent-%COMP%] { flex: 1; min-width: 0; overflow: hidden; }\n .ogrid-header-filter__name[_ngcontent-%COMP%] {\n display: block; font-weight: 600; font-size: 14px; line-height: 1.4;\n white-space: nowrap; overflow: hidden; text-overflow: ellipsis;\n }\n .ogrid-header-filter__actions[_ngcontent-%COMP%] { display: flex; align-items: center; margin-left: 4px; flex-shrink: 0; }\n .ogrid-header-filter__btn[_ngcontent-%COMP%] {\n width: 24px; height: 24px; padding: 2px; border: none; border-radius: 4px;\n background: transparent; cursor: pointer; font-size: 12px; line-height: 1;\n display: inline-flex; align-items: center; justify-content: center; position: relative;\n color: var(--ogrid-fg-secondary, rgba(0, 0, 0, 0.54));\n }\n .ogrid-header-filter__btn[_ngcontent-%COMP%]:hover { background: var(--ogrid-hover-bg, rgba(0, 0, 0, 0.08)); }\n .ogrid-header-filter__btn--active[_ngcontent-%COMP%] { color: var(--mat-sys-primary, #1976d2); }\n .ogrid-header-filter__filter-btn[_ngcontent-%COMP%] {\n width: 24px; height: 24px; padding: 2px; border: none; border-radius: 4px;\n background: transparent; cursor: pointer; line-height: 1;\n display: inline-flex; align-items: center; justify-content: center; position: relative;\n opacity: 0.6; transition: opacity 0.15s;\n }\n .ogrid-header-filter[_ngcontent-%COMP%]:hover .ogrid-header-filter__filter-btn[_ngcontent-%COMP%] { opacity: 0.8; }\n \n\n .ogrid-header-filter[_ngcontent-%COMP%] .ogrid-header-filter__filter-btn[_ngcontent-%COMP%]:hover { background: var(--ogrid-hover-bg, rgba(0, 0, 0, 0.08)); opacity: 1; }\n .ogrid-header-filter[_ngcontent-%COMP%] .ogrid-header-filter__filter-btn--active[_ngcontent-%COMP%] { opacity: 1; }\n .ogrid-header-filter__funnel[_ngcontent-%COMP%] {\n display: block; width: 0; height: 0;\n border-left: 5px solid transparent; border-right: 5px solid transparent;\n border-top: 6px solid var(--ogrid-fg-secondary, rgba(0, 0, 0, 0.65));\n position: relative;\n }\n .ogrid-header-filter__funnel[_ngcontent-%COMP%]::after {\n content: ''; display: block; width: 2px; height: 4px;\n background: var(--ogrid-fg-secondary, rgba(0, 0, 0, 0.65)); position: absolute;\n top: -1px; left: -1px;\n }\n .ogrid-header-filter__filter-btn--active[_ngcontent-%COMP%] .ogrid-header-filter__funnel[_ngcontent-%COMP%] {\n border-top-color: var(--mat-sys-primary, #1976d2);\n }\n .ogrid-header-filter__filter-btn--active[_ngcontent-%COMP%] .ogrid-header-filter__funnel[_ngcontent-%COMP%]::after {\n background: var(--mat-sys-primary, #1976d2);\n }\n .ogrid-header-filter__dot[_ngcontent-%COMP%] {\n position: absolute; top: 2px; right: 2px;\n width: 6px; height: 6px; border-radius: 50%;\n background: var(--mat-sys-primary, #1976d2);\n }\n .ogrid-header-filter__popover[_ngcontent-%COMP%] {\n position: fixed; z-index: 1000;\n background: var(--ogrid-bg, #ffffff); border: 1px solid var(--ogrid-border, rgba(0, 0, 0, 0.2));\n border-radius: 8px; box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2), 0 1px 4px rgba(0, 0, 0, 0.1);\n margin-top: 4px; color: var(--ogrid-fg, rgba(0, 0, 0, 0.87));\n }\n .ogrid-header-filter__popover-header[_ngcontent-%COMP%] {\n padding: 8px 12px; font-size: 14px; font-weight: 600;\n border-bottom: 1px solid var(--ogrid-border, rgba(0, 0, 0, 0.12));\n color: var(--ogrid-fg, rgba(0, 0, 0, 0.87));\n }\n .ogrid-header-filter__popover-body[_ngcontent-%COMP%] { }\n .ogrid-header-filter__popover-actions[_ngcontent-%COMP%] {\n display: flex; justify-content: flex-end; gap: 8px; padding: 8px 12px;\n }\n .ogrid-header-filter__input[_ngcontent-%COMP%] {\n width: 100%; padding: 8px 12px; border: 1px solid var(--ogrid-border, rgba(0, 0, 0, 0.23));\n border-radius: 4px; font-size: 14px; box-sizing: border-box;\n background: var(--ogrid-bg, #ffffff); color: var(--ogrid-fg, rgba(0, 0, 0, 0.87));\n }\n .ogrid-header-filter__input[_ngcontent-%COMP%]:focus { outline: 2px solid var(--mat-sys-primary, #1976d2); outline-offset: -1px; }\n .ogrid-header-filter__options-info[_ngcontent-%COMP%] { margin-top: 4px; font-size: 12px; color: var(--ogrid-fg-secondary, rgba(0, 0, 0, 0.6)); }\n .ogrid-header-filter__select-actions[_ngcontent-%COMP%] {\n display: flex; justify-content: space-between; padding: 4px 12px;\n }\n .ogrid-header-filter__options-list[_ngcontent-%COMP%] { max-height: 240px; overflow-y: auto; padding: 0 4px; }\n .ogrid-header-filter__option[_ngcontent-%COMP%] {\n display: flex; align-items: center; gap: 8px;\n padding: 4px 8px; cursor: pointer; font-size: 14px;\n color: var(--ogrid-fg, rgba(0, 0, 0, 0.87));\n }\n .ogrid-header-filter__option[_ngcontent-%COMP%]:hover { background: var(--ogrid-hover-bg, rgba(0, 0, 0, 0.04)); }\n .ogrid-header-filter__loading[_ngcontent-%COMP%], .ogrid-header-filter__empty[_ngcontent-%COMP%] {\n padding: 16px; text-align: center; font-size: 14px; color: var(--ogrid-fg-secondary, rgba(0, 0, 0, 0.6));\n }\n .ogrid-header-filter__action-btn[_ngcontent-%COMP%] {\n padding: 4px 12px; border: none; border-radius: 4px;\n background: transparent; cursor: pointer; font-size: 13px;\n color: var(--ogrid-fg, rgba(0, 0, 0, 0.87));\n }\n .ogrid-header-filter__action-btn[_ngcontent-%COMP%]:hover { background: var(--ogrid-hover-bg, rgba(0, 0, 0, 0.04)); }\n .ogrid-header-filter__action-btn[_ngcontent-%COMP%]:disabled { opacity: 0.38; cursor: default; }\n .ogrid-header-filter__action-btn--primary[_ngcontent-%COMP%] {\n background: var(--mat-sys-primary, #1976d2); color: #fff;\n }\n .ogrid-header-filter__action-btn--primary[_ngcontent-%COMP%]:hover { opacity: 0.9; }\n .ogrid-header-filter__people-selected[_ngcontent-%COMP%] {\n padding: 12px; border-bottom: 1px solid var(--ogrid-border, rgba(0, 0, 0, 0.12));\n }\n .ogrid-header-filter__people-info-label[_ngcontent-%COMP%] { font-size: 12px; color: var(--ogrid-fg-secondary, rgba(0, 0, 0, 0.6)); }\n .ogrid-header-filter__people-card[_ngcontent-%COMP%] {\n display: flex; align-items: center; gap: 8px; margin-top: 4px;\n }\n .ogrid-header-filter__people-avatar[_ngcontent-%COMP%] {\n width: 32px; height: 32px; border-radius: 50%; background: var(--ogrid-hover-bg, rgba(0, 0, 0, 0.08));\n display: flex; align-items: center; justify-content: center;\n font-size: 14px; font-weight: 600; flex-shrink: 0;\n color: var(--ogrid-fg, rgba(0, 0, 0, 0.87));\n }\n .ogrid-header-filter__people-details[_ngcontent-%COMP%] { flex: 1; min-width: 0; font-size: 14px; color: var(--ogrid-fg, rgba(0, 0, 0, 0.87)); }\n .ogrid-header-filter__people-details[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n .ogrid-header-filter__people-email[_ngcontent-%COMP%] { font-size: 12px; color: var(--ogrid-fg-secondary, rgba(0, 0, 0, 0.6)); }\n .ogrid-header-filter__people-option[_ngcontent-%COMP%] {\n display: flex; align-items: center; gap: 8px; padding: 8px 12px; cursor: pointer;\n color: var(--ogrid-fg, rgba(0, 0, 0, 0.87));\n }\n .ogrid-header-filter__people-option[_ngcontent-%COMP%]:hover { background: var(--ogrid-hover-bg, rgba(0, 0, 0, 0.04)); }"], changeDetection: 0 }); }
301
+ }
302
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ColumnHeaderFilterComponent, [{
303
+ type: Component,
304
+ args: [{ selector: 'ogrid-column-header-filter', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `
305
+ <div class="ogrid-header-filter" #headerEl>
306
+ <div class="ogrid-header-filter__label">
307
+ <span class="ogrid-header-filter__name" [title]="columnName" data-header-label>
308
+ {{ columnName }}
309
+ </span>
310
+ </div>
311
+
312
+ <div class="ogrid-header-filter__actions">
313
+ @if (filterType !== 'none') {
314
+ <button
315
+ class="ogrid-header-filter__filter-btn"
316
+ [class.ogrid-header-filter__filter-btn--active]="hasActiveFilter() || isFilterOpen()"
317
+ (click)="toggleFilter($event)"
318
+ [attr.aria-label]="'Filter ' + columnName"
319
+ [attr.aria-expanded]="isFilterOpen()"
320
+ aria-haspopup="dialog"
321
+ [title]="'Filter ' + columnName"
322
+ >
323
+ <span class="ogrid-header-filter__funnel"></span>
324
+ @if (hasActiveFilter()) {
325
+ <span class="ogrid-header-filter__dot"></span>
326
+ }
327
+ </button>
328
+ }
329
+ </div>
330
+ </div>
331
+
332
+ @if (isFilterOpen() && filterType !== 'none') {
333
+ <div
334
+ class="ogrid-header-filter__popover"
335
+ [style.top.px]="popoverTop()"
336
+ [style.left.px]="popoverLeft()"
337
+ (click)="$event.stopPropagation()"
338
+ >
339
+ <div class="ogrid-header-filter__popover-header">
340
+ Filter: {{ columnName }}
341
+ </div>
342
+
343
+ @switch (filterType) {
344
+ @case ('text') {
345
+ <div class="ogrid-header-filter__popover-body" style="width: 260px;">
346
+ <div style="padding: 12px;">
347
+ <input
348
+ type="text"
349
+ class="ogrid-header-filter__input"
350
+ placeholder="Enter search term..."
351
+ [value]="tempTextValue()"
352
+ (input)="tempTextValue.set(asInputValue($event))"
353
+ (keydown)="onTextKeydown($event)"
354
+ autocomplete="off"
355
+ />
356
+ </div>
357
+ <div class="ogrid-header-filter__popover-actions">
358
+ <button class="ogrid-header-filter__action-btn" [disabled]="!tempTextValue()" (click)="handleTextClear()">Clear</button>
359
+ <button class="ogrid-header-filter__action-btn ogrid-header-filter__action-btn--primary" (click)="handleTextApply()">Apply</button>
360
+ </div>
361
+ </div>
362
+ }
363
+ @case ('multiSelect') {
364
+ <div class="ogrid-header-filter__popover-body" style="width: 280px;">
365
+ <div style="padding: 12px 12px 4px;">
366
+ <input
367
+ type="text"
368
+ class="ogrid-header-filter__input"
369
+ placeholder="Search..."
370
+ [value]="searchText()"
371
+ (input)="searchText.set(asInputValue($event))"
372
+ (keydown)="$event.stopPropagation()"
373
+ autocomplete="off"
374
+ />
375
+ <div class="ogrid-header-filter__options-info">
376
+ {{ filteredOptions().length }} of {{ (options ?? []).length }} options
377
+ </div>
378
+ </div>
379
+ <div class="ogrid-header-filter__select-actions">
380
+ <button class="ogrid-header-filter__action-btn" (click)="handleSelectAllFiltered()">
381
+ Select All ({{ filteredOptions().length }})
382
+ </button>
383
+ <button class="ogrid-header-filter__action-btn" (click)="handleClearSelection()">Clear</button>
384
+ </div>
385
+ <div class="ogrid-header-filter__options-list">
386
+ @if (isLoadingOptions) {
387
+ <div class="ogrid-header-filter__loading">Loading...</div>
388
+ } @else if (filteredOptions().length === 0) {
389
+ <div class="ogrid-header-filter__empty">No options found</div>
390
+ } @else {
391
+ @for (option of filteredOptions(); track option) {
392
+ <label class="ogrid-header-filter__option">
393
+ <input
394
+ type="checkbox"
395
+ [checked]="tempSelected().has(option)"
396
+ (change)="handleCheckboxChange(option, $event)"
397
+ />
398
+ <span>{{ option }}</span>
399
+ </label>
400
+ }
401
+ }
402
+ </div>
403
+ <div class="ogrid-header-filter__popover-actions" style="border-top: 1px solid rgba(0,0,0,0.12);">
404
+ <button class="ogrid-header-filter__action-btn" (click)="handleClearSelection()">Clear</button>
405
+ <button class="ogrid-header-filter__action-btn ogrid-header-filter__action-btn--primary" (click)="handleApplyMultiSelect()">Apply</button>
406
+ </div>
407
+ </div>
408
+ }
409
+ @case ('people') {
410
+ <div class="ogrid-header-filter__popover-body" style="width: 300px;">
411
+ @if (selectedUser) {
412
+ <div class="ogrid-header-filter__people-selected">
413
+ <div class="ogrid-header-filter__people-info-label">Currently filtered by:</div>
414
+ <div class="ogrid-header-filter__people-card">
415
+ <div class="ogrid-header-filter__people-avatar">{{ selectedUser!.displayName?.[0] ?? '?' }}</div>
416
+ <div class="ogrid-header-filter__people-details">
417
+ <div>{{ selectedUser!.displayName }}</div>
418
+ <div class="ogrid-header-filter__people-email">{{ selectedUser!.email }}</div>
419
+ </div>
420
+ <button class="ogrid-header-filter__btn" (click)="handleClearUser()" aria-label="Remove filter">&times;</button>
421
+ </div>
422
+ </div>
423
+ }
424
+ <div style="padding: 12px 12px 4px;">
425
+ <input
426
+ type="text"
427
+ class="ogrid-header-filter__input"
428
+ placeholder="Search for a person..."
429
+ [value]="peopleSearchText()"
430
+ (input)="onPeopleSearchInput($event)"
431
+ (keydown)="$event.stopPropagation()"
432
+ autocomplete="off"
433
+ />
434
+ </div>
435
+ <div class="ogrid-header-filter__options-list">
436
+ @if (isPeopleLoading() && peopleSearchText().trim()) {
437
+ <div class="ogrid-header-filter__loading">Loading...</div>
438
+ } @else if (peopleSuggestions().length === 0 && peopleSearchText().trim()) {
439
+ <div class="ogrid-header-filter__empty">No results found</div>
440
+ } @else if (peopleSearchText().trim()) {
441
+ @for (user of peopleSuggestions(); track user.id || user.email || user.displayName) {
442
+ <div class="ogrid-header-filter__people-option" (click)="handleUserSelect(user)">
443
+ <div class="ogrid-header-filter__people-avatar">{{ user.displayName?.[0] ?? '?' }}</div>
444
+ <div class="ogrid-header-filter__people-details">
445
+ <div>{{ user.displayName }}</div>
446
+ <div class="ogrid-header-filter__people-email">{{ user.email }}</div>
447
+ </div>
448
+ </div>
449
+ }
450
+ } @else {
451
+ <div class="ogrid-header-filter__empty">Type to search...</div>
452
+ }
453
+ </div>
454
+ @if (selectedUser) {
455
+ <div style="padding: 8px 12px; border-top: 1px solid rgba(0,0,0,0.12);">
456
+ <button class="ogrid-header-filter__action-btn" style="width: 100%;" (click)="handleClearUser()">Clear Filter</button>
457
+ </div>
458
+ }
459
+ </div>
460
+ }
461
+ @case ('date') {
462
+ <div class="ogrid-header-filter__popover-body" style="padding: 12px; display: flex; flex-direction: column; gap: 8px;">
463
+ <div style="display: flex; align-items: center; gap: 8px;">
464
+ <span style="min-width: 36px; font-size: 12px;">From:</span>
465
+ <input type="date" [value]="tempDateFrom()" (input)="tempDateFrom.set(asInputValue($event))" style="flex: 1; padding: 4px 6px;" />
466
+ </div>
467
+ <div style="display: flex; align-items: center; gap: 8px;">
468
+ <span style="min-width: 36px; font-size: 12px;">To:</span>
469
+ <input type="date" [value]="tempDateTo()" (input)="tempDateTo.set(asInputValue($event))" style="flex: 1; padding: 4px 6px;" />
470
+ </div>
471
+ <div class="ogrid-header-filter__popover-actions" style="margin-top: 4px;">
472
+ <button class="ogrid-header-filter__action-btn" [disabled]="!tempDateFrom() && !tempDateTo()" (click)="handleDateClear()">Clear</button>
473
+ <button class="ogrid-header-filter__action-btn ogrid-header-filter__action-btn--primary" (click)="handleDateApply()">Apply</button>
474
+ </div>
475
+ </div>
476
+ }
477
+ }
478
+ </div>
479
+ }
480
+ `, host: {
481
+ '(document:click)': 'onDocumentClickWrapper($event)',
482
+ }, styles: ["\n :host { display: flex; align-items: center; flex: 1; min-width: 0; position: relative; }\n .ogrid-header-filter { display: flex; align-items: center; width: 100%; min-width: 0; }\n .ogrid-header-filter__label { flex: 1; min-width: 0; overflow: hidden; }\n .ogrid-header-filter__name {\n display: block; font-weight: 600; font-size: 14px; line-height: 1.4;\n white-space: nowrap; overflow: hidden; text-overflow: ellipsis;\n }\n .ogrid-header-filter__actions { display: flex; align-items: center; margin-left: 4px; flex-shrink: 0; }\n .ogrid-header-filter__btn {\n width: 24px; height: 24px; padding: 2px; border: none; border-radius: 4px;\n background: transparent; cursor: pointer; font-size: 12px; line-height: 1;\n display: inline-flex; align-items: center; justify-content: center; position: relative;\n color: var(--ogrid-fg-secondary, rgba(0, 0, 0, 0.54));\n }\n .ogrid-header-filter__btn:hover { background: var(--ogrid-hover-bg, rgba(0, 0, 0, 0.08)); }\n .ogrid-header-filter__btn--active { color: var(--mat-sys-primary, #1976d2); }\n .ogrid-header-filter__filter-btn {\n width: 24px; height: 24px; padding: 2px; border: none; border-radius: 4px;\n background: transparent; cursor: pointer; line-height: 1;\n display: inline-flex; align-items: center; justify-content: center; position: relative;\n opacity: 0.6; transition: opacity 0.15s;\n }\n .ogrid-header-filter:hover .ogrid-header-filter__filter-btn { opacity: 0.8; }\n /* :hover and --active must override the parent-hover rule (0,2,0) - double-class raises to 0,3,0 */\n .ogrid-header-filter .ogrid-header-filter__filter-btn:hover { background: var(--ogrid-hover-bg, rgba(0, 0, 0, 0.08)); opacity: 1; }\n .ogrid-header-filter .ogrid-header-filter__filter-btn--active { opacity: 1; }\n .ogrid-header-filter__funnel {\n display: block; width: 0; height: 0;\n border-left: 5px solid transparent; border-right: 5px solid transparent;\n border-top: 6px solid var(--ogrid-fg-secondary, rgba(0, 0, 0, 0.65));\n position: relative;\n }\n .ogrid-header-filter__funnel::after {\n content: ''; display: block; width: 2px; height: 4px;\n background: var(--ogrid-fg-secondary, rgba(0, 0, 0, 0.65)); position: absolute;\n top: -1px; left: -1px;\n }\n .ogrid-header-filter__filter-btn--active .ogrid-header-filter__funnel {\n border-top-color: var(--mat-sys-primary, #1976d2);\n }\n .ogrid-header-filter__filter-btn--active .ogrid-header-filter__funnel::after {\n background: var(--mat-sys-primary, #1976d2);\n }\n .ogrid-header-filter__dot {\n position: absolute; top: 2px; right: 2px;\n width: 6px; height: 6px; border-radius: 50%;\n background: var(--mat-sys-primary, #1976d2);\n }\n .ogrid-header-filter__popover {\n position: fixed; z-index: 1000;\n background: var(--ogrid-bg, #ffffff); border: 1px solid var(--ogrid-border, rgba(0, 0, 0, 0.2));\n border-radius: 8px; box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2), 0 1px 4px rgba(0, 0, 0, 0.1);\n margin-top: 4px; color: var(--ogrid-fg, rgba(0, 0, 0, 0.87));\n }\n .ogrid-header-filter__popover-header {\n padding: 8px 12px; font-size: 14px; font-weight: 600;\n border-bottom: 1px solid var(--ogrid-border, rgba(0, 0, 0, 0.12));\n color: var(--ogrid-fg, rgba(0, 0, 0, 0.87));\n }\n .ogrid-header-filter__popover-body { }\n .ogrid-header-filter__popover-actions {\n display: flex; justify-content: flex-end; gap: 8px; padding: 8px 12px;\n }\n .ogrid-header-filter__input {\n width: 100%; padding: 8px 12px; border: 1px solid var(--ogrid-border, rgba(0, 0, 0, 0.23));\n border-radius: 4px; font-size: 14px; box-sizing: border-box;\n background: var(--ogrid-bg, #ffffff); color: var(--ogrid-fg, rgba(0, 0, 0, 0.87));\n }\n .ogrid-header-filter__input:focus { outline: 2px solid var(--mat-sys-primary, #1976d2); outline-offset: -1px; }\n .ogrid-header-filter__options-info { margin-top: 4px; font-size: 12px; color: var(--ogrid-fg-secondary, rgba(0, 0, 0, 0.6)); }\n .ogrid-header-filter__select-actions {\n display: flex; justify-content: space-between; padding: 4px 12px;\n }\n .ogrid-header-filter__options-list { max-height: 240px; overflow-y: auto; padding: 0 4px; }\n .ogrid-header-filter__option {\n display: flex; align-items: center; gap: 8px;\n padding: 4px 8px; cursor: pointer; font-size: 14px;\n color: var(--ogrid-fg, rgba(0, 0, 0, 0.87));\n }\n .ogrid-header-filter__option:hover { background: var(--ogrid-hover-bg, rgba(0, 0, 0, 0.04)); }\n .ogrid-header-filter__loading, .ogrid-header-filter__empty {\n padding: 16px; text-align: center; font-size: 14px; color: var(--ogrid-fg-secondary, rgba(0, 0, 0, 0.6));\n }\n .ogrid-header-filter__action-btn {\n padding: 4px 12px; border: none; border-radius: 4px;\n background: transparent; cursor: pointer; font-size: 13px;\n color: var(--ogrid-fg, rgba(0, 0, 0, 0.87));\n }\n .ogrid-header-filter__action-btn:hover { background: var(--ogrid-hover-bg, rgba(0, 0, 0, 0.04)); }\n .ogrid-header-filter__action-btn:disabled { opacity: 0.38; cursor: default; }\n .ogrid-header-filter__action-btn--primary {\n background: var(--mat-sys-primary, #1976d2); color: #fff;\n }\n .ogrid-header-filter__action-btn--primary:hover { opacity: 0.9; }\n .ogrid-header-filter__people-selected {\n padding: 12px; border-bottom: 1px solid var(--ogrid-border, rgba(0, 0, 0, 0.12));\n }\n .ogrid-header-filter__people-info-label { font-size: 12px; color: var(--ogrid-fg-secondary, rgba(0, 0, 0, 0.6)); }\n .ogrid-header-filter__people-card {\n display: flex; align-items: center; gap: 8px; margin-top: 4px;\n }\n .ogrid-header-filter__people-avatar {\n width: 32px; height: 32px; border-radius: 50%; background: var(--ogrid-hover-bg, rgba(0, 0, 0, 0.08));\n display: flex; align-items: center; justify-content: center;\n font-size: 14px; font-weight: 600; flex-shrink: 0;\n color: var(--ogrid-fg, rgba(0, 0, 0, 0.87));\n }\n .ogrid-header-filter__people-details { flex: 1; min-width: 0; font-size: 14px; color: var(--ogrid-fg, rgba(0, 0, 0, 0.87)); }\n .ogrid-header-filter__people-details > div { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n .ogrid-header-filter__people-email { font-size: 12px; color: var(--ogrid-fg-secondary, rgba(0, 0, 0, 0.6)); }\n .ogrid-header-filter__people-option {\n display: flex; align-items: center; gap: 8px; padding: 8px 12px; cursor: pointer;\n color: var(--ogrid-fg, rgba(0, 0, 0, 0.87));\n }\n .ogrid-header-filter__people-option:hover { background: var(--ogrid-hover-bg, rgba(0, 0, 0, 0.04)); }\n "] }]
483
+ }], null, { headerEl: [{
484
+ type: ViewChild,
485
+ args: ['headerEl']
486
+ }] }); })();
487
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ColumnHeaderFilterComponent, { className: "ColumnHeaderFilterComponent", filePath: "column-header-filter/column-header-filter.component.ts", lineNumber: 310 }); })();
@@ -0,0 +1,79 @@
1
+ import { Component, ChangeDetectionStrategy, ViewChild } from '@angular/core';
2
+ import { MatMenuModule, MatMenuTrigger } from '@angular/material/menu';
3
+ import { MatDividerModule } from '@angular/material/divider';
4
+ import { BaseColumnHeaderMenuComponent } from '@alaarab/ogrid-angular';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/material/menu";
7
+ import * as i2 from "@angular/material/divider";
8
+ const _forTrack0 = ($index, $item) => $item.id;
9
+ function ColumnHeaderMenuComponent_For_5_Conditional_2_Template(rf, ctx) { if (rf & 1) {
10
+ i0.ɵɵelement(0, "mat-divider");
11
+ } }
12
+ function ColumnHeaderMenuComponent_For_5_Template(rf, ctx) { if (rf & 1) {
13
+ const _r1 = i0.ɵɵgetCurrentView();
14
+ i0.ɵɵelementStart(0, "button", 2);
15
+ i0.ɵɵlistener("click", function ColumnHeaderMenuComponent_For_5_Template_button_click_0_listener() { const item_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.handleMenuItemClick(item_r2.id)); });
16
+ i0.ɵɵtext(1);
17
+ i0.ɵɵelementEnd();
18
+ i0.ɵɵconditionalCreate(2, ColumnHeaderMenuComponent_For_5_Conditional_2_Template, 1, 0, "mat-divider");
19
+ } if (rf & 2) {
20
+ const item_r2 = ctx.$implicit;
21
+ i0.ɵɵproperty("disabled", item_r2.disabled);
22
+ i0.ɵɵadvance();
23
+ i0.ɵɵtextInterpolate1(" ", item_r2.label, " ");
24
+ i0.ɵɵadvance();
25
+ i0.ɵɵconditional(item_r2.divider ? 2 : -1);
26
+ } }
27
+ export class ColumnHeaderMenuComponent extends BaseColumnHeaderMenuComponent {
28
+ static { this.ɵfac = /*@__PURE__*/ (() => { let ɵColumnHeaderMenuComponent_BaseFactory; return function ColumnHeaderMenuComponent_Factory(__ngFactoryType__) { return (ɵColumnHeaderMenuComponent_BaseFactory || (ɵColumnHeaderMenuComponent_BaseFactory = i0.ɵɵgetInheritedFactory(ColumnHeaderMenuComponent)))(__ngFactoryType__ || ColumnHeaderMenuComponent); }; })(); }
29
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ColumnHeaderMenuComponent, selectors: [["column-header-menu"]], viewQuery: function ColumnHeaderMenuComponent_Query(rf, ctx) { if (rf & 1) {
30
+ i0.ɵɵviewQuery(MatMenuTrigger, 5);
31
+ } if (rf & 2) {
32
+ let _t;
33
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.menuTrigger = _t.first);
34
+ } }, features: [i0.ɵɵInheritDefinitionFeature], decls: 6, vars: 2, consts: [["menu", "matMenu"], [1, "column-header-menu-trigger", 3, "matMenuTriggerFor"], ["mat-menu-item", "", 3, "click", "disabled"]], template: function ColumnHeaderMenuComponent_Template(rf, ctx) { if (rf & 1) {
35
+ i0.ɵɵelementStart(0, "button", 1);
36
+ i0.ɵɵtext(1, " \u22EE ");
37
+ i0.ɵɵelementEnd();
38
+ i0.ɵɵelementStart(2, "mat-menu", null, 0);
39
+ i0.ɵɵrepeaterCreate(4, ColumnHeaderMenuComponent_For_5_Template, 3, 3, null, null, _forTrack0);
40
+ i0.ɵɵelementEnd();
41
+ } if (rf & 2) {
42
+ const menu_r4 = i0.ɵɵreference(3);
43
+ i0.ɵɵproperty("matMenuTriggerFor", menu_r4);
44
+ i0.ɵɵattribute("aria-label", "Column options for " + ctx.columnId);
45
+ i0.ɵɵadvance(4);
46
+ i0.ɵɵrepeater(ctx.menuItems());
47
+ } }, dependencies: [MatMenuModule, i1.MatMenu, i1.MatMenuItem, i1.MatMenuTrigger, MatDividerModule, i2.MatDivider], styles: ["[_nghost-%COMP%] { flex-shrink: 0; }\n .column-header-menu-trigger[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n padding: 0;\n border: none;\n border-radius: 4px;\n background: transparent;\n cursor: pointer;\n font-size: 16px;\n line-height: 1;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: var(--ogrid-fg-secondary, rgba(0, 0, 0, 0.54));\n }\n\n \n\n\n @media (hover: hover) {\n .column-header-menu-trigger[_ngcontent-%COMP%] { visibility: hidden; }\n }\n\n .column-header-menu-trigger[_ngcontent-%COMP%]:hover {\n background: var(--ogrid-hover-bg, rgba(0, 0, 0, 0.08));\n color: var(--ogrid-fg, rgba(0, 0, 0, 0.87));\n }"], changeDetection: 0 }); }
48
+ }
49
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ColumnHeaderMenuComponent, [{
50
+ type: Component,
51
+ args: [{ selector: 'column-header-menu', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [MatMenuModule, MatDividerModule], template: `
52
+ <button
53
+ [matMenuTriggerFor]="menu"
54
+ class="column-header-menu-trigger"
55
+ [attr.aria-label]="'Column options for ' + columnId"
56
+ >
57
+ &#8942;
58
+ </button>
59
+
60
+ <mat-menu #menu="matMenu">
61
+ @for (item of menuItems(); track item.id) {
62
+ <button
63
+ mat-menu-item
64
+ [disabled]="item.disabled"
65
+ (click)="handleMenuItemClick(item.id)"
66
+ >
67
+ {{ item.label }}
68
+ </button>
69
+ @if (item.divider) {
70
+ <mat-divider></mat-divider>
71
+ }
72
+ }
73
+ </mat-menu>
74
+ `, styles: ["\n :host { flex-shrink: 0; }\n .column-header-menu-trigger {\n width: 24px;\n height: 24px;\n padding: 0;\n border: none;\n border-radius: 4px;\n background: transparent;\n cursor: pointer;\n font-size: 16px;\n line-height: 1;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: var(--ogrid-fg-secondary, rgba(0, 0, 0, 0.54));\n }\n\n /* Always reserve space; hide on hover-capable devices until column is hovered.\n The th:hover rule lives in the parent (ViewEncapsulation.None) styles. */\n @media (hover: hover) {\n .column-header-menu-trigger { visibility: hidden; }\n }\n\n .column-header-menu-trigger:hover {\n background: var(--ogrid-hover-bg, rgba(0, 0, 0, 0.08));\n color: var(--ogrid-fg, rgba(0, 0, 0, 0.87));\n }\n "] }]
75
+ }], null, { menuTrigger: [{
76
+ type: ViewChild,
77
+ args: [MatMenuTrigger]
78
+ }] }); })();
79
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ColumnHeaderMenuComponent, { className: "ColumnHeaderMenuComponent", filePath: "column-header-menu/column-header-menu.component.ts", lineNumber: 65 }); })();