@memberjunction/ng-dashboards 2.127.0 → 2.129.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 (171) hide show
  1. package/dist/AI/components/agents/agent-configuration.component.d.ts +34 -1
  2. package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
  3. package/dist/AI/components/agents/agent-configuration.component.js +419 -109
  4. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  5. package/dist/AI/components/agents/agent-editor.component.d.ts +1 -1
  6. package/dist/AI/components/agents/agent-editor.component.d.ts.map +1 -1
  7. package/dist/AI/components/agents/agent-filter-panel.component.d.ts +1 -1
  8. package/dist/AI/components/agents/agent-filter-panel.component.d.ts.map +1 -1
  9. package/dist/AI/components/agents/agent-filter-panel.component.js +3 -3
  10. package/dist/AI/components/agents/agent-filter-panel.component.js.map +1 -1
  11. package/dist/AI/components/execution-monitoring.component.d.ts +1 -1
  12. package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
  13. package/dist/AI/components/execution-monitoring.component.js +3 -3
  14. package/dist/AI/components/execution-monitoring.component.js.map +1 -1
  15. package/dist/AI/components/models/{model-management-v2.component.d.ts → model-management.component.d.ts} +21 -5
  16. package/dist/AI/components/models/model-management.component.d.ts.map +1 -0
  17. package/dist/AI/components/models/model-management.component.js +1283 -0
  18. package/dist/AI/components/models/model-management.component.js.map +1 -0
  19. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts +2 -1
  20. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts.map +1 -1
  21. package/dist/AI/components/prompts/prompt-filter-panel.component.js +2 -2
  22. package/dist/AI/components/prompts/{prompt-management-v2.component.d.ts → prompt-management.component.d.ts} +30 -5
  23. package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -0
  24. package/dist/AI/components/prompts/prompt-management.component.js +1079 -0
  25. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -0
  26. package/dist/AI/components/prompts/prompt-version-control.component.d.ts +2 -1
  27. package/dist/AI/components/prompts/prompt-version-control.component.d.ts.map +1 -1
  28. package/dist/AI/components/prompts/prompt-version-control.component.js +1 -1
  29. package/dist/AI/components/prompts/prompt-version-control.component.js.map +1 -1
  30. package/dist/AI/components/system/system-config-filter-panel.component.js +2 -2
  31. package/dist/AI/components/system/system-configuration.component.d.ts +55 -11
  32. package/dist/AI/components/system/system-configuration.component.d.ts.map +1 -1
  33. package/dist/AI/components/system/system-configuration.component.js +790 -131
  34. package/dist/AI/components/system/system-configuration.component.js.map +1 -1
  35. package/dist/AI/components/widgets/kpi-card.component.d.ts.map +1 -1
  36. package/dist/AI/components/widgets/kpi-card.component.js +3 -3
  37. package/dist/AI/components/widgets/kpi-card.component.js.map +1 -1
  38. package/dist/AI/index.d.ts +2 -2
  39. package/dist/AI/index.d.ts.map +1 -1
  40. package/dist/AI/index.js +2 -2
  41. package/dist/AI/index.js.map +1 -1
  42. package/dist/AI/services/ai-instrumentation.service.d.ts +5 -6
  43. package/dist/AI/services/ai-instrumentation.service.d.ts.map +1 -1
  44. package/dist/AI/services/ai-instrumentation.service.js.map +1 -1
  45. package/dist/Communication/communication-dashboard.component.d.ts +2 -0
  46. package/dist/Communication/communication-dashboard.component.d.ts.map +1 -1
  47. package/dist/Communication/communication-dashboard.component.js +5 -2
  48. package/dist/Communication/communication-dashboard.component.js.map +1 -1
  49. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts +3 -2
  50. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
  51. package/dist/ComponentStudio/component-studio-dashboard.component.js +7 -3
  52. package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
  53. package/dist/Credentials/components/credential-category-edit-panel.component.d.ts +44 -0
  54. package/dist/Credentials/components/credential-category-edit-panel.component.d.ts.map +1 -0
  55. package/dist/Credentials/components/credential-category-edit-panel.component.js +456 -0
  56. package/dist/Credentials/components/credential-category-edit-panel.component.js.map +1 -0
  57. package/dist/Credentials/components/credential-edit-panel.component.d.ts +70 -0
  58. package/dist/Credentials/components/credential-edit-panel.component.d.ts.map +1 -0
  59. package/dist/Credentials/components/credential-edit-panel.component.js +694 -0
  60. package/dist/Credentials/components/credential-edit-panel.component.js.map +1 -0
  61. package/dist/Credentials/components/credential-type-edit-panel.component.d.ts +56 -0
  62. package/dist/Credentials/components/credential-type-edit-panel.component.d.ts.map +1 -0
  63. package/dist/Credentials/components/credential-type-edit-panel.component.js +563 -0
  64. package/dist/Credentials/components/credential-type-edit-panel.component.js.map +1 -0
  65. package/dist/Credentials/components/credentials-audit-resource.component.d.ts +81 -0
  66. package/dist/Credentials/components/credentials-audit-resource.component.d.ts.map +1 -0
  67. package/dist/Credentials/components/credentials-audit-resource.component.js +864 -0
  68. package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -0
  69. package/dist/Credentials/components/credentials-categories-resource.component.d.ts +61 -0
  70. package/dist/Credentials/components/credentials-categories-resource.component.d.ts.map +1 -0
  71. package/dist/Credentials/components/credentials-categories-resource.component.js +816 -0
  72. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -0
  73. package/dist/Credentials/components/credentials-list-resource.component.d.ts +83 -0
  74. package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -0
  75. package/dist/Credentials/components/credentials-list-resource.component.js +1253 -0
  76. package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -0
  77. package/dist/Credentials/components/credentials-overview-resource.component.d.ts +99 -0
  78. package/dist/Credentials/components/credentials-overview-resource.component.d.ts.map +1 -0
  79. package/dist/Credentials/components/credentials-overview-resource.component.js +936 -0
  80. package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -0
  81. package/dist/Credentials/components/credentials-types-resource.component.d.ts +70 -0
  82. package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -0
  83. package/dist/Credentials/components/credentials-types-resource.component.js +868 -0
  84. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -0
  85. package/dist/Credentials/credentials-dashboard.component.d.ts +37 -0
  86. package/dist/Credentials/credentials-dashboard.component.d.ts.map +1 -0
  87. package/dist/Credentials/credentials-dashboard.component.js +290 -0
  88. package/dist/Credentials/credentials-dashboard.component.js.map +1 -0
  89. package/dist/Credentials/index.d.ts +7 -0
  90. package/dist/Credentials/index.d.ts.map +1 -0
  91. package/dist/Credentials/index.js +9 -0
  92. package/dist/Credentials/index.js.map +1 -0
  93. package/dist/Credentials/pipes/group-by.pipe.d.ts +13 -0
  94. package/dist/Credentials/pipes/group-by.pipe.d.ts.map +1 -0
  95. package/dist/Credentials/pipes/group-by.pipe.js +29 -0
  96. package/dist/Credentials/pipes/group-by.pipe.js.map +1 -0
  97. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts +2 -2
  98. package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.d.ts +3 -3
  99. package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.d.ts.map +1 -1
  100. package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.js +50 -19
  101. package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.js.map +1 -1
  102. package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts +17 -1
  103. package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts.map +1 -1
  104. package/dist/DataExplorer/components/view-selector/view-selector.component.js +77 -45
  105. package/dist/DataExplorer/components/view-selector/view-selector.component.js.map +1 -1
  106. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +36 -0
  107. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
  108. package/dist/DataExplorer/data-explorer-dashboard.component.js +552 -368
  109. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  110. package/dist/DataExplorer/services/explorer-state.service.d.ts +5 -5
  111. package/dist/DataExplorer/services/explorer-state.service.d.ts.map +1 -1
  112. package/dist/DataExplorer/services/explorer-state.service.js +125 -151
  113. package/dist/DataExplorer/services/explorer-state.service.js.map +1 -1
  114. package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts +15 -19
  115. package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
  116. package/dist/EntityAdmin/entity-admin-dashboard.component.js +70 -26
  117. package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
  118. package/dist/Home/home-dashboard.component.d.ts +6 -5
  119. package/dist/Home/home-dashboard.component.d.ts.map +1 -1
  120. package/dist/Home/home-dashboard.component.js +174 -166
  121. package/dist/Home/home-dashboard.component.js.map +1 -1
  122. package/dist/Scheduling/scheduling-dashboard.component.d.ts +2 -0
  123. package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
  124. package/dist/Scheduling/scheduling-dashboard.component.js +5 -2
  125. package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
  126. package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts.map +1 -1
  127. package/dist/Scheduling/services/scheduling-instrumentation.service.js +4 -2
  128. package/dist/Scheduling/services/scheduling-instrumentation.service.js.map +1 -1
  129. package/dist/SystemDiagnostics/index.d.ts +2 -0
  130. package/dist/SystemDiagnostics/index.d.ts.map +1 -0
  131. package/dist/SystemDiagnostics/index.js +3 -0
  132. package/dist/SystemDiagnostics/index.js.map +1 -0
  133. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts +497 -0
  134. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -0
  135. package/dist/SystemDiagnostics/system-diagnostics.component.js +6063 -0
  136. package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -0
  137. package/dist/Testing/testing-dashboard.component.d.ts +2 -0
  138. package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
  139. package/dist/Testing/testing-dashboard.component.js +5 -2
  140. package/dist/Testing/testing-dashboard.component.js.map +1 -1
  141. package/dist/module.d.ts +103 -94
  142. package/dist/module.d.ts.map +1 -1
  143. package/dist/module.js +94 -29
  144. package/dist/module.js.map +1 -1
  145. package/dist/public-api.d.ts +3 -1
  146. package/dist/public-api.d.ts.map +1 -1
  147. package/dist/public-api.js +21 -1
  148. package/dist/public-api.js.map +1 -1
  149. package/package.json +28 -25
  150. package/dist/AI/components/models/model-management-v2.component.d.ts.map +0 -1
  151. package/dist/AI/components/models/model-management-v2.component.js +0 -981
  152. package/dist/AI/components/models/model-management-v2.component.js.map +0 -1
  153. package/dist/AI/components/prompts/prompt-management-v2.component.d.ts.map +0 -1
  154. package/dist/AI/components/prompts/prompt-management-v2.component.js +0 -811
  155. package/dist/AI/components/prompts/prompt-management-v2.component.js.map +0 -1
  156. package/dist/EntityAdmin/components/entity-details.component.d.ts +0 -50
  157. package/dist/EntityAdmin/components/entity-details.component.d.ts.map +0 -1
  158. package/dist/EntityAdmin/components/entity-details.component.js +0 -680
  159. package/dist/EntityAdmin/components/entity-details.component.js.map +0 -1
  160. package/dist/EntityAdmin/components/entity-filter-panel.component.d.ts +0 -31
  161. package/dist/EntityAdmin/components/entity-filter-panel.component.d.ts.map +0 -1
  162. package/dist/EntityAdmin/components/entity-filter-panel.component.js +0 -160
  163. package/dist/EntityAdmin/components/entity-filter-panel.component.js.map +0 -1
  164. package/dist/EntityAdmin/components/erd-composite.component.d.ts +0 -73
  165. package/dist/EntityAdmin/components/erd-composite.component.d.ts.map +0 -1
  166. package/dist/EntityAdmin/components/erd-composite.component.js +0 -271
  167. package/dist/EntityAdmin/components/erd-composite.component.js.map +0 -1
  168. package/dist/EntityAdmin/components/erd-diagram.component.d.ts +0 -47
  169. package/dist/EntityAdmin/components/erd-diagram.component.d.ts.map +0 -1
  170. package/dist/EntityAdmin/components/erd-diagram.component.js +0 -618
  171. package/dist/EntityAdmin/components/erd-diagram.component.js.map +0 -1
@@ -9,315 +9,324 @@ import { Subject } from 'rxjs';
9
9
  import { takeUntil } from 'rxjs/operators';
10
10
  import { BaseDashboard } from '@memberjunction/ng-shared';
11
11
  import { RegisterClass } from '@memberjunction/global';
12
- import { Metadata, RunView } from '@memberjunction/core';
12
+ import { Metadata } from '@memberjunction/core';
13
+ import { UserInfoEngine } from '@memberjunction/core-entities';
13
14
  import { MJNotificationService } from '@memberjunction/ng-notifications';
14
15
  import * as i0 from "@angular/core";
15
16
  import * as i1 from "@memberjunction/ng-base-application";
16
17
  import * as i2 from "@memberjunction/ng-shared";
17
18
  import * as i3 from "@angular/router";
18
19
  import * as i4 from "@angular/common";
19
- import * as i5 from "@memberjunction/ng-shared-generic";
20
+ import * as i5 from "@progress/kendo-angular-buttons";
21
+ import * as i6 from "@memberjunction/ng-explorer-settings";
22
+ import * as i7 from "@memberjunction/ng-shared-generic";
20
23
  const _c0 = ["appConfigDialog"];
21
24
  function HomeDashboardComponent_div_8_Template(rf, ctx) { if (rf & 1) {
22
- i0.ɵɵelementStart(0, "div", 9);
23
- i0.ɵɵelement(1, "mj-loading", 10);
25
+ i0.ɵɵelementStart(0, "div", 11);
26
+ i0.ɵɵelement(1, "mj-loading", 12);
24
27
  i0.ɵɵelementEnd();
25
28
  } }
26
29
  function HomeDashboardComponent_div_9_div_5_p_7_Template(rf, ctx) { if (rf & 1) {
27
- i0.ɵɵelementStart(0, "p", 26);
30
+ i0.ɵɵelementStart(0, "p", 28);
28
31
  i0.ɵɵtext(1);
29
32
  i0.ɵɵelementEnd();
30
33
  } if (rf & 2) {
31
- const app_r2 = i0.ɵɵnextContext().$implicit;
34
+ const app_r3 = i0.ɵɵnextContext().$implicit;
32
35
  i0.ɵɵadvance();
33
- i0.ɵɵtextInterpolate(app_r2.Description);
36
+ i0.ɵɵtextInterpolate(app_r3.Description);
34
37
  } }
35
38
  function HomeDashboardComponent_div_9_div_5_div_8_div_1_Template(rf, ctx) { if (rf & 1) {
36
- i0.ɵɵelementStart(0, "div", 30);
39
+ i0.ɵɵelementStart(0, "div", 32);
37
40
  i0.ɵɵelement(1, "i");
38
41
  i0.ɵɵelementStart(2, "span");
39
42
  i0.ɵɵtext(3);
40
43
  i0.ɵɵelementEnd()();
41
44
  } if (rf & 2) {
42
- const item_r4 = ctx.$implicit;
45
+ const item_r5 = ctx.$implicit;
43
46
  i0.ɵɵadvance();
44
- i0.ɵɵclassMap(item_r4.Icon);
47
+ i0.ɵɵclassMap(item_r5.Icon);
45
48
  i0.ɵɵadvance(2);
46
- i0.ɵɵtextInterpolate(item_r4.Label);
49
+ i0.ɵɵtextInterpolate(item_r5.Label);
47
50
  } }
48
51
  function HomeDashboardComponent_div_9_div_5_div_8_span_2_Template(rf, ctx) { if (rf & 1) {
49
- i0.ɵɵelementStart(0, "span", 31);
52
+ i0.ɵɵelementStart(0, "span", 33);
50
53
  i0.ɵɵtext(1);
51
54
  i0.ɵɵelementEnd();
52
55
  } if (rf & 2) {
53
- const app_r2 = i0.ɵɵnextContext(2).$implicit;
54
- const ctx_r2 = i0.ɵɵnextContext(2);
56
+ const app_r3 = i0.ɵɵnextContext(2).$implicit;
57
+ const ctx_r3 = i0.ɵɵnextContext(2);
55
58
  i0.ɵɵadvance();
56
- i0.ɵɵtextInterpolate1(" +", ctx_r2.getNavItemsCount(app_r2) - 3, " more ");
59
+ i0.ɵɵtextInterpolate1(" +", ctx_r3.getNavItemsCount(app_r3) - 3, " more ");
57
60
  } }
58
61
  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);
62
+ i0.ɵɵelementStart(0, "div", 29);
63
+ i0.ɵɵtemplate(1, HomeDashboardComponent_div_9_div_5_div_8_div_1_Template, 4, 3, "div", 30)(2, HomeDashboardComponent_div_9_div_5_div_8_span_2_Template, 2, 1, "span", 31);
61
64
  i0.ɵɵelementEnd();
62
65
  } if (rf & 2) {
63
- const app_r2 = i0.ɵɵnextContext().$implicit;
64
- const ctx_r2 = i0.ɵɵnextContext(2);
66
+ const app_r3 = i0.ɵɵnextContext().$implicit;
67
+ const ctx_r3 = i0.ɵɵnextContext(2);
65
68
  i0.ɵɵadvance();
66
- i0.ɵɵproperty("ngForOf", ctx_r2.getNavItemsPreview(app_r2));
69
+ i0.ɵɵproperty("ngForOf", ctx_r3.getNavItemsPreview(app_r3));
67
70
  i0.ɵɵadvance();
68
- i0.ɵɵproperty("ngIf", ctx_r2.getNavItemsCount(app_r2) > 3);
71
+ i0.ɵɵproperty("ngIf", ctx_r3.getNavItemsCount(app_r3) > 3);
69
72
  } }
70
73
  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);
74
+ const _r2 = i0.ɵɵgetCurrentView();
75
+ i0.ɵɵelementStart(0, "div", 19);
76
+ i0.ɵɵlistener("click", function HomeDashboardComponent_div_9_div_5_Template_div_click_0_listener() { const app_r3 = i0.ɵɵrestoreView(_r2).$implicit; const ctx_r3 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r3.onAppClick(app_r3)); });
77
+ i0.ɵɵelementStart(1, "div", 20)(2, "div", 21);
75
78
  i0.ɵɵelement(3, "i");
76
79
  i0.ɵɵelementEnd()();
77
- i0.ɵɵelementStart(4, "div", 20)(5, "h3", 21);
80
+ i0.ɵɵelementStart(4, "div", 22)(5, "h3", 23);
78
81
  i0.ɵɵtext(6);
79
82
  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);
83
+ i0.ɵɵtemplate(7, HomeDashboardComponent_div_9_div_5_p_7_Template, 2, 1, "p", 24)(8, HomeDashboardComponent_div_9_div_5_div_8_Template, 3, 2, "div", 25);
81
84
  i0.ɵɵelementEnd();
82
- i0.ɵɵelementStart(9, "div", 24);
83
- i0.ɵɵelement(10, "i", 25);
85
+ i0.ɵɵelementStart(9, "div", 26);
86
+ i0.ɵɵelement(10, "i", 27);
84
87
  i0.ɵɵelementEnd()();
85
88
  } 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
+ const app_r3 = ctx.$implicit;
90
+ const ctx_r3 = i0.ɵɵnextContext(2);
91
+ i0.ɵɵstyleProp("--app-color", app_r3.GetColor());
89
92
  i0.ɵɵadvance(3);
90
- i0.ɵɵclassMap(app_r2.Icon || "fa-solid fa-cube");
93
+ i0.ɵɵclassMap(app_r3.Icon || "fa-solid fa-cube");
91
94
  i0.ɵɵadvance(3);
92
- i0.ɵɵtextInterpolate(app_r2.Name);
95
+ i0.ɵɵtextInterpolate(app_r3.Name);
93
96
  i0.ɵɵadvance();
94
- i0.ɵɵproperty("ngIf", app_r2.Description);
97
+ i0.ɵɵproperty("ngIf", app_r3.Description);
95
98
  i0.ɵɵadvance();
96
- i0.ɵɵproperty("ngIf", ctx_r2.getNavItemsCount(app_r2) > 0);
99
+ i0.ɵɵproperty("ngIf", ctx_r3.getNavItemsCount(app_r3) > 0);
97
100
  } }
98
101
  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);
102
+ const _r6 = i0.ɵɵgetCurrentView();
103
+ i0.ɵɵelementStart(0, "div", 34)(1, "div", 35);
104
+ i0.ɵɵelement(2, "i", 36);
101
105
  i0.ɵɵelementEnd();
102
106
  i0.ɵɵelementStart(3, "h3");
103
107
  i0.ɵɵtext(4, "No Applications Available");
104
108
  i0.ɵɵelementEnd();
105
109
  i0.ɵɵelementStart(5, "p");
106
- i0.ɵɵtext(6, "You don't have any applications configured yet. Use the app switcher to configure your applications.");
110
+ i0.ɵɵtext(6, "You don't have any applications configured yet.");
111
+ i0.ɵɵelementEnd();
112
+ i0.ɵɵelementStart(7, "button", 37);
113
+ i0.ɵɵlistener("click", function HomeDashboardComponent_div_9_div_6_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r6); const ctx_r3 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r3.openConfigDialog()); });
114
+ i0.ɵɵelement(8, "i", 38);
115
+ i0.ɵɵtext(9, " Configure Applications ");
107
116
  i0.ɵɵelementEnd()();
108
117
  } }
109
118
  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);
119
+ i0.ɵɵelementStart(0, "div", 13)(1, "h2", 14);
120
+ i0.ɵɵelement(2, "i", 15);
112
121
  i0.ɵɵtext(3, " Your Applications ");
113
122
  i0.ɵɵelementEnd();
114
- i0.ɵɵelementStart(4, "div", 14);
115
- i0.ɵɵtemplate(5, HomeDashboardComponent_div_9_div_5_Template, 11, 7, "div", 15);
123
+ i0.ɵɵelementStart(4, "div", 16);
124
+ i0.ɵɵtemplate(5, HomeDashboardComponent_div_9_div_5_Template, 11, 7, "div", 17);
116
125
  i0.ɵɵelementEnd();
117
- i0.ɵɵtemplate(6, HomeDashboardComponent_div_9_div_6_Template, 7, 0, "div", 16);
126
+ i0.ɵɵtemplate(6, HomeDashboardComponent_div_9_div_6_Template, 10, 0, "div", 18);
118
127
  i0.ɵɵelementEnd();
119
128
  } if (rf & 2) {
120
- const ctx_r2 = i0.ɵɵnextContext();
129
+ const ctx_r3 = i0.ɵɵnextContext();
121
130
  i0.ɵɵadvance(5);
122
- i0.ɵɵproperty("ngForOf", ctx_r2.apps);
131
+ i0.ɵɵproperty("ngForOf", ctx_r3.apps);
123
132
  i0.ɵɵadvance();
124
- i0.ɵɵproperty("ngIf", ctx_r2.apps.length === 0);
133
+ i0.ɵɵproperty("ngIf", ctx_r3.apps.length === 0);
125
134
  } }
126
135
  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);
136
+ const _r8 = i0.ɵɵgetCurrentView();
137
+ i0.ɵɵelementStart(0, "div", 55);
138
+ i0.ɵɵlistener("click", function HomeDashboardComponent_div_10_div_8_div_7_Template_div_click_0_listener() { const notification_r9 = i0.ɵɵrestoreView(_r8).$implicit; const ctx_r3 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r3.onNotificationClick(notification_r9)); });
139
+ i0.ɵɵelementStart(1, "div", 56);
140
+ i0.ɵɵelement(2, "i", 51);
132
141
  i0.ɵɵelementEnd();
133
- i0.ɵɵelementStart(3, "div", 53)(4, "span", 54);
142
+ i0.ɵɵelementStart(3, "div", 57)(4, "span", 58);
134
143
  i0.ɵɵtext(5);
135
144
  i0.ɵɵelementEnd();
136
- i0.ɵɵelementStart(6, "span", 55);
145
+ i0.ɵɵelementStart(6, "span", 59);
137
146
  i0.ɵɵtext(7);
138
147
  i0.ɵɵpipe(8, "slice");
139
148
  i0.ɵɵelementEnd()()();
140
149
  } if (rf & 2) {
141
- const notification_r7 = ctx.$implicit;
150
+ const notification_r9 = ctx.$implicit;
142
151
  i0.ɵɵadvance(5);
143
- i0.ɵɵtextInterpolate(notification_r7.Title);
152
+ i0.ɵɵtextInterpolate(notification_r9.Title);
144
153
  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 ? "..." : "", "");
154
+ i0.ɵɵtextInterpolate2("", i0.ɵɵpipeBind3(8, 3, notification_r9.Message, 0, 40), "", ((notification_r9.Message == null ? null : notification_r9.Message.length) || 0) > 40 ? "..." : "", "");
146
155
  } }
147
156
  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);
157
+ i0.ɵɵelementStart(0, "div", 49)(1, "h4", 50);
158
+ i0.ɵɵelement(2, "i", 51);
150
159
  i0.ɵɵtext(3, " Notifications ");
151
- i0.ɵɵelementStart(4, "span", 48);
160
+ i0.ɵɵelementStart(4, "span", 52);
152
161
  i0.ɵɵtext(5);
153
162
  i0.ɵɵelementEnd()();
154
- i0.ɵɵelementStart(6, "div", 49);
155
- i0.ɵɵtemplate(7, HomeDashboardComponent_div_10_div_8_div_7_Template, 9, 7, "div", 50);
163
+ i0.ɵɵelementStart(6, "div", 53);
164
+ i0.ɵɵtemplate(7, HomeDashboardComponent_div_10_div_8_div_7_Template, 9, 7, "div", 54);
156
165
  i0.ɵɵelementEnd()();
157
166
  } if (rf & 2) {
158
- const ctx_r2 = i0.ɵɵnextContext(2);
167
+ const ctx_r3 = i0.ɵɵnextContext(2);
159
168
  i0.ɵɵadvance(5);
160
- i0.ɵɵtextInterpolate(ctx_r2.unreadNotifications.length);
169
+ i0.ɵɵtextInterpolate(ctx_r3.unreadNotifications.length);
161
170
  i0.ɵɵadvance(2);
162
- i0.ɵɵproperty("ngForOf", ctx_r2.unreadNotifications);
171
+ i0.ɵɵproperty("ngForOf", ctx_r3.unreadNotifications);
163
172
  } }
164
173
  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);
174
+ const _r10 = i0.ɵɵgetCurrentView();
175
+ i0.ɵɵelementStart(0, "div", 65);
176
+ i0.ɵɵlistener("click", function HomeDashboardComponent_div_10_div_9_div_4_div_1_Template_div_click_0_listener() { const favorite_r11 = i0.ɵɵrestoreView(_r10).$implicit; const ctx_r3 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r3.onFavoriteClick(favorite_r11)); });
177
+ i0.ɵɵelementStart(1, "div", 56);
169
178
  i0.ɵɵelement(2, "i");
170
179
  i0.ɵɵelementEnd();
171
- i0.ɵɵelementStart(3, "div", 53)(4, "span", 54);
180
+ i0.ɵɵelementStart(3, "div", 57)(4, "span", 58);
172
181
  i0.ɵɵtext(5);
173
182
  i0.ɵɵelementEnd();
174
- i0.ɵɵelementStart(6, "span", 55);
183
+ i0.ɵɵelementStart(6, "span", 59);
175
184
  i0.ɵɵtext(7);
176
185
  i0.ɵɵelementEnd()()();
177
186
  } if (rf & 2) {
178
- const favorite_r9 = ctx.$implicit;
179
- const ctx_r2 = i0.ɵɵnextContext(4);
187
+ const favorite_r11 = ctx.$implicit;
188
+ const ctx_r3 = i0.ɵɵnextContext(4);
180
189
  i0.ɵɵadvance(2);
181
- i0.ɵɵclassMap(ctx_r2.getFavoriteIcon(favorite_r9));
190
+ i0.ɵɵclassMap(ctx_r3.getFavoriteIcon(favorite_r11));
182
191
  i0.ɵɵadvance(3);
183
- i0.ɵɵtextInterpolate(favorite_r9.RecordID);
192
+ i0.ɵɵtextInterpolate(favorite_r11.RecordID);
184
193
  i0.ɵɵadvance(2);
185
- i0.ɵɵtextInterpolate(favorite_r9.Entity);
194
+ i0.ɵɵtextInterpolate(favorite_r11.Entity);
186
195
  } }
187
196
  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);
197
+ i0.ɵɵelementStart(0, "div", 53);
198
+ i0.ɵɵtemplate(1, HomeDashboardComponent_div_10_div_9_div_4_div_1_Template, 8, 4, "div", 64);
190
199
  i0.ɵɵelementEnd();
191
200
  } if (rf & 2) {
192
- const ctx_r2 = i0.ɵɵnextContext(3);
201
+ const ctx_r3 = i0.ɵɵnextContext(3);
193
202
  i0.ɵɵadvance();
194
- i0.ɵɵproperty("ngForOf", ctx_r2.favorites);
203
+ i0.ɵɵproperty("ngForOf", ctx_r3.favorites);
195
204
  } }
196
205
  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);
206
+ i0.ɵɵelementStart(0, "div", 66);
207
+ i0.ɵɵelement(1, "i", 67);
199
208
  i0.ɵɵelementStart(2, "span");
200
209
  i0.ɵɵtext(3, "Loading...");
201
210
  i0.ɵɵelementEnd()();
202
211
  } }
203
212
  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);
213
+ i0.ɵɵelementStart(0, "div", 60)(1, "h4", 50);
214
+ i0.ɵɵelement(2, "i", 61);
206
215
  i0.ɵɵtext(3, " Favorites ");
207
216
  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);
217
+ i0.ɵɵtemplate(4, HomeDashboardComponent_div_10_div_9_div_4_Template, 2, 1, "div", 62)(5, HomeDashboardComponent_div_10_div_9_div_5_Template, 4, 0, "div", 63);
209
218
  i0.ɵɵelementEnd();
210
219
  } if (rf & 2) {
211
- const ctx_r2 = i0.ɵɵnextContext(2);
220
+ const ctx_r3 = i0.ɵɵnextContext(2);
212
221
  i0.ɵɵadvance(4);
213
- i0.ɵɵproperty("ngIf", !ctx_r2.favoritesLoading);
222
+ i0.ɵɵproperty("ngIf", !ctx_r3.favoritesLoading);
214
223
  i0.ɵɵadvance();
215
- i0.ɵɵproperty("ngIf", ctx_r2.favoritesLoading);
224
+ i0.ɵɵproperty("ngIf", ctx_r3.favoritesLoading);
216
225
  } }
217
226
  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);
227
+ const _r12 = i0.ɵɵgetCurrentView();
228
+ i0.ɵɵelementStart(0, "div", 71);
229
+ i0.ɵɵlistener("click", function HomeDashboardComponent_div_10_div_10_div_4_div_1_Template_div_click_0_listener() { const item_r13 = i0.ɵɵrestoreView(_r12).$implicit; const ctx_r3 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r3.onRecentClick(item_r13)); });
230
+ i0.ɵɵelementStart(1, "div", 56);
222
231
  i0.ɵɵelement(2, "i");
223
232
  i0.ɵɵelementEnd();
224
- i0.ɵɵelementStart(3, "div", 53)(4, "span", 54);
233
+ i0.ɵɵelementStart(3, "div", 57)(4, "span", 58);
225
234
  i0.ɵɵtext(5);
226
235
  i0.ɵɵelementEnd();
227
- i0.ɵɵelementStart(6, "span", 55);
236
+ i0.ɵɵelementStart(6, "span", 59);
228
237
  i0.ɵɵtext(7);
229
238
  i0.ɵɵelementEnd()()();
230
239
  } if (rf & 2) {
231
- const item_r11 = ctx.$implicit;
232
- const ctx_r2 = i0.ɵɵnextContext(4);
240
+ const item_r13 = ctx.$implicit;
241
+ const ctx_r3 = i0.ɵɵnextContext(4);
233
242
  i0.ɵɵadvance(2);
234
- i0.ɵɵclassMap(ctx_r2.getResourceIcon(item_r11.resourceType));
243
+ i0.ɵɵclassMap(ctx_r3.getResourceIcon(item_r13.resourceType));
235
244
  i0.ɵɵadvance(3);
236
- i0.ɵɵtextInterpolate(item_r11.recordName || item_r11.recordId);
245
+ i0.ɵɵtextInterpolate(item_r13.recordName || item_r13.recordId);
237
246
  i0.ɵɵadvance(2);
238
- i0.ɵɵtextInterpolate2("", item_r11.entityName, " \u00B7 ", ctx_r2.formatDate(item_r11.latestAt), "");
247
+ i0.ɵɵtextInterpolate2("", item_r13.entityName, " \u00B7 ", ctx_r3.formatDate(item_r13.latestAt), "");
239
248
  } }
240
249
  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);
250
+ i0.ɵɵelementStart(0, "div", 53);
251
+ i0.ɵɵtemplate(1, HomeDashboardComponent_div_10_div_10_div_4_div_1_Template, 8, 5, "div", 70);
243
252
  i0.ɵɵelementEnd();
244
253
  } if (rf & 2) {
245
- const ctx_r2 = i0.ɵɵnextContext(3);
254
+ const ctx_r3 = i0.ɵɵnextContext(3);
246
255
  i0.ɵɵadvance();
247
- i0.ɵɵproperty("ngForOf", ctx_r2.recentItems);
256
+ i0.ɵɵproperty("ngForOf", ctx_r3.recentItems);
248
257
  } }
249
258
  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);
259
+ i0.ɵɵelementStart(0, "div", 66);
260
+ i0.ɵɵelement(1, "i", 67);
252
261
  i0.ɵɵelementStart(2, "span");
253
262
  i0.ɵɵtext(3, "Loading...");
254
263
  i0.ɵɵelementEnd()();
255
264
  } }
256
265
  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);
266
+ i0.ɵɵelementStart(0, "div", 68)(1, "h4", 50);
267
+ i0.ɵɵelement(2, "i", 69);
259
268
  i0.ɵɵtext(3, " Recent ");
260
269
  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);
270
+ i0.ɵɵtemplate(4, HomeDashboardComponent_div_10_div_10_div_4_Template, 2, 1, "div", 62)(5, HomeDashboardComponent_div_10_div_10_div_5_Template, 4, 0, "div", 63);
262
271
  i0.ɵɵelementEnd();
263
272
  } if (rf & 2) {
264
- const ctx_r2 = i0.ɵɵnextContext(2);
273
+ const ctx_r3 = i0.ɵɵnextContext(2);
265
274
  i0.ɵɵadvance(4);
266
- i0.ɵɵproperty("ngIf", !ctx_r2.recentsLoading);
275
+ i0.ɵɵproperty("ngIf", !ctx_r3.recentsLoading);
267
276
  i0.ɵɵadvance();
268
- i0.ɵɵproperty("ngIf", ctx_r2.recentsLoading);
277
+ i0.ɵɵproperty("ngIf", ctx_r3.recentsLoading);
269
278
  } }
270
279
  function HomeDashboardComponent_div_10_div_11_Template(rf, ctx) { if (rf & 1) {
271
- i0.ɵɵelementStart(0, "div", 68);
272
- i0.ɵɵelement(1, "i", 69);
280
+ i0.ɵɵelementStart(0, "div", 72);
281
+ i0.ɵɵelement(1, "i", 73);
273
282
  i0.ɵɵelementStart(2, "p");
274
283
  i0.ɵɵtext(3, "No quick access items");
275
284
  i0.ɵɵelementEnd()();
276
285
  } }
277
286
  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);
287
+ const _r7 = i0.ɵɵgetCurrentView();
288
+ i0.ɵɵelementStart(0, "div", 39)(1, "div", 40)(2, "h3");
289
+ i0.ɵɵelement(3, "i", 41);
281
290
  i0.ɵɵtext(4, " Quick Access ");
282
291
  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);
292
+ i0.ɵɵelementStart(5, "button", 42);
293
+ i0.ɵɵlistener("click", function HomeDashboardComponent_div_10_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r7); const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.toggleSidebar()); });
294
+ i0.ɵɵelement(6, "i", 43);
286
295
  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);
296
+ i0.ɵɵelementStart(7, "div", 44);
297
+ i0.ɵɵtemplate(8, HomeDashboardComponent_div_10_div_8_Template, 8, 2, "div", 45)(9, HomeDashboardComponent_div_10_div_9_Template, 6, 2, "div", 46)(10, HomeDashboardComponent_div_10_div_10_Template, 6, 2, "div", 47)(11, HomeDashboardComponent_div_10_div_11_Template, 4, 0, "div", 48);
289
298
  i0.ɵɵelementEnd()();
290
299
  } if (rf & 2) {
291
- const ctx_r2 = i0.ɵɵnextContext();
300
+ const ctx_r3 = i0.ɵɵnextContext();
292
301
  i0.ɵɵadvance(8);
293
- i0.ɵɵproperty("ngIf", ctx_r2.unreadNotifications.length > 0);
302
+ i0.ɵɵproperty("ngIf", ctx_r3.unreadNotifications.length > 0);
294
303
  i0.ɵɵadvance();
295
- i0.ɵɵproperty("ngIf", ctx_r2.favorites.length > 0 || ctx_r2.favoritesLoading);
304
+ i0.ɵɵproperty("ngIf", ctx_r3.favorites.length > 0 || ctx_r3.favoritesLoading);
296
305
  i0.ɵɵadvance();
297
- i0.ɵɵproperty("ngIf", ctx_r2.recentItems.length > 0 || ctx_r2.recentsLoading);
306
+ i0.ɵɵproperty("ngIf", ctx_r3.recentItems.length > 0 || ctx_r3.recentsLoading);
298
307
  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);
308
+ i0.ɵɵproperty("ngIf", !ctx_r3.favoritesLoading && !ctx_r3.recentsLoading && ctx_r3.unreadNotifications.length === 0 && ctx_r3.favorites.length === 0 && ctx_r3.recentItems.length === 0);
300
309
  } }
301
310
  function HomeDashboardComponent_button_11_span_2_Template(rf, ctx) { if (rf & 1) {
302
- i0.ɵɵelementStart(0, "span", 72);
311
+ i0.ɵɵelementStart(0, "span", 76);
303
312
  i0.ɵɵtext(1);
304
313
  i0.ɵɵelementEnd();
305
314
  } if (rf & 2) {
306
- const ctx_r2 = i0.ɵɵnextContext(2);
315
+ const ctx_r3 = i0.ɵɵnextContext(2);
307
316
  i0.ɵɵadvance();
308
- i0.ɵɵtextInterpolate(ctx_r2.unreadNotifications.length);
317
+ i0.ɵɵtextInterpolate(ctx_r3.unreadNotifications.length);
309
318
  } }
310
319
  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);
320
+ const _r14 = i0.ɵɵgetCurrentView();
321
+ i0.ɵɵelementStart(0, "button", 74);
322
+ i0.ɵɵlistener("click", function HomeDashboardComponent_button_11_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r14); const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.toggleSidebar()); });
323
+ i0.ɵɵelement(1, "i", 41);
324
+ i0.ɵɵtemplate(2, HomeDashboardComponent_button_11_span_2_Template, 2, 1, "span", 75);
316
325
  i0.ɵɵelementEnd();
317
326
  } if (rf & 2) {
318
- const ctx_r2 = i0.ɵɵnextContext();
327
+ const ctx_r3 = i0.ɵɵnextContext();
319
328
  i0.ɵɵadvance(2);
320
- i0.ɵɵproperty("ngIf", ctx_r2.unreadNotifications.length > 0);
329
+ i0.ɵɵproperty("ngIf", ctx_r3.unreadNotifications.length > 0);
321
330
  } }
322
331
  /**
323
332
  * Home Dashboard - Personalized home screen showing all available applications
@@ -378,7 +387,10 @@ let HomeDashboardComponent = class HomeDashboardComponent extends BaseDashboard
378
387
  this.router = router;
379
388
  this.cdr = cdr;
380
389
  }
381
- async ngOnInit() {
390
+ async GetResourceDisplayName(data) {
391
+ return "Home";
392
+ }
393
+ async ngAfterViewInit() {
382
394
  // Get current user info
383
395
  this.currentUser = {
384
396
  Name: this.metadata.CurrentUser?.Name || 'User',
@@ -401,10 +413,8 @@ let HomeDashboardComponent = class HomeDashboardComponent extends BaseDashboard
401
413
  .subscribe(apps => {
402
414
  // Exclude the Home app from the list (users are already on Home)
403
415
  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
- }
416
+ this.isLoading = false;
417
+ this.NotifyLoadComplete();
408
418
  this.cdr.detectChanges();
409
419
  });
410
420
  // Subscribe to unread notifications
@@ -423,11 +433,11 @@ let HomeDashboardComponent = class HomeDashboardComponent extends BaseDashboard
423
433
  this.recentsLoading = false;
424
434
  this.cdr.detectChanges();
425
435
  });
426
- // Load favorites and recents
427
- await Promise.all([
428
- this.loadFavorites(),
429
- this.loadRecents()
430
- ]);
436
+ // Favorites and recents load asynchronously in the sidebar
437
+ this.NotifyLoadComplete();
438
+ // Load favorites and recents asynchronously (don't block rendering)
439
+ this.loadFavorites();
440
+ this.loadRecents();
431
441
  }
432
442
  ngOnDestroy() {
433
443
  this.destroy$.next();
@@ -501,22 +511,13 @@ let HomeDashboardComponent = class HomeDashboardComponent extends BaseDashboard
501
511
  }));
502
512
  }
503
513
  /**
504
- * Load user favorites from the database
514
+ * Load user favorites from UserInfoEngine (cached)
505
515
  */
506
516
  async loadFavorites() {
507
517
  try {
508
518
  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
- }
519
+ // Get first 10 favorites (already ordered by __mj_CreatedAt DESC in engine)
520
+ this.favorites = UserInfoEngine.Instance.UserFavorites.slice(0, 10);
520
521
  }
521
522
  catch (error) {
522
523
  console.error('Error loading favorites:', error);
@@ -532,6 +533,7 @@ let HomeDashboardComponent = class HomeDashboardComponent extends BaseDashboard
532
533
  async loadRecents() {
533
534
  try {
534
535
  this.recentsLoading = true;
536
+ this.cdr.detectChanges();
535
537
  await this.recentAccessService.loadRecentItems(10);
536
538
  }
537
539
  catch (error) {
@@ -650,17 +652,21 @@ let HomeDashboardComponent = class HomeDashboardComponent extends BaseDashboard
650
652
  } if (rf & 2) {
651
653
  let _t;
652
654
  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
+ } }, features: [i0.ɵɵInheritDefinitionFeature], decls: 14, vars: 10, consts: [["appConfigDialog", ""], [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"], [3, "showDialogChange", "configSaved", "showDialog"], [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"], ["kendoButton", "", "themeColor", "primary", 3, "click"], [1, "fa-solid", "fa-gear"], [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) {
656
+ const _r1 = i0.ɵɵgetCurrentView();
657
+ i0.ɵɵelementStart(0, "div", 1)(1, "div", 2)(2, "div", 3)(3, "div", 4)(4, "h1");
655
658
  i0.ɵɵtext(5);
656
659
  i0.ɵɵelementEnd();
657
- i0.ɵɵelementStart(6, "p", 4);
660
+ i0.ɵɵelementStart(6, "p", 5);
658
661
  i0.ɵɵtext(7);
659
662
  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.ɵɵtemplate(8, HomeDashboardComponent_div_8_Template, 2, 0, "div", 6)(9, HomeDashboardComponent_div_9_Template, 7, 2, "div", 7);
663
664
  i0.ɵɵelementEnd();
665
+ i0.ɵɵtemplate(10, HomeDashboardComponent_div_10_Template, 12, 4, "div", 8)(11, HomeDashboardComponent_button_11_Template, 3, 1, "button", 9);
666
+ i0.ɵɵelementStart(12, "mj-user-app-config", 10, 0);
667
+ i0.ɵɵtwoWayListener("showDialogChange", function HomeDashboardComponent_Template_mj_user_app_config_showDialogChange_12_listener($event) { i0.ɵɵrestoreView(_r1); i0.ɵɵtwoWayBindingSet(ctx.showConfigDialog, $event) || (ctx.showConfigDialog = $event); return i0.ɵɵresetView($event); });
668
+ i0.ɵɵlistener("configSaved", function HomeDashboardComponent_Template_mj_user_app_config_configSaved_12_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onConfigSaved()); });
669
+ i0.ɵɵelementEnd()();
664
670
  } if (rf & 2) {
665
671
  i0.ɵɵclassProp("sidebar-open", ctx.sidebarOpen && ctx.hasSidebarContent);
666
672
  i0.ɵɵadvance(5);
@@ -675,7 +681,9 @@ let HomeDashboardComponent = class HomeDashboardComponent extends BaseDashboard
675
681
  i0.ɵɵproperty("ngIf", ctx.hasSidebarContent);
676
682
  i0.ɵɵadvance();
677
683
  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}"] });
684
+ i0.ɵɵadvance();
685
+ i0.ɵɵtwoWayProperty("showDialog", ctx.showConfigDialog);
686
+ } }, dependencies: [i4.NgForOf, i4.NgIf, i5.ButtonComponent, i6.UserAppConfigComponent, i7.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 0 20px 0;\n font-size: 14px;\n color: #6c757d;\n max-width: 400px;\n}\n\n.empty-state[_ngcontent-%COMP%] button[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 8px;\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
687
  };
680
688
  HomeDashboardComponent = __decorate([
681
689
  RegisterClass(BaseDashboard, 'HomeDashboard')
@@ -683,7 +691,7 @@ HomeDashboardComponent = __decorate([
683
691
  export { HomeDashboardComponent };
684
692
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(HomeDashboardComponent, [{
685
693
  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"] }]
694
+ 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.</p>\n <button kendoButton\n themeColor=\"primary\"\n (click)=\"openConfigDialog()\">\n <i class=\"fa-solid fa-gear\"></i>\n Configure Applications\n </button>\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\n <!-- App Configuration Dialog -->\n <mj-user-app-config\n #appConfigDialog\n [(showDialog)]=\"showConfigDialog\"\n (configSaved)=\"onConfigSaved()\">\n </mj-user-app-config>\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 0 20px 0;\n font-size: 14px;\n color: #6c757d;\n max-width: 400px;\n}\n\n.empty-state button i {\n margin-right: 8px;\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
695
  }], () => [{ type: i1.ApplicationManager }, { type: i2.NavigationService }, { type: i2.RecentAccessService }, { type: i3.Router }, { type: i0.ChangeDetectorRef }], { appConfigDialog: [{
688
696
  type: ViewChild,
689
697
  args: ['appConfigDialog']