@memberjunction/ng-dashboards 3.4.0 → 4.0.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/ai-dashboard.component.d.ts +62 -0
- package/dist/AI/ai-dashboard.component.d.ts.map +1 -0
- package/dist/AI/ai-dashboard.component.js +338 -0
- package/dist/AI/ai-dashboard.component.js.map +1 -0
- package/dist/AI/components/agents/agent-configuration.component.d.ts +12 -5
- package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-configuration.component.js +103 -44
- package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
- package/dist/AI/components/agents/agent-editor.component.d.ts +14 -5
- package/dist/AI/components/agents/agent-editor.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-editor.component.js +149 -211
- package/dist/AI/components/agents/agent-editor.component.js.map +1 -1
- package/dist/AI/components/agents/agent-filter-panel.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-filter-panel.component.js +4 -4
- package/dist/AI/components/agents/agent-filter-panel.component.js.map +1 -1
- package/dist/AI/components/charts/performance-heatmap.component.d.ts.map +1 -1
- package/dist/AI/components/charts/performance-heatmap.component.js +4 -6
- package/dist/AI/components/charts/performance-heatmap.component.js.map +1 -1
- package/dist/AI/components/charts/time-series-chart.component.d.ts.map +1 -1
- package/dist/AI/components/charts/time-series-chart.component.js +6 -7
- package/dist/AI/components/charts/time-series-chart.component.js.map +1 -1
- package/dist/AI/components/execution-monitoring.component.d.ts +0 -4
- package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
- package/dist/AI/components/execution-monitoring.component.js +33 -37
- package/dist/AI/components/execution-monitoring.component.js.map +1 -1
- package/dist/AI/components/models/model-management-v2.component.d.ts +96 -0
- package/dist/AI/components/models/model-management-v2.component.d.ts.map +1 -0
- package/dist/AI/components/models/model-management-v2.component.js +981 -0
- package/dist/AI/components/models/model-management-v2.component.js.map +1 -0
- package/dist/AI/components/models/model-management.component.d.ts +3 -6
- package/dist/AI/components/models/model-management.component.d.ts.map +1 -1
- package/dist/AI/components/models/model-management.component.js +34 -27
- package/dist/AI/components/models/model-management.component.js.map +1 -1
- 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 +22 -17
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/prompt-filter-panel.component.js +4 -4
- package/dist/AI/components/prompts/prompt-filter-panel.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-management-v2.component.d.ts +97 -0
- package/dist/AI/components/prompts/prompt-management-v2.component.d.ts.map +1 -0
- package/dist/AI/components/prompts/prompt-management-v2.component.js +811 -0
- package/dist/AI/components/prompts/prompt-management-v2.component.js.map +1 -0
- package/dist/AI/components/prompts/prompt-management.component.d.ts +3 -6
- package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.js +34 -32
- package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-version-control.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/prompt-version-control.component.js +33 -28
- package/dist/AI/components/prompts/prompt-version-control.component.js.map +1 -1
- package/dist/AI/components/system/system-config-filter-panel.component.d.ts.map +1 -1
- package/dist/AI/components/system/system-config-filter-panel.component.js +4 -4
- package/dist/AI/components/system/system-config-filter-panel.component.js.map +1 -1
- package/dist/AI/components/system/system-configuration.component.d.ts +0 -4
- package/dist/AI/components/system/system-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/system/system-configuration.component.js +26 -27
- package/dist/AI/components/system/system-configuration.component.js.map +1 -1
- package/dist/AI/components/widgets/kpi-card.component.d.ts.map +1 -1
- package/dist/AI/components/widgets/kpi-card.component.js +52 -42
- package/dist/AI/components/widgets/kpi-card.component.js.map +1 -1
- package/dist/AI/components/widgets/live-execution-widget.component.d.ts.map +1 -1
- package/dist/AI/components/widgets/live-execution-widget.component.js +7 -7
- package/dist/AI/components/widgets/live-execution-widget.component.js.map +1 -1
- package/dist/APIKeys/api-applications-panel.component.d.ts +0 -2
- package/dist/APIKeys/api-applications-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-applications-panel.component.js +193 -189
- package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
- package/dist/APIKeys/api-key-create-dialog.component.d.ts +0 -2
- package/dist/APIKeys/api-key-create-dialog.component.d.ts.map +1 -1
- package/dist/APIKeys/api-key-create-dialog.component.js +175 -180
- package/dist/APIKeys/api-key-create-dialog.component.js.map +1 -1
- package/dist/APIKeys/api-key-edit-panel.component.d.ts +0 -2
- package/dist/APIKeys/api-key-edit-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-key-edit-panel.component.js +231 -225
- package/dist/APIKeys/api-key-edit-panel.component.js.map +1 -1
- package/dist/APIKeys/api-key-list.component.d.ts +0 -2
- package/dist/APIKeys/api-key-list.component.d.ts.map +1 -1
- package/dist/APIKeys/api-key-list.component.js +113 -114
- package/dist/APIKeys/api-key-list.component.js.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.d.ts +0 -2
- package/dist/APIKeys/api-keys-resource.component.d.ts.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.js +294 -302
- package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
- package/dist/APIKeys/api-scopes-panel.component.d.ts +0 -2
- package/dist/APIKeys/api-scopes-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-scopes-panel.component.js +151 -155
- package/dist/APIKeys/api-scopes-panel.component.js.map +1 -1
- package/dist/APIKeys/api-usage-panel.component.d.ts +0 -2
- package/dist/APIKeys/api-usage-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-usage-panel.component.js +237 -234
- package/dist/APIKeys/api-usage-panel.component.js.map +1 -1
- package/dist/Actions/actions-management-dashboard.component.d.ts +52 -0
- package/dist/Actions/actions-management-dashboard.component.d.ts.map +1 -0
- package/dist/Actions/actions-management-dashboard.component.js +308 -0
- package/dist/Actions/actions-management-dashboard.component.js.map +1 -0
- package/dist/Actions/components/actions-list-view.component.d.ts.map +1 -1
- package/dist/Actions/components/actions-list-view.component.js +15 -14
- package/dist/Actions/components/actions-list-view.component.js.map +1 -1
- package/dist/Actions/components/actions-overview.component.d.ts +3 -6
- package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +17 -19
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/categories-list-view.component.d.ts.map +1 -1
- package/dist/Actions/components/categories-list-view.component.js +6 -6
- package/dist/Actions/components/categories-list-view.component.js.map +1 -1
- package/dist/Actions/components/code-management.component.d.ts +0 -4
- package/dist/Actions/components/code-management.component.d.ts.map +1 -1
- package/dist/Actions/components/code-management.component.js +3 -9
- package/dist/Actions/components/code-management.component.js.map +1 -1
- package/dist/Actions/components/entity-integration.component.d.ts +0 -4
- package/dist/Actions/components/entity-integration.component.d.ts.map +1 -1
- package/dist/Actions/components/entity-integration.component.js +3 -9
- package/dist/Actions/components/entity-integration.component.js.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.d.ts +3 -6
- package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.js +13 -16
- package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
- package/dist/Actions/components/executions-list-view.component.d.ts.map +1 -1
- package/dist/Actions/components/executions-list-view.component.js +3 -3
- package/dist/Actions/components/executions-list-view.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-breadcrumb.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/action-breadcrumb.component.js +6 -6
- package/dist/Actions/components/explorer/action-breadcrumb.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 +11 -10
- package/dist/Actions/components/explorer/action-card.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.d.ts +0 -4
- package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.js +10 -14
- package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-list-item.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/action-list-item.component.js +8 -8
- package/dist/Actions/components/explorer/action-list-item.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-toolbar.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/action-toolbar.component.js +15 -14
- package/dist/Actions/components/explorer/action-toolbar.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-tree-panel.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/action-tree-panel.component.js +11 -10
- package/dist/Actions/components/explorer/action-tree-panel.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 -4
- package/dist/Actions/components/explorer/index.js.map +1 -1
- package/dist/Actions/components/explorer/new-action-panel.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/new-action-panel.component.js +10 -10
- package/dist/Actions/components/explorer/new-action-panel.component.js.map +1 -1
- package/dist/Actions/components/explorer/new-category-panel.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/new-category-panel.component.js +8 -8
- package/dist/Actions/components/explorer/new-category-panel.component.js.map +1 -1
- package/dist/Actions/components/scheduled-actions.component.d.ts +0 -4
- package/dist/Actions/components/scheduled-actions.component.d.ts.map +1 -1
- package/dist/Actions/components/scheduled-actions.component.js +3 -9
- package/dist/Actions/components/scheduled-actions.component.js.map +1 -1
- package/dist/Actions/components/security-permissions.component.d.ts +0 -4
- package/dist/Actions/components/security-permissions.component.d.ts.map +1 -1
- package/dist/Actions/components/security-permissions.component.js +3 -9
- package/dist/Actions/components/security-permissions.component.js.map +1 -1
- package/dist/Actions/index.d.ts +0 -7
- package/dist/Actions/index.d.ts.map +1 -1
- package/dist/Actions/index.js +0 -8
- package/dist/Actions/index.js.map +1 -1
- package/dist/Communication/communication-dashboard.component.d.ts +0 -1
- package/dist/Communication/communication-dashboard.component.d.ts.map +1 -1
- package/dist/Communication/communication-dashboard.component.js +38 -51
- package/dist/Communication/communication-dashboard.component.js.map +1 -1
- package/dist/Communication/communication-logs-resource.component.d.ts +0 -4
- package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-logs-resource.component.js +112 -108
- package/dist/Communication/communication-logs-resource.component.js.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.d.ts +0 -4
- package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.js +210 -201
- package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
- package/dist/Communication/communication-providers-resource.component.d.ts +0 -4
- package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-providers-resource.component.js +136 -124
- package/dist/Communication/communication-providers-resource.component.js.map +1 -1
- package/dist/Communication/communication-runs-resource.component.d.ts +0 -4
- package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-runs-resource.component.js +91 -88
- package/dist/Communication/communication-runs-resource.component.js.map +1 -1
- package/dist/Communication/communication-templates-resource.component.d.ts +0 -4
- package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-templates-resource.component.js +139 -122
- package/dist/Communication/communication-templates-resource.component.js.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.d.ts +0 -4
- package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.js +21 -20
- package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js +11 -12
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/artifact-load-dialog.component.js +25 -22
- package/dist/ComponentStudio/components/artifact-load-dialog.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 +16 -16
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/browser/component-browser.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/browser/component-browser.component.js +23 -21
- package/dist/ComponentStudio/components/browser/component-browser.component.js.map +1 -1
- package/dist/ComponentStudio/components/editors/code-editor-panel.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/editors/code-editor-panel.component.js +10 -10
- package/dist/ComponentStudio/components/editors/code-editor-panel.component.js.map +1 -1
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js +13 -13
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js.map +1 -1
- package/dist/ComponentStudio/components/editors/requirements-editor.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/editors/requirements-editor.component.js +7 -7
- package/dist/ComponentStudio/components/editors/requirements-editor.component.js.map +1 -1
- package/dist/ComponentStudio/components/editors/spec-editor.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/editors/spec-editor.component.js +5 -5
- package/dist/ComponentStudio/components/editors/spec-editor.component.js.map +1 -1
- package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js +4 -4
- package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js +9 -9
- package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/text-import-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/text-import-dialog.component.js +4 -4
- package/dist/ComponentStudio/components/text-import-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/workspace/component-preview.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/workspace/component-preview.component.js +10 -9
- package/dist/ComponentStudio/components/workspace/component-preview.component.js.map +1 -1
- package/dist/ComponentStudio/components/workspace/editor-tabs.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/workspace/editor-tabs.component.js +4 -4
- package/dist/ComponentStudio/components/workspace/editor-tabs.component.js.map +1 -1
- package/dist/Credentials/components/credential-category-edit-panel.component.d.ts +44 -0
- package/dist/Credentials/components/credential-category-edit-panel.component.d.ts.map +1 -0
- package/dist/Credentials/components/credential-category-edit-panel.component.js +456 -0
- package/dist/Credentials/components/credential-category-edit-panel.component.js.map +1 -0
- package/dist/Credentials/components/credential-edit-panel.component.d.ts +70 -0
- package/dist/Credentials/components/credential-edit-panel.component.d.ts.map +1 -0
- package/dist/Credentials/components/credential-edit-panel.component.js +694 -0
- package/dist/Credentials/components/credential-edit-panel.component.js.map +1 -0
- package/dist/Credentials/components/credential-type-edit-panel.component.d.ts +56 -0
- package/dist/Credentials/components/credential-type-edit-panel.component.d.ts.map +1 -0
- package/dist/Credentials/components/credential-type-edit-panel.component.js +563 -0
- package/dist/Credentials/components/credential-type-edit-panel.component.js.map +1 -0
- package/dist/Credentials/components/credentials-audit-resource.component.d.ts +0 -1
- package/dist/Credentials/components/credentials-audit-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.js +200 -196
- package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.d.ts +0 -1
- package/dist/Credentials/components/credentials-categories-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.js +195 -190
- package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.d.ts +0 -1
- package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.js +251 -240
- package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-overview-resource.component.d.ts +0 -1
- package/dist/Credentials/components/credentials-overview-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-overview-resource.component.js +228 -226
- package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.d.ts +0 -1
- package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.js +214 -210
- package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
- package/dist/Credentials/credentials-dashboard.component.d.ts +0 -1
- package/dist/Credentials/credentials-dashboard.component.d.ts.map +1 -1
- package/dist/Credentials/credentials-dashboard.component.js +31 -44
- package/dist/Credentials/credentials-dashboard.component.js.map +1 -1
- package/dist/Credentials/pipes/group-by.pipe.d.ts.map +1 -1
- package/dist/Credentials/pipes/group-by.pipe.js +2 -1
- package/dist/Credentials/pipes/group-by.pipe.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts +0 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js +73 -80
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-dialog.component.js +46 -45
- package/dist/DashboardBrowser/dashboard-share-dialog.component.js.map +1 -1
- package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.d.ts.map +1 -1
- package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js +7 -7
- package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js.map +1 -1
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts.map +1 -1
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js +15 -15
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js.map +1 -1
- package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.d.ts +245 -0
- package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.d.ts.map +1 -0
- package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.js +1143 -0
- package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.js.map +1 -0
- package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts.map +1 -1
- package/dist/DataExplorer/components/view-selector/view-selector.component.js +17 -11
- package/dist/DataExplorer/components/view-selector/view-selector.component.js.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +0 -4
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.js +49 -54
- package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
- package/dist/DataExplorer/data-explorer-resource.component.d.ts +0 -1
- package/dist/DataExplorer/data-explorer-resource.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-resource.component.js +3 -6
- package/dist/DataExplorer/data-explorer-resource.component.js.map +1 -1
- package/dist/DataExplorer/index.d.ts +2 -2
- package/dist/DataExplorer/index.d.ts.map +1 -1
- package/dist/DataExplorer/index.js +2 -2
- package/dist/DataExplorer/index.js.map +1 -1
- package/dist/EntityAdmin/components/entity-details.component.d.ts +50 -0
- package/dist/EntityAdmin/components/entity-details.component.d.ts.map +1 -0
- package/dist/EntityAdmin/components/entity-details.component.js +680 -0
- package/dist/EntityAdmin/components/entity-details.component.js.map +1 -0
- package/dist/EntityAdmin/components/entity-filter-panel.component.d.ts +31 -0
- package/dist/EntityAdmin/components/entity-filter-panel.component.d.ts.map +1 -0
- package/dist/EntityAdmin/components/entity-filter-panel.component.js +160 -0
- package/dist/EntityAdmin/components/entity-filter-panel.component.js.map +1 -0
- package/dist/EntityAdmin/components/erd-composite.component.d.ts +73 -0
- package/dist/EntityAdmin/components/erd-composite.component.d.ts.map +1 -0
- package/dist/EntityAdmin/components/erd-composite.component.js +271 -0
- package/dist/EntityAdmin/components/erd-composite.component.js.map +1 -0
- package/dist/EntityAdmin/components/erd-diagram.component.d.ts +47 -0
- package/dist/EntityAdmin/components/erd-diagram.component.d.ts.map +1 -0
- package/dist/EntityAdmin/components/erd-diagram.component.js +618 -0
- package/dist/EntityAdmin/components/erd-diagram.component.js.map +1 -0
- package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts +0 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.js +6 -7
- package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
- package/dist/Home/home-application.d.ts +0 -5
- package/dist/Home/home-application.d.ts.map +1 -1
- package/dist/Home/home-application.js +0 -9
- package/dist/Home/home-application.js.map +1 -1
- package/dist/Home/home-dashboard.component.d.ts +0 -4
- package/dist/Home/home-dashboard.component.d.ts.map +1 -1
- package/dist/Home/home-dashboard.component.js +141 -139
- package/dist/Home/home-dashboard.component.js.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts +0 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +761 -685
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.d.ts +0 -1
- package/dist/Lists/components/lists-categories-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.js +340 -316
- package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.d.ts +0 -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 +530 -482
- package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.d.ts +0 -1
- package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.js +508 -455
- package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
- package/dist/Lists/components/venn-diagram/venn-diagram.component.d.ts.map +1 -1
- package/dist/Lists/components/venn-diagram/venn-diagram.component.js +44 -39
- package/dist/Lists/components/venn-diagram/venn-diagram.component.js.map +1 -1
- package/dist/Lists/index.d.ts +0 -1
- package/dist/Lists/index.d.ts.map +1 -1
- package/dist/Lists/index.js +0 -11
- package/dist/Lists/index.js.map +1 -1
- package/dist/MCP/components/mcp-connection-dialog.component.d.ts +0 -4
- package/dist/MCP/components/mcp-connection-dialog.component.d.ts.map +1 -1
- package/dist/MCP/components/mcp-connection-dialog.component.js +33 -39
- package/dist/MCP/components/mcp-connection-dialog.component.js.map +1 -1
- package/dist/MCP/components/mcp-log-detail-panel.component.d.ts +0 -4
- package/dist/MCP/components/mcp-log-detail-panel.component.d.ts.map +1 -1
- package/dist/MCP/components/mcp-log-detail-panel.component.js +42 -44
- package/dist/MCP/components/mcp-log-detail-panel.component.js.map +1 -1
- package/dist/MCP/components/mcp-server-dialog.component.d.ts +3 -4
- package/dist/MCP/components/mcp-server-dialog.component.d.ts.map +1 -1
- package/dist/MCP/components/mcp-server-dialog.component.js +186 -77
- package/dist/MCP/components/mcp-server-dialog.component.js.map +1 -1
- package/dist/MCP/components/mcp-test-tool-dialog.component.d.ts +0 -4
- package/dist/MCP/components/mcp-test-tool-dialog.component.d.ts.map +1 -1
- package/dist/MCP/components/mcp-test-tool-dialog.component.js +187 -187
- package/dist/MCP/components/mcp-test-tool-dialog.component.js.map +1 -1
- package/dist/MCP/index.d.ts +5 -5
- package/dist/MCP/index.d.ts.map +1 -1
- package/dist/MCP/index.js +5 -5
- package/dist/MCP/index.js.map +1 -1
- package/dist/MCP/mcp-dashboard.component.d.ts +65 -7
- package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
- package/dist/MCP/mcp-dashboard.component.js +976 -697
- package/dist/MCP/mcp-dashboard.component.js.map +1 -1
- package/dist/MCP/mcp-filter-panel.component.d.ts +54 -0
- package/dist/MCP/mcp-filter-panel.component.d.ts.map +1 -0
- package/dist/MCP/mcp-filter-panel.component.js +288 -0
- package/dist/MCP/mcp-filter-panel.component.js.map +1 -0
- package/dist/MCP/mcp-resource.component.d.ts +11 -5
- package/dist/MCP/mcp-resource.component.d.ts.map +1 -1
- package/dist/MCP/mcp-resource.component.js +8 -9
- package/dist/MCP/mcp-resource.component.js.map +1 -1
- package/dist/MCP/mcp.module.d.ts +16 -19
- package/dist/MCP/mcp.module.d.ts.map +1 -1
- package/dist/MCP/mcp.module.js +17 -26
- package/dist/MCP/mcp.module.js.map +1 -1
- package/dist/MCP/services/mcp-tools.service.d.ts +10 -4
- package/dist/MCP/services/mcp-tools.service.d.ts.map +1 -1
- package/dist/MCP/services/mcp-tools.service.js +5 -6
- package/dist/MCP/services/mcp-tools.service.js.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.d.ts +0 -1
- package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js +79 -88
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/Scheduling/components/job-slideout.component.d.ts.map +1 -1
- package/dist/Scheduling/components/job-slideout.component.js +117 -116
- package/dist/Scheduling/components/job-slideout.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts +0 -4
- package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-activity-resource.component.js +3 -9
- package/dist/Scheduling/components/scheduling-activity-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-activity.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-activity.component.js +134 -134
- package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-health-resource.component.d.ts +20 -0
- package/dist/Scheduling/components/scheduling-health-resource.component.d.ts.map +1 -0
- package/dist/Scheduling/components/scheduling-health-resource.component.js +55 -0
- package/dist/Scheduling/components/scheduling-health-resource.component.js.map +1 -0
- package/dist/Scheduling/components/scheduling-health.component.d.ts +30 -0
- package/dist/Scheduling/components/scheduling-health.component.d.ts.map +1 -0
- package/dist/Scheduling/components/scheduling-health.component.js +315 -0
- package/dist/Scheduling/components/scheduling-health.component.js.map +1 -0
- package/dist/Scheduling/components/scheduling-history-resource.component.d.ts +20 -0
- package/dist/Scheduling/components/scheduling-history-resource.component.d.ts.map +1 -0
- package/dist/Scheduling/components/scheduling-history-resource.component.js +55 -0
- package/dist/Scheduling/components/scheduling-history-resource.component.js.map +1 -0
- package/dist/Scheduling/components/scheduling-history.component.d.ts +48 -0
- package/dist/Scheduling/components/scheduling-history.component.d.ts.map +1 -0
- package/dist/Scheduling/components/scheduling-history.component.js +377 -0
- package/dist/Scheduling/components/scheduling-history.component.js.map +1 -0
- package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts +0 -4
- package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.js +3 -9
- package/dist/Scheduling/components/scheduling-jobs-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs.component.js +102 -97
- package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-monitor-resource.component.d.ts +20 -0
- package/dist/Scheduling/components/scheduling-monitor-resource.component.d.ts.map +1 -0
- package/dist/Scheduling/components/scheduling-monitor-resource.component.js +55 -0
- package/dist/Scheduling/components/scheduling-monitor-resource.component.js.map +1 -0
- package/dist/Scheduling/components/scheduling-monitoring.component.d.ts +37 -0
- package/dist/Scheduling/components/scheduling-monitoring.component.d.ts.map +1 -0
- package/dist/Scheduling/components/scheduling-monitoring.component.js +488 -0
- package/dist/Scheduling/components/scheduling-monitoring.component.js.map +1 -0
- package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts +0 -4
- package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-overview-resource.component.js +3 -9
- package/dist/Scheduling/components/scheduling-overview-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-overview.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-overview.component.js +127 -122
- package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-types-resource.component.d.ts +20 -0
- package/dist/Scheduling/components/scheduling-types-resource.component.d.ts.map +1 -0
- package/dist/Scheduling/components/scheduling-types-resource.component.js +55 -0
- package/dist/Scheduling/components/scheduling-types-resource.component.js.map +1 -0
- package/dist/Scheduling/components/scheduling-types.component.d.ts +22 -0
- package/dist/Scheduling/components/scheduling-types.component.d.ts.map +1 -0
- package/dist/Scheduling/components/scheduling-types.component.js +165 -0
- package/dist/Scheduling/components/scheduling-types.component.js.map +1 -0
- package/dist/Scheduling/scheduling-dashboard.component.d.ts +0 -1
- package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.js +35 -43
- package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts +0 -4
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.js +1552 -1534
- package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
- package/dist/Testing/components/testing-analytics-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-analytics-resource.component.js +3 -3
- package/dist/Testing/components/testing-analytics-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-analytics.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-analytics.component.js +30 -30
- package/dist/Testing/components/testing-analytics.component.js.map +1 -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 +3 -3
- package/dist/Testing/components/testing-dashboard-tab-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab.component.js +7 -7
- package/dist/Testing/components/testing-dashboard-tab.component.js.map +1 -1
- package/dist/Testing/components/testing-execution-resource.component.d.ts +20 -0
- package/dist/Testing/components/testing-execution-resource.component.d.ts.map +1 -0
- package/dist/Testing/components/testing-execution-resource.component.js +55 -0
- package/dist/Testing/components/testing-execution-resource.component.js.map +1 -0
- package/dist/Testing/components/testing-execution.component.d.ts +71 -0
- package/dist/Testing/components/testing-execution.component.d.ts.map +1 -0
- package/dist/Testing/components/testing-execution.component.js +845 -0
- package/dist/Testing/components/testing-execution.component.js.map +1 -0
- package/dist/Testing/components/testing-explorer-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer-resource.component.js +3 -3
- package/dist/Testing/components/testing-explorer-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer.component.js +42 -35
- package/dist/Testing/components/testing-explorer.component.js.map +1 -1
- package/dist/Testing/components/testing-feedback-resource.component.d.ts +20 -0
- package/dist/Testing/components/testing-feedback-resource.component.d.ts.map +1 -0
- package/dist/Testing/components/testing-feedback-resource.component.js +55 -0
- package/dist/Testing/components/testing-feedback-resource.component.js.map +1 -0
- package/dist/Testing/components/testing-feedback.component.d.ts +111 -0
- package/dist/Testing/components/testing-feedback.component.d.ts.map +1 -0
- package/dist/Testing/components/testing-feedback.component.js +1486 -0
- package/dist/Testing/components/testing-feedback.component.js.map +1 -0
- package/dist/Testing/components/testing-overview-resource.component.d.ts +20 -0
- package/dist/Testing/components/testing-overview-resource.component.d.ts.map +1 -0
- package/dist/Testing/components/testing-overview-resource.component.js +55 -0
- package/dist/Testing/components/testing-overview-resource.component.js.map +1 -0
- package/dist/Testing/components/testing-overview.component.d.ts +30 -0
- package/dist/Testing/components/testing-overview.component.d.ts.map +1 -0
- package/dist/Testing/components/testing-overview.component.js +361 -0
- package/dist/Testing/components/testing-overview.component.js.map +1 -0
- package/dist/Testing/components/testing-review-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-review-resource.component.js +3 -3
- package/dist/Testing/components/testing-review-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-review.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-review.component.js +16 -16
- package/dist/Testing/components/testing-review.component.js.map +1 -1
- package/dist/Testing/components/testing-runs-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-runs-resource.component.js +3 -3
- package/dist/Testing/components/testing-runs-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-runs.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-runs.component.js +15 -15
- package/dist/Testing/components/testing-runs.component.js.map +1 -1
- package/dist/Testing/components/testing-version-comparison.component.d.ts +62 -0
- package/dist/Testing/components/testing-version-comparison.component.d.ts.map +1 -0
- package/dist/Testing/components/testing-version-comparison.component.js +815 -0
- package/dist/Testing/components/testing-version-comparison.component.js.map +1 -0
- package/dist/Testing/components/testing-version-resource.component.d.ts +20 -0
- package/dist/Testing/components/testing-version-resource.component.d.ts.map +1 -0
- package/dist/Testing/components/testing-version-resource.component.js +55 -0
- package/dist/Testing/components/testing-version-resource.component.js.map +1 -0
- package/dist/Testing/components/widgets/oracle-breakdown-table.component.d.ts.map +1 -1
- package/dist/Testing/components/widgets/oracle-breakdown-table.component.js +73 -61
- package/dist/Testing/components/widgets/oracle-breakdown-table.component.js.map +1 -1
- package/dist/Testing/components/widgets/suite-tree.component.d.ts.map +1 -1
- package/dist/Testing/components/widgets/suite-tree.component.js +34 -31
- package/dist/Testing/components/widgets/suite-tree.component.js.map +1 -1
- package/dist/Testing/components/widgets/test-run-detail-panel.component.d.ts.map +1 -1
- package/dist/Testing/components/widgets/test-run-detail-panel.component.js +180 -171
- package/dist/Testing/components/widgets/test-run-detail-panel.component.js.map +1 -1
- package/dist/Testing/testing-dashboard.component.d.ts +0 -1
- package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
- package/dist/Testing/testing-dashboard.component.js +9 -8
- package/dist/Testing/testing-dashboard.component.js.map +1 -1
- package/dist/VersionHistory/components/diff-resource.component.d.ts +119 -0
- package/dist/VersionHistory/components/diff-resource.component.d.ts.map +1 -0
- package/dist/VersionHistory/components/diff-resource.component.js +1162 -0
- package/dist/VersionHistory/components/diff-resource.component.js.map +1 -0
- package/dist/VersionHistory/components/graph-resource.component.d.ts +67 -0
- package/dist/VersionHistory/components/graph-resource.component.d.ts.map +1 -0
- package/dist/VersionHistory/components/graph-resource.component.js +521 -0
- package/dist/VersionHistory/components/graph-resource.component.js.map +1 -0
- package/dist/VersionHistory/components/index.d.ts +5 -0
- package/dist/VersionHistory/components/index.d.ts.map +1 -0
- package/dist/VersionHistory/components/index.js +5 -0
- package/dist/VersionHistory/components/index.js.map +1 -0
- package/dist/VersionHistory/components/labels-resource.component.d.ts +89 -0
- package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -0
- package/dist/VersionHistory/components/labels-resource.component.js +968 -0
- package/dist/VersionHistory/components/labels-resource.component.js.map +1 -0
- package/dist/VersionHistory/components/restore-resource.component.d.ts +40 -0
- package/dist/VersionHistory/components/restore-resource.component.d.ts.map +1 -0
- package/dist/VersionHistory/components/restore-resource.component.js +472 -0
- package/dist/VersionHistory/components/restore-resource.component.js.map +1 -0
- package/dist/VersionHistory/index.d.ts +2 -0
- package/dist/VersionHistory/index.d.ts.map +1 -0
- package/dist/VersionHistory/index.js +2 -0
- package/dist/VersionHistory/index.js.map +1 -0
- package/dist/generic/base-dashboard.d.ts +65 -0
- package/dist/generic/base-dashboard.d.ts.map +1 -0
- package/dist/generic/base-dashboard.js +74 -0
- package/dist/generic/base-dashboard.js.map +1 -0
- package/dist/module.d.ts +42 -36
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +41 -7
- package/dist/module.js.map +1 -1
- package/dist/public-api.d.ts +20 -19
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +22 -120
- package/dist/public-api.js.map +1 -1
- package/dist/shared/pipes/highlight-search.pipe.d.ts.map +1 -1
- package/dist/shared/pipes/highlight-search.pipe.js +2 -1
- package/dist/shared/pipes/highlight-search.pipe.js.map +1 -1
- package/package.json +64 -62
|
@@ -4,29 +4,29 @@ import * as i0 from "@angular/core";
|
|
|
4
4
|
import * as i1 from "../services/scheduling-instrumentation.service";
|
|
5
5
|
import * as i2 from "@angular/common";
|
|
6
6
|
import * as i3 from "@memberjunction/ng-shared-generic";
|
|
7
|
-
function
|
|
8
|
-
i0.ɵɵelementStart(0, "div",
|
|
9
|
-
i0.ɵɵelement(1, "mj-loading",
|
|
7
|
+
function SchedulingOverviewComponent_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
8
|
+
i0.ɵɵelementStart(0, "div", 6);
|
|
9
|
+
i0.ɵɵelement(1, "mj-loading", 8);
|
|
10
10
|
i0.ɵɵelementEnd();
|
|
11
11
|
} }
|
|
12
|
-
function
|
|
13
|
-
i0.ɵɵelementStart(0, "div",
|
|
14
|
-
i0.ɵɵelement(1, "i",
|
|
12
|
+
function SchedulingOverviewComponent_Conditional_10_Conditional_65_Template(rf, ctx) { if (rf & 1) {
|
|
13
|
+
i0.ɵɵelementStart(0, "div", 42);
|
|
14
|
+
i0.ɵɵelement(1, "i", 53);
|
|
15
15
|
i0.ɵɵelementStart(2, "span");
|
|
16
16
|
i0.ɵɵtext(3, "No recent executions");
|
|
17
17
|
i0.ɵɵelementEnd()();
|
|
18
18
|
} }
|
|
19
|
-
function
|
|
20
|
-
i0.ɵɵelementStart(0, "div",
|
|
21
|
-
i0.ɵɵelement(2, "i",
|
|
19
|
+
function SchedulingOverviewComponent_Conditional_10_For_67_Template(rf, ctx) { if (rf & 1) {
|
|
20
|
+
i0.ɵɵelementStart(0, "div", 43)(1, "div", 54);
|
|
21
|
+
i0.ɵɵelement(2, "i", 55);
|
|
22
22
|
i0.ɵɵelementEnd();
|
|
23
|
-
i0.ɵɵelementStart(3, "div",
|
|
23
|
+
i0.ɵɵelementStart(3, "div", 56)(4, "div", 57);
|
|
24
24
|
i0.ɵɵtext(5);
|
|
25
25
|
i0.ɵɵelementEnd();
|
|
26
|
-
i0.ɵɵelementStart(6, "div",
|
|
26
|
+
i0.ɵɵelementStart(6, "div", 58);
|
|
27
27
|
i0.ɵɵtext(7);
|
|
28
28
|
i0.ɵɵelementEnd()();
|
|
29
|
-
i0.ɵɵelementStart(8, "div",
|
|
29
|
+
i0.ɵɵelementStart(8, "div", 59);
|
|
30
30
|
i0.ɵɵtext(9);
|
|
31
31
|
i0.ɵɵelementEnd()();
|
|
32
32
|
} if (rf & 2) {
|
|
@@ -38,14 +38,14 @@ function SchedulingOverviewComponent_div_10_div_66_Template(rf, ctx) { if (rf &
|
|
|
38
38
|
i0.ɵɵadvance(3);
|
|
39
39
|
i0.ɵɵtextInterpolate(exec_r1.jobName);
|
|
40
40
|
i0.ɵɵadvance(2);
|
|
41
|
-
i0.ɵɵtextInterpolate2("", ctx_r1.FormatTimeAgo(exec_r1.startedAt), " \u00B7 ", ctx_r1.FormatDuration(exec_r1.duration)
|
|
41
|
+
i0.ɵɵtextInterpolate2("", ctx_r1.FormatTimeAgo(exec_r1.startedAt), " \u00B7 ", ctx_r1.FormatDuration(exec_r1.duration));
|
|
42
42
|
i0.ɵɵadvance();
|
|
43
43
|
i0.ɵɵproperty("ngClass", ctx_r1.GetStatusClass(exec_r1.status));
|
|
44
44
|
i0.ɵɵadvance();
|
|
45
45
|
i0.ɵɵtextInterpolate1(" ", exec_r1.status, " ");
|
|
46
46
|
} }
|
|
47
|
-
function
|
|
48
|
-
i0.ɵɵelementStart(0, "span",
|
|
47
|
+
function SchedulingOverviewComponent_Conditional_10_Conditional_74_Template(rf, ctx) { if (rf & 1) {
|
|
48
|
+
i0.ɵɵelementStart(0, "span", 46);
|
|
49
49
|
i0.ɵɵtext(1);
|
|
50
50
|
i0.ɵɵelementEnd();
|
|
51
51
|
} if (rf & 2) {
|
|
@@ -53,35 +53,35 @@ function SchedulingOverviewComponent_div_10_span_73_Template(rf, ctx) { if (rf &
|
|
|
53
53
|
i0.ɵɵadvance();
|
|
54
54
|
i0.ɵɵtextInterpolate(ctx_r1.Alerts.length);
|
|
55
55
|
} }
|
|
56
|
-
function
|
|
57
|
-
i0.ɵɵelementStart(0, "span",
|
|
56
|
+
function SchedulingOverviewComponent_Conditional_10_Conditional_75_Template(rf, ctx) { if (rf & 1) {
|
|
57
|
+
i0.ɵɵelementStart(0, "span", 47);
|
|
58
58
|
i0.ɵɵtext(1, "0");
|
|
59
59
|
i0.ɵɵelementEnd();
|
|
60
60
|
} }
|
|
61
|
-
function
|
|
62
|
-
i0.ɵɵelementStart(0, "div",
|
|
63
|
-
i0.ɵɵelement(1, "i",
|
|
61
|
+
function SchedulingOverviewComponent_Conditional_10_Conditional_77_Template(rf, ctx) { if (rf & 1) {
|
|
62
|
+
i0.ɵɵelementStart(0, "div", 48);
|
|
63
|
+
i0.ɵɵelement(1, "i", 60);
|
|
64
64
|
i0.ɵɵelementStart(2, "span");
|
|
65
65
|
i0.ɵɵtext(3, "No active alerts");
|
|
66
66
|
i0.ɵɵelementEnd()();
|
|
67
67
|
} }
|
|
68
|
-
function
|
|
68
|
+
function SchedulingOverviewComponent_Conditional_10_For_79_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
69
69
|
const _r3 = i0.ɵɵgetCurrentView();
|
|
70
|
-
i0.ɵɵelementStart(0, "button",
|
|
71
|
-
i0.ɵɵlistener("click", function
|
|
70
|
+
i0.ɵɵelementStart(0, "button", 66);
|
|
71
|
+
i0.ɵɵlistener("click", function SchedulingOverviewComponent_Conditional_10_For_79_Conditional_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r3); const alert_r4 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.ReleaseLock(alert_r4.jobId)); });
|
|
72
72
|
i0.ɵɵtext(1, " Release ");
|
|
73
73
|
i0.ɵɵelementEnd();
|
|
74
74
|
} }
|
|
75
|
-
function
|
|
76
|
-
i0.ɵɵelementStart(0, "div",
|
|
77
|
-
i0.ɵɵelement(1, "i",
|
|
78
|
-
i0.ɵɵelementStart(2, "div",
|
|
75
|
+
function SchedulingOverviewComponent_Conditional_10_For_79_Template(rf, ctx) { if (rf & 1) {
|
|
76
|
+
i0.ɵɵelementStart(0, "div", 49);
|
|
77
|
+
i0.ɵɵelement(1, "i", 61);
|
|
78
|
+
i0.ɵɵelementStart(2, "div", 62)(3, "div", 63);
|
|
79
79
|
i0.ɵɵtext(4);
|
|
80
80
|
i0.ɵɵelementEnd();
|
|
81
|
-
i0.ɵɵelementStart(5, "div",
|
|
81
|
+
i0.ɵɵelementStart(5, "div", 64);
|
|
82
82
|
i0.ɵɵtext(6);
|
|
83
83
|
i0.ɵɵelementEnd()();
|
|
84
|
-
i0.ɵɵ
|
|
84
|
+
i0.ɵɵconditionalCreate(7, SchedulingOverviewComponent_Conditional_10_For_79_Conditional_7_Template, 2, 0, "button", 65);
|
|
85
85
|
i0.ɵɵelementEnd();
|
|
86
86
|
} if (rf & 2) {
|
|
87
87
|
const alert_r4 = ctx.$implicit;
|
|
@@ -94,25 +94,25 @@ function SchedulingOverviewComponent_div_10_div_77_Template(rf, ctx) { if (rf &
|
|
|
94
94
|
i0.ɵɵadvance(2);
|
|
95
95
|
i0.ɵɵtextInterpolate(alert_r4.message);
|
|
96
96
|
i0.ɵɵadvance();
|
|
97
|
-
i0.ɵɵ
|
|
97
|
+
i0.ɵɵconditional(alert_r4.type === "stale-lock" && alert_r4.jobId ? 7 : -1);
|
|
98
98
|
} }
|
|
99
|
-
function
|
|
100
|
-
i0.ɵɵelementStart(0, "div",
|
|
101
|
-
i0.ɵɵelement(1, "i",
|
|
99
|
+
function SchedulingOverviewComponent_Conditional_10_Conditional_88_Template(rf, ctx) { if (rf & 1) {
|
|
100
|
+
i0.ɵɵelementStart(0, "div", 42);
|
|
101
|
+
i0.ɵɵelement(1, "i", 67);
|
|
102
102
|
i0.ɵɵelementStart(2, "span");
|
|
103
103
|
i0.ɵɵtext(3, "No upcoming executions");
|
|
104
104
|
i0.ɵɵelementEnd()();
|
|
105
105
|
} }
|
|
106
|
-
function
|
|
107
|
-
i0.ɵɵelementStart(0, "div",
|
|
106
|
+
function SchedulingOverviewComponent_Conditional_10_For_90_Template(rf, ctx) { if (rf & 1) {
|
|
107
|
+
i0.ɵɵelementStart(0, "div", 51)(1, "div", 68)(2, "div", 69);
|
|
108
108
|
i0.ɵɵtext(3);
|
|
109
109
|
i0.ɵɵelementEnd();
|
|
110
|
-
i0.ɵɵelementStart(4, "div",
|
|
110
|
+
i0.ɵɵelementStart(4, "div", 70);
|
|
111
111
|
i0.ɵɵtext(5);
|
|
112
|
-
i0.ɵɵelementStart(6, "span",
|
|
112
|
+
i0.ɵɵelementStart(6, "span", 71);
|
|
113
113
|
i0.ɵɵtext(7);
|
|
114
114
|
i0.ɵɵelementEnd()()();
|
|
115
|
-
i0.ɵɵelementStart(8, "div",
|
|
115
|
+
i0.ɵɵelementStart(8, "div", 72);
|
|
116
116
|
i0.ɵɵtext(9);
|
|
117
117
|
i0.ɵɵelementEnd()();
|
|
118
118
|
} if (rf & 2) {
|
|
@@ -129,32 +129,32 @@ function SchedulingOverviewComponent_div_10_div_87_Template(rf, ctx) { if (rf &
|
|
|
129
129
|
i0.ɵɵadvance();
|
|
130
130
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.FormatTimeUntil(upcoming_r5.nextRunAt), " ");
|
|
131
131
|
} }
|
|
132
|
-
function
|
|
132
|
+
function SchedulingOverviewComponent_Conditional_10_Conditional_91_For_24_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
133
133
|
const _r6 = i0.ɵɵgetCurrentView();
|
|
134
|
-
i0.ɵɵelementStart(0, "button",
|
|
135
|
-
i0.ɵɵlistener("click", function
|
|
136
|
-
i0.ɵɵelement(1, "i",
|
|
134
|
+
i0.ɵɵelementStart(0, "button", 80);
|
|
135
|
+
i0.ɵɵlistener("click", function SchedulingOverviewComponent_Conditional_10_Conditional_91_For_24_Conditional_13_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r6); const lock_r7 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.ReleaseLock(lock_r7.jobId)); });
|
|
136
|
+
i0.ɵɵelement(1, "i", 81);
|
|
137
137
|
i0.ɵɵtext(2, " Release ");
|
|
138
138
|
i0.ɵɵelementEnd();
|
|
139
139
|
} }
|
|
140
|
-
function
|
|
141
|
-
i0.ɵɵelementStart(0, "tr")(1, "td",
|
|
140
|
+
function SchedulingOverviewComponent_Conditional_10_Conditional_91_For_24_Template(rf, ctx) { if (rf & 1) {
|
|
141
|
+
i0.ɵɵelementStart(0, "tr")(1, "td", 76);
|
|
142
142
|
i0.ɵɵtext(2);
|
|
143
143
|
i0.ɵɵelementEnd();
|
|
144
|
-
i0.ɵɵelementStart(3, "td",
|
|
144
|
+
i0.ɵɵelementStart(3, "td", 77);
|
|
145
145
|
i0.ɵɵtext(4);
|
|
146
146
|
i0.ɵɵelementEnd();
|
|
147
|
-
i0.ɵɵelementStart(5, "td",
|
|
147
|
+
i0.ɵɵelementStart(5, "td", 77);
|
|
148
148
|
i0.ɵɵtext(6);
|
|
149
149
|
i0.ɵɵelementEnd();
|
|
150
|
-
i0.ɵɵelementStart(7, "td",
|
|
150
|
+
i0.ɵɵelementStart(7, "td", 77);
|
|
151
151
|
i0.ɵɵtext(8);
|
|
152
152
|
i0.ɵɵelementEnd();
|
|
153
|
-
i0.ɵɵelementStart(9, "td")(10, "span",
|
|
153
|
+
i0.ɵɵelementStart(9, "td")(10, "span", 78);
|
|
154
154
|
i0.ɵɵtext(11);
|
|
155
155
|
i0.ɵɵelementEnd()();
|
|
156
156
|
i0.ɵɵelementStart(12, "td");
|
|
157
|
-
i0.ɵɵ
|
|
157
|
+
i0.ɵɵconditionalCreate(13, SchedulingOverviewComponent_Conditional_10_Conditional_91_For_24_Conditional_13_Template, 3, 0, "button", 79);
|
|
158
158
|
i0.ɵɵelementEnd()();
|
|
159
159
|
} if (rf & 2) {
|
|
160
160
|
const lock_r7 = ctx.$implicit;
|
|
@@ -173,17 +173,17 @@ function SchedulingOverviewComponent_div_10_div_88_tr_23_Template(rf, ctx) { if
|
|
|
173
173
|
i0.ɵɵadvance();
|
|
174
174
|
i0.ɵɵtextInterpolate1(" ", lock_r7.isStale ? "Stale" : "Active", " ");
|
|
175
175
|
i0.ɵɵadvance(2);
|
|
176
|
-
i0.ɵɵ
|
|
176
|
+
i0.ɵɵconditional(lock_r7.isStale ? 13 : -1);
|
|
177
177
|
} }
|
|
178
|
-
function
|
|
179
|
-
i0.ɵɵelementStart(0, "div",
|
|
180
|
-
i0.ɵɵelement(3, "i",
|
|
178
|
+
function SchedulingOverviewComponent_Conditional_10_Conditional_91_Template(rf, ctx) { if (rf & 1) {
|
|
179
|
+
i0.ɵɵelementStart(0, "div", 52)(1, "div", 37)(2, "div", 38);
|
|
180
|
+
i0.ɵɵelement(3, "i", 73);
|
|
181
181
|
i0.ɵɵtext(4, " Active Locks ");
|
|
182
182
|
i0.ɵɵelementEnd();
|
|
183
|
-
i0.ɵɵelementStart(5, "span",
|
|
183
|
+
i0.ɵɵelementStart(5, "span", 40);
|
|
184
184
|
i0.ɵɵtext(6);
|
|
185
185
|
i0.ɵɵelementEnd()();
|
|
186
|
-
i0.ɵɵelementStart(7, "div",
|
|
186
|
+
i0.ɵɵelementStart(7, "div", 41)(8, "table", 74)(9, "thead")(10, "tr")(11, "th");
|
|
187
187
|
i0.ɵɵtext(12, "Job");
|
|
188
188
|
i0.ɵɵelementEnd();
|
|
189
189
|
i0.ɵɵelementStart(13, "th");
|
|
@@ -201,109 +201,113 @@ function SchedulingOverviewComponent_div_10_div_88_Template(rf, ctx) { if (rf &
|
|
|
201
201
|
i0.ɵɵelement(21, "th");
|
|
202
202
|
i0.ɵɵelementEnd()();
|
|
203
203
|
i0.ɵɵelementStart(22, "tbody");
|
|
204
|
-
i0.ɵɵ
|
|
204
|
+
i0.ɵɵrepeaterCreate(23, SchedulingOverviewComponent_Conditional_10_Conditional_91_For_24_Template, 14, 10, "tr", 75, i0.ɵɵrepeaterTrackByIdentity);
|
|
205
205
|
i0.ɵɵelementEnd()()()();
|
|
206
206
|
} if (rf & 2) {
|
|
207
207
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
208
208
|
i0.ɵɵadvance(6);
|
|
209
209
|
i0.ɵɵtextInterpolate(ctx_r1.Locks.length);
|
|
210
210
|
i0.ɵɵadvance(17);
|
|
211
|
-
i0.ɵɵ
|
|
211
|
+
i0.ɵɵrepeater(ctx_r1.Locks);
|
|
212
212
|
} }
|
|
213
|
-
function
|
|
214
|
-
i0.ɵɵelementStart(0, "div",
|
|
213
|
+
function SchedulingOverviewComponent_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
214
|
+
i0.ɵɵelementStart(0, "div", 7)(1, "div", 9)(2, "div", 10);
|
|
215
215
|
i0.ɵɵnamespaceSVG();
|
|
216
|
-
i0.ɵɵelementStart(3, "svg",
|
|
217
|
-
i0.ɵɵelement(4, "circle",
|
|
216
|
+
i0.ɵɵelementStart(3, "svg", 11);
|
|
217
|
+
i0.ɵɵelement(4, "circle", 12)(5, "circle", 13);
|
|
218
218
|
i0.ɵɵelementEnd();
|
|
219
219
|
i0.ɵɵnamespaceHTML();
|
|
220
|
-
i0.ɵɵelementStart(6, "div",
|
|
220
|
+
i0.ɵɵelementStart(6, "div", 14);
|
|
221
221
|
i0.ɵɵtext(7);
|
|
222
222
|
i0.ɵɵelementEnd()();
|
|
223
|
-
i0.ɵɵelementStart(8, "div",
|
|
223
|
+
i0.ɵɵelementStart(8, "div", 15)(9, "div", 16);
|
|
224
224
|
i0.ɵɵtext(10, "System Health");
|
|
225
225
|
i0.ɵɵelementEnd();
|
|
226
|
-
i0.ɵɵelementStart(11, "div",
|
|
227
|
-
i0.ɵɵelement(13, "i",
|
|
226
|
+
i0.ɵɵelementStart(11, "div", 17)(12, "span");
|
|
227
|
+
i0.ɵɵelement(13, "i", 18);
|
|
228
228
|
i0.ɵɵtext(14);
|
|
229
229
|
i0.ɵɵelementEnd();
|
|
230
230
|
i0.ɵɵelementStart(15, "span");
|
|
231
|
-
i0.ɵɵelement(16, "i",
|
|
231
|
+
i0.ɵɵelement(16, "i", 19);
|
|
232
232
|
i0.ɵɵtext(17);
|
|
233
233
|
i0.ɵɵelementEnd();
|
|
234
234
|
i0.ɵɵelementStart(18, "span");
|
|
235
|
-
i0.ɵɵelement(19, "i",
|
|
235
|
+
i0.ɵɵelement(19, "i", 20);
|
|
236
236
|
i0.ɵɵtext(20);
|
|
237
237
|
i0.ɵɵelementEnd()()()();
|
|
238
|
-
i0.ɵɵelementStart(21, "div",
|
|
239
|
-
i0.ɵɵelement(24, "i",
|
|
238
|
+
i0.ɵɵelementStart(21, "div", 21)(22, "div", 22)(23, "div", 23);
|
|
239
|
+
i0.ɵɵelement(24, "i", 24);
|
|
240
240
|
i0.ɵɵelementEnd();
|
|
241
|
-
i0.ɵɵelementStart(25, "div",
|
|
241
|
+
i0.ɵɵelementStart(25, "div", 25)(26, "div", 26);
|
|
242
242
|
i0.ɵɵtext(27);
|
|
243
243
|
i0.ɵɵelementEnd();
|
|
244
|
-
i0.ɵɵelementStart(28, "div",
|
|
244
|
+
i0.ɵɵelementStart(28, "div", 27);
|
|
245
245
|
i0.ɵɵtext(29, "Active Jobs");
|
|
246
246
|
i0.ɵɵelementEnd()()();
|
|
247
|
-
i0.ɵɵelementStart(30, "div",
|
|
248
|
-
i0.ɵɵelement(32, "i",
|
|
247
|
+
i0.ɵɵelementStart(30, "div", 22)(31, "div", 28);
|
|
248
|
+
i0.ɵɵelement(32, "i", 29);
|
|
249
249
|
i0.ɵɵelementEnd();
|
|
250
|
-
i0.ɵɵelementStart(33, "div",
|
|
250
|
+
i0.ɵɵelementStart(33, "div", 25)(34, "div", 26);
|
|
251
251
|
i0.ɵɵtext(35);
|
|
252
252
|
i0.ɵɵelementEnd();
|
|
253
|
-
i0.ɵɵelementStart(36, "div",
|
|
253
|
+
i0.ɵɵelementStart(36, "div", 27);
|
|
254
254
|
i0.ɵɵtext(37, "Due Next Hour");
|
|
255
255
|
i0.ɵɵelementEnd()()();
|
|
256
|
-
i0.ɵɵelementStart(38, "div",
|
|
257
|
-
i0.ɵɵelement(40, "i",
|
|
256
|
+
i0.ɵɵelementStart(38, "div", 22)(39, "div", 30);
|
|
257
|
+
i0.ɵɵelement(40, "i", 31);
|
|
258
258
|
i0.ɵɵelementEnd();
|
|
259
|
-
i0.ɵɵelementStart(41, "div",
|
|
259
|
+
i0.ɵɵelementStart(41, "div", 25)(42, "div", 26);
|
|
260
260
|
i0.ɵɵtext(43);
|
|
261
261
|
i0.ɵɵelementEnd();
|
|
262
|
-
i0.ɵɵelementStart(44, "div",
|
|
262
|
+
i0.ɵɵelementStart(44, "div", 27);
|
|
263
263
|
i0.ɵɵtext(45, "Runs (24h)");
|
|
264
264
|
i0.ɵɵelementEnd();
|
|
265
|
-
i0.ɵɵelementStart(46, "div",
|
|
265
|
+
i0.ɵɵelementStart(46, "div", 32);
|
|
266
266
|
i0.ɵɵtext(47);
|
|
267
267
|
i0.ɵɵelementEnd()()();
|
|
268
|
-
i0.ɵɵelementStart(48, "div",
|
|
269
|
-
i0.ɵɵelement(50, "i",
|
|
268
|
+
i0.ɵɵelementStart(48, "div", 22)(49, "div", 33);
|
|
269
|
+
i0.ɵɵelement(50, "i", 34);
|
|
270
270
|
i0.ɵɵelementEnd();
|
|
271
|
-
i0.ɵɵelementStart(51, "div",
|
|
271
|
+
i0.ɵɵelementStart(51, "div", 25)(52, "div", 26);
|
|
272
272
|
i0.ɵɵtext(53);
|
|
273
273
|
i0.ɵɵelementEnd();
|
|
274
|
-
i0.ɵɵelementStart(54, "div",
|
|
274
|
+
i0.ɵɵelementStart(54, "div", 27);
|
|
275
275
|
i0.ɵɵtext(55, "Running Now");
|
|
276
276
|
i0.ɵɵelementEnd()()()();
|
|
277
|
-
i0.ɵɵelementStart(56, "div",
|
|
278
|
-
i0.ɵɵelement(60, "i",
|
|
277
|
+
i0.ɵɵelementStart(56, "div", 35)(57, "div", 36)(58, "div", 37)(59, "div", 38);
|
|
278
|
+
i0.ɵɵelement(60, "i", 39);
|
|
279
279
|
i0.ɵɵtext(61, " Live Executions ");
|
|
280
280
|
i0.ɵɵelementEnd();
|
|
281
|
-
i0.ɵɵelementStart(62, "span",
|
|
281
|
+
i0.ɵɵelementStart(62, "span", 40);
|
|
282
282
|
i0.ɵɵtext(63);
|
|
283
283
|
i0.ɵɵelementEnd()();
|
|
284
|
-
i0.ɵɵelementStart(64, "div",
|
|
285
|
-
i0.ɵɵ
|
|
284
|
+
i0.ɵɵelementStart(64, "div", 41);
|
|
285
|
+
i0.ɵɵconditionalCreate(65, SchedulingOverviewComponent_Conditional_10_Conditional_65_Template, 4, 0, "div", 42);
|
|
286
|
+
i0.ɵɵrepeaterCreate(66, SchedulingOverviewComponent_Conditional_10_For_67_Template, 10, 8, "div", 43, i0.ɵɵrepeaterTrackByIdentity);
|
|
286
287
|
i0.ɵɵelementEnd()();
|
|
287
|
-
i0.ɵɵelementStart(
|
|
288
|
-
i0.ɵɵelement(
|
|
289
|
-
i0.ɵɵtext(
|
|
288
|
+
i0.ɵɵelementStart(68, "div", 44)(69, "div", 36)(70, "div", 45)(71, "div", 38);
|
|
289
|
+
i0.ɵɵelement(72, "i");
|
|
290
|
+
i0.ɵɵtext(73);
|
|
290
291
|
i0.ɵɵelementEnd();
|
|
291
|
-
i0.ɵɵ
|
|
292
|
+
i0.ɵɵconditionalCreate(74, SchedulingOverviewComponent_Conditional_10_Conditional_74_Template, 2, 1, "span", 46);
|
|
293
|
+
i0.ɵɵconditionalCreate(75, SchedulingOverviewComponent_Conditional_10_Conditional_75_Template, 2, 0, "span", 47);
|
|
292
294
|
i0.ɵɵelementEnd();
|
|
293
|
-
i0.ɵɵelementStart(
|
|
294
|
-
i0.ɵɵ
|
|
295
|
+
i0.ɵɵelementStart(76, "div", 41);
|
|
296
|
+
i0.ɵɵconditionalCreate(77, SchedulingOverviewComponent_Conditional_10_Conditional_77_Template, 4, 0, "div", 48);
|
|
297
|
+
i0.ɵɵrepeaterCreate(78, SchedulingOverviewComponent_Conditional_10_For_79_Template, 8, 6, "div", 49, i0.ɵɵrepeaterTrackByIdentity);
|
|
295
298
|
i0.ɵɵelementEnd()();
|
|
296
|
-
i0.ɵɵelementStart(
|
|
297
|
-
i0.ɵɵelement(
|
|
298
|
-
i0.ɵɵtext(
|
|
299
|
+
i0.ɵɵelementStart(80, "div", 36)(81, "div", 37)(82, "div", 38);
|
|
300
|
+
i0.ɵɵelement(83, "i", 50);
|
|
301
|
+
i0.ɵɵtext(84, " Upcoming (24h) ");
|
|
299
302
|
i0.ɵɵelementEnd();
|
|
300
|
-
i0.ɵɵelementStart(
|
|
301
|
-
i0.ɵɵtext(
|
|
303
|
+
i0.ɵɵelementStart(85, "span", 40);
|
|
304
|
+
i0.ɵɵtext(86);
|
|
302
305
|
i0.ɵɵelementEnd()();
|
|
303
|
-
i0.ɵɵelementStart(
|
|
304
|
-
i0.ɵɵ
|
|
306
|
+
i0.ɵɵelementStart(87, "div", 41);
|
|
307
|
+
i0.ɵɵconditionalCreate(88, SchedulingOverviewComponent_Conditional_10_Conditional_88_Template, 4, 0, "div", 42);
|
|
308
|
+
i0.ɵɵrepeaterCreate(89, SchedulingOverviewComponent_Conditional_10_For_90_Template, 10, 6, "div", 51, i0.ɵɵrepeaterTrackByIdentity);
|
|
305
309
|
i0.ɵɵelementEnd()()()();
|
|
306
|
-
i0.ɵɵ
|
|
310
|
+
i0.ɵɵconditionalCreate(91, SchedulingOverviewComponent_Conditional_10_Conditional_91_Template, 25, 1, "div", 52);
|
|
307
311
|
i0.ɵɵelementEnd();
|
|
308
312
|
} if (rf & 2) {
|
|
309
313
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
@@ -336,31 +340,31 @@ function SchedulingOverviewComponent_div_10_Template(rf, ctx) { if (rf & 1) {
|
|
|
336
340
|
i0.ɵɵadvance(10);
|
|
337
341
|
i0.ɵɵtextInterpolate(ctx_r1.LiveExecutions.length);
|
|
338
342
|
i0.ɵɵadvance(2);
|
|
339
|
-
i0.ɵɵ
|
|
343
|
+
i0.ɵɵconditional(ctx_r1.LiveExecutions.length === 0 ? 65 : -1);
|
|
340
344
|
i0.ɵɵadvance();
|
|
341
|
-
i0.ɵɵ
|
|
342
|
-
i0.ɵɵadvance(
|
|
345
|
+
i0.ɵɵrepeater(ctx_r1.LiveExecutions);
|
|
346
|
+
i0.ɵɵadvance(4);
|
|
343
347
|
i0.ɵɵproperty("ngClass", ctx_r1.Alerts.length > 0 ? "alert-header" : "clear-header");
|
|
344
348
|
i0.ɵɵadvance(2);
|
|
345
349
|
i0.ɵɵclassMap(ctx_r1.Alerts.length > 0 ? "fa-solid fa-triangle-exclamation" : "fa-solid fa-shield-check");
|
|
346
350
|
i0.ɵɵadvance();
|
|
347
351
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.Alerts.length > 0 ? "Alerts" : "All Clear", " ");
|
|
348
352
|
i0.ɵɵadvance();
|
|
349
|
-
i0.ɵɵ
|
|
353
|
+
i0.ɵɵconditional(ctx_r1.Alerts.length > 0 ? 74 : -1);
|
|
350
354
|
i0.ɵɵadvance();
|
|
351
|
-
i0.ɵɵ
|
|
355
|
+
i0.ɵɵconditional(ctx_r1.Alerts.length === 0 ? 75 : -1);
|
|
352
356
|
i0.ɵɵadvance(2);
|
|
353
|
-
i0.ɵɵ
|
|
357
|
+
i0.ɵɵconditional(ctx_r1.Alerts.length === 0 ? 77 : -1);
|
|
354
358
|
i0.ɵɵadvance();
|
|
355
|
-
i0.ɵɵ
|
|
356
|
-
i0.ɵɵadvance(
|
|
359
|
+
i0.ɵɵrepeater(ctx_r1.Alerts);
|
|
360
|
+
i0.ɵɵadvance(8);
|
|
357
361
|
i0.ɵɵtextInterpolate(ctx_r1.UpcomingExecutions.length);
|
|
358
362
|
i0.ɵɵadvance(2);
|
|
359
|
-
i0.ɵɵ
|
|
363
|
+
i0.ɵɵconditional(ctx_r1.UpcomingExecutions.length === 0 ? 88 : -1);
|
|
360
364
|
i0.ɵɵadvance();
|
|
361
|
-
i0.ɵɵ
|
|
362
|
-
i0.ɵɵadvance();
|
|
363
|
-
i0.ɵɵ
|
|
365
|
+
i0.ɵɵrepeater(ctx_r1.UpcomingExecutions);
|
|
366
|
+
i0.ɵɵadvance(2);
|
|
367
|
+
i0.ɵɵconditional(ctx_r1.Locks.length > 0 ? 91 : -1);
|
|
364
368
|
} }
|
|
365
369
|
export class SchedulingOverviewComponent {
|
|
366
370
|
schedulingService;
|
|
@@ -559,7 +563,7 @@ export class SchedulingOverviewComponent {
|
|
|
559
563
|
});
|
|
560
564
|
}
|
|
561
565
|
static ɵfac = function SchedulingOverviewComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SchedulingOverviewComponent)(i0.ɵɵdirectiveInject(i1.SchedulingInstrumentationService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
|
|
562
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SchedulingOverviewComponent, selectors: [["app-scheduling-overview"]], inputs: { initialState: "initialState" }, outputs: { stateChange: "stateChange" }, decls: 11, vars: 5, consts: [[1, "overview-container"], [1, "overview-header"], [1, "header-controls"], [1, "control-btn", 3, "click"], [1, "fa-solid", "fa-arrows-rotate"], [1, "fa-solid", "fa-rotate"], [
|
|
566
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SchedulingOverviewComponent, selectors: [["app-scheduling-overview"]], inputs: { initialState: "initialState" }, outputs: { stateChange: "stateChange" }, standalone: false, decls: 11, vars: 5, consts: [[1, "overview-container"], [1, "overview-header"], [1, "header-controls"], [1, "control-btn", 3, "click"], [1, "fa-solid", "fa-arrows-rotate"], [1, "fa-solid", "fa-rotate"], [1, "loading-container"], [1, "overview-content"], ["text", "Loading dashboard...", "size", "medium"], [1, "health-banner"], [1, "health-ring"], ["viewBox", "0 0 80 80", 1, "health-svg"], ["cx", "40", "cy", "40", "r", "36", "fill", "none", "stroke", "#e5e7eb", "stroke-width", "6"], ["cx", "40", "cy", "40", "r", "36", "fill", "none", "stroke-width", "6", "stroke-linecap", "round", "transform", "rotate(-90 40 40)"], [1, "health-score"], [1, "health-details"], [1, "health-title"], [1, "health-stats"], [1, "fa-solid", "fa-check-circle", 2, "color", "#10b981"], [1, "fa-solid", "fa-lock", 2, "color", "#f59e0b"], [1, "fa-solid", "fa-xmark-circle", 2, "color", "#ef4444"], [1, "kpi-grid"], [1, "kpi-card"], [1, "kpi-icon", "blue"], [1, "fa-solid", "fa-calendar-check"], [1, "kpi-content"], [1, "kpi-value"], [1, "kpi-label"], [1, "kpi-icon", "amber"], [1, "fa-solid", "fa-clock"], [1, "kpi-icon", "purple"], [1, "fa-solid", "fa-chart-bar"], [1, "kpi-sub"], [1, "kpi-icon", "green"], [1, "fa-solid", "fa-play"], [1, "panels-grid"], [1, "panel"], [1, "panel-header"], [1, "panel-title"], [1, "fa-solid", "fa-bolt"], [1, "panel-badge"], [1, "panel-body"], [1, "empty-state-small"], [1, "execution-item"], [1, "right-column"], [1, "panel-header", 3, "ngClass"], [1, "panel-badge", "error"], [1, "panel-badge", "clear"], [1, "empty-state-small", "all-clear"], [1, "alert-item", 3, "ngClass"], [1, "fa-solid", "fa-calendar-day"], [1, "upcoming-item"], [1, "panel", 2, "margin-top", "20px"], [1, "fa-solid", "fa-inbox"], [1, "exec-status"], [3, "ngClass"], [1, "exec-details"], [1, "exec-name"], [1, "exec-meta"], [1, "exec-status-badge", 3, "ngClass"], [1, "fa-solid", "fa-circle-check"], [1, "alert-icon"], [1, "alert-content"], [1, "alert-title"], [1, "alert-message"], [1, "alert-action-btn"], [1, "alert-action-btn", 3, "click"], [1, "fa-solid", "fa-calendar-xmark"], [1, "upcoming-info"], [1, "upcoming-name"], [1, "upcoming-meta"], [1, "upcoming-type"], [1, "upcoming-countdown"], [1, "fa-solid", "fa-lock"], [1, "data-table"], [3, "stale-row"], [1, "cell-name"], [1, "cell-meta"], [1, "lock-status-badge"], [1, "release-btn"], [1, "release-btn", 3, "click"], [1, "fa-solid", "fa-lock-open"]], template: function SchedulingOverviewComponent_Template(rf, ctx) { if (rf & 1) {
|
|
563
567
|
i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2)(3, "button", 3);
|
|
564
568
|
i0.ɵɵlistener("click", function SchedulingOverviewComponent_Template_button_click_3_listener() { return ctx.Refresh(); });
|
|
565
569
|
i0.ɵɵelement(4, "i", 4);
|
|
@@ -570,7 +574,8 @@ export class SchedulingOverviewComponent {
|
|
|
570
574
|
i0.ɵɵelement(7, "i", 5);
|
|
571
575
|
i0.ɵɵtext(8);
|
|
572
576
|
i0.ɵɵelementEnd()()();
|
|
573
|
-
i0.ɵɵ
|
|
577
|
+
i0.ɵɵconditionalCreate(9, SchedulingOverviewComponent_Conditional_9_Template, 2, 0, "div", 6);
|
|
578
|
+
i0.ɵɵconditionalCreate(10, SchedulingOverviewComponent_Conditional_10_Template, 92, 29, "div", 7);
|
|
574
579
|
i0.ɵɵelementEnd();
|
|
575
580
|
} if (rf & 2) {
|
|
576
581
|
i0.ɵɵadvance(6);
|
|
@@ -578,18 +583,18 @@ export class SchedulingOverviewComponent {
|
|
|
578
583
|
i0.ɵɵadvance(2);
|
|
579
584
|
i0.ɵɵtextInterpolate1(" Auto-Refresh: ", ctx.AutoRefreshEnabled ? "ON" : "OFF", " ");
|
|
580
585
|
i0.ɵɵadvance();
|
|
581
|
-
i0.ɵɵ
|
|
586
|
+
i0.ɵɵconditional(ctx.IsLoading ? 9 : -1);
|
|
582
587
|
i0.ɵɵadvance();
|
|
583
|
-
i0.ɵɵ
|
|
584
|
-
} }, dependencies: [i2.NgClass, i2.NgForOf, i2.NgIf, i3.LoadingComponent], styles: [".overview-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 20px;\n height: 100%;\n}\n\n.overview-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 20px;\n flex: 1;\n min-height: 0;\n}\n\n\n\n.overview-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n}\n\n.header-controls[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n.control-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n background: white;\n border: 1px solid #e5e7eb;\n border-radius: 20px;\n cursor: pointer;\n font-size: 0.8rem;\n font-weight: 500;\n color: #475569;\n transition: all 0.2s ease;\n}\n\n.control-btn[_ngcontent-%COMP%]:hover {\n background: #f3f4f6;\n border-color: #999;\n}\n\n.control-btn.active[_ngcontent-%COMP%] {\n background: #0076b6;\n color: white;\n border-color: #0076b6;\n}\n\n.loading-container[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 300px;\n}\n\n\n\n.health-banner[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 24px;\n padding: 20px 24px;\n background: white;\n border-radius: 16px;\n border: 1px solid #e2e8f0;\n border-left: 4px solid #10b981;\n box-shadow: 0 1px 3px rgba(0,0,0,0.05);\n}\n\n.health-ring[_ngcontent-%COMP%] {\n position: relative;\n width: 80px;\n height: 80px;\n flex-shrink: 0;\n}\n\n.health-svg[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n}\n\n.health-score[_ngcontent-%COMP%] {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n font-size: 1.5rem;\n font-weight: 800;\n}\n\n.health-details[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.health-title[_ngcontent-%COMP%] {\n font-size: 1.1rem;\n font-weight: 700;\n color: #0f172a;\n margin-bottom: 8px;\n}\n\n.health-stats[_ngcontent-%COMP%] {\n display: flex;\n gap: 20px;\n font-size: 0.85rem;\n color: #64748b;\n}\n\n.health-stats[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n\n\n.kpi-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 16px;\n}\n\n.kpi-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n padding: 20px;\n background: white;\n border-radius: 16px;\n border: 1px solid #e2e8f0;\n box-shadow: 0 1px 3px rgba(0,0,0,0.05);\n transition: all 0.2s ease;\n}\n\n.kpi-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: 0 8px 25px -5px rgba(0,0,0,0.1);\n}\n\n.kpi-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 1.2rem;\n flex-shrink: 0;\n}\n\n.kpi-icon.blue[_ngcontent-%COMP%] { background: linear-gradient(135deg, #3b82f6, #2563eb); color: white; }\n.kpi-icon.amber[_ngcontent-%COMP%] { background: linear-gradient(135deg, #f59e0b, #d97706); color: white; }\n.kpi-icon.purple[_ngcontent-%COMP%] { background: linear-gradient(135deg, #8b5cf6, #7c3aed); color: white; }\n.kpi-icon.green[_ngcontent-%COMP%] { background: linear-gradient(135deg, #10b981, #059669); color: white; }\n\n.kpi-content[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.kpi-value[_ngcontent-%COMP%] {\n font-size: 1.75rem;\n font-weight: 800;\n color: #0f172a;\n line-height: 1;\n}\n\n.kpi-label[_ngcontent-%COMP%] {\n font-size: 0.8rem;\n font-weight: 500;\n color: #64748b;\n margin-top: 4px;\n}\n\n.kpi-sub[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n font-weight: 600;\n margin-top: 2px;\n}\n\n\n\n.panels-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 20px;\n flex: 1;\n min-height: 300px;\n}\n\n.right-column[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n\n.panel[_ngcontent-%COMP%] {\n background: white;\n border-radius: 16px;\n border: 1px solid #e2e8f0;\n box-shadow: 0 1px 3px rgba(0,0,0,0.05);\n overflow: hidden;\n display: flex;\n flex-direction: column;\n}\n\n.panel-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 20px;\n background: #f9fafb;\n border-bottom: 1px solid #e5e7eb;\n}\n\n.panel-header.alert-header[_ngcontent-%COMP%] {\n background: #fef2f2;\n border-bottom-color: #fecaca;\n}\n\n.panel-header.clear-header[_ngcontent-%COMP%] {\n background: #f0fdf4;\n border-bottom-color: #bbf7d0;\n}\n\n.clear-header[_ngcontent-%COMP%] .panel-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #10b981;\n}\n\n.panel-badge.clear[_ngcontent-%COMP%] {\n background: rgba(16, 185, 129, 0.1);\n color: #10b981;\n}\n\n.all-clear[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #10b981 !important;\n}\n\n.all-clear[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n color: #10b981;\n font-weight: 500;\n}\n\n.panel-title[_ngcontent-%COMP%] {\n font-size: 0.95rem;\n font-weight: 700;\n color: #0f172a;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.panel-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #0076b6;\n}\n\n.alert-header[_ngcontent-%COMP%] .panel-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #ef4444;\n}\n\n.panel-badge[_ngcontent-%COMP%] {\n font-size: 0.7rem;\n font-weight: 700;\n padding: 2px 10px;\n border-radius: 12px;\n background: rgba(0, 118, 182, 0.1);\n color: #0076b6;\n}\n\n.panel-badge.error[_ngcontent-%COMP%] {\n background: rgba(239, 68, 68, 0.1);\n color: #ef4444;\n}\n\n.panel-body[_ngcontent-%COMP%] {\n padding: 12px 20px;\n overflow-y: auto;\n flex: 1;\n min-height: 0;\n}\n\n\n\n.execution-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 0;\n border-bottom: 1px solid #f1f5f9;\n}\n\n.execution-item[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.exec-status[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.1rem;\n}\n\n.exec-details[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.exec-name[_ngcontent-%COMP%] {\n font-weight: 600;\n color: #0f172a;\n font-size: 0.875rem;\n}\n\n.exec-meta[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n color: #94a3b8;\n margin-top: 2px;\n}\n\n.exec-status-badge[_ngcontent-%COMP%] {\n font-size: 0.7rem;\n font-weight: 600;\n padding: 3px 10px;\n border-radius: 12px;\n}\n\n\n\n.status-running[_ngcontent-%COMP%] { color: #3b82f6; }\n.status-success[_ngcontent-%COMP%] { color: #10b981; }\n.status-error[_ngcontent-%COMP%] { color: #ef4444; }\n.status-warning[_ngcontent-%COMP%] { color: #f59e0b; }\n\n.exec-status-badge.status-running[_ngcontent-%COMP%] { background: #dbeafe; color: #1d4ed8; }\n.exec-status-badge.status-success[_ngcontent-%COMP%] { background: #dcfce7; color: #166534; }\n.exec-status-badge.status-error[_ngcontent-%COMP%] { background: #fee2e2; color: #991b1b; }\n.exec-status-badge.status-warning[_ngcontent-%COMP%] { background: #fef3c7; color: #92400e; }\n\n\n\n.alert-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n padding: 12px;\n border-radius: 10px;\n margin-bottom: 8px;\n}\n\n.alert-item[_ngcontent-%COMP%]:last-child {\n margin-bottom: 0;\n}\n\n.alert-item.alert-error[_ngcontent-%COMP%] {\n background: #fef2f2;\n}\n\n.alert-item.alert-warning[_ngcontent-%COMP%] {\n background: #fffbeb;\n}\n\n.alert-icon[_ngcontent-%COMP%] {\n font-size: 1rem;\n margin-top: 2px;\n}\n\n.alert-error[_ngcontent-%COMP%] .alert-icon[_ngcontent-%COMP%] { color: #ef4444; }\n.alert-warning[_ngcontent-%COMP%] .alert-icon[_ngcontent-%COMP%] { color: #f59e0b; }\n\n.alert-content[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.alert-title[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 0.85rem;\n color: #0f172a;\n}\n\n.alert-message[_ngcontent-%COMP%] {\n font-size: 0.8rem;\n color: #64748b;\n margin-top: 2px;\n}\n\n.alert-action-btn[_ngcontent-%COMP%] {\n padding: 4px 12px;\n font-size: 0.75rem;\n font-weight: 600;\n background: #ef4444;\n color: white;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n white-space: nowrap;\n transition: background 0.2s;\n}\n\n.alert-action-btn[_ngcontent-%COMP%]:hover {\n background: #dc2626;\n}\n\n\n\n.upcoming-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 0;\n border-bottom: 1px solid #f1f5f9;\n}\n\n.upcoming-item[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.upcoming-name[_ngcontent-%COMP%] {\n font-weight: 600;\n color: #0f172a;\n font-size: 0.875rem;\n}\n\n.upcoming-meta[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n color: #94a3b8;\n margin-top: 2px;\n}\n\n.upcoming-type[_ngcontent-%COMP%] {\n display: inline-flex;\n padding: 1px 6px;\n background: #f1f5f9;\n border-radius: 4px;\n font-size: 0.65rem;\n font-weight: 600;\n color: #64748b;\n margin-left: 6px;\n}\n\n.upcoming-countdown[_ngcontent-%COMP%] {\n font-size: 0.85rem;\n font-weight: 700;\n color: #0076b6;\n}\n\n.upcoming-countdown.soon[_ngcontent-%COMP%] {\n color: #f59e0b;\n}\n\n\n\n.empty-state-small[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n padding: 32px 16px;\n color: #94a3b8;\n}\n\n.empty-state-small[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 2rem;\n color: #cbd5e1;\n}\n\n.empty-state-small[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 0.85rem;\n}\n\n\n\n.data-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n}\n\n.data-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n text-align: left;\n font-size: 0.7rem;\n font-weight: 700;\n color: #94a3b8;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n padding: 8px 12px;\n border-bottom: 1px solid #e5e7eb;\n}\n\n.data-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 10px 12px;\n font-size: 0.85rem;\n border-bottom: 1px solid #f1f5f9;\n}\n\n.cell-name[_ngcontent-%COMP%] {\n font-weight: 600;\n color: #0f172a;\n}\n\n.cell-meta[_ngcontent-%COMP%] {\n color: #64748b;\n}\n\n.stale-row[_ngcontent-%COMP%] {\n background: #fef2f2;\n}\n\n.lock-status-badge[_ngcontent-%COMP%] {\n font-size: 0.7rem;\n font-weight: 600;\n padding: 3px 10px;\n border-radius: 12px;\n background: #dcfce7;\n color: #166534;\n}\n\n.lock-status-badge.stale[_ngcontent-%COMP%] {\n background: #fee2e2;\n color: #991b1b;\n}\n\n.release-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 10px;\n font-size: 0.75rem;\n font-weight: 600;\n background: transparent;\n color: #ef4444;\n border: 1px solid #fecaca;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.release-btn[_ngcontent-%COMP%]:hover {\n background: #ef4444;\n color: white;\n border-color: #ef4444;\n}\n\n\n\n@media (max-width: 1024px) {\n .panels-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n .kpi-grid[_ngcontent-%COMP%] {\n grid-template-columns: repeat(2, 1fr);\n }\n}\n\n@media (max-width: 768px) {\n .kpi-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n .health-banner[_ngcontent-%COMP%] {\n flex-direction: column;\n text-align: center;\n }\n .health-stats[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 8px;\n align-items: center;\n }\n .data-table[_ngcontent-%COMP%] {\n font-size: 0.8rem;\n }\n}"], changeDetection: 0 });
|
|
588
|
+
i0.ɵɵconditional(!ctx.IsLoading && ctx.Kpis ? 10 : -1);
|
|
589
|
+
} }, dependencies: [i2.NgClass, i3.LoadingComponent], styles: [".overview-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 20px;\n height: 100%;\n}\n\n.overview-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 20px;\n flex: 1;\n min-height: 0;\n}\n\n\n\n.overview-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n}\n\n.header-controls[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n.control-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n background: white;\n border: 1px solid #e5e7eb;\n border-radius: 20px;\n cursor: pointer;\n font-size: 0.8rem;\n font-weight: 500;\n color: #475569;\n transition: all 0.2s ease;\n}\n\n.control-btn[_ngcontent-%COMP%]:hover {\n background: #f3f4f6;\n border-color: #999;\n}\n\n.control-btn.active[_ngcontent-%COMP%] {\n background: #0076b6;\n color: white;\n border-color: #0076b6;\n}\n\n.loading-container[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 300px;\n}\n\n\n\n.health-banner[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 24px;\n padding: 20px 24px;\n background: white;\n border-radius: 16px;\n border: 1px solid #e2e8f0;\n border-left: 4px solid #10b981;\n box-shadow: 0 1px 3px rgba(0,0,0,0.05);\n}\n\n.health-ring[_ngcontent-%COMP%] {\n position: relative;\n width: 80px;\n height: 80px;\n flex-shrink: 0;\n}\n\n.health-svg[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n}\n\n.health-score[_ngcontent-%COMP%] {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n font-size: 1.5rem;\n font-weight: 800;\n}\n\n.health-details[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.health-title[_ngcontent-%COMP%] {\n font-size: 1.1rem;\n font-weight: 700;\n color: #0f172a;\n margin-bottom: 8px;\n}\n\n.health-stats[_ngcontent-%COMP%] {\n display: flex;\n gap: 20px;\n font-size: 0.85rem;\n color: #64748b;\n}\n\n.health-stats[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n\n\n.kpi-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 16px;\n}\n\n.kpi-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n padding: 20px;\n background: white;\n border-radius: 16px;\n border: 1px solid #e2e8f0;\n box-shadow: 0 1px 3px rgba(0,0,0,0.05);\n transition: all 0.2s ease;\n}\n\n.kpi-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: 0 8px 25px -5px rgba(0,0,0,0.1);\n}\n\n.kpi-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 1.2rem;\n flex-shrink: 0;\n}\n\n.kpi-icon.blue[_ngcontent-%COMP%] { background: linear-gradient(135deg, #3b82f6, #2563eb); color: white; }\n.kpi-icon.amber[_ngcontent-%COMP%] { background: linear-gradient(135deg, #f59e0b, #d97706); color: white; }\n.kpi-icon.purple[_ngcontent-%COMP%] { background: linear-gradient(135deg, #8b5cf6, #7c3aed); color: white; }\n.kpi-icon.green[_ngcontent-%COMP%] { background: linear-gradient(135deg, #10b981, #059669); color: white; }\n\n.kpi-content[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.kpi-value[_ngcontent-%COMP%] {\n font-size: 1.75rem;\n font-weight: 800;\n color: #0f172a;\n line-height: 1;\n}\n\n.kpi-label[_ngcontent-%COMP%] {\n font-size: 0.8rem;\n font-weight: 500;\n color: #64748b;\n margin-top: 4px;\n}\n\n.kpi-sub[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n font-weight: 600;\n margin-top: 2px;\n}\n\n\n\n.panels-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 20px;\n flex: 1;\n min-height: 300px;\n}\n\n.right-column[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n\n.panel[_ngcontent-%COMP%] {\n background: white;\n border-radius: 16px;\n border: 1px solid #e2e8f0;\n box-shadow: 0 1px 3px rgba(0,0,0,0.05);\n overflow: hidden;\n display: flex;\n flex-direction: column;\n}\n\n.panel-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 20px;\n background: #f9fafb;\n border-bottom: 1px solid #e5e7eb;\n}\n\n.panel-header.alert-header[_ngcontent-%COMP%] {\n background: #fef2f2;\n border-bottom-color: #fecaca;\n}\n\n.panel-header.clear-header[_ngcontent-%COMP%] {\n background: #f0fdf4;\n border-bottom-color: #bbf7d0;\n}\n\n.clear-header[_ngcontent-%COMP%] .panel-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #10b981;\n}\n\n.panel-badge.clear[_ngcontent-%COMP%] {\n background: rgba(16, 185, 129, 0.1);\n color: #10b981;\n}\n\n.all-clear[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #10b981 !important;\n}\n\n.all-clear[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n color: #10b981;\n font-weight: 500;\n}\n\n.panel-title[_ngcontent-%COMP%] {\n font-size: 0.95rem;\n font-weight: 700;\n color: #0f172a;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.panel-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #0076b6;\n}\n\n.alert-header[_ngcontent-%COMP%] .panel-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #ef4444;\n}\n\n.panel-badge[_ngcontent-%COMP%] {\n font-size: 0.7rem;\n font-weight: 700;\n padding: 2px 10px;\n border-radius: 12px;\n background: rgba(0, 118, 182, 0.1);\n color: #0076b6;\n}\n\n.panel-badge.error[_ngcontent-%COMP%] {\n background: rgba(239, 68, 68, 0.1);\n color: #ef4444;\n}\n\n.panel-body[_ngcontent-%COMP%] {\n padding: 12px 20px;\n overflow-y: auto;\n flex: 1;\n min-height: 0;\n}\n\n\n\n.execution-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 0;\n border-bottom: 1px solid #f1f5f9;\n}\n\n.execution-item[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.exec-status[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.1rem;\n}\n\n.exec-details[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.exec-name[_ngcontent-%COMP%] {\n font-weight: 600;\n color: #0f172a;\n font-size: 0.875rem;\n}\n\n.exec-meta[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n color: #94a3b8;\n margin-top: 2px;\n}\n\n.exec-status-badge[_ngcontent-%COMP%] {\n font-size: 0.7rem;\n font-weight: 600;\n padding: 3px 10px;\n border-radius: 12px;\n}\n\n\n\n.status-running[_ngcontent-%COMP%] { color: #3b82f6; }\n.status-success[_ngcontent-%COMP%] { color: #10b981; }\n.status-error[_ngcontent-%COMP%] { color: #ef4444; }\n.status-warning[_ngcontent-%COMP%] { color: #f59e0b; }\n\n.exec-status-badge.status-running[_ngcontent-%COMP%] { background: #dbeafe; color: #1d4ed8; }\n.exec-status-badge.status-success[_ngcontent-%COMP%] { background: #dcfce7; color: #166534; }\n.exec-status-badge.status-error[_ngcontent-%COMP%] { background: #fee2e2; color: #991b1b; }\n.exec-status-badge.status-warning[_ngcontent-%COMP%] { background: #fef3c7; color: #92400e; }\n\n\n\n.alert-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n padding: 12px;\n border-radius: 10px;\n margin-bottom: 8px;\n}\n\n.alert-item[_ngcontent-%COMP%]:last-child {\n margin-bottom: 0;\n}\n\n.alert-item.alert-error[_ngcontent-%COMP%] {\n background: #fef2f2;\n}\n\n.alert-item.alert-warning[_ngcontent-%COMP%] {\n background: #fffbeb;\n}\n\n.alert-icon[_ngcontent-%COMP%] {\n font-size: 1rem;\n margin-top: 2px;\n}\n\n.alert-error[_ngcontent-%COMP%] .alert-icon[_ngcontent-%COMP%] { color: #ef4444; }\n.alert-warning[_ngcontent-%COMP%] .alert-icon[_ngcontent-%COMP%] { color: #f59e0b; }\n\n.alert-content[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.alert-title[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 0.85rem;\n color: #0f172a;\n}\n\n.alert-message[_ngcontent-%COMP%] {\n font-size: 0.8rem;\n color: #64748b;\n margin-top: 2px;\n}\n\n.alert-action-btn[_ngcontent-%COMP%] {\n padding: 4px 12px;\n font-size: 0.75rem;\n font-weight: 600;\n background: #ef4444;\n color: white;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n white-space: nowrap;\n transition: background 0.2s;\n}\n\n.alert-action-btn[_ngcontent-%COMP%]:hover {\n background: #dc2626;\n}\n\n\n\n.upcoming-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 0;\n border-bottom: 1px solid #f1f5f9;\n}\n\n.upcoming-item[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.upcoming-name[_ngcontent-%COMP%] {\n font-weight: 600;\n color: #0f172a;\n font-size: 0.875rem;\n}\n\n.upcoming-meta[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n color: #94a3b8;\n margin-top: 2px;\n}\n\n.upcoming-type[_ngcontent-%COMP%] {\n display: inline-flex;\n padding: 1px 6px;\n background: #f1f5f9;\n border-radius: 4px;\n font-size: 0.65rem;\n font-weight: 600;\n color: #64748b;\n margin-left: 6px;\n}\n\n.upcoming-countdown[_ngcontent-%COMP%] {\n font-size: 0.85rem;\n font-weight: 700;\n color: #0076b6;\n}\n\n.upcoming-countdown.soon[_ngcontent-%COMP%] {\n color: #f59e0b;\n}\n\n\n\n.empty-state-small[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n padding: 32px 16px;\n color: #94a3b8;\n}\n\n.empty-state-small[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 2rem;\n color: #cbd5e1;\n}\n\n.empty-state-small[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 0.85rem;\n}\n\n\n\n.data-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n}\n\n.data-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n text-align: left;\n font-size: 0.7rem;\n font-weight: 700;\n color: #94a3b8;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n padding: 8px 12px;\n border-bottom: 1px solid #e5e7eb;\n}\n\n.data-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 10px 12px;\n font-size: 0.85rem;\n border-bottom: 1px solid #f1f5f9;\n}\n\n.cell-name[_ngcontent-%COMP%] {\n font-weight: 600;\n color: #0f172a;\n}\n\n.cell-meta[_ngcontent-%COMP%] {\n color: #64748b;\n}\n\n.stale-row[_ngcontent-%COMP%] {\n background: #fef2f2;\n}\n\n.lock-status-badge[_ngcontent-%COMP%] {\n font-size: 0.7rem;\n font-weight: 600;\n padding: 3px 10px;\n border-radius: 12px;\n background: #dcfce7;\n color: #166534;\n}\n\n.lock-status-badge.stale[_ngcontent-%COMP%] {\n background: #fee2e2;\n color: #991b1b;\n}\n\n.release-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 10px;\n font-size: 0.75rem;\n font-weight: 600;\n background: transparent;\n color: #ef4444;\n border: 1px solid #fecaca;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.release-btn[_ngcontent-%COMP%]:hover {\n background: #ef4444;\n color: white;\n border-color: #ef4444;\n}\n\n\n\n@media (max-width: 1024px) {\n .panels-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n .kpi-grid[_ngcontent-%COMP%] {\n grid-template-columns: repeat(2, 1fr);\n }\n}\n\n@media (max-width: 768px) {\n .kpi-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n .health-banner[_ngcontent-%COMP%] {\n flex-direction: column;\n text-align: center;\n }\n .health-stats[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 8px;\n align-items: center;\n }\n .data-table[_ngcontent-%COMP%] {\n font-size: 0.8rem;\n }\n}"], changeDetection: 0 });
|
|
585
590
|
}
|
|
586
591
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SchedulingOverviewComponent, [{
|
|
587
592
|
type: Component,
|
|
588
|
-
args: [{ selector: 'app-scheduling-overview', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"overview-container\">\n <!-- Header Controls -->\n <div class=\"overview-header\">\n <div class=\"header-controls\">\n <button class=\"control-btn\" (click)=\"Refresh()\">\n <i class=\"fa-solid fa-arrows-rotate\"></i> Refresh\n </button>\n <button class=\"control-btn\" [class.active]=\"AutoRefreshEnabled\" (click)=\"ToggleAutoRefresh()\">\n <i class=\"fa-solid fa-rotate\"></i>\n Auto-Refresh: {{AutoRefreshEnabled ? 'ON' : 'OFF'}}\n </button>\n </div>\n </div>\n\n <div *ngIf=\"IsLoading\" class=\"loading-container\">\n <mj-loading text=\"Loading dashboard...\" size=\"medium\"></mj-loading>\n </div>\n\n <div *ngIf=\"!IsLoading && Kpis\" class=\"overview-content\">\n <!-- Health Banner -->\n <div class=\"health-banner\" [style.border-color]=\"GetHealthColor()\">\n <div class=\"health-ring\">\n <svg viewBox=\"0 0 80 80\" class=\"health-svg\">\n <circle cx=\"40\" cy=\"40\" r=\"36\" fill=\"none\" stroke=\"#e5e7eb\" stroke-width=\"6\"/>\n <circle cx=\"40\" cy=\"40\" r=\"36\" fill=\"none\"\n [attr.stroke]=\"GetHealthColor()\"\n stroke-width=\"6\"\n stroke-linecap=\"round\"\n [attr.stroke-dasharray]=\"GetHealthStrokeDasharray()\"\n transform=\"rotate(-90 40 40)\"/>\n </svg>\n <div class=\"health-score\" [style.color]=\"GetHealthColor()\">{{GetHealthScore()}}</div>\n </div>\n <div class=\"health-details\">\n <div class=\"health-title\">System Health</div>\n <div class=\"health-stats\">\n <span><i class=\"fa-solid fa-check-circle\" style=\"color:#10b981\"></i> {{Kpis.totalActiveJobs}} active</span>\n <span><i class=\"fa-solid fa-lock\" style=\"color:#f59e0b\"></i> {{Kpis.lockedJobs}} locked</span>\n <span><i class=\"fa-solid fa-xmark-circle\" style=\"color:#ef4444\"></i> {{Kpis.totalFailures7d}} failures (7d)</span>\n </div>\n </div>\n </div>\n\n <!-- KPI Cards -->\n <div class=\"kpi-grid\">\n <div class=\"kpi-card\">\n <div class=\"kpi-icon blue\">\n <i class=\"fa-solid fa-calendar-check\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{Kpis.totalActiveJobs}}</div>\n <div class=\"kpi-label\">Active Jobs</div>\n </div>\n </div>\n\n <div class=\"kpi-card\">\n <div class=\"kpi-icon amber\">\n <i class=\"fa-solid fa-clock\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{Kpis.jobsDueInNextHour}}</div>\n <div class=\"kpi-label\">Due Next Hour</div>\n </div>\n </div>\n\n <div class=\"kpi-card\">\n <div class=\"kpi-icon purple\">\n <i class=\"fa-solid fa-chart-bar\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{Kpis.recentExecutions24h}}</div>\n <div class=\"kpi-label\">Runs (24h)</div>\n <div class=\"kpi-sub\" [style.color]=\"GetSuccessRateColor(Kpis.successRate24h)\">\n {{FormatPercentage(Kpis.successRate24h)}} success\n </div>\n </div>\n </div>\n\n <div class=\"kpi-card\">\n <div class=\"kpi-icon green\">\n <i class=\"fa-solid fa-play\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{Kpis.currentlyRunning}}</div>\n <div class=\"kpi-label\">Running Now</div>\n </div>\n </div>\n </div>\n\n <!-- Two-Column Layout: Live Executions + Alerts/Upcoming -->\n <div class=\"panels-grid\">\n <!-- Live Executions -->\n <div class=\"panel\">\n <div class=\"panel-header\">\n <div class=\"panel-title\">\n <i class=\"fa-solid fa-bolt\"></i> Live Executions\n </div>\n <span class=\"panel-badge\">{{LiveExecutions.length}}</span>\n </div>\n <div class=\"panel-body\">\n <div *ngIf=\"LiveExecutions.length === 0\" class=\"empty-state-small\">\n <i class=\"fa-solid fa-inbox\"></i>\n <span>No recent executions</span>\n </div>\n <div *ngFor=\"let exec of LiveExecutions\" class=\"execution-item\">\n <div class=\"exec-status\">\n <i [class]=\"GetStatusIcon(exec.status)\" [ngClass]=\"GetStatusClass(exec.status)\"></i>\n </div>\n <div class=\"exec-details\">\n <div class=\"exec-name\">{{exec.jobName}}</div>\n <div class=\"exec-meta\">{{FormatTimeAgo(exec.startedAt)}} · {{FormatDuration(exec.duration)}}</div>\n </div>\n <div class=\"exec-status-badge\" [ngClass]=\"GetStatusClass(exec.status)\">\n {{exec.status}}\n </div>\n </div>\n </div>\n </div>\n\n <!-- Right Column: Alerts + Upcoming -->\n <div class=\"right-column\">\n <!-- Alerts -->\n <div class=\"panel\">\n <div class=\"panel-header\" [ngClass]=\"Alerts.length > 0 ? 'alert-header' : 'clear-header'\">\n <div class=\"panel-title\">\n <i [class]=\"Alerts.length > 0 ? 'fa-solid fa-triangle-exclamation' : 'fa-solid fa-shield-check'\"></i>\n {{Alerts.length > 0 ? 'Alerts' : 'All Clear'}}\n </div>\n <span *ngIf=\"Alerts.length > 0\" class=\"panel-badge error\">{{Alerts.length}}</span>\n <span *ngIf=\"Alerts.length === 0\" class=\"panel-badge clear\">0</span>\n </div>\n <div class=\"panel-body\">\n <div *ngIf=\"Alerts.length === 0\" class=\"empty-state-small all-clear\">\n <i class=\"fa-solid fa-circle-check\"></i>\n <span>No active alerts</span>\n </div>\n <div *ngFor=\"let alert of Alerts\" class=\"alert-item\" [ngClass]=\"'alert-' + alert.severity\">\n <i [class]=\"GetAlertIcon(alert.severity)\" class=\"alert-icon\"></i>\n <div class=\"alert-content\">\n <div class=\"alert-title\">{{alert.title}}</div>\n <div class=\"alert-message\">{{alert.message}}</div>\n </div>\n <button *ngIf=\"alert.type === 'stale-lock' && alert.jobId\"\n class=\"alert-action-btn\"\n (click)=\"ReleaseLock(alert.jobId!)\">\n Release\n </button>\n </div>\n </div>\n </div>\n\n <!-- Upcoming -->\n <div class=\"panel\">\n <div class=\"panel-header\">\n <div class=\"panel-title\">\n <i class=\"fa-solid fa-calendar-day\"></i> Upcoming (24h)\n </div>\n <span class=\"panel-badge\">{{UpcomingExecutions.length}}</span>\n </div>\n <div class=\"panel-body\">\n <div *ngIf=\"UpcomingExecutions.length === 0\" class=\"empty-state-small\">\n <i class=\"fa-solid fa-calendar-xmark\"></i>\n <span>No upcoming executions</span>\n </div>\n <div *ngFor=\"let upcoming of UpcomingExecutions\" class=\"upcoming-item\">\n <div class=\"upcoming-info\">\n <div class=\"upcoming-name\">{{upcoming.jobName}}</div>\n <div class=\"upcoming-meta\">\n {{FormatDateTime(upcoming.nextRunAt)}}\n <span class=\"upcoming-type\">{{upcoming.jobType}}</span>\n </div>\n </div>\n <div class=\"upcoming-countdown\" [class.soon]=\"FormatTimeUntil(upcoming.nextRunAt).includes('m') && !FormatTimeUntil(upcoming.nextRunAt).includes('h')\">\n {{FormatTimeUntil(upcoming.nextRunAt)}}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Locks Section -->\n <div class=\"panel\" *ngIf=\"Locks.length > 0\" style=\"margin-top: 20px;\">\n <div class=\"panel-header\">\n <div class=\"panel-title\">\n <i class=\"fa-solid fa-lock\"></i> Active Locks\n </div>\n <span class=\"panel-badge\">{{Locks.length}}</span>\n </div>\n <div class=\"panel-body\">\n <table class=\"data-table\">\n <thead>\n <tr>\n <th>Job</th>\n <th>Locked By</th>\n <th>Locked At</th>\n <th>Expected Completion</th>\n <th>Status</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let lock of Locks\" [class.stale-row]=\"lock.isStale\">\n <td class=\"cell-name\">{{lock.jobName}}</td>\n <td class=\"cell-meta\">{{lock.lockedBy}}</td>\n <td class=\"cell-meta\">{{FormatTimeAgo(lock.lockedAt)}}</td>\n <td class=\"cell-meta\">{{FormatDateTime(lock.expectedCompletion)}}</td>\n <td>\n <span class=\"lock-status-badge\" [class.stale]=\"lock.isStale\">\n {{lock.isStale ? 'Stale' : 'Active'}}\n </span>\n </td>\n <td>\n <button *ngIf=\"lock.isStale\" class=\"release-btn\" (click)=\"ReleaseLock(lock.jobId)\">\n <i class=\"fa-solid fa-lock-open\"></i> Release\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n</div>\n", styles: [".overview-container {\n display: flex;\n flex-direction: column;\n gap: 20px;\n height: 100%;\n}\n\n.overview-content {\n display: flex;\n flex-direction: column;\n gap: 20px;\n flex: 1;\n min-height: 0;\n}\n\n/* \u2500\u2500 Header \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.overview-header {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n}\n\n.header-controls {\n display: flex;\n gap: 8px;\n}\n\n.control-btn {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n background: white;\n border: 1px solid #e5e7eb;\n border-radius: 20px;\n cursor: pointer;\n font-size: 0.8rem;\n font-weight: 500;\n color: #475569;\n transition: all 0.2s ease;\n}\n\n.control-btn:hover {\n background: #f3f4f6;\n border-color: #999;\n}\n\n.control-btn.active {\n background: #0076b6;\n color: white;\n border-color: #0076b6;\n}\n\n.loading-container {\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 300px;\n}\n\n/* \u2500\u2500 Health Banner \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.health-banner {\n display: flex;\n align-items: center;\n gap: 24px;\n padding: 20px 24px;\n background: white;\n border-radius: 16px;\n border: 1px solid #e2e8f0;\n border-left: 4px solid #10b981;\n box-shadow: 0 1px 3px rgba(0,0,0,0.05);\n}\n\n.health-ring {\n position: relative;\n width: 80px;\n height: 80px;\n flex-shrink: 0;\n}\n\n.health-svg {\n width: 100%;\n height: 100%;\n}\n\n.health-score {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n font-size: 1.5rem;\n font-weight: 800;\n}\n\n.health-details {\n flex: 1;\n}\n\n.health-title {\n font-size: 1.1rem;\n font-weight: 700;\n color: #0f172a;\n margin-bottom: 8px;\n}\n\n.health-stats {\n display: flex;\n gap: 20px;\n font-size: 0.85rem;\n color: #64748b;\n}\n\n.health-stats span {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n/* \u2500\u2500 KPI Cards \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.kpi-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 16px;\n}\n\n.kpi-card {\n display: flex;\n align-items: center;\n gap: 16px;\n padding: 20px;\n background: white;\n border-radius: 16px;\n border: 1px solid #e2e8f0;\n box-shadow: 0 1px 3px rgba(0,0,0,0.05);\n transition: all 0.2s ease;\n}\n\n.kpi-card:hover {\n transform: translateY(-2px);\n box-shadow: 0 8px 25px -5px rgba(0,0,0,0.1);\n}\n\n.kpi-icon {\n width: 48px;\n height: 48px;\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 1.2rem;\n flex-shrink: 0;\n}\n\n.kpi-icon.blue { background: linear-gradient(135deg, #3b82f6, #2563eb); color: white; }\n.kpi-icon.amber { background: linear-gradient(135deg, #f59e0b, #d97706); color: white; }\n.kpi-icon.purple { background: linear-gradient(135deg, #8b5cf6, #7c3aed); color: white; }\n.kpi-icon.green { background: linear-gradient(135deg, #10b981, #059669); color: white; }\n\n.kpi-content {\n flex: 1;\n}\n\n.kpi-value {\n font-size: 1.75rem;\n font-weight: 800;\n color: #0f172a;\n line-height: 1;\n}\n\n.kpi-label {\n font-size: 0.8rem;\n font-weight: 500;\n color: #64748b;\n margin-top: 4px;\n}\n\n.kpi-sub {\n font-size: 0.75rem;\n font-weight: 600;\n margin-top: 2px;\n}\n\n/* \u2500\u2500 Panels \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.panels-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 20px;\n flex: 1;\n min-height: 300px;\n}\n\n.right-column {\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n\n.panel {\n background: white;\n border-radius: 16px;\n border: 1px solid #e2e8f0;\n box-shadow: 0 1px 3px rgba(0,0,0,0.05);\n overflow: hidden;\n display: flex;\n flex-direction: column;\n}\n\n.panel-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 20px;\n background: #f9fafb;\n border-bottom: 1px solid #e5e7eb;\n}\n\n.panel-header.alert-header {\n background: #fef2f2;\n border-bottom-color: #fecaca;\n}\n\n.panel-header.clear-header {\n background: #f0fdf4;\n border-bottom-color: #bbf7d0;\n}\n\n.clear-header .panel-title i {\n color: #10b981;\n}\n\n.panel-badge.clear {\n background: rgba(16, 185, 129, 0.1);\n color: #10b981;\n}\n\n.all-clear i {\n color: #10b981 !important;\n}\n\n.all-clear span {\n color: #10b981;\n font-weight: 500;\n}\n\n.panel-title {\n font-size: 0.95rem;\n font-weight: 700;\n color: #0f172a;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.panel-title i {\n color: #0076b6;\n}\n\n.alert-header .panel-title i {\n color: #ef4444;\n}\n\n.panel-badge {\n font-size: 0.7rem;\n font-weight: 700;\n padding: 2px 10px;\n border-radius: 12px;\n background: rgba(0, 118, 182, 0.1);\n color: #0076b6;\n}\n\n.panel-badge.error {\n background: rgba(239, 68, 68, 0.1);\n color: #ef4444;\n}\n\n.panel-body {\n padding: 12px 20px;\n overflow-y: auto;\n flex: 1;\n min-height: 0;\n}\n\n/* \u2500\u2500 Execution Items \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.execution-item {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 0;\n border-bottom: 1px solid #f1f5f9;\n}\n\n.execution-item:last-child {\n border-bottom: none;\n}\n\n.exec-status i {\n font-size: 1.1rem;\n}\n\n.exec-details {\n flex: 1;\n}\n\n.exec-name {\n font-weight: 600;\n color: #0f172a;\n font-size: 0.875rem;\n}\n\n.exec-meta {\n font-size: 0.75rem;\n color: #94a3b8;\n margin-top: 2px;\n}\n\n.exec-status-badge {\n font-size: 0.7rem;\n font-weight: 600;\n padding: 3px 10px;\n border-radius: 12px;\n}\n\n/* Status Colors */\n.status-running { color: #3b82f6; }\n.status-success { color: #10b981; }\n.status-error { color: #ef4444; }\n.status-warning { color: #f59e0b; }\n\n.exec-status-badge.status-running { background: #dbeafe; color: #1d4ed8; }\n.exec-status-badge.status-success { background: #dcfce7; color: #166534; }\n.exec-status-badge.status-error { background: #fee2e2; color: #991b1b; }\n.exec-status-badge.status-warning { background: #fef3c7; color: #92400e; }\n\n/* \u2500\u2500 Alert Items \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.alert-item {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n padding: 12px;\n border-radius: 10px;\n margin-bottom: 8px;\n}\n\n.alert-item:last-child {\n margin-bottom: 0;\n}\n\n.alert-item.alert-error {\n background: #fef2f2;\n}\n\n.alert-item.alert-warning {\n background: #fffbeb;\n}\n\n.alert-icon {\n font-size: 1rem;\n margin-top: 2px;\n}\n\n.alert-error .alert-icon { color: #ef4444; }\n.alert-warning .alert-icon { color: #f59e0b; }\n\n.alert-content {\n flex: 1;\n}\n\n.alert-title {\n font-weight: 600;\n font-size: 0.85rem;\n color: #0f172a;\n}\n\n.alert-message {\n font-size: 0.8rem;\n color: #64748b;\n margin-top: 2px;\n}\n\n.alert-action-btn {\n padding: 4px 12px;\n font-size: 0.75rem;\n font-weight: 600;\n background: #ef4444;\n color: white;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n white-space: nowrap;\n transition: background 0.2s;\n}\n\n.alert-action-btn:hover {\n background: #dc2626;\n}\n\n/* \u2500\u2500 Upcoming Items \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.upcoming-item {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 0;\n border-bottom: 1px solid #f1f5f9;\n}\n\n.upcoming-item:last-child {\n border-bottom: none;\n}\n\n.upcoming-name {\n font-weight: 600;\n color: #0f172a;\n font-size: 0.875rem;\n}\n\n.upcoming-meta {\n font-size: 0.75rem;\n color: #94a3b8;\n margin-top: 2px;\n}\n\n.upcoming-type {\n display: inline-flex;\n padding: 1px 6px;\n background: #f1f5f9;\n border-radius: 4px;\n font-size: 0.65rem;\n font-weight: 600;\n color: #64748b;\n margin-left: 6px;\n}\n\n.upcoming-countdown {\n font-size: 0.85rem;\n font-weight: 700;\n color: #0076b6;\n}\n\n.upcoming-countdown.soon {\n color: #f59e0b;\n}\n\n/* \u2500\u2500 Empty State \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.empty-state-small {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n padding: 32px 16px;\n color: #94a3b8;\n}\n\n.empty-state-small i {\n font-size: 2rem;\n color: #cbd5e1;\n}\n\n.empty-state-small span {\n font-size: 0.85rem;\n}\n\n/* \u2500\u2500 Data Table \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.data-table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.data-table th {\n text-align: left;\n font-size: 0.7rem;\n font-weight: 700;\n color: #94a3b8;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n padding: 8px 12px;\n border-bottom: 1px solid #e5e7eb;\n}\n\n.data-table td {\n padding: 10px 12px;\n font-size: 0.85rem;\n border-bottom: 1px solid #f1f5f9;\n}\n\n.cell-name {\n font-weight: 600;\n color: #0f172a;\n}\n\n.cell-meta {\n color: #64748b;\n}\n\n.stale-row {\n background: #fef2f2;\n}\n\n.lock-status-badge {\n font-size: 0.7rem;\n font-weight: 600;\n padding: 3px 10px;\n border-radius: 12px;\n background: #dcfce7;\n color: #166534;\n}\n\n.lock-status-badge.stale {\n background: #fee2e2;\n color: #991b1b;\n}\n\n.release-btn {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 10px;\n font-size: 0.75rem;\n font-weight: 600;\n background: transparent;\n color: #ef4444;\n border: 1px solid #fecaca;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.release-btn:hover {\n background: #ef4444;\n color: white;\n border-color: #ef4444;\n}\n\n/* \u2500\u2500 Responsive \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@media (max-width: 1024px) {\n .panels-grid {\n grid-template-columns: 1fr;\n }\n .kpi-grid {\n grid-template-columns: repeat(2, 1fr);\n }\n}\n\n@media (max-width: 768px) {\n .kpi-grid {\n grid-template-columns: 1fr;\n }\n .health-banner {\n flex-direction: column;\n text-align: center;\n }\n .health-stats {\n flex-direction: column;\n gap: 8px;\n align-items: center;\n }\n .data-table {\n font-size: 0.8rem;\n }\n}\n"] }]
|
|
593
|
+
args: [{ standalone: false, selector: 'app-scheduling-overview', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"overview-container\">\n <!-- Header Controls -->\n <div class=\"overview-header\">\n <div class=\"header-controls\">\n <button class=\"control-btn\" (click)=\"Refresh()\">\n <i class=\"fa-solid fa-arrows-rotate\"></i> Refresh\n </button>\n <button class=\"control-btn\" [class.active]=\"AutoRefreshEnabled\" (click)=\"ToggleAutoRefresh()\">\n <i class=\"fa-solid fa-rotate\"></i>\n Auto-Refresh: {{AutoRefreshEnabled ? 'ON' : 'OFF'}}\n </button>\n </div>\n </div>\n\n @if (IsLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading dashboard...\" size=\"medium\"></mj-loading>\n </div>\n }\n\n @if (!IsLoading && Kpis) {\n <div class=\"overview-content\">\n <!-- Health Banner -->\n <div class=\"health-banner\" [style.border-color]=\"GetHealthColor()\">\n <div class=\"health-ring\">\n <svg viewBox=\"0 0 80 80\" class=\"health-svg\">\n <circle cx=\"40\" cy=\"40\" r=\"36\" fill=\"none\" stroke=\"#e5e7eb\" stroke-width=\"6\"/>\n <circle cx=\"40\" cy=\"40\" r=\"36\" fill=\"none\"\n [attr.stroke]=\"GetHealthColor()\"\n stroke-width=\"6\"\n stroke-linecap=\"round\"\n [attr.stroke-dasharray]=\"GetHealthStrokeDasharray()\"\n transform=\"rotate(-90 40 40)\"/>\n </svg>\n <div class=\"health-score\" [style.color]=\"GetHealthColor()\">{{GetHealthScore()}}</div>\n </div>\n <div class=\"health-details\">\n <div class=\"health-title\">System Health</div>\n <div class=\"health-stats\">\n <span><i class=\"fa-solid fa-check-circle\" style=\"color:#10b981\"></i> {{Kpis.totalActiveJobs}} active</span>\n <span><i class=\"fa-solid fa-lock\" style=\"color:#f59e0b\"></i> {{Kpis.lockedJobs}} locked</span>\n <span><i class=\"fa-solid fa-xmark-circle\" style=\"color:#ef4444\"></i> {{Kpis.totalFailures7d}} failures (7d)</span>\n </div>\n </div>\n </div>\n <!-- KPI Cards -->\n <div class=\"kpi-grid\">\n <div class=\"kpi-card\">\n <div class=\"kpi-icon blue\">\n <i class=\"fa-solid fa-calendar-check\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{Kpis.totalActiveJobs}}</div>\n <div class=\"kpi-label\">Active Jobs</div>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon amber\">\n <i class=\"fa-solid fa-clock\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{Kpis.jobsDueInNextHour}}</div>\n <div class=\"kpi-label\">Due Next Hour</div>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon purple\">\n <i class=\"fa-solid fa-chart-bar\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{Kpis.recentExecutions24h}}</div>\n <div class=\"kpi-label\">Runs (24h)</div>\n <div class=\"kpi-sub\" [style.color]=\"GetSuccessRateColor(Kpis.successRate24h)\">\n {{FormatPercentage(Kpis.successRate24h)}} success\n </div>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon green\">\n <i class=\"fa-solid fa-play\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{Kpis.currentlyRunning}}</div>\n <div class=\"kpi-label\">Running Now</div>\n </div>\n </div>\n </div>\n <!-- Two-Column Layout: Live Executions + Alerts/Upcoming -->\n <div class=\"panels-grid\">\n <!-- Live Executions -->\n <div class=\"panel\">\n <div class=\"panel-header\">\n <div class=\"panel-title\">\n <i class=\"fa-solid fa-bolt\"></i> Live Executions\n </div>\n <span class=\"panel-badge\">{{LiveExecutions.length}}</span>\n </div>\n <div class=\"panel-body\">\n @if (LiveExecutions.length === 0) {\n <div class=\"empty-state-small\">\n <i class=\"fa-solid fa-inbox\"></i>\n <span>No recent executions</span>\n </div>\n }\n @for (exec of LiveExecutions; track exec) {\n <div class=\"execution-item\">\n <div class=\"exec-status\">\n <i [class]=\"GetStatusIcon(exec.status)\" [ngClass]=\"GetStatusClass(exec.status)\"></i>\n </div>\n <div class=\"exec-details\">\n <div class=\"exec-name\">{{exec.jobName}}</div>\n <div class=\"exec-meta\">{{FormatTimeAgo(exec.startedAt)}} · {{FormatDuration(exec.duration)}}</div>\n </div>\n <div class=\"exec-status-badge\" [ngClass]=\"GetStatusClass(exec.status)\">\n {{exec.status}}\n </div>\n </div>\n }\n </div>\n </div>\n <!-- Right Column: Alerts + Upcoming -->\n <div class=\"right-column\">\n <!-- Alerts -->\n <div class=\"panel\">\n <div class=\"panel-header\" [ngClass]=\"Alerts.length > 0 ? 'alert-header' : 'clear-header'\">\n <div class=\"panel-title\">\n <i [class]=\"Alerts.length > 0 ? 'fa-solid fa-triangle-exclamation' : 'fa-solid fa-shield-check'\"></i>\n {{Alerts.length > 0 ? 'Alerts' : 'All Clear'}}\n </div>\n @if (Alerts.length > 0) {\n <span class=\"panel-badge error\">{{Alerts.length}}</span>\n }\n @if (Alerts.length === 0) {\n <span class=\"panel-badge clear\">0</span>\n }\n </div>\n <div class=\"panel-body\">\n @if (Alerts.length === 0) {\n <div class=\"empty-state-small all-clear\">\n <i class=\"fa-solid fa-circle-check\"></i>\n <span>No active alerts</span>\n </div>\n }\n @for (alert of Alerts; track alert) {\n <div class=\"alert-item\" [ngClass]=\"'alert-' + alert.severity\">\n <i [class]=\"GetAlertIcon(alert.severity)\" class=\"alert-icon\"></i>\n <div class=\"alert-content\">\n <div class=\"alert-title\">{{alert.title}}</div>\n <div class=\"alert-message\">{{alert.message}}</div>\n </div>\n @if (alert.type === 'stale-lock' && alert.jobId) {\n <button\n class=\"alert-action-btn\"\n (click)=\"ReleaseLock(alert.jobId!)\">\n Release\n </button>\n }\n </div>\n }\n </div>\n </div>\n <!-- Upcoming -->\n <div class=\"panel\">\n <div class=\"panel-header\">\n <div class=\"panel-title\">\n <i class=\"fa-solid fa-calendar-day\"></i> Upcoming (24h)\n </div>\n <span class=\"panel-badge\">{{UpcomingExecutions.length}}</span>\n </div>\n <div class=\"panel-body\">\n @if (UpcomingExecutions.length === 0) {\n <div class=\"empty-state-small\">\n <i class=\"fa-solid fa-calendar-xmark\"></i>\n <span>No upcoming executions</span>\n </div>\n }\n @for (upcoming of UpcomingExecutions; track upcoming) {\n <div class=\"upcoming-item\">\n <div class=\"upcoming-info\">\n <div class=\"upcoming-name\">{{upcoming.jobName}}</div>\n <div class=\"upcoming-meta\">\n {{FormatDateTime(upcoming.nextRunAt)}}\n <span class=\"upcoming-type\">{{upcoming.jobType}}</span>\n </div>\n </div>\n <div class=\"upcoming-countdown\" [class.soon]=\"FormatTimeUntil(upcoming.nextRunAt).includes('m') && !FormatTimeUntil(upcoming.nextRunAt).includes('h')\">\n {{FormatTimeUntil(upcoming.nextRunAt)}}\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n <!-- Locks Section -->\n @if (Locks.length > 0) {\n <div class=\"panel\" style=\"margin-top: 20px;\">\n <div class=\"panel-header\">\n <div class=\"panel-title\">\n <i class=\"fa-solid fa-lock\"></i> Active Locks\n </div>\n <span class=\"panel-badge\">{{Locks.length}}</span>\n </div>\n <div class=\"panel-body\">\n <table class=\"data-table\">\n <thead>\n <tr>\n <th>Job</th>\n <th>Locked By</th>\n <th>Locked At</th>\n <th>Expected Completion</th>\n <th>Status</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n @for (lock of Locks; track lock) {\n <tr [class.stale-row]=\"lock.isStale\">\n <td class=\"cell-name\">{{lock.jobName}}</td>\n <td class=\"cell-meta\">{{lock.lockedBy}}</td>\n <td class=\"cell-meta\">{{FormatTimeAgo(lock.lockedAt)}}</td>\n <td class=\"cell-meta\">{{FormatDateTime(lock.expectedCompletion)}}</td>\n <td>\n <span class=\"lock-status-badge\" [class.stale]=\"lock.isStale\">\n {{lock.isStale ? 'Stale' : 'Active'}}\n </span>\n </td>\n <td>\n @if (lock.isStale) {\n <button class=\"release-btn\" (click)=\"ReleaseLock(lock.jobId)\">\n <i class=\"fa-solid fa-lock-open\"></i> Release\n </button>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </div>\n }\n </div>\n }\n</div>\n", styles: [".overview-container {\n display: flex;\n flex-direction: column;\n gap: 20px;\n height: 100%;\n}\n\n.overview-content {\n display: flex;\n flex-direction: column;\n gap: 20px;\n flex: 1;\n min-height: 0;\n}\n\n/* \u2500\u2500 Header \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.overview-header {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n}\n\n.header-controls {\n display: flex;\n gap: 8px;\n}\n\n.control-btn {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n background: white;\n border: 1px solid #e5e7eb;\n border-radius: 20px;\n cursor: pointer;\n font-size: 0.8rem;\n font-weight: 500;\n color: #475569;\n transition: all 0.2s ease;\n}\n\n.control-btn:hover {\n background: #f3f4f6;\n border-color: #999;\n}\n\n.control-btn.active {\n background: #0076b6;\n color: white;\n border-color: #0076b6;\n}\n\n.loading-container {\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 300px;\n}\n\n/* \u2500\u2500 Health Banner \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.health-banner {\n display: flex;\n align-items: center;\n gap: 24px;\n padding: 20px 24px;\n background: white;\n border-radius: 16px;\n border: 1px solid #e2e8f0;\n border-left: 4px solid #10b981;\n box-shadow: 0 1px 3px rgba(0,0,0,0.05);\n}\n\n.health-ring {\n position: relative;\n width: 80px;\n height: 80px;\n flex-shrink: 0;\n}\n\n.health-svg {\n width: 100%;\n height: 100%;\n}\n\n.health-score {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n font-size: 1.5rem;\n font-weight: 800;\n}\n\n.health-details {\n flex: 1;\n}\n\n.health-title {\n font-size: 1.1rem;\n font-weight: 700;\n color: #0f172a;\n margin-bottom: 8px;\n}\n\n.health-stats {\n display: flex;\n gap: 20px;\n font-size: 0.85rem;\n color: #64748b;\n}\n\n.health-stats span {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n/* \u2500\u2500 KPI Cards \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.kpi-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 16px;\n}\n\n.kpi-card {\n display: flex;\n align-items: center;\n gap: 16px;\n padding: 20px;\n background: white;\n border-radius: 16px;\n border: 1px solid #e2e8f0;\n box-shadow: 0 1px 3px rgba(0,0,0,0.05);\n transition: all 0.2s ease;\n}\n\n.kpi-card:hover {\n transform: translateY(-2px);\n box-shadow: 0 8px 25px -5px rgba(0,0,0,0.1);\n}\n\n.kpi-icon {\n width: 48px;\n height: 48px;\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 1.2rem;\n flex-shrink: 0;\n}\n\n.kpi-icon.blue { background: linear-gradient(135deg, #3b82f6, #2563eb); color: white; }\n.kpi-icon.amber { background: linear-gradient(135deg, #f59e0b, #d97706); color: white; }\n.kpi-icon.purple { background: linear-gradient(135deg, #8b5cf6, #7c3aed); color: white; }\n.kpi-icon.green { background: linear-gradient(135deg, #10b981, #059669); color: white; }\n\n.kpi-content {\n flex: 1;\n}\n\n.kpi-value {\n font-size: 1.75rem;\n font-weight: 800;\n color: #0f172a;\n line-height: 1;\n}\n\n.kpi-label {\n font-size: 0.8rem;\n font-weight: 500;\n color: #64748b;\n margin-top: 4px;\n}\n\n.kpi-sub {\n font-size: 0.75rem;\n font-weight: 600;\n margin-top: 2px;\n}\n\n/* \u2500\u2500 Panels \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.panels-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 20px;\n flex: 1;\n min-height: 300px;\n}\n\n.right-column {\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n\n.panel {\n background: white;\n border-radius: 16px;\n border: 1px solid #e2e8f0;\n box-shadow: 0 1px 3px rgba(0,0,0,0.05);\n overflow: hidden;\n display: flex;\n flex-direction: column;\n}\n\n.panel-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 20px;\n background: #f9fafb;\n border-bottom: 1px solid #e5e7eb;\n}\n\n.panel-header.alert-header {\n background: #fef2f2;\n border-bottom-color: #fecaca;\n}\n\n.panel-header.clear-header {\n background: #f0fdf4;\n border-bottom-color: #bbf7d0;\n}\n\n.clear-header .panel-title i {\n color: #10b981;\n}\n\n.panel-badge.clear {\n background: rgba(16, 185, 129, 0.1);\n color: #10b981;\n}\n\n.all-clear i {\n color: #10b981 !important;\n}\n\n.all-clear span {\n color: #10b981;\n font-weight: 500;\n}\n\n.panel-title {\n font-size: 0.95rem;\n font-weight: 700;\n color: #0f172a;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.panel-title i {\n color: #0076b6;\n}\n\n.alert-header .panel-title i {\n color: #ef4444;\n}\n\n.panel-badge {\n font-size: 0.7rem;\n font-weight: 700;\n padding: 2px 10px;\n border-radius: 12px;\n background: rgba(0, 118, 182, 0.1);\n color: #0076b6;\n}\n\n.panel-badge.error {\n background: rgba(239, 68, 68, 0.1);\n color: #ef4444;\n}\n\n.panel-body {\n padding: 12px 20px;\n overflow-y: auto;\n flex: 1;\n min-height: 0;\n}\n\n/* \u2500\u2500 Execution Items \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.execution-item {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 0;\n border-bottom: 1px solid #f1f5f9;\n}\n\n.execution-item:last-child {\n border-bottom: none;\n}\n\n.exec-status i {\n font-size: 1.1rem;\n}\n\n.exec-details {\n flex: 1;\n}\n\n.exec-name {\n font-weight: 600;\n color: #0f172a;\n font-size: 0.875rem;\n}\n\n.exec-meta {\n font-size: 0.75rem;\n color: #94a3b8;\n margin-top: 2px;\n}\n\n.exec-status-badge {\n font-size: 0.7rem;\n font-weight: 600;\n padding: 3px 10px;\n border-radius: 12px;\n}\n\n/* Status Colors */\n.status-running { color: #3b82f6; }\n.status-success { color: #10b981; }\n.status-error { color: #ef4444; }\n.status-warning { color: #f59e0b; }\n\n.exec-status-badge.status-running { background: #dbeafe; color: #1d4ed8; }\n.exec-status-badge.status-success { background: #dcfce7; color: #166534; }\n.exec-status-badge.status-error { background: #fee2e2; color: #991b1b; }\n.exec-status-badge.status-warning { background: #fef3c7; color: #92400e; }\n\n/* \u2500\u2500 Alert Items \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.alert-item {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n padding: 12px;\n border-radius: 10px;\n margin-bottom: 8px;\n}\n\n.alert-item:last-child {\n margin-bottom: 0;\n}\n\n.alert-item.alert-error {\n background: #fef2f2;\n}\n\n.alert-item.alert-warning {\n background: #fffbeb;\n}\n\n.alert-icon {\n font-size: 1rem;\n margin-top: 2px;\n}\n\n.alert-error .alert-icon { color: #ef4444; }\n.alert-warning .alert-icon { color: #f59e0b; }\n\n.alert-content {\n flex: 1;\n}\n\n.alert-title {\n font-weight: 600;\n font-size: 0.85rem;\n color: #0f172a;\n}\n\n.alert-message {\n font-size: 0.8rem;\n color: #64748b;\n margin-top: 2px;\n}\n\n.alert-action-btn {\n padding: 4px 12px;\n font-size: 0.75rem;\n font-weight: 600;\n background: #ef4444;\n color: white;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n white-space: nowrap;\n transition: background 0.2s;\n}\n\n.alert-action-btn:hover {\n background: #dc2626;\n}\n\n/* \u2500\u2500 Upcoming Items \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.upcoming-item {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 0;\n border-bottom: 1px solid #f1f5f9;\n}\n\n.upcoming-item:last-child {\n border-bottom: none;\n}\n\n.upcoming-name {\n font-weight: 600;\n color: #0f172a;\n font-size: 0.875rem;\n}\n\n.upcoming-meta {\n font-size: 0.75rem;\n color: #94a3b8;\n margin-top: 2px;\n}\n\n.upcoming-type {\n display: inline-flex;\n padding: 1px 6px;\n background: #f1f5f9;\n border-radius: 4px;\n font-size: 0.65rem;\n font-weight: 600;\n color: #64748b;\n margin-left: 6px;\n}\n\n.upcoming-countdown {\n font-size: 0.85rem;\n font-weight: 700;\n color: #0076b6;\n}\n\n.upcoming-countdown.soon {\n color: #f59e0b;\n}\n\n/* \u2500\u2500 Empty State \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.empty-state-small {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n padding: 32px 16px;\n color: #94a3b8;\n}\n\n.empty-state-small i {\n font-size: 2rem;\n color: #cbd5e1;\n}\n\n.empty-state-small span {\n font-size: 0.85rem;\n}\n\n/* \u2500\u2500 Data Table \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.data-table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.data-table th {\n text-align: left;\n font-size: 0.7rem;\n font-weight: 700;\n color: #94a3b8;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n padding: 8px 12px;\n border-bottom: 1px solid #e5e7eb;\n}\n\n.data-table td {\n padding: 10px 12px;\n font-size: 0.85rem;\n border-bottom: 1px solid #f1f5f9;\n}\n\n.cell-name {\n font-weight: 600;\n color: #0f172a;\n}\n\n.cell-meta {\n color: #64748b;\n}\n\n.stale-row {\n background: #fef2f2;\n}\n\n.lock-status-badge {\n font-size: 0.7rem;\n font-weight: 600;\n padding: 3px 10px;\n border-radius: 12px;\n background: #dcfce7;\n color: #166534;\n}\n\n.lock-status-badge.stale {\n background: #fee2e2;\n color: #991b1b;\n}\n\n.release-btn {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 10px;\n font-size: 0.75rem;\n font-weight: 600;\n background: transparent;\n color: #ef4444;\n border: 1px solid #fecaca;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.release-btn:hover {\n background: #ef4444;\n color: white;\n border-color: #ef4444;\n}\n\n/* \u2500\u2500 Responsive \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@media (max-width: 1024px) {\n .panels-grid {\n grid-template-columns: 1fr;\n }\n .kpi-grid {\n grid-template-columns: repeat(2, 1fr);\n }\n}\n\n@media (max-width: 768px) {\n .kpi-grid {\n grid-template-columns: 1fr;\n }\n .health-banner {\n flex-direction: column;\n text-align: center;\n }\n .health-stats {\n flex-direction: column;\n gap: 8px;\n align-items: center;\n }\n .data-table {\n font-size: 0.8rem;\n }\n}\n"] }]
|
|
589
594
|
}], () => [{ type: i1.SchedulingInstrumentationService }, { type: i0.ChangeDetectorRef }], { initialState: [{
|
|
590
595
|
type: Input
|
|
591
596
|
}], stateChange: [{
|
|
592
597
|
type: Output
|
|
593
598
|
}] }); })();
|
|
594
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SchedulingOverviewComponent, { className: "SchedulingOverviewComponent", filePath: "src/
|
|
599
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SchedulingOverviewComponent, { className: "SchedulingOverviewComponent", filePath: "src/scheduling/components/scheduling-overview.component.ts", lineNumber: 19 }); })();
|
|
595
600
|
//# sourceMappingURL=scheduling-overview.component.js.map
|