@memberjunction/ng-dashboards 5.35.0 → 5.37.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
|
@@ -24,641 +24,624 @@ import * as i0 from "@angular/core";
|
|
|
24
24
|
import * as i1 from "@angular/forms";
|
|
25
25
|
import * as i2 from "@memberjunction/ng-shared-generic";
|
|
26
26
|
import * as i3 from "@memberjunction/ng-ui-components";
|
|
27
|
-
const _forTrack0 = ($index, $item) => $item.
|
|
28
|
-
const _forTrack1 = ($index, $item) => $item.
|
|
29
|
-
const _forTrack2 = ($index, $item) => $item.
|
|
30
|
-
const _forTrack3 = ($index, $item) => $item.
|
|
31
|
-
const _forTrack4 = ($index, $item) => $item.
|
|
32
|
-
const _forTrack5 = ($index, $item) => $item.RunID;
|
|
27
|
+
const _forTrack0 = ($index, $item) => $item.Name;
|
|
28
|
+
const _forTrack1 = ($index, $item) => $item.Label;
|
|
29
|
+
const _forTrack2 = ($index, $item) => $item.EntityName;
|
|
30
|
+
const _forTrack3 = ($index, $item) => $item.TagAName + $item.TagBName;
|
|
31
|
+
const _forTrack4 = ($index, $item) => $item.RunID;
|
|
33
32
|
function AnalyticsResourceComponent_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
34
33
|
i0.ɵɵelementStart(0, "div", 4);
|
|
35
34
|
i0.ɵɵelement(1, "mj-loading", 6);
|
|
36
35
|
i0.ɵɵelementEnd();
|
|
37
36
|
} }
|
|
38
|
-
function
|
|
39
|
-
const _r1 = i0.ɵɵgetCurrentView();
|
|
40
|
-
i0.ɵɵelementStart(0, "button", 18);
|
|
41
|
-
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_For_4_Template_button_click_0_listener() { const nav_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.SelectTab(nav_r2.ID)); });
|
|
42
|
-
i0.ɵɵelement(1, "i");
|
|
43
|
-
i0.ɵɵtext(2);
|
|
44
|
-
i0.ɵɵelementEnd();
|
|
45
|
-
} if (rf & 2) {
|
|
46
|
-
const nav_r2 = ctx.$implicit;
|
|
47
|
-
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
48
|
-
i0.ɵɵclassProp("active", ctx_r2.ActiveTab === nav_r2.ID);
|
|
49
|
-
i0.ɵɵadvance();
|
|
50
|
-
i0.ɵɵclassMap(nav_r2.Icon);
|
|
51
|
-
i0.ɵɵadvance();
|
|
52
|
-
i0.ɵɵtextInterpolate1(" ", nav_r2.Label, " ");
|
|
53
|
-
} }
|
|
54
|
-
function AnalyticsResourceComponent_Conditional_6_For_12_Template(rf, ctx) { if (rf & 1) {
|
|
37
|
+
function AnalyticsResourceComponent_Conditional_6_For_8_Template(rf, ctx) { if (rf & 1) {
|
|
55
38
|
i0.ɵɵelementStart(0, "span");
|
|
56
39
|
i0.ɵɵtext(1);
|
|
57
40
|
i0.ɵɵelementEnd();
|
|
58
41
|
} if (rf & 2) {
|
|
59
|
-
const
|
|
60
|
-
i0.ɵɵstyleProp("font-size",
|
|
42
|
+
const tag_r3 = ctx.$implicit;
|
|
43
|
+
i0.ɵɵstyleProp("font-size", tag_r3.Size, "px")("font-weight", tag_r3.Weight);
|
|
61
44
|
i0.ɵɵadvance();
|
|
62
|
-
i0.ɵɵtextInterpolate(
|
|
45
|
+
i0.ɵɵtextInterpolate(tag_r3.Name);
|
|
63
46
|
} }
|
|
64
|
-
function
|
|
65
|
-
i0.ɵɵelementStart(0, "span",
|
|
47
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
48
|
+
i0.ɵɵelementStart(0, "span", 12);
|
|
66
49
|
i0.ɵɵtext(1, "No trending tags yet");
|
|
67
50
|
i0.ɵɵelementEnd();
|
|
68
51
|
} }
|
|
69
|
-
function
|
|
70
|
-
const
|
|
71
|
-
i0.ɵɵelementStart(0, "button",
|
|
72
|
-
i0.ɵɵlistener("click", function
|
|
52
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_For_8_Template(rf, ctx) { if (rf & 1) {
|
|
53
|
+
const _r5 = i0.ɵɵgetCurrentView();
|
|
54
|
+
i0.ɵɵelementStart(0, "button", 70);
|
|
55
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_12_For_8_Template_button_click_0_listener() { const range_r6 = i0.ɵɵrestoreView(_r5).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.SetDateRange(range_r6.Label)); });
|
|
73
56
|
i0.ɵɵtext(1);
|
|
74
57
|
i0.ɵɵelementEnd();
|
|
75
58
|
} if (rf & 2) {
|
|
76
|
-
const
|
|
77
|
-
const
|
|
78
|
-
i0.ɵɵclassProp("active",
|
|
59
|
+
const range_r6 = ctx.$implicit;
|
|
60
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
61
|
+
i0.ɵɵclassProp("active", ctx_r1.ActiveDateRange === range_r6.Label);
|
|
79
62
|
i0.ɵɵadvance();
|
|
80
|
-
i0.ɵɵtextInterpolate(
|
|
63
|
+
i0.ɵɵtextInterpolate(range_r6.Label);
|
|
81
64
|
} }
|
|
82
|
-
function
|
|
83
|
-
i0.ɵɵelementStart(0, "option",
|
|
65
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_For_11_Template(rf, ctx) { if (rf & 1) {
|
|
66
|
+
i0.ɵɵelementStart(0, "option", 21);
|
|
84
67
|
i0.ɵɵtext(1);
|
|
85
68
|
i0.ɵɵelementEnd();
|
|
86
69
|
} if (rf & 2) {
|
|
87
|
-
const
|
|
88
|
-
i0.ɵɵproperty("value",
|
|
70
|
+
const opt_r7 = ctx.$implicit;
|
|
71
|
+
i0.ɵɵproperty("value", opt_r7);
|
|
89
72
|
i0.ɵɵadvance();
|
|
90
|
-
i0.ɵɵtextInterpolate(
|
|
73
|
+
i0.ɵɵtextInterpolate(opt_r7);
|
|
91
74
|
} }
|
|
92
|
-
function
|
|
93
|
-
i0.ɵɵelement(0, "i",
|
|
75
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_For_14_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
76
|
+
i0.ɵɵelement(0, "i", 75);
|
|
94
77
|
} }
|
|
95
|
-
function
|
|
96
|
-
i0.ɵɵelement(0, "i",
|
|
78
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_For_14_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
79
|
+
i0.ɵɵelement(0, "i", 76);
|
|
97
80
|
} }
|
|
98
|
-
function
|
|
99
|
-
const
|
|
100
|
-
i0.ɵɵelementStart(0, "div",
|
|
101
|
-
i0.ɵɵlistener("click", function
|
|
102
|
-
i0.ɵɵelementStart(1, "div")(2, "div",
|
|
81
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_For_14_Template(rf, ctx) { if (rf & 1) {
|
|
82
|
+
const _r8 = i0.ɵɵgetCurrentView();
|
|
83
|
+
i0.ɵɵelementStart(0, "div", 71);
|
|
84
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_12_For_14_Template_div_click_0_listener() { const kpi_r9 = i0.ɵɵrestoreView(_r8).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OpenDrillDown(kpi_r9.DrillDownKey)); });
|
|
85
|
+
i0.ɵɵelementStart(1, "div")(2, "div", 72);
|
|
103
86
|
i0.ɵɵtext(3);
|
|
104
87
|
i0.ɵɵelementEnd();
|
|
105
|
-
i0.ɵɵelementStart(4, "div",
|
|
88
|
+
i0.ɵɵelementStart(4, "div", 73);
|
|
106
89
|
i0.ɵɵtext(5);
|
|
107
90
|
i0.ɵɵelementEnd();
|
|
108
|
-
i0.ɵɵelementStart(6, "div",
|
|
109
|
-
i0.ɵɵconditionalCreate(7,
|
|
91
|
+
i0.ɵɵelementStart(6, "div", 74);
|
|
92
|
+
i0.ɵɵconditionalCreate(7, AnalyticsResourceComponent_Conditional_6_Conditional_12_For_14_Conditional_7_Template, 1, 0, "i", 75)(8, AnalyticsResourceComponent_Conditional_6_Conditional_12_For_14_Conditional_8_Template, 1, 0, "i", 76);
|
|
110
93
|
i0.ɵɵtext(9);
|
|
111
94
|
i0.ɵɵelementEnd()();
|
|
112
|
-
i0.ɵɵelementStart(10, "div",
|
|
95
|
+
i0.ɵɵelementStart(10, "div", 77);
|
|
113
96
|
i0.ɵɵnamespaceSVG();
|
|
114
|
-
i0.ɵɵelementStart(11, "svg",
|
|
115
|
-
i0.ɵɵelement(12, "polyline",
|
|
97
|
+
i0.ɵɵelementStart(11, "svg", 78);
|
|
98
|
+
i0.ɵɵelement(12, "polyline", 79);
|
|
116
99
|
i0.ɵɵelementEnd()()();
|
|
117
100
|
} if (rf & 2) {
|
|
118
|
-
const
|
|
101
|
+
const kpi_r9 = ctx.$implicit;
|
|
119
102
|
i0.ɵɵadvance(3);
|
|
120
|
-
i0.ɵɵtextInterpolate(
|
|
103
|
+
i0.ɵɵtextInterpolate(kpi_r9.Label);
|
|
121
104
|
i0.ɵɵadvance(2);
|
|
122
|
-
i0.ɵɵtextInterpolate(
|
|
105
|
+
i0.ɵɵtextInterpolate(kpi_r9.Value);
|
|
123
106
|
i0.ɵɵadvance();
|
|
124
|
-
i0.ɵɵclassProp("up",
|
|
107
|
+
i0.ɵɵclassProp("up", kpi_r9.DeltaDirection === "up")("down", kpi_r9.DeltaDirection === "down");
|
|
125
108
|
i0.ɵɵadvance();
|
|
126
|
-
i0.ɵɵconditional(
|
|
109
|
+
i0.ɵɵconditional(kpi_r9.DeltaDirection === "up" ? 7 : kpi_r9.DeltaDirection === "down" ? 8 : -1);
|
|
127
110
|
i0.ɵɵadvance(2);
|
|
128
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
111
|
+
i0.ɵɵtextInterpolate1(" ", kpi_r9.Delta, " ");
|
|
129
112
|
i0.ɵɵadvance(3);
|
|
130
|
-
i0.ɵɵattribute("points",
|
|
113
|
+
i0.ɵɵattribute("points", kpi_r9.SparklinePoints)("stroke", kpi_r9.SparklineColor);
|
|
131
114
|
} }
|
|
132
|
-
function
|
|
133
|
-
const
|
|
134
|
-
i0.ɵɵelementStart(0, "button",
|
|
135
|
-
i0.ɵɵlistener("click", function
|
|
136
|
-
i0.ɵɵelement(1, "i",
|
|
115
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
116
|
+
const _r11 = i0.ɵɵgetCurrentView();
|
|
117
|
+
i0.ɵɵelementStart(0, "button", 90);
|
|
118
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.ExportDrillDownCSV()); });
|
|
119
|
+
i0.ɵɵelement(1, "i", 91);
|
|
137
120
|
i0.ɵɵtext(2, " CSV ");
|
|
138
121
|
i0.ɵɵelementEnd();
|
|
139
122
|
} }
|
|
140
|
-
function
|
|
141
|
-
i0.ɵɵelement(0, "mj-loading",
|
|
123
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
124
|
+
i0.ɵɵelement(0, "mj-loading", 87);
|
|
142
125
|
} }
|
|
143
|
-
function
|
|
126
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Conditional_10_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
144
127
|
i0.ɵɵelementStart(0, "th");
|
|
145
128
|
i0.ɵɵtext(1);
|
|
146
129
|
i0.ɵɵelementEnd();
|
|
147
130
|
} if (rf & 2) {
|
|
148
|
-
const
|
|
131
|
+
const col_r12 = ctx.$implicit;
|
|
149
132
|
i0.ɵɵadvance();
|
|
150
|
-
i0.ɵɵtextInterpolate(
|
|
133
|
+
i0.ɵɵtextInterpolate(col_r12);
|
|
151
134
|
} }
|
|
152
|
-
function
|
|
153
|
-
i0.ɵɵelement(0, "th",
|
|
135
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Conditional_10_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
136
|
+
i0.ɵɵelement(0, "th", 93);
|
|
154
137
|
} }
|
|
155
|
-
function
|
|
138
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Conditional_10_For_9_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
156
139
|
i0.ɵɵelementStart(0, "td");
|
|
157
140
|
i0.ɵɵtext(1);
|
|
158
141
|
i0.ɵɵelementEnd();
|
|
159
142
|
} if (rf & 2) {
|
|
160
|
-
const
|
|
161
|
-
const
|
|
143
|
+
const col_r13 = ctx.$implicit;
|
|
144
|
+
const row_r14 = i0.ɵɵnextContext().$implicit;
|
|
162
145
|
i0.ɵɵadvance();
|
|
163
|
-
i0.ɵɵtextInterpolate(
|
|
146
|
+
i0.ɵɵtextInterpolate(row_r14[col_r13]);
|
|
164
147
|
} }
|
|
165
|
-
function
|
|
166
|
-
const
|
|
167
|
-
i0.ɵɵelementStart(0, "button",
|
|
168
|
-
i0.ɵɵlistener("click", function
|
|
169
|
-
i0.ɵɵelement(1, "i",
|
|
148
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Conditional_10_For_9_Conditional_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
149
|
+
const _r15 = i0.ɵɵgetCurrentView();
|
|
150
|
+
i0.ɵɵelementStart(0, "button", 95);
|
|
151
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Conditional_10_For_9_Conditional_3_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r15); const row_r14 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.OpenDrillDownRecord(row_r14)); });
|
|
152
|
+
i0.ɵɵelement(1, "i", 96);
|
|
170
153
|
i0.ɵɵelementEnd();
|
|
171
154
|
} }
|
|
172
|
-
function
|
|
173
|
-
i0.ɵɵelementStart(0, "td",
|
|
174
|
-
i0.ɵɵconditionalCreate(1,
|
|
155
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Conditional_10_For_9_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
156
|
+
i0.ɵɵelementStart(0, "td", 93);
|
|
157
|
+
i0.ɵɵconditionalCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Conditional_10_For_9_Conditional_3_Conditional_1_Template, 2, 0, "button", 94);
|
|
175
158
|
i0.ɵɵelementEnd();
|
|
176
159
|
} if (rf & 2) {
|
|
177
|
-
const
|
|
160
|
+
const row_r14 = i0.ɵɵnextContext().$implicit;
|
|
178
161
|
i0.ɵɵadvance();
|
|
179
|
-
i0.ɵɵconditional(
|
|
162
|
+
i0.ɵɵconditional(row_r14["_RecordID"] ? 1 : -1);
|
|
180
163
|
} }
|
|
181
|
-
function
|
|
164
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Conditional_10_For_9_Template(rf, ctx) { if (rf & 1) {
|
|
182
165
|
i0.ɵɵelementStart(0, "tr");
|
|
183
|
-
i0.ɵɵrepeaterCreate(1,
|
|
184
|
-
i0.ɵɵconditionalCreate(3,
|
|
166
|
+
i0.ɵɵrepeaterCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Conditional_10_For_9_For_2_Template, 2, 1, "td", null, i0.ɵɵrepeaterTrackByIdentity);
|
|
167
|
+
i0.ɵɵconditionalCreate(3, AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Conditional_10_For_9_Conditional_3_Template, 2, 1, "td", 93);
|
|
185
168
|
i0.ɵɵelementEnd();
|
|
186
169
|
} if (rf & 2) {
|
|
187
|
-
const
|
|
170
|
+
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
188
171
|
i0.ɵɵadvance();
|
|
189
|
-
i0.ɵɵrepeater(
|
|
172
|
+
i0.ɵɵrepeater(ctx_r1.DrillDownColumns);
|
|
190
173
|
i0.ɵɵadvance(2);
|
|
191
|
-
i0.ɵɵconditional(
|
|
174
|
+
i0.ɵɵconditional(ctx_r1.DrillDownHasActions ? 3 : -1);
|
|
192
175
|
} }
|
|
193
|
-
function
|
|
194
|
-
i0.ɵɵelementStart(0, "div",
|
|
195
|
-
i0.ɵɵrepeaterCreate(4,
|
|
196
|
-
i0.ɵɵconditionalCreate(6,
|
|
176
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
177
|
+
i0.ɵɵelementStart(0, "div", 88)(1, "table", 92)(2, "thead")(3, "tr");
|
|
178
|
+
i0.ɵɵrepeaterCreate(4, AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Conditional_10_For_5_Template, 2, 1, "th", null, i0.ɵɵrepeaterTrackByIdentity);
|
|
179
|
+
i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Conditional_10_Conditional_6_Template, 1, 0, "th", 93);
|
|
197
180
|
i0.ɵɵelementEnd()();
|
|
198
181
|
i0.ɵɵelementStart(7, "tbody");
|
|
199
|
-
i0.ɵɵrepeaterCreate(8,
|
|
182
|
+
i0.ɵɵrepeaterCreate(8, AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Conditional_10_For_9_Template, 4, 1, "tr", null, i0.ɵɵcomponentInstance().TrackByIndex, true);
|
|
200
183
|
i0.ɵɵelementEnd()()();
|
|
201
184
|
} if (rf & 2) {
|
|
202
|
-
const
|
|
185
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
203
186
|
i0.ɵɵadvance(4);
|
|
204
|
-
i0.ɵɵrepeater(
|
|
187
|
+
i0.ɵɵrepeater(ctx_r1.DrillDownColumns);
|
|
205
188
|
i0.ɵɵadvance(2);
|
|
206
|
-
i0.ɵɵconditional(
|
|
189
|
+
i0.ɵɵconditional(ctx_r1.DrillDownHasActions ? 6 : -1);
|
|
207
190
|
i0.ɵɵadvance(2);
|
|
208
|
-
i0.ɵɵrepeater(
|
|
191
|
+
i0.ɵɵrepeater(ctx_r1.DrillDownData);
|
|
209
192
|
} }
|
|
210
|
-
function
|
|
211
|
-
i0.ɵɵelementStart(0, "div",
|
|
193
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
194
|
+
i0.ɵɵelementStart(0, "div", 89);
|
|
212
195
|
i0.ɵɵtext(1, "No data available");
|
|
213
196
|
i0.ɵɵelementEnd();
|
|
214
197
|
} }
|
|
215
|
-
function
|
|
216
|
-
const
|
|
217
|
-
i0.ɵɵelementStart(0, "div",
|
|
218
|
-
i0.ɵɵelement(3, "i",
|
|
198
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
199
|
+
const _r10 = i0.ɵɵgetCurrentView();
|
|
200
|
+
i0.ɵɵelementStart(0, "div", 24)(1, "div", 80)(2, "span", 81);
|
|
201
|
+
i0.ɵɵelement(3, "i", 82);
|
|
219
202
|
i0.ɵɵtext(4, " Detail View");
|
|
220
203
|
i0.ɵɵelementEnd();
|
|
221
|
-
i0.ɵɵelementStart(5, "div",
|
|
222
|
-
i0.ɵɵconditionalCreate(6,
|
|
223
|
-
i0.ɵɵelementStart(7, "button",
|
|
224
|
-
i0.ɵɵlistener("click", function
|
|
225
|
-
i0.ɵɵelement(8, "i",
|
|
204
|
+
i0.ɵɵelementStart(5, "div", 83);
|
|
205
|
+
i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Conditional_6_Template, 3, 0, "button", 84);
|
|
206
|
+
i0.ɵɵelementStart(7, "button", 85);
|
|
207
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.CloseDrillDown()); });
|
|
208
|
+
i0.ɵɵelement(8, "i", 86);
|
|
226
209
|
i0.ɵɵelementEnd()()();
|
|
227
|
-
i0.ɵɵconditionalCreate(9,
|
|
210
|
+
i0.ɵɵconditionalCreate(9, AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Conditional_9_Template, 1, 0, "mj-loading", 87)(10, AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Conditional_10_Template, 10, 1, "div", 88)(11, AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Conditional_11_Template, 2, 0, "div", 89);
|
|
228
211
|
i0.ɵɵelementEnd();
|
|
229
212
|
} if (rf & 2) {
|
|
230
|
-
const
|
|
213
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
231
214
|
i0.ɵɵadvance(6);
|
|
232
|
-
i0.ɵɵconditional(
|
|
215
|
+
i0.ɵɵconditional(ctx_r1.DrillDownData.length > 0 ? 6 : -1);
|
|
233
216
|
i0.ɵɵadvance(3);
|
|
234
|
-
i0.ɵɵconditional(
|
|
217
|
+
i0.ɵɵconditional(ctx_r1.IsDrillDownLoading ? 9 : ctx_r1.DrillDownData.length > 0 ? 10 : 11);
|
|
235
218
|
} }
|
|
236
|
-
function
|
|
237
|
-
i0.ɵɵelementStart(0, "div",
|
|
219
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_For_23_Template(rf, ctx) { if (rf & 1) {
|
|
220
|
+
i0.ɵɵelementStart(0, "div", 30)(1, "div", 97);
|
|
238
221
|
i0.ɵɵtext(2);
|
|
239
222
|
i0.ɵɵelementEnd();
|
|
240
|
-
i0.ɵɵelement(3, "div",
|
|
241
|
-
i0.ɵɵelementStart(4, "div",
|
|
223
|
+
i0.ɵɵelement(3, "div", 98);
|
|
224
|
+
i0.ɵɵelementStart(4, "div", 99);
|
|
242
225
|
i0.ɵɵtext(5);
|
|
243
226
|
i0.ɵɵelementEnd()();
|
|
244
227
|
} if (rf & 2) {
|
|
245
|
-
const
|
|
228
|
+
const bar_r16 = ctx.$implicit;
|
|
246
229
|
i0.ɵɵadvance(2);
|
|
247
|
-
i0.ɵɵtextInterpolate(
|
|
230
|
+
i0.ɵɵtextInterpolate(bar_r16.Count);
|
|
248
231
|
i0.ɵɵadvance();
|
|
249
|
-
i0.ɵɵstyleProp("height",
|
|
232
|
+
i0.ɵɵstyleProp("height", bar_r16.Percentage, "%")("opacity", 0.5 + bar_r16.Percentage / 200);
|
|
250
233
|
i0.ɵɵadvance(2);
|
|
251
|
-
i0.ɵɵtextInterpolate(
|
|
234
|
+
i0.ɵɵtextInterpolate(bar_r16.Label);
|
|
252
235
|
} }
|
|
253
|
-
function
|
|
254
|
-
i0.ɵɵelementStart(0, "div",
|
|
236
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_For_30_Template(rf, ctx) { if (rf & 1) {
|
|
237
|
+
i0.ɵɵelementStart(0, "div", 33);
|
|
255
238
|
i0.ɵɵnamespaceSVG();
|
|
256
|
-
i0.ɵɵelementStart(1, "svg",
|
|
257
|
-
i0.ɵɵelement(2, "circle",
|
|
258
|
-
i0.ɵɵelementStart(4, "text",
|
|
239
|
+
i0.ɵɵelementStart(1, "svg", 100);
|
|
240
|
+
i0.ɵɵelement(2, "circle", 101)(3, "circle", 102);
|
|
241
|
+
i0.ɵɵelementStart(4, "text", 103);
|
|
259
242
|
i0.ɵɵtext(5);
|
|
260
243
|
i0.ɵɵelementEnd()();
|
|
261
244
|
i0.ɵɵnamespaceHTML();
|
|
262
|
-
i0.ɵɵelementStart(6, "div")(7, "div",
|
|
245
|
+
i0.ɵɵelementStart(6, "div")(7, "div", 104);
|
|
263
246
|
i0.ɵɵtext(8);
|
|
264
247
|
i0.ɵɵelementEnd();
|
|
265
|
-
i0.ɵɵelementStart(9, "div",
|
|
248
|
+
i0.ɵɵelementStart(9, "div", 105);
|
|
266
249
|
i0.ɵɵtext(10);
|
|
267
250
|
i0.ɵɵelementEnd()()();
|
|
268
251
|
} if (rf & 2) {
|
|
269
|
-
const
|
|
270
|
-
const
|
|
252
|
+
const entity_r17 = ctx.$implicit;
|
|
253
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
271
254
|
i0.ɵɵadvance(3);
|
|
272
|
-
i0.ɵɵattribute("stroke",
|
|
255
|
+
i0.ɵɵattribute("stroke", entity_r17.Color)("stroke-dasharray", entity_r17.StrokeDash);
|
|
273
256
|
i0.ɵɵadvance(2);
|
|
274
|
-
i0.ɵɵtextInterpolate1("",
|
|
257
|
+
i0.ɵɵtextInterpolate1("", entity_r17.Percentage, "%");
|
|
275
258
|
i0.ɵɵadvance(3);
|
|
276
|
-
i0.ɵɵtextInterpolate(
|
|
259
|
+
i0.ɵɵtextInterpolate(entity_r17.Name);
|
|
277
260
|
i0.ɵɵadvance(2);
|
|
278
|
-
i0.ɵɵtextInterpolate2("",
|
|
261
|
+
i0.ɵɵtextInterpolate2("", ctx_r1.FormatNumber(entity_r17.Tagged), " / ", ctx_r1.FormatNumber(entity_r17.Total));
|
|
279
262
|
} }
|
|
280
|
-
function
|
|
281
|
-
i0.ɵɵelementStart(0, "div",
|
|
263
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_31_Template(rf, ctx) { if (rf & 1) {
|
|
264
|
+
i0.ɵɵelementStart(0, "div", 34);
|
|
282
265
|
i0.ɵɵtext(1, "No content types found");
|
|
283
266
|
i0.ɵɵelementEnd();
|
|
284
267
|
} }
|
|
285
|
-
function
|
|
286
|
-
i0.ɵɵelement(0, "div",
|
|
268
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_For_54_Template(rf, ctx) { if (rf & 1) {
|
|
269
|
+
i0.ɵɵelement(0, "div", 106);
|
|
287
270
|
} if (rf & 2) {
|
|
288
|
-
const
|
|
289
|
-
i0.ɵɵstyleProp("height",
|
|
290
|
-
i0.ɵɵproperty("title",
|
|
271
|
+
const bin_r18 = ctx.$implicit;
|
|
272
|
+
i0.ɵɵstyleProp("height", bin_r18.Height, "px")("background", bin_r18.Color);
|
|
273
|
+
i0.ɵɵproperty("title", bin_r18.Title);
|
|
291
274
|
} }
|
|
292
|
-
function
|
|
293
|
-
i0.ɵɵelementStart(0, "div",
|
|
275
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_For_63_Template(rf, ctx) { if (rf & 1) {
|
|
276
|
+
i0.ɵɵelementStart(0, "div", 52)(1, "div", 107);
|
|
294
277
|
i0.ɵɵtext(2);
|
|
295
278
|
i0.ɵɵelementEnd();
|
|
296
|
-
i0.ɵɵelementStart(3, "div",
|
|
279
|
+
i0.ɵɵelementStart(3, "div", 108)(4, "div", 109);
|
|
297
280
|
i0.ɵɵtext(5);
|
|
298
281
|
i0.ɵɵelementEnd()()();
|
|
299
282
|
} if (rf & 2) {
|
|
300
|
-
const
|
|
283
|
+
const source_r19 = ctx.$implicit;
|
|
301
284
|
i0.ɵɵadvance(2);
|
|
302
|
-
i0.ɵɵtextInterpolate(
|
|
285
|
+
i0.ɵɵtextInterpolate(source_r19.Name);
|
|
303
286
|
i0.ɵɵadvance(2);
|
|
304
|
-
i0.ɵɵstyleProp("width",
|
|
287
|
+
i0.ɵɵstyleProp("width", source_r19.Percentage, "%")("background", source_r19.Color);
|
|
305
288
|
i0.ɵɵadvance();
|
|
306
|
-
i0.ɵɵtextInterpolate(
|
|
289
|
+
i0.ɵɵtextInterpolate(source_r19.AvgTagsPerItem);
|
|
307
290
|
} }
|
|
308
|
-
function
|
|
309
|
-
i0.ɵɵelementStart(0, "div",
|
|
291
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_64_Template(rf, ctx) { if (rf & 1) {
|
|
292
|
+
i0.ɵɵelementStart(0, "div", 34);
|
|
310
293
|
i0.ɵɵtext(1, "No source data");
|
|
311
294
|
i0.ɵɵelementEnd();
|
|
312
295
|
} }
|
|
313
|
-
function
|
|
314
|
-
i0.ɵɵelementStart(0, "div",
|
|
296
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_For_73_Template(rf, ctx) { if (rf & 1) {
|
|
297
|
+
i0.ɵɵelementStart(0, "div", 110)(1, "span", 111);
|
|
315
298
|
i0.ɵɵtext(2);
|
|
316
299
|
i0.ɵɵelementEnd()();
|
|
317
300
|
} if (rf & 2) {
|
|
318
|
-
const
|
|
319
|
-
i0.ɵɵstyleProp("height",
|
|
301
|
+
const day_r20 = ctx.$implicit;
|
|
302
|
+
i0.ɵɵstyleProp("height", day_r20.Percentage, "%")("background", day_r20.IsError ? "var(--mj-status-error)" : "var(--mj-status-success)");
|
|
320
303
|
i0.ɵɵadvance(2);
|
|
321
|
-
i0.ɵɵtextInterpolate(
|
|
304
|
+
i0.ɵɵtextInterpolate(day_r20.Label);
|
|
322
305
|
} }
|
|
323
|
-
function
|
|
306
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_For_89_Template(rf, ctx) { if (rf & 1) {
|
|
324
307
|
i0.ɵɵnamespaceSVG();
|
|
325
|
-
i0.ɵɵelement(0, "circle",
|
|
308
|
+
i0.ɵɵelement(0, "circle", 65);
|
|
326
309
|
} if (rf & 2) {
|
|
327
|
-
const
|
|
328
|
-
i0.ɵɵattribute("stroke",
|
|
310
|
+
const seg_r21 = ctx.$implicit;
|
|
311
|
+
i0.ɵɵattribute("stroke", seg_r21.Color)("stroke-dasharray", seg_r21.StrokeDash)("stroke-dashoffset", seg_r21.StrokeOffset);
|
|
329
312
|
} }
|
|
330
|
-
function
|
|
331
|
-
i0.ɵɵelementStart(0, "div",
|
|
313
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_For_96_Template(rf, ctx) { if (rf & 1) {
|
|
314
|
+
i0.ɵɵelementStart(0, "div", 112);
|
|
332
315
|
i0.ɵɵtext(1);
|
|
333
316
|
i0.ɵɵelementStart(2, "small");
|
|
334
317
|
i0.ɵɵtext(3);
|
|
335
318
|
i0.ɵɵelementEnd()();
|
|
336
319
|
} if (rf & 2) {
|
|
337
|
-
const
|
|
338
|
-
i0.ɵɵstyleProp("background",
|
|
320
|
+
const stat_r22 = ctx.$implicit;
|
|
321
|
+
i0.ɵɵstyleProp("background", stat_r22.BgColor)("color", stat_r22.Color);
|
|
339
322
|
i0.ɵɵadvance();
|
|
340
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
323
|
+
i0.ɵɵtextInterpolate1(" ", stat_r22.Count);
|
|
341
324
|
i0.ɵɵadvance(2);
|
|
342
|
-
i0.ɵɵtextInterpolate(
|
|
325
|
+
i0.ɵɵtextInterpolate(stat_r22.Label);
|
|
343
326
|
} }
|
|
344
|
-
function
|
|
345
|
-
i0.ɵɵelement(0, "mj-loading",
|
|
327
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_97_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
328
|
+
i0.ɵɵelement(0, "mj-loading", 87);
|
|
346
329
|
} }
|
|
347
|
-
function
|
|
330
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_97_Conditional_8_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
348
331
|
i0.ɵɵelementStart(0, "th");
|
|
349
332
|
i0.ɵɵtext(1);
|
|
350
333
|
i0.ɵɵelementEnd();
|
|
351
334
|
} if (rf & 2) {
|
|
352
|
-
const
|
|
335
|
+
const col_r24 = ctx.$implicit;
|
|
353
336
|
i0.ɵɵadvance();
|
|
354
|
-
i0.ɵɵtextInterpolate(
|
|
337
|
+
i0.ɵɵtextInterpolate(col_r24);
|
|
355
338
|
} }
|
|
356
|
-
function
|
|
357
|
-
i0.ɵɵelement(0, "th",
|
|
339
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_97_Conditional_8_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
340
|
+
i0.ɵɵelement(0, "th", 93);
|
|
358
341
|
} }
|
|
359
|
-
function
|
|
342
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_97_Conditional_8_For_9_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
360
343
|
i0.ɵɵelementStart(0, "td");
|
|
361
344
|
i0.ɵɵtext(1);
|
|
362
345
|
i0.ɵɵelementEnd();
|
|
363
346
|
} if (rf & 2) {
|
|
364
|
-
const
|
|
365
|
-
const
|
|
347
|
+
const col_r25 = ctx.$implicit;
|
|
348
|
+
const row_r26 = i0.ɵɵnextContext().$implicit;
|
|
366
349
|
i0.ɵɵadvance();
|
|
367
|
-
i0.ɵɵtextInterpolate(
|
|
350
|
+
i0.ɵɵtextInterpolate(row_r26[col_r25]);
|
|
368
351
|
} }
|
|
369
|
-
function
|
|
370
|
-
const
|
|
371
|
-
i0.ɵɵelementStart(0, "button",
|
|
372
|
-
i0.ɵɵlistener("click", function
|
|
373
|
-
i0.ɵɵelement(1, "i",
|
|
352
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_97_Conditional_8_For_9_Conditional_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
353
|
+
const _r27 = i0.ɵɵgetCurrentView();
|
|
354
|
+
i0.ɵɵelementStart(0, "button", 95);
|
|
355
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_97_Conditional_8_For_9_Conditional_3_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r27); const row_r26 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.OpenDrillDownRecord(row_r26)); });
|
|
356
|
+
i0.ɵɵelement(1, "i", 96);
|
|
374
357
|
i0.ɵɵelementEnd();
|
|
375
358
|
} }
|
|
376
|
-
function
|
|
377
|
-
i0.ɵɵelementStart(0, "td",
|
|
378
|
-
i0.ɵɵconditionalCreate(1,
|
|
359
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_97_Conditional_8_For_9_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
360
|
+
i0.ɵɵelementStart(0, "td", 93);
|
|
361
|
+
i0.ɵɵconditionalCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_97_Conditional_8_For_9_Conditional_3_Conditional_1_Template, 2, 0, "button", 94);
|
|
379
362
|
i0.ɵɵelementEnd();
|
|
380
363
|
} if (rf & 2) {
|
|
381
|
-
const
|
|
364
|
+
const row_r26 = i0.ɵɵnextContext().$implicit;
|
|
382
365
|
i0.ɵɵadvance();
|
|
383
|
-
i0.ɵɵconditional(
|
|
366
|
+
i0.ɵɵconditional(row_r26["_RecordID"] ? 1 : -1);
|
|
384
367
|
} }
|
|
385
|
-
function
|
|
368
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_97_Conditional_8_For_9_Template(rf, ctx) { if (rf & 1) {
|
|
386
369
|
i0.ɵɵelementStart(0, "tr");
|
|
387
|
-
i0.ɵɵrepeaterCreate(1,
|
|
388
|
-
i0.ɵɵconditionalCreate(3,
|
|
370
|
+
i0.ɵɵrepeaterCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_97_Conditional_8_For_9_For_2_Template, 2, 1, "td", null, i0.ɵɵrepeaterTrackByIdentity);
|
|
371
|
+
i0.ɵɵconditionalCreate(3, AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_97_Conditional_8_For_9_Conditional_3_Template, 2, 1, "td", 93);
|
|
389
372
|
i0.ɵɵelementEnd();
|
|
390
373
|
} if (rf & 2) {
|
|
391
|
-
const
|
|
374
|
+
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
392
375
|
i0.ɵɵadvance();
|
|
393
|
-
i0.ɵɵrepeater(
|
|
376
|
+
i0.ɵɵrepeater(ctx_r1.DrillDownColumns);
|
|
394
377
|
i0.ɵɵadvance(2);
|
|
395
|
-
i0.ɵɵconditional(
|
|
378
|
+
i0.ɵɵconditional(ctx_r1.DrillDownHasActions ? 3 : -1);
|
|
396
379
|
} }
|
|
397
|
-
function
|
|
398
|
-
i0.ɵɵelementStart(0, "div",
|
|
399
|
-
i0.ɵɵrepeaterCreate(4,
|
|
400
|
-
i0.ɵɵconditionalCreate(6,
|
|
380
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_97_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
381
|
+
i0.ɵɵelementStart(0, "div", 88)(1, "table", 92)(2, "thead")(3, "tr");
|
|
382
|
+
i0.ɵɵrepeaterCreate(4, AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_97_Conditional_8_For_5_Template, 2, 1, "th", null, i0.ɵɵrepeaterTrackByIdentity);
|
|
383
|
+
i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_97_Conditional_8_Conditional_6_Template, 1, 0, "th", 93);
|
|
401
384
|
i0.ɵɵelementEnd()();
|
|
402
385
|
i0.ɵɵelementStart(7, "tbody");
|
|
403
|
-
i0.ɵɵrepeaterCreate(8,
|
|
386
|
+
i0.ɵɵrepeaterCreate(8, AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_97_Conditional_8_For_9_Template, 4, 1, "tr", null, i0.ɵɵcomponentInstance().TrackByIndex, true);
|
|
404
387
|
i0.ɵɵelementEnd()()();
|
|
405
388
|
} if (rf & 2) {
|
|
406
|
-
const
|
|
389
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
407
390
|
i0.ɵɵadvance(4);
|
|
408
|
-
i0.ɵɵrepeater(
|
|
391
|
+
i0.ɵɵrepeater(ctx_r1.DrillDownColumns);
|
|
409
392
|
i0.ɵɵadvance(2);
|
|
410
|
-
i0.ɵɵconditional(
|
|
393
|
+
i0.ɵɵconditional(ctx_r1.DrillDownHasActions ? 6 : -1);
|
|
411
394
|
i0.ɵɵadvance(2);
|
|
412
|
-
i0.ɵɵrepeater(
|
|
395
|
+
i0.ɵɵrepeater(ctx_r1.DrillDownData);
|
|
413
396
|
} }
|
|
414
|
-
function
|
|
415
|
-
i0.ɵɵelementStart(0, "div",
|
|
397
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_97_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
398
|
+
i0.ɵɵelementStart(0, "div", 89);
|
|
416
399
|
i0.ɵɵtext(1, "No data available");
|
|
417
400
|
i0.ɵɵelementEnd();
|
|
418
401
|
} }
|
|
419
|
-
function
|
|
420
|
-
const
|
|
421
|
-
i0.ɵɵelementStart(0, "div",
|
|
422
|
-
i0.ɵɵelement(3, "i",
|
|
402
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_97_Template(rf, ctx) { if (rf & 1) {
|
|
403
|
+
const _r23 = i0.ɵɵgetCurrentView();
|
|
404
|
+
i0.ɵɵelementStart(0, "div", 24)(1, "div", 80)(2, "span", 81);
|
|
405
|
+
i0.ɵɵelement(3, "i", 82);
|
|
423
406
|
i0.ɵɵtext(4);
|
|
424
407
|
i0.ɵɵelementEnd();
|
|
425
|
-
i0.ɵɵelementStart(5, "button",
|
|
426
|
-
i0.ɵɵlistener("click", function
|
|
427
|
-
i0.ɵɵelement(6, "i",
|
|
408
|
+
i0.ɵɵelementStart(5, "button", 85);
|
|
409
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_97_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r23); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.CloseDrillDown()); });
|
|
410
|
+
i0.ɵɵelement(6, "i", 86);
|
|
428
411
|
i0.ɵɵelementEnd()();
|
|
429
|
-
i0.ɵɵconditionalCreate(7,
|
|
412
|
+
i0.ɵɵconditionalCreate(7, AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_97_Conditional_7_Template, 1, 0, "mj-loading", 87)(8, AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_97_Conditional_8_Template, 10, 1, "div", 88)(9, AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_97_Conditional_9_Template, 2, 0, "div", 89);
|
|
430
413
|
i0.ɵɵelementEnd();
|
|
431
414
|
} if (rf & 2) {
|
|
432
|
-
const
|
|
415
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
433
416
|
i0.ɵɵadvance(4);
|
|
434
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
417
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.DrillDownTarget, " Detail");
|
|
435
418
|
i0.ɵɵadvance(3);
|
|
436
|
-
i0.ɵɵconditional(
|
|
419
|
+
i0.ɵɵconditional(ctx_r1.IsDrillDownLoading ? 7 : ctx_r1.DrillDownData.length > 0 ? 8 : 9);
|
|
437
420
|
} }
|
|
438
|
-
function
|
|
439
|
-
const
|
|
440
|
-
i0.ɵɵelementStart(0, "section",
|
|
441
|
-
i0.ɵɵelement(2, "i",
|
|
421
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
422
|
+
const _r4 = i0.ɵɵgetCurrentView();
|
|
423
|
+
i0.ɵɵelementStart(0, "section", 14)(1, "div", 15);
|
|
424
|
+
i0.ɵɵelement(2, "i", 16);
|
|
442
425
|
i0.ɵɵelementStart(3, "h1");
|
|
443
426
|
i0.ɵɵtext(4, "Overview");
|
|
444
427
|
i0.ɵɵelementEnd()();
|
|
445
|
-
i0.ɵɵelementStart(5, "div",
|
|
446
|
-
i0.ɵɵrepeaterCreate(7,
|
|
428
|
+
i0.ɵɵelementStart(5, "div", 17)(6, "div", 18);
|
|
429
|
+
i0.ɵɵrepeaterCreate(7, AnalyticsResourceComponent_Conditional_6_Conditional_12_For_8_Template, 2, 3, "button", 19, _forTrack1);
|
|
447
430
|
i0.ɵɵelementEnd();
|
|
448
|
-
i0.ɵɵelementStart(9, "select",
|
|
449
|
-
i0.ɵɵlistener("ngModelChange", function
|
|
450
|
-
i0.ɵɵrepeaterCreate(10,
|
|
431
|
+
i0.ɵɵelementStart(9, "select", 20);
|
|
432
|
+
i0.ɵɵlistener("ngModelChange", function AnalyticsResourceComponent_Conditional_6_Conditional_12_Template_select_ngModelChange_9_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.SetEntityFilter($event)); });
|
|
433
|
+
i0.ɵɵrepeaterCreate(10, AnalyticsResourceComponent_Conditional_6_Conditional_12_For_11_Template, 2, 2, "option", 21, i0.ɵɵrepeaterTrackByIdentity);
|
|
451
434
|
i0.ɵɵelementEnd()();
|
|
452
|
-
i0.ɵɵelementStart(12, "div",
|
|
453
|
-
i0.ɵɵrepeaterCreate(13,
|
|
454
|
-
i0.ɵɵelementEnd();
|
|
455
|
-
i0.ɵɵconditionalCreate(15,
|
|
456
|
-
i0.ɵɵelementStart(16, "div",
|
|
457
|
-
i0.ɵɵlistener("click", function
|
|
458
|
-
i0.ɵɵelementStart(18, "div",
|
|
459
|
-
i0.ɵɵelement(19, "i",
|
|
435
|
+
i0.ɵɵelementStart(12, "div", 22);
|
|
436
|
+
i0.ɵɵrepeaterCreate(13, AnalyticsResourceComponent_Conditional_6_Conditional_12_For_14_Template, 13, 10, "div", 23, _forTrack1);
|
|
437
|
+
i0.ɵɵelementEnd();
|
|
438
|
+
i0.ɵɵconditionalCreate(15, AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Template, 12, 2, "div", 24);
|
|
439
|
+
i0.ɵɵelementStart(16, "div", 25)(17, "div", 26);
|
|
440
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_12_Template_div_click_17_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OpenDrillDown("tagGrowth")); });
|
|
441
|
+
i0.ɵɵelementStart(18, "div", 27);
|
|
442
|
+
i0.ɵɵelement(19, "i", 28);
|
|
460
443
|
i0.ɵɵtext(20, " Tag Growth");
|
|
461
444
|
i0.ɵɵelementEnd();
|
|
462
|
-
i0.ɵɵelementStart(21, "div",
|
|
463
|
-
i0.ɵɵrepeaterCreate(22,
|
|
445
|
+
i0.ɵɵelementStart(21, "div", 29);
|
|
446
|
+
i0.ɵɵrepeaterCreate(22, AnalyticsResourceComponent_Conditional_6_Conditional_12_For_23_Template, 6, 6, "div", 30, _forTrack1);
|
|
464
447
|
i0.ɵɵelementEnd()();
|
|
465
|
-
i0.ɵɵelementStart(24, "div",
|
|
466
|
-
i0.ɵɵlistener("click", function
|
|
467
|
-
i0.ɵɵelementStart(25, "div",
|
|
468
|
-
i0.ɵɵelement(26, "i",
|
|
448
|
+
i0.ɵɵelementStart(24, "div", 26);
|
|
449
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_12_Template_div_click_24_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OpenDrillDown("contentCoverage")); });
|
|
450
|
+
i0.ɵɵelementStart(25, "div", 27);
|
|
451
|
+
i0.ɵɵelement(26, "i", 31);
|
|
469
452
|
i0.ɵɵtext(27, " Content Coverage");
|
|
470
453
|
i0.ɵɵelementEnd();
|
|
471
|
-
i0.ɵɵelementStart(28, "div",
|
|
472
|
-
i0.ɵɵrepeaterCreate(29,
|
|
473
|
-
i0.ɵɵconditionalCreate(31,
|
|
454
|
+
i0.ɵɵelementStart(28, "div", 32);
|
|
455
|
+
i0.ɵɵrepeaterCreate(29, AnalyticsResourceComponent_Conditional_6_Conditional_12_For_30_Template, 11, 6, "div", 33, _forTrack0);
|
|
456
|
+
i0.ɵɵconditionalCreate(31, AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_31_Template, 2, 0, "div", 34);
|
|
474
457
|
i0.ɵɵelementEnd()();
|
|
475
|
-
i0.ɵɵelementStart(32, "div",
|
|
476
|
-
i0.ɵɵlistener("click", function
|
|
477
|
-
i0.ɵɵelementStart(33, "div",
|
|
478
|
-
i0.ɵɵelement(34, "i",
|
|
458
|
+
i0.ɵɵelementStart(32, "div", 26);
|
|
459
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_12_Template_div_click_32_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OpenDrillDown("qualityScore")); });
|
|
460
|
+
i0.ɵɵelementStart(33, "div", 27);
|
|
461
|
+
i0.ɵɵelement(34, "i", 35);
|
|
479
462
|
i0.ɵɵtext(35, " Quality Score");
|
|
480
463
|
i0.ɵɵelementEnd();
|
|
481
|
-
i0.ɵɵelementStart(36, "div",
|
|
464
|
+
i0.ɵɵelementStart(36, "div", 36);
|
|
482
465
|
i0.ɵɵnamespaceSVG();
|
|
483
|
-
i0.ɵɵelementStart(37, "svg",
|
|
484
|
-
i0.ɵɵelement(38, "path",
|
|
485
|
-
i0.ɵɵelementStart(42, "text",
|
|
466
|
+
i0.ɵɵelementStart(37, "svg", 37);
|
|
467
|
+
i0.ɵɵelement(38, "path", 38)(39, "path", 39)(40, "path", 40)(41, "path", 41);
|
|
468
|
+
i0.ɵɵelementStart(42, "text", 42);
|
|
486
469
|
i0.ɵɵtext(43);
|
|
487
470
|
i0.ɵɵelementEnd();
|
|
488
|
-
i0.ɵɵelementStart(44, "text",
|
|
471
|
+
i0.ɵɵelementStart(44, "text", 43);
|
|
489
472
|
i0.ɵɵtext(45, "out of 100");
|
|
490
473
|
i0.ɵɵelementEnd();
|
|
491
|
-
i0.ɵɵelementStart(46, "text",
|
|
474
|
+
i0.ɵɵelementStart(46, "text", 44);
|
|
492
475
|
i0.ɵɵtext(47, "0");
|
|
493
476
|
i0.ɵɵelementEnd();
|
|
494
|
-
i0.ɵɵelementStart(48, "text",
|
|
477
|
+
i0.ɵɵelementStart(48, "text", 45);
|
|
495
478
|
i0.ɵɵtext(49, "50");
|
|
496
479
|
i0.ɵɵelementEnd();
|
|
497
|
-
i0.ɵɵelementStart(50, "text",
|
|
480
|
+
i0.ɵɵelementStart(50, "text", 46);
|
|
498
481
|
i0.ɵɵtext(51, "100");
|
|
499
482
|
i0.ɵɵelementEnd()()();
|
|
500
483
|
i0.ɵɵnamespaceHTML();
|
|
501
|
-
i0.ɵɵelementStart(52, "div",
|
|
502
|
-
i0.ɵɵrepeaterCreate(53,
|
|
484
|
+
i0.ɵɵelementStart(52, "div", 47);
|
|
485
|
+
i0.ɵɵrepeaterCreate(53, AnalyticsResourceComponent_Conditional_6_Conditional_12_For_54_Template, 1, 5, "div", 48, i0.ɵɵcomponentInstance().TrackByIndex, true);
|
|
503
486
|
i0.ɵɵelementEnd();
|
|
504
|
-
i0.ɵɵelementStart(55, "div",
|
|
487
|
+
i0.ɵɵelementStart(55, "div", 49);
|
|
505
488
|
i0.ɵɵtext(56, "Confidence Distribution");
|
|
506
489
|
i0.ɵɵelementEnd()();
|
|
507
|
-
i0.ɵɵelementStart(57, "div",
|
|
508
|
-
i0.ɵɵlistener("click", function
|
|
509
|
-
i0.ɵɵelementStart(58, "div",
|
|
510
|
-
i0.ɵɵelement(59, "i",
|
|
490
|
+
i0.ɵɵelementStart(57, "div", 26);
|
|
491
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_12_Template_div_click_57_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OpenDrillDown("sourcePerformance")); });
|
|
492
|
+
i0.ɵɵelementStart(58, "div", 27);
|
|
493
|
+
i0.ɵɵelement(59, "i", 50);
|
|
511
494
|
i0.ɵɵtext(60, " Source Performance");
|
|
512
495
|
i0.ɵɵelementEnd();
|
|
513
|
-
i0.ɵɵelementStart(61, "div",
|
|
514
|
-
i0.ɵɵrepeaterCreate(62,
|
|
515
|
-
i0.ɵɵconditionalCreate(64,
|
|
496
|
+
i0.ɵɵelementStart(61, "div", 51);
|
|
497
|
+
i0.ɵɵrepeaterCreate(62, AnalyticsResourceComponent_Conditional_6_Conditional_12_For_63_Template, 6, 6, "div", 52, _forTrack0);
|
|
498
|
+
i0.ɵɵconditionalCreate(64, AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_64_Template, 2, 0, "div", 34);
|
|
516
499
|
i0.ɵɵelementEnd();
|
|
517
|
-
i0.ɵɵelementStart(65, "div",
|
|
500
|
+
i0.ɵɵelementStart(65, "div", 53);
|
|
518
501
|
i0.ɵɵtext(66, "Average tags per item");
|
|
519
502
|
i0.ɵɵelementEnd()();
|
|
520
|
-
i0.ɵɵelementStart(67, "div",
|
|
521
|
-
i0.ɵɵlistener("click", function
|
|
522
|
-
i0.ɵɵelementStart(68, "div",
|
|
523
|
-
i0.ɵɵelement(69, "i",
|
|
503
|
+
i0.ɵɵelementStart(67, "div", 26);
|
|
504
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_12_Template_div_click_67_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OpenDrillDown("dailyThroughput")); });
|
|
505
|
+
i0.ɵɵelementStart(68, "div", 27);
|
|
506
|
+
i0.ɵɵelement(69, "i", 54);
|
|
524
507
|
i0.ɵɵtext(70, " Daily Throughput");
|
|
525
508
|
i0.ɵɵelementEnd();
|
|
526
|
-
i0.ɵɵelementStart(71, "div",
|
|
527
|
-
i0.ɵɵrepeaterCreate(72,
|
|
509
|
+
i0.ɵɵelementStart(71, "div", 55);
|
|
510
|
+
i0.ɵɵrepeaterCreate(72, AnalyticsResourceComponent_Conditional_6_Conditional_12_For_73_Template, 3, 5, "div", 56, _forTrack1);
|
|
528
511
|
i0.ɵɵelementEnd();
|
|
529
|
-
i0.ɵɵelementStart(74, "div",
|
|
530
|
-
i0.ɵɵelement(76, "div",
|
|
512
|
+
i0.ɵɵelementStart(74, "div", 57)(75, "div", 58);
|
|
513
|
+
i0.ɵɵelement(76, "div", 59);
|
|
531
514
|
i0.ɵɵtext(77, " Success");
|
|
532
515
|
i0.ɵɵelementEnd();
|
|
533
|
-
i0.ɵɵelementStart(78, "div",
|
|
534
|
-
i0.ɵɵelement(79, "div",
|
|
516
|
+
i0.ɵɵelementStart(78, "div", 58);
|
|
517
|
+
i0.ɵɵelement(79, "div", 60);
|
|
535
518
|
i0.ɵɵtext(80, " Failures");
|
|
536
519
|
i0.ɵɵelementEnd()()();
|
|
537
|
-
i0.ɵɵelementStart(81, "div",
|
|
538
|
-
i0.ɵɵlistener("click", function
|
|
539
|
-
i0.ɵɵelementStart(82, "div",
|
|
540
|
-
i0.ɵɵelement(83, "i",
|
|
520
|
+
i0.ɵɵelementStart(81, "div", 26);
|
|
521
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_12_Template_div_click_81_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OpenDrillDown("taxonomyHealth")); });
|
|
522
|
+
i0.ɵɵelementStart(82, "div", 27);
|
|
523
|
+
i0.ɵɵelement(83, "i", 61);
|
|
541
524
|
i0.ɵɵtext(84, " Taxonomy Health");
|
|
542
525
|
i0.ɵɵelementEnd();
|
|
543
|
-
i0.ɵɵelementStart(85, "div",
|
|
526
|
+
i0.ɵɵelementStart(85, "div", 62);
|
|
544
527
|
i0.ɵɵnamespaceSVG();
|
|
545
|
-
i0.ɵɵelementStart(86, "svg",
|
|
546
|
-
i0.ɵɵelement(87, "circle",
|
|
547
|
-
i0.ɵɵrepeaterCreate(88,
|
|
548
|
-
i0.ɵɵelementStart(90, "text",
|
|
528
|
+
i0.ɵɵelementStart(86, "svg", 63);
|
|
529
|
+
i0.ɵɵelement(87, "circle", 64);
|
|
530
|
+
i0.ɵɵrepeaterCreate(88, AnalyticsResourceComponent_Conditional_6_Conditional_12_For_89_Template, 1, 3, ":svg:circle", 65, i0.ɵɵcomponentInstance().TrackByIndex, true);
|
|
531
|
+
i0.ɵɵelementStart(90, "text", 66);
|
|
549
532
|
i0.ɵɵtext(91);
|
|
550
533
|
i0.ɵɵelementEnd();
|
|
551
|
-
i0.ɵɵelementStart(92, "text",
|
|
534
|
+
i0.ɵɵelementStart(92, "text", 67);
|
|
552
535
|
i0.ɵɵtext(93, "total tags");
|
|
553
536
|
i0.ɵɵelementEnd()()();
|
|
554
537
|
i0.ɵɵnamespaceHTML();
|
|
555
|
-
i0.ɵɵelementStart(94, "div",
|
|
556
|
-
i0.ɵɵrepeaterCreate(95,
|
|
538
|
+
i0.ɵɵelementStart(94, "div", 68);
|
|
539
|
+
i0.ɵɵrepeaterCreate(95, AnalyticsResourceComponent_Conditional_6_Conditional_12_For_96_Template, 4, 6, "div", 69, _forTrack1);
|
|
557
540
|
i0.ɵɵelementEnd()()();
|
|
558
|
-
i0.ɵɵconditionalCreate(97,
|
|
541
|
+
i0.ɵɵconditionalCreate(97, AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_97_Template, 10, 2, "div", 24);
|
|
559
542
|
i0.ɵɵelementEnd();
|
|
560
543
|
} if (rf & 2) {
|
|
561
|
-
const
|
|
544
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
562
545
|
i0.ɵɵadvance(7);
|
|
563
|
-
i0.ɵɵrepeater(
|
|
546
|
+
i0.ɵɵrepeater(ctx_r1.DateRanges);
|
|
564
547
|
i0.ɵɵadvance(2);
|
|
565
|
-
i0.ɵɵproperty("ngModel",
|
|
548
|
+
i0.ɵɵproperty("ngModel", ctx_r1.EntityFilter);
|
|
566
549
|
i0.ɵɵadvance();
|
|
567
|
-
i0.ɵɵrepeater(
|
|
550
|
+
i0.ɵɵrepeater(ctx_r1.EntityFilterOptions);
|
|
568
551
|
i0.ɵɵadvance(3);
|
|
569
|
-
i0.ɵɵrepeater(
|
|
552
|
+
i0.ɵɵrepeater(ctx_r1.KPIs);
|
|
570
553
|
i0.ɵɵadvance(2);
|
|
571
|
-
i0.ɵɵconditional(
|
|
554
|
+
i0.ɵɵconditional(ctx_r1.DrillDownTarget && ctx_r1.DrillDownTarget.startsWith("kpi-") ? 15 : -1);
|
|
572
555
|
i0.ɵɵadvance(7);
|
|
573
|
-
i0.ɵɵrepeater(
|
|
556
|
+
i0.ɵɵrepeater(ctx_r1.TagGrowthData);
|
|
574
557
|
i0.ɵɵadvance(7);
|
|
575
|
-
i0.ɵɵrepeater(
|
|
558
|
+
i0.ɵɵrepeater(ctx_r1.CoverageData);
|
|
576
559
|
i0.ɵɵadvance(2);
|
|
577
|
-
i0.ɵɵconditional(
|
|
560
|
+
i0.ɵɵconditional(ctx_r1.CoverageData.length === 0 ? 31 : -1);
|
|
578
561
|
i0.ɵɵadvance(12);
|
|
579
|
-
i0.ɵɵtextInterpolate(
|
|
562
|
+
i0.ɵɵtextInterpolate(ctx_r1.QualityScore);
|
|
580
563
|
i0.ɵɵadvance(10);
|
|
581
|
-
i0.ɵɵrepeater(
|
|
564
|
+
i0.ɵɵrepeater(ctx_r1.MiniConfidenceBins);
|
|
582
565
|
i0.ɵɵadvance(9);
|
|
583
|
-
i0.ɵɵrepeater(
|
|
566
|
+
i0.ɵɵrepeater(ctx_r1.SourcePerfData);
|
|
584
567
|
i0.ɵɵadvance(2);
|
|
585
|
-
i0.ɵɵconditional(
|
|
568
|
+
i0.ɵɵconditional(ctx_r1.SourcePerfData.length === 0 ? 64 : -1);
|
|
586
569
|
i0.ɵɵadvance(8);
|
|
587
|
-
i0.ɵɵrepeater(
|
|
570
|
+
i0.ɵɵrepeater(ctx_r1.ThroughputData);
|
|
588
571
|
i0.ɵɵadvance(16);
|
|
589
|
-
i0.ɵɵrepeater(
|
|
572
|
+
i0.ɵɵrepeater(ctx_r1.TaxonomyRingSegments);
|
|
590
573
|
i0.ɵɵadvance(3);
|
|
591
|
-
i0.ɵɵtextInterpolate(
|
|
574
|
+
i0.ɵɵtextInterpolate(ctx_r1.TaxonomyTotal);
|
|
592
575
|
i0.ɵɵadvance(4);
|
|
593
|
-
i0.ɵɵrepeater(
|
|
576
|
+
i0.ɵɵrepeater(ctx_r1.TaxonomyStats);
|
|
594
577
|
i0.ɵɵadvance(2);
|
|
595
|
-
i0.ɵɵconditional(
|
|
578
|
+
i0.ɵɵconditional(ctx_r1.DrillDownTarget && !ctx_r1.DrillDownTarget.startsWith("kpi-") ? 97 : -1);
|
|
596
579
|
} }
|
|
597
|
-
function
|
|
598
|
-
const
|
|
599
|
-
i0.ɵɵelementStart(0, "button",
|
|
600
|
-
i0.ɵɵlistener("click", function
|
|
601
|
-
i0.ɵɵelement(1, "i",
|
|
580
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
581
|
+
const _r29 = i0.ɵɵgetCurrentView();
|
|
582
|
+
i0.ɵɵelementStart(0, "button", 90);
|
|
583
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_10_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r29); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.ExportTabDataCSV("top-tags")); });
|
|
584
|
+
i0.ɵɵelement(1, "i", 91);
|
|
602
585
|
i0.ɵɵtext(2, " CSV ");
|
|
603
586
|
i0.ɵɵelementEnd();
|
|
604
587
|
} }
|
|
605
|
-
function
|
|
606
|
-
const
|
|
607
|
-
i0.ɵɵelementStart(0, "tr",
|
|
608
|
-
i0.ɵɵlistener("click", function
|
|
588
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_11_For_20_Template(rf, ctx) { if (rf & 1) {
|
|
589
|
+
const _r30 = i0.ɵɵgetCurrentView();
|
|
590
|
+
i0.ɵɵelementStart(0, "tr", 127);
|
|
591
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_11_For_20_Template_tr_click_0_listener() { const tag_r31 = i0.ɵɵrestoreView(_r30).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OpenDrillDown("tag-row:" + tag_r31.Name)); });
|
|
609
592
|
i0.ɵɵelementStart(1, "td");
|
|
610
593
|
i0.ɵɵtext(2);
|
|
611
594
|
i0.ɵɵelementEnd();
|
|
612
595
|
i0.ɵɵelementStart(3, "td")(4, "strong");
|
|
613
596
|
i0.ɵɵtext(5);
|
|
614
597
|
i0.ɵɵelementEnd()();
|
|
615
|
-
i0.ɵɵelementStart(6, "td",
|
|
598
|
+
i0.ɵɵelementStart(6, "td", 125);
|
|
616
599
|
i0.ɵɵtext(7);
|
|
617
600
|
i0.ɵɵelementEnd();
|
|
618
601
|
i0.ɵɵelementStart(8, "td");
|
|
619
|
-
i0.ɵɵelement(9, "span",
|
|
602
|
+
i0.ɵɵelement(9, "span", 128);
|
|
620
603
|
i0.ɵɵtext(10);
|
|
621
604
|
i0.ɵɵelementEnd();
|
|
622
605
|
i0.ɵɵelementStart(11, "td");
|
|
623
606
|
i0.ɵɵnamespaceSVG();
|
|
624
|
-
i0.ɵɵelementStart(12, "svg",
|
|
625
|
-
i0.ɵɵelement(13, "polyline",
|
|
607
|
+
i0.ɵɵelementStart(12, "svg", 129);
|
|
608
|
+
i0.ɵɵelement(13, "polyline", 130);
|
|
626
609
|
i0.ɵɵelementEnd()();
|
|
627
610
|
i0.ɵɵnamespaceHTML();
|
|
628
611
|
i0.ɵɵelementStart(14, "td");
|
|
629
612
|
i0.ɵɵtext(15);
|
|
630
613
|
i0.ɵɵelementEnd();
|
|
631
|
-
i0.ɵɵelementStart(16, "td",
|
|
614
|
+
i0.ɵɵelementStart(16, "td", 131);
|
|
632
615
|
i0.ɵɵtext(17);
|
|
633
616
|
i0.ɵɵelementEnd()();
|
|
634
617
|
} if (rf & 2) {
|
|
635
|
-
const
|
|
636
|
-
const
|
|
618
|
+
const tag_r31 = ctx.$implicit;
|
|
619
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
637
620
|
i0.ɵɵadvance(2);
|
|
638
|
-
i0.ɵɵtextInterpolate(
|
|
621
|
+
i0.ɵɵtextInterpolate(tag_r31.Rank);
|
|
639
622
|
i0.ɵɵadvance(3);
|
|
640
|
-
i0.ɵɵtextInterpolate(
|
|
623
|
+
i0.ɵɵtextInterpolate(tag_r31.Name);
|
|
641
624
|
i0.ɵɵadvance(2);
|
|
642
|
-
i0.ɵɵtextInterpolate(
|
|
625
|
+
i0.ɵɵtextInterpolate(ctx_r1.FormatNumber(tag_r31.UsageCount));
|
|
643
626
|
i0.ɵɵadvance(2);
|
|
644
|
-
i0.ɵɵstyleProp("width",
|
|
627
|
+
i0.ɵɵstyleProp("width", tag_r31.WeightBarWidth, "px")("background", tag_r31.WeightBarColor);
|
|
645
628
|
i0.ɵɵadvance();
|
|
646
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
629
|
+
i0.ɵɵtextInterpolate1(" ", tag_r31.AvgWeight, " ");
|
|
647
630
|
i0.ɵɵadvance(3);
|
|
648
|
-
i0.ɵɵattribute("points",
|
|
631
|
+
i0.ɵɵattribute("points", tag_r31.TrendPoints)("stroke", tag_r31.TrendColor);
|
|
649
632
|
i0.ɵɵadvance(2);
|
|
650
|
-
i0.ɵɵtextInterpolate(
|
|
633
|
+
i0.ɵɵtextInterpolate(tag_r31.TopEntity);
|
|
651
634
|
i0.ɵɵadvance(2);
|
|
652
|
-
i0.ɵɵtextInterpolate(
|
|
635
|
+
i0.ɵɵtextInterpolate(tag_r31.FirstSeen);
|
|
653
636
|
} }
|
|
654
|
-
function
|
|
655
|
-
i0.ɵɵelementStart(0, "div",
|
|
637
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
638
|
+
i0.ɵɵelementStart(0, "div", 117)(1, "table", 92)(2, "thead")(3, "tr")(4, "th");
|
|
656
639
|
i0.ɵɵtext(5, "#");
|
|
657
640
|
i0.ɵɵelementEnd();
|
|
658
641
|
i0.ɵɵelementStart(6, "th");
|
|
659
642
|
i0.ɵɵtext(7, "Tag Name");
|
|
660
643
|
i0.ɵɵelementEnd();
|
|
661
|
-
i0.ɵɵelementStart(8, "th",
|
|
644
|
+
i0.ɵɵelementStart(8, "th", 125);
|
|
662
645
|
i0.ɵɵtext(9, "Usage Count");
|
|
663
646
|
i0.ɵɵelementEnd();
|
|
664
647
|
i0.ɵɵelementStart(10, "th");
|
|
@@ -674,233 +657,233 @@ function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_11_
|
|
|
674
657
|
i0.ɵɵtext(17, "First Seen");
|
|
675
658
|
i0.ɵɵelementEnd()()();
|
|
676
659
|
i0.ɵɵelementStart(18, "tbody");
|
|
677
|
-
i0.ɵɵrepeaterCreate(19,
|
|
660
|
+
i0.ɵɵrepeaterCreate(19, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_11_For_20_Template, 18, 12, "tr", 126, _forTrack0);
|
|
678
661
|
i0.ɵɵelementEnd()()();
|
|
679
662
|
} if (rf & 2) {
|
|
680
|
-
const
|
|
663
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
681
664
|
i0.ɵɵadvance(19);
|
|
682
|
-
i0.ɵɵrepeater(
|
|
665
|
+
i0.ɵɵrepeater(ctx_r1.TopTags);
|
|
683
666
|
} }
|
|
684
|
-
function
|
|
685
|
-
i0.ɵɵelementStart(0, "div",
|
|
686
|
-
i0.ɵɵelement(1, "i",
|
|
667
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
668
|
+
i0.ɵɵelementStart(0, "div", 118);
|
|
669
|
+
i0.ɵɵelement(1, "i", 113);
|
|
687
670
|
i0.ɵɵelementStart(2, "p");
|
|
688
671
|
i0.ɵɵtext(3, "No tag data available yet. Process content to generate tags.");
|
|
689
672
|
i0.ɵɵelementEnd()();
|
|
690
673
|
} }
|
|
691
|
-
function
|
|
692
|
-
const
|
|
693
|
-
i0.ɵɵelementStart(0, "button",
|
|
694
|
-
i0.ɵɵlistener("click", function
|
|
695
|
-
i0.ɵɵelement(1, "i",
|
|
674
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
675
|
+
const _r33 = i0.ɵɵgetCurrentView();
|
|
676
|
+
i0.ɵɵelementStart(0, "button", 90);
|
|
677
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r33); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.ExportDrillDownCSV()); });
|
|
678
|
+
i0.ɵɵelement(1, "i", 91);
|
|
696
679
|
i0.ɵɵtext(2, " CSV ");
|
|
697
680
|
i0.ɵɵelementEnd();
|
|
698
681
|
} }
|
|
699
|
-
function
|
|
700
|
-
i0.ɵɵelement(0, "mj-loading",
|
|
682
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
683
|
+
i0.ɵɵelement(0, "mj-loading", 87);
|
|
701
684
|
} }
|
|
702
|
-
function
|
|
685
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Conditional_10_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
703
686
|
i0.ɵɵelementStart(0, "th");
|
|
704
687
|
i0.ɵɵtext(1);
|
|
705
688
|
i0.ɵɵelementEnd();
|
|
706
689
|
} if (rf & 2) {
|
|
707
|
-
const
|
|
690
|
+
const col_r34 = ctx.$implicit;
|
|
708
691
|
i0.ɵɵadvance();
|
|
709
|
-
i0.ɵɵtextInterpolate(
|
|
692
|
+
i0.ɵɵtextInterpolate(col_r34);
|
|
710
693
|
} }
|
|
711
|
-
function
|
|
712
|
-
i0.ɵɵelement(0, "th",
|
|
694
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Conditional_10_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
695
|
+
i0.ɵɵelement(0, "th", 93);
|
|
713
696
|
} }
|
|
714
|
-
function
|
|
697
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Conditional_10_For_9_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
715
698
|
i0.ɵɵelementStart(0, "td");
|
|
716
699
|
i0.ɵɵtext(1);
|
|
717
700
|
i0.ɵɵelementEnd();
|
|
718
701
|
} if (rf & 2) {
|
|
719
|
-
const
|
|
720
|
-
const
|
|
702
|
+
const col_r35 = ctx.$implicit;
|
|
703
|
+
const row_r36 = i0.ɵɵnextContext().$implicit;
|
|
721
704
|
i0.ɵɵadvance();
|
|
722
|
-
i0.ɵɵtextInterpolate(
|
|
705
|
+
i0.ɵɵtextInterpolate(row_r36[col_r35]);
|
|
723
706
|
} }
|
|
724
|
-
function
|
|
725
|
-
const
|
|
726
|
-
i0.ɵɵelementStart(0, "button",
|
|
727
|
-
i0.ɵɵlistener("click", function
|
|
728
|
-
i0.ɵɵelement(1, "i",
|
|
707
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Conditional_10_For_9_Conditional_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
708
|
+
const _r37 = i0.ɵɵgetCurrentView();
|
|
709
|
+
i0.ɵɵelementStart(0, "button", 133);
|
|
710
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Conditional_10_For_9_Conditional_3_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r37); const row_r36 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.OpenDrillDownRecord(row_r36)); });
|
|
711
|
+
i0.ɵɵelement(1, "i", 96);
|
|
729
712
|
i0.ɵɵelementEnd();
|
|
730
713
|
} }
|
|
731
|
-
function
|
|
732
|
-
i0.ɵɵelementStart(0, "td",
|
|
733
|
-
i0.ɵɵconditionalCreate(1,
|
|
714
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Conditional_10_For_9_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
715
|
+
i0.ɵɵelementStart(0, "td", 93);
|
|
716
|
+
i0.ɵɵconditionalCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Conditional_10_For_9_Conditional_3_Conditional_1_Template, 2, 0, "button", 132);
|
|
734
717
|
i0.ɵɵelementEnd();
|
|
735
718
|
} if (rf & 2) {
|
|
736
|
-
const
|
|
719
|
+
const row_r36 = i0.ɵɵnextContext().$implicit;
|
|
737
720
|
i0.ɵɵadvance();
|
|
738
|
-
i0.ɵɵconditional(
|
|
721
|
+
i0.ɵɵconditional(row_r36["_RecordID"] ? 1 : -1);
|
|
739
722
|
} }
|
|
740
|
-
function
|
|
723
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Conditional_10_For_9_Template(rf, ctx) { if (rf & 1) {
|
|
741
724
|
i0.ɵɵelementStart(0, "tr");
|
|
742
|
-
i0.ɵɵrepeaterCreate(1,
|
|
743
|
-
i0.ɵɵconditionalCreate(3,
|
|
725
|
+
i0.ɵɵrepeaterCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Conditional_10_For_9_For_2_Template, 2, 1, "td", null, i0.ɵɵrepeaterTrackByIdentity);
|
|
726
|
+
i0.ɵɵconditionalCreate(3, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Conditional_10_For_9_Conditional_3_Template, 2, 1, "td", 93);
|
|
744
727
|
i0.ɵɵelementEnd();
|
|
745
728
|
} if (rf & 2) {
|
|
746
|
-
const
|
|
729
|
+
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
747
730
|
i0.ɵɵadvance();
|
|
748
|
-
i0.ɵɵrepeater(
|
|
731
|
+
i0.ɵɵrepeater(ctx_r1.DrillDownColumns);
|
|
749
732
|
i0.ɵɵadvance(2);
|
|
750
|
-
i0.ɵɵconditional(
|
|
733
|
+
i0.ɵɵconditional(ctx_r1.DrillDownHasActions ? 3 : -1);
|
|
751
734
|
} }
|
|
752
|
-
function
|
|
753
|
-
i0.ɵɵelementStart(0, "div",
|
|
754
|
-
i0.ɵɵrepeaterCreate(4,
|
|
755
|
-
i0.ɵɵconditionalCreate(6,
|
|
735
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
736
|
+
i0.ɵɵelementStart(0, "div", 88)(1, "table", 92)(2, "thead")(3, "tr");
|
|
737
|
+
i0.ɵɵrepeaterCreate(4, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Conditional_10_For_5_Template, 2, 1, "th", null, i0.ɵɵrepeaterTrackByIdentity);
|
|
738
|
+
i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Conditional_10_Conditional_6_Template, 1, 0, "th", 93);
|
|
756
739
|
i0.ɵɵelementEnd()();
|
|
757
740
|
i0.ɵɵelementStart(7, "tbody");
|
|
758
|
-
i0.ɵɵrepeaterCreate(8,
|
|
741
|
+
i0.ɵɵrepeaterCreate(8, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Conditional_10_For_9_Template, 4, 1, "tr", null, i0.ɵɵcomponentInstance().TrackByIndex, true);
|
|
759
742
|
i0.ɵɵelementEnd()()();
|
|
760
743
|
} if (rf & 2) {
|
|
761
|
-
const
|
|
744
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
762
745
|
i0.ɵɵadvance(4);
|
|
763
|
-
i0.ɵɵrepeater(
|
|
746
|
+
i0.ɵɵrepeater(ctx_r1.DrillDownColumns);
|
|
764
747
|
i0.ɵɵadvance(2);
|
|
765
|
-
i0.ɵɵconditional(
|
|
748
|
+
i0.ɵɵconditional(ctx_r1.DrillDownHasActions ? 6 : -1);
|
|
766
749
|
i0.ɵɵadvance(2);
|
|
767
|
-
i0.ɵɵrepeater(
|
|
750
|
+
i0.ɵɵrepeater(ctx_r1.DrillDownData);
|
|
768
751
|
} }
|
|
769
|
-
function
|
|
770
|
-
i0.ɵɵelementStart(0, "div",
|
|
752
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
753
|
+
i0.ɵɵelementStart(0, "div", 89);
|
|
771
754
|
i0.ɵɵtext(1, "No items found for this tag");
|
|
772
755
|
i0.ɵɵelementEnd();
|
|
773
756
|
} }
|
|
774
|
-
function
|
|
775
|
-
const
|
|
776
|
-
i0.ɵɵelementStart(0, "div",
|
|
777
|
-
i0.ɵɵelement(3, "i",
|
|
757
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
758
|
+
const _r32 = i0.ɵɵgetCurrentView();
|
|
759
|
+
i0.ɵɵelementStart(0, "div", 24)(1, "div", 80)(2, "span", 81);
|
|
760
|
+
i0.ɵɵelement(3, "i", 82);
|
|
778
761
|
i0.ɵɵtext(4);
|
|
779
762
|
i0.ɵɵelementEnd();
|
|
780
|
-
i0.ɵɵelementStart(5, "div",
|
|
781
|
-
i0.ɵɵconditionalCreate(6,
|
|
782
|
-
i0.ɵɵelementStart(7, "button",
|
|
783
|
-
i0.ɵɵlistener("click", function
|
|
784
|
-
i0.ɵɵelement(8, "i",
|
|
763
|
+
i0.ɵɵelementStart(5, "div", 83);
|
|
764
|
+
i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Conditional_6_Template, 3, 0, "button", 84);
|
|
765
|
+
i0.ɵɵelementStart(7, "button", 85);
|
|
766
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r32); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.CloseDrillDown()); });
|
|
767
|
+
i0.ɵɵelement(8, "i", 86);
|
|
785
768
|
i0.ɵɵelementEnd()()();
|
|
786
|
-
i0.ɵɵconditionalCreate(9,
|
|
769
|
+
i0.ɵɵconditionalCreate(9, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Conditional_9_Template, 1, 0, "mj-loading", 87)(10, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Conditional_10_Template, 10, 1, "div", 88)(11, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Conditional_11_Template, 2, 0, "div", 89);
|
|
787
770
|
i0.ɵɵelementEnd();
|
|
788
771
|
} if (rf & 2) {
|
|
789
|
-
const
|
|
772
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
790
773
|
i0.ɵɵadvance(4);
|
|
791
|
-
i0.ɵɵtextInterpolate1(" Content Items Tagged \"",
|
|
774
|
+
i0.ɵɵtextInterpolate1(" Content Items Tagged \"", ctx_r1.DrillDownTarget.replace("tag-row:", ""), "\"");
|
|
792
775
|
i0.ɵɵadvance(2);
|
|
793
|
-
i0.ɵɵconditional(
|
|
776
|
+
i0.ɵɵconditional(ctx_r1.DrillDownData.length > 0 ? 6 : -1);
|
|
794
777
|
i0.ɵɵadvance(3);
|
|
795
|
-
i0.ɵɵconditional(
|
|
778
|
+
i0.ɵɵconditional(ctx_r1.IsDrillDownLoading ? 9 : ctx_r1.DrillDownData.length > 0 ? 10 : 11);
|
|
796
779
|
} }
|
|
797
|
-
function
|
|
798
|
-
i0.ɵɵelementStart(0, "div",
|
|
780
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_14_For_6_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
781
|
+
i0.ɵɵelementStart(0, "div", 141);
|
|
799
782
|
i0.ɵɵtext(1);
|
|
800
783
|
i0.ɵɵelementEnd();
|
|
801
784
|
} if (rf & 2) {
|
|
802
|
-
const
|
|
803
|
-
i0.ɵɵstyleProp("width",
|
|
804
|
-
i0.ɵɵproperty("title",
|
|
785
|
+
const seg_r38 = ctx.$implicit;
|
|
786
|
+
i0.ɵɵstyleProp("width", seg_r38.Percentage, "%")("background", seg_r38.Color);
|
|
787
|
+
i0.ɵɵproperty("title", seg_r38.Label + ": " + seg_r38.Percentage + "%");
|
|
805
788
|
i0.ɵɵadvance();
|
|
806
|
-
i0.ɵɵtextInterpolate(
|
|
789
|
+
i0.ɵɵtextInterpolate(seg_r38.Label);
|
|
807
790
|
} }
|
|
808
|
-
function
|
|
809
|
-
i0.ɵɵelementStart(0, "div",
|
|
791
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_14_For_6_Template(rf, ctx) { if (rf & 1) {
|
|
792
|
+
i0.ɵɵelementStart(0, "div", 136)(1, "div", 138);
|
|
810
793
|
i0.ɵɵtext(2);
|
|
811
794
|
i0.ɵɵelementEnd();
|
|
812
|
-
i0.ɵɵelementStart(3, "div",
|
|
813
|
-
i0.ɵɵrepeaterCreate(4,
|
|
795
|
+
i0.ɵɵelementStart(3, "div", 139);
|
|
796
|
+
i0.ɵɵrepeaterCreate(4, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_14_For_6_For_5_Template, 2, 6, "div", 140, i0.ɵɵcomponentInstance().TrackByIndex, true);
|
|
814
797
|
i0.ɵɵelementEnd()();
|
|
815
798
|
} if (rf & 2) {
|
|
816
|
-
const
|
|
799
|
+
const row_r39 = ctx.$implicit;
|
|
817
800
|
i0.ɵɵadvance(2);
|
|
818
|
-
i0.ɵɵtextInterpolate(
|
|
801
|
+
i0.ɵɵtextInterpolate(row_r39.EntityName);
|
|
819
802
|
i0.ɵɵadvance(2);
|
|
820
|
-
i0.ɵɵrepeater(
|
|
803
|
+
i0.ɵɵrepeater(row_r39.Segments);
|
|
821
804
|
} }
|
|
822
|
-
function
|
|
823
|
-
i0.ɵɵelementStart(0, "div",
|
|
824
|
-
i0.ɵɵelement(1, "div",
|
|
805
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_14_For_9_Template(rf, ctx) { if (rf & 1) {
|
|
806
|
+
i0.ɵɵelementStart(0, "div", 58);
|
|
807
|
+
i0.ɵɵelement(1, "div", 142);
|
|
825
808
|
i0.ɵɵtext(2);
|
|
826
809
|
i0.ɵɵelementEnd();
|
|
827
810
|
} if (rf & 2) {
|
|
828
|
-
const
|
|
811
|
+
const item_r40 = ctx.$implicit;
|
|
829
812
|
i0.ɵɵadvance();
|
|
830
|
-
i0.ɵɵstyleProp("background",
|
|
813
|
+
i0.ɵɵstyleProp("background", item_r40.Color);
|
|
831
814
|
i0.ɵɵadvance();
|
|
832
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
815
|
+
i0.ɵɵtextInterpolate1(" ", item_r40.Label);
|
|
833
816
|
} }
|
|
834
|
-
function
|
|
835
|
-
i0.ɵɵelementStart(0, "div",
|
|
836
|
-
i0.ɵɵelement(2, "i",
|
|
817
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
818
|
+
i0.ɵɵelementStart(0, "div", 119)(1, "h3");
|
|
819
|
+
i0.ɵɵelement(2, "i", 134);
|
|
837
820
|
i0.ɵɵtext(3, " Tag Distribution by Entity");
|
|
838
821
|
i0.ɵɵelementEnd();
|
|
839
|
-
i0.ɵɵelementStart(4, "div",
|
|
840
|
-
i0.ɵɵrepeaterCreate(5,
|
|
822
|
+
i0.ɵɵelementStart(4, "div", 135);
|
|
823
|
+
i0.ɵɵrepeaterCreate(5, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_14_For_6_Template, 6, 1, "div", 136, _forTrack2);
|
|
841
824
|
i0.ɵɵelementEnd();
|
|
842
|
-
i0.ɵɵelementStart(7, "div",
|
|
843
|
-
i0.ɵɵrepeaterCreate(8,
|
|
825
|
+
i0.ɵɵelementStart(7, "div", 137);
|
|
826
|
+
i0.ɵɵrepeaterCreate(8, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_14_For_9_Template, 3, 3, "div", 58, _forTrack1);
|
|
844
827
|
i0.ɵɵelementEnd()();
|
|
845
828
|
} if (rf & 2) {
|
|
846
|
-
const
|
|
829
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
847
830
|
i0.ɵɵadvance(5);
|
|
848
|
-
i0.ɵɵrepeater(
|
|
831
|
+
i0.ɵɵrepeater(ctx_r1.EntityDistribution);
|
|
849
832
|
i0.ɵɵadvance(3);
|
|
850
|
-
i0.ɵɵrepeater(
|
|
833
|
+
i0.ɵɵrepeater(ctx_r1.DistributionLegend);
|
|
851
834
|
} }
|
|
852
|
-
function
|
|
853
|
-
i0.ɵɵelementStart(0, "div",
|
|
835
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_15_For_6_Template(rf, ctx) { if (rf & 1) {
|
|
836
|
+
i0.ɵɵelementStart(0, "div", 145)(1, "div", 147);
|
|
854
837
|
i0.ɵɵtext(2);
|
|
855
838
|
i0.ɵɵelementEnd();
|
|
856
|
-
i0.ɵɵelementStart(3, "div",
|
|
839
|
+
i0.ɵɵelementStart(3, "div", 148);
|
|
857
840
|
i0.ɵɵtext(4);
|
|
858
841
|
i0.ɵɵelementEnd()();
|
|
859
842
|
} if (rf & 2) {
|
|
860
|
-
const
|
|
843
|
+
const bar_r41 = ctx.$implicit;
|
|
861
844
|
i0.ɵɵadvance();
|
|
862
|
-
i0.ɵɵstyleProp("height",
|
|
845
|
+
i0.ɵɵstyleProp("height", bar_r41.Percentage, "%")("min-height", bar_r41.Count > 0 ? 24 : 0, "px");
|
|
863
846
|
i0.ɵɵadvance();
|
|
864
|
-
i0.ɵɵtextInterpolate(
|
|
847
|
+
i0.ɵɵtextInterpolate(bar_r41.Count);
|
|
865
848
|
i0.ɵɵadvance(2);
|
|
866
|
-
i0.ɵɵtextInterpolate(
|
|
849
|
+
i0.ɵɵtextInterpolate(bar_r41.Label);
|
|
867
850
|
} }
|
|
868
|
-
function
|
|
869
|
-
i0.ɵɵelementStart(0, "div",
|
|
870
|
-
i0.ɵɵelement(2, "i",
|
|
851
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
852
|
+
i0.ɵɵelementStart(0, "div", 119)(1, "h3");
|
|
853
|
+
i0.ɵɵelement(2, "i", 143);
|
|
871
854
|
i0.ɵɵtext(3, " Tag Depth Distribution");
|
|
872
855
|
i0.ɵɵelementEnd();
|
|
873
|
-
i0.ɵɵelementStart(4, "div",
|
|
874
|
-
i0.ɵɵrepeaterCreate(5,
|
|
856
|
+
i0.ɵɵelementStart(4, "div", 144);
|
|
857
|
+
i0.ɵɵrepeaterCreate(5, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_15_For_6_Template, 5, 6, "div", 145, _forTrack1);
|
|
875
858
|
i0.ɵɵelementEnd();
|
|
876
|
-
i0.ɵɵelementStart(7, "div",
|
|
859
|
+
i0.ɵɵelementStart(7, "div", 146);
|
|
877
860
|
i0.ɵɵtext(8, " Taxonomy hierarchy depth -- Most tags at depth 2-3 indicating a healthy mid-level structure ");
|
|
878
861
|
i0.ɵɵelementEnd()();
|
|
879
862
|
} if (rf & 2) {
|
|
880
|
-
const
|
|
863
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
881
864
|
i0.ɵɵadvance(5);
|
|
882
|
-
i0.ɵɵrepeater(
|
|
865
|
+
i0.ɵɵrepeater(ctx_r1.TagDepthBars);
|
|
883
866
|
} }
|
|
884
|
-
function
|
|
885
|
-
i0.ɵɵelementStart(0, "span",
|
|
886
|
-
i0.ɵɵelement(1, "i",
|
|
867
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_22_Template(rf, ctx) { if (rf & 1) {
|
|
868
|
+
i0.ɵɵelementStart(0, "span", 123);
|
|
869
|
+
i0.ɵɵelement(1, "i", 149);
|
|
887
870
|
i0.ɵɵtext(2);
|
|
888
871
|
i0.ɵɵelementEnd();
|
|
889
872
|
} if (rf & 2) {
|
|
890
|
-
const
|
|
873
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
891
874
|
i0.ɵɵadvance(2);
|
|
892
|
-
i0.ɵɵtextInterpolate1(" Last computed: ",
|
|
875
|
+
i0.ɵɵtextInterpolate1(" Last computed: ", ctx_r1.CoOccurrenceLastComputed, " ");
|
|
893
876
|
} }
|
|
894
|
-
function
|
|
895
|
-
i0.ɵɵelement(0, "i",
|
|
877
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_24_Template(rf, ctx) { if (rf & 1) {
|
|
878
|
+
i0.ɵɵelement(0, "i", 150);
|
|
896
879
|
i0.ɵɵtext(1, " Computing... ");
|
|
897
880
|
} }
|
|
898
|
-
function
|
|
899
|
-
i0.ɵɵelement(0, "i",
|
|
881
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
882
|
+
i0.ɵɵelement(0, "i", 151);
|
|
900
883
|
i0.ɵɵtext(1, " Recompute ");
|
|
901
884
|
} }
|
|
902
|
-
function
|
|
903
|
-
i0.ɵɵelementStart(0, "tr")(1, "td",
|
|
885
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_26_For_16_Template(rf, ctx) { if (rf & 1) {
|
|
886
|
+
i0.ɵɵelementStart(0, "tr")(1, "td", 131);
|
|
904
887
|
i0.ɵɵtext(2);
|
|
905
888
|
i0.ɵɵelementEnd();
|
|
906
889
|
i0.ɵɵelementStart(3, "td")(4, "strong");
|
|
@@ -909,29 +892,29 @@ function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_26_
|
|
|
909
892
|
i0.ɵɵelementStart(6, "td")(7, "strong");
|
|
910
893
|
i0.ɵɵtext(8);
|
|
911
894
|
i0.ɵɵelementEnd()();
|
|
912
|
-
i0.ɵɵelementStart(9, "td",
|
|
895
|
+
i0.ɵɵelementStart(9, "td", 125);
|
|
913
896
|
i0.ɵɵtext(10);
|
|
914
897
|
i0.ɵɵelementEnd();
|
|
915
898
|
i0.ɵɵelementStart(11, "td");
|
|
916
|
-
i0.ɵɵelement(12, "span",
|
|
899
|
+
i0.ɵɵelement(12, "span", 152);
|
|
917
900
|
i0.ɵɵelementEnd()();
|
|
918
901
|
} if (rf & 2) {
|
|
919
|
-
const
|
|
920
|
-
const ɵ$
|
|
921
|
-
const
|
|
902
|
+
const pair_r42 = ctx.$implicit;
|
|
903
|
+
const ɵ$index_655_r43 = ctx.$index;
|
|
904
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
922
905
|
i0.ɵɵadvance(2);
|
|
923
|
-
i0.ɵɵtextInterpolate(ɵ$
|
|
906
|
+
i0.ɵɵtextInterpolate(ɵ$index_655_r43 + 1);
|
|
924
907
|
i0.ɵɵadvance(3);
|
|
925
|
-
i0.ɵɵtextInterpolate(
|
|
908
|
+
i0.ɵɵtextInterpolate(pair_r42.TagAName);
|
|
926
909
|
i0.ɵɵadvance(3);
|
|
927
|
-
i0.ɵɵtextInterpolate(
|
|
910
|
+
i0.ɵɵtextInterpolate(pair_r42.TagBName);
|
|
928
911
|
i0.ɵɵadvance(2);
|
|
929
|
-
i0.ɵɵtextInterpolate(
|
|
912
|
+
i0.ɵɵtextInterpolate(ctx_r1.FormatNumber(pair_r42.Count));
|
|
930
913
|
i0.ɵɵadvance(2);
|
|
931
|
-
i0.ɵɵstyleProp("width",
|
|
914
|
+
i0.ɵɵstyleProp("width", pair_r42.BarWidth, "px");
|
|
932
915
|
} }
|
|
933
|
-
function
|
|
934
|
-
i0.ɵɵelementStart(0, "div",
|
|
916
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
917
|
+
i0.ɵɵelementStart(0, "div", 117)(1, "table", 92)(2, "thead")(3, "tr")(4, "th");
|
|
935
918
|
i0.ɵɵtext(5, "#");
|
|
936
919
|
i0.ɵɵelementEnd();
|
|
937
920
|
i0.ɵɵelementStart(6, "th");
|
|
@@ -940,151 +923,151 @@ function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_26_
|
|
|
940
923
|
i0.ɵɵelementStart(8, "th");
|
|
941
924
|
i0.ɵɵtext(9, "Tag B");
|
|
942
925
|
i0.ɵɵelementEnd();
|
|
943
|
-
i0.ɵɵelementStart(10, "th",
|
|
926
|
+
i0.ɵɵelementStart(10, "th", 125);
|
|
944
927
|
i0.ɵɵtext(11, "Co-Occurrences");
|
|
945
928
|
i0.ɵɵelementEnd();
|
|
946
929
|
i0.ɵɵelementStart(12, "th");
|
|
947
930
|
i0.ɵɵtext(13, "Frequency");
|
|
948
931
|
i0.ɵɵelementEnd()()();
|
|
949
932
|
i0.ɵɵelementStart(14, "tbody");
|
|
950
|
-
i0.ɵɵrepeaterCreate(15,
|
|
933
|
+
i0.ɵɵrepeaterCreate(15, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_26_For_16_Template, 13, 6, "tr", null, _forTrack3);
|
|
951
934
|
i0.ɵɵelementEnd()()();
|
|
952
935
|
} if (rf & 2) {
|
|
953
|
-
const
|
|
936
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
954
937
|
i0.ɵɵadvance(15);
|
|
955
|
-
i0.ɵɵrepeater(
|
|
938
|
+
i0.ɵɵrepeater(ctx_r1.CoOccurrencePairs);
|
|
956
939
|
} }
|
|
957
|
-
function
|
|
958
|
-
i0.ɵɵelementStart(0, "div",
|
|
959
|
-
i0.ɵɵelement(1, "i",
|
|
940
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_27_Template(rf, ctx) { if (rf & 1) {
|
|
941
|
+
i0.ɵɵelementStart(0, "div", 118);
|
|
942
|
+
i0.ɵɵelement(1, "i", 121);
|
|
960
943
|
i0.ɵɵelementStart(2, "p");
|
|
961
944
|
i0.ɵɵtext(3, "No co-occurrence data available yet. Process content and recompute to see which tags frequently appear together.");
|
|
962
945
|
i0.ɵɵelementEnd()();
|
|
963
946
|
} }
|
|
964
|
-
function
|
|
965
|
-
const
|
|
966
|
-
i0.ɵɵelementStart(0, "section",
|
|
967
|
-
i0.ɵɵelement(2, "i",
|
|
947
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
948
|
+
const _r28 = i0.ɵɵgetCurrentView();
|
|
949
|
+
i0.ɵɵelementStart(0, "section", 14)(1, "div", 15);
|
|
950
|
+
i0.ɵɵelement(2, "i", 113);
|
|
968
951
|
i0.ɵɵelementStart(3, "h1");
|
|
969
952
|
i0.ɵɵtext(4, "Tags");
|
|
970
953
|
i0.ɵɵelementEnd()();
|
|
971
|
-
i0.ɵɵelementStart(5, "div",
|
|
972
|
-
i0.ɵɵelement(8, "i",
|
|
954
|
+
i0.ɵɵelementStart(5, "div", 114)(6, "div", 115)(7, "h3");
|
|
955
|
+
i0.ɵɵelement(8, "i", 116);
|
|
973
956
|
i0.ɵɵtext(9, " Top 20 Tags");
|
|
974
957
|
i0.ɵɵelementEnd();
|
|
975
|
-
i0.ɵɵconditionalCreate(10,
|
|
958
|
+
i0.ɵɵconditionalCreate(10, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_10_Template, 3, 0, "button", 84);
|
|
976
959
|
i0.ɵɵelementEnd();
|
|
977
|
-
i0.ɵɵconditionalCreate(11,
|
|
960
|
+
i0.ɵɵconditionalCreate(11, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_11_Template, 21, 0, "div", 117)(12, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_12_Template, 4, 0, "div", 118);
|
|
978
961
|
i0.ɵɵelementEnd();
|
|
979
|
-
i0.ɵɵconditionalCreate(13,
|
|
980
|
-
i0.ɵɵconditionalCreate(14,
|
|
981
|
-
i0.ɵɵconditionalCreate(15,
|
|
982
|
-
i0.ɵɵelementStart(16, "div",
|
|
983
|
-
i0.ɵɵelement(19, "i",
|
|
962
|
+
i0.ɵɵconditionalCreate(13, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Template, 12, 3, "div", 24);
|
|
963
|
+
i0.ɵɵconditionalCreate(14, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_14_Template, 10, 0, "div", 119);
|
|
964
|
+
i0.ɵɵconditionalCreate(15, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_15_Template, 9, 0, "div", 119);
|
|
965
|
+
i0.ɵɵelementStart(16, "div", 120)(17, "div", 115)(18, "h3");
|
|
966
|
+
i0.ɵɵelement(19, "i", 121);
|
|
984
967
|
i0.ɵɵtext(20, " Frequently Paired Tags");
|
|
985
968
|
i0.ɵɵelementEnd();
|
|
986
|
-
i0.ɵɵelementStart(21, "div",
|
|
987
|
-
i0.ɵɵconditionalCreate(22,
|
|
988
|
-
i0.ɵɵelementStart(23, "button",
|
|
989
|
-
i0.ɵɵlistener("click", function
|
|
990
|
-
i0.ɵɵconditionalCreate(24,
|
|
969
|
+
i0.ɵɵelementStart(21, "div", 122);
|
|
970
|
+
i0.ɵɵconditionalCreate(22, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_22_Template, 3, 1, "span", 123);
|
|
971
|
+
i0.ɵɵelementStart(23, "button", 124);
|
|
972
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_13_Template_button_click_23_listener() { i0.ɵɵrestoreView(_r28); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.RecomputeCoOccurrence()); });
|
|
973
|
+
i0.ɵɵconditionalCreate(24, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_24_Template, 2, 0)(25, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_25_Template, 2, 0);
|
|
991
974
|
i0.ɵɵelementEnd()()();
|
|
992
|
-
i0.ɵɵconditionalCreate(26,
|
|
975
|
+
i0.ɵɵconditionalCreate(26, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_26_Template, 17, 0, "div", 117)(27, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_27_Template, 4, 0, "div", 118);
|
|
993
976
|
i0.ɵɵelementEnd()();
|
|
994
977
|
} if (rf & 2) {
|
|
995
|
-
const
|
|
978
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
996
979
|
i0.ɵɵadvance(10);
|
|
997
|
-
i0.ɵɵconditional(
|
|
980
|
+
i0.ɵɵconditional(ctx_r1.TopTags.length > 0 ? 10 : -1);
|
|
998
981
|
i0.ɵɵadvance();
|
|
999
|
-
i0.ɵɵconditional(
|
|
982
|
+
i0.ɵɵconditional(ctx_r1.TopTags.length > 0 ? 11 : 12);
|
|
1000
983
|
i0.ɵɵadvance(2);
|
|
1001
|
-
i0.ɵɵconditional(
|
|
984
|
+
i0.ɵɵconditional(ctx_r1.DrillDownTarget && ctx_r1.DrillDownTarget.startsWith("tag-row:") ? 13 : -1);
|
|
1002
985
|
i0.ɵɵadvance();
|
|
1003
|
-
i0.ɵɵconditional(
|
|
986
|
+
i0.ɵɵconditional(ctx_r1.EntityDistribution.length > 0 ? 14 : -1);
|
|
1004
987
|
i0.ɵɵadvance();
|
|
1005
|
-
i0.ɵɵconditional(
|
|
988
|
+
i0.ɵɵconditional(ctx_r1.TagDepthBars.length > 0 ? 15 : -1);
|
|
1006
989
|
i0.ɵɵadvance(7);
|
|
1007
|
-
i0.ɵɵconditional(
|
|
990
|
+
i0.ɵɵconditional(ctx_r1.CoOccurrenceLastComputed ? 22 : -1);
|
|
1008
991
|
i0.ɵɵadvance();
|
|
1009
|
-
i0.ɵɵproperty("disabled",
|
|
992
|
+
i0.ɵɵproperty("disabled", ctx_r1.IsRecomputingCoOccurrence);
|
|
1010
993
|
i0.ɵɵadvance();
|
|
1011
|
-
i0.ɵɵconditional(
|
|
994
|
+
i0.ɵɵconditional(ctx_r1.IsRecomputingCoOccurrence ? 24 : 25);
|
|
1012
995
|
i0.ɵɵadvance(2);
|
|
1013
|
-
i0.ɵɵconditional(
|
|
996
|
+
i0.ɵɵconditional(ctx_r1.CoOccurrencePairs.length > 0 ? 26 : 27);
|
|
1014
997
|
} }
|
|
1015
|
-
function
|
|
1016
|
-
const
|
|
1017
|
-
i0.ɵɵelementStart(0, "tr",
|
|
1018
|
-
i0.ɵɵlistener("click", function
|
|
998
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_9_For_22_Template(rf, ctx) { if (rf & 1) {
|
|
999
|
+
const _r44 = i0.ɵɵgetCurrentView();
|
|
1000
|
+
i0.ɵɵelementStart(0, "tr", 127);
|
|
1001
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_9_For_22_Template_tr_click_0_listener() { const source_r45 = i0.ɵɵrestoreView(_r44).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); ctx_r1.SelectSource(source_r45.Name); return i0.ɵɵresetView(ctx_r1.OpenDrillDown("source-row:" + source_r45.Name)); });
|
|
1019
1002
|
i0.ɵɵelementStart(1, "td")(2, "strong");
|
|
1020
1003
|
i0.ɵɵtext(3);
|
|
1021
1004
|
i0.ɵɵelementEnd()();
|
|
1022
1005
|
i0.ɵɵelementStart(4, "td");
|
|
1023
|
-
i0.ɵɵelement(5, "i",
|
|
1006
|
+
i0.ɵɵelement(5, "i", 155);
|
|
1024
1007
|
i0.ɵɵtext(6);
|
|
1025
1008
|
i0.ɵɵelementEnd();
|
|
1026
|
-
i0.ɵɵelementStart(7, "td",
|
|
1009
|
+
i0.ɵɵelementStart(7, "td", 125);
|
|
1027
1010
|
i0.ɵɵtext(8);
|
|
1028
1011
|
i0.ɵɵelementEnd();
|
|
1029
|
-
i0.ɵɵelementStart(9, "td",
|
|
1012
|
+
i0.ɵɵelementStart(9, "td", 125);
|
|
1030
1013
|
i0.ɵɵtext(10);
|
|
1031
1014
|
i0.ɵɵelementEnd();
|
|
1032
|
-
i0.ɵɵelementStart(11, "td",
|
|
1015
|
+
i0.ɵɵelementStart(11, "td", 125);
|
|
1033
1016
|
i0.ɵɵtext(12);
|
|
1034
1017
|
i0.ɵɵelementEnd();
|
|
1035
|
-
i0.ɵɵelementStart(13, "td",
|
|
1018
|
+
i0.ɵɵelementStart(13, "td", 125);
|
|
1036
1019
|
i0.ɵɵtext(14);
|
|
1037
1020
|
i0.ɵɵelementEnd();
|
|
1038
|
-
i0.ɵɵelementStart(15, "td",
|
|
1021
|
+
i0.ɵɵelementStart(15, "td", 131);
|
|
1039
1022
|
i0.ɵɵtext(16);
|
|
1040
1023
|
i0.ɵɵelementEnd();
|
|
1041
|
-
i0.ɵɵelementStart(17, "td")(18, "span",
|
|
1042
|
-
i0.ɵɵelement(19, "i",
|
|
1024
|
+
i0.ɵɵelementStart(17, "td")(18, "span", 156);
|
|
1025
|
+
i0.ɵɵelement(19, "i", 157);
|
|
1043
1026
|
i0.ɵɵtext(20);
|
|
1044
1027
|
i0.ɵɵelementEnd()()();
|
|
1045
1028
|
} if (rf & 2) {
|
|
1046
|
-
const
|
|
1047
|
-
const
|
|
1048
|
-
i0.ɵɵclassProp("source-selected",
|
|
1029
|
+
const source_r45 = ctx.$implicit;
|
|
1030
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1031
|
+
i0.ɵɵclassProp("source-selected", ctx_r1.SelectedSourceName === source_r45.Name);
|
|
1049
1032
|
i0.ɵɵadvance(3);
|
|
1050
|
-
i0.ɵɵtextInterpolate(
|
|
1033
|
+
i0.ɵɵtextInterpolate(source_r45.Name);
|
|
1051
1034
|
i0.ɵɵadvance(2);
|
|
1052
|
-
i0.ɵɵclassMap(
|
|
1053
|
-
i0.ɵɵstyleProp("color",
|
|
1035
|
+
i0.ɵɵclassMap(source_r45.TypeIcon);
|
|
1036
|
+
i0.ɵɵstyleProp("color", source_r45.TypeColor);
|
|
1054
1037
|
i0.ɵɵadvance();
|
|
1055
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1038
|
+
i0.ɵɵtextInterpolate1(" ", source_r45.Type);
|
|
1056
1039
|
i0.ɵɵadvance(2);
|
|
1057
|
-
i0.ɵɵtextInterpolate(
|
|
1040
|
+
i0.ɵɵtextInterpolate(ctx_r1.FormatNumber(source_r45.Items));
|
|
1058
1041
|
i0.ɵɵadvance(2);
|
|
1059
|
-
i0.ɵɵtextInterpolate(
|
|
1042
|
+
i0.ɵɵtextInterpolate(ctx_r1.FormatNumber(source_r45.TagsGenerated));
|
|
1060
1043
|
i0.ɵɵadvance(2);
|
|
1061
|
-
i0.ɵɵtextInterpolate(
|
|
1044
|
+
i0.ɵɵtextInterpolate(source_r45.AvgTagsPerItem);
|
|
1062
1045
|
i0.ɵɵadvance(2);
|
|
1063
|
-
i0.ɵɵtextInterpolate(
|
|
1046
|
+
i0.ɵɵtextInterpolate(source_r45.AvgWeight);
|
|
1064
1047
|
i0.ɵɵadvance(2);
|
|
1065
|
-
i0.ɵɵtextInterpolate(
|
|
1048
|
+
i0.ɵɵtextInterpolate(source_r45.LastRun);
|
|
1066
1049
|
i0.ɵɵadvance(2);
|
|
1067
|
-
i0.ɵɵclassMap(
|
|
1050
|
+
i0.ɵɵclassMap(source_r45.StatusClass);
|
|
1068
1051
|
i0.ɵɵadvance(2);
|
|
1069
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1052
|
+
i0.ɵɵtextInterpolate1(" ", source_r45.Status);
|
|
1070
1053
|
} }
|
|
1071
|
-
function
|
|
1072
|
-
i0.ɵɵelementStart(0, "div",
|
|
1054
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
1055
|
+
i0.ɵɵelementStart(0, "div", 117)(1, "table", 92)(2, "thead")(3, "tr")(4, "th");
|
|
1073
1056
|
i0.ɵɵtext(5, "Source Name");
|
|
1074
1057
|
i0.ɵɵelementEnd();
|
|
1075
1058
|
i0.ɵɵelementStart(6, "th");
|
|
1076
1059
|
i0.ɵɵtext(7, "Type");
|
|
1077
1060
|
i0.ɵɵelementEnd();
|
|
1078
|
-
i0.ɵɵelementStart(8, "th",
|
|
1061
|
+
i0.ɵɵelementStart(8, "th", 125);
|
|
1079
1062
|
i0.ɵɵtext(9, "Items");
|
|
1080
1063
|
i0.ɵɵelementEnd();
|
|
1081
|
-
i0.ɵɵelementStart(10, "th",
|
|
1064
|
+
i0.ɵɵelementStart(10, "th", 125);
|
|
1082
1065
|
i0.ɵɵtext(11, "Tags Generated");
|
|
1083
1066
|
i0.ɵɵelementEnd();
|
|
1084
|
-
i0.ɵɵelementStart(12, "th",
|
|
1067
|
+
i0.ɵɵelementStart(12, "th", 125);
|
|
1085
1068
|
i0.ɵɵtext(13, "Avg Tags/Item");
|
|
1086
1069
|
i0.ɵɵelementEnd();
|
|
1087
|
-
i0.ɵɵelementStart(14, "th",
|
|
1070
|
+
i0.ɵɵelementStart(14, "th", 125);
|
|
1088
1071
|
i0.ɵɵtext(15, "Avg Weight");
|
|
1089
1072
|
i0.ɵɵelementEnd();
|
|
1090
1073
|
i0.ɵɵelementStart(16, "th");
|
|
@@ -1094,462 +1077,462 @@ function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_9_T
|
|
|
1094
1077
|
i0.ɵɵtext(19, "Status");
|
|
1095
1078
|
i0.ɵɵelementEnd()()();
|
|
1096
1079
|
i0.ɵɵelementStart(20, "tbody");
|
|
1097
|
-
i0.ɵɵrepeaterCreate(21,
|
|
1080
|
+
i0.ɵɵrepeaterCreate(21, AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_9_For_22_Template, 21, 16, "tr", 154, _forTrack0);
|
|
1098
1081
|
i0.ɵɵelementEnd()()();
|
|
1099
1082
|
} if (rf & 2) {
|
|
1100
|
-
const
|
|
1083
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1101
1084
|
i0.ɵɵadvance(21);
|
|
1102
|
-
i0.ɵɵrepeater(
|
|
1085
|
+
i0.ɵɵrepeater(ctx_r1.SourceComparison);
|
|
1103
1086
|
} }
|
|
1104
|
-
function
|
|
1105
|
-
i0.ɵɵelementStart(0, "div",
|
|
1106
|
-
i0.ɵɵelement(1, "i",
|
|
1087
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
1088
|
+
i0.ɵɵelementStart(0, "div", 118);
|
|
1089
|
+
i0.ɵɵelement(1, "i", 153);
|
|
1107
1090
|
i0.ɵɵelementStart(2, "p");
|
|
1108
1091
|
i0.ɵɵtext(3, "No content sources configured yet.");
|
|
1109
1092
|
i0.ɵɵelementEnd()();
|
|
1110
1093
|
} }
|
|
1111
|
-
function
|
|
1112
|
-
const
|
|
1113
|
-
i0.ɵɵelementStart(0, "button",
|
|
1114
|
-
i0.ɵɵlistener("click", function
|
|
1115
|
-
i0.ɵɵelement(1, "i",
|
|
1094
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
1095
|
+
const _r47 = i0.ɵɵgetCurrentView();
|
|
1096
|
+
i0.ɵɵelementStart(0, "button", 90);
|
|
1097
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r47); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.ExportDrillDownCSV()); });
|
|
1098
|
+
i0.ɵɵelement(1, "i", 91);
|
|
1116
1099
|
i0.ɵɵtext(2, " CSV");
|
|
1117
1100
|
i0.ɵɵelementEnd();
|
|
1118
1101
|
} }
|
|
1119
|
-
function
|
|
1120
|
-
i0.ɵɵelement(0, "mj-loading",
|
|
1102
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
1103
|
+
i0.ɵɵelement(0, "mj-loading", 87);
|
|
1121
1104
|
} }
|
|
1122
|
-
function
|
|
1105
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Conditional_10_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
1123
1106
|
i0.ɵɵelementStart(0, "th");
|
|
1124
1107
|
i0.ɵɵtext(1);
|
|
1125
1108
|
i0.ɵɵelementEnd();
|
|
1126
1109
|
} if (rf & 2) {
|
|
1127
|
-
const
|
|
1110
|
+
const col_r48 = ctx.$implicit;
|
|
1128
1111
|
i0.ɵɵadvance();
|
|
1129
|
-
i0.ɵɵtextInterpolate(
|
|
1112
|
+
i0.ɵɵtextInterpolate(col_r48);
|
|
1130
1113
|
} }
|
|
1131
|
-
function
|
|
1132
|
-
i0.ɵɵelement(0, "th",
|
|
1114
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Conditional_10_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
1115
|
+
i0.ɵɵelement(0, "th", 93);
|
|
1133
1116
|
} }
|
|
1134
|
-
function
|
|
1117
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Conditional_10_For_9_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
1135
1118
|
i0.ɵɵelementStart(0, "td");
|
|
1136
1119
|
i0.ɵɵtext(1);
|
|
1137
1120
|
i0.ɵɵelementEnd();
|
|
1138
1121
|
} if (rf & 2) {
|
|
1139
|
-
const
|
|
1140
|
-
const
|
|
1122
|
+
const col_r49 = ctx.$implicit;
|
|
1123
|
+
const row_r50 = i0.ɵɵnextContext().$implicit;
|
|
1141
1124
|
i0.ɵɵadvance();
|
|
1142
|
-
i0.ɵɵtextInterpolate(
|
|
1125
|
+
i0.ɵɵtextInterpolate(row_r50[col_r49]);
|
|
1143
1126
|
} }
|
|
1144
|
-
function
|
|
1145
|
-
const
|
|
1146
|
-
i0.ɵɵelementStart(0, "button",
|
|
1147
|
-
i0.ɵɵlistener("click", function
|
|
1148
|
-
i0.ɵɵelement(1, "i",
|
|
1127
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Conditional_10_For_9_Conditional_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
1128
|
+
const _r51 = i0.ɵɵgetCurrentView();
|
|
1129
|
+
i0.ɵɵelementStart(0, "button", 133);
|
|
1130
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Conditional_10_For_9_Conditional_3_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r51); const row_r50 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.OpenDrillDownRecord(row_r50)); });
|
|
1131
|
+
i0.ɵɵelement(1, "i", 96);
|
|
1149
1132
|
i0.ɵɵelementEnd();
|
|
1150
1133
|
} }
|
|
1151
|
-
function
|
|
1152
|
-
i0.ɵɵelementStart(0, "td",
|
|
1153
|
-
i0.ɵɵconditionalCreate(1,
|
|
1134
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Conditional_10_For_9_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1135
|
+
i0.ɵɵelementStart(0, "td", 93);
|
|
1136
|
+
i0.ɵɵconditionalCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Conditional_10_For_9_Conditional_3_Conditional_1_Template, 2, 0, "button", 132);
|
|
1154
1137
|
i0.ɵɵelementEnd();
|
|
1155
1138
|
} if (rf & 2) {
|
|
1156
|
-
const
|
|
1139
|
+
const row_r50 = i0.ɵɵnextContext().$implicit;
|
|
1157
1140
|
i0.ɵɵadvance();
|
|
1158
|
-
i0.ɵɵconditional(
|
|
1141
|
+
i0.ɵɵconditional(row_r50["_RecordID"] ? 1 : -1);
|
|
1159
1142
|
} }
|
|
1160
|
-
function
|
|
1143
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Conditional_10_For_9_Template(rf, ctx) { if (rf & 1) {
|
|
1161
1144
|
i0.ɵɵelementStart(0, "tr");
|
|
1162
|
-
i0.ɵɵrepeaterCreate(1,
|
|
1163
|
-
i0.ɵɵconditionalCreate(3,
|
|
1145
|
+
i0.ɵɵrepeaterCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Conditional_10_For_9_For_2_Template, 2, 1, "td", null, i0.ɵɵrepeaterTrackByIdentity);
|
|
1146
|
+
i0.ɵɵconditionalCreate(3, AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Conditional_10_For_9_Conditional_3_Template, 2, 1, "td", 93);
|
|
1164
1147
|
i0.ɵɵelementEnd();
|
|
1165
1148
|
} if (rf & 2) {
|
|
1166
|
-
const
|
|
1149
|
+
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
1167
1150
|
i0.ɵɵadvance();
|
|
1168
|
-
i0.ɵɵrepeater(
|
|
1151
|
+
i0.ɵɵrepeater(ctx_r1.DrillDownColumns);
|
|
1169
1152
|
i0.ɵɵadvance(2);
|
|
1170
|
-
i0.ɵɵconditional(
|
|
1153
|
+
i0.ɵɵconditional(ctx_r1.DrillDownHasActions ? 3 : -1);
|
|
1171
1154
|
} }
|
|
1172
|
-
function
|
|
1173
|
-
i0.ɵɵelementStart(0, "div",
|
|
1174
|
-
i0.ɵɵrepeaterCreate(4,
|
|
1175
|
-
i0.ɵɵconditionalCreate(6,
|
|
1155
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
1156
|
+
i0.ɵɵelementStart(0, "div", 88)(1, "table", 92)(2, "thead")(3, "tr");
|
|
1157
|
+
i0.ɵɵrepeaterCreate(4, AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Conditional_10_For_5_Template, 2, 1, "th", null, i0.ɵɵrepeaterTrackByIdentity);
|
|
1158
|
+
i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Conditional_10_Conditional_6_Template, 1, 0, "th", 93);
|
|
1176
1159
|
i0.ɵɵelementEnd()();
|
|
1177
1160
|
i0.ɵɵelementStart(7, "tbody");
|
|
1178
|
-
i0.ɵɵrepeaterCreate(8,
|
|
1161
|
+
i0.ɵɵrepeaterCreate(8, AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Conditional_10_For_9_Template, 4, 1, "tr", null, i0.ɵɵcomponentInstance().TrackByIndex, true);
|
|
1179
1162
|
i0.ɵɵelementEnd()()();
|
|
1180
1163
|
} if (rf & 2) {
|
|
1181
|
-
const
|
|
1164
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1182
1165
|
i0.ɵɵadvance(4);
|
|
1183
|
-
i0.ɵɵrepeater(
|
|
1166
|
+
i0.ɵɵrepeater(ctx_r1.DrillDownColumns);
|
|
1184
1167
|
i0.ɵɵadvance(2);
|
|
1185
|
-
i0.ɵɵconditional(
|
|
1168
|
+
i0.ɵɵconditional(ctx_r1.DrillDownHasActions ? 6 : -1);
|
|
1186
1169
|
i0.ɵɵadvance(2);
|
|
1187
|
-
i0.ɵɵrepeater(
|
|
1170
|
+
i0.ɵɵrepeater(ctx_r1.DrillDownData);
|
|
1188
1171
|
} }
|
|
1189
|
-
function
|
|
1190
|
-
i0.ɵɵelementStart(0, "div",
|
|
1172
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
1173
|
+
i0.ɵɵelementStart(0, "div", 89);
|
|
1191
1174
|
i0.ɵɵtext(1, "No run data for this source");
|
|
1192
1175
|
i0.ɵɵelementEnd();
|
|
1193
1176
|
} }
|
|
1194
|
-
function
|
|
1195
|
-
const
|
|
1196
|
-
i0.ɵɵelementStart(0, "div",
|
|
1197
|
-
i0.ɵɵelement(3, "i",
|
|
1177
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
1178
|
+
const _r46 = i0.ɵɵgetCurrentView();
|
|
1179
|
+
i0.ɵɵelementStart(0, "div", 24)(1, "div", 80)(2, "span", 81);
|
|
1180
|
+
i0.ɵɵelement(3, "i", 82);
|
|
1198
1181
|
i0.ɵɵtext(4);
|
|
1199
1182
|
i0.ɵɵelementEnd();
|
|
1200
|
-
i0.ɵɵelementStart(5, "div",
|
|
1201
|
-
i0.ɵɵconditionalCreate(6,
|
|
1202
|
-
i0.ɵɵelementStart(7, "button",
|
|
1203
|
-
i0.ɵɵlistener("click", function
|
|
1204
|
-
i0.ɵɵelement(8, "i",
|
|
1183
|
+
i0.ɵɵelementStart(5, "div", 83);
|
|
1184
|
+
i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Conditional_6_Template, 3, 0, "button", 84);
|
|
1185
|
+
i0.ɵɵelementStart(7, "button", 85);
|
|
1186
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r46); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.CloseDrillDown()); });
|
|
1187
|
+
i0.ɵɵelement(8, "i", 86);
|
|
1205
1188
|
i0.ɵɵelementEnd()()();
|
|
1206
|
-
i0.ɵɵconditionalCreate(9,
|
|
1189
|
+
i0.ɵɵconditionalCreate(9, AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Conditional_9_Template, 1, 0, "mj-loading", 87)(10, AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Conditional_10_Template, 10, 1, "div", 88)(11, AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Conditional_11_Template, 2, 0, "div", 89);
|
|
1207
1190
|
i0.ɵɵelementEnd();
|
|
1208
1191
|
} if (rf & 2) {
|
|
1209
|
-
const
|
|
1192
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1210
1193
|
i0.ɵɵadvance(4);
|
|
1211
|
-
i0.ɵɵtextInterpolate1(" Recent Runs: ",
|
|
1194
|
+
i0.ɵɵtextInterpolate1(" Recent Runs: ", ctx_r1.DrillDownTarget.replace("source-row:", ""));
|
|
1212
1195
|
i0.ɵɵadvance(2);
|
|
1213
|
-
i0.ɵɵconditional(
|
|
1196
|
+
i0.ɵɵconditional(ctx_r1.DrillDownData.length > 0 ? 6 : -1);
|
|
1214
1197
|
i0.ɵɵadvance(3);
|
|
1215
|
-
i0.ɵɵconditional(
|
|
1198
|
+
i0.ɵɵconditional(ctx_r1.IsDrillDownLoading ? 9 : ctx_r1.DrillDownData.length > 0 ? 10 : 11);
|
|
1216
1199
|
} }
|
|
1217
|
-
function
|
|
1218
|
-
i0.ɵɵelementStart(0, "div",
|
|
1200
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_12_For_11_Template(rf, ctx) { if (rf & 1) {
|
|
1201
|
+
i0.ɵɵelementStart(0, "div", 30)(1, "div", 167);
|
|
1219
1202
|
i0.ɵɵtext(2);
|
|
1220
1203
|
i0.ɵɵelementEnd();
|
|
1221
|
-
i0.ɵɵelement(3, "div",
|
|
1222
|
-
i0.ɵɵelementStart(4, "div",
|
|
1204
|
+
i0.ɵɵelement(3, "div", 98);
|
|
1205
|
+
i0.ɵɵelementStart(4, "div", 99);
|
|
1223
1206
|
i0.ɵɵtext(5);
|
|
1224
1207
|
i0.ɵɵelementEnd()();
|
|
1225
1208
|
} if (rf & 2) {
|
|
1226
|
-
const
|
|
1209
|
+
const bar_r52 = ctx.$implicit;
|
|
1227
1210
|
i0.ɵɵadvance(2);
|
|
1228
|
-
i0.ɵɵtextInterpolate(
|
|
1211
|
+
i0.ɵɵtextInterpolate(bar_r52.Value);
|
|
1229
1212
|
i0.ɵɵadvance();
|
|
1230
|
-
i0.ɵɵstyleProp("height",
|
|
1213
|
+
i0.ɵɵstyleProp("height", bar_r52.Percentage, "%")("opacity", 0.5 + bar_r52.Percentage / 200);
|
|
1231
1214
|
i0.ɵɵadvance(2);
|
|
1232
|
-
i0.ɵɵtextInterpolate(
|
|
1215
|
+
i0.ɵɵtextInterpolate(bar_r52.Label);
|
|
1233
1216
|
} }
|
|
1234
|
-
function
|
|
1235
|
-
i0.ɵɵelementStart(0, "div",
|
|
1217
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_12_For_18_Template(rf, ctx) { if (rf & 1) {
|
|
1218
|
+
i0.ɵɵelementStart(0, "div", 164)(1, "span", 168);
|
|
1236
1219
|
i0.ɵɵtext(2);
|
|
1237
1220
|
i0.ɵɵelementEnd();
|
|
1238
|
-
i0.ɵɵelementStart(3, "div",
|
|
1221
|
+
i0.ɵɵelementStart(3, "div", 169)(4, "div", 170);
|
|
1239
1222
|
i0.ɵɵtext(5);
|
|
1240
1223
|
i0.ɵɵelementEnd()()();
|
|
1241
1224
|
} if (rf & 2) {
|
|
1242
|
-
const
|
|
1225
|
+
const band_r53 = ctx.$implicit;
|
|
1243
1226
|
i0.ɵɵadvance(2);
|
|
1244
|
-
i0.ɵɵtextInterpolate(
|
|
1227
|
+
i0.ɵɵtextInterpolate(band_r53.Label);
|
|
1245
1228
|
i0.ɵɵadvance(2);
|
|
1246
|
-
i0.ɵɵstyleProp("width",
|
|
1229
|
+
i0.ɵɵstyleProp("width", band_r53.Percentage, "%")("background", band_r53.Color);
|
|
1247
1230
|
i0.ɵɵadvance();
|
|
1248
|
-
i0.ɵɵtextInterpolate1("",
|
|
1231
|
+
i0.ɵɵtextInterpolate1("", band_r53.Percentage, "%");
|
|
1249
1232
|
} }
|
|
1250
|
-
function
|
|
1251
|
-
i0.ɵɵelementStart(0, "div",
|
|
1252
|
-
i0.ɵɵelement(2, "i",
|
|
1233
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
1234
|
+
i0.ɵɵelementStart(0, "div", 119)(1, "h3");
|
|
1235
|
+
i0.ɵɵelement(2, "i", 158);
|
|
1253
1236
|
i0.ɵɵtext(3);
|
|
1254
1237
|
i0.ɵɵelementEnd();
|
|
1255
|
-
i0.ɵɵelementStart(4, "div",
|
|
1256
|
-
i0.ɵɵelement(7, "i",
|
|
1238
|
+
i0.ɵɵelementStart(4, "div", 159)(5, "div", 160)(6, "div", 27);
|
|
1239
|
+
i0.ɵɵelement(7, "i", 134);
|
|
1257
1240
|
i0.ɵɵtext(8, " Items Processed (Last 8 Weeks)");
|
|
1258
1241
|
i0.ɵɵelementEnd();
|
|
1259
|
-
i0.ɵɵelementStart(9, "div",
|
|
1260
|
-
i0.ɵɵrepeaterCreate(10,
|
|
1242
|
+
i0.ɵɵelementStart(9, "div", 161);
|
|
1243
|
+
i0.ɵɵrepeaterCreate(10, AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_12_For_11_Template, 6, 6, "div", 30, _forTrack1);
|
|
1261
1244
|
i0.ɵɵelementEnd()();
|
|
1262
|
-
i0.ɵɵelementStart(12, "div",
|
|
1263
|
-
i0.ɵɵelement(14, "i",
|
|
1245
|
+
i0.ɵɵelementStart(12, "div", 160)(13, "div", 27);
|
|
1246
|
+
i0.ɵɵelement(14, "i", 162);
|
|
1264
1247
|
i0.ɵɵtext(15, " Tag Quality Distribution");
|
|
1265
1248
|
i0.ɵɵelementEnd();
|
|
1266
|
-
i0.ɵɵelementStart(16, "div",
|
|
1267
|
-
i0.ɵɵrepeaterCreate(17,
|
|
1249
|
+
i0.ɵɵelementStart(16, "div", 163);
|
|
1250
|
+
i0.ɵɵrepeaterCreate(17, AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_12_For_18_Template, 6, 6, "div", 164, _forTrack1);
|
|
1268
1251
|
i0.ɵɵelementEnd();
|
|
1269
|
-
i0.ɵɵelementStart(19, "div",
|
|
1270
|
-
i0.ɵɵelement(20, "i",
|
|
1252
|
+
i0.ɵɵelementStart(19, "div", 165);
|
|
1253
|
+
i0.ɵɵelement(20, "i", 166);
|
|
1271
1254
|
i0.ɵɵtext(21);
|
|
1272
1255
|
i0.ɵɵelementEnd()()()();
|
|
1273
1256
|
} if (rf & 2) {
|
|
1274
|
-
const
|
|
1257
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1275
1258
|
i0.ɵɵadvance(3);
|
|
1276
|
-
i0.ɵɵtextInterpolate1(" Source Detail: ",
|
|
1259
|
+
i0.ɵɵtextInterpolate1(" Source Detail: ", ctx_r1.SelectedSourceName);
|
|
1277
1260
|
i0.ɵɵadvance(7);
|
|
1278
|
-
i0.ɵɵrepeater(
|
|
1261
|
+
i0.ɵɵrepeater(ctx_r1.SourceWeeklyBars);
|
|
1279
1262
|
i0.ɵɵadvance(7);
|
|
1280
|
-
i0.ɵɵrepeater(
|
|
1263
|
+
i0.ɵɵrepeater(ctx_r1.SourceQualityBands);
|
|
1281
1264
|
i0.ɵɵadvance(4);
|
|
1282
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1265
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.SourceQualityNote, " ");
|
|
1283
1266
|
} }
|
|
1284
|
-
function
|
|
1285
|
-
i0.ɵɵelementStart(0, "div",
|
|
1267
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_13_For_6_Template(rf, ctx) { if (rf & 1) {
|
|
1268
|
+
i0.ɵɵelementStart(0, "div", 174)(1, "div", 175);
|
|
1286
1269
|
i0.ɵɵtext(2);
|
|
1287
1270
|
i0.ɵɵelementEnd();
|
|
1288
|
-
i0.ɵɵelementStart(3, "div",
|
|
1271
|
+
i0.ɵɵelementStart(3, "div", 176);
|
|
1289
1272
|
i0.ɵɵtext(4);
|
|
1290
1273
|
i0.ɵɵelementEnd();
|
|
1291
|
-
i0.ɵɵelementStart(5, "div",
|
|
1274
|
+
i0.ɵɵelementStart(5, "div", 177);
|
|
1292
1275
|
i0.ɵɵtext(6, "uptime");
|
|
1293
1276
|
i0.ɵɵelementEnd()();
|
|
1294
1277
|
} if (rf & 2) {
|
|
1295
|
-
const
|
|
1296
|
-
i0.ɵɵstyleProp("border-top-color",
|
|
1278
|
+
const card_r54 = ctx.$implicit;
|
|
1279
|
+
i0.ɵɵstyleProp("border-top-color", card_r54.Color);
|
|
1297
1280
|
i0.ɵɵadvance(2);
|
|
1298
|
-
i0.ɵɵtextInterpolate(
|
|
1281
|
+
i0.ɵɵtextInterpolate(card_r54.Name);
|
|
1299
1282
|
i0.ɵɵadvance();
|
|
1300
|
-
i0.ɵɵstyleProp("color",
|
|
1283
|
+
i0.ɵɵstyleProp("color", card_r54.Color);
|
|
1301
1284
|
i0.ɵɵadvance();
|
|
1302
|
-
i0.ɵɵtextInterpolate1("",
|
|
1285
|
+
i0.ɵɵtextInterpolate1("", card_r54.Uptime, "%");
|
|
1303
1286
|
} }
|
|
1304
|
-
function
|
|
1305
|
-
i0.ɵɵelementStart(0, "div",
|
|
1306
|
-
i0.ɵɵelement(2, "i",
|
|
1287
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
1288
|
+
i0.ɵɵelementStart(0, "div", 119)(1, "h3");
|
|
1289
|
+
i0.ɵɵelement(2, "i", 171);
|
|
1307
1290
|
i0.ɵɵtext(3, " Source Health Summary");
|
|
1308
1291
|
i0.ɵɵelementEnd();
|
|
1309
|
-
i0.ɵɵelementStart(4, "div",
|
|
1310
|
-
i0.ɵɵrepeaterCreate(5,
|
|
1292
|
+
i0.ɵɵelementStart(4, "div", 172);
|
|
1293
|
+
i0.ɵɵrepeaterCreate(5, AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_13_For_6_Template, 7, 6, "div", 173, _forTrack0);
|
|
1311
1294
|
i0.ɵɵelementEnd()();
|
|
1312
1295
|
} if (rf & 2) {
|
|
1313
|
-
const
|
|
1296
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1314
1297
|
i0.ɵɵadvance(4);
|
|
1315
|
-
i0.ɵɵstyleProp("grid-template-columns", "repeat(" +
|
|
1298
|
+
i0.ɵɵstyleProp("grid-template-columns", "repeat(" + ctx_r1.SourceHealthCards.length + ", 1fr)");
|
|
1316
1299
|
i0.ɵɵadvance();
|
|
1317
|
-
i0.ɵɵrepeater(
|
|
1300
|
+
i0.ɵɵrepeater(ctx_r1.SourceHealthCards);
|
|
1318
1301
|
} }
|
|
1319
|
-
function
|
|
1320
|
-
i0.ɵɵelementStart(0, "section",
|
|
1321
|
-
i0.ɵɵelement(2, "i",
|
|
1302
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
1303
|
+
i0.ɵɵelementStart(0, "section", 14)(1, "div", 15);
|
|
1304
|
+
i0.ɵɵelement(2, "i", 153);
|
|
1322
1305
|
i0.ɵɵelementStart(3, "h1");
|
|
1323
1306
|
i0.ɵɵtext(4, "Sources");
|
|
1324
1307
|
i0.ɵɵelementEnd()();
|
|
1325
|
-
i0.ɵɵelementStart(5, "div",
|
|
1326
|
-
i0.ɵɵelement(7, "i",
|
|
1308
|
+
i0.ɵɵelementStart(5, "div", 114)(6, "h3");
|
|
1309
|
+
i0.ɵɵelement(7, "i", 82);
|
|
1327
1310
|
i0.ɵɵtext(8, " Source Comparison");
|
|
1328
1311
|
i0.ɵɵelementEnd();
|
|
1329
|
-
i0.ɵɵconditionalCreate(9,
|
|
1312
|
+
i0.ɵɵconditionalCreate(9, AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_9_Template, 23, 0, "div", 117)(10, AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_10_Template, 4, 0, "div", 118);
|
|
1330
1313
|
i0.ɵɵelementEnd();
|
|
1331
|
-
i0.ɵɵconditionalCreate(11,
|
|
1332
|
-
i0.ɵɵconditionalCreate(12,
|
|
1333
|
-
i0.ɵɵconditionalCreate(13,
|
|
1314
|
+
i0.ɵɵconditionalCreate(11, AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Template, 12, 3, "div", 24);
|
|
1315
|
+
i0.ɵɵconditionalCreate(12, AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_12_Template, 22, 2, "div", 119);
|
|
1316
|
+
i0.ɵɵconditionalCreate(13, AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_13_Template, 7, 2, "div", 119);
|
|
1334
1317
|
i0.ɵɵelementEnd();
|
|
1335
1318
|
} if (rf & 2) {
|
|
1336
|
-
const
|
|
1319
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
1337
1320
|
i0.ɵɵadvance(9);
|
|
1338
|
-
i0.ɵɵconditional(
|
|
1321
|
+
i0.ɵɵconditional(ctx_r1.SourceComparison.length > 0 ? 9 : 10);
|
|
1339
1322
|
i0.ɵɵadvance(2);
|
|
1340
|
-
i0.ɵɵconditional(
|
|
1323
|
+
i0.ɵɵconditional(ctx_r1.DrillDownTarget && ctx_r1.DrillDownTarget.startsWith("source-row:") ? 11 : -1);
|
|
1341
1324
|
i0.ɵɵadvance();
|
|
1342
|
-
i0.ɵɵconditional(
|
|
1325
|
+
i0.ɵɵconditional(ctx_r1.SelectedSourceName && ctx_r1.SourceComparison.length > 0 ? 12 : -1);
|
|
1343
1326
|
i0.ɵɵadvance();
|
|
1344
|
-
i0.ɵɵconditional(
|
|
1327
|
+
i0.ɵɵconditional(ctx_r1.SourceHealthCards.length > 0 ? 13 : -1);
|
|
1345
1328
|
} }
|
|
1346
|
-
function
|
|
1347
|
-
const
|
|
1348
|
-
i0.ɵɵelementStart(0, "div",
|
|
1349
|
-
i0.ɵɵlistener("click", function
|
|
1329
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_For_12_Template(rf, ctx) { if (rf & 1) {
|
|
1330
|
+
const _r55 = i0.ɵɵgetCurrentView();
|
|
1331
|
+
i0.ɵɵelementStart(0, "div", 193);
|
|
1332
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_15_For_12_Template_div_click_0_listener() { const $index_r56 = i0.ɵɵrestoreView(_r55).$index; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OpenDrillDown("pipeline-throughput:" + $index_r56)); });
|
|
1350
1333
|
i0.ɵɵelementEnd();
|
|
1351
1334
|
} if (rf & 2) {
|
|
1352
|
-
const
|
|
1353
|
-
i0.ɵɵstyleProp("height",
|
|
1335
|
+
const bar_r57 = ctx.$implicit;
|
|
1336
|
+
i0.ɵɵstyleProp("height", bar_r57.Percentage, "%")("background", bar_r57.IsError ? "var(--mj-status-error)" : "var(--mj-brand-primary)")("opacity", bar_r57.IsError ? 0.7 : 0.6 + bar_r57.Percentage / 300);
|
|
1354
1337
|
} }
|
|
1355
|
-
function
|
|
1338
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_For_15_Template(rf, ctx) { if (rf & 1) {
|
|
1356
1339
|
i0.ɵɵelementStart(0, "span");
|
|
1357
1340
|
i0.ɵɵtext(1);
|
|
1358
1341
|
i0.ɵɵelementEnd();
|
|
1359
1342
|
} if (rf & 2) {
|
|
1360
|
-
const
|
|
1343
|
+
const label_r58 = ctx.$implicit;
|
|
1361
1344
|
i0.ɵɵadvance();
|
|
1362
|
-
i0.ɵɵtextInterpolate(
|
|
1345
|
+
i0.ɵɵtextInterpolate(label_r58);
|
|
1363
1346
|
} }
|
|
1364
|
-
function
|
|
1365
|
-
const
|
|
1366
|
-
i0.ɵɵelementStart(0, "button",
|
|
1367
|
-
i0.ɵɵlistener("click", function
|
|
1368
|
-
i0.ɵɵelement(1, "i",
|
|
1347
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
1348
|
+
const _r60 = i0.ɵɵgetCurrentView();
|
|
1349
|
+
i0.ɵɵelementStart(0, "button", 90);
|
|
1350
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r60); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.ExportDrillDownCSV()); });
|
|
1351
|
+
i0.ɵɵelement(1, "i", 91);
|
|
1369
1352
|
i0.ɵɵtext(2, " CSV");
|
|
1370
1353
|
i0.ɵɵelementEnd();
|
|
1371
1354
|
} }
|
|
1372
|
-
function
|
|
1373
|
-
i0.ɵɵelement(0, "mj-loading",
|
|
1355
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
1356
|
+
i0.ɵɵelement(0, "mj-loading", 87);
|
|
1374
1357
|
} }
|
|
1375
|
-
function
|
|
1358
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Conditional_10_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
1376
1359
|
i0.ɵɵelementStart(0, "th");
|
|
1377
1360
|
i0.ɵɵtext(1);
|
|
1378
1361
|
i0.ɵɵelementEnd();
|
|
1379
1362
|
} if (rf & 2) {
|
|
1380
|
-
const
|
|
1363
|
+
const col_r61 = ctx.$implicit;
|
|
1381
1364
|
i0.ɵɵadvance();
|
|
1382
|
-
i0.ɵɵtextInterpolate(
|
|
1365
|
+
i0.ɵɵtextInterpolate(col_r61);
|
|
1383
1366
|
} }
|
|
1384
|
-
function
|
|
1385
|
-
i0.ɵɵelement(0, "th",
|
|
1367
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Conditional_10_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
1368
|
+
i0.ɵɵelement(0, "th", 93);
|
|
1386
1369
|
} }
|
|
1387
|
-
function
|
|
1370
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Conditional_10_For_9_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
1388
1371
|
i0.ɵɵelementStart(0, "td");
|
|
1389
1372
|
i0.ɵɵtext(1);
|
|
1390
1373
|
i0.ɵɵelementEnd();
|
|
1391
1374
|
} if (rf & 2) {
|
|
1392
|
-
const
|
|
1393
|
-
const
|
|
1375
|
+
const col_r62 = ctx.$implicit;
|
|
1376
|
+
const row_r63 = i0.ɵɵnextContext().$implicit;
|
|
1394
1377
|
i0.ɵɵadvance();
|
|
1395
|
-
i0.ɵɵtextInterpolate(
|
|
1378
|
+
i0.ɵɵtextInterpolate(row_r63[col_r62]);
|
|
1396
1379
|
} }
|
|
1397
|
-
function
|
|
1398
|
-
const
|
|
1399
|
-
i0.ɵɵelementStart(0, "button",
|
|
1400
|
-
i0.ɵɵlistener("click", function
|
|
1401
|
-
i0.ɵɵelement(1, "i",
|
|
1380
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Conditional_10_For_9_Conditional_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
1381
|
+
const _r64 = i0.ɵɵgetCurrentView();
|
|
1382
|
+
i0.ɵɵelementStart(0, "button", 133);
|
|
1383
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Conditional_10_For_9_Conditional_3_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r64); const row_r63 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.OpenDrillDownRecord(row_r63)); });
|
|
1384
|
+
i0.ɵɵelement(1, "i", 96);
|
|
1402
1385
|
i0.ɵɵelementEnd();
|
|
1403
1386
|
} }
|
|
1404
|
-
function
|
|
1405
|
-
i0.ɵɵelementStart(0, "td",
|
|
1406
|
-
i0.ɵɵconditionalCreate(1,
|
|
1387
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Conditional_10_For_9_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1388
|
+
i0.ɵɵelementStart(0, "td", 93);
|
|
1389
|
+
i0.ɵɵconditionalCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Conditional_10_For_9_Conditional_3_Conditional_1_Template, 2, 0, "button", 132);
|
|
1407
1390
|
i0.ɵɵelementEnd();
|
|
1408
1391
|
} if (rf & 2) {
|
|
1409
|
-
const
|
|
1392
|
+
const row_r63 = i0.ɵɵnextContext().$implicit;
|
|
1410
1393
|
i0.ɵɵadvance();
|
|
1411
|
-
i0.ɵɵconditional(
|
|
1394
|
+
i0.ɵɵconditional(row_r63["_RecordID"] ? 1 : -1);
|
|
1412
1395
|
} }
|
|
1413
|
-
function
|
|
1396
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Conditional_10_For_9_Template(rf, ctx) { if (rf & 1) {
|
|
1414
1397
|
i0.ɵɵelementStart(0, "tr");
|
|
1415
|
-
i0.ɵɵrepeaterCreate(1,
|
|
1416
|
-
i0.ɵɵconditionalCreate(3,
|
|
1398
|
+
i0.ɵɵrepeaterCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Conditional_10_For_9_For_2_Template, 2, 1, "td", null, i0.ɵɵrepeaterTrackByIdentity);
|
|
1399
|
+
i0.ɵɵconditionalCreate(3, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Conditional_10_For_9_Conditional_3_Template, 2, 1, "td", 93);
|
|
1417
1400
|
i0.ɵɵelementEnd();
|
|
1418
1401
|
} if (rf & 2) {
|
|
1419
|
-
const
|
|
1402
|
+
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
1420
1403
|
i0.ɵɵadvance();
|
|
1421
|
-
i0.ɵɵrepeater(
|
|
1404
|
+
i0.ɵɵrepeater(ctx_r1.DrillDownColumns);
|
|
1422
1405
|
i0.ɵɵadvance(2);
|
|
1423
|
-
i0.ɵɵconditional(
|
|
1406
|
+
i0.ɵɵconditional(ctx_r1.DrillDownHasActions ? 3 : -1);
|
|
1424
1407
|
} }
|
|
1425
|
-
function
|
|
1426
|
-
i0.ɵɵelementStart(0, "div",
|
|
1427
|
-
i0.ɵɵrepeaterCreate(4,
|
|
1428
|
-
i0.ɵɵconditionalCreate(6,
|
|
1408
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
1409
|
+
i0.ɵɵelementStart(0, "div", 88)(1, "table", 92)(2, "thead")(3, "tr");
|
|
1410
|
+
i0.ɵɵrepeaterCreate(4, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Conditional_10_For_5_Template, 2, 1, "th", null, i0.ɵɵrepeaterTrackByIdentity);
|
|
1411
|
+
i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Conditional_10_Conditional_6_Template, 1, 0, "th", 93);
|
|
1429
1412
|
i0.ɵɵelementEnd()();
|
|
1430
1413
|
i0.ɵɵelementStart(7, "tbody");
|
|
1431
|
-
i0.ɵɵrepeaterCreate(8,
|
|
1414
|
+
i0.ɵɵrepeaterCreate(8, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Conditional_10_For_9_Template, 4, 1, "tr", null, i0.ɵɵcomponentInstance().TrackByIndex, true);
|
|
1432
1415
|
i0.ɵɵelementEnd()()();
|
|
1433
1416
|
} if (rf & 2) {
|
|
1434
|
-
const
|
|
1417
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1435
1418
|
i0.ɵɵadvance(4);
|
|
1436
|
-
i0.ɵɵrepeater(
|
|
1419
|
+
i0.ɵɵrepeater(ctx_r1.DrillDownColumns);
|
|
1437
1420
|
i0.ɵɵadvance(2);
|
|
1438
|
-
i0.ɵɵconditional(
|
|
1421
|
+
i0.ɵɵconditional(ctx_r1.DrillDownHasActions ? 6 : -1);
|
|
1439
1422
|
i0.ɵɵadvance(2);
|
|
1440
|
-
i0.ɵɵrepeater(
|
|
1423
|
+
i0.ɵɵrepeater(ctx_r1.DrillDownData);
|
|
1441
1424
|
} }
|
|
1442
|
-
function
|
|
1443
|
-
i0.ɵɵelementStart(0, "div",
|
|
1425
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
1426
|
+
i0.ɵɵelementStart(0, "div", 89);
|
|
1444
1427
|
i0.ɵɵtext(1, "No runs for this day");
|
|
1445
1428
|
i0.ɵɵelementEnd();
|
|
1446
1429
|
} }
|
|
1447
|
-
function
|
|
1448
|
-
const
|
|
1449
|
-
i0.ɵɵelementStart(0, "div",
|
|
1450
|
-
i0.ɵɵelement(3, "i",
|
|
1430
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
1431
|
+
const _r59 = i0.ɵɵgetCurrentView();
|
|
1432
|
+
i0.ɵɵelementStart(0, "div", 24)(1, "div", 80)(2, "span", 81);
|
|
1433
|
+
i0.ɵɵelement(3, "i", 82);
|
|
1451
1434
|
i0.ɵɵtext(4, " Runs for Selected Day");
|
|
1452
1435
|
i0.ɵɵelementEnd();
|
|
1453
|
-
i0.ɵɵelementStart(5, "div",
|
|
1454
|
-
i0.ɵɵconditionalCreate(6,
|
|
1455
|
-
i0.ɵɵelementStart(7, "button",
|
|
1456
|
-
i0.ɵɵlistener("click", function
|
|
1457
|
-
i0.ɵɵelement(8, "i",
|
|
1436
|
+
i0.ɵɵelementStart(5, "div", 83);
|
|
1437
|
+
i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Conditional_6_Template, 3, 0, "button", 84);
|
|
1438
|
+
i0.ɵɵelementStart(7, "button", 85);
|
|
1439
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r59); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.CloseDrillDown()); });
|
|
1440
|
+
i0.ɵɵelement(8, "i", 86);
|
|
1458
1441
|
i0.ɵɵelementEnd()()();
|
|
1459
|
-
i0.ɵɵconditionalCreate(9,
|
|
1442
|
+
i0.ɵɵconditionalCreate(9, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Conditional_9_Template, 1, 0, "mj-loading", 87)(10, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Conditional_10_Template, 10, 1, "div", 88)(11, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Conditional_11_Template, 2, 0, "div", 89);
|
|
1460
1443
|
i0.ɵɵelementEnd();
|
|
1461
1444
|
} if (rf & 2) {
|
|
1462
|
-
const
|
|
1445
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1463
1446
|
i0.ɵɵadvance(6);
|
|
1464
|
-
i0.ɵɵconditional(
|
|
1447
|
+
i0.ɵɵconditional(ctx_r1.DrillDownData.length > 0 ? 6 : -1);
|
|
1465
1448
|
i0.ɵɵadvance(3);
|
|
1466
|
-
i0.ɵɵconditional(
|
|
1449
|
+
i0.ɵɵconditional(ctx_r1.IsDrillDownLoading ? 9 : ctx_r1.DrillDownData.length > 0 ? 10 : 11);
|
|
1467
1450
|
} }
|
|
1468
|
-
function
|
|
1451
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_For_24_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
1469
1452
|
i0.ɵɵtext(0);
|
|
1470
1453
|
} if (rf & 2) {
|
|
1471
|
-
const
|
|
1472
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1454
|
+
const stage_r65 = i0.ɵɵnextContext().$implicit;
|
|
1455
|
+
i0.ɵɵtextInterpolate1(" ", stage_r65.Time, "s ");
|
|
1473
1456
|
} }
|
|
1474
|
-
function
|
|
1475
|
-
i0.ɵɵelementStart(0, "div",
|
|
1457
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_For_24_Template(rf, ctx) { if (rf & 1) {
|
|
1458
|
+
i0.ɵɵelementStart(0, "div", 184)(1, "div", 194);
|
|
1476
1459
|
i0.ɵɵtext(2);
|
|
1477
1460
|
i0.ɵɵelementEnd();
|
|
1478
|
-
i0.ɵɵelementStart(3, "div",
|
|
1479
|
-
i0.ɵɵconditionalCreate(5,
|
|
1461
|
+
i0.ɵɵelementStart(3, "div", 195)(4, "div", 196);
|
|
1462
|
+
i0.ɵɵconditionalCreate(5, AnalyticsResourceComponent_Conditional_6_Conditional_15_For_24_Conditional_5_Template, 1, 1);
|
|
1480
1463
|
i0.ɵɵelementEnd()();
|
|
1481
|
-
i0.ɵɵelementStart(6, "div",
|
|
1464
|
+
i0.ɵɵelementStart(6, "div", 197);
|
|
1482
1465
|
i0.ɵɵtext(7);
|
|
1483
1466
|
i0.ɵɵelementEnd()();
|
|
1484
1467
|
} if (rf & 2) {
|
|
1485
|
-
const
|
|
1468
|
+
const stage_r65 = ctx.$implicit;
|
|
1486
1469
|
i0.ɵɵadvance(2);
|
|
1487
|
-
i0.ɵɵtextInterpolate(
|
|
1470
|
+
i0.ɵɵtextInterpolate(stage_r65.Name);
|
|
1488
1471
|
i0.ɵɵadvance(2);
|
|
1489
|
-
i0.ɵɵstyleProp("width",
|
|
1472
|
+
i0.ɵɵstyleProp("width", stage_r65.Percentage, "%")("background", stage_r65.Color);
|
|
1490
1473
|
i0.ɵɵadvance();
|
|
1491
|
-
i0.ɵɵconditional(
|
|
1474
|
+
i0.ɵɵconditional(stage_r65.Percentage > 15 ? 5 : -1);
|
|
1492
1475
|
i0.ɵɵadvance(2);
|
|
1493
|
-
i0.ɵɵtextInterpolate1("",
|
|
1476
|
+
i0.ɵɵtextInterpolate1("", stage_r65.Time, "s");
|
|
1494
1477
|
} }
|
|
1495
|
-
function
|
|
1496
|
-
i0.ɵɵelementStart(0, "span",
|
|
1497
|
-
i0.ɵɵelement(1, "i",
|
|
1478
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_30_Template(rf, ctx) { if (rf & 1) {
|
|
1479
|
+
i0.ɵɵelementStart(0, "span", 186);
|
|
1480
|
+
i0.ɵɵelement(1, "i", 198);
|
|
1498
1481
|
i0.ɵɵtext(2);
|
|
1499
1482
|
i0.ɵɵelementEnd();
|
|
1500
1483
|
} if (rf & 2) {
|
|
1501
|
-
const
|
|
1484
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1502
1485
|
i0.ɵɵadvance(2);
|
|
1503
|
-
i0.ɵɵtextInterpolate2(" ",
|
|
1486
|
+
i0.ɵɵtextInterpolate2(" ", ctx_r1.BottleneckStage, " stage is the bottleneck (", ctx_r1.BottleneckPercent, "% of total time) ");
|
|
1504
1487
|
} }
|
|
1505
|
-
function
|
|
1506
|
-
i0.ɵɵelementStart(0, "tr")(1, "td",
|
|
1488
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_52_For_22_Template(rf, ctx) { if (rf & 1) {
|
|
1489
|
+
i0.ɵɵelementStart(0, "tr")(1, "td", 200);
|
|
1507
1490
|
i0.ɵɵtext(2);
|
|
1508
1491
|
i0.ɵɵelementEnd();
|
|
1509
1492
|
i0.ɵɵelementStart(3, "td");
|
|
1510
1493
|
i0.ɵɵtext(4);
|
|
1511
1494
|
i0.ɵɵelementEnd();
|
|
1512
|
-
i0.ɵɵelementStart(5, "td",
|
|
1495
|
+
i0.ɵɵelementStart(5, "td", 131);
|
|
1513
1496
|
i0.ɵɵtext(6);
|
|
1514
1497
|
i0.ɵɵelementEnd();
|
|
1515
|
-
i0.ɵɵelementStart(7, "td")(8, "div",
|
|
1516
|
-
i0.ɵɵelement(9, "div",
|
|
1498
|
+
i0.ɵɵelementStart(7, "td")(8, "div", 201);
|
|
1499
|
+
i0.ɵɵelement(9, "div", 202);
|
|
1517
1500
|
i0.ɵɵelementEnd();
|
|
1518
|
-
i0.ɵɵelementStart(10, "span",
|
|
1501
|
+
i0.ɵɵelementStart(10, "span", 203);
|
|
1519
1502
|
i0.ɵɵtext(11);
|
|
1520
1503
|
i0.ɵɵelementEnd()();
|
|
1521
|
-
i0.ɵɵelementStart(12, "td")(13, "span",
|
|
1504
|
+
i0.ɵɵelementStart(12, "td")(13, "span", 156);
|
|
1522
1505
|
i0.ɵɵtext(14);
|
|
1523
1506
|
i0.ɵɵelementEnd()();
|
|
1524
|
-
i0.ɵɵelementStart(15, "td",
|
|
1507
|
+
i0.ɵɵelementStart(15, "td", 125);
|
|
1525
1508
|
i0.ɵɵtext(16);
|
|
1526
1509
|
i0.ɵɵelementEnd()();
|
|
1527
1510
|
} if (rf & 2) {
|
|
1528
|
-
const
|
|
1529
|
-
const
|
|
1511
|
+
const run_r66 = ctx.$implicit;
|
|
1512
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1530
1513
|
i0.ɵɵadvance(2);
|
|
1531
|
-
i0.ɵɵtextInterpolate(
|
|
1514
|
+
i0.ɵɵtextInterpolate(run_r66.RunID);
|
|
1532
1515
|
i0.ɵɵadvance(2);
|
|
1533
|
-
i0.ɵɵtextInterpolate(
|
|
1516
|
+
i0.ɵɵtextInterpolate(run_r66.Source);
|
|
1534
1517
|
i0.ɵɵadvance(2);
|
|
1535
|
-
i0.ɵɵtextInterpolate(
|
|
1518
|
+
i0.ɵɵtextInterpolate(run_r66.Started);
|
|
1536
1519
|
i0.ɵɵadvance(3);
|
|
1537
|
-
i0.ɵɵstyleProp("width",
|
|
1520
|
+
i0.ɵɵstyleProp("width", run_r66.Progress, "%");
|
|
1538
1521
|
i0.ɵɵadvance(2);
|
|
1539
|
-
i0.ɵɵtextInterpolate1("",
|
|
1522
|
+
i0.ɵɵtextInterpolate1("", run_r66.Progress, "%");
|
|
1540
1523
|
i0.ɵɵadvance(2);
|
|
1541
|
-
i0.ɵɵclassMap(
|
|
1524
|
+
i0.ɵɵclassMap(run_r66.StageClass);
|
|
1542
1525
|
i0.ɵɵadvance();
|
|
1543
|
-
i0.ɵɵtextInterpolate(
|
|
1526
|
+
i0.ɵɵtextInterpolate(run_r66.Stage);
|
|
1544
1527
|
i0.ɵɵadvance(2);
|
|
1545
|
-
i0.ɵɵtextInterpolate(
|
|
1528
|
+
i0.ɵɵtextInterpolate(ctx_r1.FormatNumber(run_r66.Items));
|
|
1546
1529
|
} }
|
|
1547
|
-
function
|
|
1548
|
-
i0.ɵɵelementStart(0, "div",
|
|
1549
|
-
i0.ɵɵelement(2, "i",
|
|
1530
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_52_Template(rf, ctx) { if (rf & 1) {
|
|
1531
|
+
i0.ɵɵelementStart(0, "div", 119)(1, "h3");
|
|
1532
|
+
i0.ɵɵelement(2, "i", 199);
|
|
1550
1533
|
i0.ɵɵtext(3, " Active Runs");
|
|
1551
1534
|
i0.ɵɵelementEnd();
|
|
1552
|
-
i0.ɵɵelementStart(4, "div",
|
|
1535
|
+
i0.ɵɵelementStart(4, "div", 117)(5, "table", 92)(6, "thead")(7, "tr")(8, "th");
|
|
1553
1536
|
i0.ɵɵtext(9, "Run ID");
|
|
1554
1537
|
i0.ɵɵelementEnd();
|
|
1555
1538
|
i0.ɵɵelementStart(10, "th");
|
|
@@ -1564,347 +1547,347 @@ function AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_52_
|
|
|
1564
1547
|
i0.ɵɵelementStart(16, "th");
|
|
1565
1548
|
i0.ɵɵtext(17, "Stage");
|
|
1566
1549
|
i0.ɵɵelementEnd();
|
|
1567
|
-
i0.ɵɵelementStart(18, "th",
|
|
1550
|
+
i0.ɵɵelementStart(18, "th", 125);
|
|
1568
1551
|
i0.ɵɵtext(19, "Items");
|
|
1569
1552
|
i0.ɵɵelementEnd()()();
|
|
1570
1553
|
i0.ɵɵelementStart(20, "tbody");
|
|
1571
|
-
i0.ɵɵrepeaterCreate(21,
|
|
1554
|
+
i0.ɵɵrepeaterCreate(21, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_52_For_22_Template, 17, 10, "tr", null, _forTrack4);
|
|
1572
1555
|
i0.ɵɵelementEnd()()()();
|
|
1573
1556
|
} if (rf & 2) {
|
|
1574
|
-
const
|
|
1557
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1575
1558
|
i0.ɵɵadvance(21);
|
|
1576
|
-
i0.ɵɵrepeater(
|
|
1559
|
+
i0.ɵɵrepeater(ctx_r1.ActiveRuns);
|
|
1577
1560
|
} }
|
|
1578
|
-
function
|
|
1579
|
-
i0.ɵɵelementStart(0, "div",
|
|
1561
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_53_For_6_Template(rf, ctx) { if (rf & 1) {
|
|
1562
|
+
i0.ɵɵelementStart(0, "div", 206)(1, "div", 207);
|
|
1580
1563
|
i0.ɵɵtext(2);
|
|
1581
1564
|
i0.ɵɵelementEnd();
|
|
1582
|
-
i0.ɵɵelementStart(3, "div",
|
|
1565
|
+
i0.ɵɵelementStart(3, "div", 208);
|
|
1583
1566
|
i0.ɵɵtext(4);
|
|
1584
1567
|
i0.ɵɵelementEnd();
|
|
1585
|
-
i0.ɵɵelementStart(5, "div",
|
|
1568
|
+
i0.ɵɵelementStart(5, "div", 209);
|
|
1586
1569
|
i0.ɵɵtext(6);
|
|
1587
1570
|
i0.ɵɵelementEnd()();
|
|
1588
1571
|
} if (rf & 2) {
|
|
1589
|
-
const
|
|
1572
|
+
const entry_r67 = ctx.$implicit;
|
|
1590
1573
|
i0.ɵɵadvance(2);
|
|
1591
|
-
i0.ɵɵtextInterpolate(
|
|
1574
|
+
i0.ɵɵtextInterpolate(entry_r67.Time);
|
|
1592
1575
|
i0.ɵɵadvance(2);
|
|
1593
|
-
i0.ɵɵtextInterpolate(
|
|
1576
|
+
i0.ɵɵtextInterpolate(entry_r67.Source);
|
|
1594
1577
|
i0.ɵɵadvance(2);
|
|
1595
|
-
i0.ɵɵtextInterpolate(
|
|
1578
|
+
i0.ɵɵtextInterpolate(entry_r67.Message);
|
|
1596
1579
|
} }
|
|
1597
|
-
function
|
|
1598
|
-
i0.ɵɵelementStart(0, "div",
|
|
1599
|
-
i0.ɵɵelement(2, "i",
|
|
1580
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_53_Template(rf, ctx) { if (rf & 1) {
|
|
1581
|
+
i0.ɵɵelementStart(0, "div", 119)(1, "h3");
|
|
1582
|
+
i0.ɵɵelement(2, "i", 204);
|
|
1600
1583
|
i0.ɵɵtext(3, " Recent Errors");
|
|
1601
1584
|
i0.ɵɵelementEnd();
|
|
1602
|
-
i0.ɵɵelementStart(4, "div",
|
|
1603
|
-
i0.ɵɵrepeaterCreate(5,
|
|
1585
|
+
i0.ɵɵelementStart(4, "div", 205);
|
|
1586
|
+
i0.ɵɵrepeaterCreate(5, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_53_For_6_Template, 7, 3, "div", 206, i0.ɵɵcomponentInstance().TrackByIndex, true);
|
|
1604
1587
|
i0.ɵɵelementEnd()();
|
|
1605
1588
|
} if (rf & 2) {
|
|
1606
|
-
const
|
|
1589
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1607
1590
|
i0.ɵɵadvance(5);
|
|
1608
|
-
i0.ɵɵrepeater(
|
|
1591
|
+
i0.ɵɵrepeater(ctx_r1.ErrorLog);
|
|
1609
1592
|
} }
|
|
1610
|
-
function
|
|
1611
|
-
i0.ɵɵelementStart(0, "section",
|
|
1612
|
-
i0.ɵɵelement(2, "i",
|
|
1593
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
1594
|
+
i0.ɵɵelementStart(0, "section", 14)(1, "div", 15);
|
|
1595
|
+
i0.ɵɵelement(2, "i", 178);
|
|
1613
1596
|
i0.ɵɵelementStart(3, "h1");
|
|
1614
1597
|
i0.ɵɵtext(4, "Pipeline");
|
|
1615
1598
|
i0.ɵɵelementEnd()();
|
|
1616
|
-
i0.ɵɵelementStart(5, "div",
|
|
1617
|
-
i0.ɵɵelement(7, "i",
|
|
1599
|
+
i0.ɵɵelementStart(5, "div", 114)(6, "h3");
|
|
1600
|
+
i0.ɵɵelement(7, "i", 134);
|
|
1618
1601
|
i0.ɵɵtext(8, " Pipeline Throughput (Last 30 Days)");
|
|
1619
1602
|
i0.ɵɵelementEnd();
|
|
1620
|
-
i0.ɵɵelementStart(9, "div",
|
|
1621
|
-
i0.ɵɵrepeaterCreate(11,
|
|
1603
|
+
i0.ɵɵelementStart(9, "div", 160)(10, "div", 179);
|
|
1604
|
+
i0.ɵɵrepeaterCreate(11, AnalyticsResourceComponent_Conditional_6_Conditional_15_For_12_Template, 1, 6, "div", 180, i0.ɵɵcomponentInstance().TrackByIndex, true);
|
|
1622
1605
|
i0.ɵɵelementEnd();
|
|
1623
|
-
i0.ɵɵelementStart(13, "div",
|
|
1624
|
-
i0.ɵɵrepeaterCreate(14,
|
|
1606
|
+
i0.ɵɵelementStart(13, "div", 181);
|
|
1607
|
+
i0.ɵɵrepeaterCreate(14, AnalyticsResourceComponent_Conditional_6_Conditional_15_For_15_Template, 2, 1, "span", null, i0.ɵɵrepeaterTrackByIdentity);
|
|
1625
1608
|
i0.ɵɵelementEnd()()();
|
|
1626
|
-
i0.ɵɵconditionalCreate(16,
|
|
1627
|
-
i0.ɵɵelementStart(17, "div",
|
|
1628
|
-
i0.ɵɵelement(19, "i",
|
|
1609
|
+
i0.ɵɵconditionalCreate(16, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Template, 12, 2, "div", 24);
|
|
1610
|
+
i0.ɵɵelementStart(17, "div", 119)(18, "h3");
|
|
1611
|
+
i0.ɵɵelement(19, "i", 182);
|
|
1629
1612
|
i0.ɵɵtext(20, " Processing Time Breakdown (Avg per Item)");
|
|
1630
1613
|
i0.ɵɵelementEnd();
|
|
1631
|
-
i0.ɵɵelementStart(21, "div",
|
|
1632
|
-
i0.ɵɵrepeaterCreate(23,
|
|
1614
|
+
i0.ɵɵelementStart(21, "div", 160)(22, "div", 183);
|
|
1615
|
+
i0.ɵɵrepeaterCreate(23, AnalyticsResourceComponent_Conditional_6_Conditional_15_For_24_Template, 8, 7, "div", 184, _forTrack0);
|
|
1633
1616
|
i0.ɵɵelementEnd();
|
|
1634
|
-
i0.ɵɵelementStart(25, "div",
|
|
1617
|
+
i0.ɵɵelementStart(25, "div", 185)(26, "span")(27, "strong");
|
|
1635
1618
|
i0.ɵɵtext(28, "Total avg:");
|
|
1636
1619
|
i0.ɵɵelementEnd();
|
|
1637
1620
|
i0.ɵɵtext(29);
|
|
1638
1621
|
i0.ɵɵelementEnd();
|
|
1639
|
-
i0.ɵɵconditionalCreate(30,
|
|
1622
|
+
i0.ɵɵconditionalCreate(30, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_30_Template, 3, 2, "span", 186);
|
|
1640
1623
|
i0.ɵɵelementEnd()()();
|
|
1641
|
-
i0.ɵɵelementStart(31, "div",
|
|
1642
|
-
i0.ɵɵelement(33, "i",
|
|
1624
|
+
i0.ɵɵelementStart(31, "div", 119)(32, "h3");
|
|
1625
|
+
i0.ɵɵelement(33, "i", 28);
|
|
1643
1626
|
i0.ɵɵtext(34, " Success Rate Overview");
|
|
1644
1627
|
i0.ɵɵelementEnd();
|
|
1645
|
-
i0.ɵɵelementStart(35, "div",
|
|
1628
|
+
i0.ɵɵelementStart(35, "div", 160)(36, "div", 187)(37, "div", 188)(38, "div", 189);
|
|
1646
1629
|
i0.ɵɵtext(39);
|
|
1647
1630
|
i0.ɵɵelementEnd();
|
|
1648
|
-
i0.ɵɵelementStart(40, "div",
|
|
1631
|
+
i0.ɵɵelementStart(40, "div", 190);
|
|
1649
1632
|
i0.ɵɵtext(41, "Success Rate");
|
|
1650
1633
|
i0.ɵɵelementEnd()();
|
|
1651
|
-
i0.ɵɵelementStart(42, "div",
|
|
1634
|
+
i0.ɵɵelementStart(42, "div", 188)(43, "div", 191);
|
|
1652
1635
|
i0.ɵɵtext(44);
|
|
1653
1636
|
i0.ɵɵelementEnd();
|
|
1654
|
-
i0.ɵɵelementStart(45, "div",
|
|
1637
|
+
i0.ɵɵelementStart(45, "div", 190);
|
|
1655
1638
|
i0.ɵɵtext(46, "Failure Rate");
|
|
1656
1639
|
i0.ɵɵelementEnd()();
|
|
1657
|
-
i0.ɵɵelementStart(47, "div",
|
|
1640
|
+
i0.ɵɵelementStart(47, "div", 188)(48, "div", 192);
|
|
1658
1641
|
i0.ɵɵtext(49);
|
|
1659
1642
|
i0.ɵɵelementEnd();
|
|
1660
|
-
i0.ɵɵelementStart(50, "div",
|
|
1643
|
+
i0.ɵɵelementStart(50, "div", 190);
|
|
1661
1644
|
i0.ɵɵtext(51, "Total Runs");
|
|
1662
1645
|
i0.ɵɵelementEnd()()()()();
|
|
1663
|
-
i0.ɵɵconditionalCreate(52,
|
|
1664
|
-
i0.ɵɵconditionalCreate(53,
|
|
1646
|
+
i0.ɵɵconditionalCreate(52, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_52_Template, 23, 0, "div", 119);
|
|
1647
|
+
i0.ɵɵconditionalCreate(53, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_53_Template, 7, 0, "div", 119);
|
|
1665
1648
|
i0.ɵɵelementEnd();
|
|
1666
1649
|
} if (rf & 2) {
|
|
1667
|
-
const
|
|
1650
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
1668
1651
|
i0.ɵɵadvance(11);
|
|
1669
|
-
i0.ɵɵrepeater(
|
|
1652
|
+
i0.ɵɵrepeater(ctx_r1.PipelineThroughputBars);
|
|
1670
1653
|
i0.ɵɵadvance(3);
|
|
1671
|
-
i0.ɵɵrepeater(
|
|
1654
|
+
i0.ɵɵrepeater(ctx_r1.PipelineDateLabels);
|
|
1672
1655
|
i0.ɵɵadvance(2);
|
|
1673
|
-
i0.ɵɵconditional(
|
|
1656
|
+
i0.ɵɵconditional(ctx_r1.DrillDownTarget && ctx_r1.DrillDownTarget.startsWith("pipeline-throughput:") ? 16 : -1);
|
|
1674
1657
|
i0.ɵɵadvance(7);
|
|
1675
|
-
i0.ɵɵrepeater(
|
|
1658
|
+
i0.ɵɵrepeater(ctx_r1.ProcessingStages);
|
|
1676
1659
|
i0.ɵɵadvance(6);
|
|
1677
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1660
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.TotalAvgProcessingTime, "s per item");
|
|
1678
1661
|
i0.ɵɵadvance();
|
|
1679
|
-
i0.ɵɵconditional(
|
|
1662
|
+
i0.ɵɵconditional(ctx_r1.BottleneckStage ? 30 : -1);
|
|
1680
1663
|
i0.ɵɵadvance(9);
|
|
1681
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1664
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.rawProcessRuns.length > 0 ? (100 - ctx_r1.ErrorLog.length / ctx_r1.rawProcessRuns.length * 100).toFixed(1) : "100", "% ");
|
|
1682
1665
|
i0.ɵɵadvance(5);
|
|
1683
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1666
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.rawProcessRuns.length > 0 ? (ctx_r1.ErrorLog.length / ctx_r1.rawProcessRuns.length * 100).toFixed(1) : "0", "% ");
|
|
1684
1667
|
i0.ɵɵadvance(5);
|
|
1685
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1668
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.FormatNumber(ctx_r1.rawProcessRuns.length), " ");
|
|
1686
1669
|
i0.ɵɵadvance(3);
|
|
1687
|
-
i0.ɵɵconditional(
|
|
1670
|
+
i0.ɵɵconditional(ctx_r1.ActiveRuns.length > 0 ? 52 : -1);
|
|
1688
1671
|
i0.ɵɵadvance();
|
|
1689
|
-
i0.ɵɵconditional(
|
|
1672
|
+
i0.ɵɵconditional(ctx_r1.ErrorLog.length > 0 ? 53 : -1);
|
|
1690
1673
|
} }
|
|
1691
|
-
function
|
|
1674
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_For_12_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
1692
1675
|
i0.ɵɵtext(0);
|
|
1693
1676
|
} if (rf & 2) {
|
|
1694
|
-
const
|
|
1695
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1677
|
+
const bin_r69 = i0.ɵɵnextContext().$implicit;
|
|
1678
|
+
i0.ɵɵtextInterpolate1(" ", bin_r69.Count, " ");
|
|
1696
1679
|
} }
|
|
1697
|
-
function
|
|
1698
|
-
const
|
|
1699
|
-
i0.ɵɵelementStart(0, "div",
|
|
1700
|
-
i0.ɵɵlistener("click", function
|
|
1701
|
-
i0.ɵɵelementStart(1, "div",
|
|
1702
|
-
i0.ɵɵconditionalCreate(2,
|
|
1680
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_For_12_Template(rf, ctx) { if (rf & 1) {
|
|
1681
|
+
const _r68 = i0.ɵɵgetCurrentView();
|
|
1682
|
+
i0.ɵɵelementStart(0, "div", 219);
|
|
1683
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_16_For_12_Template_div_click_0_listener() { const bin_r69 = i0.ɵɵrestoreView(_r68).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OpenDrillDown("quality-bin:" + bin_r69.Label)); });
|
|
1684
|
+
i0.ɵɵelementStart(1, "div", 220);
|
|
1685
|
+
i0.ɵɵconditionalCreate(2, AnalyticsResourceComponent_Conditional_6_Conditional_16_For_12_Conditional_2_Template, 1, 1);
|
|
1703
1686
|
i0.ɵɵelementEnd();
|
|
1704
|
-
i0.ɵɵelementStart(3, "div",
|
|
1687
|
+
i0.ɵɵelementStart(3, "div", 221);
|
|
1705
1688
|
i0.ɵɵtext(4);
|
|
1706
1689
|
i0.ɵɵelementEnd()();
|
|
1707
1690
|
} if (rf & 2) {
|
|
1708
|
-
const
|
|
1691
|
+
const bin_r69 = ctx.$implicit;
|
|
1709
1692
|
i0.ɵɵadvance();
|
|
1710
|
-
i0.ɵɵstyleProp("height",
|
|
1693
|
+
i0.ɵɵstyleProp("height", bin_r69.Percentage, "%")("background", bin_r69.Color);
|
|
1711
1694
|
i0.ɵɵadvance();
|
|
1712
|
-
i0.ɵɵconditional(
|
|
1695
|
+
i0.ɵɵconditional(bin_r69.Count > 0 ? 2 : -1);
|
|
1713
1696
|
i0.ɵɵadvance(2);
|
|
1714
|
-
i0.ɵɵtextInterpolate(
|
|
1697
|
+
i0.ɵɵtextInterpolate(bin_r69.Label);
|
|
1715
1698
|
} }
|
|
1716
|
-
function
|
|
1699
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_For_15_Template(rf, ctx) { if (rf & 1) {
|
|
1717
1700
|
i0.ɵɵelementStart(0, "span")(1, "strong");
|
|
1718
1701
|
i0.ɵɵtext(2);
|
|
1719
1702
|
i0.ɵɵelementEnd();
|
|
1720
1703
|
i0.ɵɵtext(3);
|
|
1721
1704
|
i0.ɵɵelementEnd();
|
|
1722
1705
|
} if (rf & 2) {
|
|
1723
|
-
const
|
|
1706
|
+
const stat_r70 = ctx.$implicit;
|
|
1724
1707
|
i0.ɵɵadvance(2);
|
|
1725
|
-
i0.ɵɵtextInterpolate1("",
|
|
1708
|
+
i0.ɵɵtextInterpolate1("", stat_r70.Label, ":");
|
|
1726
1709
|
i0.ɵɵadvance();
|
|
1727
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1710
|
+
i0.ɵɵtextInterpolate1(" ", stat_r70.Value);
|
|
1728
1711
|
} }
|
|
1729
|
-
function
|
|
1730
|
-
const
|
|
1731
|
-
i0.ɵɵelementStart(0, "button",
|
|
1732
|
-
i0.ɵɵlistener("click", function
|
|
1733
|
-
i0.ɵɵelement(1, "i",
|
|
1712
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
1713
|
+
const _r72 = i0.ɵɵgetCurrentView();
|
|
1714
|
+
i0.ɵɵelementStart(0, "button", 90);
|
|
1715
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r72); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.ExportDrillDownCSV()); });
|
|
1716
|
+
i0.ɵɵelement(1, "i", 91);
|
|
1734
1717
|
i0.ɵɵtext(2, " CSV");
|
|
1735
1718
|
i0.ɵɵelementEnd();
|
|
1736
1719
|
} }
|
|
1737
|
-
function
|
|
1738
|
-
i0.ɵɵelement(0, "mj-loading",
|
|
1720
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
1721
|
+
i0.ɵɵelement(0, "mj-loading", 87);
|
|
1739
1722
|
} }
|
|
1740
|
-
function
|
|
1723
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Conditional_10_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
1741
1724
|
i0.ɵɵelementStart(0, "th");
|
|
1742
1725
|
i0.ɵɵtext(1);
|
|
1743
1726
|
i0.ɵɵelementEnd();
|
|
1744
1727
|
} if (rf & 2) {
|
|
1745
|
-
const
|
|
1728
|
+
const col_r73 = ctx.$implicit;
|
|
1746
1729
|
i0.ɵɵadvance();
|
|
1747
|
-
i0.ɵɵtextInterpolate(
|
|
1730
|
+
i0.ɵɵtextInterpolate(col_r73);
|
|
1748
1731
|
} }
|
|
1749
|
-
function
|
|
1750
|
-
i0.ɵɵelement(0, "th",
|
|
1732
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Conditional_10_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
1733
|
+
i0.ɵɵelement(0, "th", 93);
|
|
1751
1734
|
} }
|
|
1752
|
-
function
|
|
1735
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Conditional_10_For_9_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
1753
1736
|
i0.ɵɵelementStart(0, "td");
|
|
1754
1737
|
i0.ɵɵtext(1);
|
|
1755
1738
|
i0.ɵɵelementEnd();
|
|
1756
1739
|
} if (rf & 2) {
|
|
1757
|
-
const
|
|
1758
|
-
const
|
|
1740
|
+
const col_r74 = ctx.$implicit;
|
|
1741
|
+
const row_r75 = i0.ɵɵnextContext().$implicit;
|
|
1759
1742
|
i0.ɵɵadvance();
|
|
1760
|
-
i0.ɵɵtextInterpolate(
|
|
1743
|
+
i0.ɵɵtextInterpolate(row_r75[col_r74]);
|
|
1761
1744
|
} }
|
|
1762
|
-
function
|
|
1763
|
-
const
|
|
1764
|
-
i0.ɵɵelementStart(0, "button",
|
|
1765
|
-
i0.ɵɵlistener("click", function
|
|
1766
|
-
i0.ɵɵelement(1, "i",
|
|
1745
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Conditional_10_For_9_Conditional_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
1746
|
+
const _r76 = i0.ɵɵgetCurrentView();
|
|
1747
|
+
i0.ɵɵelementStart(0, "button", 133);
|
|
1748
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Conditional_10_For_9_Conditional_3_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r76); const row_r75 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.OpenDrillDownRecord(row_r75)); });
|
|
1749
|
+
i0.ɵɵelement(1, "i", 96);
|
|
1767
1750
|
i0.ɵɵelementEnd();
|
|
1768
1751
|
} }
|
|
1769
|
-
function
|
|
1770
|
-
i0.ɵɵelementStart(0, "td",
|
|
1771
|
-
i0.ɵɵconditionalCreate(1,
|
|
1752
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Conditional_10_For_9_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1753
|
+
i0.ɵɵelementStart(0, "td", 93);
|
|
1754
|
+
i0.ɵɵconditionalCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Conditional_10_For_9_Conditional_3_Conditional_1_Template, 2, 0, "button", 132);
|
|
1772
1755
|
i0.ɵɵelementEnd();
|
|
1773
1756
|
} if (rf & 2) {
|
|
1774
|
-
const
|
|
1757
|
+
const row_r75 = i0.ɵɵnextContext().$implicit;
|
|
1775
1758
|
i0.ɵɵadvance();
|
|
1776
|
-
i0.ɵɵconditional(
|
|
1759
|
+
i0.ɵɵconditional(row_r75["_RecordID"] ? 1 : -1);
|
|
1777
1760
|
} }
|
|
1778
|
-
function
|
|
1761
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Conditional_10_For_9_Template(rf, ctx) { if (rf & 1) {
|
|
1779
1762
|
i0.ɵɵelementStart(0, "tr");
|
|
1780
|
-
i0.ɵɵrepeaterCreate(1,
|
|
1781
|
-
i0.ɵɵconditionalCreate(3,
|
|
1763
|
+
i0.ɵɵrepeaterCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Conditional_10_For_9_For_2_Template, 2, 1, "td", null, i0.ɵɵrepeaterTrackByIdentity);
|
|
1764
|
+
i0.ɵɵconditionalCreate(3, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Conditional_10_For_9_Conditional_3_Template, 2, 1, "td", 93);
|
|
1782
1765
|
i0.ɵɵelementEnd();
|
|
1783
1766
|
} if (rf & 2) {
|
|
1784
|
-
const
|
|
1767
|
+
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
1785
1768
|
i0.ɵɵadvance();
|
|
1786
|
-
i0.ɵɵrepeater(
|
|
1769
|
+
i0.ɵɵrepeater(ctx_r1.DrillDownColumns);
|
|
1787
1770
|
i0.ɵɵadvance(2);
|
|
1788
|
-
i0.ɵɵconditional(
|
|
1771
|
+
i0.ɵɵconditional(ctx_r1.DrillDownHasActions ? 3 : -1);
|
|
1789
1772
|
} }
|
|
1790
|
-
function
|
|
1791
|
-
i0.ɵɵelementStart(0, "div",
|
|
1792
|
-
i0.ɵɵrepeaterCreate(4,
|
|
1793
|
-
i0.ɵɵconditionalCreate(6,
|
|
1773
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
1774
|
+
i0.ɵɵelementStart(0, "div", 88)(1, "table", 92)(2, "thead")(3, "tr");
|
|
1775
|
+
i0.ɵɵrepeaterCreate(4, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Conditional_10_For_5_Template, 2, 1, "th", null, i0.ɵɵrepeaterTrackByIdentity);
|
|
1776
|
+
i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Conditional_10_Conditional_6_Template, 1, 0, "th", 93);
|
|
1794
1777
|
i0.ɵɵelementEnd()();
|
|
1795
1778
|
i0.ɵɵelementStart(7, "tbody");
|
|
1796
|
-
i0.ɵɵrepeaterCreate(8,
|
|
1779
|
+
i0.ɵɵrepeaterCreate(8, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Conditional_10_For_9_Template, 4, 1, "tr", null, i0.ɵɵcomponentInstance().TrackByIndex, true);
|
|
1797
1780
|
i0.ɵɵelementEnd()()();
|
|
1798
1781
|
} if (rf & 2) {
|
|
1799
|
-
const
|
|
1782
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1800
1783
|
i0.ɵɵadvance(4);
|
|
1801
|
-
i0.ɵɵrepeater(
|
|
1784
|
+
i0.ɵɵrepeater(ctx_r1.DrillDownColumns);
|
|
1802
1785
|
i0.ɵɵadvance(2);
|
|
1803
|
-
i0.ɵɵconditional(
|
|
1786
|
+
i0.ɵɵconditional(ctx_r1.DrillDownHasActions ? 6 : -1);
|
|
1804
1787
|
i0.ɵɵadvance(2);
|
|
1805
|
-
i0.ɵɵrepeater(
|
|
1788
|
+
i0.ɵɵrepeater(ctx_r1.DrillDownData);
|
|
1806
1789
|
} }
|
|
1807
|
-
function
|
|
1808
|
-
i0.ɵɵelementStart(0, "div",
|
|
1790
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
1791
|
+
i0.ɵɵelementStart(0, "div", 89);
|
|
1809
1792
|
i0.ɵɵtext(1, "No items in this confidence range");
|
|
1810
1793
|
i0.ɵɵelementEnd();
|
|
1811
1794
|
} }
|
|
1812
|
-
function
|
|
1813
|
-
const
|
|
1814
|
-
i0.ɵɵelementStart(0, "div",
|
|
1815
|
-
i0.ɵɵelement(3, "i",
|
|
1795
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
1796
|
+
const _r71 = i0.ɵɵgetCurrentView();
|
|
1797
|
+
i0.ɵɵelementStart(0, "div", 24)(1, "div", 80)(2, "span", 81);
|
|
1798
|
+
i0.ɵɵelement(3, "i", 82);
|
|
1816
1799
|
i0.ɵɵtext(4);
|
|
1817
1800
|
i0.ɵɵelementEnd();
|
|
1818
|
-
i0.ɵɵelementStart(5, "div",
|
|
1819
|
-
i0.ɵɵconditionalCreate(6,
|
|
1820
|
-
i0.ɵɵelementStart(7, "button",
|
|
1821
|
-
i0.ɵɵlistener("click", function
|
|
1822
|
-
i0.ɵɵelement(8, "i",
|
|
1801
|
+
i0.ɵɵelementStart(5, "div", 83);
|
|
1802
|
+
i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Conditional_6_Template, 3, 0, "button", 84);
|
|
1803
|
+
i0.ɵɵelementStart(7, "button", 85);
|
|
1804
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r71); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.CloseDrillDown()); });
|
|
1805
|
+
i0.ɵɵelement(8, "i", 86);
|
|
1823
1806
|
i0.ɵɵelementEnd()()();
|
|
1824
|
-
i0.ɵɵconditionalCreate(9,
|
|
1807
|
+
i0.ɵɵconditionalCreate(9, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Conditional_9_Template, 1, 0, "mj-loading", 87)(10, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Conditional_10_Template, 10, 1, "div", 88)(11, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Conditional_11_Template, 2, 0, "div", 89);
|
|
1825
1808
|
i0.ɵɵelementEnd();
|
|
1826
1809
|
} if (rf & 2) {
|
|
1827
|
-
const
|
|
1810
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1828
1811
|
i0.ɵɵadvance(4);
|
|
1829
|
-
i0.ɵɵtextInterpolate1(" Items in Confidence Range ",
|
|
1812
|
+
i0.ɵɵtextInterpolate1(" Items in Confidence Range ", ctx_r1.DrillDownTarget.replace("quality-bin:", ""));
|
|
1830
1813
|
i0.ɵɵadvance(2);
|
|
1831
|
-
i0.ɵɵconditional(
|
|
1814
|
+
i0.ɵɵconditional(ctx_r1.DrillDownData.length > 0 ? 6 : -1);
|
|
1832
1815
|
i0.ɵɵadvance(3);
|
|
1833
|
-
i0.ɵɵconditional(
|
|
1816
|
+
i0.ɵɵconditional(ctx_r1.IsDrillDownLoading ? 9 : ctx_r1.DrillDownData.length > 0 ? 10 : 11);
|
|
1834
1817
|
} }
|
|
1835
|
-
function
|
|
1836
|
-
i0.ɵɵelementStart(0, "div",
|
|
1837
|
-
i0.ɵɵelement(2, "div",
|
|
1818
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_17_For_7_Template(rf, ctx) { if (rf & 1) {
|
|
1819
|
+
i0.ɵɵelementStart(0, "div", 224)(1, "div", 226);
|
|
1820
|
+
i0.ɵɵelement(2, "div", 227)(3, "div", 228)(4, "div", 229);
|
|
1838
1821
|
i0.ɵɵelementEnd();
|
|
1839
|
-
i0.ɵɵelementStart(5, "div",
|
|
1822
|
+
i0.ɵɵelementStart(5, "div", 230);
|
|
1840
1823
|
i0.ɵɵtext(6);
|
|
1841
1824
|
i0.ɵɵelementEnd()();
|
|
1842
1825
|
} if (rf & 2) {
|
|
1843
|
-
const
|
|
1826
|
+
const entity_r77 = ctx.$implicit;
|
|
1844
1827
|
i0.ɵɵadvance(2);
|
|
1845
|
-
i0.ɵɵstyleProp("height",
|
|
1846
|
-
i0.ɵɵproperty("title", "High: " +
|
|
1828
|
+
i0.ɵɵstyleProp("height", entity_r77.High, "%");
|
|
1829
|
+
i0.ɵɵproperty("title", "High: " + entity_r77.High + "%");
|
|
1847
1830
|
i0.ɵɵadvance();
|
|
1848
|
-
i0.ɵɵstyleProp("height",
|
|
1849
|
-
i0.ɵɵproperty("title", "Med: " +
|
|
1831
|
+
i0.ɵɵstyleProp("height", entity_r77.Med, "%");
|
|
1832
|
+
i0.ɵɵproperty("title", "Med: " + entity_r77.Med + "%");
|
|
1850
1833
|
i0.ɵɵadvance();
|
|
1851
|
-
i0.ɵɵstyleProp("height",
|
|
1852
|
-
i0.ɵɵproperty("title", "Low: " +
|
|
1834
|
+
i0.ɵɵstyleProp("height", entity_r77.Low, "%");
|
|
1835
|
+
i0.ɵɵproperty("title", "Low: " + entity_r77.Low + "%");
|
|
1853
1836
|
i0.ɵɵadvance(2);
|
|
1854
|
-
i0.ɵɵtextInterpolate(
|
|
1837
|
+
i0.ɵɵtextInterpolate(entity_r77.Name);
|
|
1855
1838
|
} }
|
|
1856
|
-
function
|
|
1857
|
-
i0.ɵɵelementStart(0, "div",
|
|
1858
|
-
i0.ɵɵelement(1, "div",
|
|
1839
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_17_For_10_Template(rf, ctx) { if (rf & 1) {
|
|
1840
|
+
i0.ɵɵelementStart(0, "div", 58);
|
|
1841
|
+
i0.ɵɵelement(1, "div", 142);
|
|
1859
1842
|
i0.ɵɵtext(2);
|
|
1860
1843
|
i0.ɵɵelementEnd();
|
|
1861
1844
|
} if (rf & 2) {
|
|
1862
|
-
const
|
|
1845
|
+
const item_r78 = ctx.$implicit;
|
|
1863
1846
|
i0.ɵɵadvance();
|
|
1864
|
-
i0.ɵɵstyleProp("background",
|
|
1847
|
+
i0.ɵɵstyleProp("background", item_r78.Color);
|
|
1865
1848
|
i0.ɵɵadvance();
|
|
1866
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1849
|
+
i0.ɵɵtextInterpolate1(" ", item_r78.Label);
|
|
1867
1850
|
} }
|
|
1868
|
-
function
|
|
1869
|
-
i0.ɵɵelementStart(0, "div",
|
|
1870
|
-
i0.ɵɵelement(2, "i",
|
|
1851
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
1852
|
+
i0.ɵɵelementStart(0, "div", 119)(1, "h3");
|
|
1853
|
+
i0.ɵɵelement(2, "i", 222);
|
|
1871
1854
|
i0.ɵɵtext(3, " Weight Distribution by Entity");
|
|
1872
1855
|
i0.ɵɵelementEnd();
|
|
1873
|
-
i0.ɵɵelementStart(4, "div",
|
|
1874
|
-
i0.ɵɵrepeaterCreate(6,
|
|
1856
|
+
i0.ɵɵelementStart(4, "div", 160)(5, "div", 223);
|
|
1857
|
+
i0.ɵɵrepeaterCreate(6, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_17_For_7_Template, 7, 10, "div", 224, _forTrack0);
|
|
1875
1858
|
i0.ɵɵelementEnd();
|
|
1876
|
-
i0.ɵɵelementStart(8, "div",
|
|
1877
|
-
i0.ɵɵrepeaterCreate(9,
|
|
1859
|
+
i0.ɵɵelementStart(8, "div", 225);
|
|
1860
|
+
i0.ɵɵrepeaterCreate(9, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_17_For_10_Template, 3, 3, "div", 58, _forTrack1);
|
|
1878
1861
|
i0.ɵɵelementEnd()()();
|
|
1879
1862
|
} if (rf & 2) {
|
|
1880
|
-
const
|
|
1863
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1881
1864
|
i0.ɵɵadvance(6);
|
|
1882
|
-
i0.ɵɵrepeater(
|
|
1865
|
+
i0.ɵɵrepeater(ctx_r1.WeightByEntity);
|
|
1883
1866
|
i0.ɵɵadvance(3);
|
|
1884
|
-
i0.ɵɵrepeater(
|
|
1867
|
+
i0.ɵɵrepeater(ctx_r1.WeightLegend);
|
|
1885
1868
|
} }
|
|
1886
|
-
function
|
|
1869
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_18_For_21_Template(rf, ctx) { if (rf & 1) {
|
|
1887
1870
|
i0.ɵɵnamespaceSVG();
|
|
1888
|
-
i0.ɵɵelement(0, "circle",
|
|
1871
|
+
i0.ɵɵelement(0, "circle", 238);
|
|
1889
1872
|
} if (rf & 2) {
|
|
1890
|
-
const
|
|
1891
|
-
i0.ɵɵattribute("cx",
|
|
1873
|
+
const dot_r79 = ctx.$implicit;
|
|
1874
|
+
i0.ɵɵattribute("cx", dot_r79.Cx)("cy", dot_r79.Cy);
|
|
1892
1875
|
} }
|
|
1893
|
-
function
|
|
1876
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_18_For_24_Template(rf, ctx) { if (rf & 1) {
|
|
1894
1877
|
i0.ɵɵelementStart(0, "span");
|
|
1895
1878
|
i0.ɵɵtext(1);
|
|
1896
1879
|
i0.ɵɵelementEnd();
|
|
1897
1880
|
} if (rf & 2) {
|
|
1898
|
-
const
|
|
1881
|
+
const label_r80 = ctx.$implicit;
|
|
1899
1882
|
i0.ɵɵadvance();
|
|
1900
|
-
i0.ɵɵtextInterpolate(
|
|
1883
|
+
i0.ɵɵtextInterpolate(label_r80);
|
|
1901
1884
|
} }
|
|
1902
|
-
function
|
|
1903
|
-
i0.ɵɵelementStart(0, "div",
|
|
1904
|
-
i0.ɵɵelement(2, "i",
|
|
1885
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
1886
|
+
i0.ɵɵelementStart(0, "div", 119)(1, "h3");
|
|
1887
|
+
i0.ɵɵelement(2, "i", 28);
|
|
1905
1888
|
i0.ɵɵtext(3, " Tag Accuracy Over Time (Weekly Avg Confidence)");
|
|
1906
1889
|
i0.ɵɵelementEnd();
|
|
1907
|
-
i0.ɵɵelementStart(4, "div",
|
|
1890
|
+
i0.ɵɵelementStart(4, "div", 160)(5, "div", 231)(6, "div", 232)(7, "div");
|
|
1908
1891
|
i0.ɵɵtext(8, "1.0");
|
|
1909
1892
|
i0.ɵɵelementEnd();
|
|
1910
1893
|
i0.ɵɵelementStart(9, "div");
|
|
@@ -1916,75 +1899,75 @@ function AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_18_
|
|
|
1916
1899
|
i0.ɵɵelementStart(13, "div");
|
|
1917
1900
|
i0.ɵɵtext(14, "0.25");
|
|
1918
1901
|
i0.ɵɵelementEnd()();
|
|
1919
|
-
i0.ɵɵelementStart(15, "div",
|
|
1920
|
-
i0.ɵɵelement(16, "div",
|
|
1902
|
+
i0.ɵɵelementStart(15, "div", 233);
|
|
1903
|
+
i0.ɵɵelement(16, "div", 234)(17, "div", 235);
|
|
1921
1904
|
i0.ɵɵnamespaceSVG();
|
|
1922
|
-
i0.ɵɵelementStart(18, "svg",
|
|
1923
|
-
i0.ɵɵelement(19, "polyline",
|
|
1924
|
-
i0.ɵɵrepeaterCreate(20,
|
|
1905
|
+
i0.ɵɵelementStart(18, "svg", 236);
|
|
1906
|
+
i0.ɵɵelement(19, "polyline", 237);
|
|
1907
|
+
i0.ɵɵrepeaterCreate(20, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_18_For_21_Template, 1, 2, ":svg:circle", 238, i0.ɵɵcomponentInstance().TrackByIndex, true);
|
|
1925
1908
|
i0.ɵɵelementEnd()()();
|
|
1926
1909
|
i0.ɵɵnamespaceHTML();
|
|
1927
|
-
i0.ɵɵelementStart(22, "div",
|
|
1928
|
-
i0.ɵɵrepeaterCreate(23,
|
|
1910
|
+
i0.ɵɵelementStart(22, "div", 239);
|
|
1911
|
+
i0.ɵɵrepeaterCreate(23, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_18_For_24_Template, 2, 1, "span", null, i0.ɵɵrepeaterTrackByIdentity);
|
|
1929
1912
|
i0.ɵɵelementEnd();
|
|
1930
|
-
i0.ɵɵelementStart(25, "div",
|
|
1931
|
-
i0.ɵɵelement(26, "i",
|
|
1913
|
+
i0.ɵɵelementStart(25, "div", 240);
|
|
1914
|
+
i0.ɵɵelement(26, "i", 241);
|
|
1932
1915
|
i0.ɵɵtext(27);
|
|
1933
1916
|
i0.ɵɵelementEnd()()();
|
|
1934
1917
|
} if (rf & 2) {
|
|
1935
|
-
const
|
|
1918
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1936
1919
|
i0.ɵɵadvance(19);
|
|
1937
|
-
i0.ɵɵattribute("points",
|
|
1920
|
+
i0.ɵɵattribute("points", ctx_r1.AccuracyLinePoints);
|
|
1938
1921
|
i0.ɵɵadvance();
|
|
1939
|
-
i0.ɵɵrepeater(
|
|
1922
|
+
i0.ɵɵrepeater(ctx_r1.AccuracyDots);
|
|
1940
1923
|
i0.ɵɵadvance(3);
|
|
1941
|
-
i0.ɵɵrepeater(
|
|
1924
|
+
i0.ɵɵrepeater(ctx_r1.AccuracyMonthLabels);
|
|
1942
1925
|
i0.ɵɵadvance(4);
|
|
1943
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1926
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.AccuracyTrendText, " ");
|
|
1944
1927
|
} }
|
|
1945
|
-
function
|
|
1928
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_19_For_20_Template(rf, ctx) { if (rf & 1) {
|
|
1946
1929
|
i0.ɵɵelementStart(0, "tr")(1, "td")(2, "strong");
|
|
1947
1930
|
i0.ɵɵtext(3);
|
|
1948
1931
|
i0.ɵɵelementEnd()();
|
|
1949
|
-
i0.ɵɵelementStart(4, "td",
|
|
1932
|
+
i0.ɵɵelementStart(4, "td", 125);
|
|
1950
1933
|
i0.ɵɵtext(5);
|
|
1951
1934
|
i0.ɵɵelementEnd();
|
|
1952
|
-
i0.ɵɵelementStart(6, "td",
|
|
1935
|
+
i0.ɵɵelementStart(6, "td", 125);
|
|
1953
1936
|
i0.ɵɵtext(7);
|
|
1954
1937
|
i0.ɵɵelementEnd();
|
|
1955
1938
|
i0.ɵɵelementStart(8, "td");
|
|
1956
1939
|
i0.ɵɵtext(9);
|
|
1957
1940
|
i0.ɵɵelementEnd();
|
|
1958
|
-
i0.ɵɵelementStart(10, "td")(11, "span",
|
|
1941
|
+
i0.ɵɵelementStart(10, "td")(11, "span", 156);
|
|
1959
1942
|
i0.ɵɵtext(12);
|
|
1960
1943
|
i0.ɵɵelementEnd()()();
|
|
1961
1944
|
} if (rf & 2) {
|
|
1962
|
-
const
|
|
1945
|
+
const tag_r81 = ctx.$implicit;
|
|
1963
1946
|
i0.ɵɵadvance(3);
|
|
1964
|
-
i0.ɵɵtextInterpolate(
|
|
1947
|
+
i0.ɵɵtextInterpolate(tag_r81.Name);
|
|
1965
1948
|
i0.ɵɵadvance(2);
|
|
1966
|
-
i0.ɵɵtextInterpolate(
|
|
1949
|
+
i0.ɵɵtextInterpolate(tag_r81.AvgWeight);
|
|
1967
1950
|
i0.ɵɵadvance(2);
|
|
1968
|
-
i0.ɵɵtextInterpolate(
|
|
1951
|
+
i0.ɵɵtextInterpolate(tag_r81.UsageCount);
|
|
1969
1952
|
i0.ɵɵadvance(2);
|
|
1970
|
-
i0.ɵɵtextInterpolate(
|
|
1953
|
+
i0.ɵɵtextInterpolate(tag_r81.TopEntity);
|
|
1971
1954
|
i0.ɵɵadvance(2);
|
|
1972
|
-
i0.ɵɵclassMap(
|
|
1955
|
+
i0.ɵɵclassMap(tag_r81.ActionClass);
|
|
1973
1956
|
i0.ɵɵadvance();
|
|
1974
|
-
i0.ɵɵtextInterpolate(
|
|
1957
|
+
i0.ɵɵtextInterpolate(tag_r81.SuggestedAction);
|
|
1975
1958
|
} }
|
|
1976
|
-
function
|
|
1977
|
-
i0.ɵɵelementStart(0, "div",
|
|
1978
|
-
i0.ɵɵelement(2, "i",
|
|
1959
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
1960
|
+
i0.ɵɵelementStart(0, "div", 119)(1, "h3");
|
|
1961
|
+
i0.ɵɵelement(2, "i", 242);
|
|
1979
1962
|
i0.ɵɵtext(3, " Low-Confidence Tags (Avg Weight < 0.4)");
|
|
1980
1963
|
i0.ɵɵelementEnd();
|
|
1981
|
-
i0.ɵɵelementStart(4, "div",
|
|
1964
|
+
i0.ɵɵelementStart(4, "div", 117)(5, "table", 92)(6, "thead")(7, "tr")(8, "th");
|
|
1982
1965
|
i0.ɵɵtext(9, "Tag Name");
|
|
1983
1966
|
i0.ɵɵelementEnd();
|
|
1984
|
-
i0.ɵɵelementStart(10, "th",
|
|
1967
|
+
i0.ɵɵelementStart(10, "th", 125);
|
|
1985
1968
|
i0.ɵɵtext(11, "Avg Weight");
|
|
1986
1969
|
i0.ɵɵelementEnd();
|
|
1987
|
-
i0.ɵɵelementStart(12, "th",
|
|
1970
|
+
i0.ɵɵelementStart(12, "th", 125);
|
|
1988
1971
|
i0.ɵɵtext(13, "Usage Count");
|
|
1989
1972
|
i0.ɵɵelementEnd();
|
|
1990
1973
|
i0.ɵɵelementStart(14, "th");
|
|
@@ -1994,306 +1977,305 @@ function AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_19_
|
|
|
1994
1977
|
i0.ɵɵtext(17, "Suggested Action");
|
|
1995
1978
|
i0.ɵɵelementEnd()()();
|
|
1996
1979
|
i0.ɵɵelementStart(18, "tbody");
|
|
1997
|
-
i0.ɵɵrepeaterCreate(19,
|
|
1980
|
+
i0.ɵɵrepeaterCreate(19, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_19_For_20_Template, 13, 7, "tr", null, _forTrack0);
|
|
1998
1981
|
i0.ɵɵelementEnd()()()();
|
|
1999
1982
|
} if (rf & 2) {
|
|
2000
|
-
const
|
|
1983
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
2001
1984
|
i0.ɵɵadvance(19);
|
|
2002
|
-
i0.ɵɵrepeater(
|
|
1985
|
+
i0.ɵɵrepeater(ctx_r1.LowConfidenceTags);
|
|
2003
1986
|
} }
|
|
2004
|
-
function
|
|
2005
|
-
i0.ɵɵelementStart(0, "div",
|
|
2006
|
-
i0.ɵɵelement(2, "i",
|
|
1987
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_For_26_Template(rf, ctx) { if (rf & 1) {
|
|
1988
|
+
i0.ɵɵelementStart(0, "div", 217)(1, "div", 243);
|
|
1989
|
+
i0.ɵɵelement(2, "i", 155);
|
|
2007
1990
|
i0.ɵɵtext(3);
|
|
2008
1991
|
i0.ɵɵelementEnd();
|
|
2009
1992
|
i0.ɵɵnamespaceSVG();
|
|
2010
|
-
i0.ɵɵelementStart(4, "svg",
|
|
2011
|
-
i0.ɵɵelement(5, "circle",
|
|
1993
|
+
i0.ɵɵelementStart(4, "svg", 244);
|
|
1994
|
+
i0.ɵɵelement(5, "circle", 245)(6, "circle", 246);
|
|
2012
1995
|
i0.ɵɵelementEnd();
|
|
2013
1996
|
i0.ɵɵnamespaceHTML();
|
|
2014
|
-
i0.ɵɵelementStart(7, "div",
|
|
1997
|
+
i0.ɵɵelementStart(7, "div", 247);
|
|
2015
1998
|
i0.ɵɵtext(8);
|
|
2016
1999
|
i0.ɵɵelementEnd();
|
|
2017
|
-
i0.ɵɵelementStart(9, "div",
|
|
2000
|
+
i0.ɵɵelementStart(9, "div", 248);
|
|
2018
2001
|
i0.ɵɵtext(10);
|
|
2019
2002
|
i0.ɵɵelementEnd();
|
|
2020
|
-
i0.ɵɵelementStart(11, "div",
|
|
2003
|
+
i0.ɵɵelementStart(11, "div", 248);
|
|
2021
2004
|
i0.ɵɵtext(12);
|
|
2022
2005
|
i0.ɵɵelementEnd();
|
|
2023
|
-
i0.ɵɵelementStart(13, "div",
|
|
2006
|
+
i0.ɵɵelementStart(13, "div", 249);
|
|
2024
2007
|
i0.ɵɵtext(14);
|
|
2025
2008
|
i0.ɵɵelementEnd()();
|
|
2026
2009
|
} if (rf & 2) {
|
|
2027
|
-
const
|
|
2028
|
-
const
|
|
2010
|
+
const model_r82 = ctx.$implicit;
|
|
2011
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
2029
2012
|
i0.ɵɵadvance(2);
|
|
2030
|
-
i0.ɵɵclassMap(
|
|
2031
|
-
i0.ɵɵstyleProp("color",
|
|
2013
|
+
i0.ɵɵclassMap(model_r82.Icon);
|
|
2014
|
+
i0.ɵɵstyleProp("color", model_r82.IconColor);
|
|
2032
2015
|
i0.ɵɵadvance();
|
|
2033
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
2016
|
+
i0.ɵɵtextInterpolate1(" ", model_r82.Name);
|
|
2034
2017
|
i0.ɵɵadvance(3);
|
|
2035
|
-
i0.ɵɵattribute("stroke",
|
|
2018
|
+
i0.ɵɵattribute("stroke", model_r82.ScoreColor)("stroke-dasharray", model_r82.StrokeDash);
|
|
2036
2019
|
i0.ɵɵadvance();
|
|
2037
|
-
i0.ɵɵstyleProp("color",
|
|
2020
|
+
i0.ɵɵstyleProp("color", model_r82.ScoreColor);
|
|
2038
2021
|
i0.ɵɵadvance();
|
|
2039
|
-
i0.ɵɵtextInterpolate1("",
|
|
2022
|
+
i0.ɵɵtextInterpolate1("", model_r82.ScorePercentage, "%");
|
|
2040
2023
|
i0.ɵɵadvance(2);
|
|
2041
|
-
i0.ɵɵtextInterpolate1("Avg confidence: ",
|
|
2024
|
+
i0.ɵɵtextInterpolate1("Avg confidence: ", model_r82.AvgConfidence);
|
|
2042
2025
|
i0.ɵɵadvance(2);
|
|
2043
|
-
i0.ɵɵtextInterpolate1("",
|
|
2026
|
+
i0.ɵɵtextInterpolate1("", ctx_r1.FormatNumber(model_r82.TagsGenerated), " tags generated");
|
|
2044
2027
|
i0.ɵɵadvance();
|
|
2045
|
-
i0.ɵɵstyleProp("color",
|
|
2028
|
+
i0.ɵɵstyleProp("color", model_r82.RoleColor);
|
|
2046
2029
|
i0.ɵɵadvance();
|
|
2047
|
-
i0.ɵɵtextInterpolate(
|
|
2030
|
+
i0.ɵɵtextInterpolate(model_r82.Role);
|
|
2048
2031
|
} }
|
|
2049
|
-
function
|
|
2050
|
-
i0.ɵɵelementStart(0, "div",
|
|
2051
|
-
i0.ɵɵelement(1, "i",
|
|
2032
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_27_Template(rf, ctx) { if (rf & 1) {
|
|
2033
|
+
i0.ɵɵelementStart(0, "div", 218);
|
|
2034
|
+
i0.ɵɵelement(1, "i", 250);
|
|
2052
2035
|
i0.ɵɵelementStart(2, "div")(3, "strong");
|
|
2053
2036
|
i0.ɵɵtext(4, "Recommendation:");
|
|
2054
2037
|
i0.ɵɵelementEnd();
|
|
2055
2038
|
i0.ɵɵtext(5);
|
|
2056
2039
|
i0.ɵɵelementEnd()();
|
|
2057
2040
|
} if (rf & 2) {
|
|
2058
|
-
const
|
|
2041
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
2059
2042
|
i0.ɵɵadvance(5);
|
|
2060
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
2043
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.ModelRecommendation, " ");
|
|
2061
2044
|
} }
|
|
2062
|
-
function
|
|
2063
|
-
i0.ɵɵelementStart(0, "section",
|
|
2064
|
-
i0.ɵɵelement(2, "i",
|
|
2045
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
2046
|
+
i0.ɵɵelementStart(0, "section", 14)(1, "div", 15);
|
|
2047
|
+
i0.ɵɵelement(2, "i", 210);
|
|
2065
2048
|
i0.ɵɵelementStart(3, "h1");
|
|
2066
2049
|
i0.ɵɵtext(4, "Quality");
|
|
2067
2050
|
i0.ɵɵelementEnd()();
|
|
2068
|
-
i0.ɵɵelementStart(5, "div",
|
|
2069
|
-
i0.ɵɵelement(7, "i",
|
|
2051
|
+
i0.ɵɵelementStart(5, "div", 114)(6, "h3");
|
|
2052
|
+
i0.ɵɵelement(7, "i", 211);
|
|
2070
2053
|
i0.ɵɵtext(8, " Confidence Distribution");
|
|
2071
2054
|
i0.ɵɵelementEnd();
|
|
2072
|
-
i0.ɵɵelementStart(9, "div",
|
|
2073
|
-
i0.ɵɵrepeaterCreate(11,
|
|
2055
|
+
i0.ɵɵelementStart(9, "div", 160)(10, "div", 212);
|
|
2056
|
+
i0.ɵɵrepeaterCreate(11, AnalyticsResourceComponent_Conditional_6_Conditional_16_For_12_Template, 5, 6, "div", 213, _forTrack1);
|
|
2074
2057
|
i0.ɵɵelementEnd();
|
|
2075
|
-
i0.ɵɵelementStart(13, "div",
|
|
2076
|
-
i0.ɵɵrepeaterCreate(14,
|
|
2058
|
+
i0.ɵɵelementStart(13, "div", 214);
|
|
2059
|
+
i0.ɵɵrepeaterCreate(14, AnalyticsResourceComponent_Conditional_6_Conditional_16_For_15_Template, 4, 2, "span", null, _forTrack1);
|
|
2077
2060
|
i0.ɵɵelementEnd()()();
|
|
2078
|
-
i0.ɵɵconditionalCreate(16,
|
|
2079
|
-
i0.ɵɵconditionalCreate(17,
|
|
2080
|
-
i0.ɵɵconditionalCreate(18,
|
|
2081
|
-
i0.ɵɵconditionalCreate(19,
|
|
2082
|
-
i0.ɵɵelementStart(20, "div",
|
|
2083
|
-
i0.ɵɵelement(22, "i",
|
|
2061
|
+
i0.ɵɵconditionalCreate(16, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Template, 12, 3, "div", 24);
|
|
2062
|
+
i0.ɵɵconditionalCreate(17, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_17_Template, 11, 0, "div", 119);
|
|
2063
|
+
i0.ɵɵconditionalCreate(18, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_18_Template, 28, 2, "div", 119);
|
|
2064
|
+
i0.ɵɵconditionalCreate(19, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_19_Template, 21, 0, "div", 119);
|
|
2065
|
+
i0.ɵɵelementStart(20, "div", 119)(21, "h3");
|
|
2066
|
+
i0.ɵɵelement(22, "i", 215);
|
|
2084
2067
|
i0.ɵɵtext(23, " Model Performance Comparison");
|
|
2085
2068
|
i0.ɵɵelementEnd();
|
|
2086
|
-
i0.ɵɵelementStart(24, "div",
|
|
2087
|
-
i0.ɵɵrepeaterCreate(25,
|
|
2069
|
+
i0.ɵɵelementStart(24, "div", 216);
|
|
2070
|
+
i0.ɵɵrepeaterCreate(25, AnalyticsResourceComponent_Conditional_6_Conditional_16_For_26_Template, 15, 15, "div", 217, _forTrack0);
|
|
2088
2071
|
i0.ɵɵelementEnd();
|
|
2089
|
-
i0.ɵɵconditionalCreate(27,
|
|
2072
|
+
i0.ɵɵconditionalCreate(27, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_27_Template, 6, 1, "div", 218);
|
|
2090
2073
|
i0.ɵɵelementEnd()();
|
|
2091
2074
|
} if (rf & 2) {
|
|
2092
|
-
const
|
|
2075
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
2093
2076
|
i0.ɵɵadvance(11);
|
|
2094
|
-
i0.ɵɵrepeater(
|
|
2077
|
+
i0.ɵɵrepeater(ctx_r1.ConfidenceHistogram);
|
|
2095
2078
|
i0.ɵɵadvance(3);
|
|
2096
|
-
i0.ɵɵrepeater(
|
|
2079
|
+
i0.ɵɵrepeater(ctx_r1.ConfidenceStats);
|
|
2097
2080
|
i0.ɵɵadvance(2);
|
|
2098
|
-
i0.ɵɵconditional(
|
|
2081
|
+
i0.ɵɵconditional(ctx_r1.DrillDownTarget && ctx_r1.DrillDownTarget.startsWith("quality-bin:") ? 16 : -1);
|
|
2099
2082
|
i0.ɵɵadvance();
|
|
2100
|
-
i0.ɵɵconditional(
|
|
2083
|
+
i0.ɵɵconditional(ctx_r1.WeightByEntity.length > 0 ? 17 : -1);
|
|
2101
2084
|
i0.ɵɵadvance();
|
|
2102
|
-
i0.ɵɵconditional(
|
|
2085
|
+
i0.ɵɵconditional(ctx_r1.AccuracyLinePoints ? 18 : -1);
|
|
2103
2086
|
i0.ɵɵadvance();
|
|
2104
|
-
i0.ɵɵconditional(
|
|
2087
|
+
i0.ɵɵconditional(ctx_r1.LowConfidenceTags.length > 0 ? 19 : -1);
|
|
2105
2088
|
i0.ɵɵadvance(6);
|
|
2106
|
-
i0.ɵɵrepeater(
|
|
2089
|
+
i0.ɵɵrepeater(ctx_r1.ModelComparisons);
|
|
2107
2090
|
i0.ɵɵadvance(2);
|
|
2108
|
-
i0.ɵɵconditional(
|
|
2091
|
+
i0.ɵɵconditional(ctx_r1.ModelRecommendation ? 27 : -1);
|
|
2109
2092
|
} }
|
|
2110
|
-
function
|
|
2111
|
-
const
|
|
2112
|
-
i0.ɵɵelementStart(0, "button",
|
|
2113
|
-
i0.ɵɵlistener("click", function
|
|
2093
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_17_For_15_Template(rf, ctx) { if (rf & 1) {
|
|
2094
|
+
const _r84 = i0.ɵɵgetCurrentView();
|
|
2095
|
+
i0.ɵɵelementStart(0, "button", 70);
|
|
2096
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_17_For_15_Template_button_click_0_listener() { const range_r85 = i0.ɵɵrestoreView(_r84).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.SetDateRange(range_r85.Label)); });
|
|
2114
2097
|
i0.ɵɵtext(1);
|
|
2115
2098
|
i0.ɵɵelementEnd();
|
|
2116
2099
|
} if (rf & 2) {
|
|
2117
|
-
const
|
|
2118
|
-
const
|
|
2119
|
-
i0.ɵɵclassProp("active",
|
|
2100
|
+
const range_r85 = ctx.$implicit;
|
|
2101
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
2102
|
+
i0.ɵɵclassProp("active", ctx_r1.ActiveDateRange === range_r85.Label);
|
|
2120
2103
|
i0.ɵɵadvance();
|
|
2121
|
-
i0.ɵɵtextInterpolate(
|
|
2104
|
+
i0.ɵɵtextInterpolate(range_r85.Label);
|
|
2122
2105
|
} }
|
|
2123
|
-
function
|
|
2124
|
-
i0.ɵɵelementStart(0, "div",
|
|
2106
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_16_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
2107
|
+
i0.ɵɵelementStart(0, "div", 256)(1, "div", 257);
|
|
2125
2108
|
i0.ɵɵelement(2, "i");
|
|
2126
2109
|
i0.ɵɵelementEnd();
|
|
2127
|
-
i0.ɵɵelementStart(3, "div")(4, "div",
|
|
2110
|
+
i0.ɵɵelementStart(3, "div")(4, "div", 258);
|
|
2128
2111
|
i0.ɵɵtext(5);
|
|
2129
2112
|
i0.ɵɵelementEnd();
|
|
2130
|
-
i0.ɵɵelementStart(6, "div",
|
|
2113
|
+
i0.ɵɵelementStart(6, "div", 259);
|
|
2131
2114
|
i0.ɵɵtext(7);
|
|
2132
2115
|
i0.ɵɵelementEnd();
|
|
2133
|
-
i0.ɵɵelementStart(8, "div",
|
|
2116
|
+
i0.ɵɵelementStart(8, "div", 260);
|
|
2134
2117
|
i0.ɵɵtext(9);
|
|
2135
2118
|
i0.ɵɵelementEnd()()();
|
|
2136
2119
|
} if (rf & 2) {
|
|
2137
|
-
const
|
|
2120
|
+
const kpi_r86 = ctx.$implicit;
|
|
2138
2121
|
i0.ɵɵadvance(2);
|
|
2139
|
-
i0.ɵɵclassMap(
|
|
2122
|
+
i0.ɵɵclassMap(kpi_r86.Icon);
|
|
2140
2123
|
i0.ɵɵadvance(3);
|
|
2141
|
-
i0.ɵɵtextInterpolate(
|
|
2124
|
+
i0.ɵɵtextInterpolate(kpi_r86.Value);
|
|
2142
2125
|
i0.ɵɵadvance(2);
|
|
2143
|
-
i0.ɵɵtextInterpolate(
|
|
2126
|
+
i0.ɵɵtextInterpolate(kpi_r86.Label);
|
|
2144
2127
|
i0.ɵɵadvance(2);
|
|
2145
|
-
i0.ɵɵtextInterpolate(
|
|
2128
|
+
i0.ɵɵtextInterpolate(kpi_r86.SubLabel);
|
|
2146
2129
|
} }
|
|
2147
|
-
function
|
|
2148
|
-
i0.ɵɵelementStart(0, "div",
|
|
2149
|
-
i0.ɵɵrepeaterCreate(1,
|
|
2130
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
2131
|
+
i0.ɵɵelementStart(0, "div", 255);
|
|
2132
|
+
i0.ɵɵrepeaterCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_16_For_2_Template, 10, 5, "div", 256, _forTrack1);
|
|
2150
2133
|
i0.ɵɵelementEnd();
|
|
2151
2134
|
} if (rf & 2) {
|
|
2152
|
-
const
|
|
2135
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
2153
2136
|
i0.ɵɵadvance();
|
|
2154
|
-
i0.ɵɵrepeater(
|
|
2137
|
+
i0.ɵɵrepeater(ctx_r1.CostKPIs);
|
|
2155
2138
|
} }
|
|
2156
|
-
function
|
|
2157
|
-
i0.ɵɵelementStart(0, "tr")(1, "td",
|
|
2139
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_21_For_16_Template(rf, ctx) { if (rf & 1) {
|
|
2140
|
+
i0.ɵɵelementStart(0, "tr")(1, "td", 200);
|
|
2158
2141
|
i0.ɵɵtext(2);
|
|
2159
2142
|
i0.ɵɵelementEnd();
|
|
2160
2143
|
i0.ɵɵelementStart(3, "td");
|
|
2161
2144
|
i0.ɵɵtext(4);
|
|
2162
2145
|
i0.ɵɵelementEnd();
|
|
2163
|
-
i0.ɵɵelementStart(5, "td",
|
|
2146
|
+
i0.ɵɵelementStart(5, "td", 125);
|
|
2164
2147
|
i0.ɵɵtext(6);
|
|
2165
2148
|
i0.ɵɵelementEnd();
|
|
2166
|
-
i0.ɵɵelementStart(7, "td",
|
|
2149
|
+
i0.ɵɵelementStart(7, "td", 125);
|
|
2167
2150
|
i0.ɵɵtext(8);
|
|
2168
2151
|
i0.ɵɵelementEnd();
|
|
2169
|
-
i0.ɵɵelementStart(9, "td",
|
|
2152
|
+
i0.ɵɵelementStart(9, "td", 131);
|
|
2170
2153
|
i0.ɵɵtext(10);
|
|
2171
2154
|
i0.ɵɵelementEnd()();
|
|
2172
2155
|
} if (rf & 2) {
|
|
2173
|
-
const
|
|
2174
|
-
const
|
|
2156
|
+
const row_r87 = ctx.$implicit;
|
|
2157
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
2175
2158
|
i0.ɵɵadvance(2);
|
|
2176
|
-
i0.ɵɵtextInterpolate(
|
|
2159
|
+
i0.ɵɵtextInterpolate(row_r87.RunID);
|
|
2177
2160
|
i0.ɵɵadvance(2);
|
|
2178
|
-
i0.ɵɵtextInterpolate(
|
|
2161
|
+
i0.ɵɵtextInterpolate(row_r87.Source);
|
|
2179
2162
|
i0.ɵɵadvance(2);
|
|
2180
|
-
i0.ɵɵtextInterpolate(
|
|
2163
|
+
i0.ɵɵtextInterpolate(ctx_r1.FormatNumber(row_r87.Tokens));
|
|
2181
2164
|
i0.ɵɵadvance(2);
|
|
2182
|
-
i0.ɵɵtextInterpolate(
|
|
2165
|
+
i0.ɵɵtextInterpolate(row_r87.Cost > 0 ? "$" + row_r87.Cost.toFixed(4) : "$0.00");
|
|
2183
2166
|
i0.ɵɵadvance(2);
|
|
2184
|
-
i0.ɵɵtextInterpolate(
|
|
2167
|
+
i0.ɵɵtextInterpolate(row_r87.Started);
|
|
2185
2168
|
} }
|
|
2186
|
-
function
|
|
2187
|
-
i0.ɵɵelementStart(0, "div",
|
|
2169
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_21_Template(rf, ctx) { if (rf & 1) {
|
|
2170
|
+
i0.ɵɵelementStart(0, "div", 117)(1, "table", 92)(2, "thead")(3, "tr")(4, "th");
|
|
2188
2171
|
i0.ɵɵtext(5, "Run ID");
|
|
2189
2172
|
i0.ɵɵelementEnd();
|
|
2190
2173
|
i0.ɵɵelementStart(6, "th");
|
|
2191
2174
|
i0.ɵɵtext(7, "Source");
|
|
2192
2175
|
i0.ɵɵelementEnd();
|
|
2193
|
-
i0.ɵɵelementStart(8, "th",
|
|
2176
|
+
i0.ɵɵelementStart(8, "th", 125);
|
|
2194
2177
|
i0.ɵɵtext(9, "Tokens");
|
|
2195
2178
|
i0.ɵɵelementEnd();
|
|
2196
|
-
i0.ɵɵelementStart(10, "th",
|
|
2179
|
+
i0.ɵɵelementStart(10, "th", 125);
|
|
2197
2180
|
i0.ɵɵtext(11, "Cost");
|
|
2198
2181
|
i0.ɵɵelementEnd();
|
|
2199
2182
|
i0.ɵɵelementStart(12, "th");
|
|
2200
2183
|
i0.ɵɵtext(13, "Started");
|
|
2201
2184
|
i0.ɵɵelementEnd()()();
|
|
2202
2185
|
i0.ɵɵelementStart(14, "tbody");
|
|
2203
|
-
i0.ɵɵrepeaterCreate(15,
|
|
2186
|
+
i0.ɵɵrepeaterCreate(15, AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_21_For_16_Template, 11, 5, "tr", null, _forTrack4);
|
|
2204
2187
|
i0.ɵɵelementEnd()()();
|
|
2205
2188
|
} if (rf & 2) {
|
|
2206
|
-
const
|
|
2189
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
2207
2190
|
i0.ɵɵadvance(15);
|
|
2208
|
-
i0.ɵɵrepeater(
|
|
2191
|
+
i0.ɵɵrepeater(ctx_r1.CostPerRunRows);
|
|
2209
2192
|
} }
|
|
2210
|
-
function
|
|
2211
|
-
i0.ɵɵelementStart(0, "div",
|
|
2212
|
-
i0.ɵɵelement(1, "i",
|
|
2193
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_22_Template(rf, ctx) { if (rf & 1) {
|
|
2194
|
+
i0.ɵɵelementStart(0, "div", 118);
|
|
2195
|
+
i0.ɵɵelement(1, "i", 251);
|
|
2213
2196
|
i0.ɵɵelementStart(2, "p");
|
|
2214
2197
|
i0.ɵɵtext(3, "No cost data available yet. Run the pipeline to generate cost and token usage metrics.");
|
|
2215
2198
|
i0.ɵɵelementEnd();
|
|
2216
|
-
i0.ɵɵelementStart(4, "p",
|
|
2199
|
+
i0.ɵɵelementStart(4, "p", 261);
|
|
2217
2200
|
i0.ɵɵtext(5, "Cost data is aggregated from ContentProcessRunDetail records linked to AI Prompt Runs.");
|
|
2218
2201
|
i0.ɵɵelementEnd()();
|
|
2219
2202
|
} }
|
|
2220
|
-
function
|
|
2221
|
-
const
|
|
2222
|
-
i0.ɵɵelementStart(0, "section",
|
|
2223
|
-
i0.ɵɵelement(2, "i",
|
|
2203
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
2204
|
+
const _r83 = i0.ɵɵgetCurrentView();
|
|
2205
|
+
i0.ɵɵelementStart(0, "section", 14)(1, "div", 15);
|
|
2206
|
+
i0.ɵɵelement(2, "i", 251);
|
|
2224
2207
|
i0.ɵɵelementStart(3, "h1");
|
|
2225
2208
|
i0.ɵɵtext(4, "Cost & Usage");
|
|
2226
2209
|
i0.ɵɵelementEnd();
|
|
2227
|
-
i0.ɵɵelementStart(5, "div",
|
|
2228
|
-
i0.ɵɵlistener("click", function
|
|
2229
|
-
i0.ɵɵelement(7, "i",
|
|
2210
|
+
i0.ɵɵelementStart(5, "div", 252)(6, "button", 90);
|
|
2211
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_17_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r83); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.ExportTabDataCSV("cost-usage")); });
|
|
2212
|
+
i0.ɵɵelement(7, "i", 91);
|
|
2230
2213
|
i0.ɵɵtext(8, " CSV ");
|
|
2231
2214
|
i0.ɵɵelementEnd();
|
|
2232
|
-
i0.ɵɵelementStart(9, "button",
|
|
2233
|
-
i0.ɵɵlistener("click", function
|
|
2234
|
-
i0.ɵɵelement(10, "i",
|
|
2215
|
+
i0.ɵɵelementStart(9, "button", 253);
|
|
2216
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_17_Template_button_click_9_listener() { i0.ɵɵrestoreView(_r83); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.PrintCurrentTab()); });
|
|
2217
|
+
i0.ɵɵelement(10, "i", 254);
|
|
2235
2218
|
i0.ɵɵtext(11, " Print ");
|
|
2236
2219
|
i0.ɵɵelementEnd()()();
|
|
2237
|
-
i0.ɵɵelementStart(12, "div",
|
|
2238
|
-
i0.ɵɵrepeaterCreate(14,
|
|
2220
|
+
i0.ɵɵelementStart(12, "div", 17)(13, "div", 18);
|
|
2221
|
+
i0.ɵɵrepeaterCreate(14, AnalyticsResourceComponent_Conditional_6_Conditional_17_For_15_Template, 2, 3, "button", 19, _forTrack1);
|
|
2239
2222
|
i0.ɵɵelementEnd()();
|
|
2240
|
-
i0.ɵɵconditionalCreate(16,
|
|
2241
|
-
i0.ɵɵelementStart(17, "div",
|
|
2242
|
-
i0.ɵɵelement(19, "i",
|
|
2223
|
+
i0.ɵɵconditionalCreate(16, AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_16_Template, 3, 0, "div", 255);
|
|
2224
|
+
i0.ɵɵelementStart(17, "div", 119)(18, "h3");
|
|
2225
|
+
i0.ɵɵelement(19, "i", 82);
|
|
2243
2226
|
i0.ɵɵtext(20, " Cost Breakdown by Run");
|
|
2244
2227
|
i0.ɵɵelementEnd();
|
|
2245
|
-
i0.ɵɵconditionalCreate(21,
|
|
2228
|
+
i0.ɵɵconditionalCreate(21, AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_21_Template, 17, 0, "div", 117)(22, AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_22_Template, 6, 0, "div", 118);
|
|
2246
2229
|
i0.ɵɵelementEnd()();
|
|
2247
2230
|
} if (rf & 2) {
|
|
2248
|
-
const
|
|
2231
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
2249
2232
|
i0.ɵɵadvance(14);
|
|
2250
|
-
i0.ɵɵrepeater(
|
|
2233
|
+
i0.ɵɵrepeater(ctx_r1.DateRanges);
|
|
2251
2234
|
i0.ɵɵadvance(2);
|
|
2252
|
-
i0.ɵɵconditional(
|
|
2235
|
+
i0.ɵɵconditional(ctx_r1.CostKPIs.length > 0 ? 16 : -1);
|
|
2253
2236
|
i0.ɵɵadvance(5);
|
|
2254
|
-
i0.ɵɵconditional(
|
|
2237
|
+
i0.ɵɵconditional(ctx_r1.CostPerRunRows.length > 0 ? 21 : 22);
|
|
2255
2238
|
} }
|
|
2256
2239
|
function AnalyticsResourceComponent_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
2257
|
-
|
|
2258
|
-
i0.ɵɵ
|
|
2259
|
-
i0.ɵɵ
|
|
2260
|
-
i0.ɵɵ
|
|
2261
|
-
i0.ɵɵ
|
|
2262
|
-
i0.ɵɵ
|
|
2263
|
-
i0.ɵɵ
|
|
2264
|
-
i0.ɵɵ
|
|
2265
|
-
i0.ɵɵ
|
|
2266
|
-
i0.ɵɵ
|
|
2267
|
-
i0.ɵɵ
|
|
2240
|
+
const _r1 = i0.ɵɵgetCurrentView();
|
|
2241
|
+
i0.ɵɵelementStart(0, "div", 5)(1, "mj-left-nav", 7);
|
|
2242
|
+
i0.ɵɵlistener("ItemClicked", function AnalyticsResourceComponent_Conditional_6_Template_mj_left_nav_ItemClicked_1_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onNavItemClicked($event)); });
|
|
2243
|
+
i0.ɵɵelementStart(2, "div", 8)(3, "h3");
|
|
2244
|
+
i0.ɵɵelement(4, "i", 9);
|
|
2245
|
+
i0.ɵɵtext(5, " Trending Tags");
|
|
2246
|
+
i0.ɵɵelementEnd();
|
|
2247
|
+
i0.ɵɵelementStart(6, "div", 10);
|
|
2248
|
+
i0.ɵɵrepeaterCreate(7, AnalyticsResourceComponent_Conditional_6_For_8_Template, 2, 5, "span", 11, _forTrack0);
|
|
2249
|
+
i0.ɵɵconditionalCreate(9, AnalyticsResourceComponent_Conditional_6_Conditional_9_Template, 2, 0, "span", 12);
|
|
2250
|
+
i0.ɵɵelementEnd()()();
|
|
2251
|
+
i0.ɵɵelementStart(10, "mj-left-nav-content")(11, "div", 13);
|
|
2252
|
+
i0.ɵɵconditionalCreate(12, AnalyticsResourceComponent_Conditional_6_Conditional_12_Template, 98, 7, "section", 14);
|
|
2253
|
+
i0.ɵɵconditionalCreate(13, AnalyticsResourceComponent_Conditional_6_Conditional_13_Template, 28, 9, "section", 14);
|
|
2254
|
+
i0.ɵɵconditionalCreate(14, AnalyticsResourceComponent_Conditional_6_Conditional_14_Template, 14, 4, "section", 14);
|
|
2255
|
+
i0.ɵɵconditionalCreate(15, AnalyticsResourceComponent_Conditional_6_Conditional_15_Template, 54, 8, "section", 14);
|
|
2256
|
+
i0.ɵɵconditionalCreate(16, AnalyticsResourceComponent_Conditional_6_Conditional_16_Template, 28, 5, "section", 14);
|
|
2257
|
+
i0.ɵɵconditionalCreate(17, AnalyticsResourceComponent_Conditional_6_Conditional_17_Template, 23, 2, "section", 14);
|
|
2268
2258
|
i0.ɵɵelementEnd()()();
|
|
2269
|
-
i0.ɵɵelementStart(14, "div", 16);
|
|
2270
|
-
i0.ɵɵconditionalCreate(15, AnalyticsResourceComponent_Conditional_6_Conditional_15_Template, 98, 7, "section", 17);
|
|
2271
|
-
i0.ɵɵconditionalCreate(16, AnalyticsResourceComponent_Conditional_6_Conditional_16_Template, 28, 9, "section", 17);
|
|
2272
|
-
i0.ɵɵconditionalCreate(17, AnalyticsResourceComponent_Conditional_6_Conditional_17_Template, 14, 4, "section", 17);
|
|
2273
|
-
i0.ɵɵconditionalCreate(18, AnalyticsResourceComponent_Conditional_6_Conditional_18_Template, 54, 8, "section", 17);
|
|
2274
|
-
i0.ɵɵconditionalCreate(19, AnalyticsResourceComponent_Conditional_6_Conditional_19_Template, 28, 5, "section", 17);
|
|
2275
|
-
i0.ɵɵconditionalCreate(20, AnalyticsResourceComponent_Conditional_6_Conditional_20_Template, 23, 2, "section", 17);
|
|
2276
|
-
i0.ɵɵelementEnd()();
|
|
2277
2259
|
} if (rf & 2) {
|
|
2278
|
-
const
|
|
2279
|
-
i0.ɵɵadvance(
|
|
2280
|
-
i0.ɵɵ
|
|
2281
|
-
i0.ɵɵadvance(
|
|
2282
|
-
i0.ɵɵrepeater(
|
|
2283
|
-
i0.ɵɵadvance(2);
|
|
2284
|
-
i0.ɵɵconditional(ctx_r2.TrendingTags.length === 0 ? 13 : -1);
|
|
2260
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
2261
|
+
i0.ɵɵadvance();
|
|
2262
|
+
i0.ɵɵproperty("Sections", ctx_r1.navSections)("ActiveId", ctx_r1.ActiveTab);
|
|
2263
|
+
i0.ɵɵadvance(6);
|
|
2264
|
+
i0.ɵɵrepeater(ctx_r1.TrendingTags);
|
|
2285
2265
|
i0.ɵɵadvance(2);
|
|
2286
|
-
i0.ɵɵconditional(
|
|
2266
|
+
i0.ɵɵconditional(ctx_r1.TrendingTags.length === 0 ? 9 : -1);
|
|
2267
|
+
i0.ɵɵadvance(3);
|
|
2268
|
+
i0.ɵɵconditional(ctx_r1.ActiveTab === "overview" ? 12 : -1);
|
|
2287
2269
|
i0.ɵɵadvance();
|
|
2288
|
-
i0.ɵɵconditional(
|
|
2270
|
+
i0.ɵɵconditional(ctx_r1.ActiveTab === "tags" ? 13 : -1);
|
|
2289
2271
|
i0.ɵɵadvance();
|
|
2290
|
-
i0.ɵɵconditional(
|
|
2272
|
+
i0.ɵɵconditional(ctx_r1.ActiveTab === "sources" ? 14 : -1);
|
|
2291
2273
|
i0.ɵɵadvance();
|
|
2292
|
-
i0.ɵɵconditional(
|
|
2274
|
+
i0.ɵɵconditional(ctx_r1.ActiveTab === "pipeline" ? 15 : -1);
|
|
2293
2275
|
i0.ɵɵadvance();
|
|
2294
|
-
i0.ɵɵconditional(
|
|
2276
|
+
i0.ɵɵconditional(ctx_r1.ActiveTab === "quality" ? 16 : -1);
|
|
2295
2277
|
i0.ɵɵadvance();
|
|
2296
|
-
i0.ɵɵconditional(
|
|
2278
|
+
i0.ɵɵconditional(ctx_r1.ActiveTab === "cost" ? 17 : -1);
|
|
2297
2279
|
} }
|
|
2298
2280
|
// ================================================================
|
|
2299
2281
|
// Component
|
|
@@ -2535,6 +2517,16 @@ let AnalyticsResourceComponent = class AnalyticsResourceComponent extends BaseRe
|
|
|
2535
2517
|
// ================================================================
|
|
2536
2518
|
// Public Methods
|
|
2537
2519
|
// ================================================================
|
|
2520
|
+
/** Wraps `NavItems` for `<mj-left-nav>`. */
|
|
2521
|
+
get navSections() {
|
|
2522
|
+
return [{
|
|
2523
|
+
items: this.NavItems.map(n => ({ id: n.ID, label: n.Label, icon: n.Icon }))
|
|
2524
|
+
}];
|
|
2525
|
+
}
|
|
2526
|
+
/** Adapter for `<mj-left-nav>`'s `(ItemClicked)` output. */
|
|
2527
|
+
onNavItemClicked(item) {
|
|
2528
|
+
this.SelectTab(item.id);
|
|
2529
|
+
}
|
|
2538
2530
|
SelectTab(tabId) {
|
|
2539
2531
|
this.ActiveTab = tabId;
|
|
2540
2532
|
this.CloseDrillDown();
|
|
@@ -4234,12 +4226,12 @@ let AnalyticsResourceComponent = class AnalyticsResourceComponent extends BaseRe
|
|
|
4234
4226
|
}
|
|
4235
4227
|
}
|
|
4236
4228
|
static ɵfac = /*@__PURE__*/ (() => { let ɵAnalyticsResourceComponent_BaseFactory; return function AnalyticsResourceComponent_Factory(__ngFactoryType__) { return (ɵAnalyticsResourceComponent_BaseFactory || (ɵAnalyticsResourceComponent_BaseFactory = i0.ɵɵgetInheritedFactory(AnalyticsResourceComponent)))(__ngFactoryType__ || AnalyticsResourceComponent); }; })();
|
|
4237
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AnalyticsResourceComponent, selectors: [["app-analytics-resource"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 7, vars: 5, consts: [["Title", "Knowledge Hub Analytics", "Icon", "fa-solid fa-chart-line", "Subtitle", "Pipeline health, trending tags, and content insights"], ["meta", ""], [3, "Label", "Variant"], [3, "Flex", "Padding"], [1, "analytics-loading"], [1, "analytics-layout"], ["text", "Loading analytics data...", "size", "medium"], [1, "analytics-sidebar"], [1, "sidebar-nav"], [1, "nav-item", 3, "active"], [1, "sidebar-divider"], [1, "trending-section"], [1, "fa-solid", "fa-arrow-trend-up"], [1, "tag-cloud"], [3, "font-size", "font-weight"], [1, "no-trending"], [1, "main-content"], [1, "tab-section"], [1, "nav-item", 3, "click"], [1, "tab-section-header"], [1, "fa-solid", "fa-grip"], [1, "filter-bar"], [1, "date-chips"], [1, "date-chip", 3, "active"], [1, "filter-dropdown", 3, "ngModelChange", "ngModel"], [3, "value"], [1, "kpi-row"], [1, "kpi-card"], [1, "drill-down-panel"], [1, "cards-grid"], [1, "widget-card", 3, "click"], [1, "widget-title"], [1, "fa-solid", "fa-chart-line"], [1, "bar-chart"], [1, "bar-col"], [1, "fa-solid", "fa-bullseye"], [1, "rings-grid"], [1, "ring-item"], [1, "widget-empty"], [1, "fa-solid", "fa-gauge-high"], [1, "gauge-container"], ["width", "180", "height", "110", "viewBox", "0 0 180 110"], ["d", "M 20 95 A 70 70 0 0 1 160 95", "fill", "none", "stroke", "var(--mj-border-default)", "stroke-width", "14", "stroke-linecap", "round"], ["d", "M 20 95 A 70 70 0 0 1 48.6 35.2", "fill", "none", "stroke", "var(--mj-status-error)", "stroke-width", "14", "stroke-linecap", "round", "opacity", "0.3"], ["d", "M 48.6 35.2 A 70 70 0 0 1 118 28", "fill", "none", "stroke", "var(--mj-status-warning)", "stroke-width", "14", "opacity", "0.3"], ["d", "M 118 28 A 70 70 0 0 1 160 95", "fill", "none", "stroke", "var(--mj-status-success)", "stroke-width", "14", "stroke-linecap", "round", "opacity", "0.3"], ["x", "90", "y", "88", "text-anchor", "middle", "font-size", "26", "font-weight", "800", "fill", "var(--mj-text-primary)"], ["x", "90", "y", "105", "text-anchor", "middle", "font-size", "10", "fill", "var(--mj-text-muted)"], ["x", "28", "y", "108", "font-size", "8", "fill", "var(--mj-text-muted)"], ["x", "86", "y", "18", "font-size", "8", "fill", "var(--mj-text-muted)"], ["x", "155", "y", "108", "font-size", "8", "fill", "var(--mj-text-muted)"], [1, "mini-histogram"], [1, "mini-hist-bar", 3, "height", "background", "title"], [1, "mini-hist-label"], [1, "fa-solid", "fa-ranking-star"], [1, "h-bar-list"], [1, "h-bar-row"], [1, "widget-footnote"], [1, "fa-solid", "fa-bolt"], [1, "throughput-bars"], [1, "tp-bar", 3, "height", "background"], [1, "legend"], [1, "legend-item"], [1, "legend-dot", 2, "background", "var(--mj-status-success)"], [1, "legend-dot", 2, "background", "var(--mj-status-error)"], [1, "fa-solid", "fa-sitemap"], [1, "taxonomy-ring-container"], ["width", "140", "height", "140", "viewBox", "0 0 140 140"], ["cx", "70", "cy", "70", "r", "54", "fill", "none", "stroke", "var(--mj-border-default)", "stroke-width", "18"], ["cx", "70", "cy", "70", "r", "54", "fill", "none", "stroke-width", "18", "transform", "rotate(-90 70 70)"], ["x", "70", "y", "66", "text-anchor", "middle", "font-size", "22", "font-weight", "800", "fill", "var(--mj-text-primary)"], ["x", "70", "y", "82", "text-anchor", "middle", "font-size", "10", "fill", "var(--mj-text-muted)"], [1, "taxonomy-stats"], [1, "tax-stat", 3, "background", "color"], [1, "date-chip", 3, "click"], [1, "kpi-card", 3, "click"], [1, "kpi-label"], [1, "kpi-value"], [1, "kpi-delta"], [1, "fa-solid", "fa-arrow-up", 2, "font-size", "9px"], [1, "fa-solid", "fa-arrow-down", 2, "font-size", "9px"], [1, "kpi-sparkline"], ["width", "64", "height", "28", "viewBox", "0 0 64 28"], ["fill", "none", "stroke-width", "2", "stroke-linecap", "round", "stroke-linejoin", "round"], [1, "drill-down-header"], [1, "drill-down-title"], [1, "fa-solid", "fa-table"], [1, "drill-down-header-actions"], ["title", "Export CSV", 1, "drill-export-btn"], ["aria-label", "Close drill-down", 1, "drill-down-close", 3, "click"], [1, "fa-solid", "fa-times"], ["text", "Loading details...", "size", "small"], [1, "drill-down-table-wrap"], [1, "drill-down-empty"], ["title", "Export CSV", 1, "drill-export-btn", 3, "click"], [1, "fa-solid", "fa-download"], [1, "data-table"], [1, "drill-action-col"], ["title", "Open record", 1, "drill-open-btn"], ["title", "Open record", 1, "drill-open-btn", 3, "click"], [1, "fa-solid", "fa-arrow-up-right-from-square"], [1, "bar-value"], [1, "bar", 2, "background", "var(--mj-brand-primary)"], [1, "bar-label"], ["width", "48", "height", "48", "viewBox", "0 0 48 48"], ["cx", "24", "cy", "24", "r", "20", "fill", "none", "stroke", "var(--mj-border-default)", "stroke-width", "5"], ["cx", "24", "cy", "24", "r", "20", "fill", "none", "stroke-width", "5", "stroke-dashoffset", "31.4", "stroke-linecap", "round", "transform", "rotate(-90 24 24)"], ["x", "24", "y", "26", "text-anchor", "middle", "font-size", "11", "font-weight", "700", "fill", "var(--mj-text-primary)"], [1, "ring-label"], [1, "ring-stat"], [1, "mini-hist-bar", 3, "title"], [1, "h-bar-name"], [1, "h-bar-track"], [1, "h-bar-fill"], [1, "tp-bar"], [1, "tp-bar-label"], [1, "tax-stat"], [1, "fa-solid", "fa-tags"], [1, "sub-section", 2, "margin-top", "0"], [1, "sub-section-header"], [1, "fa-solid", "fa-trophy"], [1, "table-scroll"], [1, "empty-state"], [1, "sub-section"], [1, "sub-section", "co-occurrence-section"], [1, "fa-solid", "fa-link"], [1, "co-occurrence-actions"], ["title", "Last computed timestamp", 1, "co-occurrence-staleness"], ["title", "Recompute co-occurrence data", 1, "drill-export-btn", 3, "click", "disabled"], [1, "num"], [2, "cursor", "pointer"], [2, "cursor", "pointer", 3, "click"], [1, "weight-bar"], ["width", "48", "height", "16"], ["fill", "none", "stroke-width", "1.5", "stroke-linecap", "round"], [1, "muted"], ["aria-label", "Open record", "title", "Open record", 1, "drill-open-btn"], ["aria-label", "Open record", "title", "Open record", 1, "drill-open-btn", 3, "click"], [1, "fa-solid", "fa-chart-bar"], [1, "stacked-bar-chart"], [1, "stacked-row"], [1, "legend", 2, "margin-top", "12px"], [1, "stacked-label"], [1, "stacked-track"], [1, "stacked-seg", 3, "width", "background", "title"], [1, "stacked-seg", 3, "title"], [1, "legend-dot"], [1, "fa-solid", "fa-layer-group"], [1, "v-bar-chart"], [1, "v-bar-col"], [1, "chart-footnote"], [1, "v-bar", 2, "background", "var(--mj-brand-primary)"], [1, "v-bar-label"], [1, "fa-regular", "fa-clock"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-arrows-rotate"], [1, "weight-bar", 2, "background", "var(--mj-status-info)"], [1, "fa-solid", "fa-database"], [2, "cursor", "pointer", 3, "source-selected"], [2, "margin-right", "4px"], [1, "badge"], [1, "fa-solid", "fa-circle", 2, "font-size", "6px", "margin-right", "3px"], [1, "fa-solid", "fa-chart-area"], [1, "two-col"], [1, "widget-card"], [1, "bar-chart", 2, "height", "100px"], [1, "fa-solid", "fa-star-half-stroke"], [1, "quality-bands"], [1, "quality-band-row"], [1, "source-quality-note"], [1, "fa-solid", "fa-circle-info", 2, "color", "var(--mj-status-info)", "margin-right", "4px"], [1, "bar-value", 2, "font-size", "9px"], [1, "quality-band-label"], [1, "quality-band-track"], [1, "quality-band-fill"], [1, "fa-solid", "fa-heart-pulse"], [1, "source-health-grid"], [1, "source-health-card", 3, "border-top-color"], [1, "source-health-card"], [1, "health-card-name"], [1, "health-card-value"], [1, "health-card-label"], [1, "fa-solid", "fa-gears"], [1, "pipeline-throughput-bars"], [1, "pipeline-bar", 2, "cursor", "pointer", 3, "height", "background", "opacity"], [1, "pipeline-date-labels"], [1, "fa-solid", "fa-stopwatch"], [1, "stage-bars"], [1, "stage-row"], [1, "stage-summary"], [1, "stage-warning"], [1, "success-rate-display"], [1, "success-rate-stat"], [1, "success-rate-value", 2, "color", "var(--mj-status-success)"], [1, "success-rate-label"], [1, "success-rate-value", 2, "color", "var(--mj-status-error)"], [1, "success-rate-value", 2, "color", "var(--mj-text-primary)"], [1, "pipeline-bar", 2, "cursor", "pointer", 3, "click"], [1, "stage-name"], [1, "stage-track"], [1, "stage-fill"], [1, "stage-time"], [1, "fa-solid", "fa-triangle-exclamation", 2, "color", "var(--mj-status-warning)", "margin-right", "4px"], [1, "fa-solid", "fa-spinner"], [1, "monospace-cell"], [1, "progress-track"], [1, "progress-fill", 2, "background", "var(--mj-brand-primary)"], [1, "progress-text"], [1, "fa-solid", "fa-triangle-exclamation"], [1, "error-log"], [1, "error-entry"], [1, "error-time"], [1, "error-source"], [1, "error-msg"], [1, "fa-solid", "fa-circle-check"], [1, "fa-solid", "fa-chart-column"], [1, "histogram"], [1, "hist-bar-col", 2, "cursor", "pointer"], [1, "confidence-stats"], [1, "fa-solid", "fa-robot"], [1, "model-grid"], [1, "model-card"], [1, "model-recommendation"], [1, "hist-bar-col", 2, "cursor", "pointer", 3, "click"], [1, "hist-bar"], [1, "hist-label"], [1, "fa-solid", "fa-weight-scale"], [1, "grouped-bar-chart"], [1, "grouped-col"], [1, "legend", 2, "justify-content", "center", "margin-top", "14px"], [1, "grouped-bars"], [1, "g-bar", 2, "background", "var(--mj-brand-primary)", 3, "title"], [1, "g-bar", 2, "background", "var(--mj-status-info)", 3, "title"], [1, "g-bar", 2, "background", "var(--mj-text-muted)", 3, "title"], [1, "grouped-label"], [1, "accuracy-chart"], [1, "accuracy-y-labels"], [1, "accuracy-area"], [1, "accuracy-grid-line", 2, "top", "33%"], [1, "accuracy-grid-line", 2, "top", "66%"], ["width", "100%", "height", "110", "viewBox", "0 0 400 110", "preserveAspectRatio", "none", 1, "accuracy-svg"], ["fill", "none", "stroke", "var(--mj-brand-primary)", "stroke-width", "2.5", "vector-effect", "non-scaling-stroke", "stroke-linecap", "round", "stroke-linejoin", "round"], ["r", "3", "fill", "var(--mj-brand-primary)"], [1, "accuracy-x-labels"], [1, "accuracy-trend-text"], [1, "fa-solid", "fa-arrow-trend-up", 2, "margin-right", "4px"], [1, "fa-solid", "fa-exclamation-triangle"], [1, "model-name"], ["width", "80", "height", "80", "viewBox", "0 0 80 80", 2, "margin", "4px 0"], ["cx", "40", "cy", "40", "r", "32", "fill", "none", "stroke", "var(--mj-border-default)", "stroke-width", "8"], ["cx", "40", "cy", "40", "r", "32", "fill", "none", "stroke-width", "8", "stroke-dashoffset", "50", "transform", "rotate(-90 40 40)", "stroke-linecap", "round"], [1, "model-score"], [1, "model-detail"], [1, "model-detail", 2, "font-weight", "600"], [1, "fa-solid", "fa-lightbulb", 2, "color", "var(--mj-status-warning)"], [1, "fa-solid", "fa-coins"], [1, "tab-header-actions"], ["title", "Print (PDF alternative)", 1, "drill-export-btn", 3, "click"], [1, "fa-solid", "fa-print"], [1, "cost-kpi-row"], [1, "cost-kpi-card"], [1, "cost-kpi-icon"], [1, "cost-kpi-value"], [1, "cost-kpi-label"], [1, "cost-kpi-sub"], [1, "empty-state-hint"]], template: function AnalyticsResourceComponent_Template(rf, ctx) { if (rf & 1) {
|
|
4229
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AnalyticsResourceComponent, selectors: [["app-analytics-resource"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 7, vars: 5, consts: [["Title", "Knowledge Hub Analytics", "Icon", "fa-solid fa-chart-line", "Subtitle", "Pipeline health, trending tags, and content insights"], ["meta", ""], [3, "Label", "Variant"], [3, "Flex", "Padding"], [1, "analytics-loading"], [1, "analytics-layout"], ["text", "Loading analytics data...", "size", "medium"], [3, "ItemClicked", "Sections", "ActiveId"], ["footer", "", 1, "trending-section"], [1, "fa-solid", "fa-arrow-trend-up"], [1, "tag-cloud"], [3, "font-size", "font-weight"], [1, "no-trending"], [1, "main-content"], [1, "tab-section"], [1, "tab-section-header"], [1, "fa-solid", "fa-grip"], [1, "filter-bar"], [1, "date-chips"], [1, "date-chip", 3, "active"], [1, "filter-dropdown", 3, "ngModelChange", "ngModel"], [3, "value"], [1, "kpi-row"], [1, "kpi-card"], [1, "drill-down-panel"], [1, "cards-grid"], [1, "widget-card", 3, "click"], [1, "widget-title"], [1, "fa-solid", "fa-chart-line"], [1, "bar-chart"], [1, "bar-col"], [1, "fa-solid", "fa-bullseye"], [1, "rings-grid"], [1, "ring-item"], [1, "widget-empty"], [1, "fa-solid", "fa-gauge-high"], [1, "gauge-container"], ["width", "180", "height", "110", "viewBox", "0 0 180 110"], ["d", "M 20 95 A 70 70 0 0 1 160 95", "fill", "none", "stroke", "var(--mj-border-default)", "stroke-width", "14", "stroke-linecap", "round"], ["d", "M 20 95 A 70 70 0 0 1 48.6 35.2", "fill", "none", "stroke", "var(--mj-status-error)", "stroke-width", "14", "stroke-linecap", "round", "opacity", "0.3"], ["d", "M 48.6 35.2 A 70 70 0 0 1 118 28", "fill", "none", "stroke", "var(--mj-status-warning)", "stroke-width", "14", "opacity", "0.3"], ["d", "M 118 28 A 70 70 0 0 1 160 95", "fill", "none", "stroke", "var(--mj-status-success)", "stroke-width", "14", "stroke-linecap", "round", "opacity", "0.3"], ["x", "90", "y", "88", "text-anchor", "middle", "font-size", "26", "font-weight", "800", "fill", "var(--mj-text-primary)"], ["x", "90", "y", "105", "text-anchor", "middle", "font-size", "10", "fill", "var(--mj-text-muted)"], ["x", "28", "y", "108", "font-size", "8", "fill", "var(--mj-text-muted)"], ["x", "86", "y", "18", "font-size", "8", "fill", "var(--mj-text-muted)"], ["x", "155", "y", "108", "font-size", "8", "fill", "var(--mj-text-muted)"], [1, "mini-histogram"], [1, "mini-hist-bar", 3, "height", "background", "title"], [1, "mini-hist-label"], [1, "fa-solid", "fa-ranking-star"], [1, "h-bar-list"], [1, "h-bar-row"], [1, "widget-footnote"], [1, "fa-solid", "fa-bolt"], [1, "throughput-bars"], [1, "tp-bar", 3, "height", "background"], [1, "legend"], [1, "legend-item"], [1, "legend-dot", 2, "background", "var(--mj-status-success)"], [1, "legend-dot", 2, "background", "var(--mj-status-error)"], [1, "fa-solid", "fa-sitemap"], [1, "taxonomy-ring-container"], ["width", "140", "height", "140", "viewBox", "0 0 140 140"], ["cx", "70", "cy", "70", "r", "54", "fill", "none", "stroke", "var(--mj-border-default)", "stroke-width", "18"], ["cx", "70", "cy", "70", "r", "54", "fill", "none", "stroke-width", "18", "transform", "rotate(-90 70 70)"], ["x", "70", "y", "66", "text-anchor", "middle", "font-size", "22", "font-weight", "800", "fill", "var(--mj-text-primary)"], ["x", "70", "y", "82", "text-anchor", "middle", "font-size", "10", "fill", "var(--mj-text-muted)"], [1, "taxonomy-stats"], [1, "tax-stat", 3, "background", "color"], [1, "date-chip", 3, "click"], [1, "kpi-card", 3, "click"], [1, "kpi-label"], [1, "kpi-value"], [1, "kpi-delta"], [1, "fa-solid", "fa-arrow-up", 2, "font-size", "9px"], [1, "fa-solid", "fa-arrow-down", 2, "font-size", "9px"], [1, "kpi-sparkline"], ["width", "64", "height", "28", "viewBox", "0 0 64 28"], ["fill", "none", "stroke-width", "2", "stroke-linecap", "round", "stroke-linejoin", "round"], [1, "drill-down-header"], [1, "drill-down-title"], [1, "fa-solid", "fa-table"], [1, "drill-down-header-actions"], ["title", "Export CSV", 1, "drill-export-btn"], ["aria-label", "Close drill-down", 1, "drill-down-close", 3, "click"], [1, "fa-solid", "fa-times"], ["text", "Loading details...", "size", "small"], [1, "drill-down-table-wrap"], [1, "drill-down-empty"], ["title", "Export CSV", 1, "drill-export-btn", 3, "click"], [1, "fa-solid", "fa-download"], [1, "data-table"], [1, "drill-action-col"], ["title", "Open record", 1, "drill-open-btn"], ["title", "Open record", 1, "drill-open-btn", 3, "click"], [1, "fa-solid", "fa-arrow-up-right-from-square"], [1, "bar-value"], [1, "bar", 2, "background", "var(--mj-brand-primary)"], [1, "bar-label"], ["width", "48", "height", "48", "viewBox", "0 0 48 48"], ["cx", "24", "cy", "24", "r", "20", "fill", "none", "stroke", "var(--mj-border-default)", "stroke-width", "5"], ["cx", "24", "cy", "24", "r", "20", "fill", "none", "stroke-width", "5", "stroke-dashoffset", "31.4", "stroke-linecap", "round", "transform", "rotate(-90 24 24)"], ["x", "24", "y", "26", "text-anchor", "middle", "font-size", "11", "font-weight", "700", "fill", "var(--mj-text-primary)"], [1, "ring-label"], [1, "ring-stat"], [1, "mini-hist-bar", 3, "title"], [1, "h-bar-name"], [1, "h-bar-track"], [1, "h-bar-fill"], [1, "tp-bar"], [1, "tp-bar-label"], [1, "tax-stat"], [1, "fa-solid", "fa-tags"], [1, "sub-section", 2, "margin-top", "0"], [1, "sub-section-header"], [1, "fa-solid", "fa-trophy"], [1, "table-scroll"], [1, "empty-state"], [1, "sub-section"], [1, "sub-section", "co-occurrence-section"], [1, "fa-solid", "fa-link"], [1, "co-occurrence-actions"], ["title", "Last computed timestamp", 1, "co-occurrence-staleness"], ["title", "Recompute co-occurrence data", 1, "drill-export-btn", 3, "click", "disabled"], [1, "num"], [2, "cursor", "pointer"], [2, "cursor", "pointer", 3, "click"], [1, "weight-bar"], ["width", "48", "height", "16"], ["fill", "none", "stroke-width", "1.5", "stroke-linecap", "round"], [1, "muted"], ["aria-label", "Open record", "title", "Open record", 1, "drill-open-btn"], ["aria-label", "Open record", "title", "Open record", 1, "drill-open-btn", 3, "click"], [1, "fa-solid", "fa-chart-bar"], [1, "stacked-bar-chart"], [1, "stacked-row"], [1, "legend", 2, "margin-top", "12px"], [1, "stacked-label"], [1, "stacked-track"], [1, "stacked-seg", 3, "width", "background", "title"], [1, "stacked-seg", 3, "title"], [1, "legend-dot"], [1, "fa-solid", "fa-layer-group"], [1, "v-bar-chart"], [1, "v-bar-col"], [1, "chart-footnote"], [1, "v-bar", 2, "background", "var(--mj-brand-primary)"], [1, "v-bar-label"], [1, "fa-regular", "fa-clock"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-arrows-rotate"], [1, "weight-bar", 2, "background", "var(--mj-status-info)"], [1, "fa-solid", "fa-database"], [2, "cursor", "pointer", 3, "source-selected"], [2, "margin-right", "4px"], [1, "badge"], [1, "fa-solid", "fa-circle", 2, "font-size", "6px", "margin-right", "3px"], [1, "fa-solid", "fa-chart-area"], [1, "two-col"], [1, "widget-card"], [1, "bar-chart", 2, "height", "100px"], [1, "fa-solid", "fa-star-half-stroke"], [1, "quality-bands"], [1, "quality-band-row"], [1, "source-quality-note"], [1, "fa-solid", "fa-circle-info", 2, "color", "var(--mj-status-info)", "margin-right", "4px"], [1, "bar-value", 2, "font-size", "9px"], [1, "quality-band-label"], [1, "quality-band-track"], [1, "quality-band-fill"], [1, "fa-solid", "fa-heart-pulse"], [1, "source-health-grid"], [1, "source-health-card", 3, "border-top-color"], [1, "source-health-card"], [1, "health-card-name"], [1, "health-card-value"], [1, "health-card-label"], [1, "fa-solid", "fa-gears"], [1, "pipeline-throughput-bars"], [1, "pipeline-bar", 2, "cursor", "pointer", 3, "height", "background", "opacity"], [1, "pipeline-date-labels"], [1, "fa-solid", "fa-stopwatch"], [1, "stage-bars"], [1, "stage-row"], [1, "stage-summary"], [1, "stage-warning"], [1, "success-rate-display"], [1, "success-rate-stat"], [1, "success-rate-value", 2, "color", "var(--mj-status-success)"], [1, "success-rate-label"], [1, "success-rate-value", 2, "color", "var(--mj-status-error)"], [1, "success-rate-value", 2, "color", "var(--mj-text-primary)"], [1, "pipeline-bar", 2, "cursor", "pointer", 3, "click"], [1, "stage-name"], [1, "stage-track"], [1, "stage-fill"], [1, "stage-time"], [1, "fa-solid", "fa-triangle-exclamation", 2, "color", "var(--mj-status-warning)", "margin-right", "4px"], [1, "fa-solid", "fa-spinner"], [1, "monospace-cell"], [1, "progress-track"], [1, "progress-fill", 2, "background", "var(--mj-brand-primary)"], [1, "progress-text"], [1, "fa-solid", "fa-triangle-exclamation"], [1, "error-log"], [1, "error-entry"], [1, "error-time"], [1, "error-source"], [1, "error-msg"], [1, "fa-solid", "fa-circle-check"], [1, "fa-solid", "fa-chart-column"], [1, "histogram"], [1, "hist-bar-col", 2, "cursor", "pointer"], [1, "confidence-stats"], [1, "fa-solid", "fa-robot"], [1, "model-grid"], [1, "model-card"], [1, "model-recommendation"], [1, "hist-bar-col", 2, "cursor", "pointer", 3, "click"], [1, "hist-bar"], [1, "hist-label"], [1, "fa-solid", "fa-weight-scale"], [1, "grouped-bar-chart"], [1, "grouped-col"], [1, "legend", 2, "justify-content", "center", "margin-top", "14px"], [1, "grouped-bars"], [1, "g-bar", 2, "background", "var(--mj-brand-primary)", 3, "title"], [1, "g-bar", 2, "background", "var(--mj-status-info)", 3, "title"], [1, "g-bar", 2, "background", "var(--mj-text-muted)", 3, "title"], [1, "grouped-label"], [1, "accuracy-chart"], [1, "accuracy-y-labels"], [1, "accuracy-area"], [1, "accuracy-grid-line", 2, "top", "33%"], [1, "accuracy-grid-line", 2, "top", "66%"], ["width", "100%", "height", "110", "viewBox", "0 0 400 110", "preserveAspectRatio", "none", 1, "accuracy-svg"], ["fill", "none", "stroke", "var(--mj-brand-primary)", "stroke-width", "2.5", "vector-effect", "non-scaling-stroke", "stroke-linecap", "round", "stroke-linejoin", "round"], ["r", "3", "fill", "var(--mj-brand-primary)"], [1, "accuracy-x-labels"], [1, "accuracy-trend-text"], [1, "fa-solid", "fa-arrow-trend-up", 2, "margin-right", "4px"], [1, "fa-solid", "fa-exclamation-triangle"], [1, "model-name"], ["width", "80", "height", "80", "viewBox", "0 0 80 80", 2, "margin", "4px 0"], ["cx", "40", "cy", "40", "r", "32", "fill", "none", "stroke", "var(--mj-border-default)", "stroke-width", "8"], ["cx", "40", "cy", "40", "r", "32", "fill", "none", "stroke-width", "8", "stroke-dashoffset", "50", "transform", "rotate(-90 40 40)", "stroke-linecap", "round"], [1, "model-score"], [1, "model-detail"], [1, "model-detail", 2, "font-weight", "600"], [1, "fa-solid", "fa-lightbulb", 2, "color", "var(--mj-status-warning)"], [1, "fa-solid", "fa-coins"], [1, "tab-header-actions"], ["title", "Print (PDF alternative)", 1, "drill-export-btn", 3, "click"], [1, "fa-solid", "fa-print"], [1, "cost-kpi-row"], [1, "cost-kpi-card"], [1, "cost-kpi-icon"], [1, "cost-kpi-value"], [1, "cost-kpi-label"], [1, "cost-kpi-sub"], [1, "empty-state-hint"]], template: function AnalyticsResourceComponent_Template(rf, ctx) { if (rf & 1) {
|
|
4238
4230
|
i0.ɵɵelementStart(0, "mj-page-layout")(1, "mj-page-header", 0)(2, "div", 1);
|
|
4239
4231
|
i0.ɵɵelement(3, "mj-stat-badge", 2);
|
|
4240
4232
|
i0.ɵɵelementEnd()();
|
|
4241
4233
|
i0.ɵɵelementStart(4, "mj-page-body", 3);
|
|
4242
|
-
i0.ɵɵconditionalCreate(5, AnalyticsResourceComponent_Conditional_5_Template, 2, 0, "div", 4)(6, AnalyticsResourceComponent_Conditional_6_Template,
|
|
4234
|
+
i0.ɵɵconditionalCreate(5, AnalyticsResourceComponent_Conditional_5_Template, 2, 0, "div", 4)(6, AnalyticsResourceComponent_Conditional_6_Template, 18, 9, "div", 5);
|
|
4243
4235
|
i0.ɵɵelementEnd()();
|
|
4244
4236
|
} if (rf & 2) {
|
|
4245
4237
|
i0.ɵɵadvance(3);
|
|
@@ -4248,7 +4240,7 @@ let AnalyticsResourceComponent = class AnalyticsResourceComponent extends BaseRe
|
|
|
4248
4240
|
i0.ɵɵproperty("Flex", true)("Padding", false);
|
|
4249
4241
|
i0.ɵɵadvance();
|
|
4250
4242
|
i0.ɵɵconditional(ctx.IsLoading ? 5 : 6);
|
|
4251
|
-
} }, dependencies: [i1.NgSelectOption, i1.ɵNgSelectMultipleOption, i1.SelectControlValueAccessor, i1.NgControlStatus, i1.NgModel, i2.LoadingComponent, i3.MJPageHeaderComponent, i3.MJPageLayoutComponent, i3.MJPageBodyComponent, i3.MJStatBadgeComponent], styles: ["\n\n\n\n\n.analytics-loading[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 400px;\n}\n\n.analytics-layout[_ngcontent-%COMP%] {\n display: flex;\n flex: 1;\n min-height: 0;\n}\n\n\n\n.analytics-sidebar[_ngcontent-%COMP%] {\n width: 220px;\n min-width: 220px;\n background: var(--mj-bg-surface);\n border-right: 1px solid var(--mj-border-default);\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n}\n\n.sidebar-header[_ngcontent-%COMP%] {\n padding: 20px 16px 12px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.sidebar-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 0;\n}\n\n.sidebar-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-brand-primary);\n}\n\n.sidebar-nav[_ngcontent-%COMP%] {\n padding: 8px 0;\n flex: 1;\n display: flex;\n flex-direction: column;\n}\n\n.nav-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 16px;\n font-size: 13.5px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n border: none;\n background: transparent;\n border-left: 3px solid transparent;\n transition: all 0.15s ease;\n text-align: left;\n width: 100%;\n font-family: inherit;\n}\n\n.nav-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-primary);\n}\n\n.nav-item.active[_ngcontent-%COMP%] {\n border-left-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n font-weight: 600;\n}\n\n.nav-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n width: 16px;\n text-align: center;\n font-size: 13px;\n}\n\n.sidebar-divider[_ngcontent-%COMP%] {\n height: 1px;\n background: var(--mj-border-default);\n margin: 8px 16px;\n}\n\n.trending-section[_ngcontent-%COMP%] {\n padding: 12px 16px 16px;\n}\n\n.trending-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--mj-text-muted);\n margin: 0 0 10px;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.tag-cloud[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 4px 6px;\n line-height: 1.7;\n}\n\n.tag-cloud[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n cursor: pointer;\n transition: opacity 0.15s;\n}\n\n.tag-cloud[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:hover {\n opacity: 0.7;\n}\n\n.no-trending[_ngcontent-%COMP%] {\n color: var(--mj-text-muted) !important;\n font-size: 12px !important;\n font-style: italic;\n}\n\n.pipeline-status[_ngcontent-%COMP%] {\n padding: 12px 16px;\n border-top: 1px solid var(--mj-border-default);\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 11.5px;\n color: var(--mj-text-muted);\n}\n\n.status-dot[_ngcontent-%COMP%] {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: var(--mj-status-success);\n flex-shrink: 0;\n}\n\n.status-dot-error[_ngcontent-%COMP%] {\n background: var(--mj-status-error);\n}\n\n\n\n.main-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n min-width: 0;\n}\n\n.tab-section[_ngcontent-%COMP%] {\n padding: 28px 32px 40px;\n}\n\n.tab-section-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-bottom: 20px;\n padding-bottom: 12px;\n border-bottom: 2px solid var(--mj-brand-primary);\n}\n\n.tab-section-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 18px;\n color: var(--mj-brand-primary);\n}\n\n.tab-section-header[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0;\n}\n\n\n\n.filter-bar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 20px;\n flex-wrap: wrap;\n}\n\n.date-chips[_ngcontent-%COMP%] {\n display: flex;\n gap: 0;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.date-chip[_ngcontent-%COMP%] {\n padding: 6px 14px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface);\n cursor: pointer;\n border: none;\n border-right: 1px solid var(--mj-border-default);\n transition: all 0.15s;\n font-family: inherit;\n}\n\n.date-chip[_ngcontent-%COMP%]:last-child {\n border-right: none;\n}\n\n.date-chip[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.date-chip.active[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.filter-dropdown[_ngcontent-%COMP%] {\n padding: 6px 12px;\n font-size: 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n font-family: inherit;\n}\n\n\n\n.kpi-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 16px;\n margin-bottom: 20px;\n}\n\n.kpi-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 16px 18px;\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n transition: transform 0.15s, box-shadow 0.15s;\n cursor: pointer;\n}\n\n.kpi-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n}\n\n.kpi-label[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-muted);\n margin-bottom: 4px;\n}\n\n.kpi-value[_ngcontent-%COMP%] {\n font-size: 28px;\n font-weight: 700;\n color: var(--mj-text-primary);\n line-height: 1.1;\n}\n\n.kpi-delta[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 500;\n margin-top: 4px;\n color: var(--mj-text-muted);\n}\n\n.kpi-delta.up[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.kpi-delta.down[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.kpi-sparkline[_ngcontent-%COMP%] {\n flex-shrink: 0;\n margin-left: 12px;\n margin-top: 6px;\n}\n\n\n\n.cards-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 16px;\n}\n\n.widget-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 18px 20px;\n transition: transform 0.15s, box-shadow 0.15s;\n cursor: pointer;\n}\n\n.widget-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n}\n\n.widget-title[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 14px;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.widget-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 12px;\n}\n\n.widget-empty[_ngcontent-%COMP%] {\n text-align: center;\n color: var(--mj-text-muted);\n font-size: 12px;\n padding: 20px;\n}\n\n.widget-footnote[_ngcontent-%COMP%] {\n text-align: center;\n font-size: 10px;\n color: var(--mj-text-muted);\n margin-top: 10px;\n}\n\n\n\n.bar-chart[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n gap: 8px;\n height: 120px;\n padding-top: 10px;\n}\n\n.bar-col[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 100%;\n justify-content: flex-end;\n}\n\n.bar[_ngcontent-%COMP%] {\n width: 100%;\n border-radius: 4px 4px 0 0;\n transition: height 0.3s;\n min-height: 2px;\n}\n\n.bar-label[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-text-muted);\n margin-top: 6px;\n}\n\n.bar-value[_ngcontent-%COMP%] {\n font-size: 10px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 4px;\n}\n\n\n\n.rings-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 12px;\n}\n\n.ring-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 6px 0;\n}\n\n.ring-label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-primary);\n font-weight: 500;\n}\n\n.ring-stat[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n\n\n.gauge-container[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n margin-bottom: 8px;\n}\n\n\n\n.mini-histogram[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n gap: 3px;\n height: 32px;\n justify-content: center;\n}\n\n.mini-hist-bar[_ngcontent-%COMP%] {\n width: 14px;\n border-radius: 2px;\n}\n\n.mini-hist-label[_ngcontent-%COMP%] {\n text-align: center;\n font-size: 10px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n}\n\n\n\n.h-bar-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.h-bar-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.h-bar-name[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n width: 100px;\n flex-shrink: 0;\n text-align: right;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.h-bar-track[_ngcontent-%COMP%] {\n flex: 1;\n height: 20px;\n background: var(--mj-bg-surface-card);\n border-radius: 4px;\n overflow: hidden;\n}\n\n.h-bar-fill[_ngcontent-%COMP%] {\n height: 100%;\n border-radius: 4px;\n display: flex;\n align-items: center;\n padding-left: 8px;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n min-width: 36px;\n}\n\n\n\n.throughput-bars[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n gap: 4px;\n height: 110px;\n margin-bottom: 22px;\n}\n\n.tp-bar[_ngcontent-%COMP%] {\n flex: 1;\n border-radius: 3px 3px 0 0;\n position: relative;\n min-height: 4px;\n}\n\n.tp-bar-label[_ngcontent-%COMP%] {\n position: absolute;\n bottom: -18px;\n left: 50%;\n transform: translateX(-50%);\n font-size: 8px;\n color: var(--mj-text-muted);\n white-space: nowrap;\n}\n\n\n\n.taxonomy-ring-container[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n}\n\n.taxonomy-stats[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n margin-top: 12px;\n}\n\n.tax-stat[_ngcontent-%COMP%] {\n flex: 1;\n text-align: center;\n padding: 8px 4px;\n border-radius: 6px;\n font-size: 20px;\n font-weight: 700;\n}\n\n.tax-stat[_ngcontent-%COMP%] small[_ngcontent-%COMP%] {\n display: block;\n font-size: 10px;\n font-weight: 500;\n margin-top: 2px;\n}\n\n\n\n.legend[_ngcontent-%COMP%] {\n display: flex;\n gap: 16px;\n margin-top: 10px;\n flex-wrap: wrap;\n justify-content: center;\n}\n\n.legend-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 5px;\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n.legend-dot[_ngcontent-%COMP%] {\n width: 10px;\n height: 10px;\n border-radius: 3px;\n flex-shrink: 0;\n}\n\n\n\n.table-scroll[_ngcontent-%COMP%] {\n overflow-x: auto;\n}\n\n.data-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n font-size: 12.5px;\n}\n\n.data-table[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n text-align: left;\n padding: 10px 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-text-muted);\n border-bottom: 2px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n white-space: nowrap;\n}\n\n.data-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 10px 12px;\n border-bottom: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-primary);\n vertical-align: middle;\n}\n\n.data-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.data-table[_ngcontent-%COMP%] .num[_ngcontent-%COMP%] {\n text-align: right;\n font-variant-numeric: tabular-nums;\n}\n\n.muted[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n.monospace-cell[_ngcontent-%COMP%] {\n font-family: monospace;\n font-size: 11px;\n color: var(--mj-brand-primary);\n}\n\n.weight-bar[_ngcontent-%COMP%] {\n display: inline-block;\n height: 6px;\n border-radius: 3px;\n vertical-align: middle;\n margin-right: 6px;\n}\n\n\n\n.badge[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 2px 8px;\n border-radius: 10px;\n font-size: 10.5px;\n font-weight: 600;\n}\n\n.badge-success[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.badge-warning[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.badge-error[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.badge-info[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-info) 12%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n}\n\n\n\n.sub-section[_ngcontent-%COMP%] {\n margin-top: 24px;\n}\n\n.sub-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 12px;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.sub-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-brand-primary);\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 3rem 2rem;\n text-align: center;\n gap: 0.75rem;\n border: 2px dashed var(--mj-border-default);\n border-radius: 12px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 2.5rem;\n color: var(--mj-text-disabled);\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 0.85rem;\n max-width: 400px;\n}\n\n\n\n.drill-down-panel[_ngcontent-%COMP%] {\n margin-top: 16px;\n margin-bottom: 16px;\n background: var(--mj-bg-surface);\n border: 2px solid var(--mj-brand-primary);\n border-radius: 10px;\n overflow: hidden;\n animation: _ngcontent-%COMP%_slideDown 0.2s ease-out;\n}\n\n@keyframes _ngcontent-%COMP%_slideDown {\n from {\n opacity: 0;\n max-height: 0;\n }\n to {\n opacity: 1;\n max-height: 600px;\n }\n}\n\n.drill-down-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 16px;\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.drill-down-title[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-brand-primary);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.drill-down-close[_ngcontent-%COMP%] {\n border: none;\n background: transparent;\n color: var(--mj-text-muted);\n cursor: pointer;\n font-size: 14px;\n padding: 4px 8px;\n border-radius: 4px;\n transition: all 0.15s;\n}\n\n.drill-down-close[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.drill-down-table-wrap[_ngcontent-%COMP%] {\n max-height: 400px;\n overflow-y: auto;\n padding: 8px;\n}\n\n.drill-action-col[_ngcontent-%COMP%] {\n width: 40px;\n text-align: center;\n padding: 6px !important;\n}\n\n.drill-open-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n border: 1px solid var(--mj-border-default);\n border-radius: 5px;\n background: transparent;\n color: var(--mj-text-muted);\n font-size: 10px;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.drill-open-btn[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.drill-down-header-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.drill-export-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 5px;\n background: transparent;\n color: var(--mj-text-secondary);\n font-size: 11px;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.drill-export-btn[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.sub-section-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 0;\n}\n\n.sub-section-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n}\n\n.drill-down-empty[_ngcontent-%COMP%] {\n padding: 24px;\n text-align: center;\n color: var(--mj-text-muted);\n font-size: 13px;\n}\n\n\n\n.stacked-bar-chart[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.stacked-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.stacked-label[_ngcontent-%COMP%] {\n width: 90px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n text-align: right;\n flex-shrink: 0;\n}\n\n.stacked-track[_ngcontent-%COMP%] {\n flex: 1;\n height: 22px;\n display: flex;\n border-radius: 4px;\n overflow: hidden;\n}\n\n.stacked-seg[_ngcontent-%COMP%] {\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 9px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n min-width: 20px;\n}\n\n\n\n.v-bar-chart[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n gap: 24px;\n height: 140px;\n padding-top: 10px;\n justify-content: center;\n}\n\n.v-bar-col[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 100%;\n justify-content: flex-end;\n min-width: 60px;\n}\n\n.v-bar[_ngcontent-%COMP%] {\n width: 48px;\n border-radius: 4px 4px 0 0;\n display: flex;\n align-items: flex-start;\n justify-content: center;\n padding-top: 4px;\n font-size: 11px;\n font-weight: 700;\n color: var(--mj-text-inverse);\n}\n\n.v-bar-label[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 8px;\n text-align: center;\n}\n\n.chart-footnote[_ngcontent-%COMP%] {\n text-align: center;\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 14px;\n}\n\n\n\n.two-col[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 20px;\n}\n\n\n\n.source-selected[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 5%, var(--mj-bg-surface));\n}\n\n\n\n.quality-bands[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.quality-band-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.quality-band-label[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n width: 65px;\n text-align: right;\n flex-shrink: 0;\n}\n\n.quality-band-track[_ngcontent-%COMP%] {\n flex: 1;\n height: 18px;\n background: var(--mj-bg-surface-card);\n border-radius: 4px;\n overflow: hidden;\n}\n\n.quality-band-fill[_ngcontent-%COMP%] {\n height: 100%;\n border-radius: 4px;\n display: flex;\n align-items: center;\n padding-left: 8px;\n font-size: 10px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n min-width: 30px;\n}\n\n.source-quality-note[_ngcontent-%COMP%] {\n margin-top: 14px;\n padding: 10px;\n background: var(--mj-bg-surface-card);\n border-radius: 6px;\n font-size: 11px;\n color: var(--mj-text-secondary);\n}\n\n\n\n.source-health-grid[_ngcontent-%COMP%] {\n display: grid;\n gap: 12px;\n}\n\n.source-health-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 14px;\n text-align: center;\n border-top: 3px solid;\n}\n\n.health-card-name[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-bottom: 4px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.health-card-value[_ngcontent-%COMP%] {\n font-size: 22px;\n font-weight: 700;\n}\n\n.health-card-label[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-text-muted);\n}\n\n\n\n.pipeline-throughput-bars[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n gap: 3px;\n height: 110px;\n}\n\n.pipeline-bar[_ngcontent-%COMP%] {\n flex: 1;\n border-radius: 2px 2px 0 0;\n min-height: 3px;\n}\n\n.pipeline-date-labels[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n margin-top: 6px;\n font-size: 10px;\n color: var(--mj-text-muted);\n}\n\n\n\n.stage-bars[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.stage-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.stage-name[_ngcontent-%COMP%] {\n width: 80px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n text-align: right;\n flex-shrink: 0;\n}\n\n.stage-track[_ngcontent-%COMP%] {\n flex: 1;\n height: 24px;\n background: var(--mj-bg-surface-card);\n border-radius: 4px;\n overflow: hidden;\n}\n\n.stage-fill[_ngcontent-%COMP%] {\n height: 100%;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: flex-end;\n padding-right: 8px;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n}\n\n.stage-time[_ngcontent-%COMP%] {\n width: 50px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-primary);\n text-align: right;\n flex-shrink: 0;\n}\n\n.stage-summary[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n margin-top: 14px;\n padding-top: 10px;\n border-top: 1px solid var(--mj-border-default);\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.stage-warning[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n\n\n.success-rate-display[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n gap: 48px;\n padding: 20px;\n}\n\n.success-rate-stat[_ngcontent-%COMP%] {\n text-align: center;\n}\n\n.success-rate-value[_ngcontent-%COMP%] {\n font-size: 32px;\n font-weight: 700;\n line-height: 1.1;\n}\n\n.success-rate-label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n}\n\n\n\n.progress-track[_ngcontent-%COMP%] {\n width: 100px;\n height: 6px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 3px;\n overflow: hidden;\n display: inline-block;\n vertical-align: middle;\n margin-right: 6px;\n}\n\n.progress-fill[_ngcontent-%COMP%] {\n height: 100%;\n border-radius: 3px;\n}\n\n.progress-text[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n}\n\n\n\n.error-log[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.error-entry[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n padding: 10px 14px;\n background: color-mix(in srgb, var(--mj-status-error) 4%, var(--mj-bg-surface));\n border-left: 3px solid var(--mj-status-error);\n border-radius: 0 6px 6px 0;\n font-size: 12px;\n}\n\n.error-time[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 11px;\n white-space: nowrap;\n flex-shrink: 0;\n width: 130px;\n}\n\n.error-source[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-weight: 600;\n flex-shrink: 0;\n width: 120px;\n}\n\n.error-msg[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n}\n\n\n\n.histogram[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n gap: 6px;\n height: 130px;\n padding-bottom: 24px;\n}\n\n.hist-bar-col[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 100%;\n justify-content: flex-end;\n}\n\n.hist-bar[_ngcontent-%COMP%] {\n width: 100%;\n border-radius: 3px 3px 0 0;\n display: flex;\n align-items: flex-start;\n justify-content: center;\n padding-top: 3px;\n font-size: 10px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n min-height: 2px;\n}\n\n.hist-label[_ngcontent-%COMP%] {\n font-size: 9px;\n color: var(--mj-text-muted);\n margin-top: 6px;\n text-align: center;\n}\n\n.confidence-stats[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n margin-top: 8px;\n padding: 10px;\n background: var(--mj-bg-surface-card);\n border-radius: 6px;\n font-size: 11px;\n color: var(--mj-text-muted);\n flex-wrap: wrap;\n gap: 8px;\n}\n\n\n\n.grouped-bar-chart[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n gap: 20px;\n height: 140px;\n justify-content: center;\n}\n\n.grouped-col[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 100%;\n justify-content: flex-end;\n}\n\n.grouped-bars[_ngcontent-%COMP%] {\n display: flex;\n gap: 3px;\n align-items: flex-end;\n height: 100%;\n}\n\n.g-bar[_ngcontent-%COMP%] {\n width: 18px;\n border-radius: 3px 3px 0 0;\n min-height: 2px;\n}\n\n.grouped-label[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-text-muted);\n margin-top: 6px;\n text-align: center;\n}\n\n\n\n.accuracy-chart[_ngcontent-%COMP%] {\n position: relative;\n display: flex;\n margin: 0 10px;\n}\n\n.accuracy-y-labels[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n font-size: 9px;\n color: var(--mj-text-muted);\n margin-right: 8px;\n height: 110px;\n}\n\n.accuracy-area[_ngcontent-%COMP%] {\n flex: 1;\n position: relative;\n height: 110px;\n border-left: 1px solid var(--mj-border-default);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.accuracy-grid-line[_ngcontent-%COMP%] {\n position: absolute;\n left: 0;\n right: 0;\n border-top: 1px dashed var(--mj-border-subtle);\n}\n\n.accuracy-svg[_ngcontent-%COMP%] {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n\n.accuracy-x-labels[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n margin-top: 8px;\n padding: 0 40px 0 40px;\n font-size: 10px;\n color: var(--mj-text-muted);\n}\n\n.accuracy-trend-text[_ngcontent-%COMP%] {\n text-align: center;\n margin-top: 10px;\n font-size: 12px;\n color: var(--mj-status-success);\n}\n\n\n\n.model-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 12px;\n}\n\n.model-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n padding: 14px;\n text-align: center;\n border: 1px solid var(--mj-border-default);\n}\n\n.model-name[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 8px;\n}\n\n.model-score[_ngcontent-%COMP%] {\n font-size: 28px;\n font-weight: 700;\n line-height: 1;\n}\n\n.model-detail[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n}\n\n.model-recommendation[_ngcontent-%COMP%] {\n margin-top: 14px;\n padding: 12px 16px;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: flex-start;\n gap: 8px;\n}\n\n\n\n@media (max-width: 1200px) {\n .cards-grid[_ngcontent-%COMP%] {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .kpi-row[_ngcontent-%COMP%] {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .model-grid[_ngcontent-%COMP%] {\n grid-template-columns: repeat(2, 1fr);\n }\n}\n\n@media (max-width: 768px) {\n .analytics-layout[_ngcontent-%COMP%] {\n flex-direction: column;\n }\n\n .analytics-sidebar[_ngcontent-%COMP%] {\n width: 100%;\n min-width: 100%;\n border-right: none;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .sidebar-nav[_ngcontent-%COMP%] {\n flex-direction: row;\n overflow-x: auto;\n }\n\n .nav-item[_ngcontent-%COMP%] {\n border-left: none;\n border-bottom: 3px solid transparent;\n white-space: nowrap;\n }\n\n .nav-item.active[_ngcontent-%COMP%] {\n border-left-color: transparent;\n border-bottom-color: var(--mj-brand-primary);\n }\n\n .trending-section[_ngcontent-%COMP%], \n .sidebar-divider[_ngcontent-%COMP%] {\n display: none;\n }\n\n .tab-section[_ngcontent-%COMP%] {\n padding: 16px;\n }\n\n .cards-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .kpi-row[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .two-col[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .cost-kpi-row[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n}\n\n\n\n\n.tab-header-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n margin-left: auto;\n}\n\n.cost-kpi-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 16px;\n margin-bottom: 24px;\n}\n\n.cost-kpi-card[_ngcontent-%COMP%] {\n display: flex;\n gap: 14px;\n align-items: center;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n padding: 18px 20px;\n transition: box-shadow 0.15s ease;\n}\n\n.cost-kpi-card[_ngcontent-%COMP%]:hover {\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n}\n\n.cost-kpi-icon[_ngcontent-%COMP%] {\n width: 44px;\n height: 44px;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 18px;\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n flex-shrink: 0;\n}\n\n.cost-kpi-value[_ngcontent-%COMP%] {\n font-size: 22px;\n font-weight: 700;\n color: var(--mj-text-primary);\n line-height: 1.2;\n}\n\n.cost-kpi-label[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.03em;\n}\n\n.cost-kpi-sub[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n.empty-state-hint[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n}\n\n\n\n\n@media print {\n .analytics-sidebar[_ngcontent-%COMP%], \n .filter-bar[_ngcontent-%COMP%], \n .tab-header-actions[_ngcontent-%COMP%], \n .drill-down-close[_ngcontent-%COMP%], \n .drill-export-btn[_ngcontent-%COMP%], \n .drill-open-btn[_ngcontent-%COMP%] {\n display: none !important;\n }\n\n .analytics-layout[_ngcontent-%COMP%] {\n display: block;\n }\n\n .main-content[_ngcontent-%COMP%] {\n padding: 0;\n }\n\n .tab-section[_ngcontent-%COMP%] {\n padding: 0;\n }\n\n .widget-card[_ngcontent-%COMP%], \n .cost-kpi-card[_ngcontent-%COMP%], \n .kpi-card[_ngcontent-%COMP%] {\n break-inside: avoid;\n box-shadow: none;\n border: 1px solid var(--mj-border-default);\n }\n\n .data-table[_ngcontent-%COMP%] {\n font-size: 10px;\n }\n}\n\n\n\n\n\n\n\n.co-occurrence-section[_ngcontent-%COMP%] {\n max-height: 500px;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.co-occurrence-section[_ngcontent-%COMP%] .table-scroll[_ngcontent-%COMP%] {\n overflow-y: auto;\n max-height: 400px;\n flex: 1;\n min-height: 0;\n}\n\n.co-occurrence-section[_ngcontent-%COMP%] .empty-state[_ngcontent-%COMP%] {\n max-height: 200px;\n overflow: hidden;\n}\n\n.co-occurrence-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.co-occurrence-staleness[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 5px;\n font-size: 0.78rem;\n color: var(--mj-text-muted);\n}"] });
|
|
4243
|
+
} }, dependencies: [i1.NgSelectOption, i1.ɵNgSelectMultipleOption, i1.SelectControlValueAccessor, i1.NgControlStatus, i1.NgModel, i2.LoadingComponent, i3.MJPageHeaderComponent, i3.MJPageLayoutComponent, i3.MJPageBodyComponent, i3.MJLeftNavComponent, i3.MJLeftNavContentComponent, i3.MJStatBadgeComponent], styles: ["\n\n\n\n\n.analytics-loading[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 400px;\n}\n\n\n\n\n\n\n\n\n.analytics-layout[_ngcontent-%COMP%] {\n display: flex;\n flex: 1;\n min-height: 0;\n}\n\n.trending-section[_ngcontent-%COMP%] {\n padding: 12px 16px 16px;\n}\n\n.trending-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--mj-text-muted);\n margin: 0 0 10px;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.tag-cloud[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 4px 6px;\n line-height: 1.7;\n}\n\n.tag-cloud[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n cursor: pointer;\n transition: opacity 0.15s;\n}\n\n.tag-cloud[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:hover {\n opacity: 0.7;\n}\n\n.no-trending[_ngcontent-%COMP%] {\n color: var(--mj-text-muted) !important;\n font-size: 12px !important;\n font-style: italic;\n}\n\n.pipeline-status[_ngcontent-%COMP%] {\n padding: 12px 16px;\n border-top: 1px solid var(--mj-border-default);\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 11.5px;\n color: var(--mj-text-muted);\n}\n\n.status-dot[_ngcontent-%COMP%] {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: var(--mj-status-success);\n flex-shrink: 0;\n}\n\n.status-dot-error[_ngcontent-%COMP%] {\n background: var(--mj-status-error);\n}\n\n\n\n.main-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n min-width: 0;\n}\n\n.tab-section[_ngcontent-%COMP%] {\n padding: 28px 32px 40px;\n}\n\n.tab-section-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-bottom: 20px;\n padding-bottom: 12px;\n border-bottom: 2px solid var(--mj-brand-primary);\n}\n\n.tab-section-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 18px;\n color: var(--mj-brand-primary);\n}\n\n.tab-section-header[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0;\n}\n\n\n\n.filter-bar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 20px;\n flex-wrap: wrap;\n}\n\n.date-chips[_ngcontent-%COMP%] {\n display: flex;\n gap: 0;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.date-chip[_ngcontent-%COMP%] {\n padding: 6px 14px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface);\n cursor: pointer;\n border: none;\n border-right: 1px solid var(--mj-border-default);\n transition: all 0.15s;\n font-family: inherit;\n}\n\n.date-chip[_ngcontent-%COMP%]:last-child {\n border-right: none;\n}\n\n.date-chip[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.date-chip.active[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.filter-dropdown[_ngcontent-%COMP%] {\n padding: 6px 12px;\n font-size: 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n font-family: inherit;\n}\n\n\n\n.kpi-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 16px;\n margin-bottom: 20px;\n}\n\n.kpi-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 16px 18px;\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n transition: transform 0.15s, box-shadow 0.15s;\n cursor: pointer;\n}\n\n.kpi-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n}\n\n.kpi-label[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-muted);\n margin-bottom: 4px;\n}\n\n.kpi-value[_ngcontent-%COMP%] {\n font-size: 28px;\n font-weight: 700;\n color: var(--mj-text-primary);\n line-height: 1.1;\n}\n\n.kpi-delta[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 500;\n margin-top: 4px;\n color: var(--mj-text-muted);\n}\n\n.kpi-delta.up[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.kpi-delta.down[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.kpi-sparkline[_ngcontent-%COMP%] {\n flex-shrink: 0;\n margin-left: 12px;\n margin-top: 6px;\n}\n\n\n\n.cards-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 16px;\n}\n\n.widget-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 18px 20px;\n transition: transform 0.15s, box-shadow 0.15s;\n cursor: pointer;\n}\n\n.widget-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n}\n\n.widget-title[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 14px;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.widget-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 12px;\n}\n\n.widget-empty[_ngcontent-%COMP%] {\n text-align: center;\n color: var(--mj-text-muted);\n font-size: 12px;\n padding: 20px;\n}\n\n.widget-footnote[_ngcontent-%COMP%] {\n text-align: center;\n font-size: 10px;\n color: var(--mj-text-muted);\n margin-top: 10px;\n}\n\n\n\n.bar-chart[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n gap: 8px;\n height: 120px;\n padding-top: 10px;\n}\n\n.bar-col[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 100%;\n justify-content: flex-end;\n}\n\n.bar[_ngcontent-%COMP%] {\n width: 100%;\n border-radius: 4px 4px 0 0;\n transition: height 0.3s;\n min-height: 2px;\n}\n\n.bar-label[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-text-muted);\n margin-top: 6px;\n}\n\n.bar-value[_ngcontent-%COMP%] {\n font-size: 10px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 4px;\n}\n\n\n\n.rings-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 12px;\n}\n\n.ring-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 6px 0;\n}\n\n.ring-label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-primary);\n font-weight: 500;\n}\n\n.ring-stat[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n\n\n.gauge-container[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n margin-bottom: 8px;\n}\n\n\n\n.mini-histogram[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n gap: 3px;\n height: 32px;\n justify-content: center;\n}\n\n.mini-hist-bar[_ngcontent-%COMP%] {\n width: 14px;\n border-radius: 2px;\n}\n\n.mini-hist-label[_ngcontent-%COMP%] {\n text-align: center;\n font-size: 10px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n}\n\n\n\n.h-bar-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.h-bar-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.h-bar-name[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n width: 100px;\n flex-shrink: 0;\n text-align: right;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.h-bar-track[_ngcontent-%COMP%] {\n flex: 1;\n height: 20px;\n background: var(--mj-bg-surface-card);\n border-radius: 4px;\n overflow: hidden;\n}\n\n.h-bar-fill[_ngcontent-%COMP%] {\n height: 100%;\n border-radius: 4px;\n display: flex;\n align-items: center;\n padding-left: 8px;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n min-width: 36px;\n}\n\n\n\n.throughput-bars[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n gap: 4px;\n height: 110px;\n margin-bottom: 22px;\n}\n\n.tp-bar[_ngcontent-%COMP%] {\n flex: 1;\n border-radius: 3px 3px 0 0;\n position: relative;\n min-height: 4px;\n}\n\n.tp-bar-label[_ngcontent-%COMP%] {\n position: absolute;\n bottom: -18px;\n left: 50%;\n transform: translateX(-50%);\n font-size: 8px;\n color: var(--mj-text-muted);\n white-space: nowrap;\n}\n\n\n\n.taxonomy-ring-container[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n}\n\n.taxonomy-stats[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n margin-top: 12px;\n}\n\n.tax-stat[_ngcontent-%COMP%] {\n flex: 1;\n text-align: center;\n padding: 8px 4px;\n border-radius: 6px;\n font-size: 20px;\n font-weight: 700;\n}\n\n.tax-stat[_ngcontent-%COMP%] small[_ngcontent-%COMP%] {\n display: block;\n font-size: 10px;\n font-weight: 500;\n margin-top: 2px;\n}\n\n\n\n.legend[_ngcontent-%COMP%] {\n display: flex;\n gap: 16px;\n margin-top: 10px;\n flex-wrap: wrap;\n justify-content: center;\n}\n\n.legend-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 5px;\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n.legend-dot[_ngcontent-%COMP%] {\n width: 10px;\n height: 10px;\n border-radius: 3px;\n flex-shrink: 0;\n}\n\n\n\n.table-scroll[_ngcontent-%COMP%] {\n overflow-x: auto;\n}\n\n.data-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n font-size: 12.5px;\n}\n\n.data-table[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n text-align: left;\n padding: 10px 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-text-muted);\n border-bottom: 2px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n white-space: nowrap;\n}\n\n.data-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 10px 12px;\n border-bottom: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-primary);\n vertical-align: middle;\n}\n\n.data-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.data-table[_ngcontent-%COMP%] .num[_ngcontent-%COMP%] {\n text-align: right;\n font-variant-numeric: tabular-nums;\n}\n\n.muted[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n.monospace-cell[_ngcontent-%COMP%] {\n font-family: monospace;\n font-size: 11px;\n color: var(--mj-brand-primary);\n}\n\n.weight-bar[_ngcontent-%COMP%] {\n display: inline-block;\n height: 6px;\n border-radius: 3px;\n vertical-align: middle;\n margin-right: 6px;\n}\n\n\n\n.badge[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 2px 8px;\n border-radius: 10px;\n font-size: 10.5px;\n font-weight: 600;\n}\n\n.badge-success[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.badge-warning[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.badge-error[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.badge-info[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-info) 12%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n}\n\n\n\n.sub-section[_ngcontent-%COMP%] {\n margin-top: 24px;\n}\n\n.sub-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 12px;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.sub-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-brand-primary);\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 3rem 2rem;\n text-align: center;\n gap: 0.75rem;\n border: 2px dashed var(--mj-border-default);\n border-radius: 12px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 2.5rem;\n color: var(--mj-text-disabled);\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 0.85rem;\n max-width: 400px;\n}\n\n\n\n.drill-down-panel[_ngcontent-%COMP%] {\n margin-top: 16px;\n margin-bottom: 16px;\n background: var(--mj-bg-surface);\n border: 2px solid var(--mj-brand-primary);\n border-radius: 10px;\n overflow: hidden;\n animation: _ngcontent-%COMP%_slideDown 0.2s ease-out;\n}\n\n@keyframes _ngcontent-%COMP%_slideDown {\n from {\n opacity: 0;\n max-height: 0;\n }\n to {\n opacity: 1;\n max-height: 600px;\n }\n}\n\n.drill-down-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 16px;\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.drill-down-title[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-brand-primary);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.drill-down-close[_ngcontent-%COMP%] {\n border: none;\n background: transparent;\n color: var(--mj-text-muted);\n cursor: pointer;\n font-size: 14px;\n padding: 4px 8px;\n border-radius: 4px;\n transition: all 0.15s;\n}\n\n.drill-down-close[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.drill-down-table-wrap[_ngcontent-%COMP%] {\n max-height: 400px;\n overflow-y: auto;\n padding: 8px;\n}\n\n.drill-action-col[_ngcontent-%COMP%] {\n width: 40px;\n text-align: center;\n padding: 6px !important;\n}\n\n.drill-open-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n border: 1px solid var(--mj-border-default);\n border-radius: 5px;\n background: transparent;\n color: var(--mj-text-muted);\n font-size: 10px;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.drill-open-btn[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.drill-down-header-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.drill-export-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 5px;\n background: transparent;\n color: var(--mj-text-secondary);\n font-size: 11px;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.drill-export-btn[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.sub-section-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 0;\n}\n\n.sub-section-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n}\n\n.drill-down-empty[_ngcontent-%COMP%] {\n padding: 24px;\n text-align: center;\n color: var(--mj-text-muted);\n font-size: 13px;\n}\n\n\n\n.stacked-bar-chart[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.stacked-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.stacked-label[_ngcontent-%COMP%] {\n width: 90px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n text-align: right;\n flex-shrink: 0;\n}\n\n.stacked-track[_ngcontent-%COMP%] {\n flex: 1;\n height: 22px;\n display: flex;\n border-radius: 4px;\n overflow: hidden;\n}\n\n.stacked-seg[_ngcontent-%COMP%] {\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 9px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n min-width: 20px;\n}\n\n\n\n.v-bar-chart[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n gap: 24px;\n height: 140px;\n padding-top: 10px;\n justify-content: center;\n}\n\n.v-bar-col[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 100%;\n justify-content: flex-end;\n min-width: 60px;\n}\n\n.v-bar[_ngcontent-%COMP%] {\n width: 48px;\n border-radius: 4px 4px 0 0;\n display: flex;\n align-items: flex-start;\n justify-content: center;\n padding-top: 4px;\n font-size: 11px;\n font-weight: 700;\n color: var(--mj-text-inverse);\n}\n\n.v-bar-label[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 8px;\n text-align: center;\n}\n\n.chart-footnote[_ngcontent-%COMP%] {\n text-align: center;\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 14px;\n}\n\n\n\n.two-col[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 20px;\n}\n\n\n\n.source-selected[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 5%, var(--mj-bg-surface));\n}\n\n\n\n.quality-bands[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.quality-band-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.quality-band-label[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n width: 65px;\n text-align: right;\n flex-shrink: 0;\n}\n\n.quality-band-track[_ngcontent-%COMP%] {\n flex: 1;\n height: 18px;\n background: var(--mj-bg-surface-card);\n border-radius: 4px;\n overflow: hidden;\n}\n\n.quality-band-fill[_ngcontent-%COMP%] {\n height: 100%;\n border-radius: 4px;\n display: flex;\n align-items: center;\n padding-left: 8px;\n font-size: 10px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n min-width: 30px;\n}\n\n.source-quality-note[_ngcontent-%COMP%] {\n margin-top: 14px;\n padding: 10px;\n background: var(--mj-bg-surface-card);\n border-radius: 6px;\n font-size: 11px;\n color: var(--mj-text-secondary);\n}\n\n\n\n.source-health-grid[_ngcontent-%COMP%] {\n display: grid;\n gap: 12px;\n}\n\n.source-health-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 14px;\n text-align: center;\n border-top: 3px solid;\n}\n\n.health-card-name[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-bottom: 4px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.health-card-value[_ngcontent-%COMP%] {\n font-size: 22px;\n font-weight: 700;\n}\n\n.health-card-label[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-text-muted);\n}\n\n\n\n.pipeline-throughput-bars[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n gap: 3px;\n height: 110px;\n}\n\n.pipeline-bar[_ngcontent-%COMP%] {\n flex: 1;\n border-radius: 2px 2px 0 0;\n min-height: 3px;\n}\n\n.pipeline-date-labels[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n margin-top: 6px;\n font-size: 10px;\n color: var(--mj-text-muted);\n}\n\n\n\n.stage-bars[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.stage-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.stage-name[_ngcontent-%COMP%] {\n width: 80px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n text-align: right;\n flex-shrink: 0;\n}\n\n.stage-track[_ngcontent-%COMP%] {\n flex: 1;\n height: 24px;\n background: var(--mj-bg-surface-card);\n border-radius: 4px;\n overflow: hidden;\n}\n\n.stage-fill[_ngcontent-%COMP%] {\n height: 100%;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: flex-end;\n padding-right: 8px;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n}\n\n.stage-time[_ngcontent-%COMP%] {\n width: 50px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-primary);\n text-align: right;\n flex-shrink: 0;\n}\n\n.stage-summary[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n margin-top: 14px;\n padding-top: 10px;\n border-top: 1px solid var(--mj-border-default);\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.stage-warning[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n\n\n.success-rate-display[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n gap: 48px;\n padding: 20px;\n}\n\n.success-rate-stat[_ngcontent-%COMP%] {\n text-align: center;\n}\n\n.success-rate-value[_ngcontent-%COMP%] {\n font-size: 32px;\n font-weight: 700;\n line-height: 1.1;\n}\n\n.success-rate-label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n}\n\n\n\n.progress-track[_ngcontent-%COMP%] {\n width: 100px;\n height: 6px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 3px;\n overflow: hidden;\n display: inline-block;\n vertical-align: middle;\n margin-right: 6px;\n}\n\n.progress-fill[_ngcontent-%COMP%] {\n height: 100%;\n border-radius: 3px;\n}\n\n.progress-text[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n}\n\n\n\n.error-log[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.error-entry[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n padding: 10px 14px;\n background: color-mix(in srgb, var(--mj-status-error) 4%, var(--mj-bg-surface));\n border-left: 3px solid var(--mj-status-error);\n border-radius: 0 6px 6px 0;\n font-size: 12px;\n}\n\n.error-time[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 11px;\n white-space: nowrap;\n flex-shrink: 0;\n width: 130px;\n}\n\n.error-source[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-weight: 600;\n flex-shrink: 0;\n width: 120px;\n}\n\n.error-msg[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n}\n\n\n\n.histogram[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n gap: 6px;\n height: 130px;\n padding-bottom: 24px;\n}\n\n.hist-bar-col[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 100%;\n justify-content: flex-end;\n}\n\n.hist-bar[_ngcontent-%COMP%] {\n width: 100%;\n border-radius: 3px 3px 0 0;\n display: flex;\n align-items: flex-start;\n justify-content: center;\n padding-top: 3px;\n font-size: 10px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n min-height: 2px;\n}\n\n.hist-label[_ngcontent-%COMP%] {\n font-size: 9px;\n color: var(--mj-text-muted);\n margin-top: 6px;\n text-align: center;\n}\n\n.confidence-stats[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n margin-top: 8px;\n padding: 10px;\n background: var(--mj-bg-surface-card);\n border-radius: 6px;\n font-size: 11px;\n color: var(--mj-text-muted);\n flex-wrap: wrap;\n gap: 8px;\n}\n\n\n\n.grouped-bar-chart[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n gap: 20px;\n height: 140px;\n justify-content: center;\n}\n\n.grouped-col[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 100%;\n justify-content: flex-end;\n}\n\n.grouped-bars[_ngcontent-%COMP%] {\n display: flex;\n gap: 3px;\n align-items: flex-end;\n height: 100%;\n}\n\n.g-bar[_ngcontent-%COMP%] {\n width: 18px;\n border-radius: 3px 3px 0 0;\n min-height: 2px;\n}\n\n.grouped-label[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-text-muted);\n margin-top: 6px;\n text-align: center;\n}\n\n\n\n.accuracy-chart[_ngcontent-%COMP%] {\n position: relative;\n display: flex;\n margin: 0 10px;\n}\n\n.accuracy-y-labels[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n font-size: 9px;\n color: var(--mj-text-muted);\n margin-right: 8px;\n height: 110px;\n}\n\n.accuracy-area[_ngcontent-%COMP%] {\n flex: 1;\n position: relative;\n height: 110px;\n border-left: 1px solid var(--mj-border-default);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.accuracy-grid-line[_ngcontent-%COMP%] {\n position: absolute;\n left: 0;\n right: 0;\n border-top: 1px dashed var(--mj-border-subtle);\n}\n\n.accuracy-svg[_ngcontent-%COMP%] {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n\n.accuracy-x-labels[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n margin-top: 8px;\n padding: 0 40px 0 40px;\n font-size: 10px;\n color: var(--mj-text-muted);\n}\n\n.accuracy-trend-text[_ngcontent-%COMP%] {\n text-align: center;\n margin-top: 10px;\n font-size: 12px;\n color: var(--mj-status-success);\n}\n\n\n\n.model-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 12px;\n}\n\n.model-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n padding: 14px;\n text-align: center;\n border: 1px solid var(--mj-border-default);\n}\n\n.model-name[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 8px;\n}\n\n.model-score[_ngcontent-%COMP%] {\n font-size: 28px;\n font-weight: 700;\n line-height: 1;\n}\n\n.model-detail[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n}\n\n.model-recommendation[_ngcontent-%COMP%] {\n margin-top: 14px;\n padding: 12px 16px;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: flex-start;\n gap: 8px;\n}\n\n\n\n@media (max-width: 1200px) {\n .cards-grid[_ngcontent-%COMP%] {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .kpi-row[_ngcontent-%COMP%] {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .model-grid[_ngcontent-%COMP%] {\n grid-template-columns: repeat(2, 1fr);\n }\n}\n\n@media (max-width: 768px) {\n .analytics-layout[_ngcontent-%COMP%] {\n flex-direction: column;\n }\n\n .analytics-sidebar[_ngcontent-%COMP%] {\n width: 100%;\n min-width: 100%;\n border-right: none;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .sidebar-nav[_ngcontent-%COMP%] {\n flex-direction: row;\n overflow-x: auto;\n }\n\n .nav-item[_ngcontent-%COMP%] {\n border-left: none;\n border-bottom: 3px solid transparent;\n white-space: nowrap;\n }\n\n .nav-item.active[_ngcontent-%COMP%] {\n border-left-color: transparent;\n border-bottom-color: var(--mj-brand-primary);\n }\n\n .trending-section[_ngcontent-%COMP%], \n .sidebar-divider[_ngcontent-%COMP%] {\n display: none;\n }\n\n .tab-section[_ngcontent-%COMP%] {\n padding: 16px;\n }\n\n .cards-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .kpi-row[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .two-col[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .cost-kpi-row[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n}\n\n\n\n\n.tab-header-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n margin-left: auto;\n}\n\n.cost-kpi-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 16px;\n margin-bottom: 24px;\n}\n\n.cost-kpi-card[_ngcontent-%COMP%] {\n display: flex;\n gap: 14px;\n align-items: center;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n padding: 18px 20px;\n transition: box-shadow 0.15s ease;\n}\n\n.cost-kpi-card[_ngcontent-%COMP%]:hover {\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n}\n\n.cost-kpi-icon[_ngcontent-%COMP%] {\n width: 44px;\n height: 44px;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 18px;\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n flex-shrink: 0;\n}\n\n.cost-kpi-value[_ngcontent-%COMP%] {\n font-size: 22px;\n font-weight: 700;\n color: var(--mj-text-primary);\n line-height: 1.2;\n}\n\n.cost-kpi-label[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.03em;\n}\n\n.cost-kpi-sub[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n.empty-state-hint[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n}\n\n\n\n\n@media print {\n .analytics-sidebar[_ngcontent-%COMP%], \n .filter-bar[_ngcontent-%COMP%], \n .tab-header-actions[_ngcontent-%COMP%], \n .drill-down-close[_ngcontent-%COMP%], \n .drill-export-btn[_ngcontent-%COMP%], \n .drill-open-btn[_ngcontent-%COMP%] {\n display: none !important;\n }\n\n .analytics-layout[_ngcontent-%COMP%] {\n display: block;\n }\n\n .main-content[_ngcontent-%COMP%] {\n padding: 0;\n }\n\n .tab-section[_ngcontent-%COMP%] {\n padding: 0;\n }\n\n .widget-card[_ngcontent-%COMP%], \n .cost-kpi-card[_ngcontent-%COMP%], \n .kpi-card[_ngcontent-%COMP%] {\n break-inside: avoid;\n box-shadow: none;\n border: 1px solid var(--mj-border-default);\n }\n\n .data-table[_ngcontent-%COMP%] {\n font-size: 10px;\n }\n}\n\n\n\n\n\n\n\n.co-occurrence-section[_ngcontent-%COMP%] {\n max-height: 500px;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.co-occurrence-section[_ngcontent-%COMP%] .table-scroll[_ngcontent-%COMP%] {\n overflow-y: auto;\n max-height: 400px;\n flex: 1;\n min-height: 0;\n}\n\n.co-occurrence-section[_ngcontent-%COMP%] .empty-state[_ngcontent-%COMP%] {\n max-height: 200px;\n overflow: hidden;\n}\n\n.co-occurrence-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.co-occurrence-staleness[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 5px;\n font-size: 0.78rem;\n color: var(--mj-text-muted);\n}"] });
|
|
4252
4244
|
};
|
|
4253
4245
|
AnalyticsResourceComponent = AnalyticsResourceComponent_1 = __decorate([
|
|
4254
4246
|
RegisterClass(BaseResourceComponent, 'AnalyticsResource')
|
|
@@ -4256,9 +4248,9 @@ AnalyticsResourceComponent = AnalyticsResourceComponent_1 = __decorate([
|
|
|
4256
4248
|
export { AnalyticsResourceComponent };
|
|
4257
4249
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AnalyticsResourceComponent, [{
|
|
4258
4250
|
type: Component,
|
|
4259
|
-
args: [{ standalone: false, selector: 'app-analytics-resource', template: "<mj-page-layout>\n <mj-page-header\n Title=\"Knowledge Hub Analytics\"\n Icon=\"fa-solid fa-chart-line\"\n Subtitle=\"Pipeline health, trending tags, and content insights\">\n <div meta>\n <mj-stat-badge\n [Label]=\"PipelineStatusText\"\n [Variant]=\"PipelineStatusOk ? 'success' : 'error'\">\n </mj-stat-badge>\n </div>\n </mj-page-header>\n\n <mj-page-body [Flex]=\"true\" [Padding]=\"false\">\n@if (IsLoading) {\n <div class=\"analytics-loading\">\n <mj-loading text=\"Loading analytics data...\" size=\"medium\"></mj-loading>\n </div>\n} @else {\n <div class=\"analytics-layout\">\n <!-- =============== LEFT SIDEBAR =============== -->\n <aside class=\"analytics-sidebar\">\n <nav class=\"sidebar-nav\">\n @for (nav of NavItems; track nav.ID) {\n <button\n class=\"nav-item\"\n [class.active]=\"ActiveTab === nav.ID\"\n (click)=\"SelectTab(nav.ID)\"\n >\n <i [class]=\"nav.Icon\"></i> {{ nav.Label }}\n </button>\n }\n </nav>\n\n <div class=\"sidebar-divider\"></div>\n\n <!-- Trending Tags Cloud -->\n <div class=\"trending-section\">\n <h3><i class=\"fa-solid fa-arrow-trend-up\"></i> Trending Tags</h3>\n <div class=\"tag-cloud\">\n @for (tag of TrendingTags; track tag.Name) {\n <span [style.font-size.px]=\"tag.Size\" [style.font-weight]=\"tag.Weight\">{{ tag.Name }}</span>\n }\n @if (TrendingTags.length === 0) {\n <span class=\"no-trending\">No trending tags yet</span>\n }\n </div>\n </div>\n\n </aside>\n\n <!-- =============== MAIN CONTENT =============== -->\n <div class=\"main-content\">\n\n <!-- ====================================================== -->\n <!-- TAB 1: OVERVIEW -->\n <!-- ====================================================== -->\n @if (ActiveTab === 'overview') {\n <section class=\"tab-section\">\n <div class=\"tab-section-header\">\n <i class=\"fa-solid fa-grip\"></i>\n <h1>Overview</h1>\n </div>\n\n <!-- Filter Bar -->\n <div class=\"filter-bar\">\n <div class=\"date-chips\">\n @for (range of DateRanges; track range.Label) {\n <button\n class=\"date-chip\"\n [class.active]=\"ActiveDateRange === range.Label\"\n (click)=\"SetDateRange(range.Label)\"\n >{{ range.Label }}</button>\n }\n </div>\n <select class=\"filter-dropdown\" [ngModel]=\"EntityFilter\" (ngModelChange)=\"SetEntityFilter($event)\">\n @for (opt of EntityFilterOptions; track opt) {\n <option [value]=\"opt\">{{ opt }}</option>\n }\n </select>\n </div>\n\n <!-- KPI Cards -->\n <div class=\"kpi-row\">\n @for (kpi of KPIs; track kpi.Label) {\n <div class=\"kpi-card\" (click)=\"OpenDrillDown(kpi.DrillDownKey)\">\n <div>\n <div class=\"kpi-label\">{{ kpi.Label }}</div>\n <div class=\"kpi-value\">{{ kpi.Value }}</div>\n <div class=\"kpi-delta\" [class.up]=\"kpi.DeltaDirection === 'up'\" [class.down]=\"kpi.DeltaDirection === 'down'\">\n @if (kpi.DeltaDirection === 'up') {\n <i class=\"fa-solid fa-arrow-up\" style=\"font-size:9px\"></i>\n } @else if (kpi.DeltaDirection === 'down') {\n <i class=\"fa-solid fa-arrow-down\" style=\"font-size:9px\"></i>\n }\n {{ kpi.Delta }}\n </div>\n </div>\n <div class=\"kpi-sparkline\">\n <svg width=\"64\" height=\"28\" viewBox=\"0 0 64 28\">\n <polyline [attr.points]=\"kpi.SparklinePoints\" fill=\"none\" [attr.stroke]=\"kpi.SparklineColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n </div>\n }\n </div>\n\n <!-- KPI Drill-Down -->\n @if (DrillDownTarget && DrillDownTarget.startsWith('kpi-')) {\n <div class=\"drill-down-panel\">\n <div class=\"drill-down-header\">\n <span class=\"drill-down-title\"><i class=\"fa-solid fa-table\"></i> Detail View</span>\n <div class=\"drill-down-header-actions\">\n @if (DrillDownData.length > 0) {\n <button class=\"drill-export-btn\" (click)=\"ExportDrillDownCSV()\" title=\"Export CSV\">\n <i class=\"fa-solid fa-download\"></i> CSV\n </button>\n }\n <button class=\"drill-down-close\" aria-label=\"Close drill-down\" (click)=\"CloseDrillDown()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n </div>\n @if (IsDrillDownLoading) {\n <mj-loading text=\"Loading details...\" size=\"small\"></mj-loading>\n } @else if (DrillDownData.length > 0) {\n <div class=\"drill-down-table-wrap\">\n <table class=\"data-table\">\n <thead>\n <tr>\n @for (col of DrillDownColumns; track col) {\n <th>{{ col }}</th>\n }\n @if (DrillDownHasActions) {\n <th class=\"drill-action-col\"></th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of DrillDownData; track TrackByIndex($index)) {\n <tr>\n @for (col of DrillDownColumns; track col) {\n <td>{{ row[col] }}</td>\n }\n @if (DrillDownHasActions) {\n <td class=\"drill-action-col\">\n @if (row['_RecordID']) {\n <button class=\"drill-open-btn\" (click)=\"OpenDrillDownRecord(row)\" title=\"Open record\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i>\n </button>\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"drill-down-empty\">No data available</div>\n }\n </div>\n }\n\n <!-- Widget Cards Grid (2x3) -->\n <div class=\"cards-grid\">\n\n <!-- Card 1: Tag Growth -->\n <div class=\"widget-card\" (click)=\"OpenDrillDown('tagGrowth')\">\n <div class=\"widget-title\"><i class=\"fa-solid fa-chart-line\"></i> Tag Growth</div>\n <div class=\"bar-chart\">\n @for (bar of TagGrowthData; track bar.Label) {\n <div class=\"bar-col\">\n <div class=\"bar-value\">{{ bar.Count }}</div>\n <div class=\"bar\" [style.height.%]=\"bar.Percentage\" style=\"background:var(--mj-brand-primary)\" [style.opacity]=\"0.5 + (bar.Percentage / 200)\"></div>\n <div class=\"bar-label\">{{ bar.Label }}</div>\n </div>\n }\n </div>\n </div>\n\n <!-- Card 2: Content Coverage -->\n <div class=\"widget-card\" (click)=\"OpenDrillDown('contentCoverage')\">\n <div class=\"widget-title\"><i class=\"fa-solid fa-bullseye\"></i> Content Coverage</div>\n <div class=\"rings-grid\">\n @for (entity of CoverageData; track entity.Name) {\n <div class=\"ring-item\">\n <svg width=\"48\" height=\"48\" viewBox=\"0 0 48 48\">\n <circle cx=\"24\" cy=\"24\" r=\"20\" fill=\"none\" stroke=\"var(--mj-border-default)\" stroke-width=\"5\"/>\n <circle cx=\"24\" cy=\"24\" r=\"20\" fill=\"none\" [attr.stroke]=\"entity.Color\" stroke-width=\"5\"\n [attr.stroke-dasharray]=\"entity.StrokeDash\" stroke-dashoffset=\"31.4\" stroke-linecap=\"round\"\n transform=\"rotate(-90 24 24)\"/>\n <text x=\"24\" y=\"26\" text-anchor=\"middle\" font-size=\"11\" font-weight=\"700\" fill=\"var(--mj-text-primary)\">{{ entity.Percentage }}%</text>\n </svg>\n <div>\n <div class=\"ring-label\">{{ entity.Name }}</div>\n <div class=\"ring-stat\">{{ FormatNumber(entity.Tagged) }} / {{ FormatNumber(entity.Total) }}</div>\n </div>\n </div>\n }\n @if (CoverageData.length === 0) {\n <div class=\"widget-empty\">No content types found</div>\n }\n </div>\n </div>\n\n <!-- Card 3: Quality Score Gauge -->\n <div class=\"widget-card\" (click)=\"OpenDrillDown('qualityScore')\">\n <div class=\"widget-title\"><i class=\"fa-solid fa-gauge-high\"></i> Quality Score</div>\n <div class=\"gauge-container\">\n <svg width=\"180\" height=\"110\" viewBox=\"0 0 180 110\">\n <!-- Background arc -->\n <path d=\"M 20 95 A 70 70 0 0 1 160 95\" fill=\"none\" stroke=\"var(--mj-border-default)\" stroke-width=\"14\" stroke-linecap=\"round\"/>\n <!-- Zone arcs -->\n <path d=\"M 20 95 A 70 70 0 0 1 48.6 35.2\" fill=\"none\" stroke=\"var(--mj-status-error)\" stroke-width=\"14\" stroke-linecap=\"round\" opacity=\"0.3\"/>\n <path d=\"M 48.6 35.2 A 70 70 0 0 1 118 28\" fill=\"none\" stroke=\"var(--mj-status-warning)\" stroke-width=\"14\" opacity=\"0.3\"/>\n <path d=\"M 118 28 A 70 70 0 0 1 160 95\" fill=\"none\" stroke=\"var(--mj-status-success)\" stroke-width=\"14\" stroke-linecap=\"round\" opacity=\"0.3\"/>\n <!-- Score text -->\n <text x=\"90\" y=\"88\" text-anchor=\"middle\" font-size=\"26\" font-weight=\"800\" fill=\"var(--mj-text-primary)\">{{ QualityScore }}</text>\n <text x=\"90\" y=\"105\" text-anchor=\"middle\" font-size=\"10\" fill=\"var(--mj-text-muted)\">out of 100</text>\n <text x=\"28\" y=\"108\" font-size=\"8\" fill=\"var(--mj-text-muted)\">0</text>\n <text x=\"86\" y=\"18\" font-size=\"8\" fill=\"var(--mj-text-muted)\">50</text>\n <text x=\"155\" y=\"108\" font-size=\"8\" fill=\"var(--mj-text-muted)\">100</text>\n </svg>\n </div>\n <!-- Mini confidence histogram -->\n <div class=\"mini-histogram\">\n @for (bin of MiniConfidenceBins; track TrackByIndex($index)) {\n <div class=\"mini-hist-bar\" [style.height.px]=\"bin.Height\" [style.background]=\"bin.Color\" [title]=\"bin.Title\"></div>\n }\n </div>\n <div class=\"mini-hist-label\">Confidence Distribution</div>\n </div>\n\n <!-- Card 4: Source Performance -->\n <div class=\"widget-card\" (click)=\"OpenDrillDown('sourcePerformance')\">\n <div class=\"widget-title\"><i class=\"fa-solid fa-ranking-star\"></i> Source Performance</div>\n <div class=\"h-bar-list\">\n @for (source of SourcePerfData; track source.Name) {\n <div class=\"h-bar-row\">\n <div class=\"h-bar-name\">{{ source.Name }}</div>\n <div class=\"h-bar-track\">\n <div class=\"h-bar-fill\" [style.width.%]=\"source.Percentage\" [style.background]=\"source.Color\">{{ source.AvgTagsPerItem }}</div>\n </div>\n </div>\n }\n @if (SourcePerfData.length === 0) {\n <div class=\"widget-empty\">No source data</div>\n }\n </div>\n <div class=\"widget-footnote\">Average tags per item</div>\n </div>\n\n <!-- Card 5: Daily Throughput -->\n <div class=\"widget-card\" (click)=\"OpenDrillDown('dailyThroughput')\">\n <div class=\"widget-title\"><i class=\"fa-solid fa-bolt\"></i> Daily Throughput</div>\n <div class=\"throughput-bars\">\n @for (day of ThroughputData; track day.Label) {\n <div class=\"tp-bar\"\n [style.height.%]=\"day.Percentage\"\n [style.background]=\"day.IsError ? 'var(--mj-status-error)' : 'var(--mj-status-success)'\"\n >\n <span class=\"tp-bar-label\">{{ day.Label }}</span>\n </div>\n }\n </div>\n <div class=\"legend\">\n <div class=\"legend-item\"><div class=\"legend-dot\" style=\"background:var(--mj-status-success)\"></div> Success</div>\n <div class=\"legend-item\"><div class=\"legend-dot\" style=\"background:var(--mj-status-error)\"></div> Failures</div>\n </div>\n </div>\n\n <!-- Card 6: Taxonomy Health -->\n <div class=\"widget-card\" (click)=\"OpenDrillDown('taxonomyHealth')\">\n <div class=\"widget-title\"><i class=\"fa-solid fa-sitemap\"></i> Taxonomy Health</div>\n <div class=\"taxonomy-ring-container\">\n <svg width=\"140\" height=\"140\" viewBox=\"0 0 140 140\">\n <circle cx=\"70\" cy=\"70\" r=\"54\" fill=\"none\" stroke=\"var(--mj-border-default)\" stroke-width=\"18\"/>\n @for (seg of TaxonomyRingSegments; track TrackByIndex($index)) {\n <circle cx=\"70\" cy=\"70\" r=\"54\" fill=\"none\"\n [attr.stroke]=\"seg.Color\" stroke-width=\"18\"\n [attr.stroke-dasharray]=\"seg.StrokeDash\"\n [attr.stroke-dashoffset]=\"seg.StrokeOffset\"\n transform=\"rotate(-90 70 70)\"/>\n }\n <text x=\"70\" y=\"66\" text-anchor=\"middle\" font-size=\"22\" font-weight=\"800\" fill=\"var(--mj-text-primary)\">{{ TaxonomyTotal }}</text>\n <text x=\"70\" y=\"82\" text-anchor=\"middle\" font-size=\"10\" fill=\"var(--mj-text-muted)\">total tags</text>\n </svg>\n </div>\n <div class=\"taxonomy-stats\">\n @for (stat of TaxonomyStats; track stat.Label) {\n <div class=\"tax-stat\" [style.background]=\"stat.BgColor\" [style.color]=\"stat.Color\">\n {{ stat.Count }}<small>{{ stat.Label }}</small>\n </div>\n }\n </div>\n </div>\n\n </div><!-- /cards-grid -->\n\n <!-- Widget Drill-Down -->\n @if (DrillDownTarget && !DrillDownTarget.startsWith('kpi-')) {\n <div class=\"drill-down-panel\">\n <div class=\"drill-down-header\">\n <span class=\"drill-down-title\"><i class=\"fa-solid fa-table\"></i> {{ DrillDownTarget }} Detail</span>\n <button class=\"drill-down-close\" aria-label=\"Close drill-down\" (click)=\"CloseDrillDown()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n @if (IsDrillDownLoading) {\n <mj-loading text=\"Loading details...\" size=\"small\"></mj-loading>\n } @else if (DrillDownData.length > 0) {\n <div class=\"drill-down-table-wrap\">\n <table class=\"data-table\">\n <thead>\n <tr>\n @for (col of DrillDownColumns; track col) {\n <th>{{ col }}</th>\n }\n @if (DrillDownHasActions) {\n <th class=\"drill-action-col\"></th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of DrillDownData; track TrackByIndex($index)) {\n <tr>\n @for (col of DrillDownColumns; track col) {\n <td>{{ row[col] }}</td>\n }\n @if (DrillDownHasActions) {\n <td class=\"drill-action-col\">\n @if (row['_RecordID']) {\n <button class=\"drill-open-btn\" (click)=\"OpenDrillDownRecord(row)\" title=\"Open record\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i>\n </button>\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"drill-down-empty\">No data available</div>\n }\n </div>\n }\n </section>\n }\n\n <!-- ====================================================== -->\n <!-- TAB 2: TAGS -->\n <!-- ====================================================== -->\n @if (ActiveTab === 'tags') {\n <section class=\"tab-section\">\n <div class=\"tab-section-header\">\n <i class=\"fa-solid fa-tags\"></i>\n <h1>Tags</h1>\n </div>\n\n <!-- Top 20 Tags Table -->\n <div class=\"sub-section\" style=\"margin-top:0\">\n <div class=\"sub-section-header\">\n <h3><i class=\"fa-solid fa-trophy\"></i> Top 20 Tags</h3>\n @if (TopTags.length > 0) {\n <button class=\"drill-export-btn\" (click)=\"ExportTabDataCSV('top-tags')\" title=\"Export CSV\">\n <i class=\"fa-solid fa-download\"></i> CSV\n </button>\n }\n </div>\n @if (TopTags.length > 0) {\n <div class=\"table-scroll\">\n <table class=\"data-table\">\n <thead>\n <tr>\n <th>#</th>\n <th>Tag Name</th>\n <th class=\"num\">Usage Count</th>\n <th>Avg Weight</th>\n <th>Trend</th>\n <th>Top Entity</th>\n <th>First Seen</th>\n </tr>\n </thead>\n <tbody>\n @for (tag of TopTags; track tag.Name) {\n <tr style=\"cursor:pointer\" (click)=\"OpenDrillDown('tag-row:' + tag.Name)\">\n <td>{{ tag.Rank }}</td>\n <td><strong>{{ tag.Name }}</strong></td>\n <td class=\"num\">{{ FormatNumber(tag.UsageCount) }}</td>\n <td>\n <span class=\"weight-bar\" [style.width.px]=\"tag.WeightBarWidth\" [style.background]=\"tag.WeightBarColor\"></span>\n {{ tag.AvgWeight }}\n </td>\n <td>\n <svg width=\"48\" height=\"16\">\n <polyline [attr.points]=\"tag.TrendPoints\" fill=\"none\" [attr.stroke]=\"tag.TrendColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n </svg>\n </td>\n <td>{{ tag.TopEntity }}</td>\n <td class=\"muted\">{{ tag.FirstSeen }}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-tags\"></i>\n <p>No tag data available yet. Process content to generate tags.</p>\n </div>\n }\n </div>\n\n <!-- D10: Tags tab drill-down -->\n @if (DrillDownTarget && DrillDownTarget.startsWith('tag-row:')) {\n <div class=\"drill-down-panel\">\n <div class=\"drill-down-header\">\n <span class=\"drill-down-title\"><i class=\"fa-solid fa-table\"></i> Content Items Tagged \"{{ DrillDownTarget.replace('tag-row:', '') }}\"</span>\n <div class=\"drill-down-header-actions\">\n @if (DrillDownData.length > 0) {\n <button class=\"drill-export-btn\" (click)=\"ExportDrillDownCSV()\" title=\"Export CSV\">\n <i class=\"fa-solid fa-download\"></i> CSV\n </button>\n }\n <button class=\"drill-down-close\" aria-label=\"Close drill-down\" (click)=\"CloseDrillDown()\"><i class=\"fa-solid fa-times\"></i></button>\n </div>\n </div>\n @if (IsDrillDownLoading) {\n <mj-loading text=\"Loading details...\" size=\"small\"></mj-loading>\n } @else if (DrillDownData.length > 0) {\n <div class=\"drill-down-table-wrap\">\n <table class=\"data-table\">\n <thead><tr>\n @for (col of DrillDownColumns; track col) { <th>{{ col }}</th> }\n @if (DrillDownHasActions) { <th class=\"drill-action-col\"></th> }\n </tr></thead>\n <tbody>\n @for (row of DrillDownData; track TrackByIndex($index)) {\n <tr>\n @for (col of DrillDownColumns; track col) { <td>{{ row[col] }}</td> }\n @if (DrillDownHasActions) {\n <td class=\"drill-action-col\">\n @if (row['_RecordID']) {\n <button class=\"drill-open-btn\" aria-label=\"Open record\" (click)=\"OpenDrillDownRecord(row)\" title=\"Open record\"><i class=\"fa-solid fa-arrow-up-right-from-square\"></i></button>\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"drill-down-empty\">No items found for this tag</div>\n }\n </div>\n }\n\n <!-- Tag Distribution by Entity -->\n @if (EntityDistribution.length > 0) {\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-chart-bar\"></i> Tag Distribution by Entity</h3>\n <div class=\"stacked-bar-chart\">\n @for (row of EntityDistribution; track row.EntityName) {\n <div class=\"stacked-row\">\n <div class=\"stacked-label\">{{ row.EntityName }}</div>\n <div class=\"stacked-track\">\n @for (seg of row.Segments; track TrackByIndex($index)) {\n <div class=\"stacked-seg\" [style.width.%]=\"seg.Percentage\" [style.background]=\"seg.Color\" [title]=\"seg.Label + ': ' + seg.Percentage + '%'\">{{ seg.Label }}</div>\n }\n </div>\n </div>\n }\n </div>\n <div class=\"legend\" style=\"margin-top:12px\">\n @for (item of DistributionLegend; track item.Label) {\n <div class=\"legend-item\"><div class=\"legend-dot\" [style.background]=\"item.Color\"></div> {{ item.Label }}</div>\n }\n </div>\n </div>\n }\n\n <!-- Tag Depth Distribution -->\n @if (TagDepthBars.length > 0) {\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-layer-group\"></i> Tag Depth Distribution</h3>\n <div class=\"v-bar-chart\">\n @for (bar of TagDepthBars; track bar.Label) {\n <div class=\"v-bar-col\">\n <div class=\"v-bar\" [style.height.%]=\"bar.Percentage\" style=\"background:var(--mj-brand-primary)\" [style.min-height.px]=\"bar.Count > 0 ? 24 : 0\">{{ bar.Count }}</div>\n <div class=\"v-bar-label\">{{ bar.Label }}</div>\n </div>\n }\n </div>\n <div class=\"chart-footnote\">\n Taxonomy hierarchy depth -- Most tags at depth 2-3 indicating a healthy mid-level structure\n </div>\n </div>\n }\n\n <!-- Frequently Paired Tags (Co-Occurrence) -->\n <div class=\"sub-section co-occurrence-section\">\n <div class=\"sub-section-header\">\n <h3><i class=\"fa-solid fa-link\"></i> Frequently Paired Tags</h3>\n <div class=\"co-occurrence-actions\">\n @if (CoOccurrenceLastComputed) {\n <span class=\"co-occurrence-staleness\" title=\"Last computed timestamp\">\n <i class=\"fa-regular fa-clock\"></i>\n Last computed: {{ CoOccurrenceLastComputed }}\n </span>\n }\n <button class=\"drill-export-btn\" (click)=\"RecomputeCoOccurrence()\" [disabled]=\"IsRecomputingCoOccurrence\" title=\"Recompute co-occurrence data\">\n @if (IsRecomputingCoOccurrence) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Computing...\n } @else {\n <i class=\"fa-solid fa-arrows-rotate\"></i> Recompute\n }\n </button>\n </div>\n </div>\n @if (CoOccurrencePairs.length > 0) {\n <div class=\"table-scroll\">\n <table class=\"data-table\">\n <thead>\n <tr>\n <th>#</th>\n <th>Tag A</th>\n <th>Tag B</th>\n <th class=\"num\">Co-Occurrences</th>\n <th>Frequency</th>\n </tr>\n </thead>\n <tbody>\n @for (pair of CoOccurrencePairs; track pair.TagAName + pair.TagBName; let i = $index) {\n <tr>\n <td class=\"muted\">{{ i + 1 }}</td>\n <td><strong>{{ pair.TagAName }}</strong></td>\n <td><strong>{{ pair.TagBName }}</strong></td>\n <td class=\"num\">{{ FormatNumber(pair.Count) }}</td>\n <td>\n <span class=\"weight-bar\" [style.width.px]=\"pair.BarWidth\" style=\"background: var(--mj-status-info)\"></span>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-link\"></i>\n <p>No co-occurrence data available yet. Process content and recompute to see which tags frequently appear together.</p>\n </div>\n }\n </div>\n </section>\n }\n\n <!-- ====================================================== -->\n <!-- TAB 3: SOURCES -->\n <!-- ====================================================== -->\n @if (ActiveTab === 'sources') {\n <section class=\"tab-section\">\n <div class=\"tab-section-header\">\n <i class=\"fa-solid fa-database\"></i>\n <h1>Sources</h1>\n </div>\n\n <!-- Source Comparison Table -->\n <div class=\"sub-section\" style=\"margin-top:0\">\n <h3><i class=\"fa-solid fa-table\"></i> Source Comparison</h3>\n @if (SourceComparison.length > 0) {\n <div class=\"table-scroll\">\n <table class=\"data-table\">\n <thead>\n <tr>\n <th>Source Name</th>\n <th>Type</th>\n <th class=\"num\">Items</th>\n <th class=\"num\">Tags Generated</th>\n <th class=\"num\">Avg Tags/Item</th>\n <th class=\"num\">Avg Weight</th>\n <th>Last Run</th>\n <th>Status</th>\n </tr>\n </thead>\n <tbody>\n @for (source of SourceComparison; track source.Name) {\n <tr (click)=\"SelectSource(source.Name); OpenDrillDown('source-row:' + source.Name)\" style=\"cursor:pointer\" [class.source-selected]=\"SelectedSourceName === source.Name\">\n <td><strong>{{ source.Name }}</strong></td>\n <td><i [class]=\"source.TypeIcon\" [style.color]=\"source.TypeColor\" style=\"margin-right:4px\"></i> {{ source.Type }}</td>\n <td class=\"num\">{{ FormatNumber(source.Items) }}</td>\n <td class=\"num\">{{ FormatNumber(source.TagsGenerated) }}</td>\n <td class=\"num\">{{ source.AvgTagsPerItem }}</td>\n <td class=\"num\">{{ source.AvgWeight }}</td>\n <td class=\"muted\">{{ source.LastRun }}</td>\n <td><span class=\"badge\" [class]=\"source.StatusClass\"><i class=\"fa-solid fa-circle\" style=\"font-size:6px;margin-right:3px\"></i> {{ source.Status }}</span></td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-database\"></i>\n <p>No content sources configured yet.</p>\n </div>\n }\n </div>\n\n <!-- D10: Sources tab drill-down (recent runs) -->\n @if (DrillDownTarget && DrillDownTarget.startsWith('source-row:')) {\n <div class=\"drill-down-panel\">\n <div class=\"drill-down-header\">\n <span class=\"drill-down-title\"><i class=\"fa-solid fa-table\"></i> Recent Runs: {{ DrillDownTarget.replace('source-row:', '') }}</span>\n <div class=\"drill-down-header-actions\">\n @if (DrillDownData.length > 0) {\n <button class=\"drill-export-btn\" (click)=\"ExportDrillDownCSV()\" title=\"Export CSV\"><i class=\"fa-solid fa-download\"></i> CSV</button>\n }\n <button class=\"drill-down-close\" aria-label=\"Close drill-down\" (click)=\"CloseDrillDown()\"><i class=\"fa-solid fa-times\"></i></button>\n </div>\n </div>\n @if (IsDrillDownLoading) {\n <mj-loading text=\"Loading details...\" size=\"small\"></mj-loading>\n } @else if (DrillDownData.length > 0) {\n <div class=\"drill-down-table-wrap\">\n <table class=\"data-table\">\n <thead><tr>\n @for (col of DrillDownColumns; track col) { <th>{{ col }}</th> }\n @if (DrillDownHasActions) { <th class=\"drill-action-col\"></th> }\n </tr></thead>\n <tbody>\n @for (row of DrillDownData; track TrackByIndex($index)) {\n <tr>\n @for (col of DrillDownColumns; track col) { <td>{{ row[col] }}</td> }\n @if (DrillDownHasActions) {\n <td class=\"drill-action-col\">\n @if (row['_RecordID']) {\n <button class=\"drill-open-btn\" aria-label=\"Open record\" (click)=\"OpenDrillDownRecord(row)\" title=\"Open record\"><i class=\"fa-solid fa-arrow-up-right-from-square\"></i></button>\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"drill-down-empty\">No run data for this source</div>\n }\n </div>\n }\n\n <!-- Per-Source Detail -->\n @if (SelectedSourceName && SourceComparison.length > 0) {\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-chart-area\"></i> Source Detail: {{ SelectedSourceName }}</h3>\n <div class=\"two-col\">\n <!-- Items Processed Over Time -->\n <div class=\"widget-card\">\n <div class=\"widget-title\"><i class=\"fa-solid fa-chart-bar\"></i> Items Processed (Last 8 Weeks)</div>\n <div class=\"bar-chart\" style=\"height:100px\">\n @for (bar of SourceWeeklyBars; track bar.Label) {\n <div class=\"bar-col\">\n <div class=\"bar-value\" style=\"font-size:9px\">{{ bar.Value }}</div>\n <div class=\"bar\" [style.height.%]=\"bar.Percentage\" style=\"background:var(--mj-brand-primary)\" [style.opacity]=\"0.5 + (bar.Percentage / 200)\"></div>\n <div class=\"bar-label\">{{ bar.Label }}</div>\n </div>\n }\n </div>\n </div>\n\n <!-- Tag Quality Distribution -->\n <div class=\"widget-card\">\n <div class=\"widget-title\"><i class=\"fa-solid fa-star-half-stroke\"></i> Tag Quality Distribution</div>\n <div class=\"quality-bands\">\n @for (band of SourceQualityBands; track band.Label) {\n <div class=\"quality-band-row\">\n <span class=\"quality-band-label\">{{ band.Label }}</span>\n <div class=\"quality-band-track\">\n <div class=\"quality-band-fill\" [style.width.%]=\"band.Percentage\" [style.background]=\"band.Color\">{{ band.Percentage }}%</div>\n </div>\n </div>\n }\n </div>\n <div class=\"source-quality-note\">\n <i class=\"fa-solid fa-circle-info\" style=\"color:var(--mj-status-info);margin-right:4px\"></i>\n {{ SourceQualityNote }}\n </div>\n </div>\n </div>\n </div>\n }\n\n <!-- Source Health -->\n @if (SourceHealthCards.length > 0) {\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-heart-pulse\"></i> Source Health Summary</h3>\n <div class=\"source-health-grid\" [style.grid-template-columns]=\"'repeat(' + SourceHealthCards.length + ', 1fr)'\">\n @for (card of SourceHealthCards; track card.Name) {\n <div class=\"source-health-card\" [style.border-top-color]=\"card.Color\">\n <div class=\"health-card-name\">{{ card.Name }}</div>\n <div class=\"health-card-value\" [style.color]=\"card.Color\">{{ card.Uptime }}%</div>\n <div class=\"health-card-label\">uptime</div>\n </div>\n }\n </div>\n </div>\n }\n </section>\n }\n\n <!-- ====================================================== -->\n <!-- TAB 4: PIPELINE -->\n <!-- ====================================================== -->\n @if (ActiveTab === 'pipeline') {\n <section class=\"tab-section\">\n <div class=\"tab-section-header\">\n <i class=\"fa-solid fa-gears\"></i>\n <h1>Pipeline</h1>\n </div>\n\n <!-- Pipeline Throughput Chart -->\n <div class=\"sub-section\" style=\"margin-top:0\">\n <h3><i class=\"fa-solid fa-chart-bar\"></i> Pipeline Throughput (Last 30 Days)</h3>\n <div class=\"widget-card\">\n <div class=\"pipeline-throughput-bars\">\n @for (bar of PipelineThroughputBars; track TrackByIndex($index)) {\n <div class=\"pipeline-bar\"\n [style.height.%]=\"bar.Percentage\"\n [style.background]=\"bar.IsError ? 'var(--mj-status-error)' : 'var(--mj-brand-primary)'\"\n [style.opacity]=\"bar.IsError ? 0.7 : (0.6 + bar.Percentage / 300)\"\n style=\"cursor:pointer\"\n (click)=\"OpenDrillDown('pipeline-throughput:' + $index)\"\n ></div>\n }\n </div>\n <div class=\"pipeline-date-labels\">\n @for (label of PipelineDateLabels; track label) {\n <span>{{ label }}</span>\n }\n </div>\n </div>\n </div>\n\n <!-- D10: Pipeline throughput drill-down -->\n @if (DrillDownTarget && DrillDownTarget.startsWith('pipeline-throughput:')) {\n <div class=\"drill-down-panel\">\n <div class=\"drill-down-header\">\n <span class=\"drill-down-title\"><i class=\"fa-solid fa-table\"></i> Runs for Selected Day</span>\n <div class=\"drill-down-header-actions\">\n @if (DrillDownData.length > 0) {\n <button class=\"drill-export-btn\" (click)=\"ExportDrillDownCSV()\" title=\"Export CSV\"><i class=\"fa-solid fa-download\"></i> CSV</button>\n }\n <button class=\"drill-down-close\" aria-label=\"Close drill-down\" (click)=\"CloseDrillDown()\"><i class=\"fa-solid fa-times\"></i></button>\n </div>\n </div>\n @if (IsDrillDownLoading) {\n <mj-loading text=\"Loading details...\" size=\"small\"></mj-loading>\n } @else if (DrillDownData.length > 0) {\n <div class=\"drill-down-table-wrap\">\n <table class=\"data-table\">\n <thead><tr>\n @for (col of DrillDownColumns; track col) { <th>{{ col }}</th> }\n @if (DrillDownHasActions) { <th class=\"drill-action-col\"></th> }\n </tr></thead>\n <tbody>\n @for (row of DrillDownData; track TrackByIndex($index)) {\n <tr>\n @for (col of DrillDownColumns; track col) { <td>{{ row[col] }}</td> }\n @if (DrillDownHasActions) {\n <td class=\"drill-action-col\">\n @if (row['_RecordID']) {\n <button class=\"drill-open-btn\" aria-label=\"Open record\" (click)=\"OpenDrillDownRecord(row)\" title=\"Open record\"><i class=\"fa-solid fa-arrow-up-right-from-square\"></i></button>\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"drill-down-empty\">No runs for this day</div>\n }\n </div>\n }\n\n <!-- Processing Time Breakdown -->\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-stopwatch\"></i> Processing Time Breakdown (Avg per Item)</h3>\n <div class=\"widget-card\">\n <div class=\"stage-bars\">\n @for (stage of ProcessingStages; track stage.Name) {\n <div class=\"stage-row\">\n <div class=\"stage-name\">{{ stage.Name }}</div>\n <div class=\"stage-track\">\n <div class=\"stage-fill\" [style.width.%]=\"stage.Percentage\" [style.background]=\"stage.Color\">\n @if (stage.Percentage > 15) {\n {{ stage.Time }}s\n }\n </div>\n </div>\n <div class=\"stage-time\">{{ stage.Time }}s</div>\n </div>\n }\n </div>\n <div class=\"stage-summary\">\n <span><strong>Total avg:</strong> {{ TotalAvgProcessingTime }}s per item</span>\n @if (BottleneckStage) {\n <span class=\"stage-warning\">\n <i class=\"fa-solid fa-triangle-exclamation\" style=\"color:var(--mj-status-warning);margin-right:4px\"></i>\n {{ BottleneckStage }} stage is the bottleneck ({{ BottleneckPercent }}% of total time)\n </span>\n }\n </div>\n </div>\n </div>\n\n <!-- Success Rate -->\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-chart-line\"></i> Success Rate Overview</h3>\n <div class=\"widget-card\">\n <div class=\"success-rate-display\">\n <div class=\"success-rate-stat\">\n <div class=\"success-rate-value\" style=\"color:var(--mj-status-success)\">\n {{ rawProcessRuns.length > 0 ? (100 - (ErrorLog.length / rawProcessRuns.length * 100)).toFixed(1) : '100' }}%\n </div>\n <div class=\"success-rate-label\">Success Rate</div>\n </div>\n <div class=\"success-rate-stat\">\n <div class=\"success-rate-value\" style=\"color:var(--mj-status-error)\">\n {{ rawProcessRuns.length > 0 ? (ErrorLog.length / rawProcessRuns.length * 100).toFixed(1) : '0' }}%\n </div>\n <div class=\"success-rate-label\">Failure Rate</div>\n </div>\n <div class=\"success-rate-stat\">\n <div class=\"success-rate-value\" style=\"color:var(--mj-text-primary)\">\n {{ FormatNumber(rawProcessRuns.length) }}\n </div>\n <div class=\"success-rate-label\">Total Runs</div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Active Runs Table -->\n @if (ActiveRuns.length > 0) {\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-spinner\"></i> Active Runs</h3>\n <div class=\"table-scroll\">\n <table class=\"data-table\">\n <thead>\n <tr>\n <th>Run ID</th>\n <th>Source</th>\n <th>Started</th>\n <th>Progress</th>\n <th>Stage</th>\n <th class=\"num\">Items</th>\n </tr>\n </thead>\n <tbody>\n @for (run of ActiveRuns; track run.RunID) {\n <tr>\n <td class=\"monospace-cell\">{{ run.RunID }}</td>\n <td>{{ run.Source }}</td>\n <td class=\"muted\">{{ run.Started }}</td>\n <td>\n <div class=\"progress-track\"><div class=\"progress-fill\" [style.width.%]=\"run.Progress\" style=\"background:var(--mj-brand-primary)\"></div></div>\n <span class=\"progress-text\">{{ run.Progress }}%</span>\n </td>\n <td><span class=\"badge\" [class]=\"run.StageClass\">{{ run.Stage }}</span></td>\n <td class=\"num\">{{ FormatNumber(run.Items) }}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </div>\n }\n\n <!-- Error Log -->\n @if (ErrorLog.length > 0) {\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-triangle-exclamation\"></i> Recent Errors</h3>\n <div class=\"error-log\">\n @for (entry of ErrorLog; track TrackByIndex($index)) {\n <div class=\"error-entry\">\n <div class=\"error-time\">{{ entry.Time }}</div>\n <div class=\"error-source\">{{ entry.Source }}</div>\n <div class=\"error-msg\">{{ entry.Message }}</div>\n </div>\n }\n </div>\n </div>\n }\n </section>\n }\n\n <!-- ====================================================== -->\n <!-- TAB 5: QUALITY -->\n <!-- ====================================================== -->\n @if (ActiveTab === 'quality') {\n <section class=\"tab-section\">\n <div class=\"tab-section-header\">\n <i class=\"fa-solid fa-circle-check\"></i>\n <h1>Quality</h1>\n </div>\n\n <!-- Confidence Distribution Histogram -->\n <div class=\"sub-section\" style=\"margin-top:0\">\n <h3><i class=\"fa-solid fa-chart-column\"></i> Confidence Distribution</h3>\n <div class=\"widget-card\">\n <div class=\"histogram\">\n @for (bin of ConfidenceHistogram; track bin.Label) {\n <div class=\"hist-bar-col\" style=\"cursor:pointer\" (click)=\"OpenDrillDown('quality-bin:' + bin.Label)\">\n <div class=\"hist-bar\" [style.height.%]=\"bin.Percentage\" [style.background]=\"bin.Color\">\n @if (bin.Count > 0) { {{ bin.Count }} }\n </div>\n <div class=\"hist-label\">{{ bin.Label }}</div>\n </div>\n }\n </div>\n <div class=\"confidence-stats\">\n @for (stat of ConfidenceStats; track stat.Label) {\n <span><strong>{{ stat.Label }}:</strong> {{ stat.Value }}</span>\n }\n </div>\n </div>\n </div>\n\n <!-- D10: Quality bin drill-down -->\n @if (DrillDownTarget && DrillDownTarget.startsWith('quality-bin:')) {\n <div class=\"drill-down-panel\">\n <div class=\"drill-down-header\">\n <span class=\"drill-down-title\"><i class=\"fa-solid fa-table\"></i> Items in Confidence Range {{ DrillDownTarget.replace('quality-bin:', '') }}</span>\n <div class=\"drill-down-header-actions\">\n @if (DrillDownData.length > 0) {\n <button class=\"drill-export-btn\" (click)=\"ExportDrillDownCSV()\" title=\"Export CSV\"><i class=\"fa-solid fa-download\"></i> CSV</button>\n }\n <button class=\"drill-down-close\" aria-label=\"Close drill-down\" (click)=\"CloseDrillDown()\"><i class=\"fa-solid fa-times\"></i></button>\n </div>\n </div>\n @if (IsDrillDownLoading) {\n <mj-loading text=\"Loading details...\" size=\"small\"></mj-loading>\n } @else if (DrillDownData.length > 0) {\n <div class=\"drill-down-table-wrap\">\n <table class=\"data-table\">\n <thead><tr>\n @for (col of DrillDownColumns; track col) { <th>{{ col }}</th> }\n @if (DrillDownHasActions) { <th class=\"drill-action-col\"></th> }\n </tr></thead>\n <tbody>\n @for (row of DrillDownData; track TrackByIndex($index)) {\n <tr>\n @for (col of DrillDownColumns; track col) { <td>{{ row[col] }}</td> }\n @if (DrillDownHasActions) {\n <td class=\"drill-action-col\">\n @if (row['_RecordID']) {\n <button class=\"drill-open-btn\" aria-label=\"Open record\" (click)=\"OpenDrillDownRecord(row)\" title=\"Open record\"><i class=\"fa-solid fa-arrow-up-right-from-square\"></i></button>\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"drill-down-empty\">No items in this confidence range</div>\n }\n </div>\n }\n\n <!-- Weight Distribution by Entity -->\n @if (WeightByEntity.length > 0) {\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-weight-scale\"></i> Weight Distribution by Entity</h3>\n <div class=\"widget-card\">\n <div class=\"grouped-bar-chart\">\n @for (entity of WeightByEntity; track entity.Name) {\n <div class=\"grouped-col\">\n <div class=\"grouped-bars\">\n <div class=\"g-bar\" [style.height.%]=\"entity.High\" style=\"background:var(--mj-brand-primary)\" [title]=\"'High: ' + entity.High + '%'\"></div>\n <div class=\"g-bar\" [style.height.%]=\"entity.Med\" style=\"background:var(--mj-status-info)\" [title]=\"'Med: ' + entity.Med + '%'\"></div>\n <div class=\"g-bar\" [style.height.%]=\"entity.Low\" style=\"background:var(--mj-text-muted)\" [title]=\"'Low: ' + entity.Low + '%'\"></div>\n </div>\n <div class=\"grouped-label\">{{ entity.Name }}</div>\n </div>\n }\n </div>\n <div class=\"legend\" style=\"justify-content:center;margin-top:14px\">\n @for (item of WeightLegend; track item.Label) {\n <div class=\"legend-item\"><div class=\"legend-dot\" [style.background]=\"item.Color\"></div> {{ item.Label }}</div>\n }\n </div>\n </div>\n </div>\n }\n\n <!-- Tag Accuracy Over Time -->\n @if (AccuracyLinePoints) {\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-chart-line\"></i> Tag Accuracy Over Time (Weekly Avg Confidence)</h3>\n <div class=\"widget-card\">\n <div class=\"accuracy-chart\">\n <div class=\"accuracy-y-labels\">\n <div>1.0</div>\n <div>0.75</div>\n <div>0.50</div>\n <div>0.25</div>\n </div>\n <div class=\"accuracy-area\">\n <div class=\"accuracy-grid-line\" style=\"top:33%\"></div>\n <div class=\"accuracy-grid-line\" style=\"top:66%\"></div>\n <svg width=\"100%\" height=\"110\" viewBox=\"0 0 400 110\" preserveAspectRatio=\"none\" class=\"accuracy-svg\">\n <polyline [attr.points]=\"AccuracyLinePoints\"\n fill=\"none\" stroke=\"var(--mj-brand-primary)\" stroke-width=\"2.5\" vector-effect=\"non-scaling-stroke\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n @for (dot of AccuracyDots; track TrackByIndex($index)) {\n <circle [attr.cx]=\"dot.Cx\" [attr.cy]=\"dot.Cy\" r=\"3\" fill=\"var(--mj-brand-primary)\"/>\n }\n </svg>\n </div>\n </div>\n <div class=\"accuracy-x-labels\">\n @for (label of AccuracyMonthLabels; track label) {\n <span>{{ label }}</span>\n }\n </div>\n <div class=\"accuracy-trend-text\">\n <i class=\"fa-solid fa-arrow-trend-up\" style=\"margin-right:4px\"></i>\n {{ AccuracyTrendText }}\n </div>\n </div>\n </div>\n }\n\n <!-- Low-Confidence Tags Table -->\n @if (LowConfidenceTags.length > 0) {\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-exclamation-triangle\"></i> Low-Confidence Tags (Avg Weight < 0.4)</h3>\n <div class=\"table-scroll\">\n <table class=\"data-table\">\n <thead>\n <tr>\n <th>Tag Name</th>\n <th class=\"num\">Avg Weight</th>\n <th class=\"num\">Usage Count</th>\n <th>Top Entity</th>\n <th>Suggested Action</th>\n </tr>\n </thead>\n <tbody>\n @for (tag of LowConfidenceTags; track tag.Name) {\n <tr>\n <td><strong>{{ tag.Name }}</strong></td>\n <td class=\"num\">{{ tag.AvgWeight }}</td>\n <td class=\"num\">{{ tag.UsageCount }}</td>\n <td>{{ tag.TopEntity }}</td>\n <td><span class=\"badge\" [class]=\"tag.ActionClass\">{{ tag.SuggestedAction }}</span></td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </div>\n }\n\n <!-- Model Performance Comparison -->\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-robot\"></i> Model Performance Comparison</h3>\n <div class=\"model-grid\">\n @for (model of ModelComparisons; track model.Name) {\n <div class=\"model-card\">\n <div class=\"model-name\"><i [class]=\"model.Icon\" [style.color]=\"model.IconColor\" style=\"margin-right:4px\"></i> {{ model.Name }}</div>\n <svg width=\"80\" height=\"80\" viewBox=\"0 0 80 80\" style=\"margin:4px 0\">\n <circle cx=\"40\" cy=\"40\" r=\"32\" fill=\"none\" stroke=\"var(--mj-border-default)\" stroke-width=\"8\"/>\n <circle cx=\"40\" cy=\"40\" r=\"32\" fill=\"none\" [attr.stroke]=\"model.ScoreColor\" stroke-width=\"8\"\n [attr.stroke-dasharray]=\"model.StrokeDash\" stroke-dashoffset=\"50\"\n transform=\"rotate(-90 40 40)\" stroke-linecap=\"round\"/>\n </svg>\n <div class=\"model-score\" [style.color]=\"model.ScoreColor\">{{ model.ScorePercentage }}%</div>\n <div class=\"model-detail\">Avg confidence: {{ model.AvgConfidence }}</div>\n <div class=\"model-detail\">{{ FormatNumber(model.TagsGenerated) }} tags generated</div>\n <div class=\"model-detail\" [style.color]=\"model.RoleColor\" style=\"font-weight:600\">{{ model.Role }}</div>\n </div>\n }\n </div>\n @if (ModelRecommendation) {\n <div class=\"model-recommendation\">\n <i class=\"fa-solid fa-lightbulb\" style=\"color:var(--mj-status-warning)\"></i>\n <div>\n <strong>Recommendation:</strong> {{ ModelRecommendation }}\n </div>\n </div>\n }\n </div>\n </section>\n }\n\n <!-- ====================================================== -->\n <!-- TAB 6: COST & USAGE (D1) -->\n <!-- ====================================================== -->\n @if (ActiveTab === 'cost') {\n <section class=\"tab-section\">\n <div class=\"tab-section-header\">\n <i class=\"fa-solid fa-coins\"></i>\n <h1>Cost & Usage</h1>\n <div class=\"tab-header-actions\">\n <button class=\"drill-export-btn\" (click)=\"ExportTabDataCSV('cost-usage')\" title=\"Export CSV\">\n <i class=\"fa-solid fa-download\"></i> CSV\n </button>\n <button class=\"drill-export-btn\" (click)=\"PrintCurrentTab()\" title=\"Print (PDF alternative)\">\n <i class=\"fa-solid fa-print\"></i> Print\n </button>\n </div>\n </div>\n\n <!-- Filter Bar -->\n <div class=\"filter-bar\">\n <div class=\"date-chips\">\n @for (range of DateRanges; track range.Label) {\n <button\n class=\"date-chip\"\n [class.active]=\"ActiveDateRange === range.Label\"\n (click)=\"SetDateRange(range.Label)\"\n >{{ range.Label }}</button>\n }\n </div>\n </div>\n\n <!-- KPI Cards -->\n @if (CostKPIs.length > 0) {\n <div class=\"cost-kpi-row\">\n @for (kpi of CostKPIs; track kpi.Label) {\n <div class=\"cost-kpi-card\">\n <div class=\"cost-kpi-icon\"><i [class]=\"kpi.Icon\"></i></div>\n <div>\n <div class=\"cost-kpi-value\">{{ kpi.Value }}</div>\n <div class=\"cost-kpi-label\">{{ kpi.Label }}</div>\n <div class=\"cost-kpi-sub\">{{ kpi.SubLabel }}</div>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Per-Run Cost Table -->\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-table\"></i> Cost Breakdown by Run</h3>\n @if (CostPerRunRows.length > 0) {\n <div class=\"table-scroll\">\n <table class=\"data-table\">\n <thead>\n <tr>\n <th>Run ID</th>\n <th>Source</th>\n <th class=\"num\">Tokens</th>\n <th class=\"num\">Cost</th>\n <th>Started</th>\n </tr>\n </thead>\n <tbody>\n @for (row of CostPerRunRows; track row.RunID) {\n <tr>\n <td class=\"monospace-cell\">{{ row.RunID }}</td>\n <td>{{ row.Source }}</td>\n <td class=\"num\">{{ FormatNumber(row.Tokens) }}</td>\n <td class=\"num\">{{ row.Cost > 0 ? '$' + row.Cost.toFixed(4) : '$0.00' }}</td>\n <td class=\"muted\">{{ row.Started }}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-coins\"></i>\n <p>No cost data available yet. Run the pipeline to generate cost and token usage metrics.</p>\n <p class=\"empty-state-hint\">Cost data is aggregated from ContentProcessRunDetail records linked to AI Prompt Runs.</p>\n </div>\n }\n </div>\n </section>\n }\n\n </div><!-- /main-content -->\n </div><!-- /analytics-layout -->\n}\n </mj-page-body>\n</mj-page-layout>\n", styles: ["/* ===================================================================\n Analytics & Insights Resource Component\n ================================================================= */\n\n.analytics-loading {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 400px;\n}\n\n.analytics-layout {\n display: flex;\n flex: 1;\n min-height: 0;\n}\n\n/* ===== LEFT SIDEBAR ===== */\n.analytics-sidebar {\n width: 220px;\n min-width: 220px;\n background: var(--mj-bg-surface);\n border-right: 1px solid var(--mj-border-default);\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n}\n\n.sidebar-header {\n padding: 20px 16px 12px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.sidebar-header h2 {\n font-size: 13px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 0;\n}\n\n.sidebar-header h2 i {\n font-size: 14px;\n color: var(--mj-brand-primary);\n}\n\n.sidebar-nav {\n padding: 8px 0;\n flex: 1;\n display: flex;\n flex-direction: column;\n}\n\n.nav-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 16px;\n font-size: 13.5px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n border: none;\n background: transparent;\n border-left: 3px solid transparent;\n transition: all 0.15s ease;\n text-align: left;\n width: 100%;\n font-family: inherit;\n}\n\n.nav-item:hover {\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-primary);\n}\n\n.nav-item.active {\n border-left-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n font-weight: 600;\n}\n\n.nav-item i {\n width: 16px;\n text-align: center;\n font-size: 13px;\n}\n\n.sidebar-divider {\n height: 1px;\n background: var(--mj-border-default);\n margin: 8px 16px;\n}\n\n.trending-section {\n padding: 12px 16px 16px;\n}\n\n.trending-section h3 {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--mj-text-muted);\n margin: 0 0 10px;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.tag-cloud {\n display: flex;\n flex-wrap: wrap;\n gap: 4px 6px;\n line-height: 1.7;\n}\n\n.tag-cloud span {\n color: var(--mj-brand-primary);\n cursor: pointer;\n transition: opacity 0.15s;\n}\n\n.tag-cloud span:hover {\n opacity: 0.7;\n}\n\n.no-trending {\n color: var(--mj-text-muted) !important;\n font-size: 12px !important;\n font-style: italic;\n}\n\n.pipeline-status {\n padding: 12px 16px;\n border-top: 1px solid var(--mj-border-default);\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 11.5px;\n color: var(--mj-text-muted);\n}\n\n.status-dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: var(--mj-status-success);\n flex-shrink: 0;\n}\n\n.status-dot-error {\n background: var(--mj-status-error);\n}\n\n/* ===== MAIN CONTENT ===== */\n.main-content {\n flex: 1;\n overflow-y: auto;\n min-width: 0;\n}\n\n.tab-section {\n padding: 28px 32px 40px;\n}\n\n.tab-section-header {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-bottom: 20px;\n padding-bottom: 12px;\n border-bottom: 2px solid var(--mj-brand-primary);\n}\n\n.tab-section-header i {\n font-size: 18px;\n color: var(--mj-brand-primary);\n}\n\n.tab-section-header h1 {\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0;\n}\n\n/* ===== FILTER BAR ===== */\n.filter-bar {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 20px;\n flex-wrap: wrap;\n}\n\n.date-chips {\n display: flex;\n gap: 0;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.date-chip {\n padding: 6px 14px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface);\n cursor: pointer;\n border: none;\n border-right: 1px solid var(--mj-border-default);\n transition: all 0.15s;\n font-family: inherit;\n}\n\n.date-chip:last-child {\n border-right: none;\n}\n\n.date-chip:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.date-chip.active {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.filter-dropdown {\n padding: 6px 12px;\n font-size: 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n font-family: inherit;\n}\n\n/* ===== KPI CARDS ===== */\n.kpi-row {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 16px;\n margin-bottom: 20px;\n}\n\n.kpi-card {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 16px 18px;\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n transition: transform 0.15s, box-shadow 0.15s;\n cursor: pointer;\n}\n\n.kpi-card:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n}\n\n.kpi-label {\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-muted);\n margin-bottom: 4px;\n}\n\n.kpi-value {\n font-size: 28px;\n font-weight: 700;\n color: var(--mj-text-primary);\n line-height: 1.1;\n}\n\n.kpi-delta {\n font-size: 11px;\n font-weight: 500;\n margin-top: 4px;\n color: var(--mj-text-muted);\n}\n\n.kpi-delta.up {\n color: var(--mj-status-success);\n}\n\n.kpi-delta.down {\n color: var(--mj-status-error);\n}\n\n.kpi-sparkline {\n flex-shrink: 0;\n margin-left: 12px;\n margin-top: 6px;\n}\n\n/* ===== CARDS GRID ===== */\n.cards-grid {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 16px;\n}\n\n.widget-card {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 18px 20px;\n transition: transform 0.15s, box-shadow 0.15s;\n cursor: pointer;\n}\n\n.widget-card:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n}\n\n.widget-title {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 14px;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.widget-title i {\n color: var(--mj-brand-primary);\n font-size: 12px;\n}\n\n.widget-empty {\n text-align: center;\n color: var(--mj-text-muted);\n font-size: 12px;\n padding: 20px;\n}\n\n.widget-footnote {\n text-align: center;\n font-size: 10px;\n color: var(--mj-text-muted);\n margin-top: 10px;\n}\n\n/* ===== BAR CHART ===== */\n.bar-chart {\n display: flex;\n align-items: flex-end;\n gap: 8px;\n height: 120px;\n padding-top: 10px;\n}\n\n.bar-col {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 100%;\n justify-content: flex-end;\n}\n\n.bar {\n width: 100%;\n border-radius: 4px 4px 0 0;\n transition: height 0.3s;\n min-height: 2px;\n}\n\n.bar-label {\n font-size: 10px;\n color: var(--mj-text-muted);\n margin-top: 6px;\n}\n\n.bar-value {\n font-size: 10px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 4px;\n}\n\n/* ===== PROGRESS RINGS ===== */\n.rings-grid {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 12px;\n}\n\n.ring-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 6px 0;\n}\n\n.ring-label {\n font-size: 12px;\n color: var(--mj-text-primary);\n font-weight: 500;\n}\n\n.ring-stat {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n/* ===== GAUGE ===== */\n.gauge-container {\n display: flex;\n justify-content: center;\n margin-bottom: 8px;\n}\n\n/* ===== MINI HISTOGRAM ===== */\n.mini-histogram {\n display: flex;\n align-items: flex-end;\n gap: 3px;\n height: 32px;\n justify-content: center;\n}\n\n.mini-hist-bar {\n width: 14px;\n border-radius: 2px;\n}\n\n.mini-hist-label {\n text-align: center;\n font-size: 10px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n}\n\n/* ===== HORIZONTAL BARS ===== */\n.h-bar-list {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.h-bar-row {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.h-bar-name {\n font-size: 12px;\n color: var(--mj-text-secondary);\n width: 100px;\n flex-shrink: 0;\n text-align: right;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.h-bar-track {\n flex: 1;\n height: 20px;\n background: var(--mj-bg-surface-card);\n border-radius: 4px;\n overflow: hidden;\n}\n\n.h-bar-fill {\n height: 100%;\n border-radius: 4px;\n display: flex;\n align-items: center;\n padding-left: 8px;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n min-width: 36px;\n}\n\n/* ===== THROUGHPUT BARS ===== */\n.throughput-bars {\n display: flex;\n align-items: flex-end;\n gap: 4px;\n height: 110px;\n margin-bottom: 22px;\n}\n\n.tp-bar {\n flex: 1;\n border-radius: 3px 3px 0 0;\n position: relative;\n min-height: 4px;\n}\n\n.tp-bar-label {\n position: absolute;\n bottom: -18px;\n left: 50%;\n transform: translateX(-50%);\n font-size: 8px;\n color: var(--mj-text-muted);\n white-space: nowrap;\n}\n\n/* ===== TAXONOMY ===== */\n.taxonomy-ring-container {\n display: flex;\n justify-content: center;\n}\n\n.taxonomy-stats {\n display: flex;\n gap: 8px;\n margin-top: 12px;\n}\n\n.tax-stat {\n flex: 1;\n text-align: center;\n padding: 8px 4px;\n border-radius: 6px;\n font-size: 20px;\n font-weight: 700;\n}\n\n.tax-stat small {\n display: block;\n font-size: 10px;\n font-weight: 500;\n margin-top: 2px;\n}\n\n/* ===== LEGEND ===== */\n.legend {\n display: flex;\n gap: 16px;\n margin-top: 10px;\n flex-wrap: wrap;\n justify-content: center;\n}\n\n.legend-item {\n display: flex;\n align-items: center;\n gap: 5px;\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n.legend-dot {\n width: 10px;\n height: 10px;\n border-radius: 3px;\n flex-shrink: 0;\n}\n\n/* ===== DATA TABLES ===== */\n.table-scroll {\n overflow-x: auto;\n}\n\n.data-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 12.5px;\n}\n\n.data-table thead th {\n text-align: left;\n padding: 10px 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-text-muted);\n border-bottom: 2px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n white-space: nowrap;\n}\n\n.data-table tbody td {\n padding: 10px 12px;\n border-bottom: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-primary);\n vertical-align: middle;\n}\n\n.data-table tbody tr:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.data-table .num {\n text-align: right;\n font-variant-numeric: tabular-nums;\n}\n\n.muted {\n color: var(--mj-text-muted);\n}\n\n.monospace-cell {\n font-family: monospace;\n font-size: 11px;\n color: var(--mj-brand-primary);\n}\n\n.weight-bar {\n display: inline-block;\n height: 6px;\n border-radius: 3px;\n vertical-align: middle;\n margin-right: 6px;\n}\n\n/* ===== BADGES ===== */\n.badge {\n display: inline-block;\n padding: 2px 8px;\n border-radius: 10px;\n font-size: 10.5px;\n font-weight: 600;\n}\n\n.badge-success {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.badge-warning {\n background: color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.badge-error {\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.badge-info {\n background: color-mix(in srgb, var(--mj-status-info) 12%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n}\n\n/* ===== SUB-SECTIONS ===== */\n.sub-section {\n margin-top: 24px;\n}\n\n.sub-section h3 {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 12px;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.sub-section h3 i {\n font-size: 13px;\n color: var(--mj-brand-primary);\n}\n\n/* ===== EMPTY STATE ===== */\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 3rem 2rem;\n text-align: center;\n gap: 0.75rem;\n border: 2px dashed var(--mj-border-default);\n border-radius: 12px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n}\n\n.empty-state i {\n font-size: 2.5rem;\n color: var(--mj-text-disabled);\n}\n\n.empty-state p {\n margin: 0;\n font-size: 0.85rem;\n max-width: 400px;\n}\n\n/* ===== DRILL-DOWN PANEL ===== */\n.drill-down-panel {\n margin-top: 16px;\n margin-bottom: 16px;\n background: var(--mj-bg-surface);\n border: 2px solid var(--mj-brand-primary);\n border-radius: 10px;\n overflow: hidden;\n animation: slideDown 0.2s ease-out;\n}\n\n@keyframes slideDown {\n from {\n opacity: 0;\n max-height: 0;\n }\n to {\n opacity: 1;\n max-height: 600px;\n }\n}\n\n.drill-down-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 16px;\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.drill-down-title {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-brand-primary);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.drill-down-close {\n border: none;\n background: transparent;\n color: var(--mj-text-muted);\n cursor: pointer;\n font-size: 14px;\n padding: 4px 8px;\n border-radius: 4px;\n transition: all 0.15s;\n}\n\n.drill-down-close:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.drill-down-table-wrap {\n max-height: 400px;\n overflow-y: auto;\n padding: 8px;\n}\n\n.drill-action-col {\n width: 40px;\n text-align: center;\n padding: 6px !important;\n}\n\n.drill-open-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n border: 1px solid var(--mj-border-default);\n border-radius: 5px;\n background: transparent;\n color: var(--mj-text-muted);\n font-size: 10px;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.drill-open-btn:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.drill-down-header-actions {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.drill-export-btn {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 5px;\n background: transparent;\n color: var(--mj-text-secondary);\n font-size: 11px;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.drill-export-btn:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.sub-section-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 0;\n}\n\n.sub-section-header h3 {\n margin: 0;\n}\n\n.drill-down-empty {\n padding: 24px;\n text-align: center;\n color: var(--mj-text-muted);\n font-size: 13px;\n}\n\n/* ===== STACKED BAR CHART ===== */\n.stacked-bar-chart {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.stacked-row {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.stacked-label {\n width: 90px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n text-align: right;\n flex-shrink: 0;\n}\n\n.stacked-track {\n flex: 1;\n height: 22px;\n display: flex;\n border-radius: 4px;\n overflow: hidden;\n}\n\n.stacked-seg {\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 9px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n min-width: 20px;\n}\n\n/* ===== VERTICAL BAR CHART ===== */\n.v-bar-chart {\n display: flex;\n align-items: flex-end;\n gap: 24px;\n height: 140px;\n padding-top: 10px;\n justify-content: center;\n}\n\n.v-bar-col {\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 100%;\n justify-content: flex-end;\n min-width: 60px;\n}\n\n.v-bar {\n width: 48px;\n border-radius: 4px 4px 0 0;\n display: flex;\n align-items: flex-start;\n justify-content: center;\n padding-top: 4px;\n font-size: 11px;\n font-weight: 700;\n color: var(--mj-text-inverse);\n}\n\n.v-bar-label {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 8px;\n text-align: center;\n}\n\n.chart-footnote {\n text-align: center;\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 14px;\n}\n\n/* ===== TWO COLUMN ===== */\n.two-col {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 20px;\n}\n\n/* ===== SOURCE SELECTED ===== */\n.source-selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 5%, var(--mj-bg-surface));\n}\n\n/* ===== QUALITY BANDS ===== */\n.quality-bands {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.quality-band-row {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.quality-band-label {\n font-size: 11px;\n color: var(--mj-text-muted);\n width: 65px;\n text-align: right;\n flex-shrink: 0;\n}\n\n.quality-band-track {\n flex: 1;\n height: 18px;\n background: var(--mj-bg-surface-card);\n border-radius: 4px;\n overflow: hidden;\n}\n\n.quality-band-fill {\n height: 100%;\n border-radius: 4px;\n display: flex;\n align-items: center;\n padding-left: 8px;\n font-size: 10px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n min-width: 30px;\n}\n\n.source-quality-note {\n margin-top: 14px;\n padding: 10px;\n background: var(--mj-bg-surface-card);\n border-radius: 6px;\n font-size: 11px;\n color: var(--mj-text-secondary);\n}\n\n/* ===== SOURCE HEALTH ===== */\n.source-health-grid {\n display: grid;\n gap: 12px;\n}\n\n.source-health-card {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 14px;\n text-align: center;\n border-top: 3px solid;\n}\n\n.health-card-name {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-bottom: 4px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.health-card-value {\n font-size: 22px;\n font-weight: 700;\n}\n\n.health-card-label {\n font-size: 10px;\n color: var(--mj-text-muted);\n}\n\n/* ===== PIPELINE ===== */\n.pipeline-throughput-bars {\n display: flex;\n align-items: flex-end;\n gap: 3px;\n height: 110px;\n}\n\n.pipeline-bar {\n flex: 1;\n border-radius: 2px 2px 0 0;\n min-height: 3px;\n}\n\n.pipeline-date-labels {\n display: flex;\n justify-content: space-between;\n margin-top: 6px;\n font-size: 10px;\n color: var(--mj-text-muted);\n}\n\n/* ===== PROCESSING STAGES ===== */\n.stage-bars {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.stage-row {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.stage-name {\n width: 80px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n text-align: right;\n flex-shrink: 0;\n}\n\n.stage-track {\n flex: 1;\n height: 24px;\n background: var(--mj-bg-surface-card);\n border-radius: 4px;\n overflow: hidden;\n}\n\n.stage-fill {\n height: 100%;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: flex-end;\n padding-right: 8px;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n}\n\n.stage-time {\n width: 50px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-primary);\n text-align: right;\n flex-shrink: 0;\n}\n\n.stage-summary {\n display: flex;\n justify-content: space-between;\n margin-top: 14px;\n padding-top: 10px;\n border-top: 1px solid var(--mj-border-default);\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.stage-warning {\n color: var(--mj-text-muted);\n}\n\n/* ===== SUCCESS RATE ===== */\n.success-rate-display {\n display: flex;\n justify-content: center;\n gap: 48px;\n padding: 20px;\n}\n\n.success-rate-stat {\n text-align: center;\n}\n\n.success-rate-value {\n font-size: 32px;\n font-weight: 700;\n line-height: 1.1;\n}\n\n.success-rate-label {\n font-size: 12px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n}\n\n/* ===== PROGRESS ===== */\n.progress-track {\n width: 100px;\n height: 6px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 3px;\n overflow: hidden;\n display: inline-block;\n vertical-align: middle;\n margin-right: 6px;\n}\n\n.progress-fill {\n height: 100%;\n border-radius: 3px;\n}\n\n.progress-text {\n font-size: 11px;\n font-weight: 600;\n}\n\n/* ===== ERROR LOG ===== */\n.error-log {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.error-entry {\n display: flex;\n gap: 12px;\n padding: 10px 14px;\n background: color-mix(in srgb, var(--mj-status-error) 4%, var(--mj-bg-surface));\n border-left: 3px solid var(--mj-status-error);\n border-radius: 0 6px 6px 0;\n font-size: 12px;\n}\n\n.error-time {\n color: var(--mj-text-muted);\n font-size: 11px;\n white-space: nowrap;\n flex-shrink: 0;\n width: 130px;\n}\n\n.error-source {\n color: var(--mj-brand-primary);\n font-weight: 600;\n flex-shrink: 0;\n width: 120px;\n}\n\n.error-msg {\n color: var(--mj-text-secondary);\n}\n\n/* ===== HISTOGRAM ===== */\n.histogram {\n display: flex;\n align-items: flex-end;\n gap: 6px;\n height: 130px;\n padding-bottom: 24px;\n}\n\n.hist-bar-col {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 100%;\n justify-content: flex-end;\n}\n\n.hist-bar {\n width: 100%;\n border-radius: 3px 3px 0 0;\n display: flex;\n align-items: flex-start;\n justify-content: center;\n padding-top: 3px;\n font-size: 10px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n min-height: 2px;\n}\n\n.hist-label {\n font-size: 9px;\n color: var(--mj-text-muted);\n margin-top: 6px;\n text-align: center;\n}\n\n.confidence-stats {\n display: flex;\n justify-content: space-between;\n margin-top: 8px;\n padding: 10px;\n background: var(--mj-bg-surface-card);\n border-radius: 6px;\n font-size: 11px;\n color: var(--mj-text-muted);\n flex-wrap: wrap;\n gap: 8px;\n}\n\n/* ===== GROUPED BAR CHART ===== */\n.grouped-bar-chart {\n display: flex;\n align-items: flex-end;\n gap: 20px;\n height: 140px;\n justify-content: center;\n}\n\n.grouped-col {\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 100%;\n justify-content: flex-end;\n}\n\n.grouped-bars {\n display: flex;\n gap: 3px;\n align-items: flex-end;\n height: 100%;\n}\n\n.g-bar {\n width: 18px;\n border-radius: 3px 3px 0 0;\n min-height: 2px;\n}\n\n.grouped-label {\n font-size: 10px;\n color: var(--mj-text-muted);\n margin-top: 6px;\n text-align: center;\n}\n\n/* ===== ACCURACY CHART ===== */\n.accuracy-chart {\n position: relative;\n display: flex;\n margin: 0 10px;\n}\n\n.accuracy-y-labels {\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n font-size: 9px;\n color: var(--mj-text-muted);\n margin-right: 8px;\n height: 110px;\n}\n\n.accuracy-area {\n flex: 1;\n position: relative;\n height: 110px;\n border-left: 1px solid var(--mj-border-default);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.accuracy-grid-line {\n position: absolute;\n left: 0;\n right: 0;\n border-top: 1px dashed var(--mj-border-subtle);\n}\n\n.accuracy-svg {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n\n.accuracy-x-labels {\n display: flex;\n justify-content: space-between;\n margin-top: 8px;\n padding: 0 40px 0 40px;\n font-size: 10px;\n color: var(--mj-text-muted);\n}\n\n.accuracy-trend-text {\n text-align: center;\n margin-top: 10px;\n font-size: 12px;\n color: var(--mj-status-success);\n}\n\n/* ===== MODEL COMPARISON ===== */\n.model-grid {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 12px;\n}\n\n.model-card {\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n padding: 14px;\n text-align: center;\n border: 1px solid var(--mj-border-default);\n}\n\n.model-name {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 8px;\n}\n\n.model-score {\n font-size: 28px;\n font-weight: 700;\n line-height: 1;\n}\n\n.model-detail {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n}\n\n.model-recommendation {\n margin-top: 14px;\n padding: 12px 16px;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: flex-start;\n gap: 8px;\n}\n\n/* ===== RESPONSIVE ===== */\n@media (max-width: 1200px) {\n .cards-grid {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .kpi-row {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .model-grid {\n grid-template-columns: repeat(2, 1fr);\n }\n}\n\n@media (max-width: 768px) {\n .analytics-layout {\n flex-direction: column;\n }\n\n .analytics-sidebar {\n width: 100%;\n min-width: 100%;\n border-right: none;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .sidebar-nav {\n flex-direction: row;\n overflow-x: auto;\n }\n\n .nav-item {\n border-left: none;\n border-bottom: 3px solid transparent;\n white-space: nowrap;\n }\n\n .nav-item.active {\n border-left-color: transparent;\n border-bottom-color: var(--mj-brand-primary);\n }\n\n .trending-section,\n .sidebar-divider {\n display: none;\n }\n\n .tab-section {\n padding: 16px;\n }\n\n .cards-grid {\n grid-template-columns: 1fr;\n }\n\n .kpi-row {\n grid-template-columns: 1fr;\n }\n\n .two-col {\n grid-template-columns: 1fr;\n }\n\n .cost-kpi-row {\n grid-template-columns: 1fr;\n }\n}\n\n/* ===== COST & USAGE TAB (D1) ===== */\n\n.tab-header-actions {\n display: flex;\n gap: 8px;\n margin-left: auto;\n}\n\n.cost-kpi-row {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 16px;\n margin-bottom: 24px;\n}\n\n.cost-kpi-card {\n display: flex;\n gap: 14px;\n align-items: center;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n padding: 18px 20px;\n transition: box-shadow 0.15s ease;\n}\n\n.cost-kpi-card:hover {\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n}\n\n.cost-kpi-icon {\n width: 44px;\n height: 44px;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 18px;\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n flex-shrink: 0;\n}\n\n.cost-kpi-value {\n font-size: 22px;\n font-weight: 700;\n color: var(--mj-text-primary);\n line-height: 1.2;\n}\n\n.cost-kpi-label {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.03em;\n}\n\n.cost-kpi-sub {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n.empty-state-hint {\n font-size: 12px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n}\n\n/* ===== D5: PRINT STYLES ===== */\n\n@media print {\n .analytics-sidebar,\n .filter-bar,\n .tab-header-actions,\n .drill-down-close,\n .drill-export-btn,\n .drill-open-btn {\n display: none !important;\n }\n\n .analytics-layout {\n display: block;\n }\n\n .main-content {\n padding: 0;\n }\n\n .tab-section {\n padding: 0;\n }\n\n .widget-card,\n .cost-kpi-card,\n .kpi-card {\n break-inside: avoid;\n box-shadow: none;\n border: 1px solid var(--mj-border-default);\n }\n\n .data-table {\n font-size: 10px;\n }\n}\n\n/* \u2500\u2500 Co-Occurrence Section \u2500\u2500 */\n\n/* Constrain the co-occurrence sub-section so an empty state or large table\n does not blow out the page height and render the app unusable. */\n.co-occurrence-section {\n max-height: 500px;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.co-occurrence-section .table-scroll {\n overflow-y: auto;\n max-height: 400px;\n flex: 1;\n min-height: 0;\n}\n\n.co-occurrence-section .empty-state {\n max-height: 200px;\n overflow: hidden;\n}\n\n.co-occurrence-actions {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.co-occurrence-staleness {\n display: flex;\n align-items: center;\n gap: 5px;\n font-size: 0.78rem;\n color: var(--mj-text-muted);\n}\n"] }]
|
|
4251
|
+
args: [{ standalone: false, selector: 'app-analytics-resource', template: "<mj-page-layout>\n <mj-page-header\n Title=\"Knowledge Hub Analytics\"\n Icon=\"fa-solid fa-chart-line\"\n Subtitle=\"Pipeline health, trending tags, and content insights\">\n <div meta>\n <mj-stat-badge\n [Label]=\"PipelineStatusText\"\n [Variant]=\"PipelineStatusOk ? 'success' : 'error'\">\n </mj-stat-badge>\n </div>\n </mj-page-header>\n\n <mj-page-body [Flex]=\"true\" [Padding]=\"false\">\n@if (IsLoading) {\n <div class=\"analytics-loading\">\n <mj-loading text=\"Loading analytics data...\" size=\"medium\"></mj-loading>\n </div>\n} @else {\n <div class=\"analytics-layout\">\n <mj-left-nav\n [Sections]=\"navSections\"\n [ActiveId]=\"ActiveTab\"\n (ItemClicked)=\"onNavItemClicked($event)\">\n <!-- Trending Tags Cloud projected into the rail's footer slot. -->\n <div footer class=\"trending-section\">\n <h3><i class=\"fa-solid fa-arrow-trend-up\"></i> Trending Tags</h3>\n <div class=\"tag-cloud\">\n @for (tag of TrendingTags; track tag.Name) {\n <span [style.font-size.px]=\"tag.Size\" [style.font-weight]=\"tag.Weight\">{{ tag.Name }}</span>\n }\n @if (TrendingTags.length === 0) {\n <span class=\"no-trending\">No trending tags yet</span>\n }\n </div>\n </div>\n </mj-left-nav>\n\n <mj-left-nav-content>\n <div class=\"main-content\">\n\n <!-- ====================================================== -->\n <!-- TAB 1: OVERVIEW -->\n <!-- ====================================================== -->\n @if (ActiveTab === 'overview') {\n <section class=\"tab-section\">\n <div class=\"tab-section-header\">\n <i class=\"fa-solid fa-grip\"></i>\n <h1>Overview</h1>\n </div>\n\n <!-- Filter Bar -->\n <div class=\"filter-bar\">\n <div class=\"date-chips\">\n @for (range of DateRanges; track range.Label) {\n <button\n class=\"date-chip\"\n [class.active]=\"ActiveDateRange === range.Label\"\n (click)=\"SetDateRange(range.Label)\"\n >{{ range.Label }}</button>\n }\n </div>\n <select class=\"filter-dropdown\" [ngModel]=\"EntityFilter\" (ngModelChange)=\"SetEntityFilter($event)\">\n @for (opt of EntityFilterOptions; track opt) {\n <option [value]=\"opt\">{{ opt }}</option>\n }\n </select>\n </div>\n\n <!-- KPI Cards -->\n <div class=\"kpi-row\">\n @for (kpi of KPIs; track kpi.Label) {\n <div class=\"kpi-card\" (click)=\"OpenDrillDown(kpi.DrillDownKey)\">\n <div>\n <div class=\"kpi-label\">{{ kpi.Label }}</div>\n <div class=\"kpi-value\">{{ kpi.Value }}</div>\n <div class=\"kpi-delta\" [class.up]=\"kpi.DeltaDirection === 'up'\" [class.down]=\"kpi.DeltaDirection === 'down'\">\n @if (kpi.DeltaDirection === 'up') {\n <i class=\"fa-solid fa-arrow-up\" style=\"font-size:9px\"></i>\n } @else if (kpi.DeltaDirection === 'down') {\n <i class=\"fa-solid fa-arrow-down\" style=\"font-size:9px\"></i>\n }\n {{ kpi.Delta }}\n </div>\n </div>\n <div class=\"kpi-sparkline\">\n <svg width=\"64\" height=\"28\" viewBox=\"0 0 64 28\">\n <polyline [attr.points]=\"kpi.SparklinePoints\" fill=\"none\" [attr.stroke]=\"kpi.SparklineColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n </div>\n }\n </div>\n\n <!-- KPI Drill-Down -->\n @if (DrillDownTarget && DrillDownTarget.startsWith('kpi-')) {\n <div class=\"drill-down-panel\">\n <div class=\"drill-down-header\">\n <span class=\"drill-down-title\"><i class=\"fa-solid fa-table\"></i> Detail View</span>\n <div class=\"drill-down-header-actions\">\n @if (DrillDownData.length > 0) {\n <button class=\"drill-export-btn\" (click)=\"ExportDrillDownCSV()\" title=\"Export CSV\">\n <i class=\"fa-solid fa-download\"></i> CSV\n </button>\n }\n <button class=\"drill-down-close\" aria-label=\"Close drill-down\" (click)=\"CloseDrillDown()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n </div>\n @if (IsDrillDownLoading) {\n <mj-loading text=\"Loading details...\" size=\"small\"></mj-loading>\n } @else if (DrillDownData.length > 0) {\n <div class=\"drill-down-table-wrap\">\n <table class=\"data-table\">\n <thead>\n <tr>\n @for (col of DrillDownColumns; track col) {\n <th>{{ col }}</th>\n }\n @if (DrillDownHasActions) {\n <th class=\"drill-action-col\"></th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of DrillDownData; track TrackByIndex($index)) {\n <tr>\n @for (col of DrillDownColumns; track col) {\n <td>{{ row[col] }}</td>\n }\n @if (DrillDownHasActions) {\n <td class=\"drill-action-col\">\n @if (row['_RecordID']) {\n <button class=\"drill-open-btn\" (click)=\"OpenDrillDownRecord(row)\" title=\"Open record\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i>\n </button>\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"drill-down-empty\">No data available</div>\n }\n </div>\n }\n\n <!-- Widget Cards Grid (2x3) -->\n <div class=\"cards-grid\">\n\n <!-- Card 1: Tag Growth -->\n <div class=\"widget-card\" (click)=\"OpenDrillDown('tagGrowth')\">\n <div class=\"widget-title\"><i class=\"fa-solid fa-chart-line\"></i> Tag Growth</div>\n <div class=\"bar-chart\">\n @for (bar of TagGrowthData; track bar.Label) {\n <div class=\"bar-col\">\n <div class=\"bar-value\">{{ bar.Count }}</div>\n <div class=\"bar\" [style.height.%]=\"bar.Percentage\" style=\"background:var(--mj-brand-primary)\" [style.opacity]=\"0.5 + (bar.Percentage / 200)\"></div>\n <div class=\"bar-label\">{{ bar.Label }}</div>\n </div>\n }\n </div>\n </div>\n\n <!-- Card 2: Content Coverage -->\n <div class=\"widget-card\" (click)=\"OpenDrillDown('contentCoverage')\">\n <div class=\"widget-title\"><i class=\"fa-solid fa-bullseye\"></i> Content Coverage</div>\n <div class=\"rings-grid\">\n @for (entity of CoverageData; track entity.Name) {\n <div class=\"ring-item\">\n <svg width=\"48\" height=\"48\" viewBox=\"0 0 48 48\">\n <circle cx=\"24\" cy=\"24\" r=\"20\" fill=\"none\" stroke=\"var(--mj-border-default)\" stroke-width=\"5\"/>\n <circle cx=\"24\" cy=\"24\" r=\"20\" fill=\"none\" [attr.stroke]=\"entity.Color\" stroke-width=\"5\"\n [attr.stroke-dasharray]=\"entity.StrokeDash\" stroke-dashoffset=\"31.4\" stroke-linecap=\"round\"\n transform=\"rotate(-90 24 24)\"/>\n <text x=\"24\" y=\"26\" text-anchor=\"middle\" font-size=\"11\" font-weight=\"700\" fill=\"var(--mj-text-primary)\">{{ entity.Percentage }}%</text>\n </svg>\n <div>\n <div class=\"ring-label\">{{ entity.Name }}</div>\n <div class=\"ring-stat\">{{ FormatNumber(entity.Tagged) }} / {{ FormatNumber(entity.Total) }}</div>\n </div>\n </div>\n }\n @if (CoverageData.length === 0) {\n <div class=\"widget-empty\">No content types found</div>\n }\n </div>\n </div>\n\n <!-- Card 3: Quality Score Gauge -->\n <div class=\"widget-card\" (click)=\"OpenDrillDown('qualityScore')\">\n <div class=\"widget-title\"><i class=\"fa-solid fa-gauge-high\"></i> Quality Score</div>\n <div class=\"gauge-container\">\n <svg width=\"180\" height=\"110\" viewBox=\"0 0 180 110\">\n <!-- Background arc -->\n <path d=\"M 20 95 A 70 70 0 0 1 160 95\" fill=\"none\" stroke=\"var(--mj-border-default)\" stroke-width=\"14\" stroke-linecap=\"round\"/>\n <!-- Zone arcs -->\n <path d=\"M 20 95 A 70 70 0 0 1 48.6 35.2\" fill=\"none\" stroke=\"var(--mj-status-error)\" stroke-width=\"14\" stroke-linecap=\"round\" opacity=\"0.3\"/>\n <path d=\"M 48.6 35.2 A 70 70 0 0 1 118 28\" fill=\"none\" stroke=\"var(--mj-status-warning)\" stroke-width=\"14\" opacity=\"0.3\"/>\n <path d=\"M 118 28 A 70 70 0 0 1 160 95\" fill=\"none\" stroke=\"var(--mj-status-success)\" stroke-width=\"14\" stroke-linecap=\"round\" opacity=\"0.3\"/>\n <!-- Score text -->\n <text x=\"90\" y=\"88\" text-anchor=\"middle\" font-size=\"26\" font-weight=\"800\" fill=\"var(--mj-text-primary)\">{{ QualityScore }}</text>\n <text x=\"90\" y=\"105\" text-anchor=\"middle\" font-size=\"10\" fill=\"var(--mj-text-muted)\">out of 100</text>\n <text x=\"28\" y=\"108\" font-size=\"8\" fill=\"var(--mj-text-muted)\">0</text>\n <text x=\"86\" y=\"18\" font-size=\"8\" fill=\"var(--mj-text-muted)\">50</text>\n <text x=\"155\" y=\"108\" font-size=\"8\" fill=\"var(--mj-text-muted)\">100</text>\n </svg>\n </div>\n <!-- Mini confidence histogram -->\n <div class=\"mini-histogram\">\n @for (bin of MiniConfidenceBins; track TrackByIndex($index)) {\n <div class=\"mini-hist-bar\" [style.height.px]=\"bin.Height\" [style.background]=\"bin.Color\" [title]=\"bin.Title\"></div>\n }\n </div>\n <div class=\"mini-hist-label\">Confidence Distribution</div>\n </div>\n\n <!-- Card 4: Source Performance -->\n <div class=\"widget-card\" (click)=\"OpenDrillDown('sourcePerformance')\">\n <div class=\"widget-title\"><i class=\"fa-solid fa-ranking-star\"></i> Source Performance</div>\n <div class=\"h-bar-list\">\n @for (source of SourcePerfData; track source.Name) {\n <div class=\"h-bar-row\">\n <div class=\"h-bar-name\">{{ source.Name }}</div>\n <div class=\"h-bar-track\">\n <div class=\"h-bar-fill\" [style.width.%]=\"source.Percentage\" [style.background]=\"source.Color\">{{ source.AvgTagsPerItem }}</div>\n </div>\n </div>\n }\n @if (SourcePerfData.length === 0) {\n <div class=\"widget-empty\">No source data</div>\n }\n </div>\n <div class=\"widget-footnote\">Average tags per item</div>\n </div>\n\n <!-- Card 5: Daily Throughput -->\n <div class=\"widget-card\" (click)=\"OpenDrillDown('dailyThroughput')\">\n <div class=\"widget-title\"><i class=\"fa-solid fa-bolt\"></i> Daily Throughput</div>\n <div class=\"throughput-bars\">\n @for (day of ThroughputData; track day.Label) {\n <div class=\"tp-bar\"\n [style.height.%]=\"day.Percentage\"\n [style.background]=\"day.IsError ? 'var(--mj-status-error)' : 'var(--mj-status-success)'\"\n >\n <span class=\"tp-bar-label\">{{ day.Label }}</span>\n </div>\n }\n </div>\n <div class=\"legend\">\n <div class=\"legend-item\"><div class=\"legend-dot\" style=\"background:var(--mj-status-success)\"></div> Success</div>\n <div class=\"legend-item\"><div class=\"legend-dot\" style=\"background:var(--mj-status-error)\"></div> Failures</div>\n </div>\n </div>\n\n <!-- Card 6: Taxonomy Health -->\n <div class=\"widget-card\" (click)=\"OpenDrillDown('taxonomyHealth')\">\n <div class=\"widget-title\"><i class=\"fa-solid fa-sitemap\"></i> Taxonomy Health</div>\n <div class=\"taxonomy-ring-container\">\n <svg width=\"140\" height=\"140\" viewBox=\"0 0 140 140\">\n <circle cx=\"70\" cy=\"70\" r=\"54\" fill=\"none\" stroke=\"var(--mj-border-default)\" stroke-width=\"18\"/>\n @for (seg of TaxonomyRingSegments; track TrackByIndex($index)) {\n <circle cx=\"70\" cy=\"70\" r=\"54\" fill=\"none\"\n [attr.stroke]=\"seg.Color\" stroke-width=\"18\"\n [attr.stroke-dasharray]=\"seg.StrokeDash\"\n [attr.stroke-dashoffset]=\"seg.StrokeOffset\"\n transform=\"rotate(-90 70 70)\"/>\n }\n <text x=\"70\" y=\"66\" text-anchor=\"middle\" font-size=\"22\" font-weight=\"800\" fill=\"var(--mj-text-primary)\">{{ TaxonomyTotal }}</text>\n <text x=\"70\" y=\"82\" text-anchor=\"middle\" font-size=\"10\" fill=\"var(--mj-text-muted)\">total tags</text>\n </svg>\n </div>\n <div class=\"taxonomy-stats\">\n @for (stat of TaxonomyStats; track stat.Label) {\n <div class=\"tax-stat\" [style.background]=\"stat.BgColor\" [style.color]=\"stat.Color\">\n {{ stat.Count }}<small>{{ stat.Label }}</small>\n </div>\n }\n </div>\n </div>\n\n </div><!-- /cards-grid -->\n\n <!-- Widget Drill-Down -->\n @if (DrillDownTarget && !DrillDownTarget.startsWith('kpi-')) {\n <div class=\"drill-down-panel\">\n <div class=\"drill-down-header\">\n <span class=\"drill-down-title\"><i class=\"fa-solid fa-table\"></i> {{ DrillDownTarget }} Detail</span>\n <button class=\"drill-down-close\" aria-label=\"Close drill-down\" (click)=\"CloseDrillDown()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n @if (IsDrillDownLoading) {\n <mj-loading text=\"Loading details...\" size=\"small\"></mj-loading>\n } @else if (DrillDownData.length > 0) {\n <div class=\"drill-down-table-wrap\">\n <table class=\"data-table\">\n <thead>\n <tr>\n @for (col of DrillDownColumns; track col) {\n <th>{{ col }}</th>\n }\n @if (DrillDownHasActions) {\n <th class=\"drill-action-col\"></th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of DrillDownData; track TrackByIndex($index)) {\n <tr>\n @for (col of DrillDownColumns; track col) {\n <td>{{ row[col] }}</td>\n }\n @if (DrillDownHasActions) {\n <td class=\"drill-action-col\">\n @if (row['_RecordID']) {\n <button class=\"drill-open-btn\" (click)=\"OpenDrillDownRecord(row)\" title=\"Open record\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i>\n </button>\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"drill-down-empty\">No data available</div>\n }\n </div>\n }\n </section>\n }\n\n <!-- ====================================================== -->\n <!-- TAB 2: TAGS -->\n <!-- ====================================================== -->\n @if (ActiveTab === 'tags') {\n <section class=\"tab-section\">\n <div class=\"tab-section-header\">\n <i class=\"fa-solid fa-tags\"></i>\n <h1>Tags</h1>\n </div>\n\n <!-- Top 20 Tags Table -->\n <div class=\"sub-section\" style=\"margin-top:0\">\n <div class=\"sub-section-header\">\n <h3><i class=\"fa-solid fa-trophy\"></i> Top 20 Tags</h3>\n @if (TopTags.length > 0) {\n <button class=\"drill-export-btn\" (click)=\"ExportTabDataCSV('top-tags')\" title=\"Export CSV\">\n <i class=\"fa-solid fa-download\"></i> CSV\n </button>\n }\n </div>\n @if (TopTags.length > 0) {\n <div class=\"table-scroll\">\n <table class=\"data-table\">\n <thead>\n <tr>\n <th>#</th>\n <th>Tag Name</th>\n <th class=\"num\">Usage Count</th>\n <th>Avg Weight</th>\n <th>Trend</th>\n <th>Top Entity</th>\n <th>First Seen</th>\n </tr>\n </thead>\n <tbody>\n @for (tag of TopTags; track tag.Name) {\n <tr style=\"cursor:pointer\" (click)=\"OpenDrillDown('tag-row:' + tag.Name)\">\n <td>{{ tag.Rank }}</td>\n <td><strong>{{ tag.Name }}</strong></td>\n <td class=\"num\">{{ FormatNumber(tag.UsageCount) }}</td>\n <td>\n <span class=\"weight-bar\" [style.width.px]=\"tag.WeightBarWidth\" [style.background]=\"tag.WeightBarColor\"></span>\n {{ tag.AvgWeight }}\n </td>\n <td>\n <svg width=\"48\" height=\"16\">\n <polyline [attr.points]=\"tag.TrendPoints\" fill=\"none\" [attr.stroke]=\"tag.TrendColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n </svg>\n </td>\n <td>{{ tag.TopEntity }}</td>\n <td class=\"muted\">{{ tag.FirstSeen }}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-tags\"></i>\n <p>No tag data available yet. Process content to generate tags.</p>\n </div>\n }\n </div>\n\n <!-- D10: Tags tab drill-down -->\n @if (DrillDownTarget && DrillDownTarget.startsWith('tag-row:')) {\n <div class=\"drill-down-panel\">\n <div class=\"drill-down-header\">\n <span class=\"drill-down-title\"><i class=\"fa-solid fa-table\"></i> Content Items Tagged \"{{ DrillDownTarget.replace('tag-row:', '') }}\"</span>\n <div class=\"drill-down-header-actions\">\n @if (DrillDownData.length > 0) {\n <button class=\"drill-export-btn\" (click)=\"ExportDrillDownCSV()\" title=\"Export CSV\">\n <i class=\"fa-solid fa-download\"></i> CSV\n </button>\n }\n <button class=\"drill-down-close\" aria-label=\"Close drill-down\" (click)=\"CloseDrillDown()\"><i class=\"fa-solid fa-times\"></i></button>\n </div>\n </div>\n @if (IsDrillDownLoading) {\n <mj-loading text=\"Loading details...\" size=\"small\"></mj-loading>\n } @else if (DrillDownData.length > 0) {\n <div class=\"drill-down-table-wrap\">\n <table class=\"data-table\">\n <thead><tr>\n @for (col of DrillDownColumns; track col) { <th>{{ col }}</th> }\n @if (DrillDownHasActions) { <th class=\"drill-action-col\"></th> }\n </tr></thead>\n <tbody>\n @for (row of DrillDownData; track TrackByIndex($index)) {\n <tr>\n @for (col of DrillDownColumns; track col) { <td>{{ row[col] }}</td> }\n @if (DrillDownHasActions) {\n <td class=\"drill-action-col\">\n @if (row['_RecordID']) {\n <button class=\"drill-open-btn\" aria-label=\"Open record\" (click)=\"OpenDrillDownRecord(row)\" title=\"Open record\"><i class=\"fa-solid fa-arrow-up-right-from-square\"></i></button>\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"drill-down-empty\">No items found for this tag</div>\n }\n </div>\n }\n\n <!-- Tag Distribution by Entity -->\n @if (EntityDistribution.length > 0) {\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-chart-bar\"></i> Tag Distribution by Entity</h3>\n <div class=\"stacked-bar-chart\">\n @for (row of EntityDistribution; track row.EntityName) {\n <div class=\"stacked-row\">\n <div class=\"stacked-label\">{{ row.EntityName }}</div>\n <div class=\"stacked-track\">\n @for (seg of row.Segments; track TrackByIndex($index)) {\n <div class=\"stacked-seg\" [style.width.%]=\"seg.Percentage\" [style.background]=\"seg.Color\" [title]=\"seg.Label + ': ' + seg.Percentage + '%'\">{{ seg.Label }}</div>\n }\n </div>\n </div>\n }\n </div>\n <div class=\"legend\" style=\"margin-top:12px\">\n @for (item of DistributionLegend; track item.Label) {\n <div class=\"legend-item\"><div class=\"legend-dot\" [style.background]=\"item.Color\"></div> {{ item.Label }}</div>\n }\n </div>\n </div>\n }\n\n <!-- Tag Depth Distribution -->\n @if (TagDepthBars.length > 0) {\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-layer-group\"></i> Tag Depth Distribution</h3>\n <div class=\"v-bar-chart\">\n @for (bar of TagDepthBars; track bar.Label) {\n <div class=\"v-bar-col\">\n <div class=\"v-bar\" [style.height.%]=\"bar.Percentage\" style=\"background:var(--mj-brand-primary)\" [style.min-height.px]=\"bar.Count > 0 ? 24 : 0\">{{ bar.Count }}</div>\n <div class=\"v-bar-label\">{{ bar.Label }}</div>\n </div>\n }\n </div>\n <div class=\"chart-footnote\">\n Taxonomy hierarchy depth -- Most tags at depth 2-3 indicating a healthy mid-level structure\n </div>\n </div>\n }\n\n <!-- Frequently Paired Tags (Co-Occurrence) -->\n <div class=\"sub-section co-occurrence-section\">\n <div class=\"sub-section-header\">\n <h3><i class=\"fa-solid fa-link\"></i> Frequently Paired Tags</h3>\n <div class=\"co-occurrence-actions\">\n @if (CoOccurrenceLastComputed) {\n <span class=\"co-occurrence-staleness\" title=\"Last computed timestamp\">\n <i class=\"fa-regular fa-clock\"></i>\n Last computed: {{ CoOccurrenceLastComputed }}\n </span>\n }\n <button class=\"drill-export-btn\" (click)=\"RecomputeCoOccurrence()\" [disabled]=\"IsRecomputingCoOccurrence\" title=\"Recompute co-occurrence data\">\n @if (IsRecomputingCoOccurrence) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Computing...\n } @else {\n <i class=\"fa-solid fa-arrows-rotate\"></i> Recompute\n }\n </button>\n </div>\n </div>\n @if (CoOccurrencePairs.length > 0) {\n <div class=\"table-scroll\">\n <table class=\"data-table\">\n <thead>\n <tr>\n <th>#</th>\n <th>Tag A</th>\n <th>Tag B</th>\n <th class=\"num\">Co-Occurrences</th>\n <th>Frequency</th>\n </tr>\n </thead>\n <tbody>\n @for (pair of CoOccurrencePairs; track pair.TagAName + pair.TagBName; let i = $index) {\n <tr>\n <td class=\"muted\">{{ i + 1 }}</td>\n <td><strong>{{ pair.TagAName }}</strong></td>\n <td><strong>{{ pair.TagBName }}</strong></td>\n <td class=\"num\">{{ FormatNumber(pair.Count) }}</td>\n <td>\n <span class=\"weight-bar\" [style.width.px]=\"pair.BarWidth\" style=\"background: var(--mj-status-info)\"></span>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-link\"></i>\n <p>No co-occurrence data available yet. Process content and recompute to see which tags frequently appear together.</p>\n </div>\n }\n </div>\n </section>\n }\n\n <!-- ====================================================== -->\n <!-- TAB 3: SOURCES -->\n <!-- ====================================================== -->\n @if (ActiveTab === 'sources') {\n <section class=\"tab-section\">\n <div class=\"tab-section-header\">\n <i class=\"fa-solid fa-database\"></i>\n <h1>Sources</h1>\n </div>\n\n <!-- Source Comparison Table -->\n <div class=\"sub-section\" style=\"margin-top:0\">\n <h3><i class=\"fa-solid fa-table\"></i> Source Comparison</h3>\n @if (SourceComparison.length > 0) {\n <div class=\"table-scroll\">\n <table class=\"data-table\">\n <thead>\n <tr>\n <th>Source Name</th>\n <th>Type</th>\n <th class=\"num\">Items</th>\n <th class=\"num\">Tags Generated</th>\n <th class=\"num\">Avg Tags/Item</th>\n <th class=\"num\">Avg Weight</th>\n <th>Last Run</th>\n <th>Status</th>\n </tr>\n </thead>\n <tbody>\n @for (source of SourceComparison; track source.Name) {\n <tr (click)=\"SelectSource(source.Name); OpenDrillDown('source-row:' + source.Name)\" style=\"cursor:pointer\" [class.source-selected]=\"SelectedSourceName === source.Name\">\n <td><strong>{{ source.Name }}</strong></td>\n <td><i [class]=\"source.TypeIcon\" [style.color]=\"source.TypeColor\" style=\"margin-right:4px\"></i> {{ source.Type }}</td>\n <td class=\"num\">{{ FormatNumber(source.Items) }}</td>\n <td class=\"num\">{{ FormatNumber(source.TagsGenerated) }}</td>\n <td class=\"num\">{{ source.AvgTagsPerItem }}</td>\n <td class=\"num\">{{ source.AvgWeight }}</td>\n <td class=\"muted\">{{ source.LastRun }}</td>\n <td><span class=\"badge\" [class]=\"source.StatusClass\"><i class=\"fa-solid fa-circle\" style=\"font-size:6px;margin-right:3px\"></i> {{ source.Status }}</span></td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-database\"></i>\n <p>No content sources configured yet.</p>\n </div>\n }\n </div>\n\n <!-- D10: Sources tab drill-down (recent runs) -->\n @if (DrillDownTarget && DrillDownTarget.startsWith('source-row:')) {\n <div class=\"drill-down-panel\">\n <div class=\"drill-down-header\">\n <span class=\"drill-down-title\"><i class=\"fa-solid fa-table\"></i> Recent Runs: {{ DrillDownTarget.replace('source-row:', '') }}</span>\n <div class=\"drill-down-header-actions\">\n @if (DrillDownData.length > 0) {\n <button class=\"drill-export-btn\" (click)=\"ExportDrillDownCSV()\" title=\"Export CSV\"><i class=\"fa-solid fa-download\"></i> CSV</button>\n }\n <button class=\"drill-down-close\" aria-label=\"Close drill-down\" (click)=\"CloseDrillDown()\"><i class=\"fa-solid fa-times\"></i></button>\n </div>\n </div>\n @if (IsDrillDownLoading) {\n <mj-loading text=\"Loading details...\" size=\"small\"></mj-loading>\n } @else if (DrillDownData.length > 0) {\n <div class=\"drill-down-table-wrap\">\n <table class=\"data-table\">\n <thead><tr>\n @for (col of DrillDownColumns; track col) { <th>{{ col }}</th> }\n @if (DrillDownHasActions) { <th class=\"drill-action-col\"></th> }\n </tr></thead>\n <tbody>\n @for (row of DrillDownData; track TrackByIndex($index)) {\n <tr>\n @for (col of DrillDownColumns; track col) { <td>{{ row[col] }}</td> }\n @if (DrillDownHasActions) {\n <td class=\"drill-action-col\">\n @if (row['_RecordID']) {\n <button class=\"drill-open-btn\" aria-label=\"Open record\" (click)=\"OpenDrillDownRecord(row)\" title=\"Open record\"><i class=\"fa-solid fa-arrow-up-right-from-square\"></i></button>\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"drill-down-empty\">No run data for this source</div>\n }\n </div>\n }\n\n <!-- Per-Source Detail -->\n @if (SelectedSourceName && SourceComparison.length > 0) {\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-chart-area\"></i> Source Detail: {{ SelectedSourceName }}</h3>\n <div class=\"two-col\">\n <!-- Items Processed Over Time -->\n <div class=\"widget-card\">\n <div class=\"widget-title\"><i class=\"fa-solid fa-chart-bar\"></i> Items Processed (Last 8 Weeks)</div>\n <div class=\"bar-chart\" style=\"height:100px\">\n @for (bar of SourceWeeklyBars; track bar.Label) {\n <div class=\"bar-col\">\n <div class=\"bar-value\" style=\"font-size:9px\">{{ bar.Value }}</div>\n <div class=\"bar\" [style.height.%]=\"bar.Percentage\" style=\"background:var(--mj-brand-primary)\" [style.opacity]=\"0.5 + (bar.Percentage / 200)\"></div>\n <div class=\"bar-label\">{{ bar.Label }}</div>\n </div>\n }\n </div>\n </div>\n\n <!-- Tag Quality Distribution -->\n <div class=\"widget-card\">\n <div class=\"widget-title\"><i class=\"fa-solid fa-star-half-stroke\"></i> Tag Quality Distribution</div>\n <div class=\"quality-bands\">\n @for (band of SourceQualityBands; track band.Label) {\n <div class=\"quality-band-row\">\n <span class=\"quality-band-label\">{{ band.Label }}</span>\n <div class=\"quality-band-track\">\n <div class=\"quality-band-fill\" [style.width.%]=\"band.Percentage\" [style.background]=\"band.Color\">{{ band.Percentage }}%</div>\n </div>\n </div>\n }\n </div>\n <div class=\"source-quality-note\">\n <i class=\"fa-solid fa-circle-info\" style=\"color:var(--mj-status-info);margin-right:4px\"></i>\n {{ SourceQualityNote }}\n </div>\n </div>\n </div>\n </div>\n }\n\n <!-- Source Health -->\n @if (SourceHealthCards.length > 0) {\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-heart-pulse\"></i> Source Health Summary</h3>\n <div class=\"source-health-grid\" [style.grid-template-columns]=\"'repeat(' + SourceHealthCards.length + ', 1fr)'\">\n @for (card of SourceHealthCards; track card.Name) {\n <div class=\"source-health-card\" [style.border-top-color]=\"card.Color\">\n <div class=\"health-card-name\">{{ card.Name }}</div>\n <div class=\"health-card-value\" [style.color]=\"card.Color\">{{ card.Uptime }}%</div>\n <div class=\"health-card-label\">uptime</div>\n </div>\n }\n </div>\n </div>\n }\n </section>\n }\n\n <!-- ====================================================== -->\n <!-- TAB 4: PIPELINE -->\n <!-- ====================================================== -->\n @if (ActiveTab === 'pipeline') {\n <section class=\"tab-section\">\n <div class=\"tab-section-header\">\n <i class=\"fa-solid fa-gears\"></i>\n <h1>Pipeline</h1>\n </div>\n\n <!-- Pipeline Throughput Chart -->\n <div class=\"sub-section\" style=\"margin-top:0\">\n <h3><i class=\"fa-solid fa-chart-bar\"></i> Pipeline Throughput (Last 30 Days)</h3>\n <div class=\"widget-card\">\n <div class=\"pipeline-throughput-bars\">\n @for (bar of PipelineThroughputBars; track TrackByIndex($index)) {\n <div class=\"pipeline-bar\"\n [style.height.%]=\"bar.Percentage\"\n [style.background]=\"bar.IsError ? 'var(--mj-status-error)' : 'var(--mj-brand-primary)'\"\n [style.opacity]=\"bar.IsError ? 0.7 : (0.6 + bar.Percentage / 300)\"\n style=\"cursor:pointer\"\n (click)=\"OpenDrillDown('pipeline-throughput:' + $index)\"\n ></div>\n }\n </div>\n <div class=\"pipeline-date-labels\">\n @for (label of PipelineDateLabels; track label) {\n <span>{{ label }}</span>\n }\n </div>\n </div>\n </div>\n\n <!-- D10: Pipeline throughput drill-down -->\n @if (DrillDownTarget && DrillDownTarget.startsWith('pipeline-throughput:')) {\n <div class=\"drill-down-panel\">\n <div class=\"drill-down-header\">\n <span class=\"drill-down-title\"><i class=\"fa-solid fa-table\"></i> Runs for Selected Day</span>\n <div class=\"drill-down-header-actions\">\n @if (DrillDownData.length > 0) {\n <button class=\"drill-export-btn\" (click)=\"ExportDrillDownCSV()\" title=\"Export CSV\"><i class=\"fa-solid fa-download\"></i> CSV</button>\n }\n <button class=\"drill-down-close\" aria-label=\"Close drill-down\" (click)=\"CloseDrillDown()\"><i class=\"fa-solid fa-times\"></i></button>\n </div>\n </div>\n @if (IsDrillDownLoading) {\n <mj-loading text=\"Loading details...\" size=\"small\"></mj-loading>\n } @else if (DrillDownData.length > 0) {\n <div class=\"drill-down-table-wrap\">\n <table class=\"data-table\">\n <thead><tr>\n @for (col of DrillDownColumns; track col) { <th>{{ col }}</th> }\n @if (DrillDownHasActions) { <th class=\"drill-action-col\"></th> }\n </tr></thead>\n <tbody>\n @for (row of DrillDownData; track TrackByIndex($index)) {\n <tr>\n @for (col of DrillDownColumns; track col) { <td>{{ row[col] }}</td> }\n @if (DrillDownHasActions) {\n <td class=\"drill-action-col\">\n @if (row['_RecordID']) {\n <button class=\"drill-open-btn\" aria-label=\"Open record\" (click)=\"OpenDrillDownRecord(row)\" title=\"Open record\"><i class=\"fa-solid fa-arrow-up-right-from-square\"></i></button>\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"drill-down-empty\">No runs for this day</div>\n }\n </div>\n }\n\n <!-- Processing Time Breakdown -->\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-stopwatch\"></i> Processing Time Breakdown (Avg per Item)</h3>\n <div class=\"widget-card\">\n <div class=\"stage-bars\">\n @for (stage of ProcessingStages; track stage.Name) {\n <div class=\"stage-row\">\n <div class=\"stage-name\">{{ stage.Name }}</div>\n <div class=\"stage-track\">\n <div class=\"stage-fill\" [style.width.%]=\"stage.Percentage\" [style.background]=\"stage.Color\">\n @if (stage.Percentage > 15) {\n {{ stage.Time }}s\n }\n </div>\n </div>\n <div class=\"stage-time\">{{ stage.Time }}s</div>\n </div>\n }\n </div>\n <div class=\"stage-summary\">\n <span><strong>Total avg:</strong> {{ TotalAvgProcessingTime }}s per item</span>\n @if (BottleneckStage) {\n <span class=\"stage-warning\">\n <i class=\"fa-solid fa-triangle-exclamation\" style=\"color:var(--mj-status-warning);margin-right:4px\"></i>\n {{ BottleneckStage }} stage is the bottleneck ({{ BottleneckPercent }}% of total time)\n </span>\n }\n </div>\n </div>\n </div>\n\n <!-- Success Rate -->\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-chart-line\"></i> Success Rate Overview</h3>\n <div class=\"widget-card\">\n <div class=\"success-rate-display\">\n <div class=\"success-rate-stat\">\n <div class=\"success-rate-value\" style=\"color:var(--mj-status-success)\">\n {{ rawProcessRuns.length > 0 ? (100 - (ErrorLog.length / rawProcessRuns.length * 100)).toFixed(1) : '100' }}%\n </div>\n <div class=\"success-rate-label\">Success Rate</div>\n </div>\n <div class=\"success-rate-stat\">\n <div class=\"success-rate-value\" style=\"color:var(--mj-status-error)\">\n {{ rawProcessRuns.length > 0 ? (ErrorLog.length / rawProcessRuns.length * 100).toFixed(1) : '0' }}%\n </div>\n <div class=\"success-rate-label\">Failure Rate</div>\n </div>\n <div class=\"success-rate-stat\">\n <div class=\"success-rate-value\" style=\"color:var(--mj-text-primary)\">\n {{ FormatNumber(rawProcessRuns.length) }}\n </div>\n <div class=\"success-rate-label\">Total Runs</div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Active Runs Table -->\n @if (ActiveRuns.length > 0) {\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-spinner\"></i> Active Runs</h3>\n <div class=\"table-scroll\">\n <table class=\"data-table\">\n <thead>\n <tr>\n <th>Run ID</th>\n <th>Source</th>\n <th>Started</th>\n <th>Progress</th>\n <th>Stage</th>\n <th class=\"num\">Items</th>\n </tr>\n </thead>\n <tbody>\n @for (run of ActiveRuns; track run.RunID) {\n <tr>\n <td class=\"monospace-cell\">{{ run.RunID }}</td>\n <td>{{ run.Source }}</td>\n <td class=\"muted\">{{ run.Started }}</td>\n <td>\n <div class=\"progress-track\"><div class=\"progress-fill\" [style.width.%]=\"run.Progress\" style=\"background:var(--mj-brand-primary)\"></div></div>\n <span class=\"progress-text\">{{ run.Progress }}%</span>\n </td>\n <td><span class=\"badge\" [class]=\"run.StageClass\">{{ run.Stage }}</span></td>\n <td class=\"num\">{{ FormatNumber(run.Items) }}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </div>\n }\n\n <!-- Error Log -->\n @if (ErrorLog.length > 0) {\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-triangle-exclamation\"></i> Recent Errors</h3>\n <div class=\"error-log\">\n @for (entry of ErrorLog; track TrackByIndex($index)) {\n <div class=\"error-entry\">\n <div class=\"error-time\">{{ entry.Time }}</div>\n <div class=\"error-source\">{{ entry.Source }}</div>\n <div class=\"error-msg\">{{ entry.Message }}</div>\n </div>\n }\n </div>\n </div>\n }\n </section>\n }\n\n <!-- ====================================================== -->\n <!-- TAB 5: QUALITY -->\n <!-- ====================================================== -->\n @if (ActiveTab === 'quality') {\n <section class=\"tab-section\">\n <div class=\"tab-section-header\">\n <i class=\"fa-solid fa-circle-check\"></i>\n <h1>Quality</h1>\n </div>\n\n <!-- Confidence Distribution Histogram -->\n <div class=\"sub-section\" style=\"margin-top:0\">\n <h3><i class=\"fa-solid fa-chart-column\"></i> Confidence Distribution</h3>\n <div class=\"widget-card\">\n <div class=\"histogram\">\n @for (bin of ConfidenceHistogram; track bin.Label) {\n <div class=\"hist-bar-col\" style=\"cursor:pointer\" (click)=\"OpenDrillDown('quality-bin:' + bin.Label)\">\n <div class=\"hist-bar\" [style.height.%]=\"bin.Percentage\" [style.background]=\"bin.Color\">\n @if (bin.Count > 0) { {{ bin.Count }} }\n </div>\n <div class=\"hist-label\">{{ bin.Label }}</div>\n </div>\n }\n </div>\n <div class=\"confidence-stats\">\n @for (stat of ConfidenceStats; track stat.Label) {\n <span><strong>{{ stat.Label }}:</strong> {{ stat.Value }}</span>\n }\n </div>\n </div>\n </div>\n\n <!-- D10: Quality bin drill-down -->\n @if (DrillDownTarget && DrillDownTarget.startsWith('quality-bin:')) {\n <div class=\"drill-down-panel\">\n <div class=\"drill-down-header\">\n <span class=\"drill-down-title\"><i class=\"fa-solid fa-table\"></i> Items in Confidence Range {{ DrillDownTarget.replace('quality-bin:', '') }}</span>\n <div class=\"drill-down-header-actions\">\n @if (DrillDownData.length > 0) {\n <button class=\"drill-export-btn\" (click)=\"ExportDrillDownCSV()\" title=\"Export CSV\"><i class=\"fa-solid fa-download\"></i> CSV</button>\n }\n <button class=\"drill-down-close\" aria-label=\"Close drill-down\" (click)=\"CloseDrillDown()\"><i class=\"fa-solid fa-times\"></i></button>\n </div>\n </div>\n @if (IsDrillDownLoading) {\n <mj-loading text=\"Loading details...\" size=\"small\"></mj-loading>\n } @else if (DrillDownData.length > 0) {\n <div class=\"drill-down-table-wrap\">\n <table class=\"data-table\">\n <thead><tr>\n @for (col of DrillDownColumns; track col) { <th>{{ col }}</th> }\n @if (DrillDownHasActions) { <th class=\"drill-action-col\"></th> }\n </tr></thead>\n <tbody>\n @for (row of DrillDownData; track TrackByIndex($index)) {\n <tr>\n @for (col of DrillDownColumns; track col) { <td>{{ row[col] }}</td> }\n @if (DrillDownHasActions) {\n <td class=\"drill-action-col\">\n @if (row['_RecordID']) {\n <button class=\"drill-open-btn\" aria-label=\"Open record\" (click)=\"OpenDrillDownRecord(row)\" title=\"Open record\"><i class=\"fa-solid fa-arrow-up-right-from-square\"></i></button>\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"drill-down-empty\">No items in this confidence range</div>\n }\n </div>\n }\n\n <!-- Weight Distribution by Entity -->\n @if (WeightByEntity.length > 0) {\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-weight-scale\"></i> Weight Distribution by Entity</h3>\n <div class=\"widget-card\">\n <div class=\"grouped-bar-chart\">\n @for (entity of WeightByEntity; track entity.Name) {\n <div class=\"grouped-col\">\n <div class=\"grouped-bars\">\n <div class=\"g-bar\" [style.height.%]=\"entity.High\" style=\"background:var(--mj-brand-primary)\" [title]=\"'High: ' + entity.High + '%'\"></div>\n <div class=\"g-bar\" [style.height.%]=\"entity.Med\" style=\"background:var(--mj-status-info)\" [title]=\"'Med: ' + entity.Med + '%'\"></div>\n <div class=\"g-bar\" [style.height.%]=\"entity.Low\" style=\"background:var(--mj-text-muted)\" [title]=\"'Low: ' + entity.Low + '%'\"></div>\n </div>\n <div class=\"grouped-label\">{{ entity.Name }}</div>\n </div>\n }\n </div>\n <div class=\"legend\" style=\"justify-content:center;margin-top:14px\">\n @for (item of WeightLegend; track item.Label) {\n <div class=\"legend-item\"><div class=\"legend-dot\" [style.background]=\"item.Color\"></div> {{ item.Label }}</div>\n }\n </div>\n </div>\n </div>\n }\n\n <!-- Tag Accuracy Over Time -->\n @if (AccuracyLinePoints) {\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-chart-line\"></i> Tag Accuracy Over Time (Weekly Avg Confidence)</h3>\n <div class=\"widget-card\">\n <div class=\"accuracy-chart\">\n <div class=\"accuracy-y-labels\">\n <div>1.0</div>\n <div>0.75</div>\n <div>0.50</div>\n <div>0.25</div>\n </div>\n <div class=\"accuracy-area\">\n <div class=\"accuracy-grid-line\" style=\"top:33%\"></div>\n <div class=\"accuracy-grid-line\" style=\"top:66%\"></div>\n <svg width=\"100%\" height=\"110\" viewBox=\"0 0 400 110\" preserveAspectRatio=\"none\" class=\"accuracy-svg\">\n <polyline [attr.points]=\"AccuracyLinePoints\"\n fill=\"none\" stroke=\"var(--mj-brand-primary)\" stroke-width=\"2.5\" vector-effect=\"non-scaling-stroke\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n @for (dot of AccuracyDots; track TrackByIndex($index)) {\n <circle [attr.cx]=\"dot.Cx\" [attr.cy]=\"dot.Cy\" r=\"3\" fill=\"var(--mj-brand-primary)\"/>\n }\n </svg>\n </div>\n </div>\n <div class=\"accuracy-x-labels\">\n @for (label of AccuracyMonthLabels; track label) {\n <span>{{ label }}</span>\n }\n </div>\n <div class=\"accuracy-trend-text\">\n <i class=\"fa-solid fa-arrow-trend-up\" style=\"margin-right:4px\"></i>\n {{ AccuracyTrendText }}\n </div>\n </div>\n </div>\n }\n\n <!-- Low-Confidence Tags Table -->\n @if (LowConfidenceTags.length > 0) {\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-exclamation-triangle\"></i> Low-Confidence Tags (Avg Weight < 0.4)</h3>\n <div class=\"table-scroll\">\n <table class=\"data-table\">\n <thead>\n <tr>\n <th>Tag Name</th>\n <th class=\"num\">Avg Weight</th>\n <th class=\"num\">Usage Count</th>\n <th>Top Entity</th>\n <th>Suggested Action</th>\n </tr>\n </thead>\n <tbody>\n @for (tag of LowConfidenceTags; track tag.Name) {\n <tr>\n <td><strong>{{ tag.Name }}</strong></td>\n <td class=\"num\">{{ tag.AvgWeight }}</td>\n <td class=\"num\">{{ tag.UsageCount }}</td>\n <td>{{ tag.TopEntity }}</td>\n <td><span class=\"badge\" [class]=\"tag.ActionClass\">{{ tag.SuggestedAction }}</span></td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </div>\n }\n\n <!-- Model Performance Comparison -->\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-robot\"></i> Model Performance Comparison</h3>\n <div class=\"model-grid\">\n @for (model of ModelComparisons; track model.Name) {\n <div class=\"model-card\">\n <div class=\"model-name\"><i [class]=\"model.Icon\" [style.color]=\"model.IconColor\" style=\"margin-right:4px\"></i> {{ model.Name }}</div>\n <svg width=\"80\" height=\"80\" viewBox=\"0 0 80 80\" style=\"margin:4px 0\">\n <circle cx=\"40\" cy=\"40\" r=\"32\" fill=\"none\" stroke=\"var(--mj-border-default)\" stroke-width=\"8\"/>\n <circle cx=\"40\" cy=\"40\" r=\"32\" fill=\"none\" [attr.stroke]=\"model.ScoreColor\" stroke-width=\"8\"\n [attr.stroke-dasharray]=\"model.StrokeDash\" stroke-dashoffset=\"50\"\n transform=\"rotate(-90 40 40)\" stroke-linecap=\"round\"/>\n </svg>\n <div class=\"model-score\" [style.color]=\"model.ScoreColor\">{{ model.ScorePercentage }}%</div>\n <div class=\"model-detail\">Avg confidence: {{ model.AvgConfidence }}</div>\n <div class=\"model-detail\">{{ FormatNumber(model.TagsGenerated) }} tags generated</div>\n <div class=\"model-detail\" [style.color]=\"model.RoleColor\" style=\"font-weight:600\">{{ model.Role }}</div>\n </div>\n }\n </div>\n @if (ModelRecommendation) {\n <div class=\"model-recommendation\">\n <i class=\"fa-solid fa-lightbulb\" style=\"color:var(--mj-status-warning)\"></i>\n <div>\n <strong>Recommendation:</strong> {{ ModelRecommendation }}\n </div>\n </div>\n }\n </div>\n </section>\n }\n\n <!-- ====================================================== -->\n <!-- TAB 6: COST & USAGE (D1) -->\n <!-- ====================================================== -->\n @if (ActiveTab === 'cost') {\n <section class=\"tab-section\">\n <div class=\"tab-section-header\">\n <i class=\"fa-solid fa-coins\"></i>\n <h1>Cost & Usage</h1>\n <div class=\"tab-header-actions\">\n <button class=\"drill-export-btn\" (click)=\"ExportTabDataCSV('cost-usage')\" title=\"Export CSV\">\n <i class=\"fa-solid fa-download\"></i> CSV\n </button>\n <button class=\"drill-export-btn\" (click)=\"PrintCurrentTab()\" title=\"Print (PDF alternative)\">\n <i class=\"fa-solid fa-print\"></i> Print\n </button>\n </div>\n </div>\n\n <!-- Filter Bar -->\n <div class=\"filter-bar\">\n <div class=\"date-chips\">\n @for (range of DateRanges; track range.Label) {\n <button\n class=\"date-chip\"\n [class.active]=\"ActiveDateRange === range.Label\"\n (click)=\"SetDateRange(range.Label)\"\n >{{ range.Label }}</button>\n }\n </div>\n </div>\n\n <!-- KPI Cards -->\n @if (CostKPIs.length > 0) {\n <div class=\"cost-kpi-row\">\n @for (kpi of CostKPIs; track kpi.Label) {\n <div class=\"cost-kpi-card\">\n <div class=\"cost-kpi-icon\"><i [class]=\"kpi.Icon\"></i></div>\n <div>\n <div class=\"cost-kpi-value\">{{ kpi.Value }}</div>\n <div class=\"cost-kpi-label\">{{ kpi.Label }}</div>\n <div class=\"cost-kpi-sub\">{{ kpi.SubLabel }}</div>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Per-Run Cost Table -->\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-table\"></i> Cost Breakdown by Run</h3>\n @if (CostPerRunRows.length > 0) {\n <div class=\"table-scroll\">\n <table class=\"data-table\">\n <thead>\n <tr>\n <th>Run ID</th>\n <th>Source</th>\n <th class=\"num\">Tokens</th>\n <th class=\"num\">Cost</th>\n <th>Started</th>\n </tr>\n </thead>\n <tbody>\n @for (row of CostPerRunRows; track row.RunID) {\n <tr>\n <td class=\"monospace-cell\">{{ row.RunID }}</td>\n <td>{{ row.Source }}</td>\n <td class=\"num\">{{ FormatNumber(row.Tokens) }}</td>\n <td class=\"num\">{{ row.Cost > 0 ? '$' + row.Cost.toFixed(4) : '$0.00' }}</td>\n <td class=\"muted\">{{ row.Started }}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-coins\"></i>\n <p>No cost data available yet. Run the pipeline to generate cost and token usage metrics.</p>\n <p class=\"empty-state-hint\">Cost data is aggregated from ContentProcessRunDetail records linked to AI Prompt Runs.</p>\n </div>\n }\n </div>\n </section>\n }\n\n </div><!-- /main-content -->\n </mj-left-nav-content>\n </div><!-- /analytics-layout -->\n}\n </mj-page-body>\n</mj-page-layout>\n", styles: ["/* ===================================================================\n Analytics & Insights Resource Component\n ================================================================= */\n\n.analytics-loading {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 400px;\n}\n\n/*\n Layout \u2014 <mj-left-nav> rail (with trending tags in [footer]) +\n <mj-left-nav-content>. The shared primitives own the rail's width, nav-item\n styling, sections, and busy state. Only the trending-section + tag-cloud\n styling stays bespoke (it's projected content, not nav chrome).\n*/\n.analytics-layout {\n display: flex;\n flex: 1;\n min-height: 0;\n}\n\n.trending-section {\n padding: 12px 16px 16px;\n}\n\n.trending-section h3 {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--mj-text-muted);\n margin: 0 0 10px;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.tag-cloud {\n display: flex;\n flex-wrap: wrap;\n gap: 4px 6px;\n line-height: 1.7;\n}\n\n.tag-cloud span {\n color: var(--mj-brand-primary);\n cursor: pointer;\n transition: opacity 0.15s;\n}\n\n.tag-cloud span:hover {\n opacity: 0.7;\n}\n\n.no-trending {\n color: var(--mj-text-muted) !important;\n font-size: 12px !important;\n font-style: italic;\n}\n\n.pipeline-status {\n padding: 12px 16px;\n border-top: 1px solid var(--mj-border-default);\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 11.5px;\n color: var(--mj-text-muted);\n}\n\n.status-dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: var(--mj-status-success);\n flex-shrink: 0;\n}\n\n.status-dot-error {\n background: var(--mj-status-error);\n}\n\n/* ===== MAIN CONTENT ===== */\n.main-content {\n flex: 1;\n overflow-y: auto;\n min-width: 0;\n}\n\n.tab-section {\n padding: 28px 32px 40px;\n}\n\n.tab-section-header {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-bottom: 20px;\n padding-bottom: 12px;\n border-bottom: 2px solid var(--mj-brand-primary);\n}\n\n.tab-section-header i {\n font-size: 18px;\n color: var(--mj-brand-primary);\n}\n\n.tab-section-header h1 {\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0;\n}\n\n/* ===== FILTER BAR ===== */\n.filter-bar {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 20px;\n flex-wrap: wrap;\n}\n\n.date-chips {\n display: flex;\n gap: 0;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.date-chip {\n padding: 6px 14px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface);\n cursor: pointer;\n border: none;\n border-right: 1px solid var(--mj-border-default);\n transition: all 0.15s;\n font-family: inherit;\n}\n\n.date-chip:last-child {\n border-right: none;\n}\n\n.date-chip:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.date-chip.active {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.filter-dropdown {\n padding: 6px 12px;\n font-size: 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n font-family: inherit;\n}\n\n/* ===== KPI CARDS ===== */\n.kpi-row {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 16px;\n margin-bottom: 20px;\n}\n\n.kpi-card {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 16px 18px;\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n transition: transform 0.15s, box-shadow 0.15s;\n cursor: pointer;\n}\n\n.kpi-card:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n}\n\n.kpi-label {\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-muted);\n margin-bottom: 4px;\n}\n\n.kpi-value {\n font-size: 28px;\n font-weight: 700;\n color: var(--mj-text-primary);\n line-height: 1.1;\n}\n\n.kpi-delta {\n font-size: 11px;\n font-weight: 500;\n margin-top: 4px;\n color: var(--mj-text-muted);\n}\n\n.kpi-delta.up {\n color: var(--mj-status-success);\n}\n\n.kpi-delta.down {\n color: var(--mj-status-error);\n}\n\n.kpi-sparkline {\n flex-shrink: 0;\n margin-left: 12px;\n margin-top: 6px;\n}\n\n/* ===== CARDS GRID ===== */\n.cards-grid {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 16px;\n}\n\n.widget-card {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 18px 20px;\n transition: transform 0.15s, box-shadow 0.15s;\n cursor: pointer;\n}\n\n.widget-card:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n}\n\n.widget-title {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 14px;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.widget-title i {\n color: var(--mj-brand-primary);\n font-size: 12px;\n}\n\n.widget-empty {\n text-align: center;\n color: var(--mj-text-muted);\n font-size: 12px;\n padding: 20px;\n}\n\n.widget-footnote {\n text-align: center;\n font-size: 10px;\n color: var(--mj-text-muted);\n margin-top: 10px;\n}\n\n/* ===== BAR CHART ===== */\n.bar-chart {\n display: flex;\n align-items: flex-end;\n gap: 8px;\n height: 120px;\n padding-top: 10px;\n}\n\n.bar-col {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 100%;\n justify-content: flex-end;\n}\n\n.bar {\n width: 100%;\n border-radius: 4px 4px 0 0;\n transition: height 0.3s;\n min-height: 2px;\n}\n\n.bar-label {\n font-size: 10px;\n color: var(--mj-text-muted);\n margin-top: 6px;\n}\n\n.bar-value {\n font-size: 10px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 4px;\n}\n\n/* ===== PROGRESS RINGS ===== */\n.rings-grid {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 12px;\n}\n\n.ring-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 6px 0;\n}\n\n.ring-label {\n font-size: 12px;\n color: var(--mj-text-primary);\n font-weight: 500;\n}\n\n.ring-stat {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n/* ===== GAUGE ===== */\n.gauge-container {\n display: flex;\n justify-content: center;\n margin-bottom: 8px;\n}\n\n/* ===== MINI HISTOGRAM ===== */\n.mini-histogram {\n display: flex;\n align-items: flex-end;\n gap: 3px;\n height: 32px;\n justify-content: center;\n}\n\n.mini-hist-bar {\n width: 14px;\n border-radius: 2px;\n}\n\n.mini-hist-label {\n text-align: center;\n font-size: 10px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n}\n\n/* ===== HORIZONTAL BARS ===== */\n.h-bar-list {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.h-bar-row {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.h-bar-name {\n font-size: 12px;\n color: var(--mj-text-secondary);\n width: 100px;\n flex-shrink: 0;\n text-align: right;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.h-bar-track {\n flex: 1;\n height: 20px;\n background: var(--mj-bg-surface-card);\n border-radius: 4px;\n overflow: hidden;\n}\n\n.h-bar-fill {\n height: 100%;\n border-radius: 4px;\n display: flex;\n align-items: center;\n padding-left: 8px;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n min-width: 36px;\n}\n\n/* ===== THROUGHPUT BARS ===== */\n.throughput-bars {\n display: flex;\n align-items: flex-end;\n gap: 4px;\n height: 110px;\n margin-bottom: 22px;\n}\n\n.tp-bar {\n flex: 1;\n border-radius: 3px 3px 0 0;\n position: relative;\n min-height: 4px;\n}\n\n.tp-bar-label {\n position: absolute;\n bottom: -18px;\n left: 50%;\n transform: translateX(-50%);\n font-size: 8px;\n color: var(--mj-text-muted);\n white-space: nowrap;\n}\n\n/* ===== TAXONOMY ===== */\n.taxonomy-ring-container {\n display: flex;\n justify-content: center;\n}\n\n.taxonomy-stats {\n display: flex;\n gap: 8px;\n margin-top: 12px;\n}\n\n.tax-stat {\n flex: 1;\n text-align: center;\n padding: 8px 4px;\n border-radius: 6px;\n font-size: 20px;\n font-weight: 700;\n}\n\n.tax-stat small {\n display: block;\n font-size: 10px;\n font-weight: 500;\n margin-top: 2px;\n}\n\n/* ===== LEGEND ===== */\n.legend {\n display: flex;\n gap: 16px;\n margin-top: 10px;\n flex-wrap: wrap;\n justify-content: center;\n}\n\n.legend-item {\n display: flex;\n align-items: center;\n gap: 5px;\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n.legend-dot {\n width: 10px;\n height: 10px;\n border-radius: 3px;\n flex-shrink: 0;\n}\n\n/* ===== DATA TABLES ===== */\n.table-scroll {\n overflow-x: auto;\n}\n\n.data-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 12.5px;\n}\n\n.data-table thead th {\n text-align: left;\n padding: 10px 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-text-muted);\n border-bottom: 2px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n white-space: nowrap;\n}\n\n.data-table tbody td {\n padding: 10px 12px;\n border-bottom: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-primary);\n vertical-align: middle;\n}\n\n.data-table tbody tr:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.data-table .num {\n text-align: right;\n font-variant-numeric: tabular-nums;\n}\n\n.muted {\n color: var(--mj-text-muted);\n}\n\n.monospace-cell {\n font-family: monospace;\n font-size: 11px;\n color: var(--mj-brand-primary);\n}\n\n.weight-bar {\n display: inline-block;\n height: 6px;\n border-radius: 3px;\n vertical-align: middle;\n margin-right: 6px;\n}\n\n/* ===== BADGES ===== */\n.badge {\n display: inline-block;\n padding: 2px 8px;\n border-radius: 10px;\n font-size: 10.5px;\n font-weight: 600;\n}\n\n.badge-success {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.badge-warning {\n background: color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.badge-error {\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.badge-info {\n background: color-mix(in srgb, var(--mj-status-info) 12%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n}\n\n/* ===== SUB-SECTIONS ===== */\n.sub-section {\n margin-top: 24px;\n}\n\n.sub-section h3 {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 12px;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.sub-section h3 i {\n font-size: 13px;\n color: var(--mj-brand-primary);\n}\n\n/* ===== EMPTY STATE ===== */\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 3rem 2rem;\n text-align: center;\n gap: 0.75rem;\n border: 2px dashed var(--mj-border-default);\n border-radius: 12px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n}\n\n.empty-state i {\n font-size: 2.5rem;\n color: var(--mj-text-disabled);\n}\n\n.empty-state p {\n margin: 0;\n font-size: 0.85rem;\n max-width: 400px;\n}\n\n/* ===== DRILL-DOWN PANEL ===== */\n.drill-down-panel {\n margin-top: 16px;\n margin-bottom: 16px;\n background: var(--mj-bg-surface);\n border: 2px solid var(--mj-brand-primary);\n border-radius: 10px;\n overflow: hidden;\n animation: slideDown 0.2s ease-out;\n}\n\n@keyframes slideDown {\n from {\n opacity: 0;\n max-height: 0;\n }\n to {\n opacity: 1;\n max-height: 600px;\n }\n}\n\n.drill-down-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 16px;\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.drill-down-title {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-brand-primary);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.drill-down-close {\n border: none;\n background: transparent;\n color: var(--mj-text-muted);\n cursor: pointer;\n font-size: 14px;\n padding: 4px 8px;\n border-radius: 4px;\n transition: all 0.15s;\n}\n\n.drill-down-close:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.drill-down-table-wrap {\n max-height: 400px;\n overflow-y: auto;\n padding: 8px;\n}\n\n.drill-action-col {\n width: 40px;\n text-align: center;\n padding: 6px !important;\n}\n\n.drill-open-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n border: 1px solid var(--mj-border-default);\n border-radius: 5px;\n background: transparent;\n color: var(--mj-text-muted);\n font-size: 10px;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.drill-open-btn:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.drill-down-header-actions {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.drill-export-btn {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 5px;\n background: transparent;\n color: var(--mj-text-secondary);\n font-size: 11px;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.drill-export-btn:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.sub-section-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 0;\n}\n\n.sub-section-header h3 {\n margin: 0;\n}\n\n.drill-down-empty {\n padding: 24px;\n text-align: center;\n color: var(--mj-text-muted);\n font-size: 13px;\n}\n\n/* ===== STACKED BAR CHART ===== */\n.stacked-bar-chart {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.stacked-row {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.stacked-label {\n width: 90px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n text-align: right;\n flex-shrink: 0;\n}\n\n.stacked-track {\n flex: 1;\n height: 22px;\n display: flex;\n border-radius: 4px;\n overflow: hidden;\n}\n\n.stacked-seg {\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 9px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n min-width: 20px;\n}\n\n/* ===== VERTICAL BAR CHART ===== */\n.v-bar-chart {\n display: flex;\n align-items: flex-end;\n gap: 24px;\n height: 140px;\n padding-top: 10px;\n justify-content: center;\n}\n\n.v-bar-col {\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 100%;\n justify-content: flex-end;\n min-width: 60px;\n}\n\n.v-bar {\n width: 48px;\n border-radius: 4px 4px 0 0;\n display: flex;\n align-items: flex-start;\n justify-content: center;\n padding-top: 4px;\n font-size: 11px;\n font-weight: 700;\n color: var(--mj-text-inverse);\n}\n\n.v-bar-label {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 8px;\n text-align: center;\n}\n\n.chart-footnote {\n text-align: center;\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 14px;\n}\n\n/* ===== TWO COLUMN ===== */\n.two-col {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 20px;\n}\n\n/* ===== SOURCE SELECTED ===== */\n.source-selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 5%, var(--mj-bg-surface));\n}\n\n/* ===== QUALITY BANDS ===== */\n.quality-bands {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.quality-band-row {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.quality-band-label {\n font-size: 11px;\n color: var(--mj-text-muted);\n width: 65px;\n text-align: right;\n flex-shrink: 0;\n}\n\n.quality-band-track {\n flex: 1;\n height: 18px;\n background: var(--mj-bg-surface-card);\n border-radius: 4px;\n overflow: hidden;\n}\n\n.quality-band-fill {\n height: 100%;\n border-radius: 4px;\n display: flex;\n align-items: center;\n padding-left: 8px;\n font-size: 10px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n min-width: 30px;\n}\n\n.source-quality-note {\n margin-top: 14px;\n padding: 10px;\n background: var(--mj-bg-surface-card);\n border-radius: 6px;\n font-size: 11px;\n color: var(--mj-text-secondary);\n}\n\n/* ===== SOURCE HEALTH ===== */\n.source-health-grid {\n display: grid;\n gap: 12px;\n}\n\n.source-health-card {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 14px;\n text-align: center;\n border-top: 3px solid;\n}\n\n.health-card-name {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-bottom: 4px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.health-card-value {\n font-size: 22px;\n font-weight: 700;\n}\n\n.health-card-label {\n font-size: 10px;\n color: var(--mj-text-muted);\n}\n\n/* ===== PIPELINE ===== */\n.pipeline-throughput-bars {\n display: flex;\n align-items: flex-end;\n gap: 3px;\n height: 110px;\n}\n\n.pipeline-bar {\n flex: 1;\n border-radius: 2px 2px 0 0;\n min-height: 3px;\n}\n\n.pipeline-date-labels {\n display: flex;\n justify-content: space-between;\n margin-top: 6px;\n font-size: 10px;\n color: var(--mj-text-muted);\n}\n\n/* ===== PROCESSING STAGES ===== */\n.stage-bars {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.stage-row {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.stage-name {\n width: 80px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n text-align: right;\n flex-shrink: 0;\n}\n\n.stage-track {\n flex: 1;\n height: 24px;\n background: var(--mj-bg-surface-card);\n border-radius: 4px;\n overflow: hidden;\n}\n\n.stage-fill {\n height: 100%;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: flex-end;\n padding-right: 8px;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n}\n\n.stage-time {\n width: 50px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-primary);\n text-align: right;\n flex-shrink: 0;\n}\n\n.stage-summary {\n display: flex;\n justify-content: space-between;\n margin-top: 14px;\n padding-top: 10px;\n border-top: 1px solid var(--mj-border-default);\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.stage-warning {\n color: var(--mj-text-muted);\n}\n\n/* ===== SUCCESS RATE ===== */\n.success-rate-display {\n display: flex;\n justify-content: center;\n gap: 48px;\n padding: 20px;\n}\n\n.success-rate-stat {\n text-align: center;\n}\n\n.success-rate-value {\n font-size: 32px;\n font-weight: 700;\n line-height: 1.1;\n}\n\n.success-rate-label {\n font-size: 12px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n}\n\n/* ===== PROGRESS ===== */\n.progress-track {\n width: 100px;\n height: 6px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 3px;\n overflow: hidden;\n display: inline-block;\n vertical-align: middle;\n margin-right: 6px;\n}\n\n.progress-fill {\n height: 100%;\n border-radius: 3px;\n}\n\n.progress-text {\n font-size: 11px;\n font-weight: 600;\n}\n\n/* ===== ERROR LOG ===== */\n.error-log {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.error-entry {\n display: flex;\n gap: 12px;\n padding: 10px 14px;\n background: color-mix(in srgb, var(--mj-status-error) 4%, var(--mj-bg-surface));\n border-left: 3px solid var(--mj-status-error);\n border-radius: 0 6px 6px 0;\n font-size: 12px;\n}\n\n.error-time {\n color: var(--mj-text-muted);\n font-size: 11px;\n white-space: nowrap;\n flex-shrink: 0;\n width: 130px;\n}\n\n.error-source {\n color: var(--mj-brand-primary);\n font-weight: 600;\n flex-shrink: 0;\n width: 120px;\n}\n\n.error-msg {\n color: var(--mj-text-secondary);\n}\n\n/* ===== HISTOGRAM ===== */\n.histogram {\n display: flex;\n align-items: flex-end;\n gap: 6px;\n height: 130px;\n padding-bottom: 24px;\n}\n\n.hist-bar-col {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 100%;\n justify-content: flex-end;\n}\n\n.hist-bar {\n width: 100%;\n border-radius: 3px 3px 0 0;\n display: flex;\n align-items: flex-start;\n justify-content: center;\n padding-top: 3px;\n font-size: 10px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n min-height: 2px;\n}\n\n.hist-label {\n font-size: 9px;\n color: var(--mj-text-muted);\n margin-top: 6px;\n text-align: center;\n}\n\n.confidence-stats {\n display: flex;\n justify-content: space-between;\n margin-top: 8px;\n padding: 10px;\n background: var(--mj-bg-surface-card);\n border-radius: 6px;\n font-size: 11px;\n color: var(--mj-text-muted);\n flex-wrap: wrap;\n gap: 8px;\n}\n\n/* ===== GROUPED BAR CHART ===== */\n.grouped-bar-chart {\n display: flex;\n align-items: flex-end;\n gap: 20px;\n height: 140px;\n justify-content: center;\n}\n\n.grouped-col {\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 100%;\n justify-content: flex-end;\n}\n\n.grouped-bars {\n display: flex;\n gap: 3px;\n align-items: flex-end;\n height: 100%;\n}\n\n.g-bar {\n width: 18px;\n border-radius: 3px 3px 0 0;\n min-height: 2px;\n}\n\n.grouped-label {\n font-size: 10px;\n color: var(--mj-text-muted);\n margin-top: 6px;\n text-align: center;\n}\n\n/* ===== ACCURACY CHART ===== */\n.accuracy-chart {\n position: relative;\n display: flex;\n margin: 0 10px;\n}\n\n.accuracy-y-labels {\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n font-size: 9px;\n color: var(--mj-text-muted);\n margin-right: 8px;\n height: 110px;\n}\n\n.accuracy-area {\n flex: 1;\n position: relative;\n height: 110px;\n border-left: 1px solid var(--mj-border-default);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.accuracy-grid-line {\n position: absolute;\n left: 0;\n right: 0;\n border-top: 1px dashed var(--mj-border-subtle);\n}\n\n.accuracy-svg {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n\n.accuracy-x-labels {\n display: flex;\n justify-content: space-between;\n margin-top: 8px;\n padding: 0 40px 0 40px;\n font-size: 10px;\n color: var(--mj-text-muted);\n}\n\n.accuracy-trend-text {\n text-align: center;\n margin-top: 10px;\n font-size: 12px;\n color: var(--mj-status-success);\n}\n\n/* ===== MODEL COMPARISON ===== */\n.model-grid {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 12px;\n}\n\n.model-card {\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n padding: 14px;\n text-align: center;\n border: 1px solid var(--mj-border-default);\n}\n\n.model-name {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 8px;\n}\n\n.model-score {\n font-size: 28px;\n font-weight: 700;\n line-height: 1;\n}\n\n.model-detail {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n}\n\n.model-recommendation {\n margin-top: 14px;\n padding: 12px 16px;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: flex-start;\n gap: 8px;\n}\n\n/* ===== RESPONSIVE ===== */\n@media (max-width: 1200px) {\n .cards-grid {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .kpi-row {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .model-grid {\n grid-template-columns: repeat(2, 1fr);\n }\n}\n\n@media (max-width: 768px) {\n .analytics-layout {\n flex-direction: column;\n }\n\n .analytics-sidebar {\n width: 100%;\n min-width: 100%;\n border-right: none;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .sidebar-nav {\n flex-direction: row;\n overflow-x: auto;\n }\n\n .nav-item {\n border-left: none;\n border-bottom: 3px solid transparent;\n white-space: nowrap;\n }\n\n .nav-item.active {\n border-left-color: transparent;\n border-bottom-color: var(--mj-brand-primary);\n }\n\n .trending-section,\n .sidebar-divider {\n display: none;\n }\n\n .tab-section {\n padding: 16px;\n }\n\n .cards-grid {\n grid-template-columns: 1fr;\n }\n\n .kpi-row {\n grid-template-columns: 1fr;\n }\n\n .two-col {\n grid-template-columns: 1fr;\n }\n\n .cost-kpi-row {\n grid-template-columns: 1fr;\n }\n}\n\n/* ===== COST & USAGE TAB (D1) ===== */\n\n.tab-header-actions {\n display: flex;\n gap: 8px;\n margin-left: auto;\n}\n\n.cost-kpi-row {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 16px;\n margin-bottom: 24px;\n}\n\n.cost-kpi-card {\n display: flex;\n gap: 14px;\n align-items: center;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n padding: 18px 20px;\n transition: box-shadow 0.15s ease;\n}\n\n.cost-kpi-card:hover {\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n}\n\n.cost-kpi-icon {\n width: 44px;\n height: 44px;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 18px;\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n flex-shrink: 0;\n}\n\n.cost-kpi-value {\n font-size: 22px;\n font-weight: 700;\n color: var(--mj-text-primary);\n line-height: 1.2;\n}\n\n.cost-kpi-label {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.03em;\n}\n\n.cost-kpi-sub {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n.empty-state-hint {\n font-size: 12px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n}\n\n/* ===== D5: PRINT STYLES ===== */\n\n@media print {\n .analytics-sidebar,\n .filter-bar,\n .tab-header-actions,\n .drill-down-close,\n .drill-export-btn,\n .drill-open-btn {\n display: none !important;\n }\n\n .analytics-layout {\n display: block;\n }\n\n .main-content {\n padding: 0;\n }\n\n .tab-section {\n padding: 0;\n }\n\n .widget-card,\n .cost-kpi-card,\n .kpi-card {\n break-inside: avoid;\n box-shadow: none;\n border: 1px solid var(--mj-border-default);\n }\n\n .data-table {\n font-size: 10px;\n }\n}\n\n/* \u2500\u2500 Co-Occurrence Section \u2500\u2500 */\n\n/* Constrain the co-occurrence sub-section so an empty state or large table\n does not blow out the page height and render the app unusable. */\n.co-occurrence-section {\n max-height: 500px;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.co-occurrence-section .table-scroll {\n overflow-y: auto;\n max-height: 400px;\n flex: 1;\n min-height: 0;\n}\n\n.co-occurrence-section .empty-state {\n max-height: 200px;\n overflow: hidden;\n}\n\n.co-occurrence-actions {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.co-occurrence-staleness {\n display: flex;\n align-items: center;\n gap: 5px;\n font-size: 0.78rem;\n color: var(--mj-text-muted);\n}\n"] }]
|
|
4260
4252
|
}], null, null); })();
|
|
4261
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AnalyticsResourceComponent, { className: "AnalyticsResourceComponent", filePath: "src/KnowledgeHub/components/analytics/analytics-resource.component.ts", lineNumber:
|
|
4253
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AnalyticsResourceComponent, { className: "AnalyticsResourceComponent", filePath: "src/KnowledgeHub/components/analytics/analytics-resource.component.ts", lineNumber: 223 }); })();
|
|
4262
4254
|
/** Tree-shaking prevention */
|
|
4263
4255
|
export function LoadAnalyticsResource() {
|
|
4264
4256
|
// Prevents tree-shaking
|