@memberjunction/ng-dashboards 5.34.1 → 5.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AI/components/agents/agent-configuration.component.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 +96 -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 +453 -122
- 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.d.ts +28 -0
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +2084 -2079
- 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.d.ts +15 -0
- package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.js +1423 -1438
- 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/APIKeys/api-keys-resource.component.d.ts +12 -8
- package/dist/APIKeys/api-keys-resource.component.d.ts.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.js +329 -371
- package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
- package/dist/Actions/components/actions-overview.component.d.ts +6 -0
- package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +202 -158
- 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 +191 -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 +19 -79
- package/dist/Admin/admin-data-schema.component.js.map +1 -1
- package/dist/Admin/admin-dev-tools-resource.component.js +19 -79
- package/dist/Admin/admin-dev-tools-resource.component.js.map +1 -1
- package/dist/Admin/admin-identity-access.component.js +19 -79
- package/dist/Admin/admin-identity-access.component.js.map +1 -1
- package/dist/Admin/admin-monitoring.component.js +19 -79
- package/dist/Admin/admin-monitoring.component.js.map +1 -1
- package/dist/Admin/base-admin-container.component.d.ts +9 -7
- package/dist/Admin/base-admin-container.component.d.ts.map +1 -1
- package/dist/Admin/base-admin-container.component.js +26 -17
- package/dist/Admin/base-admin-container.component.js.map +1 -1
- package/dist/ApplicationRoles/application-roles-resource.component.js +92 -91
- 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-new-message-resource.component.d.ts +93 -0
- package/dist/Communication/communication-new-message-resource.component.d.ts.map +1 -0
- package/dist/Communication/communication-new-message-resource.component.js +661 -0
- package/dist/Communication/communication-new-message-resource.component.js.map +1 -0
- package/dist/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 +238 -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 +290 -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 +41 -21
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js.map +1 -1
- package/dist/DatabaseDesigner/components/entity-list.component.d.ts +2 -0
- package/dist/DatabaseDesigner/components/entity-list.component.d.ts.map +1 -1
- package/dist/DatabaseDesigner/components/entity-list.component.js +148 -155
- 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 +25 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -1
- package/dist/DevTools/app-state-inspector.component.d.ts +5 -0
- package/dist/DevTools/app-state-inspector.component.d.ts.map +1 -1
- package/dist/DevTools/app-state-inspector.component.js +46 -72
- package/dist/DevTools/app-state-inspector.component.js.map +1 -1
- package/dist/DevTools/class-registry.component.js +88 -100
- package/dist/DevTools/class-registry.component.js.map +1 -1
- package/dist/DevTools/event-monitor.component.js +158 -168
- package/dist/DevTools/event-monitor.component.js.map +1 -1
- package/dist/DevTools/graphql-console.component.js +257 -264
- package/dist/DevTools/graphql-console.component.js.map +1 -1
- package/dist/DevTools/layout-inspector.component.d.ts +5 -0
- package/dist/DevTools/layout-inspector.component.d.ts.map +1 -1
- package/dist/DevTools/layout-inspector.component.js +46 -64
- package/dist/DevTools/layout-inspector.component.js.map +1 -1
- package/dist/DevTools/lazy-module-status.component.js +75 -84
- package/dist/DevTools/lazy-module-status.component.js.map +1 -1
- package/dist/DevTools/settings-explorer.component.js +76 -85
- package/dist/DevTools/settings-explorer.component.js.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts +2 -0
- package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.js +24 -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 +307 -318
- package/dist/Integration/components/activity/activity.component.js.map +1 -1
- package/dist/Integration/components/connections/connections.component.js +654 -648
- 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 +595 -606
- package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
- package/dist/Integration/components/schedules/schedules.component.js +230 -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.d.ts +5 -0
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +1138 -1147
- 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.d.ts +11 -0
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +684 -697
- 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 +120 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +1239 -610
- 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 +133 -3
- package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.js +1460 -272
- package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-shared-with-me-resource.component.d.ts +29 -0
- package/dist/Lists/components/lists-shared-with-me-resource.component.d.ts.map +1 -0
- package/dist/Lists/components/lists-shared-with-me-resource.component.js +77 -0
- package/dist/Lists/components/lists-shared-with-me-resource.component.js.map +1 -0
- package/dist/Lists/components/venn-diagram/venn-diagram.component.d.ts +6 -0
- package/dist/Lists/components/venn-diagram/venn-diagram.component.d.ts.map +1 -1
- package/dist/Lists/components/venn-diagram/venn-diagram.component.js +35 -7
- package/dist/Lists/components/venn-diagram/venn-diagram.component.js.map +1 -1
- package/dist/Lists/index.d.ts +1 -0
- package/dist/Lists/index.d.ts.map +1 -1
- package/dist/Lists/index.js +1 -0
- package/dist/Lists/index.js.map +1 -1
- package/dist/Lists/services/list-set-operations.service.d.ts +93 -2
- package/dist/Lists/services/list-set-operations.service.d.ts.map +1 -1
- package/dist/Lists/services/list-set-operations.service.js +236 -10
- package/dist/Lists/services/list-set-operations.service.js.map +1 -1
- package/dist/MCP/mcp-dashboard.component.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 +259 -103
- package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts +13 -3
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.js +1009 -1264
- 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 +38 -6
- package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer.component.js +679 -786
- 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 +114 -99
- 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 +51 -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 +9 -6
- package/dist/communication-dashboards.module.d.ts.map +1 -1
- package/dist/communication-dashboards.module.js +37 -7
- 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 +46 -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 +10 -9
- package/dist/lists-dashboards.module.d.ts.map +1 -1
- package/dist/lists-dashboards.module.js +40 -2
- package/dist/lists-dashboards.module.js.map +1 -1
- package/dist/public-api.d.ts +3 -2
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +4 -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 +42 -0
- package/dist/testing-dashboards.module.js.map +1 -1
- package/package.json +53 -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,641 +23,625 @@ 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
|
-
|
|
27
|
-
const
|
|
28
|
-
const
|
|
29
|
-
const
|
|
30
|
-
const
|
|
31
|
-
const
|
|
32
|
-
function
|
|
33
|
-
i0.ɵɵelementStart(0, "div",
|
|
34
|
-
i0.ɵɵelement(1, "mj-loading",
|
|
35
|
-
i0.ɵɵelementEnd();
|
|
36
|
-
} }
|
|
37
|
-
function
|
|
38
|
-
const _r1 = i0.ɵɵgetCurrentView();
|
|
39
|
-
i0.ɵɵelementStart(0, "button", 18);
|
|
40
|
-
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_1_For_8_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
|
-
i0.ɵɵelement(1, "i");
|
|
42
|
-
i0.ɵɵtext(2);
|
|
43
|
-
i0.ɵɵelementEnd();
|
|
44
|
-
} if (rf & 2) {
|
|
45
|
-
const nav_r2 = ctx.$implicit;
|
|
46
|
-
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
47
|
-
i0.ɵɵclassProp("active", ctx_r2.ActiveTab === nav_r2.ID);
|
|
48
|
-
i0.ɵɵadvance();
|
|
49
|
-
i0.ɵɵclassMap(nav_r2.Icon);
|
|
50
|
-
i0.ɵɵadvance();
|
|
51
|
-
i0.ɵɵtextInterpolate1(" ", nav_r2.Label, " ");
|
|
52
|
-
} }
|
|
53
|
-
function AnalyticsResourceComponent_Conditional_1_For_16_Template(rf, ctx) { if (rf & 1) {
|
|
26
|
+
import * as i3 from "@memberjunction/ng-ui-components";
|
|
27
|
+
const _forTrack0 = ($index, $item) => $item.Name;
|
|
28
|
+
const _forTrack1 = ($index, $item) => $item.Label;
|
|
29
|
+
const _forTrack2 = ($index, $item) => $item.EntityName;
|
|
30
|
+
const _forTrack3 = ($index, $item) => $item.TagAName + $item.TagBName;
|
|
31
|
+
const _forTrack4 = ($index, $item) => $item.RunID;
|
|
32
|
+
function AnalyticsResourceComponent_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
33
|
+
i0.ɵɵelementStart(0, "div", 4);
|
|
34
|
+
i0.ɵɵelement(1, "mj-loading", 6);
|
|
35
|
+
i0.ɵɵelementEnd();
|
|
36
|
+
} }
|
|
37
|
+
function AnalyticsResourceComponent_Conditional_6_For_8_Template(rf, ctx) { if (rf & 1) {
|
|
54
38
|
i0.ɵɵelementStart(0, "span");
|
|
55
39
|
i0.ɵɵtext(1);
|
|
56
40
|
i0.ɵɵelementEnd();
|
|
57
41
|
} if (rf & 2) {
|
|
58
|
-
const
|
|
59
|
-
i0.ɵɵstyleProp("font-size",
|
|
42
|
+
const tag_r3 = ctx.$implicit;
|
|
43
|
+
i0.ɵɵstyleProp("font-size", tag_r3.Size, "px")("font-weight", tag_r3.Weight);
|
|
60
44
|
i0.ɵɵadvance();
|
|
61
|
-
i0.ɵɵtextInterpolate(
|
|
45
|
+
i0.ɵɵtextInterpolate(tag_r3.Name);
|
|
62
46
|
} }
|
|
63
|
-
function
|
|
64
|
-
i0.ɵɵelementStart(0, "span",
|
|
47
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
48
|
+
i0.ɵɵelementStart(0, "span", 12);
|
|
65
49
|
i0.ɵɵtext(1, "No trending tags yet");
|
|
66
50
|
i0.ɵɵelementEnd();
|
|
67
51
|
} }
|
|
68
|
-
function
|
|
69
|
-
const
|
|
70
|
-
i0.ɵɵelementStart(0, "button",
|
|
71
|
-
i0.ɵɵlistener("click", function
|
|
52
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_For_8_Template(rf, ctx) { if (rf & 1) {
|
|
53
|
+
const _r5 = i0.ɵɵgetCurrentView();
|
|
54
|
+
i0.ɵɵelementStart(0, "button", 70);
|
|
55
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_12_For_8_Template_button_click_0_listener() { const range_r6 = i0.ɵɵrestoreView(_r5).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.SetDateRange(range_r6.Label)); });
|
|
72
56
|
i0.ɵɵtext(1);
|
|
73
57
|
i0.ɵɵelementEnd();
|
|
74
58
|
} if (rf & 2) {
|
|
75
|
-
const
|
|
76
|
-
const
|
|
77
|
-
i0.ɵɵclassProp("active",
|
|
59
|
+
const range_r6 = ctx.$implicit;
|
|
60
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
61
|
+
i0.ɵɵclassProp("active", ctx_r1.ActiveDateRange === range_r6.Label);
|
|
78
62
|
i0.ɵɵadvance();
|
|
79
|
-
i0.ɵɵtextInterpolate(
|
|
63
|
+
i0.ɵɵtextInterpolate(range_r6.Label);
|
|
80
64
|
} }
|
|
81
|
-
function
|
|
82
|
-
i0.ɵɵelementStart(0, "option",
|
|
65
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_For_11_Template(rf, ctx) { if (rf & 1) {
|
|
66
|
+
i0.ɵɵelementStart(0, "option", 21);
|
|
83
67
|
i0.ɵɵtext(1);
|
|
84
68
|
i0.ɵɵelementEnd();
|
|
85
69
|
} if (rf & 2) {
|
|
86
|
-
const
|
|
87
|
-
i0.ɵɵproperty("value",
|
|
70
|
+
const opt_r7 = ctx.$implicit;
|
|
71
|
+
i0.ɵɵproperty("value", opt_r7);
|
|
88
72
|
i0.ɵɵadvance();
|
|
89
|
-
i0.ɵɵtextInterpolate(
|
|
73
|
+
i0.ɵɵtextInterpolate(opt_r7);
|
|
90
74
|
} }
|
|
91
|
-
function
|
|
92
|
-
i0.ɵɵelement(0, "i",
|
|
75
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_For_14_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
76
|
+
i0.ɵɵelement(0, "i", 75);
|
|
93
77
|
} }
|
|
94
|
-
function
|
|
95
|
-
i0.ɵɵelement(0, "i",
|
|
78
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_For_14_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
79
|
+
i0.ɵɵelement(0, "i", 76);
|
|
96
80
|
} }
|
|
97
|
-
function
|
|
98
|
-
const
|
|
99
|
-
i0.ɵɵelementStart(0, "div",
|
|
100
|
-
i0.ɵɵlistener("click", function
|
|
101
|
-
i0.ɵɵelementStart(1, "div")(2, "div",
|
|
81
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_For_14_Template(rf, ctx) { if (rf & 1) {
|
|
82
|
+
const _r8 = i0.ɵɵgetCurrentView();
|
|
83
|
+
i0.ɵɵelementStart(0, "div", 71);
|
|
84
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_12_For_14_Template_div_click_0_listener() { const kpi_r9 = i0.ɵɵrestoreView(_r8).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OpenDrillDown(kpi_r9.DrillDownKey)); });
|
|
85
|
+
i0.ɵɵelementStart(1, "div")(2, "div", 72);
|
|
102
86
|
i0.ɵɵtext(3);
|
|
103
87
|
i0.ɵɵelementEnd();
|
|
104
|
-
i0.ɵɵelementStart(4, "div",
|
|
88
|
+
i0.ɵɵelementStart(4, "div", 73);
|
|
105
89
|
i0.ɵɵtext(5);
|
|
106
90
|
i0.ɵɵelementEnd();
|
|
107
|
-
i0.ɵɵelementStart(6, "div",
|
|
108
|
-
i0.ɵɵconditionalCreate(7,
|
|
91
|
+
i0.ɵɵelementStart(6, "div", 74);
|
|
92
|
+
i0.ɵɵconditionalCreate(7, AnalyticsResourceComponent_Conditional_6_Conditional_12_For_14_Conditional_7_Template, 1, 0, "i", 75)(8, AnalyticsResourceComponent_Conditional_6_Conditional_12_For_14_Conditional_8_Template, 1, 0, "i", 76);
|
|
109
93
|
i0.ɵɵtext(9);
|
|
110
94
|
i0.ɵɵelementEnd()();
|
|
111
|
-
i0.ɵɵelementStart(10, "div",
|
|
95
|
+
i0.ɵɵelementStart(10, "div", 77);
|
|
112
96
|
i0.ɵɵnamespaceSVG();
|
|
113
|
-
i0.ɵɵelementStart(11, "svg",
|
|
114
|
-
i0.ɵɵelement(12, "polyline",
|
|
97
|
+
i0.ɵɵelementStart(11, "svg", 78);
|
|
98
|
+
i0.ɵɵelement(12, "polyline", 79);
|
|
115
99
|
i0.ɵɵelementEnd()()();
|
|
116
100
|
} if (rf & 2) {
|
|
117
|
-
const
|
|
101
|
+
const kpi_r9 = ctx.$implicit;
|
|
118
102
|
i0.ɵɵadvance(3);
|
|
119
|
-
i0.ɵɵtextInterpolate(
|
|
103
|
+
i0.ɵɵtextInterpolate(kpi_r9.Label);
|
|
120
104
|
i0.ɵɵadvance(2);
|
|
121
|
-
i0.ɵɵtextInterpolate(
|
|
105
|
+
i0.ɵɵtextInterpolate(kpi_r9.Value);
|
|
122
106
|
i0.ɵɵadvance();
|
|
123
|
-
i0.ɵɵclassProp("up",
|
|
107
|
+
i0.ɵɵclassProp("up", kpi_r9.DeltaDirection === "up")("down", kpi_r9.DeltaDirection === "down");
|
|
124
108
|
i0.ɵɵadvance();
|
|
125
|
-
i0.ɵɵconditional(
|
|
109
|
+
i0.ɵɵconditional(kpi_r9.DeltaDirection === "up" ? 7 : kpi_r9.DeltaDirection === "down" ? 8 : -1);
|
|
126
110
|
i0.ɵɵadvance(2);
|
|
127
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
111
|
+
i0.ɵɵtextInterpolate1(" ", kpi_r9.Delta, " ");
|
|
128
112
|
i0.ɵɵadvance(3);
|
|
129
|
-
i0.ɵɵattribute("points",
|
|
113
|
+
i0.ɵɵattribute("points", kpi_r9.SparklinePoints)("stroke", kpi_r9.SparklineColor);
|
|
130
114
|
} }
|
|
131
|
-
function
|
|
132
|
-
const
|
|
133
|
-
i0.ɵɵelementStart(0, "button",
|
|
134
|
-
i0.ɵɵlistener("click", function
|
|
135
|
-
i0.ɵɵelement(1, "i",
|
|
115
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
116
|
+
const _r11 = i0.ɵɵgetCurrentView();
|
|
117
|
+
i0.ɵɵelementStart(0, "button", 90);
|
|
118
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.ExportDrillDownCSV()); });
|
|
119
|
+
i0.ɵɵelement(1, "i", 91);
|
|
136
120
|
i0.ɵɵtext(2, " CSV ");
|
|
137
121
|
i0.ɵɵelementEnd();
|
|
138
122
|
} }
|
|
139
|
-
function
|
|
140
|
-
i0.ɵɵelement(0, "mj-loading",
|
|
123
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
124
|
+
i0.ɵɵelement(0, "mj-loading", 87);
|
|
141
125
|
} }
|
|
142
|
-
function
|
|
126
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Conditional_10_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
143
127
|
i0.ɵɵelementStart(0, "th");
|
|
144
128
|
i0.ɵɵtext(1);
|
|
145
129
|
i0.ɵɵelementEnd();
|
|
146
130
|
} if (rf & 2) {
|
|
147
|
-
const
|
|
131
|
+
const col_r12 = ctx.$implicit;
|
|
148
132
|
i0.ɵɵadvance();
|
|
149
|
-
i0.ɵɵtextInterpolate(
|
|
133
|
+
i0.ɵɵtextInterpolate(col_r12);
|
|
150
134
|
} }
|
|
151
|
-
function
|
|
152
|
-
i0.ɵɵelement(0, "th",
|
|
135
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Conditional_10_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
136
|
+
i0.ɵɵelement(0, "th", 93);
|
|
153
137
|
} }
|
|
154
|
-
function
|
|
138
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Conditional_10_For_9_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
155
139
|
i0.ɵɵelementStart(0, "td");
|
|
156
140
|
i0.ɵɵtext(1);
|
|
157
141
|
i0.ɵɵelementEnd();
|
|
158
142
|
} if (rf & 2) {
|
|
159
|
-
const
|
|
160
|
-
const
|
|
143
|
+
const col_r13 = ctx.$implicit;
|
|
144
|
+
const row_r14 = i0.ɵɵnextContext().$implicit;
|
|
161
145
|
i0.ɵɵadvance();
|
|
162
|
-
i0.ɵɵtextInterpolate(
|
|
146
|
+
i0.ɵɵtextInterpolate(row_r14[col_r13]);
|
|
163
147
|
} }
|
|
164
|
-
function
|
|
165
|
-
const
|
|
166
|
-
i0.ɵɵelementStart(0, "button",
|
|
167
|
-
i0.ɵɵlistener("click", function
|
|
168
|
-
i0.ɵɵelement(1, "i",
|
|
148
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Conditional_10_For_9_Conditional_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
149
|
+
const _r15 = i0.ɵɵgetCurrentView();
|
|
150
|
+
i0.ɵɵelementStart(0, "button", 95);
|
|
151
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Conditional_10_For_9_Conditional_3_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r15); const row_r14 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.OpenDrillDownRecord(row_r14)); });
|
|
152
|
+
i0.ɵɵelement(1, "i", 96);
|
|
169
153
|
i0.ɵɵelementEnd();
|
|
170
154
|
} }
|
|
171
|
-
function
|
|
172
|
-
i0.ɵɵelementStart(0, "td",
|
|
173
|
-
i0.ɵɵconditionalCreate(1,
|
|
155
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Conditional_10_For_9_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
156
|
+
i0.ɵɵelementStart(0, "td", 93);
|
|
157
|
+
i0.ɵɵconditionalCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Conditional_10_For_9_Conditional_3_Conditional_1_Template, 2, 0, "button", 94);
|
|
174
158
|
i0.ɵɵelementEnd();
|
|
175
159
|
} if (rf & 2) {
|
|
176
|
-
const
|
|
160
|
+
const row_r14 = i0.ɵɵnextContext().$implicit;
|
|
177
161
|
i0.ɵɵadvance();
|
|
178
|
-
i0.ɵɵconditional(
|
|
162
|
+
i0.ɵɵconditional(row_r14["_RecordID"] ? 1 : -1);
|
|
179
163
|
} }
|
|
180
|
-
function
|
|
164
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Conditional_10_For_9_Template(rf, ctx) { if (rf & 1) {
|
|
181
165
|
i0.ɵɵelementStart(0, "tr");
|
|
182
|
-
i0.ɵɵrepeaterCreate(1,
|
|
183
|
-
i0.ɵɵconditionalCreate(3,
|
|
166
|
+
i0.ɵɵrepeaterCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Conditional_10_For_9_For_2_Template, 2, 1, "td", null, i0.ɵɵrepeaterTrackByIdentity);
|
|
167
|
+
i0.ɵɵconditionalCreate(3, AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Conditional_10_For_9_Conditional_3_Template, 2, 1, "td", 93);
|
|
184
168
|
i0.ɵɵelementEnd();
|
|
185
169
|
} if (rf & 2) {
|
|
186
|
-
const
|
|
170
|
+
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
187
171
|
i0.ɵɵadvance();
|
|
188
|
-
i0.ɵɵrepeater(
|
|
172
|
+
i0.ɵɵrepeater(ctx_r1.DrillDownColumns);
|
|
189
173
|
i0.ɵɵadvance(2);
|
|
190
|
-
i0.ɵɵconditional(
|
|
174
|
+
i0.ɵɵconditional(ctx_r1.DrillDownHasActions ? 3 : -1);
|
|
191
175
|
} }
|
|
192
|
-
function
|
|
193
|
-
i0.ɵɵelementStart(0, "div",
|
|
194
|
-
i0.ɵɵrepeaterCreate(4,
|
|
195
|
-
i0.ɵɵconditionalCreate(6,
|
|
176
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
177
|
+
i0.ɵɵelementStart(0, "div", 88)(1, "table", 92)(2, "thead")(3, "tr");
|
|
178
|
+
i0.ɵɵrepeaterCreate(4, AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Conditional_10_For_5_Template, 2, 1, "th", null, i0.ɵɵrepeaterTrackByIdentity);
|
|
179
|
+
i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Conditional_10_Conditional_6_Template, 1, 0, "th", 93);
|
|
196
180
|
i0.ɵɵelementEnd()();
|
|
197
181
|
i0.ɵɵelementStart(7, "tbody");
|
|
198
|
-
i0.ɵɵrepeaterCreate(8,
|
|
182
|
+
i0.ɵɵrepeaterCreate(8, AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Conditional_10_For_9_Template, 4, 1, "tr", null, i0.ɵɵcomponentInstance().TrackByIndex, true);
|
|
199
183
|
i0.ɵɵelementEnd()()();
|
|
200
184
|
} if (rf & 2) {
|
|
201
|
-
const
|
|
185
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
202
186
|
i0.ɵɵadvance(4);
|
|
203
|
-
i0.ɵɵrepeater(
|
|
187
|
+
i0.ɵɵrepeater(ctx_r1.DrillDownColumns);
|
|
204
188
|
i0.ɵɵadvance(2);
|
|
205
|
-
i0.ɵɵconditional(
|
|
189
|
+
i0.ɵɵconditional(ctx_r1.DrillDownHasActions ? 6 : -1);
|
|
206
190
|
i0.ɵɵadvance(2);
|
|
207
|
-
i0.ɵɵrepeater(
|
|
191
|
+
i0.ɵɵrepeater(ctx_r1.DrillDownData);
|
|
208
192
|
} }
|
|
209
|
-
function
|
|
210
|
-
i0.ɵɵelementStart(0, "div",
|
|
193
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
194
|
+
i0.ɵɵelementStart(0, "div", 89);
|
|
211
195
|
i0.ɵɵtext(1, "No data available");
|
|
212
196
|
i0.ɵɵelementEnd();
|
|
213
197
|
} }
|
|
214
|
-
function
|
|
215
|
-
const
|
|
216
|
-
i0.ɵɵelementStart(0, "div",
|
|
217
|
-
i0.ɵɵelement(3, "i",
|
|
198
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
199
|
+
const _r10 = i0.ɵɵgetCurrentView();
|
|
200
|
+
i0.ɵɵelementStart(0, "div", 24)(1, "div", 80)(2, "span", 81);
|
|
201
|
+
i0.ɵɵelement(3, "i", 82);
|
|
218
202
|
i0.ɵɵtext(4, " Detail View");
|
|
219
203
|
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",
|
|
204
|
+
i0.ɵɵelementStart(5, "div", 83);
|
|
205
|
+
i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Conditional_6_Template, 3, 0, "button", 84);
|
|
206
|
+
i0.ɵɵelementStart(7, "button", 85);
|
|
207
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.CloseDrillDown()); });
|
|
208
|
+
i0.ɵɵelement(8, "i", 86);
|
|
225
209
|
i0.ɵɵelementEnd()()();
|
|
226
|
-
i0.ɵɵconditionalCreate(9,
|
|
210
|
+
i0.ɵɵconditionalCreate(9, AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Conditional_9_Template, 1, 0, "mj-loading", 87)(10, AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Conditional_10_Template, 10, 1, "div", 88)(11, AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Conditional_11_Template, 2, 0, "div", 89);
|
|
227
211
|
i0.ɵɵelementEnd();
|
|
228
212
|
} if (rf & 2) {
|
|
229
|
-
const
|
|
213
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
230
214
|
i0.ɵɵadvance(6);
|
|
231
|
-
i0.ɵɵconditional(
|
|
215
|
+
i0.ɵɵconditional(ctx_r1.DrillDownData.length > 0 ? 6 : -1);
|
|
232
216
|
i0.ɵɵadvance(3);
|
|
233
|
-
i0.ɵɵconditional(
|
|
217
|
+
i0.ɵɵconditional(ctx_r1.IsDrillDownLoading ? 9 : ctx_r1.DrillDownData.length > 0 ? 10 : 11);
|
|
234
218
|
} }
|
|
235
|
-
function
|
|
236
|
-
i0.ɵɵelementStart(0, "div",
|
|
219
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_For_23_Template(rf, ctx) { if (rf & 1) {
|
|
220
|
+
i0.ɵɵelementStart(0, "div", 30)(1, "div", 97);
|
|
237
221
|
i0.ɵɵtext(2);
|
|
238
222
|
i0.ɵɵelementEnd();
|
|
239
|
-
i0.ɵɵelement(3, "div",
|
|
240
|
-
i0.ɵɵelementStart(4, "div",
|
|
223
|
+
i0.ɵɵelement(3, "div", 98);
|
|
224
|
+
i0.ɵɵelementStart(4, "div", 99);
|
|
241
225
|
i0.ɵɵtext(5);
|
|
242
226
|
i0.ɵɵelementEnd()();
|
|
243
227
|
} if (rf & 2) {
|
|
244
|
-
const
|
|
228
|
+
const bar_r16 = ctx.$implicit;
|
|
245
229
|
i0.ɵɵadvance(2);
|
|
246
|
-
i0.ɵɵtextInterpolate(
|
|
230
|
+
i0.ɵɵtextInterpolate(bar_r16.Count);
|
|
247
231
|
i0.ɵɵadvance();
|
|
248
|
-
i0.ɵɵstyleProp("height",
|
|
232
|
+
i0.ɵɵstyleProp("height", bar_r16.Percentage, "%")("opacity", 0.5 + bar_r16.Percentage / 200);
|
|
249
233
|
i0.ɵɵadvance(2);
|
|
250
|
-
i0.ɵɵtextInterpolate(
|
|
234
|
+
i0.ɵɵtextInterpolate(bar_r16.Label);
|
|
251
235
|
} }
|
|
252
|
-
function
|
|
253
|
-
i0.ɵɵelementStart(0, "div",
|
|
236
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_For_30_Template(rf, ctx) { if (rf & 1) {
|
|
237
|
+
i0.ɵɵelementStart(0, "div", 33);
|
|
254
238
|
i0.ɵɵnamespaceSVG();
|
|
255
|
-
i0.ɵɵelementStart(1, "svg",
|
|
256
|
-
i0.ɵɵelement(2, "circle",
|
|
257
|
-
i0.ɵɵelementStart(4, "text",
|
|
239
|
+
i0.ɵɵelementStart(1, "svg", 100);
|
|
240
|
+
i0.ɵɵelement(2, "circle", 101)(3, "circle", 102);
|
|
241
|
+
i0.ɵɵelementStart(4, "text", 103);
|
|
258
242
|
i0.ɵɵtext(5);
|
|
259
243
|
i0.ɵɵelementEnd()();
|
|
260
244
|
i0.ɵɵnamespaceHTML();
|
|
261
|
-
i0.ɵɵelementStart(6, "div")(7, "div",
|
|
245
|
+
i0.ɵɵelementStart(6, "div")(7, "div", 104);
|
|
262
246
|
i0.ɵɵtext(8);
|
|
263
247
|
i0.ɵɵelementEnd();
|
|
264
|
-
i0.ɵɵelementStart(9, "div",
|
|
248
|
+
i0.ɵɵelementStart(9, "div", 105);
|
|
265
249
|
i0.ɵɵtext(10);
|
|
266
250
|
i0.ɵɵelementEnd()()();
|
|
267
251
|
} if (rf & 2) {
|
|
268
|
-
const
|
|
269
|
-
const
|
|
252
|
+
const entity_r17 = ctx.$implicit;
|
|
253
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
270
254
|
i0.ɵɵadvance(3);
|
|
271
|
-
i0.ɵɵattribute("stroke",
|
|
255
|
+
i0.ɵɵattribute("stroke", entity_r17.Color)("stroke-dasharray", entity_r17.StrokeDash);
|
|
272
256
|
i0.ɵɵadvance(2);
|
|
273
|
-
i0.ɵɵtextInterpolate1("",
|
|
257
|
+
i0.ɵɵtextInterpolate1("", entity_r17.Percentage, "%");
|
|
274
258
|
i0.ɵɵadvance(3);
|
|
275
|
-
i0.ɵɵtextInterpolate(
|
|
259
|
+
i0.ɵɵtextInterpolate(entity_r17.Name);
|
|
276
260
|
i0.ɵɵadvance(2);
|
|
277
|
-
i0.ɵɵtextInterpolate2("",
|
|
261
|
+
i0.ɵɵtextInterpolate2("", ctx_r1.FormatNumber(entity_r17.Tagged), " / ", ctx_r1.FormatNumber(entity_r17.Total));
|
|
278
262
|
} }
|
|
279
|
-
function
|
|
280
|
-
i0.ɵɵelementStart(0, "div",
|
|
263
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_31_Template(rf, ctx) { if (rf & 1) {
|
|
264
|
+
i0.ɵɵelementStart(0, "div", 34);
|
|
281
265
|
i0.ɵɵtext(1, "No content types found");
|
|
282
266
|
i0.ɵɵelementEnd();
|
|
283
267
|
} }
|
|
284
|
-
function
|
|
285
|
-
i0.ɵɵelement(0, "div",
|
|
268
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_For_54_Template(rf, ctx) { if (rf & 1) {
|
|
269
|
+
i0.ɵɵelement(0, "div", 106);
|
|
286
270
|
} if (rf & 2) {
|
|
287
|
-
const
|
|
288
|
-
i0.ɵɵstyleProp("height",
|
|
289
|
-
i0.ɵɵproperty("title",
|
|
271
|
+
const bin_r18 = ctx.$implicit;
|
|
272
|
+
i0.ɵɵstyleProp("height", bin_r18.Height, "px")("background", bin_r18.Color);
|
|
273
|
+
i0.ɵɵproperty("title", bin_r18.Title);
|
|
290
274
|
} }
|
|
291
|
-
function
|
|
292
|
-
i0.ɵɵelementStart(0, "div",
|
|
275
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_For_63_Template(rf, ctx) { if (rf & 1) {
|
|
276
|
+
i0.ɵɵelementStart(0, "div", 52)(1, "div", 107);
|
|
293
277
|
i0.ɵɵtext(2);
|
|
294
278
|
i0.ɵɵelementEnd();
|
|
295
|
-
i0.ɵɵelementStart(3, "div",
|
|
279
|
+
i0.ɵɵelementStart(3, "div", 108)(4, "div", 109);
|
|
296
280
|
i0.ɵɵtext(5);
|
|
297
281
|
i0.ɵɵelementEnd()()();
|
|
298
282
|
} if (rf & 2) {
|
|
299
|
-
const
|
|
283
|
+
const source_r19 = ctx.$implicit;
|
|
300
284
|
i0.ɵɵadvance(2);
|
|
301
|
-
i0.ɵɵtextInterpolate(
|
|
285
|
+
i0.ɵɵtextInterpolate(source_r19.Name);
|
|
302
286
|
i0.ɵɵadvance(2);
|
|
303
|
-
i0.ɵɵstyleProp("width",
|
|
287
|
+
i0.ɵɵstyleProp("width", source_r19.Percentage, "%")("background", source_r19.Color);
|
|
304
288
|
i0.ɵɵadvance();
|
|
305
|
-
i0.ɵɵtextInterpolate(
|
|
289
|
+
i0.ɵɵtextInterpolate(source_r19.AvgTagsPerItem);
|
|
306
290
|
} }
|
|
307
|
-
function
|
|
308
|
-
i0.ɵɵelementStart(0, "div",
|
|
291
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_64_Template(rf, ctx) { if (rf & 1) {
|
|
292
|
+
i0.ɵɵelementStart(0, "div", 34);
|
|
309
293
|
i0.ɵɵtext(1, "No source data");
|
|
310
294
|
i0.ɵɵelementEnd();
|
|
311
295
|
} }
|
|
312
|
-
function
|
|
313
|
-
i0.ɵɵelementStart(0, "div",
|
|
296
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_For_73_Template(rf, ctx) { if (rf & 1) {
|
|
297
|
+
i0.ɵɵelementStart(0, "div", 110)(1, "span", 111);
|
|
314
298
|
i0.ɵɵtext(2);
|
|
315
299
|
i0.ɵɵelementEnd()();
|
|
316
300
|
} if (rf & 2) {
|
|
317
|
-
const
|
|
318
|
-
i0.ɵɵstyleProp("height",
|
|
301
|
+
const day_r20 = ctx.$implicit;
|
|
302
|
+
i0.ɵɵstyleProp("height", day_r20.Percentage, "%")("background", day_r20.IsError ? "var(--mj-status-error)" : "var(--mj-status-success)");
|
|
319
303
|
i0.ɵɵadvance(2);
|
|
320
|
-
i0.ɵɵtextInterpolate(
|
|
304
|
+
i0.ɵɵtextInterpolate(day_r20.Label);
|
|
321
305
|
} }
|
|
322
|
-
function
|
|
306
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_For_89_Template(rf, ctx) { if (rf & 1) {
|
|
323
307
|
i0.ɵɵnamespaceSVG();
|
|
324
|
-
i0.ɵɵelement(0, "circle",
|
|
308
|
+
i0.ɵɵelement(0, "circle", 65);
|
|
325
309
|
} if (rf & 2) {
|
|
326
|
-
const
|
|
327
|
-
i0.ɵɵattribute("stroke",
|
|
310
|
+
const seg_r21 = ctx.$implicit;
|
|
311
|
+
i0.ɵɵattribute("stroke", seg_r21.Color)("stroke-dasharray", seg_r21.StrokeDash)("stroke-dashoffset", seg_r21.StrokeOffset);
|
|
328
312
|
} }
|
|
329
|
-
function
|
|
330
|
-
i0.ɵɵelementStart(0, "div",
|
|
313
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_For_96_Template(rf, ctx) { if (rf & 1) {
|
|
314
|
+
i0.ɵɵelementStart(0, "div", 112);
|
|
331
315
|
i0.ɵɵtext(1);
|
|
332
316
|
i0.ɵɵelementStart(2, "small");
|
|
333
317
|
i0.ɵɵtext(3);
|
|
334
318
|
i0.ɵɵelementEnd()();
|
|
335
319
|
} if (rf & 2) {
|
|
336
|
-
const
|
|
337
|
-
i0.ɵɵstyleProp("background",
|
|
320
|
+
const stat_r22 = ctx.$implicit;
|
|
321
|
+
i0.ɵɵstyleProp("background", stat_r22.BgColor)("color", stat_r22.Color);
|
|
338
322
|
i0.ɵɵadvance();
|
|
339
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
323
|
+
i0.ɵɵtextInterpolate1(" ", stat_r22.Count);
|
|
340
324
|
i0.ɵɵadvance(2);
|
|
341
|
-
i0.ɵɵtextInterpolate(
|
|
325
|
+
i0.ɵɵtextInterpolate(stat_r22.Label);
|
|
342
326
|
} }
|
|
343
|
-
function
|
|
344
|
-
i0.ɵɵelement(0, "mj-loading",
|
|
327
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_97_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
328
|
+
i0.ɵɵelement(0, "mj-loading", 87);
|
|
345
329
|
} }
|
|
346
|
-
function
|
|
330
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_97_Conditional_8_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
347
331
|
i0.ɵɵelementStart(0, "th");
|
|
348
332
|
i0.ɵɵtext(1);
|
|
349
333
|
i0.ɵɵelementEnd();
|
|
350
334
|
} if (rf & 2) {
|
|
351
|
-
const
|
|
335
|
+
const col_r24 = ctx.$implicit;
|
|
352
336
|
i0.ɵɵadvance();
|
|
353
|
-
i0.ɵɵtextInterpolate(
|
|
337
|
+
i0.ɵɵtextInterpolate(col_r24);
|
|
354
338
|
} }
|
|
355
|
-
function
|
|
356
|
-
i0.ɵɵelement(0, "th",
|
|
339
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_97_Conditional_8_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
340
|
+
i0.ɵɵelement(0, "th", 93);
|
|
357
341
|
} }
|
|
358
|
-
function
|
|
342
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_97_Conditional_8_For_9_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
359
343
|
i0.ɵɵelementStart(0, "td");
|
|
360
344
|
i0.ɵɵtext(1);
|
|
361
345
|
i0.ɵɵelementEnd();
|
|
362
346
|
} if (rf & 2) {
|
|
363
|
-
const
|
|
364
|
-
const
|
|
347
|
+
const col_r25 = ctx.$implicit;
|
|
348
|
+
const row_r26 = i0.ɵɵnextContext().$implicit;
|
|
365
349
|
i0.ɵɵadvance();
|
|
366
|
-
i0.ɵɵtextInterpolate(
|
|
350
|
+
i0.ɵɵtextInterpolate(row_r26[col_r25]);
|
|
367
351
|
} }
|
|
368
|
-
function
|
|
369
|
-
const
|
|
370
|
-
i0.ɵɵelementStart(0, "button",
|
|
371
|
-
i0.ɵɵlistener("click", function
|
|
372
|
-
i0.ɵɵelement(1, "i",
|
|
352
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_97_Conditional_8_For_9_Conditional_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
353
|
+
const _r27 = i0.ɵɵgetCurrentView();
|
|
354
|
+
i0.ɵɵelementStart(0, "button", 95);
|
|
355
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_97_Conditional_8_For_9_Conditional_3_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r27); const row_r26 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.OpenDrillDownRecord(row_r26)); });
|
|
356
|
+
i0.ɵɵelement(1, "i", 96);
|
|
373
357
|
i0.ɵɵelementEnd();
|
|
374
358
|
} }
|
|
375
|
-
function
|
|
376
|
-
i0.ɵɵelementStart(0, "td",
|
|
377
|
-
i0.ɵɵconditionalCreate(1,
|
|
359
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_97_Conditional_8_For_9_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
360
|
+
i0.ɵɵelementStart(0, "td", 93);
|
|
361
|
+
i0.ɵɵconditionalCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_97_Conditional_8_For_9_Conditional_3_Conditional_1_Template, 2, 0, "button", 94);
|
|
378
362
|
i0.ɵɵelementEnd();
|
|
379
363
|
} if (rf & 2) {
|
|
380
|
-
const
|
|
364
|
+
const row_r26 = i0.ɵɵnextContext().$implicit;
|
|
381
365
|
i0.ɵɵadvance();
|
|
382
|
-
i0.ɵɵconditional(
|
|
366
|
+
i0.ɵɵconditional(row_r26["_RecordID"] ? 1 : -1);
|
|
383
367
|
} }
|
|
384
|
-
function
|
|
368
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_97_Conditional_8_For_9_Template(rf, ctx) { if (rf & 1) {
|
|
385
369
|
i0.ɵɵelementStart(0, "tr");
|
|
386
|
-
i0.ɵɵrepeaterCreate(1,
|
|
387
|
-
i0.ɵɵconditionalCreate(3,
|
|
370
|
+
i0.ɵɵrepeaterCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_97_Conditional_8_For_9_For_2_Template, 2, 1, "td", null, i0.ɵɵrepeaterTrackByIdentity);
|
|
371
|
+
i0.ɵɵconditionalCreate(3, AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_97_Conditional_8_For_9_Conditional_3_Template, 2, 1, "td", 93);
|
|
388
372
|
i0.ɵɵelementEnd();
|
|
389
373
|
} if (rf & 2) {
|
|
390
|
-
const
|
|
374
|
+
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
391
375
|
i0.ɵɵadvance();
|
|
392
|
-
i0.ɵɵrepeater(
|
|
376
|
+
i0.ɵɵrepeater(ctx_r1.DrillDownColumns);
|
|
393
377
|
i0.ɵɵadvance(2);
|
|
394
|
-
i0.ɵɵconditional(
|
|
378
|
+
i0.ɵɵconditional(ctx_r1.DrillDownHasActions ? 3 : -1);
|
|
395
379
|
} }
|
|
396
|
-
function
|
|
397
|
-
i0.ɵɵelementStart(0, "div",
|
|
398
|
-
i0.ɵɵrepeaterCreate(4,
|
|
399
|
-
i0.ɵɵconditionalCreate(6,
|
|
380
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_97_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
381
|
+
i0.ɵɵelementStart(0, "div", 88)(1, "table", 92)(2, "thead")(3, "tr");
|
|
382
|
+
i0.ɵɵrepeaterCreate(4, AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_97_Conditional_8_For_5_Template, 2, 1, "th", null, i0.ɵɵrepeaterTrackByIdentity);
|
|
383
|
+
i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_97_Conditional_8_Conditional_6_Template, 1, 0, "th", 93);
|
|
400
384
|
i0.ɵɵelementEnd()();
|
|
401
385
|
i0.ɵɵelementStart(7, "tbody");
|
|
402
|
-
i0.ɵɵrepeaterCreate(8,
|
|
386
|
+
i0.ɵɵrepeaterCreate(8, AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_97_Conditional_8_For_9_Template, 4, 1, "tr", null, i0.ɵɵcomponentInstance().TrackByIndex, true);
|
|
403
387
|
i0.ɵɵelementEnd()()();
|
|
404
388
|
} if (rf & 2) {
|
|
405
|
-
const
|
|
389
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
406
390
|
i0.ɵɵadvance(4);
|
|
407
|
-
i0.ɵɵrepeater(
|
|
391
|
+
i0.ɵɵrepeater(ctx_r1.DrillDownColumns);
|
|
408
392
|
i0.ɵɵadvance(2);
|
|
409
|
-
i0.ɵɵconditional(
|
|
393
|
+
i0.ɵɵconditional(ctx_r1.DrillDownHasActions ? 6 : -1);
|
|
410
394
|
i0.ɵɵadvance(2);
|
|
411
|
-
i0.ɵɵrepeater(
|
|
395
|
+
i0.ɵɵrepeater(ctx_r1.DrillDownData);
|
|
412
396
|
} }
|
|
413
|
-
function
|
|
414
|
-
i0.ɵɵelementStart(0, "div",
|
|
397
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_97_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
398
|
+
i0.ɵɵelementStart(0, "div", 89);
|
|
415
399
|
i0.ɵɵtext(1, "No data available");
|
|
416
400
|
i0.ɵɵelementEnd();
|
|
417
401
|
} }
|
|
418
|
-
function
|
|
419
|
-
const
|
|
420
|
-
i0.ɵɵelementStart(0, "div",
|
|
421
|
-
i0.ɵɵelement(3, "i",
|
|
402
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_97_Template(rf, ctx) { if (rf & 1) {
|
|
403
|
+
const _r23 = i0.ɵɵgetCurrentView();
|
|
404
|
+
i0.ɵɵelementStart(0, "div", 24)(1, "div", 80)(2, "span", 81);
|
|
405
|
+
i0.ɵɵelement(3, "i", 82);
|
|
422
406
|
i0.ɵɵtext(4);
|
|
423
407
|
i0.ɵɵelementEnd();
|
|
424
|
-
i0.ɵɵelementStart(5, "button",
|
|
425
|
-
i0.ɵɵlistener("click", function
|
|
426
|
-
i0.ɵɵelement(6, "i",
|
|
408
|
+
i0.ɵɵelementStart(5, "button", 85);
|
|
409
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_97_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r23); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.CloseDrillDown()); });
|
|
410
|
+
i0.ɵɵelement(6, "i", 86);
|
|
427
411
|
i0.ɵɵelementEnd()();
|
|
428
|
-
i0.ɵɵconditionalCreate(7,
|
|
412
|
+
i0.ɵɵconditionalCreate(7, AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_97_Conditional_7_Template, 1, 0, "mj-loading", 87)(8, AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_97_Conditional_8_Template, 10, 1, "div", 88)(9, AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_97_Conditional_9_Template, 2, 0, "div", 89);
|
|
429
413
|
i0.ɵɵelementEnd();
|
|
430
414
|
} if (rf & 2) {
|
|
431
|
-
const
|
|
415
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
432
416
|
i0.ɵɵadvance(4);
|
|
433
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
417
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.DrillDownTarget, " Detail");
|
|
434
418
|
i0.ɵɵadvance(3);
|
|
435
|
-
i0.ɵɵconditional(
|
|
419
|
+
i0.ɵɵconditional(ctx_r1.IsDrillDownLoading ? 7 : ctx_r1.DrillDownData.length > 0 ? 8 : 9);
|
|
436
420
|
} }
|
|
437
|
-
function
|
|
438
|
-
const
|
|
439
|
-
i0.ɵɵelementStart(0, "section",
|
|
440
|
-
i0.ɵɵelement(2, "i",
|
|
421
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
422
|
+
const _r4 = i0.ɵɵgetCurrentView();
|
|
423
|
+
i0.ɵɵelementStart(0, "section", 14)(1, "div", 15);
|
|
424
|
+
i0.ɵɵelement(2, "i", 16);
|
|
441
425
|
i0.ɵɵelementStart(3, "h1");
|
|
442
426
|
i0.ɵɵtext(4, "Overview");
|
|
443
427
|
i0.ɵɵelementEnd()();
|
|
444
|
-
i0.ɵɵelementStart(5, "div",
|
|
445
|
-
i0.ɵɵrepeaterCreate(7,
|
|
428
|
+
i0.ɵɵelementStart(5, "div", 17)(6, "div", 18);
|
|
429
|
+
i0.ɵɵrepeaterCreate(7, AnalyticsResourceComponent_Conditional_6_Conditional_12_For_8_Template, 2, 3, "button", 19, _forTrack1);
|
|
446
430
|
i0.ɵɵelementEnd();
|
|
447
|
-
i0.ɵɵelementStart(9, "select",
|
|
448
|
-
i0.ɵɵlistener("ngModelChange", function
|
|
449
|
-
i0.ɵɵrepeaterCreate(10,
|
|
431
|
+
i0.ɵɵelementStart(9, "select", 20);
|
|
432
|
+
i0.ɵɵlistener("ngModelChange", function AnalyticsResourceComponent_Conditional_6_Conditional_12_Template_select_ngModelChange_9_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.SetEntityFilter($event)); });
|
|
433
|
+
i0.ɵɵrepeaterCreate(10, AnalyticsResourceComponent_Conditional_6_Conditional_12_For_11_Template, 2, 2, "option", 21, i0.ɵɵrepeaterTrackByIdentity);
|
|
450
434
|
i0.ɵɵelementEnd()();
|
|
451
|
-
i0.ɵɵelementStart(12, "div",
|
|
452
|
-
i0.ɵɵrepeaterCreate(13,
|
|
453
|
-
i0.ɵɵelementEnd();
|
|
454
|
-
i0.ɵɵconditionalCreate(15,
|
|
455
|
-
i0.ɵɵelementStart(16, "div",
|
|
456
|
-
i0.ɵɵlistener("click", function
|
|
457
|
-
i0.ɵɵelementStart(18, "div",
|
|
458
|
-
i0.ɵɵelement(19, "i",
|
|
435
|
+
i0.ɵɵelementStart(12, "div", 22);
|
|
436
|
+
i0.ɵɵrepeaterCreate(13, AnalyticsResourceComponent_Conditional_6_Conditional_12_For_14_Template, 13, 10, "div", 23, _forTrack1);
|
|
437
|
+
i0.ɵɵelementEnd();
|
|
438
|
+
i0.ɵɵconditionalCreate(15, AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_15_Template, 12, 2, "div", 24);
|
|
439
|
+
i0.ɵɵelementStart(16, "div", 25)(17, "div", 26);
|
|
440
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_12_Template_div_click_17_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OpenDrillDown("tagGrowth")); });
|
|
441
|
+
i0.ɵɵelementStart(18, "div", 27);
|
|
442
|
+
i0.ɵɵelement(19, "i", 28);
|
|
459
443
|
i0.ɵɵtext(20, " Tag Growth");
|
|
460
444
|
i0.ɵɵelementEnd();
|
|
461
|
-
i0.ɵɵelementStart(21, "div",
|
|
462
|
-
i0.ɵɵrepeaterCreate(22,
|
|
445
|
+
i0.ɵɵelementStart(21, "div", 29);
|
|
446
|
+
i0.ɵɵrepeaterCreate(22, AnalyticsResourceComponent_Conditional_6_Conditional_12_For_23_Template, 6, 6, "div", 30, _forTrack1);
|
|
463
447
|
i0.ɵɵelementEnd()();
|
|
464
|
-
i0.ɵɵelementStart(24, "div",
|
|
465
|
-
i0.ɵɵlistener("click", function
|
|
466
|
-
i0.ɵɵelementStart(25, "div",
|
|
467
|
-
i0.ɵɵelement(26, "i",
|
|
448
|
+
i0.ɵɵelementStart(24, "div", 26);
|
|
449
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_12_Template_div_click_24_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OpenDrillDown("contentCoverage")); });
|
|
450
|
+
i0.ɵɵelementStart(25, "div", 27);
|
|
451
|
+
i0.ɵɵelement(26, "i", 31);
|
|
468
452
|
i0.ɵɵtext(27, " Content Coverage");
|
|
469
453
|
i0.ɵɵelementEnd();
|
|
470
|
-
i0.ɵɵelementStart(28, "div",
|
|
471
|
-
i0.ɵɵrepeaterCreate(29,
|
|
472
|
-
i0.ɵɵconditionalCreate(31,
|
|
454
|
+
i0.ɵɵelementStart(28, "div", 32);
|
|
455
|
+
i0.ɵɵrepeaterCreate(29, AnalyticsResourceComponent_Conditional_6_Conditional_12_For_30_Template, 11, 6, "div", 33, _forTrack0);
|
|
456
|
+
i0.ɵɵconditionalCreate(31, AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_31_Template, 2, 0, "div", 34);
|
|
473
457
|
i0.ɵɵelementEnd()();
|
|
474
|
-
i0.ɵɵelementStart(32, "div",
|
|
475
|
-
i0.ɵɵlistener("click", function
|
|
476
|
-
i0.ɵɵelementStart(33, "div",
|
|
477
|
-
i0.ɵɵelement(34, "i",
|
|
458
|
+
i0.ɵɵelementStart(32, "div", 26);
|
|
459
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_12_Template_div_click_32_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OpenDrillDown("qualityScore")); });
|
|
460
|
+
i0.ɵɵelementStart(33, "div", 27);
|
|
461
|
+
i0.ɵɵelement(34, "i", 35);
|
|
478
462
|
i0.ɵɵtext(35, " Quality Score");
|
|
479
463
|
i0.ɵɵelementEnd();
|
|
480
|
-
i0.ɵɵelementStart(36, "div",
|
|
464
|
+
i0.ɵɵelementStart(36, "div", 36);
|
|
481
465
|
i0.ɵɵnamespaceSVG();
|
|
482
|
-
i0.ɵɵelementStart(37, "svg",
|
|
483
|
-
i0.ɵɵelement(38, "path",
|
|
484
|
-
i0.ɵɵelementStart(42, "text",
|
|
466
|
+
i0.ɵɵelementStart(37, "svg", 37);
|
|
467
|
+
i0.ɵɵelement(38, "path", 38)(39, "path", 39)(40, "path", 40)(41, "path", 41);
|
|
468
|
+
i0.ɵɵelementStart(42, "text", 42);
|
|
485
469
|
i0.ɵɵtext(43);
|
|
486
470
|
i0.ɵɵelementEnd();
|
|
487
|
-
i0.ɵɵelementStart(44, "text",
|
|
471
|
+
i0.ɵɵelementStart(44, "text", 43);
|
|
488
472
|
i0.ɵɵtext(45, "out of 100");
|
|
489
473
|
i0.ɵɵelementEnd();
|
|
490
|
-
i0.ɵɵelementStart(46, "text",
|
|
474
|
+
i0.ɵɵelementStart(46, "text", 44);
|
|
491
475
|
i0.ɵɵtext(47, "0");
|
|
492
476
|
i0.ɵɵelementEnd();
|
|
493
|
-
i0.ɵɵelementStart(48, "text",
|
|
477
|
+
i0.ɵɵelementStart(48, "text", 45);
|
|
494
478
|
i0.ɵɵtext(49, "50");
|
|
495
479
|
i0.ɵɵelementEnd();
|
|
496
|
-
i0.ɵɵelementStart(50, "text",
|
|
480
|
+
i0.ɵɵelementStart(50, "text", 46);
|
|
497
481
|
i0.ɵɵtext(51, "100");
|
|
498
482
|
i0.ɵɵelementEnd()()();
|
|
499
483
|
i0.ɵɵnamespaceHTML();
|
|
500
|
-
i0.ɵɵelementStart(52, "div",
|
|
501
|
-
i0.ɵɵrepeaterCreate(53,
|
|
484
|
+
i0.ɵɵelementStart(52, "div", 47);
|
|
485
|
+
i0.ɵɵrepeaterCreate(53, AnalyticsResourceComponent_Conditional_6_Conditional_12_For_54_Template, 1, 5, "div", 48, i0.ɵɵcomponentInstance().TrackByIndex, true);
|
|
502
486
|
i0.ɵɵelementEnd();
|
|
503
|
-
i0.ɵɵelementStart(55, "div",
|
|
487
|
+
i0.ɵɵelementStart(55, "div", 49);
|
|
504
488
|
i0.ɵɵtext(56, "Confidence Distribution");
|
|
505
489
|
i0.ɵɵelementEnd()();
|
|
506
|
-
i0.ɵɵelementStart(57, "div",
|
|
507
|
-
i0.ɵɵlistener("click", function
|
|
508
|
-
i0.ɵɵelementStart(58, "div",
|
|
509
|
-
i0.ɵɵelement(59, "i",
|
|
490
|
+
i0.ɵɵelementStart(57, "div", 26);
|
|
491
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_12_Template_div_click_57_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OpenDrillDown("sourcePerformance")); });
|
|
492
|
+
i0.ɵɵelementStart(58, "div", 27);
|
|
493
|
+
i0.ɵɵelement(59, "i", 50);
|
|
510
494
|
i0.ɵɵtext(60, " Source Performance");
|
|
511
495
|
i0.ɵɵelementEnd();
|
|
512
|
-
i0.ɵɵelementStart(61, "div",
|
|
513
|
-
i0.ɵɵrepeaterCreate(62,
|
|
514
|
-
i0.ɵɵconditionalCreate(64,
|
|
496
|
+
i0.ɵɵelementStart(61, "div", 51);
|
|
497
|
+
i0.ɵɵrepeaterCreate(62, AnalyticsResourceComponent_Conditional_6_Conditional_12_For_63_Template, 6, 6, "div", 52, _forTrack0);
|
|
498
|
+
i0.ɵɵconditionalCreate(64, AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_64_Template, 2, 0, "div", 34);
|
|
515
499
|
i0.ɵɵelementEnd();
|
|
516
|
-
i0.ɵɵelementStart(65, "div",
|
|
500
|
+
i0.ɵɵelementStart(65, "div", 53);
|
|
517
501
|
i0.ɵɵtext(66, "Average tags per item");
|
|
518
502
|
i0.ɵɵelementEnd()();
|
|
519
|
-
i0.ɵɵelementStart(67, "div",
|
|
520
|
-
i0.ɵɵlistener("click", function
|
|
521
|
-
i0.ɵɵelementStart(68, "div",
|
|
522
|
-
i0.ɵɵelement(69, "i",
|
|
503
|
+
i0.ɵɵelementStart(67, "div", 26);
|
|
504
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_12_Template_div_click_67_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OpenDrillDown("dailyThroughput")); });
|
|
505
|
+
i0.ɵɵelementStart(68, "div", 27);
|
|
506
|
+
i0.ɵɵelement(69, "i", 54);
|
|
523
507
|
i0.ɵɵtext(70, " Daily Throughput");
|
|
524
508
|
i0.ɵɵelementEnd();
|
|
525
|
-
i0.ɵɵelementStart(71, "div",
|
|
526
|
-
i0.ɵɵrepeaterCreate(72,
|
|
509
|
+
i0.ɵɵelementStart(71, "div", 55);
|
|
510
|
+
i0.ɵɵrepeaterCreate(72, AnalyticsResourceComponent_Conditional_6_Conditional_12_For_73_Template, 3, 5, "div", 56, _forTrack1);
|
|
527
511
|
i0.ɵɵelementEnd();
|
|
528
|
-
i0.ɵɵelementStart(74, "div",
|
|
529
|
-
i0.ɵɵelement(76, "div",
|
|
512
|
+
i0.ɵɵelementStart(74, "div", 57)(75, "div", 58);
|
|
513
|
+
i0.ɵɵelement(76, "div", 59);
|
|
530
514
|
i0.ɵɵtext(77, " Success");
|
|
531
515
|
i0.ɵɵelementEnd();
|
|
532
|
-
i0.ɵɵelementStart(78, "div",
|
|
533
|
-
i0.ɵɵelement(79, "div",
|
|
516
|
+
i0.ɵɵelementStart(78, "div", 58);
|
|
517
|
+
i0.ɵɵelement(79, "div", 60);
|
|
534
518
|
i0.ɵɵtext(80, " Failures");
|
|
535
519
|
i0.ɵɵelementEnd()()();
|
|
536
|
-
i0.ɵɵelementStart(81, "div",
|
|
537
|
-
i0.ɵɵlistener("click", function
|
|
538
|
-
i0.ɵɵelementStart(82, "div",
|
|
539
|
-
i0.ɵɵelement(83, "i",
|
|
520
|
+
i0.ɵɵelementStart(81, "div", 26);
|
|
521
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_12_Template_div_click_81_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OpenDrillDown("taxonomyHealth")); });
|
|
522
|
+
i0.ɵɵelementStart(82, "div", 27);
|
|
523
|
+
i0.ɵɵelement(83, "i", 61);
|
|
540
524
|
i0.ɵɵtext(84, " Taxonomy Health");
|
|
541
525
|
i0.ɵɵelementEnd();
|
|
542
|
-
i0.ɵɵelementStart(85, "div",
|
|
526
|
+
i0.ɵɵelementStart(85, "div", 62);
|
|
543
527
|
i0.ɵɵnamespaceSVG();
|
|
544
|
-
i0.ɵɵelementStart(86, "svg",
|
|
545
|
-
i0.ɵɵelement(87, "circle",
|
|
546
|
-
i0.ɵɵrepeaterCreate(88,
|
|
547
|
-
i0.ɵɵelementStart(90, "text",
|
|
528
|
+
i0.ɵɵelementStart(86, "svg", 63);
|
|
529
|
+
i0.ɵɵelement(87, "circle", 64);
|
|
530
|
+
i0.ɵɵrepeaterCreate(88, AnalyticsResourceComponent_Conditional_6_Conditional_12_For_89_Template, 1, 3, ":svg:circle", 65, i0.ɵɵcomponentInstance().TrackByIndex, true);
|
|
531
|
+
i0.ɵɵelementStart(90, "text", 66);
|
|
548
532
|
i0.ɵɵtext(91);
|
|
549
533
|
i0.ɵɵelementEnd();
|
|
550
|
-
i0.ɵɵelementStart(92, "text",
|
|
534
|
+
i0.ɵɵelementStart(92, "text", 67);
|
|
551
535
|
i0.ɵɵtext(93, "total tags");
|
|
552
536
|
i0.ɵɵelementEnd()()();
|
|
553
537
|
i0.ɵɵnamespaceHTML();
|
|
554
|
-
i0.ɵɵelementStart(94, "div",
|
|
555
|
-
i0.ɵɵrepeaterCreate(95,
|
|
538
|
+
i0.ɵɵelementStart(94, "div", 68);
|
|
539
|
+
i0.ɵɵrepeaterCreate(95, AnalyticsResourceComponent_Conditional_6_Conditional_12_For_96_Template, 4, 6, "div", 69, _forTrack1);
|
|
556
540
|
i0.ɵɵelementEnd()()();
|
|
557
|
-
i0.ɵɵconditionalCreate(97,
|
|
541
|
+
i0.ɵɵconditionalCreate(97, AnalyticsResourceComponent_Conditional_6_Conditional_12_Conditional_97_Template, 10, 2, "div", 24);
|
|
558
542
|
i0.ɵɵelementEnd();
|
|
559
543
|
} if (rf & 2) {
|
|
560
|
-
const
|
|
544
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
561
545
|
i0.ɵɵadvance(7);
|
|
562
|
-
i0.ɵɵrepeater(
|
|
546
|
+
i0.ɵɵrepeater(ctx_r1.DateRanges);
|
|
563
547
|
i0.ɵɵadvance(2);
|
|
564
|
-
i0.ɵɵproperty("ngModel",
|
|
548
|
+
i0.ɵɵproperty("ngModel", ctx_r1.EntityFilter);
|
|
565
549
|
i0.ɵɵadvance();
|
|
566
|
-
i0.ɵɵrepeater(
|
|
550
|
+
i0.ɵɵrepeater(ctx_r1.EntityFilterOptions);
|
|
567
551
|
i0.ɵɵadvance(3);
|
|
568
|
-
i0.ɵɵrepeater(
|
|
552
|
+
i0.ɵɵrepeater(ctx_r1.KPIs);
|
|
569
553
|
i0.ɵɵadvance(2);
|
|
570
|
-
i0.ɵɵconditional(
|
|
554
|
+
i0.ɵɵconditional(ctx_r1.DrillDownTarget && ctx_r1.DrillDownTarget.startsWith("kpi-") ? 15 : -1);
|
|
571
555
|
i0.ɵɵadvance(7);
|
|
572
|
-
i0.ɵɵrepeater(
|
|
556
|
+
i0.ɵɵrepeater(ctx_r1.TagGrowthData);
|
|
573
557
|
i0.ɵɵadvance(7);
|
|
574
|
-
i0.ɵɵrepeater(
|
|
558
|
+
i0.ɵɵrepeater(ctx_r1.CoverageData);
|
|
575
559
|
i0.ɵɵadvance(2);
|
|
576
|
-
i0.ɵɵconditional(
|
|
560
|
+
i0.ɵɵconditional(ctx_r1.CoverageData.length === 0 ? 31 : -1);
|
|
577
561
|
i0.ɵɵadvance(12);
|
|
578
|
-
i0.ɵɵtextInterpolate(
|
|
562
|
+
i0.ɵɵtextInterpolate(ctx_r1.QualityScore);
|
|
579
563
|
i0.ɵɵadvance(10);
|
|
580
|
-
i0.ɵɵrepeater(
|
|
564
|
+
i0.ɵɵrepeater(ctx_r1.MiniConfidenceBins);
|
|
581
565
|
i0.ɵɵadvance(9);
|
|
582
|
-
i0.ɵɵrepeater(
|
|
566
|
+
i0.ɵɵrepeater(ctx_r1.SourcePerfData);
|
|
583
567
|
i0.ɵɵadvance(2);
|
|
584
|
-
i0.ɵɵconditional(
|
|
568
|
+
i0.ɵɵconditional(ctx_r1.SourcePerfData.length === 0 ? 64 : -1);
|
|
585
569
|
i0.ɵɵadvance(8);
|
|
586
|
-
i0.ɵɵrepeater(
|
|
570
|
+
i0.ɵɵrepeater(ctx_r1.ThroughputData);
|
|
587
571
|
i0.ɵɵadvance(16);
|
|
588
|
-
i0.ɵɵrepeater(
|
|
572
|
+
i0.ɵɵrepeater(ctx_r1.TaxonomyRingSegments);
|
|
589
573
|
i0.ɵɵadvance(3);
|
|
590
|
-
i0.ɵɵtextInterpolate(
|
|
574
|
+
i0.ɵɵtextInterpolate(ctx_r1.TaxonomyTotal);
|
|
591
575
|
i0.ɵɵadvance(4);
|
|
592
|
-
i0.ɵɵrepeater(
|
|
576
|
+
i0.ɵɵrepeater(ctx_r1.TaxonomyStats);
|
|
593
577
|
i0.ɵɵadvance(2);
|
|
594
|
-
i0.ɵɵconditional(
|
|
578
|
+
i0.ɵɵconditional(ctx_r1.DrillDownTarget && !ctx_r1.DrillDownTarget.startsWith("kpi-") ? 97 : -1);
|
|
595
579
|
} }
|
|
596
|
-
function
|
|
597
|
-
const
|
|
598
|
-
i0.ɵɵelementStart(0, "button",
|
|
599
|
-
i0.ɵɵlistener("click", function
|
|
600
|
-
i0.ɵɵelement(1, "i",
|
|
580
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
581
|
+
const _r29 = i0.ɵɵgetCurrentView();
|
|
582
|
+
i0.ɵɵelementStart(0, "button", 90);
|
|
583
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_10_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r29); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.ExportTabDataCSV("top-tags")); });
|
|
584
|
+
i0.ɵɵelement(1, "i", 91);
|
|
601
585
|
i0.ɵɵtext(2, " CSV ");
|
|
602
586
|
i0.ɵɵelementEnd();
|
|
603
587
|
} }
|
|
604
|
-
function
|
|
605
|
-
const
|
|
606
|
-
i0.ɵɵelementStart(0, "tr",
|
|
607
|
-
i0.ɵɵlistener("click", function
|
|
588
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_11_For_20_Template(rf, ctx) { if (rf & 1) {
|
|
589
|
+
const _r30 = i0.ɵɵgetCurrentView();
|
|
590
|
+
i0.ɵɵelementStart(0, "tr", 127);
|
|
591
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_11_For_20_Template_tr_click_0_listener() { const tag_r31 = i0.ɵɵrestoreView(_r30).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OpenDrillDown("tag-row:" + tag_r31.Name)); });
|
|
608
592
|
i0.ɵɵelementStart(1, "td");
|
|
609
593
|
i0.ɵɵtext(2);
|
|
610
594
|
i0.ɵɵelementEnd();
|
|
611
595
|
i0.ɵɵelementStart(3, "td")(4, "strong");
|
|
612
596
|
i0.ɵɵtext(5);
|
|
613
597
|
i0.ɵɵelementEnd()();
|
|
614
|
-
i0.ɵɵelementStart(6, "td",
|
|
598
|
+
i0.ɵɵelementStart(6, "td", 125);
|
|
615
599
|
i0.ɵɵtext(7);
|
|
616
600
|
i0.ɵɵelementEnd();
|
|
617
601
|
i0.ɵɵelementStart(8, "td");
|
|
618
|
-
i0.ɵɵelement(9, "span",
|
|
602
|
+
i0.ɵɵelement(9, "span", 128);
|
|
619
603
|
i0.ɵɵtext(10);
|
|
620
604
|
i0.ɵɵelementEnd();
|
|
621
605
|
i0.ɵɵelementStart(11, "td");
|
|
622
606
|
i0.ɵɵnamespaceSVG();
|
|
623
|
-
i0.ɵɵelementStart(12, "svg",
|
|
624
|
-
i0.ɵɵelement(13, "polyline",
|
|
607
|
+
i0.ɵɵelementStart(12, "svg", 129);
|
|
608
|
+
i0.ɵɵelement(13, "polyline", 130);
|
|
625
609
|
i0.ɵɵelementEnd()();
|
|
626
610
|
i0.ɵɵnamespaceHTML();
|
|
627
611
|
i0.ɵɵelementStart(14, "td");
|
|
628
612
|
i0.ɵɵtext(15);
|
|
629
613
|
i0.ɵɵelementEnd();
|
|
630
|
-
i0.ɵɵelementStart(16, "td",
|
|
614
|
+
i0.ɵɵelementStart(16, "td", 131);
|
|
631
615
|
i0.ɵɵtext(17);
|
|
632
616
|
i0.ɵɵelementEnd()();
|
|
633
617
|
} if (rf & 2) {
|
|
634
|
-
const
|
|
635
|
-
const
|
|
618
|
+
const tag_r31 = ctx.$implicit;
|
|
619
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
636
620
|
i0.ɵɵadvance(2);
|
|
637
|
-
i0.ɵɵtextInterpolate(
|
|
621
|
+
i0.ɵɵtextInterpolate(tag_r31.Rank);
|
|
638
622
|
i0.ɵɵadvance(3);
|
|
639
|
-
i0.ɵɵtextInterpolate(
|
|
623
|
+
i0.ɵɵtextInterpolate(tag_r31.Name);
|
|
640
624
|
i0.ɵɵadvance(2);
|
|
641
|
-
i0.ɵɵtextInterpolate(
|
|
625
|
+
i0.ɵɵtextInterpolate(ctx_r1.FormatNumber(tag_r31.UsageCount));
|
|
642
626
|
i0.ɵɵadvance(2);
|
|
643
|
-
i0.ɵɵstyleProp("width",
|
|
627
|
+
i0.ɵɵstyleProp("width", tag_r31.WeightBarWidth, "px")("background", tag_r31.WeightBarColor);
|
|
644
628
|
i0.ɵɵadvance();
|
|
645
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
629
|
+
i0.ɵɵtextInterpolate1(" ", tag_r31.AvgWeight, " ");
|
|
646
630
|
i0.ɵɵadvance(3);
|
|
647
|
-
i0.ɵɵattribute("points",
|
|
631
|
+
i0.ɵɵattribute("points", tag_r31.TrendPoints)("stroke", tag_r31.TrendColor);
|
|
648
632
|
i0.ɵɵadvance(2);
|
|
649
|
-
i0.ɵɵtextInterpolate(
|
|
633
|
+
i0.ɵɵtextInterpolate(tag_r31.TopEntity);
|
|
650
634
|
i0.ɵɵadvance(2);
|
|
651
|
-
i0.ɵɵtextInterpolate(
|
|
635
|
+
i0.ɵɵtextInterpolate(tag_r31.FirstSeen);
|
|
652
636
|
} }
|
|
653
|
-
function
|
|
654
|
-
i0.ɵɵelementStart(0, "div",
|
|
637
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
638
|
+
i0.ɵɵelementStart(0, "div", 117)(1, "table", 92)(2, "thead")(3, "tr")(4, "th");
|
|
655
639
|
i0.ɵɵtext(5, "#");
|
|
656
640
|
i0.ɵɵelementEnd();
|
|
657
641
|
i0.ɵɵelementStart(6, "th");
|
|
658
642
|
i0.ɵɵtext(7, "Tag Name");
|
|
659
643
|
i0.ɵɵelementEnd();
|
|
660
|
-
i0.ɵɵelementStart(8, "th",
|
|
644
|
+
i0.ɵɵelementStart(8, "th", 125);
|
|
661
645
|
i0.ɵɵtext(9, "Usage Count");
|
|
662
646
|
i0.ɵɵelementEnd();
|
|
663
647
|
i0.ɵɵelementStart(10, "th");
|
|
@@ -673,233 +657,233 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_11_
|
|
|
673
657
|
i0.ɵɵtext(17, "First Seen");
|
|
674
658
|
i0.ɵɵelementEnd()()();
|
|
675
659
|
i0.ɵɵelementStart(18, "tbody");
|
|
676
|
-
i0.ɵɵrepeaterCreate(19,
|
|
660
|
+
i0.ɵɵrepeaterCreate(19, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_11_For_20_Template, 18, 12, "tr", 126, _forTrack0);
|
|
677
661
|
i0.ɵɵelementEnd()()();
|
|
678
662
|
} if (rf & 2) {
|
|
679
|
-
const
|
|
663
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
680
664
|
i0.ɵɵadvance(19);
|
|
681
|
-
i0.ɵɵrepeater(
|
|
665
|
+
i0.ɵɵrepeater(ctx_r1.TopTags);
|
|
682
666
|
} }
|
|
683
|
-
function
|
|
684
|
-
i0.ɵɵelementStart(0, "div",
|
|
685
|
-
i0.ɵɵelement(1, "i",
|
|
667
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
668
|
+
i0.ɵɵelementStart(0, "div", 118);
|
|
669
|
+
i0.ɵɵelement(1, "i", 113);
|
|
686
670
|
i0.ɵɵelementStart(2, "p");
|
|
687
671
|
i0.ɵɵtext(3, "No tag data available yet. Process content to generate tags.");
|
|
688
672
|
i0.ɵɵelementEnd()();
|
|
689
673
|
} }
|
|
690
|
-
function
|
|
691
|
-
const
|
|
692
|
-
i0.ɵɵelementStart(0, "button",
|
|
693
|
-
i0.ɵɵlistener("click", function
|
|
694
|
-
i0.ɵɵelement(1, "i",
|
|
674
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
675
|
+
const _r33 = i0.ɵɵgetCurrentView();
|
|
676
|
+
i0.ɵɵelementStart(0, "button", 90);
|
|
677
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r33); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.ExportDrillDownCSV()); });
|
|
678
|
+
i0.ɵɵelement(1, "i", 91);
|
|
695
679
|
i0.ɵɵtext(2, " CSV ");
|
|
696
680
|
i0.ɵɵelementEnd();
|
|
697
681
|
} }
|
|
698
|
-
function
|
|
699
|
-
i0.ɵɵelement(0, "mj-loading",
|
|
682
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
683
|
+
i0.ɵɵelement(0, "mj-loading", 87);
|
|
700
684
|
} }
|
|
701
|
-
function
|
|
685
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Conditional_10_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
702
686
|
i0.ɵɵelementStart(0, "th");
|
|
703
687
|
i0.ɵɵtext(1);
|
|
704
688
|
i0.ɵɵelementEnd();
|
|
705
689
|
} if (rf & 2) {
|
|
706
|
-
const
|
|
690
|
+
const col_r34 = ctx.$implicit;
|
|
707
691
|
i0.ɵɵadvance();
|
|
708
|
-
i0.ɵɵtextInterpolate(
|
|
692
|
+
i0.ɵɵtextInterpolate(col_r34);
|
|
709
693
|
} }
|
|
710
|
-
function
|
|
711
|
-
i0.ɵɵelement(0, "th",
|
|
694
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Conditional_10_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
695
|
+
i0.ɵɵelement(0, "th", 93);
|
|
712
696
|
} }
|
|
713
|
-
function
|
|
697
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Conditional_10_For_9_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
714
698
|
i0.ɵɵelementStart(0, "td");
|
|
715
699
|
i0.ɵɵtext(1);
|
|
716
700
|
i0.ɵɵelementEnd();
|
|
717
701
|
} if (rf & 2) {
|
|
718
|
-
const
|
|
719
|
-
const
|
|
702
|
+
const col_r35 = ctx.$implicit;
|
|
703
|
+
const row_r36 = i0.ɵɵnextContext().$implicit;
|
|
720
704
|
i0.ɵɵadvance();
|
|
721
|
-
i0.ɵɵtextInterpolate(
|
|
705
|
+
i0.ɵɵtextInterpolate(row_r36[col_r35]);
|
|
722
706
|
} }
|
|
723
|
-
function
|
|
724
|
-
const
|
|
725
|
-
i0.ɵɵelementStart(0, "button",
|
|
726
|
-
i0.ɵɵlistener("click", function
|
|
727
|
-
i0.ɵɵelement(1, "i",
|
|
707
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Conditional_10_For_9_Conditional_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
708
|
+
const _r37 = i0.ɵɵgetCurrentView();
|
|
709
|
+
i0.ɵɵelementStart(0, "button", 133);
|
|
710
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Conditional_10_For_9_Conditional_3_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r37); const row_r36 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.OpenDrillDownRecord(row_r36)); });
|
|
711
|
+
i0.ɵɵelement(1, "i", 96);
|
|
728
712
|
i0.ɵɵelementEnd();
|
|
729
713
|
} }
|
|
730
|
-
function
|
|
731
|
-
i0.ɵɵelementStart(0, "td",
|
|
732
|
-
i0.ɵɵconditionalCreate(1,
|
|
714
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Conditional_10_For_9_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
715
|
+
i0.ɵɵelementStart(0, "td", 93);
|
|
716
|
+
i0.ɵɵconditionalCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Conditional_10_For_9_Conditional_3_Conditional_1_Template, 2, 0, "button", 132);
|
|
733
717
|
i0.ɵɵelementEnd();
|
|
734
718
|
} if (rf & 2) {
|
|
735
|
-
const
|
|
719
|
+
const row_r36 = i0.ɵɵnextContext().$implicit;
|
|
736
720
|
i0.ɵɵadvance();
|
|
737
|
-
i0.ɵɵconditional(
|
|
721
|
+
i0.ɵɵconditional(row_r36["_RecordID"] ? 1 : -1);
|
|
738
722
|
} }
|
|
739
|
-
function
|
|
723
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Conditional_10_For_9_Template(rf, ctx) { if (rf & 1) {
|
|
740
724
|
i0.ɵɵelementStart(0, "tr");
|
|
741
|
-
i0.ɵɵrepeaterCreate(1,
|
|
742
|
-
i0.ɵɵconditionalCreate(3,
|
|
725
|
+
i0.ɵɵrepeaterCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Conditional_10_For_9_For_2_Template, 2, 1, "td", null, i0.ɵɵrepeaterTrackByIdentity);
|
|
726
|
+
i0.ɵɵconditionalCreate(3, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Conditional_10_For_9_Conditional_3_Template, 2, 1, "td", 93);
|
|
743
727
|
i0.ɵɵelementEnd();
|
|
744
728
|
} if (rf & 2) {
|
|
745
|
-
const
|
|
729
|
+
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
746
730
|
i0.ɵɵadvance();
|
|
747
|
-
i0.ɵɵrepeater(
|
|
731
|
+
i0.ɵɵrepeater(ctx_r1.DrillDownColumns);
|
|
748
732
|
i0.ɵɵadvance(2);
|
|
749
|
-
i0.ɵɵconditional(
|
|
733
|
+
i0.ɵɵconditional(ctx_r1.DrillDownHasActions ? 3 : -1);
|
|
750
734
|
} }
|
|
751
|
-
function
|
|
752
|
-
i0.ɵɵelementStart(0, "div",
|
|
753
|
-
i0.ɵɵrepeaterCreate(4,
|
|
754
|
-
i0.ɵɵconditionalCreate(6,
|
|
735
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
736
|
+
i0.ɵɵelementStart(0, "div", 88)(1, "table", 92)(2, "thead")(3, "tr");
|
|
737
|
+
i0.ɵɵrepeaterCreate(4, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Conditional_10_For_5_Template, 2, 1, "th", null, i0.ɵɵrepeaterTrackByIdentity);
|
|
738
|
+
i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Conditional_10_Conditional_6_Template, 1, 0, "th", 93);
|
|
755
739
|
i0.ɵɵelementEnd()();
|
|
756
740
|
i0.ɵɵelementStart(7, "tbody");
|
|
757
|
-
i0.ɵɵrepeaterCreate(8,
|
|
741
|
+
i0.ɵɵrepeaterCreate(8, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Conditional_10_For_9_Template, 4, 1, "tr", null, i0.ɵɵcomponentInstance().TrackByIndex, true);
|
|
758
742
|
i0.ɵɵelementEnd()()();
|
|
759
743
|
} if (rf & 2) {
|
|
760
|
-
const
|
|
744
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
761
745
|
i0.ɵɵadvance(4);
|
|
762
|
-
i0.ɵɵrepeater(
|
|
746
|
+
i0.ɵɵrepeater(ctx_r1.DrillDownColumns);
|
|
763
747
|
i0.ɵɵadvance(2);
|
|
764
|
-
i0.ɵɵconditional(
|
|
748
|
+
i0.ɵɵconditional(ctx_r1.DrillDownHasActions ? 6 : -1);
|
|
765
749
|
i0.ɵɵadvance(2);
|
|
766
|
-
i0.ɵɵrepeater(
|
|
750
|
+
i0.ɵɵrepeater(ctx_r1.DrillDownData);
|
|
767
751
|
} }
|
|
768
|
-
function
|
|
769
|
-
i0.ɵɵelementStart(0, "div",
|
|
752
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
753
|
+
i0.ɵɵelementStart(0, "div", 89);
|
|
770
754
|
i0.ɵɵtext(1, "No items found for this tag");
|
|
771
755
|
i0.ɵɵelementEnd();
|
|
772
756
|
} }
|
|
773
|
-
function
|
|
774
|
-
const
|
|
775
|
-
i0.ɵɵelementStart(0, "div",
|
|
776
|
-
i0.ɵɵelement(3, "i",
|
|
757
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
758
|
+
const _r32 = i0.ɵɵgetCurrentView();
|
|
759
|
+
i0.ɵɵelementStart(0, "div", 24)(1, "div", 80)(2, "span", 81);
|
|
760
|
+
i0.ɵɵelement(3, "i", 82);
|
|
777
761
|
i0.ɵɵtext(4);
|
|
778
762
|
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",
|
|
763
|
+
i0.ɵɵelementStart(5, "div", 83);
|
|
764
|
+
i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Conditional_6_Template, 3, 0, "button", 84);
|
|
765
|
+
i0.ɵɵelementStart(7, "button", 85);
|
|
766
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r32); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.CloseDrillDown()); });
|
|
767
|
+
i0.ɵɵelement(8, "i", 86);
|
|
784
768
|
i0.ɵɵelementEnd()()();
|
|
785
|
-
i0.ɵɵconditionalCreate(9,
|
|
769
|
+
i0.ɵɵconditionalCreate(9, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Conditional_9_Template, 1, 0, "mj-loading", 87)(10, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Conditional_10_Template, 10, 1, "div", 88)(11, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Conditional_11_Template, 2, 0, "div", 89);
|
|
786
770
|
i0.ɵɵelementEnd();
|
|
787
771
|
} if (rf & 2) {
|
|
788
|
-
const
|
|
772
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
789
773
|
i0.ɵɵadvance(4);
|
|
790
|
-
i0.ɵɵtextInterpolate1(" Content Items Tagged \"",
|
|
774
|
+
i0.ɵɵtextInterpolate1(" Content Items Tagged \"", ctx_r1.DrillDownTarget.replace("tag-row:", ""), "\"");
|
|
791
775
|
i0.ɵɵadvance(2);
|
|
792
|
-
i0.ɵɵconditional(
|
|
776
|
+
i0.ɵɵconditional(ctx_r1.DrillDownData.length > 0 ? 6 : -1);
|
|
793
777
|
i0.ɵɵadvance(3);
|
|
794
|
-
i0.ɵɵconditional(
|
|
778
|
+
i0.ɵɵconditional(ctx_r1.IsDrillDownLoading ? 9 : ctx_r1.DrillDownData.length > 0 ? 10 : 11);
|
|
795
779
|
} }
|
|
796
|
-
function
|
|
797
|
-
i0.ɵɵelementStart(0, "div",
|
|
780
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_14_For_6_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
781
|
+
i0.ɵɵelementStart(0, "div", 141);
|
|
798
782
|
i0.ɵɵtext(1);
|
|
799
783
|
i0.ɵɵelementEnd();
|
|
800
784
|
} if (rf & 2) {
|
|
801
|
-
const
|
|
802
|
-
i0.ɵɵstyleProp("width",
|
|
803
|
-
i0.ɵɵproperty("title",
|
|
785
|
+
const seg_r38 = ctx.$implicit;
|
|
786
|
+
i0.ɵɵstyleProp("width", seg_r38.Percentage, "%")("background", seg_r38.Color);
|
|
787
|
+
i0.ɵɵproperty("title", seg_r38.Label + ": " + seg_r38.Percentage + "%");
|
|
804
788
|
i0.ɵɵadvance();
|
|
805
|
-
i0.ɵɵtextInterpolate(
|
|
789
|
+
i0.ɵɵtextInterpolate(seg_r38.Label);
|
|
806
790
|
} }
|
|
807
|
-
function
|
|
808
|
-
i0.ɵɵelementStart(0, "div",
|
|
791
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_14_For_6_Template(rf, ctx) { if (rf & 1) {
|
|
792
|
+
i0.ɵɵelementStart(0, "div", 136)(1, "div", 138);
|
|
809
793
|
i0.ɵɵtext(2);
|
|
810
794
|
i0.ɵɵelementEnd();
|
|
811
|
-
i0.ɵɵelementStart(3, "div",
|
|
812
|
-
i0.ɵɵrepeaterCreate(4,
|
|
795
|
+
i0.ɵɵelementStart(3, "div", 139);
|
|
796
|
+
i0.ɵɵrepeaterCreate(4, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_14_For_6_For_5_Template, 2, 6, "div", 140, i0.ɵɵcomponentInstance().TrackByIndex, true);
|
|
813
797
|
i0.ɵɵelementEnd()();
|
|
814
798
|
} if (rf & 2) {
|
|
815
|
-
const
|
|
799
|
+
const row_r39 = ctx.$implicit;
|
|
816
800
|
i0.ɵɵadvance(2);
|
|
817
|
-
i0.ɵɵtextInterpolate(
|
|
801
|
+
i0.ɵɵtextInterpolate(row_r39.EntityName);
|
|
818
802
|
i0.ɵɵadvance(2);
|
|
819
|
-
i0.ɵɵrepeater(
|
|
803
|
+
i0.ɵɵrepeater(row_r39.Segments);
|
|
820
804
|
} }
|
|
821
|
-
function
|
|
822
|
-
i0.ɵɵelementStart(0, "div",
|
|
823
|
-
i0.ɵɵelement(1, "div",
|
|
805
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_14_For_9_Template(rf, ctx) { if (rf & 1) {
|
|
806
|
+
i0.ɵɵelementStart(0, "div", 58);
|
|
807
|
+
i0.ɵɵelement(1, "div", 142);
|
|
824
808
|
i0.ɵɵtext(2);
|
|
825
809
|
i0.ɵɵelementEnd();
|
|
826
810
|
} if (rf & 2) {
|
|
827
|
-
const
|
|
811
|
+
const item_r40 = ctx.$implicit;
|
|
828
812
|
i0.ɵɵadvance();
|
|
829
|
-
i0.ɵɵstyleProp("background",
|
|
813
|
+
i0.ɵɵstyleProp("background", item_r40.Color);
|
|
830
814
|
i0.ɵɵadvance();
|
|
831
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
815
|
+
i0.ɵɵtextInterpolate1(" ", item_r40.Label);
|
|
832
816
|
} }
|
|
833
|
-
function
|
|
834
|
-
i0.ɵɵelementStart(0, "div",
|
|
835
|
-
i0.ɵɵelement(2, "i",
|
|
817
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
818
|
+
i0.ɵɵelementStart(0, "div", 119)(1, "h3");
|
|
819
|
+
i0.ɵɵelement(2, "i", 134);
|
|
836
820
|
i0.ɵɵtext(3, " Tag Distribution by Entity");
|
|
837
821
|
i0.ɵɵelementEnd();
|
|
838
|
-
i0.ɵɵelementStart(4, "div",
|
|
839
|
-
i0.ɵɵrepeaterCreate(5,
|
|
822
|
+
i0.ɵɵelementStart(4, "div", 135);
|
|
823
|
+
i0.ɵɵrepeaterCreate(5, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_14_For_6_Template, 6, 1, "div", 136, _forTrack2);
|
|
840
824
|
i0.ɵɵelementEnd();
|
|
841
|
-
i0.ɵɵelementStart(7, "div",
|
|
842
|
-
i0.ɵɵrepeaterCreate(8,
|
|
825
|
+
i0.ɵɵelementStart(7, "div", 137);
|
|
826
|
+
i0.ɵɵrepeaterCreate(8, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_14_For_9_Template, 3, 3, "div", 58, _forTrack1);
|
|
843
827
|
i0.ɵɵelementEnd()();
|
|
844
828
|
} if (rf & 2) {
|
|
845
|
-
const
|
|
829
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
846
830
|
i0.ɵɵadvance(5);
|
|
847
|
-
i0.ɵɵrepeater(
|
|
831
|
+
i0.ɵɵrepeater(ctx_r1.EntityDistribution);
|
|
848
832
|
i0.ɵɵadvance(3);
|
|
849
|
-
i0.ɵɵrepeater(
|
|
833
|
+
i0.ɵɵrepeater(ctx_r1.DistributionLegend);
|
|
850
834
|
} }
|
|
851
|
-
function
|
|
852
|
-
i0.ɵɵelementStart(0, "div",
|
|
835
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_15_For_6_Template(rf, ctx) { if (rf & 1) {
|
|
836
|
+
i0.ɵɵelementStart(0, "div", 145)(1, "div", 147);
|
|
853
837
|
i0.ɵɵtext(2);
|
|
854
838
|
i0.ɵɵelementEnd();
|
|
855
|
-
i0.ɵɵelementStart(3, "div",
|
|
839
|
+
i0.ɵɵelementStart(3, "div", 148);
|
|
856
840
|
i0.ɵɵtext(4);
|
|
857
841
|
i0.ɵɵelementEnd()();
|
|
858
842
|
} if (rf & 2) {
|
|
859
|
-
const
|
|
843
|
+
const bar_r41 = ctx.$implicit;
|
|
860
844
|
i0.ɵɵadvance();
|
|
861
|
-
i0.ɵɵstyleProp("height",
|
|
845
|
+
i0.ɵɵstyleProp("height", bar_r41.Percentage, "%")("min-height", bar_r41.Count > 0 ? 24 : 0, "px");
|
|
862
846
|
i0.ɵɵadvance();
|
|
863
|
-
i0.ɵɵtextInterpolate(
|
|
847
|
+
i0.ɵɵtextInterpolate(bar_r41.Count);
|
|
864
848
|
i0.ɵɵadvance(2);
|
|
865
|
-
i0.ɵɵtextInterpolate(
|
|
849
|
+
i0.ɵɵtextInterpolate(bar_r41.Label);
|
|
866
850
|
} }
|
|
867
|
-
function
|
|
868
|
-
i0.ɵɵelementStart(0, "div",
|
|
869
|
-
i0.ɵɵelement(2, "i",
|
|
851
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
852
|
+
i0.ɵɵelementStart(0, "div", 119)(1, "h3");
|
|
853
|
+
i0.ɵɵelement(2, "i", 143);
|
|
870
854
|
i0.ɵɵtext(3, " Tag Depth Distribution");
|
|
871
855
|
i0.ɵɵelementEnd();
|
|
872
|
-
i0.ɵɵelementStart(4, "div",
|
|
873
|
-
i0.ɵɵrepeaterCreate(5,
|
|
856
|
+
i0.ɵɵelementStart(4, "div", 144);
|
|
857
|
+
i0.ɵɵrepeaterCreate(5, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_15_For_6_Template, 5, 6, "div", 145, _forTrack1);
|
|
874
858
|
i0.ɵɵelementEnd();
|
|
875
|
-
i0.ɵɵelementStart(7, "div",
|
|
859
|
+
i0.ɵɵelementStart(7, "div", 146);
|
|
876
860
|
i0.ɵɵtext(8, " Taxonomy hierarchy depth -- Most tags at depth 2-3 indicating a healthy mid-level structure ");
|
|
877
861
|
i0.ɵɵelementEnd()();
|
|
878
862
|
} if (rf & 2) {
|
|
879
|
-
const
|
|
863
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
880
864
|
i0.ɵɵadvance(5);
|
|
881
|
-
i0.ɵɵrepeater(
|
|
865
|
+
i0.ɵɵrepeater(ctx_r1.TagDepthBars);
|
|
882
866
|
} }
|
|
883
|
-
function
|
|
884
|
-
i0.ɵɵelementStart(0, "span",
|
|
885
|
-
i0.ɵɵelement(1, "i",
|
|
867
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_22_Template(rf, ctx) { if (rf & 1) {
|
|
868
|
+
i0.ɵɵelementStart(0, "span", 123);
|
|
869
|
+
i0.ɵɵelement(1, "i", 149);
|
|
886
870
|
i0.ɵɵtext(2);
|
|
887
871
|
i0.ɵɵelementEnd();
|
|
888
872
|
} if (rf & 2) {
|
|
889
|
-
const
|
|
873
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
890
874
|
i0.ɵɵadvance(2);
|
|
891
|
-
i0.ɵɵtextInterpolate1(" Last computed: ",
|
|
875
|
+
i0.ɵɵtextInterpolate1(" Last computed: ", ctx_r1.CoOccurrenceLastComputed, " ");
|
|
892
876
|
} }
|
|
893
|
-
function
|
|
894
|
-
i0.ɵɵelement(0, "i",
|
|
877
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_24_Template(rf, ctx) { if (rf & 1) {
|
|
878
|
+
i0.ɵɵelement(0, "i", 150);
|
|
895
879
|
i0.ɵɵtext(1, " Computing... ");
|
|
896
880
|
} }
|
|
897
|
-
function
|
|
898
|
-
i0.ɵɵelement(0, "i",
|
|
881
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
882
|
+
i0.ɵɵelement(0, "i", 151);
|
|
899
883
|
i0.ɵɵtext(1, " Recompute ");
|
|
900
884
|
} }
|
|
901
|
-
function
|
|
902
|
-
i0.ɵɵelementStart(0, "tr")(1, "td",
|
|
885
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_26_For_16_Template(rf, ctx) { if (rf & 1) {
|
|
886
|
+
i0.ɵɵelementStart(0, "tr")(1, "td", 131);
|
|
903
887
|
i0.ɵɵtext(2);
|
|
904
888
|
i0.ɵɵelementEnd();
|
|
905
889
|
i0.ɵɵelementStart(3, "td")(4, "strong");
|
|
@@ -908,29 +892,29 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_26_
|
|
|
908
892
|
i0.ɵɵelementStart(6, "td")(7, "strong");
|
|
909
893
|
i0.ɵɵtext(8);
|
|
910
894
|
i0.ɵɵelementEnd()();
|
|
911
|
-
i0.ɵɵelementStart(9, "td",
|
|
895
|
+
i0.ɵɵelementStart(9, "td", 125);
|
|
912
896
|
i0.ɵɵtext(10);
|
|
913
897
|
i0.ɵɵelementEnd();
|
|
914
898
|
i0.ɵɵelementStart(11, "td");
|
|
915
|
-
i0.ɵɵelement(12, "span",
|
|
899
|
+
i0.ɵɵelement(12, "span", 152);
|
|
916
900
|
i0.ɵɵelementEnd()();
|
|
917
901
|
} if (rf & 2) {
|
|
918
|
-
const
|
|
919
|
-
const ɵ$
|
|
920
|
-
const
|
|
902
|
+
const pair_r42 = ctx.$implicit;
|
|
903
|
+
const ɵ$index_655_r43 = ctx.$index;
|
|
904
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
921
905
|
i0.ɵɵadvance(2);
|
|
922
|
-
i0.ɵɵtextInterpolate(ɵ$
|
|
906
|
+
i0.ɵɵtextInterpolate(ɵ$index_655_r43 + 1);
|
|
923
907
|
i0.ɵɵadvance(3);
|
|
924
|
-
i0.ɵɵtextInterpolate(
|
|
908
|
+
i0.ɵɵtextInterpolate(pair_r42.TagAName);
|
|
925
909
|
i0.ɵɵadvance(3);
|
|
926
|
-
i0.ɵɵtextInterpolate(
|
|
910
|
+
i0.ɵɵtextInterpolate(pair_r42.TagBName);
|
|
927
911
|
i0.ɵɵadvance(2);
|
|
928
|
-
i0.ɵɵtextInterpolate(
|
|
912
|
+
i0.ɵɵtextInterpolate(ctx_r1.FormatNumber(pair_r42.Count));
|
|
929
913
|
i0.ɵɵadvance(2);
|
|
930
|
-
i0.ɵɵstyleProp("width",
|
|
914
|
+
i0.ɵɵstyleProp("width", pair_r42.BarWidth, "px");
|
|
931
915
|
} }
|
|
932
|
-
function
|
|
933
|
-
i0.ɵɵelementStart(0, "div",
|
|
916
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
917
|
+
i0.ɵɵelementStart(0, "div", 117)(1, "table", 92)(2, "thead")(3, "tr")(4, "th");
|
|
934
918
|
i0.ɵɵtext(5, "#");
|
|
935
919
|
i0.ɵɵelementEnd();
|
|
936
920
|
i0.ɵɵelementStart(6, "th");
|
|
@@ -939,151 +923,151 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_23_Conditional_26_
|
|
|
939
923
|
i0.ɵɵelementStart(8, "th");
|
|
940
924
|
i0.ɵɵtext(9, "Tag B");
|
|
941
925
|
i0.ɵɵelementEnd();
|
|
942
|
-
i0.ɵɵelementStart(10, "th",
|
|
926
|
+
i0.ɵɵelementStart(10, "th", 125);
|
|
943
927
|
i0.ɵɵtext(11, "Co-Occurrences");
|
|
944
928
|
i0.ɵɵelementEnd();
|
|
945
929
|
i0.ɵɵelementStart(12, "th");
|
|
946
930
|
i0.ɵɵtext(13, "Frequency");
|
|
947
931
|
i0.ɵɵelementEnd()()();
|
|
948
932
|
i0.ɵɵelementStart(14, "tbody");
|
|
949
|
-
i0.ɵɵrepeaterCreate(15,
|
|
933
|
+
i0.ɵɵrepeaterCreate(15, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_26_For_16_Template, 13, 6, "tr", null, _forTrack3);
|
|
950
934
|
i0.ɵɵelementEnd()()();
|
|
951
935
|
} if (rf & 2) {
|
|
952
|
-
const
|
|
936
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
953
937
|
i0.ɵɵadvance(15);
|
|
954
|
-
i0.ɵɵrepeater(
|
|
938
|
+
i0.ɵɵrepeater(ctx_r1.CoOccurrencePairs);
|
|
955
939
|
} }
|
|
956
|
-
function
|
|
957
|
-
i0.ɵɵelementStart(0, "div",
|
|
958
|
-
i0.ɵɵelement(1, "i",
|
|
940
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_27_Template(rf, ctx) { if (rf & 1) {
|
|
941
|
+
i0.ɵɵelementStart(0, "div", 118);
|
|
942
|
+
i0.ɵɵelement(1, "i", 121);
|
|
959
943
|
i0.ɵɵelementStart(2, "p");
|
|
960
944
|
i0.ɵɵtext(3, "No co-occurrence data available yet. Process content and recompute to see which tags frequently appear together.");
|
|
961
945
|
i0.ɵɵelementEnd()();
|
|
962
946
|
} }
|
|
963
|
-
function
|
|
964
|
-
const
|
|
965
|
-
i0.ɵɵelementStart(0, "section",
|
|
966
|
-
i0.ɵɵelement(2, "i",
|
|
947
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
948
|
+
const _r28 = i0.ɵɵgetCurrentView();
|
|
949
|
+
i0.ɵɵelementStart(0, "section", 14)(1, "div", 15);
|
|
950
|
+
i0.ɵɵelement(2, "i", 113);
|
|
967
951
|
i0.ɵɵelementStart(3, "h1");
|
|
968
952
|
i0.ɵɵtext(4, "Tags");
|
|
969
953
|
i0.ɵɵelementEnd()();
|
|
970
|
-
i0.ɵɵelementStart(5, "div",
|
|
971
|
-
i0.ɵɵelement(8, "i",
|
|
954
|
+
i0.ɵɵelementStart(5, "div", 114)(6, "div", 115)(7, "h3");
|
|
955
|
+
i0.ɵɵelement(8, "i", 116);
|
|
972
956
|
i0.ɵɵtext(9, " Top 20 Tags");
|
|
973
957
|
i0.ɵɵelementEnd();
|
|
974
|
-
i0.ɵɵconditionalCreate(10,
|
|
958
|
+
i0.ɵɵconditionalCreate(10, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_10_Template, 3, 0, "button", 84);
|
|
975
959
|
i0.ɵɵelementEnd();
|
|
976
|
-
i0.ɵɵconditionalCreate(11,
|
|
960
|
+
i0.ɵɵconditionalCreate(11, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_11_Template, 21, 0, "div", 117)(12, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_12_Template, 4, 0, "div", 118);
|
|
977
961
|
i0.ɵɵelementEnd();
|
|
978
|
-
i0.ɵɵconditionalCreate(13,
|
|
979
|
-
i0.ɵɵconditionalCreate(14,
|
|
980
|
-
i0.ɵɵconditionalCreate(15,
|
|
981
|
-
i0.ɵɵelementStart(16, "div",
|
|
982
|
-
i0.ɵɵelement(19, "i",
|
|
962
|
+
i0.ɵɵconditionalCreate(13, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_13_Template, 12, 3, "div", 24);
|
|
963
|
+
i0.ɵɵconditionalCreate(14, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_14_Template, 10, 0, "div", 119);
|
|
964
|
+
i0.ɵɵconditionalCreate(15, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_15_Template, 9, 0, "div", 119);
|
|
965
|
+
i0.ɵɵelementStart(16, "div", 120)(17, "div", 115)(18, "h3");
|
|
966
|
+
i0.ɵɵelement(19, "i", 121);
|
|
983
967
|
i0.ɵɵtext(20, " Frequently Paired Tags");
|
|
984
968
|
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,
|
|
969
|
+
i0.ɵɵelementStart(21, "div", 122);
|
|
970
|
+
i0.ɵɵconditionalCreate(22, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_22_Template, 3, 1, "span", 123);
|
|
971
|
+
i0.ɵɵelementStart(23, "button", 124);
|
|
972
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_13_Template_button_click_23_listener() { i0.ɵɵrestoreView(_r28); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.RecomputeCoOccurrence()); });
|
|
973
|
+
i0.ɵɵconditionalCreate(24, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_24_Template, 2, 0)(25, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_25_Template, 2, 0);
|
|
990
974
|
i0.ɵɵelementEnd()()();
|
|
991
|
-
i0.ɵɵconditionalCreate(26,
|
|
975
|
+
i0.ɵɵconditionalCreate(26, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_26_Template, 17, 0, "div", 117)(27, AnalyticsResourceComponent_Conditional_6_Conditional_13_Conditional_27_Template, 4, 0, "div", 118);
|
|
992
976
|
i0.ɵɵelementEnd()();
|
|
993
977
|
} if (rf & 2) {
|
|
994
|
-
const
|
|
978
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
995
979
|
i0.ɵɵadvance(10);
|
|
996
|
-
i0.ɵɵconditional(
|
|
980
|
+
i0.ɵɵconditional(ctx_r1.TopTags.length > 0 ? 10 : -1);
|
|
997
981
|
i0.ɵɵadvance();
|
|
998
|
-
i0.ɵɵconditional(
|
|
982
|
+
i0.ɵɵconditional(ctx_r1.TopTags.length > 0 ? 11 : 12);
|
|
999
983
|
i0.ɵɵadvance(2);
|
|
1000
|
-
i0.ɵɵconditional(
|
|
984
|
+
i0.ɵɵconditional(ctx_r1.DrillDownTarget && ctx_r1.DrillDownTarget.startsWith("tag-row:") ? 13 : -1);
|
|
1001
985
|
i0.ɵɵadvance();
|
|
1002
|
-
i0.ɵɵconditional(
|
|
986
|
+
i0.ɵɵconditional(ctx_r1.EntityDistribution.length > 0 ? 14 : -1);
|
|
1003
987
|
i0.ɵɵadvance();
|
|
1004
|
-
i0.ɵɵconditional(
|
|
988
|
+
i0.ɵɵconditional(ctx_r1.TagDepthBars.length > 0 ? 15 : -1);
|
|
1005
989
|
i0.ɵɵadvance(7);
|
|
1006
|
-
i0.ɵɵconditional(
|
|
990
|
+
i0.ɵɵconditional(ctx_r1.CoOccurrenceLastComputed ? 22 : -1);
|
|
1007
991
|
i0.ɵɵadvance();
|
|
1008
|
-
i0.ɵɵproperty("disabled",
|
|
992
|
+
i0.ɵɵproperty("disabled", ctx_r1.IsRecomputingCoOccurrence);
|
|
1009
993
|
i0.ɵɵadvance();
|
|
1010
|
-
i0.ɵɵconditional(
|
|
994
|
+
i0.ɵɵconditional(ctx_r1.IsRecomputingCoOccurrence ? 24 : 25);
|
|
1011
995
|
i0.ɵɵadvance(2);
|
|
1012
|
-
i0.ɵɵconditional(
|
|
996
|
+
i0.ɵɵconditional(ctx_r1.CoOccurrencePairs.length > 0 ? 26 : 27);
|
|
1013
997
|
} }
|
|
1014
|
-
function
|
|
1015
|
-
const
|
|
1016
|
-
i0.ɵɵelementStart(0, "tr",
|
|
1017
|
-
i0.ɵɵlistener("click", function
|
|
998
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_9_For_22_Template(rf, ctx) { if (rf & 1) {
|
|
999
|
+
const _r44 = i0.ɵɵgetCurrentView();
|
|
1000
|
+
i0.ɵɵelementStart(0, "tr", 127);
|
|
1001
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_9_For_22_Template_tr_click_0_listener() { const source_r45 = i0.ɵɵrestoreView(_r44).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); ctx_r1.SelectSource(source_r45.Name); return i0.ɵɵresetView(ctx_r1.OpenDrillDown("source-row:" + source_r45.Name)); });
|
|
1018
1002
|
i0.ɵɵelementStart(1, "td")(2, "strong");
|
|
1019
1003
|
i0.ɵɵtext(3);
|
|
1020
1004
|
i0.ɵɵelementEnd()();
|
|
1021
1005
|
i0.ɵɵelementStart(4, "td");
|
|
1022
|
-
i0.ɵɵelement(5, "i",
|
|
1006
|
+
i0.ɵɵelement(5, "i", 155);
|
|
1023
1007
|
i0.ɵɵtext(6);
|
|
1024
1008
|
i0.ɵɵelementEnd();
|
|
1025
|
-
i0.ɵɵelementStart(7, "td",
|
|
1009
|
+
i0.ɵɵelementStart(7, "td", 125);
|
|
1026
1010
|
i0.ɵɵtext(8);
|
|
1027
1011
|
i0.ɵɵelementEnd();
|
|
1028
|
-
i0.ɵɵelementStart(9, "td",
|
|
1012
|
+
i0.ɵɵelementStart(9, "td", 125);
|
|
1029
1013
|
i0.ɵɵtext(10);
|
|
1030
1014
|
i0.ɵɵelementEnd();
|
|
1031
|
-
i0.ɵɵelementStart(11, "td",
|
|
1015
|
+
i0.ɵɵelementStart(11, "td", 125);
|
|
1032
1016
|
i0.ɵɵtext(12);
|
|
1033
1017
|
i0.ɵɵelementEnd();
|
|
1034
|
-
i0.ɵɵelementStart(13, "td",
|
|
1018
|
+
i0.ɵɵelementStart(13, "td", 125);
|
|
1035
1019
|
i0.ɵɵtext(14);
|
|
1036
1020
|
i0.ɵɵelementEnd();
|
|
1037
|
-
i0.ɵɵelementStart(15, "td",
|
|
1021
|
+
i0.ɵɵelementStart(15, "td", 131);
|
|
1038
1022
|
i0.ɵɵtext(16);
|
|
1039
1023
|
i0.ɵɵelementEnd();
|
|
1040
|
-
i0.ɵɵelementStart(17, "td")(18, "span",
|
|
1041
|
-
i0.ɵɵelement(19, "i",
|
|
1024
|
+
i0.ɵɵelementStart(17, "td")(18, "span", 156);
|
|
1025
|
+
i0.ɵɵelement(19, "i", 157);
|
|
1042
1026
|
i0.ɵɵtext(20);
|
|
1043
1027
|
i0.ɵɵelementEnd()()();
|
|
1044
1028
|
} if (rf & 2) {
|
|
1045
|
-
const
|
|
1046
|
-
const
|
|
1047
|
-
i0.ɵɵclassProp("source-selected",
|
|
1029
|
+
const source_r45 = ctx.$implicit;
|
|
1030
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1031
|
+
i0.ɵɵclassProp("source-selected", ctx_r1.SelectedSourceName === source_r45.Name);
|
|
1048
1032
|
i0.ɵɵadvance(3);
|
|
1049
|
-
i0.ɵɵtextInterpolate(
|
|
1033
|
+
i0.ɵɵtextInterpolate(source_r45.Name);
|
|
1050
1034
|
i0.ɵɵadvance(2);
|
|
1051
|
-
i0.ɵɵclassMap(
|
|
1052
|
-
i0.ɵɵstyleProp("color",
|
|
1035
|
+
i0.ɵɵclassMap(source_r45.TypeIcon);
|
|
1036
|
+
i0.ɵɵstyleProp("color", source_r45.TypeColor);
|
|
1053
1037
|
i0.ɵɵadvance();
|
|
1054
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1038
|
+
i0.ɵɵtextInterpolate1(" ", source_r45.Type);
|
|
1055
1039
|
i0.ɵɵadvance(2);
|
|
1056
|
-
i0.ɵɵtextInterpolate(
|
|
1040
|
+
i0.ɵɵtextInterpolate(ctx_r1.FormatNumber(source_r45.Items));
|
|
1057
1041
|
i0.ɵɵadvance(2);
|
|
1058
|
-
i0.ɵɵtextInterpolate(
|
|
1042
|
+
i0.ɵɵtextInterpolate(ctx_r1.FormatNumber(source_r45.TagsGenerated));
|
|
1059
1043
|
i0.ɵɵadvance(2);
|
|
1060
|
-
i0.ɵɵtextInterpolate(
|
|
1044
|
+
i0.ɵɵtextInterpolate(source_r45.AvgTagsPerItem);
|
|
1061
1045
|
i0.ɵɵadvance(2);
|
|
1062
|
-
i0.ɵɵtextInterpolate(
|
|
1046
|
+
i0.ɵɵtextInterpolate(source_r45.AvgWeight);
|
|
1063
1047
|
i0.ɵɵadvance(2);
|
|
1064
|
-
i0.ɵɵtextInterpolate(
|
|
1048
|
+
i0.ɵɵtextInterpolate(source_r45.LastRun);
|
|
1065
1049
|
i0.ɵɵadvance(2);
|
|
1066
|
-
i0.ɵɵclassMap(
|
|
1050
|
+
i0.ɵɵclassMap(source_r45.StatusClass);
|
|
1067
1051
|
i0.ɵɵadvance(2);
|
|
1068
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1052
|
+
i0.ɵɵtextInterpolate1(" ", source_r45.Status);
|
|
1069
1053
|
} }
|
|
1070
|
-
function
|
|
1071
|
-
i0.ɵɵelementStart(0, "div",
|
|
1054
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
1055
|
+
i0.ɵɵelementStart(0, "div", 117)(1, "table", 92)(2, "thead")(3, "tr")(4, "th");
|
|
1072
1056
|
i0.ɵɵtext(5, "Source Name");
|
|
1073
1057
|
i0.ɵɵelementEnd();
|
|
1074
1058
|
i0.ɵɵelementStart(6, "th");
|
|
1075
1059
|
i0.ɵɵtext(7, "Type");
|
|
1076
1060
|
i0.ɵɵelementEnd();
|
|
1077
|
-
i0.ɵɵelementStart(8, "th",
|
|
1061
|
+
i0.ɵɵelementStart(8, "th", 125);
|
|
1078
1062
|
i0.ɵɵtext(9, "Items");
|
|
1079
1063
|
i0.ɵɵelementEnd();
|
|
1080
|
-
i0.ɵɵelementStart(10, "th",
|
|
1064
|
+
i0.ɵɵelementStart(10, "th", 125);
|
|
1081
1065
|
i0.ɵɵtext(11, "Tags Generated");
|
|
1082
1066
|
i0.ɵɵelementEnd();
|
|
1083
|
-
i0.ɵɵelementStart(12, "th",
|
|
1067
|
+
i0.ɵɵelementStart(12, "th", 125);
|
|
1084
1068
|
i0.ɵɵtext(13, "Avg Tags/Item");
|
|
1085
1069
|
i0.ɵɵelementEnd();
|
|
1086
|
-
i0.ɵɵelementStart(14, "th",
|
|
1070
|
+
i0.ɵɵelementStart(14, "th", 125);
|
|
1087
1071
|
i0.ɵɵtext(15, "Avg Weight");
|
|
1088
1072
|
i0.ɵɵelementEnd();
|
|
1089
1073
|
i0.ɵɵelementStart(16, "th");
|
|
@@ -1093,462 +1077,462 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_24_Conditional_9_T
|
|
|
1093
1077
|
i0.ɵɵtext(19, "Status");
|
|
1094
1078
|
i0.ɵɵelementEnd()()();
|
|
1095
1079
|
i0.ɵɵelementStart(20, "tbody");
|
|
1096
|
-
i0.ɵɵrepeaterCreate(21,
|
|
1080
|
+
i0.ɵɵrepeaterCreate(21, AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_9_For_22_Template, 21, 16, "tr", 154, _forTrack0);
|
|
1097
1081
|
i0.ɵɵelementEnd()()();
|
|
1098
1082
|
} if (rf & 2) {
|
|
1099
|
-
const
|
|
1083
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1100
1084
|
i0.ɵɵadvance(21);
|
|
1101
|
-
i0.ɵɵrepeater(
|
|
1085
|
+
i0.ɵɵrepeater(ctx_r1.SourceComparison);
|
|
1102
1086
|
} }
|
|
1103
|
-
function
|
|
1104
|
-
i0.ɵɵelementStart(0, "div",
|
|
1105
|
-
i0.ɵɵelement(1, "i",
|
|
1087
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
1088
|
+
i0.ɵɵelementStart(0, "div", 118);
|
|
1089
|
+
i0.ɵɵelement(1, "i", 153);
|
|
1106
1090
|
i0.ɵɵelementStart(2, "p");
|
|
1107
1091
|
i0.ɵɵtext(3, "No content sources configured yet.");
|
|
1108
1092
|
i0.ɵɵelementEnd()();
|
|
1109
1093
|
} }
|
|
1110
|
-
function
|
|
1111
|
-
const
|
|
1112
|
-
i0.ɵɵelementStart(0, "button",
|
|
1113
|
-
i0.ɵɵlistener("click", function
|
|
1114
|
-
i0.ɵɵelement(1, "i",
|
|
1094
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
1095
|
+
const _r47 = i0.ɵɵgetCurrentView();
|
|
1096
|
+
i0.ɵɵelementStart(0, "button", 90);
|
|
1097
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r47); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.ExportDrillDownCSV()); });
|
|
1098
|
+
i0.ɵɵelement(1, "i", 91);
|
|
1115
1099
|
i0.ɵɵtext(2, " CSV");
|
|
1116
1100
|
i0.ɵɵelementEnd();
|
|
1117
1101
|
} }
|
|
1118
|
-
function
|
|
1119
|
-
i0.ɵɵelement(0, "mj-loading",
|
|
1102
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
1103
|
+
i0.ɵɵelement(0, "mj-loading", 87);
|
|
1120
1104
|
} }
|
|
1121
|
-
function
|
|
1105
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Conditional_10_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
1122
1106
|
i0.ɵɵelementStart(0, "th");
|
|
1123
1107
|
i0.ɵɵtext(1);
|
|
1124
1108
|
i0.ɵɵelementEnd();
|
|
1125
1109
|
} if (rf & 2) {
|
|
1126
|
-
const
|
|
1110
|
+
const col_r48 = ctx.$implicit;
|
|
1127
1111
|
i0.ɵɵadvance();
|
|
1128
|
-
i0.ɵɵtextInterpolate(
|
|
1112
|
+
i0.ɵɵtextInterpolate(col_r48);
|
|
1129
1113
|
} }
|
|
1130
|
-
function
|
|
1131
|
-
i0.ɵɵelement(0, "th",
|
|
1114
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Conditional_10_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
1115
|
+
i0.ɵɵelement(0, "th", 93);
|
|
1132
1116
|
} }
|
|
1133
|
-
function
|
|
1117
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Conditional_10_For_9_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
1134
1118
|
i0.ɵɵelementStart(0, "td");
|
|
1135
1119
|
i0.ɵɵtext(1);
|
|
1136
1120
|
i0.ɵɵelementEnd();
|
|
1137
1121
|
} if (rf & 2) {
|
|
1138
|
-
const
|
|
1139
|
-
const
|
|
1122
|
+
const col_r49 = ctx.$implicit;
|
|
1123
|
+
const row_r50 = i0.ɵɵnextContext().$implicit;
|
|
1140
1124
|
i0.ɵɵadvance();
|
|
1141
|
-
i0.ɵɵtextInterpolate(
|
|
1125
|
+
i0.ɵɵtextInterpolate(row_r50[col_r49]);
|
|
1142
1126
|
} }
|
|
1143
|
-
function
|
|
1144
|
-
const
|
|
1145
|
-
i0.ɵɵelementStart(0, "button",
|
|
1146
|
-
i0.ɵɵlistener("click", function
|
|
1147
|
-
i0.ɵɵelement(1, "i",
|
|
1127
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Conditional_10_For_9_Conditional_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
1128
|
+
const _r51 = i0.ɵɵgetCurrentView();
|
|
1129
|
+
i0.ɵɵelementStart(0, "button", 133);
|
|
1130
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Conditional_10_For_9_Conditional_3_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r51); const row_r50 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.OpenDrillDownRecord(row_r50)); });
|
|
1131
|
+
i0.ɵɵelement(1, "i", 96);
|
|
1148
1132
|
i0.ɵɵelementEnd();
|
|
1149
1133
|
} }
|
|
1150
|
-
function
|
|
1151
|
-
i0.ɵɵelementStart(0, "td",
|
|
1152
|
-
i0.ɵɵconditionalCreate(1,
|
|
1134
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Conditional_10_For_9_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1135
|
+
i0.ɵɵelementStart(0, "td", 93);
|
|
1136
|
+
i0.ɵɵconditionalCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Conditional_10_For_9_Conditional_3_Conditional_1_Template, 2, 0, "button", 132);
|
|
1153
1137
|
i0.ɵɵelementEnd();
|
|
1154
1138
|
} if (rf & 2) {
|
|
1155
|
-
const
|
|
1139
|
+
const row_r50 = i0.ɵɵnextContext().$implicit;
|
|
1156
1140
|
i0.ɵɵadvance();
|
|
1157
|
-
i0.ɵɵconditional(
|
|
1141
|
+
i0.ɵɵconditional(row_r50["_RecordID"] ? 1 : -1);
|
|
1158
1142
|
} }
|
|
1159
|
-
function
|
|
1143
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Conditional_10_For_9_Template(rf, ctx) { if (rf & 1) {
|
|
1160
1144
|
i0.ɵɵelementStart(0, "tr");
|
|
1161
|
-
i0.ɵɵrepeaterCreate(1,
|
|
1162
|
-
i0.ɵɵconditionalCreate(3,
|
|
1145
|
+
i0.ɵɵrepeaterCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Conditional_10_For_9_For_2_Template, 2, 1, "td", null, i0.ɵɵrepeaterTrackByIdentity);
|
|
1146
|
+
i0.ɵɵconditionalCreate(3, AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Conditional_10_For_9_Conditional_3_Template, 2, 1, "td", 93);
|
|
1163
1147
|
i0.ɵɵelementEnd();
|
|
1164
1148
|
} if (rf & 2) {
|
|
1165
|
-
const
|
|
1149
|
+
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
1166
1150
|
i0.ɵɵadvance();
|
|
1167
|
-
i0.ɵɵrepeater(
|
|
1151
|
+
i0.ɵɵrepeater(ctx_r1.DrillDownColumns);
|
|
1168
1152
|
i0.ɵɵadvance(2);
|
|
1169
|
-
i0.ɵɵconditional(
|
|
1153
|
+
i0.ɵɵconditional(ctx_r1.DrillDownHasActions ? 3 : -1);
|
|
1170
1154
|
} }
|
|
1171
|
-
function
|
|
1172
|
-
i0.ɵɵelementStart(0, "div",
|
|
1173
|
-
i0.ɵɵrepeaterCreate(4,
|
|
1174
|
-
i0.ɵɵconditionalCreate(6,
|
|
1155
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
1156
|
+
i0.ɵɵelementStart(0, "div", 88)(1, "table", 92)(2, "thead")(3, "tr");
|
|
1157
|
+
i0.ɵɵrepeaterCreate(4, AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Conditional_10_For_5_Template, 2, 1, "th", null, i0.ɵɵrepeaterTrackByIdentity);
|
|
1158
|
+
i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Conditional_10_Conditional_6_Template, 1, 0, "th", 93);
|
|
1175
1159
|
i0.ɵɵelementEnd()();
|
|
1176
1160
|
i0.ɵɵelementStart(7, "tbody");
|
|
1177
|
-
i0.ɵɵrepeaterCreate(8,
|
|
1161
|
+
i0.ɵɵrepeaterCreate(8, AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Conditional_10_For_9_Template, 4, 1, "tr", null, i0.ɵɵcomponentInstance().TrackByIndex, true);
|
|
1178
1162
|
i0.ɵɵelementEnd()()();
|
|
1179
1163
|
} if (rf & 2) {
|
|
1180
|
-
const
|
|
1164
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1181
1165
|
i0.ɵɵadvance(4);
|
|
1182
|
-
i0.ɵɵrepeater(
|
|
1166
|
+
i0.ɵɵrepeater(ctx_r1.DrillDownColumns);
|
|
1183
1167
|
i0.ɵɵadvance(2);
|
|
1184
|
-
i0.ɵɵconditional(
|
|
1168
|
+
i0.ɵɵconditional(ctx_r1.DrillDownHasActions ? 6 : -1);
|
|
1185
1169
|
i0.ɵɵadvance(2);
|
|
1186
|
-
i0.ɵɵrepeater(
|
|
1170
|
+
i0.ɵɵrepeater(ctx_r1.DrillDownData);
|
|
1187
1171
|
} }
|
|
1188
|
-
function
|
|
1189
|
-
i0.ɵɵelementStart(0, "div",
|
|
1172
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
1173
|
+
i0.ɵɵelementStart(0, "div", 89);
|
|
1190
1174
|
i0.ɵɵtext(1, "No run data for this source");
|
|
1191
1175
|
i0.ɵɵelementEnd();
|
|
1192
1176
|
} }
|
|
1193
|
-
function
|
|
1194
|
-
const
|
|
1195
|
-
i0.ɵɵelementStart(0, "div",
|
|
1196
|
-
i0.ɵɵelement(3, "i",
|
|
1177
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
1178
|
+
const _r46 = i0.ɵɵgetCurrentView();
|
|
1179
|
+
i0.ɵɵelementStart(0, "div", 24)(1, "div", 80)(2, "span", 81);
|
|
1180
|
+
i0.ɵɵelement(3, "i", 82);
|
|
1197
1181
|
i0.ɵɵtext(4);
|
|
1198
1182
|
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",
|
|
1183
|
+
i0.ɵɵelementStart(5, "div", 83);
|
|
1184
|
+
i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Conditional_6_Template, 3, 0, "button", 84);
|
|
1185
|
+
i0.ɵɵelementStart(7, "button", 85);
|
|
1186
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r46); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.CloseDrillDown()); });
|
|
1187
|
+
i0.ɵɵelement(8, "i", 86);
|
|
1204
1188
|
i0.ɵɵelementEnd()()();
|
|
1205
|
-
i0.ɵɵconditionalCreate(9,
|
|
1189
|
+
i0.ɵɵconditionalCreate(9, AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Conditional_9_Template, 1, 0, "mj-loading", 87)(10, AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Conditional_10_Template, 10, 1, "div", 88)(11, AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Conditional_11_Template, 2, 0, "div", 89);
|
|
1206
1190
|
i0.ɵɵelementEnd();
|
|
1207
1191
|
} if (rf & 2) {
|
|
1208
|
-
const
|
|
1192
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1209
1193
|
i0.ɵɵadvance(4);
|
|
1210
|
-
i0.ɵɵtextInterpolate1(" Recent Runs: ",
|
|
1194
|
+
i0.ɵɵtextInterpolate1(" Recent Runs: ", ctx_r1.DrillDownTarget.replace("source-row:", ""));
|
|
1211
1195
|
i0.ɵɵadvance(2);
|
|
1212
|
-
i0.ɵɵconditional(
|
|
1196
|
+
i0.ɵɵconditional(ctx_r1.DrillDownData.length > 0 ? 6 : -1);
|
|
1213
1197
|
i0.ɵɵadvance(3);
|
|
1214
|
-
i0.ɵɵconditional(
|
|
1198
|
+
i0.ɵɵconditional(ctx_r1.IsDrillDownLoading ? 9 : ctx_r1.DrillDownData.length > 0 ? 10 : 11);
|
|
1215
1199
|
} }
|
|
1216
|
-
function
|
|
1217
|
-
i0.ɵɵelementStart(0, "div",
|
|
1200
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_12_For_11_Template(rf, ctx) { if (rf & 1) {
|
|
1201
|
+
i0.ɵɵelementStart(0, "div", 30)(1, "div", 167);
|
|
1218
1202
|
i0.ɵɵtext(2);
|
|
1219
1203
|
i0.ɵɵelementEnd();
|
|
1220
|
-
i0.ɵɵelement(3, "div",
|
|
1221
|
-
i0.ɵɵelementStart(4, "div",
|
|
1204
|
+
i0.ɵɵelement(3, "div", 98);
|
|
1205
|
+
i0.ɵɵelementStart(4, "div", 99);
|
|
1222
1206
|
i0.ɵɵtext(5);
|
|
1223
1207
|
i0.ɵɵelementEnd()();
|
|
1224
1208
|
} if (rf & 2) {
|
|
1225
|
-
const
|
|
1209
|
+
const bar_r52 = ctx.$implicit;
|
|
1226
1210
|
i0.ɵɵadvance(2);
|
|
1227
|
-
i0.ɵɵtextInterpolate(
|
|
1211
|
+
i0.ɵɵtextInterpolate(bar_r52.Value);
|
|
1228
1212
|
i0.ɵɵadvance();
|
|
1229
|
-
i0.ɵɵstyleProp("height",
|
|
1213
|
+
i0.ɵɵstyleProp("height", bar_r52.Percentage, "%")("opacity", 0.5 + bar_r52.Percentage / 200);
|
|
1230
1214
|
i0.ɵɵadvance(2);
|
|
1231
|
-
i0.ɵɵtextInterpolate(
|
|
1215
|
+
i0.ɵɵtextInterpolate(bar_r52.Label);
|
|
1232
1216
|
} }
|
|
1233
|
-
function
|
|
1234
|
-
i0.ɵɵelementStart(0, "div",
|
|
1217
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_12_For_18_Template(rf, ctx) { if (rf & 1) {
|
|
1218
|
+
i0.ɵɵelementStart(0, "div", 164)(1, "span", 168);
|
|
1235
1219
|
i0.ɵɵtext(2);
|
|
1236
1220
|
i0.ɵɵelementEnd();
|
|
1237
|
-
i0.ɵɵelementStart(3, "div",
|
|
1221
|
+
i0.ɵɵelementStart(3, "div", 169)(4, "div", 170);
|
|
1238
1222
|
i0.ɵɵtext(5);
|
|
1239
1223
|
i0.ɵɵelementEnd()()();
|
|
1240
1224
|
} if (rf & 2) {
|
|
1241
|
-
const
|
|
1225
|
+
const band_r53 = ctx.$implicit;
|
|
1242
1226
|
i0.ɵɵadvance(2);
|
|
1243
|
-
i0.ɵɵtextInterpolate(
|
|
1227
|
+
i0.ɵɵtextInterpolate(band_r53.Label);
|
|
1244
1228
|
i0.ɵɵadvance(2);
|
|
1245
|
-
i0.ɵɵstyleProp("width",
|
|
1229
|
+
i0.ɵɵstyleProp("width", band_r53.Percentage, "%")("background", band_r53.Color);
|
|
1246
1230
|
i0.ɵɵadvance();
|
|
1247
|
-
i0.ɵɵtextInterpolate1("",
|
|
1231
|
+
i0.ɵɵtextInterpolate1("", band_r53.Percentage, "%");
|
|
1248
1232
|
} }
|
|
1249
|
-
function
|
|
1250
|
-
i0.ɵɵelementStart(0, "div",
|
|
1251
|
-
i0.ɵɵelement(2, "i",
|
|
1233
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
1234
|
+
i0.ɵɵelementStart(0, "div", 119)(1, "h3");
|
|
1235
|
+
i0.ɵɵelement(2, "i", 158);
|
|
1252
1236
|
i0.ɵɵtext(3);
|
|
1253
1237
|
i0.ɵɵelementEnd();
|
|
1254
|
-
i0.ɵɵelementStart(4, "div",
|
|
1255
|
-
i0.ɵɵelement(7, "i",
|
|
1238
|
+
i0.ɵɵelementStart(4, "div", 159)(5, "div", 160)(6, "div", 27);
|
|
1239
|
+
i0.ɵɵelement(7, "i", 134);
|
|
1256
1240
|
i0.ɵɵtext(8, " Items Processed (Last 8 Weeks)");
|
|
1257
1241
|
i0.ɵɵelementEnd();
|
|
1258
|
-
i0.ɵɵelementStart(9, "div",
|
|
1259
|
-
i0.ɵɵrepeaterCreate(10,
|
|
1242
|
+
i0.ɵɵelementStart(9, "div", 161);
|
|
1243
|
+
i0.ɵɵrepeaterCreate(10, AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_12_For_11_Template, 6, 6, "div", 30, _forTrack1);
|
|
1260
1244
|
i0.ɵɵelementEnd()();
|
|
1261
|
-
i0.ɵɵelementStart(12, "div",
|
|
1262
|
-
i0.ɵɵelement(14, "i",
|
|
1245
|
+
i0.ɵɵelementStart(12, "div", 160)(13, "div", 27);
|
|
1246
|
+
i0.ɵɵelement(14, "i", 162);
|
|
1263
1247
|
i0.ɵɵtext(15, " Tag Quality Distribution");
|
|
1264
1248
|
i0.ɵɵelementEnd();
|
|
1265
|
-
i0.ɵɵelementStart(16, "div",
|
|
1266
|
-
i0.ɵɵrepeaterCreate(17,
|
|
1249
|
+
i0.ɵɵelementStart(16, "div", 163);
|
|
1250
|
+
i0.ɵɵrepeaterCreate(17, AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_12_For_18_Template, 6, 6, "div", 164, _forTrack1);
|
|
1267
1251
|
i0.ɵɵelementEnd();
|
|
1268
|
-
i0.ɵɵelementStart(19, "div",
|
|
1269
|
-
i0.ɵɵelement(20, "i",
|
|
1252
|
+
i0.ɵɵelementStart(19, "div", 165);
|
|
1253
|
+
i0.ɵɵelement(20, "i", 166);
|
|
1270
1254
|
i0.ɵɵtext(21);
|
|
1271
1255
|
i0.ɵɵelementEnd()()()();
|
|
1272
1256
|
} if (rf & 2) {
|
|
1273
|
-
const
|
|
1257
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1274
1258
|
i0.ɵɵadvance(3);
|
|
1275
|
-
i0.ɵɵtextInterpolate1(" Source Detail: ",
|
|
1259
|
+
i0.ɵɵtextInterpolate1(" Source Detail: ", ctx_r1.SelectedSourceName);
|
|
1276
1260
|
i0.ɵɵadvance(7);
|
|
1277
|
-
i0.ɵɵrepeater(
|
|
1261
|
+
i0.ɵɵrepeater(ctx_r1.SourceWeeklyBars);
|
|
1278
1262
|
i0.ɵɵadvance(7);
|
|
1279
|
-
i0.ɵɵrepeater(
|
|
1263
|
+
i0.ɵɵrepeater(ctx_r1.SourceQualityBands);
|
|
1280
1264
|
i0.ɵɵadvance(4);
|
|
1281
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1265
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.SourceQualityNote, " ");
|
|
1282
1266
|
} }
|
|
1283
|
-
function
|
|
1284
|
-
i0.ɵɵelementStart(0, "div",
|
|
1267
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_13_For_6_Template(rf, ctx) { if (rf & 1) {
|
|
1268
|
+
i0.ɵɵelementStart(0, "div", 174)(1, "div", 175);
|
|
1285
1269
|
i0.ɵɵtext(2);
|
|
1286
1270
|
i0.ɵɵelementEnd();
|
|
1287
|
-
i0.ɵɵelementStart(3, "div",
|
|
1271
|
+
i0.ɵɵelementStart(3, "div", 176);
|
|
1288
1272
|
i0.ɵɵtext(4);
|
|
1289
1273
|
i0.ɵɵelementEnd();
|
|
1290
|
-
i0.ɵɵelementStart(5, "div",
|
|
1274
|
+
i0.ɵɵelementStart(5, "div", 177);
|
|
1291
1275
|
i0.ɵɵtext(6, "uptime");
|
|
1292
1276
|
i0.ɵɵelementEnd()();
|
|
1293
1277
|
} if (rf & 2) {
|
|
1294
|
-
const
|
|
1295
|
-
i0.ɵɵstyleProp("border-top-color",
|
|
1278
|
+
const card_r54 = ctx.$implicit;
|
|
1279
|
+
i0.ɵɵstyleProp("border-top-color", card_r54.Color);
|
|
1296
1280
|
i0.ɵɵadvance(2);
|
|
1297
|
-
i0.ɵɵtextInterpolate(
|
|
1281
|
+
i0.ɵɵtextInterpolate(card_r54.Name);
|
|
1298
1282
|
i0.ɵɵadvance();
|
|
1299
|
-
i0.ɵɵstyleProp("color",
|
|
1283
|
+
i0.ɵɵstyleProp("color", card_r54.Color);
|
|
1300
1284
|
i0.ɵɵadvance();
|
|
1301
|
-
i0.ɵɵtextInterpolate1("",
|
|
1285
|
+
i0.ɵɵtextInterpolate1("", card_r54.Uptime, "%");
|
|
1302
1286
|
} }
|
|
1303
|
-
function
|
|
1304
|
-
i0.ɵɵelementStart(0, "div",
|
|
1305
|
-
i0.ɵɵelement(2, "i",
|
|
1287
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
1288
|
+
i0.ɵɵelementStart(0, "div", 119)(1, "h3");
|
|
1289
|
+
i0.ɵɵelement(2, "i", 171);
|
|
1306
1290
|
i0.ɵɵtext(3, " Source Health Summary");
|
|
1307
1291
|
i0.ɵɵelementEnd();
|
|
1308
|
-
i0.ɵɵelementStart(4, "div",
|
|
1309
|
-
i0.ɵɵrepeaterCreate(5,
|
|
1292
|
+
i0.ɵɵelementStart(4, "div", 172);
|
|
1293
|
+
i0.ɵɵrepeaterCreate(5, AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_13_For_6_Template, 7, 6, "div", 173, _forTrack0);
|
|
1310
1294
|
i0.ɵɵelementEnd()();
|
|
1311
1295
|
} if (rf & 2) {
|
|
1312
|
-
const
|
|
1296
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1313
1297
|
i0.ɵɵadvance(4);
|
|
1314
|
-
i0.ɵɵstyleProp("grid-template-columns", "repeat(" +
|
|
1298
|
+
i0.ɵɵstyleProp("grid-template-columns", "repeat(" + ctx_r1.SourceHealthCards.length + ", 1fr)");
|
|
1315
1299
|
i0.ɵɵadvance();
|
|
1316
|
-
i0.ɵɵrepeater(
|
|
1300
|
+
i0.ɵɵrepeater(ctx_r1.SourceHealthCards);
|
|
1317
1301
|
} }
|
|
1318
|
-
function
|
|
1319
|
-
i0.ɵɵelementStart(0, "section",
|
|
1320
|
-
i0.ɵɵelement(2, "i",
|
|
1302
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
1303
|
+
i0.ɵɵelementStart(0, "section", 14)(1, "div", 15);
|
|
1304
|
+
i0.ɵɵelement(2, "i", 153);
|
|
1321
1305
|
i0.ɵɵelementStart(3, "h1");
|
|
1322
1306
|
i0.ɵɵtext(4, "Sources");
|
|
1323
1307
|
i0.ɵɵelementEnd()();
|
|
1324
|
-
i0.ɵɵelementStart(5, "div",
|
|
1325
|
-
i0.ɵɵelement(7, "i",
|
|
1308
|
+
i0.ɵɵelementStart(5, "div", 114)(6, "h3");
|
|
1309
|
+
i0.ɵɵelement(7, "i", 82);
|
|
1326
1310
|
i0.ɵɵtext(8, " Source Comparison");
|
|
1327
1311
|
i0.ɵɵelementEnd();
|
|
1328
|
-
i0.ɵɵconditionalCreate(9,
|
|
1312
|
+
i0.ɵɵconditionalCreate(9, AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_9_Template, 23, 0, "div", 117)(10, AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_10_Template, 4, 0, "div", 118);
|
|
1329
1313
|
i0.ɵɵelementEnd();
|
|
1330
|
-
i0.ɵɵconditionalCreate(11,
|
|
1331
|
-
i0.ɵɵconditionalCreate(12,
|
|
1332
|
-
i0.ɵɵconditionalCreate(13,
|
|
1314
|
+
i0.ɵɵconditionalCreate(11, AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_11_Template, 12, 3, "div", 24);
|
|
1315
|
+
i0.ɵɵconditionalCreate(12, AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_12_Template, 22, 2, "div", 119);
|
|
1316
|
+
i0.ɵɵconditionalCreate(13, AnalyticsResourceComponent_Conditional_6_Conditional_14_Conditional_13_Template, 7, 2, "div", 119);
|
|
1333
1317
|
i0.ɵɵelementEnd();
|
|
1334
1318
|
} if (rf & 2) {
|
|
1335
|
-
const
|
|
1319
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
1336
1320
|
i0.ɵɵadvance(9);
|
|
1337
|
-
i0.ɵɵconditional(
|
|
1321
|
+
i0.ɵɵconditional(ctx_r1.SourceComparison.length > 0 ? 9 : 10);
|
|
1338
1322
|
i0.ɵɵadvance(2);
|
|
1339
|
-
i0.ɵɵconditional(
|
|
1323
|
+
i0.ɵɵconditional(ctx_r1.DrillDownTarget && ctx_r1.DrillDownTarget.startsWith("source-row:") ? 11 : -1);
|
|
1340
1324
|
i0.ɵɵadvance();
|
|
1341
|
-
i0.ɵɵconditional(
|
|
1325
|
+
i0.ɵɵconditional(ctx_r1.SelectedSourceName && ctx_r1.SourceComparison.length > 0 ? 12 : -1);
|
|
1342
1326
|
i0.ɵɵadvance();
|
|
1343
|
-
i0.ɵɵconditional(
|
|
1327
|
+
i0.ɵɵconditional(ctx_r1.SourceHealthCards.length > 0 ? 13 : -1);
|
|
1344
1328
|
} }
|
|
1345
|
-
function
|
|
1346
|
-
const
|
|
1347
|
-
i0.ɵɵelementStart(0, "div",
|
|
1348
|
-
i0.ɵɵlistener("click", function
|
|
1329
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_For_12_Template(rf, ctx) { if (rf & 1) {
|
|
1330
|
+
const _r55 = i0.ɵɵgetCurrentView();
|
|
1331
|
+
i0.ɵɵelementStart(0, "div", 193);
|
|
1332
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_15_For_12_Template_div_click_0_listener() { const $index_r56 = i0.ɵɵrestoreView(_r55).$index; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OpenDrillDown("pipeline-throughput:" + $index_r56)); });
|
|
1349
1333
|
i0.ɵɵelementEnd();
|
|
1350
1334
|
} if (rf & 2) {
|
|
1351
|
-
const
|
|
1352
|
-
i0.ɵɵstyleProp("height",
|
|
1335
|
+
const bar_r57 = ctx.$implicit;
|
|
1336
|
+
i0.ɵɵstyleProp("height", bar_r57.Percentage, "%")("background", bar_r57.IsError ? "var(--mj-status-error)" : "var(--mj-brand-primary)")("opacity", bar_r57.IsError ? 0.7 : 0.6 + bar_r57.Percentage / 300);
|
|
1353
1337
|
} }
|
|
1354
|
-
function
|
|
1338
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_For_15_Template(rf, ctx) { if (rf & 1) {
|
|
1355
1339
|
i0.ɵɵelementStart(0, "span");
|
|
1356
1340
|
i0.ɵɵtext(1);
|
|
1357
1341
|
i0.ɵɵelementEnd();
|
|
1358
1342
|
} if (rf & 2) {
|
|
1359
|
-
const
|
|
1343
|
+
const label_r58 = ctx.$implicit;
|
|
1360
1344
|
i0.ɵɵadvance();
|
|
1361
|
-
i0.ɵɵtextInterpolate(
|
|
1345
|
+
i0.ɵɵtextInterpolate(label_r58);
|
|
1362
1346
|
} }
|
|
1363
|
-
function
|
|
1364
|
-
const
|
|
1365
|
-
i0.ɵɵelementStart(0, "button",
|
|
1366
|
-
i0.ɵɵlistener("click", function
|
|
1367
|
-
i0.ɵɵelement(1, "i",
|
|
1347
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
1348
|
+
const _r60 = i0.ɵɵgetCurrentView();
|
|
1349
|
+
i0.ɵɵelementStart(0, "button", 90);
|
|
1350
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r60); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.ExportDrillDownCSV()); });
|
|
1351
|
+
i0.ɵɵelement(1, "i", 91);
|
|
1368
1352
|
i0.ɵɵtext(2, " CSV");
|
|
1369
1353
|
i0.ɵɵelementEnd();
|
|
1370
1354
|
} }
|
|
1371
|
-
function
|
|
1372
|
-
i0.ɵɵelement(0, "mj-loading",
|
|
1355
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
1356
|
+
i0.ɵɵelement(0, "mj-loading", 87);
|
|
1373
1357
|
} }
|
|
1374
|
-
function
|
|
1358
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Conditional_10_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
1375
1359
|
i0.ɵɵelementStart(0, "th");
|
|
1376
1360
|
i0.ɵɵtext(1);
|
|
1377
1361
|
i0.ɵɵelementEnd();
|
|
1378
1362
|
} if (rf & 2) {
|
|
1379
|
-
const
|
|
1363
|
+
const col_r61 = ctx.$implicit;
|
|
1380
1364
|
i0.ɵɵadvance();
|
|
1381
|
-
i0.ɵɵtextInterpolate(
|
|
1365
|
+
i0.ɵɵtextInterpolate(col_r61);
|
|
1382
1366
|
} }
|
|
1383
|
-
function
|
|
1384
|
-
i0.ɵɵelement(0, "th",
|
|
1367
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Conditional_10_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
1368
|
+
i0.ɵɵelement(0, "th", 93);
|
|
1385
1369
|
} }
|
|
1386
|
-
function
|
|
1370
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Conditional_10_For_9_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
1387
1371
|
i0.ɵɵelementStart(0, "td");
|
|
1388
1372
|
i0.ɵɵtext(1);
|
|
1389
1373
|
i0.ɵɵelementEnd();
|
|
1390
1374
|
} if (rf & 2) {
|
|
1391
|
-
const
|
|
1392
|
-
const
|
|
1375
|
+
const col_r62 = ctx.$implicit;
|
|
1376
|
+
const row_r63 = i0.ɵɵnextContext().$implicit;
|
|
1393
1377
|
i0.ɵɵadvance();
|
|
1394
|
-
i0.ɵɵtextInterpolate(
|
|
1378
|
+
i0.ɵɵtextInterpolate(row_r63[col_r62]);
|
|
1395
1379
|
} }
|
|
1396
|
-
function
|
|
1397
|
-
const
|
|
1398
|
-
i0.ɵɵelementStart(0, "button",
|
|
1399
|
-
i0.ɵɵlistener("click", function
|
|
1400
|
-
i0.ɵɵelement(1, "i",
|
|
1380
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Conditional_10_For_9_Conditional_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
1381
|
+
const _r64 = i0.ɵɵgetCurrentView();
|
|
1382
|
+
i0.ɵɵelementStart(0, "button", 133);
|
|
1383
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Conditional_10_For_9_Conditional_3_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r64); const row_r63 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.OpenDrillDownRecord(row_r63)); });
|
|
1384
|
+
i0.ɵɵelement(1, "i", 96);
|
|
1401
1385
|
i0.ɵɵelementEnd();
|
|
1402
1386
|
} }
|
|
1403
|
-
function
|
|
1404
|
-
i0.ɵɵelementStart(0, "td",
|
|
1405
|
-
i0.ɵɵconditionalCreate(1,
|
|
1387
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Conditional_10_For_9_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1388
|
+
i0.ɵɵelementStart(0, "td", 93);
|
|
1389
|
+
i0.ɵɵconditionalCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Conditional_10_For_9_Conditional_3_Conditional_1_Template, 2, 0, "button", 132);
|
|
1406
1390
|
i0.ɵɵelementEnd();
|
|
1407
1391
|
} if (rf & 2) {
|
|
1408
|
-
const
|
|
1392
|
+
const row_r63 = i0.ɵɵnextContext().$implicit;
|
|
1409
1393
|
i0.ɵɵadvance();
|
|
1410
|
-
i0.ɵɵconditional(
|
|
1394
|
+
i0.ɵɵconditional(row_r63["_RecordID"] ? 1 : -1);
|
|
1411
1395
|
} }
|
|
1412
|
-
function
|
|
1396
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Conditional_10_For_9_Template(rf, ctx) { if (rf & 1) {
|
|
1413
1397
|
i0.ɵɵelementStart(0, "tr");
|
|
1414
|
-
i0.ɵɵrepeaterCreate(1,
|
|
1415
|
-
i0.ɵɵconditionalCreate(3,
|
|
1398
|
+
i0.ɵɵrepeaterCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Conditional_10_For_9_For_2_Template, 2, 1, "td", null, i0.ɵɵrepeaterTrackByIdentity);
|
|
1399
|
+
i0.ɵɵconditionalCreate(3, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Conditional_10_For_9_Conditional_3_Template, 2, 1, "td", 93);
|
|
1416
1400
|
i0.ɵɵelementEnd();
|
|
1417
1401
|
} if (rf & 2) {
|
|
1418
|
-
const
|
|
1402
|
+
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
1419
1403
|
i0.ɵɵadvance();
|
|
1420
|
-
i0.ɵɵrepeater(
|
|
1404
|
+
i0.ɵɵrepeater(ctx_r1.DrillDownColumns);
|
|
1421
1405
|
i0.ɵɵadvance(2);
|
|
1422
|
-
i0.ɵɵconditional(
|
|
1406
|
+
i0.ɵɵconditional(ctx_r1.DrillDownHasActions ? 3 : -1);
|
|
1423
1407
|
} }
|
|
1424
|
-
function
|
|
1425
|
-
i0.ɵɵelementStart(0, "div",
|
|
1426
|
-
i0.ɵɵrepeaterCreate(4,
|
|
1427
|
-
i0.ɵɵconditionalCreate(6,
|
|
1408
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
1409
|
+
i0.ɵɵelementStart(0, "div", 88)(1, "table", 92)(2, "thead")(3, "tr");
|
|
1410
|
+
i0.ɵɵrepeaterCreate(4, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Conditional_10_For_5_Template, 2, 1, "th", null, i0.ɵɵrepeaterTrackByIdentity);
|
|
1411
|
+
i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Conditional_10_Conditional_6_Template, 1, 0, "th", 93);
|
|
1428
1412
|
i0.ɵɵelementEnd()();
|
|
1429
1413
|
i0.ɵɵelementStart(7, "tbody");
|
|
1430
|
-
i0.ɵɵrepeaterCreate(8,
|
|
1414
|
+
i0.ɵɵrepeaterCreate(8, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Conditional_10_For_9_Template, 4, 1, "tr", null, i0.ɵɵcomponentInstance().TrackByIndex, true);
|
|
1431
1415
|
i0.ɵɵelementEnd()()();
|
|
1432
1416
|
} if (rf & 2) {
|
|
1433
|
-
const
|
|
1417
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1434
1418
|
i0.ɵɵadvance(4);
|
|
1435
|
-
i0.ɵɵrepeater(
|
|
1419
|
+
i0.ɵɵrepeater(ctx_r1.DrillDownColumns);
|
|
1436
1420
|
i0.ɵɵadvance(2);
|
|
1437
|
-
i0.ɵɵconditional(
|
|
1421
|
+
i0.ɵɵconditional(ctx_r1.DrillDownHasActions ? 6 : -1);
|
|
1438
1422
|
i0.ɵɵadvance(2);
|
|
1439
|
-
i0.ɵɵrepeater(
|
|
1423
|
+
i0.ɵɵrepeater(ctx_r1.DrillDownData);
|
|
1440
1424
|
} }
|
|
1441
|
-
function
|
|
1442
|
-
i0.ɵɵelementStart(0, "div",
|
|
1425
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
1426
|
+
i0.ɵɵelementStart(0, "div", 89);
|
|
1443
1427
|
i0.ɵɵtext(1, "No runs for this day");
|
|
1444
1428
|
i0.ɵɵelementEnd();
|
|
1445
1429
|
} }
|
|
1446
|
-
function
|
|
1447
|
-
const
|
|
1448
|
-
i0.ɵɵelementStart(0, "div",
|
|
1449
|
-
i0.ɵɵelement(3, "i",
|
|
1430
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
1431
|
+
const _r59 = i0.ɵɵgetCurrentView();
|
|
1432
|
+
i0.ɵɵelementStart(0, "div", 24)(1, "div", 80)(2, "span", 81);
|
|
1433
|
+
i0.ɵɵelement(3, "i", 82);
|
|
1450
1434
|
i0.ɵɵtext(4, " Runs for Selected Day");
|
|
1451
1435
|
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",
|
|
1436
|
+
i0.ɵɵelementStart(5, "div", 83);
|
|
1437
|
+
i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Conditional_6_Template, 3, 0, "button", 84);
|
|
1438
|
+
i0.ɵɵelementStart(7, "button", 85);
|
|
1439
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r59); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.CloseDrillDown()); });
|
|
1440
|
+
i0.ɵɵelement(8, "i", 86);
|
|
1457
1441
|
i0.ɵɵelementEnd()()();
|
|
1458
|
-
i0.ɵɵconditionalCreate(9,
|
|
1442
|
+
i0.ɵɵconditionalCreate(9, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Conditional_9_Template, 1, 0, "mj-loading", 87)(10, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Conditional_10_Template, 10, 1, "div", 88)(11, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Conditional_11_Template, 2, 0, "div", 89);
|
|
1459
1443
|
i0.ɵɵelementEnd();
|
|
1460
1444
|
} if (rf & 2) {
|
|
1461
|
-
const
|
|
1445
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1462
1446
|
i0.ɵɵadvance(6);
|
|
1463
|
-
i0.ɵɵconditional(
|
|
1447
|
+
i0.ɵɵconditional(ctx_r1.DrillDownData.length > 0 ? 6 : -1);
|
|
1464
1448
|
i0.ɵɵadvance(3);
|
|
1465
|
-
i0.ɵɵconditional(
|
|
1449
|
+
i0.ɵɵconditional(ctx_r1.IsDrillDownLoading ? 9 : ctx_r1.DrillDownData.length > 0 ? 10 : 11);
|
|
1466
1450
|
} }
|
|
1467
|
-
function
|
|
1451
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_For_24_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
1468
1452
|
i0.ɵɵtext(0);
|
|
1469
1453
|
} if (rf & 2) {
|
|
1470
|
-
const
|
|
1471
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1454
|
+
const stage_r65 = i0.ɵɵnextContext().$implicit;
|
|
1455
|
+
i0.ɵɵtextInterpolate1(" ", stage_r65.Time, "s ");
|
|
1472
1456
|
} }
|
|
1473
|
-
function
|
|
1474
|
-
i0.ɵɵelementStart(0, "div",
|
|
1457
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_For_24_Template(rf, ctx) { if (rf & 1) {
|
|
1458
|
+
i0.ɵɵelementStart(0, "div", 184)(1, "div", 194);
|
|
1475
1459
|
i0.ɵɵtext(2);
|
|
1476
1460
|
i0.ɵɵelementEnd();
|
|
1477
|
-
i0.ɵɵelementStart(3, "div",
|
|
1478
|
-
i0.ɵɵconditionalCreate(5,
|
|
1461
|
+
i0.ɵɵelementStart(3, "div", 195)(4, "div", 196);
|
|
1462
|
+
i0.ɵɵconditionalCreate(5, AnalyticsResourceComponent_Conditional_6_Conditional_15_For_24_Conditional_5_Template, 1, 1);
|
|
1479
1463
|
i0.ɵɵelementEnd()();
|
|
1480
|
-
i0.ɵɵelementStart(6, "div",
|
|
1464
|
+
i0.ɵɵelementStart(6, "div", 197);
|
|
1481
1465
|
i0.ɵɵtext(7);
|
|
1482
1466
|
i0.ɵɵelementEnd()();
|
|
1483
1467
|
} if (rf & 2) {
|
|
1484
|
-
const
|
|
1468
|
+
const stage_r65 = ctx.$implicit;
|
|
1485
1469
|
i0.ɵɵadvance(2);
|
|
1486
|
-
i0.ɵɵtextInterpolate(
|
|
1470
|
+
i0.ɵɵtextInterpolate(stage_r65.Name);
|
|
1487
1471
|
i0.ɵɵadvance(2);
|
|
1488
|
-
i0.ɵɵstyleProp("width",
|
|
1472
|
+
i0.ɵɵstyleProp("width", stage_r65.Percentage, "%")("background", stage_r65.Color);
|
|
1489
1473
|
i0.ɵɵadvance();
|
|
1490
|
-
i0.ɵɵconditional(
|
|
1474
|
+
i0.ɵɵconditional(stage_r65.Percentage > 15 ? 5 : -1);
|
|
1491
1475
|
i0.ɵɵadvance(2);
|
|
1492
|
-
i0.ɵɵtextInterpolate1("",
|
|
1476
|
+
i0.ɵɵtextInterpolate1("", stage_r65.Time, "s");
|
|
1493
1477
|
} }
|
|
1494
|
-
function
|
|
1495
|
-
i0.ɵɵelementStart(0, "span",
|
|
1496
|
-
i0.ɵɵelement(1, "i",
|
|
1478
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_30_Template(rf, ctx) { if (rf & 1) {
|
|
1479
|
+
i0.ɵɵelementStart(0, "span", 186);
|
|
1480
|
+
i0.ɵɵelement(1, "i", 198);
|
|
1497
1481
|
i0.ɵɵtext(2);
|
|
1498
1482
|
i0.ɵɵelementEnd();
|
|
1499
1483
|
} if (rf & 2) {
|
|
1500
|
-
const
|
|
1484
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1501
1485
|
i0.ɵɵadvance(2);
|
|
1502
|
-
i0.ɵɵtextInterpolate2(" ",
|
|
1486
|
+
i0.ɵɵtextInterpolate2(" ", ctx_r1.BottleneckStage, " stage is the bottleneck (", ctx_r1.BottleneckPercent, "% of total time) ");
|
|
1503
1487
|
} }
|
|
1504
|
-
function
|
|
1505
|
-
i0.ɵɵelementStart(0, "tr")(1, "td",
|
|
1488
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_52_For_22_Template(rf, ctx) { if (rf & 1) {
|
|
1489
|
+
i0.ɵɵelementStart(0, "tr")(1, "td", 200);
|
|
1506
1490
|
i0.ɵɵtext(2);
|
|
1507
1491
|
i0.ɵɵelementEnd();
|
|
1508
1492
|
i0.ɵɵelementStart(3, "td");
|
|
1509
1493
|
i0.ɵɵtext(4);
|
|
1510
1494
|
i0.ɵɵelementEnd();
|
|
1511
|
-
i0.ɵɵelementStart(5, "td",
|
|
1495
|
+
i0.ɵɵelementStart(5, "td", 131);
|
|
1512
1496
|
i0.ɵɵtext(6);
|
|
1513
1497
|
i0.ɵɵelementEnd();
|
|
1514
|
-
i0.ɵɵelementStart(7, "td")(8, "div",
|
|
1515
|
-
i0.ɵɵelement(9, "div",
|
|
1498
|
+
i0.ɵɵelementStart(7, "td")(8, "div", 201);
|
|
1499
|
+
i0.ɵɵelement(9, "div", 202);
|
|
1516
1500
|
i0.ɵɵelementEnd();
|
|
1517
|
-
i0.ɵɵelementStart(10, "span",
|
|
1501
|
+
i0.ɵɵelementStart(10, "span", 203);
|
|
1518
1502
|
i0.ɵɵtext(11);
|
|
1519
1503
|
i0.ɵɵelementEnd()();
|
|
1520
|
-
i0.ɵɵelementStart(12, "td")(13, "span",
|
|
1504
|
+
i0.ɵɵelementStart(12, "td")(13, "span", 156);
|
|
1521
1505
|
i0.ɵɵtext(14);
|
|
1522
1506
|
i0.ɵɵelementEnd()();
|
|
1523
|
-
i0.ɵɵelementStart(15, "td",
|
|
1507
|
+
i0.ɵɵelementStart(15, "td", 125);
|
|
1524
1508
|
i0.ɵɵtext(16);
|
|
1525
1509
|
i0.ɵɵelementEnd()();
|
|
1526
1510
|
} if (rf & 2) {
|
|
1527
|
-
const
|
|
1528
|
-
const
|
|
1511
|
+
const run_r66 = ctx.$implicit;
|
|
1512
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1529
1513
|
i0.ɵɵadvance(2);
|
|
1530
|
-
i0.ɵɵtextInterpolate(
|
|
1514
|
+
i0.ɵɵtextInterpolate(run_r66.RunID);
|
|
1531
1515
|
i0.ɵɵadvance(2);
|
|
1532
|
-
i0.ɵɵtextInterpolate(
|
|
1516
|
+
i0.ɵɵtextInterpolate(run_r66.Source);
|
|
1533
1517
|
i0.ɵɵadvance(2);
|
|
1534
|
-
i0.ɵɵtextInterpolate(
|
|
1518
|
+
i0.ɵɵtextInterpolate(run_r66.Started);
|
|
1535
1519
|
i0.ɵɵadvance(3);
|
|
1536
|
-
i0.ɵɵstyleProp("width",
|
|
1520
|
+
i0.ɵɵstyleProp("width", run_r66.Progress, "%");
|
|
1537
1521
|
i0.ɵɵadvance(2);
|
|
1538
|
-
i0.ɵɵtextInterpolate1("",
|
|
1522
|
+
i0.ɵɵtextInterpolate1("", run_r66.Progress, "%");
|
|
1539
1523
|
i0.ɵɵadvance(2);
|
|
1540
|
-
i0.ɵɵclassMap(
|
|
1524
|
+
i0.ɵɵclassMap(run_r66.StageClass);
|
|
1541
1525
|
i0.ɵɵadvance();
|
|
1542
|
-
i0.ɵɵtextInterpolate(
|
|
1526
|
+
i0.ɵɵtextInterpolate(run_r66.Stage);
|
|
1543
1527
|
i0.ɵɵadvance(2);
|
|
1544
|
-
i0.ɵɵtextInterpolate(
|
|
1528
|
+
i0.ɵɵtextInterpolate(ctx_r1.FormatNumber(run_r66.Items));
|
|
1545
1529
|
} }
|
|
1546
|
-
function
|
|
1547
|
-
i0.ɵɵelementStart(0, "div",
|
|
1548
|
-
i0.ɵɵelement(2, "i",
|
|
1530
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_52_Template(rf, ctx) { if (rf & 1) {
|
|
1531
|
+
i0.ɵɵelementStart(0, "div", 119)(1, "h3");
|
|
1532
|
+
i0.ɵɵelement(2, "i", 199);
|
|
1549
1533
|
i0.ɵɵtext(3, " Active Runs");
|
|
1550
1534
|
i0.ɵɵelementEnd();
|
|
1551
|
-
i0.ɵɵelementStart(4, "div",
|
|
1535
|
+
i0.ɵɵelementStart(4, "div", 117)(5, "table", 92)(6, "thead")(7, "tr")(8, "th");
|
|
1552
1536
|
i0.ɵɵtext(9, "Run ID");
|
|
1553
1537
|
i0.ɵɵelementEnd();
|
|
1554
1538
|
i0.ɵɵelementStart(10, "th");
|
|
@@ -1563,347 +1547,347 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_25_Conditional_52_
|
|
|
1563
1547
|
i0.ɵɵelementStart(16, "th");
|
|
1564
1548
|
i0.ɵɵtext(17, "Stage");
|
|
1565
1549
|
i0.ɵɵelementEnd();
|
|
1566
|
-
i0.ɵɵelementStart(18, "th",
|
|
1550
|
+
i0.ɵɵelementStart(18, "th", 125);
|
|
1567
1551
|
i0.ɵɵtext(19, "Items");
|
|
1568
1552
|
i0.ɵɵelementEnd()()();
|
|
1569
1553
|
i0.ɵɵelementStart(20, "tbody");
|
|
1570
|
-
i0.ɵɵrepeaterCreate(21,
|
|
1554
|
+
i0.ɵɵrepeaterCreate(21, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_52_For_22_Template, 17, 10, "tr", null, _forTrack4);
|
|
1571
1555
|
i0.ɵɵelementEnd()()()();
|
|
1572
1556
|
} if (rf & 2) {
|
|
1573
|
-
const
|
|
1557
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1574
1558
|
i0.ɵɵadvance(21);
|
|
1575
|
-
i0.ɵɵrepeater(
|
|
1559
|
+
i0.ɵɵrepeater(ctx_r1.ActiveRuns);
|
|
1576
1560
|
} }
|
|
1577
|
-
function
|
|
1578
|
-
i0.ɵɵelementStart(0, "div",
|
|
1561
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_53_For_6_Template(rf, ctx) { if (rf & 1) {
|
|
1562
|
+
i0.ɵɵelementStart(0, "div", 206)(1, "div", 207);
|
|
1579
1563
|
i0.ɵɵtext(2);
|
|
1580
1564
|
i0.ɵɵelementEnd();
|
|
1581
|
-
i0.ɵɵelementStart(3, "div",
|
|
1565
|
+
i0.ɵɵelementStart(3, "div", 208);
|
|
1582
1566
|
i0.ɵɵtext(4);
|
|
1583
1567
|
i0.ɵɵelementEnd();
|
|
1584
|
-
i0.ɵɵelementStart(5, "div",
|
|
1568
|
+
i0.ɵɵelementStart(5, "div", 209);
|
|
1585
1569
|
i0.ɵɵtext(6);
|
|
1586
1570
|
i0.ɵɵelementEnd()();
|
|
1587
1571
|
} if (rf & 2) {
|
|
1588
|
-
const
|
|
1572
|
+
const entry_r67 = ctx.$implicit;
|
|
1589
1573
|
i0.ɵɵadvance(2);
|
|
1590
|
-
i0.ɵɵtextInterpolate(
|
|
1574
|
+
i0.ɵɵtextInterpolate(entry_r67.Time);
|
|
1591
1575
|
i0.ɵɵadvance(2);
|
|
1592
|
-
i0.ɵɵtextInterpolate(
|
|
1576
|
+
i0.ɵɵtextInterpolate(entry_r67.Source);
|
|
1593
1577
|
i0.ɵɵadvance(2);
|
|
1594
|
-
i0.ɵɵtextInterpolate(
|
|
1578
|
+
i0.ɵɵtextInterpolate(entry_r67.Message);
|
|
1595
1579
|
} }
|
|
1596
|
-
function
|
|
1597
|
-
i0.ɵɵelementStart(0, "div",
|
|
1598
|
-
i0.ɵɵelement(2, "i",
|
|
1580
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_53_Template(rf, ctx) { if (rf & 1) {
|
|
1581
|
+
i0.ɵɵelementStart(0, "div", 119)(1, "h3");
|
|
1582
|
+
i0.ɵɵelement(2, "i", 204);
|
|
1599
1583
|
i0.ɵɵtext(3, " Recent Errors");
|
|
1600
1584
|
i0.ɵɵelementEnd();
|
|
1601
|
-
i0.ɵɵelementStart(4, "div",
|
|
1602
|
-
i0.ɵɵrepeaterCreate(5,
|
|
1585
|
+
i0.ɵɵelementStart(4, "div", 205);
|
|
1586
|
+
i0.ɵɵrepeaterCreate(5, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_53_For_6_Template, 7, 3, "div", 206, i0.ɵɵcomponentInstance().TrackByIndex, true);
|
|
1603
1587
|
i0.ɵɵelementEnd()();
|
|
1604
1588
|
} if (rf & 2) {
|
|
1605
|
-
const
|
|
1589
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1606
1590
|
i0.ɵɵadvance(5);
|
|
1607
|
-
i0.ɵɵrepeater(
|
|
1591
|
+
i0.ɵɵrepeater(ctx_r1.ErrorLog);
|
|
1608
1592
|
} }
|
|
1609
|
-
function
|
|
1610
|
-
i0.ɵɵelementStart(0, "section",
|
|
1611
|
-
i0.ɵɵelement(2, "i",
|
|
1593
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
1594
|
+
i0.ɵɵelementStart(0, "section", 14)(1, "div", 15);
|
|
1595
|
+
i0.ɵɵelement(2, "i", 178);
|
|
1612
1596
|
i0.ɵɵelementStart(3, "h1");
|
|
1613
1597
|
i0.ɵɵtext(4, "Pipeline");
|
|
1614
1598
|
i0.ɵɵelementEnd()();
|
|
1615
|
-
i0.ɵɵelementStart(5, "div",
|
|
1616
|
-
i0.ɵɵelement(7, "i",
|
|
1599
|
+
i0.ɵɵelementStart(5, "div", 114)(6, "h3");
|
|
1600
|
+
i0.ɵɵelement(7, "i", 134);
|
|
1617
1601
|
i0.ɵɵtext(8, " Pipeline Throughput (Last 30 Days)");
|
|
1618
1602
|
i0.ɵɵelementEnd();
|
|
1619
|
-
i0.ɵɵelementStart(9, "div",
|
|
1620
|
-
i0.ɵɵrepeaterCreate(11,
|
|
1603
|
+
i0.ɵɵelementStart(9, "div", 160)(10, "div", 179);
|
|
1604
|
+
i0.ɵɵrepeaterCreate(11, AnalyticsResourceComponent_Conditional_6_Conditional_15_For_12_Template, 1, 6, "div", 180, i0.ɵɵcomponentInstance().TrackByIndex, true);
|
|
1621
1605
|
i0.ɵɵelementEnd();
|
|
1622
|
-
i0.ɵɵelementStart(13, "div",
|
|
1623
|
-
i0.ɵɵrepeaterCreate(14,
|
|
1606
|
+
i0.ɵɵelementStart(13, "div", 181);
|
|
1607
|
+
i0.ɵɵrepeaterCreate(14, AnalyticsResourceComponent_Conditional_6_Conditional_15_For_15_Template, 2, 1, "span", null, i0.ɵɵrepeaterTrackByIdentity);
|
|
1624
1608
|
i0.ɵɵelementEnd()()();
|
|
1625
|
-
i0.ɵɵconditionalCreate(16,
|
|
1626
|
-
i0.ɵɵelementStart(17, "div",
|
|
1627
|
-
i0.ɵɵelement(19, "i",
|
|
1609
|
+
i0.ɵɵconditionalCreate(16, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_16_Template, 12, 2, "div", 24);
|
|
1610
|
+
i0.ɵɵelementStart(17, "div", 119)(18, "h3");
|
|
1611
|
+
i0.ɵɵelement(19, "i", 182);
|
|
1628
1612
|
i0.ɵɵtext(20, " Processing Time Breakdown (Avg per Item)");
|
|
1629
1613
|
i0.ɵɵelementEnd();
|
|
1630
|
-
i0.ɵɵelementStart(21, "div",
|
|
1631
|
-
i0.ɵɵrepeaterCreate(23,
|
|
1614
|
+
i0.ɵɵelementStart(21, "div", 160)(22, "div", 183);
|
|
1615
|
+
i0.ɵɵrepeaterCreate(23, AnalyticsResourceComponent_Conditional_6_Conditional_15_For_24_Template, 8, 7, "div", 184, _forTrack0);
|
|
1632
1616
|
i0.ɵɵelementEnd();
|
|
1633
|
-
i0.ɵɵelementStart(25, "div",
|
|
1617
|
+
i0.ɵɵelementStart(25, "div", 185)(26, "span")(27, "strong");
|
|
1634
1618
|
i0.ɵɵtext(28, "Total avg:");
|
|
1635
1619
|
i0.ɵɵelementEnd();
|
|
1636
1620
|
i0.ɵɵtext(29);
|
|
1637
1621
|
i0.ɵɵelementEnd();
|
|
1638
|
-
i0.ɵɵconditionalCreate(30,
|
|
1622
|
+
i0.ɵɵconditionalCreate(30, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_30_Template, 3, 2, "span", 186);
|
|
1639
1623
|
i0.ɵɵelementEnd()()();
|
|
1640
|
-
i0.ɵɵelementStart(31, "div",
|
|
1641
|
-
i0.ɵɵelement(33, "i",
|
|
1624
|
+
i0.ɵɵelementStart(31, "div", 119)(32, "h3");
|
|
1625
|
+
i0.ɵɵelement(33, "i", 28);
|
|
1642
1626
|
i0.ɵɵtext(34, " Success Rate Overview");
|
|
1643
1627
|
i0.ɵɵelementEnd();
|
|
1644
|
-
i0.ɵɵelementStart(35, "div",
|
|
1628
|
+
i0.ɵɵelementStart(35, "div", 160)(36, "div", 187)(37, "div", 188)(38, "div", 189);
|
|
1645
1629
|
i0.ɵɵtext(39);
|
|
1646
1630
|
i0.ɵɵelementEnd();
|
|
1647
|
-
i0.ɵɵelementStart(40, "div",
|
|
1631
|
+
i0.ɵɵelementStart(40, "div", 190);
|
|
1648
1632
|
i0.ɵɵtext(41, "Success Rate");
|
|
1649
1633
|
i0.ɵɵelementEnd()();
|
|
1650
|
-
i0.ɵɵelementStart(42, "div",
|
|
1634
|
+
i0.ɵɵelementStart(42, "div", 188)(43, "div", 191);
|
|
1651
1635
|
i0.ɵɵtext(44);
|
|
1652
1636
|
i0.ɵɵelementEnd();
|
|
1653
|
-
i0.ɵɵelementStart(45, "div",
|
|
1637
|
+
i0.ɵɵelementStart(45, "div", 190);
|
|
1654
1638
|
i0.ɵɵtext(46, "Failure Rate");
|
|
1655
1639
|
i0.ɵɵelementEnd()();
|
|
1656
|
-
i0.ɵɵelementStart(47, "div",
|
|
1640
|
+
i0.ɵɵelementStart(47, "div", 188)(48, "div", 192);
|
|
1657
1641
|
i0.ɵɵtext(49);
|
|
1658
1642
|
i0.ɵɵelementEnd();
|
|
1659
|
-
i0.ɵɵelementStart(50, "div",
|
|
1643
|
+
i0.ɵɵelementStart(50, "div", 190);
|
|
1660
1644
|
i0.ɵɵtext(51, "Total Runs");
|
|
1661
1645
|
i0.ɵɵelementEnd()()()()();
|
|
1662
|
-
i0.ɵɵconditionalCreate(52,
|
|
1663
|
-
i0.ɵɵconditionalCreate(53,
|
|
1646
|
+
i0.ɵɵconditionalCreate(52, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_52_Template, 23, 0, "div", 119);
|
|
1647
|
+
i0.ɵɵconditionalCreate(53, AnalyticsResourceComponent_Conditional_6_Conditional_15_Conditional_53_Template, 7, 0, "div", 119);
|
|
1664
1648
|
i0.ɵɵelementEnd();
|
|
1665
1649
|
} if (rf & 2) {
|
|
1666
|
-
const
|
|
1650
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
1667
1651
|
i0.ɵɵadvance(11);
|
|
1668
|
-
i0.ɵɵrepeater(
|
|
1652
|
+
i0.ɵɵrepeater(ctx_r1.PipelineThroughputBars);
|
|
1669
1653
|
i0.ɵɵadvance(3);
|
|
1670
|
-
i0.ɵɵrepeater(
|
|
1654
|
+
i0.ɵɵrepeater(ctx_r1.PipelineDateLabels);
|
|
1671
1655
|
i0.ɵɵadvance(2);
|
|
1672
|
-
i0.ɵɵconditional(
|
|
1656
|
+
i0.ɵɵconditional(ctx_r1.DrillDownTarget && ctx_r1.DrillDownTarget.startsWith("pipeline-throughput:") ? 16 : -1);
|
|
1673
1657
|
i0.ɵɵadvance(7);
|
|
1674
|
-
i0.ɵɵrepeater(
|
|
1658
|
+
i0.ɵɵrepeater(ctx_r1.ProcessingStages);
|
|
1675
1659
|
i0.ɵɵadvance(6);
|
|
1676
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1660
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.TotalAvgProcessingTime, "s per item");
|
|
1677
1661
|
i0.ɵɵadvance();
|
|
1678
|
-
i0.ɵɵconditional(
|
|
1662
|
+
i0.ɵɵconditional(ctx_r1.BottleneckStage ? 30 : -1);
|
|
1679
1663
|
i0.ɵɵadvance(9);
|
|
1680
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1664
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.rawProcessRuns.length > 0 ? (100 - ctx_r1.ErrorLog.length / ctx_r1.rawProcessRuns.length * 100).toFixed(1) : "100", "% ");
|
|
1681
1665
|
i0.ɵɵadvance(5);
|
|
1682
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1666
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.rawProcessRuns.length > 0 ? (ctx_r1.ErrorLog.length / ctx_r1.rawProcessRuns.length * 100).toFixed(1) : "0", "% ");
|
|
1683
1667
|
i0.ɵɵadvance(5);
|
|
1684
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1668
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.FormatNumber(ctx_r1.rawProcessRuns.length), " ");
|
|
1685
1669
|
i0.ɵɵadvance(3);
|
|
1686
|
-
i0.ɵɵconditional(
|
|
1670
|
+
i0.ɵɵconditional(ctx_r1.ActiveRuns.length > 0 ? 52 : -1);
|
|
1687
1671
|
i0.ɵɵadvance();
|
|
1688
|
-
i0.ɵɵconditional(
|
|
1672
|
+
i0.ɵɵconditional(ctx_r1.ErrorLog.length > 0 ? 53 : -1);
|
|
1689
1673
|
} }
|
|
1690
|
-
function
|
|
1674
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_For_12_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
1691
1675
|
i0.ɵɵtext(0);
|
|
1692
1676
|
} if (rf & 2) {
|
|
1693
|
-
const
|
|
1694
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1677
|
+
const bin_r69 = i0.ɵɵnextContext().$implicit;
|
|
1678
|
+
i0.ɵɵtextInterpolate1(" ", bin_r69.Count, " ");
|
|
1695
1679
|
} }
|
|
1696
|
-
function
|
|
1697
|
-
const
|
|
1698
|
-
i0.ɵɵelementStart(0, "div",
|
|
1699
|
-
i0.ɵɵlistener("click", function
|
|
1700
|
-
i0.ɵɵelementStart(1, "div",
|
|
1701
|
-
i0.ɵɵconditionalCreate(2,
|
|
1680
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_For_12_Template(rf, ctx) { if (rf & 1) {
|
|
1681
|
+
const _r68 = i0.ɵɵgetCurrentView();
|
|
1682
|
+
i0.ɵɵelementStart(0, "div", 219);
|
|
1683
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_16_For_12_Template_div_click_0_listener() { const bin_r69 = i0.ɵɵrestoreView(_r68).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OpenDrillDown("quality-bin:" + bin_r69.Label)); });
|
|
1684
|
+
i0.ɵɵelementStart(1, "div", 220);
|
|
1685
|
+
i0.ɵɵconditionalCreate(2, AnalyticsResourceComponent_Conditional_6_Conditional_16_For_12_Conditional_2_Template, 1, 1);
|
|
1702
1686
|
i0.ɵɵelementEnd();
|
|
1703
|
-
i0.ɵɵelementStart(3, "div",
|
|
1687
|
+
i0.ɵɵelementStart(3, "div", 221);
|
|
1704
1688
|
i0.ɵɵtext(4);
|
|
1705
1689
|
i0.ɵɵelementEnd()();
|
|
1706
1690
|
} if (rf & 2) {
|
|
1707
|
-
const
|
|
1691
|
+
const bin_r69 = ctx.$implicit;
|
|
1708
1692
|
i0.ɵɵadvance();
|
|
1709
|
-
i0.ɵɵstyleProp("height",
|
|
1693
|
+
i0.ɵɵstyleProp("height", bin_r69.Percentage, "%")("background", bin_r69.Color);
|
|
1710
1694
|
i0.ɵɵadvance();
|
|
1711
|
-
i0.ɵɵconditional(
|
|
1695
|
+
i0.ɵɵconditional(bin_r69.Count > 0 ? 2 : -1);
|
|
1712
1696
|
i0.ɵɵadvance(2);
|
|
1713
|
-
i0.ɵɵtextInterpolate(
|
|
1697
|
+
i0.ɵɵtextInterpolate(bin_r69.Label);
|
|
1714
1698
|
} }
|
|
1715
|
-
function
|
|
1699
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_For_15_Template(rf, ctx) { if (rf & 1) {
|
|
1716
1700
|
i0.ɵɵelementStart(0, "span")(1, "strong");
|
|
1717
1701
|
i0.ɵɵtext(2);
|
|
1718
1702
|
i0.ɵɵelementEnd();
|
|
1719
1703
|
i0.ɵɵtext(3);
|
|
1720
1704
|
i0.ɵɵelementEnd();
|
|
1721
1705
|
} if (rf & 2) {
|
|
1722
|
-
const
|
|
1706
|
+
const stat_r70 = ctx.$implicit;
|
|
1723
1707
|
i0.ɵɵadvance(2);
|
|
1724
|
-
i0.ɵɵtextInterpolate1("",
|
|
1708
|
+
i0.ɵɵtextInterpolate1("", stat_r70.Label, ":");
|
|
1725
1709
|
i0.ɵɵadvance();
|
|
1726
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1710
|
+
i0.ɵɵtextInterpolate1(" ", stat_r70.Value);
|
|
1727
1711
|
} }
|
|
1728
|
-
function
|
|
1729
|
-
const
|
|
1730
|
-
i0.ɵɵelementStart(0, "button",
|
|
1731
|
-
i0.ɵɵlistener("click", function
|
|
1732
|
-
i0.ɵɵelement(1, "i",
|
|
1712
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
1713
|
+
const _r72 = i0.ɵɵgetCurrentView();
|
|
1714
|
+
i0.ɵɵelementStart(0, "button", 90);
|
|
1715
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r72); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.ExportDrillDownCSV()); });
|
|
1716
|
+
i0.ɵɵelement(1, "i", 91);
|
|
1733
1717
|
i0.ɵɵtext(2, " CSV");
|
|
1734
1718
|
i0.ɵɵelementEnd();
|
|
1735
1719
|
} }
|
|
1736
|
-
function
|
|
1737
|
-
i0.ɵɵelement(0, "mj-loading",
|
|
1720
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
1721
|
+
i0.ɵɵelement(0, "mj-loading", 87);
|
|
1738
1722
|
} }
|
|
1739
|
-
function
|
|
1723
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Conditional_10_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
1740
1724
|
i0.ɵɵelementStart(0, "th");
|
|
1741
1725
|
i0.ɵɵtext(1);
|
|
1742
1726
|
i0.ɵɵelementEnd();
|
|
1743
1727
|
} if (rf & 2) {
|
|
1744
|
-
const
|
|
1728
|
+
const col_r73 = ctx.$implicit;
|
|
1745
1729
|
i0.ɵɵadvance();
|
|
1746
|
-
i0.ɵɵtextInterpolate(
|
|
1730
|
+
i0.ɵɵtextInterpolate(col_r73);
|
|
1747
1731
|
} }
|
|
1748
|
-
function
|
|
1749
|
-
i0.ɵɵelement(0, "th",
|
|
1732
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Conditional_10_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
1733
|
+
i0.ɵɵelement(0, "th", 93);
|
|
1750
1734
|
} }
|
|
1751
|
-
function
|
|
1735
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Conditional_10_For_9_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
1752
1736
|
i0.ɵɵelementStart(0, "td");
|
|
1753
1737
|
i0.ɵɵtext(1);
|
|
1754
1738
|
i0.ɵɵelementEnd();
|
|
1755
1739
|
} if (rf & 2) {
|
|
1756
|
-
const
|
|
1757
|
-
const
|
|
1740
|
+
const col_r74 = ctx.$implicit;
|
|
1741
|
+
const row_r75 = i0.ɵɵnextContext().$implicit;
|
|
1758
1742
|
i0.ɵɵadvance();
|
|
1759
|
-
i0.ɵɵtextInterpolate(
|
|
1743
|
+
i0.ɵɵtextInterpolate(row_r75[col_r74]);
|
|
1760
1744
|
} }
|
|
1761
|
-
function
|
|
1762
|
-
const
|
|
1763
|
-
i0.ɵɵelementStart(0, "button",
|
|
1764
|
-
i0.ɵɵlistener("click", function
|
|
1765
|
-
i0.ɵɵelement(1, "i",
|
|
1745
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Conditional_10_For_9_Conditional_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
1746
|
+
const _r76 = i0.ɵɵgetCurrentView();
|
|
1747
|
+
i0.ɵɵelementStart(0, "button", 133);
|
|
1748
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Conditional_10_For_9_Conditional_3_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r76); const row_r75 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.OpenDrillDownRecord(row_r75)); });
|
|
1749
|
+
i0.ɵɵelement(1, "i", 96);
|
|
1766
1750
|
i0.ɵɵelementEnd();
|
|
1767
1751
|
} }
|
|
1768
|
-
function
|
|
1769
|
-
i0.ɵɵelementStart(0, "td",
|
|
1770
|
-
i0.ɵɵconditionalCreate(1,
|
|
1752
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Conditional_10_For_9_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1753
|
+
i0.ɵɵelementStart(0, "td", 93);
|
|
1754
|
+
i0.ɵɵconditionalCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Conditional_10_For_9_Conditional_3_Conditional_1_Template, 2, 0, "button", 132);
|
|
1771
1755
|
i0.ɵɵelementEnd();
|
|
1772
1756
|
} if (rf & 2) {
|
|
1773
|
-
const
|
|
1757
|
+
const row_r75 = i0.ɵɵnextContext().$implicit;
|
|
1774
1758
|
i0.ɵɵadvance();
|
|
1775
|
-
i0.ɵɵconditional(
|
|
1759
|
+
i0.ɵɵconditional(row_r75["_RecordID"] ? 1 : -1);
|
|
1776
1760
|
} }
|
|
1777
|
-
function
|
|
1761
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Conditional_10_For_9_Template(rf, ctx) { if (rf & 1) {
|
|
1778
1762
|
i0.ɵɵelementStart(0, "tr");
|
|
1779
|
-
i0.ɵɵrepeaterCreate(1,
|
|
1780
|
-
i0.ɵɵconditionalCreate(3,
|
|
1763
|
+
i0.ɵɵrepeaterCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Conditional_10_For_9_For_2_Template, 2, 1, "td", null, i0.ɵɵrepeaterTrackByIdentity);
|
|
1764
|
+
i0.ɵɵconditionalCreate(3, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Conditional_10_For_9_Conditional_3_Template, 2, 1, "td", 93);
|
|
1781
1765
|
i0.ɵɵelementEnd();
|
|
1782
1766
|
} if (rf & 2) {
|
|
1783
|
-
const
|
|
1767
|
+
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
1784
1768
|
i0.ɵɵadvance();
|
|
1785
|
-
i0.ɵɵrepeater(
|
|
1769
|
+
i0.ɵɵrepeater(ctx_r1.DrillDownColumns);
|
|
1786
1770
|
i0.ɵɵadvance(2);
|
|
1787
|
-
i0.ɵɵconditional(
|
|
1771
|
+
i0.ɵɵconditional(ctx_r1.DrillDownHasActions ? 3 : -1);
|
|
1788
1772
|
} }
|
|
1789
|
-
function
|
|
1790
|
-
i0.ɵɵelementStart(0, "div",
|
|
1791
|
-
i0.ɵɵrepeaterCreate(4,
|
|
1792
|
-
i0.ɵɵconditionalCreate(6,
|
|
1773
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
1774
|
+
i0.ɵɵelementStart(0, "div", 88)(1, "table", 92)(2, "thead")(3, "tr");
|
|
1775
|
+
i0.ɵɵrepeaterCreate(4, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Conditional_10_For_5_Template, 2, 1, "th", null, i0.ɵɵrepeaterTrackByIdentity);
|
|
1776
|
+
i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Conditional_10_Conditional_6_Template, 1, 0, "th", 93);
|
|
1793
1777
|
i0.ɵɵelementEnd()();
|
|
1794
1778
|
i0.ɵɵelementStart(7, "tbody");
|
|
1795
|
-
i0.ɵɵrepeaterCreate(8,
|
|
1779
|
+
i0.ɵɵrepeaterCreate(8, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Conditional_10_For_9_Template, 4, 1, "tr", null, i0.ɵɵcomponentInstance().TrackByIndex, true);
|
|
1796
1780
|
i0.ɵɵelementEnd()()();
|
|
1797
1781
|
} if (rf & 2) {
|
|
1798
|
-
const
|
|
1782
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1799
1783
|
i0.ɵɵadvance(4);
|
|
1800
|
-
i0.ɵɵrepeater(
|
|
1784
|
+
i0.ɵɵrepeater(ctx_r1.DrillDownColumns);
|
|
1801
1785
|
i0.ɵɵadvance(2);
|
|
1802
|
-
i0.ɵɵconditional(
|
|
1786
|
+
i0.ɵɵconditional(ctx_r1.DrillDownHasActions ? 6 : -1);
|
|
1803
1787
|
i0.ɵɵadvance(2);
|
|
1804
|
-
i0.ɵɵrepeater(
|
|
1788
|
+
i0.ɵɵrepeater(ctx_r1.DrillDownData);
|
|
1805
1789
|
} }
|
|
1806
|
-
function
|
|
1807
|
-
i0.ɵɵelementStart(0, "div",
|
|
1790
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
1791
|
+
i0.ɵɵelementStart(0, "div", 89);
|
|
1808
1792
|
i0.ɵɵtext(1, "No items in this confidence range");
|
|
1809
1793
|
i0.ɵɵelementEnd();
|
|
1810
1794
|
} }
|
|
1811
|
-
function
|
|
1812
|
-
const
|
|
1813
|
-
i0.ɵɵelementStart(0, "div",
|
|
1814
|
-
i0.ɵɵelement(3, "i",
|
|
1795
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
1796
|
+
const _r71 = i0.ɵɵgetCurrentView();
|
|
1797
|
+
i0.ɵɵelementStart(0, "div", 24)(1, "div", 80)(2, "span", 81);
|
|
1798
|
+
i0.ɵɵelement(3, "i", 82);
|
|
1815
1799
|
i0.ɵɵtext(4);
|
|
1816
1800
|
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",
|
|
1801
|
+
i0.ɵɵelementStart(5, "div", 83);
|
|
1802
|
+
i0.ɵɵconditionalCreate(6, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Conditional_6_Template, 3, 0, "button", 84);
|
|
1803
|
+
i0.ɵɵelementStart(7, "button", 85);
|
|
1804
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r71); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.CloseDrillDown()); });
|
|
1805
|
+
i0.ɵɵelement(8, "i", 86);
|
|
1822
1806
|
i0.ɵɵelementEnd()()();
|
|
1823
|
-
i0.ɵɵconditionalCreate(9,
|
|
1807
|
+
i0.ɵɵconditionalCreate(9, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Conditional_9_Template, 1, 0, "mj-loading", 87)(10, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Conditional_10_Template, 10, 1, "div", 88)(11, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Conditional_11_Template, 2, 0, "div", 89);
|
|
1824
1808
|
i0.ɵɵelementEnd();
|
|
1825
1809
|
} if (rf & 2) {
|
|
1826
|
-
const
|
|
1810
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1827
1811
|
i0.ɵɵadvance(4);
|
|
1828
|
-
i0.ɵɵtextInterpolate1(" Items in Confidence Range ",
|
|
1812
|
+
i0.ɵɵtextInterpolate1(" Items in Confidence Range ", ctx_r1.DrillDownTarget.replace("quality-bin:", ""));
|
|
1829
1813
|
i0.ɵɵadvance(2);
|
|
1830
|
-
i0.ɵɵconditional(
|
|
1814
|
+
i0.ɵɵconditional(ctx_r1.DrillDownData.length > 0 ? 6 : -1);
|
|
1831
1815
|
i0.ɵɵadvance(3);
|
|
1832
|
-
i0.ɵɵconditional(
|
|
1816
|
+
i0.ɵɵconditional(ctx_r1.IsDrillDownLoading ? 9 : ctx_r1.DrillDownData.length > 0 ? 10 : 11);
|
|
1833
1817
|
} }
|
|
1834
|
-
function
|
|
1835
|
-
i0.ɵɵelementStart(0, "div",
|
|
1836
|
-
i0.ɵɵelement(2, "div",
|
|
1818
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_17_For_7_Template(rf, ctx) { if (rf & 1) {
|
|
1819
|
+
i0.ɵɵelementStart(0, "div", 224)(1, "div", 226);
|
|
1820
|
+
i0.ɵɵelement(2, "div", 227)(3, "div", 228)(4, "div", 229);
|
|
1837
1821
|
i0.ɵɵelementEnd();
|
|
1838
|
-
i0.ɵɵelementStart(5, "div",
|
|
1822
|
+
i0.ɵɵelementStart(5, "div", 230);
|
|
1839
1823
|
i0.ɵɵtext(6);
|
|
1840
1824
|
i0.ɵɵelementEnd()();
|
|
1841
1825
|
} if (rf & 2) {
|
|
1842
|
-
const
|
|
1826
|
+
const entity_r77 = ctx.$implicit;
|
|
1843
1827
|
i0.ɵɵadvance(2);
|
|
1844
|
-
i0.ɵɵstyleProp("height",
|
|
1845
|
-
i0.ɵɵproperty("title", "High: " +
|
|
1828
|
+
i0.ɵɵstyleProp("height", entity_r77.High, "%");
|
|
1829
|
+
i0.ɵɵproperty("title", "High: " + entity_r77.High + "%");
|
|
1846
1830
|
i0.ɵɵadvance();
|
|
1847
|
-
i0.ɵɵstyleProp("height",
|
|
1848
|
-
i0.ɵɵproperty("title", "Med: " +
|
|
1831
|
+
i0.ɵɵstyleProp("height", entity_r77.Med, "%");
|
|
1832
|
+
i0.ɵɵproperty("title", "Med: " + entity_r77.Med + "%");
|
|
1849
1833
|
i0.ɵɵadvance();
|
|
1850
|
-
i0.ɵɵstyleProp("height",
|
|
1851
|
-
i0.ɵɵproperty("title", "Low: " +
|
|
1834
|
+
i0.ɵɵstyleProp("height", entity_r77.Low, "%");
|
|
1835
|
+
i0.ɵɵproperty("title", "Low: " + entity_r77.Low + "%");
|
|
1852
1836
|
i0.ɵɵadvance(2);
|
|
1853
|
-
i0.ɵɵtextInterpolate(
|
|
1837
|
+
i0.ɵɵtextInterpolate(entity_r77.Name);
|
|
1854
1838
|
} }
|
|
1855
|
-
function
|
|
1856
|
-
i0.ɵɵelementStart(0, "div",
|
|
1857
|
-
i0.ɵɵelement(1, "div",
|
|
1839
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_17_For_10_Template(rf, ctx) { if (rf & 1) {
|
|
1840
|
+
i0.ɵɵelementStart(0, "div", 58);
|
|
1841
|
+
i0.ɵɵelement(1, "div", 142);
|
|
1858
1842
|
i0.ɵɵtext(2);
|
|
1859
1843
|
i0.ɵɵelementEnd();
|
|
1860
1844
|
} if (rf & 2) {
|
|
1861
|
-
const
|
|
1845
|
+
const item_r78 = ctx.$implicit;
|
|
1862
1846
|
i0.ɵɵadvance();
|
|
1863
|
-
i0.ɵɵstyleProp("background",
|
|
1847
|
+
i0.ɵɵstyleProp("background", item_r78.Color);
|
|
1864
1848
|
i0.ɵɵadvance();
|
|
1865
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1849
|
+
i0.ɵɵtextInterpolate1(" ", item_r78.Label);
|
|
1866
1850
|
} }
|
|
1867
|
-
function
|
|
1868
|
-
i0.ɵɵelementStart(0, "div",
|
|
1869
|
-
i0.ɵɵelement(2, "i",
|
|
1851
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
1852
|
+
i0.ɵɵelementStart(0, "div", 119)(1, "h3");
|
|
1853
|
+
i0.ɵɵelement(2, "i", 222);
|
|
1870
1854
|
i0.ɵɵtext(3, " Weight Distribution by Entity");
|
|
1871
1855
|
i0.ɵɵelementEnd();
|
|
1872
|
-
i0.ɵɵelementStart(4, "div",
|
|
1873
|
-
i0.ɵɵrepeaterCreate(6,
|
|
1856
|
+
i0.ɵɵelementStart(4, "div", 160)(5, "div", 223);
|
|
1857
|
+
i0.ɵɵrepeaterCreate(6, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_17_For_7_Template, 7, 10, "div", 224, _forTrack0);
|
|
1874
1858
|
i0.ɵɵelementEnd();
|
|
1875
|
-
i0.ɵɵelementStart(8, "div",
|
|
1876
|
-
i0.ɵɵrepeaterCreate(9,
|
|
1859
|
+
i0.ɵɵelementStart(8, "div", 225);
|
|
1860
|
+
i0.ɵɵrepeaterCreate(9, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_17_For_10_Template, 3, 3, "div", 58, _forTrack1);
|
|
1877
1861
|
i0.ɵɵelementEnd()()();
|
|
1878
1862
|
} if (rf & 2) {
|
|
1879
|
-
const
|
|
1863
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1880
1864
|
i0.ɵɵadvance(6);
|
|
1881
|
-
i0.ɵɵrepeater(
|
|
1865
|
+
i0.ɵɵrepeater(ctx_r1.WeightByEntity);
|
|
1882
1866
|
i0.ɵɵadvance(3);
|
|
1883
|
-
i0.ɵɵrepeater(
|
|
1867
|
+
i0.ɵɵrepeater(ctx_r1.WeightLegend);
|
|
1884
1868
|
} }
|
|
1885
|
-
function
|
|
1869
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_18_For_21_Template(rf, ctx) { if (rf & 1) {
|
|
1886
1870
|
i0.ɵɵnamespaceSVG();
|
|
1887
|
-
i0.ɵɵelement(0, "circle",
|
|
1871
|
+
i0.ɵɵelement(0, "circle", 238);
|
|
1888
1872
|
} if (rf & 2) {
|
|
1889
|
-
const
|
|
1890
|
-
i0.ɵɵattribute("cx",
|
|
1873
|
+
const dot_r79 = ctx.$implicit;
|
|
1874
|
+
i0.ɵɵattribute("cx", dot_r79.Cx)("cy", dot_r79.Cy);
|
|
1891
1875
|
} }
|
|
1892
|
-
function
|
|
1876
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_18_For_24_Template(rf, ctx) { if (rf & 1) {
|
|
1893
1877
|
i0.ɵɵelementStart(0, "span");
|
|
1894
1878
|
i0.ɵɵtext(1);
|
|
1895
1879
|
i0.ɵɵelementEnd();
|
|
1896
1880
|
} if (rf & 2) {
|
|
1897
|
-
const
|
|
1881
|
+
const label_r80 = ctx.$implicit;
|
|
1898
1882
|
i0.ɵɵadvance();
|
|
1899
|
-
i0.ɵɵtextInterpolate(
|
|
1883
|
+
i0.ɵɵtextInterpolate(label_r80);
|
|
1900
1884
|
} }
|
|
1901
|
-
function
|
|
1902
|
-
i0.ɵɵelementStart(0, "div",
|
|
1903
|
-
i0.ɵɵelement(2, "i",
|
|
1885
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
1886
|
+
i0.ɵɵelementStart(0, "div", 119)(1, "h3");
|
|
1887
|
+
i0.ɵɵelement(2, "i", 28);
|
|
1904
1888
|
i0.ɵɵtext(3, " Tag Accuracy Over Time (Weekly Avg Confidence)");
|
|
1905
1889
|
i0.ɵɵelementEnd();
|
|
1906
|
-
i0.ɵɵelementStart(4, "div",
|
|
1890
|
+
i0.ɵɵelementStart(4, "div", 160)(5, "div", 231)(6, "div", 232)(7, "div");
|
|
1907
1891
|
i0.ɵɵtext(8, "1.0");
|
|
1908
1892
|
i0.ɵɵelementEnd();
|
|
1909
1893
|
i0.ɵɵelementStart(9, "div");
|
|
@@ -1915,75 +1899,75 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_18_
|
|
|
1915
1899
|
i0.ɵɵelementStart(13, "div");
|
|
1916
1900
|
i0.ɵɵtext(14, "0.25");
|
|
1917
1901
|
i0.ɵɵelementEnd()();
|
|
1918
|
-
i0.ɵɵelementStart(15, "div",
|
|
1919
|
-
i0.ɵɵelement(16, "div",
|
|
1902
|
+
i0.ɵɵelementStart(15, "div", 233);
|
|
1903
|
+
i0.ɵɵelement(16, "div", 234)(17, "div", 235);
|
|
1920
1904
|
i0.ɵɵnamespaceSVG();
|
|
1921
|
-
i0.ɵɵelementStart(18, "svg",
|
|
1922
|
-
i0.ɵɵelement(19, "polyline",
|
|
1923
|
-
i0.ɵɵrepeaterCreate(20,
|
|
1905
|
+
i0.ɵɵelementStart(18, "svg", 236);
|
|
1906
|
+
i0.ɵɵelement(19, "polyline", 237);
|
|
1907
|
+
i0.ɵɵrepeaterCreate(20, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_18_For_21_Template, 1, 2, ":svg:circle", 238, i0.ɵɵcomponentInstance().TrackByIndex, true);
|
|
1924
1908
|
i0.ɵɵelementEnd()()();
|
|
1925
1909
|
i0.ɵɵnamespaceHTML();
|
|
1926
|
-
i0.ɵɵelementStart(22, "div",
|
|
1927
|
-
i0.ɵɵrepeaterCreate(23,
|
|
1910
|
+
i0.ɵɵelementStart(22, "div", 239);
|
|
1911
|
+
i0.ɵɵrepeaterCreate(23, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_18_For_24_Template, 2, 1, "span", null, i0.ɵɵrepeaterTrackByIdentity);
|
|
1928
1912
|
i0.ɵɵelementEnd();
|
|
1929
|
-
i0.ɵɵelementStart(25, "div",
|
|
1930
|
-
i0.ɵɵelement(26, "i",
|
|
1913
|
+
i0.ɵɵelementStart(25, "div", 240);
|
|
1914
|
+
i0.ɵɵelement(26, "i", 241);
|
|
1931
1915
|
i0.ɵɵtext(27);
|
|
1932
1916
|
i0.ɵɵelementEnd()()();
|
|
1933
1917
|
} if (rf & 2) {
|
|
1934
|
-
const
|
|
1918
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1935
1919
|
i0.ɵɵadvance(19);
|
|
1936
|
-
i0.ɵɵattribute("points",
|
|
1920
|
+
i0.ɵɵattribute("points", ctx_r1.AccuracyLinePoints);
|
|
1937
1921
|
i0.ɵɵadvance();
|
|
1938
|
-
i0.ɵɵrepeater(
|
|
1922
|
+
i0.ɵɵrepeater(ctx_r1.AccuracyDots);
|
|
1939
1923
|
i0.ɵɵadvance(3);
|
|
1940
|
-
i0.ɵɵrepeater(
|
|
1924
|
+
i0.ɵɵrepeater(ctx_r1.AccuracyMonthLabels);
|
|
1941
1925
|
i0.ɵɵadvance(4);
|
|
1942
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1926
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.AccuracyTrendText, " ");
|
|
1943
1927
|
} }
|
|
1944
|
-
function
|
|
1928
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_19_For_20_Template(rf, ctx) { if (rf & 1) {
|
|
1945
1929
|
i0.ɵɵelementStart(0, "tr")(1, "td")(2, "strong");
|
|
1946
1930
|
i0.ɵɵtext(3);
|
|
1947
1931
|
i0.ɵɵelementEnd()();
|
|
1948
|
-
i0.ɵɵelementStart(4, "td",
|
|
1932
|
+
i0.ɵɵelementStart(4, "td", 125);
|
|
1949
1933
|
i0.ɵɵtext(5);
|
|
1950
1934
|
i0.ɵɵelementEnd();
|
|
1951
|
-
i0.ɵɵelementStart(6, "td",
|
|
1935
|
+
i0.ɵɵelementStart(6, "td", 125);
|
|
1952
1936
|
i0.ɵɵtext(7);
|
|
1953
1937
|
i0.ɵɵelementEnd();
|
|
1954
1938
|
i0.ɵɵelementStart(8, "td");
|
|
1955
1939
|
i0.ɵɵtext(9);
|
|
1956
1940
|
i0.ɵɵelementEnd();
|
|
1957
|
-
i0.ɵɵelementStart(10, "td")(11, "span",
|
|
1941
|
+
i0.ɵɵelementStart(10, "td")(11, "span", 156);
|
|
1958
1942
|
i0.ɵɵtext(12);
|
|
1959
1943
|
i0.ɵɵelementEnd()()();
|
|
1960
1944
|
} if (rf & 2) {
|
|
1961
|
-
const
|
|
1945
|
+
const tag_r81 = ctx.$implicit;
|
|
1962
1946
|
i0.ɵɵadvance(3);
|
|
1963
|
-
i0.ɵɵtextInterpolate(
|
|
1947
|
+
i0.ɵɵtextInterpolate(tag_r81.Name);
|
|
1964
1948
|
i0.ɵɵadvance(2);
|
|
1965
|
-
i0.ɵɵtextInterpolate(
|
|
1949
|
+
i0.ɵɵtextInterpolate(tag_r81.AvgWeight);
|
|
1966
1950
|
i0.ɵɵadvance(2);
|
|
1967
|
-
i0.ɵɵtextInterpolate(
|
|
1951
|
+
i0.ɵɵtextInterpolate(tag_r81.UsageCount);
|
|
1968
1952
|
i0.ɵɵadvance(2);
|
|
1969
|
-
i0.ɵɵtextInterpolate(
|
|
1953
|
+
i0.ɵɵtextInterpolate(tag_r81.TopEntity);
|
|
1970
1954
|
i0.ɵɵadvance(2);
|
|
1971
|
-
i0.ɵɵclassMap(
|
|
1955
|
+
i0.ɵɵclassMap(tag_r81.ActionClass);
|
|
1972
1956
|
i0.ɵɵadvance();
|
|
1973
|
-
i0.ɵɵtextInterpolate(
|
|
1957
|
+
i0.ɵɵtextInterpolate(tag_r81.SuggestedAction);
|
|
1974
1958
|
} }
|
|
1975
|
-
function
|
|
1976
|
-
i0.ɵɵelementStart(0, "div",
|
|
1977
|
-
i0.ɵɵelement(2, "i",
|
|
1959
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
1960
|
+
i0.ɵɵelementStart(0, "div", 119)(1, "h3");
|
|
1961
|
+
i0.ɵɵelement(2, "i", 242);
|
|
1978
1962
|
i0.ɵɵtext(3, " Low-Confidence Tags (Avg Weight < 0.4)");
|
|
1979
1963
|
i0.ɵɵelementEnd();
|
|
1980
|
-
i0.ɵɵelementStart(4, "div",
|
|
1964
|
+
i0.ɵɵelementStart(4, "div", 117)(5, "table", 92)(6, "thead")(7, "tr")(8, "th");
|
|
1981
1965
|
i0.ɵɵtext(9, "Tag Name");
|
|
1982
1966
|
i0.ɵɵelementEnd();
|
|
1983
|
-
i0.ɵɵelementStart(10, "th",
|
|
1967
|
+
i0.ɵɵelementStart(10, "th", 125);
|
|
1984
1968
|
i0.ɵɵtext(11, "Avg Weight");
|
|
1985
1969
|
i0.ɵɵelementEnd();
|
|
1986
|
-
i0.ɵɵelementStart(12, "th",
|
|
1970
|
+
i0.ɵɵelementStart(12, "th", 125);
|
|
1987
1971
|
i0.ɵɵtext(13, "Usage Count");
|
|
1988
1972
|
i0.ɵɵelementEnd();
|
|
1989
1973
|
i0.ɵɵelementStart(14, "th");
|
|
@@ -1993,318 +1977,305 @@ function AnalyticsResourceComponent_Conditional_1_Conditional_26_Conditional_19_
|
|
|
1993
1977
|
i0.ɵɵtext(17, "Suggested Action");
|
|
1994
1978
|
i0.ɵɵelementEnd()()();
|
|
1995
1979
|
i0.ɵɵelementStart(18, "tbody");
|
|
1996
|
-
i0.ɵɵrepeaterCreate(19,
|
|
1980
|
+
i0.ɵɵrepeaterCreate(19, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_19_For_20_Template, 13, 7, "tr", null, _forTrack0);
|
|
1997
1981
|
i0.ɵɵelementEnd()()()();
|
|
1998
1982
|
} if (rf & 2) {
|
|
1999
|
-
const
|
|
1983
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
2000
1984
|
i0.ɵɵadvance(19);
|
|
2001
|
-
i0.ɵɵrepeater(
|
|
1985
|
+
i0.ɵɵrepeater(ctx_r1.LowConfidenceTags);
|
|
2002
1986
|
} }
|
|
2003
|
-
function
|
|
2004
|
-
i0.ɵɵelementStart(0, "div",
|
|
2005
|
-
i0.ɵɵelement(2, "i",
|
|
1987
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_For_26_Template(rf, ctx) { if (rf & 1) {
|
|
1988
|
+
i0.ɵɵelementStart(0, "div", 217)(1, "div", 243);
|
|
1989
|
+
i0.ɵɵelement(2, "i", 155);
|
|
2006
1990
|
i0.ɵɵtext(3);
|
|
2007
1991
|
i0.ɵɵelementEnd();
|
|
2008
1992
|
i0.ɵɵnamespaceSVG();
|
|
2009
|
-
i0.ɵɵelementStart(4, "svg",
|
|
2010
|
-
i0.ɵɵelement(5, "circle",
|
|
1993
|
+
i0.ɵɵelementStart(4, "svg", 244);
|
|
1994
|
+
i0.ɵɵelement(5, "circle", 245)(6, "circle", 246);
|
|
2011
1995
|
i0.ɵɵelementEnd();
|
|
2012
1996
|
i0.ɵɵnamespaceHTML();
|
|
2013
|
-
i0.ɵɵelementStart(7, "div",
|
|
1997
|
+
i0.ɵɵelementStart(7, "div", 247);
|
|
2014
1998
|
i0.ɵɵtext(8);
|
|
2015
1999
|
i0.ɵɵelementEnd();
|
|
2016
|
-
i0.ɵɵelementStart(9, "div",
|
|
2000
|
+
i0.ɵɵelementStart(9, "div", 248);
|
|
2017
2001
|
i0.ɵɵtext(10);
|
|
2018
2002
|
i0.ɵɵelementEnd();
|
|
2019
|
-
i0.ɵɵelementStart(11, "div",
|
|
2003
|
+
i0.ɵɵelementStart(11, "div", 248);
|
|
2020
2004
|
i0.ɵɵtext(12);
|
|
2021
2005
|
i0.ɵɵelementEnd();
|
|
2022
|
-
i0.ɵɵelementStart(13, "div",
|
|
2006
|
+
i0.ɵɵelementStart(13, "div", 249);
|
|
2023
2007
|
i0.ɵɵtext(14);
|
|
2024
2008
|
i0.ɵɵelementEnd()();
|
|
2025
2009
|
} if (rf & 2) {
|
|
2026
|
-
const
|
|
2027
|
-
const
|
|
2010
|
+
const model_r82 = ctx.$implicit;
|
|
2011
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
2028
2012
|
i0.ɵɵadvance(2);
|
|
2029
|
-
i0.ɵɵclassMap(
|
|
2030
|
-
i0.ɵɵstyleProp("color",
|
|
2013
|
+
i0.ɵɵclassMap(model_r82.Icon);
|
|
2014
|
+
i0.ɵɵstyleProp("color", model_r82.IconColor);
|
|
2031
2015
|
i0.ɵɵadvance();
|
|
2032
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
2016
|
+
i0.ɵɵtextInterpolate1(" ", model_r82.Name);
|
|
2033
2017
|
i0.ɵɵadvance(3);
|
|
2034
|
-
i0.ɵɵattribute("stroke",
|
|
2018
|
+
i0.ɵɵattribute("stroke", model_r82.ScoreColor)("stroke-dasharray", model_r82.StrokeDash);
|
|
2035
2019
|
i0.ɵɵadvance();
|
|
2036
|
-
i0.ɵɵstyleProp("color",
|
|
2020
|
+
i0.ɵɵstyleProp("color", model_r82.ScoreColor);
|
|
2037
2021
|
i0.ɵɵadvance();
|
|
2038
|
-
i0.ɵɵtextInterpolate1("",
|
|
2022
|
+
i0.ɵɵtextInterpolate1("", model_r82.ScorePercentage, "%");
|
|
2039
2023
|
i0.ɵɵadvance(2);
|
|
2040
|
-
i0.ɵɵtextInterpolate1("Avg confidence: ",
|
|
2024
|
+
i0.ɵɵtextInterpolate1("Avg confidence: ", model_r82.AvgConfidence);
|
|
2041
2025
|
i0.ɵɵadvance(2);
|
|
2042
|
-
i0.ɵɵtextInterpolate1("",
|
|
2026
|
+
i0.ɵɵtextInterpolate1("", ctx_r1.FormatNumber(model_r82.TagsGenerated), " tags generated");
|
|
2043
2027
|
i0.ɵɵadvance();
|
|
2044
|
-
i0.ɵɵstyleProp("color",
|
|
2028
|
+
i0.ɵɵstyleProp("color", model_r82.RoleColor);
|
|
2045
2029
|
i0.ɵɵadvance();
|
|
2046
|
-
i0.ɵɵtextInterpolate(
|
|
2030
|
+
i0.ɵɵtextInterpolate(model_r82.Role);
|
|
2047
2031
|
} }
|
|
2048
|
-
function
|
|
2049
|
-
i0.ɵɵelementStart(0, "div",
|
|
2050
|
-
i0.ɵɵelement(1, "i",
|
|
2032
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_27_Template(rf, ctx) { if (rf & 1) {
|
|
2033
|
+
i0.ɵɵelementStart(0, "div", 218);
|
|
2034
|
+
i0.ɵɵelement(1, "i", 250);
|
|
2051
2035
|
i0.ɵɵelementStart(2, "div")(3, "strong");
|
|
2052
2036
|
i0.ɵɵtext(4, "Recommendation:");
|
|
2053
2037
|
i0.ɵɵelementEnd();
|
|
2054
2038
|
i0.ɵɵtext(5);
|
|
2055
2039
|
i0.ɵɵelementEnd()();
|
|
2056
2040
|
} if (rf & 2) {
|
|
2057
|
-
const
|
|
2041
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
2058
2042
|
i0.ɵɵadvance(5);
|
|
2059
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
2043
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.ModelRecommendation, " ");
|
|
2060
2044
|
} }
|
|
2061
|
-
function
|
|
2062
|
-
i0.ɵɵelementStart(0, "section",
|
|
2063
|
-
i0.ɵɵelement(2, "i",
|
|
2045
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
2046
|
+
i0.ɵɵelementStart(0, "section", 14)(1, "div", 15);
|
|
2047
|
+
i0.ɵɵelement(2, "i", 210);
|
|
2064
2048
|
i0.ɵɵelementStart(3, "h1");
|
|
2065
2049
|
i0.ɵɵtext(4, "Quality");
|
|
2066
2050
|
i0.ɵɵelementEnd()();
|
|
2067
|
-
i0.ɵɵelementStart(5, "div",
|
|
2068
|
-
i0.ɵɵelement(7, "i",
|
|
2051
|
+
i0.ɵɵelementStart(5, "div", 114)(6, "h3");
|
|
2052
|
+
i0.ɵɵelement(7, "i", 211);
|
|
2069
2053
|
i0.ɵɵtext(8, " Confidence Distribution");
|
|
2070
2054
|
i0.ɵɵelementEnd();
|
|
2071
|
-
i0.ɵɵelementStart(9, "div",
|
|
2072
|
-
i0.ɵɵrepeaterCreate(11,
|
|
2055
|
+
i0.ɵɵelementStart(9, "div", 160)(10, "div", 212);
|
|
2056
|
+
i0.ɵɵrepeaterCreate(11, AnalyticsResourceComponent_Conditional_6_Conditional_16_For_12_Template, 5, 6, "div", 213, _forTrack1);
|
|
2073
2057
|
i0.ɵɵelementEnd();
|
|
2074
|
-
i0.ɵɵelementStart(13, "div",
|
|
2075
|
-
i0.ɵɵrepeaterCreate(14,
|
|
2058
|
+
i0.ɵɵelementStart(13, "div", 214);
|
|
2059
|
+
i0.ɵɵrepeaterCreate(14, AnalyticsResourceComponent_Conditional_6_Conditional_16_For_15_Template, 4, 2, "span", null, _forTrack1);
|
|
2076
2060
|
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",
|
|
2061
|
+
i0.ɵɵconditionalCreate(16, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_16_Template, 12, 3, "div", 24);
|
|
2062
|
+
i0.ɵɵconditionalCreate(17, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_17_Template, 11, 0, "div", 119);
|
|
2063
|
+
i0.ɵɵconditionalCreate(18, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_18_Template, 28, 2, "div", 119);
|
|
2064
|
+
i0.ɵɵconditionalCreate(19, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_19_Template, 21, 0, "div", 119);
|
|
2065
|
+
i0.ɵɵelementStart(20, "div", 119)(21, "h3");
|
|
2066
|
+
i0.ɵɵelement(22, "i", 215);
|
|
2083
2067
|
i0.ɵɵtext(23, " Model Performance Comparison");
|
|
2084
2068
|
i0.ɵɵelementEnd();
|
|
2085
|
-
i0.ɵɵelementStart(24, "div",
|
|
2086
|
-
i0.ɵɵrepeaterCreate(25,
|
|
2069
|
+
i0.ɵɵelementStart(24, "div", 216);
|
|
2070
|
+
i0.ɵɵrepeaterCreate(25, AnalyticsResourceComponent_Conditional_6_Conditional_16_For_26_Template, 15, 15, "div", 217, _forTrack0);
|
|
2087
2071
|
i0.ɵɵelementEnd();
|
|
2088
|
-
i0.ɵɵconditionalCreate(27,
|
|
2072
|
+
i0.ɵɵconditionalCreate(27, AnalyticsResourceComponent_Conditional_6_Conditional_16_Conditional_27_Template, 6, 1, "div", 218);
|
|
2089
2073
|
i0.ɵɵelementEnd()();
|
|
2090
2074
|
} if (rf & 2) {
|
|
2091
|
-
const
|
|
2075
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
2092
2076
|
i0.ɵɵadvance(11);
|
|
2093
|
-
i0.ɵɵrepeater(
|
|
2077
|
+
i0.ɵɵrepeater(ctx_r1.ConfidenceHistogram);
|
|
2094
2078
|
i0.ɵɵadvance(3);
|
|
2095
|
-
i0.ɵɵrepeater(
|
|
2079
|
+
i0.ɵɵrepeater(ctx_r1.ConfidenceStats);
|
|
2096
2080
|
i0.ɵɵadvance(2);
|
|
2097
|
-
i0.ɵɵconditional(
|
|
2081
|
+
i0.ɵɵconditional(ctx_r1.DrillDownTarget && ctx_r1.DrillDownTarget.startsWith("quality-bin:") ? 16 : -1);
|
|
2098
2082
|
i0.ɵɵadvance();
|
|
2099
|
-
i0.ɵɵconditional(
|
|
2083
|
+
i0.ɵɵconditional(ctx_r1.WeightByEntity.length > 0 ? 17 : -1);
|
|
2100
2084
|
i0.ɵɵadvance();
|
|
2101
|
-
i0.ɵɵconditional(
|
|
2085
|
+
i0.ɵɵconditional(ctx_r1.AccuracyLinePoints ? 18 : -1);
|
|
2102
2086
|
i0.ɵɵadvance();
|
|
2103
|
-
i0.ɵɵconditional(
|
|
2087
|
+
i0.ɵɵconditional(ctx_r1.LowConfidenceTags.length > 0 ? 19 : -1);
|
|
2104
2088
|
i0.ɵɵadvance(6);
|
|
2105
|
-
i0.ɵɵrepeater(
|
|
2089
|
+
i0.ɵɵrepeater(ctx_r1.ModelComparisons);
|
|
2106
2090
|
i0.ɵɵadvance(2);
|
|
2107
|
-
i0.ɵɵconditional(
|
|
2091
|
+
i0.ɵɵconditional(ctx_r1.ModelRecommendation ? 27 : -1);
|
|
2108
2092
|
} }
|
|
2109
|
-
function
|
|
2110
|
-
const
|
|
2111
|
-
i0.ɵɵelementStart(0, "button",
|
|
2112
|
-
i0.ɵɵlistener("click", function
|
|
2093
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_17_For_15_Template(rf, ctx) { if (rf & 1) {
|
|
2094
|
+
const _r84 = i0.ɵɵgetCurrentView();
|
|
2095
|
+
i0.ɵɵelementStart(0, "button", 70);
|
|
2096
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_17_For_15_Template_button_click_0_listener() { const range_r85 = i0.ɵɵrestoreView(_r84).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.SetDateRange(range_r85.Label)); });
|
|
2113
2097
|
i0.ɵɵtext(1);
|
|
2114
2098
|
i0.ɵɵelementEnd();
|
|
2115
2099
|
} if (rf & 2) {
|
|
2116
|
-
const
|
|
2117
|
-
const
|
|
2118
|
-
i0.ɵɵclassProp("active",
|
|
2100
|
+
const range_r85 = ctx.$implicit;
|
|
2101
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
2102
|
+
i0.ɵɵclassProp("active", ctx_r1.ActiveDateRange === range_r85.Label);
|
|
2119
2103
|
i0.ɵɵadvance();
|
|
2120
|
-
i0.ɵɵtextInterpolate(
|
|
2104
|
+
i0.ɵɵtextInterpolate(range_r85.Label);
|
|
2121
2105
|
} }
|
|
2122
|
-
function
|
|
2123
|
-
i0.ɵɵelementStart(0, "div",
|
|
2106
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_16_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
2107
|
+
i0.ɵɵelementStart(0, "div", 256)(1, "div", 257);
|
|
2124
2108
|
i0.ɵɵelement(2, "i");
|
|
2125
2109
|
i0.ɵɵelementEnd();
|
|
2126
|
-
i0.ɵɵelementStart(3, "div")(4, "div",
|
|
2110
|
+
i0.ɵɵelementStart(3, "div")(4, "div", 258);
|
|
2127
2111
|
i0.ɵɵtext(5);
|
|
2128
2112
|
i0.ɵɵelementEnd();
|
|
2129
|
-
i0.ɵɵelementStart(6, "div",
|
|
2113
|
+
i0.ɵɵelementStart(6, "div", 259);
|
|
2130
2114
|
i0.ɵɵtext(7);
|
|
2131
2115
|
i0.ɵɵelementEnd();
|
|
2132
|
-
i0.ɵɵelementStart(8, "div",
|
|
2116
|
+
i0.ɵɵelementStart(8, "div", 260);
|
|
2133
2117
|
i0.ɵɵtext(9);
|
|
2134
2118
|
i0.ɵɵelementEnd()()();
|
|
2135
2119
|
} if (rf & 2) {
|
|
2136
|
-
const
|
|
2120
|
+
const kpi_r86 = ctx.$implicit;
|
|
2137
2121
|
i0.ɵɵadvance(2);
|
|
2138
|
-
i0.ɵɵclassMap(
|
|
2122
|
+
i0.ɵɵclassMap(kpi_r86.Icon);
|
|
2139
2123
|
i0.ɵɵadvance(3);
|
|
2140
|
-
i0.ɵɵtextInterpolate(
|
|
2124
|
+
i0.ɵɵtextInterpolate(kpi_r86.Value);
|
|
2141
2125
|
i0.ɵɵadvance(2);
|
|
2142
|
-
i0.ɵɵtextInterpolate(
|
|
2126
|
+
i0.ɵɵtextInterpolate(kpi_r86.Label);
|
|
2143
2127
|
i0.ɵɵadvance(2);
|
|
2144
|
-
i0.ɵɵtextInterpolate(
|
|
2128
|
+
i0.ɵɵtextInterpolate(kpi_r86.SubLabel);
|
|
2145
2129
|
} }
|
|
2146
|
-
function
|
|
2147
|
-
i0.ɵɵelementStart(0, "div",
|
|
2148
|
-
i0.ɵɵrepeaterCreate(1,
|
|
2130
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
2131
|
+
i0.ɵɵelementStart(0, "div", 255);
|
|
2132
|
+
i0.ɵɵrepeaterCreate(1, AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_16_For_2_Template, 10, 5, "div", 256, _forTrack1);
|
|
2149
2133
|
i0.ɵɵelementEnd();
|
|
2150
2134
|
} if (rf & 2) {
|
|
2151
|
-
const
|
|
2135
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
2152
2136
|
i0.ɵɵadvance();
|
|
2153
|
-
i0.ɵɵrepeater(
|
|
2137
|
+
i0.ɵɵrepeater(ctx_r1.CostKPIs);
|
|
2154
2138
|
} }
|
|
2155
|
-
function
|
|
2156
|
-
i0.ɵɵelementStart(0, "tr")(1, "td",
|
|
2139
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_21_For_16_Template(rf, ctx) { if (rf & 1) {
|
|
2140
|
+
i0.ɵɵelementStart(0, "tr")(1, "td", 200);
|
|
2157
2141
|
i0.ɵɵtext(2);
|
|
2158
2142
|
i0.ɵɵelementEnd();
|
|
2159
2143
|
i0.ɵɵelementStart(3, "td");
|
|
2160
2144
|
i0.ɵɵtext(4);
|
|
2161
2145
|
i0.ɵɵelementEnd();
|
|
2162
|
-
i0.ɵɵelementStart(5, "td",
|
|
2146
|
+
i0.ɵɵelementStart(5, "td", 125);
|
|
2163
2147
|
i0.ɵɵtext(6);
|
|
2164
2148
|
i0.ɵɵelementEnd();
|
|
2165
|
-
i0.ɵɵelementStart(7, "td",
|
|
2149
|
+
i0.ɵɵelementStart(7, "td", 125);
|
|
2166
2150
|
i0.ɵɵtext(8);
|
|
2167
2151
|
i0.ɵɵelementEnd();
|
|
2168
|
-
i0.ɵɵelementStart(9, "td",
|
|
2152
|
+
i0.ɵɵelementStart(9, "td", 131);
|
|
2169
2153
|
i0.ɵɵtext(10);
|
|
2170
2154
|
i0.ɵɵelementEnd()();
|
|
2171
2155
|
} if (rf & 2) {
|
|
2172
|
-
const
|
|
2173
|
-
const
|
|
2156
|
+
const row_r87 = ctx.$implicit;
|
|
2157
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
2174
2158
|
i0.ɵɵadvance(2);
|
|
2175
|
-
i0.ɵɵtextInterpolate(
|
|
2159
|
+
i0.ɵɵtextInterpolate(row_r87.RunID);
|
|
2176
2160
|
i0.ɵɵadvance(2);
|
|
2177
|
-
i0.ɵɵtextInterpolate(
|
|
2161
|
+
i0.ɵɵtextInterpolate(row_r87.Source);
|
|
2178
2162
|
i0.ɵɵadvance(2);
|
|
2179
|
-
i0.ɵɵtextInterpolate(
|
|
2163
|
+
i0.ɵɵtextInterpolate(ctx_r1.FormatNumber(row_r87.Tokens));
|
|
2180
2164
|
i0.ɵɵadvance(2);
|
|
2181
|
-
i0.ɵɵtextInterpolate(
|
|
2165
|
+
i0.ɵɵtextInterpolate(row_r87.Cost > 0 ? "$" + row_r87.Cost.toFixed(4) : "$0.00");
|
|
2182
2166
|
i0.ɵɵadvance(2);
|
|
2183
|
-
i0.ɵɵtextInterpolate(
|
|
2167
|
+
i0.ɵɵtextInterpolate(row_r87.Started);
|
|
2184
2168
|
} }
|
|
2185
|
-
function
|
|
2186
|
-
i0.ɵɵelementStart(0, "div",
|
|
2169
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_21_Template(rf, ctx) { if (rf & 1) {
|
|
2170
|
+
i0.ɵɵelementStart(0, "div", 117)(1, "table", 92)(2, "thead")(3, "tr")(4, "th");
|
|
2187
2171
|
i0.ɵɵtext(5, "Run ID");
|
|
2188
2172
|
i0.ɵɵelementEnd();
|
|
2189
2173
|
i0.ɵɵelementStart(6, "th");
|
|
2190
2174
|
i0.ɵɵtext(7, "Source");
|
|
2191
2175
|
i0.ɵɵelementEnd();
|
|
2192
|
-
i0.ɵɵelementStart(8, "th",
|
|
2176
|
+
i0.ɵɵelementStart(8, "th", 125);
|
|
2193
2177
|
i0.ɵɵtext(9, "Tokens");
|
|
2194
2178
|
i0.ɵɵelementEnd();
|
|
2195
|
-
i0.ɵɵelementStart(10, "th",
|
|
2179
|
+
i0.ɵɵelementStart(10, "th", 125);
|
|
2196
2180
|
i0.ɵɵtext(11, "Cost");
|
|
2197
2181
|
i0.ɵɵelementEnd();
|
|
2198
2182
|
i0.ɵɵelementStart(12, "th");
|
|
2199
2183
|
i0.ɵɵtext(13, "Started");
|
|
2200
2184
|
i0.ɵɵelementEnd()()();
|
|
2201
2185
|
i0.ɵɵelementStart(14, "tbody");
|
|
2202
|
-
i0.ɵɵrepeaterCreate(15,
|
|
2186
|
+
i0.ɵɵrepeaterCreate(15, AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_21_For_16_Template, 11, 5, "tr", null, _forTrack4);
|
|
2203
2187
|
i0.ɵɵelementEnd()()();
|
|
2204
2188
|
} if (rf & 2) {
|
|
2205
|
-
const
|
|
2189
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
2206
2190
|
i0.ɵɵadvance(15);
|
|
2207
|
-
i0.ɵɵrepeater(
|
|
2191
|
+
i0.ɵɵrepeater(ctx_r1.CostPerRunRows);
|
|
2208
2192
|
} }
|
|
2209
|
-
function
|
|
2210
|
-
i0.ɵɵelementStart(0, "div",
|
|
2211
|
-
i0.ɵɵelement(1, "i",
|
|
2193
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_22_Template(rf, ctx) { if (rf & 1) {
|
|
2194
|
+
i0.ɵɵelementStart(0, "div", 118);
|
|
2195
|
+
i0.ɵɵelement(1, "i", 251);
|
|
2212
2196
|
i0.ɵɵelementStart(2, "p");
|
|
2213
2197
|
i0.ɵɵtext(3, "No cost data available yet. Run the pipeline to generate cost and token usage metrics.");
|
|
2214
2198
|
i0.ɵɵelementEnd();
|
|
2215
|
-
i0.ɵɵelementStart(4, "p",
|
|
2199
|
+
i0.ɵɵelementStart(4, "p", 261);
|
|
2216
2200
|
i0.ɵɵtext(5, "Cost data is aggregated from ContentProcessRunDetail records linked to AI Prompt Runs.");
|
|
2217
2201
|
i0.ɵɵelementEnd()();
|
|
2218
2202
|
} }
|
|
2219
|
-
function
|
|
2220
|
-
const
|
|
2221
|
-
i0.ɵɵelementStart(0, "section",
|
|
2222
|
-
i0.ɵɵelement(2, "i",
|
|
2203
|
+
function AnalyticsResourceComponent_Conditional_6_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
2204
|
+
const _r83 = i0.ɵɵgetCurrentView();
|
|
2205
|
+
i0.ɵɵelementStart(0, "section", 14)(1, "div", 15);
|
|
2206
|
+
i0.ɵɵelement(2, "i", 251);
|
|
2223
2207
|
i0.ɵɵelementStart(3, "h1");
|
|
2224
2208
|
i0.ɵɵtext(4, "Cost & Usage");
|
|
2225
2209
|
i0.ɵɵelementEnd();
|
|
2226
|
-
i0.ɵɵelementStart(5, "div",
|
|
2227
|
-
i0.ɵɵlistener("click", function
|
|
2228
|
-
i0.ɵɵelement(7, "i",
|
|
2210
|
+
i0.ɵɵelementStart(5, "div", 252)(6, "button", 90);
|
|
2211
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_17_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r83); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.ExportTabDataCSV("cost-usage")); });
|
|
2212
|
+
i0.ɵɵelement(7, "i", 91);
|
|
2229
2213
|
i0.ɵɵtext(8, " CSV ");
|
|
2230
2214
|
i0.ɵɵelementEnd();
|
|
2231
|
-
i0.ɵɵelementStart(9, "button",
|
|
2232
|
-
i0.ɵɵlistener("click", function
|
|
2233
|
-
i0.ɵɵelement(10, "i",
|
|
2215
|
+
i0.ɵɵelementStart(9, "button", 253);
|
|
2216
|
+
i0.ɵɵlistener("click", function AnalyticsResourceComponent_Conditional_6_Conditional_17_Template_button_click_9_listener() { i0.ɵɵrestoreView(_r83); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.PrintCurrentTab()); });
|
|
2217
|
+
i0.ɵɵelement(10, "i", 254);
|
|
2234
2218
|
i0.ɵɵtext(11, " Print ");
|
|
2235
2219
|
i0.ɵɵelementEnd()()();
|
|
2236
|
-
i0.ɵɵelementStart(12, "div",
|
|
2237
|
-
i0.ɵɵrepeaterCreate(14,
|
|
2220
|
+
i0.ɵɵelementStart(12, "div", 17)(13, "div", 18);
|
|
2221
|
+
i0.ɵɵrepeaterCreate(14, AnalyticsResourceComponent_Conditional_6_Conditional_17_For_15_Template, 2, 3, "button", 19, _forTrack1);
|
|
2238
2222
|
i0.ɵɵelementEnd()();
|
|
2239
|
-
i0.ɵɵconditionalCreate(16,
|
|
2240
|
-
i0.ɵɵelementStart(17, "div",
|
|
2241
|
-
i0.ɵɵelement(19, "i",
|
|
2223
|
+
i0.ɵɵconditionalCreate(16, AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_16_Template, 3, 0, "div", 255);
|
|
2224
|
+
i0.ɵɵelementStart(17, "div", 119)(18, "h3");
|
|
2225
|
+
i0.ɵɵelement(19, "i", 82);
|
|
2242
2226
|
i0.ɵɵtext(20, " Cost Breakdown by Run");
|
|
2243
2227
|
i0.ɵɵelementEnd();
|
|
2244
|
-
i0.ɵɵconditionalCreate(21,
|
|
2228
|
+
i0.ɵɵconditionalCreate(21, AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_21_Template, 17, 0, "div", 117)(22, AnalyticsResourceComponent_Conditional_6_Conditional_17_Conditional_22_Template, 6, 0, "div", 118);
|
|
2245
2229
|
i0.ɵɵelementEnd()();
|
|
2246
2230
|
} if (rf & 2) {
|
|
2247
|
-
const
|
|
2231
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
2248
2232
|
i0.ɵɵadvance(14);
|
|
2249
|
-
i0.ɵɵrepeater(
|
|
2233
|
+
i0.ɵɵrepeater(ctx_r1.DateRanges);
|
|
2250
2234
|
i0.ɵɵadvance(2);
|
|
2251
|
-
i0.ɵɵconditional(
|
|
2235
|
+
i0.ɵɵconditional(ctx_r1.CostKPIs.length > 0 ? 16 : -1);
|
|
2252
2236
|
i0.ɵɵadvance(5);
|
|
2253
|
-
i0.ɵɵconditional(
|
|
2237
|
+
i0.ɵɵconditional(ctx_r1.CostPerRunRows.length > 0 ? 21 : 22);
|
|
2254
2238
|
} }
|
|
2255
|
-
function
|
|
2256
|
-
|
|
2257
|
-
i0.ɵɵ
|
|
2258
|
-
i0.ɵɵ
|
|
2259
|
-
i0.ɵɵ
|
|
2260
|
-
i0.ɵɵ
|
|
2261
|
-
i0.ɵɵ
|
|
2262
|
-
i0.ɵɵelementEnd();
|
|
2263
|
-
i0.ɵɵ
|
|
2264
|
-
i0.ɵɵ
|
|
2265
|
-
i0.ɵɵ
|
|
2266
|
-
i0.ɵɵ
|
|
2267
|
-
i0.ɵɵ
|
|
2268
|
-
i0.ɵɵ
|
|
2269
|
-
i0.ɵɵ
|
|
2270
|
-
i0.ɵɵconditionalCreate(
|
|
2271
|
-
i0.ɵɵ
|
|
2272
|
-
i0.ɵɵ
|
|
2273
|
-
i0.ɵɵ
|
|
2274
|
-
i0.ɵɵ
|
|
2275
|
-
i0.ɵɵelementEnd()();
|
|
2276
|
-
i0.ɵɵelementStart(21, "div", 16);
|
|
2277
|
-
i0.ɵɵconditionalCreate(22, AnalyticsResourceComponent_Conditional_1_Conditional_22_Template, 98, 7, "section", 17);
|
|
2278
|
-
i0.ɵɵconditionalCreate(23, AnalyticsResourceComponent_Conditional_1_Conditional_23_Template, 28, 9, "section", 17);
|
|
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);
|
|
2283
|
-
i0.ɵɵelementEnd()();
|
|
2239
|
+
function AnalyticsResourceComponent_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
2240
|
+
const _r1 = i0.ɵɵgetCurrentView();
|
|
2241
|
+
i0.ɵɵelementStart(0, "div", 5)(1, "mj-left-nav", 7);
|
|
2242
|
+
i0.ɵɵlistener("ItemClicked", function AnalyticsResourceComponent_Conditional_6_Template_mj_left_nav_ItemClicked_1_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onNavItemClicked($event)); });
|
|
2243
|
+
i0.ɵɵelementStart(2, "div", 8)(3, "h3");
|
|
2244
|
+
i0.ɵɵelement(4, "i", 9);
|
|
2245
|
+
i0.ɵɵtext(5, " Trending Tags");
|
|
2246
|
+
i0.ɵɵelementEnd();
|
|
2247
|
+
i0.ɵɵelementStart(6, "div", 10);
|
|
2248
|
+
i0.ɵɵrepeaterCreate(7, AnalyticsResourceComponent_Conditional_6_For_8_Template, 2, 5, "span", 11, _forTrack0);
|
|
2249
|
+
i0.ɵɵconditionalCreate(9, AnalyticsResourceComponent_Conditional_6_Conditional_9_Template, 2, 0, "span", 12);
|
|
2250
|
+
i0.ɵɵelementEnd()()();
|
|
2251
|
+
i0.ɵɵelementStart(10, "mj-left-nav-content")(11, "div", 13);
|
|
2252
|
+
i0.ɵɵconditionalCreate(12, AnalyticsResourceComponent_Conditional_6_Conditional_12_Template, 98, 7, "section", 14);
|
|
2253
|
+
i0.ɵɵconditionalCreate(13, AnalyticsResourceComponent_Conditional_6_Conditional_13_Template, 28, 9, "section", 14);
|
|
2254
|
+
i0.ɵɵconditionalCreate(14, AnalyticsResourceComponent_Conditional_6_Conditional_14_Template, 14, 4, "section", 14);
|
|
2255
|
+
i0.ɵɵconditionalCreate(15, AnalyticsResourceComponent_Conditional_6_Conditional_15_Template, 54, 8, "section", 14);
|
|
2256
|
+
i0.ɵɵconditionalCreate(16, AnalyticsResourceComponent_Conditional_6_Conditional_16_Template, 28, 5, "section", 14);
|
|
2257
|
+
i0.ɵɵconditionalCreate(17, AnalyticsResourceComponent_Conditional_6_Conditional_17_Template, 23, 2, "section", 14);
|
|
2258
|
+
i0.ɵɵelementEnd()()();
|
|
2284
2259
|
} if (rf & 2) {
|
|
2285
|
-
const
|
|
2286
|
-
i0.ɵɵadvance(7);
|
|
2287
|
-
i0.ɵɵrepeater(ctx_r2.NavItems);
|
|
2288
|
-
i0.ɵɵadvance(8);
|
|
2289
|
-
i0.ɵɵrepeater(ctx_r2.TrendingTags);
|
|
2290
|
-
i0.ɵɵadvance(2);
|
|
2291
|
-
i0.ɵɵconditional(ctx_r2.TrendingTags.length === 0 ? 17 : -1);
|
|
2292
|
-
i0.ɵɵadvance(2);
|
|
2293
|
-
i0.ɵɵclassProp("status-dot-error", !ctx_r2.PipelineStatusOk);
|
|
2260
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
2294
2261
|
i0.ɵɵadvance();
|
|
2295
|
-
i0.ɵɵ
|
|
2262
|
+
i0.ɵɵproperty("Sections", ctx_r1.navSections)("ActiveId", ctx_r1.ActiveTab);
|
|
2263
|
+
i0.ɵɵadvance(6);
|
|
2264
|
+
i0.ɵɵrepeater(ctx_r1.TrendingTags);
|
|
2296
2265
|
i0.ɵɵadvance(2);
|
|
2297
|
-
i0.ɵɵconditional(
|
|
2266
|
+
i0.ɵɵconditional(ctx_r1.TrendingTags.length === 0 ? 9 : -1);
|
|
2267
|
+
i0.ɵɵadvance(3);
|
|
2268
|
+
i0.ɵɵconditional(ctx_r1.ActiveTab === "overview" ? 12 : -1);
|
|
2298
2269
|
i0.ɵɵadvance();
|
|
2299
|
-
i0.ɵɵconditional(
|
|
2270
|
+
i0.ɵɵconditional(ctx_r1.ActiveTab === "tags" ? 13 : -1);
|
|
2300
2271
|
i0.ɵɵadvance();
|
|
2301
|
-
i0.ɵɵconditional(
|
|
2272
|
+
i0.ɵɵconditional(ctx_r1.ActiveTab === "sources" ? 14 : -1);
|
|
2302
2273
|
i0.ɵɵadvance();
|
|
2303
|
-
i0.ɵɵconditional(
|
|
2274
|
+
i0.ɵɵconditional(ctx_r1.ActiveTab === "pipeline" ? 15 : -1);
|
|
2304
2275
|
i0.ɵɵadvance();
|
|
2305
|
-
i0.ɵɵconditional(
|
|
2276
|
+
i0.ɵɵconditional(ctx_r1.ActiveTab === "quality" ? 16 : -1);
|
|
2306
2277
|
i0.ɵɵadvance();
|
|
2307
|
-
i0.ɵɵconditional(
|
|
2278
|
+
i0.ɵɵconditional(ctx_r1.ActiveTab === "cost" ? 17 : -1);
|
|
2308
2279
|
} }
|
|
2309
2280
|
// ================================================================
|
|
2310
2281
|
// Component
|
|
@@ -2546,6 +2517,16 @@ let AnalyticsResourceComponent = class AnalyticsResourceComponent extends BaseRe
|
|
|
2546
2517
|
// ================================================================
|
|
2547
2518
|
// Public Methods
|
|
2548
2519
|
// ================================================================
|
|
2520
|
+
/** Wraps `NavItems` for `<mj-left-nav>`. */
|
|
2521
|
+
get navSections() {
|
|
2522
|
+
return [{
|
|
2523
|
+
items: this.NavItems.map(n => ({ id: n.ID, label: n.Label, icon: n.Icon }))
|
|
2524
|
+
}];
|
|
2525
|
+
}
|
|
2526
|
+
/** Adapter for `<mj-left-nav>`'s `(ItemClicked)` output. */
|
|
2527
|
+
onNavItemClicked(item) {
|
|
2528
|
+
this.SelectTab(item.id);
|
|
2529
|
+
}
|
|
2549
2530
|
SelectTab(tabId) {
|
|
2550
2531
|
this.ActiveTab = tabId;
|
|
2551
2532
|
this.CloseDrillDown();
|
|
@@ -4245,11 +4226,21 @@ let AnalyticsResourceComponent = class AnalyticsResourceComponent extends BaseRe
|
|
|
4245
4226
|
}
|
|
4246
4227
|
}
|
|
4247
4228
|
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.ɵɵ
|
|
4229
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AnalyticsResourceComponent, selectors: [["app-analytics-resource"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 7, vars: 5, consts: [["Title", "Knowledge Hub Analytics", "Icon", "fa-solid fa-chart-line", "Subtitle", "Pipeline health, trending tags, and content insights"], ["meta", ""], [3, "Label", "Variant"], [3, "Flex", "Padding"], [1, "analytics-loading"], [1, "analytics-layout"], ["text", "Loading analytics data...", "size", "medium"], [3, "ItemClicked", "Sections", "ActiveId"], ["footer", "", 1, "trending-section"], [1, "fa-solid", "fa-arrow-trend-up"], [1, "tag-cloud"], [3, "font-size", "font-weight"], [1, "no-trending"], [1, "main-content"], [1, "tab-section"], [1, "tab-section-header"], [1, "fa-solid", "fa-grip"], [1, "filter-bar"], [1, "date-chips"], [1, "date-chip", 3, "active"], [1, "filter-dropdown", 3, "ngModelChange", "ngModel"], [3, "value"], [1, "kpi-row"], [1, "kpi-card"], [1, "drill-down-panel"], [1, "cards-grid"], [1, "widget-card", 3, "click"], [1, "widget-title"], [1, "fa-solid", "fa-chart-line"], [1, "bar-chart"], [1, "bar-col"], [1, "fa-solid", "fa-bullseye"], [1, "rings-grid"], [1, "ring-item"], [1, "widget-empty"], [1, "fa-solid", "fa-gauge-high"], [1, "gauge-container"], ["width", "180", "height", "110", "viewBox", "0 0 180 110"], ["d", "M 20 95 A 70 70 0 0 1 160 95", "fill", "none", "stroke", "var(--mj-border-default)", "stroke-width", "14", "stroke-linecap", "round"], ["d", "M 20 95 A 70 70 0 0 1 48.6 35.2", "fill", "none", "stroke", "var(--mj-status-error)", "stroke-width", "14", "stroke-linecap", "round", "opacity", "0.3"], ["d", "M 48.6 35.2 A 70 70 0 0 1 118 28", "fill", "none", "stroke", "var(--mj-status-warning)", "stroke-width", "14", "opacity", "0.3"], ["d", "M 118 28 A 70 70 0 0 1 160 95", "fill", "none", "stroke", "var(--mj-status-success)", "stroke-width", "14", "stroke-linecap", "round", "opacity", "0.3"], ["x", "90", "y", "88", "text-anchor", "middle", "font-size", "26", "font-weight", "800", "fill", "var(--mj-text-primary)"], ["x", "90", "y", "105", "text-anchor", "middle", "font-size", "10", "fill", "var(--mj-text-muted)"], ["x", "28", "y", "108", "font-size", "8", "fill", "var(--mj-text-muted)"], ["x", "86", "y", "18", "font-size", "8", "fill", "var(--mj-text-muted)"], ["x", "155", "y", "108", "font-size", "8", "fill", "var(--mj-text-muted)"], [1, "mini-histogram"], [1, "mini-hist-bar", 3, "height", "background", "title"], [1, "mini-hist-label"], [1, "fa-solid", "fa-ranking-star"], [1, "h-bar-list"], [1, "h-bar-row"], [1, "widget-footnote"], [1, "fa-solid", "fa-bolt"], [1, "throughput-bars"], [1, "tp-bar", 3, "height", "background"], [1, "legend"], [1, "legend-item"], [1, "legend-dot", 2, "background", "var(--mj-status-success)"], [1, "legend-dot", 2, "background", "var(--mj-status-error)"], [1, "fa-solid", "fa-sitemap"], [1, "taxonomy-ring-container"], ["width", "140", "height", "140", "viewBox", "0 0 140 140"], ["cx", "70", "cy", "70", "r", "54", "fill", "none", "stroke", "var(--mj-border-default)", "stroke-width", "18"], ["cx", "70", "cy", "70", "r", "54", "fill", "none", "stroke-width", "18", "transform", "rotate(-90 70 70)"], ["x", "70", "y", "66", "text-anchor", "middle", "font-size", "22", "font-weight", "800", "fill", "var(--mj-text-primary)"], ["x", "70", "y", "82", "text-anchor", "middle", "font-size", "10", "fill", "var(--mj-text-muted)"], [1, "taxonomy-stats"], [1, "tax-stat", 3, "background", "color"], [1, "date-chip", 3, "click"], [1, "kpi-card", 3, "click"], [1, "kpi-label"], [1, "kpi-value"], [1, "kpi-delta"], [1, "fa-solid", "fa-arrow-up", 2, "font-size", "9px"], [1, "fa-solid", "fa-arrow-down", 2, "font-size", "9px"], [1, "kpi-sparkline"], ["width", "64", "height", "28", "viewBox", "0 0 64 28"], ["fill", "none", "stroke-width", "2", "stroke-linecap", "round", "stroke-linejoin", "round"], [1, "drill-down-header"], [1, "drill-down-title"], [1, "fa-solid", "fa-table"], [1, "drill-down-header-actions"], ["title", "Export CSV", 1, "drill-export-btn"], ["aria-label", "Close drill-down", 1, "drill-down-close", 3, "click"], [1, "fa-solid", "fa-times"], ["text", "Loading details...", "size", "small"], [1, "drill-down-table-wrap"], [1, "drill-down-empty"], ["title", "Export CSV", 1, "drill-export-btn", 3, "click"], [1, "fa-solid", "fa-download"], [1, "data-table"], [1, "drill-action-col"], ["title", "Open record", 1, "drill-open-btn"], ["title", "Open record", 1, "drill-open-btn", 3, "click"], [1, "fa-solid", "fa-arrow-up-right-from-square"], [1, "bar-value"], [1, "bar", 2, "background", "var(--mj-brand-primary)"], [1, "bar-label"], ["width", "48", "height", "48", "viewBox", "0 0 48 48"], ["cx", "24", "cy", "24", "r", "20", "fill", "none", "stroke", "var(--mj-border-default)", "stroke-width", "5"], ["cx", "24", "cy", "24", "r", "20", "fill", "none", "stroke-width", "5", "stroke-dashoffset", "31.4", "stroke-linecap", "round", "transform", "rotate(-90 24 24)"], ["x", "24", "y", "26", "text-anchor", "middle", "font-size", "11", "font-weight", "700", "fill", "var(--mj-text-primary)"], [1, "ring-label"], [1, "ring-stat"], [1, "mini-hist-bar", 3, "title"], [1, "h-bar-name"], [1, "h-bar-track"], [1, "h-bar-fill"], [1, "tp-bar"], [1, "tp-bar-label"], [1, "tax-stat"], [1, "fa-solid", "fa-tags"], [1, "sub-section", 2, "margin-top", "0"], [1, "sub-section-header"], [1, "fa-solid", "fa-trophy"], [1, "table-scroll"], [1, "empty-state"], [1, "sub-section"], [1, "sub-section", "co-occurrence-section"], [1, "fa-solid", "fa-link"], [1, "co-occurrence-actions"], ["title", "Last computed timestamp", 1, "co-occurrence-staleness"], ["title", "Recompute co-occurrence data", 1, "drill-export-btn", 3, "click", "disabled"], [1, "num"], [2, "cursor", "pointer"], [2, "cursor", "pointer", 3, "click"], [1, "weight-bar"], ["width", "48", "height", "16"], ["fill", "none", "stroke-width", "1.5", "stroke-linecap", "round"], [1, "muted"], ["aria-label", "Open record", "title", "Open record", 1, "drill-open-btn"], ["aria-label", "Open record", "title", "Open record", 1, "drill-open-btn", 3, "click"], [1, "fa-solid", "fa-chart-bar"], [1, "stacked-bar-chart"], [1, "stacked-row"], [1, "legend", 2, "margin-top", "12px"], [1, "stacked-label"], [1, "stacked-track"], [1, "stacked-seg", 3, "width", "background", "title"], [1, "stacked-seg", 3, "title"], [1, "legend-dot"], [1, "fa-solid", "fa-layer-group"], [1, "v-bar-chart"], [1, "v-bar-col"], [1, "chart-footnote"], [1, "v-bar", 2, "background", "var(--mj-brand-primary)"], [1, "v-bar-label"], [1, "fa-regular", "fa-clock"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-arrows-rotate"], [1, "weight-bar", 2, "background", "var(--mj-status-info)"], [1, "fa-solid", "fa-database"], [2, "cursor", "pointer", 3, "source-selected"], [2, "margin-right", "4px"], [1, "badge"], [1, "fa-solid", "fa-circle", 2, "font-size", "6px", "margin-right", "3px"], [1, "fa-solid", "fa-chart-area"], [1, "two-col"], [1, "widget-card"], [1, "bar-chart", 2, "height", "100px"], [1, "fa-solid", "fa-star-half-stroke"], [1, "quality-bands"], [1, "quality-band-row"], [1, "source-quality-note"], [1, "fa-solid", "fa-circle-info", 2, "color", "var(--mj-status-info)", "margin-right", "4px"], [1, "bar-value", 2, "font-size", "9px"], [1, "quality-band-label"], [1, "quality-band-track"], [1, "quality-band-fill"], [1, "fa-solid", "fa-heart-pulse"], [1, "source-health-grid"], [1, "source-health-card", 3, "border-top-color"], [1, "source-health-card"], [1, "health-card-name"], [1, "health-card-value"], [1, "health-card-label"], [1, "fa-solid", "fa-gears"], [1, "pipeline-throughput-bars"], [1, "pipeline-bar", 2, "cursor", "pointer", 3, "height", "background", "opacity"], [1, "pipeline-date-labels"], [1, "fa-solid", "fa-stopwatch"], [1, "stage-bars"], [1, "stage-row"], [1, "stage-summary"], [1, "stage-warning"], [1, "success-rate-display"], [1, "success-rate-stat"], [1, "success-rate-value", 2, "color", "var(--mj-status-success)"], [1, "success-rate-label"], [1, "success-rate-value", 2, "color", "var(--mj-status-error)"], [1, "success-rate-value", 2, "color", "var(--mj-text-primary)"], [1, "pipeline-bar", 2, "cursor", "pointer", 3, "click"], [1, "stage-name"], [1, "stage-track"], [1, "stage-fill"], [1, "stage-time"], [1, "fa-solid", "fa-triangle-exclamation", 2, "color", "var(--mj-status-warning)", "margin-right", "4px"], [1, "fa-solid", "fa-spinner"], [1, "monospace-cell"], [1, "progress-track"], [1, "progress-fill", 2, "background", "var(--mj-brand-primary)"], [1, "progress-text"], [1, "fa-solid", "fa-triangle-exclamation"], [1, "error-log"], [1, "error-entry"], [1, "error-time"], [1, "error-source"], [1, "error-msg"], [1, "fa-solid", "fa-circle-check"], [1, "fa-solid", "fa-chart-column"], [1, "histogram"], [1, "hist-bar-col", 2, "cursor", "pointer"], [1, "confidence-stats"], [1, "fa-solid", "fa-robot"], [1, "model-grid"], [1, "model-card"], [1, "model-recommendation"], [1, "hist-bar-col", 2, "cursor", "pointer", 3, "click"], [1, "hist-bar"], [1, "hist-label"], [1, "fa-solid", "fa-weight-scale"], [1, "grouped-bar-chart"], [1, "grouped-col"], [1, "legend", 2, "justify-content", "center", "margin-top", "14px"], [1, "grouped-bars"], [1, "g-bar", 2, "background", "var(--mj-brand-primary)", 3, "title"], [1, "g-bar", 2, "background", "var(--mj-status-info)", 3, "title"], [1, "g-bar", 2, "background", "var(--mj-text-muted)", 3, "title"], [1, "grouped-label"], [1, "accuracy-chart"], [1, "accuracy-y-labels"], [1, "accuracy-area"], [1, "accuracy-grid-line", 2, "top", "33%"], [1, "accuracy-grid-line", 2, "top", "66%"], ["width", "100%", "height", "110", "viewBox", "0 0 400 110", "preserveAspectRatio", "none", 1, "accuracy-svg"], ["fill", "none", "stroke", "var(--mj-brand-primary)", "stroke-width", "2.5", "vector-effect", "non-scaling-stroke", "stroke-linecap", "round", "stroke-linejoin", "round"], ["r", "3", "fill", "var(--mj-brand-primary)"], [1, "accuracy-x-labels"], [1, "accuracy-trend-text"], [1, "fa-solid", "fa-arrow-trend-up", 2, "margin-right", "4px"], [1, "fa-solid", "fa-exclamation-triangle"], [1, "model-name"], ["width", "80", "height", "80", "viewBox", "0 0 80 80", 2, "margin", "4px 0"], ["cx", "40", "cy", "40", "r", "32", "fill", "none", "stroke", "var(--mj-border-default)", "stroke-width", "8"], ["cx", "40", "cy", "40", "r", "32", "fill", "none", "stroke-width", "8", "stroke-dashoffset", "50", "transform", "rotate(-90 40 40)", "stroke-linecap", "round"], [1, "model-score"], [1, "model-detail"], [1, "model-detail", 2, "font-weight", "600"], [1, "fa-solid", "fa-lightbulb", 2, "color", "var(--mj-status-warning)"], [1, "fa-solid", "fa-coins"], [1, "tab-header-actions"], ["title", "Print (PDF alternative)", 1, "drill-export-btn", 3, "click"], [1, "fa-solid", "fa-print"], [1, "cost-kpi-row"], [1, "cost-kpi-card"], [1, "cost-kpi-icon"], [1, "cost-kpi-value"], [1, "cost-kpi-label"], [1, "cost-kpi-sub"], [1, "empty-state-hint"]], template: function AnalyticsResourceComponent_Template(rf, ctx) { if (rf & 1) {
|
|
4230
|
+
i0.ɵɵelementStart(0, "mj-page-layout")(1, "mj-page-header", 0)(2, "div", 1);
|
|
4231
|
+
i0.ɵɵelement(3, "mj-stat-badge", 2);
|
|
4232
|
+
i0.ɵɵelementEnd()();
|
|
4233
|
+
i0.ɵɵelementStart(4, "mj-page-body", 3);
|
|
4234
|
+
i0.ɵɵconditionalCreate(5, AnalyticsResourceComponent_Conditional_5_Template, 2, 0, "div", 4)(6, AnalyticsResourceComponent_Conditional_6_Template, 18, 9, "div", 5);
|
|
4235
|
+
i0.ɵɵelementEnd()();
|
|
4250
4236
|
} 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}"] });
|
|
4237
|
+
i0.ɵɵadvance(3);
|
|
4238
|
+
i0.ɵɵproperty("Label", ctx.PipelineStatusText)("Variant", ctx.PipelineStatusOk ? "success" : "error");
|
|
4239
|
+
i0.ɵɵadvance();
|
|
4240
|
+
i0.ɵɵproperty("Flex", true)("Padding", false);
|
|
4241
|
+
i0.ɵɵadvance();
|
|
4242
|
+
i0.ɵɵconditional(ctx.IsLoading ? 5 : 6);
|
|
4243
|
+
} }, dependencies: [i1.NgSelectOption, i1.ɵNgSelectMultipleOption, i1.SelectControlValueAccessor, i1.NgControlStatus, i1.NgModel, i2.LoadingComponent, i3.MJPageHeaderComponent, i3.MJPageLayoutComponent, i3.MJPageBodyComponent, i3.MJLeftNavComponent, i3.MJLeftNavContentComponent, i3.MJStatBadgeComponent], styles: ["\n\n\n\n\n.analytics-loading[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 400px;\n}\n\n\n\n\n\n\n\n\n.analytics-layout[_ngcontent-%COMP%] {\n display: flex;\n flex: 1;\n min-height: 0;\n}\n\n.trending-section[_ngcontent-%COMP%] {\n padding: 12px 16px 16px;\n}\n\n.trending-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--mj-text-muted);\n margin: 0 0 10px;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.tag-cloud[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 4px 6px;\n line-height: 1.7;\n}\n\n.tag-cloud[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n cursor: pointer;\n transition: opacity 0.15s;\n}\n\n.tag-cloud[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:hover {\n opacity: 0.7;\n}\n\n.no-trending[_ngcontent-%COMP%] {\n color: var(--mj-text-muted) !important;\n font-size: 12px !important;\n font-style: italic;\n}\n\n.pipeline-status[_ngcontent-%COMP%] {\n padding: 12px 16px;\n border-top: 1px solid var(--mj-border-default);\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 11.5px;\n color: var(--mj-text-muted);\n}\n\n.status-dot[_ngcontent-%COMP%] {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: var(--mj-status-success);\n flex-shrink: 0;\n}\n\n.status-dot-error[_ngcontent-%COMP%] {\n background: var(--mj-status-error);\n}\n\n\n\n.main-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n min-width: 0;\n}\n\n.tab-section[_ngcontent-%COMP%] {\n padding: 28px 32px 40px;\n}\n\n.tab-section-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-bottom: 20px;\n padding-bottom: 12px;\n border-bottom: 2px solid var(--mj-brand-primary);\n}\n\n.tab-section-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 18px;\n color: var(--mj-brand-primary);\n}\n\n.tab-section-header[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0;\n}\n\n\n\n.filter-bar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 20px;\n flex-wrap: wrap;\n}\n\n.date-chips[_ngcontent-%COMP%] {\n display: flex;\n gap: 0;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.date-chip[_ngcontent-%COMP%] {\n padding: 6px 14px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface);\n cursor: pointer;\n border: none;\n border-right: 1px solid var(--mj-border-default);\n transition: all 0.15s;\n font-family: inherit;\n}\n\n.date-chip[_ngcontent-%COMP%]:last-child {\n border-right: none;\n}\n\n.date-chip[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.date-chip.active[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.filter-dropdown[_ngcontent-%COMP%] {\n padding: 6px 12px;\n font-size: 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n font-family: inherit;\n}\n\n\n\n.kpi-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 16px;\n margin-bottom: 20px;\n}\n\n.kpi-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 16px 18px;\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n transition: transform 0.15s, box-shadow 0.15s;\n cursor: pointer;\n}\n\n.kpi-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n}\n\n.kpi-label[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-muted);\n margin-bottom: 4px;\n}\n\n.kpi-value[_ngcontent-%COMP%] {\n font-size: 28px;\n font-weight: 700;\n color: var(--mj-text-primary);\n line-height: 1.1;\n}\n\n.kpi-delta[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 500;\n margin-top: 4px;\n color: var(--mj-text-muted);\n}\n\n.kpi-delta.up[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.kpi-delta.down[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.kpi-sparkline[_ngcontent-%COMP%] {\n flex-shrink: 0;\n margin-left: 12px;\n margin-top: 6px;\n}\n\n\n\n.cards-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 16px;\n}\n\n.widget-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 18px 20px;\n transition: transform 0.15s, box-shadow 0.15s;\n cursor: pointer;\n}\n\n.widget-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n}\n\n.widget-title[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 14px;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.widget-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 12px;\n}\n\n.widget-empty[_ngcontent-%COMP%] {\n text-align: center;\n color: var(--mj-text-muted);\n font-size: 12px;\n padding: 20px;\n}\n\n.widget-footnote[_ngcontent-%COMP%] {\n text-align: center;\n font-size: 10px;\n color: var(--mj-text-muted);\n margin-top: 10px;\n}\n\n\n\n.bar-chart[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n gap: 8px;\n height: 120px;\n padding-top: 10px;\n}\n\n.bar-col[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 100%;\n justify-content: flex-end;\n}\n\n.bar[_ngcontent-%COMP%] {\n width: 100%;\n border-radius: 4px 4px 0 0;\n transition: height 0.3s;\n min-height: 2px;\n}\n\n.bar-label[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-text-muted);\n margin-top: 6px;\n}\n\n.bar-value[_ngcontent-%COMP%] {\n font-size: 10px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 4px;\n}\n\n\n\n.rings-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 12px;\n}\n\n.ring-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 6px 0;\n}\n\n.ring-label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-primary);\n font-weight: 500;\n}\n\n.ring-stat[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n\n\n.gauge-container[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n margin-bottom: 8px;\n}\n\n\n\n.mini-histogram[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n gap: 3px;\n height: 32px;\n justify-content: center;\n}\n\n.mini-hist-bar[_ngcontent-%COMP%] {\n width: 14px;\n border-radius: 2px;\n}\n\n.mini-hist-label[_ngcontent-%COMP%] {\n text-align: center;\n font-size: 10px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n}\n\n\n\n.h-bar-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.h-bar-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.h-bar-name[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n width: 100px;\n flex-shrink: 0;\n text-align: right;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.h-bar-track[_ngcontent-%COMP%] {\n flex: 1;\n height: 20px;\n background: var(--mj-bg-surface-card);\n border-radius: 4px;\n overflow: hidden;\n}\n\n.h-bar-fill[_ngcontent-%COMP%] {\n height: 100%;\n border-radius: 4px;\n display: flex;\n align-items: center;\n padding-left: 8px;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n min-width: 36px;\n}\n\n\n\n.throughput-bars[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n gap: 4px;\n height: 110px;\n margin-bottom: 22px;\n}\n\n.tp-bar[_ngcontent-%COMP%] {\n flex: 1;\n border-radius: 3px 3px 0 0;\n position: relative;\n min-height: 4px;\n}\n\n.tp-bar-label[_ngcontent-%COMP%] {\n position: absolute;\n bottom: -18px;\n left: 50%;\n transform: translateX(-50%);\n font-size: 8px;\n color: var(--mj-text-muted);\n white-space: nowrap;\n}\n\n\n\n.taxonomy-ring-container[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n}\n\n.taxonomy-stats[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n margin-top: 12px;\n}\n\n.tax-stat[_ngcontent-%COMP%] {\n flex: 1;\n text-align: center;\n padding: 8px 4px;\n border-radius: 6px;\n font-size: 20px;\n font-weight: 700;\n}\n\n.tax-stat[_ngcontent-%COMP%] small[_ngcontent-%COMP%] {\n display: block;\n font-size: 10px;\n font-weight: 500;\n margin-top: 2px;\n}\n\n\n\n.legend[_ngcontent-%COMP%] {\n display: flex;\n gap: 16px;\n margin-top: 10px;\n flex-wrap: wrap;\n justify-content: center;\n}\n\n.legend-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 5px;\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n.legend-dot[_ngcontent-%COMP%] {\n width: 10px;\n height: 10px;\n border-radius: 3px;\n flex-shrink: 0;\n}\n\n\n\n.table-scroll[_ngcontent-%COMP%] {\n overflow-x: auto;\n}\n\n.data-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n font-size: 12.5px;\n}\n\n.data-table[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n text-align: left;\n padding: 10px 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-text-muted);\n border-bottom: 2px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n white-space: nowrap;\n}\n\n.data-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 10px 12px;\n border-bottom: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-primary);\n vertical-align: middle;\n}\n\n.data-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.data-table[_ngcontent-%COMP%] .num[_ngcontent-%COMP%] {\n text-align: right;\n font-variant-numeric: tabular-nums;\n}\n\n.muted[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n.monospace-cell[_ngcontent-%COMP%] {\n font-family: monospace;\n font-size: 11px;\n color: var(--mj-brand-primary);\n}\n\n.weight-bar[_ngcontent-%COMP%] {\n display: inline-block;\n height: 6px;\n border-radius: 3px;\n vertical-align: middle;\n margin-right: 6px;\n}\n\n\n\n.badge[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 2px 8px;\n border-radius: 10px;\n font-size: 10.5px;\n font-weight: 600;\n}\n\n.badge-success[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.badge-warning[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.badge-error[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.badge-info[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-info) 12%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n}\n\n\n\n.sub-section[_ngcontent-%COMP%] {\n margin-top: 24px;\n}\n\n.sub-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 12px;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.sub-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-brand-primary);\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 3rem 2rem;\n text-align: center;\n gap: 0.75rem;\n border: 2px dashed var(--mj-border-default);\n border-radius: 12px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 2.5rem;\n color: var(--mj-text-disabled);\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 0.85rem;\n max-width: 400px;\n}\n\n\n\n.drill-down-panel[_ngcontent-%COMP%] {\n margin-top: 16px;\n margin-bottom: 16px;\n background: var(--mj-bg-surface);\n border: 2px solid var(--mj-brand-primary);\n border-radius: 10px;\n overflow: hidden;\n animation: _ngcontent-%COMP%_slideDown 0.2s ease-out;\n}\n\n@keyframes _ngcontent-%COMP%_slideDown {\n from {\n opacity: 0;\n max-height: 0;\n }\n to {\n opacity: 1;\n max-height: 600px;\n }\n}\n\n.drill-down-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 16px;\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.drill-down-title[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-brand-primary);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.drill-down-close[_ngcontent-%COMP%] {\n border: none;\n background: transparent;\n color: var(--mj-text-muted);\n cursor: pointer;\n font-size: 14px;\n padding: 4px 8px;\n border-radius: 4px;\n transition: all 0.15s;\n}\n\n.drill-down-close[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.drill-down-table-wrap[_ngcontent-%COMP%] {\n max-height: 400px;\n overflow-y: auto;\n padding: 8px;\n}\n\n.drill-action-col[_ngcontent-%COMP%] {\n width: 40px;\n text-align: center;\n padding: 6px !important;\n}\n\n.drill-open-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n border: 1px solid var(--mj-border-default);\n border-radius: 5px;\n background: transparent;\n color: var(--mj-text-muted);\n font-size: 10px;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.drill-open-btn[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.drill-down-header-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.drill-export-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 5px;\n background: transparent;\n color: var(--mj-text-secondary);\n font-size: 11px;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.drill-export-btn[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.sub-section-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 0;\n}\n\n.sub-section-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n}\n\n.drill-down-empty[_ngcontent-%COMP%] {\n padding: 24px;\n text-align: center;\n color: var(--mj-text-muted);\n font-size: 13px;\n}\n\n\n\n.stacked-bar-chart[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.stacked-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.stacked-label[_ngcontent-%COMP%] {\n width: 90px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n text-align: right;\n flex-shrink: 0;\n}\n\n.stacked-track[_ngcontent-%COMP%] {\n flex: 1;\n height: 22px;\n display: flex;\n border-radius: 4px;\n overflow: hidden;\n}\n\n.stacked-seg[_ngcontent-%COMP%] {\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 9px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n min-width: 20px;\n}\n\n\n\n.v-bar-chart[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n gap: 24px;\n height: 140px;\n padding-top: 10px;\n justify-content: center;\n}\n\n.v-bar-col[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 100%;\n justify-content: flex-end;\n min-width: 60px;\n}\n\n.v-bar[_ngcontent-%COMP%] {\n width: 48px;\n border-radius: 4px 4px 0 0;\n display: flex;\n align-items: flex-start;\n justify-content: center;\n padding-top: 4px;\n font-size: 11px;\n font-weight: 700;\n color: var(--mj-text-inverse);\n}\n\n.v-bar-label[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 8px;\n text-align: center;\n}\n\n.chart-footnote[_ngcontent-%COMP%] {\n text-align: center;\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 14px;\n}\n\n\n\n.two-col[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 20px;\n}\n\n\n\n.source-selected[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 5%, var(--mj-bg-surface));\n}\n\n\n\n.quality-bands[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.quality-band-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.quality-band-label[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n width: 65px;\n text-align: right;\n flex-shrink: 0;\n}\n\n.quality-band-track[_ngcontent-%COMP%] {\n flex: 1;\n height: 18px;\n background: var(--mj-bg-surface-card);\n border-radius: 4px;\n overflow: hidden;\n}\n\n.quality-band-fill[_ngcontent-%COMP%] {\n height: 100%;\n border-radius: 4px;\n display: flex;\n align-items: center;\n padding-left: 8px;\n font-size: 10px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n min-width: 30px;\n}\n\n.source-quality-note[_ngcontent-%COMP%] {\n margin-top: 14px;\n padding: 10px;\n background: var(--mj-bg-surface-card);\n border-radius: 6px;\n font-size: 11px;\n color: var(--mj-text-secondary);\n}\n\n\n\n.source-health-grid[_ngcontent-%COMP%] {\n display: grid;\n gap: 12px;\n}\n\n.source-health-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 14px;\n text-align: center;\n border-top: 3px solid;\n}\n\n.health-card-name[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-bottom: 4px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.health-card-value[_ngcontent-%COMP%] {\n font-size: 22px;\n font-weight: 700;\n}\n\n.health-card-label[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-text-muted);\n}\n\n\n\n.pipeline-throughput-bars[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n gap: 3px;\n height: 110px;\n}\n\n.pipeline-bar[_ngcontent-%COMP%] {\n flex: 1;\n border-radius: 2px 2px 0 0;\n min-height: 3px;\n}\n\n.pipeline-date-labels[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n margin-top: 6px;\n font-size: 10px;\n color: var(--mj-text-muted);\n}\n\n\n\n.stage-bars[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.stage-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.stage-name[_ngcontent-%COMP%] {\n width: 80px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n text-align: right;\n flex-shrink: 0;\n}\n\n.stage-track[_ngcontent-%COMP%] {\n flex: 1;\n height: 24px;\n background: var(--mj-bg-surface-card);\n border-radius: 4px;\n overflow: hidden;\n}\n\n.stage-fill[_ngcontent-%COMP%] {\n height: 100%;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: flex-end;\n padding-right: 8px;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n}\n\n.stage-time[_ngcontent-%COMP%] {\n width: 50px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-primary);\n text-align: right;\n flex-shrink: 0;\n}\n\n.stage-summary[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n margin-top: 14px;\n padding-top: 10px;\n border-top: 1px solid var(--mj-border-default);\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.stage-warning[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n\n\n.success-rate-display[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n gap: 48px;\n padding: 20px;\n}\n\n.success-rate-stat[_ngcontent-%COMP%] {\n text-align: center;\n}\n\n.success-rate-value[_ngcontent-%COMP%] {\n font-size: 32px;\n font-weight: 700;\n line-height: 1.1;\n}\n\n.success-rate-label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n}\n\n\n\n.progress-track[_ngcontent-%COMP%] {\n width: 100px;\n height: 6px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 3px;\n overflow: hidden;\n display: inline-block;\n vertical-align: middle;\n margin-right: 6px;\n}\n\n.progress-fill[_ngcontent-%COMP%] {\n height: 100%;\n border-radius: 3px;\n}\n\n.progress-text[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n}\n\n\n\n.error-log[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.error-entry[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n padding: 10px 14px;\n background: color-mix(in srgb, var(--mj-status-error) 4%, var(--mj-bg-surface));\n border-left: 3px solid var(--mj-status-error);\n border-radius: 0 6px 6px 0;\n font-size: 12px;\n}\n\n.error-time[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 11px;\n white-space: nowrap;\n flex-shrink: 0;\n width: 130px;\n}\n\n.error-source[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-weight: 600;\n flex-shrink: 0;\n width: 120px;\n}\n\n.error-msg[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n}\n\n\n\n.histogram[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n gap: 6px;\n height: 130px;\n padding-bottom: 24px;\n}\n\n.hist-bar-col[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 100%;\n justify-content: flex-end;\n}\n\n.hist-bar[_ngcontent-%COMP%] {\n width: 100%;\n border-radius: 3px 3px 0 0;\n display: flex;\n align-items: flex-start;\n justify-content: center;\n padding-top: 3px;\n font-size: 10px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n min-height: 2px;\n}\n\n.hist-label[_ngcontent-%COMP%] {\n font-size: 9px;\n color: var(--mj-text-muted);\n margin-top: 6px;\n text-align: center;\n}\n\n.confidence-stats[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n margin-top: 8px;\n padding: 10px;\n background: var(--mj-bg-surface-card);\n border-radius: 6px;\n font-size: 11px;\n color: var(--mj-text-muted);\n flex-wrap: wrap;\n gap: 8px;\n}\n\n\n\n.grouped-bar-chart[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n gap: 20px;\n height: 140px;\n justify-content: center;\n}\n\n.grouped-col[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 100%;\n justify-content: flex-end;\n}\n\n.grouped-bars[_ngcontent-%COMP%] {\n display: flex;\n gap: 3px;\n align-items: flex-end;\n height: 100%;\n}\n\n.g-bar[_ngcontent-%COMP%] {\n width: 18px;\n border-radius: 3px 3px 0 0;\n min-height: 2px;\n}\n\n.grouped-label[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-text-muted);\n margin-top: 6px;\n text-align: center;\n}\n\n\n\n.accuracy-chart[_ngcontent-%COMP%] {\n position: relative;\n display: flex;\n margin: 0 10px;\n}\n\n.accuracy-y-labels[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n font-size: 9px;\n color: var(--mj-text-muted);\n margin-right: 8px;\n height: 110px;\n}\n\n.accuracy-area[_ngcontent-%COMP%] {\n flex: 1;\n position: relative;\n height: 110px;\n border-left: 1px solid var(--mj-border-default);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.accuracy-grid-line[_ngcontent-%COMP%] {\n position: absolute;\n left: 0;\n right: 0;\n border-top: 1px dashed var(--mj-border-subtle);\n}\n\n.accuracy-svg[_ngcontent-%COMP%] {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n\n.accuracy-x-labels[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n margin-top: 8px;\n padding: 0 40px 0 40px;\n font-size: 10px;\n color: var(--mj-text-muted);\n}\n\n.accuracy-trend-text[_ngcontent-%COMP%] {\n text-align: center;\n margin-top: 10px;\n font-size: 12px;\n color: var(--mj-status-success);\n}\n\n\n\n.model-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 12px;\n}\n\n.model-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n padding: 14px;\n text-align: center;\n border: 1px solid var(--mj-border-default);\n}\n\n.model-name[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 8px;\n}\n\n.model-score[_ngcontent-%COMP%] {\n font-size: 28px;\n font-weight: 700;\n line-height: 1;\n}\n\n.model-detail[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n}\n\n.model-recommendation[_ngcontent-%COMP%] {\n margin-top: 14px;\n padding: 12px 16px;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: flex-start;\n gap: 8px;\n}\n\n\n\n@media (max-width: 1200px) {\n .cards-grid[_ngcontent-%COMP%] {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .kpi-row[_ngcontent-%COMP%] {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .model-grid[_ngcontent-%COMP%] {\n grid-template-columns: repeat(2, 1fr);\n }\n}\n\n@media (max-width: 768px) {\n .analytics-layout[_ngcontent-%COMP%] {\n flex-direction: column;\n }\n\n .analytics-sidebar[_ngcontent-%COMP%] {\n width: 100%;\n min-width: 100%;\n border-right: none;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .sidebar-nav[_ngcontent-%COMP%] {\n flex-direction: row;\n overflow-x: auto;\n }\n\n .nav-item[_ngcontent-%COMP%] {\n border-left: none;\n border-bottom: 3px solid transparent;\n white-space: nowrap;\n }\n\n .nav-item.active[_ngcontent-%COMP%] {\n border-left-color: transparent;\n border-bottom-color: var(--mj-brand-primary);\n }\n\n .trending-section[_ngcontent-%COMP%], \n .sidebar-divider[_ngcontent-%COMP%] {\n display: none;\n }\n\n .tab-section[_ngcontent-%COMP%] {\n padding: 16px;\n }\n\n .cards-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .kpi-row[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .two-col[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .cost-kpi-row[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n}\n\n\n\n\n.tab-header-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n margin-left: auto;\n}\n\n.cost-kpi-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 16px;\n margin-bottom: 24px;\n}\n\n.cost-kpi-card[_ngcontent-%COMP%] {\n display: flex;\n gap: 14px;\n align-items: center;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n padding: 18px 20px;\n transition: box-shadow 0.15s ease;\n}\n\n.cost-kpi-card[_ngcontent-%COMP%]:hover {\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n}\n\n.cost-kpi-icon[_ngcontent-%COMP%] {\n width: 44px;\n height: 44px;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 18px;\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n flex-shrink: 0;\n}\n\n.cost-kpi-value[_ngcontent-%COMP%] {\n font-size: 22px;\n font-weight: 700;\n color: var(--mj-text-primary);\n line-height: 1.2;\n}\n\n.cost-kpi-label[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.03em;\n}\n\n.cost-kpi-sub[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n.empty-state-hint[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n}\n\n\n\n\n@media print {\n .analytics-sidebar[_ngcontent-%COMP%], \n .filter-bar[_ngcontent-%COMP%], \n .tab-header-actions[_ngcontent-%COMP%], \n .drill-down-close[_ngcontent-%COMP%], \n .drill-export-btn[_ngcontent-%COMP%], \n .drill-open-btn[_ngcontent-%COMP%] {\n display: none !important;\n }\n\n .analytics-layout[_ngcontent-%COMP%] {\n display: block;\n }\n\n .main-content[_ngcontent-%COMP%] {\n padding: 0;\n }\n\n .tab-section[_ngcontent-%COMP%] {\n padding: 0;\n }\n\n .widget-card[_ngcontent-%COMP%], \n .cost-kpi-card[_ngcontent-%COMP%], \n .kpi-card[_ngcontent-%COMP%] {\n break-inside: avoid;\n box-shadow: none;\n border: 1px solid var(--mj-border-default);\n }\n\n .data-table[_ngcontent-%COMP%] {\n font-size: 10px;\n }\n}\n\n\n\n\n\n\n\n.co-occurrence-section[_ngcontent-%COMP%] {\n max-height: 500px;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.co-occurrence-section[_ngcontent-%COMP%] .table-scroll[_ngcontent-%COMP%] {\n overflow-y: auto;\n max-height: 400px;\n flex: 1;\n min-height: 0;\n}\n\n.co-occurrence-section[_ngcontent-%COMP%] .empty-state[_ngcontent-%COMP%] {\n max-height: 200px;\n overflow: hidden;\n}\n\n.co-occurrence-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.co-occurrence-staleness[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 5px;\n font-size: 0.78rem;\n color: var(--mj-text-muted);\n}"] });
|
|
4253
4244
|
};
|
|
4254
4245
|
AnalyticsResourceComponent = AnalyticsResourceComponent_1 = __decorate([
|
|
4255
4246
|
RegisterClass(BaseResourceComponent, 'AnalyticsResource')
|
|
@@ -4257,9 +4248,9 @@ AnalyticsResourceComponent = AnalyticsResourceComponent_1 = __decorate([
|
|
|
4257
4248
|
export { AnalyticsResourceComponent };
|
|
4258
4249
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AnalyticsResourceComponent, [{
|
|
4259
4250
|
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"] }]
|
|
4251
|
+
args: [{ standalone: false, selector: 'app-analytics-resource', template: "<mj-page-layout>\n <mj-page-header\n Title=\"Knowledge Hub Analytics\"\n Icon=\"fa-solid fa-chart-line\"\n Subtitle=\"Pipeline health, trending tags, and content insights\">\n <div meta>\n <mj-stat-badge\n [Label]=\"PipelineStatusText\"\n [Variant]=\"PipelineStatusOk ? 'success' : 'error'\">\n </mj-stat-badge>\n </div>\n </mj-page-header>\n\n <mj-page-body [Flex]=\"true\" [Padding]=\"false\">\n@if (IsLoading) {\n <div class=\"analytics-loading\">\n <mj-loading text=\"Loading analytics data...\" size=\"medium\"></mj-loading>\n </div>\n} @else {\n <div class=\"analytics-layout\">\n <mj-left-nav\n [Sections]=\"navSections\"\n [ActiveId]=\"ActiveTab\"\n (ItemClicked)=\"onNavItemClicked($event)\">\n <!-- Trending Tags Cloud projected into the rail's footer slot. -->\n <div footer class=\"trending-section\">\n <h3><i class=\"fa-solid fa-arrow-trend-up\"></i> Trending Tags</h3>\n <div class=\"tag-cloud\">\n @for (tag of TrendingTags; track tag.Name) {\n <span [style.font-size.px]=\"tag.Size\" [style.font-weight]=\"tag.Weight\">{{ tag.Name }}</span>\n }\n @if (TrendingTags.length === 0) {\n <span class=\"no-trending\">No trending tags yet</span>\n }\n </div>\n </div>\n </mj-left-nav>\n\n <mj-left-nav-content>\n <div class=\"main-content\">\n\n <!-- ====================================================== -->\n <!-- TAB 1: OVERVIEW -->\n <!-- ====================================================== -->\n @if (ActiveTab === 'overview') {\n <section class=\"tab-section\">\n <div class=\"tab-section-header\">\n <i class=\"fa-solid fa-grip\"></i>\n <h1>Overview</h1>\n </div>\n\n <!-- Filter Bar -->\n <div class=\"filter-bar\">\n <div class=\"date-chips\">\n @for (range of DateRanges; track range.Label) {\n <button\n class=\"date-chip\"\n [class.active]=\"ActiveDateRange === range.Label\"\n (click)=\"SetDateRange(range.Label)\"\n >{{ range.Label }}</button>\n }\n </div>\n <select class=\"filter-dropdown\" [ngModel]=\"EntityFilter\" (ngModelChange)=\"SetEntityFilter($event)\">\n @for (opt of EntityFilterOptions; track opt) {\n <option [value]=\"opt\">{{ opt }}</option>\n }\n </select>\n </div>\n\n <!-- KPI Cards -->\n <div class=\"kpi-row\">\n @for (kpi of KPIs; track kpi.Label) {\n <div class=\"kpi-card\" (click)=\"OpenDrillDown(kpi.DrillDownKey)\">\n <div>\n <div class=\"kpi-label\">{{ kpi.Label }}</div>\n <div class=\"kpi-value\">{{ kpi.Value }}</div>\n <div class=\"kpi-delta\" [class.up]=\"kpi.DeltaDirection === 'up'\" [class.down]=\"kpi.DeltaDirection === 'down'\">\n @if (kpi.DeltaDirection === 'up') {\n <i class=\"fa-solid fa-arrow-up\" style=\"font-size:9px\"></i>\n } @else if (kpi.DeltaDirection === 'down') {\n <i class=\"fa-solid fa-arrow-down\" style=\"font-size:9px\"></i>\n }\n {{ kpi.Delta }}\n </div>\n </div>\n <div class=\"kpi-sparkline\">\n <svg width=\"64\" height=\"28\" viewBox=\"0 0 64 28\">\n <polyline [attr.points]=\"kpi.SparklinePoints\" fill=\"none\" [attr.stroke]=\"kpi.SparklineColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n </div>\n }\n </div>\n\n <!-- KPI Drill-Down -->\n @if (DrillDownTarget && DrillDownTarget.startsWith('kpi-')) {\n <div class=\"drill-down-panel\">\n <div class=\"drill-down-header\">\n <span class=\"drill-down-title\"><i class=\"fa-solid fa-table\"></i> Detail View</span>\n <div class=\"drill-down-header-actions\">\n @if (DrillDownData.length > 0) {\n <button class=\"drill-export-btn\" (click)=\"ExportDrillDownCSV()\" title=\"Export CSV\">\n <i class=\"fa-solid fa-download\"></i> CSV\n </button>\n }\n <button class=\"drill-down-close\" aria-label=\"Close drill-down\" (click)=\"CloseDrillDown()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n </div>\n @if (IsDrillDownLoading) {\n <mj-loading text=\"Loading details...\" size=\"small\"></mj-loading>\n } @else if (DrillDownData.length > 0) {\n <div class=\"drill-down-table-wrap\">\n <table class=\"data-table\">\n <thead>\n <tr>\n @for (col of DrillDownColumns; track col) {\n <th>{{ col }}</th>\n }\n @if (DrillDownHasActions) {\n <th class=\"drill-action-col\"></th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of DrillDownData; track TrackByIndex($index)) {\n <tr>\n @for (col of DrillDownColumns; track col) {\n <td>{{ row[col] }}</td>\n }\n @if (DrillDownHasActions) {\n <td class=\"drill-action-col\">\n @if (row['_RecordID']) {\n <button class=\"drill-open-btn\" (click)=\"OpenDrillDownRecord(row)\" title=\"Open record\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i>\n </button>\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"drill-down-empty\">No data available</div>\n }\n </div>\n }\n\n <!-- Widget Cards Grid (2x3) -->\n <div class=\"cards-grid\">\n\n <!-- Card 1: Tag Growth -->\n <div class=\"widget-card\" (click)=\"OpenDrillDown('tagGrowth')\">\n <div class=\"widget-title\"><i class=\"fa-solid fa-chart-line\"></i> Tag Growth</div>\n <div class=\"bar-chart\">\n @for (bar of TagGrowthData; track bar.Label) {\n <div class=\"bar-col\">\n <div class=\"bar-value\">{{ bar.Count }}</div>\n <div class=\"bar\" [style.height.%]=\"bar.Percentage\" style=\"background:var(--mj-brand-primary)\" [style.opacity]=\"0.5 + (bar.Percentage / 200)\"></div>\n <div class=\"bar-label\">{{ bar.Label }}</div>\n </div>\n }\n </div>\n </div>\n\n <!-- Card 2: Content Coverage -->\n <div class=\"widget-card\" (click)=\"OpenDrillDown('contentCoverage')\">\n <div class=\"widget-title\"><i class=\"fa-solid fa-bullseye\"></i> Content Coverage</div>\n <div class=\"rings-grid\">\n @for (entity of CoverageData; track entity.Name) {\n <div class=\"ring-item\">\n <svg width=\"48\" height=\"48\" viewBox=\"0 0 48 48\">\n <circle cx=\"24\" cy=\"24\" r=\"20\" fill=\"none\" stroke=\"var(--mj-border-default)\" stroke-width=\"5\"/>\n <circle cx=\"24\" cy=\"24\" r=\"20\" fill=\"none\" [attr.stroke]=\"entity.Color\" stroke-width=\"5\"\n [attr.stroke-dasharray]=\"entity.StrokeDash\" stroke-dashoffset=\"31.4\" stroke-linecap=\"round\"\n transform=\"rotate(-90 24 24)\"/>\n <text x=\"24\" y=\"26\" text-anchor=\"middle\" font-size=\"11\" font-weight=\"700\" fill=\"var(--mj-text-primary)\">{{ entity.Percentage }}%</text>\n </svg>\n <div>\n <div class=\"ring-label\">{{ entity.Name }}</div>\n <div class=\"ring-stat\">{{ FormatNumber(entity.Tagged) }} / {{ FormatNumber(entity.Total) }}</div>\n </div>\n </div>\n }\n @if (CoverageData.length === 0) {\n <div class=\"widget-empty\">No content types found</div>\n }\n </div>\n </div>\n\n <!-- Card 3: Quality Score Gauge -->\n <div class=\"widget-card\" (click)=\"OpenDrillDown('qualityScore')\">\n <div class=\"widget-title\"><i class=\"fa-solid fa-gauge-high\"></i> Quality Score</div>\n <div class=\"gauge-container\">\n <svg width=\"180\" height=\"110\" viewBox=\"0 0 180 110\">\n <!-- Background arc -->\n <path d=\"M 20 95 A 70 70 0 0 1 160 95\" fill=\"none\" stroke=\"var(--mj-border-default)\" stroke-width=\"14\" stroke-linecap=\"round\"/>\n <!-- Zone arcs -->\n <path d=\"M 20 95 A 70 70 0 0 1 48.6 35.2\" fill=\"none\" stroke=\"var(--mj-status-error)\" stroke-width=\"14\" stroke-linecap=\"round\" opacity=\"0.3\"/>\n <path d=\"M 48.6 35.2 A 70 70 0 0 1 118 28\" fill=\"none\" stroke=\"var(--mj-status-warning)\" stroke-width=\"14\" opacity=\"0.3\"/>\n <path d=\"M 118 28 A 70 70 0 0 1 160 95\" fill=\"none\" stroke=\"var(--mj-status-success)\" stroke-width=\"14\" stroke-linecap=\"round\" opacity=\"0.3\"/>\n <!-- Score text -->\n <text x=\"90\" y=\"88\" text-anchor=\"middle\" font-size=\"26\" font-weight=\"800\" fill=\"var(--mj-text-primary)\">{{ QualityScore }}</text>\n <text x=\"90\" y=\"105\" text-anchor=\"middle\" font-size=\"10\" fill=\"var(--mj-text-muted)\">out of 100</text>\n <text x=\"28\" y=\"108\" font-size=\"8\" fill=\"var(--mj-text-muted)\">0</text>\n <text x=\"86\" y=\"18\" font-size=\"8\" fill=\"var(--mj-text-muted)\">50</text>\n <text x=\"155\" y=\"108\" font-size=\"8\" fill=\"var(--mj-text-muted)\">100</text>\n </svg>\n </div>\n <!-- Mini confidence histogram -->\n <div class=\"mini-histogram\">\n @for (bin of MiniConfidenceBins; track TrackByIndex($index)) {\n <div class=\"mini-hist-bar\" [style.height.px]=\"bin.Height\" [style.background]=\"bin.Color\" [title]=\"bin.Title\"></div>\n }\n </div>\n <div class=\"mini-hist-label\">Confidence Distribution</div>\n </div>\n\n <!-- Card 4: Source Performance -->\n <div class=\"widget-card\" (click)=\"OpenDrillDown('sourcePerformance')\">\n <div class=\"widget-title\"><i class=\"fa-solid fa-ranking-star\"></i> Source Performance</div>\n <div class=\"h-bar-list\">\n @for (source of SourcePerfData; track source.Name) {\n <div class=\"h-bar-row\">\n <div class=\"h-bar-name\">{{ source.Name }}</div>\n <div class=\"h-bar-track\">\n <div class=\"h-bar-fill\" [style.width.%]=\"source.Percentage\" [style.background]=\"source.Color\">{{ source.AvgTagsPerItem }}</div>\n </div>\n </div>\n }\n @if (SourcePerfData.length === 0) {\n <div class=\"widget-empty\">No source data</div>\n }\n </div>\n <div class=\"widget-footnote\">Average tags per item</div>\n </div>\n\n <!-- Card 5: Daily Throughput -->\n <div class=\"widget-card\" (click)=\"OpenDrillDown('dailyThroughput')\">\n <div class=\"widget-title\"><i class=\"fa-solid fa-bolt\"></i> Daily Throughput</div>\n <div class=\"throughput-bars\">\n @for (day of ThroughputData; track day.Label) {\n <div class=\"tp-bar\"\n [style.height.%]=\"day.Percentage\"\n [style.background]=\"day.IsError ? 'var(--mj-status-error)' : 'var(--mj-status-success)'\"\n >\n <span class=\"tp-bar-label\">{{ day.Label }}</span>\n </div>\n }\n </div>\n <div class=\"legend\">\n <div class=\"legend-item\"><div class=\"legend-dot\" style=\"background:var(--mj-status-success)\"></div> Success</div>\n <div class=\"legend-item\"><div class=\"legend-dot\" style=\"background:var(--mj-status-error)\"></div> Failures</div>\n </div>\n </div>\n\n <!-- Card 6: Taxonomy Health -->\n <div class=\"widget-card\" (click)=\"OpenDrillDown('taxonomyHealth')\">\n <div class=\"widget-title\"><i class=\"fa-solid fa-sitemap\"></i> Taxonomy Health</div>\n <div class=\"taxonomy-ring-container\">\n <svg width=\"140\" height=\"140\" viewBox=\"0 0 140 140\">\n <circle cx=\"70\" cy=\"70\" r=\"54\" fill=\"none\" stroke=\"var(--mj-border-default)\" stroke-width=\"18\"/>\n @for (seg of TaxonomyRingSegments; track TrackByIndex($index)) {\n <circle cx=\"70\" cy=\"70\" r=\"54\" fill=\"none\"\n [attr.stroke]=\"seg.Color\" stroke-width=\"18\"\n [attr.stroke-dasharray]=\"seg.StrokeDash\"\n [attr.stroke-dashoffset]=\"seg.StrokeOffset\"\n transform=\"rotate(-90 70 70)\"/>\n }\n <text x=\"70\" y=\"66\" text-anchor=\"middle\" font-size=\"22\" font-weight=\"800\" fill=\"var(--mj-text-primary)\">{{ TaxonomyTotal }}</text>\n <text x=\"70\" y=\"82\" text-anchor=\"middle\" font-size=\"10\" fill=\"var(--mj-text-muted)\">total tags</text>\n </svg>\n </div>\n <div class=\"taxonomy-stats\">\n @for (stat of TaxonomyStats; track stat.Label) {\n <div class=\"tax-stat\" [style.background]=\"stat.BgColor\" [style.color]=\"stat.Color\">\n {{ stat.Count }}<small>{{ stat.Label }}</small>\n </div>\n }\n </div>\n </div>\n\n </div><!-- /cards-grid -->\n\n <!-- Widget Drill-Down -->\n @if (DrillDownTarget && !DrillDownTarget.startsWith('kpi-')) {\n <div class=\"drill-down-panel\">\n <div class=\"drill-down-header\">\n <span class=\"drill-down-title\"><i class=\"fa-solid fa-table\"></i> {{ DrillDownTarget }} Detail</span>\n <button class=\"drill-down-close\" aria-label=\"Close drill-down\" (click)=\"CloseDrillDown()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n @if (IsDrillDownLoading) {\n <mj-loading text=\"Loading details...\" size=\"small\"></mj-loading>\n } @else if (DrillDownData.length > 0) {\n <div class=\"drill-down-table-wrap\">\n <table class=\"data-table\">\n <thead>\n <tr>\n @for (col of DrillDownColumns; track col) {\n <th>{{ col }}</th>\n }\n @if (DrillDownHasActions) {\n <th class=\"drill-action-col\"></th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of DrillDownData; track TrackByIndex($index)) {\n <tr>\n @for (col of DrillDownColumns; track col) {\n <td>{{ row[col] }}</td>\n }\n @if (DrillDownHasActions) {\n <td class=\"drill-action-col\">\n @if (row['_RecordID']) {\n <button class=\"drill-open-btn\" (click)=\"OpenDrillDownRecord(row)\" title=\"Open record\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i>\n </button>\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"drill-down-empty\">No data available</div>\n }\n </div>\n }\n </section>\n }\n\n <!-- ====================================================== -->\n <!-- TAB 2: TAGS -->\n <!-- ====================================================== -->\n @if (ActiveTab === 'tags') {\n <section class=\"tab-section\">\n <div class=\"tab-section-header\">\n <i class=\"fa-solid fa-tags\"></i>\n <h1>Tags</h1>\n </div>\n\n <!-- Top 20 Tags Table -->\n <div class=\"sub-section\" style=\"margin-top:0\">\n <div class=\"sub-section-header\">\n <h3><i class=\"fa-solid fa-trophy\"></i> Top 20 Tags</h3>\n @if (TopTags.length > 0) {\n <button class=\"drill-export-btn\" (click)=\"ExportTabDataCSV('top-tags')\" title=\"Export CSV\">\n <i class=\"fa-solid fa-download\"></i> CSV\n </button>\n }\n </div>\n @if (TopTags.length > 0) {\n <div class=\"table-scroll\">\n <table class=\"data-table\">\n <thead>\n <tr>\n <th>#</th>\n <th>Tag Name</th>\n <th class=\"num\">Usage Count</th>\n <th>Avg Weight</th>\n <th>Trend</th>\n <th>Top Entity</th>\n <th>First Seen</th>\n </tr>\n </thead>\n <tbody>\n @for (tag of TopTags; track tag.Name) {\n <tr style=\"cursor:pointer\" (click)=\"OpenDrillDown('tag-row:' + tag.Name)\">\n <td>{{ tag.Rank }}</td>\n <td><strong>{{ tag.Name }}</strong></td>\n <td class=\"num\">{{ FormatNumber(tag.UsageCount) }}</td>\n <td>\n <span class=\"weight-bar\" [style.width.px]=\"tag.WeightBarWidth\" [style.background]=\"tag.WeightBarColor\"></span>\n {{ tag.AvgWeight }}\n </td>\n <td>\n <svg width=\"48\" height=\"16\">\n <polyline [attr.points]=\"tag.TrendPoints\" fill=\"none\" [attr.stroke]=\"tag.TrendColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n </svg>\n </td>\n <td>{{ tag.TopEntity }}</td>\n <td class=\"muted\">{{ tag.FirstSeen }}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-tags\"></i>\n <p>No tag data available yet. Process content to generate tags.</p>\n </div>\n }\n </div>\n\n <!-- D10: Tags tab drill-down -->\n @if (DrillDownTarget && DrillDownTarget.startsWith('tag-row:')) {\n <div class=\"drill-down-panel\">\n <div class=\"drill-down-header\">\n <span class=\"drill-down-title\"><i class=\"fa-solid fa-table\"></i> Content Items Tagged \"{{ DrillDownTarget.replace('tag-row:', '') }}\"</span>\n <div class=\"drill-down-header-actions\">\n @if (DrillDownData.length > 0) {\n <button class=\"drill-export-btn\" (click)=\"ExportDrillDownCSV()\" title=\"Export CSV\">\n <i class=\"fa-solid fa-download\"></i> CSV\n </button>\n }\n <button class=\"drill-down-close\" aria-label=\"Close drill-down\" (click)=\"CloseDrillDown()\"><i class=\"fa-solid fa-times\"></i></button>\n </div>\n </div>\n @if (IsDrillDownLoading) {\n <mj-loading text=\"Loading details...\" size=\"small\"></mj-loading>\n } @else if (DrillDownData.length > 0) {\n <div class=\"drill-down-table-wrap\">\n <table class=\"data-table\">\n <thead><tr>\n @for (col of DrillDownColumns; track col) { <th>{{ col }}</th> }\n @if (DrillDownHasActions) { <th class=\"drill-action-col\"></th> }\n </tr></thead>\n <tbody>\n @for (row of DrillDownData; track TrackByIndex($index)) {\n <tr>\n @for (col of DrillDownColumns; track col) { <td>{{ row[col] }}</td> }\n @if (DrillDownHasActions) {\n <td class=\"drill-action-col\">\n @if (row['_RecordID']) {\n <button class=\"drill-open-btn\" aria-label=\"Open record\" (click)=\"OpenDrillDownRecord(row)\" title=\"Open record\"><i class=\"fa-solid fa-arrow-up-right-from-square\"></i></button>\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"drill-down-empty\">No items found for this tag</div>\n }\n </div>\n }\n\n <!-- Tag Distribution by Entity -->\n @if (EntityDistribution.length > 0) {\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-chart-bar\"></i> Tag Distribution by Entity</h3>\n <div class=\"stacked-bar-chart\">\n @for (row of EntityDistribution; track row.EntityName) {\n <div class=\"stacked-row\">\n <div class=\"stacked-label\">{{ row.EntityName }}</div>\n <div class=\"stacked-track\">\n @for (seg of row.Segments; track TrackByIndex($index)) {\n <div class=\"stacked-seg\" [style.width.%]=\"seg.Percentage\" [style.background]=\"seg.Color\" [title]=\"seg.Label + ': ' + seg.Percentage + '%'\">{{ seg.Label }}</div>\n }\n </div>\n </div>\n }\n </div>\n <div class=\"legend\" style=\"margin-top:12px\">\n @for (item of DistributionLegend; track item.Label) {\n <div class=\"legend-item\"><div class=\"legend-dot\" [style.background]=\"item.Color\"></div> {{ item.Label }}</div>\n }\n </div>\n </div>\n }\n\n <!-- Tag Depth Distribution -->\n @if (TagDepthBars.length > 0) {\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-layer-group\"></i> Tag Depth Distribution</h3>\n <div class=\"v-bar-chart\">\n @for (bar of TagDepthBars; track bar.Label) {\n <div class=\"v-bar-col\">\n <div class=\"v-bar\" [style.height.%]=\"bar.Percentage\" style=\"background:var(--mj-brand-primary)\" [style.min-height.px]=\"bar.Count > 0 ? 24 : 0\">{{ bar.Count }}</div>\n <div class=\"v-bar-label\">{{ bar.Label }}</div>\n </div>\n }\n </div>\n <div class=\"chart-footnote\">\n Taxonomy hierarchy depth -- Most tags at depth 2-3 indicating a healthy mid-level structure\n </div>\n </div>\n }\n\n <!-- Frequently Paired Tags (Co-Occurrence) -->\n <div class=\"sub-section co-occurrence-section\">\n <div class=\"sub-section-header\">\n <h3><i class=\"fa-solid fa-link\"></i> Frequently Paired Tags</h3>\n <div class=\"co-occurrence-actions\">\n @if (CoOccurrenceLastComputed) {\n <span class=\"co-occurrence-staleness\" title=\"Last computed timestamp\">\n <i class=\"fa-regular fa-clock\"></i>\n Last computed: {{ CoOccurrenceLastComputed }}\n </span>\n }\n <button class=\"drill-export-btn\" (click)=\"RecomputeCoOccurrence()\" [disabled]=\"IsRecomputingCoOccurrence\" title=\"Recompute co-occurrence data\">\n @if (IsRecomputingCoOccurrence) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Computing...\n } @else {\n <i class=\"fa-solid fa-arrows-rotate\"></i> Recompute\n }\n </button>\n </div>\n </div>\n @if (CoOccurrencePairs.length > 0) {\n <div class=\"table-scroll\">\n <table class=\"data-table\">\n <thead>\n <tr>\n <th>#</th>\n <th>Tag A</th>\n <th>Tag B</th>\n <th class=\"num\">Co-Occurrences</th>\n <th>Frequency</th>\n </tr>\n </thead>\n <tbody>\n @for (pair of CoOccurrencePairs; track pair.TagAName + pair.TagBName; let i = $index) {\n <tr>\n <td class=\"muted\">{{ i + 1 }}</td>\n <td><strong>{{ pair.TagAName }}</strong></td>\n <td><strong>{{ pair.TagBName }}</strong></td>\n <td class=\"num\">{{ FormatNumber(pair.Count) }}</td>\n <td>\n <span class=\"weight-bar\" [style.width.px]=\"pair.BarWidth\" style=\"background: var(--mj-status-info)\"></span>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-link\"></i>\n <p>No co-occurrence data available yet. Process content and recompute to see which tags frequently appear together.</p>\n </div>\n }\n </div>\n </section>\n }\n\n <!-- ====================================================== -->\n <!-- TAB 3: SOURCES -->\n <!-- ====================================================== -->\n @if (ActiveTab === 'sources') {\n <section class=\"tab-section\">\n <div class=\"tab-section-header\">\n <i class=\"fa-solid fa-database\"></i>\n <h1>Sources</h1>\n </div>\n\n <!-- Source Comparison Table -->\n <div class=\"sub-section\" style=\"margin-top:0\">\n <h3><i class=\"fa-solid fa-table\"></i> Source Comparison</h3>\n @if (SourceComparison.length > 0) {\n <div class=\"table-scroll\">\n <table class=\"data-table\">\n <thead>\n <tr>\n <th>Source Name</th>\n <th>Type</th>\n <th class=\"num\">Items</th>\n <th class=\"num\">Tags Generated</th>\n <th class=\"num\">Avg Tags/Item</th>\n <th class=\"num\">Avg Weight</th>\n <th>Last Run</th>\n <th>Status</th>\n </tr>\n </thead>\n <tbody>\n @for (source of SourceComparison; track source.Name) {\n <tr (click)=\"SelectSource(source.Name); OpenDrillDown('source-row:' + source.Name)\" style=\"cursor:pointer\" [class.source-selected]=\"SelectedSourceName === source.Name\">\n <td><strong>{{ source.Name }}</strong></td>\n <td><i [class]=\"source.TypeIcon\" [style.color]=\"source.TypeColor\" style=\"margin-right:4px\"></i> {{ source.Type }}</td>\n <td class=\"num\">{{ FormatNumber(source.Items) }}</td>\n <td class=\"num\">{{ FormatNumber(source.TagsGenerated) }}</td>\n <td class=\"num\">{{ source.AvgTagsPerItem }}</td>\n <td class=\"num\">{{ source.AvgWeight }}</td>\n <td class=\"muted\">{{ source.LastRun }}</td>\n <td><span class=\"badge\" [class]=\"source.StatusClass\"><i class=\"fa-solid fa-circle\" style=\"font-size:6px;margin-right:3px\"></i> {{ source.Status }}</span></td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-database\"></i>\n <p>No content sources configured yet.</p>\n </div>\n }\n </div>\n\n <!-- D10: Sources tab drill-down (recent runs) -->\n @if (DrillDownTarget && DrillDownTarget.startsWith('source-row:')) {\n <div class=\"drill-down-panel\">\n <div class=\"drill-down-header\">\n <span class=\"drill-down-title\"><i class=\"fa-solid fa-table\"></i> Recent Runs: {{ DrillDownTarget.replace('source-row:', '') }}</span>\n <div class=\"drill-down-header-actions\">\n @if (DrillDownData.length > 0) {\n <button class=\"drill-export-btn\" (click)=\"ExportDrillDownCSV()\" title=\"Export CSV\"><i class=\"fa-solid fa-download\"></i> CSV</button>\n }\n <button class=\"drill-down-close\" aria-label=\"Close drill-down\" (click)=\"CloseDrillDown()\"><i class=\"fa-solid fa-times\"></i></button>\n </div>\n </div>\n @if (IsDrillDownLoading) {\n <mj-loading text=\"Loading details...\" size=\"small\"></mj-loading>\n } @else if (DrillDownData.length > 0) {\n <div class=\"drill-down-table-wrap\">\n <table class=\"data-table\">\n <thead><tr>\n @for (col of DrillDownColumns; track col) { <th>{{ col }}</th> }\n @if (DrillDownHasActions) { <th class=\"drill-action-col\"></th> }\n </tr></thead>\n <tbody>\n @for (row of DrillDownData; track TrackByIndex($index)) {\n <tr>\n @for (col of DrillDownColumns; track col) { <td>{{ row[col] }}</td> }\n @if (DrillDownHasActions) {\n <td class=\"drill-action-col\">\n @if (row['_RecordID']) {\n <button class=\"drill-open-btn\" aria-label=\"Open record\" (click)=\"OpenDrillDownRecord(row)\" title=\"Open record\"><i class=\"fa-solid fa-arrow-up-right-from-square\"></i></button>\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"drill-down-empty\">No run data for this source</div>\n }\n </div>\n }\n\n <!-- Per-Source Detail -->\n @if (SelectedSourceName && SourceComparison.length > 0) {\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-chart-area\"></i> Source Detail: {{ SelectedSourceName }}</h3>\n <div class=\"two-col\">\n <!-- Items Processed Over Time -->\n <div class=\"widget-card\">\n <div class=\"widget-title\"><i class=\"fa-solid fa-chart-bar\"></i> Items Processed (Last 8 Weeks)</div>\n <div class=\"bar-chart\" style=\"height:100px\">\n @for (bar of SourceWeeklyBars; track bar.Label) {\n <div class=\"bar-col\">\n <div class=\"bar-value\" style=\"font-size:9px\">{{ bar.Value }}</div>\n <div class=\"bar\" [style.height.%]=\"bar.Percentage\" style=\"background:var(--mj-brand-primary)\" [style.opacity]=\"0.5 + (bar.Percentage / 200)\"></div>\n <div class=\"bar-label\">{{ bar.Label }}</div>\n </div>\n }\n </div>\n </div>\n\n <!-- Tag Quality Distribution -->\n <div class=\"widget-card\">\n <div class=\"widget-title\"><i class=\"fa-solid fa-star-half-stroke\"></i> Tag Quality Distribution</div>\n <div class=\"quality-bands\">\n @for (band of SourceQualityBands; track band.Label) {\n <div class=\"quality-band-row\">\n <span class=\"quality-band-label\">{{ band.Label }}</span>\n <div class=\"quality-band-track\">\n <div class=\"quality-band-fill\" [style.width.%]=\"band.Percentage\" [style.background]=\"band.Color\">{{ band.Percentage }}%</div>\n </div>\n </div>\n }\n </div>\n <div class=\"source-quality-note\">\n <i class=\"fa-solid fa-circle-info\" style=\"color:var(--mj-status-info);margin-right:4px\"></i>\n {{ SourceQualityNote }}\n </div>\n </div>\n </div>\n </div>\n }\n\n <!-- Source Health -->\n @if (SourceHealthCards.length > 0) {\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-heart-pulse\"></i> Source Health Summary</h3>\n <div class=\"source-health-grid\" [style.grid-template-columns]=\"'repeat(' + SourceHealthCards.length + ', 1fr)'\">\n @for (card of SourceHealthCards; track card.Name) {\n <div class=\"source-health-card\" [style.border-top-color]=\"card.Color\">\n <div class=\"health-card-name\">{{ card.Name }}</div>\n <div class=\"health-card-value\" [style.color]=\"card.Color\">{{ card.Uptime }}%</div>\n <div class=\"health-card-label\">uptime</div>\n </div>\n }\n </div>\n </div>\n }\n </section>\n }\n\n <!-- ====================================================== -->\n <!-- TAB 4: PIPELINE -->\n <!-- ====================================================== -->\n @if (ActiveTab === 'pipeline') {\n <section class=\"tab-section\">\n <div class=\"tab-section-header\">\n <i class=\"fa-solid fa-gears\"></i>\n <h1>Pipeline</h1>\n </div>\n\n <!-- Pipeline Throughput Chart -->\n <div class=\"sub-section\" style=\"margin-top:0\">\n <h3><i class=\"fa-solid fa-chart-bar\"></i> Pipeline Throughput (Last 30 Days)</h3>\n <div class=\"widget-card\">\n <div class=\"pipeline-throughput-bars\">\n @for (bar of PipelineThroughputBars; track TrackByIndex($index)) {\n <div class=\"pipeline-bar\"\n [style.height.%]=\"bar.Percentage\"\n [style.background]=\"bar.IsError ? 'var(--mj-status-error)' : 'var(--mj-brand-primary)'\"\n [style.opacity]=\"bar.IsError ? 0.7 : (0.6 + bar.Percentage / 300)\"\n style=\"cursor:pointer\"\n (click)=\"OpenDrillDown('pipeline-throughput:' + $index)\"\n ></div>\n }\n </div>\n <div class=\"pipeline-date-labels\">\n @for (label of PipelineDateLabels; track label) {\n <span>{{ label }}</span>\n }\n </div>\n </div>\n </div>\n\n <!-- D10: Pipeline throughput drill-down -->\n @if (DrillDownTarget && DrillDownTarget.startsWith('pipeline-throughput:')) {\n <div class=\"drill-down-panel\">\n <div class=\"drill-down-header\">\n <span class=\"drill-down-title\"><i class=\"fa-solid fa-table\"></i> Runs for Selected Day</span>\n <div class=\"drill-down-header-actions\">\n @if (DrillDownData.length > 0) {\n <button class=\"drill-export-btn\" (click)=\"ExportDrillDownCSV()\" title=\"Export CSV\"><i class=\"fa-solid fa-download\"></i> CSV</button>\n }\n <button class=\"drill-down-close\" aria-label=\"Close drill-down\" (click)=\"CloseDrillDown()\"><i class=\"fa-solid fa-times\"></i></button>\n </div>\n </div>\n @if (IsDrillDownLoading) {\n <mj-loading text=\"Loading details...\" size=\"small\"></mj-loading>\n } @else if (DrillDownData.length > 0) {\n <div class=\"drill-down-table-wrap\">\n <table class=\"data-table\">\n <thead><tr>\n @for (col of DrillDownColumns; track col) { <th>{{ col }}</th> }\n @if (DrillDownHasActions) { <th class=\"drill-action-col\"></th> }\n </tr></thead>\n <tbody>\n @for (row of DrillDownData; track TrackByIndex($index)) {\n <tr>\n @for (col of DrillDownColumns; track col) { <td>{{ row[col] }}</td> }\n @if (DrillDownHasActions) {\n <td class=\"drill-action-col\">\n @if (row['_RecordID']) {\n <button class=\"drill-open-btn\" aria-label=\"Open record\" (click)=\"OpenDrillDownRecord(row)\" title=\"Open record\"><i class=\"fa-solid fa-arrow-up-right-from-square\"></i></button>\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"drill-down-empty\">No runs for this day</div>\n }\n </div>\n }\n\n <!-- Processing Time Breakdown -->\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-stopwatch\"></i> Processing Time Breakdown (Avg per Item)</h3>\n <div class=\"widget-card\">\n <div class=\"stage-bars\">\n @for (stage of ProcessingStages; track stage.Name) {\n <div class=\"stage-row\">\n <div class=\"stage-name\">{{ stage.Name }}</div>\n <div class=\"stage-track\">\n <div class=\"stage-fill\" [style.width.%]=\"stage.Percentage\" [style.background]=\"stage.Color\">\n @if (stage.Percentage > 15) {\n {{ stage.Time }}s\n }\n </div>\n </div>\n <div class=\"stage-time\">{{ stage.Time }}s</div>\n </div>\n }\n </div>\n <div class=\"stage-summary\">\n <span><strong>Total avg:</strong> {{ TotalAvgProcessingTime }}s per item</span>\n @if (BottleneckStage) {\n <span class=\"stage-warning\">\n <i class=\"fa-solid fa-triangle-exclamation\" style=\"color:var(--mj-status-warning);margin-right:4px\"></i>\n {{ BottleneckStage }} stage is the bottleneck ({{ BottleneckPercent }}% of total time)\n </span>\n }\n </div>\n </div>\n </div>\n\n <!-- Success Rate -->\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-chart-line\"></i> Success Rate Overview</h3>\n <div class=\"widget-card\">\n <div class=\"success-rate-display\">\n <div class=\"success-rate-stat\">\n <div class=\"success-rate-value\" style=\"color:var(--mj-status-success)\">\n {{ rawProcessRuns.length > 0 ? (100 - (ErrorLog.length / rawProcessRuns.length * 100)).toFixed(1) : '100' }}%\n </div>\n <div class=\"success-rate-label\">Success Rate</div>\n </div>\n <div class=\"success-rate-stat\">\n <div class=\"success-rate-value\" style=\"color:var(--mj-status-error)\">\n {{ rawProcessRuns.length > 0 ? (ErrorLog.length / rawProcessRuns.length * 100).toFixed(1) : '0' }}%\n </div>\n <div class=\"success-rate-label\">Failure Rate</div>\n </div>\n <div class=\"success-rate-stat\">\n <div class=\"success-rate-value\" style=\"color:var(--mj-text-primary)\">\n {{ FormatNumber(rawProcessRuns.length) }}\n </div>\n <div class=\"success-rate-label\">Total Runs</div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Active Runs Table -->\n @if (ActiveRuns.length > 0) {\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-spinner\"></i> Active Runs</h3>\n <div class=\"table-scroll\">\n <table class=\"data-table\">\n <thead>\n <tr>\n <th>Run ID</th>\n <th>Source</th>\n <th>Started</th>\n <th>Progress</th>\n <th>Stage</th>\n <th class=\"num\">Items</th>\n </tr>\n </thead>\n <tbody>\n @for (run of ActiveRuns; track run.RunID) {\n <tr>\n <td class=\"monospace-cell\">{{ run.RunID }}</td>\n <td>{{ run.Source }}</td>\n <td class=\"muted\">{{ run.Started }}</td>\n <td>\n <div class=\"progress-track\"><div class=\"progress-fill\" [style.width.%]=\"run.Progress\" style=\"background:var(--mj-brand-primary)\"></div></div>\n <span class=\"progress-text\">{{ run.Progress }}%</span>\n </td>\n <td><span class=\"badge\" [class]=\"run.StageClass\">{{ run.Stage }}</span></td>\n <td class=\"num\">{{ FormatNumber(run.Items) }}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </div>\n }\n\n <!-- Error Log -->\n @if (ErrorLog.length > 0) {\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-triangle-exclamation\"></i> Recent Errors</h3>\n <div class=\"error-log\">\n @for (entry of ErrorLog; track TrackByIndex($index)) {\n <div class=\"error-entry\">\n <div class=\"error-time\">{{ entry.Time }}</div>\n <div class=\"error-source\">{{ entry.Source }}</div>\n <div class=\"error-msg\">{{ entry.Message }}</div>\n </div>\n }\n </div>\n </div>\n }\n </section>\n }\n\n <!-- ====================================================== -->\n <!-- TAB 5: QUALITY -->\n <!-- ====================================================== -->\n @if (ActiveTab === 'quality') {\n <section class=\"tab-section\">\n <div class=\"tab-section-header\">\n <i class=\"fa-solid fa-circle-check\"></i>\n <h1>Quality</h1>\n </div>\n\n <!-- Confidence Distribution Histogram -->\n <div class=\"sub-section\" style=\"margin-top:0\">\n <h3><i class=\"fa-solid fa-chart-column\"></i> Confidence Distribution</h3>\n <div class=\"widget-card\">\n <div class=\"histogram\">\n @for (bin of ConfidenceHistogram; track bin.Label) {\n <div class=\"hist-bar-col\" style=\"cursor:pointer\" (click)=\"OpenDrillDown('quality-bin:' + bin.Label)\">\n <div class=\"hist-bar\" [style.height.%]=\"bin.Percentage\" [style.background]=\"bin.Color\">\n @if (bin.Count > 0) { {{ bin.Count }} }\n </div>\n <div class=\"hist-label\">{{ bin.Label }}</div>\n </div>\n }\n </div>\n <div class=\"confidence-stats\">\n @for (stat of ConfidenceStats; track stat.Label) {\n <span><strong>{{ stat.Label }}:</strong> {{ stat.Value }}</span>\n }\n </div>\n </div>\n </div>\n\n <!-- D10: Quality bin drill-down -->\n @if (DrillDownTarget && DrillDownTarget.startsWith('quality-bin:')) {\n <div class=\"drill-down-panel\">\n <div class=\"drill-down-header\">\n <span class=\"drill-down-title\"><i class=\"fa-solid fa-table\"></i> Items in Confidence Range {{ DrillDownTarget.replace('quality-bin:', '') }}</span>\n <div class=\"drill-down-header-actions\">\n @if (DrillDownData.length > 0) {\n <button class=\"drill-export-btn\" (click)=\"ExportDrillDownCSV()\" title=\"Export CSV\"><i class=\"fa-solid fa-download\"></i> CSV</button>\n }\n <button class=\"drill-down-close\" aria-label=\"Close drill-down\" (click)=\"CloseDrillDown()\"><i class=\"fa-solid fa-times\"></i></button>\n </div>\n </div>\n @if (IsDrillDownLoading) {\n <mj-loading text=\"Loading details...\" size=\"small\"></mj-loading>\n } @else if (DrillDownData.length > 0) {\n <div class=\"drill-down-table-wrap\">\n <table class=\"data-table\">\n <thead><tr>\n @for (col of DrillDownColumns; track col) { <th>{{ col }}</th> }\n @if (DrillDownHasActions) { <th class=\"drill-action-col\"></th> }\n </tr></thead>\n <tbody>\n @for (row of DrillDownData; track TrackByIndex($index)) {\n <tr>\n @for (col of DrillDownColumns; track col) { <td>{{ row[col] }}</td> }\n @if (DrillDownHasActions) {\n <td class=\"drill-action-col\">\n @if (row['_RecordID']) {\n <button class=\"drill-open-btn\" aria-label=\"Open record\" (click)=\"OpenDrillDownRecord(row)\" title=\"Open record\"><i class=\"fa-solid fa-arrow-up-right-from-square\"></i></button>\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"drill-down-empty\">No items in this confidence range</div>\n }\n </div>\n }\n\n <!-- Weight Distribution by Entity -->\n @if (WeightByEntity.length > 0) {\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-weight-scale\"></i> Weight Distribution by Entity</h3>\n <div class=\"widget-card\">\n <div class=\"grouped-bar-chart\">\n @for (entity of WeightByEntity; track entity.Name) {\n <div class=\"grouped-col\">\n <div class=\"grouped-bars\">\n <div class=\"g-bar\" [style.height.%]=\"entity.High\" style=\"background:var(--mj-brand-primary)\" [title]=\"'High: ' + entity.High + '%'\"></div>\n <div class=\"g-bar\" [style.height.%]=\"entity.Med\" style=\"background:var(--mj-status-info)\" [title]=\"'Med: ' + entity.Med + '%'\"></div>\n <div class=\"g-bar\" [style.height.%]=\"entity.Low\" style=\"background:var(--mj-text-muted)\" [title]=\"'Low: ' + entity.Low + '%'\"></div>\n </div>\n <div class=\"grouped-label\">{{ entity.Name }}</div>\n </div>\n }\n </div>\n <div class=\"legend\" style=\"justify-content:center;margin-top:14px\">\n @for (item of WeightLegend; track item.Label) {\n <div class=\"legend-item\"><div class=\"legend-dot\" [style.background]=\"item.Color\"></div> {{ item.Label }}</div>\n }\n </div>\n </div>\n </div>\n }\n\n <!-- Tag Accuracy Over Time -->\n @if (AccuracyLinePoints) {\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-chart-line\"></i> Tag Accuracy Over Time (Weekly Avg Confidence)</h3>\n <div class=\"widget-card\">\n <div class=\"accuracy-chart\">\n <div class=\"accuracy-y-labels\">\n <div>1.0</div>\n <div>0.75</div>\n <div>0.50</div>\n <div>0.25</div>\n </div>\n <div class=\"accuracy-area\">\n <div class=\"accuracy-grid-line\" style=\"top:33%\"></div>\n <div class=\"accuracy-grid-line\" style=\"top:66%\"></div>\n <svg width=\"100%\" height=\"110\" viewBox=\"0 0 400 110\" preserveAspectRatio=\"none\" class=\"accuracy-svg\">\n <polyline [attr.points]=\"AccuracyLinePoints\"\n fill=\"none\" stroke=\"var(--mj-brand-primary)\" stroke-width=\"2.5\" vector-effect=\"non-scaling-stroke\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n @for (dot of AccuracyDots; track TrackByIndex($index)) {\n <circle [attr.cx]=\"dot.Cx\" [attr.cy]=\"dot.Cy\" r=\"3\" fill=\"var(--mj-brand-primary)\"/>\n }\n </svg>\n </div>\n </div>\n <div class=\"accuracy-x-labels\">\n @for (label of AccuracyMonthLabels; track label) {\n <span>{{ label }}</span>\n }\n </div>\n <div class=\"accuracy-trend-text\">\n <i class=\"fa-solid fa-arrow-trend-up\" style=\"margin-right:4px\"></i>\n {{ AccuracyTrendText }}\n </div>\n </div>\n </div>\n }\n\n <!-- Low-Confidence Tags Table -->\n @if (LowConfidenceTags.length > 0) {\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-exclamation-triangle\"></i> Low-Confidence Tags (Avg Weight < 0.4)</h3>\n <div class=\"table-scroll\">\n <table class=\"data-table\">\n <thead>\n <tr>\n <th>Tag Name</th>\n <th class=\"num\">Avg Weight</th>\n <th class=\"num\">Usage Count</th>\n <th>Top Entity</th>\n <th>Suggested Action</th>\n </tr>\n </thead>\n <tbody>\n @for (tag of LowConfidenceTags; track tag.Name) {\n <tr>\n <td><strong>{{ tag.Name }}</strong></td>\n <td class=\"num\">{{ tag.AvgWeight }}</td>\n <td class=\"num\">{{ tag.UsageCount }}</td>\n <td>{{ tag.TopEntity }}</td>\n <td><span class=\"badge\" [class]=\"tag.ActionClass\">{{ tag.SuggestedAction }}</span></td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </div>\n }\n\n <!-- Model Performance Comparison -->\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-robot\"></i> Model Performance Comparison</h3>\n <div class=\"model-grid\">\n @for (model of ModelComparisons; track model.Name) {\n <div class=\"model-card\">\n <div class=\"model-name\"><i [class]=\"model.Icon\" [style.color]=\"model.IconColor\" style=\"margin-right:4px\"></i> {{ model.Name }}</div>\n <svg width=\"80\" height=\"80\" viewBox=\"0 0 80 80\" style=\"margin:4px 0\">\n <circle cx=\"40\" cy=\"40\" r=\"32\" fill=\"none\" stroke=\"var(--mj-border-default)\" stroke-width=\"8\"/>\n <circle cx=\"40\" cy=\"40\" r=\"32\" fill=\"none\" [attr.stroke]=\"model.ScoreColor\" stroke-width=\"8\"\n [attr.stroke-dasharray]=\"model.StrokeDash\" stroke-dashoffset=\"50\"\n transform=\"rotate(-90 40 40)\" stroke-linecap=\"round\"/>\n </svg>\n <div class=\"model-score\" [style.color]=\"model.ScoreColor\">{{ model.ScorePercentage }}%</div>\n <div class=\"model-detail\">Avg confidence: {{ model.AvgConfidence }}</div>\n <div class=\"model-detail\">{{ FormatNumber(model.TagsGenerated) }} tags generated</div>\n <div class=\"model-detail\" [style.color]=\"model.RoleColor\" style=\"font-weight:600\">{{ model.Role }}</div>\n </div>\n }\n </div>\n @if (ModelRecommendation) {\n <div class=\"model-recommendation\">\n <i class=\"fa-solid fa-lightbulb\" style=\"color:var(--mj-status-warning)\"></i>\n <div>\n <strong>Recommendation:</strong> {{ ModelRecommendation }}\n </div>\n </div>\n }\n </div>\n </section>\n }\n\n <!-- ====================================================== -->\n <!-- TAB 6: COST & USAGE (D1) -->\n <!-- ====================================================== -->\n @if (ActiveTab === 'cost') {\n <section class=\"tab-section\">\n <div class=\"tab-section-header\">\n <i class=\"fa-solid fa-coins\"></i>\n <h1>Cost & Usage</h1>\n <div class=\"tab-header-actions\">\n <button class=\"drill-export-btn\" (click)=\"ExportTabDataCSV('cost-usage')\" title=\"Export CSV\">\n <i class=\"fa-solid fa-download\"></i> CSV\n </button>\n <button class=\"drill-export-btn\" (click)=\"PrintCurrentTab()\" title=\"Print (PDF alternative)\">\n <i class=\"fa-solid fa-print\"></i> Print\n </button>\n </div>\n </div>\n\n <!-- Filter Bar -->\n <div class=\"filter-bar\">\n <div class=\"date-chips\">\n @for (range of DateRanges; track range.Label) {\n <button\n class=\"date-chip\"\n [class.active]=\"ActiveDateRange === range.Label\"\n (click)=\"SetDateRange(range.Label)\"\n >{{ range.Label }}</button>\n }\n </div>\n </div>\n\n <!-- KPI Cards -->\n @if (CostKPIs.length > 0) {\n <div class=\"cost-kpi-row\">\n @for (kpi of CostKPIs; track kpi.Label) {\n <div class=\"cost-kpi-card\">\n <div class=\"cost-kpi-icon\"><i [class]=\"kpi.Icon\"></i></div>\n <div>\n <div class=\"cost-kpi-value\">{{ kpi.Value }}</div>\n <div class=\"cost-kpi-label\">{{ kpi.Label }}</div>\n <div class=\"cost-kpi-sub\">{{ kpi.SubLabel }}</div>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Per-Run Cost Table -->\n <div class=\"sub-section\">\n <h3><i class=\"fa-solid fa-table\"></i> Cost Breakdown by Run</h3>\n @if (CostPerRunRows.length > 0) {\n <div class=\"table-scroll\">\n <table class=\"data-table\">\n <thead>\n <tr>\n <th>Run ID</th>\n <th>Source</th>\n <th class=\"num\">Tokens</th>\n <th class=\"num\">Cost</th>\n <th>Started</th>\n </tr>\n </thead>\n <tbody>\n @for (row of CostPerRunRows; track row.RunID) {\n <tr>\n <td class=\"monospace-cell\">{{ row.RunID }}</td>\n <td>{{ row.Source }}</td>\n <td class=\"num\">{{ FormatNumber(row.Tokens) }}</td>\n <td class=\"num\">{{ row.Cost > 0 ? '$' + row.Cost.toFixed(4) : '$0.00' }}</td>\n <td class=\"muted\">{{ row.Started }}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @else {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-coins\"></i>\n <p>No cost data available yet. Run the pipeline to generate cost and token usage metrics.</p>\n <p class=\"empty-state-hint\">Cost data is aggregated from ContentProcessRunDetail records linked to AI Prompt Runs.</p>\n </div>\n }\n </div>\n </section>\n }\n\n </div><!-- /main-content -->\n </mj-left-nav-content>\n </div><!-- /analytics-layout -->\n}\n </mj-page-body>\n</mj-page-layout>\n", styles: ["/* ===================================================================\n Analytics & Insights Resource Component\n ================================================================= */\n\n.analytics-loading {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 400px;\n}\n\n/*\n Layout \u2014 <mj-left-nav> rail (with trending tags in [footer]) +\n <mj-left-nav-content>. The shared primitives own the rail's width, nav-item\n styling, sections, and busy state. Only the trending-section + tag-cloud\n styling stays bespoke (it's projected content, not nav chrome).\n*/\n.analytics-layout {\n display: flex;\n flex: 1;\n min-height: 0;\n}\n\n.trending-section {\n padding: 12px 16px 16px;\n}\n\n.trending-section h3 {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--mj-text-muted);\n margin: 0 0 10px;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.tag-cloud {\n display: flex;\n flex-wrap: wrap;\n gap: 4px 6px;\n line-height: 1.7;\n}\n\n.tag-cloud span {\n color: var(--mj-brand-primary);\n cursor: pointer;\n transition: opacity 0.15s;\n}\n\n.tag-cloud span:hover {\n opacity: 0.7;\n}\n\n.no-trending {\n color: var(--mj-text-muted) !important;\n font-size: 12px !important;\n font-style: italic;\n}\n\n.pipeline-status {\n padding: 12px 16px;\n border-top: 1px solid var(--mj-border-default);\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 11.5px;\n color: var(--mj-text-muted);\n}\n\n.status-dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: var(--mj-status-success);\n flex-shrink: 0;\n}\n\n.status-dot-error {\n background: var(--mj-status-error);\n}\n\n/* ===== MAIN CONTENT ===== */\n.main-content {\n flex: 1;\n overflow-y: auto;\n min-width: 0;\n}\n\n.tab-section {\n padding: 28px 32px 40px;\n}\n\n.tab-section-header {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-bottom: 20px;\n padding-bottom: 12px;\n border-bottom: 2px solid var(--mj-brand-primary);\n}\n\n.tab-section-header i {\n font-size: 18px;\n color: var(--mj-brand-primary);\n}\n\n.tab-section-header h1 {\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0;\n}\n\n/* ===== FILTER BAR ===== */\n.filter-bar {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 20px;\n flex-wrap: wrap;\n}\n\n.date-chips {\n display: flex;\n gap: 0;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.date-chip {\n padding: 6px 14px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface);\n cursor: pointer;\n border: none;\n border-right: 1px solid var(--mj-border-default);\n transition: all 0.15s;\n font-family: inherit;\n}\n\n.date-chip:last-child {\n border-right: none;\n}\n\n.date-chip:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.date-chip.active {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.filter-dropdown {\n padding: 6px 12px;\n font-size: 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n font-family: inherit;\n}\n\n/* ===== KPI CARDS ===== */\n.kpi-row {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 16px;\n margin-bottom: 20px;\n}\n\n.kpi-card {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 16px 18px;\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n transition: transform 0.15s, box-shadow 0.15s;\n cursor: pointer;\n}\n\n.kpi-card:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n}\n\n.kpi-label {\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-muted);\n margin-bottom: 4px;\n}\n\n.kpi-value {\n font-size: 28px;\n font-weight: 700;\n color: var(--mj-text-primary);\n line-height: 1.1;\n}\n\n.kpi-delta {\n font-size: 11px;\n font-weight: 500;\n margin-top: 4px;\n color: var(--mj-text-muted);\n}\n\n.kpi-delta.up {\n color: var(--mj-status-success);\n}\n\n.kpi-delta.down {\n color: var(--mj-status-error);\n}\n\n.kpi-sparkline {\n flex-shrink: 0;\n margin-left: 12px;\n margin-top: 6px;\n}\n\n/* ===== CARDS GRID ===== */\n.cards-grid {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 16px;\n}\n\n.widget-card {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 18px 20px;\n transition: transform 0.15s, box-shadow 0.15s;\n cursor: pointer;\n}\n\n.widget-card:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n}\n\n.widget-title {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 14px;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.widget-title i {\n color: var(--mj-brand-primary);\n font-size: 12px;\n}\n\n.widget-empty {\n text-align: center;\n color: var(--mj-text-muted);\n font-size: 12px;\n padding: 20px;\n}\n\n.widget-footnote {\n text-align: center;\n font-size: 10px;\n color: var(--mj-text-muted);\n margin-top: 10px;\n}\n\n/* ===== BAR CHART ===== */\n.bar-chart {\n display: flex;\n align-items: flex-end;\n gap: 8px;\n height: 120px;\n padding-top: 10px;\n}\n\n.bar-col {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 100%;\n justify-content: flex-end;\n}\n\n.bar {\n width: 100%;\n border-radius: 4px 4px 0 0;\n transition: height 0.3s;\n min-height: 2px;\n}\n\n.bar-label {\n font-size: 10px;\n color: var(--mj-text-muted);\n margin-top: 6px;\n}\n\n.bar-value {\n font-size: 10px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 4px;\n}\n\n/* ===== PROGRESS RINGS ===== */\n.rings-grid {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 12px;\n}\n\n.ring-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 6px 0;\n}\n\n.ring-label {\n font-size: 12px;\n color: var(--mj-text-primary);\n font-weight: 500;\n}\n\n.ring-stat {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n/* ===== GAUGE ===== */\n.gauge-container {\n display: flex;\n justify-content: center;\n margin-bottom: 8px;\n}\n\n/* ===== MINI HISTOGRAM ===== */\n.mini-histogram {\n display: flex;\n align-items: flex-end;\n gap: 3px;\n height: 32px;\n justify-content: center;\n}\n\n.mini-hist-bar {\n width: 14px;\n border-radius: 2px;\n}\n\n.mini-hist-label {\n text-align: center;\n font-size: 10px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n}\n\n/* ===== HORIZONTAL BARS ===== */\n.h-bar-list {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.h-bar-row {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.h-bar-name {\n font-size: 12px;\n color: var(--mj-text-secondary);\n width: 100px;\n flex-shrink: 0;\n text-align: right;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.h-bar-track {\n flex: 1;\n height: 20px;\n background: var(--mj-bg-surface-card);\n border-radius: 4px;\n overflow: hidden;\n}\n\n.h-bar-fill {\n height: 100%;\n border-radius: 4px;\n display: flex;\n align-items: center;\n padding-left: 8px;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n min-width: 36px;\n}\n\n/* ===== THROUGHPUT BARS ===== */\n.throughput-bars {\n display: flex;\n align-items: flex-end;\n gap: 4px;\n height: 110px;\n margin-bottom: 22px;\n}\n\n.tp-bar {\n flex: 1;\n border-radius: 3px 3px 0 0;\n position: relative;\n min-height: 4px;\n}\n\n.tp-bar-label {\n position: absolute;\n bottom: -18px;\n left: 50%;\n transform: translateX(-50%);\n font-size: 8px;\n color: var(--mj-text-muted);\n white-space: nowrap;\n}\n\n/* ===== TAXONOMY ===== */\n.taxonomy-ring-container {\n display: flex;\n justify-content: center;\n}\n\n.taxonomy-stats {\n display: flex;\n gap: 8px;\n margin-top: 12px;\n}\n\n.tax-stat {\n flex: 1;\n text-align: center;\n padding: 8px 4px;\n border-radius: 6px;\n font-size: 20px;\n font-weight: 700;\n}\n\n.tax-stat small {\n display: block;\n font-size: 10px;\n font-weight: 500;\n margin-top: 2px;\n}\n\n/* ===== LEGEND ===== */\n.legend {\n display: flex;\n gap: 16px;\n margin-top: 10px;\n flex-wrap: wrap;\n justify-content: center;\n}\n\n.legend-item {\n display: flex;\n align-items: center;\n gap: 5px;\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n.legend-dot {\n width: 10px;\n height: 10px;\n border-radius: 3px;\n flex-shrink: 0;\n}\n\n/* ===== DATA TABLES ===== */\n.table-scroll {\n overflow-x: auto;\n}\n\n.data-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 12.5px;\n}\n\n.data-table thead th {\n text-align: left;\n padding: 10px 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-text-muted);\n border-bottom: 2px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n white-space: nowrap;\n}\n\n.data-table tbody td {\n padding: 10px 12px;\n border-bottom: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-primary);\n vertical-align: middle;\n}\n\n.data-table tbody tr:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.data-table .num {\n text-align: right;\n font-variant-numeric: tabular-nums;\n}\n\n.muted {\n color: var(--mj-text-muted);\n}\n\n.monospace-cell {\n font-family: monospace;\n font-size: 11px;\n color: var(--mj-brand-primary);\n}\n\n.weight-bar {\n display: inline-block;\n height: 6px;\n border-radius: 3px;\n vertical-align: middle;\n margin-right: 6px;\n}\n\n/* ===== BADGES ===== */\n.badge {\n display: inline-block;\n padding: 2px 8px;\n border-radius: 10px;\n font-size: 10.5px;\n font-weight: 600;\n}\n\n.badge-success {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.badge-warning {\n background: color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.badge-error {\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.badge-info {\n background: color-mix(in srgb, var(--mj-status-info) 12%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n}\n\n/* ===== SUB-SECTIONS ===== */\n.sub-section {\n margin-top: 24px;\n}\n\n.sub-section h3 {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 12px;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.sub-section h3 i {\n font-size: 13px;\n color: var(--mj-brand-primary);\n}\n\n/* ===== EMPTY STATE ===== */\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 3rem 2rem;\n text-align: center;\n gap: 0.75rem;\n border: 2px dashed var(--mj-border-default);\n border-radius: 12px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n}\n\n.empty-state i {\n font-size: 2.5rem;\n color: var(--mj-text-disabled);\n}\n\n.empty-state p {\n margin: 0;\n font-size: 0.85rem;\n max-width: 400px;\n}\n\n/* ===== DRILL-DOWN PANEL ===== */\n.drill-down-panel {\n margin-top: 16px;\n margin-bottom: 16px;\n background: var(--mj-bg-surface);\n border: 2px solid var(--mj-brand-primary);\n border-radius: 10px;\n overflow: hidden;\n animation: slideDown 0.2s ease-out;\n}\n\n@keyframes slideDown {\n from {\n opacity: 0;\n max-height: 0;\n }\n to {\n opacity: 1;\n max-height: 600px;\n }\n}\n\n.drill-down-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 16px;\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.drill-down-title {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-brand-primary);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.drill-down-close {\n border: none;\n background: transparent;\n color: var(--mj-text-muted);\n cursor: pointer;\n font-size: 14px;\n padding: 4px 8px;\n border-radius: 4px;\n transition: all 0.15s;\n}\n\n.drill-down-close:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.drill-down-table-wrap {\n max-height: 400px;\n overflow-y: auto;\n padding: 8px;\n}\n\n.drill-action-col {\n width: 40px;\n text-align: center;\n padding: 6px !important;\n}\n\n.drill-open-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n border: 1px solid var(--mj-border-default);\n border-radius: 5px;\n background: transparent;\n color: var(--mj-text-muted);\n font-size: 10px;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.drill-open-btn:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.drill-down-header-actions {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.drill-export-btn {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 5px;\n background: transparent;\n color: var(--mj-text-secondary);\n font-size: 11px;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.drill-export-btn:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.sub-section-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 0;\n}\n\n.sub-section-header h3 {\n margin: 0;\n}\n\n.drill-down-empty {\n padding: 24px;\n text-align: center;\n color: var(--mj-text-muted);\n font-size: 13px;\n}\n\n/* ===== STACKED BAR CHART ===== */\n.stacked-bar-chart {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.stacked-row {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.stacked-label {\n width: 90px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n text-align: right;\n flex-shrink: 0;\n}\n\n.stacked-track {\n flex: 1;\n height: 22px;\n display: flex;\n border-radius: 4px;\n overflow: hidden;\n}\n\n.stacked-seg {\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 9px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n min-width: 20px;\n}\n\n/* ===== VERTICAL BAR CHART ===== */\n.v-bar-chart {\n display: flex;\n align-items: flex-end;\n gap: 24px;\n height: 140px;\n padding-top: 10px;\n justify-content: center;\n}\n\n.v-bar-col {\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 100%;\n justify-content: flex-end;\n min-width: 60px;\n}\n\n.v-bar {\n width: 48px;\n border-radius: 4px 4px 0 0;\n display: flex;\n align-items: flex-start;\n justify-content: center;\n padding-top: 4px;\n font-size: 11px;\n font-weight: 700;\n color: var(--mj-text-inverse);\n}\n\n.v-bar-label {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 8px;\n text-align: center;\n}\n\n.chart-footnote {\n text-align: center;\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 14px;\n}\n\n/* ===== TWO COLUMN ===== */\n.two-col {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 20px;\n}\n\n/* ===== SOURCE SELECTED ===== */\n.source-selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 5%, var(--mj-bg-surface));\n}\n\n/* ===== QUALITY BANDS ===== */\n.quality-bands {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.quality-band-row {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.quality-band-label {\n font-size: 11px;\n color: var(--mj-text-muted);\n width: 65px;\n text-align: right;\n flex-shrink: 0;\n}\n\n.quality-band-track {\n flex: 1;\n height: 18px;\n background: var(--mj-bg-surface-card);\n border-radius: 4px;\n overflow: hidden;\n}\n\n.quality-band-fill {\n height: 100%;\n border-radius: 4px;\n display: flex;\n align-items: center;\n padding-left: 8px;\n font-size: 10px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n min-width: 30px;\n}\n\n.source-quality-note {\n margin-top: 14px;\n padding: 10px;\n background: var(--mj-bg-surface-card);\n border-radius: 6px;\n font-size: 11px;\n color: var(--mj-text-secondary);\n}\n\n/* ===== SOURCE HEALTH ===== */\n.source-health-grid {\n display: grid;\n gap: 12px;\n}\n\n.source-health-card {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 14px;\n text-align: center;\n border-top: 3px solid;\n}\n\n.health-card-name {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-bottom: 4px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.health-card-value {\n font-size: 22px;\n font-weight: 700;\n}\n\n.health-card-label {\n font-size: 10px;\n color: var(--mj-text-muted);\n}\n\n/* ===== PIPELINE ===== */\n.pipeline-throughput-bars {\n display: flex;\n align-items: flex-end;\n gap: 3px;\n height: 110px;\n}\n\n.pipeline-bar {\n flex: 1;\n border-radius: 2px 2px 0 0;\n min-height: 3px;\n}\n\n.pipeline-date-labels {\n display: flex;\n justify-content: space-between;\n margin-top: 6px;\n font-size: 10px;\n color: var(--mj-text-muted);\n}\n\n/* ===== PROCESSING STAGES ===== */\n.stage-bars {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.stage-row {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.stage-name {\n width: 80px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n text-align: right;\n flex-shrink: 0;\n}\n\n.stage-track {\n flex: 1;\n height: 24px;\n background: var(--mj-bg-surface-card);\n border-radius: 4px;\n overflow: hidden;\n}\n\n.stage-fill {\n height: 100%;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: flex-end;\n padding-right: 8px;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n}\n\n.stage-time {\n width: 50px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-primary);\n text-align: right;\n flex-shrink: 0;\n}\n\n.stage-summary {\n display: flex;\n justify-content: space-between;\n margin-top: 14px;\n padding-top: 10px;\n border-top: 1px solid var(--mj-border-default);\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.stage-warning {\n color: var(--mj-text-muted);\n}\n\n/* ===== SUCCESS RATE ===== */\n.success-rate-display {\n display: flex;\n justify-content: center;\n gap: 48px;\n padding: 20px;\n}\n\n.success-rate-stat {\n text-align: center;\n}\n\n.success-rate-value {\n font-size: 32px;\n font-weight: 700;\n line-height: 1.1;\n}\n\n.success-rate-label {\n font-size: 12px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n}\n\n/* ===== PROGRESS ===== */\n.progress-track {\n width: 100px;\n height: 6px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 3px;\n overflow: hidden;\n display: inline-block;\n vertical-align: middle;\n margin-right: 6px;\n}\n\n.progress-fill {\n height: 100%;\n border-radius: 3px;\n}\n\n.progress-text {\n font-size: 11px;\n font-weight: 600;\n}\n\n/* ===== ERROR LOG ===== */\n.error-log {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.error-entry {\n display: flex;\n gap: 12px;\n padding: 10px 14px;\n background: color-mix(in srgb, var(--mj-status-error) 4%, var(--mj-bg-surface));\n border-left: 3px solid var(--mj-status-error);\n border-radius: 0 6px 6px 0;\n font-size: 12px;\n}\n\n.error-time {\n color: var(--mj-text-muted);\n font-size: 11px;\n white-space: nowrap;\n flex-shrink: 0;\n width: 130px;\n}\n\n.error-source {\n color: var(--mj-brand-primary);\n font-weight: 600;\n flex-shrink: 0;\n width: 120px;\n}\n\n.error-msg {\n color: var(--mj-text-secondary);\n}\n\n/* ===== HISTOGRAM ===== */\n.histogram {\n display: flex;\n align-items: flex-end;\n gap: 6px;\n height: 130px;\n padding-bottom: 24px;\n}\n\n.hist-bar-col {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 100%;\n justify-content: flex-end;\n}\n\n.hist-bar {\n width: 100%;\n border-radius: 3px 3px 0 0;\n display: flex;\n align-items: flex-start;\n justify-content: center;\n padding-top: 3px;\n font-size: 10px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n min-height: 2px;\n}\n\n.hist-label {\n font-size: 9px;\n color: var(--mj-text-muted);\n margin-top: 6px;\n text-align: center;\n}\n\n.confidence-stats {\n display: flex;\n justify-content: space-between;\n margin-top: 8px;\n padding: 10px;\n background: var(--mj-bg-surface-card);\n border-radius: 6px;\n font-size: 11px;\n color: var(--mj-text-muted);\n flex-wrap: wrap;\n gap: 8px;\n}\n\n/* ===== GROUPED BAR CHART ===== */\n.grouped-bar-chart {\n display: flex;\n align-items: flex-end;\n gap: 20px;\n height: 140px;\n justify-content: center;\n}\n\n.grouped-col {\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 100%;\n justify-content: flex-end;\n}\n\n.grouped-bars {\n display: flex;\n gap: 3px;\n align-items: flex-end;\n height: 100%;\n}\n\n.g-bar {\n width: 18px;\n border-radius: 3px 3px 0 0;\n min-height: 2px;\n}\n\n.grouped-label {\n font-size: 10px;\n color: var(--mj-text-muted);\n margin-top: 6px;\n text-align: center;\n}\n\n/* ===== ACCURACY CHART ===== */\n.accuracy-chart {\n position: relative;\n display: flex;\n margin: 0 10px;\n}\n\n.accuracy-y-labels {\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n font-size: 9px;\n color: var(--mj-text-muted);\n margin-right: 8px;\n height: 110px;\n}\n\n.accuracy-area {\n flex: 1;\n position: relative;\n height: 110px;\n border-left: 1px solid var(--mj-border-default);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.accuracy-grid-line {\n position: absolute;\n left: 0;\n right: 0;\n border-top: 1px dashed var(--mj-border-subtle);\n}\n\n.accuracy-svg {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n\n.accuracy-x-labels {\n display: flex;\n justify-content: space-between;\n margin-top: 8px;\n padding: 0 40px 0 40px;\n font-size: 10px;\n color: var(--mj-text-muted);\n}\n\n.accuracy-trend-text {\n text-align: center;\n margin-top: 10px;\n font-size: 12px;\n color: var(--mj-status-success);\n}\n\n/* ===== MODEL COMPARISON ===== */\n.model-grid {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 12px;\n}\n\n.model-card {\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n padding: 14px;\n text-align: center;\n border: 1px solid var(--mj-border-default);\n}\n\n.model-name {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 8px;\n}\n\n.model-score {\n font-size: 28px;\n font-weight: 700;\n line-height: 1;\n}\n\n.model-detail {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n}\n\n.model-recommendation {\n margin-top: 14px;\n padding: 12px 16px;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: flex-start;\n gap: 8px;\n}\n\n/* ===== RESPONSIVE ===== */\n@media (max-width: 1200px) {\n .cards-grid {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .kpi-row {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .model-grid {\n grid-template-columns: repeat(2, 1fr);\n }\n}\n\n@media (max-width: 768px) {\n .analytics-layout {\n flex-direction: column;\n }\n\n .analytics-sidebar {\n width: 100%;\n min-width: 100%;\n border-right: none;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .sidebar-nav {\n flex-direction: row;\n overflow-x: auto;\n }\n\n .nav-item {\n border-left: none;\n border-bottom: 3px solid transparent;\n white-space: nowrap;\n }\n\n .nav-item.active {\n border-left-color: transparent;\n border-bottom-color: var(--mj-brand-primary);\n }\n\n .trending-section,\n .sidebar-divider {\n display: none;\n }\n\n .tab-section {\n padding: 16px;\n }\n\n .cards-grid {\n grid-template-columns: 1fr;\n }\n\n .kpi-row {\n grid-template-columns: 1fr;\n }\n\n .two-col {\n grid-template-columns: 1fr;\n }\n\n .cost-kpi-row {\n grid-template-columns: 1fr;\n }\n}\n\n/* ===== COST & USAGE TAB (D1) ===== */\n\n.tab-header-actions {\n display: flex;\n gap: 8px;\n margin-left: auto;\n}\n\n.cost-kpi-row {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 16px;\n margin-bottom: 24px;\n}\n\n.cost-kpi-card {\n display: flex;\n gap: 14px;\n align-items: center;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n padding: 18px 20px;\n transition: box-shadow 0.15s ease;\n}\n\n.cost-kpi-card:hover {\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n}\n\n.cost-kpi-icon {\n width: 44px;\n height: 44px;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 18px;\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n flex-shrink: 0;\n}\n\n.cost-kpi-value {\n font-size: 22px;\n font-weight: 700;\n color: var(--mj-text-primary);\n line-height: 1.2;\n}\n\n.cost-kpi-label {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.03em;\n}\n\n.cost-kpi-sub {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n.empty-state-hint {\n font-size: 12px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n}\n\n/* ===== D5: PRINT STYLES ===== */\n\n@media print {\n .analytics-sidebar,\n .filter-bar,\n .tab-header-actions,\n .drill-down-close,\n .drill-export-btn,\n .drill-open-btn {\n display: none !important;\n }\n\n .analytics-layout {\n display: block;\n }\n\n .main-content {\n padding: 0;\n }\n\n .tab-section {\n padding: 0;\n }\n\n .widget-card,\n .cost-kpi-card,\n .kpi-card {\n break-inside: avoid;\n box-shadow: none;\n border: 1px solid var(--mj-border-default);\n }\n\n .data-table {\n font-size: 10px;\n }\n}\n\n/* \u2500\u2500 Co-Occurrence Section \u2500\u2500 */\n\n/* Constrain the co-occurrence sub-section so an empty state or large table\n does not blow out the page height and render the app unusable. */\n.co-occurrence-section {\n max-height: 500px;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.co-occurrence-section .table-scroll {\n overflow-y: auto;\n max-height: 400px;\n flex: 1;\n min-height: 0;\n}\n\n.co-occurrence-section .empty-state {\n max-height: 200px;\n overflow: hidden;\n}\n\n.co-occurrence-actions {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.co-occurrence-staleness {\n display: flex;\n align-items: center;\n gap: 5px;\n font-size: 0.78rem;\n color: var(--mj-text-muted);\n}\n"] }]
|
|
4261
4252
|
}], null, null); })();
|
|
4262
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AnalyticsResourceComponent, { className: "AnalyticsResourceComponent", filePath: "src/KnowledgeHub/components/analytics/analytics-resource.component.ts", lineNumber:
|
|
4253
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AnalyticsResourceComponent, { className: "AnalyticsResourceComponent", filePath: "src/KnowledgeHub/components/analytics/analytics-resource.component.ts", lineNumber: 223 }); })();
|
|
4263
4254
|
/** Tree-shaking prevention */
|
|
4264
4255
|
export function LoadAnalyticsResource() {
|
|
4265
4256
|
// Prevents tree-shaking
|