@memberjunction/ng-explorer-core 3.2.0 → 3.4.0

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 (39) hide show
  1. package/README.md +335 -0
  2. package/dist/lib/resource-wrappers/view-resource.component.d.ts +2 -2
  3. package/dist/lib/resource-wrappers/view-resource.component.d.ts.map +1 -1
  4. package/dist/lib/resource-wrappers/view-resource.component.js.map +1 -1
  5. package/dist/lib/shell/shell.component.d.ts +47 -2
  6. package/dist/lib/shell/shell.component.d.ts.map +1 -1
  7. package/dist/lib/shell/shell.component.js +239 -64
  8. package/dist/lib/shell/shell.component.js.map +1 -1
  9. package/dist/lib/single-search-result/single-search-result.component.d.ts +2 -5
  10. package/dist/lib/single-search-result/single-search-result.component.d.ts.map +1 -1
  11. package/dist/lib/single-search-result/single-search-result.component.js +8 -24
  12. package/dist/lib/single-search-result/single-search-result.component.js.map +1 -1
  13. package/dist/lib/user-menu/base-user-menu.d.ts +141 -0
  14. package/dist/lib/user-menu/base-user-menu.d.ts.map +1 -0
  15. package/dist/lib/user-menu/base-user-menu.js +384 -0
  16. package/dist/lib/user-menu/base-user-menu.js.map +1 -0
  17. package/dist/lib/user-menu/index.d.ts +3 -0
  18. package/dist/lib/user-menu/index.d.ts.map +1 -0
  19. package/dist/lib/user-menu/index.js +3 -0
  20. package/dist/lib/user-menu/index.js.map +1 -0
  21. package/dist/lib/user-menu/user-menu.types.d.ts +121 -0
  22. package/dist/lib/user-menu/user-menu.types.d.ts.map +1 -0
  23. package/dist/lib/user-menu/user-menu.types.js +13 -0
  24. package/dist/lib/user-menu/user-menu.types.js.map +1 -0
  25. package/dist/lib/user-notifications/user-notifications.component.js +163 -146
  26. package/dist/lib/user-notifications/user-notifications.component.js.map +1 -1
  27. package/dist/lib/user-profile/user-profile.component.d.ts +39 -2
  28. package/dist/lib/user-profile/user-profile.component.d.ts.map +1 -1
  29. package/dist/lib/user-profile/user-profile.component.js +298 -23
  30. package/dist/lib/user-profile/user-profile.component.js.map +1 -1
  31. package/dist/module.d.ts +22 -24
  32. package/dist/module.d.ts.map +1 -1
  33. package/dist/module.js +0 -8
  34. package/dist/module.js.map +1 -1
  35. package/dist/public-api.d.ts +1 -0
  36. package/dist/public-api.d.ts.map +1 -1
  37. package/dist/public-api.js +2 -0
  38. package/dist/public-api.js.map +1 -1
  39. package/package.json +35 -37
@@ -7,49 +7,45 @@ import { MJNotificationService } from '@memberjunction/ng-notifications';
7
7
  import * as i0 from "@angular/core";
8
8
  import * as i1 from "@memberjunction/ng-shared";
9
9
  import * as i2 from "@angular/router";
10
- import * as i3 from "@angular/common";
11
- import * as i4 from "@angular/forms";
12
- import * as i5 from "@progress/kendo-angular-buttons";
13
- import * as i6 from "@progress/kendo-angular-inputs";
14
- import * as i7 from "@progress/kendo-angular-listview";
15
- import * as i8 from "@progress/kendo-angular-dropdowns";
10
+ import * as i3 from "@angular/forms";
11
+ import * as i4 from "@angular/common";
16
12
  const _c0 = ["allRadio"];
17
13
  const _c1 = ["unreadRadio"];
18
14
  const _c2 = ["readRadio"];
19
- const _c3 = () => ({ ID: null, Name: "All Types" });
20
- function UserNotificationsComponent_div_8_button_1_Template(rf, ctx) { if (rf & 1) {
15
+ const _forTrack0 = ($index, $item) => $item.ID;
16
+ function UserNotificationsComponent_Conditional_8_Conditional_1_Template(rf, ctx) { if (rf & 1) {
21
17
  const _r1 = i0.ɵɵgetCurrentView();
22
- i0.ɵɵelementStart(0, "button", 18);
23
- i0.ɵɵlistener("click", function UserNotificationsComponent_div_8_button_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.markAllAsRead()); });
24
- i0.ɵɵelement(1, "i", 19);
25
- i0.ɵɵelementStart(2, "span", 20);
18
+ i0.ɵɵelementStart(0, "button", 16);
19
+ i0.ɵɵlistener("click", function UserNotificationsComponent_Conditional_8_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.markAllAsRead()); });
20
+ i0.ɵɵelement(1, "i", 17);
21
+ i0.ɵɵelementStart(2, "span", 18);
26
22
  i0.ɵɵtext(3, "Mark All Read");
27
23
  i0.ɵɵelementEnd()();
28
24
  } }
29
- function UserNotificationsComponent_div_8_button_2_Template(rf, ctx) { if (rf & 1) {
25
+ function UserNotificationsComponent_Conditional_8_Conditional_2_Template(rf, ctx) { if (rf & 1) {
30
26
  const _r3 = i0.ɵɵgetCurrentView();
31
- i0.ɵɵelementStart(0, "button", 21);
32
- i0.ɵɵlistener("click", function UserNotificationsComponent_div_8_button_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.markAllAsUnread()); });
33
- i0.ɵɵelement(1, "i", 22);
34
- i0.ɵɵelementStart(2, "span", 20);
27
+ i0.ɵɵelementStart(0, "button", 19);
28
+ i0.ɵɵlistener("click", function UserNotificationsComponent_Conditional_8_Conditional_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.markAllAsUnread()); });
29
+ i0.ɵɵelement(1, "i", 20);
30
+ i0.ɵɵelementStart(2, "span", 18);
35
31
  i0.ɵɵtext(3, "Mark All Unread");
36
32
  i0.ɵɵelementEnd()();
37
33
  } }
38
- function UserNotificationsComponent_div_8_Template(rf, ctx) { if (rf & 1) {
39
- i0.ɵɵelementStart(0, "div", 15);
40
- i0.ɵɵtemplate(1, UserNotificationsComponent_div_8_button_1_Template, 4, 0, "button", 16)(2, UserNotificationsComponent_div_8_button_2_Template, 4, 0, "button", 17);
34
+ function UserNotificationsComponent_Conditional_8_Template(rf, ctx) { if (rf & 1) {
35
+ i0.ɵɵelementStart(0, "div", 9);
36
+ i0.ɵɵtemplate(1, UserNotificationsComponent_Conditional_8_Conditional_1_Template, 4, 0, "button", 14)(2, UserNotificationsComponent_Conditional_8_Conditional_2_Template, 4, 0, "button", 15);
41
37
  i0.ɵɵelementEnd();
42
38
  } if (rf & 2) {
43
39
  const ctx_r1 = i0.ɵɵnextContext();
44
40
  i0.ɵɵadvance();
45
- i0.ɵɵproperty("ngIf", ctx_r1.UnreadNotifications.length > 0);
41
+ i0.ɵɵconditional(ctx_r1.UnreadNotifications.length > 0 ? 1 : -1);
46
42
  i0.ɵɵadvance();
47
- i0.ɵɵproperty("ngIf", ctx_r1.ReadNotifications.length > 0);
43
+ i0.ɵɵconditional(ctx_r1.ReadNotifications.length > 0 ? 2 : -1);
48
44
  } }
49
- function UserNotificationsComponent_div_9_button_10_Template(rf, ctx) { if (rf & 1) {
45
+ function UserNotificationsComponent_Conditional_9_Conditional_13_Template(rf, ctx) { if (rf & 1) {
50
46
  const _r5 = i0.ɵɵgetCurrentView();
51
- i0.ɵɵelementStart(0, "button", 25);
52
- i0.ɵɵlistener("click", function UserNotificationsComponent_div_9_button_10_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.selectReadOption("Unread")); });
47
+ i0.ɵɵelementStart(0, "button", 38);
48
+ i0.ɵɵlistener("click", function UserNotificationsComponent_Conditional_9_Conditional_13_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.selectReadOption("Unread")); });
53
49
  i0.ɵɵelementStart(1, "span", 26);
54
50
  i0.ɵɵtext(2, "Unread");
55
51
  i0.ɵɵelementEnd();
@@ -59,15 +55,16 @@ function UserNotificationsComponent_div_9_button_10_Template(rf, ctx) { if (rf &
59
55
  } if (rf & 2) {
60
56
  const ctx_r1 = i0.ɵɵnextContext(2);
61
57
  i0.ɵɵclassProp("active", ctx_r1.radioSelected === "Unread")("has-unread", ctx_r1.UnreadNotifications.length > 0);
58
+ i0.ɵɵattribute("aria-pressed", ctx_r1.radioSelected === "Unread");
62
59
  i0.ɵɵadvance(3);
63
60
  i0.ɵɵclassProp("unread-count", ctx_r1.UnreadNotifications.length > 0);
64
61
  i0.ɵɵadvance();
65
62
  i0.ɵɵtextInterpolate1(" ", ctx_r1.UnreadNotifications.length, " ");
66
63
  } }
67
- function UserNotificationsComponent_div_9_button_13_Template(rf, ctx) { if (rf & 1) {
64
+ function UserNotificationsComponent_Conditional_9_Conditional_16_Template(rf, ctx) { if (rf & 1) {
68
65
  const _r6 = i0.ɵɵgetCurrentView();
69
- i0.ɵɵelementStart(0, "button", 25);
70
- i0.ɵɵlistener("click", function UserNotificationsComponent_div_9_button_13_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.selectReadOption("Read")); });
66
+ i0.ɵɵelementStart(0, "button", 39);
67
+ i0.ɵɵlistener("click", function UserNotificationsComponent_Conditional_9_Conditional_16_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.selectReadOption("Read")); });
71
68
  i0.ɵɵelementStart(1, "span", 26);
72
69
  i0.ɵɵtext(2, "Read");
73
70
  i0.ɵɵelementEnd();
@@ -77,61 +74,42 @@ function UserNotificationsComponent_div_9_button_13_Template(rf, ctx) { if (rf &
77
74
  } if (rf & 2) {
78
75
  const ctx_r1 = i0.ɵɵnextContext(2);
79
76
  i0.ɵɵclassProp("active", ctx_r1.radioSelected === "Read");
77
+ i0.ɵɵattribute("aria-pressed", ctx_r1.radioSelected === "Read");
80
78
  i0.ɵɵadvance(4);
81
79
  i0.ɵɵtextInterpolate(ctx_r1.ReadNotifications.length);
82
80
  } }
83
- function UserNotificationsComponent_div_9_Template(rf, ctx) { if (rf & 1) {
84
- const _r4 = i0.ɵɵgetCurrentView();
85
- i0.ɵɵelementStart(0, "div", 23)(1, "input", 24, 0);
86
- i0.ɵɵlistener("change", function UserNotificationsComponent_div_9_Template_input_change_1_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onReadRadioChanged($event)); });
87
- i0.ɵɵelementEnd();
88
- i0.ɵɵelementStart(3, "button", 25);
89
- i0.ɵɵlistener("click", function UserNotificationsComponent_div_9_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.selectReadOption("All")); });
90
- i0.ɵɵelementStart(4, "span", 26);
91
- i0.ɵɵtext(5, "All");
92
- i0.ɵɵelementEnd();
93
- i0.ɵɵelementStart(6, "span", 27);
94
- i0.ɵɵtext(7);
95
- i0.ɵɵelementEnd()();
96
- i0.ɵɵelementStart(8, "input", 28, 1);
97
- i0.ɵɵlistener("change", function UserNotificationsComponent_div_9_Template_input_change_8_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onReadRadioChanged($event)); });
98
- i0.ɵɵelementEnd();
99
- i0.ɵɵtemplate(10, UserNotificationsComponent_div_9_button_10_Template, 5, 7, "button", 29);
100
- i0.ɵɵelementStart(11, "input", 30, 2);
101
- i0.ɵɵlistener("change", function UserNotificationsComponent_div_9_Template_input_change_11_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onReadRadioChanged($event)); });
102
- i0.ɵɵelementEnd();
103
- i0.ɵɵtemplate(13, UserNotificationsComponent_div_9_button_13_Template, 5, 3, "button", 31);
81
+ function UserNotificationsComponent_Conditional_9_Conditional_17_For_5_Template(rf, ctx) { if (rf & 1) {
82
+ i0.ɵɵelementStart(0, "option", 41);
83
+ i0.ɵɵtext(1);
104
84
  i0.ɵɵelementEnd();
105
85
  } if (rf & 2) {
106
- const ctx_r1 = i0.ɵɵnextContext();
107
- i0.ɵɵadvance(3);
108
- i0.ɵɵclassProp("active", ctx_r1.radioSelected === "All");
109
- i0.ɵɵadvance(4);
110
- i0.ɵɵtextInterpolate(ctx_r1.AllNotifications.length);
111
- i0.ɵɵadvance(3);
112
- i0.ɵɵproperty("ngIf", ctx_r1.UnreadNotifications.length > 0 || ctx_r1.ReadNotifications.length === 0);
113
- i0.ɵɵadvance(3);
114
- i0.ɵɵproperty("ngIf", ctx_r1.ReadNotifications.length > 0 || ctx_r1.UnreadNotifications.length === 0);
86
+ const type_r8 = ctx.$implicit;
87
+ i0.ɵɵproperty("value", type_r8.ID);
88
+ i0.ɵɵadvance();
89
+ i0.ɵɵtextInterpolate(type_r8.Name);
115
90
  } }
116
- function UserNotificationsComponent_div_10_div_2_Template(rf, ctx) { if (rf & 1) {
117
- const _r8 = i0.ɵɵgetCurrentView();
118
- i0.ɵɵelementStart(0, "div", 39)(1, "kendo-dropdownlist", 40);
119
- i0.ɵɵtwoWayListener("ngModelChange", function UserNotificationsComponent_div_10_div_2_Template_kendo_dropdownlist_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.selectedTypeFilter, $event) || (ctx_r1.selectedTypeFilter = $event); return i0.ɵɵresetView($event); });
120
- i0.ɵɵlistener("valueChange", function UserNotificationsComponent_div_10_div_2_Template_kendo_dropdownlist_valueChange_1_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onTypeFilterChange($event)); });
91
+ function UserNotificationsComponent_Conditional_9_Conditional_17_Template(rf, ctx) { if (rf & 1) {
92
+ const _r7 = i0.ɵɵgetCurrentView();
93
+ i0.ɵɵelementStart(0, "div", 32)(1, "select", 40);
94
+ i0.ɵɵtwoWayListener("ngModelChange", function UserNotificationsComponent_Conditional_9_Conditional_17_Template_select_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.selectedTypeFilter, $event) || (ctx_r1.selectedTypeFilter = $event); return i0.ɵɵresetView($event); });
95
+ i0.ɵɵlistener("change", function UserNotificationsComponent_Conditional_9_Conditional_17_Template_select_change_1_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onTypeFilterChange(ctx_r1.selectedTypeFilter)); });
96
+ i0.ɵɵelementStart(2, "option", 41);
97
+ i0.ɵɵtext(3, "All Types");
98
+ i0.ɵɵelementEnd();
99
+ i0.ɵɵrepeaterCreate(4, UserNotificationsComponent_Conditional_9_Conditional_17_For_5_Template, 2, 2, "option", 41, _forTrack0);
121
100
  i0.ɵɵelementEnd()();
122
101
  } if (rf & 2) {
123
102
  const ctx_r1 = i0.ɵɵnextContext(2);
124
103
  i0.ɵɵadvance();
125
- i0.ɵɵproperty("data", ctx_r1.notificationTypes)("valuePrimitive", true);
126
104
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.selectedTypeFilter);
127
- i0.ɵɵproperty("defaultItem", i0.ɵɵpureFunction0(4, _c3));
128
- } }
129
- function UserNotificationsComponent_div_10_ng_template_5_Template(rf, ctx) { if (rf & 1) {
130
- i0.ɵɵelement(0, "i", 41);
105
+ i0.ɵɵadvance();
106
+ i0.ɵɵproperty("value", null);
107
+ i0.ɵɵadvance(2);
108
+ i0.ɵɵrepeater(ctx_r1.notificationTypes);
131
109
  } }
132
- function UserNotificationsComponent_div_10_div_6_Template(rf, ctx) { if (rf & 1) {
133
- i0.ɵɵelementStart(0, "div", 42)(1, "span", 43);
134
- i0.ɵɵelement(2, "i", 44);
110
+ function UserNotificationsComponent_Conditional_9_Conditional_22_Template(rf, ctx) { if (rf & 1) {
111
+ i0.ɵɵelementStart(0, "div", 37)(1, "span", 42);
112
+ i0.ɵɵelement(2, "i", 43);
135
113
  i0.ɵɵtext(3);
136
114
  i0.ɵɵelementEnd()();
137
115
  } if (rf & 2) {
@@ -139,26 +117,58 @@ function UserNotificationsComponent_div_10_div_6_Template(rf, ctx) { if (rf & 1)
139
117
  i0.ɵɵadvance(3);
140
118
  i0.ɵɵtextInterpolate2(" Showing ", ctx_r1.NotificationsToShow.length, " of ", ctx_r1.AllNotifications.length, " ");
141
119
  } }
142
- function UserNotificationsComponent_div_10_Template(rf, ctx) { if (rf & 1) {
143
- const _r7 = i0.ɵɵgetCurrentView();
144
- i0.ɵɵelementStart(0, "div", 32)(1, "div", 33);
145
- i0.ɵɵtemplate(2, UserNotificationsComponent_div_10_div_2_Template, 2, 5, "div", 34);
146
- i0.ɵɵelementStart(3, "div", 35)(4, "kendo-textbox", 36);
147
- i0.ɵɵlistener("valueChange", function UserNotificationsComponent_div_10_Template_kendo_textbox_valueChange_4_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onFilterChanged($event)); });
148
- i0.ɵɵtemplate(5, UserNotificationsComponent_div_10_ng_template_5_Template, 1, 0, "ng-template", 37);
120
+ function UserNotificationsComponent_Conditional_9_Template(rf, ctx) { if (rf & 1) {
121
+ const _r4 = i0.ɵɵgetCurrentView();
122
+ i0.ɵɵelementStart(0, "div", 10)(1, "div", 21)(2, "div", 22)(3, "div", 23)(4, "input", 24, 0);
123
+ i0.ɵɵlistener("change", function UserNotificationsComponent_Conditional_9_Template_input_change_4_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onReadRadioChanged($event)); });
124
+ i0.ɵɵelementEnd();
125
+ i0.ɵɵelementStart(6, "button", 25);
126
+ i0.ɵɵlistener("click", function UserNotificationsComponent_Conditional_9_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.selectReadOption("All")); });
127
+ i0.ɵɵelementStart(7, "span", 26);
128
+ i0.ɵɵtext(8, "All");
129
+ i0.ɵɵelementEnd();
130
+ i0.ɵɵelementStart(9, "span", 27);
131
+ i0.ɵɵtext(10);
132
+ i0.ɵɵelementEnd()();
133
+ i0.ɵɵelementStart(11, "input", 28, 1);
134
+ i0.ɵɵlistener("change", function UserNotificationsComponent_Conditional_9_Template_input_change_11_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onReadRadioChanged($event)); });
135
+ i0.ɵɵelementEnd();
136
+ i0.ɵɵtemplate(13, UserNotificationsComponent_Conditional_9_Conditional_13_Template, 5, 8, "button", 29);
137
+ i0.ɵɵelementStart(14, "input", 30, 2);
138
+ i0.ɵɵlistener("change", function UserNotificationsComponent_Conditional_9_Template_input_change_14_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onReadRadioChanged($event)); });
139
+ i0.ɵɵelementEnd();
140
+ i0.ɵɵtemplate(16, UserNotificationsComponent_Conditional_9_Conditional_16_Template, 5, 4, "button", 31);
141
+ i0.ɵɵelementEnd();
142
+ i0.ɵɵtemplate(17, UserNotificationsComponent_Conditional_9_Conditional_17_Template, 6, 2, "div", 32);
143
+ i0.ɵɵelementEnd()();
144
+ i0.ɵɵelementStart(18, "div", 33)(19, "div", 34);
145
+ i0.ɵɵelement(20, "i", 35);
146
+ i0.ɵɵelementStart(21, "input", 36);
147
+ i0.ɵɵlistener("input", function UserNotificationsComponent_Conditional_9_Template_input_input_21_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onFilterChanged($event.target.value)); });
149
148
  i0.ɵɵelementEnd()()();
150
- i0.ɵɵtemplate(6, UserNotificationsComponent_div_10_div_6_Template, 4, 2, "div", 38);
149
+ i0.ɵɵtemplate(22, UserNotificationsComponent_Conditional_9_Conditional_22_Template, 4, 2, "div", 37);
151
150
  i0.ɵɵelementEnd();
152
151
  } if (rf & 2) {
153
152
  const ctx_r1 = i0.ɵɵnextContext();
154
- i0.ɵɵadvance(2);
155
- i0.ɵɵproperty("ngIf", ctx_r1.notificationTypes.length > 0);
153
+ i0.ɵɵadvance(6);
154
+ i0.ɵɵclassProp("active", ctx_r1.radioSelected === "All");
155
+ i0.ɵɵattribute("aria-pressed", ctx_r1.radioSelected === "All");
156
156
  i0.ɵɵadvance(4);
157
- i0.ɵɵproperty("ngIf", ctx_r1.NotificationsToShow.length !== ctx_r1.AllNotifications.length);
157
+ i0.ɵɵtextInterpolate(ctx_r1.AllNotifications.length);
158
+ i0.ɵɵadvance(3);
159
+ i0.ɵɵconditional(ctx_r1.UnreadNotifications.length > 0 || ctx_r1.ReadNotifications.length === 0 ? 13 : -1);
160
+ i0.ɵɵadvance(3);
161
+ i0.ɵɵconditional(ctx_r1.ReadNotifications.length > 0 || ctx_r1.UnreadNotifications.length === 0 ? 16 : -1);
162
+ i0.ɵɵadvance();
163
+ i0.ɵɵconditional(ctx_r1.notificationTypes.length > 0 ? 17 : -1);
164
+ i0.ɵɵadvance(4);
165
+ i0.ɵɵproperty("value", ctx_r1.currentFilter);
166
+ i0.ɵɵadvance();
167
+ i0.ɵɵconditional(ctx_r1.NotificationsToShow.length !== ctx_r1.AllNotifications.length ? 22 : -1);
158
168
  } }
159
- function UserNotificationsComponent_Conditional_12_Template(rf, ctx) { if (rf & 1) {
160
- i0.ɵɵelementStart(0, "div", 13)(1, "div", 45);
161
- i0.ɵɵelement(2, "i", 46);
169
+ function UserNotificationsComponent_Conditional_11_Template(rf, ctx) { if (rf & 1) {
170
+ i0.ɵɵelementStart(0, "div", 12)(1, "div", 44);
171
+ i0.ɵɵelement(2, "i", 45);
162
172
  i0.ɵɵelementEnd();
163
173
  i0.ɵɵelementStart(3, "h3");
164
174
  i0.ɵɵtext(4, "No Notifications");
@@ -167,9 +177,9 @@ function UserNotificationsComponent_Conditional_12_Template(rf, ctx) { if (rf &
167
177
  i0.ɵɵtext(6, "You're all caught up! New notifications will appear here.");
168
178
  i0.ɵɵelementEnd()();
169
179
  } }
170
- function UserNotificationsComponent_Conditional_13_Template(rf, ctx) { if (rf & 1) {
171
- i0.ɵɵelementStart(0, "div", 13)(1, "div", 45);
172
- i0.ɵɵelement(2, "i", 47);
180
+ function UserNotificationsComponent_Conditional_12_Template(rf, ctx) { if (rf & 1) {
181
+ i0.ɵɵelementStart(0, "div", 12)(1, "div", 44);
182
+ i0.ɵɵelement(2, "i", 46);
173
183
  i0.ɵɵelementEnd();
174
184
  i0.ɵɵelementStart(3, "h3");
175
185
  i0.ɵɵtext(4, "No Matching Notifications");
@@ -178,83 +188,92 @@ function UserNotificationsComponent_Conditional_13_Template(rf, ctx) { if (rf &
178
188
  i0.ɵɵtext(6, "Try adjusting your filters to see more notifications.");
179
189
  i0.ɵɵelementEnd()();
180
190
  } }
181
- function UserNotificationsComponent_Conditional_14_ng_template_1_button_18_Template(rf, ctx) { if (rf & 1) {
191
+ function UserNotificationsComponent_Conditional_13_For_2_Conditional_19_Template(rf, ctx) { if (rf & 1) {
182
192
  const _r11 = i0.ɵɵgetCurrentView();
183
- i0.ɵɵelementStart(0, "button", 63);
184
- i0.ɵɵlistener("click", function UserNotificationsComponent_Conditional_14_ng_template_1_button_18_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r11); const dataItem_r10 = i0.ɵɵnextContext().dataItem; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.markAsRead(dataItem_r10, true, null)); });
185
- i0.ɵɵelement(1, "i", 64);
186
- i0.ɵɵelementStart(2, "span", 65);
193
+ i0.ɵɵelementStart(0, "button", 62);
194
+ i0.ɵɵlistener("click", function UserNotificationsComponent_Conditional_13_For_2_Conditional_19_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r11); const notification_r10 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.markAsRead(notification_r10, true, null)); });
195
+ i0.ɵɵelement(1, "i", 63);
196
+ i0.ɵɵelementStart(2, "span", 64);
187
197
  i0.ɵɵtext(3, "Read");
188
198
  i0.ɵɵelementEnd()();
199
+ } if (rf & 2) {
200
+ const notification_r10 = i0.ɵɵnextContext().$implicit;
201
+ i0.ɵɵattribute("aria-label", "Mark " + notification_r10.Title + " as read");
189
202
  } }
190
- function UserNotificationsComponent_Conditional_14_ng_template_1_button_19_Template(rf, ctx) { if (rf & 1) {
203
+ function UserNotificationsComponent_Conditional_13_For_2_Conditional_20_Template(rf, ctx) { if (rf & 1) {
191
204
  const _r12 = i0.ɵɵgetCurrentView();
192
- i0.ɵɵelementStart(0, "button", 66);
193
- i0.ɵɵlistener("click", function UserNotificationsComponent_Conditional_14_ng_template_1_button_19_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r12); const dataItem_r10 = i0.ɵɵnextContext().dataItem; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.markAsRead(dataItem_r10, false, null)); });
194
- i0.ɵɵelement(1, "i", 22);
195
- i0.ɵɵelementStart(2, "span", 65);
205
+ i0.ɵɵelementStart(0, "button", 65);
206
+ i0.ɵɵlistener("click", function UserNotificationsComponent_Conditional_13_For_2_Conditional_20_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r12); const notification_r10 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.markAsRead(notification_r10, false, null)); });
207
+ i0.ɵɵelement(1, "i", 20);
208
+ i0.ɵɵelementStart(2, "span", 64);
196
209
  i0.ɵɵtext(3, "Unread");
197
210
  i0.ɵɵelementEnd()();
211
+ } if (rf & 2) {
212
+ const notification_r10 = i0.ɵɵnextContext().$implicit;
213
+ i0.ɵɵattribute("aria-label", "Mark " + notification_r10.Title + " as unread");
198
214
  } }
199
- function UserNotificationsComponent_Conditional_14_ng_template_1_Template(rf, ctx) { if (rf & 1) {
215
+ function UserNotificationsComponent_Conditional_13_For_2_Template(rf, ctx) { if (rf & 1) {
200
216
  const _r9 = i0.ɵɵgetCurrentView();
201
- i0.ɵɵelementStart(0, "div", 49);
202
- i0.ɵɵelement(1, "div", 50);
203
- i0.ɵɵelementStart(2, "div", 51);
217
+ i0.ɵɵelementStart(0, "article", 48);
218
+ i0.ɵɵelement(1, "div", 49);
219
+ i0.ɵɵelementStart(2, "div", 50);
204
220
  i0.ɵɵelement(3, "i");
205
221
  i0.ɵɵelementEnd();
206
- i0.ɵɵelementStart(4, "div", 52);
207
- i0.ɵɵlistener("click", function UserNotificationsComponent_Conditional_14_ng_template_1_Template_div_click_4_listener() { const dataItem_r10 = i0.ɵɵrestoreView(_r9).dataItem; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.notificationClicked(dataItem_r10)); });
208
- i0.ɵɵelementStart(5, "div", 53)(6, "h3", 54);
222
+ i0.ɵɵelementStart(4, "div", 51);
223
+ i0.ɵɵlistener("click", function UserNotificationsComponent_Conditional_13_For_2_Template_div_click_4_listener() { const notification_r10 = i0.ɵɵrestoreView(_r9).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.notificationClicked(notification_r10)); });
224
+ i0.ɵɵelementStart(5, "div", 52)(6, "h3", 53);
209
225
  i0.ɵɵtext(7);
210
226
  i0.ɵɵelementEnd();
211
- i0.ɵɵelementStart(8, "span", 55);
212
- i0.ɵɵelement(9, "i", 56);
213
- i0.ɵɵtext(10);
214
- i0.ɵɵpipe(11, "date");
215
- i0.ɵɵelementEnd()();
216
- i0.ɵɵelementStart(12, "div", 57)(13, "span", 58);
217
- i0.ɵɵtext(14);
227
+ i0.ɵɵelementStart(8, "span", 54);
228
+ i0.ɵɵelement(9, "i", 55);
229
+ i0.ɵɵelementStart(10, "time");
230
+ i0.ɵɵtext(11);
231
+ i0.ɵɵpipe(12, "date");
232
+ i0.ɵɵelementEnd()()();
233
+ i0.ɵɵelementStart(13, "div", 56)(14, "span", 57);
234
+ i0.ɵɵtext(15);
218
235
  i0.ɵɵelementEnd()();
219
- i0.ɵɵelementStart(15, "p", 59);
220
- i0.ɵɵtext(16);
236
+ i0.ɵɵelementStart(16, "p", 58);
237
+ i0.ɵɵtext(17);
221
238
  i0.ɵɵelementEnd()();
222
- i0.ɵɵelementStart(17, "div", 60);
223
- i0.ɵɵtemplate(18, UserNotificationsComponent_Conditional_14_ng_template_1_button_18_Template, 4, 0, "button", 61)(19, UserNotificationsComponent_Conditional_14_ng_template_1_button_19_Template, 4, 0, "button", 62);
239
+ i0.ɵɵelementStart(18, "div", 59);
240
+ i0.ɵɵtemplate(19, UserNotificationsComponent_Conditional_13_For_2_Conditional_19_Template, 4, 1, "button", 60)(20, UserNotificationsComponent_Conditional_13_For_2_Conditional_20_Template, 4, 1, "button", 61);
224
241
  i0.ɵɵelementEnd()();
225
242
  } if (rf & 2) {
226
- const dataItem_r10 = ctx.dataItem;
243
+ const notification_r10 = ctx.$implicit;
227
244
  const ctx_r1 = i0.ɵɵnextContext(2);
228
- i0.ɵɵclassProp("unread", dataItem_r10.Unread)("clickable", ctx_r1.isNotificationClickable(dataItem_r10));
245
+ i0.ɵɵclassProp("unread", notification_r10.Unread)("clickable", ctx_r1.isNotificationClickable(notification_r10));
246
+ i0.ɵɵattribute("aria-label", notification_r10.Title);
229
247
  i0.ɵɵadvance(2);
230
- i0.ɵɵstyleProp("background-color", ctx_r1.getTypeColor(dataItem_r10) + "15");
248
+ i0.ɵɵstyleProp("background-color", ctx_r1.getTypeColor(notification_r10) + "15");
231
249
  i0.ɵɵadvance();
232
- i0.ɵɵclassMap("fa-solid " + ctx_r1.getTypeIcon(dataItem_r10));
233
- i0.ɵɵstyleProp("color", ctx_r1.getTypeColor(dataItem_r10));
250
+ i0.ɵɵclassMap("fa-solid " + ctx_r1.getTypeIcon(notification_r10));
251
+ i0.ɵɵstyleProp("color", ctx_r1.getTypeColor(notification_r10));
234
252
  i0.ɵɵadvance(3);
235
- i0.ɵɵclassProp("card-title-unread", dataItem_r10.Unread);
253
+ i0.ɵɵclassProp("card-title-unread", notification_r10.Unread);
236
254
  i0.ɵɵadvance();
237
- i0.ɵɵtextInterpolate1(" ", dataItem_r10.Title, " ");
255
+ i0.ɵɵtextInterpolate1(" ", notification_r10.Title, " ");
238
256
  i0.ɵɵadvance(3);
239
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(11, 22, dataItem_r10.__mj_CreatedAt, "MMM d, h:mm a"), " ");
257
+ i0.ɵɵattribute("datetime", notification_r10.__mj_CreatedAt);
258
+ i0.ɵɵadvance();
259
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(12, 23, notification_r10.__mj_CreatedAt, "MMM d, h:mm a"), " ");
240
260
  i0.ɵɵadvance(3);
241
- i0.ɵɵstyleProp("background-color", ctx_r1.getTypeColor(dataItem_r10) + "15")("color", ctx_r1.getTypeColor(dataItem_r10));
261
+ i0.ɵɵstyleProp("background-color", ctx_r1.getTypeColor(notification_r10) + "15")("color", ctx_r1.getTypeColor(notification_r10));
242
262
  i0.ɵɵadvance();
243
- i0.ɵɵtextInterpolate1(" ", ctx_r1.getTypeName(dataItem_r10), " ");
263
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.getTypeName(notification_r10), " ");
244
264
  i0.ɵɵadvance(2);
245
- i0.ɵɵtextInterpolate(dataItem_r10.Message);
265
+ i0.ɵɵtextInterpolate(notification_r10.Message);
246
266
  i0.ɵɵadvance(2);
247
- i0.ɵɵproperty("ngIf", dataItem_r10.Unread);
248
- i0.ɵɵadvance();
249
- i0.ɵɵproperty("ngIf", !dataItem_r10.Unread);
267
+ i0.ɵɵconditional(notification_r10.Unread ? 19 : 20);
250
268
  } }
251
- function UserNotificationsComponent_Conditional_14_Template(rf, ctx) { if (rf & 1) {
252
- i0.ɵɵelementStart(0, "kendo-listview", 14);
253
- i0.ɵɵtemplate(1, UserNotificationsComponent_Conditional_14_ng_template_1_Template, 20, 25, "ng-template", 48);
269
+ function UserNotificationsComponent_Conditional_13_Template(rf, ctx) { if (rf & 1) {
270
+ i0.ɵɵelementStart(0, "div", 13);
271
+ i0.ɵɵrepeaterCreate(1, UserNotificationsComponent_Conditional_13_For_2_Template, 21, 26, "article", 47, _forTrack0);
254
272
  i0.ɵɵelementEnd();
255
273
  } if (rf & 2) {
256
274
  const ctx_r1 = i0.ɵɵnextContext();
257
- i0.ɵɵproperty("data", ctx_r1.NotificationsToShow);
275
+ i0.ɵɵadvance();
276
+ i0.ɵɵrepeater(ctx_r1.NotificationsToShow);
258
277
  } }
259
278
  export class UserNotificationsComponent {
260
279
  sharedService;
@@ -548,34 +567,32 @@ export class UserNotificationsComponent {
548
567
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.allRadio = _t.first);
549
568
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.unreadRadio = _t.first);
550
569
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.readRadio = _t.first);
551
- } }, decls: 15, vars: 4, consts: [["allRadio", ""], ["unreadRadio", ""], ["readRadio", ""], [1, "notifications-container"], [1, "notifications-header"], [1, "header-top"], [1, "header-title"], [1, "title-icon"], [1, "fa-solid", "fa-bell"], ["class", "header-actions", 4, "ngIf"], ["class", "header-stats", 4, "ngIf"], ["class", "header-toolbar", 4, "ngIf"], [1, "notifications-content"], [1, "empty-state"], [1, "notifications-list", 3, "data"], [1, "header-actions"], ["kendoButton", "", "class", "action-btn action-btn-primary", 3, "click", 4, "ngIf"], ["kendoButton", "", "class", "action-btn", 3, "click", 4, "ngIf"], ["kendoButton", "", 1, "action-btn", "action-btn-primary", 3, "click"], [1, "fa-solid", "fa-check-double"], [1, "btn-text"], ["kendoButton", "", 1, "action-btn", 3, "click"], [1, "fa-solid", "fa-envelope"], [1, "header-stats"], ["type", "radio", "name", "UnreadStatus", "value", "All", "checked", "", 1, "hidden-radio", 3, "change"], [1, "stat-pill", 3, "click"], [1, "stat-label"], [1, "stat-count"], ["type", "radio", "name", "UnreadStatus", "value", "Unread", 1, "hidden-radio", 3, "change"], ["class", "stat-pill", 3, "active", "has-unread", "click", 4, "ngIf"], ["type", "radio", "name", "UnreadStatus", "value", "Read", 1, "hidden-radio", 3, "change"], ["class", "stat-pill", 3, "active", "click", 4, "ngIf"], [1, "header-toolbar"], [1, "toolbar-filters"], ["class", "filter-item type-filter", 4, "ngIf"], [1, "filter-item", "search-filter"], ["placeholder", "Search notifications...", 1, "search-input", 3, "valueChange"], ["kendoTextBoxSuffixTemplate", ""], ["class", "toolbar-info", 4, "ngIf"], [1, "filter-item", "type-filter"], ["textField", "Name", "valueField", "ID", 1, "type-dropdown", 3, "ngModelChange", "valueChange", "data", "valuePrimitive", "ngModel", "defaultItem"], [1, "fa-solid", "fa-magnifying-glass", "search-icon"], [1, "toolbar-info"], [1, "filter-badge"], [1, "fa-solid", "fa-filter"], [1, "empty-icon"], [1, "fa-solid", "fa-bell-slash"], [1, "fa-solid", "fa-filter-circle-xmark"], ["kendoListViewItemTemplate", ""], [1, "notification-card"], [1, "card-indicator"], [1, "card-icon"], [1, "card-content", 3, "click"], [1, "card-header"], [1, "card-title"], [1, "card-time"], [1, "fa-regular", "fa-clock"], [1, "card-meta"], [1, "card-type"], [1, "card-message"], [1, "card-actions"], ["kendoButton", "", "class", "card-action-btn", "title", "Mark as Read", 3, "click", 4, "ngIf"], ["kendoButton", "", "class", "card-action-btn", "title", "Mark as Unread", 3, "click", 4, "ngIf"], ["kendoButton", "", "title", "Mark as Read", 1, "card-action-btn", 3, "click"], [1, "fa-solid", "fa-check"], [1, "action-text"], ["kendoButton", "", "title", "Mark as Unread", 1, "card-action-btn", 3, "click"]], template: function UserNotificationsComponent_Template(rf, ctx) { if (rf & 1) {
570
+ } }, decls: 14, vars: 3, consts: [["allRadio", ""], ["unreadRadio", ""], ["readRadio", ""], [1, "notifications-container"], [1, "notifications-header"], [1, "header-top"], [1, "header-title"], [1, "title-icon"], [1, "fa-solid", "fa-bell"], [1, "header-actions"], [1, "filters-section"], [1, "notifications-content"], [1, "empty-state"], [1, "notifications-list"], ["type", "button", "aria-label", "Mark all notifications as read", 1, "action-btn", "action-btn-ghost"], ["type", "button", "aria-label", "Mark all notifications as unread", 1, "action-btn", "action-btn-secondary"], ["type", "button", "aria-label", "Mark all notifications as read", 1, "action-btn", "action-btn-ghost", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-check-double"], [1, "btn-text"], ["type", "button", "aria-label", "Mark all notifications as unread", 1, "action-btn", "action-btn-secondary", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-envelope"], [1, "filters-slider"], [1, "slider-content"], ["role", "group", "aria-label", "Filter notifications by read status", 1, "header-stats"], ["type", "radio", "name", "UnreadStatus", "value", "All", "checked", "", "id", "filter-all", 1, "hidden-radio", 3, "change"], ["type", "button", "aria-label", "Show all notifications", 1, "stat-pill", 3, "click"], [1, "stat-label"], [1, "stat-count"], ["type", "radio", "name", "UnreadStatus", "value", "Unread", "id", "filter-unread", 1, "hidden-radio", 3, "change"], ["type", "button", "aria-label", "Show unread notifications", 1, "stat-pill", 3, "active", "has-unread"], ["type", "radio", "name", "UnreadStatus", "value", "Read", "id", "filter-read", 1, "hidden-radio", 3, "change"], ["type", "button", "aria-label", "Show read notifications", 1, "stat-pill", 3, "active"], [1, "filter-item", "type-filter-slider"], [1, "search-section"], [1, "search-container"], ["aria-hidden", "true", 1, "fa-solid", "fa-magnifying-glass", "search-icon"], ["type", "text", "placeholder", "Search notifications...", "aria-label", "Search notifications", 1, "search-input", 3, "input", "value"], [1, "filter-info"], ["type", "button", "aria-label", "Show unread notifications", 1, "stat-pill", 3, "click"], ["type", "button", "aria-label", "Show read notifications", 1, "stat-pill", 3, "click"], ["aria-label", "Filter by notification type", 1, "type-select", 3, "ngModelChange", "change", "ngModel"], [3, "value"], [1, "filter-badge"], ["aria-hidden", "true", 1, "fa-solid", "fa-filter"], [1, "empty-icon"], [1, "fa-solid", "fa-bell-slash"], [1, "fa-solid", "fa-filter-circle-xmark"], ["role", "article", 1, "notification-card", 3, "unread", "clickable"], ["role", "article", 1, "notification-card"], ["aria-hidden", "true", 1, "card-indicator"], ["aria-hidden", "true", 1, "card-icon"], [1, "card-content", 3, "click"], [1, "card-header"], [1, "card-title"], [1, "card-time"], ["aria-hidden", "true", 1, "fa-regular", "fa-clock"], [1, "card-meta"], [1, "card-type"], [1, "card-message"], [1, "card-actions"], ["type", "button", "title", "Mark as Read", 1, "card-action-btn"], ["type", "button", "title", "Mark as Unread", 1, "card-action-btn"], ["type", "button", "title", "Mark as Read", 1, "card-action-btn", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-check"], [1, "action-text"], ["type", "button", "title", "Mark as Unread", 1, "card-action-btn", 3, "click"]], template: function UserNotificationsComponent_Template(rf, ctx) { if (rf & 1) {
552
571
  i0.ɵɵelementStart(0, "div", 3)(1, "div", 4)(2, "div", 5)(3, "div", 6)(4, "div", 7);
553
572
  i0.ɵɵelement(5, "i", 8);
554
573
  i0.ɵɵelementEnd();
555
574
  i0.ɵɵelementStart(6, "h1");
556
575
  i0.ɵɵtext(7, "Notifications");
557
576
  i0.ɵɵelementEnd()();
558
- i0.ɵɵtemplate(8, UserNotificationsComponent_div_8_Template, 3, 2, "div", 9);
577
+ i0.ɵɵtemplate(8, UserNotificationsComponent_Conditional_8_Template, 3, 2, "div", 9);
559
578
  i0.ɵɵelementEnd();
560
- i0.ɵɵtemplate(9, UserNotificationsComponent_div_9_Template, 14, 5, "div", 10)(10, UserNotificationsComponent_div_10_Template, 7, 2, "div", 11);
579
+ i0.ɵɵtemplate(9, UserNotificationsComponent_Conditional_9_Template, 23, 9, "div", 10);
561
580
  i0.ɵɵelementEnd();
562
- i0.ɵɵelementStart(11, "div", 12);
563
- i0.ɵɵtemplate(12, UserNotificationsComponent_Conditional_12_Template, 7, 0, "div", 13)(13, UserNotificationsComponent_Conditional_13_Template, 7, 0, "div", 13)(14, UserNotificationsComponent_Conditional_14_Template, 2, 1, "kendo-listview", 14);
581
+ i0.ɵɵelementStart(10, "div", 11);
582
+ i0.ɵɵtemplate(11, UserNotificationsComponent_Conditional_11_Template, 7, 0, "div", 12)(12, UserNotificationsComponent_Conditional_12_Template, 7, 0, "div", 12)(13, UserNotificationsComponent_Conditional_13_Template, 3, 0, "div", 13);
564
583
  i0.ɵɵelementEnd()();
565
584
  } if (rf & 2) {
566
585
  i0.ɵɵadvance(8);
567
- i0.ɵɵproperty("ngIf", ctx.AllNotifications.length > 0);
568
- i0.ɵɵadvance();
569
- i0.ɵɵproperty("ngIf", ctx.AllNotifications.length > 0);
586
+ i0.ɵɵconditional(ctx.AllNotifications.length > 0 ? 8 : -1);
570
587
  i0.ɵɵadvance();
571
- i0.ɵɵproperty("ngIf", ctx.AllNotifications.length > 0);
588
+ i0.ɵɵconditional(ctx.AllNotifications.length > 0 ? 9 : -1);
572
589
  i0.ɵɵadvance(2);
573
- i0.ɵɵconditional(ctx.NotificationsToShow.length === 0 && ctx.AllNotifications.length === 0 ? 12 : ctx.NotificationsToShow.length === 0 ? 13 : 14);
574
- } }, dependencies: [i3.NgIf, i4.NgControlStatus, i4.NgModel, i5.ButtonComponent, i6.TextBoxComponent, i6.TextBoxSuffixTemplateDirective, i7.ItemTemplateDirective, i7.ListViewComponent, i8.DropDownListComponent, i3.DatePipe], styles: ["\n\n\n\n\n\n\n.notifications-container[_ngcontent-%COMP%] {\n height: 100%;\n max-height: 800px;\n display: flex;\n flex-direction: column;\n background: var(--white-color);\n border-radius: 12px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);\n overflow: hidden;\n}\n\n\n\n\n\n\n.notifications-header[_ngcontent-%COMP%] {\n background: linear-gradient(to bottom, var(--white-color), var(--gray-600));\n border-bottom: 1px solid var(--gray-700);\n padding: 0;\n flex-shrink: 0;\n}\n\n\n\n.header-top[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 20px 24px 16px;\n gap: 16px;\n}\n\n.header-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.title-icon[_ngcontent-%COMP%] {\n width: 44px;\n height: 44px;\n background: linear-gradient(135deg, var(--mj-blue) 0%, #0091d5 100%);\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-shadow: 0 4px 12px rgba(0, 118, 182, 0.3);\n}\n\n.title-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n color: white;\n}\n\n.header-title[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 1.5rem;\n font-weight: 700;\n color: var(--navy);\n margin: 0;\n letter-spacing: -0.02em;\n}\n\n\n\n.header-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.action-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 14px;\n border-radius: 8px;\n font-size: 13px;\n font-weight: 500;\n border: 1px solid var(--gray-700);\n background: var(--white-color);\n color: var(--navy);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.action-btn[_ngcontent-%COMP%]:hover {\n background: var(--gray-600);\n border-color: var(--gray-800);\n}\n\n.action-btn-primary[_ngcontent-%COMP%] {\n background: var(--mj-blue);\n border-color: var(--mj-blue);\n color: white;\n}\n\n.action-btn-primary[_ngcontent-%COMP%]:hover {\n background: #005a8c;\n border-color: #005a8c;\n}\n\n.action-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n\n\n\n\n\n.header-stats[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 0 24px 16px;\n}\n\n.hidden-radio[_ngcontent-%COMP%] {\n position: absolute;\n opacity: 0;\n pointer-events: none;\n}\n\n.stat-pill[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 18px;\n border-radius: 100px;\n border: 1px solid var(--gray-700);\n background: var(--white-color);\n cursor: pointer;\n transition: all 0.2s ease;\n font-family: inherit;\n}\n\n.stat-pill[_ngcontent-%COMP%]:hover:not(.active) {\n background: var(--gray-600);\n border-color: var(--gray-800);\n}\n\n.stat-pill.active[_ngcontent-%COMP%] {\n background: var(--navy);\n border-color: var(--navy);\n color: white;\n box-shadow: 0 2px 8px rgba(9, 35, 64, 0.25);\n}\n\n.stat-label[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n}\n\n.stat-count[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 600;\n padding: 2px 8px;\n border-radius: 100px;\n background: var(--gray-700);\n color: var(--navy);\n min-width: 24px;\n text-align: center;\n}\n\n.stat-pill.active[_ngcontent-%COMP%] .stat-count[_ngcontent-%COMP%] {\n background: rgba(255, 255, 255, 0.2);\n color: white;\n}\n\n.stat-count.unread-count[_ngcontent-%COMP%] {\n background: var(--mj-blue);\n color: white;\n}\n\n.stat-pill.has-unread[_ngcontent-%COMP%]:not(.active) {\n border-color: var(--mj-blue);\n}\n\n\n\n\n\n\n.header-toolbar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 24px 16px;\n gap: 16px;\n background: var(--gray-600);\n border-top: 1px solid var(--gray-700);\n}\n\n.toolbar-filters[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n}\n\n.filter-item[_ngcontent-%COMP%] {\n flex-shrink: 0;\n}\n\n.type-filter[_ngcontent-%COMP%] {\n min-width: 160px;\n}\n\n.type-dropdown[_ngcontent-%COMP%] {\n width: 100%;\n}\n\n.search-filter[_ngcontent-%COMP%] {\n flex: 1;\n max-width: 280px;\n}\n\n.search-input[_ngcontent-%COMP%] {\n width: 100%;\n}\n\n.search-icon[_ngcontent-%COMP%] {\n color: var(--gray-800);\n font-size: 14px;\n}\n\n.toolbar-info[_ngcontent-%COMP%] {\n flex-shrink: 0;\n}\n\n.filter-badge[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: var(--light-blue);\n color: var(--mj-blue);\n border-radius: 6px;\n font-size: 12px;\n font-weight: 500;\n}\n\n.filter-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n}\n\n\n\n\n\n\n.notifications-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 24px;\n text-align: center;\n}\n\n.empty-icon[_ngcontent-%COMP%] {\n width: 80px;\n height: 80px;\n background: var(--gray-600);\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 20px;\n}\n\n.empty-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 32px;\n color: var(--gray-800);\n}\n\n.empty-state[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 600;\n color: var(--navy);\n margin: 0 0 8px;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--gray-800);\n margin: 0;\n max-width: 280px;\n}\n\n\n\n\n\n\n.notifications-list[_ngcontent-%COMP%] {\n border: none;\n background: transparent;\n}\n\n.notifications-list[_ngcontent-%COMP%] .k-listview-content[_ngcontent-%COMP%] {\n padding: 0;\n}\n\n\n\n\n\n\n.notification-card[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 4px 48px 1fr auto;\n gap: 16px;\n align-items: start;\n padding: 20px 24px;\n background: var(--white-color);\n border-bottom: 1px solid var(--gray-700);\n transition: all 0.2s ease;\n position: relative;\n}\n\n.notification-card[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.notification-card[_ngcontent-%COMP%]:hover {\n background: var(--gray-600);\n}\n\n.notification-card.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.notification-card.clickable[_ngcontent-%COMP%]:hover {\n box-shadow: inset 0 0 0 1px var(--gray-700);\n}\n\n\n\n.notification-card.unread[_ngcontent-%COMP%] {\n background: linear-gradient(90deg, rgba(170, 231, 253, 0.4) 0%, var(--white-color) 50%);\n}\n\n.notification-card.unread[_ngcontent-%COMP%]:hover {\n background: linear-gradient(90deg, rgba(170, 231, 253, 0.5) 0%, var(--gray-600) 50%);\n}\n\n\n\n.card-indicator[_ngcontent-%COMP%] {\n width: 4px;\n height: 100%;\n min-height: 60px;\n border-radius: 4px;\n background: transparent;\n transition: background 0.2s ease;\n align-self: stretch;\n}\n\n.notification-card.unread[_ngcontent-%COMP%] .card-indicator[_ngcontent-%COMP%] {\n background: var(--mj-blue);\n box-shadow: 0 0 8px rgba(0, 118, 182, 0.4);\n}\n\n\n\n.card-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n transition: transform 0.2s ease;\n}\n\n.notification-card[_ngcontent-%COMP%]:hover .card-icon[_ngcontent-%COMP%] {\n transform: scale(1.05);\n}\n\n.card-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n}\n\n\n\n.card-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.card-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 12px;\n margin-bottom: 6px;\n}\n\n.card-title[_ngcontent-%COMP%] {\n font-size: 15px;\n font-weight: 500;\n color: var(--navy);\n margin: 0;\n line-height: 1.4;\n word-wrap: break-word;\n}\n\n.card-title-unread[_ngcontent-%COMP%] {\n font-weight: 600;\n}\n\n.notification-card.clickable[_ngcontent-%COMP%] .card-title[_ngcontent-%COMP%] {\n color: var(--mj-blue);\n}\n\n.notification-card.clickable[_ngcontent-%COMP%]:hover .card-title[_ngcontent-%COMP%] {\n text-decoration: underline;\n}\n\n.card-time[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 5px;\n font-size: 12px;\n color: var(--gray-800);\n white-space: nowrap;\n flex-shrink: 0;\n}\n\n.card-time[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n}\n\n\n\n.card-meta[_ngcontent-%COMP%] {\n margin-bottom: 8px;\n}\n\n.card-type[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 3px 10px;\n border-radius: 100px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.03em;\n}\n\n\n\n.card-message[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--gray-900);\n line-height: 1.5;\n margin: 0;\n display: -webkit-box;\n -webkit-line-clamp: 3;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n\n\n.card-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n padding-top: 4px;\n}\n\n.card-action-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 12px;\n border-radius: 8px;\n font-size: 12px;\n font-weight: 500;\n border: 1px solid var(--gray-700);\n background: var(--white-color);\n color: var(--navy);\n cursor: pointer;\n transition: all 0.2s ease;\n white-space: nowrap;\n}\n\n.card-action-btn[_ngcontent-%COMP%]:hover {\n background: var(--gray-600);\n border-color: var(--mj-blue);\n color: var(--mj-blue);\n}\n\n.card-action-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n}\n\n\n\n\n\n\n@keyframes _ngcontent-%COMP%_fadeIn {\n from {\n opacity: 0;\n transform: translateY(8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n.notification-card[_ngcontent-%COMP%] {\n animation: _ngcontent-%COMP%_fadeIn 0.3s ease;\n}\n\n\n\n\n\n\n@media (max-width: 768px) {\n .notifications-container[_ngcontent-%COMP%] {\n border-radius: 0;\n max-height: none;\n height: 100%;\n }\n\n .header-top[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: stretch;\n gap: 12px;\n padding: 16px 16px 12px;\n }\n\n .header-title[_ngcontent-%COMP%] {\n justify-content: center;\n }\n\n .header-actions[_ngcontent-%COMP%] {\n justify-content: center;\n }\n\n .header-stats[_ngcontent-%COMP%] {\n padding: 0 16px 12px;\n justify-content: center;\n flex-wrap: wrap;\n }\n\n .stat-pill[_ngcontent-%COMP%] {\n padding: 8px 14px;\n }\n\n .header-toolbar[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: stretch;\n padding: 12px 16px;\n gap: 12px;\n }\n\n .toolbar-filters[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 10px;\n }\n\n .type-filter[_ngcontent-%COMP%], \n .search-filter[_ngcontent-%COMP%] {\n width: 100%;\n max-width: none;\n }\n\n .toolbar-info[_ngcontent-%COMP%] {\n text-align: center;\n }\n\n .notification-card[_ngcontent-%COMP%] {\n grid-template-columns: 4px 40px 1fr;\n gap: 12px;\n padding: 16px;\n }\n\n .card-actions[_ngcontent-%COMP%] {\n grid-column: 2 / -1;\n padding-top: 12px;\n justify-content: flex-start;\n }\n\n .card-icon[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n }\n\n .card-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 18px;\n }\n\n .card-header[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 4px;\n }\n\n .card-time[_ngcontent-%COMP%] {\n order: -1;\n }\n\n .btn-text[_ngcontent-%COMP%] {\n display: none;\n }\n\n .action-btn[_ngcontent-%COMP%] {\n padding: 8px 10px;\n }\n}\n\n@media (max-width: 480px) {\n .header-title[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 1.25rem;\n }\n\n .title-icon[_ngcontent-%COMP%] {\n width: 38px;\n height: 38px;\n }\n\n .title-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 18px;\n }\n\n .stat-pill[_ngcontent-%COMP%] {\n padding: 6px 12px;\n }\n\n .stat-label[_ngcontent-%COMP%] {\n font-size: 12px;\n }\n\n .stat-count[_ngcontent-%COMP%] {\n font-size: 11px;\n padding: 2px 6px;\n min-width: 20px;\n }\n\n .notification-card[_ngcontent-%COMP%] {\n grid-template-columns: 3px 36px 1fr;\n gap: 10px;\n padding: 14px 12px;\n }\n\n .card-indicator[_ngcontent-%COMP%] {\n width: 3px;\n min-height: 50px;\n }\n\n .card-icon[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n border-radius: 10px;\n }\n\n .card-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 16px;\n }\n\n .card-title[_ngcontent-%COMP%] {\n font-size: 14px;\n }\n\n .card-message[_ngcontent-%COMP%] {\n font-size: 13px;\n -webkit-line-clamp: 2;\n }\n\n .card-type[_ngcontent-%COMP%] {\n font-size: 10px;\n padding: 2px 8px;\n }\n\n .action-text[_ngcontent-%COMP%] {\n display: none;\n }\n\n .card-action-btn[_ngcontent-%COMP%] {\n padding: 8px;\n }\n\n .empty-state[_ngcontent-%COMP%] {\n padding: 40px 16px;\n }\n\n .empty-icon[_ngcontent-%COMP%] {\n width: 64px;\n height: 64px;\n }\n\n .empty-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 26px;\n }\n}\n\n\n\n\n\n\n.notifications-list.k-listview[_ngcontent-%COMP%] {\n font-family: inherit;\n border: none;\n background: transparent;\n}\n\n.type-dropdown.k-dropdownlist[_ngcontent-%COMP%] {\n border-radius: 8px;\n border-color: var(--gray-700);\n}\n\n.type-dropdown.k-dropdownlist[_ngcontent-%COMP%]:hover {\n border-color: var(--gray-800);\n}\n\n.type-dropdown.k-dropdownlist.k-focus[_ngcontent-%COMP%] {\n border-color: var(--mj-blue);\n box-shadow: 0 0 0 2px rgba(0, 118, 182, 0.15);\n}\n\n.search-input.k-textbox[_ngcontent-%COMP%] {\n border-radius: 8px;\n border-color: var(--gray-700);\n}\n\n.search-input.k-textbox[_ngcontent-%COMP%]:hover {\n border-color: var(--gray-800);\n}\n\n.search-input.k-textbox.k-focus[_ngcontent-%COMP%] {\n border-color: var(--mj-blue);\n box-shadow: 0 0 0 2px rgba(0, 118, 182, 0.15);\n}"] });
590
+ i0.ɵɵconditional(ctx.NotificationsToShow.length === 0 && ctx.AllNotifications.length === 0 ? 11 : ctx.NotificationsToShow.length === 0 ? 12 : 13);
591
+ } }, dependencies: [i3.NgSelectOption, i3.ɵNgSelectMultipleOption, i3.SelectControlValueAccessor, i3.NgControlStatus, i3.NgModel, i4.DatePipe], styles: ["\n\n\n\n\n\n\n\n[_nghost-%COMP%] {\n \n\n --mj-blue: #0076B6;\n --mj-blue-hover: #3395C8;\n --mj-blue-active: #4BA5D4;\n --mj-blue-light: #AAE7FD;\n\n \n\n --surface: #FAFCFF;\n --surface-container: #EDF0F4;\n --surface-container-low: #F3F5F9;\n --on-surface: #191C20;\n --on-surface-variant: #43474E;\n --outline: #74777F;\n --outline-variant: #C4C6D0;\n\n \n\n --elevation-1: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 3px rgba(0, 0, 0, 0.08);\n --elevation-2: 0 2px 4px rgba(0, 0, 0, 0.1), 0 4px 8px rgba(0, 0, 0, 0.08);\n --elevation-3: 0 4px 8px rgba(0, 0, 0, 0.1), 0 8px 16px rgba(0, 0, 0, 0.08);\n\n display: block;\n width: 100%;\n height: 100%;\n}\n\n\n\n\n\n\n.notifications-container[_ngcontent-%COMP%] {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: var(--surface);\n border-radius: 12px;\n box-shadow: var(--elevation-1);\n overflow: hidden;\n}\n\n\n\n\n\n\n.notifications-header[_ngcontent-%COMP%] {\n background: linear-gradient(to bottom, #FFFFFF, var(--surface-container-low));\n border-bottom: 1px solid var(--outline-variant);\n padding: 0;\n flex-shrink: 0;\n}\n\n\n\n.header-top[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 24px 24px 16px;\n gap: 16px;\n}\n\n.header-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.title-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background: linear-gradient(135deg, var(--mj-blue) 0%, #0091d5 100%);\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-shadow: 0 4px 12px rgba(0, 118, 182, 0.3);\n transition: transform 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n.title-icon[_ngcontent-%COMP%]:hover {\n transform: scale(1.05);\n}\n\n.title-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 22px;\n color: white;\n}\n\n.header-title[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 1.75rem;\n font-weight: 700;\n color: var(--on-surface);\n margin: 0;\n letter-spacing: -0.02em;\n}\n\n\n\n\n\n\n.header-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.action-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n border-radius: 9999px; \n\n font-size: 14px;\n font-weight: 600;\n border: 2px solid var(--mj-blue);\n cursor: pointer;\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n min-height: 44px;\n font-family: inherit;\n}\n\n.action-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 16px;\n transition: transform 0.2s ease;\n}\n\n.action-btn[_ngcontent-%COMP%]:hover i[_ngcontent-%COMP%] {\n transform: scale(1.1);\n}\n\n\n\n.action-btn-ghost[_ngcontent-%COMP%] {\n background: white;\n color: var(--mj-blue);\n border-color: var(--mj-blue);\n}\n\n.action-btn-ghost[_ngcontent-%COMP%]:hover {\n background: var(--mj-blue);\n color: white;\n border-color: var(--mj-blue);\n box-shadow: var(--elevation-2);\n}\n\n.action-btn-ghost[_ngcontent-%COMP%]:active {\n background: var(--mj-blue-active);\n transform: scale(0.98);\n}\n\n\n\n.action-btn-secondary[_ngcontent-%COMP%] {\n background: white;\n color: var(--mj-blue);\n border-color: var(--mj-blue);\n}\n\n.action-btn-secondary[_ngcontent-%COMP%]:hover {\n background: var(--mj-blue);\n color: white;\n border-color: var(--mj-blue);\n}\n\n.action-btn-secondary[_ngcontent-%COMP%]:active {\n transform: scale(0.98);\n}\n\n\n\n\n\n\n.filters-section[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n background: var(--surface-container-low);\n border-top: 1px solid var(--outline-variant);\n}\n\n.filters-slider[_ngcontent-%COMP%] {\n overflow-x: auto;\n overflow-y: hidden;\n -webkit-overflow-scrolling: touch;\n scrollbar-width: none;\n -ms-overflow-style: none;\n}\n\n.filters-slider[_ngcontent-%COMP%]::-webkit-scrollbar {\n display: none;\n}\n\n.slider-content[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 16px 24px;\n min-width: min-content;\n}\n\n\n\n\n\n\n.header-stats[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n flex-shrink: 0;\n}\n\n.hidden-radio[_ngcontent-%COMP%] {\n position: absolute;\n opacity: 0;\n pointer-events: none;\n}\n\n.stat-pill[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n border-radius: 9999px; \n\n border: 2px solid var(--mj-blue);\n background: white;\n cursor: pointer;\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n font-family: inherit;\n min-height: 44px;\n}\n\n.stat-pill[_ngcontent-%COMP%]:hover:not(.active) {\n background: var(--surface-container-low);\n border-color: var(--mj-blue-hover);\n transform: translateY(-1px);\n}\n\n\n\n.stat-pill.active[_ngcontent-%COMP%] {\n background: var(--mj-blue);\n border-color: var(--mj-blue);\n color: white;\n box-shadow: 0 4px 12px rgba(0, 118, 182, 0.35);\n transform: translateY(-1px);\n}\n\n.stat-label[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n}\n\n.stat-count[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 700;\n padding: 4px 10px;\n border-radius: 9999px;\n background: var(--surface-container);\n color: var(--on-surface);\n min-width: 28px;\n text-align: center;\n transition: all 0.2s ease;\n}\n\n.stat-pill.active[_ngcontent-%COMP%] .stat-count[_ngcontent-%COMP%] {\n background: rgba(255, 255, 255, 0.25);\n color: white;\n}\n\n.stat-count.unread-count[_ngcontent-%COMP%] {\n background: var(--mj-blue-light);\n color: var(--mj-blue);\n font-weight: 700;\n}\n\n.stat-pill.has-unread[_ngcontent-%COMP%]:not(.active) {\n border-color: var(--mj-blue);\n}\n\n\n\n\n\n\n.type-filter-slider[_ngcontent-%COMP%] {\n flex-shrink: 0;\n min-width: 180px;\n}\n\n\n\n\n\n\n.search-section[_ngcontent-%COMP%] {\n padding: 0 24px 16px;\n}\n\n\n\n\n\n\n.filter-info[_ngcontent-%COMP%] {\n padding: 0 24px 16px;\n display: flex;\n justify-content: center;\n}\n\n\n\n.type-select[_ngcontent-%COMP%] {\n width: 100%;\n padding: 10px 16px;\n border: 2px solid var(--mj-blue);\n border-radius: 9999px; \n\n font-size: 14px;\n font-weight: 500;\n color: var(--on-surface);\n background: white;\n cursor: pointer;\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n font-family: inherit;\n appearance: none;\n background-image: url(\"data:image/svg+xml,%3Csvg width='12' height='8' viewBox='0 0 12 8' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1 1.5L6 6.5L11 1.5' stroke='%230076B6' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: right 16px center;\n padding-right: 42px;\n}\n\n.type-select[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-blue-hover);\n background-color: var(--surface-container-low);\n}\n\n.type-select[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-blue);\n box-shadow: 0 0 0 3px rgba(0, 118, 182, 0.15);\n}\n\n.search-container[_ngcontent-%COMP%] {\n position: relative;\n width: 100%;\n max-width: 100%;\n}\n\n.search-icon[_ngcontent-%COMP%] {\n position: absolute;\n left: 16px;\n top: 50%;\n transform: translateY(-50%);\n color: var(--on-surface-variant);\n font-size: 14px;\n pointer-events: none;\n transition: color 0.2s ease;\n}\n\n.search-input[_ngcontent-%COMP%] {\n width: 100%;\n padding: 10px 16px 10px 44px;\n border: 2px solid var(--mj-blue);\n border-radius: 9999px; \n\n font-size: 14px;\n font-weight: 500;\n background: white;\n color: var(--on-surface);\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n font-family: inherit;\n}\n\n.search-input[_ngcontent-%COMP%]::placeholder {\n color: var(--on-surface-variant);\n}\n\n.search-input[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-blue-hover);\n background: var(--surface-container-low);\n}\n\n.search-input[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-blue);\n box-shadow: 0 0 0 3px rgba(0, 118, 182, 0.15);\n background: white;\n}\n\n.search-container[_ngcontent-%COMP%]:focus-within .search-icon[_ngcontent-%COMP%] {\n color: var(--mj-blue);\n}\n\n.filter-badge[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 14px;\n background: var(--mj-blue-light);\n color: var(--mj-blue);\n border-radius: 9999px; \n\n font-size: 13px;\n font-weight: 600;\n border: 1px solid var(--mj-blue);\n}\n\n.filter-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n}\n\n\n\n\n\n\n.notifications-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n -webkit-overflow-scrolling: touch; \n\n}\n\n\n\n.notifications-content[_ngcontent-%COMP%]::-webkit-scrollbar {\n width: 8px;\n}\n\n.notifications-content[_ngcontent-%COMP%]::-webkit-scrollbar-track {\n background: var(--surface-container-low);\n}\n\n.notifications-content[_ngcontent-%COMP%]::-webkit-scrollbar-thumb {\n background: var(--outline-variant);\n border-radius: 4px;\n}\n\n.notifications-content[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover {\n background: var(--outline);\n}\n\n\n\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 80px 32px;\n text-align: center;\n}\n\n.empty-icon[_ngcontent-%COMP%] {\n width: 96px;\n height: 96px;\n background: var(--surface-container);\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 24px;\n}\n\n.empty-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 40px;\n color: var(--outline);\n}\n\n.empty-state[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 700;\n color: var(--on-surface);\n margin: 0 0 8px;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 15px;\n color: var(--on-surface-variant);\n margin: 0;\n max-width: 320px;\n line-height: 1.5;\n}\n\n\n\n\n\n\n.notifications-list[_ngcontent-%COMP%] {\n background: transparent;\n}\n\n\n\n\n\n\n.notification-card[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 4px 56px 1fr auto;\n gap: 14px;\n align-items: start;\n padding: 16px 20px;\n background: white;\n border-bottom: 1px solid var(--outline-variant);\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n position: relative;\n}\n\n.notification-card[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.notification-card[_ngcontent-%COMP%]:hover {\n background: var(--surface-container-low);\n}\n\n.notification-card.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.notification-card.clickable[_ngcontent-%COMP%]:active {\n background: var(--surface-container);\n transform: scale(0.995);\n}\n\n\n\n.notification-card.unread[_ngcontent-%COMP%] {\n background: linear-gradient(90deg, rgba(170, 231, 253, 0.3) 0%, white 60%);\n}\n\n.notification-card.unread[_ngcontent-%COMP%]:hover {\n background: linear-gradient(90deg, rgba(170, 231, 253, 0.4) 0%, var(--surface-container-low) 60%);\n}\n\n\n\n.card-indicator[_ngcontent-%COMP%] {\n width: 4px;\n height: 100%;\n min-height: 64px;\n border-radius: 2px;\n background: transparent;\n transition: all 0.2s ease;\n align-self: stretch;\n}\n\n.notification-card.unread[_ngcontent-%COMP%] .card-indicator[_ngcontent-%COMP%] {\n background: var(--mj-blue);\n box-shadow: 0 0 8px rgba(0, 118, 182, 0.5);\n}\n\n\n\n.card-icon[_ngcontent-%COMP%] {\n width: 56px;\n height: 56px;\n border-radius: 14px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n transition: transform 0.2s ease;\n}\n\n.notification-card[_ngcontent-%COMP%]:hover .card-icon[_ngcontent-%COMP%] {\n transform: scale(1.05);\n}\n\n.card-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n}\n\n\n\n.card-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.card-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 12px;\n margin-bottom: 6px;\n}\n\n.card-title[_ngcontent-%COMP%] {\n font-size: 16px;\n font-weight: 500;\n color: var(--on-surface);\n margin: 0;\n line-height: 1.4;\n word-wrap: break-word;\n}\n\n.card-title-unread[_ngcontent-%COMP%] {\n font-weight: 700;\n color: var(--on-surface);\n}\n\n.notification-card.clickable[_ngcontent-%COMP%] .card-title[_ngcontent-%COMP%] {\n color: var(--mj-blue);\n}\n\n.notification-card.clickable[_ngcontent-%COMP%]:hover .card-title[_ngcontent-%COMP%] {\n text-decoration: underline;\n}\n\n.card-time[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 5px;\n font-size: 13px;\n color: var(--on-surface-variant);\n white-space: nowrap;\n flex-shrink: 0;\n}\n\n.card-time[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n}\n\n\n\n.card-meta[_ngcontent-%COMP%] {\n margin-bottom: 8px;\n}\n\n.card-type[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 4px 12px;\n border-radius: 9999px; \n\n font-size: 12px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.03em;\n}\n\n\n\n.card-message[_ngcontent-%COMP%] {\n font-size: 15px;\n color: var(--on-surface-variant);\n line-height: 1.5;\n margin: 0;\n display: -webkit-box;\n -webkit-line-clamp: 3;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n\n\n.card-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n padding-top: 6px;\n}\n\n.card-action-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n border-radius: 9999px; \n\n font-size: 13px;\n font-weight: 600;\n border: 2px solid var(--mj-blue);\n background: white;\n color: var(--mj-blue);\n cursor: pointer;\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n white-space: nowrap;\n font-family: inherit;\n}\n\n.card-action-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-blue);\n border-color: var(--mj-blue);\n color: white;\n transform: translateY(-1px);\n box-shadow: var(--elevation-2);\n}\n\n.card-action-btn[_ngcontent-%COMP%]:active {\n transform: translateY(0) scale(0.98);\n}\n\n.card-action-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 13px;\n}\n\n\n\n\n\n\n@keyframes _ngcontent-%COMP%_slideInUp {\n from {\n opacity: 0;\n transform: translateY(12px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n.notification-card[_ngcontent-%COMP%] {\n animation: _ngcontent-%COMP%_slideInUp 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n\n\n\n\n\nbutton[_ngcontent-%COMP%]:focus-visible, \ninput[_ngcontent-%COMP%]:focus-visible, \nselect[_ngcontent-%COMP%]:focus-visible {\n outline: 2px solid var(--mj-blue);\n outline-offset: 2px;\n}\n\n\n\n@media (prefers-reduced-motion: reduce) {\n *[_ngcontent-%COMP%], \n *[_ngcontent-%COMP%]::before, \n *[_ngcontent-%COMP%]::after {\n animation-duration: 0.01ms !important;\n animation-iteration-count: 1 !important;\n transition-duration: 0.01ms !important;\n }\n}\n\n\n\n\n\n\n\n\n@media (max-width: 768px) {\n .notifications-container[_ngcontent-%COMP%] {\n border-radius: 0;\n box-shadow: none;\n }\n\n .header-top[_ngcontent-%COMP%] {\n padding: 20px 20px 14px;\n }\n\n .title-icon[_ngcontent-%COMP%] {\n width: 44px;\n height: 44px;\n }\n\n .title-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n\n .header-title[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 1.5rem;\n }\n\n \n\n .slider-content[_ngcontent-%COMP%] {\n padding: 14px 20px;\n gap: 10px;\n }\n\n .stat-pill[_ngcontent-%COMP%] {\n padding: 8px 16px;\n flex-shrink: 0;\n }\n\n .type-filter-slider[_ngcontent-%COMP%] {\n min-width: 160px;\n }\n\n .search-section[_ngcontent-%COMP%] {\n padding: 0 20px 14px;\n }\n\n .filter-info[_ngcontent-%COMP%] {\n padding: 0 20px 14px;\n }\n\n .notification-card[_ngcontent-%COMP%] {\n grid-template-columns: 4px 52px 1fr;\n gap: 12px;\n padding: 14px 16px;\n }\n\n .card-actions[_ngcontent-%COMP%] {\n grid-column: 2 / -1;\n padding-top: 10px;\n }\n\n .card-icon[_ngcontent-%COMP%] {\n width: 52px;\n height: 52px;\n }\n\n .card-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 22px;\n }\n}\n\n\n\n@media (max-width: 480px) {\n .header-top[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: stretch;\n gap: 12px;\n padding: 16px 16px 12px;\n }\n\n .header-title[_ngcontent-%COMP%] {\n justify-content: flex-start;\n }\n\n .title-icon[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n }\n\n .title-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 18px;\n }\n\n .header-title[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 1.375rem;\n }\n\n .header-actions[_ngcontent-%COMP%] {\n width: 100%;\n justify-content: stretch;\n gap: 8px;\n }\n\n .action-btn[_ngcontent-%COMP%] {\n flex: 1;\n justify-content: center;\n padding: 10px 16px;\n font-size: 13px;\n }\n\n .btn-text[_ngcontent-%COMP%] {\n display: none;\n }\n\n \n\n .slider-content[_ngcontent-%COMP%] {\n padding: 12px 16px;\n gap: 8px;\n }\n\n .header-stats[_ngcontent-%COMP%] {\n gap: 8px;\n }\n\n .stat-pill[_ngcontent-%COMP%] {\n padding: 8px 14px;\n min-height: 40px;\n flex-shrink: 0;\n }\n\n .stat-label[_ngcontent-%COMP%] {\n font-size: 13px;\n }\n\n .stat-count[_ngcontent-%COMP%] {\n font-size: 12px;\n padding: 3px 8px;\n min-width: 24px;\n }\n\n .type-filter-slider[_ngcontent-%COMP%] {\n min-width: 140px;\n }\n\n .type-select[_ngcontent-%COMP%], \n .search-input[_ngcontent-%COMP%] {\n font-size: 16px; \n\n }\n\n .search-section[_ngcontent-%COMP%] {\n padding: 0 16px 12px;\n }\n\n .filter-info[_ngcontent-%COMP%] {\n padding: 0 16px 12px;\n }\n\n .notification-card[_ngcontent-%COMP%] {\n grid-template-columns: 3px 48px 1fr;\n gap: 10px;\n padding: 12px 12px;\n }\n\n .card-indicator[_ngcontent-%COMP%] {\n width: 3px;\n min-height: 56px;\n }\n\n .card-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n border-radius: 12px;\n }\n\n .card-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n\n .card-title[_ngcontent-%COMP%] {\n font-size: 15px;\n }\n\n .card-time[_ngcontent-%COMP%] {\n font-size: 12px;\n }\n\n .card-message[_ngcontent-%COMP%] {\n font-size: 14px;\n -webkit-line-clamp: 2;\n }\n\n .card-type[_ngcontent-%COMP%] {\n font-size: 11px;\n padding: 3px 10px;\n }\n\n .card-actions[_ngcontent-%COMP%] {\n padding-top: 8px;\n gap: 6px;\n }\n\n .action-text[_ngcontent-%COMP%] {\n display: none;\n }\n\n .card-action-btn[_ngcontent-%COMP%] {\n padding: 8px 12px;\n min-width: 40px;\n justify-content: center;\n }\n\n .empty-state[_ngcontent-%COMP%] {\n padding: 60px 20px;\n }\n\n .empty-icon[_ngcontent-%COMP%] {\n width: 80px;\n height: 80px;\n }\n\n .empty-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 32px;\n }\n\n .empty-state[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 18px;\n }\n\n .empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 14px;\n }\n}\n\n\n\n@media (min-width: 390px) and (max-width: 480px) {\n .btn-text[_ngcontent-%COMP%] {\n display: inline;\n }\n\n .action-btn[_ngcontent-%COMP%] {\n font-size: 14px;\n }\n}\n\n\n\n@media (prefers-color-scheme: dark) {\n \n\n}"] });
575
592
  }
576
593
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(UserNotificationsComponent, [{
577
594
  type: Component,
578
- args: [{ selector: 'app-user-notifications', template: "<div class=\"notifications-container\">\n <!-- Header Section -->\n <div class=\"notifications-header\">\n <div class=\"header-top\">\n <div class=\"header-title\">\n <div class=\"title-icon\">\n <i class=\"fa-solid fa-bell\"></i>\n </div>\n <h1>Notifications</h1>\n </div>\n\n <div class=\"header-actions\" *ngIf=\"AllNotifications.length > 0\">\n <button *ngIf=\"UnreadNotifications.length > 0\"\n kendoButton\n class=\"action-btn action-btn-primary\"\n (click)=\"markAllAsRead()\">\n <i class=\"fa-solid fa-check-double\"></i>\n <span class=\"btn-text\">Mark All Read</span>\n </button>\n <button *ngIf=\"ReadNotifications.length > 0\"\n kendoButton\n class=\"action-btn\"\n (click)=\"markAllAsUnread()\">\n <i class=\"fa-solid fa-envelope\"></i>\n <span class=\"btn-text\">Mark All Unread</span>\n </button>\n </div>\n </div>\n\n <!-- Stats Pills (replaces radio buttons - same functionality) -->\n <div class=\"header-stats\" *ngIf=\"AllNotifications.length > 0\">\n <input #allRadio type=\"radio\" name=\"UnreadStatus\" value=\"All\"\n (change)=\"onReadRadioChanged($event)\" checked class=\"hidden-radio\" />\n <button class=\"stat-pill\"\n [class.active]=\"radioSelected === 'All'\"\n (click)=\"selectReadOption('All')\">\n <span class=\"stat-label\">All</span>\n <span class=\"stat-count\">{{AllNotifications.length}}</span>\n </button>\n\n <input #unreadRadio type=\"radio\" name=\"UnreadStatus\" value=\"Unread\"\n (change)=\"onReadRadioChanged($event)\" class=\"hidden-radio\" />\n <button class=\"stat-pill\"\n *ngIf=\"UnreadNotifications.length > 0 || ReadNotifications.length === 0\"\n [class.active]=\"radioSelected === 'Unread'\"\n [class.has-unread]=\"UnreadNotifications.length > 0\"\n (click)=\"selectReadOption('Unread')\">\n <span class=\"stat-label\">Unread</span>\n <span class=\"stat-count\" [class.unread-count]=\"UnreadNotifications.length > 0\">\n {{UnreadNotifications.length}}\n </span>\n </button>\n\n <input #readRadio type=\"radio\" name=\"UnreadStatus\" value=\"Read\"\n (change)=\"onReadRadioChanged($event)\" class=\"hidden-radio\" />\n <button class=\"stat-pill\"\n *ngIf=\"ReadNotifications.length > 0 || UnreadNotifications.length === 0\"\n [class.active]=\"radioSelected === 'Read'\"\n (click)=\"selectReadOption('Read')\">\n <span class=\"stat-label\">Read</span>\n <span class=\"stat-count\">{{ReadNotifications.length}}</span>\n </button>\n </div>\n\n <!-- Filter Toolbar -->\n <div class=\"header-toolbar\" *ngIf=\"AllNotifications.length > 0\">\n <div class=\"toolbar-filters\">\n <!-- Type Filter Dropdown -->\n <div class=\"filter-item type-filter\" *ngIf=\"notificationTypes.length > 0\">\n <kendo-dropdownlist\n [data]=\"notificationTypes\"\n textField=\"Name\"\n valueField=\"ID\"\n [valuePrimitive]=\"true\"\n [(ngModel)]=\"selectedTypeFilter\"\n (valueChange)=\"onTypeFilterChange($event)\"\n [defaultItem]=\"{ ID: null, Name: 'All Types' }\"\n class=\"type-dropdown\">\n </kendo-dropdownlist>\n </div>\n\n <!-- Search Filter -->\n <div class=\"filter-item search-filter\">\n <kendo-textbox\n placeholder=\"Search notifications...\"\n (valueChange)=\"onFilterChanged($event)\"\n class=\"search-input\">\n <ng-template kendoTextBoxSuffixTemplate>\n <i class=\"fa-solid fa-magnifying-glass search-icon\"></i>\n </ng-template>\n </kendo-textbox>\n </div>\n </div>\n\n <div class=\"toolbar-info\" *ngIf=\"NotificationsToShow.length !== AllNotifications.length\">\n <span class=\"filter-badge\">\n <i class=\"fa-solid fa-filter\"></i>\n Showing {{NotificationsToShow.length}} of {{AllNotifications.length}}\n </span>\n </div>\n </div>\n </div>\n\n <!-- Notifications Content -->\n <div class=\"notifications-content\">\n @if(NotificationsToShow.length === 0 && AllNotifications.length === 0) {\n <div class=\"empty-state\">\n <div class=\"empty-icon\">\n <i class=\"fa-solid fa-bell-slash\"></i>\n </div>\n <h3>No Notifications</h3>\n <p>You're all caught up! New notifications will appear here.</p>\n </div>\n }\n @else if(NotificationsToShow.length === 0) {\n <div class=\"empty-state\">\n <div class=\"empty-icon\">\n <i class=\"fa-solid fa-filter-circle-xmark\"></i>\n </div>\n <h3>No Matching Notifications</h3>\n <p>Try adjusting your filters to see more notifications.</p>\n </div>\n }\n @else {\n <!-- Notifications List -->\n <kendo-listview [data]=\"NotificationsToShow\" class=\"notifications-list\">\n <ng-template kendoListViewItemTemplate let-dataItem=\"dataItem\">\n <div class=\"notification-card\"\n [class.unread]=\"dataItem.Unread\"\n [class.clickable]=\"isNotificationClickable(dataItem)\">\n\n <!-- Unread Indicator Bar -->\n <div class=\"card-indicator\"></div>\n\n <!-- Type Icon -->\n <div class=\"card-icon\"\n [style.background-color]=\"getTypeColor(dataItem) + '15'\">\n <i [class]=\"'fa-solid ' + getTypeIcon(dataItem)\"\n [style.color]=\"getTypeColor(dataItem)\"></i>\n </div>\n\n <!-- Content -->\n <div class=\"card-content\" (click)=\"notificationClicked(dataItem)\">\n <div class=\"card-header\">\n <h3 class=\"card-title\" [class.card-title-unread]=\"dataItem.Unread\">\n {{dataItem.Title}}\n </h3>\n <span class=\"card-time\">\n <i class=\"fa-regular fa-clock\"></i>\n {{dataItem.__mj_CreatedAt | date:'MMM d, h:mm a'}}\n </span>\n </div>\n\n <div class=\"card-meta\">\n <span class=\"card-type\"\n [style.background-color]=\"getTypeColor(dataItem) + '15'\"\n [style.color]=\"getTypeColor(dataItem)\">\n {{getTypeName(dataItem)}}\n </span>\n </div>\n\n <p class=\"card-message\">{{dataItem.Message}}</p>\n </div>\n\n <!-- Actions -->\n <div class=\"card-actions\">\n <button kendoButton\n class=\"card-action-btn\"\n *ngIf=\"dataItem.Unread\"\n (click)=\"markAsRead(dataItem, true, null)\"\n title=\"Mark as Read\">\n <i class=\"fa-solid fa-check\"></i>\n <span class=\"action-text\">Read</span>\n </button>\n <button kendoButton\n class=\"card-action-btn\"\n *ngIf=\"!dataItem.Unread\"\n (click)=\"markAsRead(dataItem, false, null)\"\n title=\"Mark as Unread\">\n <i class=\"fa-solid fa-envelope\"></i>\n <span class=\"action-text\">Unread</span>\n </button>\n </div>\n </div>\n </ng-template>\n </kendo-listview>\n }\n </div>\n</div>\n", styles: ["/* ===================================\n USER NOTIFICATIONS - MODERN UI\n =================================== */\n\n/* Container */\n.notifications-container {\n height: 100%;\n max-height: 800px;\n display: flex;\n flex-direction: column;\n background: var(--white-color);\n border-radius: 12px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);\n overflow: hidden;\n}\n\n/* ===================================\n HEADER SECTION\n =================================== */\n\n.notifications-header {\n background: linear-gradient(to bottom, var(--white-color), var(--gray-600));\n border-bottom: 1px solid var(--gray-700);\n padding: 0;\n flex-shrink: 0;\n}\n\n/* Header Top Row */\n.header-top {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 20px 24px 16px;\n gap: 16px;\n}\n\n.header-title {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.title-icon {\n width: 44px;\n height: 44px;\n background: linear-gradient(135deg, var(--mj-blue) 0%, #0091d5 100%);\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-shadow: 0 4px 12px rgba(0, 118, 182, 0.3);\n}\n\n.title-icon i {\n font-size: 20px;\n color: white;\n}\n\n.header-title h1 {\n font-size: 1.5rem;\n font-weight: 700;\n color: var(--navy);\n margin: 0;\n letter-spacing: -0.02em;\n}\n\n/* Header Actions */\n.header-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.action-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 14px;\n border-radius: 8px;\n font-size: 13px;\n font-weight: 500;\n border: 1px solid var(--gray-700);\n background: var(--white-color);\n color: var(--navy);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.action-btn:hover {\n background: var(--gray-600);\n border-color: var(--gray-800);\n}\n\n.action-btn-primary {\n background: var(--mj-blue);\n border-color: var(--mj-blue);\n color: white;\n}\n\n.action-btn-primary:hover {\n background: #005a8c;\n border-color: #005a8c;\n}\n\n.action-btn i {\n font-size: 14px;\n}\n\n/* ===================================\n STATS PILLS (Filter Tabs)\n =================================== */\n\n.header-stats {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 0 24px 16px;\n}\n\n.hidden-radio {\n position: absolute;\n opacity: 0;\n pointer-events: none;\n}\n\n.stat-pill {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 18px;\n border-radius: 100px;\n border: 1px solid var(--gray-700);\n background: var(--white-color);\n cursor: pointer;\n transition: all 0.2s ease;\n font-family: inherit;\n}\n\n.stat-pill:hover:not(.active) {\n background: var(--gray-600);\n border-color: var(--gray-800);\n}\n\n.stat-pill.active {\n background: var(--navy);\n border-color: var(--navy);\n color: white;\n box-shadow: 0 2px 8px rgba(9, 35, 64, 0.25);\n}\n\n.stat-label {\n font-size: 13px;\n font-weight: 500;\n}\n\n.stat-count {\n font-size: 12px;\n font-weight: 600;\n padding: 2px 8px;\n border-radius: 100px;\n background: var(--gray-700);\n color: var(--navy);\n min-width: 24px;\n text-align: center;\n}\n\n.stat-pill.active .stat-count {\n background: rgba(255, 255, 255, 0.2);\n color: white;\n}\n\n.stat-count.unread-count {\n background: var(--mj-blue);\n color: white;\n}\n\n.stat-pill.has-unread:not(.active) {\n border-color: var(--mj-blue);\n}\n\n/* ===================================\n FILTER TOOLBAR\n =================================== */\n\n.header-toolbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 24px 16px;\n gap: 16px;\n background: var(--gray-600);\n border-top: 1px solid var(--gray-700);\n}\n\n.toolbar-filters {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n}\n\n.filter-item {\n flex-shrink: 0;\n}\n\n.type-filter {\n min-width: 160px;\n}\n\n.type-dropdown {\n width: 100%;\n}\n\n.search-filter {\n flex: 1;\n max-width: 280px;\n}\n\n.search-input {\n width: 100%;\n}\n\n.search-icon {\n color: var(--gray-800);\n font-size: 14px;\n}\n\n.toolbar-info {\n flex-shrink: 0;\n}\n\n.filter-badge {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: var(--light-blue);\n color: var(--mj-blue);\n border-radius: 6px;\n font-size: 12px;\n font-weight: 500;\n}\n\n.filter-badge i {\n font-size: 11px;\n}\n\n/* ===================================\n NOTIFICATIONS CONTENT\n =================================== */\n\n.notifications-content {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n}\n\n/* Empty State */\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 24px;\n text-align: center;\n}\n\n.empty-icon {\n width: 80px;\n height: 80px;\n background: var(--gray-600);\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 20px;\n}\n\n.empty-icon i {\n font-size: 32px;\n color: var(--gray-800);\n}\n\n.empty-state h3 {\n font-size: 18px;\n font-weight: 600;\n color: var(--navy);\n margin: 0 0 8px;\n}\n\n.empty-state p {\n font-size: 14px;\n color: var(--gray-800);\n margin: 0;\n max-width: 280px;\n}\n\n/* ===================================\n NOTIFICATIONS LIST\n =================================== */\n\n.notifications-list {\n border: none;\n background: transparent;\n}\n\n.notifications-list .k-listview-content {\n padding: 0;\n}\n\n/* ===================================\n NOTIFICATION CARD\n =================================== */\n\n.notification-card {\n display: grid;\n grid-template-columns: 4px 48px 1fr auto;\n gap: 16px;\n align-items: start;\n padding: 20px 24px;\n background: var(--white-color);\n border-bottom: 1px solid var(--gray-700);\n transition: all 0.2s ease;\n position: relative;\n}\n\n.notification-card:last-child {\n border-bottom: none;\n}\n\n.notification-card:hover {\n background: var(--gray-600);\n}\n\n.notification-card.clickable {\n cursor: pointer;\n}\n\n.notification-card.clickable:hover {\n box-shadow: inset 0 0 0 1px var(--gray-700);\n}\n\n/* Unread State */\n.notification-card.unread {\n background: linear-gradient(90deg, rgba(170, 231, 253, 0.4) 0%, var(--white-color) 50%);\n}\n\n.notification-card.unread:hover {\n background: linear-gradient(90deg, rgba(170, 231, 253, 0.5) 0%, var(--gray-600) 50%);\n}\n\n/* Card Indicator */\n.card-indicator {\n width: 4px;\n height: 100%;\n min-height: 60px;\n border-radius: 4px;\n background: transparent;\n transition: background 0.2s ease;\n align-self: stretch;\n}\n\n.notification-card.unread .card-indicator {\n background: var(--mj-blue);\n box-shadow: 0 0 8px rgba(0, 118, 182, 0.4);\n}\n\n/* Card Icon */\n.card-icon {\n width: 48px;\n height: 48px;\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n transition: transform 0.2s ease;\n}\n\n.notification-card:hover .card-icon {\n transform: scale(1.05);\n}\n\n.card-icon i {\n font-size: 20px;\n}\n\n/* Card Content */\n.card-content {\n flex: 1;\n min-width: 0;\n}\n\n.card-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 12px;\n margin-bottom: 6px;\n}\n\n.card-title {\n font-size: 15px;\n font-weight: 500;\n color: var(--navy);\n margin: 0;\n line-height: 1.4;\n word-wrap: break-word;\n}\n\n.card-title-unread {\n font-weight: 600;\n}\n\n.notification-card.clickable .card-title {\n color: var(--mj-blue);\n}\n\n.notification-card.clickable:hover .card-title {\n text-decoration: underline;\n}\n\n.card-time {\n display: flex;\n align-items: center;\n gap: 5px;\n font-size: 12px;\n color: var(--gray-800);\n white-space: nowrap;\n flex-shrink: 0;\n}\n\n.card-time i {\n font-size: 11px;\n}\n\n/* Card Meta */\n.card-meta {\n margin-bottom: 8px;\n}\n\n.card-type {\n display: inline-flex;\n align-items: center;\n padding: 3px 10px;\n border-radius: 100px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.03em;\n}\n\n/* Card Message */\n.card-message {\n font-size: 14px;\n color: var(--gray-900);\n line-height: 1.5;\n margin: 0;\n display: -webkit-box;\n -webkit-line-clamp: 3;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n/* Card Actions */\n.card-actions {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n padding-top: 4px;\n}\n\n.card-action-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 12px;\n border-radius: 8px;\n font-size: 12px;\n font-weight: 500;\n border: 1px solid var(--gray-700);\n background: var(--white-color);\n color: var(--navy);\n cursor: pointer;\n transition: all 0.2s ease;\n white-space: nowrap;\n}\n\n.card-action-btn:hover {\n background: var(--gray-600);\n border-color: var(--mj-blue);\n color: var(--mj-blue);\n}\n\n.card-action-btn i {\n font-size: 12px;\n}\n\n/* ===================================\n ANIMATIONS\n =================================== */\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n transform: translateY(8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n.notification-card {\n animation: fadeIn 0.3s ease;\n}\n\n/* ===================================\n RESPONSIVE DESIGN\n =================================== */\n\n@media (max-width: 768px) {\n .notifications-container {\n border-radius: 0;\n max-height: none;\n height: 100%;\n }\n\n .header-top {\n flex-direction: column;\n align-items: stretch;\n gap: 12px;\n padding: 16px 16px 12px;\n }\n\n .header-title {\n justify-content: center;\n }\n\n .header-actions {\n justify-content: center;\n }\n\n .header-stats {\n padding: 0 16px 12px;\n justify-content: center;\n flex-wrap: wrap;\n }\n\n .stat-pill {\n padding: 8px 14px;\n }\n\n .header-toolbar {\n flex-direction: column;\n align-items: stretch;\n padding: 12px 16px;\n gap: 12px;\n }\n\n .toolbar-filters {\n flex-direction: column;\n gap: 10px;\n }\n\n .type-filter,\n .search-filter {\n width: 100%;\n max-width: none;\n }\n\n .toolbar-info {\n text-align: center;\n }\n\n .notification-card {\n grid-template-columns: 4px 40px 1fr;\n gap: 12px;\n padding: 16px;\n }\n\n .card-actions {\n grid-column: 2 / -1;\n padding-top: 12px;\n justify-content: flex-start;\n }\n\n .card-icon {\n width: 40px;\n height: 40px;\n }\n\n .card-icon i {\n font-size: 18px;\n }\n\n .card-header {\n flex-direction: column;\n gap: 4px;\n }\n\n .card-time {\n order: -1;\n }\n\n .btn-text {\n display: none;\n }\n\n .action-btn {\n padding: 8px 10px;\n }\n}\n\n@media (max-width: 480px) {\n .header-title h1 {\n font-size: 1.25rem;\n }\n\n .title-icon {\n width: 38px;\n height: 38px;\n }\n\n .title-icon i {\n font-size: 18px;\n }\n\n .stat-pill {\n padding: 6px 12px;\n }\n\n .stat-label {\n font-size: 12px;\n }\n\n .stat-count {\n font-size: 11px;\n padding: 2px 6px;\n min-width: 20px;\n }\n\n .notification-card {\n grid-template-columns: 3px 36px 1fr;\n gap: 10px;\n padding: 14px 12px;\n }\n\n .card-indicator {\n width: 3px;\n min-height: 50px;\n }\n\n .card-icon {\n width: 36px;\n height: 36px;\n border-radius: 10px;\n }\n\n .card-icon i {\n font-size: 16px;\n }\n\n .card-title {\n font-size: 14px;\n }\n\n .card-message {\n font-size: 13px;\n -webkit-line-clamp: 2;\n }\n\n .card-type {\n font-size: 10px;\n padding: 2px 8px;\n }\n\n .action-text {\n display: none;\n }\n\n .card-action-btn {\n padding: 8px;\n }\n\n .empty-state {\n padding: 40px 16px;\n }\n\n .empty-icon {\n width: 64px;\n height: 64px;\n }\n\n .empty-icon i {\n font-size: 26px;\n }\n}\n\n/* ===================================\n KENDO OVERRIDES\n =================================== */\n\n.notifications-list.k-listview {\n font-family: inherit;\n border: none;\n background: transparent;\n}\n\n.type-dropdown.k-dropdownlist {\n border-radius: 8px;\n border-color: var(--gray-700);\n}\n\n.type-dropdown.k-dropdownlist:hover {\n border-color: var(--gray-800);\n}\n\n.type-dropdown.k-dropdownlist.k-focus {\n border-color: var(--mj-blue);\n box-shadow: 0 0 0 2px rgba(0, 118, 182, 0.15);\n}\n\n.search-input.k-textbox {\n border-radius: 8px;\n border-color: var(--gray-700);\n}\n\n.search-input.k-textbox:hover {\n border-color: var(--gray-800);\n}\n\n.search-input.k-textbox.k-focus {\n border-color: var(--mj-blue);\n box-shadow: 0 0 0 2px rgba(0, 118, 182, 0.15);\n}\n"] }]
595
+ args: [{ selector: 'app-user-notifications', template: "<div class=\"notifications-container\">\n <!-- Header Section -->\n <div class=\"notifications-header\">\n <div class=\"header-top\">\n <div class=\"header-title\">\n <div class=\"title-icon\">\n <i class=\"fa-solid fa-bell\"></i>\n </div>\n <h1>Notifications</h1>\n </div>\n\n @if (AllNotifications.length > 0) {\n <div class=\"header-actions\">\n @if (UnreadNotifications.length > 0) {\n <button class=\"action-btn action-btn-ghost\"\n type=\"button\"\n (click)=\"markAllAsRead()\"\n aria-label=\"Mark all notifications as read\">\n <i class=\"fa-solid fa-check-double\" aria-hidden=\"true\"></i>\n <span class=\"btn-text\">Mark All Read</span>\n </button>\n }\n @if (ReadNotifications.length > 0) {\n <button class=\"action-btn action-btn-secondary\"\n type=\"button\"\n (click)=\"markAllAsUnread()\"\n aria-label=\"Mark all notifications as unread\">\n <i class=\"fa-solid fa-envelope\" aria-hidden=\"true\"></i>\n <span class=\"btn-text\">Mark All Unread</span>\n </button>\n }\n </div>\n }\n </div>\n\n <!-- Filters Section -->\n @if (AllNotifications.length > 0) {\n <div class=\"filters-section\">\n <!-- Horizontal Slider for Filters (Mobile) -->\n <div class=\"filters-slider\">\n <div class=\"slider-content\">\n <!-- Stats Pills (Filter Tabs) -->\n <div class=\"header-stats\" role=\"group\" aria-label=\"Filter notifications by read status\">\n <input #allRadio type=\"radio\" name=\"UnreadStatus\" value=\"All\"\n (change)=\"onReadRadioChanged($event)\" checked class=\"hidden-radio\"\n id=\"filter-all\" />\n <button class=\"stat-pill\"\n type=\"button\"\n [class.active]=\"radioSelected === 'All'\"\n (click)=\"selectReadOption('All')\"\n [attr.aria-pressed]=\"radioSelected === 'All'\"\n aria-label=\"Show all notifications\">\n <span class=\"stat-label\">All</span>\n <span class=\"stat-count\">{{AllNotifications.length}}</span>\n </button>\n\n <input #unreadRadio type=\"radio\" name=\"UnreadStatus\" value=\"Unread\"\n (change)=\"onReadRadioChanged($event)\" class=\"hidden-radio\"\n id=\"filter-unread\" />\n @if (UnreadNotifications.length > 0 || ReadNotifications.length === 0) {\n <button class=\"stat-pill\"\n type=\"button\"\n [class.active]=\"radioSelected === 'Unread'\"\n [class.has-unread]=\"UnreadNotifications.length > 0\"\n (click)=\"selectReadOption('Unread')\"\n [attr.aria-pressed]=\"radioSelected === 'Unread'\"\n aria-label=\"Show unread notifications\">\n <span class=\"stat-label\">Unread</span>\n <span class=\"stat-count\" [class.unread-count]=\"UnreadNotifications.length > 0\">\n {{UnreadNotifications.length}}\n </span>\n </button>\n }\n\n <input #readRadio type=\"radio\" name=\"UnreadStatus\" value=\"Read\"\n (change)=\"onReadRadioChanged($event)\" class=\"hidden-radio\"\n id=\"filter-read\" />\n @if (ReadNotifications.length > 0 || UnreadNotifications.length === 0) {\n <button class=\"stat-pill\"\n type=\"button\"\n [class.active]=\"radioSelected === 'Read'\"\n (click)=\"selectReadOption('Read')\"\n [attr.aria-pressed]=\"radioSelected === 'Read'\"\n aria-label=\"Show read notifications\">\n <span class=\"stat-label\">Read</span>\n <span class=\"stat-count\">{{ReadNotifications.length}}</span>\n </button>\n }\n </div>\n\n <!-- Native Type Filter Dropdown (in slider on mobile) -->\n @if (notificationTypes.length > 0) {\n <div class=\"filter-item type-filter-slider\">\n <select class=\"type-select\"\n [(ngModel)]=\"selectedTypeFilter\"\n (change)=\"onTypeFilterChange(selectedTypeFilter)\"\n aria-label=\"Filter by notification type\">\n <option [value]=\"null\">All Types</option>\n @for (type of notificationTypes; track type.ID) {\n <option [value]=\"type.ID\">{{type.Name}}</option>\n }\n </select>\n </div>\n }\n </div>\n </div>\n\n <!-- Search Filter (separate, full-width on mobile) -->\n <div class=\"search-section\">\n <div class=\"search-container\">\n <i class=\"fa-solid fa-magnifying-glass search-icon\" aria-hidden=\"true\"></i>\n <input type=\"text\"\n class=\"search-input\"\n placeholder=\"Search notifications...\"\n [value]=\"currentFilter\"\n (input)=\"onFilterChanged($any($event.target).value)\"\n aria-label=\"Search notifications\" />\n </div>\n </div>\n\n <!-- Filter Info Badge -->\n @if (NotificationsToShow.length !== AllNotifications.length) {\n <div class=\"filter-info\">\n <span class=\"filter-badge\">\n <i class=\"fa-solid fa-filter\" aria-hidden=\"true\"></i>\n Showing {{NotificationsToShow.length}} of {{AllNotifications.length}}\n </span>\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Notifications Content -->\n <div class=\"notifications-content\">\n @if (NotificationsToShow.length === 0 && AllNotifications.length === 0) {\n <div class=\"empty-state\">\n <div class=\"empty-icon\">\n <i class=\"fa-solid fa-bell-slash\"></i>\n </div>\n <h3>No Notifications</h3>\n <p>You're all caught up! New notifications will appear here.</p>\n </div>\n } @else if (NotificationsToShow.length === 0) {\n <div class=\"empty-state\">\n <div class=\"empty-icon\">\n <i class=\"fa-solid fa-filter-circle-xmark\"></i>\n </div>\n <h3>No Matching Notifications</h3>\n <p>Try adjusting your filters to see more notifications.</p>\n </div>\n } @else {\n <!-- Notifications List -->\n <div class=\"notifications-list\">\n @for (notification of NotificationsToShow; track notification.ID) {\n <article class=\"notification-card\"\n [class.unread]=\"notification.Unread\"\n [class.clickable]=\"isNotificationClickable(notification)\"\n role=\"article\"\n [attr.aria-label]=\"notification.Title\">\n\n <!-- Unread Indicator Bar -->\n <div class=\"card-indicator\" aria-hidden=\"true\"></div>\n\n <!-- Type Icon -->\n <div class=\"card-icon\"\n [style.background-color]=\"getTypeColor(notification) + '15'\"\n aria-hidden=\"true\">\n <i [class]=\"'fa-solid ' + getTypeIcon(notification)\"\n [style.color]=\"getTypeColor(notification)\"></i>\n </div>\n\n <!-- Content -->\n <div class=\"card-content\" (click)=\"notificationClicked(notification)\">\n <div class=\"card-header\">\n <h3 class=\"card-title\" [class.card-title-unread]=\"notification.Unread\">\n {{notification.Title}}\n </h3>\n <span class=\"card-time\">\n <i class=\"fa-regular fa-clock\" aria-hidden=\"true\"></i>\n <time [attr.datetime]=\"notification.__mj_CreatedAt\">\n {{notification.__mj_CreatedAt | date:'MMM d, h:mm a'}}\n </time>\n </span>\n </div>\n\n <div class=\"card-meta\">\n <span class=\"card-type\"\n [style.background-color]=\"getTypeColor(notification) + '15'\"\n [style.color]=\"getTypeColor(notification)\">\n {{getTypeName(notification)}}\n </span>\n </div>\n\n <p class=\"card-message\">{{notification.Message}}</p>\n </div>\n\n <!-- Actions -->\n <div class=\"card-actions\">\n @if (notification.Unread) {\n <button class=\"card-action-btn\"\n type=\"button\"\n (click)=\"markAsRead(notification, true, null)\"\n [attr.aria-label]=\"'Mark ' + notification.Title + ' as read'\"\n title=\"Mark as Read\">\n <i class=\"fa-solid fa-check\" aria-hidden=\"true\"></i>\n <span class=\"action-text\">Read</span>\n </button>\n } @else {\n <button class=\"card-action-btn\"\n type=\"button\"\n (click)=\"markAsRead(notification, false, null)\"\n [attr.aria-label]=\"'Mark ' + notification.Title + ' as unread'\"\n title=\"Mark as Unread\">\n <i class=\"fa-solid fa-envelope\" aria-hidden=\"true\"></i>\n <span class=\"action-text\">Unread</span>\n </button>\n }\n </div>\n </article>\n }\n </div>\n }\n </div>\n</div>\n", styles: ["/* ===================================\n USER NOTIFICATIONS - MD3 DESIGN\n iPhone-inspired UX with Circular Buttons\n =================================== */\n\n/* MD3 Color Tokens */\n:host {\n /* Primary - MJ Blue */\n --mj-blue: #0076B6;\n --mj-blue-hover: #3395C8;\n --mj-blue-active: #4BA5D4;\n --mj-blue-light: #AAE7FD;\n\n /* Surface Colors */\n --surface: #FAFCFF;\n --surface-container: #EDF0F4;\n --surface-container-low: #F3F5F9;\n --on-surface: #191C20;\n --on-surface-variant: #43474E;\n --outline: #74777F;\n --outline-variant: #C4C6D0;\n\n /* Elevation */\n --elevation-1: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 3px rgba(0, 0, 0, 0.08);\n --elevation-2: 0 2px 4px rgba(0, 0, 0, 0.1), 0 4px 8px rgba(0, 0, 0, 0.08);\n --elevation-3: 0 4px 8px rgba(0, 0, 0, 0.1), 0 8px 16px rgba(0, 0, 0, 0.08);\n\n display: block;\n width: 100%;\n height: 100%;\n}\n\n/* ===================================\n CONTAINER\n =================================== */\n\n.notifications-container {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: var(--surface);\n border-radius: 12px;\n box-shadow: var(--elevation-1);\n overflow: hidden;\n}\n\n/* ===================================\n HEADER SECTION\n =================================== */\n\n.notifications-header {\n background: linear-gradient(to bottom, #FFFFFF, var(--surface-container-low));\n border-bottom: 1px solid var(--outline-variant);\n padding: 0;\n flex-shrink: 0;\n}\n\n/* Header Top Row */\n.header-top {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 24px 24px 16px;\n gap: 16px;\n}\n\n.header-title {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.title-icon {\n width: 48px;\n height: 48px;\n background: linear-gradient(135deg, var(--mj-blue) 0%, #0091d5 100%);\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-shadow: 0 4px 12px rgba(0, 118, 182, 0.3);\n transition: transform 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n.title-icon:hover {\n transform: scale(1.05);\n}\n\n.title-icon i {\n font-size: 22px;\n color: white;\n}\n\n.header-title h1 {\n font-size: 1.75rem;\n font-weight: 700;\n color: var(--on-surface);\n margin: 0;\n letter-spacing: -0.02em;\n}\n\n/* ===================================\n HEADER ACTIONS - Circular Buttons\n =================================== */\n\n.header-actions {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.action-btn {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n border-radius: 9999px; /* Circular design */\n font-size: 14px;\n font-weight: 600;\n border: 2px solid var(--mj-blue);\n cursor: pointer;\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n min-height: 44px;\n font-family: inherit;\n}\n\n.action-btn i {\n font-size: 16px;\n transition: transform 0.2s ease;\n}\n\n.action-btn:hover i {\n transform: scale(1.1);\n}\n\n/* Ghost Button - White Background (Mark All Read) */\n.action-btn-ghost {\n background: white;\n color: var(--mj-blue);\n border-color: var(--mj-blue);\n}\n\n.action-btn-ghost:hover {\n background: var(--mj-blue);\n color: white;\n border-color: var(--mj-blue);\n box-shadow: var(--elevation-2);\n}\n\n.action-btn-ghost:active {\n background: var(--mj-blue-active);\n transform: scale(0.98);\n}\n\n/* Secondary Button */\n.action-btn-secondary {\n background: white;\n color: var(--mj-blue);\n border-color: var(--mj-blue);\n}\n\n.action-btn-secondary:hover {\n background: var(--mj-blue);\n color: white;\n border-color: var(--mj-blue);\n}\n\n.action-btn-secondary:active {\n transform: scale(0.98);\n}\n\n/* ===================================\n FILTERS SECTION\n =================================== */\n\n.filters-section {\n display: flex;\n flex-direction: column;\n gap: 12px;\n background: var(--surface-container-low);\n border-top: 1px solid var(--outline-variant);\n}\n\n.filters-slider {\n overflow-x: auto;\n overflow-y: hidden;\n -webkit-overflow-scrolling: touch;\n scrollbar-width: none;\n -ms-overflow-style: none;\n}\n\n.filters-slider::-webkit-scrollbar {\n display: none;\n}\n\n.slider-content {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 16px 24px;\n min-width: min-content;\n}\n\n/* ===================================\n STATS PILLS (Filter Tabs) - Circular with mj-blue Active\n =================================== */\n\n.header-stats {\n display: flex;\n align-items: center;\n gap: 10px;\n flex-shrink: 0;\n}\n\n.hidden-radio {\n position: absolute;\n opacity: 0;\n pointer-events: none;\n}\n\n.stat-pill {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n border-radius: 9999px; /* Circular design */\n border: 2px solid var(--mj-blue);\n background: white;\n cursor: pointer;\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n font-family: inherit;\n min-height: 44px;\n}\n\n.stat-pill:hover:not(.active) {\n background: var(--surface-container-low);\n border-color: var(--mj-blue-hover);\n transform: translateY(-1px);\n}\n\n/* Active State - MJ Blue */\n.stat-pill.active {\n background: var(--mj-blue);\n border-color: var(--mj-blue);\n color: white;\n box-shadow: 0 4px 12px rgba(0, 118, 182, 0.35);\n transform: translateY(-1px);\n}\n\n.stat-label {\n font-size: 14px;\n font-weight: 600;\n}\n\n.stat-count {\n font-size: 13px;\n font-weight: 700;\n padding: 4px 10px;\n border-radius: 9999px;\n background: var(--surface-container);\n color: var(--on-surface);\n min-width: 28px;\n text-align: center;\n transition: all 0.2s ease;\n}\n\n.stat-pill.active .stat-count {\n background: rgba(255, 255, 255, 0.25);\n color: white;\n}\n\n.stat-count.unread-count {\n background: var(--mj-blue-light);\n color: var(--mj-blue);\n font-weight: 700;\n}\n\n.stat-pill.has-unread:not(.active) {\n border-color: var(--mj-blue);\n}\n\n/* ===================================\n TYPE FILTER IN SLIDER\n =================================== */\n\n.type-filter-slider {\n flex-shrink: 0;\n min-width: 180px;\n}\n\n/* ===================================\n SEARCH SECTION\n =================================== */\n\n.search-section {\n padding: 0 24px 16px;\n}\n\n/* ===================================\n FILTER INFO\n =================================== */\n\n.filter-info {\n padding: 0 24px 16px;\n display: flex;\n justify-content: center;\n}\n\n/* Native Select Dropdown Styling */\n.type-select {\n width: 100%;\n padding: 10px 16px;\n border: 2px solid var(--mj-blue);\n border-radius: 9999px; /* Circular design */\n font-size: 14px;\n font-weight: 500;\n color: var(--on-surface);\n background: white;\n cursor: pointer;\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n font-family: inherit;\n appearance: none;\n background-image: url(\"data:image/svg+xml,%3Csvg width='12' height='8' viewBox='0 0 12 8' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1 1.5L6 6.5L11 1.5' stroke='%230076B6' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: right 16px center;\n padding-right: 42px;\n}\n\n.type-select:hover {\n border-color: var(--mj-blue-hover);\n background-color: var(--surface-container-low);\n}\n\n.type-select:focus {\n outline: none;\n border-color: var(--mj-blue);\n box-shadow: 0 0 0 3px rgba(0, 118, 182, 0.15);\n}\n\n.search-container {\n position: relative;\n width: 100%;\n max-width: 100%;\n}\n\n.search-icon {\n position: absolute;\n left: 16px;\n top: 50%;\n transform: translateY(-50%);\n color: var(--on-surface-variant);\n font-size: 14px;\n pointer-events: none;\n transition: color 0.2s ease;\n}\n\n.search-input {\n width: 100%;\n padding: 10px 16px 10px 44px;\n border: 2px solid var(--mj-blue);\n border-radius: 9999px; /* Circular design */\n font-size: 14px;\n font-weight: 500;\n background: white;\n color: var(--on-surface);\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n font-family: inherit;\n}\n\n.search-input::placeholder {\n color: var(--on-surface-variant);\n}\n\n.search-input:hover {\n border-color: var(--mj-blue-hover);\n background: var(--surface-container-low);\n}\n\n.search-input:focus {\n outline: none;\n border-color: var(--mj-blue);\n box-shadow: 0 0 0 3px rgba(0, 118, 182, 0.15);\n background: white;\n}\n\n.search-container:focus-within .search-icon {\n color: var(--mj-blue);\n}\n\n.filter-badge {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 14px;\n background: var(--mj-blue-light);\n color: var(--mj-blue);\n border-radius: 9999px; /* Circular design */\n font-size: 13px;\n font-weight: 600;\n border: 1px solid var(--mj-blue);\n}\n\n.filter-badge i {\n font-size: 12px;\n}\n\n/* ===================================\n NOTIFICATIONS CONTENT\n =================================== */\n\n.notifications-content {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n -webkit-overflow-scrolling: touch; /* iPhone smooth scrolling */\n}\n\n/* Custom Scrollbar */\n.notifications-content::-webkit-scrollbar {\n width: 8px;\n}\n\n.notifications-content::-webkit-scrollbar-track {\n background: var(--surface-container-low);\n}\n\n.notifications-content::-webkit-scrollbar-thumb {\n background: var(--outline-variant);\n border-radius: 4px;\n}\n\n.notifications-content::-webkit-scrollbar-thumb:hover {\n background: var(--outline);\n}\n\n/* ===================================\n EMPTY STATE\n =================================== */\n\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 80px 32px;\n text-align: center;\n}\n\n.empty-icon {\n width: 96px;\n height: 96px;\n background: var(--surface-container);\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 24px;\n}\n\n.empty-icon i {\n font-size: 40px;\n color: var(--outline);\n}\n\n.empty-state h3 {\n font-size: 20px;\n font-weight: 700;\n color: var(--on-surface);\n margin: 0 0 8px;\n}\n\n.empty-state p {\n font-size: 15px;\n color: var(--on-surface-variant);\n margin: 0;\n max-width: 320px;\n line-height: 1.5;\n}\n\n/* ===================================\n NOTIFICATIONS LIST\n =================================== */\n\n.notifications-list {\n background: transparent;\n}\n\n/* ===================================\n NOTIFICATION CARD - iPhone UX Style\n =================================== */\n\n.notification-card {\n display: grid;\n grid-template-columns: 4px 56px 1fr auto;\n gap: 14px;\n align-items: start;\n padding: 16px 20px;\n background: white;\n border-bottom: 1px solid var(--outline-variant);\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n position: relative;\n}\n\n.notification-card:last-child {\n border-bottom: none;\n}\n\n.notification-card:hover {\n background: var(--surface-container-low);\n}\n\n.notification-card.clickable {\n cursor: pointer;\n}\n\n.notification-card.clickable:active {\n background: var(--surface-container);\n transform: scale(0.995);\n}\n\n/* Unread State with Blue Highlight */\n.notification-card.unread {\n background: linear-gradient(90deg, rgba(170, 231, 253, 0.3) 0%, white 60%);\n}\n\n.notification-card.unread:hover {\n background: linear-gradient(90deg, rgba(170, 231, 253, 0.4) 0%, var(--surface-container-low) 60%);\n}\n\n/* Card Indicator - Blue Bar for Unread */\n.card-indicator {\n width: 4px;\n height: 100%;\n min-height: 64px;\n border-radius: 2px;\n background: transparent;\n transition: all 0.2s ease;\n align-self: stretch;\n}\n\n.notification-card.unread .card-indicator {\n background: var(--mj-blue);\n box-shadow: 0 0 8px rgba(0, 118, 182, 0.5);\n}\n\n/* Card Icon - Larger and More Prominent */\n.card-icon {\n width: 56px;\n height: 56px;\n border-radius: 14px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n transition: transform 0.2s ease;\n}\n\n.notification-card:hover .card-icon {\n transform: scale(1.05);\n}\n\n.card-icon i {\n font-size: 24px;\n}\n\n/* Card Content */\n.card-content {\n flex: 1;\n min-width: 0;\n}\n\n.card-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 12px;\n margin-bottom: 6px;\n}\n\n.card-title {\n font-size: 16px;\n font-weight: 500;\n color: var(--on-surface);\n margin: 0;\n line-height: 1.4;\n word-wrap: break-word;\n}\n\n.card-title-unread {\n font-weight: 700;\n color: var(--on-surface);\n}\n\n.notification-card.clickable .card-title {\n color: var(--mj-blue);\n}\n\n.notification-card.clickable:hover .card-title {\n text-decoration: underline;\n}\n\n.card-time {\n display: flex;\n align-items: center;\n gap: 5px;\n font-size: 13px;\n color: var(--on-surface-variant);\n white-space: nowrap;\n flex-shrink: 0;\n}\n\n.card-time i {\n font-size: 12px;\n}\n\n/* Card Meta */\n.card-meta {\n margin-bottom: 8px;\n}\n\n.card-type {\n display: inline-flex;\n align-items: center;\n padding: 4px 12px;\n border-radius: 9999px; /* Circular design */\n font-size: 12px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.03em;\n}\n\n/* Card Message */\n.card-message {\n font-size: 15px;\n color: var(--on-surface-variant);\n line-height: 1.5;\n margin: 0;\n display: -webkit-box;\n -webkit-line-clamp: 3;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n/* Card Actions - Circular Buttons */\n.card-actions {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n padding-top: 6px;\n}\n\n.card-action-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n border-radius: 9999px; /* Circular design */\n font-size: 13px;\n font-weight: 600;\n border: 2px solid var(--mj-blue);\n background: white;\n color: var(--mj-blue);\n cursor: pointer;\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n white-space: nowrap;\n font-family: inherit;\n}\n\n.card-action-btn:hover {\n background: var(--mj-blue);\n border-color: var(--mj-blue);\n color: white;\n transform: translateY(-1px);\n box-shadow: var(--elevation-2);\n}\n\n.card-action-btn:active {\n transform: translateY(0) scale(0.98);\n}\n\n.card-action-btn i {\n font-size: 13px;\n}\n\n/* ===================================\n ANIMATIONS\n =================================== */\n\n@keyframes slideInUp {\n from {\n opacity: 0;\n transform: translateY(12px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n.notification-card {\n animation: slideInUp 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n/* ===================================\n ACCESSIBILITY\n =================================== */\n\nbutton:focus-visible,\ninput:focus-visible,\nselect:focus-visible {\n outline: 2px solid var(--mj-blue);\n outline-offset: 2px;\n}\n\n/* Reduced Motion */\n@media (prefers-reduced-motion: reduce) {\n *,\n *::before,\n *::after {\n animation-duration: 0.01ms !important;\n animation-iteration-count: 1 !important;\n transition-duration: 0.01ms !important;\n }\n}\n\n/* ===================================\n RESPONSIVE DESIGN - iPhone UX\n =================================== */\n\n/* iPad and smaller */\n@media (max-width: 768px) {\n .notifications-container {\n border-radius: 0;\n box-shadow: none;\n }\n\n .header-top {\n padding: 20px 20px 14px;\n }\n\n .title-icon {\n width: 44px;\n height: 44px;\n }\n\n .title-icon i {\n font-size: 20px;\n }\n\n .header-title h1 {\n font-size: 1.5rem;\n }\n\n /* Horizontal Slider on Mobile */\n .slider-content {\n padding: 14px 20px;\n gap: 10px;\n }\n\n .stat-pill {\n padding: 8px 16px;\n flex-shrink: 0;\n }\n\n .type-filter-slider {\n min-width: 160px;\n }\n\n .search-section {\n padding: 0 20px 14px;\n }\n\n .filter-info {\n padding: 0 20px 14px;\n }\n\n .notification-card {\n grid-template-columns: 4px 52px 1fr;\n gap: 12px;\n padding: 14px 16px;\n }\n\n .card-actions {\n grid-column: 2 / -1;\n padding-top: 10px;\n }\n\n .card-icon {\n width: 52px;\n height: 52px;\n }\n\n .card-icon i {\n font-size: 22px;\n }\n}\n\n/* iPhone SE and smaller */\n@media (max-width: 480px) {\n .header-top {\n flex-direction: column;\n align-items: stretch;\n gap: 12px;\n padding: 16px 16px 12px;\n }\n\n .header-title {\n justify-content: flex-start;\n }\n\n .title-icon {\n width: 40px;\n height: 40px;\n }\n\n .title-icon i {\n font-size: 18px;\n }\n\n .header-title h1 {\n font-size: 1.375rem;\n }\n\n .header-actions {\n width: 100%;\n justify-content: stretch;\n gap: 8px;\n }\n\n .action-btn {\n flex: 1;\n justify-content: center;\n padding: 10px 16px;\n font-size: 13px;\n }\n\n .btn-text {\n display: none;\n }\n\n /* Horizontal Slider - iPhone */\n .slider-content {\n padding: 12px 16px;\n gap: 8px;\n }\n\n .header-stats {\n gap: 8px;\n }\n\n .stat-pill {\n padding: 8px 14px;\n min-height: 40px;\n flex-shrink: 0;\n }\n\n .stat-label {\n font-size: 13px;\n }\n\n .stat-count {\n font-size: 12px;\n padding: 3px 8px;\n min-width: 24px;\n }\n\n .type-filter-slider {\n min-width: 140px;\n }\n\n .type-select,\n .search-input {\n font-size: 16px; /* Prevent iOS zoom on focus */\n }\n\n .search-section {\n padding: 0 16px 12px;\n }\n\n .filter-info {\n padding: 0 16px 12px;\n }\n\n .notification-card {\n grid-template-columns: 3px 48px 1fr;\n gap: 10px;\n padding: 12px 12px;\n }\n\n .card-indicator {\n width: 3px;\n min-height: 56px;\n }\n\n .card-icon {\n width: 48px;\n height: 48px;\n border-radius: 12px;\n }\n\n .card-icon i {\n font-size: 20px;\n }\n\n .card-title {\n font-size: 15px;\n }\n\n .card-time {\n font-size: 12px;\n }\n\n .card-message {\n font-size: 14px;\n -webkit-line-clamp: 2;\n }\n\n .card-type {\n font-size: 11px;\n padding: 3px 10px;\n }\n\n .card-actions {\n padding-top: 8px;\n gap: 6px;\n }\n\n .action-text {\n display: none;\n }\n\n .card-action-btn {\n padding: 8px 12px;\n min-width: 40px;\n justify-content: center;\n }\n\n .empty-state {\n padding: 60px 20px;\n }\n\n .empty-icon {\n width: 80px;\n height: 80px;\n }\n\n .empty-icon i {\n font-size: 32px;\n }\n\n .empty-state h3 {\n font-size: 18px;\n }\n\n .empty-state p {\n font-size: 14px;\n }\n}\n\n/* iPhone 12/13/14 Pro Max and similar */\n@media (min-width: 390px) and (max-width: 480px) {\n .btn-text {\n display: inline;\n }\n\n .action-btn {\n font-size: 14px;\n }\n}\n\n/* Dark mode support (if needed in future) */\n@media (prefers-color-scheme: dark) {\n /* Dark mode styles would go here */\n}\n"] }]
579
596
  }], () => [{ type: i1.SharedService }, { type: i2.Router }], { allRadio: [{
580
597
  type: ViewChild,
581
598
  args: ['allRadio']