@memberjunction/ng-dashboards 5.34.1 → 5.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AI/components/agents/agent-configuration.component.d.ts +51 -0
- package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-configuration.component.js +399 -292
- package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts +8 -2
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js +87 -85
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts +75 -0
- package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/ai-analytics-resource.component.js +400 -89
- package/dist/AI/components/analytics/ai-analytics-resource.component.js.map +1 -1
- package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts +5 -0
- package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/analytics-filter-bar.component.js +184 -135
- package/dist/AI/components/analytics/analytics-filter-bar.component.js.map +1 -1
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts +8 -2
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.js +104 -103
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.js.map +1 -1
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts +8 -2
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.js +76 -74
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.js +67 -87
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.js.map +1 -1
- package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts +12 -19
- package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/model-performance/model-performance.component.js +96 -203
- package/dist/AI/components/analytics/model-performance/model-performance.component.js.map +1 -1
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js +110 -126
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js +61 -77
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +990 -992
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +6 -3
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +493 -490
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
- package/dist/AI/components/models/model-management.component.d.ts +17 -0
- package/dist/AI/components/models/model-management.component.d.ts.map +1 -1
- package/dist/AI/components/models/model-management.component.js +370 -425
- package/dist/AI/components/models/model-management.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.d.ts +17 -0
- package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.js +317 -357
- package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
- package/dist/AI/components/requests/agent-requests-resource.component.d.ts +11 -0
- package/dist/AI/components/requests/agent-requests-resource.component.d.ts.map +1 -1
- package/dist/AI/components/requests/agent-requests-resource.component.js +170 -175
- package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
- package/dist/AI/components/system/system-configuration.component.d.ts +19 -0
- package/dist/AI/components/system/system-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/system/system-configuration.component.js +403 -362
- package/dist/AI/components/system/system-configuration.component.js.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.js +781 -783
- package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts +8 -3
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.js +547 -521
- package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
- package/dist/Actions/components/actions-overview.component.d.ts +6 -0
- package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +79 -30
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.d.ts +9 -3
- package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.js +196 -142
- package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.d.ts +41 -1
- package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.js +388 -94
- package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
- package/dist/Actions/components/explorer/index.d.ts +0 -1
- package/dist/Actions/components/explorer/index.d.ts.map +1 -1
- package/dist/Actions/components/explorer/index.js +0 -1
- package/dist/Actions/components/explorer/index.js.map +1 -1
- package/dist/Admin/admin-data-schema.component.js +32 -40
- package/dist/Admin/admin-data-schema.component.js.map +1 -1
- package/dist/Admin/admin-dev-tools-resource.component.js +32 -40
- package/dist/Admin/admin-dev-tools-resource.component.js.map +1 -1
- package/dist/Admin/admin-identity-access.component.js +32 -40
- package/dist/Admin/admin-identity-access.component.js.map +1 -1
- package/dist/Admin/admin-monitoring.component.js +32 -40
- package/dist/Admin/admin-monitoring.component.js.map +1 -1
- package/dist/ApplicationRoles/application-roles-resource.component.js +76 -82
- package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
- package/dist/Archiving/components/archive-config-resource.component.d.ts.map +1 -1
- package/dist/Archiving/components/archive-config-resource.component.js +24 -5
- package/dist/Archiving/components/archive-config-resource.component.js.map +1 -1
- package/dist/Archiving/components/archive-runs-resource.component.d.ts.map +1 -1
- package/dist/Archiving/components/archive-runs-resource.component.js +24 -5
- package/dist/Archiving/components/archive-runs-resource.component.js.map +1 -1
- package/dist/Communication/communication-logs-resource.component.d.ts +1 -1
- package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-logs-resource.component.js +80 -99
- package/dist/Communication/communication-logs-resource.component.js.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.js +127 -106
- package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
- package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-providers-resource.component.js +44 -45
- package/dist/Communication/communication-providers-resource.component.js.map +1 -1
- package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-runs-resource.component.js +60 -58
- package/dist/Communication/communication-runs-resource.component.js.map +1 -1
- package/dist/Communication/communication-templates-resource.component.d.ts +1 -1
- package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-templates-resource.component.js +139 -162
- package/dist/Communication/communication-templates-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.d.ts +7 -0
- package/dist/Credentials/components/credentials-audit-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.js +310 -297
- package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.js +245 -266
- package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.d.ts +7 -0
- package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.js +381 -399
- package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-overview-resource.component.js +222 -228
- package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.d.ts +6 -0
- package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.js +294 -305
- package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts +8 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts.map +1 -1
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +21 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js.map +1 -1
- package/dist/DatabaseDesigner/components/entity-list.component.js +147 -160
- package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js +19 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.js +20 -16
- package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
- package/dist/Home/home-dashboard.component.d.ts +6 -0
- package/dist/Home/home-dashboard.component.d.ts.map +1 -1
- package/dist/Home/home-dashboard.component.js +521 -485
- package/dist/Home/home-dashboard.component.js.map +1 -1
- package/dist/Integration/components/activity/activity.component.d.ts +8 -0
- package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
- package/dist/Integration/components/activity/activity.component.js +309 -318
- package/dist/Integration/components/activity/activity.component.js.map +1 -1
- package/dist/Integration/components/connections/connections.component.js +866 -847
- package/dist/Integration/components/connections/connections.component.js.map +1 -1
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +234 -233
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
- package/dist/Integration/components/overview/overview.component.js +182 -163
- package/dist/Integration/components/overview/overview.component.js.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.d.ts +2 -0
- package/dist/Integration/components/pipelines/pipelines.component.d.ts.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.js +610 -606
- package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
- package/dist/Integration/components/schedules/schedules.component.js +241 -241
- package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
- package/dist/Integration/integration.module.d.ts +1 -1
- package/dist/Integration/integration.module.d.ts.map +1 -1
- package/dist/Integration/integration.module.js +28 -1
- package/dist/Integration/integration.module.js.map +1 -1
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +673 -674
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +54 -51
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +745 -703
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts +12 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +191 -120
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts +18 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +486 -532
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.js +152 -160
- package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.js +302 -319
- package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.js +234 -246
- package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
- package/dist/MCP/mcp-dashboard.component.d.ts +20 -0
- package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
- package/dist/MCP/mcp-dashboard.component.js +1248 -1338
- package/dist/MCP/mcp-dashboard.component.js.map +1 -1
- package/dist/MCP/mcp.module.d.ts +1 -1
- package/dist/MCP/mcp.module.d.ts.map +1 -1
- package/dist/MCP/mcp.module.js +34 -1
- package/dist/MCP/mcp.module.js.map +1 -1
- package/dist/Permissions/audit-log-resource.component.js +76 -85
- package/dist/Permissions/audit-log-resource.component.js.map +1 -1
- package/dist/Permissions/resource-access-resource.component.js +64 -69
- package/dist/Permissions/resource-access-resource.component.js.map +1 -1
- package/dist/Permissions/user-access-resource.component.js +63 -74
- package/dist/Permissions/user-access-resource.component.js.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js +2 -2
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts +2 -1
- package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-activity-resource.component.js +11 -12
- package/dist/Scheduling/components/scheduling-activity-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-activity.component.d.ts +9 -1
- package/dist/Scheduling/components/scheduling-activity.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-activity.component.js +250 -197
- package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts +2 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.js +11 -12
- package/dist/Scheduling/components/scheduling-jobs-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs.component.d.ts +9 -1
- package/dist/Scheduling/components/scheduling-jobs.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs.component.js +203 -147
- package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts +2 -1
- package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-overview-resource.component.js +11 -12
- package/dist/Scheduling/components/scheduling-overview-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-overview.component.d.ts +3 -1
- package/dist/Scheduling/components/scheduling-overview.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-overview.component.js +224 -190
- package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.d.ts +19 -6
- package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.js +262 -104
- package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.js +773 -783
- package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
- package/dist/Testing/components/testing-analytics-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-analytics-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-analytics-resource.component.js +7 -14
- package/dist/Testing/components/testing-analytics-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-analytics.component.d.ts +3 -1
- package/dist/Testing/components/testing-analytics.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-analytics.component.js +420 -393
- package/dist/Testing/components/testing-analytics.component.js.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.js +16 -19
- package/dist/Testing/components/testing-dashboard-tab-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab.component.d.ts +3 -1
- package/dist/Testing/components/testing-dashboard-tab.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab.component.js +157 -122
- package/dist/Testing/components/testing-dashboard-tab.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-explorer-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer-resource.component.js +7 -12
- package/dist/Testing/components/testing-explorer-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer.component.d.ts +8 -1
- package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer.component.js +587 -608
- package/dist/Testing/components/testing-explorer.component.js.map +1 -1
- package/dist/Testing/components/testing-review-resource.component.d.ts +4 -1
- package/dist/Testing/components/testing-review-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-review-resource.component.js +9 -12
- package/dist/Testing/components/testing-review-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-review.component.d.ts +3 -1
- package/dist/Testing/components/testing-review.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-review.component.js +310 -274
- package/dist/Testing/components/testing-review.component.js.map +1 -1
- package/dist/Testing/components/testing-runs-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-runs-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-runs-resource.component.js +16 -19
- package/dist/Testing/components/testing-runs-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-runs.component.d.ts +3 -1
- package/dist/Testing/components/testing-runs.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-runs.component.js +307 -273
- package/dist/Testing/components/testing-runs.component.js.map +1 -1
- package/dist/Testing/testing-dashboard.component.d.ts +2 -0
- package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
- package/dist/Testing/testing-dashboard.component.js +107 -93
- package/dist/Testing/testing-dashboard.component.js.map +1 -1
- package/dist/VersionHistory/components/diff-resource.component.js +185 -188
- package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/graph-resource.component.js +154 -184
- package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/labels-resource.component.d.ts +7 -0
- package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -1
- package/dist/VersionHistory/components/labels-resource.component.js +350 -354
- package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/restore-resource.component.js +163 -169
- package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
- package/dist/actions-dashboards.module.d.ts +15 -16
- package/dist/actions-dashboards.module.d.ts.map +1 -1
- package/dist/actions-dashboards.module.js +34 -11
- package/dist/actions-dashboards.module.js.map +1 -1
- package/dist/ai-dashboards.module.d.ts +45 -48
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +36 -10
- package/dist/ai-dashboards.module.js.map +1 -1
- package/dist/archiving-dashboards.module.d.ts +2 -1
- package/dist/archiving-dashboards.module.d.ts.map +1 -1
- package/dist/archiving-dashboards.module.js +12 -2
- package/dist/archiving-dashboards.module.js.map +1 -1
- package/dist/communication-dashboards.module.d.ts +2 -1
- package/dist/communication-dashboards.module.d.ts.map +1 -1
- package/dist/communication-dashboards.module.js +24 -3
- package/dist/communication-dashboards.module.js.map +1 -1
- package/dist/core-dashboards.module.d.ts +1 -1
- package/dist/core-dashboards.module.d.ts.map +1 -1
- package/dist/core-dashboards.module.js +31 -1
- package/dist/core-dashboards.module.js.map +1 -1
- package/dist/credentials-dashboards.module.d.ts +1 -1
- package/dist/credentials-dashboards.module.d.ts.map +1 -1
- package/dist/credentials-dashboards.module.js +28 -1
- package/dist/credentials-dashboards.module.js.map +1 -1
- package/dist/lists-dashboards.module.d.ts +1 -1
- package/dist/lists-dashboards.module.d.ts.map +1 -1
- package/dist/lists-dashboards.module.js +28 -1
- package/dist/lists-dashboards.module.js.map +1 -1
- package/dist/public-api.d.ts +2 -2
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +3 -3
- package/dist/public-api.js.map +1 -1
- package/dist/scheduling-dashboards.module.d.ts +1 -1
- package/dist/scheduling-dashboards.module.d.ts.map +1 -1
- package/dist/scheduling-dashboards.module.js +31 -1
- package/dist/scheduling-dashboards.module.js.map +1 -1
- package/dist/testing-dashboards.module.d.ts +8 -7
- package/dist/testing-dashboards.module.d.ts.map +1 -1
- package/dist/testing-dashboards.module.js +30 -0
- package/dist/testing-dashboards.module.js.map +1 -1
- package/package.json +52 -52
- package/dist/AI/components/agents/agent-filter-panel.component.d.ts +0 -56
- package/dist/AI/components/agents/agent-filter-panel.component.d.ts.map +0 -1
- package/dist/AI/components/agents/agent-filter-panel.component.js +0 -285
- package/dist/AI/components/agents/agent-filter-panel.component.js.map +0 -1
- package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts +0 -49
- package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts.map +0 -1
- package/dist/AI/components/prompts/prompt-filter-panel.component.js +0 -184
- package/dist/AI/components/prompts/prompt-filter-panel.component.js.map +0 -1
- package/dist/AI/components/system/system-config-filter-panel.component.d.ts +0 -33
- package/dist/AI/components/system/system-config-filter-panel.component.d.ts.map +0 -1
- package/dist/AI/components/system/system-config-filter-panel.component.js +0 -144
- package/dist/AI/components/system/system-config-filter-panel.component.js.map +0 -1
- package/dist/Actions/components/explorer/action-toolbar.component.d.ts +0 -63
- package/dist/Actions/components/explorer/action-toolbar.component.d.ts.map +0 -1
- package/dist/Actions/components/explorer/action-toolbar.component.js +0 -463
- package/dist/Actions/components/explorer/action-toolbar.component.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-analysis.component.js","sourceRoot":"","sources":["../../../../../src/AI/components/analytics/error-analysis/error-analysis.component.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Error Analysis -- Basic.\n *\n * Displays error summary cards, and errors grouped by source (Prompt+Model combination).\n * Each group can be expanded to show individual error details.\n * Data loaded from MJ: AI Prompt Runs where Success=false.\n */\n\nimport {\n Component, Input, Output, EventEmitter,\n OnInit, OnDestroy, ChangeDetectorRef, inject\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { RunView } from '@memberjunction/core';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { GlobalFilterState } from '../../../interfaces/analytics-preferences.interface';\n\n// ── Interfaces ──\n\ninterface FailedRunRecord {\n ID: string;\n RunAt: string;\n ErrorMessage: string | null;\n Model: string | null;\n Prompt: string | null;\n Vendor: string | null;\n ExecutionTimeMS: number | null;\n Status: string;\n}\n\ninterface ErrorSummary {\n TotalErrors: number;\n ErrorRate: number;\n MostCommonError: string;\n}\n\ninterface ErrorGroup {\n Source: string;\n PromptName: string;\n ModelName: string;\n Count: number;\n LastErrorMessage: string;\n LastErrorTime: string;\n IsExpanded: boolean;\n Errors: ErrorDetail[];\n}\n\ninterface ErrorDetail {\n ID: string;\n Time: string;\n ErrorMessage: string;\n Duration: string;\n}\n\nconst FIELDS = [\n 'ID', 'RunAt', 'ErrorMessage', 'Model', 'Prompt',\n 'Vendor', 'ExecutionTimeMS', 'Status'\n];\n\n@Component({\n standalone: false,\n selector: 'app-analytics-error-analysis',\n template: `\n <!-- Filter Bar -->\n <app-analytics-filter-bar\n [TimeRange]=\"TimeRange\"\n [Filters]=\"Filters\"\n [ShowAgentFilter]=\"false\"\n [ShowPromptFilter]=\"true\"\n [ShowModelFilter]=\"true\"\n [ShowStatusFilter]=\"false\"\n [ShowCompareToggle]=\"false\"\n [ShowExportButton]=\"false\"\n (TimeRangeChange)=\"OnTimeRangeChange($event)\"\n (FiltersChange)=\"OnFiltersChange($event)\"\n ></app-analytics-filter-bar>\n\n @if (IsLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading error data...\"></mj-loading>\n </div>\n } @else {\n <!-- Summary Cards -->\n <div class=\"summary-row\">\n <div class=\"summary-card summary-card--error\">\n <div class=\"summary-icon\">\n <i class=\"fa-solid fa-circle-exclamation\"></i>\n </div>\n <div class=\"summary-content\">\n <div class=\"summary-label\">Total Errors</div>\n <div class=\"summary-value\">{{ Summary.TotalErrors | number }}</div>\n </div>\n </div>\n <div class=\"summary-card\">\n <div class=\"summary-icon summary-icon--warning\">\n <i class=\"fa-solid fa-percentage\"></i>\n </div>\n <div class=\"summary-content\">\n <div class=\"summary-label\">Error Rate</div>\n <div class=\"summary-value\">{{ Summary.ErrorRate | number:'1.1-1' }}%</div>\n </div>\n </div>\n <div class=\"summary-card\">\n <div class=\"summary-icon summary-icon--info\">\n <i class=\"fa-solid fa-bug\"></i>\n </div>\n <div class=\"summary-content\">\n <div class=\"summary-label\">Most Common</div>\n <div class=\"summary-value summary-value--text\" [title]=\"Summary.MostCommonError\">\n {{ Summary.MostCommonError || 'N/A' }}\n </div>\n </div>\n </div>\n </div>\n\n <!-- Error Groups -->\n @if (ErrorGroups.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-check-circle empty-state__icon\"></i>\n <div class=\"empty-state__title\">No Errors Found</div>\n <div class=\"empty-state__subtitle\">No errors detected in the selected time range.</div>\n </div>\n }\n\n @for (group of ErrorGroups; track group.Source) {\n <div class=\"error-group\" [class.error-group--expanded]=\"group.IsExpanded\">\n <div\n class=\"error-group__header\"\n (click)=\"ToggleGroup(group)\"\n role=\"button\"\n tabindex=\"0\"\n (keydown.enter)=\"ToggleGroup(group)\">\n <div class=\"error-group__left\">\n <i [class]=\"group.IsExpanded ? 'fa-solid fa-chevron-down' : 'fa-solid fa-chevron-right'\"\n class=\"expand-icon\"></i>\n <div class=\"error-group__source\">\n <div class=\"source-name\">{{ group.Source }}</div>\n <div class=\"source-details\">\n <span class=\"source-prompt\">{{ group.PromptName }}</span>\n <span class=\"source-separator\">+</span>\n <span class=\"source-model\">{{ group.ModelName }}</span>\n </div>\n </div>\n </div>\n <div class=\"error-group__right\">\n <span class=\"error-count-badge\">{{ group.Count }}</span>\n <div class=\"last-error-time\">{{ group.LastErrorTime }}</div>\n </div>\n </div>\n\n @if (!group.IsExpanded) {\n <div class=\"error-group__preview\">\n <span class=\"preview-label\">Last error:</span>\n {{ group.LastErrorMessage }}\n </div>\n }\n\n @if (group.IsExpanded) {\n <div class=\"error-group__body\">\n @for (err of group.Errors; track err.ID) {\n <div class=\"error-detail\">\n <div class=\"error-detail__header\">\n <span class=\"error-detail__time\">{{ err.Time }}</span>\n @if (err.Duration) {\n <span class=\"error-detail__duration\">{{ err.Duration }}</span>\n }\n </div>\n <div class=\"error-detail__message\">{{ err.ErrorMessage }}</div>\n </div>\n }\n </div>\n }\n </div>\n }\n }\n `,\n styles: [`\n :host { display: block; }\n\n .loading-container {\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 300px;\n }\n\n /* ── Summary Row ── */\n .summary-row {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n margin: 16px 0;\n }\n\n .summary-card {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n padding: 16px;\n display: flex;\n align-items: center;\n gap: 14px;\n }\n\n .summary-card--error {\n border-left: 4px solid var(--mj-status-error);\n }\n\n .summary-icon {\n width: 40px;\n height: 40px;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n font-size: 16px;\n flex-shrink: 0;\n }\n\n .summary-icon--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 .summary-icon--info {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n }\n\n .summary-label {\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n }\n\n .summary-value {\n font-size: 22px;\n font-weight: 700;\n color: var(--mj-text-primary);\n letter-spacing: -0.02em;\n }\n\n .summary-value--text {\n font-size: 13px;\n font-weight: 500;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 220px;\n }\n\n /* ── Empty State ── */\n .empty-state {\n text-align: center;\n padding: 48px 24px;\n color: var(--mj-text-muted);\n }\n\n .empty-state__icon {\n font-size: 40px;\n color: var(--mj-status-success);\n margin-bottom: 12px;\n }\n\n .empty-state__title {\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n }\n\n .empty-state__subtitle {\n font-size: 13px;\n color: var(--mj-text-muted);\n }\n\n /* ── Error Groups ── */\n .error-group {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n margin-bottom: 8px;\n overflow: hidden;\n transition: border-color 0.2s;\n }\n\n .error-group--expanded {\n border-color: var(--mj-status-error);\n }\n\n .error-group__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 14px 16px;\n cursor: pointer;\n transition: background 0.15s;\n }\n\n .error-group__header:hover {\n background: var(--mj-bg-surface-hover);\n }\n\n .error-group__left {\n display: flex;\n align-items: center;\n gap: 10px;\n min-width: 0;\n }\n\n .expand-icon {\n font-size: 11px;\n color: var(--mj-text-muted);\n width: 16px;\n flex-shrink: 0;\n transition: transform 0.2s;\n }\n\n .error-group__source {\n min-width: 0;\n }\n\n .source-name {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .source-details {\n font-size: 12px;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 4px;\n margin-top: 2px;\n }\n\n .source-separator {\n color: var(--mj-text-disabled);\n }\n\n .error-group__right {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-shrink: 0;\n }\n\n .error-count-badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 28px;\n height: 24px;\n padding: 0 8px;\n border-radius: 12px;\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n font-size: 12px;\n font-weight: 700;\n }\n\n .last-error-time {\n font-size: 12px;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n }\n\n .error-group__preview {\n padding: 0 16px 12px 42px;\n font-size: 12px;\n color: var(--mj-text-muted);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .preview-label {\n color: var(--mj-text-disabled);\n margin-right: 4px;\n }\n\n .error-group__body {\n border-top: 1px solid var(--mj-border-subtle);\n max-height: 400px;\n overflow-y: auto;\n }\n\n .error-detail {\n padding: 12px 16px 12px 42px;\n border-bottom: 1px solid var(--mj-border-subtle);\n }\n\n .error-detail:last-child {\n border-bottom: none;\n }\n\n .error-detail__header {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-bottom: 4px;\n }\n\n .error-detail__time {\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-muted);\n }\n\n .error-detail__duration {\n font-size: 11px;\n color: var(--mj-text-disabled);\n font-variant-numeric: tabular-nums;\n }\n\n .error-detail__message {\n font-size: 13px;\n color: var(--mj-status-error-text, var(--mj-status-error));\n line-height: 1.5;\n word-break: break-word;\n font-family: monospace;\n background: color-mix(in srgb, var(--mj-status-error) 5%, var(--mj-bg-surface));\n padding: 8px 10px;\n border-radius: 6px;\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n }\n\n /* ── Responsive ── */\n @media (max-width: 768px) {\n .summary-row {\n grid-template-columns: 1fr;\n }\n\n .summary-value {\n font-size: 18px;\n }\n }\n `]\n})\nexport class AnalyticsErrorAnalysisComponent extends BaseAngularComponent implements OnInit, OnDestroy {\n @Input() TimeRange = '7d';\n @Input() Filters: GlobalFilterState = { Models: [], Agents: [], Prompts: [], Statuses: [] };\n\n private cdr = inject(ChangeDetectorRef);\n private destroy$ = new Subject<void>();\n\n public IsLoading = false;\n\n public Summary: ErrorSummary = {\n TotalErrors: 0,\n ErrorRate: 0,\n MostCommonError: ''\n };\n\n public ErrorGroups: ErrorGroup[] = [];\n\n private failedRuns: FailedRunRecord[] = [];\n private totalRunCount = 0;\n\n ngOnInit(): void {\n this.LoadData();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n // ── Public Handlers ──\n\n public OnTimeRangeChange(range: string): void {\n this.TimeRange = range;\n this.LoadData();\n }\n\n public OnFiltersChange(filters: GlobalFilterState): void {\n this.Filters = filters;\n this.LoadData();\n }\n\n public ToggleGroup(group: ErrorGroup): void {\n group.IsExpanded = !group.IsExpanded;\n this.cdr.detectChanges();\n }\n\n // ── Data Loading ──\n\n private async LoadData(): Promise<void> {\n this.IsLoading = true;\n this.cdr.detectChanges();\n\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const dateFilter = this.buildDateFilter();\n const extraFilters = this.buildExtraFilters();\n const baseFilter = [dateFilter, ...extraFilters].filter(Boolean).join(' AND ');\n const errorFilter = baseFilter + ' AND Success = 0';\n\n const [errorResult, totalResult] = await rv.RunViews([\n {\n EntityName: 'MJ: AI Prompt Runs',\n ExtraFilter: errorFilter,\n Fields: FIELDS,\n OrderBy: 'RunAt DESC',\n ResultType: 'simple'\n },\n {\n EntityName: 'MJ: AI Prompt Runs',\n ExtraFilter: baseFilter,\n Fields: ['ID'],\n ResultType: 'simple'\n }\n ]);\n\n this.failedRuns = (errorResult?.Results ?? []) as FailedRunRecord[];\n this.totalRunCount = totalResult?.Results?.length ?? 0;\n\n this.computeSummary();\n this.buildErrorGroups();\n } catch (e) {\n console.error('Error Analysis load error:', e);\n } finally {\n this.IsLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n // ── Computations ──\n\n private computeSummary(): void {\n const errorCount = this.failedRuns.length;\n const errorRate = this.totalRunCount > 0 ? (errorCount / this.totalRunCount) * 100 : 0;\n\n // Find most common error by grouping error messages\n const messageCounts = new Map<string, number>();\n for (const run of this.failedRuns) {\n const msg = this.normalizeErrorMessage(run.ErrorMessage ?? 'Unknown error');\n messageCounts.set(msg, (messageCounts.get(msg) ?? 0) + 1);\n }\n\n let mostCommon = '';\n let maxCount = 0;\n for (const [msg, count] of messageCounts) {\n if (count > maxCount) {\n maxCount = count;\n mostCommon = msg;\n }\n }\n\n this.Summary = {\n TotalErrors: errorCount,\n ErrorRate: errorRate,\n MostCommonError: mostCommon\n };\n }\n\n private buildErrorGroups(): void {\n const groups = new Map<string, FailedRunRecord[]>();\n\n for (const run of this.failedRuns) {\n const prompt = run.Prompt ?? 'Unknown Prompt';\n const model = run.Model ?? 'Unknown Model';\n const key = prompt + ' + ' + model;\n if (!groups.has(key)) groups.set(key, []);\n groups.get(key)!.push(run);\n }\n\n this.ErrorGroups = Array.from(groups.entries())\n .map(([source, runs]) => {\n const sortedRuns = runs.sort((a, b) =>\n new Date(b.RunAt).getTime() - new Date(a.RunAt).getTime()\n );\n\n return {\n Source: source,\n PromptName: sortedRuns[0].Prompt ?? 'Unknown',\n ModelName: sortedRuns[0].Model ?? 'Unknown',\n Count: sortedRuns.length,\n LastErrorMessage: this.truncateMessage(sortedRuns[0].ErrorMessage ?? 'No message'),\n LastErrorTime: this.formatRelativeTime(sortedRuns[0].RunAt),\n IsExpanded: false,\n Errors: sortedRuns.slice(0, 20).map(r => ({\n ID: r.ID,\n Time: this.formatDateTime(r.RunAt),\n ErrorMessage: r.ErrorMessage ?? 'No error message',\n Duration: r.ExecutionTimeMS != null ? r.ExecutionTimeMS + 'ms' : ''\n }))\n };\n })\n .sort((a, b) => b.Count - a.Count);\n }\n\n // ── Helpers ──\n\n private buildDateFilter(): string {\n const now = new Date();\n const msMap: Record<string, number> = {\n '1h': 3600000, '6h': 21600000, '24h': 86400000,\n '7d': 604800000, '30d': 2592000000\n };\n const ms = msMap[this.TimeRange] ?? 604800000;\n const start = new Date(now.getTime() - ms);\n return `RunAt >= '${start.toISOString()}'`;\n }\n\n private buildExtraFilters(): string[] {\n const filters: string[] = [];\n if (this.Filters.Models.length > 0) {\n filters.push(`ModelID IN (${this.Filters.Models.map(id => `'${id}'`).join(',')})`);\n }\n if (this.Filters.Prompts.length > 0) {\n filters.push(`PromptID IN (${this.Filters.Prompts.map(id => `'${id}'`).join(',')})`);\n }\n return filters;\n }\n\n private normalizeErrorMessage(msg: string): string {\n // Truncate and normalize for grouping\n return msg.slice(0, 100).trim().toLowerCase();\n }\n\n private truncateMessage(msg: string): string {\n if (msg.length <= 120) return msg;\n return msg.slice(0, 120) + '...';\n }\n\n private formatRelativeTime(dateStr: string): string {\n const now = Date.now();\n const then = new Date(dateStr).getTime();\n const diffMin = Math.floor((now - then) / 60000);\n if (diffMin < 1) return 'just now';\n if (diffMin < 60) return diffMin + 'm ago';\n const diffHr = Math.floor(diffMin / 60);\n if (diffHr < 24) return diffHr + 'h ago';\n const diffDay = Math.floor(diffHr / 24);\n return diffDay + 'd ago';\n }\n\n private formatDateTime(dateStr: string): string {\n const d = new Date(dateStr);\n const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n const hh = d.getHours().toString().padStart(2, '0');\n const mm = d.getMinutes().toString().padStart(2, '0');\n return `${months[d.getMonth()]} ${d.getDate()} ${hh}:${mm}`;\n }\n}\n\nexport function LoadAnalyticsErrorAnalysis() { /* tree-shaking prevention */ }\n"]}
|
|
1
|
+
{"version":3,"file":"error-analysis.component.js","sourceRoot":"","sources":["../../../../../src/AI/components/analytics/error-analysis/error-analysis.component.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Error Analysis -- Basic.\n *\n * Displays error summary cards, and errors grouped by source (Prompt+Model combination).\n * Each group can be expanded to show individual error details.\n * Data loaded from MJ: AI Prompt Runs where Success=false.\n */\n\nimport {\n Component, Input, Output, EventEmitter,\n OnInit, OnDestroy, ChangeDetectorRef, inject\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { RunView } from '@memberjunction/core';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { GlobalFilterState } from '../../../interfaces/analytics-preferences.interface';\n\n// ── Interfaces ──\n\ninterface FailedRunRecord {\n ID: string;\n RunAt: string;\n ErrorMessage: string | null;\n Model: string | null;\n Prompt: string | null;\n Vendor: string | null;\n ExecutionTimeMS: number | null;\n Status: string;\n}\n\ninterface ErrorSummary {\n TotalErrors: number;\n ErrorRate: number;\n MostCommonError: string;\n}\n\ninterface ErrorGroup {\n Source: string;\n PromptName: string;\n ModelName: string;\n Count: number;\n LastErrorMessage: string;\n LastErrorTime: string;\n IsExpanded: boolean;\n Errors: ErrorDetail[];\n}\n\ninterface ErrorDetail {\n ID: string;\n Time: string;\n ErrorMessage: string;\n Duration: string;\n}\n\nconst FIELDS = [\n 'ID', 'RunAt', 'ErrorMessage', 'Model', 'Prompt',\n 'Vendor', 'ExecutionTimeMS', 'Status'\n];\n\n@Component({\n standalone: false,\n selector: 'app-analytics-error-analysis',\n template: `\n\n @if (IsLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading error data...\"></mj-loading>\n </div>\n } @else {\n <!-- Summary Cards -->\n <div class=\"summary-row\">\n <div class=\"summary-card summary-card--error\">\n <div class=\"summary-icon\">\n <i class=\"fa-solid fa-circle-exclamation\"></i>\n </div>\n <div class=\"summary-content\">\n <div class=\"summary-label\">Total Errors</div>\n <div class=\"summary-value\">{{ Summary.TotalErrors | number }}</div>\n </div>\n </div>\n <div class=\"summary-card\">\n <div class=\"summary-icon summary-icon--warning\">\n <i class=\"fa-solid fa-percentage\"></i>\n </div>\n <div class=\"summary-content\">\n <div class=\"summary-label\">Error Rate</div>\n <div class=\"summary-value\">{{ Summary.ErrorRate | number:'1.1-1' }}%</div>\n </div>\n </div>\n <div class=\"summary-card\">\n <div class=\"summary-icon summary-icon--info\">\n <i class=\"fa-solid fa-bug\"></i>\n </div>\n <div class=\"summary-content\">\n <div class=\"summary-label\">Most Common</div>\n <div class=\"summary-value summary-value--text\" [title]=\"Summary.MostCommonError\">\n {{ Summary.MostCommonError || 'N/A' }}\n </div>\n </div>\n </div>\n </div>\n\n <!-- Error Groups -->\n @if (ErrorGroups.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-check-circle empty-state__icon\"></i>\n <div class=\"empty-state__title\">No Errors Found</div>\n <div class=\"empty-state__subtitle\">No errors detected in the selected time range.</div>\n </div>\n }\n\n @for (group of ErrorGroups; track group.Source) {\n <div class=\"error-group\" [class.error-group--expanded]=\"group.IsExpanded\">\n <div\n class=\"error-group__header\"\n (click)=\"ToggleGroup(group)\"\n role=\"button\"\n tabindex=\"0\"\n (keydown.enter)=\"ToggleGroup(group)\">\n <div class=\"error-group__left\">\n <i [class]=\"group.IsExpanded ? 'fa-solid fa-chevron-down' : 'fa-solid fa-chevron-right'\"\n class=\"expand-icon\"></i>\n <div class=\"error-group__source\">\n <div class=\"source-name\">{{ group.Source }}</div>\n <div class=\"source-details\">\n <span class=\"source-prompt\">{{ group.PromptName }}</span>\n <span class=\"source-separator\">+</span>\n <span class=\"source-model\">{{ group.ModelName }}</span>\n </div>\n </div>\n </div>\n <div class=\"error-group__right\">\n <span class=\"error-count-badge\">{{ group.Count }}</span>\n <div class=\"last-error-time\">{{ group.LastErrorTime }}</div>\n </div>\n </div>\n\n @if (!group.IsExpanded) {\n <div class=\"error-group__preview\">\n <span class=\"preview-label\">Last error:</span>\n {{ group.LastErrorMessage }}\n </div>\n }\n\n @if (group.IsExpanded) {\n <div class=\"error-group__body\">\n @for (err of group.Errors; track err.ID) {\n <div class=\"error-detail\">\n <div class=\"error-detail__header\">\n <span class=\"error-detail__time\">{{ err.Time }}</span>\n @if (err.Duration) {\n <span class=\"error-detail__duration\">{{ err.Duration }}</span>\n }\n </div>\n <div class=\"error-detail__message\">{{ err.ErrorMessage }}</div>\n </div>\n }\n </div>\n }\n </div>\n }\n }\n `,\n styles: [`\n :host { display: block; }\n\n .loading-container {\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 300px;\n }\n\n /* ── Summary Row ── */\n .summary-row {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n margin: 16px 0;\n }\n\n .summary-card {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n padding: 16px;\n display: flex;\n align-items: center;\n gap: 14px;\n }\n\n .summary-card--error {\n border-left: 4px solid var(--mj-status-error);\n }\n\n .summary-icon {\n width: 40px;\n height: 40px;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n font-size: 16px;\n flex-shrink: 0;\n }\n\n .summary-icon--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 .summary-icon--info {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n }\n\n .summary-label {\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n }\n\n .summary-value {\n font-size: 22px;\n font-weight: 700;\n color: var(--mj-text-primary);\n letter-spacing: -0.02em;\n }\n\n .summary-value--text {\n font-size: 13px;\n font-weight: 500;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 220px;\n }\n\n /* ── Empty State ── */\n .empty-state {\n text-align: center;\n padding: 48px 24px;\n color: var(--mj-text-muted);\n }\n\n .empty-state__icon {\n font-size: 40px;\n color: var(--mj-status-success);\n margin-bottom: 12px;\n }\n\n .empty-state__title {\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n }\n\n .empty-state__subtitle {\n font-size: 13px;\n color: var(--mj-text-muted);\n }\n\n /* ── Error Groups ── */\n .error-group {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n margin-bottom: 8px;\n overflow: hidden;\n transition: border-color 0.2s;\n }\n\n .error-group--expanded {\n border-color: var(--mj-status-error);\n }\n\n .error-group__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 14px 16px;\n cursor: pointer;\n transition: background 0.15s;\n }\n\n .error-group__header:hover {\n background: var(--mj-bg-surface-hover);\n }\n\n .error-group__left {\n display: flex;\n align-items: center;\n gap: 10px;\n min-width: 0;\n }\n\n .expand-icon {\n font-size: 11px;\n color: var(--mj-text-muted);\n width: 16px;\n flex-shrink: 0;\n transition: transform 0.2s;\n }\n\n .error-group__source {\n min-width: 0;\n }\n\n .source-name {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .source-details {\n font-size: 12px;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 4px;\n margin-top: 2px;\n }\n\n .source-separator {\n color: var(--mj-text-disabled);\n }\n\n .error-group__right {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-shrink: 0;\n }\n\n .error-count-badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 28px;\n height: 24px;\n padding: 0 8px;\n border-radius: 12px;\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n font-size: 12px;\n font-weight: 700;\n }\n\n .last-error-time {\n font-size: 12px;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n }\n\n .error-group__preview {\n padding: 0 16px 12px 42px;\n font-size: 12px;\n color: var(--mj-text-muted);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .preview-label {\n color: var(--mj-text-disabled);\n margin-right: 4px;\n }\n\n .error-group__body {\n border-top: 1px solid var(--mj-border-subtle);\n max-height: 400px;\n overflow-y: auto;\n }\n\n .error-detail {\n padding: 12px 16px 12px 42px;\n border-bottom: 1px solid var(--mj-border-subtle);\n }\n\n .error-detail:last-child {\n border-bottom: none;\n }\n\n .error-detail__header {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-bottom: 4px;\n }\n\n .error-detail__time {\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-muted);\n }\n\n .error-detail__duration {\n font-size: 11px;\n color: var(--mj-text-disabled);\n font-variant-numeric: tabular-nums;\n }\n\n .error-detail__message {\n font-size: 13px;\n color: var(--mj-status-error-text, var(--mj-status-error));\n line-height: 1.5;\n word-break: break-word;\n font-family: monospace;\n background: color-mix(in srgb, var(--mj-status-error) 5%, var(--mj-bg-surface));\n padding: 8px 10px;\n border-radius: 6px;\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n }\n\n /* ── Responsive ── */\n @media (max-width: 768px) {\n .summary-row {\n grid-template-columns: 1fr;\n }\n\n .summary-value {\n font-size: 18px;\n }\n }\n `]\n})\nexport class AnalyticsErrorAnalysisComponent extends BaseAngularComponent implements OnInit, OnDestroy {\n private _timeRange = '7d';\n @Input()\n set TimeRange(value: string) {\n const prev = this._timeRange;\n this._timeRange = value;\n if (prev !== value && this.initialized) this.LoadData();\n }\n get TimeRange(): string { return this._timeRange; }\n\n private _filters: GlobalFilterState = { Models: [], Agents: [], Prompts: [], Statuses: [] };\n @Input()\n set Filters(value: GlobalFilterState) {\n const next = value ?? { Models: [], Agents: [], Prompts: [], Statuses: [] };\n const changed = !this.shallowFiltersEqual(this._filters, next);\n this._filters = next;\n if (changed && this.initialized) this.LoadData();\n }\n get Filters(): GlobalFilterState { return this._filters; }\n\n private shallowFiltersEqual(a: GlobalFilterState, b: GlobalFilterState): boolean {\n const sameArr = (x: string[], y: string[]) => x.length === y.length && x.every((v, i) => v === y[i]);\n return sameArr(a.Models, b.Models) && sameArr(a.Agents, b.Agents) && sameArr(a.Prompts, b.Prompts) && sameArr(a.Statuses, b.Statuses);\n }\n\n private cdr = inject(ChangeDetectorRef);\n private destroy$ = new Subject<void>();\n private initialized = false;\n\n public IsLoading = false;\n\n public Summary: ErrorSummary = {\n TotalErrors: 0,\n ErrorRate: 0,\n MostCommonError: ''\n };\n\n public ErrorGroups: ErrorGroup[] = [];\n\n private failedRuns: FailedRunRecord[] = [];\n private totalRunCount = 0;\n\n ngOnInit(): void {\n this.initialized = true;\n this.LoadData();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n // ── Public Handlers ──\n\n public OnTimeRangeChange(range: string): void {\n this.TimeRange = range;\n this.LoadData();\n }\n\n public OnFiltersChange(filters: GlobalFilterState): void {\n this.Filters = filters;\n this.LoadData();\n }\n\n public ToggleGroup(group: ErrorGroup): void {\n group.IsExpanded = !group.IsExpanded;\n this.cdr.detectChanges();\n }\n\n // ── Data Loading ──\n\n private async LoadData(): Promise<void> {\n this.IsLoading = true;\n this.cdr.detectChanges();\n\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const dateFilter = this.buildDateFilter();\n const extraFilters = this.buildExtraFilters();\n const baseFilter = [dateFilter, ...extraFilters].filter(Boolean).join(' AND ');\n const errorFilter = baseFilter + ' AND Success = 0';\n\n const [errorResult, totalResult] = await rv.RunViews([\n {\n EntityName: 'MJ: AI Prompt Runs',\n ExtraFilter: errorFilter,\n Fields: FIELDS,\n OrderBy: 'RunAt DESC',\n ResultType: 'simple'\n },\n {\n EntityName: 'MJ: AI Prompt Runs',\n ExtraFilter: baseFilter,\n Fields: ['ID'],\n ResultType: 'simple'\n }\n ]);\n\n this.failedRuns = (errorResult?.Results ?? []) as FailedRunRecord[];\n this.totalRunCount = totalResult?.Results?.length ?? 0;\n\n this.computeSummary();\n this.buildErrorGroups();\n } catch (e) {\n console.error('Error Analysis load error:', e);\n } finally {\n this.IsLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n // ── Computations ──\n\n private computeSummary(): void {\n const errorCount = this.failedRuns.length;\n const errorRate = this.totalRunCount > 0 ? (errorCount / this.totalRunCount) * 100 : 0;\n\n // Find most common error by grouping error messages\n const messageCounts = new Map<string, number>();\n for (const run of this.failedRuns) {\n const msg = this.normalizeErrorMessage(run.ErrorMessage ?? 'Unknown error');\n messageCounts.set(msg, (messageCounts.get(msg) ?? 0) + 1);\n }\n\n let mostCommon = '';\n let maxCount = 0;\n for (const [msg, count] of messageCounts) {\n if (count > maxCount) {\n maxCount = count;\n mostCommon = msg;\n }\n }\n\n this.Summary = {\n TotalErrors: errorCount,\n ErrorRate: errorRate,\n MostCommonError: mostCommon\n };\n }\n\n private buildErrorGroups(): void {\n const groups = new Map<string, FailedRunRecord[]>();\n\n for (const run of this.failedRuns) {\n const prompt = run.Prompt ?? 'Unknown Prompt';\n const model = run.Model ?? 'Unknown Model';\n const key = prompt + ' + ' + model;\n if (!groups.has(key)) groups.set(key, []);\n groups.get(key)!.push(run);\n }\n\n this.ErrorGroups = Array.from(groups.entries())\n .map(([source, runs]) => {\n const sortedRuns = runs.sort((a, b) =>\n new Date(b.RunAt).getTime() - new Date(a.RunAt).getTime()\n );\n\n return {\n Source: source,\n PromptName: sortedRuns[0].Prompt ?? 'Unknown',\n ModelName: sortedRuns[0].Model ?? 'Unknown',\n Count: sortedRuns.length,\n LastErrorMessage: this.truncateMessage(sortedRuns[0].ErrorMessage ?? 'No message'),\n LastErrorTime: this.formatRelativeTime(sortedRuns[0].RunAt),\n IsExpanded: false,\n Errors: sortedRuns.slice(0, 20).map(r => ({\n ID: r.ID,\n Time: this.formatDateTime(r.RunAt),\n ErrorMessage: r.ErrorMessage ?? 'No error message',\n Duration: r.ExecutionTimeMS != null ? r.ExecutionTimeMS + 'ms' : ''\n }))\n };\n })\n .sort((a, b) => b.Count - a.Count);\n }\n\n // ── Helpers ──\n\n private buildDateFilter(): string {\n const now = new Date();\n const msMap: Record<string, number> = {\n '1h': 3600000, '6h': 21600000, '24h': 86400000,\n '7d': 604800000, '30d': 2592000000\n };\n const ms = msMap[this.TimeRange] ?? 604800000;\n const start = new Date(now.getTime() - ms);\n return `RunAt >= '${start.toISOString()}'`;\n }\n\n private buildExtraFilters(): string[] {\n const filters: string[] = [];\n if (this.Filters.Models.length > 0) {\n filters.push(`ModelID IN (${this.Filters.Models.map(id => `'${id}'`).join(',')})`);\n }\n if (this.Filters.Prompts.length > 0) {\n filters.push(`PromptID IN (${this.Filters.Prompts.map(id => `'${id}'`).join(',')})`);\n }\n return filters;\n }\n\n private normalizeErrorMessage(msg: string): string {\n // Truncate and normalize for grouping\n return msg.slice(0, 100).trim().toLowerCase();\n }\n\n private truncateMessage(msg: string): string {\n if (msg.length <= 120) return msg;\n return msg.slice(0, 120) + '...';\n }\n\n private formatRelativeTime(dateStr: string): string {\n const now = Date.now();\n const then = new Date(dateStr).getTime();\n const diffMin = Math.floor((now - then) / 60000);\n if (diffMin < 1) return 'just now';\n if (diffMin < 60) return diffMin + 'm ago';\n const diffHr = Math.floor(diffMin / 60);\n if (diffHr < 24) return diffHr + 'h ago';\n const diffDay = Math.floor(diffHr / 24);\n return diffDay + 'd ago';\n }\n\n private formatDateTime(dateStr: string): string {\n const d = new Date(dateStr);\n const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n const hh = d.getHours().toString().padStart(2, '0');\n const mm = d.getMinutes().toString().padStart(2, '0');\n return `${months[d.getMonth()]} ${d.getDate()} ${hh}:${mm}`;\n }\n}\n\nexport function LoadAnalyticsErrorAnalysis() { /* tree-shaking prevention */ }\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executive-summary.component.d.ts","sourceRoot":"","sources":["../../../../../src/AI/components/analytics/executive-summary/executive-summary.component.ts"],"names":[],"mappings":"AAAA,OAAO,EACqB,YAAY,EAAE,MAAM,EAAE,SAAS,EAE1D,MAAM,eAAe,CAAC;AAGvB,OAAO,EAGL,SAAS,EAEV,MAAM,8CAA8C,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qDAAqD,CAAC;AACxF,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;;AAIrE,UAAU,cAAc;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,IAAI,GAAG,MAAM,GAAG,QAAQ,CAAC;IACzC,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,YAAY;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAID,
|
|
1
|
+
{"version":3,"file":"executive-summary.component.d.ts","sourceRoot":"","sources":["../../../../../src/AI/components/analytics/executive-summary/executive-summary.component.ts"],"names":[],"mappings":"AAAA,OAAO,EACqB,YAAY,EAAE,MAAM,EAAE,SAAS,EAE1D,MAAM,eAAe,CAAC;AAGvB,OAAO,EAGL,SAAS,EAEV,MAAM,8CAA8C,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qDAAqD,CAAC;AACxF,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;;AAIrE,UAAU,cAAc;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,IAAI,GAAG,MAAM,GAAG,QAAQ,CAAC;IACzC,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,YAAY;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAID,qBAuaa,kCAAmC,SAAQ,oBAAqB,YAAW,MAAM,EAAE,SAAS;IAGvG,OAAO,CAAC,UAAU,CAAS;IAC3B,IACI,SAAS,CAAC,KAAK,EAAE,MAAM,EAO1B;IACD,IAAI,SAAS,IAAI,MAAM,CAA4B;IAE1C,OAAO,EAAE,iBAAiB,CAAyD;IAElF,eAAe,uBAA8B;IAC7C,aAAa,kCAAyC;IACtD,eAAe,uBAA8B;IAIvD,OAAO,CAAC,sBAAsB,CAAoC;IAClE,OAAO,CAAC,GAAG,CAA6B;IAIxC,QAAQ,EAAE,cAAc,EAAE,CAAM;IAChC,UAAU,EAAE,SAAS,EAAE,CAAM;IAC7B,YAAY,EAAE,WAAW,EAAE,CAAM;IACjC,aAAa,EAAE,YAAY,EAAE,CAAM;IACnC,SAAS,UAAS;IAClB,iBAAiB,UAAS;IAC1B,WAAW,SAAY;IAEvB,gBAAgB,EAAE,gBAAgB,CAKhC;IAIF,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,YAAY,CAA8B;IAIlD,QAAQ,IAAI,IAAI;IAOhB,WAAW,IAAI,IAAI;IAOnB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKtC,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAKjD,gBAAgB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAUvC,SAAS,IAAI,IAAI;IAOjB,eAAe,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IAMxC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAYhC,OAAO,CAAC,UAAU,CAA8B;IAEhD,OAAO,CAAC,kBAAkB;IAkC1B,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,gBAAgB;IAyBxB,OAAO,CAAC,cAAc;YAaR,kBAAkB;IAwBhC,OAAO,CAAC,eAAe;IA+CvB,OAAO,CAAC,YAAY;IAuBpB,OAAO,CAAC,YAAY;IAcpB,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,gBAAgB;IAiBxB,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,iBAAiB;IAoCzB,OAAO,CAAC,kBAAkB;IAqB1B,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,aAAa;yCAjZV,kCAAkC;2CAAlC,kCAAkC;CAsZ9C;AAED,wBAAgB,6BAA6B,SAE5C"}
|
|
@@ -6,29 +6,28 @@ import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
7
|
import * as i1 from "@memberjunction/ng-shared-generic";
|
|
8
8
|
import * as i2 from "../../charts/time-series-chart.component";
|
|
9
|
-
import * as i3 from "
|
|
10
|
-
import * as i4 from "@angular/common";
|
|
9
|
+
import * as i3 from "@angular/common";
|
|
11
10
|
const _forTrack0 = ($index, $item) => $item.Label;
|
|
12
11
|
const _forTrack1 = ($index, $item) => $item.Name;
|
|
13
12
|
const _forTrack2 = ($index, $item) => $item.Source;
|
|
14
|
-
function
|
|
15
|
-
i0.ɵɵelementStart(0, "div",
|
|
16
|
-
i0.ɵɵelement(1, "mj-loading",
|
|
13
|
+
function AnalyticsExecutiveSummaryComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
14
|
+
i0.ɵɵelementStart(0, "div", 0);
|
|
15
|
+
i0.ɵɵelement(1, "mj-loading", 17);
|
|
17
16
|
i0.ɵɵelementEnd();
|
|
18
17
|
} }
|
|
19
|
-
function
|
|
20
|
-
i0.ɵɵelement(0, "div",
|
|
18
|
+
function AnalyticsExecutiveSummaryComponent_For_3_For_7_Template(rf, ctx) { if (rf & 1) {
|
|
19
|
+
i0.ɵɵelement(0, "div", 24);
|
|
21
20
|
} if (rf & 2) {
|
|
22
21
|
const bar_r1 = ctx.$implicit;
|
|
23
22
|
const card_r2 = i0.ɵɵnextContext().$implicit;
|
|
24
23
|
i0.ɵɵstyleProp("height", bar_r1, "%")("background", card_r2.BorderColor);
|
|
25
24
|
} }
|
|
26
|
-
function
|
|
27
|
-
i0.ɵɵelementStart(0, "div",
|
|
25
|
+
function AnalyticsExecutiveSummaryComponent_For_3_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
26
|
+
i0.ɵɵelementStart(0, "div", 25);
|
|
28
27
|
i0.ɵɵelement(1, "i");
|
|
29
28
|
i0.ɵɵtext(2);
|
|
30
29
|
i0.ɵɵpipe(3, "number");
|
|
31
|
-
i0.ɵɵelementStart(4, "span",
|
|
30
|
+
i0.ɵɵelementStart(4, "span", 26);
|
|
32
31
|
i0.ɵɵtext(5);
|
|
33
32
|
i0.ɵɵelementEnd()();
|
|
34
33
|
} if (rf & 2) {
|
|
@@ -42,17 +41,17 @@ function AnalyticsExecutiveSummaryComponent_For_4_Conditional_8_Template(rf, ctx
|
|
|
42
41
|
i0.ɵɵadvance(3);
|
|
43
42
|
i0.ɵɵtextInterpolate1("vs prev ", ctx_r2.PeriodLabel);
|
|
44
43
|
} }
|
|
45
|
-
function
|
|
46
|
-
i0.ɵɵelementStart(0, "div",
|
|
44
|
+
function AnalyticsExecutiveSummaryComponent_For_3_Template(rf, ctx) { if (rf & 1) {
|
|
45
|
+
i0.ɵɵelementStart(0, "div", 18)(1, "div", 19);
|
|
47
46
|
i0.ɵɵtext(2);
|
|
48
47
|
i0.ɵɵelementEnd();
|
|
49
|
-
i0.ɵɵelementStart(3, "div",
|
|
48
|
+
i0.ɵɵelementStart(3, "div", 20);
|
|
50
49
|
i0.ɵɵtext(4);
|
|
51
50
|
i0.ɵɵelementEnd();
|
|
52
|
-
i0.ɵɵelementStart(5, "div",
|
|
53
|
-
i0.ɵɵrepeaterCreate(6,
|
|
51
|
+
i0.ɵɵelementStart(5, "div", 21);
|
|
52
|
+
i0.ɵɵrepeaterCreate(6, AnalyticsExecutiveSummaryComponent_For_3_For_7_Template, 1, 4, "div", 22, i0.ɵɵrepeaterTrackByIndex);
|
|
54
53
|
i0.ɵɵelementEnd();
|
|
55
|
-
i0.ɵɵconditionalCreate(8,
|
|
54
|
+
i0.ɵɵconditionalCreate(8, AnalyticsExecutiveSummaryComponent_For_3_Conditional_8_Template, 6, 11, "div", 23);
|
|
56
55
|
i0.ɵɵelementEnd();
|
|
57
56
|
} if (rf & 2) {
|
|
58
57
|
const card_r2 = ctx.$implicit;
|
|
@@ -67,29 +66,29 @@ function AnalyticsExecutiveSummaryComponent_For_4_Template(rf, ctx) { if (rf & 1
|
|
|
67
66
|
i0.ɵɵadvance(2);
|
|
68
67
|
i0.ɵɵconditional(ctx_r2.ComparisonEnabled && card_r2.DeltaDirection !== "stable" ? 8 : -1);
|
|
69
68
|
} }
|
|
70
|
-
function
|
|
71
|
-
i0.ɵɵelementStart(0, "div",
|
|
69
|
+
function AnalyticsExecutiveSummaryComponent_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
70
|
+
i0.ɵɵelementStart(0, "div", 12);
|
|
72
71
|
i0.ɵɵtext(1, "No data for selected period");
|
|
73
72
|
i0.ɵɵelementEnd();
|
|
74
73
|
} }
|
|
75
|
-
function
|
|
74
|
+
function AnalyticsExecutiveSummaryComponent_For_17_Template(rf, ctx) { if (rf & 1) {
|
|
76
75
|
const _r4 = i0.ɵɵgetCurrentView();
|
|
77
|
-
i0.ɵɵelementStart(0, "div",
|
|
78
|
-
i0.ɵɵlistener("click", function
|
|
79
|
-
i0.ɵɵelementStart(1, "div",
|
|
76
|
+
i0.ɵɵelementStart(0, "div", 27);
|
|
77
|
+
i0.ɵɵlistener("click", function AnalyticsExecutiveSummaryComponent_For_17_Template_div_click_0_listener() { const item_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OnConsumerClick(item_r5)); })("keydown.enter", function AnalyticsExecutiveSummaryComponent_For_17_Template_div_keydown_enter_0_listener() { const item_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OnConsumerClick(item_r5)); });
|
|
78
|
+
i0.ɵɵelementStart(1, "div", 28);
|
|
80
79
|
i0.ɵɵtext(2);
|
|
81
80
|
i0.ɵɵelementEnd();
|
|
82
|
-
i0.ɵɵelementStart(3, "div",
|
|
81
|
+
i0.ɵɵelementStart(3, "div", 29);
|
|
83
82
|
i0.ɵɵtext(4);
|
|
84
83
|
i0.ɵɵelementEnd();
|
|
85
|
-
i0.ɵɵelementStart(5, "div",
|
|
84
|
+
i0.ɵɵelementStart(5, "div", 30);
|
|
86
85
|
i0.ɵɵtext(6);
|
|
87
86
|
i0.ɵɵelementEnd();
|
|
88
|
-
i0.ɵɵelementStart(7, "div",
|
|
87
|
+
i0.ɵɵelementStart(7, "div", 31);
|
|
89
88
|
i0.ɵɵtext(8);
|
|
90
89
|
i0.ɵɵelementEnd();
|
|
91
|
-
i0.ɵɵelementStart(9, "div",
|
|
92
|
-
i0.ɵɵelement(10, "div",
|
|
90
|
+
i0.ɵɵelementStart(9, "div", 32);
|
|
91
|
+
i0.ɵɵelement(10, "div", 33);
|
|
93
92
|
i0.ɵɵelementEnd()();
|
|
94
93
|
} if (rf & 2) {
|
|
95
94
|
const item_r5 = ctx.$implicit;
|
|
@@ -111,22 +110,22 @@ function AnalyticsExecutiveSummaryComponent_For_18_Template(rf, ctx) { if (rf &
|
|
|
111
110
|
i0.ɵɵadvance(2);
|
|
112
111
|
i0.ɵɵstyleProp("width", item_r5.Proportion * 100, "%");
|
|
113
112
|
} }
|
|
114
|
-
function
|
|
115
|
-
i0.ɵɵelementStart(0, "div",
|
|
113
|
+
function AnalyticsExecutiveSummaryComponent_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
114
|
+
i0.ɵɵelementStart(0, "div", 12);
|
|
116
115
|
i0.ɵɵtext(1, "No errors in selected period");
|
|
117
116
|
i0.ɵɵelementEnd();
|
|
118
117
|
} }
|
|
119
|
-
function
|
|
120
|
-
i0.ɵɵelementStart(0, "div",
|
|
121
|
-
i0.ɵɵelement(2, "i",
|
|
118
|
+
function AnalyticsExecutiveSummaryComponent_For_28_Template(rf, ctx) { if (rf & 1) {
|
|
119
|
+
i0.ɵɵelementStart(0, "div", 15)(1, "div", 34);
|
|
120
|
+
i0.ɵɵelement(2, "i", 35);
|
|
122
121
|
i0.ɵɵelementEnd();
|
|
123
|
-
i0.ɵɵelementStart(3, "div",
|
|
122
|
+
i0.ɵɵelementStart(3, "div", 36)(4, "div", 37);
|
|
124
123
|
i0.ɵɵtext(5);
|
|
125
124
|
i0.ɵɵelementEnd();
|
|
126
|
-
i0.ɵɵelementStart(6, "div",
|
|
125
|
+
i0.ɵɵelementStart(6, "div", 38);
|
|
127
126
|
i0.ɵɵtext(7);
|
|
128
127
|
i0.ɵɵelementEnd()();
|
|
129
|
-
i0.ɵɵelementStart(8, "div",
|
|
128
|
+
i0.ɵɵelementStart(8, "div", 39);
|
|
130
129
|
i0.ɵɵtext(9);
|
|
131
130
|
i0.ɵɵelementEnd()();
|
|
132
131
|
} if (rf & 2) {
|
|
@@ -140,12 +139,12 @@ function AnalyticsExecutiveSummaryComponent_For_29_Template(rf, ctx) { if (rf &
|
|
|
140
139
|
i0.ɵɵadvance(2);
|
|
141
140
|
i0.ɵɵtextInterpolate(item_r6.Count);
|
|
142
141
|
} }
|
|
143
|
-
function
|
|
142
|
+
function AnalyticsExecutiveSummaryComponent_Conditional_29_Template(rf, ctx) { if (rf & 1) {
|
|
144
143
|
const _r7 = i0.ɵɵgetCurrentView();
|
|
145
|
-
i0.ɵɵelementStart(0, "button",
|
|
146
|
-
i0.ɵɵlistener("click", function
|
|
144
|
+
i0.ɵɵelementStart(0, "button", 40);
|
|
145
|
+
i0.ɵɵlistener("click", function AnalyticsExecutiveSummaryComponent_Conditional_29_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.SectionNavigate.emit("error-analysis")); });
|
|
147
146
|
i0.ɵɵtext(1, " View All Errors ");
|
|
148
|
-
i0.ɵɵelement(2, "i",
|
|
147
|
+
i0.ɵɵelement(2, "i", 41);
|
|
149
148
|
i0.ɵɵelementEnd();
|
|
150
149
|
} }
|
|
151
150
|
// ─── Component ─────────────────────────────────────────────────────
|
|
@@ -464,79 +463,60 @@ export class AnalyticsExecutiveSummaryComponent extends BaseAngularComponent {
|
|
|
464
463
|
return Math.round(ms) + 'ms';
|
|
465
464
|
}
|
|
466
465
|
static ɵfac = /*@__PURE__*/ (() => { let ɵAnalyticsExecutiveSummaryComponent_BaseFactory; return function AnalyticsExecutiveSummaryComponent_Factory(__ngFactoryType__) { return (ɵAnalyticsExecutiveSummaryComponent_BaseFactory || (ɵAnalyticsExecutiveSummaryComponent_BaseFactory = i0.ɵɵgetInheritedFactory(AnalyticsExecutiveSummaryComponent)))(__ngFactoryType__ || AnalyticsExecutiveSummaryComponent); }; })();
|
|
467
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AnalyticsExecutiveSummaryComponent, selectors: [["app-analytics-executive-summary"]], inputs: { TimeRange: "TimeRange", Filters: "Filters" }, outputs: { TimeRangeChange: "TimeRangeChange", FiltersChange: "FiltersChange", SectionNavigate: "SectionNavigate" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls:
|
|
468
|
-
i0.ɵɵ
|
|
469
|
-
i0.ɵɵ
|
|
466
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AnalyticsExecutiveSummaryComponent, selectors: [["app-analytics-executive-summary"]], inputs: { TimeRange: "TimeRange", Filters: "Filters" }, outputs: { TimeRangeChange: "TimeRangeChange", FiltersChange: "FiltersChange", SectionNavigate: "SectionNavigate" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 30, vars: 8, consts: [[1, "loading-container"], [1, "kpi-row"], [1, "kpi-card", 3, "border-left-color"], [1, "trends-panel"], ["title", "Execution Trends", 3, "data", "config"], [1, "panels-grid"], [1, "panel"], [1, "panel-header"], [1, "panel-header__title"], [1, "fa-solid", "fa-ranking-star", "panel-header__icon"], [1, "panel-header__subtitle"], [1, "panel-body"], [1, "panel-empty"], ["role", "button", "tabindex", "0", 1, "consumer-item"], [1, "fa-solid", "fa-triangle-exclamation", "panel-header__icon", "panel-header__icon--error"], [1, "error-item"], [1, "view-all-link"], ["text", "Loading executive summary...", "size", "medium"], [1, "kpi-card"], [1, "kpi-label"], [1, "kpi-value"], [1, "kpi-sparkline"], [1, "spark-bar", 3, "height", "background"], [1, "kpi-delta", 3, "kpi-delta--good", "kpi-delta--bad"], [1, "spark-bar"], [1, "kpi-delta"], [1, "kpi-delta__period"], ["role", "button", "tabindex", "0", 1, "consumer-item", 3, "click", "keydown.enter"], [1, "consumer-rank"], [1, "consumer-type-pill"], [1, "consumer-name", 3, "title"], [1, "consumer-cost"], [1, "consumer-bar-container"], [1, "consumer-bar"], [1, "error-icon"], [1, "fa-solid", "fa-circle-exclamation"], [1, "error-info"], [1, "error-source"], [1, "error-message", 3, "title"], [1, "error-count"], [1, "view-all-link", 3, "click"], [1, "fa-solid", "fa-arrow-right"]], template: function AnalyticsExecutiveSummaryComponent_Template(rf, ctx) { if (rf & 1) {
|
|
467
|
+
i0.ɵɵconditionalCreate(0, AnalyticsExecutiveSummaryComponent_Conditional_0_Template, 2, 0, "div", 0);
|
|
468
|
+
i0.ɵɵelementStart(1, "div", 1);
|
|
469
|
+
i0.ɵɵrepeaterCreate(2, AnalyticsExecutiveSummaryComponent_For_3_Template, 9, 5, "div", 2, _forTrack0);
|
|
470
470
|
i0.ɵɵelementEnd();
|
|
471
|
-
i0.ɵɵ
|
|
472
|
-
i0.ɵɵ
|
|
473
|
-
i0.ɵɵrepeaterCreate(3, AnalyticsExecutiveSummaryComponent_For_4_Template, 9, 5, "div", 3, _forTrack0);
|
|
471
|
+
i0.ɵɵelementStart(4, "div", 3);
|
|
472
|
+
i0.ɵɵelement(5, "app-time-series-chart", 4);
|
|
474
473
|
i0.ɵɵelementEnd();
|
|
475
|
-
i0.ɵɵelementStart(5, "div",
|
|
476
|
-
i0.ɵɵelement(
|
|
474
|
+
i0.ɵɵelementStart(6, "div", 5)(7, "div", 6)(8, "div", 7)(9, "div", 8);
|
|
475
|
+
i0.ɵɵelement(10, "i", 9);
|
|
476
|
+
i0.ɵɵtext(11, " Top Consumers ");
|
|
477
477
|
i0.ɵɵelementEnd();
|
|
478
|
-
i0.ɵɵelementStart(
|
|
479
|
-
i0.ɵɵ
|
|
480
|
-
i0.ɵɵtext(12, " Top Consumers ");
|
|
481
|
-
i0.ɵɵelementEnd();
|
|
482
|
-
i0.ɵɵelementStart(13, "span", 11);
|
|
483
|
-
i0.ɵɵtext(14, "by cost");
|
|
478
|
+
i0.ɵɵelementStart(12, "span", 10);
|
|
479
|
+
i0.ɵɵtext(13, "by cost");
|
|
484
480
|
i0.ɵɵelementEnd()();
|
|
485
|
-
i0.ɵɵelementStart(
|
|
486
|
-
i0.ɵɵconditionalCreate(
|
|
487
|
-
i0.ɵɵrepeaterCreate(
|
|
481
|
+
i0.ɵɵelementStart(14, "div", 11);
|
|
482
|
+
i0.ɵɵconditionalCreate(15, AnalyticsExecutiveSummaryComponent_Conditional_15_Template, 2, 0, "div", 12);
|
|
483
|
+
i0.ɵɵrepeaterCreate(16, AnalyticsExecutiveSummaryComponent_For_17_Template, 11, 11, "div", 13, _forTrack1);
|
|
488
484
|
i0.ɵɵelementEnd()();
|
|
489
|
-
i0.ɵɵelementStart(
|
|
490
|
-
i0.ɵɵelement(
|
|
491
|
-
i0.ɵɵtext(
|
|
485
|
+
i0.ɵɵelementStart(18, "div", 6)(19, "div", 7)(20, "div", 8);
|
|
486
|
+
i0.ɵɵelement(21, "i", 14);
|
|
487
|
+
i0.ɵɵtext(22, " Error Hotspots ");
|
|
492
488
|
i0.ɵɵelementEnd();
|
|
493
|
-
i0.ɵɵelementStart(
|
|
494
|
-
i0.ɵɵtext(
|
|
489
|
+
i0.ɵɵelementStart(23, "span", 10);
|
|
490
|
+
i0.ɵɵtext(24);
|
|
495
491
|
i0.ɵɵelementEnd()();
|
|
496
|
-
i0.ɵɵelementStart(
|
|
497
|
-
i0.ɵɵconditionalCreate(
|
|
498
|
-
i0.ɵɵrepeaterCreate(
|
|
499
|
-
i0.ɵɵconditionalCreate(
|
|
492
|
+
i0.ɵɵelementStart(25, "div", 11);
|
|
493
|
+
i0.ɵɵconditionalCreate(26, AnalyticsExecutiveSummaryComponent_Conditional_26_Template, 2, 0, "div", 12);
|
|
494
|
+
i0.ɵɵrepeaterCreate(27, AnalyticsExecutiveSummaryComponent_For_28_Template, 10, 4, "div", 15, _forTrack2);
|
|
495
|
+
i0.ɵɵconditionalCreate(29, AnalyticsExecutiveSummaryComponent_Conditional_29_Template, 3, 0, "button", 16);
|
|
500
496
|
i0.ɵɵelementEnd()()();
|
|
501
497
|
} if (rf & 2) {
|
|
502
|
-
i0.ɵɵ
|
|
503
|
-
i0.ɵɵadvance();
|
|
504
|
-
i0.ɵɵconditional(ctx.IsLoading && ctx.KpiCards.length === 0 ? 1 : -1);
|
|
498
|
+
i0.ɵɵconditional(ctx.IsLoading && ctx.KpiCards.length === 0 ? 0 : -1);
|
|
505
499
|
i0.ɵɵadvance(2);
|
|
506
500
|
i0.ɵɵrepeater(ctx.KpiCards);
|
|
507
501
|
i0.ɵɵadvance(3);
|
|
508
502
|
i0.ɵɵproperty("data", ctx.TrendsData)("config", ctx.TimeSeriesConfig);
|
|
509
503
|
i0.ɵɵadvance(10);
|
|
510
|
-
i0.ɵɵconditional(ctx.TopConsumers.length === 0 ?
|
|
504
|
+
i0.ɵɵconditional(ctx.TopConsumers.length === 0 ? 15 : -1);
|
|
511
505
|
i0.ɵɵadvance();
|
|
512
506
|
i0.ɵɵrepeater(ctx.TopConsumers);
|
|
513
507
|
i0.ɵɵadvance(8);
|
|
514
508
|
i0.ɵɵtextInterpolate2(" ", ctx.ErrorHotspots.length, " source", ctx.ErrorHotspots.length !== 1 ? "s" : "", " ");
|
|
515
509
|
i0.ɵɵadvance(2);
|
|
516
|
-
i0.ɵɵconditional(ctx.ErrorHotspots.length === 0 ?
|
|
510
|
+
i0.ɵɵconditional(ctx.ErrorHotspots.length === 0 ? 26 : -1);
|
|
517
511
|
i0.ɵɵadvance();
|
|
518
512
|
i0.ɵɵrepeater(ctx.ErrorHotspots);
|
|
519
513
|
i0.ɵɵadvance(2);
|
|
520
|
-
i0.ɵɵconditional(ctx.ErrorHotspots.length > 0 ?
|
|
521
|
-
} }, dependencies: [i1.LoadingComponent, i2.TimeSeriesChartComponent, i3.
|
|
514
|
+
i0.ɵɵconditional(ctx.ErrorHotspots.length > 0 ? 29 : -1);
|
|
515
|
+
} }, dependencies: [i1.LoadingComponent, i2.TimeSeriesChartComponent, i3.DecimalPipe], styles: ["\n\n [_nghost-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 20px;\n padding: 4px;\n }\n\n \n\n .loading-container[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 60px 20px;\n }\n\n \n\n .kpi-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n gap: 14px;\n }\n .kpi-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-left: 4px solid var(--mj-brand-primary);\n border-radius: 12px;\n padding: 16px 18px;\n display: flex;\n flex-direction: column;\n gap: 6px;\n transition: all 0.25s ease;\n }\n .kpi-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: 0 6px 20px color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n }\n .kpi-label[_ngcontent-%COMP%] {\n font-size: 10px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.6px;\n color: var(--mj-text-muted);\n }\n .kpi-value[_ngcontent-%COMP%] {\n font-size: 24px;\n font-weight: 700;\n color: var(--mj-text-primary);\n line-height: 1.1;\n letter-spacing: -0.02em;\n }\n\n \n\n .kpi-sparkline[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n gap: 2px;\n height: 24px;\n margin-top: 4px;\n }\n .spark-bar[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 4px;\n max-width: 8px;\n border-radius: 1px;\n opacity: 0.35;\n transition: opacity 0.15s ease;\n }\n .kpi-card[_ngcontent-%COMP%]:hover .spark-bar[_ngcontent-%COMP%] {\n opacity: 0.55;\n }\n\n \n\n .kpi-delta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 11px;\n font-weight: 600;\n margin-top: 2px;\n }\n .kpi-delta--good[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n }\n .kpi-delta--bad[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n }\n .kpi-delta__period[_ngcontent-%COMP%] {\n font-weight: 400;\n color: var(--mj-text-disabled);\n }\n\n \n\n .trends-panel[_ngcontent-%COMP%] {\n height: 320px;\n border-radius: 12px;\n overflow: hidden;\n }\n\n \n\n .panels-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 16px;\n }\n .panel[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n overflow: hidden;\n }\n .panel-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 14px 18px;\n border-bottom: 1px solid var(--mj-border-subtle);\n }\n .panel-header__title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n }\n .panel-header__icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 14px;\n }\n .panel-header__icon--error[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n }\n .panel-header__subtitle[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n }\n .panel-body[_ngcontent-%COMP%] {\n padding: 8px 0;\n }\n .panel-empty[_ngcontent-%COMP%] {\n padding: 24px 18px;\n text-align: center;\n font-size: 13px;\n color: var(--mj-text-disabled);\n }\n\n \n\n .consumer-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 18px;\n cursor: pointer;\n transition: background 0.15s ease;\n }\n .consumer-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n }\n .consumer-rank[_ngcontent-%COMP%] {\n width: 22px;\n height: 22px;\n border-radius: 6px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 11px;\n font-weight: 700;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n flex-shrink: 0;\n }\n .consumer-rank--top[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n }\n .consumer-type-pill[_ngcontent-%COMP%] {\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n padding: 2px 8px;\n border-radius: 4px;\n background: color-mix(in srgb, var(--mj-status-info) 12%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n flex-shrink: 0;\n }\n .consumer-type-pill--agent[_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 .consumer-name[_ngcontent-%COMP%] {\n flex: 1;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .consumer-cost[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n flex-shrink: 0;\n }\n .consumer-bar-container[_ngcontent-%COMP%] {\n width: 60px;\n height: 6px;\n border-radius: 3px;\n background: var(--mj-bg-surface-sunken);\n overflow: hidden;\n flex-shrink: 0;\n }\n .consumer-bar[_ngcontent-%COMP%] {\n height: 100%;\n border-radius: 3px;\n background: var(--mj-brand-primary);\n transition: width 0.3s ease;\n }\n\n \n\n .error-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n padding: 10px 18px;\n }\n .error-icon[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n font-size: 14px;\n margin-top: 2px;\n flex-shrink: 0;\n }\n .error-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n }\n .error-source[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 2px;\n }\n .error-message[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .error-count[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 700;\n color: var(--mj-status-error);\n flex-shrink: 0;\n min-width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n }\n .view-all-link[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n margin: 8px 18px 10px;\n padding: 0;\n border: none;\n background: none;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-brand-primary);\n cursor: pointer;\n transition: color 0.15s ease;\n }\n .view-all-link[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary-hover);\n }\n\n \n\n @media (max-width: 1200px) {\n .panels-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n }\n @media (max-width: 768px) {\n .kpi-row[_ngcontent-%COMP%] {\n grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));\n }\n .trends-panel[_ngcontent-%COMP%] {\n height: 260px;\n }\n }"] });
|
|
522
516
|
}
|
|
523
517
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AnalyticsExecutiveSummaryComponent, [{
|
|
524
518
|
type: Component,
|
|
525
519
|
args: [{ standalone: false, selector: 'app-analytics-executive-summary', template: `
|
|
526
|
-
<!-- Filter Bar -->
|
|
527
|
-
<app-analytics-filter-bar
|
|
528
|
-
[TimeRange]="TimeRange"
|
|
529
|
-
[Filters]="Filters"
|
|
530
|
-
[ShowCompareToggle]="true"
|
|
531
|
-
[ShowModelFilter]="false"
|
|
532
|
-
[ShowAgentFilter]="false"
|
|
533
|
-
[ShowPromptFilter]="false"
|
|
534
|
-
[ShowStatusFilter]="false"
|
|
535
|
-
(TimeRangeChange)="OnTimeRangeChange($event)"
|
|
536
|
-
(FiltersChange)="OnFiltersChange($event)"
|
|
537
|
-
(CompareToggled)="OnCompareToggled($event)"
|
|
538
|
-
></app-analytics-filter-bar>
|
|
539
|
-
|
|
540
520
|
@if (IsLoading && KpiCards.length === 0) {
|
|
541
521
|
<div class="loading-container">
|
|
542
522
|
<mj-loading text="Loading executive summary..." size="medium"></mj-loading>
|
|
@@ -669,7 +649,7 @@ export class AnalyticsExecutiveSummaryComponent extends BaseAngularComponent {
|
|
|
669
649
|
}], SectionNavigate: [{
|
|
670
650
|
type: Output
|
|
671
651
|
}] }); })();
|
|
672
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AnalyticsExecutiveSummaryComponent, { className: "AnalyticsExecutiveSummaryComponent", filePath: "src/AI/components/analytics/executive-summary/executive-summary.component.ts", lineNumber:
|
|
652
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AnalyticsExecutiveSummaryComponent, { className: "AnalyticsExecutiveSummaryComponent", filePath: "src/AI/components/analytics/executive-summary/executive-summary.component.ts", lineNumber: 468 }); })();
|
|
673
653
|
export function LoadAnalyticsExecutiveSummary() {
|
|
674
654
|
// Prevents tree-shaking
|
|
675
655
|
}
|