@memberjunction/ng-dashboards 3.4.0 → 4.1.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/README.md +102 -339
- 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.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.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/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/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-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 +2 -4
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.js +83 -64
- 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/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 +109 -27
- package/dist/Home/home-application.d.ts.map +1 -1
- package/dist/Home/home-application.js +351 -75
- package/dist/Home/home-application.js.map +1 -1
- package/dist/Home/home-dashboard.component.d.ts +48 -12
- package/dist/Home/home-dashboard.component.d.ts.map +1 -1
- package/dist/Home/home-dashboard.component.js +267 -187
- 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-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-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/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-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-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/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/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/Scheduling/components/scheduling-overview.component.ts", lineNumber:
|
|
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
|