@memberjunction/ng-dashboards 5.34.0 → 5.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AI/components/agents/agent-configuration.component.d.ts +51 -0
- package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-configuration.component.js +399 -292
- package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts +8 -2
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js +87 -85
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts +75 -0
- package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/ai-analytics-resource.component.js +400 -89
- package/dist/AI/components/analytics/ai-analytics-resource.component.js.map +1 -1
- package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts +5 -0
- package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/analytics-filter-bar.component.js +184 -135
- package/dist/AI/components/analytics/analytics-filter-bar.component.js.map +1 -1
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts +8 -2
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.js +104 -103
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.js.map +1 -1
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts +8 -2
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.js +76 -74
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.js +67 -87
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.js.map +1 -1
- package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts +12 -19
- package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/model-performance/model-performance.component.js +96 -203
- package/dist/AI/components/analytics/model-performance/model-performance.component.js.map +1 -1
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js +110 -126
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js +61 -77
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +990 -992
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +6 -3
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +493 -490
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
- package/dist/AI/components/models/model-management.component.d.ts +17 -0
- package/dist/AI/components/models/model-management.component.d.ts.map +1 -1
- package/dist/AI/components/models/model-management.component.js +370 -425
- package/dist/AI/components/models/model-management.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.d.ts +17 -0
- package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.js +317 -357
- package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
- package/dist/AI/components/requests/agent-requests-resource.component.d.ts +11 -0
- package/dist/AI/components/requests/agent-requests-resource.component.d.ts.map +1 -1
- package/dist/AI/components/requests/agent-requests-resource.component.js +170 -175
- package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
- package/dist/AI/components/system/system-configuration.component.d.ts +19 -0
- package/dist/AI/components/system/system-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/system/system-configuration.component.js +403 -362
- package/dist/AI/components/system/system-configuration.component.js.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.js +781 -783
- package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts +8 -3
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.js +547 -521
- package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
- package/dist/Actions/components/actions-overview.component.d.ts +6 -0
- package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +79 -30
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.d.ts +9 -3
- package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.js +196 -142
- package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.d.ts +41 -1
- package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.js +388 -94
- package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
- package/dist/Actions/components/explorer/index.d.ts +0 -1
- package/dist/Actions/components/explorer/index.d.ts.map +1 -1
- package/dist/Actions/components/explorer/index.js +0 -1
- package/dist/Actions/components/explorer/index.js.map +1 -1
- package/dist/Admin/admin-data-schema.component.js +32 -40
- package/dist/Admin/admin-data-schema.component.js.map +1 -1
- package/dist/Admin/admin-dev-tools-resource.component.js +32 -40
- package/dist/Admin/admin-dev-tools-resource.component.js.map +1 -1
- package/dist/Admin/admin-identity-access.component.js +32 -40
- package/dist/Admin/admin-identity-access.component.js.map +1 -1
- package/dist/Admin/admin-monitoring.component.js +32 -40
- package/dist/Admin/admin-monitoring.component.js.map +1 -1
- package/dist/ApplicationRoles/application-roles-resource.component.js +76 -82
- package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
- package/dist/Archiving/components/archive-config-resource.component.d.ts.map +1 -1
- package/dist/Archiving/components/archive-config-resource.component.js +24 -5
- package/dist/Archiving/components/archive-config-resource.component.js.map +1 -1
- package/dist/Archiving/components/archive-runs-resource.component.d.ts.map +1 -1
- package/dist/Archiving/components/archive-runs-resource.component.js +24 -5
- package/dist/Archiving/components/archive-runs-resource.component.js.map +1 -1
- package/dist/Communication/communication-logs-resource.component.d.ts +1 -1
- package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-logs-resource.component.js +80 -99
- package/dist/Communication/communication-logs-resource.component.js.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.js +127 -106
- package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
- package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-providers-resource.component.js +44 -45
- package/dist/Communication/communication-providers-resource.component.js.map +1 -1
- package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-runs-resource.component.js +60 -58
- package/dist/Communication/communication-runs-resource.component.js.map +1 -1
- package/dist/Communication/communication-templates-resource.component.d.ts +1 -1
- package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-templates-resource.component.js +139 -162
- package/dist/Communication/communication-templates-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.d.ts +7 -0
- package/dist/Credentials/components/credentials-audit-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.js +310 -297
- package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.js +245 -266
- package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.d.ts +7 -0
- package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.js +381 -399
- package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-overview-resource.component.js +222 -228
- package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.d.ts +6 -0
- package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.js +294 -305
- package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts +8 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts.map +1 -1
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +21 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js.map +1 -1
- package/dist/DatabaseDesigner/components/entity-list.component.js +147 -160
- 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 +19 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.js +20 -16
- package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
- package/dist/Home/home-dashboard.component.d.ts +6 -0
- package/dist/Home/home-dashboard.component.d.ts.map +1 -1
- package/dist/Home/home-dashboard.component.js +521 -485
- package/dist/Home/home-dashboard.component.js.map +1 -1
- package/dist/Integration/components/activity/activity.component.d.ts +8 -0
- package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
- package/dist/Integration/components/activity/activity.component.js +309 -318
- package/dist/Integration/components/activity/activity.component.js.map +1 -1
- package/dist/Integration/components/connections/connections.component.js +866 -847
- package/dist/Integration/components/connections/connections.component.js.map +1 -1
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +234 -233
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
- package/dist/Integration/components/overview/overview.component.js +182 -163
- package/dist/Integration/components/overview/overview.component.js.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.d.ts +2 -0
- package/dist/Integration/components/pipelines/pipelines.component.d.ts.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.js +610 -606
- package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
- package/dist/Integration/components/schedules/schedules.component.js +241 -241
- package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
- package/dist/Integration/integration.module.d.ts +1 -1
- package/dist/Integration/integration.module.d.ts.map +1 -1
- package/dist/Integration/integration.module.js +28 -1
- package/dist/Integration/integration.module.js.map +1 -1
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +673 -674
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +54 -51
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +745 -703
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts +12 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +191 -120
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts +18 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +486 -532
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.js +152 -160
- package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.js +302 -319
- package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.js +234 -246
- package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
- package/dist/MCP/mcp-dashboard.component.d.ts +20 -0
- package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
- package/dist/MCP/mcp-dashboard.component.js +1248 -1338
- package/dist/MCP/mcp-dashboard.component.js.map +1 -1
- package/dist/MCP/mcp.module.d.ts +1 -1
- package/dist/MCP/mcp.module.d.ts.map +1 -1
- package/dist/MCP/mcp.module.js +34 -1
- package/dist/MCP/mcp.module.js.map +1 -1
- package/dist/Permissions/audit-log-resource.component.js +76 -85
- package/dist/Permissions/audit-log-resource.component.js.map +1 -1
- package/dist/Permissions/resource-access-resource.component.js +64 -69
- package/dist/Permissions/resource-access-resource.component.js.map +1 -1
- package/dist/Permissions/user-access-resource.component.js +63 -74
- package/dist/Permissions/user-access-resource.component.js.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js +2 -2
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts +2 -1
- package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-activity-resource.component.js +11 -12
- package/dist/Scheduling/components/scheduling-activity-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-activity.component.d.ts +9 -1
- package/dist/Scheduling/components/scheduling-activity.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-activity.component.js +250 -197
- package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts +2 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.js +11 -12
- package/dist/Scheduling/components/scheduling-jobs-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs.component.d.ts +9 -1
- package/dist/Scheduling/components/scheduling-jobs.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs.component.js +203 -147
- package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts +2 -1
- package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-overview-resource.component.js +11 -12
- package/dist/Scheduling/components/scheduling-overview-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-overview.component.d.ts +3 -1
- package/dist/Scheduling/components/scheduling-overview.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-overview.component.js +224 -190
- package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.d.ts +19 -6
- package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.js +262 -104
- package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts +4 -0
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.js +812 -784
- package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
- package/dist/Testing/components/testing-analytics-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-analytics-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-analytics-resource.component.js +7 -14
- package/dist/Testing/components/testing-analytics-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-analytics.component.d.ts +3 -1
- package/dist/Testing/components/testing-analytics.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-analytics.component.js +420 -393
- package/dist/Testing/components/testing-analytics.component.js.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.js +16 -19
- package/dist/Testing/components/testing-dashboard-tab-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab.component.d.ts +3 -1
- package/dist/Testing/components/testing-dashboard-tab.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab.component.js +157 -122
- package/dist/Testing/components/testing-dashboard-tab.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-explorer-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer-resource.component.js +7 -12
- package/dist/Testing/components/testing-explorer-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer.component.d.ts +8 -1
- package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer.component.js +587 -608
- package/dist/Testing/components/testing-explorer.component.js.map +1 -1
- package/dist/Testing/components/testing-review-resource.component.d.ts +4 -1
- package/dist/Testing/components/testing-review-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-review-resource.component.js +9 -12
- package/dist/Testing/components/testing-review-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-review.component.d.ts +3 -1
- package/dist/Testing/components/testing-review.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-review.component.js +310 -274
- package/dist/Testing/components/testing-review.component.js.map +1 -1
- package/dist/Testing/components/testing-runs-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-runs-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-runs-resource.component.js +16 -19
- package/dist/Testing/components/testing-runs-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-runs.component.d.ts +3 -1
- package/dist/Testing/components/testing-runs.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-runs.component.js +307 -273
- package/dist/Testing/components/testing-runs.component.js.map +1 -1
- package/dist/Testing/testing-dashboard.component.d.ts +2 -0
- package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
- package/dist/Testing/testing-dashboard.component.js +107 -93
- package/dist/Testing/testing-dashboard.component.js.map +1 -1
- package/dist/VersionHistory/components/diff-resource.component.js +185 -188
- package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/graph-resource.component.js +154 -184
- package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/labels-resource.component.d.ts +7 -0
- package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -1
- package/dist/VersionHistory/components/labels-resource.component.js +350 -354
- package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/restore-resource.component.js +163 -169
- package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
- package/dist/actions-dashboards.module.d.ts +15 -16
- package/dist/actions-dashboards.module.d.ts.map +1 -1
- package/dist/actions-dashboards.module.js +34 -11
- package/dist/actions-dashboards.module.js.map +1 -1
- package/dist/ai-dashboards.module.d.ts +45 -48
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +36 -10
- package/dist/ai-dashboards.module.js.map +1 -1
- package/dist/archiving-dashboards.module.d.ts +2 -1
- package/dist/archiving-dashboards.module.d.ts.map +1 -1
- package/dist/archiving-dashboards.module.js +12 -2
- package/dist/archiving-dashboards.module.js.map +1 -1
- package/dist/communication-dashboards.module.d.ts +2 -1
- package/dist/communication-dashboards.module.d.ts.map +1 -1
- package/dist/communication-dashboards.module.js +24 -3
- 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 +31 -1
- package/dist/core-dashboards.module.js.map +1 -1
- package/dist/credentials-dashboards.module.d.ts +1 -1
- package/dist/credentials-dashboards.module.d.ts.map +1 -1
- package/dist/credentials-dashboards.module.js +28 -1
- package/dist/credentials-dashboards.module.js.map +1 -1
- package/dist/lists-dashboards.module.d.ts +1 -1
- package/dist/lists-dashboards.module.d.ts.map +1 -1
- package/dist/lists-dashboards.module.js +28 -1
- package/dist/lists-dashboards.module.js.map +1 -1
- package/dist/public-api.d.ts +2 -2
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +3 -3
- package/dist/public-api.js.map +1 -1
- package/dist/scheduling-dashboards.module.d.ts +1 -1
- package/dist/scheduling-dashboards.module.d.ts.map +1 -1
- package/dist/scheduling-dashboards.module.js +31 -1
- package/dist/scheduling-dashboards.module.js.map +1 -1
- package/dist/testing-dashboards.module.d.ts +8 -7
- package/dist/testing-dashboards.module.d.ts.map +1 -1
- package/dist/testing-dashboards.module.js +30 -0
- package/dist/testing-dashboards.module.js.map +1 -1
- package/package.json +52 -52
- package/dist/AI/components/agents/agent-filter-panel.component.d.ts +0 -56
- package/dist/AI/components/agents/agent-filter-panel.component.d.ts.map +0 -1
- package/dist/AI/components/agents/agent-filter-panel.component.js +0 -285
- package/dist/AI/components/agents/agent-filter-panel.component.js.map +0 -1
- package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts +0 -49
- package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts.map +0 -1
- package/dist/AI/components/prompts/prompt-filter-panel.component.js +0 -184
- package/dist/AI/components/prompts/prompt-filter-panel.component.js.map +0 -1
- package/dist/AI/components/system/system-config-filter-panel.component.d.ts +0 -33
- package/dist/AI/components/system/system-config-filter-panel.component.d.ts.map +0 -1
- package/dist/AI/components/system/system-config-filter-panel.component.js +0 -144
- package/dist/AI/components/system/system-config-filter-panel.component.js.map +0 -1
- package/dist/Actions/components/explorer/action-toolbar.component.d.ts +0 -63
- package/dist/Actions/components/explorer/action-toolbar.component.d.ts.map +0 -1
- package/dist/Actions/components/explorer/action-toolbar.component.js +0 -463
- package/dist/Actions/components/explorer/action-toolbar.component.js.map +0 -1
|
@@ -23,21 +23,22 @@ import { BaseResourceComponent, NavigationService } from '@memberjunction/ng-sha
|
|
|
23
23
|
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
|
+
import * as i3 from "@memberjunction/ng-ui-components";
|
|
26
27
|
const _forTrack0 = ($index, $item) => $item.ID;
|
|
27
28
|
const _forTrack1 = ($index, $item) => $item.Name;
|
|
28
29
|
const _forTrack2 = ($index, $item) => $item.Label;
|
|
29
30
|
const _forTrack3 = ($index, $item) => $item.EntityName;
|
|
30
31
|
const _forTrack4 = ($index, $item) => $item.TagAName + $item.TagBName;
|
|
31
32
|
const _forTrack5 = ($index, $item) => $item.RunID;
|
|
32
|
-
function
|
|
33
|
-
i0.ɵɵelementStart(0, "div",
|
|
34
|
-
i0.ɵɵelement(1, "mj-loading",
|
|
33
|
+
function AnalyticsResourceComponent_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
34
|
+
i0.ɵɵelementStart(0, "div", 4);
|
|
35
|
+
i0.ɵɵelement(1, "mj-loading", 6);
|
|
35
36
|
i0.ɵɵelementEnd();
|
|
36
37
|
} }
|
|
37
|
-
function
|
|
38
|
+
function AnalyticsResourceComponent_Conditional_6_For_4_Template(rf, ctx) { if (rf & 1) {
|
|
38
39
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
39
40
|
i0.ɵɵelementStart(0, "button", 18);
|
|
40
|
-
i0.ɵɵlistener("click", function
|
|
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)); });
|
|
41
42
|
i0.ɵɵelement(1, "i");
|
|
42
43
|
i0.ɵɵtext(2);
|
|
43
44
|
i0.ɵɵelementEnd();
|
|
@@ -50,7 +51,7 @@ function AnalyticsResourceComponent_Conditional_1_For_8_Template(rf, ctx) { if (
|
|
|
50
51
|
i0.ɵɵadvance();
|
|
51
52
|
i0.ɵɵtextInterpolate1(" ", nav_r2.Label, " ");
|
|
52
53
|
} }
|
|
53
|
-
function
|
|
54
|
+
function AnalyticsResourceComponent_Conditional_6_For_12_Template(rf, ctx) { if (rf & 1) {
|
|
54
55
|
i0.ɵɵelementStart(0, "span");
|
|
55
56
|
i0.ɵɵtext(1);
|
|
56
57
|
i0.ɵɵelementEnd();
|
|
@@ -60,15 +61,15 @@ function AnalyticsResourceComponent_Conditional_1_For_16_Template(rf, ctx) { if
|
|
|
60
61
|
i0.ɵɵadvance();
|
|
61
62
|
i0.ɵɵtextInterpolate(tag_r4.Name);
|
|
62
63
|
} }
|
|
63
|
-
function
|
|
64
|
-
i0.ɵɵelementStart(0, "span",
|
|
64
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
65
|
+
i0.ɵɵelementStart(0, "span", 15);
|
|
65
66
|
i0.ɵɵtext(1, "No trending tags yet");
|
|
66
67
|
i0.ɵɵelementEnd();
|
|
67
68
|
} }
|
|
68
|
-
function
|
|
69
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_For_8_Template(rf, ctx) { if (rf & 1) {
|
|
69
70
|
const _r6 = i0.ɵɵgetCurrentView();
|
|
70
|
-
i0.ɵɵelementStart(0, "button",
|
|
71
|
-
i0.ɵɵlistener("click", function
|
|
71
|
+
i0.ɵɵelementStart(0, "button", 74);
|
|
72
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_15_For_8_Template_button_click_0_listener() { const range_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.SetDateRange(range_r7.Label)); });
|
|
72
73
|
i0.ɵɵtext(1);
|
|
73
74
|
i0.ɵɵelementEnd();
|
|
74
75
|
} if (rf & 2) {
|
|
@@ -78,7 +79,7 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_22_For_8_Template(
|
|
|
78
79
|
i0.ɵɵadvance();
|
|
79
80
|
i0.ɵɵtextInterpolate(range_r7.Label);
|
|
80
81
|
} }
|
|
81
|
-
function
|
|
82
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_For_11_Template(rf, ctx) { if (rf & 1) {
|
|
82
83
|
i0.ɵɵelementStart(0, "option", 25);
|
|
83
84
|
i0.ɵɵtext(1);
|
|
84
85
|
i0.ɵɵelementEnd();
|
|
@@ -88,30 +89,30 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_22_For_11_Template
|
|
|
88
89
|
i0.ɵɵadvance();
|
|
89
90
|
i0.ɵɵtextInterpolate(opt_r8);
|
|
90
91
|
} }
|
|
91
|
-
function
|
|
92
|
-
i0.ɵɵelement(0, "i", 78);
|
|
93
|
-
} }
|
|
94
|
-
function AnalyticsResourceComponent_Conditional_1_Conditional_22_For_14_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
92
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_For_14_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
95
93
|
i0.ɵɵelement(0, "i", 79);
|
|
96
94
|
} }
|
|
97
|
-
function
|
|
95
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_For_14_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
96
|
+
i0.ɵɵelement(0, "i", 80);
|
|
97
|
+
} }
|
|
98
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_For_14_Template(rf, ctx) { if (rf & 1) {
|
|
98
99
|
const _r9 = i0.ɵɵgetCurrentView();
|
|
99
|
-
i0.ɵɵelementStart(0, "div",
|
|
100
|
-
i0.ɵɵlistener("click", function
|
|
101
|
-
i0.ɵɵelementStart(1, "div")(2, "div",
|
|
100
|
+
i0.ɵɵelementStart(0, "div", 75);
|
|
101
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_15_For_14_Template_div_click_0_listener() { const kpi_r10 = i0.ɵɵrestoreView(_r9).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.OpenDrillDown(kpi_r10.DrillDownKey)); });
|
|
102
|
+
i0.ɵɵelementStart(1, "div")(2, "div", 76);
|
|
102
103
|
i0.ɵɵtext(3);
|
|
103
104
|
i0.ɵɵelementEnd();
|
|
104
|
-
i0.ɵɵelementStart(4, "div",
|
|
105
|
+
i0.ɵɵelementStart(4, "div", 77);
|
|
105
106
|
i0.ɵɵtext(5);
|
|
106
107
|
i0.ɵɵelementEnd();
|
|
107
|
-
i0.ɵɵelementStart(6, "div",
|
|
108
|
-
i0.ɵɵconditionalCreate(7,
|
|
108
|
+
i0.ɵɵelementStart(6, "div", 78);
|
|
109
|
+
i0.ɵɵconditionalCreate(7, AnalyticsResourceComponent_Conditional_6_Conditional_15_For_14_Conditional_7_Template, 1, 0, "i", 79)(8, AnalyticsResourceComponent_Conditional_6_Conditional_15_For_14_Conditional_8_Template, 1, 0, "i", 80);
|
|
109
110
|
i0.ɵɵtext(9);
|
|
110
111
|
i0.ɵɵelementEnd()();
|
|
111
|
-
i0.ɵɵelementStart(10, "div",
|
|
112
|
+
i0.ɵɵelementStart(10, "div", 81);
|
|
112
113
|
i0.ɵɵnamespaceSVG();
|
|
113
|
-
i0.ɵɵelementStart(11, "svg",
|
|
114
|
-
i0.ɵɵelement(12, "polyline",
|
|
114
|
+
i0.ɵɵelementStart(11, "svg", 82);
|
|
115
|
+
i0.ɵɵelement(12, "polyline", 83);
|
|
115
116
|
i0.ɵɵelementEnd()()();
|
|
116
117
|
} if (rf & 2) {
|
|
117
118
|
const kpi_r10 = ctx.$implicit;
|
|
@@ -128,18 +129,18 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_22_For_14_Template
|
|
|
128
129
|
i0.ɵɵadvance(3);
|
|
129
130
|
i0.ɵɵattribute("points", kpi_r10.SparklinePoints)("stroke", kpi_r10.SparklineColor);
|
|
130
131
|
} }
|
|
131
|
-
function
|
|
132
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
132
133
|
const _r12 = i0.ɵɵgetCurrentView();
|
|
133
|
-
i0.ɵɵelementStart(0, "button",
|
|
134
|
-
i0.ɵɵlistener("click", function
|
|
135
|
-
i0.ɵɵelement(1, "i",
|
|
134
|
+
i0.ɵɵelementStart(0, "button", 94);
|
|
135
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r12); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.ExportDrillDownCSV()); });
|
|
136
|
+
i0.ɵɵelement(1, "i", 95);
|
|
136
137
|
i0.ɵɵtext(2, " CSV ");
|
|
137
138
|
i0.ɵɵelementEnd();
|
|
138
139
|
} }
|
|
139
|
-
function
|
|
140
|
-
i0.ɵɵelement(0, "mj-loading",
|
|
140
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
141
|
+
i0.ɵɵelement(0, "mj-loading", 91);
|
|
141
142
|
} }
|
|
142
|
-
function
|
|
143
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Conditional_10_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
143
144
|
i0.ɵɵelementStart(0, "th");
|
|
144
145
|
i0.ɵɵtext(1);
|
|
145
146
|
i0.ɵɵelementEnd();
|
|
@@ -148,10 +149,10 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_15_
|
|
|
148
149
|
i0.ɵɵadvance();
|
|
149
150
|
i0.ɵɵtextInterpolate(col_r13);
|
|
150
151
|
} }
|
|
151
|
-
function
|
|
152
|
-
i0.ɵɵelement(0, "th",
|
|
152
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Conditional_10_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
153
|
+
i0.ɵɵelement(0, "th", 97);
|
|
153
154
|
} }
|
|
154
|
-
function
|
|
155
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Conditional_10_For_9_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
155
156
|
i0.ɵɵelementStart(0, "td");
|
|
156
157
|
i0.ɵɵtext(1);
|
|
157
158
|
i0.ɵɵelementEnd();
|
|
@@ -161,26 +162,26 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_15_
|
|
|
161
162
|
i0.ɵɵadvance();
|
|
162
163
|
i0.ɵɵtextInterpolate(row_r15[col_r14]);
|
|
163
164
|
} }
|
|
164
|
-
function
|
|
165
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Conditional_10_For_9_Conditional_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
165
166
|
const _r16 = i0.ɵɵgetCurrentView();
|
|
166
|
-
i0.ɵɵelementStart(0, "button",
|
|
167
|
-
i0.ɵɵlistener("click", function
|
|
168
|
-
i0.ɵɵelement(1, "i",
|
|
167
|
+
i0.ɵɵelementStart(0, "button", 99);
|
|
168
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Conditional_10_For_9_Conditional_3_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r16); const row_r15 = i0.ɵɵnextContext(2).$implicit; const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.OpenDrillDownRecord(row_r15)); });
|
|
169
|
+
i0.ɵɵelement(1, "i", 100);
|
|
169
170
|
i0.ɵɵelementEnd();
|
|
170
171
|
} }
|
|
171
|
-
function
|
|
172
|
-
i0.ɵɵelementStart(0, "td",
|
|
173
|
-
i0.ɵɵconditionalCreate(1,
|
|
172
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Conditional_10_For_9_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
173
|
+
i0.ɵɵelementStart(0, "td", 97);
|
|
174
|
+
i0.ɵɵconditionalCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Conditional_10_For_9_Conditional_3_Conditional_1_Template, 2, 0, "button", 98);
|
|
174
175
|
i0.ɵɵelementEnd();
|
|
175
176
|
} if (rf & 2) {
|
|
176
177
|
const row_r15 = i0.ɵɵnextContext().$implicit;
|
|
177
178
|
i0.ɵɵadvance();
|
|
178
179
|
i0.ɵɵconditional(row_r15["_RecordID"] ? 1 : -1);
|
|
179
180
|
} }
|
|
180
|
-
function
|
|
181
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Conditional_10_For_9_Template(rf, ctx) { if (rf & 1) {
|
|
181
182
|
i0.ɵɵelementStart(0, "tr");
|
|
182
|
-
i0.ɵɵrepeaterCreate(1,
|
|
183
|
-
i0.ɵɵconditionalCreate(3,
|
|
183
|
+
i0.ɵɵrepeaterCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Conditional_10_For_9_For_2_Template, 2, 1, "td", null, i0.ɵɵrepeaterTrackByIdentity);
|
|
184
|
+
i0.ɵɵconditionalCreate(3, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Conditional_10_For_9_Conditional_3_Template, 2, 1, "td", 97);
|
|
184
185
|
i0.ɵɵelementEnd();
|
|
185
186
|
} if (rf & 2) {
|
|
186
187
|
const ctx_r2 = i0.ɵɵnextContext(5);
|
|
@@ -189,13 +190,13 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_15_
|
|
|
189
190
|
i0.ɵɵadvance(2);
|
|
190
191
|
i0.ɵɵconditional(ctx_r2.DrillDownHasActions ? 3 : -1);
|
|
191
192
|
} }
|
|
192
|
-
function
|
|
193
|
-
i0.ɵɵelementStart(0, "div",
|
|
194
|
-
i0.ɵɵrepeaterCreate(4,
|
|
195
|
-
i0.ɵɵconditionalCreate(6,
|
|
193
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
194
|
+
i0.ɵɵelementStart(0, "div", 92)(1, "table", 96)(2, "thead")(3, "tr");
|
|
195
|
+
i0.ɵɵrepeaterCreate(4, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Conditional_10_For_5_Template, 2, 1, "th", null, i0.ɵɵrepeaterTrackByIdentity);
|
|
196
|
+
i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Conditional_10_Conditional_6_Template, 1, 0, "th", 97);
|
|
196
197
|
i0.ɵɵelementEnd()();
|
|
197
198
|
i0.ɵɵelementStart(7, "tbody");
|
|
198
|
-
i0.ɵɵrepeaterCreate(8,
|
|
199
|
+
i0.ɵɵrepeaterCreate(8, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Conditional_10_For_9_Template, 4, 1, "tr", null, i0.ɵɵcomponentInstance().TrackByIndex, true);
|
|
199
200
|
i0.ɵɵelementEnd()()();
|
|
200
201
|
} if (rf & 2) {
|
|
201
202
|
const ctx_r2 = i0.ɵɵnextContext(4);
|
|
@@ -206,24 +207,24 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_15_
|
|
|
206
207
|
i0.ɵɵadvance(2);
|
|
207
208
|
i0.ɵɵrepeater(ctx_r2.DrillDownData);
|
|
208
209
|
} }
|
|
209
|
-
function
|
|
210
|
-
i0.ɵɵelementStart(0, "div",
|
|
210
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
211
|
+
i0.ɵɵelementStart(0, "div", 93);
|
|
211
212
|
i0.ɵɵtext(1, "No data available");
|
|
212
213
|
i0.ɵɵelementEnd();
|
|
213
214
|
} }
|
|
214
|
-
function
|
|
215
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
215
216
|
const _r11 = i0.ɵɵgetCurrentView();
|
|
216
|
-
i0.ɵɵelementStart(0, "div", 28)(1, "div",
|
|
217
|
-
i0.ɵɵelement(3, "i",
|
|
217
|
+
i0.ɵɵelementStart(0, "div", 28)(1, "div", 84)(2, "span", 85);
|
|
218
|
+
i0.ɵɵelement(3, "i", 86);
|
|
218
219
|
i0.ɵɵtext(4, " Detail View");
|
|
219
220
|
i0.ɵɵelementEnd();
|
|
220
|
-
i0.ɵɵelementStart(5, "div",
|
|
221
|
-
i0.ɵɵconditionalCreate(6,
|
|
222
|
-
i0.ɵɵelementStart(7, "button",
|
|
223
|
-
i0.ɵɵlistener("click", function
|
|
224
|
-
i0.ɵɵelement(8, "i",
|
|
221
|
+
i0.ɵɵelementStart(5, "div", 87);
|
|
222
|
+
i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Conditional_6_Template, 3, 0, "button", 88);
|
|
223
|
+
i0.ɵɵelementStart(7, "button", 89);
|
|
224
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r11); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.CloseDrillDown()); });
|
|
225
|
+
i0.ɵɵelement(8, "i", 90);
|
|
225
226
|
i0.ɵɵelementEnd()()();
|
|
226
|
-
i0.ɵɵconditionalCreate(9,
|
|
227
|
+
i0.ɵɵconditionalCreate(9, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Conditional_9_Template, 1, 0, "mj-loading", 91)(10, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Conditional_10_Template, 10, 1, "div", 92)(11, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Conditional_11_Template, 2, 0, "div", 93);
|
|
227
228
|
i0.ɵɵelementEnd();
|
|
228
229
|
} if (rf & 2) {
|
|
229
230
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
@@ -232,12 +233,12 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_15_
|
|
|
232
233
|
i0.ɵɵadvance(3);
|
|
233
234
|
i0.ɵɵconditional(ctx_r2.IsDrillDownLoading ? 9 : ctx_r2.DrillDownData.length > 0 ? 10 : 11);
|
|
234
235
|
} }
|
|
235
|
-
function
|
|
236
|
-
i0.ɵɵelementStart(0, "div",
|
|
236
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_For_23_Template(rf, ctx) { if (rf & 1) {
|
|
237
|
+
i0.ɵɵelementStart(0, "div", 34)(1, "div", 101);
|
|
237
238
|
i0.ɵɵtext(2);
|
|
238
239
|
i0.ɵɵelementEnd();
|
|
239
|
-
i0.ɵɵelement(3, "div",
|
|
240
|
-
i0.ɵɵelementStart(4, "div",
|
|
240
|
+
i0.ɵɵelement(3, "div", 102);
|
|
241
|
+
i0.ɵɵelementStart(4, "div", 103);
|
|
241
242
|
i0.ɵɵtext(5);
|
|
242
243
|
i0.ɵɵelementEnd()();
|
|
243
244
|
} if (rf & 2) {
|
|
@@ -249,19 +250,19 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_22_For_23_Template
|
|
|
249
250
|
i0.ɵɵadvance(2);
|
|
250
251
|
i0.ɵɵtextInterpolate(bar_r17.Label);
|
|
251
252
|
} }
|
|
252
|
-
function
|
|
253
|
-
i0.ɵɵelementStart(0, "div",
|
|
253
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_For_30_Template(rf, ctx) { if (rf & 1) {
|
|
254
|
+
i0.ɵɵelementStart(0, "div", 37);
|
|
254
255
|
i0.ɵɵnamespaceSVG();
|
|
255
|
-
i0.ɵɵelementStart(1, "svg",
|
|
256
|
-
i0.ɵɵelement(2, "circle",
|
|
257
|
-
i0.ɵɵelementStart(4, "text",
|
|
256
|
+
i0.ɵɵelementStart(1, "svg", 104);
|
|
257
|
+
i0.ɵɵelement(2, "circle", 105)(3, "circle", 106);
|
|
258
|
+
i0.ɵɵelementStart(4, "text", 107);
|
|
258
259
|
i0.ɵɵtext(5);
|
|
259
260
|
i0.ɵɵelementEnd()();
|
|
260
261
|
i0.ɵɵnamespaceHTML();
|
|
261
|
-
i0.ɵɵelementStart(6, "div")(7, "div",
|
|
262
|
+
i0.ɵɵelementStart(6, "div")(7, "div", 108);
|
|
262
263
|
i0.ɵɵtext(8);
|
|
263
264
|
i0.ɵɵelementEnd();
|
|
264
|
-
i0.ɵɵelementStart(9, "div",
|
|
265
|
+
i0.ɵɵelementStart(9, "div", 109);
|
|
265
266
|
i0.ɵɵtext(10);
|
|
266
267
|
i0.ɵɵelementEnd()()();
|
|
267
268
|
} if (rf & 2) {
|
|
@@ -276,23 +277,23 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_22_For_30_Template
|
|
|
276
277
|
i0.ɵɵadvance(2);
|
|
277
278
|
i0.ɵɵtextInterpolate2("", ctx_r2.FormatNumber(entity_r18.Tagged), " / ", ctx_r2.FormatNumber(entity_r18.Total));
|
|
278
279
|
} }
|
|
279
|
-
function
|
|
280
|
-
i0.ɵɵelementStart(0, "div",
|
|
280
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_31_Template(rf, ctx) { if (rf & 1) {
|
|
281
|
+
i0.ɵɵelementStart(0, "div", 38);
|
|
281
282
|
i0.ɵɵtext(1, "No content types found");
|
|
282
283
|
i0.ɵɵelementEnd();
|
|
283
284
|
} }
|
|
284
|
-
function
|
|
285
|
-
i0.ɵɵelement(0, "div",
|
|
285
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_For_54_Template(rf, ctx) { if (rf & 1) {
|
|
286
|
+
i0.ɵɵelement(0, "div", 110);
|
|
286
287
|
} if (rf & 2) {
|
|
287
288
|
const bin_r19 = ctx.$implicit;
|
|
288
289
|
i0.ɵɵstyleProp("height", bin_r19.Height, "px")("background", bin_r19.Color);
|
|
289
290
|
i0.ɵɵproperty("title", bin_r19.Title);
|
|
290
291
|
} }
|
|
291
|
-
function
|
|
292
|
-
i0.ɵɵelementStart(0, "div",
|
|
292
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_For_63_Template(rf, ctx) { if (rf & 1) {
|
|
293
|
+
i0.ɵɵelementStart(0, "div", 56)(1, "div", 111);
|
|
293
294
|
i0.ɵɵtext(2);
|
|
294
295
|
i0.ɵɵelementEnd();
|
|
295
|
-
i0.ɵɵelementStart(3, "div",
|
|
296
|
+
i0.ɵɵelementStart(3, "div", 112)(4, "div", 113);
|
|
296
297
|
i0.ɵɵtext(5);
|
|
297
298
|
i0.ɵɵelementEnd()()();
|
|
298
299
|
} if (rf & 2) {
|
|
@@ -304,13 +305,13 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_22_For_63_Template
|
|
|
304
305
|
i0.ɵɵadvance();
|
|
305
306
|
i0.ɵɵtextInterpolate(source_r20.AvgTagsPerItem);
|
|
306
307
|
} }
|
|
307
|
-
function
|
|
308
|
-
i0.ɵɵelementStart(0, "div",
|
|
308
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_64_Template(rf, ctx) { if (rf & 1) {
|
|
309
|
+
i0.ɵɵelementStart(0, "div", 38);
|
|
309
310
|
i0.ɵɵtext(1, "No source data");
|
|
310
311
|
i0.ɵɵelementEnd();
|
|
311
312
|
} }
|
|
312
|
-
function
|
|
313
|
-
i0.ɵɵelementStart(0, "div",
|
|
313
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_For_73_Template(rf, ctx) { if (rf & 1) {
|
|
314
|
+
i0.ɵɵelementStart(0, "div", 114)(1, "span", 115);
|
|
314
315
|
i0.ɵɵtext(2);
|
|
315
316
|
i0.ɵɵelementEnd()();
|
|
316
317
|
} if (rf & 2) {
|
|
@@ -319,15 +320,15 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_22_For_73_Template
|
|
|
319
320
|
i0.ɵɵadvance(2);
|
|
320
321
|
i0.ɵɵtextInterpolate(day_r21.Label);
|
|
321
322
|
} }
|
|
322
|
-
function
|
|
323
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_For_89_Template(rf, ctx) { if (rf & 1) {
|
|
323
324
|
i0.ɵɵnamespaceSVG();
|
|
324
|
-
i0.ɵɵelement(0, "circle",
|
|
325
|
+
i0.ɵɵelement(0, "circle", 69);
|
|
325
326
|
} if (rf & 2) {
|
|
326
327
|
const seg_r22 = ctx.$implicit;
|
|
327
328
|
i0.ɵɵattribute("stroke", seg_r22.Color)("stroke-dasharray", seg_r22.StrokeDash)("stroke-dashoffset", seg_r22.StrokeOffset);
|
|
328
329
|
} }
|
|
329
|
-
function
|
|
330
|
-
i0.ɵɵelementStart(0, "div",
|
|
330
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_For_96_Template(rf, ctx) { if (rf & 1) {
|
|
331
|
+
i0.ɵɵelementStart(0, "div", 116);
|
|
331
332
|
i0.ɵɵtext(1);
|
|
332
333
|
i0.ɵɵelementStart(2, "small");
|
|
333
334
|
i0.ɵɵtext(3);
|
|
@@ -340,10 +341,10 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_22_For_96_Template
|
|
|
340
341
|
i0.ɵɵadvance(2);
|
|
341
342
|
i0.ɵɵtextInterpolate(stat_r23.Label);
|
|
342
343
|
} }
|
|
343
|
-
function
|
|
344
|
-
i0.ɵɵelement(0, "mj-loading",
|
|
344
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_97_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
345
|
+
i0.ɵɵelement(0, "mj-loading", 91);
|
|
345
346
|
} }
|
|
346
|
-
function
|
|
347
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_97_Conditional_8_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
347
348
|
i0.ɵɵelementStart(0, "th");
|
|
348
349
|
i0.ɵɵtext(1);
|
|
349
350
|
i0.ɵɵelementEnd();
|
|
@@ -352,10 +353,10 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_97_
|
|
|
352
353
|
i0.ɵɵadvance();
|
|
353
354
|
i0.ɵɵtextInterpolate(col_r25);
|
|
354
355
|
} }
|
|
355
|
-
function
|
|
356
|
-
i0.ɵɵelement(0, "th",
|
|
356
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_97_Conditional_8_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
357
|
+
i0.ɵɵelement(0, "th", 97);
|
|
357
358
|
} }
|
|
358
|
-
function
|
|
359
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_97_Conditional_8_For_9_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
359
360
|
i0.ɵɵelementStart(0, "td");
|
|
360
361
|
i0.ɵɵtext(1);
|
|
361
362
|
i0.ɵɵelementEnd();
|
|
@@ -365,26 +366,26 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_97_
|
|
|
365
366
|
i0.ɵɵadvance();
|
|
366
367
|
i0.ɵɵtextInterpolate(row_r27[col_r26]);
|
|
367
368
|
} }
|
|
368
|
-
function
|
|
369
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_97_Conditional_8_For_9_Conditional_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
369
370
|
const _r28 = i0.ɵɵgetCurrentView();
|
|
370
|
-
i0.ɵɵelementStart(0, "button",
|
|
371
|
-
i0.ɵɵlistener("click", function
|
|
372
|
-
i0.ɵɵelement(1, "i",
|
|
371
|
+
i0.ɵɵelementStart(0, "button", 99);
|
|
372
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_97_Conditional_8_For_9_Conditional_3_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r28); const row_r27 = i0.ɵɵnextContext(2).$implicit; const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.OpenDrillDownRecord(row_r27)); });
|
|
373
|
+
i0.ɵɵelement(1, "i", 100);
|
|
373
374
|
i0.ɵɵelementEnd();
|
|
374
375
|
} }
|
|
375
|
-
function
|
|
376
|
-
i0.ɵɵelementStart(0, "td",
|
|
377
|
-
i0.ɵɵconditionalCreate(1,
|
|
376
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_97_Conditional_8_For_9_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
377
|
+
i0.ɵɵelementStart(0, "td", 97);
|
|
378
|
+
i0.ɵɵconditionalCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_97_Conditional_8_For_9_Conditional_3_Conditional_1_Template, 2, 0, "button", 98);
|
|
378
379
|
i0.ɵɵelementEnd();
|
|
379
380
|
} if (rf & 2) {
|
|
380
381
|
const row_r27 = i0.ɵɵnextContext().$implicit;
|
|
381
382
|
i0.ɵɵadvance();
|
|
382
383
|
i0.ɵɵconditional(row_r27["_RecordID"] ? 1 : -1);
|
|
383
384
|
} }
|
|
384
|
-
function
|
|
385
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_97_Conditional_8_For_9_Template(rf, ctx) { if (rf & 1) {
|
|
385
386
|
i0.ɵɵelementStart(0, "tr");
|
|
386
|
-
i0.ɵɵrepeaterCreate(1,
|
|
387
|
-
i0.ɵɵconditionalCreate(3,
|
|
387
|
+
i0.ɵɵrepeaterCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_97_Conditional_8_For_9_For_2_Template, 2, 1, "td", null, i0.ɵɵrepeaterTrackByIdentity);
|
|
388
|
+
i0.ɵɵconditionalCreate(3, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_97_Conditional_8_For_9_Conditional_3_Template, 2, 1, "td", 97);
|
|
388
389
|
i0.ɵɵelementEnd();
|
|
389
390
|
} if (rf & 2) {
|
|
390
391
|
const ctx_r2 = i0.ɵɵnextContext(5);
|
|
@@ -393,13 +394,13 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_97_
|
|
|
393
394
|
i0.ɵɵadvance(2);
|
|
394
395
|
i0.ɵɵconditional(ctx_r2.DrillDownHasActions ? 3 : -1);
|
|
395
396
|
} }
|
|
396
|
-
function
|
|
397
|
-
i0.ɵɵelementStart(0, "div",
|
|
398
|
-
i0.ɵɵrepeaterCreate(4,
|
|
399
|
-
i0.ɵɵconditionalCreate(6,
|
|
397
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_97_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
398
|
+
i0.ɵɵelementStart(0, "div", 92)(1, "table", 96)(2, "thead")(3, "tr");
|
|
399
|
+
i0.ɵɵrepeaterCreate(4, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_97_Conditional_8_For_5_Template, 2, 1, "th", null, i0.ɵɵrepeaterTrackByIdentity);
|
|
400
|
+
i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_97_Conditional_8_Conditional_6_Template, 1, 0, "th", 97);
|
|
400
401
|
i0.ɵɵelementEnd()();
|
|
401
402
|
i0.ɵɵelementStart(7, "tbody");
|
|
402
|
-
i0.ɵɵrepeaterCreate(8,
|
|
403
|
+
i0.ɵɵrepeaterCreate(8, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_97_Conditional_8_For_9_Template, 4, 1, "tr", null, i0.ɵɵcomponentInstance().TrackByIndex, true);
|
|
403
404
|
i0.ɵɵelementEnd()()();
|
|
404
405
|
} if (rf & 2) {
|
|
405
406
|
const ctx_r2 = i0.ɵɵnextContext(4);
|
|
@@ -410,22 +411,22 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_97_
|
|
|
410
411
|
i0.ɵɵadvance(2);
|
|
411
412
|
i0.ɵɵrepeater(ctx_r2.DrillDownData);
|
|
412
413
|
} }
|
|
413
|
-
function
|
|
414
|
-
i0.ɵɵelementStart(0, "div",
|
|
414
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_97_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
415
|
+
i0.ɵɵelementStart(0, "div", 93);
|
|
415
416
|
i0.ɵɵtext(1, "No data available");
|
|
416
417
|
i0.ɵɵelementEnd();
|
|
417
418
|
} }
|
|
418
|
-
function
|
|
419
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_97_Template(rf, ctx) { if (rf & 1) {
|
|
419
420
|
const _r24 = i0.ɵɵgetCurrentView();
|
|
420
|
-
i0.ɵɵelementStart(0, "div", 28)(1, "div",
|
|
421
|
-
i0.ɵɵelement(3, "i",
|
|
421
|
+
i0.ɵɵelementStart(0, "div", 28)(1, "div", 84)(2, "span", 85);
|
|
422
|
+
i0.ɵɵelement(3, "i", 86);
|
|
422
423
|
i0.ɵɵtext(4);
|
|
423
424
|
i0.ɵɵelementEnd();
|
|
424
|
-
i0.ɵɵelementStart(5, "button",
|
|
425
|
-
i0.ɵɵlistener("click", function
|
|
426
|
-
i0.ɵɵelement(6, "i",
|
|
425
|
+
i0.ɵɵelementStart(5, "button", 89);
|
|
426
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_97_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.CloseDrillDown()); });
|
|
427
|
+
i0.ɵɵelement(6, "i", 90);
|
|
427
428
|
i0.ɵɵelementEnd()();
|
|
428
|
-
i0.ɵɵconditionalCreate(7,
|
|
429
|
+
i0.ɵɵconditionalCreate(7, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_97_Conditional_7_Template, 1, 0, "mj-loading", 91)(8, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_97_Conditional_8_Template, 10, 1, "div", 92)(9, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_97_Conditional_9_Template, 2, 0, "div", 93);
|
|
429
430
|
i0.ɵɵelementEnd();
|
|
430
431
|
} if (rf & 2) {
|
|
431
432
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
@@ -434,7 +435,7 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_22_Conditional_97_
|
|
|
434
435
|
i0.ɵɵadvance(3);
|
|
435
436
|
i0.ɵɵconditional(ctx_r2.IsDrillDownLoading ? 7 : ctx_r2.DrillDownData.length > 0 ? 8 : 9);
|
|
436
437
|
} }
|
|
437
|
-
function
|
|
438
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
438
439
|
const _r5 = i0.ɵɵgetCurrentView();
|
|
439
440
|
i0.ɵɵelementStart(0, "section", 17)(1, "div", 19);
|
|
440
441
|
i0.ɵɵelement(2, "i", 20);
|
|
@@ -442,119 +443,119 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_22_Template(rf, ct
|
|
|
442
443
|
i0.ɵɵtext(4, "Overview");
|
|
443
444
|
i0.ɵɵelementEnd()();
|
|
444
445
|
i0.ɵɵelementStart(5, "div", 21)(6, "div", 22);
|
|
445
|
-
i0.ɵɵrepeaterCreate(7,
|
|
446
|
+
i0.ɵɵrepeaterCreate(7, AnalyticsResourceComponent_Conditional_6_Conditional_15_For_8_Template, 2, 3, "button", 23, _forTrack2);
|
|
446
447
|
i0.ɵɵelementEnd();
|
|
447
448
|
i0.ɵɵelementStart(9, "select", 24);
|
|
448
|
-
i0.ɵɵlistener("ngModelChange", function
|
|
449
|
-
i0.ɵɵrepeaterCreate(10,
|
|
449
|
+
i0.ɵɵlistener("ngModelChange", function AnalyticsResourceComponent_Conditional_6_Conditional_15_Template_select_ngModelChange_9_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.SetEntityFilter($event)); });
|
|
450
|
+
i0.ɵɵrepeaterCreate(10, AnalyticsResourceComponent_Conditional_6_Conditional_15_For_11_Template, 2, 2, "option", 25, i0.ɵɵrepeaterTrackByIdentity);
|
|
450
451
|
i0.ɵɵelementEnd()();
|
|
451
452
|
i0.ɵɵelementStart(12, "div", 26);
|
|
452
|
-
i0.ɵɵrepeaterCreate(13,
|
|
453
|
+
i0.ɵɵrepeaterCreate(13, AnalyticsResourceComponent_Conditional_6_Conditional_15_For_14_Template, 13, 10, "div", 27, _forTrack2);
|
|
453
454
|
i0.ɵɵelementEnd();
|
|
454
|
-
i0.ɵɵconditionalCreate(15,
|
|
455
|
+
i0.ɵɵconditionalCreate(15, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_15_Template, 12, 2, "div", 28);
|
|
455
456
|
i0.ɵɵelementStart(16, "div", 29)(17, "div", 30);
|
|
456
|
-
i0.ɵɵlistener("click", function
|
|
457
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_15_Template_div_click_17_listener() { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.OpenDrillDown("tagGrowth")); });
|
|
457
458
|
i0.ɵɵelementStart(18, "div", 31);
|
|
458
|
-
i0.ɵɵelement(19, "i",
|
|
459
|
+
i0.ɵɵelement(19, "i", 32);
|
|
459
460
|
i0.ɵɵtext(20, " Tag Growth");
|
|
460
461
|
i0.ɵɵelementEnd();
|
|
461
|
-
i0.ɵɵelementStart(21, "div",
|
|
462
|
-
i0.ɵɵrepeaterCreate(22,
|
|
462
|
+
i0.ɵɵelementStart(21, "div", 33);
|
|
463
|
+
i0.ɵɵrepeaterCreate(22, AnalyticsResourceComponent_Conditional_6_Conditional_15_For_23_Template, 6, 6, "div", 34, _forTrack2);
|
|
463
464
|
i0.ɵɵelementEnd()();
|
|
464
465
|
i0.ɵɵelementStart(24, "div", 30);
|
|
465
|
-
i0.ɵɵlistener("click", function
|
|
466
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_15_Template_div_click_24_listener() { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.OpenDrillDown("contentCoverage")); });
|
|
466
467
|
i0.ɵɵelementStart(25, "div", 31);
|
|
467
|
-
i0.ɵɵelement(26, "i",
|
|
468
|
+
i0.ɵɵelement(26, "i", 35);
|
|
468
469
|
i0.ɵɵtext(27, " Content Coverage");
|
|
469
470
|
i0.ɵɵelementEnd();
|
|
470
|
-
i0.ɵɵelementStart(28, "div",
|
|
471
|
-
i0.ɵɵrepeaterCreate(29,
|
|
472
|
-
i0.ɵɵconditionalCreate(31,
|
|
471
|
+
i0.ɵɵelementStart(28, "div", 36);
|
|
472
|
+
i0.ɵɵrepeaterCreate(29, AnalyticsResourceComponent_Conditional_6_Conditional_15_For_30_Template, 11, 6, "div", 37, _forTrack1);
|
|
473
|
+
i0.ɵɵconditionalCreate(31, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_31_Template, 2, 0, "div", 38);
|
|
473
474
|
i0.ɵɵelementEnd()();
|
|
474
475
|
i0.ɵɵelementStart(32, "div", 30);
|
|
475
|
-
i0.ɵɵlistener("click", function
|
|
476
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_15_Template_div_click_32_listener() { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.OpenDrillDown("qualityScore")); });
|
|
476
477
|
i0.ɵɵelementStart(33, "div", 31);
|
|
477
|
-
i0.ɵɵelement(34, "i",
|
|
478
|
+
i0.ɵɵelement(34, "i", 39);
|
|
478
479
|
i0.ɵɵtext(35, " Quality Score");
|
|
479
480
|
i0.ɵɵelementEnd();
|
|
480
|
-
i0.ɵɵelementStart(36, "div",
|
|
481
|
+
i0.ɵɵelementStart(36, "div", 40);
|
|
481
482
|
i0.ɵɵnamespaceSVG();
|
|
482
|
-
i0.ɵɵelementStart(37, "svg",
|
|
483
|
-
i0.ɵɵelement(38, "path",
|
|
484
|
-
i0.ɵɵelementStart(42, "text",
|
|
483
|
+
i0.ɵɵelementStart(37, "svg", 41);
|
|
484
|
+
i0.ɵɵelement(38, "path", 42)(39, "path", 43)(40, "path", 44)(41, "path", 45);
|
|
485
|
+
i0.ɵɵelementStart(42, "text", 46);
|
|
485
486
|
i0.ɵɵtext(43);
|
|
486
487
|
i0.ɵɵelementEnd();
|
|
487
|
-
i0.ɵɵelementStart(44, "text",
|
|
488
|
+
i0.ɵɵelementStart(44, "text", 47);
|
|
488
489
|
i0.ɵɵtext(45, "out of 100");
|
|
489
490
|
i0.ɵɵelementEnd();
|
|
490
|
-
i0.ɵɵelementStart(46, "text",
|
|
491
|
+
i0.ɵɵelementStart(46, "text", 48);
|
|
491
492
|
i0.ɵɵtext(47, "0");
|
|
492
493
|
i0.ɵɵelementEnd();
|
|
493
|
-
i0.ɵɵelementStart(48, "text",
|
|
494
|
+
i0.ɵɵelementStart(48, "text", 49);
|
|
494
495
|
i0.ɵɵtext(49, "50");
|
|
495
496
|
i0.ɵɵelementEnd();
|
|
496
|
-
i0.ɵɵelementStart(50, "text",
|
|
497
|
+
i0.ɵɵelementStart(50, "text", 50);
|
|
497
498
|
i0.ɵɵtext(51, "100");
|
|
498
499
|
i0.ɵɵelementEnd()()();
|
|
499
500
|
i0.ɵɵnamespaceHTML();
|
|
500
|
-
i0.ɵɵelementStart(52, "div",
|
|
501
|
-
i0.ɵɵrepeaterCreate(53,
|
|
501
|
+
i0.ɵɵelementStart(52, "div", 51);
|
|
502
|
+
i0.ɵɵrepeaterCreate(53, AnalyticsResourceComponent_Conditional_6_Conditional_15_For_54_Template, 1, 5, "div", 52, i0.ɵɵcomponentInstance().TrackByIndex, true);
|
|
502
503
|
i0.ɵɵelementEnd();
|
|
503
|
-
i0.ɵɵelementStart(55, "div",
|
|
504
|
+
i0.ɵɵelementStart(55, "div", 53);
|
|
504
505
|
i0.ɵɵtext(56, "Confidence Distribution");
|
|
505
506
|
i0.ɵɵelementEnd()();
|
|
506
507
|
i0.ɵɵelementStart(57, "div", 30);
|
|
507
|
-
i0.ɵɵlistener("click", function
|
|
508
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_15_Template_div_click_57_listener() { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.OpenDrillDown("sourcePerformance")); });
|
|
508
509
|
i0.ɵɵelementStart(58, "div", 31);
|
|
509
|
-
i0.ɵɵelement(59, "i",
|
|
510
|
+
i0.ɵɵelement(59, "i", 54);
|
|
510
511
|
i0.ɵɵtext(60, " Source Performance");
|
|
511
512
|
i0.ɵɵelementEnd();
|
|
512
|
-
i0.ɵɵelementStart(61, "div",
|
|
513
|
-
i0.ɵɵrepeaterCreate(62,
|
|
514
|
-
i0.ɵɵconditionalCreate(64,
|
|
513
|
+
i0.ɵɵelementStart(61, "div", 55);
|
|
514
|
+
i0.ɵɵrepeaterCreate(62, AnalyticsResourceComponent_Conditional_6_Conditional_15_For_63_Template, 6, 6, "div", 56, _forTrack1);
|
|
515
|
+
i0.ɵɵconditionalCreate(64, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_64_Template, 2, 0, "div", 38);
|
|
515
516
|
i0.ɵɵelementEnd();
|
|
516
|
-
i0.ɵɵelementStart(65, "div",
|
|
517
|
+
i0.ɵɵelementStart(65, "div", 57);
|
|
517
518
|
i0.ɵɵtext(66, "Average tags per item");
|
|
518
519
|
i0.ɵɵelementEnd()();
|
|
519
520
|
i0.ɵɵelementStart(67, "div", 30);
|
|
520
|
-
i0.ɵɵlistener("click", function
|
|
521
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_15_Template_div_click_67_listener() { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.OpenDrillDown("dailyThroughput")); });
|
|
521
522
|
i0.ɵɵelementStart(68, "div", 31);
|
|
522
|
-
i0.ɵɵelement(69, "i",
|
|
523
|
+
i0.ɵɵelement(69, "i", 58);
|
|
523
524
|
i0.ɵɵtext(70, " Daily Throughput");
|
|
524
525
|
i0.ɵɵelementEnd();
|
|
525
|
-
i0.ɵɵelementStart(71, "div",
|
|
526
|
-
i0.ɵɵrepeaterCreate(72,
|
|
526
|
+
i0.ɵɵelementStart(71, "div", 59);
|
|
527
|
+
i0.ɵɵrepeaterCreate(72, AnalyticsResourceComponent_Conditional_6_Conditional_15_For_73_Template, 3, 5, "div", 60, _forTrack2);
|
|
527
528
|
i0.ɵɵelementEnd();
|
|
528
|
-
i0.ɵɵelementStart(74, "div",
|
|
529
|
-
i0.ɵɵelement(76, "div",
|
|
529
|
+
i0.ɵɵelementStart(74, "div", 61)(75, "div", 62);
|
|
530
|
+
i0.ɵɵelement(76, "div", 63);
|
|
530
531
|
i0.ɵɵtext(77, " Success");
|
|
531
532
|
i0.ɵɵelementEnd();
|
|
532
|
-
i0.ɵɵelementStart(78, "div",
|
|
533
|
-
i0.ɵɵelement(79, "div",
|
|
533
|
+
i0.ɵɵelementStart(78, "div", 62);
|
|
534
|
+
i0.ɵɵelement(79, "div", 64);
|
|
534
535
|
i0.ɵɵtext(80, " Failures");
|
|
535
536
|
i0.ɵɵelementEnd()()();
|
|
536
537
|
i0.ɵɵelementStart(81, "div", 30);
|
|
537
|
-
i0.ɵɵlistener("click", function
|
|
538
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_15_Template_div_click_81_listener() { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.OpenDrillDown("taxonomyHealth")); });
|
|
538
539
|
i0.ɵɵelementStart(82, "div", 31);
|
|
539
|
-
i0.ɵɵelement(83, "i",
|
|
540
|
+
i0.ɵɵelement(83, "i", 65);
|
|
540
541
|
i0.ɵɵtext(84, " Taxonomy Health");
|
|
541
542
|
i0.ɵɵelementEnd();
|
|
542
|
-
i0.ɵɵelementStart(85, "div",
|
|
543
|
+
i0.ɵɵelementStart(85, "div", 66);
|
|
543
544
|
i0.ɵɵnamespaceSVG();
|
|
544
|
-
i0.ɵɵelementStart(86, "svg",
|
|
545
|
-
i0.ɵɵelement(87, "circle",
|
|
546
|
-
i0.ɵɵrepeaterCreate(88,
|
|
547
|
-
i0.ɵɵelementStart(90, "text",
|
|
545
|
+
i0.ɵɵelementStart(86, "svg", 67);
|
|
546
|
+
i0.ɵɵelement(87, "circle", 68);
|
|
547
|
+
i0.ɵɵrepeaterCreate(88, AnalyticsResourceComponent_Conditional_6_Conditional_15_For_89_Template, 1, 3, ":svg:circle", 69, i0.ɵɵcomponentInstance().TrackByIndex, true);
|
|
548
|
+
i0.ɵɵelementStart(90, "text", 70);
|
|
548
549
|
i0.ɵɵtext(91);
|
|
549
550
|
i0.ɵɵelementEnd();
|
|
550
|
-
i0.ɵɵelementStart(92, "text",
|
|
551
|
+
i0.ɵɵelementStart(92, "text", 71);
|
|
551
552
|
i0.ɵɵtext(93, "total tags");
|
|
552
553
|
i0.ɵɵelementEnd()()();
|
|
553
554
|
i0.ɵɵnamespaceHTML();
|
|
554
|
-
i0.ɵɵelementStart(94, "div",
|
|
555
|
-
i0.ɵɵrepeaterCreate(95,
|
|
555
|
+
i0.ɵɵelementStart(94, "div", 72);
|
|
556
|
+
i0.ɵɵrepeaterCreate(95, AnalyticsResourceComponent_Conditional_6_Conditional_15_For_96_Template, 4, 6, "div", 73, _forTrack2);
|
|
556
557
|
i0.ɵɵelementEnd()()();
|
|
557
|
-
i0.ɵɵconditionalCreate(97,
|
|
558
|
+
i0.ɵɵconditionalCreate(97, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_97_Template, 10, 2, "div", 28);
|
|
558
559
|
i0.ɵɵelementEnd();
|
|
559
560
|
} if (rf & 2) {
|
|
560
561
|
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
@@ -593,41 +594,41 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_22_Template(rf, ct
|
|
|
593
594
|
i0.ɵɵadvance(2);
|
|
594
595
|
i0.ɵɵconditional(ctx_r2.DrillDownTarget && !ctx_r2.DrillDownTarget.startsWith("kpi-") ? 97 : -1);
|
|
595
596
|
} }
|
|
596
|
-
function
|
|
597
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
597
598
|
const _r30 = i0.ɵɵgetCurrentView();
|
|
598
|
-
i0.ɵɵelementStart(0, "button",
|
|
599
|
-
i0.ɵɵlistener("click", function
|
|
600
|
-
i0.ɵɵelement(1, "i",
|
|
599
|
+
i0.ɵɵelementStart(0, "button", 94);
|
|
600
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_10_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r30); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.ExportTabDataCSV("top-tags")); });
|
|
601
|
+
i0.ɵɵelement(1, "i", 95);
|
|
601
602
|
i0.ɵɵtext(2, " CSV ");
|
|
602
603
|
i0.ɵɵelementEnd();
|
|
603
604
|
} }
|
|
604
|
-
function
|
|
605
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_11_For_20_Template(rf, ctx) { if (rf & 1) {
|
|
605
606
|
const _r31 = i0.ɵɵgetCurrentView();
|
|
606
|
-
i0.ɵɵelementStart(0, "tr",
|
|
607
|
-
i0.ɵɵlistener("click", function
|
|
607
|
+
i0.ɵɵelementStart(0, "tr", 131);
|
|
608
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_11_For_20_Template_tr_click_0_listener() { const tag_r32 = i0.ɵɵrestoreView(_r31).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.OpenDrillDown("tag-row:" + tag_r32.Name)); });
|
|
608
609
|
i0.ɵɵelementStart(1, "td");
|
|
609
610
|
i0.ɵɵtext(2);
|
|
610
611
|
i0.ɵɵelementEnd();
|
|
611
612
|
i0.ɵɵelementStart(3, "td")(4, "strong");
|
|
612
613
|
i0.ɵɵtext(5);
|
|
613
614
|
i0.ɵɵelementEnd()();
|
|
614
|
-
i0.ɵɵelementStart(6, "td",
|
|
615
|
+
i0.ɵɵelementStart(6, "td", 129);
|
|
615
616
|
i0.ɵɵtext(7);
|
|
616
617
|
i0.ɵɵelementEnd();
|
|
617
618
|
i0.ɵɵelementStart(8, "td");
|
|
618
|
-
i0.ɵɵelement(9, "span",
|
|
619
|
+
i0.ɵɵelement(9, "span", 132);
|
|
619
620
|
i0.ɵɵtext(10);
|
|
620
621
|
i0.ɵɵelementEnd();
|
|
621
622
|
i0.ɵɵelementStart(11, "td");
|
|
622
623
|
i0.ɵɵnamespaceSVG();
|
|
623
|
-
i0.ɵɵelementStart(12, "svg",
|
|
624
|
-
i0.ɵɵelement(13, "polyline",
|
|
624
|
+
i0.ɵɵelementStart(12, "svg", 133);
|
|
625
|
+
i0.ɵɵelement(13, "polyline", 134);
|
|
625
626
|
i0.ɵɵelementEnd()();
|
|
626
627
|
i0.ɵɵnamespaceHTML();
|
|
627
628
|
i0.ɵɵelementStart(14, "td");
|
|
628
629
|
i0.ɵɵtext(15);
|
|
629
630
|
i0.ɵɵelementEnd();
|
|
630
|
-
i0.ɵɵelementStart(16, "td",
|
|
631
|
+
i0.ɵɵelementStart(16, "td", 135);
|
|
631
632
|
i0.ɵɵtext(17);
|
|
632
633
|
i0.ɵɵelementEnd()();
|
|
633
634
|
} if (rf & 2) {
|
|
@@ -650,14 +651,14 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_11_
|
|
|
650
651
|
i0.ɵɵadvance(2);
|
|
651
652
|
i0.ɵɵtextInterpolate(tag_r32.FirstSeen);
|
|
652
653
|
} }
|
|
653
|
-
function
|
|
654
|
-
i0.ɵɵelementStart(0, "div",
|
|
654
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
655
|
+
i0.ɵɵelementStart(0, "div", 121)(1, "table", 96)(2, "thead")(3, "tr")(4, "th");
|
|
655
656
|
i0.ɵɵtext(5, "#");
|
|
656
657
|
i0.ɵɵelementEnd();
|
|
657
658
|
i0.ɵɵelementStart(6, "th");
|
|
658
659
|
i0.ɵɵtext(7, "Tag Name");
|
|
659
660
|
i0.ɵɵelementEnd();
|
|
660
|
-
i0.ɵɵelementStart(8, "th",
|
|
661
|
+
i0.ɵɵelementStart(8, "th", 129);
|
|
661
662
|
i0.ɵɵtext(9, "Usage Count");
|
|
662
663
|
i0.ɵɵelementEnd();
|
|
663
664
|
i0.ɵɵelementStart(10, "th");
|
|
@@ -673,32 +674,32 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_11_
|
|
|
673
674
|
i0.ɵɵtext(17, "First Seen");
|
|
674
675
|
i0.ɵɵelementEnd()()();
|
|
675
676
|
i0.ɵɵelementStart(18, "tbody");
|
|
676
|
-
i0.ɵɵrepeaterCreate(19,
|
|
677
|
+
i0.ɵɵrepeaterCreate(19, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_11_For_20_Template, 18, 12, "tr", 130, _forTrack1);
|
|
677
678
|
i0.ɵɵelementEnd()()();
|
|
678
679
|
} if (rf & 2) {
|
|
679
680
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
680
681
|
i0.ɵɵadvance(19);
|
|
681
682
|
i0.ɵɵrepeater(ctx_r2.TopTags);
|
|
682
683
|
} }
|
|
683
|
-
function
|
|
684
|
-
i0.ɵɵelementStart(0, "div",
|
|
685
|
-
i0.ɵɵelement(1, "i",
|
|
684
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
685
|
+
i0.ɵɵelementStart(0, "div", 122);
|
|
686
|
+
i0.ɵɵelement(1, "i", 117);
|
|
686
687
|
i0.ɵɵelementStart(2, "p");
|
|
687
688
|
i0.ɵɵtext(3, "No tag data available yet. Process content to generate tags.");
|
|
688
689
|
i0.ɵɵelementEnd()();
|
|
689
690
|
} }
|
|
690
|
-
function
|
|
691
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
691
692
|
const _r34 = i0.ɵɵgetCurrentView();
|
|
692
|
-
i0.ɵɵelementStart(0, "button",
|
|
693
|
-
i0.ɵɵlistener("click", function
|
|
694
|
-
i0.ɵɵelement(1, "i",
|
|
693
|
+
i0.ɵɵelementStart(0, "button", 94);
|
|
694
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r34); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.ExportDrillDownCSV()); });
|
|
695
|
+
i0.ɵɵelement(1, "i", 95);
|
|
695
696
|
i0.ɵɵtext(2, " CSV ");
|
|
696
697
|
i0.ɵɵelementEnd();
|
|
697
698
|
} }
|
|
698
|
-
function
|
|
699
|
-
i0.ɵɵelement(0, "mj-loading",
|
|
699
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
700
|
+
i0.ɵɵelement(0, "mj-loading", 91);
|
|
700
701
|
} }
|
|
701
|
-
function
|
|
702
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Conditional_10_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
702
703
|
i0.ɵɵelementStart(0, "th");
|
|
703
704
|
i0.ɵɵtext(1);
|
|
704
705
|
i0.ɵɵelementEnd();
|
|
@@ -707,10 +708,10 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_13_
|
|
|
707
708
|
i0.ɵɵadvance();
|
|
708
709
|
i0.ɵɵtextInterpolate(col_r35);
|
|
709
710
|
} }
|
|
710
|
-
function
|
|
711
|
-
i0.ɵɵelement(0, "th",
|
|
711
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Conditional_10_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
712
|
+
i0.ɵɵelement(0, "th", 97);
|
|
712
713
|
} }
|
|
713
|
-
function
|
|
714
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Conditional_10_For_9_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
714
715
|
i0.ɵɵelementStart(0, "td");
|
|
715
716
|
i0.ɵɵtext(1);
|
|
716
717
|
i0.ɵɵelementEnd();
|
|
@@ -720,26 +721,26 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_13_
|
|
|
720
721
|
i0.ɵɵadvance();
|
|
721
722
|
i0.ɵɵtextInterpolate(row_r37[col_r36]);
|
|
722
723
|
} }
|
|
723
|
-
function
|
|
724
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Conditional_10_For_9_Conditional_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
724
725
|
const _r38 = i0.ɵɵgetCurrentView();
|
|
725
|
-
i0.ɵɵelementStart(0, "button",
|
|
726
|
-
i0.ɵɵlistener("click", function
|
|
727
|
-
i0.ɵɵelement(1, "i",
|
|
726
|
+
i0.ɵɵelementStart(0, "button", 137);
|
|
727
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Conditional_10_For_9_Conditional_3_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r38); const row_r37 = i0.ɵɵnextContext(2).$implicit; const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.OpenDrillDownRecord(row_r37)); });
|
|
728
|
+
i0.ɵɵelement(1, "i", 100);
|
|
728
729
|
i0.ɵɵelementEnd();
|
|
729
730
|
} }
|
|
730
|
-
function
|
|
731
|
-
i0.ɵɵelementStart(0, "td",
|
|
732
|
-
i0.ɵɵconditionalCreate(1,
|
|
731
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Conditional_10_For_9_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
732
|
+
i0.ɵɵelementStart(0, "td", 97);
|
|
733
|
+
i0.ɵɵconditionalCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Conditional_10_For_9_Conditional_3_Conditional_1_Template, 2, 0, "button", 136);
|
|
733
734
|
i0.ɵɵelementEnd();
|
|
734
735
|
} if (rf & 2) {
|
|
735
736
|
const row_r37 = i0.ɵɵnextContext().$implicit;
|
|
736
737
|
i0.ɵɵadvance();
|
|
737
738
|
i0.ɵɵconditional(row_r37["_RecordID"] ? 1 : -1);
|
|
738
739
|
} }
|
|
739
|
-
function
|
|
740
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Conditional_10_For_9_Template(rf, ctx) { if (rf & 1) {
|
|
740
741
|
i0.ɵɵelementStart(0, "tr");
|
|
741
|
-
i0.ɵɵrepeaterCreate(1,
|
|
742
|
-
i0.ɵɵconditionalCreate(3,
|
|
742
|
+
i0.ɵɵrepeaterCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Conditional_10_For_9_For_2_Template, 2, 1, "td", null, i0.ɵɵrepeaterTrackByIdentity);
|
|
743
|
+
i0.ɵɵconditionalCreate(3, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Conditional_10_For_9_Conditional_3_Template, 2, 1, "td", 97);
|
|
743
744
|
i0.ɵɵelementEnd();
|
|
744
745
|
} if (rf & 2) {
|
|
745
746
|
const ctx_r2 = i0.ɵɵnextContext(5);
|
|
@@ -748,13 +749,13 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_13_
|
|
|
748
749
|
i0.ɵɵadvance(2);
|
|
749
750
|
i0.ɵɵconditional(ctx_r2.DrillDownHasActions ? 3 : -1);
|
|
750
751
|
} }
|
|
751
|
-
function
|
|
752
|
-
i0.ɵɵelementStart(0, "div",
|
|
753
|
-
i0.ɵɵrepeaterCreate(4,
|
|
754
|
-
i0.ɵɵconditionalCreate(6,
|
|
752
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
753
|
+
i0.ɵɵelementStart(0, "div", 92)(1, "table", 96)(2, "thead")(3, "tr");
|
|
754
|
+
i0.ɵɵrepeaterCreate(4, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Conditional_10_For_5_Template, 2, 1, "th", null, i0.ɵɵrepeaterTrackByIdentity);
|
|
755
|
+
i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Conditional_10_Conditional_6_Template, 1, 0, "th", 97);
|
|
755
756
|
i0.ɵɵelementEnd()();
|
|
756
757
|
i0.ɵɵelementStart(7, "tbody");
|
|
757
|
-
i0.ɵɵrepeaterCreate(8,
|
|
758
|
+
i0.ɵɵrepeaterCreate(8, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Conditional_10_For_9_Template, 4, 1, "tr", null, i0.ɵɵcomponentInstance().TrackByIndex, true);
|
|
758
759
|
i0.ɵɵelementEnd()()();
|
|
759
760
|
} if (rf & 2) {
|
|
760
761
|
const ctx_r2 = i0.ɵɵnextContext(4);
|
|
@@ -765,24 +766,24 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_13_
|
|
|
765
766
|
i0.ɵɵadvance(2);
|
|
766
767
|
i0.ɵɵrepeater(ctx_r2.DrillDownData);
|
|
767
768
|
} }
|
|
768
|
-
function
|
|
769
|
-
i0.ɵɵelementStart(0, "div",
|
|
769
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
770
|
+
i0.ɵɵelementStart(0, "div", 93);
|
|
770
771
|
i0.ɵɵtext(1, "No items found for this tag");
|
|
771
772
|
i0.ɵɵelementEnd();
|
|
772
773
|
} }
|
|
773
|
-
function
|
|
774
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
774
775
|
const _r33 = i0.ɵɵgetCurrentView();
|
|
775
|
-
i0.ɵɵelementStart(0, "div", 28)(1, "div",
|
|
776
|
-
i0.ɵɵelement(3, "i",
|
|
776
|
+
i0.ɵɵelementStart(0, "div", 28)(1, "div", 84)(2, "span", 85);
|
|
777
|
+
i0.ɵɵelement(3, "i", 86);
|
|
777
778
|
i0.ɵɵtext(4);
|
|
778
779
|
i0.ɵɵelementEnd();
|
|
779
|
-
i0.ɵɵelementStart(5, "div",
|
|
780
|
-
i0.ɵɵconditionalCreate(6,
|
|
781
|
-
i0.ɵɵelementStart(7, "button",
|
|
782
|
-
i0.ɵɵlistener("click", function
|
|
783
|
-
i0.ɵɵelement(8, "i",
|
|
780
|
+
i0.ɵɵelementStart(5, "div", 87);
|
|
781
|
+
i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Conditional_6_Template, 3, 0, "button", 88);
|
|
782
|
+
i0.ɵɵelementStart(7, "button", 89);
|
|
783
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r33); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.CloseDrillDown()); });
|
|
784
|
+
i0.ɵɵelement(8, "i", 90);
|
|
784
785
|
i0.ɵɵelementEnd()()();
|
|
785
|
-
i0.ɵɵconditionalCreate(9,
|
|
786
|
+
i0.ɵɵconditionalCreate(9, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Conditional_9_Template, 1, 0, "mj-loading", 91)(10, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Conditional_10_Template, 10, 1, "div", 92)(11, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Conditional_11_Template, 2, 0, "div", 93);
|
|
786
787
|
i0.ɵɵelementEnd();
|
|
787
788
|
} if (rf & 2) {
|
|
788
789
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
@@ -793,8 +794,8 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_13_
|
|
|
793
794
|
i0.ɵɵadvance(3);
|
|
794
795
|
i0.ɵɵconditional(ctx_r2.IsDrillDownLoading ? 9 : ctx_r2.DrillDownData.length > 0 ? 10 : 11);
|
|
795
796
|
} }
|
|
796
|
-
function
|
|
797
|
-
i0.ɵɵelementStart(0, "div",
|
|
797
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_14_For_6_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
798
|
+
i0.ɵɵelementStart(0, "div", 145);
|
|
798
799
|
i0.ɵɵtext(1);
|
|
799
800
|
i0.ɵɵelementEnd();
|
|
800
801
|
} if (rf & 2) {
|
|
@@ -804,12 +805,12 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_14_
|
|
|
804
805
|
i0.ɵɵadvance();
|
|
805
806
|
i0.ɵɵtextInterpolate(seg_r39.Label);
|
|
806
807
|
} }
|
|
807
|
-
function
|
|
808
|
-
i0.ɵɵelementStart(0, "div",
|
|
808
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_14_For_6_Template(rf, ctx) { if (rf & 1) {
|
|
809
|
+
i0.ɵɵelementStart(0, "div", 140)(1, "div", 142);
|
|
809
810
|
i0.ɵɵtext(2);
|
|
810
811
|
i0.ɵɵelementEnd();
|
|
811
|
-
i0.ɵɵelementStart(3, "div",
|
|
812
|
-
i0.ɵɵrepeaterCreate(4,
|
|
812
|
+
i0.ɵɵelementStart(3, "div", 143);
|
|
813
|
+
i0.ɵɵrepeaterCreate(4, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_14_For_6_For_5_Template, 2, 6, "div", 144, i0.ɵɵcomponentInstance().TrackByIndex, true);
|
|
813
814
|
i0.ɵɵelementEnd()();
|
|
814
815
|
} if (rf & 2) {
|
|
815
816
|
const row_r40 = ctx.$implicit;
|
|
@@ -818,9 +819,9 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_14_
|
|
|
818
819
|
i0.ɵɵadvance(2);
|
|
819
820
|
i0.ɵɵrepeater(row_r40.Segments);
|
|
820
821
|
} }
|
|
821
|
-
function
|
|
822
|
-
i0.ɵɵelementStart(0, "div",
|
|
823
|
-
i0.ɵɵelement(1, "div",
|
|
822
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_14_For_9_Template(rf, ctx) { if (rf & 1) {
|
|
823
|
+
i0.ɵɵelementStart(0, "div", 62);
|
|
824
|
+
i0.ɵɵelement(1, "div", 146);
|
|
824
825
|
i0.ɵɵtext(2);
|
|
825
826
|
i0.ɵɵelementEnd();
|
|
826
827
|
} if (rf & 2) {
|
|
@@ -830,16 +831,16 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_14_
|
|
|
830
831
|
i0.ɵɵadvance();
|
|
831
832
|
i0.ɵɵtextInterpolate1(" ", item_r41.Label);
|
|
832
833
|
} }
|
|
833
|
-
function
|
|
834
|
-
i0.ɵɵelementStart(0, "div",
|
|
835
|
-
i0.ɵɵelement(2, "i",
|
|
834
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
835
|
+
i0.ɵɵelementStart(0, "div", 123)(1, "h3");
|
|
836
|
+
i0.ɵɵelement(2, "i", 138);
|
|
836
837
|
i0.ɵɵtext(3, " Tag Distribution by Entity");
|
|
837
838
|
i0.ɵɵelementEnd();
|
|
838
|
-
i0.ɵɵelementStart(4, "div",
|
|
839
|
-
i0.ɵɵrepeaterCreate(5,
|
|
839
|
+
i0.ɵɵelementStart(4, "div", 139);
|
|
840
|
+
i0.ɵɵrepeaterCreate(5, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_14_For_6_Template, 6, 1, "div", 140, _forTrack3);
|
|
840
841
|
i0.ɵɵelementEnd();
|
|
841
|
-
i0.ɵɵelementStart(7, "div",
|
|
842
|
-
i0.ɵɵrepeaterCreate(8,
|
|
842
|
+
i0.ɵɵelementStart(7, "div", 141);
|
|
843
|
+
i0.ɵɵrepeaterCreate(8, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_14_For_9_Template, 3, 3, "div", 62, _forTrack2);
|
|
843
844
|
i0.ɵɵelementEnd()();
|
|
844
845
|
} if (rf & 2) {
|
|
845
846
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
@@ -848,11 +849,11 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_14_
|
|
|
848
849
|
i0.ɵɵadvance(3);
|
|
849
850
|
i0.ɵɵrepeater(ctx_r2.DistributionLegend);
|
|
850
851
|
} }
|
|
851
|
-
function
|
|
852
|
-
i0.ɵɵelementStart(0, "div",
|
|
852
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_15_For_6_Template(rf, ctx) { if (rf & 1) {
|
|
853
|
+
i0.ɵɵelementStart(0, "div", 149)(1, "div", 151);
|
|
853
854
|
i0.ɵɵtext(2);
|
|
854
855
|
i0.ɵɵelementEnd();
|
|
855
|
-
i0.ɵɵelementStart(3, "div",
|
|
856
|
+
i0.ɵɵelementStart(3, "div", 152);
|
|
856
857
|
i0.ɵɵtext(4);
|
|
857
858
|
i0.ɵɵelementEnd()();
|
|
858
859
|
} if (rf & 2) {
|
|
@@ -864,15 +865,15 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_15_
|
|
|
864
865
|
i0.ɵɵadvance(2);
|
|
865
866
|
i0.ɵɵtextInterpolate(bar_r42.Label);
|
|
866
867
|
} }
|
|
867
|
-
function
|
|
868
|
-
i0.ɵɵelementStart(0, "div",
|
|
869
|
-
i0.ɵɵelement(2, "i",
|
|
868
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
869
|
+
i0.ɵɵelementStart(0, "div", 123)(1, "h3");
|
|
870
|
+
i0.ɵɵelement(2, "i", 147);
|
|
870
871
|
i0.ɵɵtext(3, " Tag Depth Distribution");
|
|
871
872
|
i0.ɵɵelementEnd();
|
|
872
|
-
i0.ɵɵelementStart(4, "div",
|
|
873
|
-
i0.ɵɵrepeaterCreate(5,
|
|
873
|
+
i0.ɵɵelementStart(4, "div", 148);
|
|
874
|
+
i0.ɵɵrepeaterCreate(5, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_15_For_6_Template, 5, 6, "div", 149, _forTrack2);
|
|
874
875
|
i0.ɵɵelementEnd();
|
|
875
|
-
i0.ɵɵelementStart(7, "div",
|
|
876
|
+
i0.ɵɵelementStart(7, "div", 150);
|
|
876
877
|
i0.ɵɵtext(8, " Taxonomy hierarchy depth -- Most tags at depth 2-3 indicating a healthy mid-level structure ");
|
|
877
878
|
i0.ɵɵelementEnd()();
|
|
878
879
|
} if (rf & 2) {
|
|
@@ -880,9 +881,9 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_15_
|
|
|
880
881
|
i0.ɵɵadvance(5);
|
|
881
882
|
i0.ɵɵrepeater(ctx_r2.TagDepthBars);
|
|
882
883
|
} }
|
|
883
|
-
function
|
|
884
|
-
i0.ɵɵelementStart(0, "span",
|
|
885
|
-
i0.ɵɵelement(1, "i",
|
|
884
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_22_Template(rf, ctx) { if (rf & 1) {
|
|
885
|
+
i0.ɵɵelementStart(0, "span", 127);
|
|
886
|
+
i0.ɵɵelement(1, "i", 153);
|
|
886
887
|
i0.ɵɵtext(2);
|
|
887
888
|
i0.ɵɵelementEnd();
|
|
888
889
|
} if (rf & 2) {
|
|
@@ -890,16 +891,16 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_22_
|
|
|
890
891
|
i0.ɵɵadvance(2);
|
|
891
892
|
i0.ɵɵtextInterpolate1(" Last computed: ", ctx_r2.CoOccurrenceLastComputed, " ");
|
|
892
893
|
} }
|
|
893
|
-
function
|
|
894
|
-
i0.ɵɵelement(0, "i",
|
|
894
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_24_Template(rf, ctx) { if (rf & 1) {
|
|
895
|
+
i0.ɵɵelement(0, "i", 154);
|
|
895
896
|
i0.ɵɵtext(1, " Computing... ");
|
|
896
897
|
} }
|
|
897
|
-
function
|
|
898
|
-
i0.ɵɵelement(0, "i",
|
|
898
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
899
|
+
i0.ɵɵelement(0, "i", 155);
|
|
899
900
|
i0.ɵɵtext(1, " Recompute ");
|
|
900
901
|
} }
|
|
901
|
-
function
|
|
902
|
-
i0.ɵɵelementStart(0, "tr")(1, "td",
|
|
902
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_26_For_16_Template(rf, ctx) { if (rf & 1) {
|
|
903
|
+
i0.ɵɵelementStart(0, "tr")(1, "td", 135);
|
|
903
904
|
i0.ɵɵtext(2);
|
|
904
905
|
i0.ɵɵelementEnd();
|
|
905
906
|
i0.ɵɵelementStart(3, "td")(4, "strong");
|
|
@@ -908,18 +909,18 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_26_
|
|
|
908
909
|
i0.ɵɵelementStart(6, "td")(7, "strong");
|
|
909
910
|
i0.ɵɵtext(8);
|
|
910
911
|
i0.ɵɵelementEnd()();
|
|
911
|
-
i0.ɵɵelementStart(9, "td",
|
|
912
|
+
i0.ɵɵelementStart(9, "td", 129);
|
|
912
913
|
i0.ɵɵtext(10);
|
|
913
914
|
i0.ɵɵelementEnd();
|
|
914
915
|
i0.ɵɵelementStart(11, "td");
|
|
915
|
-
i0.ɵɵelement(12, "span",
|
|
916
|
+
i0.ɵɵelement(12, "span", 156);
|
|
916
917
|
i0.ɵɵelementEnd()();
|
|
917
918
|
} if (rf & 2) {
|
|
918
919
|
const pair_r43 = ctx.$implicit;
|
|
919
|
-
const ɵ$
|
|
920
|
+
const ɵ$index_663_r44 = ctx.$index;
|
|
920
921
|
const ctx_r2 = i0.ɵɵnextContext(4);
|
|
921
922
|
i0.ɵɵadvance(2);
|
|
922
|
-
i0.ɵɵtextInterpolate(ɵ$
|
|
923
|
+
i0.ɵɵtextInterpolate(ɵ$index_663_r44 + 1);
|
|
923
924
|
i0.ɵɵadvance(3);
|
|
924
925
|
i0.ɵɵtextInterpolate(pair_r43.TagAName);
|
|
925
926
|
i0.ɵɵadvance(3);
|
|
@@ -929,8 +930,8 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_26_
|
|
|
929
930
|
i0.ɵɵadvance(2);
|
|
930
931
|
i0.ɵɵstyleProp("width", pair_r43.BarWidth, "px");
|
|
931
932
|
} }
|
|
932
|
-
function
|
|
933
|
-
i0.ɵɵelementStart(0, "div",
|
|
933
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
934
|
+
i0.ɵɵelementStart(0, "div", 121)(1, "table", 96)(2, "thead")(3, "tr")(4, "th");
|
|
934
935
|
i0.ɵɵtext(5, "#");
|
|
935
936
|
i0.ɵɵelementEnd();
|
|
936
937
|
i0.ɵɵelementStart(6, "th");
|
|
@@ -939,56 +940,56 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_26_
|
|
|
939
940
|
i0.ɵɵelementStart(8, "th");
|
|
940
941
|
i0.ɵɵtext(9, "Tag B");
|
|
941
942
|
i0.ɵɵelementEnd();
|
|
942
|
-
i0.ɵɵelementStart(10, "th",
|
|
943
|
+
i0.ɵɵelementStart(10, "th", 129);
|
|
943
944
|
i0.ɵɵtext(11, "Co-Occurrences");
|
|
944
945
|
i0.ɵɵelementEnd();
|
|
945
946
|
i0.ɵɵelementStart(12, "th");
|
|
946
947
|
i0.ɵɵtext(13, "Frequency");
|
|
947
948
|
i0.ɵɵelementEnd()()();
|
|
948
949
|
i0.ɵɵelementStart(14, "tbody");
|
|
949
|
-
i0.ɵɵrepeaterCreate(15,
|
|
950
|
+
i0.ɵɵrepeaterCreate(15, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_26_For_16_Template, 13, 6, "tr", null, _forTrack4);
|
|
950
951
|
i0.ɵɵelementEnd()()();
|
|
951
952
|
} if (rf & 2) {
|
|
952
953
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
953
954
|
i0.ɵɵadvance(15);
|
|
954
955
|
i0.ɵɵrepeater(ctx_r2.CoOccurrencePairs);
|
|
955
956
|
} }
|
|
956
|
-
function
|
|
957
|
-
i0.ɵɵelementStart(0, "div",
|
|
958
|
-
i0.ɵɵelement(1, "i",
|
|
957
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_27_Template(rf, ctx) { if (rf & 1) {
|
|
958
|
+
i0.ɵɵelementStart(0, "div", 122);
|
|
959
|
+
i0.ɵɵelement(1, "i", 125);
|
|
959
960
|
i0.ɵɵelementStart(2, "p");
|
|
960
961
|
i0.ɵɵtext(3, "No co-occurrence data available yet. Process content and recompute to see which tags frequently appear together.");
|
|
961
962
|
i0.ɵɵelementEnd()();
|
|
962
963
|
} }
|
|
963
|
-
function
|
|
964
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
964
965
|
const _r29 = i0.ɵɵgetCurrentView();
|
|
965
966
|
i0.ɵɵelementStart(0, "section", 17)(1, "div", 19);
|
|
966
|
-
i0.ɵɵelement(2, "i",
|
|
967
|
+
i0.ɵɵelement(2, "i", 117);
|
|
967
968
|
i0.ɵɵelementStart(3, "h1");
|
|
968
969
|
i0.ɵɵtext(4, "Tags");
|
|
969
970
|
i0.ɵɵelementEnd()();
|
|
970
|
-
i0.ɵɵelementStart(5, "div",
|
|
971
|
-
i0.ɵɵelement(8, "i",
|
|
971
|
+
i0.ɵɵelementStart(5, "div", 118)(6, "div", 119)(7, "h3");
|
|
972
|
+
i0.ɵɵelement(8, "i", 120);
|
|
972
973
|
i0.ɵɵtext(9, " Top 20 Tags");
|
|
973
974
|
i0.ɵɵelementEnd();
|
|
974
|
-
i0.ɵɵconditionalCreate(10,
|
|
975
|
+
i0.ɵɵconditionalCreate(10, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_10_Template, 3, 0, "button", 88);
|
|
975
976
|
i0.ɵɵelementEnd();
|
|
976
|
-
i0.ɵɵconditionalCreate(11,
|
|
977
|
+
i0.ɵɵconditionalCreate(11, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_11_Template, 21, 0, "div", 121)(12, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_12_Template, 4, 0, "div", 122);
|
|
977
978
|
i0.ɵɵelementEnd();
|
|
978
|
-
i0.ɵɵconditionalCreate(13,
|
|
979
|
-
i0.ɵɵconditionalCreate(14,
|
|
980
|
-
i0.ɵɵconditionalCreate(15,
|
|
981
|
-
i0.ɵɵelementStart(16, "div",
|
|
982
|
-
i0.ɵɵelement(19, "i",
|
|
979
|
+
i0.ɵɵconditionalCreate(13, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_13_Template, 12, 3, "div", 28);
|
|
980
|
+
i0.ɵɵconditionalCreate(14, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_14_Template, 10, 0, "div", 123);
|
|
981
|
+
i0.ɵɵconditionalCreate(15, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_15_Template, 9, 0, "div", 123);
|
|
982
|
+
i0.ɵɵelementStart(16, "div", 124)(17, "div", 119)(18, "h3");
|
|
983
|
+
i0.ɵɵelement(19, "i", 125);
|
|
983
984
|
i0.ɵɵtext(20, " Frequently Paired Tags");
|
|
984
985
|
i0.ɵɵelementEnd();
|
|
985
|
-
i0.ɵɵelementStart(21, "div",
|
|
986
|
-
i0.ɵɵconditionalCreate(22,
|
|
987
|
-
i0.ɵɵelementStart(23, "button",
|
|
988
|
-
i0.ɵɵlistener("click", function
|
|
989
|
-
i0.ɵɵconditionalCreate(24,
|
|
986
|
+
i0.ɵɵelementStart(21, "div", 126);
|
|
987
|
+
i0.ɵɵconditionalCreate(22, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_22_Template, 3, 1, "span", 127);
|
|
988
|
+
i0.ɵɵelementStart(23, "button", 128);
|
|
989
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_16_Template_button_click_23_listener() { i0.ɵɵrestoreView(_r29); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.RecomputeCoOccurrence()); });
|
|
990
|
+
i0.ɵɵconditionalCreate(24, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_24_Template, 2, 0)(25, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_25_Template, 2, 0);
|
|
990
991
|
i0.ɵɵelementEnd()()();
|
|
991
|
-
i0.ɵɵconditionalCreate(26,
|
|
992
|
+
i0.ɵɵconditionalCreate(26, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_26_Template, 17, 0, "div", 121)(27, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_27_Template, 4, 0, "div", 122);
|
|
992
993
|
i0.ɵɵelementEnd()();
|
|
993
994
|
} if (rf & 2) {
|
|
994
995
|
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
@@ -1011,34 +1012,34 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_23_Template(rf, ct
|
|
|
1011
1012
|
i0.ɵɵadvance(2);
|
|
1012
1013
|
i0.ɵɵconditional(ctx_r2.CoOccurrencePairs.length > 0 ? 26 : 27);
|
|
1013
1014
|
} }
|
|
1014
|
-
function
|
|
1015
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_9_For_22_Template(rf, ctx) { if (rf & 1) {
|
|
1015
1016
|
const _r45 = i0.ɵɵgetCurrentView();
|
|
1016
|
-
i0.ɵɵelementStart(0, "tr",
|
|
1017
|
-
i0.ɵɵlistener("click", function
|
|
1017
|
+
i0.ɵɵelementStart(0, "tr", 131);
|
|
1018
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_9_For_22_Template_tr_click_0_listener() { const source_r46 = i0.ɵɵrestoreView(_r45).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); ctx_r2.SelectSource(source_r46.Name); return i0.ɵɵresetView(ctx_r2.OpenDrillDown("source-row:" + source_r46.Name)); });
|
|
1018
1019
|
i0.ɵɵelementStart(1, "td")(2, "strong");
|
|
1019
1020
|
i0.ɵɵtext(3);
|
|
1020
1021
|
i0.ɵɵelementEnd()();
|
|
1021
1022
|
i0.ɵɵelementStart(4, "td");
|
|
1022
|
-
i0.ɵɵelement(5, "i",
|
|
1023
|
+
i0.ɵɵelement(5, "i", 159);
|
|
1023
1024
|
i0.ɵɵtext(6);
|
|
1024
1025
|
i0.ɵɵelementEnd();
|
|
1025
|
-
i0.ɵɵelementStart(7, "td",
|
|
1026
|
+
i0.ɵɵelementStart(7, "td", 129);
|
|
1026
1027
|
i0.ɵɵtext(8);
|
|
1027
1028
|
i0.ɵɵelementEnd();
|
|
1028
|
-
i0.ɵɵelementStart(9, "td",
|
|
1029
|
+
i0.ɵɵelementStart(9, "td", 129);
|
|
1029
1030
|
i0.ɵɵtext(10);
|
|
1030
1031
|
i0.ɵɵelementEnd();
|
|
1031
|
-
i0.ɵɵelementStart(11, "td",
|
|
1032
|
+
i0.ɵɵelementStart(11, "td", 129);
|
|
1032
1033
|
i0.ɵɵtext(12);
|
|
1033
1034
|
i0.ɵɵelementEnd();
|
|
1034
|
-
i0.ɵɵelementStart(13, "td",
|
|
1035
|
+
i0.ɵɵelementStart(13, "td", 129);
|
|
1035
1036
|
i0.ɵɵtext(14);
|
|
1036
1037
|
i0.ɵɵelementEnd();
|
|
1037
|
-
i0.ɵɵelementStart(15, "td",
|
|
1038
|
+
i0.ɵɵelementStart(15, "td", 135);
|
|
1038
1039
|
i0.ɵɵtext(16);
|
|
1039
1040
|
i0.ɵɵelementEnd();
|
|
1040
|
-
i0.ɵɵelementStart(17, "td")(18, "span",
|
|
1041
|
-
i0.ɵɵelement(19, "i",
|
|
1041
|
+
i0.ɵɵelementStart(17, "td")(18, "span", 160);
|
|
1042
|
+
i0.ɵɵelement(19, "i", 161);
|
|
1042
1043
|
i0.ɵɵtext(20);
|
|
1043
1044
|
i0.ɵɵelementEnd()()();
|
|
1044
1045
|
} if (rf & 2) {
|
|
@@ -1067,23 +1068,23 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_9_F
|
|
|
1067
1068
|
i0.ɵɵadvance(2);
|
|
1068
1069
|
i0.ɵɵtextInterpolate1(" ", source_r46.Status);
|
|
1069
1070
|
} }
|
|
1070
|
-
function
|
|
1071
|
-
i0.ɵɵelementStart(0, "div",
|
|
1071
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
1072
|
+
i0.ɵɵelementStart(0, "div", 121)(1, "table", 96)(2, "thead")(3, "tr")(4, "th");
|
|
1072
1073
|
i0.ɵɵtext(5, "Source Name");
|
|
1073
1074
|
i0.ɵɵelementEnd();
|
|
1074
1075
|
i0.ɵɵelementStart(6, "th");
|
|
1075
1076
|
i0.ɵɵtext(7, "Type");
|
|
1076
1077
|
i0.ɵɵelementEnd();
|
|
1077
|
-
i0.ɵɵelementStart(8, "th",
|
|
1078
|
+
i0.ɵɵelementStart(8, "th", 129);
|
|
1078
1079
|
i0.ɵɵtext(9, "Items");
|
|
1079
1080
|
i0.ɵɵelementEnd();
|
|
1080
|
-
i0.ɵɵelementStart(10, "th",
|
|
1081
|
+
i0.ɵɵelementStart(10, "th", 129);
|
|
1081
1082
|
i0.ɵɵtext(11, "Tags Generated");
|
|
1082
1083
|
i0.ɵɵelementEnd();
|
|
1083
|
-
i0.ɵɵelementStart(12, "th",
|
|
1084
|
+
i0.ɵɵelementStart(12, "th", 129);
|
|
1084
1085
|
i0.ɵɵtext(13, "Avg Tags/Item");
|
|
1085
1086
|
i0.ɵɵelementEnd();
|
|
1086
|
-
i0.ɵɵelementStart(14, "th",
|
|
1087
|
+
i0.ɵɵelementStart(14, "th", 129);
|
|
1087
1088
|
i0.ɵɵtext(15, "Avg Weight");
|
|
1088
1089
|
i0.ɵɵelementEnd();
|
|
1089
1090
|
i0.ɵɵelementStart(16, "th");
|
|
@@ -1093,32 +1094,32 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_9_T
|
|
|
1093
1094
|
i0.ɵɵtext(19, "Status");
|
|
1094
1095
|
i0.ɵɵelementEnd()()();
|
|
1095
1096
|
i0.ɵɵelementStart(20, "tbody");
|
|
1096
|
-
i0.ɵɵrepeaterCreate(21,
|
|
1097
|
+
i0.ɵɵrepeaterCreate(21, AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_9_For_22_Template, 21, 16, "tr", 158, _forTrack1);
|
|
1097
1098
|
i0.ɵɵelementEnd()()();
|
|
1098
1099
|
} if (rf & 2) {
|
|
1099
1100
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
1100
1101
|
i0.ɵɵadvance(21);
|
|
1101
1102
|
i0.ɵɵrepeater(ctx_r2.SourceComparison);
|
|
1102
1103
|
} }
|
|
1103
|
-
function
|
|
1104
|
-
i0.ɵɵelementStart(0, "div",
|
|
1105
|
-
i0.ɵɵelement(1, "i",
|
|
1104
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
1105
|
+
i0.ɵɵelementStart(0, "div", 122);
|
|
1106
|
+
i0.ɵɵelement(1, "i", 157);
|
|
1106
1107
|
i0.ɵɵelementStart(2, "p");
|
|
1107
1108
|
i0.ɵɵtext(3, "No content sources configured yet.");
|
|
1108
1109
|
i0.ɵɵelementEnd()();
|
|
1109
1110
|
} }
|
|
1110
|
-
function
|
|
1111
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
1111
1112
|
const _r48 = i0.ɵɵgetCurrentView();
|
|
1112
|
-
i0.ɵɵelementStart(0, "button",
|
|
1113
|
-
i0.ɵɵlistener("click", function
|
|
1114
|
-
i0.ɵɵelement(1, "i",
|
|
1113
|
+
i0.ɵɵelementStart(0, "button", 94);
|
|
1114
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r48); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.ExportDrillDownCSV()); });
|
|
1115
|
+
i0.ɵɵelement(1, "i", 95);
|
|
1115
1116
|
i0.ɵɵtext(2, " CSV");
|
|
1116
1117
|
i0.ɵɵelementEnd();
|
|
1117
1118
|
} }
|
|
1118
|
-
function
|
|
1119
|
-
i0.ɵɵelement(0, "mj-loading",
|
|
1119
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
1120
|
+
i0.ɵɵelement(0, "mj-loading", 91);
|
|
1120
1121
|
} }
|
|
1121
|
-
function
|
|
1122
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Conditional_10_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
1122
1123
|
i0.ɵɵelementStart(0, "th");
|
|
1123
1124
|
i0.ɵɵtext(1);
|
|
1124
1125
|
i0.ɵɵelementEnd();
|
|
@@ -1127,10 +1128,10 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_11_
|
|
|
1127
1128
|
i0.ɵɵadvance();
|
|
1128
1129
|
i0.ɵɵtextInterpolate(col_r49);
|
|
1129
1130
|
} }
|
|
1130
|
-
function
|
|
1131
|
-
i0.ɵɵelement(0, "th",
|
|
1131
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Conditional_10_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
1132
|
+
i0.ɵɵelement(0, "th", 97);
|
|
1132
1133
|
} }
|
|
1133
|
-
function
|
|
1134
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Conditional_10_For_9_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
1134
1135
|
i0.ɵɵelementStart(0, "td");
|
|
1135
1136
|
i0.ɵɵtext(1);
|
|
1136
1137
|
i0.ɵɵelementEnd();
|
|
@@ -1140,26 +1141,26 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_11_
|
|
|
1140
1141
|
i0.ɵɵadvance();
|
|
1141
1142
|
i0.ɵɵtextInterpolate(row_r51[col_r50]);
|
|
1142
1143
|
} }
|
|
1143
|
-
function
|
|
1144
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Conditional_10_For_9_Conditional_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
1144
1145
|
const _r52 = i0.ɵɵgetCurrentView();
|
|
1145
|
-
i0.ɵɵelementStart(0, "button",
|
|
1146
|
-
i0.ɵɵlistener("click", function
|
|
1147
|
-
i0.ɵɵelement(1, "i",
|
|
1146
|
+
i0.ɵɵelementStart(0, "button", 137);
|
|
1147
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Conditional_10_For_9_Conditional_3_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r52); const row_r51 = i0.ɵɵnextContext(2).$implicit; const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.OpenDrillDownRecord(row_r51)); });
|
|
1148
|
+
i0.ɵɵelement(1, "i", 100);
|
|
1148
1149
|
i0.ɵɵelementEnd();
|
|
1149
1150
|
} }
|
|
1150
|
-
function
|
|
1151
|
-
i0.ɵɵelementStart(0, "td",
|
|
1152
|
-
i0.ɵɵconditionalCreate(1,
|
|
1151
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Conditional_10_For_9_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1152
|
+
i0.ɵɵelementStart(0, "td", 97);
|
|
1153
|
+
i0.ɵɵconditionalCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Conditional_10_For_9_Conditional_3_Conditional_1_Template, 2, 0, "button", 136);
|
|
1153
1154
|
i0.ɵɵelementEnd();
|
|
1154
1155
|
} if (rf & 2) {
|
|
1155
1156
|
const row_r51 = i0.ɵɵnextContext().$implicit;
|
|
1156
1157
|
i0.ɵɵadvance();
|
|
1157
1158
|
i0.ɵɵconditional(row_r51["_RecordID"] ? 1 : -1);
|
|
1158
1159
|
} }
|
|
1159
|
-
function
|
|
1160
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Conditional_10_For_9_Template(rf, ctx) { if (rf & 1) {
|
|
1160
1161
|
i0.ɵɵelementStart(0, "tr");
|
|
1161
|
-
i0.ɵɵrepeaterCreate(1,
|
|
1162
|
-
i0.ɵɵconditionalCreate(3,
|
|
1162
|
+
i0.ɵɵrepeaterCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Conditional_10_For_9_For_2_Template, 2, 1, "td", null, i0.ɵɵrepeaterTrackByIdentity);
|
|
1163
|
+
i0.ɵɵconditionalCreate(3, AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Conditional_10_For_9_Conditional_3_Template, 2, 1, "td", 97);
|
|
1163
1164
|
i0.ɵɵelementEnd();
|
|
1164
1165
|
} if (rf & 2) {
|
|
1165
1166
|
const ctx_r2 = i0.ɵɵnextContext(5);
|
|
@@ -1168,13 +1169,13 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_11_
|
|
|
1168
1169
|
i0.ɵɵadvance(2);
|
|
1169
1170
|
i0.ɵɵconditional(ctx_r2.DrillDownHasActions ? 3 : -1);
|
|
1170
1171
|
} }
|
|
1171
|
-
function
|
|
1172
|
-
i0.ɵɵelementStart(0, "div",
|
|
1173
|
-
i0.ɵɵrepeaterCreate(4,
|
|
1174
|
-
i0.ɵɵconditionalCreate(6,
|
|
1172
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
1173
|
+
i0.ɵɵelementStart(0, "div", 92)(1, "table", 96)(2, "thead")(3, "tr");
|
|
1174
|
+
i0.ɵɵrepeaterCreate(4, AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Conditional_10_For_5_Template, 2, 1, "th", null, i0.ɵɵrepeaterTrackByIdentity);
|
|
1175
|
+
i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Conditional_10_Conditional_6_Template, 1, 0, "th", 97);
|
|
1175
1176
|
i0.ɵɵelementEnd()();
|
|
1176
1177
|
i0.ɵɵelementStart(7, "tbody");
|
|
1177
|
-
i0.ɵɵrepeaterCreate(8,
|
|
1178
|
+
i0.ɵɵrepeaterCreate(8, AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Conditional_10_For_9_Template, 4, 1, "tr", null, i0.ɵɵcomponentInstance().TrackByIndex, true);
|
|
1178
1179
|
i0.ɵɵelementEnd()()();
|
|
1179
1180
|
} if (rf & 2) {
|
|
1180
1181
|
const ctx_r2 = i0.ɵɵnextContext(4);
|
|
@@ -1185,24 +1186,24 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_11_
|
|
|
1185
1186
|
i0.ɵɵadvance(2);
|
|
1186
1187
|
i0.ɵɵrepeater(ctx_r2.DrillDownData);
|
|
1187
1188
|
} }
|
|
1188
|
-
function
|
|
1189
|
-
i0.ɵɵelementStart(0, "div",
|
|
1189
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
1190
|
+
i0.ɵɵelementStart(0, "div", 93);
|
|
1190
1191
|
i0.ɵɵtext(1, "No run data for this source");
|
|
1191
1192
|
i0.ɵɵelementEnd();
|
|
1192
1193
|
} }
|
|
1193
|
-
function
|
|
1194
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
1194
1195
|
const _r47 = i0.ɵɵgetCurrentView();
|
|
1195
|
-
i0.ɵɵelementStart(0, "div", 28)(1, "div",
|
|
1196
|
-
i0.ɵɵelement(3, "i",
|
|
1196
|
+
i0.ɵɵelementStart(0, "div", 28)(1, "div", 84)(2, "span", 85);
|
|
1197
|
+
i0.ɵɵelement(3, "i", 86);
|
|
1197
1198
|
i0.ɵɵtext(4);
|
|
1198
1199
|
i0.ɵɵelementEnd();
|
|
1199
|
-
i0.ɵɵelementStart(5, "div",
|
|
1200
|
-
i0.ɵɵconditionalCreate(6,
|
|
1201
|
-
i0.ɵɵelementStart(7, "button",
|
|
1202
|
-
i0.ɵɵlistener("click", function
|
|
1203
|
-
i0.ɵɵelement(8, "i",
|
|
1200
|
+
i0.ɵɵelementStart(5, "div", 87);
|
|
1201
|
+
i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Conditional_6_Template, 3, 0, "button", 88);
|
|
1202
|
+
i0.ɵɵelementStart(7, "button", 89);
|
|
1203
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r47); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.CloseDrillDown()); });
|
|
1204
|
+
i0.ɵɵelement(8, "i", 90);
|
|
1204
1205
|
i0.ɵɵelementEnd()()();
|
|
1205
|
-
i0.ɵɵconditionalCreate(9,
|
|
1206
|
+
i0.ɵɵconditionalCreate(9, AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Conditional_9_Template, 1, 0, "mj-loading", 91)(10, AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Conditional_10_Template, 10, 1, "div", 92)(11, AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Conditional_11_Template, 2, 0, "div", 93);
|
|
1206
1207
|
i0.ɵɵelementEnd();
|
|
1207
1208
|
} if (rf & 2) {
|
|
1208
1209
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
@@ -1213,12 +1214,12 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_11_
|
|
|
1213
1214
|
i0.ɵɵadvance(3);
|
|
1214
1215
|
i0.ɵɵconditional(ctx_r2.IsDrillDownLoading ? 9 : ctx_r2.DrillDownData.length > 0 ? 10 : 11);
|
|
1215
1216
|
} }
|
|
1216
|
-
function
|
|
1217
|
-
i0.ɵɵelementStart(0, "div",
|
|
1217
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_12_For_11_Template(rf, ctx) { if (rf & 1) {
|
|
1218
|
+
i0.ɵɵelementStart(0, "div", 34)(1, "div", 171);
|
|
1218
1219
|
i0.ɵɵtext(2);
|
|
1219
1220
|
i0.ɵɵelementEnd();
|
|
1220
|
-
i0.ɵɵelement(3, "div",
|
|
1221
|
-
i0.ɵɵelementStart(4, "div",
|
|
1221
|
+
i0.ɵɵelement(3, "div", 102);
|
|
1222
|
+
i0.ɵɵelementStart(4, "div", 103);
|
|
1222
1223
|
i0.ɵɵtext(5);
|
|
1223
1224
|
i0.ɵɵelementEnd()();
|
|
1224
1225
|
} if (rf & 2) {
|
|
@@ -1230,11 +1231,11 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_12_
|
|
|
1230
1231
|
i0.ɵɵadvance(2);
|
|
1231
1232
|
i0.ɵɵtextInterpolate(bar_r53.Label);
|
|
1232
1233
|
} }
|
|
1233
|
-
function
|
|
1234
|
-
i0.ɵɵelementStart(0, "div",
|
|
1234
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_12_For_18_Template(rf, ctx) { if (rf & 1) {
|
|
1235
|
+
i0.ɵɵelementStart(0, "div", 168)(1, "span", 172);
|
|
1235
1236
|
i0.ɵɵtext(2);
|
|
1236
1237
|
i0.ɵɵelementEnd();
|
|
1237
|
-
i0.ɵɵelementStart(3, "div",
|
|
1238
|
+
i0.ɵɵelementStart(3, "div", 173)(4, "div", 174);
|
|
1238
1239
|
i0.ɵɵtext(5);
|
|
1239
1240
|
i0.ɵɵelementEnd()()();
|
|
1240
1241
|
} if (rf & 2) {
|
|
@@ -1246,27 +1247,27 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_12_
|
|
|
1246
1247
|
i0.ɵɵadvance();
|
|
1247
1248
|
i0.ɵɵtextInterpolate1("", band_r54.Percentage, "%");
|
|
1248
1249
|
} }
|
|
1249
|
-
function
|
|
1250
|
-
i0.ɵɵelementStart(0, "div",
|
|
1251
|
-
i0.ɵɵelement(2, "i",
|
|
1250
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
1251
|
+
i0.ɵɵelementStart(0, "div", 123)(1, "h3");
|
|
1252
|
+
i0.ɵɵelement(2, "i", 162);
|
|
1252
1253
|
i0.ɵɵtext(3);
|
|
1253
1254
|
i0.ɵɵelementEnd();
|
|
1254
|
-
i0.ɵɵelementStart(4, "div",
|
|
1255
|
-
i0.ɵɵelement(7, "i",
|
|
1255
|
+
i0.ɵɵelementStart(4, "div", 163)(5, "div", 164)(6, "div", 31);
|
|
1256
|
+
i0.ɵɵelement(7, "i", 138);
|
|
1256
1257
|
i0.ɵɵtext(8, " Items Processed (Last 8 Weeks)");
|
|
1257
1258
|
i0.ɵɵelementEnd();
|
|
1258
|
-
i0.ɵɵelementStart(9, "div",
|
|
1259
|
-
i0.ɵɵrepeaterCreate(10,
|
|
1259
|
+
i0.ɵɵelementStart(9, "div", 165);
|
|
1260
|
+
i0.ɵɵrepeaterCreate(10, AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_12_For_11_Template, 6, 6, "div", 34, _forTrack2);
|
|
1260
1261
|
i0.ɵɵelementEnd()();
|
|
1261
|
-
i0.ɵɵelementStart(12, "div",
|
|
1262
|
-
i0.ɵɵelement(14, "i",
|
|
1262
|
+
i0.ɵɵelementStart(12, "div", 164)(13, "div", 31);
|
|
1263
|
+
i0.ɵɵelement(14, "i", 166);
|
|
1263
1264
|
i0.ɵɵtext(15, " Tag Quality Distribution");
|
|
1264
1265
|
i0.ɵɵelementEnd();
|
|
1265
|
-
i0.ɵɵelementStart(16, "div",
|
|
1266
|
-
i0.ɵɵrepeaterCreate(17,
|
|
1266
|
+
i0.ɵɵelementStart(16, "div", 167);
|
|
1267
|
+
i0.ɵɵrepeaterCreate(17, AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_12_For_18_Template, 6, 6, "div", 168, _forTrack2);
|
|
1267
1268
|
i0.ɵɵelementEnd();
|
|
1268
|
-
i0.ɵɵelementStart(19, "div",
|
|
1269
|
-
i0.ɵɵelement(20, "i",
|
|
1269
|
+
i0.ɵɵelementStart(19, "div", 169);
|
|
1270
|
+
i0.ɵɵelement(20, "i", 170);
|
|
1270
1271
|
i0.ɵɵtext(21);
|
|
1271
1272
|
i0.ɵɵelementEnd()()()();
|
|
1272
1273
|
} if (rf & 2) {
|
|
@@ -1280,14 +1281,14 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_12_
|
|
|
1280
1281
|
i0.ɵɵadvance(4);
|
|
1281
1282
|
i0.ɵɵtextInterpolate1(" ", ctx_r2.SourceQualityNote, " ");
|
|
1282
1283
|
} }
|
|
1283
|
-
function
|
|
1284
|
-
i0.ɵɵelementStart(0, "div",
|
|
1284
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_13_For_6_Template(rf, ctx) { if (rf & 1) {
|
|
1285
|
+
i0.ɵɵelementStart(0, "div", 178)(1, "div", 179);
|
|
1285
1286
|
i0.ɵɵtext(2);
|
|
1286
1287
|
i0.ɵɵelementEnd();
|
|
1287
|
-
i0.ɵɵelementStart(3, "div",
|
|
1288
|
+
i0.ɵɵelementStart(3, "div", 180);
|
|
1288
1289
|
i0.ɵɵtext(4);
|
|
1289
1290
|
i0.ɵɵelementEnd();
|
|
1290
|
-
i0.ɵɵelementStart(5, "div",
|
|
1291
|
+
i0.ɵɵelementStart(5, "div", 181);
|
|
1291
1292
|
i0.ɵɵtext(6, "uptime");
|
|
1292
1293
|
i0.ɵɵelementEnd()();
|
|
1293
1294
|
} if (rf & 2) {
|
|
@@ -1300,13 +1301,13 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_13_
|
|
|
1300
1301
|
i0.ɵɵadvance();
|
|
1301
1302
|
i0.ɵɵtextInterpolate1("", card_r55.Uptime, "%");
|
|
1302
1303
|
} }
|
|
1303
|
-
function
|
|
1304
|
-
i0.ɵɵelementStart(0, "div",
|
|
1305
|
-
i0.ɵɵelement(2, "i",
|
|
1304
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
1305
|
+
i0.ɵɵelementStart(0, "div", 123)(1, "h3");
|
|
1306
|
+
i0.ɵɵelement(2, "i", 175);
|
|
1306
1307
|
i0.ɵɵtext(3, " Source Health Summary");
|
|
1307
1308
|
i0.ɵɵelementEnd();
|
|
1308
|
-
i0.ɵɵelementStart(4, "div",
|
|
1309
|
-
i0.ɵɵrepeaterCreate(5,
|
|
1309
|
+
i0.ɵɵelementStart(4, "div", 176);
|
|
1310
|
+
i0.ɵɵrepeaterCreate(5, AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_13_For_6_Template, 7, 6, "div", 177, _forTrack1);
|
|
1310
1311
|
i0.ɵɵelementEnd()();
|
|
1311
1312
|
} if (rf & 2) {
|
|
1312
1313
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
@@ -1315,21 +1316,21 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_13_
|
|
|
1315
1316
|
i0.ɵɵadvance();
|
|
1316
1317
|
i0.ɵɵrepeater(ctx_r2.SourceHealthCards);
|
|
1317
1318
|
} }
|
|
1318
|
-
function
|
|
1319
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
1319
1320
|
i0.ɵɵelementStart(0, "section", 17)(1, "div", 19);
|
|
1320
|
-
i0.ɵɵelement(2, "i",
|
|
1321
|
+
i0.ɵɵelement(2, "i", 157);
|
|
1321
1322
|
i0.ɵɵelementStart(3, "h1");
|
|
1322
1323
|
i0.ɵɵtext(4, "Sources");
|
|
1323
1324
|
i0.ɵɵelementEnd()();
|
|
1324
|
-
i0.ɵɵelementStart(5, "div",
|
|
1325
|
-
i0.ɵɵelement(7, "i",
|
|
1325
|
+
i0.ɵɵelementStart(5, "div", 118)(6, "h3");
|
|
1326
|
+
i0.ɵɵelement(7, "i", 86);
|
|
1326
1327
|
i0.ɵɵtext(8, " Source Comparison");
|
|
1327
1328
|
i0.ɵɵelementEnd();
|
|
1328
|
-
i0.ɵɵconditionalCreate(9,
|
|
1329
|
+
i0.ɵɵconditionalCreate(9, AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_9_Template, 23, 0, "div", 121)(10, AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_10_Template, 4, 0, "div", 122);
|
|
1329
1330
|
i0.ɵɵelementEnd();
|
|
1330
|
-
i0.ɵɵconditionalCreate(11,
|
|
1331
|
-
i0.ɵɵconditionalCreate(12,
|
|
1332
|
-
i0.ɵɵconditionalCreate(13,
|
|
1331
|
+
i0.ɵɵconditionalCreate(11, AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_11_Template, 12, 3, "div", 28);
|
|
1332
|
+
i0.ɵɵconditionalCreate(12, AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_12_Template, 22, 2, "div", 123);
|
|
1333
|
+
i0.ɵɵconditionalCreate(13, AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_13_Template, 7, 2, "div", 123);
|
|
1333
1334
|
i0.ɵɵelementEnd();
|
|
1334
1335
|
} if (rf & 2) {
|
|
1335
1336
|
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
@@ -1342,16 +1343,16 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_24_Template(rf, ct
|
|
|
1342
1343
|
i0.ɵɵadvance();
|
|
1343
1344
|
i0.ɵɵconditional(ctx_r2.SourceHealthCards.length > 0 ? 13 : -1);
|
|
1344
1345
|
} }
|
|
1345
|
-
function
|
|
1346
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_18_For_12_Template(rf, ctx) { if (rf & 1) {
|
|
1346
1347
|
const _r56 = i0.ɵɵgetCurrentView();
|
|
1347
|
-
i0.ɵɵelementStart(0, "div",
|
|
1348
|
-
i0.ɵɵlistener("click", function
|
|
1348
|
+
i0.ɵɵelementStart(0, "div", 197);
|
|
1349
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_18_For_12_Template_div_click_0_listener() { const $index_r57 = i0.ɵɵrestoreView(_r56).$index; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.OpenDrillDown("pipeline-throughput:" + $index_r57)); });
|
|
1349
1350
|
i0.ɵɵelementEnd();
|
|
1350
1351
|
} if (rf & 2) {
|
|
1351
1352
|
const bar_r58 = ctx.$implicit;
|
|
1352
1353
|
i0.ɵɵstyleProp("height", bar_r58.Percentage, "%")("background", bar_r58.IsError ? "var(--mj-status-error)" : "var(--mj-brand-primary)")("opacity", bar_r58.IsError ? 0.7 : 0.6 + bar_r58.Percentage / 300);
|
|
1353
1354
|
} }
|
|
1354
|
-
function
|
|
1355
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_18_For_15_Template(rf, ctx) { if (rf & 1) {
|
|
1355
1356
|
i0.ɵɵelementStart(0, "span");
|
|
1356
1357
|
i0.ɵɵtext(1);
|
|
1357
1358
|
i0.ɵɵelementEnd();
|
|
@@ -1360,18 +1361,18 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_25_For_15_Template
|
|
|
1360
1361
|
i0.ɵɵadvance();
|
|
1361
1362
|
i0.ɵɵtextInterpolate(label_r59);
|
|
1362
1363
|
} }
|
|
1363
|
-
function
|
|
1364
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
1364
1365
|
const _r61 = i0.ɵɵgetCurrentView();
|
|
1365
|
-
i0.ɵɵelementStart(0, "button",
|
|
1366
|
-
i0.ɵɵlistener("click", function
|
|
1367
|
-
i0.ɵɵelement(1, "i",
|
|
1366
|
+
i0.ɵɵelementStart(0, "button", 94);
|
|
1367
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r61); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.ExportDrillDownCSV()); });
|
|
1368
|
+
i0.ɵɵelement(1, "i", 95);
|
|
1368
1369
|
i0.ɵɵtext(2, " CSV");
|
|
1369
1370
|
i0.ɵɵelementEnd();
|
|
1370
1371
|
} }
|
|
1371
|
-
function
|
|
1372
|
-
i0.ɵɵelement(0, "mj-loading",
|
|
1372
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
1373
|
+
i0.ɵɵelement(0, "mj-loading", 91);
|
|
1373
1374
|
} }
|
|
1374
|
-
function
|
|
1375
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Conditional_10_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
1375
1376
|
i0.ɵɵelementStart(0, "th");
|
|
1376
1377
|
i0.ɵɵtext(1);
|
|
1377
1378
|
i0.ɵɵelementEnd();
|
|
@@ -1380,10 +1381,10 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_16_
|
|
|
1380
1381
|
i0.ɵɵadvance();
|
|
1381
1382
|
i0.ɵɵtextInterpolate(col_r62);
|
|
1382
1383
|
} }
|
|
1383
|
-
function
|
|
1384
|
-
i0.ɵɵelement(0, "th",
|
|
1384
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Conditional_10_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
1385
|
+
i0.ɵɵelement(0, "th", 97);
|
|
1385
1386
|
} }
|
|
1386
|
-
function
|
|
1387
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Conditional_10_For_9_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
1387
1388
|
i0.ɵɵelementStart(0, "td");
|
|
1388
1389
|
i0.ɵɵtext(1);
|
|
1389
1390
|
i0.ɵɵelementEnd();
|
|
@@ -1393,26 +1394,26 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_16_
|
|
|
1393
1394
|
i0.ɵɵadvance();
|
|
1394
1395
|
i0.ɵɵtextInterpolate(row_r64[col_r63]);
|
|
1395
1396
|
} }
|
|
1396
|
-
function
|
|
1397
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Conditional_10_For_9_Conditional_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
1397
1398
|
const _r65 = i0.ɵɵgetCurrentView();
|
|
1398
|
-
i0.ɵɵelementStart(0, "button",
|
|
1399
|
-
i0.ɵɵlistener("click", function
|
|
1400
|
-
i0.ɵɵelement(1, "i",
|
|
1399
|
+
i0.ɵɵelementStart(0, "button", 137);
|
|
1400
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Conditional_10_For_9_Conditional_3_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r65); const row_r64 = i0.ɵɵnextContext(2).$implicit; const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.OpenDrillDownRecord(row_r64)); });
|
|
1401
|
+
i0.ɵɵelement(1, "i", 100);
|
|
1401
1402
|
i0.ɵɵelementEnd();
|
|
1402
1403
|
} }
|
|
1403
|
-
function
|
|
1404
|
-
i0.ɵɵelementStart(0, "td",
|
|
1405
|
-
i0.ɵɵconditionalCreate(1,
|
|
1404
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Conditional_10_For_9_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1405
|
+
i0.ɵɵelementStart(0, "td", 97);
|
|
1406
|
+
i0.ɵɵconditionalCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Conditional_10_For_9_Conditional_3_Conditional_1_Template, 2, 0, "button", 136);
|
|
1406
1407
|
i0.ɵɵelementEnd();
|
|
1407
1408
|
} if (rf & 2) {
|
|
1408
1409
|
const row_r64 = i0.ɵɵnextContext().$implicit;
|
|
1409
1410
|
i0.ɵɵadvance();
|
|
1410
1411
|
i0.ɵɵconditional(row_r64["_RecordID"] ? 1 : -1);
|
|
1411
1412
|
} }
|
|
1412
|
-
function
|
|
1413
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Conditional_10_For_9_Template(rf, ctx) { if (rf & 1) {
|
|
1413
1414
|
i0.ɵɵelementStart(0, "tr");
|
|
1414
|
-
i0.ɵɵrepeaterCreate(1,
|
|
1415
|
-
i0.ɵɵconditionalCreate(3,
|
|
1415
|
+
i0.ɵɵrepeaterCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Conditional_10_For_9_For_2_Template, 2, 1, "td", null, i0.ɵɵrepeaterTrackByIdentity);
|
|
1416
|
+
i0.ɵɵconditionalCreate(3, AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Conditional_10_For_9_Conditional_3_Template, 2, 1, "td", 97);
|
|
1416
1417
|
i0.ɵɵelementEnd();
|
|
1417
1418
|
} if (rf & 2) {
|
|
1418
1419
|
const ctx_r2 = i0.ɵɵnextContext(5);
|
|
@@ -1421,13 +1422,13 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_16_
|
|
|
1421
1422
|
i0.ɵɵadvance(2);
|
|
1422
1423
|
i0.ɵɵconditional(ctx_r2.DrillDownHasActions ? 3 : -1);
|
|
1423
1424
|
} }
|
|
1424
|
-
function
|
|
1425
|
-
i0.ɵɵelementStart(0, "div",
|
|
1426
|
-
i0.ɵɵrepeaterCreate(4,
|
|
1427
|
-
i0.ɵɵconditionalCreate(6,
|
|
1425
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
1426
|
+
i0.ɵɵelementStart(0, "div", 92)(1, "table", 96)(2, "thead")(3, "tr");
|
|
1427
|
+
i0.ɵɵrepeaterCreate(4, AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Conditional_10_For_5_Template, 2, 1, "th", null, i0.ɵɵrepeaterTrackByIdentity);
|
|
1428
|
+
i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Conditional_10_Conditional_6_Template, 1, 0, "th", 97);
|
|
1428
1429
|
i0.ɵɵelementEnd()();
|
|
1429
1430
|
i0.ɵɵelementStart(7, "tbody");
|
|
1430
|
-
i0.ɵɵrepeaterCreate(8,
|
|
1431
|
+
i0.ɵɵrepeaterCreate(8, AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Conditional_10_For_9_Template, 4, 1, "tr", null, i0.ɵɵcomponentInstance().TrackByIndex, true);
|
|
1431
1432
|
i0.ɵɵelementEnd()()();
|
|
1432
1433
|
} if (rf & 2) {
|
|
1433
1434
|
const ctx_r2 = i0.ɵɵnextContext(4);
|
|
@@ -1438,24 +1439,24 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_16_
|
|
|
1438
1439
|
i0.ɵɵadvance(2);
|
|
1439
1440
|
i0.ɵɵrepeater(ctx_r2.DrillDownData);
|
|
1440
1441
|
} }
|
|
1441
|
-
function
|
|
1442
|
-
i0.ɵɵelementStart(0, "div",
|
|
1442
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
1443
|
+
i0.ɵɵelementStart(0, "div", 93);
|
|
1443
1444
|
i0.ɵɵtext(1, "No runs for this day");
|
|
1444
1445
|
i0.ɵɵelementEnd();
|
|
1445
1446
|
} }
|
|
1446
|
-
function
|
|
1447
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
1447
1448
|
const _r60 = i0.ɵɵgetCurrentView();
|
|
1448
|
-
i0.ɵɵelementStart(0, "div", 28)(1, "div",
|
|
1449
|
-
i0.ɵɵelement(3, "i",
|
|
1449
|
+
i0.ɵɵelementStart(0, "div", 28)(1, "div", 84)(2, "span", 85);
|
|
1450
|
+
i0.ɵɵelement(3, "i", 86);
|
|
1450
1451
|
i0.ɵɵtext(4, " Runs for Selected Day");
|
|
1451
1452
|
i0.ɵɵelementEnd();
|
|
1452
|
-
i0.ɵɵelementStart(5, "div",
|
|
1453
|
-
i0.ɵɵconditionalCreate(6,
|
|
1454
|
-
i0.ɵɵelementStart(7, "button",
|
|
1455
|
-
i0.ɵɵlistener("click", function
|
|
1456
|
-
i0.ɵɵelement(8, "i",
|
|
1453
|
+
i0.ɵɵelementStart(5, "div", 87);
|
|
1454
|
+
i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Conditional_6_Template, 3, 0, "button", 88);
|
|
1455
|
+
i0.ɵɵelementStart(7, "button", 89);
|
|
1456
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r60); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.CloseDrillDown()); });
|
|
1457
|
+
i0.ɵɵelement(8, "i", 90);
|
|
1457
1458
|
i0.ɵɵelementEnd()()();
|
|
1458
|
-
i0.ɵɵconditionalCreate(9,
|
|
1459
|
+
i0.ɵɵconditionalCreate(9, AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Conditional_9_Template, 1, 0, "mj-loading", 91)(10, AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Conditional_10_Template, 10, 1, "div", 92)(11, AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Conditional_11_Template, 2, 0, "div", 93);
|
|
1459
1460
|
i0.ɵɵelementEnd();
|
|
1460
1461
|
} if (rf & 2) {
|
|
1461
1462
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
@@ -1464,20 +1465,20 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_16_
|
|
|
1464
1465
|
i0.ɵɵadvance(3);
|
|
1465
1466
|
i0.ɵɵconditional(ctx_r2.IsDrillDownLoading ? 9 : ctx_r2.DrillDownData.length > 0 ? 10 : 11);
|
|
1466
1467
|
} }
|
|
1467
|
-
function
|
|
1468
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_18_For_24_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
1468
1469
|
i0.ɵɵtext(0);
|
|
1469
1470
|
} if (rf & 2) {
|
|
1470
1471
|
const stage_r66 = i0.ɵɵnextContext().$implicit;
|
|
1471
1472
|
i0.ɵɵtextInterpolate1(" ", stage_r66.Time, "s ");
|
|
1472
1473
|
} }
|
|
1473
|
-
function
|
|
1474
|
-
i0.ɵɵelementStart(0, "div",
|
|
1474
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_18_For_24_Template(rf, ctx) { if (rf & 1) {
|
|
1475
|
+
i0.ɵɵelementStart(0, "div", 188)(1, "div", 198);
|
|
1475
1476
|
i0.ɵɵtext(2);
|
|
1476
1477
|
i0.ɵɵelementEnd();
|
|
1477
|
-
i0.ɵɵelementStart(3, "div",
|
|
1478
|
-
i0.ɵɵconditionalCreate(5,
|
|
1478
|
+
i0.ɵɵelementStart(3, "div", 199)(4, "div", 200);
|
|
1479
|
+
i0.ɵɵconditionalCreate(5, AnalyticsResourceComponent_Conditional_6_Conditional_18_For_24_Conditional_5_Template, 1, 1);
|
|
1479
1480
|
i0.ɵɵelementEnd()();
|
|
1480
|
-
i0.ɵɵelementStart(6, "div",
|
|
1481
|
+
i0.ɵɵelementStart(6, "div", 201);
|
|
1481
1482
|
i0.ɵɵtext(7);
|
|
1482
1483
|
i0.ɵɵelementEnd()();
|
|
1483
1484
|
} if (rf & 2) {
|
|
@@ -1491,9 +1492,9 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_25_For_24_Template
|
|
|
1491
1492
|
i0.ɵɵadvance(2);
|
|
1492
1493
|
i0.ɵɵtextInterpolate1("", stage_r66.Time, "s");
|
|
1493
1494
|
} }
|
|
1494
|
-
function
|
|
1495
|
-
i0.ɵɵelementStart(0, "span",
|
|
1496
|
-
i0.ɵɵelement(1, "i",
|
|
1495
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_30_Template(rf, ctx) { if (rf & 1) {
|
|
1496
|
+
i0.ɵɵelementStart(0, "span", 190);
|
|
1497
|
+
i0.ɵɵelement(1, "i", 202);
|
|
1497
1498
|
i0.ɵɵtext(2);
|
|
1498
1499
|
i0.ɵɵelementEnd();
|
|
1499
1500
|
} if (rf & 2) {
|
|
@@ -1501,26 +1502,26 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_30_
|
|
|
1501
1502
|
i0.ɵɵadvance(2);
|
|
1502
1503
|
i0.ɵɵtextInterpolate2(" ", ctx_r2.BottleneckStage, " stage is the bottleneck (", ctx_r2.BottleneckPercent, "% of total time) ");
|
|
1503
1504
|
} }
|
|
1504
|
-
function
|
|
1505
|
-
i0.ɵɵelementStart(0, "tr")(1, "td",
|
|
1505
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_52_For_22_Template(rf, ctx) { if (rf & 1) {
|
|
1506
|
+
i0.ɵɵelementStart(0, "tr")(1, "td", 204);
|
|
1506
1507
|
i0.ɵɵtext(2);
|
|
1507
1508
|
i0.ɵɵelementEnd();
|
|
1508
1509
|
i0.ɵɵelementStart(3, "td");
|
|
1509
1510
|
i0.ɵɵtext(4);
|
|
1510
1511
|
i0.ɵɵelementEnd();
|
|
1511
|
-
i0.ɵɵelementStart(5, "td",
|
|
1512
|
+
i0.ɵɵelementStart(5, "td", 135);
|
|
1512
1513
|
i0.ɵɵtext(6);
|
|
1513
1514
|
i0.ɵɵelementEnd();
|
|
1514
|
-
i0.ɵɵelementStart(7, "td")(8, "div",
|
|
1515
|
-
i0.ɵɵelement(9, "div",
|
|
1515
|
+
i0.ɵɵelementStart(7, "td")(8, "div", 205);
|
|
1516
|
+
i0.ɵɵelement(9, "div", 206);
|
|
1516
1517
|
i0.ɵɵelementEnd();
|
|
1517
|
-
i0.ɵɵelementStart(10, "span",
|
|
1518
|
+
i0.ɵɵelementStart(10, "span", 207);
|
|
1518
1519
|
i0.ɵɵtext(11);
|
|
1519
1520
|
i0.ɵɵelementEnd()();
|
|
1520
|
-
i0.ɵɵelementStart(12, "td")(13, "span",
|
|
1521
|
+
i0.ɵɵelementStart(12, "td")(13, "span", 160);
|
|
1521
1522
|
i0.ɵɵtext(14);
|
|
1522
1523
|
i0.ɵɵelementEnd()();
|
|
1523
|
-
i0.ɵɵelementStart(15, "td",
|
|
1524
|
+
i0.ɵɵelementStart(15, "td", 129);
|
|
1524
1525
|
i0.ɵɵtext(16);
|
|
1525
1526
|
i0.ɵɵelementEnd()();
|
|
1526
1527
|
} if (rf & 2) {
|
|
@@ -1543,12 +1544,12 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_52_
|
|
|
1543
1544
|
i0.ɵɵadvance(2);
|
|
1544
1545
|
i0.ɵɵtextInterpolate(ctx_r2.FormatNumber(run_r67.Items));
|
|
1545
1546
|
} }
|
|
1546
|
-
function
|
|
1547
|
-
i0.ɵɵelementStart(0, "div",
|
|
1548
|
-
i0.ɵɵelement(2, "i",
|
|
1547
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_52_Template(rf, ctx) { if (rf & 1) {
|
|
1548
|
+
i0.ɵɵelementStart(0, "div", 123)(1, "h3");
|
|
1549
|
+
i0.ɵɵelement(2, "i", 203);
|
|
1549
1550
|
i0.ɵɵtext(3, " Active Runs");
|
|
1550
1551
|
i0.ɵɵelementEnd();
|
|
1551
|
-
i0.ɵɵelementStart(4, "div",
|
|
1552
|
+
i0.ɵɵelementStart(4, "div", 121)(5, "table", 96)(6, "thead")(7, "tr")(8, "th");
|
|
1552
1553
|
i0.ɵɵtext(9, "Run ID");
|
|
1553
1554
|
i0.ɵɵelementEnd();
|
|
1554
1555
|
i0.ɵɵelementStart(10, "th");
|
|
@@ -1563,25 +1564,25 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_52_
|
|
|
1563
1564
|
i0.ɵɵelementStart(16, "th");
|
|
1564
1565
|
i0.ɵɵtext(17, "Stage");
|
|
1565
1566
|
i0.ɵɵelementEnd();
|
|
1566
|
-
i0.ɵɵelementStart(18, "th",
|
|
1567
|
+
i0.ɵɵelementStart(18, "th", 129);
|
|
1567
1568
|
i0.ɵɵtext(19, "Items");
|
|
1568
1569
|
i0.ɵɵelementEnd()()();
|
|
1569
1570
|
i0.ɵɵelementStart(20, "tbody");
|
|
1570
|
-
i0.ɵɵrepeaterCreate(21,
|
|
1571
|
+
i0.ɵɵrepeaterCreate(21, AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_52_For_22_Template, 17, 10, "tr", null, _forTrack5);
|
|
1571
1572
|
i0.ɵɵelementEnd()()()();
|
|
1572
1573
|
} if (rf & 2) {
|
|
1573
1574
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
1574
1575
|
i0.ɵɵadvance(21);
|
|
1575
1576
|
i0.ɵɵrepeater(ctx_r2.ActiveRuns);
|
|
1576
1577
|
} }
|
|
1577
|
-
function
|
|
1578
|
-
i0.ɵɵelementStart(0, "div",
|
|
1578
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_53_For_6_Template(rf, ctx) { if (rf & 1) {
|
|
1579
|
+
i0.ɵɵelementStart(0, "div", 210)(1, "div", 211);
|
|
1579
1580
|
i0.ɵɵtext(2);
|
|
1580
1581
|
i0.ɵɵelementEnd();
|
|
1581
|
-
i0.ɵɵelementStart(3, "div",
|
|
1582
|
+
i0.ɵɵelementStart(3, "div", 212);
|
|
1582
1583
|
i0.ɵɵtext(4);
|
|
1583
1584
|
i0.ɵɵelementEnd();
|
|
1584
|
-
i0.ɵɵelementStart(5, "div",
|
|
1585
|
+
i0.ɵɵelementStart(5, "div", 213);
|
|
1585
1586
|
i0.ɵɵtext(6);
|
|
1586
1587
|
i0.ɵɵelementEnd()();
|
|
1587
1588
|
} if (rf & 2) {
|
|
@@ -1593,74 +1594,74 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_53_
|
|
|
1593
1594
|
i0.ɵɵadvance(2);
|
|
1594
1595
|
i0.ɵɵtextInterpolate(entry_r68.Message);
|
|
1595
1596
|
} }
|
|
1596
|
-
function
|
|
1597
|
-
i0.ɵɵelementStart(0, "div",
|
|
1598
|
-
i0.ɵɵelement(2, "i",
|
|
1597
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_53_Template(rf, ctx) { if (rf & 1) {
|
|
1598
|
+
i0.ɵɵelementStart(0, "div", 123)(1, "h3");
|
|
1599
|
+
i0.ɵɵelement(2, "i", 208);
|
|
1599
1600
|
i0.ɵɵtext(3, " Recent Errors");
|
|
1600
1601
|
i0.ɵɵelementEnd();
|
|
1601
|
-
i0.ɵɵelementStart(4, "div",
|
|
1602
|
-
i0.ɵɵrepeaterCreate(5,
|
|
1602
|
+
i0.ɵɵelementStart(4, "div", 209);
|
|
1603
|
+
i0.ɵɵrepeaterCreate(5, AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_53_For_6_Template, 7, 3, "div", 210, i0.ɵɵcomponentInstance().TrackByIndex, true);
|
|
1603
1604
|
i0.ɵɵelementEnd()();
|
|
1604
1605
|
} if (rf & 2) {
|
|
1605
1606
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
1606
1607
|
i0.ɵɵadvance(5);
|
|
1607
1608
|
i0.ɵɵrepeater(ctx_r2.ErrorLog);
|
|
1608
1609
|
} }
|
|
1609
|
-
function
|
|
1610
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
1610
1611
|
i0.ɵɵelementStart(0, "section", 17)(1, "div", 19);
|
|
1611
|
-
i0.ɵɵelement(2, "i",
|
|
1612
|
+
i0.ɵɵelement(2, "i", 182);
|
|
1612
1613
|
i0.ɵɵelementStart(3, "h1");
|
|
1613
1614
|
i0.ɵɵtext(4, "Pipeline");
|
|
1614
1615
|
i0.ɵɵelementEnd()();
|
|
1615
|
-
i0.ɵɵelementStart(5, "div",
|
|
1616
|
-
i0.ɵɵelement(7, "i",
|
|
1616
|
+
i0.ɵɵelementStart(5, "div", 118)(6, "h3");
|
|
1617
|
+
i0.ɵɵelement(7, "i", 138);
|
|
1617
1618
|
i0.ɵɵtext(8, " Pipeline Throughput (Last 30 Days)");
|
|
1618
1619
|
i0.ɵɵelementEnd();
|
|
1619
|
-
i0.ɵɵelementStart(9, "div",
|
|
1620
|
-
i0.ɵɵrepeaterCreate(11,
|
|
1620
|
+
i0.ɵɵelementStart(9, "div", 164)(10, "div", 183);
|
|
1621
|
+
i0.ɵɵrepeaterCreate(11, AnalyticsResourceComponent_Conditional_6_Conditional_18_For_12_Template, 1, 6, "div", 184, i0.ɵɵcomponentInstance().TrackByIndex, true);
|
|
1621
1622
|
i0.ɵɵelementEnd();
|
|
1622
|
-
i0.ɵɵelementStart(13, "div",
|
|
1623
|
-
i0.ɵɵrepeaterCreate(14,
|
|
1623
|
+
i0.ɵɵelementStart(13, "div", 185);
|
|
1624
|
+
i0.ɵɵrepeaterCreate(14, AnalyticsResourceComponent_Conditional_6_Conditional_18_For_15_Template, 2, 1, "span", null, i0.ɵɵrepeaterTrackByIdentity);
|
|
1624
1625
|
i0.ɵɵelementEnd()()();
|
|
1625
|
-
i0.ɵɵconditionalCreate(16,
|
|
1626
|
-
i0.ɵɵelementStart(17, "div",
|
|
1627
|
-
i0.ɵɵelement(19, "i",
|
|
1626
|
+
i0.ɵɵconditionalCreate(16, AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_16_Template, 12, 2, "div", 28);
|
|
1627
|
+
i0.ɵɵelementStart(17, "div", 123)(18, "h3");
|
|
1628
|
+
i0.ɵɵelement(19, "i", 186);
|
|
1628
1629
|
i0.ɵɵtext(20, " Processing Time Breakdown (Avg per Item)");
|
|
1629
1630
|
i0.ɵɵelementEnd();
|
|
1630
|
-
i0.ɵɵelementStart(21, "div",
|
|
1631
|
-
i0.ɵɵrepeaterCreate(23,
|
|
1631
|
+
i0.ɵɵelementStart(21, "div", 164)(22, "div", 187);
|
|
1632
|
+
i0.ɵɵrepeaterCreate(23, AnalyticsResourceComponent_Conditional_6_Conditional_18_For_24_Template, 8, 7, "div", 188, _forTrack1);
|
|
1632
1633
|
i0.ɵɵelementEnd();
|
|
1633
|
-
i0.ɵɵelementStart(25, "div",
|
|
1634
|
+
i0.ɵɵelementStart(25, "div", 189)(26, "span")(27, "strong");
|
|
1634
1635
|
i0.ɵɵtext(28, "Total avg:");
|
|
1635
1636
|
i0.ɵɵelementEnd();
|
|
1636
1637
|
i0.ɵɵtext(29);
|
|
1637
1638
|
i0.ɵɵelementEnd();
|
|
1638
|
-
i0.ɵɵconditionalCreate(30,
|
|
1639
|
+
i0.ɵɵconditionalCreate(30, AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_30_Template, 3, 2, "span", 190);
|
|
1639
1640
|
i0.ɵɵelementEnd()()();
|
|
1640
|
-
i0.ɵɵelementStart(31, "div",
|
|
1641
|
-
i0.ɵɵelement(33, "i",
|
|
1641
|
+
i0.ɵɵelementStart(31, "div", 123)(32, "h3");
|
|
1642
|
+
i0.ɵɵelement(33, "i", 32);
|
|
1642
1643
|
i0.ɵɵtext(34, " Success Rate Overview");
|
|
1643
1644
|
i0.ɵɵelementEnd();
|
|
1644
|
-
i0.ɵɵelementStart(35, "div",
|
|
1645
|
+
i0.ɵɵelementStart(35, "div", 164)(36, "div", 191)(37, "div", 192)(38, "div", 193);
|
|
1645
1646
|
i0.ɵɵtext(39);
|
|
1646
1647
|
i0.ɵɵelementEnd();
|
|
1647
|
-
i0.ɵɵelementStart(40, "div",
|
|
1648
|
+
i0.ɵɵelementStart(40, "div", 194);
|
|
1648
1649
|
i0.ɵɵtext(41, "Success Rate");
|
|
1649
1650
|
i0.ɵɵelementEnd()();
|
|
1650
|
-
i0.ɵɵelementStart(42, "div",
|
|
1651
|
+
i0.ɵɵelementStart(42, "div", 192)(43, "div", 195);
|
|
1651
1652
|
i0.ɵɵtext(44);
|
|
1652
1653
|
i0.ɵɵelementEnd();
|
|
1653
|
-
i0.ɵɵelementStart(45, "div",
|
|
1654
|
+
i0.ɵɵelementStart(45, "div", 194);
|
|
1654
1655
|
i0.ɵɵtext(46, "Failure Rate");
|
|
1655
1656
|
i0.ɵɵelementEnd()();
|
|
1656
|
-
i0.ɵɵelementStart(47, "div",
|
|
1657
|
+
i0.ɵɵelementStart(47, "div", 192)(48, "div", 196);
|
|
1657
1658
|
i0.ɵɵtext(49);
|
|
1658
1659
|
i0.ɵɵelementEnd();
|
|
1659
|
-
i0.ɵɵelementStart(50, "div",
|
|
1660
|
+
i0.ɵɵelementStart(50, "div", 194);
|
|
1660
1661
|
i0.ɵɵtext(51, "Total Runs");
|
|
1661
1662
|
i0.ɵɵelementEnd()()()()();
|
|
1662
|
-
i0.ɵɵconditionalCreate(52,
|
|
1663
|
-
i0.ɵɵconditionalCreate(53,
|
|
1663
|
+
i0.ɵɵconditionalCreate(52, AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_52_Template, 23, 0, "div", 123);
|
|
1664
|
+
i0.ɵɵconditionalCreate(53, AnalyticsResourceComponent_Conditional_6_Conditional_18_Conditional_53_Template, 7, 0, "div", 123);
|
|
1664
1665
|
i0.ɵɵelementEnd();
|
|
1665
1666
|
} if (rf & 2) {
|
|
1666
1667
|
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
@@ -1687,20 +1688,20 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_25_Template(rf, ct
|
|
|
1687
1688
|
i0.ɵɵadvance();
|
|
1688
1689
|
i0.ɵɵconditional(ctx_r2.ErrorLog.length > 0 ? 53 : -1);
|
|
1689
1690
|
} }
|
|
1690
|
-
function
|
|
1691
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_19_For_12_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
1691
1692
|
i0.ɵɵtext(0);
|
|
1692
1693
|
} if (rf & 2) {
|
|
1693
1694
|
const bin_r70 = i0.ɵɵnextContext().$implicit;
|
|
1694
1695
|
i0.ɵɵtextInterpolate1(" ", bin_r70.Count, " ");
|
|
1695
1696
|
} }
|
|
1696
|
-
function
|
|
1697
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_19_For_12_Template(rf, ctx) { if (rf & 1) {
|
|
1697
1698
|
const _r69 = i0.ɵɵgetCurrentView();
|
|
1698
|
-
i0.ɵɵelementStart(0, "div",
|
|
1699
|
-
i0.ɵɵlistener("click", function
|
|
1700
|
-
i0.ɵɵelementStart(1, "div",
|
|
1701
|
-
i0.ɵɵconditionalCreate(2,
|
|
1699
|
+
i0.ɵɵelementStart(0, "div", 223);
|
|
1700
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_19_For_12_Template_div_click_0_listener() { const bin_r70 = i0.ɵɵrestoreView(_r69).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.OpenDrillDown("quality-bin:" + bin_r70.Label)); });
|
|
1701
|
+
i0.ɵɵelementStart(1, "div", 224);
|
|
1702
|
+
i0.ɵɵconditionalCreate(2, AnalyticsResourceComponent_Conditional_6_Conditional_19_For_12_Conditional_2_Template, 1, 1);
|
|
1702
1703
|
i0.ɵɵelementEnd();
|
|
1703
|
-
i0.ɵɵelementStart(3, "div",
|
|
1704
|
+
i0.ɵɵelementStart(3, "div", 225);
|
|
1704
1705
|
i0.ɵɵtext(4);
|
|
1705
1706
|
i0.ɵɵelementEnd()();
|
|
1706
1707
|
} if (rf & 2) {
|
|
@@ -1712,7 +1713,7 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_26_For_12_Template
|
|
|
1712
1713
|
i0.ɵɵadvance(2);
|
|
1713
1714
|
i0.ɵɵtextInterpolate(bin_r70.Label);
|
|
1714
1715
|
} }
|
|
1715
|
-
function
|
|
1716
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_19_For_15_Template(rf, ctx) { if (rf & 1) {
|
|
1716
1717
|
i0.ɵɵelementStart(0, "span")(1, "strong");
|
|
1717
1718
|
i0.ɵɵtext(2);
|
|
1718
1719
|
i0.ɵɵelementEnd();
|
|
@@ -1725,18 +1726,18 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_26_For_15_Template
|
|
|
1725
1726
|
i0.ɵɵadvance();
|
|
1726
1727
|
i0.ɵɵtextInterpolate1(" ", stat_r71.Value);
|
|
1727
1728
|
} }
|
|
1728
|
-
function
|
|
1729
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
1729
1730
|
const _r73 = i0.ɵɵgetCurrentView();
|
|
1730
|
-
i0.ɵɵelementStart(0, "button",
|
|
1731
|
-
i0.ɵɵlistener("click", function
|
|
1732
|
-
i0.ɵɵelement(1, "i",
|
|
1731
|
+
i0.ɵɵelementStart(0, "button", 94);
|
|
1732
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r73); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.ExportDrillDownCSV()); });
|
|
1733
|
+
i0.ɵɵelement(1, "i", 95);
|
|
1733
1734
|
i0.ɵɵtext(2, " CSV");
|
|
1734
1735
|
i0.ɵɵelementEnd();
|
|
1735
1736
|
} }
|
|
1736
|
-
function
|
|
1737
|
-
i0.ɵɵelement(0, "mj-loading",
|
|
1737
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
1738
|
+
i0.ɵɵelement(0, "mj-loading", 91);
|
|
1738
1739
|
} }
|
|
1739
|
-
function
|
|
1740
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Conditional_10_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
1740
1741
|
i0.ɵɵelementStart(0, "th");
|
|
1741
1742
|
i0.ɵɵtext(1);
|
|
1742
1743
|
i0.ɵɵelementEnd();
|
|
@@ -1745,10 +1746,10 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_16_
|
|
|
1745
1746
|
i0.ɵɵadvance();
|
|
1746
1747
|
i0.ɵɵtextInterpolate(col_r74);
|
|
1747
1748
|
} }
|
|
1748
|
-
function
|
|
1749
|
-
i0.ɵɵelement(0, "th",
|
|
1749
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Conditional_10_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
1750
|
+
i0.ɵɵelement(0, "th", 97);
|
|
1750
1751
|
} }
|
|
1751
|
-
function
|
|
1752
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Conditional_10_For_9_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
1752
1753
|
i0.ɵɵelementStart(0, "td");
|
|
1753
1754
|
i0.ɵɵtext(1);
|
|
1754
1755
|
i0.ɵɵelementEnd();
|
|
@@ -1758,26 +1759,26 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_16_
|
|
|
1758
1759
|
i0.ɵɵadvance();
|
|
1759
1760
|
i0.ɵɵtextInterpolate(row_r76[col_r75]);
|
|
1760
1761
|
} }
|
|
1761
|
-
function
|
|
1762
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Conditional_10_For_9_Conditional_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
1762
1763
|
const _r77 = i0.ɵɵgetCurrentView();
|
|
1763
|
-
i0.ɵɵelementStart(0, "button",
|
|
1764
|
-
i0.ɵɵlistener("click", function
|
|
1765
|
-
i0.ɵɵelement(1, "i",
|
|
1764
|
+
i0.ɵɵelementStart(0, "button", 137);
|
|
1765
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Conditional_10_For_9_Conditional_3_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r77); const row_r76 = i0.ɵɵnextContext(2).$implicit; const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.OpenDrillDownRecord(row_r76)); });
|
|
1766
|
+
i0.ɵɵelement(1, "i", 100);
|
|
1766
1767
|
i0.ɵɵelementEnd();
|
|
1767
1768
|
} }
|
|
1768
|
-
function
|
|
1769
|
-
i0.ɵɵelementStart(0, "td",
|
|
1770
|
-
i0.ɵɵconditionalCreate(1,
|
|
1769
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Conditional_10_For_9_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1770
|
+
i0.ɵɵelementStart(0, "td", 97);
|
|
1771
|
+
i0.ɵɵconditionalCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Conditional_10_For_9_Conditional_3_Conditional_1_Template, 2, 0, "button", 136);
|
|
1771
1772
|
i0.ɵɵelementEnd();
|
|
1772
1773
|
} if (rf & 2) {
|
|
1773
1774
|
const row_r76 = i0.ɵɵnextContext().$implicit;
|
|
1774
1775
|
i0.ɵɵadvance();
|
|
1775
1776
|
i0.ɵɵconditional(row_r76["_RecordID"] ? 1 : -1);
|
|
1776
1777
|
} }
|
|
1777
|
-
function
|
|
1778
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Conditional_10_For_9_Template(rf, ctx) { if (rf & 1) {
|
|
1778
1779
|
i0.ɵɵelementStart(0, "tr");
|
|
1779
|
-
i0.ɵɵrepeaterCreate(1,
|
|
1780
|
-
i0.ɵɵconditionalCreate(3,
|
|
1780
|
+
i0.ɵɵrepeaterCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Conditional_10_For_9_For_2_Template, 2, 1, "td", null, i0.ɵɵrepeaterTrackByIdentity);
|
|
1781
|
+
i0.ɵɵconditionalCreate(3, AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Conditional_10_For_9_Conditional_3_Template, 2, 1, "td", 97);
|
|
1781
1782
|
i0.ɵɵelementEnd();
|
|
1782
1783
|
} if (rf & 2) {
|
|
1783
1784
|
const ctx_r2 = i0.ɵɵnextContext(5);
|
|
@@ -1786,13 +1787,13 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_16_
|
|
|
1786
1787
|
i0.ɵɵadvance(2);
|
|
1787
1788
|
i0.ɵɵconditional(ctx_r2.DrillDownHasActions ? 3 : -1);
|
|
1788
1789
|
} }
|
|
1789
|
-
function
|
|
1790
|
-
i0.ɵɵelementStart(0, "div",
|
|
1791
|
-
i0.ɵɵrepeaterCreate(4,
|
|
1792
|
-
i0.ɵɵconditionalCreate(6,
|
|
1790
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
1791
|
+
i0.ɵɵelementStart(0, "div", 92)(1, "table", 96)(2, "thead")(3, "tr");
|
|
1792
|
+
i0.ɵɵrepeaterCreate(4, AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Conditional_10_For_5_Template, 2, 1, "th", null, i0.ɵɵrepeaterTrackByIdentity);
|
|
1793
|
+
i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Conditional_10_Conditional_6_Template, 1, 0, "th", 97);
|
|
1793
1794
|
i0.ɵɵelementEnd()();
|
|
1794
1795
|
i0.ɵɵelementStart(7, "tbody");
|
|
1795
|
-
i0.ɵɵrepeaterCreate(8,
|
|
1796
|
+
i0.ɵɵrepeaterCreate(8, AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Conditional_10_For_9_Template, 4, 1, "tr", null, i0.ɵɵcomponentInstance().TrackByIndex, true);
|
|
1796
1797
|
i0.ɵɵelementEnd()()();
|
|
1797
1798
|
} if (rf & 2) {
|
|
1798
1799
|
const ctx_r2 = i0.ɵɵnextContext(4);
|
|
@@ -1803,24 +1804,24 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_16_
|
|
|
1803
1804
|
i0.ɵɵadvance(2);
|
|
1804
1805
|
i0.ɵɵrepeater(ctx_r2.DrillDownData);
|
|
1805
1806
|
} }
|
|
1806
|
-
function
|
|
1807
|
-
i0.ɵɵelementStart(0, "div",
|
|
1807
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
1808
|
+
i0.ɵɵelementStart(0, "div", 93);
|
|
1808
1809
|
i0.ɵɵtext(1, "No items in this confidence range");
|
|
1809
1810
|
i0.ɵɵelementEnd();
|
|
1810
1811
|
} }
|
|
1811
|
-
function
|
|
1812
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
1812
1813
|
const _r72 = i0.ɵɵgetCurrentView();
|
|
1813
|
-
i0.ɵɵelementStart(0, "div", 28)(1, "div",
|
|
1814
|
-
i0.ɵɵelement(3, "i",
|
|
1814
|
+
i0.ɵɵelementStart(0, "div", 28)(1, "div", 84)(2, "span", 85);
|
|
1815
|
+
i0.ɵɵelement(3, "i", 86);
|
|
1815
1816
|
i0.ɵɵtext(4);
|
|
1816
1817
|
i0.ɵɵelementEnd();
|
|
1817
|
-
i0.ɵɵelementStart(5, "div",
|
|
1818
|
-
i0.ɵɵconditionalCreate(6,
|
|
1819
|
-
i0.ɵɵelementStart(7, "button",
|
|
1820
|
-
i0.ɵɵlistener("click", function
|
|
1821
|
-
i0.ɵɵelement(8, "i",
|
|
1818
|
+
i0.ɵɵelementStart(5, "div", 87);
|
|
1819
|
+
i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Conditional_6_Template, 3, 0, "button", 88);
|
|
1820
|
+
i0.ɵɵelementStart(7, "button", 89);
|
|
1821
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r72); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.CloseDrillDown()); });
|
|
1822
|
+
i0.ɵɵelement(8, "i", 90);
|
|
1822
1823
|
i0.ɵɵelementEnd()()();
|
|
1823
|
-
i0.ɵɵconditionalCreate(9,
|
|
1824
|
+
i0.ɵɵconditionalCreate(9, AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Conditional_9_Template, 1, 0, "mj-loading", 91)(10, AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Conditional_10_Template, 10, 1, "div", 92)(11, AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Conditional_11_Template, 2, 0, "div", 93);
|
|
1824
1825
|
i0.ɵɵelementEnd();
|
|
1825
1826
|
} if (rf & 2) {
|
|
1826
1827
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
@@ -1831,11 +1832,11 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_16_
|
|
|
1831
1832
|
i0.ɵɵadvance(3);
|
|
1832
1833
|
i0.ɵɵconditional(ctx_r2.IsDrillDownLoading ? 9 : ctx_r2.DrillDownData.length > 0 ? 10 : 11);
|
|
1833
1834
|
} }
|
|
1834
|
-
function
|
|
1835
|
-
i0.ɵɵelementStart(0, "div",
|
|
1836
|
-
i0.ɵɵelement(2, "div",
|
|
1835
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_17_For_7_Template(rf, ctx) { if (rf & 1) {
|
|
1836
|
+
i0.ɵɵelementStart(0, "div", 228)(1, "div", 230);
|
|
1837
|
+
i0.ɵɵelement(2, "div", 231)(3, "div", 232)(4, "div", 233);
|
|
1837
1838
|
i0.ɵɵelementEnd();
|
|
1838
|
-
i0.ɵɵelementStart(5, "div",
|
|
1839
|
+
i0.ɵɵelementStart(5, "div", 234);
|
|
1839
1840
|
i0.ɵɵtext(6);
|
|
1840
1841
|
i0.ɵɵelementEnd()();
|
|
1841
1842
|
} if (rf & 2) {
|
|
@@ -1852,9 +1853,9 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_17_
|
|
|
1852
1853
|
i0.ɵɵadvance(2);
|
|
1853
1854
|
i0.ɵɵtextInterpolate(entity_r78.Name);
|
|
1854
1855
|
} }
|
|
1855
|
-
function
|
|
1856
|
-
i0.ɵɵelementStart(0, "div",
|
|
1857
|
-
i0.ɵɵelement(1, "div",
|
|
1856
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_17_For_10_Template(rf, ctx) { if (rf & 1) {
|
|
1857
|
+
i0.ɵɵelementStart(0, "div", 62);
|
|
1858
|
+
i0.ɵɵelement(1, "div", 146);
|
|
1858
1859
|
i0.ɵɵtext(2);
|
|
1859
1860
|
i0.ɵɵelementEnd();
|
|
1860
1861
|
} if (rf & 2) {
|
|
@@ -1864,16 +1865,16 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_17_
|
|
|
1864
1865
|
i0.ɵɵadvance();
|
|
1865
1866
|
i0.ɵɵtextInterpolate1(" ", item_r79.Label);
|
|
1866
1867
|
} }
|
|
1867
|
-
function
|
|
1868
|
-
i0.ɵɵelementStart(0, "div",
|
|
1869
|
-
i0.ɵɵelement(2, "i",
|
|
1868
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
1869
|
+
i0.ɵɵelementStart(0, "div", 123)(1, "h3");
|
|
1870
|
+
i0.ɵɵelement(2, "i", 226);
|
|
1870
1871
|
i0.ɵɵtext(3, " Weight Distribution by Entity");
|
|
1871
1872
|
i0.ɵɵelementEnd();
|
|
1872
|
-
i0.ɵɵelementStart(4, "div",
|
|
1873
|
-
i0.ɵɵrepeaterCreate(6,
|
|
1873
|
+
i0.ɵɵelementStart(4, "div", 164)(5, "div", 227);
|
|
1874
|
+
i0.ɵɵrepeaterCreate(6, AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_17_For_7_Template, 7, 10, "div", 228, _forTrack1);
|
|
1874
1875
|
i0.ɵɵelementEnd();
|
|
1875
|
-
i0.ɵɵelementStart(8, "div",
|
|
1876
|
-
i0.ɵɵrepeaterCreate(9,
|
|
1876
|
+
i0.ɵɵelementStart(8, "div", 229);
|
|
1877
|
+
i0.ɵɵrepeaterCreate(9, AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_17_For_10_Template, 3, 3, "div", 62, _forTrack2);
|
|
1877
1878
|
i0.ɵɵelementEnd()()();
|
|
1878
1879
|
} if (rf & 2) {
|
|
1879
1880
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
@@ -1882,14 +1883,14 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_17_
|
|
|
1882
1883
|
i0.ɵɵadvance(3);
|
|
1883
1884
|
i0.ɵɵrepeater(ctx_r2.WeightLegend);
|
|
1884
1885
|
} }
|
|
1885
|
-
function
|
|
1886
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_18_For_21_Template(rf, ctx) { if (rf & 1) {
|
|
1886
1887
|
i0.ɵɵnamespaceSVG();
|
|
1887
|
-
i0.ɵɵelement(0, "circle",
|
|
1888
|
+
i0.ɵɵelement(0, "circle", 242);
|
|
1888
1889
|
} if (rf & 2) {
|
|
1889
1890
|
const dot_r80 = ctx.$implicit;
|
|
1890
1891
|
i0.ɵɵattribute("cx", dot_r80.Cx)("cy", dot_r80.Cy);
|
|
1891
1892
|
} }
|
|
1892
|
-
function
|
|
1893
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_18_For_24_Template(rf, ctx) { if (rf & 1) {
|
|
1893
1894
|
i0.ɵɵelementStart(0, "span");
|
|
1894
1895
|
i0.ɵɵtext(1);
|
|
1895
1896
|
i0.ɵɵelementEnd();
|
|
@@ -1898,12 +1899,12 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_18_
|
|
|
1898
1899
|
i0.ɵɵadvance();
|
|
1899
1900
|
i0.ɵɵtextInterpolate(label_r81);
|
|
1900
1901
|
} }
|
|
1901
|
-
function
|
|
1902
|
-
i0.ɵɵelementStart(0, "div",
|
|
1903
|
-
i0.ɵɵelement(2, "i",
|
|
1902
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
1903
|
+
i0.ɵɵelementStart(0, "div", 123)(1, "h3");
|
|
1904
|
+
i0.ɵɵelement(2, "i", 32);
|
|
1904
1905
|
i0.ɵɵtext(3, " Tag Accuracy Over Time (Weekly Avg Confidence)");
|
|
1905
1906
|
i0.ɵɵelementEnd();
|
|
1906
|
-
i0.ɵɵelementStart(4, "div",
|
|
1907
|
+
i0.ɵɵelementStart(4, "div", 164)(5, "div", 235)(6, "div", 236)(7, "div");
|
|
1907
1908
|
i0.ɵɵtext(8, "1.0");
|
|
1908
1909
|
i0.ɵɵelementEnd();
|
|
1909
1910
|
i0.ɵɵelementStart(9, "div");
|
|
@@ -1915,19 +1916,19 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_18_
|
|
|
1915
1916
|
i0.ɵɵelementStart(13, "div");
|
|
1916
1917
|
i0.ɵɵtext(14, "0.25");
|
|
1917
1918
|
i0.ɵɵelementEnd()();
|
|
1918
|
-
i0.ɵɵelementStart(15, "div",
|
|
1919
|
-
i0.ɵɵelement(16, "div",
|
|
1919
|
+
i0.ɵɵelementStart(15, "div", 237);
|
|
1920
|
+
i0.ɵɵelement(16, "div", 238)(17, "div", 239);
|
|
1920
1921
|
i0.ɵɵnamespaceSVG();
|
|
1921
|
-
i0.ɵɵelementStart(18, "svg",
|
|
1922
|
-
i0.ɵɵelement(19, "polyline",
|
|
1923
|
-
i0.ɵɵrepeaterCreate(20,
|
|
1922
|
+
i0.ɵɵelementStart(18, "svg", 240);
|
|
1923
|
+
i0.ɵɵelement(19, "polyline", 241);
|
|
1924
|
+
i0.ɵɵrepeaterCreate(20, AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_18_For_21_Template, 1, 2, ":svg:circle", 242, i0.ɵɵcomponentInstance().TrackByIndex, true);
|
|
1924
1925
|
i0.ɵɵelementEnd()()();
|
|
1925
1926
|
i0.ɵɵnamespaceHTML();
|
|
1926
|
-
i0.ɵɵelementStart(22, "div",
|
|
1927
|
-
i0.ɵɵrepeaterCreate(23,
|
|
1927
|
+
i0.ɵɵelementStart(22, "div", 243);
|
|
1928
|
+
i0.ɵɵrepeaterCreate(23, AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_18_For_24_Template, 2, 1, "span", null, i0.ɵɵrepeaterTrackByIdentity);
|
|
1928
1929
|
i0.ɵɵelementEnd();
|
|
1929
|
-
i0.ɵɵelementStart(25, "div",
|
|
1930
|
-
i0.ɵɵelement(26, "i",
|
|
1930
|
+
i0.ɵɵelementStart(25, "div", 244);
|
|
1931
|
+
i0.ɵɵelement(26, "i", 245);
|
|
1931
1932
|
i0.ɵɵtext(27);
|
|
1932
1933
|
i0.ɵɵelementEnd()()();
|
|
1933
1934
|
} if (rf & 2) {
|
|
@@ -1941,20 +1942,20 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_18_
|
|
|
1941
1942
|
i0.ɵɵadvance(4);
|
|
1942
1943
|
i0.ɵɵtextInterpolate1(" ", ctx_r2.AccuracyTrendText, " ");
|
|
1943
1944
|
} }
|
|
1944
|
-
function
|
|
1945
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_19_For_20_Template(rf, ctx) { if (rf & 1) {
|
|
1945
1946
|
i0.ɵɵelementStart(0, "tr")(1, "td")(2, "strong");
|
|
1946
1947
|
i0.ɵɵtext(3);
|
|
1947
1948
|
i0.ɵɵelementEnd()();
|
|
1948
|
-
i0.ɵɵelementStart(4, "td",
|
|
1949
|
+
i0.ɵɵelementStart(4, "td", 129);
|
|
1949
1950
|
i0.ɵɵtext(5);
|
|
1950
1951
|
i0.ɵɵelementEnd();
|
|
1951
|
-
i0.ɵɵelementStart(6, "td",
|
|
1952
|
+
i0.ɵɵelementStart(6, "td", 129);
|
|
1952
1953
|
i0.ɵɵtext(7);
|
|
1953
1954
|
i0.ɵɵelementEnd();
|
|
1954
1955
|
i0.ɵɵelementStart(8, "td");
|
|
1955
1956
|
i0.ɵɵtext(9);
|
|
1956
1957
|
i0.ɵɵelementEnd();
|
|
1957
|
-
i0.ɵɵelementStart(10, "td")(11, "span",
|
|
1958
|
+
i0.ɵɵelementStart(10, "td")(11, "span", 160);
|
|
1958
1959
|
i0.ɵɵtext(12);
|
|
1959
1960
|
i0.ɵɵelementEnd()()();
|
|
1960
1961
|
} if (rf & 2) {
|
|
@@ -1972,18 +1973,18 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_19_
|
|
|
1972
1973
|
i0.ɵɵadvance();
|
|
1973
1974
|
i0.ɵɵtextInterpolate(tag_r82.SuggestedAction);
|
|
1974
1975
|
} }
|
|
1975
|
-
function
|
|
1976
|
-
i0.ɵɵelementStart(0, "div",
|
|
1977
|
-
i0.ɵɵelement(2, "i",
|
|
1976
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
1977
|
+
i0.ɵɵelementStart(0, "div", 123)(1, "h3");
|
|
1978
|
+
i0.ɵɵelement(2, "i", 246);
|
|
1978
1979
|
i0.ɵɵtext(3, " Low-Confidence Tags (Avg Weight < 0.4)");
|
|
1979
1980
|
i0.ɵɵelementEnd();
|
|
1980
|
-
i0.ɵɵelementStart(4, "div",
|
|
1981
|
+
i0.ɵɵelementStart(4, "div", 121)(5, "table", 96)(6, "thead")(7, "tr")(8, "th");
|
|
1981
1982
|
i0.ɵɵtext(9, "Tag Name");
|
|
1982
1983
|
i0.ɵɵelementEnd();
|
|
1983
|
-
i0.ɵɵelementStart(10, "th",
|
|
1984
|
+
i0.ɵɵelementStart(10, "th", 129);
|
|
1984
1985
|
i0.ɵɵtext(11, "Avg Weight");
|
|
1985
1986
|
i0.ɵɵelementEnd();
|
|
1986
|
-
i0.ɵɵelementStart(12, "th",
|
|
1987
|
+
i0.ɵɵelementStart(12, "th", 129);
|
|
1987
1988
|
i0.ɵɵtext(13, "Usage Count");
|
|
1988
1989
|
i0.ɵɵelementEnd();
|
|
1989
1990
|
i0.ɵɵelementStart(14, "th");
|
|
@@ -1993,33 +1994,33 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_19_
|
|
|
1993
1994
|
i0.ɵɵtext(17, "Suggested Action");
|
|
1994
1995
|
i0.ɵɵelementEnd()()();
|
|
1995
1996
|
i0.ɵɵelementStart(18, "tbody");
|
|
1996
|
-
i0.ɵɵrepeaterCreate(19,
|
|
1997
|
+
i0.ɵɵrepeaterCreate(19, AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_19_For_20_Template, 13, 7, "tr", null, _forTrack1);
|
|
1997
1998
|
i0.ɵɵelementEnd()()()();
|
|
1998
1999
|
} if (rf & 2) {
|
|
1999
2000
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
2000
2001
|
i0.ɵɵadvance(19);
|
|
2001
2002
|
i0.ɵɵrepeater(ctx_r2.LowConfidenceTags);
|
|
2002
2003
|
} }
|
|
2003
|
-
function
|
|
2004
|
-
i0.ɵɵelementStart(0, "div",
|
|
2005
|
-
i0.ɵɵelement(2, "i",
|
|
2004
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_19_For_26_Template(rf, ctx) { if (rf & 1) {
|
|
2005
|
+
i0.ɵɵelementStart(0, "div", 221)(1, "div", 247);
|
|
2006
|
+
i0.ɵɵelement(2, "i", 159);
|
|
2006
2007
|
i0.ɵɵtext(3);
|
|
2007
2008
|
i0.ɵɵelementEnd();
|
|
2008
2009
|
i0.ɵɵnamespaceSVG();
|
|
2009
|
-
i0.ɵɵelementStart(4, "svg",
|
|
2010
|
-
i0.ɵɵelement(5, "circle",
|
|
2010
|
+
i0.ɵɵelementStart(4, "svg", 248);
|
|
2011
|
+
i0.ɵɵelement(5, "circle", 249)(6, "circle", 250);
|
|
2011
2012
|
i0.ɵɵelementEnd();
|
|
2012
2013
|
i0.ɵɵnamespaceHTML();
|
|
2013
|
-
i0.ɵɵelementStart(7, "div",
|
|
2014
|
+
i0.ɵɵelementStart(7, "div", 251);
|
|
2014
2015
|
i0.ɵɵtext(8);
|
|
2015
2016
|
i0.ɵɵelementEnd();
|
|
2016
|
-
i0.ɵɵelementStart(9, "div",
|
|
2017
|
+
i0.ɵɵelementStart(9, "div", 252);
|
|
2017
2018
|
i0.ɵɵtext(10);
|
|
2018
2019
|
i0.ɵɵelementEnd();
|
|
2019
|
-
i0.ɵɵelementStart(11, "div",
|
|
2020
|
+
i0.ɵɵelementStart(11, "div", 252);
|
|
2020
2021
|
i0.ɵɵtext(12);
|
|
2021
2022
|
i0.ɵɵelementEnd();
|
|
2022
|
-
i0.ɵɵelementStart(13, "div",
|
|
2023
|
+
i0.ɵɵelementStart(13, "div", 253);
|
|
2023
2024
|
i0.ɵɵtext(14);
|
|
2024
2025
|
i0.ɵɵelementEnd()();
|
|
2025
2026
|
} if (rf & 2) {
|
|
@@ -2045,9 +2046,9 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_26_For_26_Template
|
|
|
2045
2046
|
i0.ɵɵadvance();
|
|
2046
2047
|
i0.ɵɵtextInterpolate(model_r83.Role);
|
|
2047
2048
|
} }
|
|
2048
|
-
function
|
|
2049
|
-
i0.ɵɵelementStart(0, "div",
|
|
2050
|
-
i0.ɵɵelement(1, "i",
|
|
2049
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_27_Template(rf, ctx) { if (rf & 1) {
|
|
2050
|
+
i0.ɵɵelementStart(0, "div", 222);
|
|
2051
|
+
i0.ɵɵelement(1, "i", 254);
|
|
2051
2052
|
i0.ɵɵelementStart(2, "div")(3, "strong");
|
|
2052
2053
|
i0.ɵɵtext(4, "Recommendation:");
|
|
2053
2054
|
i0.ɵɵelementEnd();
|
|
@@ -2058,34 +2059,34 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_27_
|
|
|
2058
2059
|
i0.ɵɵadvance(5);
|
|
2059
2060
|
i0.ɵɵtextInterpolate1(" ", ctx_r2.ModelRecommendation, " ");
|
|
2060
2061
|
} }
|
|
2061
|
-
function
|
|
2062
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
2062
2063
|
i0.ɵɵelementStart(0, "section", 17)(1, "div", 19);
|
|
2063
|
-
i0.ɵɵelement(2, "i",
|
|
2064
|
+
i0.ɵɵelement(2, "i", 214);
|
|
2064
2065
|
i0.ɵɵelementStart(3, "h1");
|
|
2065
2066
|
i0.ɵɵtext(4, "Quality");
|
|
2066
2067
|
i0.ɵɵelementEnd()();
|
|
2067
|
-
i0.ɵɵelementStart(5, "div",
|
|
2068
|
-
i0.ɵɵelement(7, "i",
|
|
2068
|
+
i0.ɵɵelementStart(5, "div", 118)(6, "h3");
|
|
2069
|
+
i0.ɵɵelement(7, "i", 215);
|
|
2069
2070
|
i0.ɵɵtext(8, " Confidence Distribution");
|
|
2070
2071
|
i0.ɵɵelementEnd();
|
|
2071
|
-
i0.ɵɵelementStart(9, "div",
|
|
2072
|
-
i0.ɵɵrepeaterCreate(11,
|
|
2072
|
+
i0.ɵɵelementStart(9, "div", 164)(10, "div", 216);
|
|
2073
|
+
i0.ɵɵrepeaterCreate(11, AnalyticsResourceComponent_Conditional_6_Conditional_19_For_12_Template, 5, 6, "div", 217, _forTrack2);
|
|
2073
2074
|
i0.ɵɵelementEnd();
|
|
2074
|
-
i0.ɵɵelementStart(13, "div",
|
|
2075
|
-
i0.ɵɵrepeaterCreate(14,
|
|
2075
|
+
i0.ɵɵelementStart(13, "div", 218);
|
|
2076
|
+
i0.ɵɵrepeaterCreate(14, AnalyticsResourceComponent_Conditional_6_Conditional_19_For_15_Template, 4, 2, "span", null, _forTrack2);
|
|
2076
2077
|
i0.ɵɵelementEnd()()();
|
|
2077
|
-
i0.ɵɵconditionalCreate(16,
|
|
2078
|
-
i0.ɵɵconditionalCreate(17,
|
|
2079
|
-
i0.ɵɵconditionalCreate(18,
|
|
2080
|
-
i0.ɵɵconditionalCreate(19,
|
|
2081
|
-
i0.ɵɵelementStart(20, "div",
|
|
2082
|
-
i0.ɵɵelement(22, "i",
|
|
2078
|
+
i0.ɵɵconditionalCreate(16, AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_16_Template, 12, 3, "div", 28);
|
|
2079
|
+
i0.ɵɵconditionalCreate(17, AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_17_Template, 11, 0, "div", 123);
|
|
2080
|
+
i0.ɵɵconditionalCreate(18, AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_18_Template, 28, 2, "div", 123);
|
|
2081
|
+
i0.ɵɵconditionalCreate(19, AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_19_Template, 21, 0, "div", 123);
|
|
2082
|
+
i0.ɵɵelementStart(20, "div", 123)(21, "h3");
|
|
2083
|
+
i0.ɵɵelement(22, "i", 219);
|
|
2083
2084
|
i0.ɵɵtext(23, " Model Performance Comparison");
|
|
2084
2085
|
i0.ɵɵelementEnd();
|
|
2085
|
-
i0.ɵɵelementStart(24, "div",
|
|
2086
|
-
i0.ɵɵrepeaterCreate(25,
|
|
2086
|
+
i0.ɵɵelementStart(24, "div", 220);
|
|
2087
|
+
i0.ɵɵrepeaterCreate(25, AnalyticsResourceComponent_Conditional_6_Conditional_19_For_26_Template, 15, 15, "div", 221, _forTrack1);
|
|
2087
2088
|
i0.ɵɵelementEnd();
|
|
2088
|
-
i0.ɵɵconditionalCreate(27,
|
|
2089
|
+
i0.ɵɵconditionalCreate(27, AnalyticsResourceComponent_Conditional_6_Conditional_19_Conditional_27_Template, 6, 1, "div", 222);
|
|
2089
2090
|
i0.ɵɵelementEnd()();
|
|
2090
2091
|
} if (rf & 2) {
|
|
2091
2092
|
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
@@ -2106,10 +2107,10 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_26_Template(rf, ct
|
|
|
2106
2107
|
i0.ɵɵadvance(2);
|
|
2107
2108
|
i0.ɵɵconditional(ctx_r2.ModelRecommendation ? 27 : -1);
|
|
2108
2109
|
} }
|
|
2109
|
-
function
|
|
2110
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_20_For_15_Template(rf, ctx) { if (rf & 1) {
|
|
2110
2111
|
const _r85 = i0.ɵɵgetCurrentView();
|
|
2111
|
-
i0.ɵɵelementStart(0, "button",
|
|
2112
|
-
i0.ɵɵlistener("click", function
|
|
2112
|
+
i0.ɵɵelementStart(0, "button", 74);
|
|
2113
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_20_For_15_Template_button_click_0_listener() { const range_r86 = i0.ɵɵrestoreView(_r85).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.SetDateRange(range_r86.Label)); });
|
|
2113
2114
|
i0.ɵɵtext(1);
|
|
2114
2115
|
i0.ɵɵelementEnd();
|
|
2115
2116
|
} if (rf & 2) {
|
|
@@ -2119,17 +2120,17 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_27_For_15_Template
|
|
|
2119
2120
|
i0.ɵɵadvance();
|
|
2120
2121
|
i0.ɵɵtextInterpolate(range_r86.Label);
|
|
2121
2122
|
} }
|
|
2122
|
-
function
|
|
2123
|
-
i0.ɵɵelementStart(0, "div",
|
|
2123
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_20_Conditional_16_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
2124
|
+
i0.ɵɵelementStart(0, "div", 260)(1, "div", 261);
|
|
2124
2125
|
i0.ɵɵelement(2, "i");
|
|
2125
2126
|
i0.ɵɵelementEnd();
|
|
2126
|
-
i0.ɵɵelementStart(3, "div")(4, "div",
|
|
2127
|
+
i0.ɵɵelementStart(3, "div")(4, "div", 262);
|
|
2127
2128
|
i0.ɵɵtext(5);
|
|
2128
2129
|
i0.ɵɵelementEnd();
|
|
2129
|
-
i0.ɵɵelementStart(6, "div",
|
|
2130
|
+
i0.ɵɵelementStart(6, "div", 263);
|
|
2130
2131
|
i0.ɵɵtext(7);
|
|
2131
2132
|
i0.ɵɵelementEnd();
|
|
2132
|
-
i0.ɵɵelementStart(8, "div",
|
|
2133
|
+
i0.ɵɵelementStart(8, "div", 264);
|
|
2133
2134
|
i0.ɵɵtext(9);
|
|
2134
2135
|
i0.ɵɵelementEnd()()();
|
|
2135
2136
|
} if (rf & 2) {
|
|
@@ -2143,29 +2144,29 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_27_Conditional_16_
|
|
|
2143
2144
|
i0.ɵɵadvance(2);
|
|
2144
2145
|
i0.ɵɵtextInterpolate(kpi_r87.SubLabel);
|
|
2145
2146
|
} }
|
|
2146
|
-
function
|
|
2147
|
-
i0.ɵɵelementStart(0, "div",
|
|
2148
|
-
i0.ɵɵrepeaterCreate(1,
|
|
2147
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_20_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
2148
|
+
i0.ɵɵelementStart(0, "div", 259);
|
|
2149
|
+
i0.ɵɵrepeaterCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_20_Conditional_16_For_2_Template, 10, 5, "div", 260, _forTrack2);
|
|
2149
2150
|
i0.ɵɵelementEnd();
|
|
2150
2151
|
} if (rf & 2) {
|
|
2151
2152
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
2152
2153
|
i0.ɵɵadvance();
|
|
2153
2154
|
i0.ɵɵrepeater(ctx_r2.CostKPIs);
|
|
2154
2155
|
} }
|
|
2155
|
-
function
|
|
2156
|
-
i0.ɵɵelementStart(0, "tr")(1, "td",
|
|
2156
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_20_Conditional_21_For_16_Template(rf, ctx) { if (rf & 1) {
|
|
2157
|
+
i0.ɵɵelementStart(0, "tr")(1, "td", 204);
|
|
2157
2158
|
i0.ɵɵtext(2);
|
|
2158
2159
|
i0.ɵɵelementEnd();
|
|
2159
2160
|
i0.ɵɵelementStart(3, "td");
|
|
2160
2161
|
i0.ɵɵtext(4);
|
|
2161
2162
|
i0.ɵɵelementEnd();
|
|
2162
|
-
i0.ɵɵelementStart(5, "td",
|
|
2163
|
+
i0.ɵɵelementStart(5, "td", 129);
|
|
2163
2164
|
i0.ɵɵtext(6);
|
|
2164
2165
|
i0.ɵɵelementEnd();
|
|
2165
|
-
i0.ɵɵelementStart(7, "td",
|
|
2166
|
+
i0.ɵɵelementStart(7, "td", 129);
|
|
2166
2167
|
i0.ɵɵtext(8);
|
|
2167
2168
|
i0.ɵɵelementEnd();
|
|
2168
|
-
i0.ɵɵelementStart(9, "td",
|
|
2169
|
+
i0.ɵɵelementStart(9, "td", 135);
|
|
2169
2170
|
i0.ɵɵtext(10);
|
|
2170
2171
|
i0.ɵɵelementEnd()();
|
|
2171
2172
|
} if (rf & 2) {
|
|
@@ -2182,66 +2183,66 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_27_Conditional_21_
|
|
|
2182
2183
|
i0.ɵɵadvance(2);
|
|
2183
2184
|
i0.ɵɵtextInterpolate(row_r88.Started);
|
|
2184
2185
|
} }
|
|
2185
|
-
function
|
|
2186
|
-
i0.ɵɵelementStart(0, "div",
|
|
2186
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_20_Conditional_21_Template(rf, ctx) { if (rf & 1) {
|
|
2187
|
+
i0.ɵɵelementStart(0, "div", 121)(1, "table", 96)(2, "thead")(3, "tr")(4, "th");
|
|
2187
2188
|
i0.ɵɵtext(5, "Run ID");
|
|
2188
2189
|
i0.ɵɵelementEnd();
|
|
2189
2190
|
i0.ɵɵelementStart(6, "th");
|
|
2190
2191
|
i0.ɵɵtext(7, "Source");
|
|
2191
2192
|
i0.ɵɵelementEnd();
|
|
2192
|
-
i0.ɵɵelementStart(8, "th",
|
|
2193
|
+
i0.ɵɵelementStart(8, "th", 129);
|
|
2193
2194
|
i0.ɵɵtext(9, "Tokens");
|
|
2194
2195
|
i0.ɵɵelementEnd();
|
|
2195
|
-
i0.ɵɵelementStart(10, "th",
|
|
2196
|
+
i0.ɵɵelementStart(10, "th", 129);
|
|
2196
2197
|
i0.ɵɵtext(11, "Cost");
|
|
2197
2198
|
i0.ɵɵelementEnd();
|
|
2198
2199
|
i0.ɵɵelementStart(12, "th");
|
|
2199
2200
|
i0.ɵɵtext(13, "Started");
|
|
2200
2201
|
i0.ɵɵelementEnd()()();
|
|
2201
2202
|
i0.ɵɵelementStart(14, "tbody");
|
|
2202
|
-
i0.ɵɵrepeaterCreate(15,
|
|
2203
|
+
i0.ɵɵrepeaterCreate(15, AnalyticsResourceComponent_Conditional_6_Conditional_20_Conditional_21_For_16_Template, 11, 5, "tr", null, _forTrack5);
|
|
2203
2204
|
i0.ɵɵelementEnd()()();
|
|
2204
2205
|
} if (rf & 2) {
|
|
2205
2206
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
2206
2207
|
i0.ɵɵadvance(15);
|
|
2207
2208
|
i0.ɵɵrepeater(ctx_r2.CostPerRunRows);
|
|
2208
2209
|
} }
|
|
2209
|
-
function
|
|
2210
|
-
i0.ɵɵelementStart(0, "div",
|
|
2211
|
-
i0.ɵɵelement(1, "i",
|
|
2210
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_20_Conditional_22_Template(rf, ctx) { if (rf & 1) {
|
|
2211
|
+
i0.ɵɵelementStart(0, "div", 122);
|
|
2212
|
+
i0.ɵɵelement(1, "i", 255);
|
|
2212
2213
|
i0.ɵɵelementStart(2, "p");
|
|
2213
2214
|
i0.ɵɵtext(3, "No cost data available yet. Run the pipeline to generate cost and token usage metrics.");
|
|
2214
2215
|
i0.ɵɵelementEnd();
|
|
2215
|
-
i0.ɵɵelementStart(4, "p",
|
|
2216
|
+
i0.ɵɵelementStart(4, "p", 265);
|
|
2216
2217
|
i0.ɵɵtext(5, "Cost data is aggregated from ContentProcessRunDetail records linked to AI Prompt Runs.");
|
|
2217
2218
|
i0.ɵɵelementEnd()();
|
|
2218
2219
|
} }
|
|
2219
|
-
function
|
|
2220
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
2220
2221
|
const _r84 = i0.ɵɵgetCurrentView();
|
|
2221
2222
|
i0.ɵɵelementStart(0, "section", 17)(1, "div", 19);
|
|
2222
|
-
i0.ɵɵelement(2, "i",
|
|
2223
|
+
i0.ɵɵelement(2, "i", 255);
|
|
2223
2224
|
i0.ɵɵelementStart(3, "h1");
|
|
2224
2225
|
i0.ɵɵtext(4, "Cost & Usage");
|
|
2225
2226
|
i0.ɵɵelementEnd();
|
|
2226
|
-
i0.ɵɵelementStart(5, "div",
|
|
2227
|
-
i0.ɵɵlistener("click", function
|
|
2228
|
-
i0.ɵɵelement(7, "i",
|
|
2227
|
+
i0.ɵɵelementStart(5, "div", 256)(6, "button", 94);
|
|
2228
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_20_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r84); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.ExportTabDataCSV("cost-usage")); });
|
|
2229
|
+
i0.ɵɵelement(7, "i", 95);
|
|
2229
2230
|
i0.ɵɵtext(8, " CSV ");
|
|
2230
2231
|
i0.ɵɵelementEnd();
|
|
2231
|
-
i0.ɵɵelementStart(9, "button",
|
|
2232
|
-
i0.ɵɵlistener("click", function
|
|
2233
|
-
i0.ɵɵelement(10, "i",
|
|
2232
|
+
i0.ɵɵelementStart(9, "button", 257);
|
|
2233
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_20_Template_button_click_9_listener() { i0.ɵɵrestoreView(_r84); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.PrintCurrentTab()); });
|
|
2234
|
+
i0.ɵɵelement(10, "i", 258);
|
|
2234
2235
|
i0.ɵɵtext(11, " Print ");
|
|
2235
2236
|
i0.ɵɵelementEnd()()();
|
|
2236
2237
|
i0.ɵɵelementStart(12, "div", 21)(13, "div", 22);
|
|
2237
|
-
i0.ɵɵrepeaterCreate(14,
|
|
2238
|
+
i0.ɵɵrepeaterCreate(14, AnalyticsResourceComponent_Conditional_6_Conditional_20_For_15_Template, 2, 3, "button", 23, _forTrack2);
|
|
2238
2239
|
i0.ɵɵelementEnd()();
|
|
2239
|
-
i0.ɵɵconditionalCreate(16,
|
|
2240
|
-
i0.ɵɵelementStart(17, "div",
|
|
2241
|
-
i0.ɵɵelement(19, "i",
|
|
2240
|
+
i0.ɵɵconditionalCreate(16, AnalyticsResourceComponent_Conditional_6_Conditional_20_Conditional_16_Template, 3, 0, "div", 259);
|
|
2241
|
+
i0.ɵɵelementStart(17, "div", 123)(18, "h3");
|
|
2242
|
+
i0.ɵɵelement(19, "i", 86);
|
|
2242
2243
|
i0.ɵɵtext(20, " Cost Breakdown by Run");
|
|
2243
2244
|
i0.ɵɵelementEnd();
|
|
2244
|
-
i0.ɵɵconditionalCreate(21,
|
|
2245
|
+
i0.ɵɵconditionalCreate(21, AnalyticsResourceComponent_Conditional_6_Conditional_20_Conditional_21_Template, 17, 0, "div", 121)(22, AnalyticsResourceComponent_Conditional_6_Conditional_20_Conditional_22_Template, 6, 0, "div", 122);
|
|
2245
2246
|
i0.ɵɵelementEnd()();
|
|
2246
2247
|
} if (rf & 2) {
|
|
2247
2248
|
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
@@ -2252,59 +2253,47 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_27_Template(rf, ct
|
|
|
2252
2253
|
i0.ɵɵadvance(5);
|
|
2253
2254
|
i0.ɵɵconditional(ctx_r2.CostPerRunRows.length > 0 ? 21 : 22);
|
|
2254
2255
|
} }
|
|
2255
|
-
function
|
|
2256
|
-
i0.ɵɵelementStart(0, "div",
|
|
2257
|
-
i0.ɵɵ
|
|
2258
|
-
i0.ɵɵtext(5, " Analytics");
|
|
2259
|
-
i0.ɵɵelementEnd()();
|
|
2260
|
-
i0.ɵɵelementStart(6, "nav", 6);
|
|
2261
|
-
i0.ɵɵrepeaterCreate(7, AnalyticsResourceComponent_Conditional_1_For_8_Template, 3, 5, "button", 7, _forTrack0);
|
|
2256
|
+
function AnalyticsResourceComponent_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
2257
|
+
i0.ɵɵelementStart(0, "div", 5)(1, "aside", 7)(2, "nav", 8);
|
|
2258
|
+
i0.ɵɵrepeaterCreate(3, AnalyticsResourceComponent_Conditional_6_For_4_Template, 3, 5, "button", 9, _forTrack0);
|
|
2262
2259
|
i0.ɵɵelementEnd();
|
|
2263
|
-
i0.ɵɵelement(
|
|
2264
|
-
i0.ɵɵelementStart(
|
|
2265
|
-
i0.ɵɵelement(
|
|
2266
|
-
i0.ɵɵtext(
|
|
2260
|
+
i0.ɵɵelement(5, "div", 10);
|
|
2261
|
+
i0.ɵɵelementStart(6, "div", 11)(7, "h3");
|
|
2262
|
+
i0.ɵɵelement(8, "i", 12);
|
|
2263
|
+
i0.ɵɵtext(9, " Trending Tags");
|
|
2267
2264
|
i0.ɵɵelementEnd();
|
|
2268
|
-
i0.ɵɵelementStart(
|
|
2269
|
-
i0.ɵɵrepeaterCreate(
|
|
2270
|
-
i0.ɵɵconditionalCreate(
|
|
2271
|
-
i0.ɵɵelementEnd()();
|
|
2272
|
-
i0.ɵɵelementStart(
|
|
2273
|
-
i0.ɵɵ
|
|
2274
|
-
i0.ɵɵ
|
|
2275
|
-
i0.ɵɵ
|
|
2276
|
-
i0.ɵɵ
|
|
2277
|
-
i0.ɵɵconditionalCreate(
|
|
2278
|
-
i0.ɵɵconditionalCreate(
|
|
2279
|
-
i0.ɵɵconditionalCreate(24, AnalyticsResourceComponent_Conditional_1_Conditional_24_Template, 14, 4, "section", 17);
|
|
2280
|
-
i0.ɵɵconditionalCreate(25, AnalyticsResourceComponent_Conditional_1_Conditional_25_Template, 54, 8, "section", 17);
|
|
2281
|
-
i0.ɵɵconditionalCreate(26, AnalyticsResourceComponent_Conditional_1_Conditional_26_Template, 28, 5, "section", 17);
|
|
2282
|
-
i0.ɵɵconditionalCreate(27, AnalyticsResourceComponent_Conditional_1_Conditional_27_Template, 23, 2, "section", 17);
|
|
2265
|
+
i0.ɵɵelementStart(10, "div", 13);
|
|
2266
|
+
i0.ɵɵrepeaterCreate(11, AnalyticsResourceComponent_Conditional_6_For_12_Template, 2, 5, "span", 14, _forTrack1);
|
|
2267
|
+
i0.ɵɵconditionalCreate(13, AnalyticsResourceComponent_Conditional_6_Conditional_13_Template, 2, 0, "span", 15);
|
|
2268
|
+
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);
|
|
2283
2276
|
i0.ɵɵelementEnd()();
|
|
2284
2277
|
} if (rf & 2) {
|
|
2285
2278
|
const ctx_r2 = i0.ɵɵnextContext();
|
|
2286
|
-
i0.ɵɵadvance(
|
|
2279
|
+
i0.ɵɵadvance(3);
|
|
2287
2280
|
i0.ɵɵrepeater(ctx_r2.NavItems);
|
|
2288
2281
|
i0.ɵɵadvance(8);
|
|
2289
2282
|
i0.ɵɵrepeater(ctx_r2.TrendingTags);
|
|
2290
2283
|
i0.ɵɵadvance(2);
|
|
2291
|
-
i0.ɵɵconditional(ctx_r2.TrendingTags.length === 0 ?
|
|
2292
|
-
i0.ɵɵadvance(2);
|
|
2293
|
-
i0.ɵɵclassProp("status-dot-error", !ctx_r2.PipelineStatusOk);
|
|
2294
|
-
i0.ɵɵadvance();
|
|
2295
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r2.PipelineStatusText, " ");
|
|
2284
|
+
i0.ɵɵconditional(ctx_r2.TrendingTags.length === 0 ? 13 : -1);
|
|
2296
2285
|
i0.ɵɵadvance(2);
|
|
2297
|
-
i0.ɵɵconditional(ctx_r2.ActiveTab === "overview" ?
|
|
2286
|
+
i0.ɵɵconditional(ctx_r2.ActiveTab === "overview" ? 15 : -1);
|
|
2298
2287
|
i0.ɵɵadvance();
|
|
2299
|
-
i0.ɵɵconditional(ctx_r2.ActiveTab === "tags" ?
|
|
2288
|
+
i0.ɵɵconditional(ctx_r2.ActiveTab === "tags" ? 16 : -1);
|
|
2300
2289
|
i0.ɵɵadvance();
|
|
2301
|
-
i0.ɵɵconditional(ctx_r2.ActiveTab === "sources" ?
|
|
2290
|
+
i0.ɵɵconditional(ctx_r2.ActiveTab === "sources" ? 17 : -1);
|
|
2302
2291
|
i0.ɵɵadvance();
|
|
2303
|
-
i0.ɵɵconditional(ctx_r2.ActiveTab === "pipeline" ?
|
|
2292
|
+
i0.ɵɵconditional(ctx_r2.ActiveTab === "pipeline" ? 18 : -1);
|
|
2304
2293
|
i0.ɵɵadvance();
|
|
2305
|
-
i0.ɵɵconditional(ctx_r2.ActiveTab === "quality" ?
|
|
2294
|
+
i0.ɵɵconditional(ctx_r2.ActiveTab === "quality" ? 19 : -1);
|
|
2306
2295
|
i0.ɵɵadvance();
|
|
2307
|
-
i0.ɵɵconditional(ctx_r2.ActiveTab === "cost" ?
|
|
2296
|
+
i0.ɵɵconditional(ctx_r2.ActiveTab === "cost" ? 20 : -1);
|
|
2308
2297
|
} }
|
|
2309
2298
|
// ================================================================
|
|
2310
2299
|
// Component
|
|
@@ -4245,11 +4234,21 @@ let AnalyticsResourceComponent = class AnalyticsResourceComponent extends BaseRe
|
|
|
4245
4234
|
}
|
|
4246
4235
|
}
|
|
4247
4236
|
static ɵfac = /*@__PURE__*/ (() => { let ɵAnalyticsResourceComponent_BaseFactory; return function AnalyticsResourceComponent_Factory(__ngFactoryType__) { return (ɵAnalyticsResourceComponent_BaseFactory || (ɵAnalyticsResourceComponent_BaseFactory = i0.ɵɵgetInheritedFactory(AnalyticsResourceComponent)))(__ngFactoryType__ || AnalyticsResourceComponent); }; })();
|
|
4248
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AnalyticsResourceComponent, selectors: [["app-analytics-resource"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 2, vars: 1, consts: [[1, "analytics-loading"], [1, "analytics-layout"], ["text", "Loading analytics data...", "size", "medium"], [1, "analytics-sidebar"], [1, "sidebar-header"], [1, "fa-solid", "fa-chart-line"], [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, "pipeline-status"], [1, "status-dot"], [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, "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) {
|
|
4249
|
-
i0.ɵɵ
|
|
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) {
|
|
4238
|
+
i0.ɵɵelementStart(0, "mj-page-layout")(1, "mj-page-header", 0)(2, "div", 1);
|
|
4239
|
+
i0.ɵɵelement(3, "mj-stat-badge", 2);
|
|
4240
|
+
i0.ɵɵelementEnd()();
|
|
4241
|
+
i0.ɵɵelementStart(4, "mj-page-body", 3);
|
|
4242
|
+
i0.ɵɵconditionalCreate(5, AnalyticsResourceComponent_Conditional_5_Template, 2, 0, "div", 4)(6, AnalyticsResourceComponent_Conditional_6_Template, 21, 7, "div", 5);
|
|
4243
|
+
i0.ɵɵelementEnd()();
|
|
4250
4244
|
} if (rf & 2) {
|
|
4251
|
-
i0.ɵɵ
|
|
4252
|
-
} }, dependencies: [i1.NgSelectOption, i1.ɵNgSelectMultipleOption, i1.SelectControlValueAccessor, i1.NgControlStatus, i1.NgModel, i2.LoadingComponent], 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 height: 100%;\n min-height: 600px;\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}"] });
|
|
4245
|
+
i0.ɵɵadvance(3);
|
|
4246
|
+
i0.ɵɵproperty("Label", ctx.PipelineStatusText)("Variant", ctx.PipelineStatusOk ? "success" : "error");
|
|
4247
|
+
i0.ɵɵadvance();
|
|
4248
|
+
i0.ɵɵproperty("Flex", true)("Padding", false);
|
|
4249
|
+
i0.ɵɵadvance();
|
|
4250
|
+
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}"] });
|
|
4253
4252
|
};
|
|
4254
4253
|
AnalyticsResourceComponent = AnalyticsResourceComponent_1 = __decorate([
|
|
4255
4254
|
RegisterClass(BaseResourceComponent, 'AnalyticsResource')
|
|
@@ -4257,7 +4256,7 @@ AnalyticsResourceComponent = AnalyticsResourceComponent_1 = __decorate([
|
|
|
4257
4256
|
export { AnalyticsResourceComponent };
|
|
4258
4257
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AnalyticsResourceComponent, [{
|
|
4259
4258
|
type: Component,
|
|
4260
|
-
args: [{ standalone: false, selector: 'app-analytics-resource', template: "@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 <div class=\"sidebar-header\">\n <h2><i class=\"fa-solid fa-chart-line\"></i> Analytics</h2>\n </div>\n\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 <!-- Pipeline Status -->\n <div class=\"pipeline-status\">\n <span class=\"status-dot\" [class.status-dot-error]=\"!PipelineStatusOk\"></span>\n {{ PipelineStatusText }}\n </div>\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", 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 height: 100%;\n min-height: 600px;\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"] }]
|
|
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"] }]
|
|
4261
4260
|
}], null, null); })();
|
|
4262
4261
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AnalyticsResourceComponent, { className: "AnalyticsResourceComponent", filePath: "src/KnowledgeHub/components/analytics/analytics-resource.component.ts", lineNumber: 222 }); })();
|
|
4263
4262
|
/** Tree-shaking prevention */
|