@memberjunction/ng-dashboards 2.120.0 → 2.122.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 (203) hide show
  1. package/dist/AI/components/agents/agent-configuration.component.d.ts +23 -11
  2. package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
  3. package/dist/AI/components/agents/agent-configuration.component.js +122 -95
  4. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  5. package/dist/AI/components/agents/agent-editor.component.js +88 -90
  6. package/dist/AI/components/agents/agent-editor.component.js.map +1 -1
  7. package/dist/AI/components/agents/agent-filter-panel.component.js +2 -2
  8. package/dist/AI/components/execution-monitoring.component.d.ts +23 -10
  9. package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
  10. package/dist/AI/components/execution-monitoring.component.js +143 -124
  11. package/dist/AI/components/execution-monitoring.component.js.map +1 -1
  12. package/dist/AI/components/models/model-management-v2.component.d.ts +17 -13
  13. package/dist/AI/components/models/model-management-v2.component.d.ts.map +1 -1
  14. package/dist/AI/components/models/model-management-v2.component.js +248 -266
  15. package/dist/AI/components/models/model-management-v2.component.js.map +1 -1
  16. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +76 -78
  17. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
  18. package/dist/AI/components/prompts/prompt-filter-panel.component.js +2 -2
  19. package/dist/AI/components/prompts/prompt-management-v2.component.d.ts +17 -15
  20. package/dist/AI/components/prompts/prompt-management-v2.component.d.ts.map +1 -1
  21. package/dist/AI/components/prompts/prompt-management-v2.component.js +372 -397
  22. package/dist/AI/components/prompts/prompt-management-v2.component.js.map +1 -1
  23. package/dist/AI/components/prompts/prompt-version-control.component.js +100 -102
  24. package/dist/AI/components/prompts/prompt-version-control.component.js.map +1 -1
  25. package/dist/AI/components/system/system-config-filter-panel.component.js +2 -2
  26. package/dist/AI/components/system/system-configuration.component.d.ts +17 -10
  27. package/dist/AI/components/system/system-configuration.component.d.ts.map +1 -1
  28. package/dist/AI/components/system/system-configuration.component.js +82 -61
  29. package/dist/AI/components/system/system-configuration.component.js.map +1 -1
  30. package/dist/AI/components/widgets/kpi-card.component.d.ts.map +1 -1
  31. package/dist/AI/components/widgets/kpi-card.component.js +11 -7
  32. package/dist/AI/components/widgets/kpi-card.component.js.map +1 -1
  33. package/dist/AI/index.d.ts +4 -0
  34. package/dist/AI/index.d.ts.map +1 -1
  35. package/dist/AI/index.js +6 -1
  36. package/dist/AI/index.js.map +1 -1
  37. package/dist/Actions/components/actions-list-view.component.js +9 -9
  38. package/dist/Actions/components/actions-list-view.component.js.map +1 -1
  39. package/dist/Actions/components/actions-overview.component.d.ts +16 -13
  40. package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
  41. package/dist/Actions/components/actions-overview.component.js +62 -48
  42. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  43. package/dist/Actions/components/categories-list-view.component.js +9 -9
  44. package/dist/Actions/components/categories-list-view.component.js.map +1 -1
  45. package/dist/Actions/components/code-management.component.d.ts +17 -7
  46. package/dist/Actions/components/code-management.component.d.ts.map +1 -1
  47. package/dist/Actions/components/code-management.component.js +45 -12
  48. package/dist/Actions/components/code-management.component.js.map +1 -1
  49. package/dist/Actions/components/entity-integration.component.d.ts +17 -7
  50. package/dist/Actions/components/entity-integration.component.d.ts.map +1 -1
  51. package/dist/Actions/components/entity-integration.component.js +45 -12
  52. package/dist/Actions/components/entity-integration.component.js.map +1 -1
  53. package/dist/Actions/components/execution-monitoring.component.d.ts +16 -10
  54. package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
  55. package/dist/Actions/components/execution-monitoring.component.js +56 -30
  56. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  57. package/dist/Actions/components/scheduled-actions.component.d.ts +17 -7
  58. package/dist/Actions/components/scheduled-actions.component.d.ts.map +1 -1
  59. package/dist/Actions/components/scheduled-actions.component.js +45 -12
  60. package/dist/Actions/components/scheduled-actions.component.js.map +1 -1
  61. package/dist/Actions/components/security-permissions.component.d.ts +17 -7
  62. package/dist/Actions/components/security-permissions.component.d.ts.map +1 -1
  63. package/dist/Actions/components/security-permissions.component.js +45 -12
  64. package/dist/Actions/components/security-permissions.component.js.map +1 -1
  65. package/dist/Actions/index.d.ts +6 -1
  66. package/dist/Actions/index.d.ts.map +1 -1
  67. package/dist/Actions/index.js +9 -1
  68. package/dist/Actions/index.js.map +1 -1
  69. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts +1 -1
  70. package/dist/ComponentStudio/component-studio-dashboard.component.js +8 -8
  71. package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
  72. package/dist/ComponentStudio/components/artifact-load-dialog.component.js +52 -57
  73. package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
  74. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +8 -9
  75. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
  76. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts +107 -0
  77. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts.map +1 -0
  78. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js +553 -0
  79. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js.map +1 -0
  80. package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.d.ts +179 -0
  81. package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.d.ts.map +1 -0
  82. package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.js +814 -0
  83. package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.js.map +1 -0
  84. package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts +151 -0
  85. package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts.map +1 -0
  86. package/dist/DataExplorer/components/view-selector/view-selector.component.js +480 -0
  87. package/dist/DataExplorer/components/view-selector/view-selector.component.js.map +1 -0
  88. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +439 -0
  89. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -0
  90. package/dist/DataExplorer/data-explorer-dashboard.component.js +2129 -0
  91. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -0
  92. package/dist/DataExplorer/index.d.ts +5 -0
  93. package/dist/DataExplorer/index.d.ts.map +1 -0
  94. package/dist/DataExplorer/index.js +10 -0
  95. package/dist/DataExplorer/index.js.map +1 -0
  96. package/dist/DataExplorer/models/explorer-state.interface.d.ts +183 -0
  97. package/dist/DataExplorer/models/explorer-state.interface.d.ts.map +1 -0
  98. package/dist/DataExplorer/models/explorer-state.interface.js +31 -0
  99. package/dist/DataExplorer/models/explorer-state.interface.js.map +1 -0
  100. package/dist/DataExplorer/services/explorer-state.service.d.ts +232 -0
  101. package/dist/DataExplorer/services/explorer-state.service.d.ts.map +1 -0
  102. package/dist/DataExplorer/services/explorer-state.service.js +912 -0
  103. package/dist/DataExplorer/services/explorer-state.service.js.map +1 -0
  104. package/dist/EntityAdmin/components/entity-details.component.d.ts.map +1 -1
  105. package/dist/EntityAdmin/components/entity-details.component.js +11 -13
  106. package/dist/EntityAdmin/components/entity-details.component.js.map +1 -1
  107. package/dist/EntityAdmin/components/entity-filter-panel.component.js +2 -2
  108. package/dist/EntityAdmin/components/erd-composite.component.js +2 -2
  109. package/dist/EntityAdmin/components/erd-diagram.component.js +2 -2
  110. package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts +1 -1
  111. package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
  112. package/dist/EntityAdmin/entity-admin-dashboard.component.js +14 -15
  113. package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
  114. package/dist/Home/home-dashboard.component.d.ts +122 -0
  115. package/dist/Home/home-dashboard.component.d.ts.map +1 -0
  116. package/dist/Home/home-dashboard.component.js +698 -0
  117. package/dist/Home/home-dashboard.component.js.map +1 -0
  118. package/dist/Scheduling/components/index.d.ts +11 -0
  119. package/dist/Scheduling/components/index.d.ts.map +1 -0
  120. package/dist/Scheduling/components/index.js +13 -0
  121. package/dist/Scheduling/components/index.js.map +1 -0
  122. package/dist/Scheduling/components/scheduling-health-resource.component.d.ts +20 -0
  123. package/dist/Scheduling/components/scheduling-health-resource.component.d.ts.map +1 -0
  124. package/dist/Scheduling/components/scheduling-health-resource.component.js +55 -0
  125. package/dist/Scheduling/components/scheduling-health-resource.component.js.map +1 -0
  126. package/dist/Scheduling/components/scheduling-health.component.js +7 -8
  127. package/dist/Scheduling/components/scheduling-health.component.js.map +1 -1
  128. package/dist/Scheduling/components/scheduling-history-resource.component.d.ts +20 -0
  129. package/dist/Scheduling/components/scheduling-history-resource.component.d.ts.map +1 -0
  130. package/dist/Scheduling/components/scheduling-history-resource.component.js +55 -0
  131. package/dist/Scheduling/components/scheduling-history-resource.component.js.map +1 -0
  132. package/dist/Scheduling/components/scheduling-history.component.js +7 -8
  133. package/dist/Scheduling/components/scheduling-history.component.js.map +1 -1
  134. package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts +20 -0
  135. package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts.map +1 -0
  136. package/dist/Scheduling/components/scheduling-jobs-resource.component.js +55 -0
  137. package/dist/Scheduling/components/scheduling-jobs-resource.component.js.map +1 -0
  138. package/dist/Scheduling/components/scheduling-jobs.component.js +7 -8
  139. package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
  140. package/dist/Scheduling/components/scheduling-monitor-resource.component.d.ts +20 -0
  141. package/dist/Scheduling/components/scheduling-monitor-resource.component.d.ts.map +1 -0
  142. package/dist/Scheduling/components/scheduling-monitor-resource.component.js +55 -0
  143. package/dist/Scheduling/components/scheduling-monitor-resource.component.js.map +1 -0
  144. package/dist/Scheduling/components/scheduling-monitoring.component.js +7 -8
  145. package/dist/Scheduling/components/scheduling-monitoring.component.js.map +1 -1
  146. package/dist/Scheduling/components/scheduling-types-resource.component.d.ts +20 -0
  147. package/dist/Scheduling/components/scheduling-types-resource.component.d.ts.map +1 -0
  148. package/dist/Scheduling/components/scheduling-types-resource.component.js +55 -0
  149. package/dist/Scheduling/components/scheduling-types-resource.component.js.map +1 -0
  150. package/dist/Scheduling/components/scheduling-types.component.js +7 -8
  151. package/dist/Scheduling/components/scheduling-types.component.js.map +1 -1
  152. package/dist/Scheduling/scheduling-dashboard.component.d.ts +1 -1
  153. package/dist/Scheduling/scheduling-dashboard.component.js +3 -3
  154. package/dist/Testing/components/index.d.ts +11 -0
  155. package/dist/Testing/components/index.d.ts.map +1 -0
  156. package/dist/Testing/components/index.js +13 -0
  157. package/dist/Testing/components/index.js.map +1 -0
  158. package/dist/Testing/components/testing-analytics-resource.component.d.ts +20 -0
  159. package/dist/Testing/components/testing-analytics-resource.component.d.ts.map +1 -0
  160. package/dist/Testing/components/testing-analytics-resource.component.js +55 -0
  161. package/dist/Testing/components/testing-analytics-resource.component.js.map +1 -0
  162. package/dist/Testing/components/testing-execution-resource.component.d.ts +20 -0
  163. package/dist/Testing/components/testing-execution-resource.component.d.ts.map +1 -0
  164. package/dist/Testing/components/testing-execution-resource.component.js +55 -0
  165. package/dist/Testing/components/testing-execution-resource.component.js.map +1 -0
  166. package/dist/Testing/components/testing-execution.component.js +3 -3
  167. package/dist/Testing/components/testing-execution.component.js.map +1 -1
  168. package/dist/Testing/components/testing-feedback-resource.component.d.ts +20 -0
  169. package/dist/Testing/components/testing-feedback-resource.component.d.ts.map +1 -0
  170. package/dist/Testing/components/testing-feedback-resource.component.js +55 -0
  171. package/dist/Testing/components/testing-feedback-resource.component.js.map +1 -0
  172. package/dist/Testing/components/testing-overview-resource.component.d.ts +20 -0
  173. package/dist/Testing/components/testing-overview-resource.component.d.ts.map +1 -0
  174. package/dist/Testing/components/testing-overview-resource.component.js +55 -0
  175. package/dist/Testing/components/testing-overview-resource.component.js.map +1 -0
  176. package/dist/Testing/components/testing-version-resource.component.d.ts +20 -0
  177. package/dist/Testing/components/testing-version-resource.component.d.ts.map +1 -0
  178. package/dist/Testing/components/testing-version-resource.component.js +55 -0
  179. package/dist/Testing/components/testing-version-resource.component.js.map +1 -0
  180. package/dist/Testing/testing-dashboard.component.d.ts +1 -1
  181. package/dist/Testing/testing-dashboard.component.js +23 -25
  182. package/dist/Testing/testing-dashboard.component.js.map +1 -1
  183. package/dist/module.d.ts +83 -66
  184. package/dist/module.d.ts.map +1 -1
  185. package/dist/module.js +137 -19
  186. package/dist/module.js.map +1 -1
  187. package/dist/public-api.d.ts +6 -4
  188. package/dist/public-api.d.ts.map +1 -1
  189. package/dist/public-api.js +41 -13
  190. package/dist/public-api.js.map +1 -1
  191. package/package.json +17 -14
  192. package/dist/AI/ai-dashboard.component.d.ts +0 -62
  193. package/dist/AI/ai-dashboard.component.d.ts.map +0 -1
  194. package/dist/AI/ai-dashboard.component.js +0 -338
  195. package/dist/AI/ai-dashboard.component.js.map +0 -1
  196. package/dist/Actions/actions-management-dashboard.component.d.ts +0 -52
  197. package/dist/Actions/actions-management-dashboard.component.d.ts.map +0 -1
  198. package/dist/Actions/actions-management-dashboard.component.js +0 -308
  199. package/dist/Actions/actions-management-dashboard.component.js.map +0 -1
  200. package/dist/generic/base-dashboard.d.ts +0 -65
  201. package/dist/generic/base-dashboard.d.ts.map +0 -1
  202. package/dist/generic/base-dashboard.js +0 -74
  203. package/dist/generic/base-dashboard.js.map +0 -1
@@ -0,0 +1,698 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Component, ViewChild } from '@angular/core';
8
+ import { Subject } from 'rxjs';
9
+ import { takeUntil } from 'rxjs/operators';
10
+ import { BaseDashboard } from '@memberjunction/ng-shared';
11
+ import { RegisterClass } from '@memberjunction/global';
12
+ import { Metadata, RunView } from '@memberjunction/core';
13
+ import { MJNotificationService } from '@memberjunction/ng-notifications';
14
+ import * as i0 from "@angular/core";
15
+ import * as i1 from "@memberjunction/ng-base-application";
16
+ import * as i2 from "@memberjunction/ng-shared";
17
+ import * as i3 from "@angular/router";
18
+ import * as i4 from "@angular/common";
19
+ import * as i5 from "@memberjunction/ng-shared-generic";
20
+ const _c0 = ["appConfigDialog"];
21
+ function HomeDashboardComponent_div_8_Template(rf, ctx) { if (rf & 1) {
22
+ i0.ɵɵelementStart(0, "div", 9);
23
+ i0.ɵɵelement(1, "mj-loading", 10);
24
+ i0.ɵɵelementEnd();
25
+ } }
26
+ function HomeDashboardComponent_div_9_div_5_p_7_Template(rf, ctx) { if (rf & 1) {
27
+ i0.ɵɵelementStart(0, "p", 26);
28
+ i0.ɵɵtext(1);
29
+ i0.ɵɵelementEnd();
30
+ } if (rf & 2) {
31
+ const app_r2 = i0.ɵɵnextContext().$implicit;
32
+ i0.ɵɵadvance();
33
+ i0.ɵɵtextInterpolate(app_r2.Description);
34
+ } }
35
+ function HomeDashboardComponent_div_9_div_5_div_8_div_1_Template(rf, ctx) { if (rf & 1) {
36
+ i0.ɵɵelementStart(0, "div", 30);
37
+ i0.ɵɵelement(1, "i");
38
+ i0.ɵɵelementStart(2, "span");
39
+ i0.ɵɵtext(3);
40
+ i0.ɵɵelementEnd()();
41
+ } if (rf & 2) {
42
+ const item_r4 = ctx.$implicit;
43
+ i0.ɵɵadvance();
44
+ i0.ɵɵclassMap(item_r4.Icon);
45
+ i0.ɵɵadvance(2);
46
+ i0.ɵɵtextInterpolate(item_r4.Label);
47
+ } }
48
+ function HomeDashboardComponent_div_9_div_5_div_8_span_2_Template(rf, ctx) { if (rf & 1) {
49
+ i0.ɵɵelementStart(0, "span", 31);
50
+ i0.ɵɵtext(1);
51
+ i0.ɵɵelementEnd();
52
+ } if (rf & 2) {
53
+ const app_r2 = i0.ɵɵnextContext(2).$implicit;
54
+ const ctx_r2 = i0.ɵɵnextContext(2);
55
+ i0.ɵɵadvance();
56
+ i0.ɵɵtextInterpolate1(" +", ctx_r2.getNavItemsCount(app_r2) - 3, " more ");
57
+ } }
58
+ function HomeDashboardComponent_div_9_div_5_div_8_Template(rf, ctx) { if (rf & 1) {
59
+ i0.ɵɵelementStart(0, "div", 27);
60
+ i0.ɵɵtemplate(1, HomeDashboardComponent_div_9_div_5_div_8_div_1_Template, 4, 3, "div", 28)(2, HomeDashboardComponent_div_9_div_5_div_8_span_2_Template, 2, 1, "span", 29);
61
+ i0.ɵɵelementEnd();
62
+ } if (rf & 2) {
63
+ const app_r2 = i0.ɵɵnextContext().$implicit;
64
+ const ctx_r2 = i0.ɵɵnextContext(2);
65
+ i0.ɵɵadvance();
66
+ i0.ɵɵproperty("ngForOf", ctx_r2.getNavItemsPreview(app_r2));
67
+ i0.ɵɵadvance();
68
+ i0.ɵɵproperty("ngIf", ctx_r2.getNavItemsCount(app_r2) > 3);
69
+ } }
70
+ function HomeDashboardComponent_div_9_div_5_Template(rf, ctx) { if (rf & 1) {
71
+ const _r1 = i0.ɵɵgetCurrentView();
72
+ i0.ɵɵelementStart(0, "div", 17);
73
+ i0.ɵɵlistener("click", function HomeDashboardComponent_div_9_div_5_Template_div_click_0_listener() { const app_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.onAppClick(app_r2)); });
74
+ i0.ɵɵelementStart(1, "div", 18)(2, "div", 19);
75
+ i0.ɵɵelement(3, "i");
76
+ i0.ɵɵelementEnd()();
77
+ i0.ɵɵelementStart(4, "div", 20)(5, "h3", 21);
78
+ i0.ɵɵtext(6);
79
+ i0.ɵɵelementEnd();
80
+ i0.ɵɵtemplate(7, HomeDashboardComponent_div_9_div_5_p_7_Template, 2, 1, "p", 22)(8, HomeDashboardComponent_div_9_div_5_div_8_Template, 3, 2, "div", 23);
81
+ i0.ɵɵelementEnd();
82
+ i0.ɵɵelementStart(9, "div", 24);
83
+ i0.ɵɵelement(10, "i", 25);
84
+ i0.ɵɵelementEnd()();
85
+ } if (rf & 2) {
86
+ const app_r2 = ctx.$implicit;
87
+ const ctx_r2 = i0.ɵɵnextContext(2);
88
+ i0.ɵɵstyleProp("--app-color", app_r2.GetColor());
89
+ i0.ɵɵadvance(3);
90
+ i0.ɵɵclassMap(app_r2.Icon || "fa-solid fa-cube");
91
+ i0.ɵɵadvance(3);
92
+ i0.ɵɵtextInterpolate(app_r2.Name);
93
+ i0.ɵɵadvance();
94
+ i0.ɵɵproperty("ngIf", app_r2.Description);
95
+ i0.ɵɵadvance();
96
+ i0.ɵɵproperty("ngIf", ctx_r2.getNavItemsCount(app_r2) > 0);
97
+ } }
98
+ function HomeDashboardComponent_div_9_div_6_Template(rf, ctx) { if (rf & 1) {
99
+ i0.ɵɵelementStart(0, "div", 32)(1, "div", 33);
100
+ i0.ɵɵelement(2, "i", 34);
101
+ i0.ɵɵelementEnd();
102
+ i0.ɵɵelementStart(3, "h3");
103
+ i0.ɵɵtext(4, "No Applications Available");
104
+ i0.ɵɵelementEnd();
105
+ i0.ɵɵelementStart(5, "p");
106
+ i0.ɵɵtext(6, "You don't have any applications configured yet. Use the app switcher to configure your applications.");
107
+ i0.ɵɵelementEnd()();
108
+ } }
109
+ function HomeDashboardComponent_div_9_Template(rf, ctx) { if (rf & 1) {
110
+ i0.ɵɵelementStart(0, "div", 11)(1, "h2", 12);
111
+ i0.ɵɵelement(2, "i", 13);
112
+ i0.ɵɵtext(3, " Your Applications ");
113
+ i0.ɵɵelementEnd();
114
+ i0.ɵɵelementStart(4, "div", 14);
115
+ i0.ɵɵtemplate(5, HomeDashboardComponent_div_9_div_5_Template, 11, 7, "div", 15);
116
+ i0.ɵɵelementEnd();
117
+ i0.ɵɵtemplate(6, HomeDashboardComponent_div_9_div_6_Template, 7, 0, "div", 16);
118
+ i0.ɵɵelementEnd();
119
+ } if (rf & 2) {
120
+ const ctx_r2 = i0.ɵɵnextContext();
121
+ i0.ɵɵadvance(5);
122
+ i0.ɵɵproperty("ngForOf", ctx_r2.apps);
123
+ i0.ɵɵadvance();
124
+ i0.ɵɵproperty("ngIf", ctx_r2.apps.length === 0);
125
+ } }
126
+ function HomeDashboardComponent_div_10_div_8_div_7_Template(rf, ctx) { if (rf & 1) {
127
+ const _r6 = i0.ɵɵgetCurrentView();
128
+ i0.ɵɵelementStart(0, "div", 51);
129
+ i0.ɵɵlistener("click", function HomeDashboardComponent_div_10_div_8_div_7_Template_div_click_0_listener() { const notification_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.onNotificationClick(notification_r7)); });
130
+ i0.ɵɵelementStart(1, "div", 52);
131
+ i0.ɵɵelement(2, "i", 47);
132
+ i0.ɵɵelementEnd();
133
+ i0.ɵɵelementStart(3, "div", 53)(4, "span", 54);
134
+ i0.ɵɵtext(5);
135
+ i0.ɵɵelementEnd();
136
+ i0.ɵɵelementStart(6, "span", 55);
137
+ i0.ɵɵtext(7);
138
+ i0.ɵɵpipe(8, "slice");
139
+ i0.ɵɵelementEnd()()();
140
+ } if (rf & 2) {
141
+ const notification_r7 = ctx.$implicit;
142
+ i0.ɵɵadvance(5);
143
+ i0.ɵɵtextInterpolate(notification_r7.Title);
144
+ i0.ɵɵadvance(2);
145
+ i0.ɵɵtextInterpolate2("", i0.ɵɵpipeBind3(8, 3, notification_r7.Message, 0, 40), "", ((notification_r7.Message == null ? null : notification_r7.Message.length) || 0) > 40 ? "..." : "", "");
146
+ } }
147
+ function HomeDashboardComponent_div_10_div_8_Template(rf, ctx) { if (rf & 1) {
148
+ i0.ɵɵelementStart(0, "div", 45)(1, "h4", 46);
149
+ i0.ɵɵelement(2, "i", 47);
150
+ i0.ɵɵtext(3, " Notifications ");
151
+ i0.ɵɵelementStart(4, "span", 48);
152
+ i0.ɵɵtext(5);
153
+ i0.ɵɵelementEnd()();
154
+ i0.ɵɵelementStart(6, "div", 49);
155
+ i0.ɵɵtemplate(7, HomeDashboardComponent_div_10_div_8_div_7_Template, 9, 7, "div", 50);
156
+ i0.ɵɵelementEnd()();
157
+ } if (rf & 2) {
158
+ const ctx_r2 = i0.ɵɵnextContext(2);
159
+ i0.ɵɵadvance(5);
160
+ i0.ɵɵtextInterpolate(ctx_r2.unreadNotifications.length);
161
+ i0.ɵɵadvance(2);
162
+ i0.ɵɵproperty("ngForOf", ctx_r2.unreadNotifications);
163
+ } }
164
+ function HomeDashboardComponent_div_10_div_9_div_4_div_1_Template(rf, ctx) { if (rf & 1) {
165
+ const _r8 = i0.ɵɵgetCurrentView();
166
+ i0.ɵɵelementStart(0, "div", 61);
167
+ i0.ɵɵlistener("click", function HomeDashboardComponent_div_10_div_9_div_4_div_1_Template_div_click_0_listener() { const favorite_r9 = i0.ɵɵrestoreView(_r8).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.onFavoriteClick(favorite_r9)); });
168
+ i0.ɵɵelementStart(1, "div", 52);
169
+ i0.ɵɵelement(2, "i");
170
+ i0.ɵɵelementEnd();
171
+ i0.ɵɵelementStart(3, "div", 53)(4, "span", 54);
172
+ i0.ɵɵtext(5);
173
+ i0.ɵɵelementEnd();
174
+ i0.ɵɵelementStart(6, "span", 55);
175
+ i0.ɵɵtext(7);
176
+ i0.ɵɵelementEnd()()();
177
+ } if (rf & 2) {
178
+ const favorite_r9 = ctx.$implicit;
179
+ const ctx_r2 = i0.ɵɵnextContext(4);
180
+ i0.ɵɵadvance(2);
181
+ i0.ɵɵclassMap(ctx_r2.getFavoriteIcon(favorite_r9));
182
+ i0.ɵɵadvance(3);
183
+ i0.ɵɵtextInterpolate(favorite_r9.RecordID);
184
+ i0.ɵɵadvance(2);
185
+ i0.ɵɵtextInterpolate(favorite_r9.Entity);
186
+ } }
187
+ function HomeDashboardComponent_div_10_div_9_div_4_Template(rf, ctx) { if (rf & 1) {
188
+ i0.ɵɵelementStart(0, "div", 49);
189
+ i0.ɵɵtemplate(1, HomeDashboardComponent_div_10_div_9_div_4_div_1_Template, 8, 4, "div", 60);
190
+ i0.ɵɵelementEnd();
191
+ } if (rf & 2) {
192
+ const ctx_r2 = i0.ɵɵnextContext(3);
193
+ i0.ɵɵadvance();
194
+ i0.ɵɵproperty("ngForOf", ctx_r2.favorites);
195
+ } }
196
+ function HomeDashboardComponent_div_10_div_9_div_5_Template(rf, ctx) { if (rf & 1) {
197
+ i0.ɵɵelementStart(0, "div", 62);
198
+ i0.ɵɵelement(1, "i", 63);
199
+ i0.ɵɵelementStart(2, "span");
200
+ i0.ɵɵtext(3, "Loading...");
201
+ i0.ɵɵelementEnd()();
202
+ } }
203
+ function HomeDashboardComponent_div_10_div_9_Template(rf, ctx) { if (rf & 1) {
204
+ i0.ɵɵelementStart(0, "div", 56)(1, "h4", 46);
205
+ i0.ɵɵelement(2, "i", 57);
206
+ i0.ɵɵtext(3, " Favorites ");
207
+ i0.ɵɵelementEnd();
208
+ i0.ɵɵtemplate(4, HomeDashboardComponent_div_10_div_9_div_4_Template, 2, 1, "div", 58)(5, HomeDashboardComponent_div_10_div_9_div_5_Template, 4, 0, "div", 59);
209
+ i0.ɵɵelementEnd();
210
+ } if (rf & 2) {
211
+ const ctx_r2 = i0.ɵɵnextContext(2);
212
+ i0.ɵɵadvance(4);
213
+ i0.ɵɵproperty("ngIf", !ctx_r2.favoritesLoading);
214
+ i0.ɵɵadvance();
215
+ i0.ɵɵproperty("ngIf", ctx_r2.favoritesLoading);
216
+ } }
217
+ function HomeDashboardComponent_div_10_div_10_div_4_div_1_Template(rf, ctx) { if (rf & 1) {
218
+ const _r10 = i0.ɵɵgetCurrentView();
219
+ i0.ɵɵelementStart(0, "div", 67);
220
+ i0.ɵɵlistener("click", function HomeDashboardComponent_div_10_div_10_div_4_div_1_Template_div_click_0_listener() { const item_r11 = i0.ɵɵrestoreView(_r10).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.onRecentClick(item_r11)); });
221
+ i0.ɵɵelementStart(1, "div", 52);
222
+ i0.ɵɵelement(2, "i");
223
+ i0.ɵɵelementEnd();
224
+ i0.ɵɵelementStart(3, "div", 53)(4, "span", 54);
225
+ i0.ɵɵtext(5);
226
+ i0.ɵɵelementEnd();
227
+ i0.ɵɵelementStart(6, "span", 55);
228
+ i0.ɵɵtext(7);
229
+ i0.ɵɵelementEnd()()();
230
+ } if (rf & 2) {
231
+ const item_r11 = ctx.$implicit;
232
+ const ctx_r2 = i0.ɵɵnextContext(4);
233
+ i0.ɵɵadvance(2);
234
+ i0.ɵɵclassMap(ctx_r2.getResourceIcon(item_r11.resourceType));
235
+ i0.ɵɵadvance(3);
236
+ i0.ɵɵtextInterpolate(item_r11.recordName || item_r11.recordId);
237
+ i0.ɵɵadvance(2);
238
+ i0.ɵɵtextInterpolate2("", item_r11.entityName, " \u00B7 ", ctx_r2.formatDate(item_r11.latestAt), "");
239
+ } }
240
+ function HomeDashboardComponent_div_10_div_10_div_4_Template(rf, ctx) { if (rf & 1) {
241
+ i0.ɵɵelementStart(0, "div", 49);
242
+ i0.ɵɵtemplate(1, HomeDashboardComponent_div_10_div_10_div_4_div_1_Template, 8, 5, "div", 66);
243
+ i0.ɵɵelementEnd();
244
+ } if (rf & 2) {
245
+ const ctx_r2 = i0.ɵɵnextContext(3);
246
+ i0.ɵɵadvance();
247
+ i0.ɵɵproperty("ngForOf", ctx_r2.recentItems);
248
+ } }
249
+ function HomeDashboardComponent_div_10_div_10_div_5_Template(rf, ctx) { if (rf & 1) {
250
+ i0.ɵɵelementStart(0, "div", 62);
251
+ i0.ɵɵelement(1, "i", 63);
252
+ i0.ɵɵelementStart(2, "span");
253
+ i0.ɵɵtext(3, "Loading...");
254
+ i0.ɵɵelementEnd()();
255
+ } }
256
+ function HomeDashboardComponent_div_10_div_10_Template(rf, ctx) { if (rf & 1) {
257
+ i0.ɵɵelementStart(0, "div", 64)(1, "h4", 46);
258
+ i0.ɵɵelement(2, "i", 65);
259
+ i0.ɵɵtext(3, " Recent ");
260
+ i0.ɵɵelementEnd();
261
+ i0.ɵɵtemplate(4, HomeDashboardComponent_div_10_div_10_div_4_Template, 2, 1, "div", 58)(5, HomeDashboardComponent_div_10_div_10_div_5_Template, 4, 0, "div", 59);
262
+ i0.ɵɵelementEnd();
263
+ } if (rf & 2) {
264
+ const ctx_r2 = i0.ɵɵnextContext(2);
265
+ i0.ɵɵadvance(4);
266
+ i0.ɵɵproperty("ngIf", !ctx_r2.recentsLoading);
267
+ i0.ɵɵadvance();
268
+ i0.ɵɵproperty("ngIf", ctx_r2.recentsLoading);
269
+ } }
270
+ function HomeDashboardComponent_div_10_div_11_Template(rf, ctx) { if (rf & 1) {
271
+ i0.ɵɵelementStart(0, "div", 68);
272
+ i0.ɵɵelement(1, "i", 69);
273
+ i0.ɵɵelementStart(2, "p");
274
+ i0.ɵɵtext(3, "No quick access items");
275
+ i0.ɵɵelementEnd()();
276
+ } }
277
+ function HomeDashboardComponent_div_10_Template(rf, ctx) { if (rf & 1) {
278
+ const _r5 = i0.ɵɵgetCurrentView();
279
+ i0.ɵɵelementStart(0, "div", 35)(1, "div", 36)(2, "h3");
280
+ i0.ɵɵelement(3, "i", 37);
281
+ i0.ɵɵtext(4, " Quick Access ");
282
+ i0.ɵɵelementEnd();
283
+ i0.ɵɵelementStart(5, "button", 38);
284
+ i0.ɵɵlistener("click", function HomeDashboardComponent_div_10_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.toggleSidebar()); });
285
+ i0.ɵɵelement(6, "i", 39);
286
+ i0.ɵɵelementEnd()();
287
+ i0.ɵɵelementStart(7, "div", 40);
288
+ i0.ɵɵtemplate(8, HomeDashboardComponent_div_10_div_8_Template, 8, 2, "div", 41)(9, HomeDashboardComponent_div_10_div_9_Template, 6, 2, "div", 42)(10, HomeDashboardComponent_div_10_div_10_Template, 6, 2, "div", 43)(11, HomeDashboardComponent_div_10_div_11_Template, 4, 0, "div", 44);
289
+ i0.ɵɵelementEnd()();
290
+ } if (rf & 2) {
291
+ const ctx_r2 = i0.ɵɵnextContext();
292
+ i0.ɵɵadvance(8);
293
+ i0.ɵɵproperty("ngIf", ctx_r2.unreadNotifications.length > 0);
294
+ i0.ɵɵadvance();
295
+ i0.ɵɵproperty("ngIf", ctx_r2.favorites.length > 0 || ctx_r2.favoritesLoading);
296
+ i0.ɵɵadvance();
297
+ i0.ɵɵproperty("ngIf", ctx_r2.recentItems.length > 0 || ctx_r2.recentsLoading);
298
+ i0.ɵɵadvance();
299
+ i0.ɵɵproperty("ngIf", !ctx_r2.favoritesLoading && !ctx_r2.recentsLoading && ctx_r2.unreadNotifications.length === 0 && ctx_r2.favorites.length === 0 && ctx_r2.recentItems.length === 0);
300
+ } }
301
+ function HomeDashboardComponent_button_11_span_2_Template(rf, ctx) { if (rf & 1) {
302
+ i0.ɵɵelementStart(0, "span", 72);
303
+ i0.ɵɵtext(1);
304
+ i0.ɵɵelementEnd();
305
+ } if (rf & 2) {
306
+ const ctx_r2 = i0.ɵɵnextContext(2);
307
+ i0.ɵɵadvance();
308
+ i0.ɵɵtextInterpolate(ctx_r2.unreadNotifications.length);
309
+ } }
310
+ function HomeDashboardComponent_button_11_Template(rf, ctx) { if (rf & 1) {
311
+ const _r12 = i0.ɵɵgetCurrentView();
312
+ i0.ɵɵelementStart(0, "button", 70);
313
+ i0.ɵɵlistener("click", function HomeDashboardComponent_button_11_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r12); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.toggleSidebar()); });
314
+ i0.ɵɵelement(1, "i", 37);
315
+ i0.ɵɵtemplate(2, HomeDashboardComponent_button_11_span_2_Template, 2, 1, "span", 71);
316
+ i0.ɵɵelementEnd();
317
+ } if (rf & 2) {
318
+ const ctx_r2 = i0.ɵɵnextContext();
319
+ i0.ɵɵadvance(2);
320
+ i0.ɵɵproperty("ngIf", ctx_r2.unreadNotifications.length > 0);
321
+ } }
322
+ /**
323
+ * Home Dashboard - Personalized home screen showing all available applications
324
+ * with quick access navigation and configuration options.
325
+ */
326
+ let HomeDashboardComponent = class HomeDashboardComponent extends BaseDashboard {
327
+ appManager;
328
+ navigationService;
329
+ recentAccessService;
330
+ router;
331
+ cdr;
332
+ destroy$ = new Subject();
333
+ metadata = new Metadata();
334
+ appConfigDialog;
335
+ // State
336
+ isLoading = true;
337
+ apps = [];
338
+ currentUser = null;
339
+ showConfigDialog = false;
340
+ // Favorites
341
+ favorites = [];
342
+ favoritesLoading = true;
343
+ // Recents
344
+ recentItems = [];
345
+ recentsLoading = true;
346
+ // Notifications
347
+ unreadNotifications = [];
348
+ notificationsLoading = true;
349
+ // Sidebar state - default closed on all screen sizes
350
+ sidebarOpen = false;
351
+ /**
352
+ * Check if sidebar has any content to show
353
+ */
354
+ get hasSidebarContent() {
355
+ return this.unreadNotifications.length > 0 ||
356
+ this.favorites.length > 0 ||
357
+ this.recentItems.length > 0 ||
358
+ this.favoritesLoading ||
359
+ this.recentsLoading;
360
+ }
361
+ /**
362
+ * Toggle sidebar visibility
363
+ */
364
+ toggleSidebar() {
365
+ this.sidebarOpen = !this.sidebarOpen;
366
+ }
367
+ /**
368
+ * Check if current device is mobile (width <= 768px)
369
+ */
370
+ isMobileDevice() {
371
+ return typeof window !== 'undefined' && window.innerWidth <= 768;
372
+ }
373
+ constructor(appManager, navigationService, recentAccessService, router, cdr) {
374
+ super();
375
+ this.appManager = appManager;
376
+ this.navigationService = navigationService;
377
+ this.recentAccessService = recentAccessService;
378
+ this.router = router;
379
+ this.cdr = cdr;
380
+ }
381
+ async ngOnInit() {
382
+ // Get current user info
383
+ this.currentUser = {
384
+ Name: this.metadata.CurrentUser?.Name || 'User',
385
+ Email: this.metadata.CurrentUser?.Email || ''
386
+ };
387
+ // Subscribe to loading state from ApplicationManager
388
+ this.appManager.Loading
389
+ .pipe(takeUntil(this.destroy$))
390
+ .subscribe(loading => {
391
+ // Only update isLoading if manager is actively loading
392
+ // (we start with isLoading=true and only set to false when we have apps)
393
+ if (loading) {
394
+ this.isLoading = true;
395
+ this.cdr.detectChanges();
396
+ }
397
+ });
398
+ // Subscribe to applications list, filtering out the Home app
399
+ this.appManager.Applications
400
+ .pipe(takeUntil(this.destroy$))
401
+ .subscribe(apps => {
402
+ // Exclude the Home app from the list (users are already on Home)
403
+ this.apps = apps.filter(app => app.Name !== 'Home');
404
+ // Only stop loading when we actually have apps (non-empty array means loaded)
405
+ if (apps.length > 0) {
406
+ this.isLoading = false;
407
+ }
408
+ this.cdr.detectChanges();
409
+ });
410
+ // Subscribe to unread notifications
411
+ MJNotificationService.Notifications$
412
+ .pipe(takeUntil(this.destroy$))
413
+ .subscribe(notifications => {
414
+ this.unreadNotifications = notifications.filter(n => n.Unread).slice(0, 5);
415
+ this.notificationsLoading = false;
416
+ this.cdr.detectChanges();
417
+ });
418
+ // Subscribe to recent items
419
+ this.recentAccessService.RecentItems
420
+ .pipe(takeUntil(this.destroy$))
421
+ .subscribe(items => {
422
+ this.recentItems = items.slice(0, 5);
423
+ this.recentsLoading = false;
424
+ this.cdr.detectChanges();
425
+ });
426
+ // Load favorites and recents
427
+ await Promise.all([
428
+ this.loadFavorites(),
429
+ this.loadRecents()
430
+ ]);
431
+ }
432
+ ngOnDestroy() {
433
+ this.destroy$.next();
434
+ this.destroy$.complete();
435
+ super.ngOnDestroy();
436
+ }
437
+ initDashboard() {
438
+ // Called by BaseDashboard
439
+ }
440
+ loadData() {
441
+ // Data loading handled by subscription
442
+ }
443
+ /**
444
+ * Get a greeting based on time of day
445
+ */
446
+ get greeting() {
447
+ const hour = new Date().getHours();
448
+ if (hour < 12)
449
+ return 'Good morning';
450
+ if (hour < 17)
451
+ return 'Good afternoon';
452
+ return 'Good evening';
453
+ }
454
+ /**
455
+ * Get formatted date string
456
+ */
457
+ get formattedDate() {
458
+ return new Date().toLocaleDateString('en-US', {
459
+ weekday: 'long',
460
+ month: 'long',
461
+ day: 'numeric'
462
+ });
463
+ }
464
+ /**
465
+ * Navigate to an application
466
+ */
467
+ async onAppClick(app) {
468
+ // Use NavigationService to switch to the app (handles tab creation if needed)
469
+ await this.navigationService.SwitchToApp(app.ID);
470
+ }
471
+ /**
472
+ * Open app configuration dialog
473
+ */
474
+ openConfigDialog() {
475
+ this.showConfigDialog = true;
476
+ setTimeout(() => {
477
+ if (this.appConfigDialog) {
478
+ this.appConfigDialog.open();
479
+ }
480
+ }, 0);
481
+ }
482
+ /**
483
+ * Handle when config is saved
484
+ */
485
+ onConfigSaved() {
486
+ this.showConfigDialog = false;
487
+ }
488
+ /**
489
+ * Get nav items count for an app
490
+ */
491
+ getNavItemsCount(app) {
492
+ return app.GetNavItems().length;
493
+ }
494
+ /**
495
+ * Get first few nav items for preview
496
+ */
497
+ getNavItemsPreview(app) {
498
+ return app.GetNavItems().slice(0, 3).map(item => ({
499
+ Label: item.Label,
500
+ Icon: item.Icon || 'fa-solid fa-circle'
501
+ }));
502
+ }
503
+ /**
504
+ * Load user favorites from the database
505
+ */
506
+ async loadFavorites() {
507
+ try {
508
+ this.favoritesLoading = true;
509
+ const rv = new RunView();
510
+ const result = await rv.RunView({
511
+ EntityName: 'User Favorites',
512
+ ExtraFilter: `UserID='${this.metadata.CurrentUser.ID}'`,
513
+ OrderBy: '__mj_CreatedAt DESC',
514
+ MaxRows: 10,
515
+ ResultType: 'entity_object'
516
+ });
517
+ if (result.Success && result.Results) {
518
+ this.favorites = result.Results;
519
+ }
520
+ }
521
+ catch (error) {
522
+ console.error('Error loading favorites:', error);
523
+ }
524
+ finally {
525
+ this.favoritesLoading = false;
526
+ this.cdr.detectChanges();
527
+ }
528
+ }
529
+ /**
530
+ * Load recent items via the RecentAccessService
531
+ */
532
+ async loadRecents() {
533
+ try {
534
+ this.recentsLoading = true;
535
+ await this.recentAccessService.loadRecentItems(10);
536
+ }
537
+ catch (error) {
538
+ console.error('Error loading recents:', error);
539
+ }
540
+ finally {
541
+ this.recentsLoading = false;
542
+ this.cdr.detectChanges();
543
+ }
544
+ }
545
+ /**
546
+ * Navigate to a favorite item
547
+ */
548
+ onFavoriteClick(favorite) {
549
+ // Navigate based on entity type
550
+ const entityName = favorite.Entity?.toLowerCase();
551
+ if (entityName === 'dashboards') {
552
+ this.router.navigate(['/resource/dashboard', favorite.RecordID]);
553
+ }
554
+ else if (entityName === 'user views') {
555
+ this.router.navigate(['/resource/view', favorite.RecordID]);
556
+ }
557
+ else if (entityName === 'reports') {
558
+ this.router.navigate(['/resource/report', favorite.RecordID]);
559
+ }
560
+ else if (entityName?.includes('artifact')) {
561
+ this.router.navigate(['/resource/artifact', favorite.RecordID]);
562
+ }
563
+ else {
564
+ // Default: navigate to record
565
+ this.router.navigate(['/resource/record', favorite.Entity, favorite.RecordID]);
566
+ }
567
+ }
568
+ /**
569
+ * Navigate to a recent item
570
+ */
571
+ onRecentClick(item) {
572
+ switch (item.resourceType) {
573
+ case 'view':
574
+ this.router.navigate(['/resource/view', item.recordId]);
575
+ break;
576
+ case 'dashboard':
577
+ this.router.navigate(['/resource/dashboard', item.recordId]);
578
+ break;
579
+ case 'artifact':
580
+ this.router.navigate(['/resource/artifact', item.recordId]);
581
+ break;
582
+ case 'report':
583
+ this.router.navigate(['/resource/report', item.recordId]);
584
+ break;
585
+ default:
586
+ // Regular record
587
+ this.router.navigate(['/resource/record', item.entityName, item.recordId]);
588
+ }
589
+ }
590
+ /**
591
+ * Navigate to a notification
592
+ */
593
+ onNotificationClick(notification) {
594
+ // Navigate to the notifications view or handle based on notification type
595
+ // For now, just navigate to the user notifications page
596
+ this.router.navigate(['/resource/view/dynamic/User%20Notifications']);
597
+ }
598
+ /**
599
+ * Get icon for a resource type
600
+ */
601
+ getResourceIcon(resourceType) {
602
+ switch (resourceType) {
603
+ case 'view':
604
+ return 'fa-solid fa-table';
605
+ case 'dashboard':
606
+ return 'fa-solid fa-gauge-high';
607
+ case 'artifact':
608
+ return 'fa-solid fa-cube';
609
+ case 'report':
610
+ return 'fa-solid fa-chart-bar';
611
+ default:
612
+ return 'fa-solid fa-file';
613
+ }
614
+ }
615
+ /**
616
+ * Get icon for a favorite based on its entity type
617
+ */
618
+ getFavoriteIcon(favorite) {
619
+ const entityName = favorite.Entity?.toLowerCase();
620
+ if (entityName === 'dashboards')
621
+ return 'fa-solid fa-gauge-high';
622
+ if (entityName === 'user views')
623
+ return 'fa-solid fa-table';
624
+ if (entityName === 'reports')
625
+ return 'fa-solid fa-chart-bar';
626
+ if (entityName?.includes('artifact'))
627
+ return 'fa-solid fa-cube';
628
+ return 'fa-solid fa-star';
629
+ }
630
+ /**
631
+ * Format a date for display
632
+ */
633
+ formatDate(date) {
634
+ if (!date)
635
+ return '';
636
+ const now = new Date();
637
+ const diff = now.getTime() - new Date(date).getTime();
638
+ const days = Math.floor(diff / (1000 * 60 * 60 * 24));
639
+ if (days === 0)
640
+ return 'Today';
641
+ if (days === 1)
642
+ return 'Yesterday';
643
+ if (days < 7)
644
+ return `${days} days ago`;
645
+ return new Date(date).toLocaleDateString();
646
+ }
647
+ static ɵfac = function HomeDashboardComponent_Factory(t) { return new (t || HomeDashboardComponent)(i0.ɵɵdirectiveInject(i1.ApplicationManager), i0.ɵɵdirectiveInject(i2.NavigationService), i0.ɵɵdirectiveInject(i2.RecentAccessService), i0.ɵɵdirectiveInject(i3.Router), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
648
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: HomeDashboardComponent, selectors: [["mj-home-dashboard"]], viewQuery: function HomeDashboardComponent_Query(rf, ctx) { if (rf & 1) {
649
+ i0.ɵɵviewQuery(_c0, 5);
650
+ } if (rf & 2) {
651
+ let _t;
652
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.appConfigDialog = _t.first);
653
+ } }, features: [i0.ɵɵInheritDefinitionFeature], decls: 12, vars: 9, consts: [[1, "home-dashboard"], [1, "main-content"], [1, "home-header"], [1, "greeting-section"], [1, "date"], ["class", "loading-container", 4, "ngIf"], ["class", "apps-section", 4, "ngIf"], ["class", "quick-access-sidebar", 4, "ngIf"], ["class", "sidebar-fab-toggle", "title", "Quick Access", 3, "click", 4, "ngIf"], [1, "loading-container"], ["text", "Loading your applications...", "size", "large"], [1, "apps-section"], [1, "section-title"], [1, "fa-solid", "fa-grid-2"], [1, "apps-grid"], ["class", "app-card", 3, "--app-color", "click", 4, "ngFor", "ngForOf"], ["class", "empty-state", 4, "ngIf"], [1, "app-card", 3, "click"], [1, "app-icon-wrapper"], [1, "app-icon"], [1, "app-info"], [1, "app-name"], ["class", "app-description", 4, "ngIf"], ["class", "nav-preview", 4, "ngIf"], [1, "app-arrow"], [1, "fa-solid", "fa-arrow-right"], [1, "app-description"], [1, "nav-preview"], ["class", "nav-item-chip", 4, "ngFor", "ngForOf"], ["class", "more-items", 4, "ngIf"], [1, "nav-item-chip"], [1, "more-items"], [1, "empty-state"], [1, "empty-icon"], [1, "fa-solid", "fa-folder-open"], [1, "quick-access-sidebar"], [1, "sidebar-header"], [1, "fa-solid", "fa-bolt"], ["title", "Close panel", 1, "sidebar-close-btn", 3, "click"], [1, "fa-solid", "fa-xmark"], [1, "sidebar-content"], ["class", "sidebar-section notifications-section", 4, "ngIf"], ["class", "sidebar-section favorites-section", 4, "ngIf"], ["class", "sidebar-section recents-section", 4, "ngIf"], ["class", "sidebar-empty", 4, "ngIf"], [1, "sidebar-section", "notifications-section"], [1, "sidebar-section-title"], [1, "fa-solid", "fa-bell"], [1, "section-badge"], [1, "sidebar-items"], ["class", "sidebar-item notification-item", 3, "click", 4, "ngFor", "ngForOf"], [1, "sidebar-item", "notification-item", 3, "click"], [1, "sidebar-item-icon"], [1, "sidebar-item-info"], [1, "sidebar-item-title"], [1, "sidebar-item-subtitle"], [1, "sidebar-section", "favorites-section"], [1, "fa-solid", "fa-star"], ["class", "sidebar-items", 4, "ngIf"], ["class", "sidebar-loading", 4, "ngIf"], ["class", "sidebar-item favorite-item", 3, "click", 4, "ngFor", "ngForOf"], [1, "sidebar-item", "favorite-item", 3, "click"], [1, "sidebar-loading"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "sidebar-section", "recents-section"], [1, "fa-solid", "fa-clock-rotate-left"], ["class", "sidebar-item recent-item", 3, "click", 4, "ngFor", "ngForOf"], [1, "sidebar-item", "recent-item", 3, "click"], [1, "sidebar-empty"], [1, "fa-solid", "fa-inbox"], ["title", "Quick Access", 1, "sidebar-fab-toggle", 3, "click"], ["class", "fab-badge", 4, "ngIf"], [1, "fab-badge"]], template: function HomeDashboardComponent_Template(rf, ctx) { if (rf & 1) {
654
+ i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2)(3, "div", 3)(4, "h1");
655
+ i0.ɵɵtext(5);
656
+ i0.ɵɵelementEnd();
657
+ i0.ɵɵelementStart(6, "p", 4);
658
+ i0.ɵɵtext(7);
659
+ i0.ɵɵelementEnd()()();
660
+ i0.ɵɵtemplate(8, HomeDashboardComponent_div_8_Template, 2, 0, "div", 5)(9, HomeDashboardComponent_div_9_Template, 7, 2, "div", 6);
661
+ i0.ɵɵelementEnd();
662
+ i0.ɵɵtemplate(10, HomeDashboardComponent_div_10_Template, 12, 4, "div", 7)(11, HomeDashboardComponent_button_11_Template, 3, 1, "button", 8);
663
+ i0.ɵɵelementEnd();
664
+ } if (rf & 2) {
665
+ i0.ɵɵclassProp("sidebar-open", ctx.sidebarOpen && ctx.hasSidebarContent);
666
+ i0.ɵɵadvance(5);
667
+ i0.ɵɵtextInterpolate2("", ctx.greeting, ", ", ctx.currentUser == null ? null : ctx.currentUser.Name, "");
668
+ i0.ɵɵadvance(2);
669
+ i0.ɵɵtextInterpolate(ctx.formattedDate);
670
+ i0.ɵɵadvance();
671
+ i0.ɵɵproperty("ngIf", ctx.isLoading);
672
+ i0.ɵɵadvance();
673
+ i0.ɵɵproperty("ngIf", !ctx.isLoading);
674
+ i0.ɵɵadvance();
675
+ i0.ɵɵproperty("ngIf", ctx.hasSidebarContent);
676
+ i0.ɵɵadvance();
677
+ i0.ɵɵproperty("ngIf", ctx.hasSidebarContent && !ctx.sidebarOpen);
678
+ } }, dependencies: [i4.NgForOf, i4.NgIf, i5.LoadingComponent, i4.SlicePipe], styles: [".home-dashboard[_ngcontent-%COMP%] {\n display: flex;\n height: 100%;\n background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);\n overflow: hidden;\n position: relative;\n}\n\n\n\n.main-content[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n padding: 32px;\n overflow-y: auto;\n transition: margin-right 0.3s ease;\n}\n\n\n\n.home-dashboard.sidebar-open[_ngcontent-%COMP%] .main-content[_ngcontent-%COMP%] {\n margin-right: 320px;\n}\n\n\n\n.home-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 32px;\n}\n\n.greeting-section[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n font-size: 32px;\n font-weight: 600;\n color: #212529;\n}\n\n.greeting-section[_ngcontent-%COMP%] .date[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n color: #6c757d;\n}\n\n\n\n.sidebar-fab-toggle[_ngcontent-%COMP%] {\n position: fixed;\n top: 80px; \n\n right: 24px;\n width: 56px;\n height: 56px;\n border: none;\n border-radius: 50%;\n background: #1976d2;\n color: white;\n font-size: 20px;\n cursor: pointer;\n box-shadow: 0 4px 12px rgba(25, 118, 210, 0.4);\n transition: all 0.2s ease;\n z-index: 100;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.sidebar-fab-toggle[_ngcontent-%COMP%]:hover {\n background: #1565c0;\n transform: scale(1.05);\n box-shadow: 0 6px 16px rgba(25, 118, 210, 0.5);\n}\n\n.fab-badge[_ngcontent-%COMP%] {\n position: absolute;\n top: -4px;\n right: -4px;\n min-width: 20px;\n height: 20px;\n padding: 0 6px;\n background: #e53935;\n color: white;\n font-size: 11px;\n font-weight: 600;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n\n\n.loading-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n flex: 1;\n gap: 16px;\n color: #6c757d;\n}\n\n.loading-spinner[_ngcontent-%COMP%] {\n font-size: 32px;\n color: #1976d2;\n}\n\n\n\n.apps-section[_ngcontent-%COMP%] {\n flex: 0 0 auto;\n}\n\n.section-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n margin: 0 0 24px 0;\n font-size: 20px;\n font-weight: 600;\n color: #495057;\n}\n\n.section-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #6c757d;\n}\n\n\n\n.apps-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 20px;\n}\n\n\n\n.app-card[_ngcontent-%COMP%] {\n --app-color: #757575;\n display: flex;\n align-items: flex-start;\n gap: 16px;\n padding: 20px;\n background: white;\n border-radius: 14px;\n border: 1px solid #e9ecef;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);\n cursor: pointer;\n transition: all 0.25s ease;\n position: relative;\n overflow: hidden;\n}\n\n.app-card[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 4px;\n height: 100%;\n background: var(--app-color);\n opacity: 0;\n transition: opacity 0.25s ease;\n}\n\n.app-card[_ngcontent-%COMP%]:hover {\n border-color: var(--app-color);\n box-shadow: 0 8px 24px rgba(0, 0, 0, 0.1);\n transform: translateY(-3px);\n}\n\n.app-card[_ngcontent-%COMP%]:hover::before {\n opacity: 1;\n}\n\n\n\n.app-icon-wrapper[_ngcontent-%COMP%] {\n flex-shrink: 0;\n}\n\n.app-icon[_ngcontent-%COMP%] {\n width: 52px;\n height: 52px;\n border-radius: 12px;\n background: color-mix(in srgb, var(--app-color) 12%, transparent);\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.25s ease;\n}\n\n.app-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 22px;\n color: var(--app-color);\n transition: transform 0.25s ease;\n}\n\n.app-card[_ngcontent-%COMP%]:hover .app-icon[_ngcontent-%COMP%] {\n background: var(--app-color);\n}\n\n.app-card[_ngcontent-%COMP%]:hover .app-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: white;\n transform: scale(1.1);\n}\n\n\n\n.app-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.app-name[_ngcontent-%COMP%] {\n margin: 0 0 4px 0;\n font-size: 17px;\n font-weight: 600;\n color: #212529;\n}\n\n.app-description[_ngcontent-%COMP%] {\n margin: 0 0 10px 0;\n font-size: 13px;\n color: #6c757d;\n line-height: 1.4;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n\n\n.nav-preview[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n align-items: center;\n}\n\n.nav-item-chip[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 5px;\n padding: 3px 8px;\n background: #f8f9fa;\n border-radius: 5px;\n font-size: 11px;\n color: #495057;\n}\n\n.nav-item-chip[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 9px;\n color: #6c757d;\n}\n\n.more-items[_ngcontent-%COMP%] {\n font-size: 11px;\n color: #6c757d;\n font-style: italic;\n}\n\n\n\n.app-arrow[_ngcontent-%COMP%] {\n position: absolute;\n right: 14px;\n top: 50%;\n transform: translateY(-50%) translateX(10px);\n opacity: 0;\n transition: all 0.25s ease;\n color: var(--app-color);\n font-size: 16px;\n}\n\n.app-card[_ngcontent-%COMP%]:hover .app-arrow[_ngcontent-%COMP%] {\n opacity: 1;\n transform: translateY(-50%) translateX(0);\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: 64px 24px;\n background: white;\n border-radius: 16px;\n border: 2px dashed #dee2e6;\n text-align: center;\n}\n\n.empty-icon[_ngcontent-%COMP%] {\n width: 80px;\n height: 80px;\n border-radius: 50%;\n background: #f8f9fa;\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: 32px;\n color: #adb5bd;\n}\n\n.empty-state[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n font-size: 20px;\n font-weight: 600;\n color: #495057;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n color: #6c757d;\n max-width: 400px;\n}\n\n\n\n\n\n.quick-access-sidebar[_ngcontent-%COMP%] {\n position: fixed;\n top: 60px; \n\n right: 0;\n bottom: 0;\n width: 320px;\n background: white;\n border-left: 1px solid #e9ecef;\n display: flex;\n flex-direction: column;\n transform: translateX(100%);\n transition: transform 0.3s ease;\n overflow: hidden;\n z-index: 100;\n box-shadow: -2px 0 8px rgba(0, 0, 0, 0.08);\n}\n\n.home-dashboard.sidebar-open[_ngcontent-%COMP%] .quick-access-sidebar[_ngcontent-%COMP%] {\n transform: translateX(0);\n}\n\n.sidebar-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 20px;\n border-bottom: 1px solid #e9ecef;\n background: #fafbfc;\n}\n\n.sidebar-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #212529;\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.sidebar-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #1976d2;\n font-size: 14px;\n}\n\n.sidebar-close-btn[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n border: none;\n border-radius: 8px;\n background: transparent;\n color: #6c757d;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.2s ease;\n}\n\n.sidebar-close-btn[_ngcontent-%COMP%]:hover {\n background: #f1f3f4;\n color: #212529;\n}\n\n.sidebar-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 16px;\n}\n\n\n\n.sidebar-section[_ngcontent-%COMP%] {\n margin-bottom: 20px;\n}\n\n.sidebar-section[_ngcontent-%COMP%]:last-child {\n margin-bottom: 0;\n}\n\n.sidebar-section-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 0 0 12px 0;\n font-size: 13px;\n font-weight: 600;\n color: #6c757d;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.sidebar-section-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n}\n\n.notifications-section[_ngcontent-%COMP%] .sidebar-section-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #f57c00;\n}\n\n.favorites-section[_ngcontent-%COMP%] .sidebar-section-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #ffc107;\n}\n\n.recents-section[_ngcontent-%COMP%] .sidebar-section-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #1976d2;\n}\n\n.section-badge[_ngcontent-%COMP%] {\n background: #e53935;\n color: white;\n font-size: 10px;\n font-weight: 600;\n padding: 2px 6px;\n border-radius: 8px;\n margin-left: auto;\n}\n\n\n\n.sidebar-items[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.sidebar-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 12px;\n background: #f8f9fa;\n border-radius: 10px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.sidebar-item[_ngcontent-%COMP%]:hover {\n background: #e9ecef;\n transform: translateX(4px);\n}\n\n.sidebar-item-icon[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n border-radius: 8px;\n background: white;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.sidebar-item-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n color: #6c757d;\n}\n\n.notification-item[_ngcontent-%COMP%] .sidebar-item-icon[_ngcontent-%COMP%] {\n background: #fff3e0;\n}\n\n.notification-item[_ngcontent-%COMP%] .sidebar-item-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #f57c00;\n}\n\n.favorite-item[_ngcontent-%COMP%] .sidebar-item-icon[_ngcontent-%COMP%] {\n background: #fff8e1;\n}\n\n.favorite-item[_ngcontent-%COMP%] .sidebar-item-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #f9a825;\n}\n\n.recent-item[_ngcontent-%COMP%] .sidebar-item-icon[_ngcontent-%COMP%] {\n background: #e3f2fd;\n}\n\n.recent-item[_ngcontent-%COMP%] .sidebar-item-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #1976d2;\n}\n\n.sidebar-item-info[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n flex: 1;\n}\n\n.sidebar-item-title[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: #212529;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.sidebar-item-subtitle[_ngcontent-%COMP%] {\n font-size: 11px;\n color: #6c757d;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.sidebar-loading[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n color: #6c757d;\n font-size: 13px;\n padding: 8px 0;\n}\n\n.sidebar-loading[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #1976d2;\n}\n\n.sidebar-empty[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px 20px;\n text-align: center;\n color: #adb5bd;\n}\n\n.sidebar-empty[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 32px;\n margin-bottom: 12px;\n}\n\n.sidebar-empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 13px;\n}\n\n\n\n\n\n\n\n\n\n@media (max-width: 1200px) {\n .quick-access-sidebar[_ngcontent-%COMP%] {\n width: 280px;\n }\n\n .home-dashboard.sidebar-open[_ngcontent-%COMP%] .main-content[_ngcontent-%COMP%] {\n margin-right: 280px;\n }\n\n .apps-grid[_ngcontent-%COMP%] {\n grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));\n }\n}\n\n\n\n@media (max-width: 992px) {\n .main-content[_ngcontent-%COMP%] {\n padding: 24px;\n }\n\n .greeting-section[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 28px;\n }\n\n \n\n .quick-access-sidebar[_ngcontent-%COMP%] {\n position: fixed;\n top: 60px; \n\n right: 0;\n bottom: 0;\n width: 320px;\n z-index: 1000;\n box-shadow: -4px 0 20px rgba(0, 0, 0, 0.15);\n }\n\n .home-dashboard.sidebar-open[_ngcontent-%COMP%] .main-content[_ngcontent-%COMP%] {\n margin-right: 0;\n }\n\n \n\n .home-dashboard.sidebar-open[_ngcontent-%COMP%]::after {\n content: '';\n position: fixed;\n top: 60px;\n left: 0;\n right: 320px;\n bottom: 0;\n background: rgba(0, 0, 0, 0.3);\n z-index: 999;\n }\n}\n\n\n\n@media (max-width: 768px) {\n .home-dashboard[_ngcontent-%COMP%] {\n height: auto;\n min-height: 100%;\n overflow: visible;\n }\n\n .main-content[_ngcontent-%COMP%] {\n padding: 20px;\n padding-bottom: 100px; \n\n overflow: visible;\n }\n\n .home-header[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 16px;\n margin-bottom: 24px;\n }\n\n .greeting-section[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 24px;\n }\n\n \n\n .quick-access-sidebar[_ngcontent-%COMP%] {\n position: fixed;\n top: 60px; \n\n right: 0;\n bottom: 0;\n width: 100%;\n max-width: 100%;\n z-index: 100; \n\n border-left: none;\n border-top: 1px solid #e9ecef;\n }\n\n \n\n .home-dashboard.sidebar-open[_ngcontent-%COMP%]::before {\n content: '';\n position: fixed;\n top: 60px;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.4);\n z-index: 99;\n }\n\n \n\n .home-dashboard.sidebar-open[_ngcontent-%COMP%]::after {\n display: none;\n }\n\n .apps-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n gap: 16px;\n }\n\n .app-card[_ngcontent-%COMP%] {\n padding: 16px;\n }\n\n .app-icon[_ngcontent-%COMP%] {\n width: 44px;\n height: 44px;\n }\n\n .app-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 18px;\n }\n\n .app-name[_ngcontent-%COMP%] {\n font-size: 15px;\n }\n\n .nav-preview[_ngcontent-%COMP%] {\n display: none;\n }\n\n \n\n .sidebar-fab-toggle[_ngcontent-%COMP%] {\n top: auto;\n bottom: 20px;\n right: 20px;\n width: 48px;\n height: 48px;\n font-size: 18px;\n }\n}\n\n@media (max-width: 480px) {\n .main-content[_ngcontent-%COMP%] {\n padding: 16px;\n padding-bottom: 80px;\n }\n\n .greeting-section[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n\n .greeting-section[_ngcontent-%COMP%] .date[_ngcontent-%COMP%] {\n font-size: 14px;\n }\n\n .section-title[_ngcontent-%COMP%] {\n font-size: 16px;\n margin-bottom: 16px;\n }\n\n .sidebar-fab-toggle[_ngcontent-%COMP%] {\n bottom: 16px;\n right: 16px;\n width: 44px;\n height: 44px;\n font-size: 16px;\n }\n}"] });
679
+ };
680
+ HomeDashboardComponent = __decorate([
681
+ RegisterClass(BaseDashboard, 'HomeDashboard')
682
+ ], HomeDashboardComponent);
683
+ export { HomeDashboardComponent };
684
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(HomeDashboardComponent, [{
685
+ type: Component,
686
+ args: [{ selector: 'mj-home-dashboard', template: "<div class=\"home-dashboard\" [class.sidebar-open]=\"sidebarOpen && hasSidebarContent\">\n <!-- Main Content Area -->\n <div class=\"main-content\">\n <!-- Header Section -->\n <div class=\"home-header\">\n <div class=\"greeting-section\">\n <h1>{{ greeting }}, {{ currentUser?.Name }}</h1>\n <p class=\"date\">{{ formattedDate }}</p>\n </div>\n </div>\n\n <!-- Loading State -->\n <div class=\"loading-container\" *ngIf=\"isLoading\">\n <mj-loading text=\"Loading your applications...\" size=\"large\"></mj-loading>\n </div>\n\n <!-- Apps Grid -->\n <div class=\"apps-section\" *ngIf=\"!isLoading\">\n <h2 class=\"section-title\">\n <i class=\"fa-solid fa-grid-2\"></i>\n Your Applications\n </h2>\n\n <div class=\"apps-grid\">\n <div *ngFor=\"let app of apps\"\n class=\"app-card\"\n [style.--app-color]=\"app.GetColor()\"\n (click)=\"onAppClick(app)\">\n <!-- App Icon -->\n <div class=\"app-icon-wrapper\">\n <div class=\"app-icon\">\n <i [class]=\"app.Icon || 'fa-solid fa-cube'\"></i>\n </div>\n </div>\n\n <!-- App Info -->\n <div class=\"app-info\">\n <h3 class=\"app-name\">{{ app.Name }}</h3>\n <p class=\"app-description\" *ngIf=\"app.Description\">{{ app.Description }}</p>\n\n <!-- Nav Items Preview -->\n <div class=\"nav-preview\" *ngIf=\"getNavItemsCount(app) > 0\">\n <div class=\"nav-item-chip\" *ngFor=\"let item of getNavItemsPreview(app)\">\n <i [class]=\"item.Icon\"></i>\n <span>{{ item.Label }}</span>\n </div>\n <span class=\"more-items\" *ngIf=\"getNavItemsCount(app) > 3\">\n +{{ getNavItemsCount(app) - 3 }} more\n </span>\n </div>\n </div>\n\n <!-- Hover Arrow -->\n <div class=\"app-arrow\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n </div>\n </div>\n\n <!-- Empty State -->\n <div class=\"empty-state\" *ngIf=\"apps.length === 0\">\n <div class=\"empty-icon\">\n <i class=\"fa-solid fa-folder-open\"></i>\n </div>\n <h3>No Applications Available</h3>\n <p>You don't have any applications configured yet. Use the app switcher to configure your applications.</p>\n </div>\n </div>\n </div>\n\n <!-- Collapsible Right Sidebar -->\n <div class=\"quick-access-sidebar\" *ngIf=\"hasSidebarContent\">\n <div class=\"sidebar-header\">\n <h3>\n <i class=\"fa-solid fa-bolt\"></i>\n Quick Access\n </h3>\n <button class=\"sidebar-close-btn\" (click)=\"toggleSidebar()\" title=\"Close panel\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n\n <div class=\"sidebar-content\">\n <!-- Unread Notifications Section -->\n <div class=\"sidebar-section notifications-section\" *ngIf=\"unreadNotifications.length > 0\">\n <h4 class=\"sidebar-section-title\">\n <i class=\"fa-solid fa-bell\"></i>\n Notifications\n <span class=\"section-badge\">{{ unreadNotifications.length }}</span>\n </h4>\n <div class=\"sidebar-items\">\n <div *ngFor=\"let notification of unreadNotifications\"\n class=\"sidebar-item notification-item\"\n (click)=\"onNotificationClick(notification)\">\n <div class=\"sidebar-item-icon\">\n <i class=\"fa-solid fa-bell\"></i>\n </div>\n <div class=\"sidebar-item-info\">\n <span class=\"sidebar-item-title\">{{ notification.Title }}</span>\n <span class=\"sidebar-item-subtitle\">{{ notification.Message | slice:0:40 }}{{ (notification.Message?.length || 0) > 40 ? '...' : '' }}</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Favorites Section -->\n <div class=\"sidebar-section favorites-section\" *ngIf=\"favorites.length > 0 || favoritesLoading\">\n <h4 class=\"sidebar-section-title\">\n <i class=\"fa-solid fa-star\"></i>\n Favorites\n </h4>\n <div class=\"sidebar-items\" *ngIf=\"!favoritesLoading\">\n <div *ngFor=\"let favorite of favorites\"\n class=\"sidebar-item favorite-item\"\n (click)=\"onFavoriteClick(favorite)\">\n <div class=\"sidebar-item-icon\">\n <i [class]=\"getFavoriteIcon(favorite)\"></i>\n </div>\n <div class=\"sidebar-item-info\">\n <span class=\"sidebar-item-title\">{{ favorite.RecordID }}</span>\n <span class=\"sidebar-item-subtitle\">{{ favorite.Entity }}</span>\n </div>\n </div>\n </div>\n <div class=\"sidebar-loading\" *ngIf=\"favoritesLoading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>Loading...</span>\n </div>\n </div>\n\n <!-- Recents Section -->\n <div class=\"sidebar-section recents-section\" *ngIf=\"recentItems.length > 0 || recentsLoading\">\n <h4 class=\"sidebar-section-title\">\n <i class=\"fa-solid fa-clock-rotate-left\"></i>\n Recent\n </h4>\n <div class=\"sidebar-items\" *ngIf=\"!recentsLoading\">\n <div *ngFor=\"let item of recentItems\"\n class=\"sidebar-item recent-item\"\n (click)=\"onRecentClick(item)\">\n <div class=\"sidebar-item-icon\">\n <i [class]=\"getResourceIcon(item.resourceType)\"></i>\n </div>\n <div class=\"sidebar-item-info\">\n <span class=\"sidebar-item-title\">{{ item.recordName || item.recordId }}</span>\n <span class=\"sidebar-item-subtitle\">{{ item.entityName }} \u00B7 {{ formatDate(item.latestAt) }}</span>\n </div>\n </div>\n </div>\n <div class=\"sidebar-loading\" *ngIf=\"recentsLoading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>Loading...</span>\n </div>\n </div>\n\n <!-- Empty sidebar state -->\n <div class=\"sidebar-empty\" *ngIf=\"!favoritesLoading && !recentsLoading && unreadNotifications.length === 0 && favorites.length === 0 && recentItems.length === 0\">\n <i class=\"fa-solid fa-inbox\"></i>\n <p>No quick access items</p>\n </div>\n </div>\n </div>\n\n <!-- Quick Access FAB Toggle (Fixed Button) -->\n <button class=\"sidebar-fab-toggle\"\n *ngIf=\"hasSidebarContent && !sidebarOpen\"\n (click)=\"toggleSidebar()\"\n title=\"Quick Access\">\n <i class=\"fa-solid fa-bolt\"></i>\n <span class=\"fab-badge\" *ngIf=\"unreadNotifications.length > 0\">{{ unreadNotifications.length }}</span>\n </button>\n</div>\n", styles: [".home-dashboard {\n display: flex;\n height: 100%;\n background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);\n overflow: hidden;\n position: relative;\n}\n\n/* Main Content Area */\n.main-content {\n flex: 1;\n display: flex;\n flex-direction: column;\n padding: 32px;\n overflow-y: auto;\n transition: margin-right 0.3s ease;\n}\n\n/* Sidebar open state adjusts main content on desktop */\n.home-dashboard.sidebar-open .main-content {\n margin-right: 320px;\n}\n\n/* Header */\n.home-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 32px;\n}\n\n.greeting-section h1 {\n margin: 0 0 8px 0;\n font-size: 32px;\n font-weight: 600;\n color: #212529;\n}\n\n.greeting-section .date {\n margin: 0;\n font-size: 16px;\n color: #6c757d;\n}\n\n/* FAB Toggle Button for Quick Access - top-right on desktop */\n.sidebar-fab-toggle {\n position: fixed;\n top: 80px; /* Below shell header with some spacing */\n right: 24px;\n width: 56px;\n height: 56px;\n border: none;\n border-radius: 50%;\n background: #1976d2;\n color: white;\n font-size: 20px;\n cursor: pointer;\n box-shadow: 0 4px 12px rgba(25, 118, 210, 0.4);\n transition: all 0.2s ease;\n z-index: 100;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.sidebar-fab-toggle:hover {\n background: #1565c0;\n transform: scale(1.05);\n box-shadow: 0 6px 16px rgba(25, 118, 210, 0.5);\n}\n\n.fab-badge {\n position: absolute;\n top: -4px;\n right: -4px;\n min-width: 20px;\n height: 20px;\n padding: 0 6px;\n background: #e53935;\n color: white;\n font-size: 11px;\n font-weight: 600;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n/* Loading State */\n.loading-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n flex: 1;\n gap: 16px;\n color: #6c757d;\n}\n\n.loading-spinner {\n font-size: 32px;\n color: #1976d2;\n}\n\n/* Apps Section */\n.apps-section {\n flex: 0 0 auto;\n}\n\n.section-title {\n display: flex;\n align-items: center;\n gap: 12px;\n margin: 0 0 24px 0;\n font-size: 20px;\n font-weight: 600;\n color: #495057;\n}\n\n.section-title i {\n color: #6c757d;\n}\n\n/* Apps Grid */\n.apps-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 20px;\n}\n\n/* App Card */\n.app-card {\n --app-color: #757575;\n display: flex;\n align-items: flex-start;\n gap: 16px;\n padding: 20px;\n background: white;\n border-radius: 14px;\n border: 1px solid #e9ecef;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);\n cursor: pointer;\n transition: all 0.25s ease;\n position: relative;\n overflow: hidden;\n}\n\n.app-card::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 4px;\n height: 100%;\n background: var(--app-color);\n opacity: 0;\n transition: opacity 0.25s ease;\n}\n\n.app-card:hover {\n border-color: var(--app-color);\n box-shadow: 0 8px 24px rgba(0, 0, 0, 0.1);\n transform: translateY(-3px);\n}\n\n.app-card:hover::before {\n opacity: 1;\n}\n\n/* App Icon */\n.app-icon-wrapper {\n flex-shrink: 0;\n}\n\n.app-icon {\n width: 52px;\n height: 52px;\n border-radius: 12px;\n background: color-mix(in srgb, var(--app-color) 12%, transparent);\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.25s ease;\n}\n\n.app-icon i {\n font-size: 22px;\n color: var(--app-color);\n transition: transform 0.25s ease;\n}\n\n.app-card:hover .app-icon {\n background: var(--app-color);\n}\n\n.app-card:hover .app-icon i {\n color: white;\n transform: scale(1.1);\n}\n\n/* App Info */\n.app-info {\n flex: 1;\n min-width: 0;\n}\n\n.app-name {\n margin: 0 0 4px 0;\n font-size: 17px;\n font-weight: 600;\n color: #212529;\n}\n\n.app-description {\n margin: 0 0 10px 0;\n font-size: 13px;\n color: #6c757d;\n line-height: 1.4;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n/* Nav Items Preview */\n.nav-preview {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n align-items: center;\n}\n\n.nav-item-chip {\n display: flex;\n align-items: center;\n gap: 5px;\n padding: 3px 8px;\n background: #f8f9fa;\n border-radius: 5px;\n font-size: 11px;\n color: #495057;\n}\n\n.nav-item-chip i {\n font-size: 9px;\n color: #6c757d;\n}\n\n.more-items {\n font-size: 11px;\n color: #6c757d;\n font-style: italic;\n}\n\n/* App Arrow */\n.app-arrow {\n position: absolute;\n right: 14px;\n top: 50%;\n transform: translateY(-50%) translateX(10px);\n opacity: 0;\n transition: all 0.25s ease;\n color: var(--app-color);\n font-size: 16px;\n}\n\n.app-card:hover .app-arrow {\n opacity: 1;\n transform: translateY(-50%) translateX(0);\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: 64px 24px;\n background: white;\n border-radius: 16px;\n border: 2px dashed #dee2e6;\n text-align: center;\n}\n\n.empty-icon {\n width: 80px;\n height: 80px;\n border-radius: 50%;\n background: #f8f9fa;\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 24px;\n}\n\n.empty-icon i {\n font-size: 32px;\n color: #adb5bd;\n}\n\n.empty-state h3 {\n margin: 0 0 8px 0;\n font-size: 20px;\n font-weight: 600;\n color: #495057;\n}\n\n.empty-state p {\n margin: 0;\n font-size: 14px;\n color: #6c757d;\n max-width: 400px;\n}\n\n/* ========================================\n RIGHT SIDEBAR\n ======================================== */\n.quick-access-sidebar {\n position: fixed;\n top: 60px; /* Below shell header */\n right: 0;\n bottom: 0;\n width: 320px;\n background: white;\n border-left: 1px solid #e9ecef;\n display: flex;\n flex-direction: column;\n transform: translateX(100%);\n transition: transform 0.3s ease;\n overflow: hidden;\n z-index: 100;\n box-shadow: -2px 0 8px rgba(0, 0, 0, 0.08);\n}\n\n.home-dashboard.sidebar-open .quick-access-sidebar {\n transform: translateX(0);\n}\n\n.sidebar-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 20px;\n border-bottom: 1px solid #e9ecef;\n background: #fafbfc;\n}\n\n.sidebar-header h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #212529;\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.sidebar-header h3 i {\n color: #1976d2;\n font-size: 14px;\n}\n\n.sidebar-close-btn {\n width: 32px;\n height: 32px;\n border: none;\n border-radius: 8px;\n background: transparent;\n color: #6c757d;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.2s ease;\n}\n\n.sidebar-close-btn:hover {\n background: #f1f3f4;\n color: #212529;\n}\n\n.sidebar-content {\n flex: 1;\n overflow-y: auto;\n padding: 16px;\n}\n\n/* Sidebar Sections */\n.sidebar-section {\n margin-bottom: 20px;\n}\n\n.sidebar-section:last-child {\n margin-bottom: 0;\n}\n\n.sidebar-section-title {\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 0 0 12px 0;\n font-size: 13px;\n font-weight: 600;\n color: #6c757d;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.sidebar-section-title i {\n font-size: 12px;\n}\n\n.notifications-section .sidebar-section-title i {\n color: #f57c00;\n}\n\n.favorites-section .sidebar-section-title i {\n color: #ffc107;\n}\n\n.recents-section .sidebar-section-title i {\n color: #1976d2;\n}\n\n.section-badge {\n background: #e53935;\n color: white;\n font-size: 10px;\n font-weight: 600;\n padding: 2px 6px;\n border-radius: 8px;\n margin-left: auto;\n}\n\n/* Sidebar Items */\n.sidebar-items {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.sidebar-item {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 12px;\n background: #f8f9fa;\n border-radius: 10px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.sidebar-item:hover {\n background: #e9ecef;\n transform: translateX(4px);\n}\n\n.sidebar-item-icon {\n width: 36px;\n height: 36px;\n border-radius: 8px;\n background: white;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.sidebar-item-icon i {\n font-size: 14px;\n color: #6c757d;\n}\n\n.notification-item .sidebar-item-icon {\n background: #fff3e0;\n}\n\n.notification-item .sidebar-item-icon i {\n color: #f57c00;\n}\n\n.favorite-item .sidebar-item-icon {\n background: #fff8e1;\n}\n\n.favorite-item .sidebar-item-icon i {\n color: #f9a825;\n}\n\n.recent-item .sidebar-item-icon {\n background: #e3f2fd;\n}\n\n.recent-item .sidebar-item-icon i {\n color: #1976d2;\n}\n\n.sidebar-item-info {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n flex: 1;\n}\n\n.sidebar-item-title {\n font-size: 13px;\n font-weight: 500;\n color: #212529;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.sidebar-item-subtitle {\n font-size: 11px;\n color: #6c757d;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.sidebar-loading {\n display: flex;\n align-items: center;\n gap: 8px;\n color: #6c757d;\n font-size: 13px;\n padding: 8px 0;\n}\n\n.sidebar-loading i {\n color: #1976d2;\n}\n\n.sidebar-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px 20px;\n text-align: center;\n color: #adb5bd;\n}\n\n.sidebar-empty i {\n font-size: 32px;\n margin-bottom: 12px;\n}\n\n.sidebar-empty p {\n margin: 0;\n font-size: 13px;\n}\n\n\n/* ========================================\n RESPONSIVE DESIGN\n ======================================== */\n\n/* Tablet and smaller desktop */\n@media (max-width: 1200px) {\n .quick-access-sidebar {\n width: 280px;\n }\n\n .home-dashboard.sidebar-open .main-content {\n margin-right: 280px;\n }\n\n .apps-grid {\n grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));\n }\n}\n\n/* Tablet */\n@media (max-width: 992px) {\n .main-content {\n padding: 24px;\n }\n\n .greeting-section h1 {\n font-size: 28px;\n }\n\n /* Make sidebar an overlay on tablet */\n .quick-access-sidebar {\n position: fixed;\n top: 60px; /* Below shell header */\n right: 0;\n bottom: 0;\n width: 320px;\n z-index: 1000;\n box-shadow: -4px 0 20px rgba(0, 0, 0, 0.15);\n }\n\n .home-dashboard.sidebar-open .main-content {\n margin-right: 0;\n }\n\n /* Show backdrop when sidebar is open on tablet */\n .home-dashboard.sidebar-open::after {\n content: '';\n position: fixed;\n top: 60px;\n left: 0;\n right: 320px;\n bottom: 0;\n background: rgba(0, 0, 0, 0.3);\n z-index: 999;\n }\n}\n\n/* Mobile */\n@media (max-width: 768px) {\n .home-dashboard {\n height: auto;\n min-height: 100%;\n overflow: visible;\n }\n\n .main-content {\n padding: 20px;\n padding-bottom: 100px; /* Space for FAB button */\n overflow: visible;\n }\n\n .home-header {\n flex-direction: column;\n gap: 16px;\n margin-bottom: 24px;\n }\n\n .greeting-section h1 {\n font-size: 24px;\n }\n\n /* Full-width sidebar on mobile - positioned below top nav */\n .quick-access-sidebar {\n position: fixed;\n top: 60px; /* Below the shell header */\n right: 0;\n bottom: 0;\n width: 100%;\n max-width: 100%;\n z-index: 100; /* Below shell header */\n border-left: none;\n border-top: 1px solid #e9ecef;\n }\n\n /* Add backdrop on mobile when sidebar is open */\n .home-dashboard.sidebar-open::before {\n content: '';\n position: fixed;\n top: 60px;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.4);\n z-index: 99;\n }\n\n /* No ::after backdrop needed on mobile */\n .home-dashboard.sidebar-open::after {\n display: none;\n }\n\n .apps-grid {\n grid-template-columns: 1fr;\n gap: 16px;\n }\n\n .app-card {\n padding: 16px;\n }\n\n .app-icon {\n width: 44px;\n height: 44px;\n }\n\n .app-icon i {\n font-size: 18px;\n }\n\n .app-name {\n font-size: 15px;\n }\n\n .nav-preview {\n display: none;\n }\n\n /* Move FAB to bottom-right on mobile */\n .sidebar-fab-toggle {\n top: auto;\n bottom: 20px;\n right: 20px;\n width: 48px;\n height: 48px;\n font-size: 18px;\n }\n}\n\n@media (max-width: 480px) {\n .main-content {\n padding: 16px;\n padding-bottom: 80px;\n }\n\n .greeting-section h1 {\n font-size: 20px;\n }\n\n .greeting-section .date {\n font-size: 14px;\n }\n\n .section-title {\n font-size: 16px;\n margin-bottom: 16px;\n }\n\n .sidebar-fab-toggle {\n bottom: 16px;\n right: 16px;\n width: 44px;\n height: 44px;\n font-size: 16px;\n }\n}\n"] }]
687
+ }], () => [{ type: i1.ApplicationManager }, { type: i2.NavigationService }, { type: i2.RecentAccessService }, { type: i3.Router }, { type: i0.ChangeDetectorRef }], { appConfigDialog: [{
688
+ type: ViewChild,
689
+ args: ['appConfigDialog']
690
+ }] }); })();
691
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(HomeDashboardComponent, { className: "HomeDashboardComponent", filePath: "src/Home/home-dashboard.component.ts", lineNumber: 23 }); })();
692
+ /**
693
+ * Tree-shaking prevention
694
+ */
695
+ export function LoadHomeDashboard() {
696
+ // Force inclusion in production builds
697
+ }
698
+ //# sourceMappingURL=home-dashboard.component.js.map