@memberjunction/ng-dashboards 5.35.0 → 5.36.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.js +3 -3
- package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
- package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts +22 -1
- package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/ai-analytics-resource.component.js +157 -137
- package/dist/AI/components/analytics/ai-analytics-resource.component.js.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +28 -0
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +2075 -2068
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
- package/dist/AI/components/models/model-management.component.js +4 -4
- package/dist/AI/components/models/model-management.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.js +3 -3
- package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.d.ts +15 -0
- package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.js +1411 -1424
- package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.d.ts +12 -8
- package/dist/APIKeys/api-keys-resource.component.d.ts.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.js +329 -371
- package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +137 -142
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.js +111 -116
- package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
- package/dist/Admin/admin-data-schema.component.js +13 -65
- package/dist/Admin/admin-data-schema.component.js.map +1 -1
- package/dist/Admin/admin-dev-tools-resource.component.js +13 -65
- package/dist/Admin/admin-dev-tools-resource.component.js.map +1 -1
- package/dist/Admin/admin-identity-access.component.js +13 -65
- package/dist/Admin/admin-identity-access.component.js.map +1 -1
- package/dist/Admin/admin-monitoring.component.js +13 -65
- package/dist/Admin/admin-monitoring.component.js.map +1 -1
- package/dist/Admin/base-admin-container.component.d.ts +9 -7
- package/dist/Admin/base-admin-container.component.d.ts.map +1 -1
- package/dist/Admin/base-admin-container.component.js +26 -17
- package/dist/Admin/base-admin-container.component.js.map +1 -1
- package/dist/ApplicationRoles/application-roles-resource.component.js +74 -67
- package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
- package/dist/Communication/communication-new-message-resource.component.d.ts +93 -0
- package/dist/Communication/communication-new-message-resource.component.d.ts.map +1 -0
- package/dist/Communication/communication-new-message-resource.component.js +661 -0
- package/dist/Communication/communication-new-message-resource.component.js.map +1 -0
- package/dist/Credentials/components/credentials-categories-resource.component.js +152 -159
- package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.js +151 -155
- package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +20 -21
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js.map +1 -1
- package/dist/DatabaseDesigner/components/entity-list.component.d.ts +2 -0
- package/dist/DatabaseDesigner/components/entity-list.component.d.ts.map +1 -1
- package/dist/DatabaseDesigner/components/entity-list.component.js +131 -125
- package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js +7 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -1
- package/dist/DevTools/app-state-inspector.component.d.ts +5 -0
- package/dist/DevTools/app-state-inspector.component.d.ts.map +1 -1
- package/dist/DevTools/app-state-inspector.component.js +46 -72
- package/dist/DevTools/app-state-inspector.component.js.map +1 -1
- package/dist/DevTools/class-registry.component.js +88 -100
- package/dist/DevTools/class-registry.component.js.map +1 -1
- package/dist/DevTools/event-monitor.component.js +158 -168
- package/dist/DevTools/event-monitor.component.js.map +1 -1
- package/dist/DevTools/graphql-console.component.js +257 -264
- package/dist/DevTools/graphql-console.component.js.map +1 -1
- package/dist/DevTools/layout-inspector.component.d.ts +5 -0
- package/dist/DevTools/layout-inspector.component.d.ts.map +1 -1
- package/dist/DevTools/layout-inspector.component.js +46 -64
- package/dist/DevTools/layout-inspector.component.js.map +1 -1
- package/dist/DevTools/lazy-module-status.component.js +75 -84
- package/dist/DevTools/lazy-module-status.component.js.map +1 -1
- package/dist/DevTools/settings-explorer.component.js +76 -85
- package/dist/DevTools/settings-explorer.component.js.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts +2 -0
- package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.js +7 -3
- package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
- package/dist/Integration/components/activity/activity.component.js +97 -99
- package/dist/Integration/components/activity/activity.component.js.map +1 -1
- package/dist/Integration/components/connections/connections.component.js +842 -855
- package/dist/Integration/components/connections/connections.component.js.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.js +502 -517
- package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
- package/dist/Integration/components/schedules/schedules.component.js +78 -89
- package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts +5 -0
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +1120 -1128
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts +11 -0
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +606 -661
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts +102 -0
- package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +1179 -504
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.d.ts +133 -3
- package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.js +1527 -327
- package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-shared-with-me-resource.component.d.ts +29 -0
- package/dist/Lists/components/lists-shared-with-me-resource.component.d.ts.map +1 -0
- package/dist/Lists/components/lists-shared-with-me-resource.component.js +77 -0
- package/dist/Lists/components/lists-shared-with-me-resource.component.js.map +1 -0
- package/dist/Lists/components/venn-diagram/venn-diagram.component.d.ts +6 -0
- package/dist/Lists/components/venn-diagram/venn-diagram.component.d.ts.map +1 -1
- package/dist/Lists/components/venn-diagram/venn-diagram.component.js +35 -7
- package/dist/Lists/components/venn-diagram/venn-diagram.component.js.map +1 -1
- package/dist/Lists/index.d.ts +1 -0
- package/dist/Lists/index.d.ts.map +1 -1
- package/dist/Lists/index.js +1 -0
- package/dist/Lists/index.js.map +1 -1
- package/dist/Lists/services/list-set-operations.service.d.ts +93 -2
- package/dist/Lists/services/list-set-operations.service.d.ts.map +1 -1
- package/dist/Lists/services/list-set-operations.service.js +236 -10
- package/dist/Lists/services/list-set-operations.service.js.map +1 -1
- package/dist/MCP/mcp-dashboard.component.js +19 -19
- package/dist/MCP/mcp-dashboard.component.js.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.js +58 -60
- package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts +13 -3
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.js +1007 -1252
- package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer.component.d.ts +31 -6
- package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer.component.js +543 -629
- package/dist/Testing/components/testing-explorer.component.js.map +1 -1
- package/dist/Testing/testing-dashboard.component.js +50 -49
- package/dist/Testing/testing-dashboard.component.js.map +1 -1
- package/dist/ai-dashboards.module.d.ts +1 -1
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +16 -1
- package/dist/ai-dashboards.module.js.map +1 -1
- package/dist/communication-dashboards.module.d.ts +9 -7
- package/dist/communication-dashboards.module.d.ts.map +1 -1
- package/dist/communication-dashboards.module.js +13 -4
- package/dist/communication-dashboards.module.js.map +1 -1
- package/dist/core-dashboards.module.d.ts +1 -1
- package/dist/core-dashboards.module.d.ts.map +1 -1
- package/dist/core-dashboards.module.js +16 -1
- package/dist/core-dashboards.module.js.map +1 -1
- package/dist/lists-dashboards.module.d.ts +10 -9
- package/dist/lists-dashboards.module.d.ts.map +1 -1
- package/dist/lists-dashboards.module.js +13 -2
- package/dist/lists-dashboards.module.js.map +1 -1
- package/dist/public-api.d.ts +1 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +1 -0
- package/dist/public-api.js.map +1 -1
- package/dist/testing-dashboards.module.d.ts +1 -1
- package/dist/testing-dashboards.module.d.ts.map +1 -1
- package/dist/testing-dashboards.module.js +13 -1
- package/dist/testing-dashboards.module.js.map +1 -1
- package/package.json +53 -52
|
@@ -9,34 +9,35 @@ import { BaseResourceComponent } from '@memberjunction/ng-shared';
|
|
|
9
9
|
import { RegisterClass } from '@memberjunction/global';
|
|
10
10
|
import { DevToolsPrefs } from './dev-tools-prefs';
|
|
11
11
|
import * as i0 from "@angular/core";
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
i0.ɵɵ
|
|
12
|
+
import * as i1 from "@memberjunction/ng-ui-components";
|
|
13
|
+
function LazyModuleStatusComponent_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
14
|
+
i0.ɵɵelementStart(0, "div", 4);
|
|
15
|
+
i0.ɵɵelement(1, "i", 5);
|
|
15
16
|
i0.ɵɵelementStart(2, "div")(3, "strong");
|
|
16
17
|
i0.ɵɵtext(4, "Lazy registry not available.");
|
|
17
18
|
i0.ɵɵelementEnd();
|
|
18
19
|
i0.ɵɵtext(5, " The shell hasn't published the LazyModuleRegistry to globalThis yet, or you're viewing this in an environment that doesn't use it. ");
|
|
19
20
|
i0.ɵɵelementEnd()();
|
|
20
21
|
} }
|
|
21
|
-
function
|
|
22
|
-
i0.ɵɵelement(0, "i",
|
|
22
|
+
function LazyModuleStatusComponent_Conditional_5_For_45_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
23
|
+
i0.ɵɵelement(0, "i", 30);
|
|
23
24
|
} }
|
|
24
|
-
function
|
|
25
|
-
i0.ɵɵelement(0, "i",
|
|
25
|
+
function LazyModuleStatusComponent_Conditional_5_For_45_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
26
|
+
i0.ɵɵelement(0, "i", 21);
|
|
26
27
|
} }
|
|
27
|
-
function
|
|
28
|
-
i0.ɵɵelement(0, "i",
|
|
28
|
+
function LazyModuleStatusComponent_Conditional_5_For_45_Conditional_10_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
29
|
+
i0.ɵɵelement(0, "i", 38);
|
|
29
30
|
i0.ɵɵtext(1, " Loading ");
|
|
30
31
|
} }
|
|
31
|
-
function
|
|
32
|
-
i0.ɵɵelement(0, "i",
|
|
32
|
+
function LazyModuleStatusComponent_Conditional_5_For_45_Conditional_10_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
33
|
+
i0.ɵɵelement(0, "i", 39);
|
|
33
34
|
i0.ɵɵtext(1, " Load ");
|
|
34
35
|
} }
|
|
35
|
-
function
|
|
36
|
+
function LazyModuleStatusComponent_Conditional_5_For_45_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
36
37
|
const _r3 = i0.ɵɵgetCurrentView();
|
|
37
|
-
i0.ɵɵelementStart(0, "button",
|
|
38
|
-
i0.ɵɵlistener("click", function
|
|
39
|
-
i0.ɵɵconditionalCreate(1,
|
|
38
|
+
i0.ɵɵelementStart(0, "button", 37);
|
|
39
|
+
i0.ɵɵlistener("click", function LazyModuleStatusComponent_Conditional_5_For_45_Conditional_10_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r3); const chunk_r4 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnForceLoad(chunk_r4)); });
|
|
40
|
+
i0.ɵɵconditionalCreate(1, LazyModuleStatusComponent_Conditional_5_For_45_Conditional_10_Conditional_1_Template, 2, 0)(2, LazyModuleStatusComponent_Conditional_5_For_45_Conditional_10_Conditional_2_Template, 2, 0);
|
|
40
41
|
i0.ɵɵelementEnd();
|
|
41
42
|
} if (rf & 2) {
|
|
42
43
|
const chunk_r4 = i0.ɵɵnextContext().$implicit;
|
|
@@ -44,8 +45,8 @@ function LazyModuleStatusComponent_Conditional_15_For_45_Conditional_10_Template
|
|
|
44
45
|
i0.ɵɵadvance();
|
|
45
46
|
i0.ɵɵconditional(chunk_r4.loading ? 1 : 2);
|
|
46
47
|
} }
|
|
47
|
-
function
|
|
48
|
-
i0.ɵɵelementStart(0, "span",
|
|
48
|
+
function LazyModuleStatusComponent_Conditional_5_For_45_For_13_Template(rf, ctx) { if (rf & 1) {
|
|
49
|
+
i0.ɵɵelementStart(0, "span", 35);
|
|
49
50
|
i0.ɵɵtext(1);
|
|
50
51
|
i0.ɵɵelementEnd();
|
|
51
52
|
} if (rf & 2) {
|
|
@@ -53,45 +54,45 @@ function LazyModuleStatusComponent_Conditional_15_For_45_For_13_Template(rf, ctx
|
|
|
53
54
|
i0.ɵɵadvance();
|
|
54
55
|
i0.ɵɵtextInterpolate(k_r5);
|
|
55
56
|
} }
|
|
56
|
-
function
|
|
57
|
-
i0.ɵɵelement(0, "i",
|
|
57
|
+
function LazyModuleStatusComponent_Conditional_5_For_45_Conditional_14_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
58
|
+
i0.ɵɵelement(0, "i", 41);
|
|
58
59
|
i0.ɵɵtext(1, " Show less ");
|
|
59
60
|
} }
|
|
60
|
-
function
|
|
61
|
-
i0.ɵɵelement(0, "i",
|
|
61
|
+
function LazyModuleStatusComponent_Conditional_5_For_45_Conditional_14_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
62
|
+
i0.ɵɵelement(0, "i", 42);
|
|
62
63
|
i0.ɵɵtext(1);
|
|
63
64
|
} if (rf & 2) {
|
|
64
65
|
const chunk_r4 = i0.ɵɵnextContext(2).$implicit;
|
|
65
66
|
i0.ɵɵadvance();
|
|
66
67
|
i0.ɵɵtextInterpolate1(" Show all ", chunk_r4.keys.length, " entries ");
|
|
67
68
|
} }
|
|
68
|
-
function
|
|
69
|
+
function LazyModuleStatusComponent_Conditional_5_For_45_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
69
70
|
const _r6 = i0.ɵɵgetCurrentView();
|
|
70
|
-
i0.ɵɵelementStart(0, "button",
|
|
71
|
-
i0.ɵɵlistener("click", function
|
|
72
|
-
i0.ɵɵconditionalCreate(1,
|
|
71
|
+
i0.ɵɵelementStart(0, "button", 40);
|
|
72
|
+
i0.ɵɵlistener("click", function LazyModuleStatusComponent_Conditional_5_For_45_Conditional_14_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r6); const chunk_r4 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.ToggleChunkExpand(chunk_r4)); });
|
|
73
|
+
i0.ɵɵconditionalCreate(1, LazyModuleStatusComponent_Conditional_5_For_45_Conditional_14_Conditional_1_Template, 2, 0)(2, LazyModuleStatusComponent_Conditional_5_For_45_Conditional_14_Conditional_2_Template, 2, 1);
|
|
73
74
|
i0.ɵɵelementEnd();
|
|
74
75
|
} if (rf & 2) {
|
|
75
76
|
const chunk_r4 = i0.ɵɵnextContext().$implicit;
|
|
76
77
|
i0.ɵɵadvance();
|
|
77
78
|
i0.ɵɵconditional(chunk_r4.expanded ? 1 : 2);
|
|
78
79
|
} }
|
|
79
|
-
function
|
|
80
|
-
i0.ɵɵelementStart(0, "div",
|
|
81
|
-
i0.ɵɵconditionalCreate(3,
|
|
80
|
+
function LazyModuleStatusComponent_Conditional_5_For_45_Template(rf, ctx) { if (rf & 1) {
|
|
81
|
+
i0.ɵɵelementStart(0, "div", 27)(1, "div", 28)(2, "div", 29);
|
|
82
|
+
i0.ɵɵconditionalCreate(3, LazyModuleStatusComponent_Conditional_5_For_45_Conditional_3_Template, 1, 0, "i", 30)(4, LazyModuleStatusComponent_Conditional_5_For_45_Conditional_4_Template, 1, 0, "i", 21);
|
|
82
83
|
i0.ɵɵelementEnd();
|
|
83
|
-
i0.ɵɵelementStart(5, "div",
|
|
84
|
+
i0.ɵɵelementStart(5, "div", 31)(6, "code");
|
|
84
85
|
i0.ɵɵtext(7);
|
|
85
86
|
i0.ɵɵelementEnd();
|
|
86
|
-
i0.ɵɵelementStart(8, "span",
|
|
87
|
+
i0.ɵɵelementStart(8, "span", 32);
|
|
87
88
|
i0.ɵɵtext(9);
|
|
88
89
|
i0.ɵɵelementEnd()();
|
|
89
|
-
i0.ɵɵconditionalCreate(10,
|
|
90
|
+
i0.ɵɵconditionalCreate(10, LazyModuleStatusComponent_Conditional_5_For_45_Conditional_10_Template, 3, 2, "button", 33);
|
|
90
91
|
i0.ɵɵelementEnd();
|
|
91
|
-
i0.ɵɵelementStart(11, "div",
|
|
92
|
-
i0.ɵɵrepeaterCreate(12,
|
|
92
|
+
i0.ɵɵelementStart(11, "div", 34);
|
|
93
|
+
i0.ɵɵrepeaterCreate(12, LazyModuleStatusComponent_Conditional_5_For_45_For_13_Template, 2, 1, "span", 35, i0.ɵɵrepeaterTrackByIdentity);
|
|
93
94
|
i0.ɵɵelementEnd();
|
|
94
|
-
i0.ɵɵconditionalCreate(14,
|
|
95
|
+
i0.ɵɵconditionalCreate(14, LazyModuleStatusComponent_Conditional_5_For_45_Conditional_14_Template, 3, 1, "button", 36);
|
|
95
96
|
i0.ɵɵelementEnd();
|
|
96
97
|
} if (rf & 2) {
|
|
97
98
|
const chunk_r4 = ctx.$implicit;
|
|
@@ -114,68 +115,68 @@ function LazyModuleStatusComponent_Conditional_15_For_45_Template(rf, ctx) { if
|
|
|
114
115
|
i0.ɵɵadvance(2);
|
|
115
116
|
i0.ɵɵconditional(ctx_r1.HiddenCount(chunk_r4) > 0 || chunk_r4.expanded ? 14 : -1);
|
|
116
117
|
} }
|
|
117
|
-
function
|
|
118
|
-
i0.ɵɵelementStart(0, "div",
|
|
119
|
-
i0.ɵɵelement(1, "i",
|
|
118
|
+
function LazyModuleStatusComponent_Conditional_5_Conditional_46_Template(rf, ctx) { if (rf & 1) {
|
|
119
|
+
i0.ɵɵelementStart(0, "div", 26);
|
|
120
|
+
i0.ɵɵelement(1, "i", 5);
|
|
120
121
|
i0.ɵɵtext(2, " No chunks match the current filter. ");
|
|
121
122
|
i0.ɵɵelementEnd();
|
|
122
123
|
} }
|
|
123
|
-
function
|
|
124
|
+
function LazyModuleStatusComponent_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
124
125
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
125
|
-
i0.ɵɵelementStart(0, "div",
|
|
126
|
-
i0.ɵɵelement(3, "div",
|
|
126
|
+
i0.ɵɵelementStart(0, "div", 6)(1, "div", 7)(2, "div", 8);
|
|
127
|
+
i0.ɵɵelement(3, "div", 9);
|
|
127
128
|
i0.ɵɵelementEnd();
|
|
128
|
-
i0.ɵɵelementStart(4, "div",
|
|
129
|
+
i0.ɵɵelementStart(4, "div", 10)(5, "span", 11);
|
|
129
130
|
i0.ɵɵtext(6);
|
|
130
131
|
i0.ɵɵelementEnd();
|
|
131
|
-
i0.ɵɵelementStart(7, "span",
|
|
132
|
+
i0.ɵɵelementStart(7, "span", 12);
|
|
132
133
|
i0.ɵɵtext(8);
|
|
133
134
|
i0.ɵɵelementEnd()()();
|
|
134
|
-
i0.ɵɵelementStart(9, "div",
|
|
135
|
+
i0.ɵɵelementStart(9, "div", 13)(10, "div", 14)(11, "div", 15);
|
|
135
136
|
i0.ɵɵtext(12);
|
|
136
137
|
i0.ɵɵelementEnd();
|
|
137
|
-
i0.ɵɵelementStart(13, "div",
|
|
138
|
+
i0.ɵɵelementStart(13, "div", 16);
|
|
138
139
|
i0.ɵɵtext(14, "Registered keys");
|
|
139
140
|
i0.ɵɵelementEnd()();
|
|
140
|
-
i0.ɵɵelementStart(15, "div",
|
|
141
|
+
i0.ɵɵelementStart(15, "div", 14)(16, "div", 15);
|
|
141
142
|
i0.ɵɵtext(17);
|
|
142
143
|
i0.ɵɵelementEnd();
|
|
143
|
-
i0.ɵɵelementStart(18, "div",
|
|
144
|
+
i0.ɵɵelementStart(18, "div", 16);
|
|
144
145
|
i0.ɵɵtext(19, "Loaded keys");
|
|
145
146
|
i0.ɵɵelementEnd()();
|
|
146
|
-
i0.ɵɵelementStart(20, "div",
|
|
147
|
+
i0.ɵɵelementStart(20, "div", 14)(21, "div", 15);
|
|
147
148
|
i0.ɵɵtext(22);
|
|
148
149
|
i0.ɵɵelementEnd();
|
|
149
|
-
i0.ɵɵelementStart(23, "div",
|
|
150
|
+
i0.ɵɵelementStart(23, "div", 16);
|
|
150
151
|
i0.ɵɵtext(24, "Total chunks");
|
|
151
152
|
i0.ɵɵelementEnd()()()();
|
|
152
|
-
i0.ɵɵelementStart(25, "div",
|
|
153
|
-
i0.ɵɵlistener("click", function
|
|
153
|
+
i0.ɵɵelementStart(25, "div", 17)(26, "button", 18);
|
|
154
|
+
i0.ɵɵlistener("click", function LazyModuleStatusComponent_Conditional_5_Template_button_click_26_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnFilterClick("all")); });
|
|
154
155
|
i0.ɵɵtext(27, " All ");
|
|
155
|
-
i0.ɵɵelementStart(28, "span",
|
|
156
|
+
i0.ɵɵelementStart(28, "span", 19);
|
|
156
157
|
i0.ɵɵtext(29);
|
|
157
158
|
i0.ɵɵelementEnd()();
|
|
158
|
-
i0.ɵɵelementStart(30, "button",
|
|
159
|
-
i0.ɵɵlistener("click", function
|
|
160
|
-
i0.ɵɵelement(31, "i",
|
|
159
|
+
i0.ɵɵelementStart(30, "button", 18);
|
|
160
|
+
i0.ɵɵlistener("click", function LazyModuleStatusComponent_Conditional_5_Template_button_click_30_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnFilterClick("loaded")); });
|
|
161
|
+
i0.ɵɵelement(31, "i", 20);
|
|
161
162
|
i0.ɵɵtext(32, " Loaded ");
|
|
162
|
-
i0.ɵɵelementStart(33, "span",
|
|
163
|
+
i0.ɵɵelementStart(33, "span", 19);
|
|
163
164
|
i0.ɵɵtext(34);
|
|
164
165
|
i0.ɵɵelementEnd()();
|
|
165
|
-
i0.ɵɵelementStart(35, "button",
|
|
166
|
-
i0.ɵɵlistener("click", function
|
|
167
|
-
i0.ɵɵelement(36, "i",
|
|
166
|
+
i0.ɵɵelementStart(35, "button", 18);
|
|
167
|
+
i0.ɵɵlistener("click", function LazyModuleStatusComponent_Conditional_5_Template_button_click_35_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnFilterClick("not-loaded")); });
|
|
168
|
+
i0.ɵɵelement(36, "i", 21);
|
|
168
169
|
i0.ɵɵtext(37, " Not loaded ");
|
|
169
|
-
i0.ɵɵelementStart(38, "span",
|
|
170
|
+
i0.ɵɵelementStart(38, "span", 19);
|
|
170
171
|
i0.ɵɵtext(39);
|
|
171
172
|
i0.ɵɵelementEnd()();
|
|
172
|
-
i0.ɵɵelement(40, "span",
|
|
173
|
-
i0.ɵɵelementStart(41, "span",
|
|
173
|
+
i0.ɵɵelement(40, "span", 22);
|
|
174
|
+
i0.ɵɵelementStart(41, "span", 23);
|
|
174
175
|
i0.ɵɵtext(42);
|
|
175
176
|
i0.ɵɵelementEnd()();
|
|
176
|
-
i0.ɵɵelementStart(43, "div",
|
|
177
|
-
i0.ɵɵrepeaterCreate(44,
|
|
178
|
-
i0.ɵɵconditionalCreate(46,
|
|
177
|
+
i0.ɵɵelementStart(43, "div", 24);
|
|
178
|
+
i0.ɵɵrepeaterCreate(44, LazyModuleStatusComponent_Conditional_5_For_45_Template, 15, 11, "div", 25, i0.ɵɵcomponentInstance().TrackByChunk, true);
|
|
179
|
+
i0.ɵɵconditionalCreate(46, LazyModuleStatusComponent_Conditional_5_Conditional_46_Template, 3, 0, "div", 26);
|
|
179
180
|
i0.ɵɵelementEnd();
|
|
180
181
|
} if (rf & 2) {
|
|
181
182
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
@@ -353,28 +354,18 @@ let LazyModuleStatusComponent = class LazyModuleStatusComponent extends BaseReso
|
|
|
353
354
|
return '(unknown chunk)';
|
|
354
355
|
}
|
|
355
356
|
static ɵfac = function LazyModuleStatusComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || LazyModuleStatusComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
|
|
356
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LazyModuleStatusComponent, selectors: [["mj-lazy-module-status"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls:
|
|
357
|
-
i0.ɵɵelementStart(0, "div", 0)(1, "
|
|
358
|
-
i0.ɵɵ
|
|
359
|
-
i0.ɵɵelementEnd();
|
|
360
|
-
i0.ɵɵelementStart(4, "div")(5, "h3", 4);
|
|
361
|
-
i0.ɵɵtext(6, "Lazy Loading");
|
|
362
|
-
i0.ɵɵelementEnd();
|
|
363
|
-
i0.ɵɵelementStart(7, "div", 5);
|
|
364
|
-
i0.ɵɵtext(8, "Code-split chunks: registered, loaded, and on-demand");
|
|
365
|
-
i0.ɵɵelementEnd()();
|
|
366
|
-
i0.ɵɵelement(9, "span", 6);
|
|
367
|
-
i0.ɵɵelementStart(10, "div", 7)(11, "button", 8);
|
|
368
|
-
i0.ɵɵlistener("click", function LazyModuleStatusComponent_Template_button_click_11_listener() { return ctx.refresh(); });
|
|
369
|
-
i0.ɵɵelement(12, "i", 9);
|
|
370
|
-
i0.ɵɵtext(13, " Refresh ");
|
|
357
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LazyModuleStatusComponent, selectors: [["mj-lazy-module-status"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 6, vars: 2, consts: [[1, "mj-inspector", "mj-inspector--solo"], ["Role", "region", "AriaLabel", "Lazy loading inspector", "Title", "Lazy Loading", "Subtitle", "Code-split chunks: registered, loaded, and on-demand"], ["actions", ""], [3, "Clicked", "Loading"], [1, "lz-unavailable"], [1, "fa-solid", "fa-circle-info"], [1, "lz-summary"], [1, "lz-progress"], [1, "lz-progress-bar"], [1, "lz-progress-fill"], [1, "lz-progress-meta"], [1, "lz-progress-pct"], [1, "lz-progress-label"], [1, "lz-summary-stats"], [1, "lz-summary-stat"], [1, "lz-summary-value"], [1, "lz-summary-label"], [1, "lz-filter-bar"], ["type", "button", 1, "lz-filter", 3, "click"], [1, "lz-filter-count"], [1, "fa-solid", "fa-check-circle"], [1, "fa-regular", "fa-circle"], [1, "lz-spacer"], [1, "lz-refreshed"], [1, "lz-grid"], [1, "lz-card", 3, "lz-card--loaded"], [1, "lz-empty"], [1, "lz-card"], [1, "lz-card-head"], [1, "lz-card-status"], [1, "fa-solid", "fa-circle-check"], [1, "lz-card-title"], [1, "lz-card-kcount"], ["type", "button", "title", "Force-load this chunk now", 1, "lz-load-btn", 3, "disabled"], [1, "lz-card-keys"], [1, "lz-key"], ["type", "button", 1, "lz-card-expand"], ["type", "button", "title", "Force-load this chunk now", 1, "lz-load-btn", 3, "click", "disabled"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-bolt"], ["type", "button", 1, "lz-card-expand", 3, "click"], [1, "fa-solid", "fa-chevron-up"], [1, "fa-solid", "fa-chevron-down"]], template: function LazyModuleStatusComponent_Template(rf, ctx) { if (rf & 1) {
|
|
358
|
+
i0.ɵɵelementStart(0, "div", 0)(1, "mj-page-header-interior", 1)(2, "div", 2)(3, "mj-refresh-button", 3);
|
|
359
|
+
i0.ɵɵlistener("Clicked", function LazyModuleStatusComponent_Template_mj_refresh_button_Clicked_3_listener() { return ctx.refresh(); });
|
|
371
360
|
i0.ɵɵelementEnd()()();
|
|
372
|
-
i0.ɵɵconditionalCreate(
|
|
361
|
+
i0.ɵɵconditionalCreate(4, LazyModuleStatusComponent_Conditional_4_Template, 6, 0, "div", 4)(5, LazyModuleStatusComponent_Conditional_5_Template, 47, 19);
|
|
373
362
|
i0.ɵɵelementEnd();
|
|
374
363
|
} if (rf & 2) {
|
|
375
|
-
i0.ɵɵadvance(
|
|
376
|
-
i0.ɵɵ
|
|
377
|
-
} }, styles: ["[_nghost-%COMP%] { display: block; height: 100%; }\n\n.mj-inspector[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n background: var(--mj-bg-page);\n color: var(--mj-text-primary);\n font-family: inherit;\n}\n\n\n\n.mj-inspector__header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 14px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n flex-shrink: 0;\n}\n.mj-inspector__header-icon[_ngcontent-%COMP%] {\n width: 36px; height: 36px;\n border-radius: 9px;\n background: linear-gradient(135deg, #264FAF 0%, #0076b6 100%);\n color: white;\n display: flex; align-items: center; justify-content: center;\n font-size: 15px;\n flex-shrink: 0;\n}\n.mj-inspector__header-title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n letter-spacing: -0.2px;\n}\n.mj-inspector__header-sub[_ngcontent-%COMP%] {\n font-size: 11.5px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n.mj-inspector__header-spacer[_ngcontent-%COMP%] { flex: 1; }\n.mj-inspector__header-actions[_ngcontent-%COMP%] {\n display: flex; gap: 6px;\n}\n.mj-inspector__btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 7px 12px;\n border-radius: 7px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n font-family: inherit;\n transition: all 0.15s;\n}\n.mj-inspector__btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n.mj-inspector__btn--success[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n border-color: color-mix(in srgb, var(--mj-status-success) 30%, var(--mj-border-default));\n}\n\n\n\n.mj-inspector__body[_ngcontent-%COMP%] {\n display: flex;\n flex: 1;\n min-height: 0;\n}\n.mj-inspector__sidebar[_ngcontent-%COMP%] {\n width: 220px;\n border-right: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n overflow-y: auto;\n flex-shrink: 0;\n padding: 8px;\n}\n.mj-inspector__nav-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n padding: 10px 12px;\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.12s;\n margin-bottom: 2px;\n font-family: inherit;\n border: none;\n background: transparent;\n color: var(--mj-text-secondary);\n text-align: left;\n width: 100%;\n}\n.mj-inspector__nav-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n.mj-inspector__nav-item--active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n}\n.mj-inspector__nav-item--active[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 14%, transparent);\n}\n.mj-inspector__nav-icon[_ngcontent-%COMP%] {\n width: 18px;\n text-align: center;\n font-size: 13px;\n margin-top: 1px;\n flex-shrink: 0;\n color: inherit;\n}\n.mj-inspector__nav-text[_ngcontent-%COMP%] { flex: 1; min-width: 0; }\n.mj-inspector__nav-label[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n line-height: 1.2;\n}\n.mj-inspector__nav-desc[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 3px;\n line-height: 1.3;\n}\n.mj-inspector__nav-item--active[_ngcontent-%COMP%] .mj-inspector__nav-desc[_ngcontent-%COMP%] {\n color: color-mix(in srgb, var(--mj-brand-primary) 70%, var(--mj-text-muted));\n}\n\n\n\n.mj-inspector__content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-page);\n}\n.mj-inspector__content-head[_ngcontent-%COMP%] {\n padding: 12px 20px;\n border-bottom: 1px solid var(--mj-border-subtle);\n display: flex;\n align-items: center;\n justify-content: space-between;\n background: var(--mj-bg-surface-card);\n}\n.mj-inspector__content-title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n.mj-inspector__content-meta[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n.mj-inspector__editor[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n.mj-inspector__editor[_ngcontent-%COMP%] mj-code-editor[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n display: block;\n}\n\n\n\n.mj-inspector__empty[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-muted);\n font-size: 13px;\n}\n\n@media (max-width: 700px) {\n .mj-inspector__body[_ngcontent-%COMP%] { flex-direction: column; }\n .mj-inspector__sidebar[_ngcontent-%COMP%] {\n width: 100%;\n height: auto;\n max-height: 200px;\n border-right: none;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n }\n .mj-inspector__nav-item[_ngcontent-%COMP%] { flex: 1 1 calc(50% - 8px); margin-bottom: 0; }\n .mj-inspector__nav-desc[_ngcontent-%COMP%] { display: none; }\n .mj-inspector__header[_ngcontent-%COMP%] { padding: 12px 14px; gap: 10px; }\n}", ".mj-inspector--solo[_ngcontent-%COMP%] { background: var(--mj-bg-page); }\n\n\n\n.lz-unavailable[_ngcontent-%COMP%] {\n margin: 16px 20px;\n padding: 14px 18px;\n background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface-card));\n border: 1px solid color-mix(in srgb, var(--mj-status-warning) 30%, var(--mj-border-subtle));\n border-radius: 10px;\n display: flex;\n align-items: flex-start;\n gap: 14px;\n color: var(--mj-text-secondary);\n font-size: 13px;\n line-height: 1.5;\n}\n.lz-unavailable[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n font-size: 18px;\n margin-top: 2px;\n}\n\n\n\n.lz-summary[_ngcontent-%COMP%] {\n padding: 18px 20px;\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-border-subtle);\n display: grid;\n grid-template-columns: 1fr auto;\n gap: 24px;\n align-items: center;\n}\n.lz-progress[_ngcontent-%COMP%] { min-width: 0; }\n.lz-progress-bar[_ngcontent-%COMP%] {\n height: 10px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 100px;\n overflow: hidden;\n margin-bottom: 8px;\n}\n.lz-progress-fill[_ngcontent-%COMP%] {\n height: 100%;\n background: linear-gradient(90deg, #264FAF 0%, #0076b6 100%);\n border-radius: 100px;\n transition: width 0.5s cubic-bezier(0.4, 0, 0.2, 1);\n}\n.lz-progress-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: baseline;\n gap: 10px;\n}\n.lz-progress-pct[_ngcontent-%COMP%] {\n font-size: 22px;\n font-weight: 700;\n color: var(--mj-brand-primary);\n letter-spacing: -0.5px;\n line-height: 1;\n}\n.lz-progress-label[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 12.5px;\n}\n\n.lz-summary-stats[_ngcontent-%COMP%] {\n display: flex;\n gap: 14px;\n}\n.lz-summary-stat[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n padding: 10px 14px;\n text-align: center;\n min-width: 88px;\n}\n.lz-summary-value[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 700;\n color: var(--mj-text-primary);\n letter-spacing: -0.4px;\n line-height: 1;\n}\n.lz-summary-label[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n font-weight: 600;\n letter-spacing: 0.5px;\n margin-top: 4px;\n}\n\n\n\n.lz-filter-bar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 10px 20px;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface);\n}\n.lz-filter[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n border-radius: 100px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 12px;\n font-weight: 500;\n font-family: inherit;\n cursor: pointer;\n transition: all 0.12s;\n}\n.lz-filter[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-primary);\n}\n.lz-filter--active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n.lz-filter-count[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n font-size: 10.5px;\n padding: 1px 7px;\n border-radius: 100px;\n font-weight: 600;\n}\n.lz-filter--active[_ngcontent-%COMP%] .lz-filter-count[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 18%, transparent);\n color: var(--mj-brand-primary);\n}\n.lz-spacer[_ngcontent-%COMP%] { flex: 1; }\n.lz-refreshed[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n\n\n.lz-grid[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n padding: 16px 20px;\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(380px, 1fr));\n gap: 12px;\n align-content: start;\n}\n.lz-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n padding: 12px 14px;\n transition: border-color 0.15s, transform 0.15s, box-shadow 0.15s;\n}\n.lz-card[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-border-default);\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.04);\n}\n.lz-card--loaded[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 4%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-success) 25%, var(--mj-border-subtle));\n}\n\n.lz-card-head[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-bottom: 10px;\n}\n.lz-card-status[_ngcontent-%COMP%] {\n width: 22px;\n height: 22px;\n color: var(--mj-text-muted);\n font-size: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n.lz-card-status--loaded[_ngcontent-%COMP%] { color: var(--mj-status-success); }\n\n.lz-card-title[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n.lz-card-title[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n display: block;\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 12.5px;\n font-weight: 600;\n color: var(--mj-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.lz-card-kcount[_ngcontent-%COMP%] {\n font-size: 10.5px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.4px;\n font-weight: 600;\n}\n\n.lz-load-btn[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: white;\n border: 1px solid var(--mj-brand-primary);\n padding: 6px 12px;\n border-radius: 7px;\n font-size: 11.5px;\n font-weight: 600;\n cursor: pointer;\n font-family: inherit;\n display: inline-flex;\n align-items: center;\n gap: 5px;\n transition: background 0.15s, transform 0.1s;\n flex-shrink: 0;\n}\n.lz-load-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: color-mix(in srgb, var(--mj-brand-primary) 88%, black);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 88%, black);\n}\n.lz-load-btn[_ngcontent-%COMP%]:active:not(:disabled) { transform: scale(0.97); }\n.lz-load-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.7;\n cursor: wait;\n}\n\n.lz-card-keys[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n transition: max-height 0.3s ease-out;\n}\n.lz-card-keys--expanded[_ngcontent-%COMP%] {\n max-height: none;\n}\n.lz-key[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-secondary);\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 10.5px;\n padding: 2px 7px;\n border-radius: 5px;\n line-height: 1.5;\n}\n.lz-card--loaded[_ngcontent-%COMP%] .lz-key[_ngcontent-%COMP%] {\n border-color: color-mix(in srgb, var(--mj-status-success) 20%, var(--mj-border-subtle));\n}\n.lz-card-expand[_ngcontent-%COMP%] {\n margin-top: 8px;\n background: transparent;\n border: 1px dashed var(--mj-border-default);\n color: var(--mj-text-secondary);\n padding: 6px 10px;\n border-radius: 7px;\n font-size: 11.5px;\n font-weight: 500;\n cursor: pointer;\n font-family: inherit;\n width: 100%;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n transition: all 0.15s;\n}\n.lz-card-expand[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n}\n.lz-card-expand[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 10px; }\n\n.lz-empty[_ngcontent-%COMP%] {\n grid-column: 1 / -1;\n text-align: center;\n color: var(--mj-text-muted);\n font-size: 13px;\n padding: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n}\n\n@media (max-width: 700px) {\n .lz-summary[_ngcontent-%COMP%] { grid-template-columns: 1fr; }\n .lz-summary-stats[_ngcontent-%COMP%] { display: grid; grid-template-columns: repeat(3, 1fr); }\n .lz-grid[_ngcontent-%COMP%] { grid-template-columns: 1fr; padding: 12px 14px; }\n}"] });
|
|
364
|
+
i0.ɵɵadvance(3);
|
|
365
|
+
i0.ɵɵproperty("Loading", false);
|
|
366
|
+
i0.ɵɵadvance();
|
|
367
|
+
i0.ɵɵconditional(!ctx.Available ? 4 : 5);
|
|
368
|
+
} }, dependencies: [i1.MJPageHeaderInteriorComponent, i1.MJRefreshButtonComponent], styles: ["[_nghost-%COMP%] { display: block; height: 100%; }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.mj-inspector[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n background: var(--mj-bg-page);\n color: var(--mj-text-primary);\n font-family: inherit;\n}\n\n\n\n.mj-inspector__content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-page);\n}\n.mj-inspector__content-head[_ngcontent-%COMP%] {\n padding: 12px 20px;\n border-bottom: 1px solid var(--mj-border-subtle);\n display: flex;\n align-items: center;\n justify-content: space-between;\n background: var(--mj-bg-surface-card);\n}\n.mj-inspector__content-title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n.mj-inspector__content-meta[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n.mj-inspector__editor[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n.mj-inspector__editor[_ngcontent-%COMP%] mj-code-editor[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n display: block;\n}\n\n\n\n.mj-inspector__empty[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-muted);\n font-size: 13px;\n}", ".mj-inspector--solo[_ngcontent-%COMP%] { background: var(--mj-bg-page); }\n\n\n\n.lz-unavailable[_ngcontent-%COMP%] {\n margin: 16px 20px;\n padding: 14px 18px;\n background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface-card));\n border: 1px solid color-mix(in srgb, var(--mj-status-warning) 30%, var(--mj-border-subtle));\n border-radius: 10px;\n display: flex;\n align-items: flex-start;\n gap: 14px;\n color: var(--mj-text-secondary);\n font-size: 13px;\n line-height: 1.5;\n}\n.lz-unavailable[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n font-size: 18px;\n margin-top: 2px;\n}\n\n\n\n.lz-summary[_ngcontent-%COMP%] {\n padding: 18px 20px;\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-border-subtle);\n display: grid;\n grid-template-columns: 1fr auto;\n gap: 24px;\n align-items: center;\n}\n.lz-progress[_ngcontent-%COMP%] { min-width: 0; }\n.lz-progress-bar[_ngcontent-%COMP%] {\n height: 10px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 100px;\n overflow: hidden;\n margin-bottom: 8px;\n}\n.lz-progress-fill[_ngcontent-%COMP%] {\n height: 100%;\n background: linear-gradient(90deg, #264FAF 0%, #0076b6 100%);\n border-radius: 100px;\n transition: width 0.5s cubic-bezier(0.4, 0, 0.2, 1);\n}\n.lz-progress-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: baseline;\n gap: 10px;\n}\n.lz-progress-pct[_ngcontent-%COMP%] {\n font-size: 22px;\n font-weight: 700;\n color: var(--mj-brand-primary);\n letter-spacing: -0.5px;\n line-height: 1;\n}\n.lz-progress-label[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 12.5px;\n}\n\n.lz-summary-stats[_ngcontent-%COMP%] {\n display: flex;\n gap: 14px;\n}\n.lz-summary-stat[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n padding: 10px 14px;\n text-align: center;\n min-width: 88px;\n}\n.lz-summary-value[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 700;\n color: var(--mj-text-primary);\n letter-spacing: -0.4px;\n line-height: 1;\n}\n.lz-summary-label[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n font-weight: 600;\n letter-spacing: 0.5px;\n margin-top: 4px;\n}\n\n\n\n.lz-filter-bar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 10px 20px;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface);\n}\n.lz-filter[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n border-radius: 100px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 12px;\n font-weight: 500;\n font-family: inherit;\n cursor: pointer;\n transition: all 0.12s;\n}\n.lz-filter[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-primary);\n}\n.lz-filter--active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n.lz-filter-count[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n font-size: 10.5px;\n padding: 1px 7px;\n border-radius: 100px;\n font-weight: 600;\n}\n.lz-filter--active[_ngcontent-%COMP%] .lz-filter-count[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 18%, transparent);\n color: var(--mj-brand-primary);\n}\n.lz-spacer[_ngcontent-%COMP%] { flex: 1; }\n.lz-refreshed[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n\n\n.lz-grid[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n padding: 16px 20px;\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(380px, 1fr));\n gap: 12px;\n align-content: start;\n}\n.lz-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n padding: 12px 14px;\n transition: border-color 0.15s, transform 0.15s, box-shadow 0.15s;\n}\n.lz-card[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-border-default);\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.04);\n}\n.lz-card--loaded[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 4%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-success) 25%, var(--mj-border-subtle));\n}\n\n.lz-card-head[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-bottom: 10px;\n}\n.lz-card-status[_ngcontent-%COMP%] {\n width: 22px;\n height: 22px;\n color: var(--mj-text-muted);\n font-size: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n.lz-card-status--loaded[_ngcontent-%COMP%] { color: var(--mj-status-success); }\n\n.lz-card-title[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n.lz-card-title[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n display: block;\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 12.5px;\n font-weight: 600;\n color: var(--mj-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.lz-card-kcount[_ngcontent-%COMP%] {\n font-size: 10.5px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.4px;\n font-weight: 600;\n}\n\n.lz-load-btn[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: white;\n border: 1px solid var(--mj-brand-primary);\n padding: 6px 12px;\n border-radius: 7px;\n font-size: 11.5px;\n font-weight: 600;\n cursor: pointer;\n font-family: inherit;\n display: inline-flex;\n align-items: center;\n gap: 5px;\n transition: background 0.15s, transform 0.1s;\n flex-shrink: 0;\n}\n.lz-load-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: color-mix(in srgb, var(--mj-brand-primary) 88%, black);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 88%, black);\n}\n.lz-load-btn[_ngcontent-%COMP%]:active:not(:disabled) { transform: scale(0.97); }\n.lz-load-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.7;\n cursor: wait;\n}\n\n.lz-card-keys[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n transition: max-height 0.3s ease-out;\n}\n.lz-card-keys--expanded[_ngcontent-%COMP%] {\n max-height: none;\n}\n.lz-key[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-secondary);\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 10.5px;\n padding: 2px 7px;\n border-radius: 5px;\n line-height: 1.5;\n}\n.lz-card--loaded[_ngcontent-%COMP%] .lz-key[_ngcontent-%COMP%] {\n border-color: color-mix(in srgb, var(--mj-status-success) 20%, var(--mj-border-subtle));\n}\n.lz-card-expand[_ngcontent-%COMP%] {\n margin-top: 8px;\n background: transparent;\n border: 1px dashed var(--mj-border-default);\n color: var(--mj-text-secondary);\n padding: 6px 10px;\n border-radius: 7px;\n font-size: 11.5px;\n font-weight: 500;\n cursor: pointer;\n font-family: inherit;\n width: 100%;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n transition: all 0.15s;\n}\n.lz-card-expand[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n}\n.lz-card-expand[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 10px; }\n\n.lz-empty[_ngcontent-%COMP%] {\n grid-column: 1 / -1;\n text-align: center;\n color: var(--mj-text-muted);\n font-size: 13px;\n padding: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n}\n\n@media (max-width: 700px) {\n .lz-summary[_ngcontent-%COMP%] { grid-template-columns: 1fr; }\n .lz-summary-stats[_ngcontent-%COMP%] { display: grid; grid-template-columns: repeat(3, 1fr); }\n .lz-grid[_ngcontent-%COMP%] { grid-template-columns: 1fr; padding: 12px 14px; }\n}"] });
|
|
378
369
|
};
|
|
379
370
|
LazyModuleStatusComponent = __decorate([
|
|
380
371
|
RegisterClass(BaseResourceComponent, 'LazyModuleStatusInspector')
|
|
@@ -382,7 +373,7 @@ LazyModuleStatusComponent = __decorate([
|
|
|
382
373
|
export { LazyModuleStatusComponent };
|
|
383
374
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LazyModuleStatusComponent, [{
|
|
384
375
|
type: Component,
|
|
385
|
-
args: [{ standalone: false, selector: 'mj-lazy-module-status', template: "<div class=\"mj-inspector mj-inspector--solo\">\n <div class=\"mj-inspector__header\">\n <div class=\"mj-inspector__header-icon\"><i class=\"fa-solid fa-puzzle-piece\"></i></div>\n <div>\n <h3 class=\"mj-inspector__header-title\">Lazy Loading</h3>\n <div class=\"mj-inspector__header-sub\">Code-split chunks: registered, loaded, and on-demand</div>\n </div>\n <span class=\"mj-inspector__header-spacer\"></span>\n <div class=\"mj-inspector__header-actions\">\n <button class=\"mj-inspector__btn\" type=\"button\" (click)=\"refresh()\" title=\"Refresh\">\n <i class=\"fa-solid fa-rotate\"></i> Refresh\n </button>\n </div>\n </div>\n\n @if (!Available) {\n <div class=\"lz-unavailable\">\n <i class=\"fa-solid fa-circle-info\"></i>\n <div>\n <strong>Lazy registry not available.</strong>\n The shell hasn't published the LazyModuleRegistry to globalThis yet, or you're viewing this in an environment that doesn't use it.\n </div>\n </div>\n } @else {\n <div class=\"lz-summary\">\n <div class=\"lz-progress\">\n <div class=\"lz-progress-bar\">\n <div class=\"lz-progress-fill\" [style.width.%]=\"Stats.percent\"></div>\n </div>\n <div class=\"lz-progress-meta\">\n <span class=\"lz-progress-pct\">{{ Stats.percent }}%</span>\n <span class=\"lz-progress-label\">{{ Stats.loadedChunks }} of {{ Stats.chunkCount }} chunks loaded</span>\n </div>\n </div>\n <div class=\"lz-summary-stats\">\n <div class=\"lz-summary-stat\">\n <div class=\"lz-summary-value\">{{ Stats.totalKeys }}</div>\n <div class=\"lz-summary-label\">Registered keys</div>\n </div>\n <div class=\"lz-summary-stat\">\n <div class=\"lz-summary-value\">{{ Stats.loadedKeys }}</div>\n <div class=\"lz-summary-label\">Loaded keys</div>\n </div>\n <div class=\"lz-summary-stat\">\n <div class=\"lz-summary-value\">{{ Stats.chunkCount }}</div>\n <div class=\"lz-summary-label\">Total chunks</div>\n </div>\n </div>\n </div>\n\n <div class=\"lz-filter-bar\">\n <button type=\"button\"\n class=\"lz-filter\"\n [class.lz-filter--active]=\"Filter === 'all'\"\n (click)=\"OnFilterClick('all')\">\n All <span class=\"lz-filter-count\">{{ Stats.chunkCount }}</span>\n </button>\n <button type=\"button\"\n class=\"lz-filter\"\n [class.lz-filter--active]=\"Filter === 'loaded'\"\n (click)=\"OnFilterClick('loaded')\">\n <i class=\"fa-solid fa-check-circle\"></i> Loaded <span class=\"lz-filter-count\">{{ Stats.loadedChunks }}</span>\n </button>\n <button type=\"button\"\n class=\"lz-filter\"\n [class.lz-filter--active]=\"Filter === 'not-loaded'\"\n (click)=\"OnFilterClick('not-loaded')\">\n <i class=\"fa-regular fa-circle\"></i> Not loaded <span class=\"lz-filter-count\">{{ Stats.chunkCount - Stats.loadedChunks }}</span>\n </button>\n <span class=\"lz-spacer\"></span>\n <span class=\"lz-refreshed\">Refreshed {{ LastRefreshedLabel }}</span>\n </div>\n\n <div class=\"lz-grid\">\n @for (chunk of FilteredChunks; track TrackByChunk($index, chunk)) {\n <div class=\"lz-card\" [class.lz-card--loaded]=\"chunk.loaded\">\n <div class=\"lz-card-head\">\n <div class=\"lz-card-status\" [class.lz-card-status--loaded]=\"chunk.loaded\">\n @if (chunk.loaded) {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else {\n <i class=\"fa-regular fa-circle\"></i>\n }\n </div>\n <div class=\"lz-card-title\">\n <code>{{ chunk.label }}</code>\n <span class=\"lz-card-kcount\">{{ chunk.keys.length }} entries</span>\n </div>\n @if (!chunk.loaded) {\n <button type=\"button\"\n class=\"lz-load-btn\"\n [disabled]=\"chunk.loading\"\n (click)=\"OnForceLoad(chunk)\"\n title=\"Force-load this chunk now\">\n @if (chunk.loading) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading\n } @else {\n <i class=\"fa-solid fa-bolt\"></i> Load\n }\n </button>\n }\n </div>\n <div class=\"lz-card-keys\" [class.lz-card-keys--expanded]=\"chunk.expanded\">\n @for (k of VisibleKeys(chunk); track k) {\n <span class=\"lz-key\">{{ k }}</span>\n }\n </div>\n @if (HiddenCount(chunk) > 0 || chunk.expanded) {\n <button class=\"lz-card-expand\"\n type=\"button\"\n (click)=\"ToggleChunkExpand(chunk)\">\n @if (chunk.expanded) {\n <i class=\"fa-solid fa-chevron-up\"></i> Show less\n } @else {\n <i class=\"fa-solid fa-chevron-down\"></i> Show all {{ chunk.keys.length }} entries\n }\n </button>\n }\n </div>\n }\n @if (FilteredChunks.length === 0) {\n <div class=\"lz-empty\">\n <i class=\"fa-solid fa-circle-info\"></i>\n No chunks match the current filter.\n </div>\n }\n </div>\n }\n</div>\n", styles: [":host { display: block; height: 100%; }\n\n.mj-inspector {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n background: var(--mj-bg-page);\n color: var(--mj-text-primary);\n font-family: inherit;\n}\n\n/* Header */\n.mj-inspector__header {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 14px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n flex-shrink: 0;\n}\n.mj-inspector__header-icon {\n width: 36px; height: 36px;\n border-radius: 9px;\n background: linear-gradient(135deg, #264FAF 0%, #0076b6 100%);\n color: white;\n display: flex; align-items: center; justify-content: center;\n font-size: 15px;\n flex-shrink: 0;\n}\n.mj-inspector__header-title {\n margin: 0;\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n letter-spacing: -0.2px;\n}\n.mj-inspector__header-sub {\n font-size: 11.5px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n.mj-inspector__header-spacer { flex: 1; }\n.mj-inspector__header-actions {\n display: flex; gap: 6px;\n}\n.mj-inspector__btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 7px 12px;\n border-radius: 7px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n font-family: inherit;\n transition: all 0.15s;\n}\n.mj-inspector__btn:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n.mj-inspector__btn--success {\n color: var(--mj-status-success);\n border-color: color-mix(in srgb, var(--mj-status-success) 30%, var(--mj-border-default));\n}\n\n/* Layout: sidebar + content */\n.mj-inspector__body {\n display: flex;\n flex: 1;\n min-height: 0;\n}\n.mj-inspector__sidebar {\n width: 220px;\n border-right: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n overflow-y: auto;\n flex-shrink: 0;\n padding: 8px;\n}\n.mj-inspector__nav-item {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n padding: 10px 12px;\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.12s;\n margin-bottom: 2px;\n font-family: inherit;\n border: none;\n background: transparent;\n color: var(--mj-text-secondary);\n text-align: left;\n width: 100%;\n}\n.mj-inspector__nav-item:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n.mj-inspector__nav-item--active {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n}\n.mj-inspector__nav-item--active:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 14%, transparent);\n}\n.mj-inspector__nav-icon {\n width: 18px;\n text-align: center;\n font-size: 13px;\n margin-top: 1px;\n flex-shrink: 0;\n color: inherit;\n}\n.mj-inspector__nav-text { flex: 1; min-width: 0; }\n.mj-inspector__nav-label {\n font-size: 13px;\n font-weight: 500;\n line-height: 1.2;\n}\n.mj-inspector__nav-desc {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 3px;\n line-height: 1.3;\n}\n.mj-inspector__nav-item--active .mj-inspector__nav-desc {\n color: color-mix(in srgb, var(--mj-brand-primary) 70%, var(--mj-text-muted));\n}\n\n/* Content area */\n.mj-inspector__content {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-page);\n}\n.mj-inspector__content-head {\n padding: 12px 20px;\n border-bottom: 1px solid var(--mj-border-subtle);\n display: flex;\n align-items: center;\n justify-content: space-between;\n background: var(--mj-bg-surface-card);\n}\n.mj-inspector__content-title {\n margin: 0;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n.mj-inspector__content-meta {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n.mj-inspector__editor {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n.mj-inspector__editor mj-code-editor {\n flex: 1;\n min-height: 0;\n display: block;\n}\n\n/* Empty state */\n.mj-inspector__empty {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-muted);\n font-size: 13px;\n}\n\n@media (max-width: 700px) {\n .mj-inspector__body { flex-direction: column; }\n .mj-inspector__sidebar {\n width: 100%;\n height: auto;\n max-height: 200px;\n border-right: none;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n }\n .mj-inspector__nav-item { flex: 1 1 calc(50% - 8px); margin-bottom: 0; }\n .mj-inspector__nav-desc { display: none; }\n .mj-inspector__header { padding: 12px 14px; gap: 10px; }\n}\n", ".mj-inspector--solo { background: var(--mj-bg-page); }\n\n/* Unavailable */\n.lz-unavailable {\n margin: 16px 20px;\n padding: 14px 18px;\n background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface-card));\n border: 1px solid color-mix(in srgb, var(--mj-status-warning) 30%, var(--mj-border-subtle));\n border-radius: 10px;\n display: flex;\n align-items: flex-start;\n gap: 14px;\n color: var(--mj-text-secondary);\n font-size: 13px;\n line-height: 1.5;\n}\n.lz-unavailable i {\n color: var(--mj-status-warning);\n font-size: 18px;\n margin-top: 2px;\n}\n\n/* Summary */\n.lz-summary {\n padding: 18px 20px;\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-border-subtle);\n display: grid;\n grid-template-columns: 1fr auto;\n gap: 24px;\n align-items: center;\n}\n.lz-progress { min-width: 0; }\n.lz-progress-bar {\n height: 10px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 100px;\n overflow: hidden;\n margin-bottom: 8px;\n}\n.lz-progress-fill {\n height: 100%;\n background: linear-gradient(90deg, #264FAF 0%, #0076b6 100%);\n border-radius: 100px;\n transition: width 0.5s cubic-bezier(0.4, 0, 0.2, 1);\n}\n.lz-progress-meta {\n display: flex;\n align-items: baseline;\n gap: 10px;\n}\n.lz-progress-pct {\n font-size: 22px;\n font-weight: 700;\n color: var(--mj-brand-primary);\n letter-spacing: -0.5px;\n line-height: 1;\n}\n.lz-progress-label {\n color: var(--mj-text-muted);\n font-size: 12.5px;\n}\n\n.lz-summary-stats {\n display: flex;\n gap: 14px;\n}\n.lz-summary-stat {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n padding: 10px 14px;\n text-align: center;\n min-width: 88px;\n}\n.lz-summary-value {\n font-size: 18px;\n font-weight: 700;\n color: var(--mj-text-primary);\n letter-spacing: -0.4px;\n line-height: 1;\n}\n.lz-summary-label {\n font-size: 10px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n font-weight: 600;\n letter-spacing: 0.5px;\n margin-top: 4px;\n}\n\n/* Filter bar */\n.lz-filter-bar {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 10px 20px;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface);\n}\n.lz-filter {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n border-radius: 100px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 12px;\n font-weight: 500;\n font-family: inherit;\n cursor: pointer;\n transition: all 0.12s;\n}\n.lz-filter:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-primary);\n}\n.lz-filter--active {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n.lz-filter-count {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n font-size: 10.5px;\n padding: 1px 7px;\n border-radius: 100px;\n font-weight: 600;\n}\n.lz-filter--active .lz-filter-count {\n background: color-mix(in srgb, var(--mj-brand-primary) 18%, transparent);\n color: var(--mj-brand-primary);\n}\n.lz-spacer { flex: 1; }\n.lz-refreshed {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n/* Grid */\n.lz-grid {\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n padding: 16px 20px;\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(380px, 1fr));\n gap: 12px;\n align-content: start;\n}\n.lz-card {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n padding: 12px 14px;\n transition: border-color 0.15s, transform 0.15s, box-shadow 0.15s;\n}\n.lz-card:hover {\n border-color: var(--mj-border-default);\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.04);\n}\n.lz-card--loaded {\n background: color-mix(in srgb, var(--mj-status-success) 4%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-success) 25%, var(--mj-border-subtle));\n}\n\n.lz-card-head {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-bottom: 10px;\n}\n.lz-card-status {\n width: 22px;\n height: 22px;\n color: var(--mj-text-muted);\n font-size: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n.lz-card-status--loaded { color: var(--mj-status-success); }\n\n.lz-card-title {\n flex: 1;\n min-width: 0;\n}\n.lz-card-title code {\n display: block;\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 12.5px;\n font-weight: 600;\n color: var(--mj-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.lz-card-kcount {\n font-size: 10.5px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.4px;\n font-weight: 600;\n}\n\n.lz-load-btn {\n background: var(--mj-brand-primary);\n color: white;\n border: 1px solid var(--mj-brand-primary);\n padding: 6px 12px;\n border-radius: 7px;\n font-size: 11.5px;\n font-weight: 600;\n cursor: pointer;\n font-family: inherit;\n display: inline-flex;\n align-items: center;\n gap: 5px;\n transition: background 0.15s, transform 0.1s;\n flex-shrink: 0;\n}\n.lz-load-btn:hover:not(:disabled) {\n background: color-mix(in srgb, var(--mj-brand-primary) 88%, black);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 88%, black);\n}\n.lz-load-btn:active:not(:disabled) { transform: scale(0.97); }\n.lz-load-btn:disabled {\n opacity: 0.7;\n cursor: wait;\n}\n\n.lz-card-keys {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n transition: max-height 0.3s ease-out;\n}\n.lz-card-keys--expanded {\n max-height: none;\n}\n.lz-key {\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-secondary);\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 10.5px;\n padding: 2px 7px;\n border-radius: 5px;\n line-height: 1.5;\n}\n.lz-card--loaded .lz-key {\n border-color: color-mix(in srgb, var(--mj-status-success) 20%, var(--mj-border-subtle));\n}\n.lz-card-expand {\n margin-top: 8px;\n background: transparent;\n border: 1px dashed var(--mj-border-default);\n color: var(--mj-text-secondary);\n padding: 6px 10px;\n border-radius: 7px;\n font-size: 11.5px;\n font-weight: 500;\n cursor: pointer;\n font-family: inherit;\n width: 100%;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n transition: all 0.15s;\n}\n.lz-card-expand:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n}\n.lz-card-expand i { font-size: 10px; }\n\n.lz-empty {\n grid-column: 1 / -1;\n text-align: center;\n color: var(--mj-text-muted);\n font-size: 13px;\n padding: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n}\n\n@media (max-width: 700px) {\n .lz-summary { grid-template-columns: 1fr; }\n .lz-summary-stats { display: grid; grid-template-columns: repeat(3, 1fr); }\n .lz-grid { grid-template-columns: 1fr; padding: 12px 14px; }\n}\n"] }]
|
|
376
|
+
args: [{ standalone: false, selector: 'mj-lazy-module-status', template: "<div class=\"mj-inspector mj-inspector--solo\">\n <mj-page-header-interior\n Role=\"region\"\n AriaLabel=\"Lazy loading inspector\"\n Title=\"Lazy Loading\"\n Subtitle=\"Code-split chunks: registered, loaded, and on-demand\">\n <div actions>\n <mj-refresh-button [Loading]=\"false\" (Clicked)=\"refresh()\"></mj-refresh-button>\n </div>\n </mj-page-header-interior>\n\n @if (!Available) {\n <div class=\"lz-unavailable\">\n <i class=\"fa-solid fa-circle-info\"></i>\n <div>\n <strong>Lazy registry not available.</strong>\n The shell hasn't published the LazyModuleRegistry to globalThis yet, or you're viewing this in an environment that doesn't use it.\n </div>\n </div>\n } @else {\n <div class=\"lz-summary\">\n <div class=\"lz-progress\">\n <div class=\"lz-progress-bar\">\n <div class=\"lz-progress-fill\" [style.width.%]=\"Stats.percent\"></div>\n </div>\n <div class=\"lz-progress-meta\">\n <span class=\"lz-progress-pct\">{{ Stats.percent }}%</span>\n <span class=\"lz-progress-label\">{{ Stats.loadedChunks }} of {{ Stats.chunkCount }} chunks loaded</span>\n </div>\n </div>\n <div class=\"lz-summary-stats\">\n <div class=\"lz-summary-stat\">\n <div class=\"lz-summary-value\">{{ Stats.totalKeys }}</div>\n <div class=\"lz-summary-label\">Registered keys</div>\n </div>\n <div class=\"lz-summary-stat\">\n <div class=\"lz-summary-value\">{{ Stats.loadedKeys }}</div>\n <div class=\"lz-summary-label\">Loaded keys</div>\n </div>\n <div class=\"lz-summary-stat\">\n <div class=\"lz-summary-value\">{{ Stats.chunkCount }}</div>\n <div class=\"lz-summary-label\">Total chunks</div>\n </div>\n </div>\n </div>\n\n <div class=\"lz-filter-bar\">\n <button type=\"button\"\n class=\"lz-filter\"\n [class.lz-filter--active]=\"Filter === 'all'\"\n (click)=\"OnFilterClick('all')\">\n All <span class=\"lz-filter-count\">{{ Stats.chunkCount }}</span>\n </button>\n <button type=\"button\"\n class=\"lz-filter\"\n [class.lz-filter--active]=\"Filter === 'loaded'\"\n (click)=\"OnFilterClick('loaded')\">\n <i class=\"fa-solid fa-check-circle\"></i> Loaded <span class=\"lz-filter-count\">{{ Stats.loadedChunks }}</span>\n </button>\n <button type=\"button\"\n class=\"lz-filter\"\n [class.lz-filter--active]=\"Filter === 'not-loaded'\"\n (click)=\"OnFilterClick('not-loaded')\">\n <i class=\"fa-regular fa-circle\"></i> Not loaded <span class=\"lz-filter-count\">{{ Stats.chunkCount - Stats.loadedChunks }}</span>\n </button>\n <span class=\"lz-spacer\"></span>\n <span class=\"lz-refreshed\">Refreshed {{ LastRefreshedLabel }}</span>\n </div>\n\n <div class=\"lz-grid\">\n @for (chunk of FilteredChunks; track TrackByChunk($index, chunk)) {\n <div class=\"lz-card\" [class.lz-card--loaded]=\"chunk.loaded\">\n <div class=\"lz-card-head\">\n <div class=\"lz-card-status\" [class.lz-card-status--loaded]=\"chunk.loaded\">\n @if (chunk.loaded) {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else {\n <i class=\"fa-regular fa-circle\"></i>\n }\n </div>\n <div class=\"lz-card-title\">\n <code>{{ chunk.label }}</code>\n <span class=\"lz-card-kcount\">{{ chunk.keys.length }} entries</span>\n </div>\n @if (!chunk.loaded) {\n <button type=\"button\"\n class=\"lz-load-btn\"\n [disabled]=\"chunk.loading\"\n (click)=\"OnForceLoad(chunk)\"\n title=\"Force-load this chunk now\">\n @if (chunk.loading) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading\n } @else {\n <i class=\"fa-solid fa-bolt\"></i> Load\n }\n </button>\n }\n </div>\n <div class=\"lz-card-keys\" [class.lz-card-keys--expanded]=\"chunk.expanded\">\n @for (k of VisibleKeys(chunk); track k) {\n <span class=\"lz-key\">{{ k }}</span>\n }\n </div>\n @if (HiddenCount(chunk) > 0 || chunk.expanded) {\n <button class=\"lz-card-expand\"\n type=\"button\"\n (click)=\"ToggleChunkExpand(chunk)\">\n @if (chunk.expanded) {\n <i class=\"fa-solid fa-chevron-up\"></i> Show less\n } @else {\n <i class=\"fa-solid fa-chevron-down\"></i> Show all {{ chunk.keys.length }} entries\n }\n </button>\n }\n </div>\n }\n @if (FilteredChunks.length === 0) {\n <div class=\"lz-empty\">\n <i class=\"fa-solid fa-circle-info\"></i>\n No chunks match the current filter.\n </div>\n }\n </div>\n }\n</div>\n", styles: [":host { display: block; height: 100%; }\n\n/*\n Inspector shell \u2014 each Dev Tools sub-page wraps its body in .mj-inspector. The\n chrome (title icon, title, subtitle, action buttons) was previously rendered\n via .mj-inspector__header*, but that's been replaced by <mj-page-header-interior>\n in every inspector template. Action buttons now use the mjButton directive\n (variant=\"secondary\" / \"success\") so they inherit global button styling. App\n State + Layout inspectors used to carry an inner left rail (.mj-inspector__body\n + __sidebar + __nav-item) for L2 sections; that rail was retired 2026-05-19 in\n favor of <mj-tab-nav> projected into the chrome's [toolbar] slot, matching\n SystemDiagnostics and the API Keys tab strip. All inspectors are now \"solo\"\n mode (no sidebar).\n*/\n.mj-inspector {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n background: var(--mj-bg-page);\n color: var(--mj-text-primary);\n font-family: inherit;\n}\n\n/* Content area */\n.mj-inspector__content {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-page);\n}\n.mj-inspector__content-head {\n padding: 12px 20px;\n border-bottom: 1px solid var(--mj-border-subtle);\n display: flex;\n align-items: center;\n justify-content: space-between;\n background: var(--mj-bg-surface-card);\n}\n.mj-inspector__content-title {\n margin: 0;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n.mj-inspector__content-meta {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n.mj-inspector__editor {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n.mj-inspector__editor mj-code-editor {\n flex: 1;\n min-height: 0;\n display: block;\n}\n\n/* Empty state */\n.mj-inspector__empty {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-muted);\n font-size: 13px;\n}\n\n", ".mj-inspector--solo { background: var(--mj-bg-page); }\n\n/* Unavailable */\n.lz-unavailable {\n margin: 16px 20px;\n padding: 14px 18px;\n background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface-card));\n border: 1px solid color-mix(in srgb, var(--mj-status-warning) 30%, var(--mj-border-subtle));\n border-radius: 10px;\n display: flex;\n align-items: flex-start;\n gap: 14px;\n color: var(--mj-text-secondary);\n font-size: 13px;\n line-height: 1.5;\n}\n.lz-unavailable i {\n color: var(--mj-status-warning);\n font-size: 18px;\n margin-top: 2px;\n}\n\n/* Summary */\n.lz-summary {\n padding: 18px 20px;\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-border-subtle);\n display: grid;\n grid-template-columns: 1fr auto;\n gap: 24px;\n align-items: center;\n}\n.lz-progress { min-width: 0; }\n.lz-progress-bar {\n height: 10px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 100px;\n overflow: hidden;\n margin-bottom: 8px;\n}\n.lz-progress-fill {\n height: 100%;\n background: linear-gradient(90deg, #264FAF 0%, #0076b6 100%);\n border-radius: 100px;\n transition: width 0.5s cubic-bezier(0.4, 0, 0.2, 1);\n}\n.lz-progress-meta {\n display: flex;\n align-items: baseline;\n gap: 10px;\n}\n.lz-progress-pct {\n font-size: 22px;\n font-weight: 700;\n color: var(--mj-brand-primary);\n letter-spacing: -0.5px;\n line-height: 1;\n}\n.lz-progress-label {\n color: var(--mj-text-muted);\n font-size: 12.5px;\n}\n\n.lz-summary-stats {\n display: flex;\n gap: 14px;\n}\n.lz-summary-stat {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n padding: 10px 14px;\n text-align: center;\n min-width: 88px;\n}\n.lz-summary-value {\n font-size: 18px;\n font-weight: 700;\n color: var(--mj-text-primary);\n letter-spacing: -0.4px;\n line-height: 1;\n}\n.lz-summary-label {\n font-size: 10px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n font-weight: 600;\n letter-spacing: 0.5px;\n margin-top: 4px;\n}\n\n/* Filter bar */\n.lz-filter-bar {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 10px 20px;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface);\n}\n.lz-filter {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n border-radius: 100px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 12px;\n font-weight: 500;\n font-family: inherit;\n cursor: pointer;\n transition: all 0.12s;\n}\n.lz-filter:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-primary);\n}\n.lz-filter--active {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n.lz-filter-count {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n font-size: 10.5px;\n padding: 1px 7px;\n border-radius: 100px;\n font-weight: 600;\n}\n.lz-filter--active .lz-filter-count {\n background: color-mix(in srgb, var(--mj-brand-primary) 18%, transparent);\n color: var(--mj-brand-primary);\n}\n.lz-spacer { flex: 1; }\n.lz-refreshed {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n/* Grid */\n.lz-grid {\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n padding: 16px 20px;\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(380px, 1fr));\n gap: 12px;\n align-content: start;\n}\n.lz-card {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n padding: 12px 14px;\n transition: border-color 0.15s, transform 0.15s, box-shadow 0.15s;\n}\n.lz-card:hover {\n border-color: var(--mj-border-default);\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.04);\n}\n.lz-card--loaded {\n background: color-mix(in srgb, var(--mj-status-success) 4%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-success) 25%, var(--mj-border-subtle));\n}\n\n.lz-card-head {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-bottom: 10px;\n}\n.lz-card-status {\n width: 22px;\n height: 22px;\n color: var(--mj-text-muted);\n font-size: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n.lz-card-status--loaded { color: var(--mj-status-success); }\n\n.lz-card-title {\n flex: 1;\n min-width: 0;\n}\n.lz-card-title code {\n display: block;\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 12.5px;\n font-weight: 600;\n color: var(--mj-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.lz-card-kcount {\n font-size: 10.5px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.4px;\n font-weight: 600;\n}\n\n.lz-load-btn {\n background: var(--mj-brand-primary);\n color: white;\n border: 1px solid var(--mj-brand-primary);\n padding: 6px 12px;\n border-radius: 7px;\n font-size: 11.5px;\n font-weight: 600;\n cursor: pointer;\n font-family: inherit;\n display: inline-flex;\n align-items: center;\n gap: 5px;\n transition: background 0.15s, transform 0.1s;\n flex-shrink: 0;\n}\n.lz-load-btn:hover:not(:disabled) {\n background: color-mix(in srgb, var(--mj-brand-primary) 88%, black);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 88%, black);\n}\n.lz-load-btn:active:not(:disabled) { transform: scale(0.97); }\n.lz-load-btn:disabled {\n opacity: 0.7;\n cursor: wait;\n}\n\n.lz-card-keys {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n transition: max-height 0.3s ease-out;\n}\n.lz-card-keys--expanded {\n max-height: none;\n}\n.lz-key {\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-secondary);\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 10.5px;\n padding: 2px 7px;\n border-radius: 5px;\n line-height: 1.5;\n}\n.lz-card--loaded .lz-key {\n border-color: color-mix(in srgb, var(--mj-status-success) 20%, var(--mj-border-subtle));\n}\n.lz-card-expand {\n margin-top: 8px;\n background: transparent;\n border: 1px dashed var(--mj-border-default);\n color: var(--mj-text-secondary);\n padding: 6px 10px;\n border-radius: 7px;\n font-size: 11.5px;\n font-weight: 500;\n cursor: pointer;\n font-family: inherit;\n width: 100%;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n transition: all 0.15s;\n}\n.lz-card-expand:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n}\n.lz-card-expand i { font-size: 10px; }\n\n.lz-empty {\n grid-column: 1 / -1;\n text-align: center;\n color: var(--mj-text-muted);\n font-size: 13px;\n padding: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n}\n\n@media (max-width: 700px) {\n .lz-summary { grid-template-columns: 1fr; }\n .lz-summary-stats { display: grid; grid-template-columns: repeat(3, 1fr); }\n .lz-grid { grid-template-columns: 1fr; padding: 12px 14px; }\n}\n"] }]
|
|
386
377
|
}], () => [{ type: i0.ChangeDetectorRef }], null); })();
|
|
387
378
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(LazyModuleStatusComponent, { className: "LazyModuleStatusComponent", filePath: "src/DevTools/lazy-module-status.component.ts", lineNumber: 47 }); })();
|
|
388
379
|
//# sourceMappingURL=lazy-module-status.component.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lazy-module-status.component.js","sourceRoot":"","sources":["../../src/DevTools/lazy-module-status.component.ts","../../src/DevTools/lazy-module-status.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { RegisterClass } from '@memberjunction/global';\nimport { DevToolsPrefs } from './dev-tools-prefs';\n\ninterface LazyChunk {\n /** A friendly label inferred from the underlying loader source. */\n label: string;\n /** The loader function's source-string (used as the unique chunk id internally). */\n chunkId: string;\n loaded: boolean;\n keys: string[];\n /** True when the user clicks \"Force Load\" — used to disable the button + show spinner. */\n loading?: boolean;\n /** UI state — false initially, user can expand to see all keys. */\n expanded: boolean;\n}\n\n/** How many entry pills to show in the collapsed card before \"Show all\". */\nconst COLLAPSED_KEY_LIMIT = 8;\n\ninterface LazyRegistryShape {\n GetSnapshot(): {\n registered: string[];\n loaded: string[];\n chunks: Array<{ chunkId: string; loaded: boolean; keys: string[] }>;\n chunkCount: number;\n };\n ForceLoad(compoundKey: string): Promise<boolean>;\n}\n\n/**\n * Lazy Module Status — visualizes the Explorer's lazy-loading registry.\n * Shows each chunk, its status (loaded vs not), the registrations it\n * brings in, and offers a \"Force Load\" button to preload on demand.\n *\n * Reads from the global `__mj_lazy_registry__` published by `LazyModuleRegistry`\n * — no hard package dep on explorer-core.\n */\n@RegisterClass(BaseResourceComponent, 'LazyModuleStatusInspector')\n@Component({\n standalone: false,\n selector: 'mj-lazy-module-status',\n templateUrl: './lazy-module-status.component.html',\n styleUrls: ['./inspector-shared.css', './lazy-module-status.component.css']\n})\nexport class LazyModuleStatusComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n\n public Stats = { totalKeys: 0, loadedKeys: 0, chunkCount: 0, loadedChunks: 0, percent: 0 };\n public Chunks: LazyChunk[] = [];\n public Available = false;\n public Filter: 'all' | 'loaded' | 'not-loaded' = 'all';\n public LastRefreshed = new Date();\n\n constructor(private cdr: ChangeDetectorRef) {\n super();\n }\n\n public ngOnInit(): void {\n const prefs = DevToolsPrefs.Get<{ filter?: 'all' | 'loaded' | 'not-loaded'; expanded?: string[] }>('lazyModule');\n if (prefs?.filter) this.Filter = prefs.filter;\n this.refresh();\n if (prefs?.expanded) {\n for (const c of this.Chunks) c.expanded = prefs.expanded.includes(c.chunkId);\n }\n this.NotifyLoadComplete();\n }\n\n public override ngOnDestroy(): void {\n this.savePrefs();\n super.ngOnDestroy();\n }\n\n private savePrefs(): void {\n DevToolsPrefs.Save('lazyModule', {\n filter: this.Filter,\n expanded: this.Chunks.filter(c => c.expanded).map(c => c.chunkId)\n });\n }\n\n public override async GetResourceDisplayName(): Promise<string> { return 'Lazy Loading'; }\n public override async GetResourceIconClass(): Promise<string> { return 'fa-solid fa-puzzle-piece'; }\n\n public refresh(): void {\n const reg = (globalThis as { __mj_lazy_registry__?: LazyRegistryShape }).__mj_lazy_registry__;\n if (!reg || typeof reg.GetSnapshot !== 'function') {\n this.Available = false;\n this.cdr.markForCheck();\n return;\n }\n this.Available = true;\n const snap = reg.GetSnapshot();\n // Preserve expansion state across refreshes\n const prevExpansion = new Map(this.Chunks.map(c => [c.chunkId, c.expanded] as const));\n this.Chunks = snap.chunks.map(c => ({\n label: this.deriveChunkLabel(c.chunkId, c.keys),\n chunkId: c.chunkId,\n loaded: c.loaded,\n keys: c.keys,\n expanded: prevExpansion.get(c.chunkId) ?? false\n })).sort((a, b) => {\n if (a.loaded !== b.loaded) return a.loaded ? -1 : 1; // loaded first\n return a.label.localeCompare(b.label);\n });\n\n const loadedChunks = this.Chunks.filter(c => c.loaded).length;\n this.Stats = {\n totalKeys: snap.registered.length,\n loadedKeys: snap.loaded.length,\n chunkCount: snap.chunks.length,\n loadedChunks,\n percent: snap.chunks.length === 0 ? 0 : Math.round((loadedChunks / snap.chunks.length) * 100)\n };\n this.LastRefreshed = new Date();\n this.cdr.markForCheck();\n }\n\n public OnFilterClick(filter: 'all' | 'loaded' | 'not-loaded'): void {\n this.Filter = filter;\n this.savePrefs();\n }\n\n public get FilteredChunks(): LazyChunk[] {\n switch (this.Filter) {\n case 'loaded': return this.Chunks.filter(c => c.loaded);\n case 'not-loaded': return this.Chunks.filter(c => !c.loaded);\n default: return this.Chunks;\n }\n }\n\n public async OnForceLoad(chunk: LazyChunk): Promise<void> {\n if (chunk.loaded || chunk.loading) return;\n const reg = (globalThis as { __mj_lazy_registry__?: LazyRegistryShape }).__mj_lazy_registry__;\n if (!reg || chunk.keys.length === 0) return;\n\n chunk.loading = true;\n this.cdr.markForCheck();\n try {\n await reg.ForceLoad(chunk.keys[0]); // any key in the chunk loads the same chunk\n // Re-read snapshot to get authoritative state\n this.refresh();\n } catch {\n chunk.loading = false;\n this.cdr.markForCheck();\n }\n }\n\n public get LastRefreshedLabel(): string {\n return this.LastRefreshed.toLocaleTimeString();\n }\n\n public TrackByChunk = (_i: number, c: LazyChunk) => c.chunkId;\n public readonly CollapsedKeyLimit = COLLAPSED_KEY_LIMIT;\n\n public ToggleChunkExpand(chunk: LazyChunk): void {\n chunk.expanded = !chunk.expanded;\n this.savePrefs();\n }\n\n public VisibleKeys(chunk: LazyChunk): string[] {\n return chunk.expanded ? chunk.keys : chunk.keys.slice(0, COLLAPSED_KEY_LIMIT);\n }\n\n public HiddenCount(chunk: LazyChunk): number {\n return Math.max(0, chunk.keys.length - COLLAPSED_KEY_LIMIT);\n }\n\n /**\n * Derive a friendly chunk label from the loader function's source. The\n * generated `LAZY_FEATURE_CONFIG` builds loaders that look like:\n * () => importFn().then(() => {})\n * where importFn is `() => import('@memberjunction/ng-dashboards/foo.module')`\n * So the chunk id (loader.toString()) usually contains the dynamic import path.\n */\n private deriveChunkLabel(chunkId: string, keys: string[]): string {\n const m = chunkId.match(/import\\([\"']([^\"']+)[\"']\\)/);\n if (m && m[1]) {\n // Strip the @memberjunction/ prefix for brevity\n return m[1].replace(/^@memberjunction\\//, '');\n }\n // Fallback: derive from a representative key\n if (keys.length > 0) {\n const first = keys[0];\n const parts = first.split('::');\n return parts.length === 2 ? parts[1] : first;\n }\n return '(unknown chunk)';\n }\n}\n","<div class=\"mj-inspector mj-inspector--solo\">\n <div class=\"mj-inspector__header\">\n <div class=\"mj-inspector__header-icon\"><i class=\"fa-solid fa-puzzle-piece\"></i></div>\n <div>\n <h3 class=\"mj-inspector__header-title\">Lazy Loading</h3>\n <div class=\"mj-inspector__header-sub\">Code-split chunks: registered, loaded, and on-demand</div>\n </div>\n <span class=\"mj-inspector__header-spacer\"></span>\n <div class=\"mj-inspector__header-actions\">\n <button class=\"mj-inspector__btn\" type=\"button\" (click)=\"refresh()\" title=\"Refresh\">\n <i class=\"fa-solid fa-rotate\"></i> Refresh\n </button>\n </div>\n </div>\n\n @if (!Available) {\n <div class=\"lz-unavailable\">\n <i class=\"fa-solid fa-circle-info\"></i>\n <div>\n <strong>Lazy registry not available.</strong>\n The shell hasn't published the LazyModuleRegistry to globalThis yet, or you're viewing this in an environment that doesn't use it.\n </div>\n </div>\n } @else {\n <div class=\"lz-summary\">\n <div class=\"lz-progress\">\n <div class=\"lz-progress-bar\">\n <div class=\"lz-progress-fill\" [style.width.%]=\"Stats.percent\"></div>\n </div>\n <div class=\"lz-progress-meta\">\n <span class=\"lz-progress-pct\">{{ Stats.percent }}%</span>\n <span class=\"lz-progress-label\">{{ Stats.loadedChunks }} of {{ Stats.chunkCount }} chunks loaded</span>\n </div>\n </div>\n <div class=\"lz-summary-stats\">\n <div class=\"lz-summary-stat\">\n <div class=\"lz-summary-value\">{{ Stats.totalKeys }}</div>\n <div class=\"lz-summary-label\">Registered keys</div>\n </div>\n <div class=\"lz-summary-stat\">\n <div class=\"lz-summary-value\">{{ Stats.loadedKeys }}</div>\n <div class=\"lz-summary-label\">Loaded keys</div>\n </div>\n <div class=\"lz-summary-stat\">\n <div class=\"lz-summary-value\">{{ Stats.chunkCount }}</div>\n <div class=\"lz-summary-label\">Total chunks</div>\n </div>\n </div>\n </div>\n\n <div class=\"lz-filter-bar\">\n <button type=\"button\"\n class=\"lz-filter\"\n [class.lz-filter--active]=\"Filter === 'all'\"\n (click)=\"OnFilterClick('all')\">\n All <span class=\"lz-filter-count\">{{ Stats.chunkCount }}</span>\n </button>\n <button type=\"button\"\n class=\"lz-filter\"\n [class.lz-filter--active]=\"Filter === 'loaded'\"\n (click)=\"OnFilterClick('loaded')\">\n <i class=\"fa-solid fa-check-circle\"></i> Loaded <span class=\"lz-filter-count\">{{ Stats.loadedChunks }}</span>\n </button>\n <button type=\"button\"\n class=\"lz-filter\"\n [class.lz-filter--active]=\"Filter === 'not-loaded'\"\n (click)=\"OnFilterClick('not-loaded')\">\n <i class=\"fa-regular fa-circle\"></i> Not loaded <span class=\"lz-filter-count\">{{ Stats.chunkCount - Stats.loadedChunks }}</span>\n </button>\n <span class=\"lz-spacer\"></span>\n <span class=\"lz-refreshed\">Refreshed {{ LastRefreshedLabel }}</span>\n </div>\n\n <div class=\"lz-grid\">\n @for (chunk of FilteredChunks; track TrackByChunk($index, chunk)) {\n <div class=\"lz-card\" [class.lz-card--loaded]=\"chunk.loaded\">\n <div class=\"lz-card-head\">\n <div class=\"lz-card-status\" [class.lz-card-status--loaded]=\"chunk.loaded\">\n @if (chunk.loaded) {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else {\n <i class=\"fa-regular fa-circle\"></i>\n }\n </div>\n <div class=\"lz-card-title\">\n <code>{{ chunk.label }}</code>\n <span class=\"lz-card-kcount\">{{ chunk.keys.length }} entries</span>\n </div>\n @if (!chunk.loaded) {\n <button type=\"button\"\n class=\"lz-load-btn\"\n [disabled]=\"chunk.loading\"\n (click)=\"OnForceLoad(chunk)\"\n title=\"Force-load this chunk now\">\n @if (chunk.loading) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading\n } @else {\n <i class=\"fa-solid fa-bolt\"></i> Load\n }\n </button>\n }\n </div>\n <div class=\"lz-card-keys\" [class.lz-card-keys--expanded]=\"chunk.expanded\">\n @for (k of VisibleKeys(chunk); track k) {\n <span class=\"lz-key\">{{ k }}</span>\n }\n </div>\n @if (HiddenCount(chunk) > 0 || chunk.expanded) {\n <button class=\"lz-card-expand\"\n type=\"button\"\n (click)=\"ToggleChunkExpand(chunk)\">\n @if (chunk.expanded) {\n <i class=\"fa-solid fa-chevron-up\"></i> Show less\n } @else {\n <i class=\"fa-solid fa-chevron-down\"></i> Show all {{ chunk.keys.length }} entries\n }\n </button>\n }\n </div>\n }\n @if (FilteredChunks.length === 0) {\n <div class=\"lz-empty\">\n <i class=\"fa-solid fa-circle-info\"></i>\n No chunks match the current filter.\n </div>\n }\n </div>\n }\n</div>\n"]}
|
|
1
|
+
{"version":3,"file":"lazy-module-status.component.js","sourceRoot":"","sources":["../../src/DevTools/lazy-module-status.component.ts","../../src/DevTools/lazy-module-status.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { RegisterClass } from '@memberjunction/global';\nimport { DevToolsPrefs } from './dev-tools-prefs';\n\ninterface LazyChunk {\n /** A friendly label inferred from the underlying loader source. */\n label: string;\n /** The loader function's source-string (used as the unique chunk id internally). */\n chunkId: string;\n loaded: boolean;\n keys: string[];\n /** True when the user clicks \"Force Load\" — used to disable the button + show spinner. */\n loading?: boolean;\n /** UI state — false initially, user can expand to see all keys. */\n expanded: boolean;\n}\n\n/** How many entry pills to show in the collapsed card before \"Show all\". */\nconst COLLAPSED_KEY_LIMIT = 8;\n\ninterface LazyRegistryShape {\n GetSnapshot(): {\n registered: string[];\n loaded: string[];\n chunks: Array<{ chunkId: string; loaded: boolean; keys: string[] }>;\n chunkCount: number;\n };\n ForceLoad(compoundKey: string): Promise<boolean>;\n}\n\n/**\n * Lazy Module Status — visualizes the Explorer's lazy-loading registry.\n * Shows each chunk, its status (loaded vs not), the registrations it\n * brings in, and offers a \"Force Load\" button to preload on demand.\n *\n * Reads from the global `__mj_lazy_registry__` published by `LazyModuleRegistry`\n * — no hard package dep on explorer-core.\n */\n@RegisterClass(BaseResourceComponent, 'LazyModuleStatusInspector')\n@Component({\n standalone: false,\n selector: 'mj-lazy-module-status',\n templateUrl: './lazy-module-status.component.html',\n styleUrls: ['./inspector-shared.css', './lazy-module-status.component.css']\n})\nexport class LazyModuleStatusComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n\n public Stats = { totalKeys: 0, loadedKeys: 0, chunkCount: 0, loadedChunks: 0, percent: 0 };\n public Chunks: LazyChunk[] = [];\n public Available = false;\n public Filter: 'all' | 'loaded' | 'not-loaded' = 'all';\n public LastRefreshed = new Date();\n\n constructor(private cdr: ChangeDetectorRef) {\n super();\n }\n\n public ngOnInit(): void {\n const prefs = DevToolsPrefs.Get<{ filter?: 'all' | 'loaded' | 'not-loaded'; expanded?: string[] }>('lazyModule');\n if (prefs?.filter) this.Filter = prefs.filter;\n this.refresh();\n if (prefs?.expanded) {\n for (const c of this.Chunks) c.expanded = prefs.expanded.includes(c.chunkId);\n }\n this.NotifyLoadComplete();\n }\n\n public override ngOnDestroy(): void {\n this.savePrefs();\n super.ngOnDestroy();\n }\n\n private savePrefs(): void {\n DevToolsPrefs.Save('lazyModule', {\n filter: this.Filter,\n expanded: this.Chunks.filter(c => c.expanded).map(c => c.chunkId)\n });\n }\n\n public override async GetResourceDisplayName(): Promise<string> { return 'Lazy Loading'; }\n public override async GetResourceIconClass(): Promise<string> { return 'fa-solid fa-puzzle-piece'; }\n\n public refresh(): void {\n const reg = (globalThis as { __mj_lazy_registry__?: LazyRegistryShape }).__mj_lazy_registry__;\n if (!reg || typeof reg.GetSnapshot !== 'function') {\n this.Available = false;\n this.cdr.markForCheck();\n return;\n }\n this.Available = true;\n const snap = reg.GetSnapshot();\n // Preserve expansion state across refreshes\n const prevExpansion = new Map(this.Chunks.map(c => [c.chunkId, c.expanded] as const));\n this.Chunks = snap.chunks.map(c => ({\n label: this.deriveChunkLabel(c.chunkId, c.keys),\n chunkId: c.chunkId,\n loaded: c.loaded,\n keys: c.keys,\n expanded: prevExpansion.get(c.chunkId) ?? false\n })).sort((a, b) => {\n if (a.loaded !== b.loaded) return a.loaded ? -1 : 1; // loaded first\n return a.label.localeCompare(b.label);\n });\n\n const loadedChunks = this.Chunks.filter(c => c.loaded).length;\n this.Stats = {\n totalKeys: snap.registered.length,\n loadedKeys: snap.loaded.length,\n chunkCount: snap.chunks.length,\n loadedChunks,\n percent: snap.chunks.length === 0 ? 0 : Math.round((loadedChunks / snap.chunks.length) * 100)\n };\n this.LastRefreshed = new Date();\n this.cdr.markForCheck();\n }\n\n public OnFilterClick(filter: 'all' | 'loaded' | 'not-loaded'): void {\n this.Filter = filter;\n this.savePrefs();\n }\n\n public get FilteredChunks(): LazyChunk[] {\n switch (this.Filter) {\n case 'loaded': return this.Chunks.filter(c => c.loaded);\n case 'not-loaded': return this.Chunks.filter(c => !c.loaded);\n default: return this.Chunks;\n }\n }\n\n public async OnForceLoad(chunk: LazyChunk): Promise<void> {\n if (chunk.loaded || chunk.loading) return;\n const reg = (globalThis as { __mj_lazy_registry__?: LazyRegistryShape }).__mj_lazy_registry__;\n if (!reg || chunk.keys.length === 0) return;\n\n chunk.loading = true;\n this.cdr.markForCheck();\n try {\n await reg.ForceLoad(chunk.keys[0]); // any key in the chunk loads the same chunk\n // Re-read snapshot to get authoritative state\n this.refresh();\n } catch {\n chunk.loading = false;\n this.cdr.markForCheck();\n }\n }\n\n public get LastRefreshedLabel(): string {\n return this.LastRefreshed.toLocaleTimeString();\n }\n\n public TrackByChunk = (_i: number, c: LazyChunk) => c.chunkId;\n public readonly CollapsedKeyLimit = COLLAPSED_KEY_LIMIT;\n\n public ToggleChunkExpand(chunk: LazyChunk): void {\n chunk.expanded = !chunk.expanded;\n this.savePrefs();\n }\n\n public VisibleKeys(chunk: LazyChunk): string[] {\n return chunk.expanded ? chunk.keys : chunk.keys.slice(0, COLLAPSED_KEY_LIMIT);\n }\n\n public HiddenCount(chunk: LazyChunk): number {\n return Math.max(0, chunk.keys.length - COLLAPSED_KEY_LIMIT);\n }\n\n /**\n * Derive a friendly chunk label from the loader function's source. The\n * generated `LAZY_FEATURE_CONFIG` builds loaders that look like:\n * () => importFn().then(() => {})\n * where importFn is `() => import('@memberjunction/ng-dashboards/foo.module')`\n * So the chunk id (loader.toString()) usually contains the dynamic import path.\n */\n private deriveChunkLabel(chunkId: string, keys: string[]): string {\n const m = chunkId.match(/import\\([\"']([^\"']+)[\"']\\)/);\n if (m && m[1]) {\n // Strip the @memberjunction/ prefix for brevity\n return m[1].replace(/^@memberjunction\\//, '');\n }\n // Fallback: derive from a representative key\n if (keys.length > 0) {\n const first = keys[0];\n const parts = first.split('::');\n return parts.length === 2 ? parts[1] : first;\n }\n return '(unknown chunk)';\n }\n}\n","<div class=\"mj-inspector mj-inspector--solo\">\n <mj-page-header-interior\n Role=\"region\"\n AriaLabel=\"Lazy loading inspector\"\n Title=\"Lazy Loading\"\n Subtitle=\"Code-split chunks: registered, loaded, and on-demand\">\n <div actions>\n <mj-refresh-button [Loading]=\"false\" (Clicked)=\"refresh()\"></mj-refresh-button>\n </div>\n </mj-page-header-interior>\n\n @if (!Available) {\n <div class=\"lz-unavailable\">\n <i class=\"fa-solid fa-circle-info\"></i>\n <div>\n <strong>Lazy registry not available.</strong>\n The shell hasn't published the LazyModuleRegistry to globalThis yet, or you're viewing this in an environment that doesn't use it.\n </div>\n </div>\n } @else {\n <div class=\"lz-summary\">\n <div class=\"lz-progress\">\n <div class=\"lz-progress-bar\">\n <div class=\"lz-progress-fill\" [style.width.%]=\"Stats.percent\"></div>\n </div>\n <div class=\"lz-progress-meta\">\n <span class=\"lz-progress-pct\">{{ Stats.percent }}%</span>\n <span class=\"lz-progress-label\">{{ Stats.loadedChunks }} of {{ Stats.chunkCount }} chunks loaded</span>\n </div>\n </div>\n <div class=\"lz-summary-stats\">\n <div class=\"lz-summary-stat\">\n <div class=\"lz-summary-value\">{{ Stats.totalKeys }}</div>\n <div class=\"lz-summary-label\">Registered keys</div>\n </div>\n <div class=\"lz-summary-stat\">\n <div class=\"lz-summary-value\">{{ Stats.loadedKeys }}</div>\n <div class=\"lz-summary-label\">Loaded keys</div>\n </div>\n <div class=\"lz-summary-stat\">\n <div class=\"lz-summary-value\">{{ Stats.chunkCount }}</div>\n <div class=\"lz-summary-label\">Total chunks</div>\n </div>\n </div>\n </div>\n\n <div class=\"lz-filter-bar\">\n <button type=\"button\"\n class=\"lz-filter\"\n [class.lz-filter--active]=\"Filter === 'all'\"\n (click)=\"OnFilterClick('all')\">\n All <span class=\"lz-filter-count\">{{ Stats.chunkCount }}</span>\n </button>\n <button type=\"button\"\n class=\"lz-filter\"\n [class.lz-filter--active]=\"Filter === 'loaded'\"\n (click)=\"OnFilterClick('loaded')\">\n <i class=\"fa-solid fa-check-circle\"></i> Loaded <span class=\"lz-filter-count\">{{ Stats.loadedChunks }}</span>\n </button>\n <button type=\"button\"\n class=\"lz-filter\"\n [class.lz-filter--active]=\"Filter === 'not-loaded'\"\n (click)=\"OnFilterClick('not-loaded')\">\n <i class=\"fa-regular fa-circle\"></i> Not loaded <span class=\"lz-filter-count\">{{ Stats.chunkCount - Stats.loadedChunks }}</span>\n </button>\n <span class=\"lz-spacer\"></span>\n <span class=\"lz-refreshed\">Refreshed {{ LastRefreshedLabel }}</span>\n </div>\n\n <div class=\"lz-grid\">\n @for (chunk of FilteredChunks; track TrackByChunk($index, chunk)) {\n <div class=\"lz-card\" [class.lz-card--loaded]=\"chunk.loaded\">\n <div class=\"lz-card-head\">\n <div class=\"lz-card-status\" [class.lz-card-status--loaded]=\"chunk.loaded\">\n @if (chunk.loaded) {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else {\n <i class=\"fa-regular fa-circle\"></i>\n }\n </div>\n <div class=\"lz-card-title\">\n <code>{{ chunk.label }}</code>\n <span class=\"lz-card-kcount\">{{ chunk.keys.length }} entries</span>\n </div>\n @if (!chunk.loaded) {\n <button type=\"button\"\n class=\"lz-load-btn\"\n [disabled]=\"chunk.loading\"\n (click)=\"OnForceLoad(chunk)\"\n title=\"Force-load this chunk now\">\n @if (chunk.loading) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading\n } @else {\n <i class=\"fa-solid fa-bolt\"></i> Load\n }\n </button>\n }\n </div>\n <div class=\"lz-card-keys\" [class.lz-card-keys--expanded]=\"chunk.expanded\">\n @for (k of VisibleKeys(chunk); track k) {\n <span class=\"lz-key\">{{ k }}</span>\n }\n </div>\n @if (HiddenCount(chunk) > 0 || chunk.expanded) {\n <button class=\"lz-card-expand\"\n type=\"button\"\n (click)=\"ToggleChunkExpand(chunk)\">\n @if (chunk.expanded) {\n <i class=\"fa-solid fa-chevron-up\"></i> Show less\n } @else {\n <i class=\"fa-solid fa-chevron-down\"></i> Show all {{ chunk.keys.length }} entries\n }\n </button>\n }\n </div>\n }\n @if (FilteredChunks.length === 0) {\n <div class=\"lz-empty\">\n <i class=\"fa-solid fa-circle-info\"></i>\n No chunks match the current filter.\n </div>\n }\n </div>\n }\n</div>\n"]}
|