@memberjunction/ng-dashboards 6.2.0-edge.5 → 6.2.0-edge.7
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/README.md +35 -0
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js +2 -2
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/realtime/realtime-management.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/realtime/realtime-management.component.js +3 -1
- package/dist/AI/components/analytics/realtime/realtime-management.component.js.map +1 -1
- package/dist/AI/components/analytics/realtime/realtime-overview.component.d.ts +1 -1
- package/dist/AI/components/analytics/realtime/realtime-overview.component.js +3 -3
- package/dist/AI/components/analytics/realtime/realtime-overview.component.js.map +1 -1
- package/dist/AI/components/analytics/realtime/realtime-session-data.d.ts +6 -4
- package/dist/AI/components/analytics/realtime/realtime-session-data.d.ts.map +1 -1
- package/dist/AI/components/analytics/realtime/realtime-session-data.js +8 -2
- package/dist/AI/components/analytics/realtime/realtime-session-data.js.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +21 -13
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
- package/dist/AI/components/autotagging/components/classify-item-grid.component.js +1 -1
- package/dist/AI/components/autotagging/components/classify-item-grid.component.js.map +1 -1
- package/dist/AI/components/autotagging/components/classify-org-context-editor.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/components/classify-org-context-editor.component.js +1 -0
- package/dist/AI/components/autotagging/components/classify-org-context-editor.component.js.map +1 -1
- package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js +1 -0
- package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js.map +1 -1
- package/dist/AI/components/autotagging/tabs/sources-tab.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/tabs/sources-tab.component.js +1 -0
- package/dist/AI/components/autotagging/tabs/sources-tab.component.js.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +7 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +210 -57
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-run-scope.d.ts +12 -11
- package/dist/AI/components/duplicates/duplicate-detection-run-scope.d.ts.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-run-scope.js +15 -15
- package/dist/AI/components/duplicates/duplicate-detection-run-scope.js.map +1 -1
- package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
- package/dist/AI/components/execution-monitoring.component.js +28 -16
- package/dist/AI/components/execution-monitoring.component.js.map +1 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts +1 -0
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +32 -8
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.d.ts +1 -1
- package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.js +18 -9
- package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
- package/dist/AI/components/vectors/sensitive-fields.d.ts +9 -4
- package/dist/AI/components/vectors/sensitive-fields.d.ts.map +1 -1
- package/dist/AI/components/vectors/sensitive-fields.js +39 -14
- package/dist/AI/components/vectors/sensitive-fields.js.map +1 -1
- package/dist/AI/components/vectors/vector-document-rules.d.ts +13 -0
- package/dist/AI/components/vectors/vector-document-rules.d.ts.map +1 -1
- package/dist/AI/components/vectors/vector-document-rules.js +14 -0
- package/dist/AI/components/vectors/vector-document-rules.js.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts +34 -14
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.js +134 -51
- package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
- package/dist/AI/components/vectors/vector-store-selection.d.ts +32 -0
- package/dist/AI/components/vectors/vector-store-selection.d.ts.map +1 -0
- package/dist/AI/components/vectors/vector-store-selection.js +57 -0
- package/dist/AI/components/vectors/vector-store-selection.js.map +1 -0
- package/dist/AI/services/ai-instrumentation.service.d.ts.map +1 -1
- package/dist/AI/services/ai-instrumentation.service.js +4 -2
- package/dist/AI/services/ai-instrumentation.service.js.map +1 -1
- package/dist/Actions/action-result-code.d.ts +80 -0
- package/dist/Actions/action-result-code.d.ts.map +1 -0
- package/dist/Actions/action-result-code.js +163 -0
- package/dist/Actions/action-result-code.js.map +1 -0
- package/dist/Actions/components/actions-overview.component.d.ts +8 -0
- package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +12 -9
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.d.ts +29 -9
- package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.js +65 -42
- package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-card.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/action-card.component.js +5 -4
- package/dist/Actions/components/explorer/action-card.component.js.map +1 -1
- package/dist/ChiefOfStaff/chief-of-staff-agent-context.d.ts +198 -0
- package/dist/ChiefOfStaff/chief-of-staff-agent-context.d.ts.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-agent-context.js +289 -0
- package/dist/ChiefOfStaff/chief-of-staff-agent-context.js.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-approvals.component.d.ts +29 -0
- package/dist/ChiefOfStaff/chief-of-staff-approvals.component.d.ts.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-approvals.component.js +666 -0
- package/dist/ChiefOfStaff/chief-of-staff-approvals.component.js.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-governance.component.d.ts +56 -0
- package/dist/ChiefOfStaff/chief-of-staff-governance.component.d.ts.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-governance.component.js +515 -0
- package/dist/ChiefOfStaff/chief-of-staff-governance.component.js.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-live-refresh.d.ts +14 -0
- package/dist/ChiefOfStaff/chief-of-staff-live-refresh.d.ts.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-live-refresh.js +39 -0
- package/dist/ChiefOfStaff/chief-of-staff-live-refresh.js.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-overview.component.d.ts +17 -0
- package/dist/ChiefOfStaff/chief-of-staff-overview.component.d.ts.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-overview.component.js +485 -0
- package/dist/ChiefOfStaff/chief-of-staff-overview.component.js.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-page-base.d.ts +139 -0
- package/dist/ChiefOfStaff/chief-of-staff-page-base.d.ts.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-page-base.js +602 -0
- package/dist/ChiefOfStaff/chief-of-staff-page-base.js.map +1 -0
- package/dist/ChiefOfStaff/index.d.ts +6 -0
- package/dist/ChiefOfStaff/index.d.ts.map +1 -0
- package/dist/ChiefOfStaff/index.js +6 -0
- package/dist/ChiefOfStaff/index.js.map +1 -0
- package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-logs-resource.component.js +2 -1
- 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 +26 -21
- package/dist/Communication/communication-monitor-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 +14 -13
- package/dist/Communication/communication-runs-resource.component.js.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.js +1 -0
- package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +2 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/services/component-version.service.d.ts.map +1 -1
- package/dist/ComponentStudio/services/component-version.service.js +3 -0
- package/dist/ComponentStudio/services/component-version.service.js.map +1 -1
- package/dist/DashboardEditor/dashboard-editor.component.d.ts +17 -2
- package/dist/DashboardEditor/dashboard-editor.component.d.ts.map +1 -1
- package/dist/DashboardEditor/dashboard-editor.component.js +94 -43
- package/dist/DashboardEditor/dashboard-editor.component.js.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +45 -2
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.js +178 -55
- package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
- package/dist/DataExplorer/models/explorer-state.interface.d.ts +2 -0
- package/dist/DataExplorer/models/explorer-state.interface.d.ts.map +1 -1
- package/dist/DataExplorer/models/explorer-state.interface.js.map +1 -1
- package/dist/DevTools/graphql-console.component.js +2 -2
- package/dist/DevTools/lazy-module-status.component.js +2 -2
- package/dist/FormBuilder/form-builder-resource.component.d.ts.map +1 -1
- package/dist/FormBuilder/form-builder-resource.component.js +5 -0
- package/dist/FormBuilder/form-builder-resource.component.js.map +1 -1
- package/dist/Integration/components/connections/connections.component.js +2 -2
- package/dist/Integration/services/integration-data.service.d.ts +1 -1
- package/dist/Integration/services/integration-data.service.d.ts.map +1 -1
- package/dist/Integration/services/integration-data.service.js +4 -3
- package/dist/Integration/services/integration-data.service.js.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.js +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
- package/dist/LoginStudio/login-studio-resource.component.d.ts +10 -2
- package/dist/LoginStudio/login-studio-resource.component.d.ts.map +1 -1
- package/dist/LoginStudio/login-studio-resource.component.js +111 -77
- package/dist/LoginStudio/login-studio-resource.component.js.map +1 -1
- package/dist/MCP/mcp-dashboard.component.d.ts +24 -4
- package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
- package/dist/MCP/mcp-dashboard.component.js +118 -65
- package/dist/MCP/mcp-dashboard.component.js.map +1 -1
- package/dist/PredictiveStudio/business-predictions.view-models.d.ts +1 -1
- package/dist/PredictiveStudio/business-predictions.view-models.d.ts.map +1 -1
- package/dist/PredictiveStudio/business-predictions.view-models.js +3 -3
- package/dist/PredictiveStudio/business-predictions.view-models.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-experiments.component.d.ts +6 -63
- package/dist/PredictiveStudio/components/ps-experiments.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/components/ps-experiments.component.js +257 -521
- package/dist/PredictiveStudio/components/ps-experiments.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.d.ts +0 -18
- package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.js +124 -251
- package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-pipelines.component.d.ts +5 -9
- package/dist/PredictiveStudio/components/ps-pipelines.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/components/ps-pipelines.component.js +98 -130
- package/dist/PredictiveStudio/components/ps-pipelines.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-predictions-grid.component.d.ts +53 -4
- package/dist/PredictiveStudio/components/ps-predictions-grid.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/components/ps-predictions-grid.component.js +338 -326
- package/dist/PredictiveStudio/components/ps-predictions-grid.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-row-drivers.component.d.ts +19 -0
- package/dist/PredictiveStudio/components/ps-row-drivers.component.d.ts.map +1 -0
- package/dist/PredictiveStudio/components/ps-row-drivers.component.js +85 -0
- package/dist/PredictiveStudio/components/ps-row-drivers.component.js.map +1 -0
- package/dist/PredictiveStudio/engine/predictive-studio.engine.d.ts +19 -1
- package/dist/PredictiveStudio/engine/predictive-studio.engine.d.ts.map +1 -1
- package/dist/PredictiveStudio/engine/predictive-studio.engine.js +52 -2
- package/dist/PredictiveStudio/engine/predictive-studio.engine.js.map +1 -1
- package/dist/PredictiveStudio/predictive-studio-agent-context.d.ts +3 -1
- package/dist/PredictiveStudio/predictive-studio-agent-context.d.ts.map +1 -1
- package/dist/PredictiveStudio/predictive-studio-agent-context.js +3 -0
- package/dist/PredictiveStudio/predictive-studio-agent-context.js.map +1 -1
- package/dist/PredictiveStudio/predictive-studio-score-history.service.d.ts +27 -4
- package/dist/PredictiveStudio/predictive-studio-score-history.service.d.ts.map +1 -1
- package/dist/PredictiveStudio/predictive-studio-score-history.service.js +94 -61
- package/dist/PredictiveStudio/predictive-studio-score-history.service.js.map +1 -1
- package/dist/PredictiveStudio/resources/ps-predictions-resource.component.d.ts +29 -5
- package/dist/PredictiveStudio/resources/ps-predictions-resource.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/resources/ps-predictions-resource.component.js +186 -103
- package/dist/PredictiveStudio/resources/ps-predictions-resource.component.js.map +1 -1
- package/dist/PredictiveStudio/resources/ps-studio-resource.component.js +1 -1
- package/dist/PredictiveStudio/resources/ps-studio-resource.component.js.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.d.ts +26 -0
- package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js +375 -252
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/UserRoutines/user-routines-resource.component.d.ts +8 -1
- package/dist/UserRoutines/user-routines-resource.component.d.ts.map +1 -1
- package/dist/UserRoutines/user-routines-resource.component.js +22 -4
- package/dist/UserRoutines/user-routines-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/diff-resource.component.d.ts.map +1 -1
- package/dist/VersionHistory/components/diff-resource.component.js +1 -0
- package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
- package/dist/VideoStudio/components/vs-archetype-editor.component.d.ts +162 -0
- package/dist/VideoStudio/components/vs-archetype-editor.component.d.ts.map +1 -0
- package/dist/VideoStudio/components/vs-archetype-editor.component.js +1105 -0
- package/dist/VideoStudio/components/vs-archetype-editor.component.js.map +1 -0
- package/dist/VideoStudio/components/vs-audio-options.component.d.ts +27 -0
- package/dist/VideoStudio/components/vs-audio-options.component.d.ts.map +1 -0
- package/dist/VideoStudio/components/vs-audio-options.component.js +119 -0
- package/dist/VideoStudio/components/vs-audio-options.component.js.map +1 -0
- package/dist/VideoStudio/components/vs-copilot-panel.component.d.ts +105 -0
- package/dist/VideoStudio/components/vs-copilot-panel.component.d.ts.map +1 -0
- package/dist/VideoStudio/components/vs-copilot-panel.component.js +560 -0
- package/dist/VideoStudio/components/vs-copilot-panel.component.js.map +1 -0
- package/dist/VideoStudio/components/vs-production-brief.component.d.ts +163 -0
- package/dist/VideoStudio/components/vs-production-brief.component.d.ts.map +1 -0
- package/dist/VideoStudio/components/vs-production-brief.component.js +1054 -0
- package/dist/VideoStudio/components/vs-production-brief.component.js.map +1 -0
- package/dist/VideoStudio/components/vs-setup-health-card.component.d.ts +43 -0
- package/dist/VideoStudio/components/vs-setup-health-card.component.d.ts.map +1 -0
- package/dist/VideoStudio/components/vs-setup-health-card.component.js +412 -0
- package/dist/VideoStudio/components/vs-setup-health-card.component.js.map +1 -0
- package/dist/VideoStudio/components/vs-studio-slide-in.component.d.ts +73 -0
- package/dist/VideoStudio/components/vs-studio-slide-in.component.d.ts.map +1 -0
- package/dist/VideoStudio/components/vs-studio-slide-in.component.js +271 -0
- package/dist/VideoStudio/components/vs-studio-slide-in.component.js.map +1 -0
- package/dist/VideoStudio/index.d.ts +12 -0
- package/dist/VideoStudio/index.d.ts.map +1 -0
- package/dist/VideoStudio/index.js +12 -0
- package/dist/VideoStudio/index.js.map +1 -0
- package/dist/VideoStudio/resources/video-studio-archetypes-resource.component.d.ts +118 -0
- package/dist/VideoStudio/resources/video-studio-archetypes-resource.component.d.ts.map +1 -0
- package/dist/VideoStudio/resources/video-studio-archetypes-resource.component.js +964 -0
- package/dist/VideoStudio/resources/video-studio-archetypes-resource.component.js.map +1 -0
- package/dist/VideoStudio/resources/video-studio-brand-kits-resource.component.d.ts +70 -0
- package/dist/VideoStudio/resources/video-studio-brand-kits-resource.component.d.ts.map +1 -0
- package/dist/VideoStudio/resources/video-studio-brand-kits-resource.component.js +600 -0
- package/dist/VideoStudio/resources/video-studio-brand-kits-resource.component.js.map +1 -0
- package/dist/VideoStudio/resources/video-studio-productions-resource.component.d.ts +182 -0
- package/dist/VideoStudio/resources/video-studio-productions-resource.component.d.ts.map +1 -0
- package/dist/VideoStudio/resources/video-studio-productions-resource.component.js +1481 -0
- package/dist/VideoStudio/resources/video-studio-productions-resource.component.js.map +1 -0
- package/dist/VideoStudio/services/vs-studio-slide-in-state.service.d.ts +102 -0
- package/dist/VideoStudio/services/vs-studio-slide-in-state.service.d.ts.map +1 -0
- package/dist/VideoStudio/services/vs-studio-slide-in-state.service.js +240 -0
- package/dist/VideoStudio/services/vs-studio-slide-in-state.service.js.map +1 -0
- package/dist/VideoStudio/video-studio-agent-context.d.ts +495 -0
- package/dist/VideoStudio/video-studio-agent-context.d.ts.map +1 -0
- package/dist/VideoStudio/video-studio-agent-context.js +992 -0
- package/dist/VideoStudio/video-studio-agent-context.js.map +1 -0
- package/dist/ai-dashboards.module.d.ts +25 -21
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +25 -3
- package/dist/ai-dashboards.module.js.map +1 -1
- package/dist/module.d.ts +13 -12
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +7 -0
- package/dist/module.js.map +1 -1
- package/dist/public-api.d.ts +8 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +10 -0
- package/dist/public-api.js.map +1 -1
- package/dist/shared/action-scheduled-job.d.ts.map +1 -1
- package/dist/shared/action-scheduled-job.js +2 -0
- package/dist/shared/action-scheduled-job.js.map +1 -1
- package/dist/video-studio-dashboards.module.d.ts +40 -0
- package/dist/video-studio-dashboards.module.d.ts.map +1 -0
- package/dist/video-studio-dashboards.module.js +159 -0
- package/dist/video-studio-dashboards.module.js.map +1 -0
- package/package.json +77 -71
- package/dist/PredictiveStudio/at-risk.view-models.d.ts +0 -120
- package/dist/PredictiveStudio/at-risk.view-models.d.ts.map +0 -1
- package/dist/PredictiveStudio/at-risk.view-models.js +0 -261
- package/dist/PredictiveStudio/at-risk.view-models.js.map +0 -1
- package/dist/PredictiveStudio/components/ps-confirm-modal.component.d.ts +0 -109
- package/dist/PredictiveStudio/components/ps-confirm-modal.component.d.ts.map +0 -1
- package/dist/PredictiveStudio/components/ps-confirm-modal.component.js +0 -323
- package/dist/PredictiveStudio/components/ps-confirm-modal.component.js.map +0 -1
- package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.d.ts +0 -137
- package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.d.ts.map +0 -1
- package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.js +0 -826
- package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.js.map +0 -1
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview One place that decides what an `ActionExecutionLog.ResultCode` MEANS.
|
|
3
|
+
*
|
|
4
|
+
* ## Why this exists
|
|
5
|
+
*
|
|
6
|
+
* `ResultCode` is free text: the column has no CHECK constraint, and the value is whatever
|
|
7
|
+
* the executing runtime wrote. The Runtime action executor emits UPPER_SNAKE codes
|
|
8
|
+
* (`SUCCESS`, `RUNTIME_ERROR`, `TIMEOUT`, `NOT_APPROVED`, … — see
|
|
9
|
+
* `packages/Actions/Runtime/src/types.ts`, passed through verbatim by `ActionEngine`), while
|
|
10
|
+
* older/custom actions wrote Title Case (`Success`, `Failed`, `Error`).
|
|
11
|
+
*
|
|
12
|
+
* Every dashboard then invented its own comparison:
|
|
13
|
+
*
|
|
14
|
+
* - the Execution Monitor compared `=== 'Success'` and `['Failed','Error']` — so on a
|
|
15
|
+
* database of `SUCCESS` rows it reported **0 % (0/181)**…
|
|
16
|
+
* - …while its own `getResultColor` / `getResultIcon` lowercased first, which is why 181
|
|
17
|
+
* green rows rendered directly beneath that 0 % tile;
|
|
18
|
+
* - the Actions Overview lowercased and accepted `success|ok|completed|200`, which is why
|
|
19
|
+
* *its* success rate was the believable one;
|
|
20
|
+
* - the Action Card looked codes up in `MJ: Action Result Codes.IsSuccess` and fell back to
|
|
21
|
+
* a third, narrower heuristic.
|
|
22
|
+
*
|
|
23
|
+
* Four vocabularies, one column. This module is the single one.
|
|
24
|
+
*
|
|
25
|
+
* ## How classification works
|
|
26
|
+
*
|
|
27
|
+
* The code is normalised (trimmed, upper-cased, separators folded to `_`) and then matched
|
|
28
|
+
* by SHAPE rather than against a copied list of the runtime's constants. That is deliberate:
|
|
29
|
+
* this package does not depend on `@memberjunction/action-runtime`, so a copied list would
|
|
30
|
+
* silently drift the first time a new failure code is added upstream. Every failure code the
|
|
31
|
+
* runtime can emit contains one of the failure markers below, and the test file pins that
|
|
32
|
+
* claim against the actual constant list.
|
|
33
|
+
*
|
|
34
|
+
* `'unknown'` is a real answer, not a bucket for laziness: a code this module does not
|
|
35
|
+
* recognise must not be counted as a success (inflating the rate) or as a failure (inventing
|
|
36
|
+
* an incident). It is excluded from both numerator and denominator of the success rate.
|
|
37
|
+
*/
|
|
38
|
+
/** Normalise a raw code for matching: trim, upper-case, fold `-`/space/`.`/`/` to `_`. */
|
|
39
|
+
function normalize(code) {
|
|
40
|
+
return code.trim().toUpperCase().replace(/[\s\-./]+/g, '_');
|
|
41
|
+
}
|
|
42
|
+
/** Codes that mean the action succeeded. */
|
|
43
|
+
const SUCCESS_CODES = ['SUCCESS', 'SUCCEEDED', 'OK', 'COMPLETE', 'COMPLETED'];
|
|
44
|
+
/** Codes that mean the action had not finished. */
|
|
45
|
+
const RUNNING_CODES = ['RUNNING', 'IN_PROGRESS', 'STARTED'];
|
|
46
|
+
/**
|
|
47
|
+
* Substrings that mark a code as a failure.
|
|
48
|
+
*
|
|
49
|
+
* Covers every failure constant the Runtime executor can write without naming them:
|
|
50
|
+
* `INVALID_TYPE`→INVALID, `MISSING_CODE`→MISSING, `NOT_APPROVED`→NOT_APPROVED,
|
|
51
|
+
* `INACTIVE`→INACTIVE, `RUNTIME_ERROR`/`SYNTAX_ERROR`/`SECURITY_ERROR`/`UNEXPECTED_ERROR`→ERROR,
|
|
52
|
+
* `TIMEOUT`→TIMEOUT, `MEMORY_LIMIT`→LIMIT — plus the legacy `Failed` / `Error` pair.
|
|
53
|
+
*/
|
|
54
|
+
const FAILURE_MARKERS = [
|
|
55
|
+
'ERROR',
|
|
56
|
+
'FAIL',
|
|
57
|
+
'TIMEOUT',
|
|
58
|
+
'TIMED_OUT',
|
|
59
|
+
'LIMIT',
|
|
60
|
+
'NOT_APPROVED',
|
|
61
|
+
'UNAPPROVED',
|
|
62
|
+
'INACTIVE',
|
|
63
|
+
'INVALID',
|
|
64
|
+
'MISSING',
|
|
65
|
+
'REJECTED',
|
|
66
|
+
'REFUSED',
|
|
67
|
+
'DENIED',
|
|
68
|
+
'CANCELLED',
|
|
69
|
+
'CANCELED',
|
|
70
|
+
'ABORTED',
|
|
71
|
+
'EXCEPTION',
|
|
72
|
+
];
|
|
73
|
+
/**
|
|
74
|
+
* Classify a raw `ResultCode`.
|
|
75
|
+
*
|
|
76
|
+
* Order matters: the success and running lists are exact matches checked FIRST, so a
|
|
77
|
+
* hypothetical `SUCCESS_NO_FAILURES` cannot be dragged into `'failure'` by a marker, and a
|
|
78
|
+
* genuine `NOT_SUCCESSFUL` is not dragged into `'success'` by a substring. Null, undefined
|
|
79
|
+
* and blank all classify as `'unknown'` — a row with no code recorded says nothing.
|
|
80
|
+
*/
|
|
81
|
+
export function ClassifyActionResultCode(code) {
|
|
82
|
+
if (code == null) {
|
|
83
|
+
return 'unknown';
|
|
84
|
+
}
|
|
85
|
+
const normalized = normalize(code);
|
|
86
|
+
if (normalized.length === 0) {
|
|
87
|
+
return 'unknown';
|
|
88
|
+
}
|
|
89
|
+
if (SUCCESS_CODES.includes(normalized)) {
|
|
90
|
+
return 'success';
|
|
91
|
+
}
|
|
92
|
+
if (RUNNING_CODES.includes(normalized)) {
|
|
93
|
+
return 'running';
|
|
94
|
+
}
|
|
95
|
+
// Bare HTTP-style numerics: some integrations write the status they got back.
|
|
96
|
+
if (/^\d{3}$/.test(normalized)) {
|
|
97
|
+
const status = Number(normalized);
|
|
98
|
+
return status >= 200 && status < 300 ? 'success' : 'failure';
|
|
99
|
+
}
|
|
100
|
+
if (FAILURE_MARKERS.some(marker => normalized.includes(marker))) {
|
|
101
|
+
return 'failure';
|
|
102
|
+
}
|
|
103
|
+
return 'unknown';
|
|
104
|
+
}
|
|
105
|
+
/** Convenience predicate — `ClassifyActionResultCode(code) === 'success'`. */
|
|
106
|
+
export function IsActionResultSuccess(code) {
|
|
107
|
+
return ClassifyActionResultCode(code) === 'success';
|
|
108
|
+
}
|
|
109
|
+
/** Convenience predicate — `ClassifyActionResultCode(code) === 'failure'`. */
|
|
110
|
+
export function IsActionResultFailure(code) {
|
|
111
|
+
return ClassifyActionResultCode(code) === 'failure';
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Success rate over a set of coded runs, as a whole percentage.
|
|
115
|
+
*
|
|
116
|
+
* Runs whose code classifies as `'unknown'` or `'running'` are excluded from BOTH halves of
|
|
117
|
+
* the fraction: a run still in flight has not succeeded or failed yet, and a code we cannot
|
|
118
|
+
* read is not evidence either way. Counting them in the denominator is what makes a healthy
|
|
119
|
+
* system look broken; counting them as successes is what hides a broken one.
|
|
120
|
+
*
|
|
121
|
+
* Returns 0 when nothing in the set has settled — there is no rate to report, and 0 with an
|
|
122
|
+
* accompanying `0/0` detail is the honest rendering of that.
|
|
123
|
+
*/
|
|
124
|
+
export function ActionSuccessRate(codes) {
|
|
125
|
+
let succeeded = 0;
|
|
126
|
+
let settled = 0;
|
|
127
|
+
for (const code of codes) {
|
|
128
|
+
const klass = ClassifyActionResultCode(code);
|
|
129
|
+
if (klass === 'success') {
|
|
130
|
+
succeeded++;
|
|
131
|
+
settled++;
|
|
132
|
+
}
|
|
133
|
+
else if (klass === 'failure') {
|
|
134
|
+
settled++;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
if (settled === 0) {
|
|
138
|
+
return 0;
|
|
139
|
+
}
|
|
140
|
+
return Math.round((succeeded / settled) * 100);
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* The colour token a code should render with. Shared by the status chips and the row icons so
|
|
144
|
+
* a chip can never disagree with the tile that counted it.
|
|
145
|
+
*/
|
|
146
|
+
export function ActionResultColor(code) {
|
|
147
|
+
switch (ClassifyActionResultCode(code)) {
|
|
148
|
+
case 'success': return 'success';
|
|
149
|
+
case 'failure': return 'error';
|
|
150
|
+
case 'running': return 'warning';
|
|
151
|
+
default: return 'info';
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
/** The Font Awesome class a code should render with. Paired with {@link ActionResultColor}. */
|
|
155
|
+
export function ActionResultIcon(code) {
|
|
156
|
+
switch (ClassifyActionResultCode(code)) {
|
|
157
|
+
case 'success': return 'fa-solid fa-check-circle';
|
|
158
|
+
case 'failure': return 'fa-solid fa-exclamation-circle';
|
|
159
|
+
case 'running': return 'fa-solid fa-spinner fa-spin';
|
|
160
|
+
default: return 'fa-solid fa-info-circle';
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=action-result-code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-result-code.js","sourceRoot":"","sources":["../../src/Actions/action-result-code.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview One place that decides what an `ActionExecutionLog.ResultCode` MEANS.\n *\n * ## Why this exists\n *\n * `ResultCode` is free text: the column has no CHECK constraint, and the value is whatever\n * the executing runtime wrote. The Runtime action executor emits UPPER_SNAKE codes\n * (`SUCCESS`, `RUNTIME_ERROR`, `TIMEOUT`, `NOT_APPROVED`, … — see\n * `packages/Actions/Runtime/src/types.ts`, passed through verbatim by `ActionEngine`), while\n * older/custom actions wrote Title Case (`Success`, `Failed`, `Error`).\n *\n * Every dashboard then invented its own comparison:\n *\n * - the Execution Monitor compared `=== 'Success'` and `['Failed','Error']` — so on a\n * database of `SUCCESS` rows it reported **0 % (0/181)**…\n * - …while its own `getResultColor` / `getResultIcon` lowercased first, which is why 181\n * green rows rendered directly beneath that 0 % tile;\n * - the Actions Overview lowercased and accepted `success|ok|completed|200`, which is why\n * *its* success rate was the believable one;\n * - the Action Card looked codes up in `MJ: Action Result Codes.IsSuccess` and fell back to\n * a third, narrower heuristic.\n *\n * Four vocabularies, one column. This module is the single one.\n *\n * ## How classification works\n *\n * The code is normalised (trimmed, upper-cased, separators folded to `_`) and then matched\n * by SHAPE rather than against a copied list of the runtime's constants. That is deliberate:\n * this package does not depend on `@memberjunction/action-runtime`, so a copied list would\n * silently drift the first time a new failure code is added upstream. Every failure code the\n * runtime can emit contains one of the failure markers below, and the test file pins that\n * claim against the actual constant list.\n *\n * `'unknown'` is a real answer, not a bucket for laziness: a code this module does not\n * recognise must not be counted as a success (inflating the rate) or as a failure (inventing\n * an incident). It is excluded from both numerator and denominator of the success rate.\n */\n\n/** What a result code says about the run that produced it. */\nexport type ActionResultClass =\n /** The action completed and reported success. */\n | 'success'\n /** The action ended without succeeding — failed, errored, refused, timed out. */\n | 'failure'\n /** The action had not finished when the row was written. */\n | 'running'\n /** Recognised as nothing: a custom code, or a code from a newer writer. */\n | 'unknown';\n\n/** Normalise a raw code for matching: trim, upper-case, fold `-`/space/`.`/`/` to `_`. */\nfunction normalize(code: string): string {\n return code.trim().toUpperCase().replace(/[\\s\\-./]+/g, '_');\n}\n\n/** Codes that mean the action succeeded. */\nconst SUCCESS_CODES: readonly string[] = ['SUCCESS', 'SUCCEEDED', 'OK', 'COMPLETE', 'COMPLETED'];\n\n/** Codes that mean the action had not finished. */\nconst RUNNING_CODES: readonly string[] = ['RUNNING', 'IN_PROGRESS', 'STARTED'];\n\n/**\n * Substrings that mark a code as a failure.\n *\n * Covers every failure constant the Runtime executor can write without naming them:\n * `INVALID_TYPE`→INVALID, `MISSING_CODE`→MISSING, `NOT_APPROVED`→NOT_APPROVED,\n * `INACTIVE`→INACTIVE, `RUNTIME_ERROR`/`SYNTAX_ERROR`/`SECURITY_ERROR`/`UNEXPECTED_ERROR`→ERROR,\n * `TIMEOUT`→TIMEOUT, `MEMORY_LIMIT`→LIMIT — plus the legacy `Failed` / `Error` pair.\n */\nconst FAILURE_MARKERS: readonly string[] = [\n 'ERROR',\n 'FAIL',\n 'TIMEOUT',\n 'TIMED_OUT',\n 'LIMIT',\n 'NOT_APPROVED',\n 'UNAPPROVED',\n 'INACTIVE',\n 'INVALID',\n 'MISSING',\n 'REJECTED',\n 'REFUSED',\n 'DENIED',\n 'CANCELLED',\n 'CANCELED',\n 'ABORTED',\n 'EXCEPTION',\n];\n\n/**\n * Classify a raw `ResultCode`.\n *\n * Order matters: the success and running lists are exact matches checked FIRST, so a\n * hypothetical `SUCCESS_NO_FAILURES` cannot be dragged into `'failure'` by a marker, and a\n * genuine `NOT_SUCCESSFUL` is not dragged into `'success'` by a substring. Null, undefined\n * and blank all classify as `'unknown'` — a row with no code recorded says nothing.\n */\nexport function ClassifyActionResultCode(code: string | null | undefined): ActionResultClass {\n if (code == null) {\n return 'unknown';\n }\n const normalized = normalize(code);\n if (normalized.length === 0) {\n return 'unknown';\n }\n\n if (SUCCESS_CODES.includes(normalized)) {\n return 'success';\n }\n if (RUNNING_CODES.includes(normalized)) {\n return 'running';\n }\n\n // Bare HTTP-style numerics: some integrations write the status they got back.\n if (/^\\d{3}$/.test(normalized)) {\n const status = Number(normalized);\n return status >= 200 && status < 300 ? 'success' : 'failure';\n }\n\n if (FAILURE_MARKERS.some(marker => normalized.includes(marker))) {\n return 'failure';\n }\n\n return 'unknown';\n}\n\n/** Convenience predicate — `ClassifyActionResultCode(code) === 'success'`. */\nexport function IsActionResultSuccess(code: string | null | undefined): boolean {\n return ClassifyActionResultCode(code) === 'success';\n}\n\n/** Convenience predicate — `ClassifyActionResultCode(code) === 'failure'`. */\nexport function IsActionResultFailure(code: string | null | undefined): boolean {\n return ClassifyActionResultCode(code) === 'failure';\n}\n\n/**\n * Success rate over a set of coded runs, as a whole percentage.\n *\n * Runs whose code classifies as `'unknown'` or `'running'` are excluded from BOTH halves of\n * the fraction: a run still in flight has not succeeded or failed yet, and a code we cannot\n * read is not evidence either way. Counting them in the denominator is what makes a healthy\n * system look broken; counting them as successes is what hides a broken one.\n *\n * Returns 0 when nothing in the set has settled — there is no rate to report, and 0 with an\n * accompanying `0/0` detail is the honest rendering of that.\n */\nexport function ActionSuccessRate(codes: readonly (string | null | undefined)[]): number {\n let succeeded = 0;\n let settled = 0;\n for (const code of codes) {\n const klass = ClassifyActionResultCode(code);\n if (klass === 'success') {\n succeeded++;\n settled++;\n } else if (klass === 'failure') {\n settled++;\n }\n }\n if (settled === 0) {\n return 0;\n }\n return Math.round((succeeded / settled) * 100);\n}\n\n/**\n * The colour token a code should render with. Shared by the status chips and the row icons so\n * a chip can never disagree with the tile that counted it.\n */\nexport function ActionResultColor(code: string | null | undefined): 'success' | 'warning' | 'error' | 'info' {\n switch (ClassifyActionResultCode(code)) {\n case 'success': return 'success';\n case 'failure': return 'error';\n case 'running': return 'warning';\n default: return 'info';\n }\n}\n\n/** The Font Awesome class a code should render with. Paired with {@link ActionResultColor}. */\nexport function ActionResultIcon(code: string | null | undefined): string {\n switch (ClassifyActionResultCode(code)) {\n case 'success': return 'fa-solid fa-check-circle';\n case 'failure': return 'fa-solid fa-exclamation-circle';\n case 'running': return 'fa-solid fa-spinner fa-spin';\n default: return 'fa-solid fa-info-circle';\n }\n}\n"]}
|
|
@@ -99,6 +99,14 @@ export declare class ActionsOverviewComponent extends BaseResourceComponent impl
|
|
|
99
99
|
private registerAgentTools;
|
|
100
100
|
private loadData;
|
|
101
101
|
private calculateMetrics;
|
|
102
|
+
/**
|
|
103
|
+
* Successes as a share of SETTLED runs, through the shared classifier.
|
|
104
|
+
*
|
|
105
|
+
* This was the *believable* number on the Actions surfaces — it at least lowercased — but it
|
|
106
|
+
* was still its own private vocabulary (`success|ok|completed|200`), and it divided by every
|
|
107
|
+
* row including still-running ones. Both halves now come from `action-result-code.ts`, so
|
|
108
|
+
* this rate and the Execution Monitor's can no longer disagree.
|
|
109
|
+
*/
|
|
102
110
|
private calculateSuccessRate;
|
|
103
111
|
private calculateCategoryStats;
|
|
104
112
|
private loadFilteredData;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions-overview.component.d.ts","sourceRoot":"","sources":["../../../src/Actions/components/actions-overview.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEhF,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAEjI,OAAO,EAAE,qBAAqB,EAAqB,MAAM,2BAA2B,CAAC;AACrF,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAiB,MAAM,MAAM,CAAC;;
|
|
1
|
+
{"version":3,"file":"actions-overview.component.d.ts","sourceRoot":"","sources":["../../../src/Actions/components/actions-overview.component.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,7 @@ import { Subject, BehaviorSubject, combineLatest } from 'rxjs';
|
|
|
12
12
|
import { debounceTime, takeUntil, distinctUntilChanged } from 'rxjs/operators';
|
|
13
13
|
import { ValidateEnumParam, BoundNameList } from '../../shared/agent-tool-validation';
|
|
14
14
|
import { FindByIdOrError, FindByIdOrNameOrError } from '../agent-tool-helpers';
|
|
15
|
+
import { ActionSuccessRate, IsActionResultSuccess } from '../action-result-code';
|
|
15
16
|
import * as i0 from "@angular/core";
|
|
16
17
|
import * as i1 from "@angular/forms";
|
|
17
18
|
import * as i2 from "@memberjunction/ng-ui-components";
|
|
@@ -544,15 +545,18 @@ let ActionsOverviewComponent = class ActionsOverviewComponent extends BaseResour
|
|
|
544
545
|
customActions: actions.filter(a => a.Type === 'Custom').length
|
|
545
546
|
};
|
|
546
547
|
}
|
|
548
|
+
/**
|
|
549
|
+
* Successes as a share of SETTLED runs, through the shared classifier.
|
|
550
|
+
*
|
|
551
|
+
* This was the *believable* number on the Actions surfaces — it at least lowercased — but it
|
|
552
|
+
* was still its own private vocabulary (`success|ok|completed|200`), and it divided by every
|
|
553
|
+
* row including still-running ones. Both halves now come from `action-result-code.ts`, so
|
|
554
|
+
* this rate and the Execution Monitor's can no longer disagree.
|
|
555
|
+
*/
|
|
547
556
|
calculateSuccessRate(executions) {
|
|
548
557
|
if (!executions || executions.length === 0)
|
|
549
558
|
return 0;
|
|
550
|
-
|
|
551
|
-
const successful = executions.filter(e => {
|
|
552
|
-
const code = e.ResultCode?.toLowerCase();
|
|
553
|
-
return code === 'success' || code === 'ok' || code === 'completed' || code === '200';
|
|
554
|
-
}).length;
|
|
555
|
-
return Math.round((successful / executions.length) * 100);
|
|
559
|
+
return ActionSuccessRate(executions.map(e => e.ResultCode));
|
|
556
560
|
}
|
|
557
561
|
calculateCategoryStats(actions, categories, executions) {
|
|
558
562
|
// Group once: scanning every action and every execution per category grew with all three lists.
|
|
@@ -740,8 +744,7 @@ let ActionsOverviewComponent = class ActionsOverviewComponent extends BaseResour
|
|
|
740
744
|
return this.OpenExecution(execution);
|
|
741
745
|
}
|
|
742
746
|
IsExecutionSuccess(execution) {
|
|
743
|
-
|
|
744
|
-
return code === 'success' || code === 'ok' || code === 'completed' || code === '200';
|
|
747
|
+
return IsActionResultSuccess(execution.ResultCode);
|
|
745
748
|
}
|
|
746
749
|
/** @deprecated Use {@link IsExecutionSuccess}. */
|
|
747
750
|
isExecutionSuccess(execution) {
|
|
@@ -1000,5 +1003,5 @@ export { ActionsOverviewComponent };
|
|
|
1000
1003
|
type: Component,
|
|
1001
1004
|
args: [{ standalone: false, selector: 'mj-actions-overview', template: "<mj-page-layout>\n <mj-page-header\n Title=\"Actions Overview\"\n Icon=\"fa-solid fa-bolt\"\n Subtitle=\"Health and activity for all configured actions\">\n <!-- [meta] intentionally omitted \u2014 chrome slot discipline audit Task B.\n totalActions was a single inventory count; the body's KPI cards\n surface this and other metrics in their proper place. -->\n <!-- No [actions] \u2014 this page has no primary CTA; the control bar lives in [toolbar] per \u00A73. -->\n <div toolbar>\n <mj-page-search\n Placeholder=\"Search actions...\"\n [Value]=\"searchTerm$.value\"\n (ValueChange)=\"onSearchChange($event)\">\n </mj-page-search>\n <mj-filter-popover\n [ActiveCount]=\"ActiveFilterCount\"\n [ShowClearAll]=\"ActiveFilterCount > 0\"\n (ClearAllRequested)=\"resetFilters()\">\n <mj-filter-panel\n [Fields]=\"FilterFields\"\n [Values]=\"FilterValues\"\n (ValuesChange)=\"onFilterValuesChange($event)\"\n (Reset)=\"resetFilters()\">\n </mj-filter-panel>\n </mj-filter-popover>\n </div>\n </mj-page-header>\n\n <mj-page-body>\n <div class=\"actions-overview\" >\n\n <!-- Metrics Cards -->\n <div class=\"metrics-grid\">\n <div class=\"metric-card primary clickable\" (click)=\"onTotalActionsClick()\">\n <div class=\"metric-icon\">\n <i class=\"fa-solid fa-cogs\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ metrics.totalActions }}</div>\n <div class=\"metric-label\">Total Actions</div>\n <div class=\"metric-breakdown\">\n <span class=\"active\">{{ metrics.activeActions }} Active</span>\n <span class=\"pending\">{{ metrics.pendingActions }} Pending</span>\n <span class=\"disabled\">{{ metrics.disabledActions }} Disabled</span>\n </div>\n </div>\n </div>\n\n <div class=\"metric-card success clickable\" (click)=\"onExecutionsClick()\">\n <div class=\"metric-icon\">\n <i class=\"fa-solid fa-play-circle\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ metrics.totalExecutions }}</div>\n <div class=\"metric-label\">Total Executions</div>\n <div class=\"metric-breakdown\">\n <span class=\"recent\">{{ metrics.recentExecutions }} in last 24h</span>\n <span class=\"success-rate\">{{ metrics.successRate }}% success rate</span>\n </div>\n </div>\n </div>\n\n <div class=\"metric-card info clickable\" (click)=\"onCategoriesClick()\">\n <div class=\"metric-icon\">\n <i class=\"fa-solid fa-sitemap\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ metrics.totalCategories }}</div>\n <div class=\"metric-label\">Categories</div>\n <div class=\"metric-breakdown\">\n <span>Organized structure</span>\n </div>\n </div>\n </div>\n\n <div class=\"metric-card warning clickable\" (click)=\"onAIGeneratedClick()\">\n <div class=\"metric-icon\">\n <i class=\"fa-solid fa-robot\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">{{ metrics.aiGeneratedActions }}</div>\n <div class=\"metric-label\">AI Generated</div>\n <div class=\"metric-breakdown\">\n <span class=\"custom\">{{ metrics.customActions }} Custom</span>\n </div>\n </div>\n </div>\n \n <div class=\"metric-card gallery clickable\" (click)=\"onActionGalleryClick()\">\n <div class=\"metric-icon\">\n <i class=\"fa-solid fa-th\"></i>\n </div>\n <div class=\"metric-content\">\n <div class=\"metric-value\">\n <i class=\"fa-solid fa-sparkles\"></i>\n </div>\n <div class=\"metric-label\">Action Gallery</div>\n <div class=\"metric-breakdown\">\n <span>Visual action browser</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Content Grid -->\n <div class=\"content-grid\">\n <!-- Category Statistics -->\n <div class=\"panel category-stats\">\n <div class=\"panel-header\">\n <h3><i class=\"fa-solid fa-chart-bar\"></i> Category Performance</h3>\n </div>\n <div class=\"panel-content\">\n @if (categoryStats.length > 0) {\n <div class=\"category-list\">\n @for (category of categoryStats; track category.categoryId) {\n <div class=\"category-item\" (click)=\"openCategory(category.categoryId)\">\n <div class=\"category-info\">\n <div class=\"category-name\">{{ category.categoryName }}</div>\n <div class=\"category-metrics\">\n <span class=\"metric\">{{ category.actionCount }} actions</span>\n <span class=\"metric\">{{ category.executionCount }} executions</span>\n <span class=\"metric success-rate\">{{ category.successRate }}% success</span>\n </div>\n </div>\n <div class=\"category-chart\">\n <div class=\"progress-bar\">\n <div class=\"progress-fill\" [style.width.%]=\"category.successRate\"></div>\n </div>\n </div>\n </div>\n }\n </div>\n } @else {\n <mj-empty-state Size=\"compact\" Icon=\"fa-solid fa-chart-bar\"\n Title=\"No category statistics available\" />\n }\n </div>\n </div>\n\n <!-- Recent Actions -->\n <div class=\"panel recent-actions\">\n <div class=\"panel-header\">\n <h3><i class=\"fa-solid fa-clock\"></i> Recent Actions</h3>\n </div>\n <div class=\"panel-content\">\n @if (recentActions.length > 0) {\n <div class=\"actions-list\">\n @for (action of recentActions; track action.ID) {\n <div class=\"action-item\" (click)=\"openAction(action)\">\n <div class=\"action-icon\">\n <i [class]=\"getActionIcon(action)\"></i>\n </div>\n <div class=\"action-info\">\n <div class=\"action-name\">{{ action.Name }}</div>\n <div class=\"action-description\">{{ action.Description || 'No description' }}</div>\n </div>\n <div class=\"action-status\">\n <span class=\"status-chip\" [attr.data-color]=\"getStatusColor(action.Status)\">\n {{ action.Status }}\n </span>\n </div>\n </div>\n }\n </div>\n } @else {\n <mj-empty-state Size=\"compact\" Icon=\"fa-solid fa-cogs\"\n Title=\"No recent actions found\" />\n }\n </div>\n </div>\n\n <!-- Recent Executions -->\n <div class=\"panel recent-executions\">\n <div class=\"panel-header\">\n <h3><i class=\"fa-solid fa-history\"></i> Recent Executions</h3>\n </div>\n <div class=\"panel-content\">\n @if (recentExecutions.length > 0) {\n <div class=\"executions-list\">\n @for (execution of recentExecutions; track execution.ID) {\n <mj-accordion-panel Size=\"sm\" [FlushBody]=\"true\" [Expanded]=\"execution.isExpanded ?? false\" (ExpandedChange)=\"execution.isExpanded = $event\">\n <ng-template mjAccordionTitle>\n <div class=\"execution-time\">\n {{ execution.StartedAt | date:'MMM d, HH:mm' }}\n </div>\n <div class=\"execution-info\">\n <div class=\"execution-action\">{{ execution.Action || 'Action ID: ' + execution.ActionID }}</div>\n <div class=\"execution-user\">{{ execution.User || 'User ID: ' + execution.UserID }}</div>\n </div>\n <div class=\"execution-result\">\n <span class=\"status-chip\" [attr.data-color]=\"isExecutionSuccess(execution) ? 'success' : 'error'\">\n {{ execution.ResultCode || 'Unknown' }}\n </span>\n </div>\n </ng-template>\n <ng-template mjAccordionBody>\n <div class=\"execution-details\">\n <div class=\"params-section\">\n <h5><i class=\"fa-solid fa-sliders\"></i> Parameters</h5>\n <mj-code-editor\n [ngModel]=\"formatJsonParams(execution.Params)\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 150px; width: 100%;\">\n </mj-code-editor>\n </div>\n <div class=\"execution-actions\">\n <button mjButton\n variant=\"primary\"\n size=\"sm\"\n (click)=\"openExecution(execution)\">\n <i class=\"fa-solid fa-external-link\"></i> Open Details\n </button>\n </div>\n </div>\n </ng-template>\n </mj-accordion-panel>\n }\n </div>\n } @else {\n <mj-empty-state Size=\"compact\" Icon=\"fa-solid fa-history\"\n Title=\"No recent executions found\" />\n }\n </div>\n </div>\n </div>\n\n @if (isLoading) {\n <div class=\"loading-overlay\">\n <mj-loading [showText]=\"false\" size=\"medium\"></mj-loading>\n </div>\n }\n</div>\n </mj-page-body>\n</mj-page-layout>", styles: [".actions-overview {\n display: flex;\n flex-direction: column;\n gap: 1.5rem;\n position: relative; /* Required for scoped loading overlay */\n}\n.actions-overview .metrics-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n gap: 1.5rem;\n}\n.actions-overview .metrics-grid .metric-card {\n display: flex;\n align-items: center;\n gap: 1rem;\n padding: 1.5rem;\n border-radius: var(--mj-radius-lg);\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n box-shadow: var(--mj-shadow-sm);\n transition: all var(--mj-transition-base);\n}\n.actions-overview .metrics-grid .metric-card.clickable {\n cursor: pointer;\n}\n.actions-overview .metrics-grid .metric-card.clickable:hover {\n transform: translateY(-2px);\n box-shadow: var(--mj-shadow-md);\n}\n.actions-overview .metrics-grid .metric-card .metric-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 3rem;\n height: 3rem;\n border-radius: var(--mj-radius-md);\n font-size: var(--mj-text-xl);\n}\n.actions-overview .metrics-grid .metric-card .metric-icon i {\n color: var(--mj-text-inverse);\n}\n.actions-overview .metrics-grid .metric-card .metric-content {\n flex: 1;\n}\n.actions-overview .metrics-grid .metric-card .metric-content .metric-value {\n font-size: 1.75rem;\n font-weight: var(--mj-font-bold);\n line-height: var(--mj-leading-none);\n margin-bottom: 0.25rem;\n color: var(--mj-text-primary);\n}\n.actions-overview .metrics-grid .metric-card .metric-content .metric-label {\n font-size: var(--mj-text-sm);\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-muted);\n margin-bottom: 0.5rem;\n}\n.actions-overview .metrics-grid .metric-card .metric-content .metric-breakdown {\n display: flex;\n flex-direction: column;\n gap: 0.125rem;\n font-size: var(--mj-text-xs);\n}\n.actions-overview .metrics-grid .metric-card .metric-content .metric-breakdown span {\n color: var(--mj-text-muted);\n}\n.actions-overview .metrics-grid .metric-card .metric-content .metric-breakdown span.active {\n color: var(--mj-status-success);\n}\n.actions-overview .metrics-grid .metric-card .metric-content .metric-breakdown span.pending {\n color: var(--mj-status-warning);\n}\n.actions-overview .metrics-grid .metric-card .metric-content .metric-breakdown span.disabled {\n color: var(--mj-status-error);\n}\n.actions-overview .metrics-grid .metric-card .metric-content .metric-breakdown span.recent {\n color: var(--mj-status-info);\n}\n.actions-overview .metrics-grid .metric-card .metric-content .metric-breakdown span.success-rate {\n color: var(--mj-status-success);\n}\n.actions-overview .metrics-grid .metric-card .metric-content .metric-breakdown span.custom {\n color: var(--mj-brand-primary);\n}\n.actions-overview .metrics-grid .metric-card.primary .metric-icon {\n background: var(--mj-brand-primary);\n}\n.actions-overview .metrics-grid .metric-card.success .metric-icon {\n background: var(--mj-status-success);\n}\n.actions-overview .metrics-grid .metric-card.info .metric-icon {\n background: var(--mj-status-info);\n}\n.actions-overview .metrics-grid .metric-card.warning .metric-icon {\n background: var(--mj-status-warning);\n}\n.actions-overview .metrics-grid .metric-card.gallery .metric-icon {\n background: var(--mj-brand-primary);\n}\n.actions-overview .content-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n grid-template-rows: auto auto;\n gap: 1.5rem;\n flex: 1;\n}\n.actions-overview .content-grid .panel {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-lg);\n overflow: hidden;\n box-shadow: var(--mj-shadow-sm);\n}\n.actions-overview .content-grid .panel .panel-header {\n padding: 1rem 1.5rem;\n background: var(--mj-bg-surface-elevated);\n border-bottom: 1px solid var(--mj-border-default);\n}\n.actions-overview .content-grid .panel .panel-header h3 {\n margin: 0;\n font-size: var(--mj-text-base);\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n.actions-overview .content-grid .panel .panel-header h3 i {\n color: var(--mj-brand-primary);\n}\n.actions-overview .content-grid .panel .panel-content {\n padding: 1.5rem;\n height: calc(100% - 60px);\n overflow-y: auto;\n}\n.actions-overview .content-grid .category-stats .category-list {\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n}\n.actions-overview .content-grid .category-stats .category-list .category-item {\n display: flex;\n align-items: center;\n gap: 1rem;\n padding: 1rem;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n cursor: pointer;\n transition: all var(--mj-transition-base);\n}\n.actions-overview .content-grid .category-stats .category-list .category-item:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-brand-primary);\n}\n.actions-overview .content-grid .category-stats .category-list .category-item .category-info {\n flex: 1;\n}\n.actions-overview .content-grid .category-stats .category-list .category-item .category-info .category-name {\n font-weight: var(--mj-font-semibold);\n margin-bottom: 0.25rem;\n color: var(--mj-text-primary);\n}\n.actions-overview .content-grid .category-stats .category-list .category-item .category-info .category-metrics {\n display: flex;\n gap: 1rem;\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n}\n.actions-overview .content-grid .category-stats .category-list .category-item .category-info .category-metrics .metric.success-rate {\n color: var(--mj-status-success);\n font-weight: var(--mj-font-semibold);\n}\n.actions-overview .content-grid .category-stats .category-list .category-item .category-chart {\n width: 60px;\n}\n.actions-overview .content-grid .category-stats .category-list .category-item .category-chart .progress-bar {\n height: 6px;\n background: var(--mj-border-default);\n border-radius: var(--mj-radius-full);\n overflow: hidden;\n}\n.actions-overview .content-grid .category-stats .category-list .category-item .category-chart .progress-bar .progress-fill {\n height: 100%;\n background: var(--mj-status-success);\n transition: width var(--mj-transition-slow);\n}\n.actions-overview .content-grid .recent-actions .actions-list {\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n}\n.actions-overview .content-grid .recent-actions .actions-list .action-item {\n display: flex;\n align-items: center;\n gap: 1rem;\n padding: 1rem;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n cursor: pointer;\n transition: all var(--mj-transition-base);\n}\n.actions-overview .content-grid .recent-actions .actions-list .action-item:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-brand-primary);\n}\n.actions-overview .content-grid .recent-actions .actions-list .action-item .action-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 2.5rem;\n height: 2.5rem;\n border-radius: var(--mj-radius-sm);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n}\n.actions-overview .content-grid .recent-actions .actions-list .action-item .action-icon i {\n color: var(--mj-brand-primary);\n font-size: var(--mj-text-base);\n}\n.actions-overview .content-grid .recent-actions .actions-list .action-item .action-info {\n flex: 1;\n}\n.actions-overview .content-grid .recent-actions .actions-list .action-item .action-info .action-name {\n font-weight: var(--mj-font-semibold);\n margin-bottom: 0.25rem;\n color: var(--mj-text-primary);\n}\n.actions-overview .content-grid .recent-actions .actions-list .action-item .action-info .action-description {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n line-height: var(--mj-leading-snug);\n}\n.actions-overview .content-grid .recent-actions .actions-list .action-item .action-status {\n flex-shrink: 0;\n}\n.actions-overview .content-grid .recent-executions {\n grid-column: 1/-1;\n}\n.actions-overview .content-grid .recent-executions .executions-list {\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n}\n.actions-overview .content-grid .recent-executions .executions-list .execution-time {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n font-weight: var(--mj-font-semibold);\n min-width: 80px;\n}\n.actions-overview .content-grid .recent-executions .executions-list .execution-info {\n flex: 1;\n}\n.actions-overview .content-grid .recent-executions .executions-list .execution-info .execution-action {\n font-weight: var(--mj-font-semibold);\n margin-bottom: 0.25rem;\n font-size: var(--mj-text-sm);\n color: var(--mj-text-primary);\n}\n.actions-overview .content-grid .recent-executions .executions-list .execution-info .execution-user {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n}\n.actions-overview .content-grid .recent-executions .executions-list .execution-result {\n flex-shrink: 0;\n}\n.actions-overview .content-grid .recent-executions .executions-list .execution-details {\n padding: 1rem;\n background: var(--mj-bg-surface-card);\n}\n.actions-overview .content-grid .recent-executions .executions-list .execution-details .params-section {\n margin-bottom: 1rem;\n}\n.actions-overview .content-grid .recent-executions .executions-list .execution-details .params-section h5 {\n margin: 0 0 0.5rem 0;\n font-size: var(--mj-text-sm);\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n.actions-overview .content-grid .recent-executions .executions-list .execution-details .params-section h5 i {\n font-size: var(--mj-text-xs);\n}\n.actions-overview .content-grid .recent-executions .executions-list .execution-details .execution-actions {\n display: flex;\n justify-content: flex-end;\n}\n.actions-overview .loading-overlay {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: color-mix(in srgb, var(--mj-bg-surface) 80%, transparent);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n}\n\n@media (max-width: 1200px) {\n .actions-overview .content-grid {\n grid-template-columns: 1fr;\n }\n .actions-overview .content-grid .recent-executions {\n grid-column: 1;\n }\n}\n@media (max-width: 768px) {\n .actions-overview {\n padding: 1rem;\n gap: 1rem;\n }\n .actions-overview .metrics-grid {\n grid-template-columns: 1fr;\n gap: 1rem;\n }\n .actions-overview .overview-header .filters-row {\n flex-direction: column;\n align-items: stretch;\n }\n .actions-overview .overview-header .filters-row .search-container,\n .actions-overview .overview-header .filters-row .filter-container {\n min-width: unset;\n }\n}\n"] }]
|
|
1002
1005
|
}], () => [{ type: i0.ChangeDetectorRef }], null); })();
|
|
1003
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ActionsOverviewComponent, { className: "ActionsOverviewComponent", filePath: "src/Actions/components/actions-overview.component.ts", lineNumber:
|
|
1006
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ActionsOverviewComponent, { className: "ActionsOverviewComponent", filePath: "src/Actions/components/actions-overview.component.ts", lineNumber: 47 }); })();
|
|
1004
1007
|
//# sourceMappingURL=actions-overview.component.js.map
|