@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.
- package/dist/AI/components/agents/agent-configuration.component.d.ts +34 -1
- package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-configuration.component.js +419 -109
- package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
- package/dist/AI/components/agents/agent-editor.component.d.ts +1 -1
- package/dist/AI/components/agents/agent-editor.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-filter-panel.component.d.ts +1 -1
- package/dist/AI/components/agents/agent-filter-panel.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-filter-panel.component.js +3 -3
- package/dist/AI/components/agents/agent-filter-panel.component.js.map +1 -1
- package/dist/AI/components/execution-monitoring.component.d.ts +1 -1
- package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
- package/dist/AI/components/execution-monitoring.component.js +3 -3
- package/dist/AI/components/execution-monitoring.component.js.map +1 -1
- package/dist/AI/components/models/{model-management-v2.component.d.ts → model-management.component.d.ts} +21 -5
- package/dist/AI/components/models/model-management.component.d.ts.map +1 -0
- package/dist/AI/components/models/model-management.component.js +1283 -0
- package/dist/AI/components/models/model-management.component.js.map +1 -0
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts +2 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/prompt-filter-panel.component.js +2 -2
- package/dist/AI/components/prompts/{prompt-management-v2.component.d.ts → prompt-management.component.d.ts} +30 -5
- package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -0
- package/dist/AI/components/prompts/prompt-management.component.js +1079 -0
- package/dist/AI/components/prompts/prompt-management.component.js.map +1 -0
- package/dist/AI/components/prompts/prompt-version-control.component.d.ts +2 -1
- package/dist/AI/components/prompts/prompt-version-control.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/prompt-version-control.component.js +1 -1
- package/dist/AI/components/prompts/prompt-version-control.component.js.map +1 -1
- package/dist/AI/components/system/system-config-filter-panel.component.js +2 -2
- package/dist/AI/components/system/system-configuration.component.d.ts +55 -11
- package/dist/AI/components/system/system-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/system/system-configuration.component.js +790 -131
- package/dist/AI/components/system/system-configuration.component.js.map +1 -1
- package/dist/AI/components/widgets/kpi-card.component.d.ts.map +1 -1
- package/dist/AI/components/widgets/kpi-card.component.js +3 -3
- package/dist/AI/components/widgets/kpi-card.component.js.map +1 -1
- package/dist/AI/index.d.ts +2 -2
- package/dist/AI/index.d.ts.map +1 -1
- package/dist/AI/index.js +2 -2
- package/dist/AI/index.js.map +1 -1
- package/dist/AI/services/ai-instrumentation.service.d.ts +5 -6
- package/dist/AI/services/ai-instrumentation.service.d.ts.map +1 -1
- package/dist/AI/services/ai-instrumentation.service.js.map +1 -1
- package/dist/Communication/communication-dashboard.component.d.ts +2 -0
- package/dist/Communication/communication-dashboard.component.d.ts.map +1 -1
- package/dist/Communication/communication-dashboard.component.js +5 -2
- package/dist/Communication/communication-dashboard.component.js.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.d.ts +3 -2
- package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.js +7 -3
- package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
- package/dist/Credentials/components/credential-category-edit-panel.component.d.ts +44 -0
- package/dist/Credentials/components/credential-category-edit-panel.component.d.ts.map +1 -0
- package/dist/Credentials/components/credential-category-edit-panel.component.js +456 -0
- package/dist/Credentials/components/credential-category-edit-panel.component.js.map +1 -0
- package/dist/Credentials/components/credential-edit-panel.component.d.ts +70 -0
- package/dist/Credentials/components/credential-edit-panel.component.d.ts.map +1 -0
- package/dist/Credentials/components/credential-edit-panel.component.js +694 -0
- package/dist/Credentials/components/credential-edit-panel.component.js.map +1 -0
- package/dist/Credentials/components/credential-type-edit-panel.component.d.ts +56 -0
- package/dist/Credentials/components/credential-type-edit-panel.component.d.ts.map +1 -0
- package/dist/Credentials/components/credential-type-edit-panel.component.js +563 -0
- package/dist/Credentials/components/credential-type-edit-panel.component.js.map +1 -0
- package/dist/Credentials/components/credentials-audit-resource.component.d.ts +81 -0
- package/dist/Credentials/components/credentials-audit-resource.component.d.ts.map +1 -0
- package/dist/Credentials/components/credentials-audit-resource.component.js +864 -0
- package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -0
- package/dist/Credentials/components/credentials-categories-resource.component.d.ts +61 -0
- package/dist/Credentials/components/credentials-categories-resource.component.d.ts.map +1 -0
- package/dist/Credentials/components/credentials-categories-resource.component.js +816 -0
- package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -0
- package/dist/Credentials/components/credentials-list-resource.component.d.ts +83 -0
- package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -0
- package/dist/Credentials/components/credentials-list-resource.component.js +1253 -0
- package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -0
- package/dist/Credentials/components/credentials-overview-resource.component.d.ts +99 -0
- package/dist/Credentials/components/credentials-overview-resource.component.d.ts.map +1 -0
- package/dist/Credentials/components/credentials-overview-resource.component.js +936 -0
- package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -0
- package/dist/Credentials/components/credentials-types-resource.component.d.ts +70 -0
- package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -0
- package/dist/Credentials/components/credentials-types-resource.component.js +868 -0
- package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -0
- package/dist/Credentials/credentials-dashboard.component.d.ts +37 -0
- package/dist/Credentials/credentials-dashboard.component.d.ts.map +1 -0
- package/dist/Credentials/credentials-dashboard.component.js +290 -0
- package/dist/Credentials/credentials-dashboard.component.js.map +1 -0
- package/dist/Credentials/index.d.ts +7 -0
- package/dist/Credentials/index.d.ts.map +1 -0
- package/dist/Credentials/index.js +9 -0
- package/dist/Credentials/index.js.map +1 -0
- package/dist/Credentials/pipes/group-by.pipe.d.ts +13 -0
- package/dist/Credentials/pipes/group-by.pipe.d.ts.map +1 -0
- package/dist/Credentials/pipes/group-by.pipe.js +29 -0
- package/dist/Credentials/pipes/group-by.pipe.js.map +1 -0
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts +2 -2
- package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.d.ts +3 -3
- package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.d.ts.map +1 -1
- package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.js +50 -19
- package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.js.map +1 -1
- package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts +17 -1
- package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts.map +1 -1
- package/dist/DataExplorer/components/view-selector/view-selector.component.js +77 -45
- package/dist/DataExplorer/components/view-selector/view-selector.component.js.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +36 -0
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.js +552 -368
- package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
- package/dist/DataExplorer/services/explorer-state.service.d.ts +5 -5
- package/dist/DataExplorer/services/explorer-state.service.d.ts.map +1 -1
- package/dist/DataExplorer/services/explorer-state.service.js +125 -151
- package/dist/DataExplorer/services/explorer-state.service.js.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts +15 -19
- package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.js +70 -26
- package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
- package/dist/Home/home-dashboard.component.d.ts +6 -5
- package/dist/Home/home-dashboard.component.d.ts.map +1 -1
- package/dist/Home/home-dashboard.component.js +174 -166
- package/dist/Home/home-dashboard.component.js.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.d.ts +2 -0
- package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.js +5 -2
- package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
- package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts.map +1 -1
- package/dist/Scheduling/services/scheduling-instrumentation.service.js +4 -2
- package/dist/Scheduling/services/scheduling-instrumentation.service.js.map +1 -1
- package/dist/SystemDiagnostics/index.d.ts +2 -0
- package/dist/SystemDiagnostics/index.d.ts.map +1 -0
- package/dist/SystemDiagnostics/index.js +3 -0
- package/dist/SystemDiagnostics/index.js.map +1 -0
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts +497 -0
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -0
- package/dist/SystemDiagnostics/system-diagnostics.component.js +6063 -0
- package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -0
- package/dist/Testing/testing-dashboard.component.d.ts +2 -0
- package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
- package/dist/Testing/testing-dashboard.component.js +5 -2
- package/dist/Testing/testing-dashboard.component.js.map +1 -1
- package/dist/module.d.ts +103 -94
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +94 -29
- package/dist/module.js.map +1 -1
- package/dist/public-api.d.ts +3 -1
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +21 -1
- package/dist/public-api.js.map +1 -1
- package/package.json +28 -25
- package/dist/AI/components/models/model-management-v2.component.d.ts.map +0 -1
- package/dist/AI/components/models/model-management-v2.component.js +0 -981
- package/dist/AI/components/models/model-management-v2.component.js.map +0 -1
- package/dist/AI/components/prompts/prompt-management-v2.component.d.ts.map +0 -1
- package/dist/AI/components/prompts/prompt-management-v2.component.js +0 -811
- package/dist/AI/components/prompts/prompt-management-v2.component.js.map +0 -1
- package/dist/EntityAdmin/components/entity-details.component.d.ts +0 -50
- package/dist/EntityAdmin/components/entity-details.component.d.ts.map +0 -1
- package/dist/EntityAdmin/components/entity-details.component.js +0 -680
- package/dist/EntityAdmin/components/entity-details.component.js.map +0 -1
- package/dist/EntityAdmin/components/entity-filter-panel.component.d.ts +0 -31
- package/dist/EntityAdmin/components/entity-filter-panel.component.d.ts.map +0 -1
- package/dist/EntityAdmin/components/entity-filter-panel.component.js +0 -160
- package/dist/EntityAdmin/components/entity-filter-panel.component.js.map +0 -1
- package/dist/EntityAdmin/components/erd-composite.component.d.ts +0 -73
- package/dist/EntityAdmin/components/erd-composite.component.d.ts.map +0 -1
- package/dist/EntityAdmin/components/erd-composite.component.js +0 -271
- package/dist/EntityAdmin/components/erd-composite.component.js.map +0 -1
- package/dist/EntityAdmin/components/erd-diagram.component.d.ts +0 -47
- package/dist/EntityAdmin/components/erd-diagram.component.d.ts.map +0 -1
- package/dist/EntityAdmin/components/erd-diagram.component.js +0 -618
- 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
|
|
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 "@
|
|
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",
|
|
23
|
-
i0.ɵɵelement(1, "mj-loading",
|
|
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",
|
|
30
|
+
i0.ɵɵelementStart(0, "p", 28);
|
|
28
31
|
i0.ɵɵtext(1);
|
|
29
32
|
i0.ɵɵelementEnd();
|
|
30
33
|
} if (rf & 2) {
|
|
31
|
-
const
|
|
34
|
+
const app_r3 = i0.ɵɵnextContext().$implicit;
|
|
32
35
|
i0.ɵɵadvance();
|
|
33
|
-
i0.ɵɵtextInterpolate(
|
|
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",
|
|
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
|
|
45
|
+
const item_r5 = ctx.$implicit;
|
|
43
46
|
i0.ɵɵadvance();
|
|
44
|
-
i0.ɵɵclassMap(
|
|
47
|
+
i0.ɵɵclassMap(item_r5.Icon);
|
|
45
48
|
i0.ɵɵadvance(2);
|
|
46
|
-
i0.ɵɵtextInterpolate(
|
|
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",
|
|
52
|
+
i0.ɵɵelementStart(0, "span", 33);
|
|
50
53
|
i0.ɵɵtext(1);
|
|
51
54
|
i0.ɵɵelementEnd();
|
|
52
55
|
} if (rf & 2) {
|
|
53
|
-
const
|
|
54
|
-
const
|
|
56
|
+
const app_r3 = i0.ɵɵnextContext(2).$implicit;
|
|
57
|
+
const ctx_r3 = i0.ɵɵnextContext(2);
|
|
55
58
|
i0.ɵɵadvance();
|
|
56
|
-
i0.ɵɵtextInterpolate1(" +",
|
|
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",
|
|
60
|
-
i0.ɵɵtemplate(1, HomeDashboardComponent_div_9_div_5_div_8_div_1_Template, 4, 3, "div",
|
|
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
|
|
64
|
-
const
|
|
66
|
+
const app_r3 = i0.ɵɵnextContext().$implicit;
|
|
67
|
+
const ctx_r3 = i0.ɵɵnextContext(2);
|
|
65
68
|
i0.ɵɵadvance();
|
|
66
|
-
i0.ɵɵproperty("ngForOf",
|
|
69
|
+
i0.ɵɵproperty("ngForOf", ctx_r3.getNavItemsPreview(app_r3));
|
|
67
70
|
i0.ɵɵadvance();
|
|
68
|
-
i0.ɵɵproperty("ngIf",
|
|
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
|
|
72
|
-
i0.ɵɵelementStart(0, "div",
|
|
73
|
-
i0.ɵɵlistener("click", function HomeDashboardComponent_div_9_div_5_Template_div_click_0_listener() { const
|
|
74
|
-
i0.ɵɵelementStart(1, "div",
|
|
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",
|
|
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",
|
|
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",
|
|
83
|
-
i0.ɵɵelement(10, "i",
|
|
85
|
+
i0.ɵɵelementStart(9, "div", 26);
|
|
86
|
+
i0.ɵɵelement(10, "i", 27);
|
|
84
87
|
i0.ɵɵelementEnd()();
|
|
85
88
|
} if (rf & 2) {
|
|
86
|
-
const
|
|
87
|
-
const
|
|
88
|
-
i0.ɵɵstyleProp("--app-color",
|
|
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(
|
|
93
|
+
i0.ɵɵclassMap(app_r3.Icon || "fa-solid fa-cube");
|
|
91
94
|
i0.ɵɵadvance(3);
|
|
92
|
-
i0.ɵɵtextInterpolate(
|
|
95
|
+
i0.ɵɵtextInterpolate(app_r3.Name);
|
|
93
96
|
i0.ɵɵadvance();
|
|
94
|
-
i0.ɵɵproperty("ngIf",
|
|
97
|
+
i0.ɵɵproperty("ngIf", app_r3.Description);
|
|
95
98
|
i0.ɵɵadvance();
|
|
96
|
-
i0.ɵɵproperty("ngIf",
|
|
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.ɵɵ
|
|
100
|
-
i0.ɵɵ
|
|
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.
|
|
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",
|
|
111
|
-
i0.ɵɵelement(2, "i",
|
|
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",
|
|
115
|
-
i0.ɵɵtemplate(5, HomeDashboardComponent_div_9_div_5_Template, 11, 7, "div",
|
|
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,
|
|
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
|
|
129
|
+
const ctx_r3 = i0.ɵɵnextContext();
|
|
121
130
|
i0.ɵɵadvance(5);
|
|
122
|
-
i0.ɵɵproperty("ngForOf",
|
|
131
|
+
i0.ɵɵproperty("ngForOf", ctx_r3.apps);
|
|
123
132
|
i0.ɵɵadvance();
|
|
124
|
-
i0.ɵɵproperty("ngIf",
|
|
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
|
|
128
|
-
i0.ɵɵelementStart(0, "div",
|
|
129
|
-
i0.ɵɵlistener("click", function HomeDashboardComponent_div_10_div_8_div_7_Template_div_click_0_listener() { const
|
|
130
|
-
i0.ɵɵelementStart(1, "div",
|
|
131
|
-
i0.ɵɵelement(2, "i",
|
|
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",
|
|
142
|
+
i0.ɵɵelementStart(3, "div", 57)(4, "span", 58);
|
|
134
143
|
i0.ɵɵtext(5);
|
|
135
144
|
i0.ɵɵelementEnd();
|
|
136
|
-
i0.ɵɵelementStart(6, "span",
|
|
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
|
|
150
|
+
const notification_r9 = ctx.$implicit;
|
|
142
151
|
i0.ɵɵadvance(5);
|
|
143
|
-
i0.ɵɵtextInterpolate(
|
|
152
|
+
i0.ɵɵtextInterpolate(notification_r9.Title);
|
|
144
153
|
i0.ɵɵadvance(2);
|
|
145
|
-
i0.ɵɵtextInterpolate2("", i0.ɵɵpipeBind3(8, 3,
|
|
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",
|
|
149
|
-
i0.ɵɵelement(2, "i",
|
|
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",
|
|
160
|
+
i0.ɵɵelementStart(4, "span", 52);
|
|
152
161
|
i0.ɵɵtext(5);
|
|
153
162
|
i0.ɵɵelementEnd()();
|
|
154
|
-
i0.ɵɵelementStart(6, "div",
|
|
155
|
-
i0.ɵɵtemplate(7, HomeDashboardComponent_div_10_div_8_div_7_Template, 9, 7, "div",
|
|
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
|
|
167
|
+
const ctx_r3 = i0.ɵɵnextContext(2);
|
|
159
168
|
i0.ɵɵadvance(5);
|
|
160
|
-
i0.ɵɵtextInterpolate(
|
|
169
|
+
i0.ɵɵtextInterpolate(ctx_r3.unreadNotifications.length);
|
|
161
170
|
i0.ɵɵadvance(2);
|
|
162
|
-
i0.ɵɵproperty("ngForOf",
|
|
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
|
|
166
|
-
i0.ɵɵelementStart(0, "div",
|
|
167
|
-
i0.ɵɵlistener("click", function HomeDashboardComponent_div_10_div_9_div_4_div_1_Template_div_click_0_listener() { const
|
|
168
|
-
i0.ɵɵelementStart(1, "div",
|
|
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",
|
|
180
|
+
i0.ɵɵelementStart(3, "div", 57)(4, "span", 58);
|
|
172
181
|
i0.ɵɵtext(5);
|
|
173
182
|
i0.ɵɵelementEnd();
|
|
174
|
-
i0.ɵɵelementStart(6, "span",
|
|
183
|
+
i0.ɵɵelementStart(6, "span", 59);
|
|
175
184
|
i0.ɵɵtext(7);
|
|
176
185
|
i0.ɵɵelementEnd()()();
|
|
177
186
|
} if (rf & 2) {
|
|
178
|
-
const
|
|
179
|
-
const
|
|
187
|
+
const favorite_r11 = ctx.$implicit;
|
|
188
|
+
const ctx_r3 = i0.ɵɵnextContext(4);
|
|
180
189
|
i0.ɵɵadvance(2);
|
|
181
|
-
i0.ɵɵclassMap(
|
|
190
|
+
i0.ɵɵclassMap(ctx_r3.getFavoriteIcon(favorite_r11));
|
|
182
191
|
i0.ɵɵadvance(3);
|
|
183
|
-
i0.ɵɵtextInterpolate(
|
|
192
|
+
i0.ɵɵtextInterpolate(favorite_r11.RecordID);
|
|
184
193
|
i0.ɵɵadvance(2);
|
|
185
|
-
i0.ɵɵtextInterpolate(
|
|
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",
|
|
189
|
-
i0.ɵɵtemplate(1, HomeDashboardComponent_div_10_div_9_div_4_div_1_Template, 8, 4, "div",
|
|
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
|
|
201
|
+
const ctx_r3 = i0.ɵɵnextContext(3);
|
|
193
202
|
i0.ɵɵadvance();
|
|
194
|
-
i0.ɵɵproperty("ngForOf",
|
|
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",
|
|
198
|
-
i0.ɵɵelement(1, "i",
|
|
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",
|
|
205
|
-
i0.ɵɵelement(2, "i",
|
|
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",
|
|
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
|
|
220
|
+
const ctx_r3 = i0.ɵɵnextContext(2);
|
|
212
221
|
i0.ɵɵadvance(4);
|
|
213
|
-
i0.ɵɵproperty("ngIf", !
|
|
222
|
+
i0.ɵɵproperty("ngIf", !ctx_r3.favoritesLoading);
|
|
214
223
|
i0.ɵɵadvance();
|
|
215
|
-
i0.ɵɵproperty("ngIf",
|
|
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
|
|
219
|
-
i0.ɵɵelementStart(0, "div",
|
|
220
|
-
i0.ɵɵlistener("click", function HomeDashboardComponent_div_10_div_10_div_4_div_1_Template_div_click_0_listener() { const
|
|
221
|
-
i0.ɵɵelementStart(1, "div",
|
|
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",
|
|
233
|
+
i0.ɵɵelementStart(3, "div", 57)(4, "span", 58);
|
|
225
234
|
i0.ɵɵtext(5);
|
|
226
235
|
i0.ɵɵelementEnd();
|
|
227
|
-
i0.ɵɵelementStart(6, "span",
|
|
236
|
+
i0.ɵɵelementStart(6, "span", 59);
|
|
228
237
|
i0.ɵɵtext(7);
|
|
229
238
|
i0.ɵɵelementEnd()()();
|
|
230
239
|
} if (rf & 2) {
|
|
231
|
-
const
|
|
232
|
-
const
|
|
240
|
+
const item_r13 = ctx.$implicit;
|
|
241
|
+
const ctx_r3 = i0.ɵɵnextContext(4);
|
|
233
242
|
i0.ɵɵadvance(2);
|
|
234
|
-
i0.ɵɵclassMap(
|
|
243
|
+
i0.ɵɵclassMap(ctx_r3.getResourceIcon(item_r13.resourceType));
|
|
235
244
|
i0.ɵɵadvance(3);
|
|
236
|
-
i0.ɵɵtextInterpolate(
|
|
245
|
+
i0.ɵɵtextInterpolate(item_r13.recordName || item_r13.recordId);
|
|
237
246
|
i0.ɵɵadvance(2);
|
|
238
|
-
i0.ɵɵtextInterpolate2("",
|
|
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",
|
|
242
|
-
i0.ɵɵtemplate(1, HomeDashboardComponent_div_10_div_10_div_4_div_1_Template, 8, 5, "div",
|
|
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
|
|
254
|
+
const ctx_r3 = i0.ɵɵnextContext(3);
|
|
246
255
|
i0.ɵɵadvance();
|
|
247
|
-
i0.ɵɵproperty("ngForOf",
|
|
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",
|
|
251
|
-
i0.ɵɵelement(1, "i",
|
|
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",
|
|
258
|
-
i0.ɵɵelement(2, "i",
|
|
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",
|
|
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
|
|
273
|
+
const ctx_r3 = i0.ɵɵnextContext(2);
|
|
265
274
|
i0.ɵɵadvance(4);
|
|
266
|
-
i0.ɵɵproperty("ngIf", !
|
|
275
|
+
i0.ɵɵproperty("ngIf", !ctx_r3.recentsLoading);
|
|
267
276
|
i0.ɵɵadvance();
|
|
268
|
-
i0.ɵɵproperty("ngIf",
|
|
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",
|
|
272
|
-
i0.ɵɵelement(1, "i",
|
|
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
|
|
279
|
-
i0.ɵɵelementStart(0, "div",
|
|
280
|
-
i0.ɵɵelement(3, "i",
|
|
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",
|
|
284
|
-
i0.ɵɵlistener("click", function HomeDashboardComponent_div_10_Template_button_click_5_listener() { i0.ɵɵrestoreView(
|
|
285
|
-
i0.ɵɵelement(6, "i",
|
|
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",
|
|
288
|
-
i0.ɵɵtemplate(8, HomeDashboardComponent_div_10_div_8_Template, 8, 2, "div",
|
|
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
|
|
300
|
+
const ctx_r3 = i0.ɵɵnextContext();
|
|
292
301
|
i0.ɵɵadvance(8);
|
|
293
|
-
i0.ɵɵproperty("ngIf",
|
|
302
|
+
i0.ɵɵproperty("ngIf", ctx_r3.unreadNotifications.length > 0);
|
|
294
303
|
i0.ɵɵadvance();
|
|
295
|
-
i0.ɵɵproperty("ngIf",
|
|
304
|
+
i0.ɵɵproperty("ngIf", ctx_r3.favorites.length > 0 || ctx_r3.favoritesLoading);
|
|
296
305
|
i0.ɵɵadvance();
|
|
297
|
-
i0.ɵɵproperty("ngIf",
|
|
306
|
+
i0.ɵɵproperty("ngIf", ctx_r3.recentItems.length > 0 || ctx_r3.recentsLoading);
|
|
298
307
|
i0.ɵɵadvance();
|
|
299
|
-
i0.ɵɵproperty("ngIf", !
|
|
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",
|
|
311
|
+
i0.ɵɵelementStart(0, "span", 76);
|
|
303
312
|
i0.ɵɵtext(1);
|
|
304
313
|
i0.ɵɵelementEnd();
|
|
305
314
|
} if (rf & 2) {
|
|
306
|
-
const
|
|
315
|
+
const ctx_r3 = i0.ɵɵnextContext(2);
|
|
307
316
|
i0.ɵɵadvance();
|
|
308
|
-
i0.ɵɵtextInterpolate(
|
|
317
|
+
i0.ɵɵtextInterpolate(ctx_r3.unreadNotifications.length);
|
|
309
318
|
} }
|
|
310
319
|
function HomeDashboardComponent_button_11_Template(rf, ctx) { if (rf & 1) {
|
|
311
|
-
const
|
|
312
|
-
i0.ɵɵelementStart(0, "button",
|
|
313
|
-
i0.ɵɵlistener("click", function HomeDashboardComponent_button_11_Template_button_click_0_listener() { i0.ɵɵrestoreView(
|
|
314
|
-
i0.ɵɵelement(1, "i",
|
|
315
|
-
i0.ɵɵtemplate(2, HomeDashboardComponent_button_11_span_2_Template, 2, 1, "span",
|
|
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
|
|
327
|
+
const ctx_r3 = i0.ɵɵnextContext();
|
|
319
328
|
i0.ɵɵadvance(2);
|
|
320
|
-
i0.ɵɵproperty("ngIf",
|
|
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
|
|
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
|
-
|
|
405
|
-
|
|
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
|
-
//
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
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
|
|
514
|
+
* Load user favorites from UserInfoEngine (cached)
|
|
505
515
|
*/
|
|
506
516
|
async loadFavorites() {
|
|
507
517
|
try {
|
|
508
518
|
this.favoritesLoading = true;
|
|
509
|
-
|
|
510
|
-
|
|
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:
|
|
654
|
-
|
|
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",
|
|
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",
|
|
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']
|