@memberjunction/ng-dashboards 5.34.1 → 5.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AI/components/agents/agent-configuration.component.d.ts +51 -0
- package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-configuration.component.js +399 -292
- package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts +8 -2
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js +87 -85
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts +75 -0
- package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/ai-analytics-resource.component.js +400 -89
- package/dist/AI/components/analytics/ai-analytics-resource.component.js.map +1 -1
- package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts +5 -0
- package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/analytics-filter-bar.component.js +184 -135
- package/dist/AI/components/analytics/analytics-filter-bar.component.js.map +1 -1
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts +8 -2
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.js +104 -103
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.js.map +1 -1
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts +8 -2
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.js +76 -74
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.js +67 -87
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.js.map +1 -1
- package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts +12 -19
- package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/model-performance/model-performance.component.js +96 -203
- package/dist/AI/components/analytics/model-performance/model-performance.component.js.map +1 -1
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js +110 -126
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js +61 -77
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +990 -992
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +6 -3
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +493 -490
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
- package/dist/AI/components/models/model-management.component.d.ts +17 -0
- package/dist/AI/components/models/model-management.component.d.ts.map +1 -1
- package/dist/AI/components/models/model-management.component.js +370 -425
- package/dist/AI/components/models/model-management.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.d.ts +17 -0
- package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.js +317 -357
- package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
- package/dist/AI/components/requests/agent-requests-resource.component.d.ts +11 -0
- package/dist/AI/components/requests/agent-requests-resource.component.d.ts.map +1 -1
- package/dist/AI/components/requests/agent-requests-resource.component.js +170 -175
- package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
- package/dist/AI/components/system/system-configuration.component.d.ts +19 -0
- package/dist/AI/components/system/system-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/system/system-configuration.component.js +403 -362
- package/dist/AI/components/system/system-configuration.component.js.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.js +781 -783
- package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts +8 -3
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.js +547 -521
- package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
- package/dist/Actions/components/actions-overview.component.d.ts +6 -0
- package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +79 -30
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.d.ts +9 -3
- package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.js +196 -142
- package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.d.ts +41 -1
- package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.js +388 -94
- package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
- package/dist/Actions/components/explorer/index.d.ts +0 -1
- package/dist/Actions/components/explorer/index.d.ts.map +1 -1
- package/dist/Actions/components/explorer/index.js +0 -1
- package/dist/Actions/components/explorer/index.js.map +1 -1
- package/dist/Admin/admin-data-schema.component.js +32 -40
- package/dist/Admin/admin-data-schema.component.js.map +1 -1
- package/dist/Admin/admin-dev-tools-resource.component.js +32 -40
- package/dist/Admin/admin-dev-tools-resource.component.js.map +1 -1
- package/dist/Admin/admin-identity-access.component.js +32 -40
- package/dist/Admin/admin-identity-access.component.js.map +1 -1
- package/dist/Admin/admin-monitoring.component.js +32 -40
- package/dist/Admin/admin-monitoring.component.js.map +1 -1
- package/dist/ApplicationRoles/application-roles-resource.component.js +76 -82
- package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
- package/dist/Archiving/components/archive-config-resource.component.d.ts.map +1 -1
- package/dist/Archiving/components/archive-config-resource.component.js +24 -5
- package/dist/Archiving/components/archive-config-resource.component.js.map +1 -1
- package/dist/Archiving/components/archive-runs-resource.component.d.ts.map +1 -1
- package/dist/Archiving/components/archive-runs-resource.component.js +24 -5
- package/dist/Archiving/components/archive-runs-resource.component.js.map +1 -1
- package/dist/Communication/communication-logs-resource.component.d.ts +1 -1
- package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-logs-resource.component.js +80 -99
- package/dist/Communication/communication-logs-resource.component.js.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.js +127 -106
- package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
- package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-providers-resource.component.js +44 -45
- package/dist/Communication/communication-providers-resource.component.js.map +1 -1
- package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-runs-resource.component.js +60 -58
- package/dist/Communication/communication-runs-resource.component.js.map +1 -1
- package/dist/Communication/communication-templates-resource.component.d.ts +1 -1
- package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-templates-resource.component.js +139 -162
- package/dist/Communication/communication-templates-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.d.ts +7 -0
- package/dist/Credentials/components/credentials-audit-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.js +310 -297
- package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.js +245 -266
- package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.d.ts +7 -0
- package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.js +381 -399
- package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-overview-resource.component.js +222 -228
- package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.d.ts +6 -0
- package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.js +294 -305
- package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts +8 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts.map +1 -1
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +21 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js.map +1 -1
- package/dist/DatabaseDesigner/components/entity-list.component.js +147 -160
- package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js +19 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.js +20 -16
- package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
- package/dist/Home/home-dashboard.component.d.ts +6 -0
- package/dist/Home/home-dashboard.component.d.ts.map +1 -1
- package/dist/Home/home-dashboard.component.js +521 -485
- package/dist/Home/home-dashboard.component.js.map +1 -1
- package/dist/Integration/components/activity/activity.component.d.ts +8 -0
- package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
- package/dist/Integration/components/activity/activity.component.js +309 -318
- package/dist/Integration/components/activity/activity.component.js.map +1 -1
- package/dist/Integration/components/connections/connections.component.js +866 -847
- package/dist/Integration/components/connections/connections.component.js.map +1 -1
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +234 -233
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
- package/dist/Integration/components/overview/overview.component.js +182 -163
- package/dist/Integration/components/overview/overview.component.js.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.d.ts +2 -0
- package/dist/Integration/components/pipelines/pipelines.component.d.ts.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.js +610 -606
- package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
- package/dist/Integration/components/schedules/schedules.component.js +241 -241
- package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
- package/dist/Integration/integration.module.d.ts +1 -1
- package/dist/Integration/integration.module.d.ts.map +1 -1
- package/dist/Integration/integration.module.js +28 -1
- package/dist/Integration/integration.module.js.map +1 -1
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +673 -674
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +54 -51
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +745 -703
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts +12 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +191 -120
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts +18 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +486 -532
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.js +152 -160
- package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.js +302 -319
- package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.js +234 -246
- package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
- package/dist/MCP/mcp-dashboard.component.d.ts +20 -0
- package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
- package/dist/MCP/mcp-dashboard.component.js +1248 -1338
- package/dist/MCP/mcp-dashboard.component.js.map +1 -1
- package/dist/MCP/mcp.module.d.ts +1 -1
- package/dist/MCP/mcp.module.d.ts.map +1 -1
- package/dist/MCP/mcp.module.js +34 -1
- package/dist/MCP/mcp.module.js.map +1 -1
- package/dist/Permissions/audit-log-resource.component.js +76 -85
- package/dist/Permissions/audit-log-resource.component.js.map +1 -1
- package/dist/Permissions/resource-access-resource.component.js +64 -69
- package/dist/Permissions/resource-access-resource.component.js.map +1 -1
- package/dist/Permissions/user-access-resource.component.js +63 -74
- package/dist/Permissions/user-access-resource.component.js.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js +2 -2
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts +2 -1
- package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-activity-resource.component.js +11 -12
- package/dist/Scheduling/components/scheduling-activity-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-activity.component.d.ts +9 -1
- package/dist/Scheduling/components/scheduling-activity.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-activity.component.js +250 -197
- package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts +2 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.js +11 -12
- package/dist/Scheduling/components/scheduling-jobs-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs.component.d.ts +9 -1
- package/dist/Scheduling/components/scheduling-jobs.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs.component.js +203 -147
- package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts +2 -1
- package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-overview-resource.component.js +11 -12
- package/dist/Scheduling/components/scheduling-overview-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-overview.component.d.ts +3 -1
- package/dist/Scheduling/components/scheduling-overview.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-overview.component.js +224 -190
- package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.d.ts +19 -6
- package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.js +262 -104
- package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.js +773 -783
- package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
- package/dist/Testing/components/testing-analytics-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-analytics-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-analytics-resource.component.js +7 -14
- package/dist/Testing/components/testing-analytics-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-analytics.component.d.ts +3 -1
- package/dist/Testing/components/testing-analytics.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-analytics.component.js +420 -393
- package/dist/Testing/components/testing-analytics.component.js.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.js +16 -19
- package/dist/Testing/components/testing-dashboard-tab-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab.component.d.ts +3 -1
- package/dist/Testing/components/testing-dashboard-tab.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab.component.js +157 -122
- package/dist/Testing/components/testing-dashboard-tab.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-explorer-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer-resource.component.js +7 -12
- package/dist/Testing/components/testing-explorer-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer.component.d.ts +8 -1
- package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer.component.js +587 -608
- package/dist/Testing/components/testing-explorer.component.js.map +1 -1
- package/dist/Testing/components/testing-review-resource.component.d.ts +4 -1
- package/dist/Testing/components/testing-review-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-review-resource.component.js +9 -12
- package/dist/Testing/components/testing-review-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-review.component.d.ts +3 -1
- package/dist/Testing/components/testing-review.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-review.component.js +310 -274
- package/dist/Testing/components/testing-review.component.js.map +1 -1
- package/dist/Testing/components/testing-runs-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-runs-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-runs-resource.component.js +16 -19
- package/dist/Testing/components/testing-runs-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-runs.component.d.ts +3 -1
- package/dist/Testing/components/testing-runs.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-runs.component.js +307 -273
- package/dist/Testing/components/testing-runs.component.js.map +1 -1
- package/dist/Testing/testing-dashboard.component.d.ts +2 -0
- package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
- package/dist/Testing/testing-dashboard.component.js +107 -93
- package/dist/Testing/testing-dashboard.component.js.map +1 -1
- package/dist/VersionHistory/components/diff-resource.component.js +185 -188
- package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/graph-resource.component.js +154 -184
- package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/labels-resource.component.d.ts +7 -0
- package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -1
- package/dist/VersionHistory/components/labels-resource.component.js +350 -354
- package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/restore-resource.component.js +163 -169
- package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
- package/dist/actions-dashboards.module.d.ts +15 -16
- package/dist/actions-dashboards.module.d.ts.map +1 -1
- package/dist/actions-dashboards.module.js +34 -11
- package/dist/actions-dashboards.module.js.map +1 -1
- package/dist/ai-dashboards.module.d.ts +45 -48
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +36 -10
- package/dist/ai-dashboards.module.js.map +1 -1
- package/dist/archiving-dashboards.module.d.ts +2 -1
- package/dist/archiving-dashboards.module.d.ts.map +1 -1
- package/dist/archiving-dashboards.module.js +12 -2
- package/dist/archiving-dashboards.module.js.map +1 -1
- package/dist/communication-dashboards.module.d.ts +2 -1
- package/dist/communication-dashboards.module.d.ts.map +1 -1
- package/dist/communication-dashboards.module.js +24 -3
- package/dist/communication-dashboards.module.js.map +1 -1
- package/dist/core-dashboards.module.d.ts +1 -1
- package/dist/core-dashboards.module.d.ts.map +1 -1
- package/dist/core-dashboards.module.js +31 -1
- package/dist/core-dashboards.module.js.map +1 -1
- package/dist/credentials-dashboards.module.d.ts +1 -1
- package/dist/credentials-dashboards.module.d.ts.map +1 -1
- package/dist/credentials-dashboards.module.js +28 -1
- package/dist/credentials-dashboards.module.js.map +1 -1
- package/dist/lists-dashboards.module.d.ts +1 -1
- package/dist/lists-dashboards.module.d.ts.map +1 -1
- package/dist/lists-dashboards.module.js +28 -1
- package/dist/lists-dashboards.module.js.map +1 -1
- package/dist/public-api.d.ts +2 -2
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +3 -3
- package/dist/public-api.js.map +1 -1
- package/dist/scheduling-dashboards.module.d.ts +1 -1
- package/dist/scheduling-dashboards.module.d.ts.map +1 -1
- package/dist/scheduling-dashboards.module.js +31 -1
- package/dist/scheduling-dashboards.module.js.map +1 -1
- package/dist/testing-dashboards.module.d.ts +8 -7
- package/dist/testing-dashboards.module.d.ts.map +1 -1
- package/dist/testing-dashboards.module.js +30 -0
- package/dist/testing-dashboards.module.js.map +1 -1
- package/package.json +52 -52
- package/dist/AI/components/agents/agent-filter-panel.component.d.ts +0 -56
- package/dist/AI/components/agents/agent-filter-panel.component.d.ts.map +0 -1
- package/dist/AI/components/agents/agent-filter-panel.component.js +0 -285
- package/dist/AI/components/agents/agent-filter-panel.component.js.map +0 -1
- package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts +0 -49
- package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts.map +0 -1
- package/dist/AI/components/prompts/prompt-filter-panel.component.js +0 -184
- package/dist/AI/components/prompts/prompt-filter-panel.component.js.map +0 -1
- package/dist/AI/components/system/system-config-filter-panel.component.d.ts +0 -33
- package/dist/AI/components/system/system-config-filter-panel.component.d.ts.map +0 -1
- package/dist/AI/components/system/system-config-filter-panel.component.js +0 -144
- package/dist/AI/components/system/system-config-filter-panel.component.js.map +0 -1
- package/dist/Actions/components/explorer/action-toolbar.component.d.ts +0 -63
- package/dist/Actions/components/explorer/action-toolbar.component.d.ts.map +0 -1
- package/dist/Actions/components/explorer/action-toolbar.component.js +0 -463
- package/dist/Actions/components/explorer/action-toolbar.component.js.map +0 -1
|
@@ -7,117 +7,147 @@ import { SharedService } from '@memberjunction/ng-shared';
|
|
|
7
7
|
import * as i0 from "@angular/core";
|
|
8
8
|
import * as i1 from "../services/scheduling-instrumentation.service";
|
|
9
9
|
import * as i2 from "@angular/common";
|
|
10
|
-
import * as i3 from "@
|
|
11
|
-
import * as i4 from "@memberjunction/ng-
|
|
12
|
-
import * as i5 from "@memberjunction/ng-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
i0.ɵɵ
|
|
10
|
+
import * as i3 from "@memberjunction/ng-ui-components";
|
|
11
|
+
import * as i4 from "@memberjunction/ng-shared-generic";
|
|
12
|
+
import * as i5 from "@memberjunction/ng-scheduling";
|
|
13
|
+
function SchedulingJobsComponent_Conditional_0_ng_container_0_Template(rf, ctx) { if (rf & 1) {
|
|
14
|
+
i0.ɵɵelementContainer(0);
|
|
15
|
+
} }
|
|
16
|
+
function SchedulingJobsComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
17
|
+
i0.ɵɵtemplate(0, SchedulingJobsComponent_Conditional_0_ng_container_0_Template, 1, 0, "ng-container", 1);
|
|
18
18
|
} if (rf & 2) {
|
|
19
|
-
|
|
20
|
-
i0.ɵɵ
|
|
21
|
-
i0.ɵɵ
|
|
22
|
-
i0.ɵɵtextInterpolate(s_r1);
|
|
19
|
+
i0.ɵɵnextContext();
|
|
20
|
+
const content_r1 = i0.ɵɵreference(3);
|
|
21
|
+
i0.ɵɵproperty("ngTemplateOutlet", content_r1);
|
|
23
22
|
} }
|
|
24
|
-
function
|
|
25
|
-
i0.ɵɵ
|
|
26
|
-
|
|
23
|
+
function SchedulingJobsComponent_Conditional_1_ng_container_14_Template(rf, ctx) { if (rf & 1) {
|
|
24
|
+
i0.ɵɵelementContainer(0);
|
|
25
|
+
} }
|
|
26
|
+
function SchedulingJobsComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
27
|
+
const _r2 = i0.ɵɵgetCurrentView();
|
|
28
|
+
i0.ɵɵelementStart(0, "mj-page-layout")(1, "mj-page-header", 2)(2, "div", 3);
|
|
29
|
+
i0.ɵɵelement(3, "mj-stat-badge", 4);
|
|
30
|
+
i0.ɵɵelementEnd();
|
|
31
|
+
i0.ɵɵelementStart(4, "div", 5)(5, "mj-filter-popover", 6);
|
|
32
|
+
i0.ɵɵlistener("ClearAllRequested", function SchedulingJobsComponent_Conditional_1_Template_mj_filter_popover_ClearAllRequested_5_listener() { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ResetFilters()); });
|
|
33
|
+
i0.ɵɵelementStart(6, "mj-filter-panel", 7);
|
|
34
|
+
i0.ɵɵlistener("ValuesChange", function SchedulingJobsComponent_Conditional_1_Template_mj_filter_panel_ValuesChange_6_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OnFilterValuesChange($event)); })("Reset", function SchedulingJobsComponent_Conditional_1_Template_mj_filter_panel_Reset_6_listener() { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ResetFilters()); });
|
|
35
|
+
i0.ɵɵelementEnd()();
|
|
36
|
+
i0.ɵɵelementStart(7, "mj-refresh-button", 8);
|
|
37
|
+
i0.ɵɵlistener("Clicked", function SchedulingJobsComponent_Conditional_1_Template_mj_refresh_button_Clicked_7_listener() { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.Refresh()); });
|
|
27
38
|
i0.ɵɵelementEnd();
|
|
39
|
+
i0.ɵɵelementStart(8, "button", 9);
|
|
40
|
+
i0.ɵɵlistener("click", function SchedulingJobsComponent_Conditional_1_Template_button_click_8_listener() { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OpenCreateSlideout()); });
|
|
41
|
+
i0.ɵɵelement(9, "i", 10);
|
|
42
|
+
i0.ɵɵtext(10, " New Job ");
|
|
43
|
+
i0.ɵɵelementEnd()();
|
|
44
|
+
i0.ɵɵelementStart(11, "div", 11)(12, "mj-page-search", 12);
|
|
45
|
+
i0.ɵɵlistener("ValueChange", function SchedulingJobsComponent_Conditional_1_Template_mj_page_search_ValueChange_12_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OnSearchChange($event)); });
|
|
46
|
+
i0.ɵɵelementEnd()()();
|
|
47
|
+
i0.ɵɵelementStart(13, "mj-page-body");
|
|
48
|
+
i0.ɵɵtemplate(14, SchedulingJobsComponent_Conditional_1_ng_container_14_Template, 1, 0, "ng-container", 1);
|
|
49
|
+
i0.ɵɵelementEnd()();
|
|
28
50
|
} if (rf & 2) {
|
|
29
|
-
const
|
|
30
|
-
i0.ɵɵ
|
|
51
|
+
const ctx_r2 = i0.ɵɵnextContext();
|
|
52
|
+
const content_r1 = i0.ɵɵreference(3);
|
|
53
|
+
i0.ɵɵadvance(3);
|
|
54
|
+
i0.ɵɵproperty("Count", ctx_r2.FilteredJobs.length)("Total", ctx_r2.Jobs.length);
|
|
55
|
+
i0.ɵɵadvance(2);
|
|
56
|
+
i0.ɵɵproperty("ActiveCount", ctx_r2.ActiveFilterCount)("ShowClearAll", ctx_r2.ActiveFilterCount > 0);
|
|
31
57
|
i0.ɵɵadvance();
|
|
32
|
-
i0.ɵɵ
|
|
58
|
+
i0.ɵɵproperty("Fields", ctx_r2.JobsFilterFields)("Values", ctx_r2.JobsFilterValues);
|
|
59
|
+
i0.ɵɵadvance(6);
|
|
60
|
+
i0.ɵɵproperty("Value", ctx_r2.SearchTerm);
|
|
61
|
+
i0.ɵɵadvance(2);
|
|
62
|
+
i0.ɵɵproperty("ngTemplateOutlet", content_r1);
|
|
33
63
|
} }
|
|
34
|
-
function
|
|
35
|
-
i0.ɵɵelementStart(0, "div",
|
|
36
|
-
i0.ɵɵelement(1, "mj-loading",
|
|
64
|
+
function SchedulingJobsComponent_ng_template_2_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
65
|
+
i0.ɵɵelementStart(0, "div", 14);
|
|
66
|
+
i0.ɵɵelement(1, "mj-loading", 18);
|
|
37
67
|
i0.ɵɵelementEnd();
|
|
38
68
|
} }
|
|
39
|
-
function
|
|
69
|
+
function SchedulingJobsComponent_ng_template_2_Conditional_2_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
40
70
|
i0.ɵɵelementStart(0, "p");
|
|
41
71
|
i0.ɵɵtext(1, "Try adjusting your filters");
|
|
42
72
|
i0.ɵɵelementEnd();
|
|
43
73
|
} }
|
|
44
|
-
function
|
|
74
|
+
function SchedulingJobsComponent_ng_template_2_Conditional_2_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
45
75
|
i0.ɵɵelementStart(0, "p");
|
|
46
76
|
i0.ɵɵtext(1, "Create your first scheduled job to get started");
|
|
47
77
|
i0.ɵɵelementEnd();
|
|
48
78
|
} }
|
|
49
|
-
function
|
|
50
|
-
const
|
|
51
|
-
i0.ɵɵelementStart(0, "button",
|
|
52
|
-
i0.ɵɵlistener("click", function
|
|
53
|
-
i0.ɵɵelement(1, "i",
|
|
79
|
+
function SchedulingJobsComponent_ng_template_2_Conditional_2_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
80
|
+
const _r5 = i0.ɵɵgetCurrentView();
|
|
81
|
+
i0.ɵɵelementStart(0, "button", 22);
|
|
82
|
+
i0.ɵɵlistener("click", function SchedulingJobsComponent_ng_template_2_Conditional_2_Conditional_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.OpenCreateSlideout()); });
|
|
83
|
+
i0.ɵɵelement(1, "i", 10);
|
|
54
84
|
i0.ɵɵtext(2, " Create Job ");
|
|
55
85
|
i0.ɵɵelementEnd();
|
|
56
86
|
} }
|
|
57
|
-
function
|
|
58
|
-
i0.ɵɵelementStart(0, "div",
|
|
59
|
-
i0.ɵɵelement(2, "i",
|
|
87
|
+
function SchedulingJobsComponent_ng_template_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
88
|
+
i0.ɵɵelementStart(0, "div", 15)(1, "div", 19);
|
|
89
|
+
i0.ɵɵelement(2, "i", 20);
|
|
60
90
|
i0.ɵɵelementEnd();
|
|
61
91
|
i0.ɵɵelementStart(3, "h3");
|
|
62
92
|
i0.ɵɵtext(4, "No jobs found");
|
|
63
93
|
i0.ɵɵelementEnd();
|
|
64
|
-
i0.ɵɵconditionalCreate(5,
|
|
65
|
-
i0.ɵɵconditionalCreate(6,
|
|
66
|
-
i0.ɵɵconditionalCreate(7,
|
|
94
|
+
i0.ɵɵconditionalCreate(5, SchedulingJobsComponent_ng_template_2_Conditional_2_Conditional_5_Template, 2, 0, "p");
|
|
95
|
+
i0.ɵɵconditionalCreate(6, SchedulingJobsComponent_ng_template_2_Conditional_2_Conditional_6_Template, 2, 0, "p");
|
|
96
|
+
i0.ɵɵconditionalCreate(7, SchedulingJobsComponent_ng_template_2_Conditional_2_Conditional_7_Template, 3, 0, "button", 21);
|
|
67
97
|
i0.ɵɵelementEnd();
|
|
68
98
|
} if (rf & 2) {
|
|
69
|
-
const
|
|
99
|
+
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
70
100
|
i0.ɵɵadvance(5);
|
|
71
|
-
i0.ɵɵconditional(
|
|
101
|
+
i0.ɵɵconditional(ctx_r2.SearchTerm || ctx_r2.StatusFilter || ctx_r2.TypeFilter ? 5 : -1);
|
|
72
102
|
i0.ɵɵadvance();
|
|
73
|
-
i0.ɵɵconditional(!
|
|
103
|
+
i0.ɵɵconditional(!ctx_r2.SearchTerm && !ctx_r2.StatusFilter && !ctx_r2.TypeFilter ? 6 : -1);
|
|
74
104
|
i0.ɵɵadvance();
|
|
75
|
-
i0.ɵɵconditional(!
|
|
105
|
+
i0.ɵɵconditional(!ctx_r2.SearchTerm && !ctx_r2.StatusFilter && !ctx_r2.TypeFilter ? 7 : -1);
|
|
76
106
|
} }
|
|
77
|
-
function
|
|
107
|
+
function SchedulingJobsComponent_ng_template_2_Conditional_3_For_2_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
78
108
|
i0.ɵɵelementStart(0, "div", 31);
|
|
79
109
|
i0.ɵɵtext(1);
|
|
80
110
|
i0.ɵɵelementEnd();
|
|
81
111
|
} if (rf & 2) {
|
|
82
|
-
const
|
|
112
|
+
const job_r7 = i0.ɵɵnextContext().$implicit;
|
|
83
113
|
i0.ɵɵadvance();
|
|
84
|
-
i0.ɵɵtextInterpolate(
|
|
114
|
+
i0.ɵɵtextInterpolate(job_r7.description);
|
|
85
115
|
} }
|
|
86
|
-
function
|
|
116
|
+
function SchedulingJobsComponent_ng_template_2_Conditional_3_For_2_Conditional_48_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
87
117
|
i0.ɵɵelement(0, "i", 62);
|
|
88
118
|
i0.ɵɵtext(1, " Deleting... ");
|
|
89
119
|
} }
|
|
90
|
-
function
|
|
120
|
+
function SchedulingJobsComponent_ng_template_2_Conditional_3_For_2_Conditional_48_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
91
121
|
i0.ɵɵtext(0, " Delete ");
|
|
92
122
|
} }
|
|
93
|
-
function
|
|
94
|
-
const
|
|
123
|
+
function SchedulingJobsComponent_ng_template_2_Conditional_3_For_2_Conditional_48_Template(rf, ctx) { if (rf & 1) {
|
|
124
|
+
const _r8 = i0.ɵɵgetCurrentView();
|
|
95
125
|
i0.ɵɵelementStart(0, "div", 55);
|
|
96
|
-
i0.ɵɵlistener("click", function
|
|
126
|
+
i0.ɵɵlistener("click", function SchedulingJobsComponent_ng_template_2_Conditional_3_For_2_Conditional_48_Template_div_click_0_listener($event) { i0.ɵɵrestoreView(_r8); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
97
127
|
i0.ɵɵelementStart(1, "div", 56);
|
|
98
128
|
i0.ɵɵelement(2, "i", 57);
|
|
99
129
|
i0.ɵɵelementStart(3, "span", 58);
|
|
100
130
|
i0.ɵɵtext(4, "Delete this scheduled job?");
|
|
101
131
|
i0.ɵɵelementEnd();
|
|
102
132
|
i0.ɵɵelementStart(5, "div", 59)(6, "button", 60);
|
|
103
|
-
i0.ɵɵlistener("click", function
|
|
104
|
-
i0.ɵɵconditionalCreate(7,
|
|
133
|
+
i0.ɵɵlistener("click", function SchedulingJobsComponent_ng_template_2_Conditional_3_For_2_Conditional_48_Template_button_click_6_listener($event) { i0.ɵɵrestoreView(_r8); const job_r7 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.ConfirmDelete(job_r7.jobId, $event)); });
|
|
134
|
+
i0.ɵɵconditionalCreate(7, SchedulingJobsComponent_ng_template_2_Conditional_3_For_2_Conditional_48_Conditional_7_Template, 2, 0)(8, SchedulingJobsComponent_ng_template_2_Conditional_3_For_2_Conditional_48_Conditional_8_Template, 1, 0);
|
|
105
135
|
i0.ɵɵelementEnd();
|
|
106
136
|
i0.ɵɵelementStart(9, "button", 61);
|
|
107
|
-
i0.ɵɵlistener("click", function
|
|
137
|
+
i0.ɵɵlistener("click", function SchedulingJobsComponent_ng_template_2_Conditional_3_For_2_Conditional_48_Template_button_click_9_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.CancelDelete($event)); });
|
|
108
138
|
i0.ɵɵtext(10, "Cancel");
|
|
109
139
|
i0.ɵɵelementEnd()()()();
|
|
110
140
|
} if (rf & 2) {
|
|
111
|
-
const
|
|
141
|
+
const ctx_r2 = i0.ɵɵnextContext(4);
|
|
112
142
|
i0.ɵɵadvance(6);
|
|
113
|
-
i0.ɵɵproperty("disabled",
|
|
143
|
+
i0.ɵɵproperty("disabled", ctx_r2.IsDeleting);
|
|
114
144
|
i0.ɵɵadvance();
|
|
115
|
-
i0.ɵɵconditional(
|
|
145
|
+
i0.ɵɵconditional(ctx_r2.IsDeleting ? 7 : 8);
|
|
116
146
|
} }
|
|
117
|
-
function
|
|
118
|
-
const
|
|
147
|
+
function SchedulingJobsComponent_ng_template_2_Conditional_3_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
148
|
+
const _r6 = i0.ɵɵgetCurrentView();
|
|
119
149
|
i0.ɵɵelementStart(0, "div", 24);
|
|
120
|
-
i0.ɵɵlistener("click", function
|
|
150
|
+
i0.ɵɵlistener("click", function SchedulingJobsComponent_ng_template_2_Conditional_3_For_2_Template_div_click_0_listener() { const job_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.OpenEditSlideout(job_r7)); });
|
|
121
151
|
i0.ɵɵelementStart(1, "div", 25)(2, "div", 26);
|
|
122
152
|
i0.ɵɵelement(3, "i", 27);
|
|
123
153
|
i0.ɵɵelementStart(4, "span", 28);
|
|
@@ -127,7 +157,7 @@ function SchedulingJobsComponent_Conditional_27_For_2_Template(rf, ctx) { if (rf
|
|
|
127
157
|
i0.ɵɵtext(7);
|
|
128
158
|
i0.ɵɵelementEnd()();
|
|
129
159
|
i0.ɵɵelementStart(8, "div", 30);
|
|
130
|
-
i0.ɵɵconditionalCreate(9,
|
|
160
|
+
i0.ɵɵconditionalCreate(9, SchedulingJobsComponent_ng_template_2_Conditional_3_For_2_Conditional_9_Template, 2, 1, "div", 31);
|
|
131
161
|
i0.ɵɵelementStart(10, "div", 32)(11, "div", 33)(12, "span", 34);
|
|
132
162
|
i0.ɵɵtext(13, "Type");
|
|
133
163
|
i0.ɵɵelementEnd();
|
|
@@ -172,75 +202,97 @@ function SchedulingJobsComponent_Conditional_27_For_2_Template(rf, ctx) { if (rf
|
|
|
172
202
|
i0.ɵɵelementStart(46, "span", 48);
|
|
173
203
|
i0.ɵɵtext(47);
|
|
174
204
|
i0.ɵɵelementEnd()()()();
|
|
175
|
-
i0.ɵɵconditionalCreate(48,
|
|
205
|
+
i0.ɵɵconditionalCreate(48, SchedulingJobsComponent_ng_template_2_Conditional_3_For_2_Conditional_48_Template, 11, 2, "div", 49);
|
|
176
206
|
i0.ɵɵelementStart(49, "div", 50)(50, "button", 51);
|
|
177
|
-
i0.ɵɵlistener("click", function
|
|
207
|
+
i0.ɵɵlistener("click", function SchedulingJobsComponent_ng_template_2_Conditional_3_For_2_Template_button_click_50_listener($event) { const job_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.ToggleJobStatus(job_r7, $event)); });
|
|
178
208
|
i0.ɵɵelement(51, "i");
|
|
179
209
|
i0.ɵɵtext(52);
|
|
180
210
|
i0.ɵɵelementEnd();
|
|
181
211
|
i0.ɵɵelementStart(53, "button", 51);
|
|
182
|
-
i0.ɵɵlistener("click", function
|
|
212
|
+
i0.ɵɵlistener("click", function SchedulingJobsComponent_ng_template_2_Conditional_3_For_2_Template_button_click_53_listener($event) { const job_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); ctx_r2.OpenEntityRecord(job_r7); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
183
213
|
i0.ɵɵelement(54, "i", 52);
|
|
184
214
|
i0.ɵɵtext(55, " Full Details ");
|
|
185
215
|
i0.ɵɵelementEnd();
|
|
186
216
|
i0.ɵɵelementStart(56, "button", 53);
|
|
187
|
-
i0.ɵɵlistener("click", function
|
|
217
|
+
i0.ɵɵlistener("click", function SchedulingJobsComponent_ng_template_2_Conditional_3_For_2_Template_button_click_56_listener($event) { const job_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.ShowDeleteConfirm(job_r7, $event)); });
|
|
188
218
|
i0.ɵɵelement(57, "i", 54);
|
|
189
219
|
i0.ɵɵtext(58, " Delete ");
|
|
190
220
|
i0.ɵɵelementEnd()()();
|
|
191
221
|
} if (rf & 2) {
|
|
192
|
-
const
|
|
193
|
-
const
|
|
222
|
+
const job_r7 = ctx.$implicit;
|
|
223
|
+
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
194
224
|
i0.ɵɵadvance(3);
|
|
195
|
-
i0.ɵɵclassMap(
|
|
225
|
+
i0.ɵɵclassMap(ctx_r2.GetTypeIcon(job_r7.jobType));
|
|
196
226
|
i0.ɵɵadvance(2);
|
|
197
|
-
i0.ɵɵtextInterpolate(
|
|
227
|
+
i0.ɵɵtextInterpolate(job_r7.jobName);
|
|
198
228
|
i0.ɵɵadvance();
|
|
199
|
-
i0.ɵɵproperty("ngClass",
|
|
229
|
+
i0.ɵɵproperty("ngClass", ctx_r2.GetStatusClass(job_r7.status));
|
|
200
230
|
i0.ɵɵadvance();
|
|
201
|
-
i0.ɵɵtextInterpolate(
|
|
231
|
+
i0.ɵɵtextInterpolate(job_r7.status);
|
|
202
232
|
i0.ɵɵadvance(2);
|
|
203
|
-
i0.ɵɵconditional(
|
|
233
|
+
i0.ɵɵconditional(job_r7.description ? 9 : -1);
|
|
204
234
|
i0.ɵɵadvance(6);
|
|
205
|
-
i0.ɵɵtextInterpolate(
|
|
235
|
+
i0.ɵɵtextInterpolate(job_r7.jobType);
|
|
206
236
|
i0.ɵɵadvance(5);
|
|
207
|
-
i0.ɵɵtextInterpolate(
|
|
237
|
+
i0.ɵɵtextInterpolate(job_r7.cronExpression);
|
|
208
238
|
i0.ɵɵadvance(5);
|
|
209
|
-
i0.ɵɵtextInterpolate(
|
|
239
|
+
i0.ɵɵtextInterpolate(ctx_r2.FormatDate(job_r7.lastRunAt));
|
|
210
240
|
i0.ɵɵadvance(5);
|
|
211
|
-
i0.ɵɵtextInterpolate(
|
|
241
|
+
i0.ɵɵtextInterpolate(ctx_r2.FormatDate(job_r7.nextRunAt));
|
|
212
242
|
i0.ɵɵadvance(5);
|
|
213
|
-
i0.ɵɵstyleProp("color",
|
|
243
|
+
i0.ɵɵstyleProp("color", ctx_r2.GetSuccessRateColor(job_r7.successRate));
|
|
214
244
|
i0.ɵɵadvance();
|
|
215
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
245
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r2.FormatPercentage(job_r7.successRate), " ");
|
|
216
246
|
i0.ɵɵadvance(2);
|
|
217
|
-
i0.ɵɵstyleProp("width",
|
|
247
|
+
i0.ɵɵstyleProp("width", job_r7.successRate * 100 + "%")("background", ctx_r2.GetSuccessRateColor(job_r7.successRate));
|
|
218
248
|
i0.ɵɵadvance(4);
|
|
219
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
249
|
+
i0.ɵɵtextInterpolate1(" ", job_r7.successCount);
|
|
220
250
|
i0.ɵɵadvance(3);
|
|
221
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
251
|
+
i0.ɵɵtextInterpolate1(" ", job_r7.failureCount);
|
|
222
252
|
i0.ɵɵadvance(2);
|
|
223
|
-
i0.ɵɵtextInterpolate1("",
|
|
253
|
+
i0.ɵɵtextInterpolate1("", job_r7.totalRuns, " total");
|
|
224
254
|
i0.ɵɵadvance();
|
|
225
|
-
i0.ɵɵconditional(
|
|
255
|
+
i0.ɵɵconditional(ctx_r2.IsDeleteConfirming(job_r7.jobId) ? 48 : -1);
|
|
226
256
|
i0.ɵɵadvance(3);
|
|
227
|
-
i0.ɵɵclassMap(
|
|
257
|
+
i0.ɵɵclassMap(job_r7.status === "Active" ? "fa-solid fa-pause" : "fa-solid fa-play");
|
|
228
258
|
i0.ɵɵadvance();
|
|
229
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
259
|
+
i0.ɵɵtextInterpolate1(" ", job_r7.status === "Active" ? "Pause" : "Resume", " ");
|
|
230
260
|
} }
|
|
231
|
-
function
|
|
232
|
-
i0.ɵɵelementStart(0, "div",
|
|
233
|
-
i0.ɵɵrepeaterCreate(1,
|
|
261
|
+
function SchedulingJobsComponent_ng_template_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
262
|
+
i0.ɵɵelementStart(0, "div", 16);
|
|
263
|
+
i0.ɵɵrepeaterCreate(1, SchedulingJobsComponent_ng_template_2_Conditional_3_For_2_Template, 59, 24, "div", 23, i0.ɵɵrepeaterTrackByIdentity);
|
|
234
264
|
i0.ɵɵelementEnd();
|
|
235
265
|
} if (rf & 2) {
|
|
236
|
-
const
|
|
266
|
+
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
237
267
|
i0.ɵɵadvance();
|
|
238
|
-
i0.ɵɵrepeater(
|
|
268
|
+
i0.ɵɵrepeater(ctx_r2.FilteredJobs);
|
|
269
|
+
} }
|
|
270
|
+
function SchedulingJobsComponent_ng_template_2_Template(rf, ctx) { if (rf & 1) {
|
|
271
|
+
const _r4 = i0.ɵɵgetCurrentView();
|
|
272
|
+
i0.ɵɵelementStart(0, "div", 13);
|
|
273
|
+
i0.ɵɵconditionalCreate(1, SchedulingJobsComponent_ng_template_2_Conditional_1_Template, 2, 0, "div", 14);
|
|
274
|
+
i0.ɵɵconditionalCreate(2, SchedulingJobsComponent_ng_template_2_Conditional_2_Template, 8, 3, "div", 15);
|
|
275
|
+
i0.ɵɵconditionalCreate(3, SchedulingJobsComponent_ng_template_2_Conditional_3_Template, 3, 0, "div", 16);
|
|
276
|
+
i0.ɵɵelementStart(4, "mj-scheduled-job-slide-panel", 17);
|
|
277
|
+
i0.ɵɵlistener("Close", function SchedulingJobsComponent_ng_template_2_Template_mj_scheduled_job_slide_panel_Close_4_listener() { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.CloseSlideout()); })("Saved", function SchedulingJobsComponent_ng_template_2_Template_mj_scheduled_job_slide_panel_Saved_4_listener() { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OnSlideoutSaved()); })("Deleted", function SchedulingJobsComponent_ng_template_2_Template_mj_scheduled_job_slide_panel_Deleted_4_listener() { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OnSlideoutSaved()); });
|
|
278
|
+
i0.ɵɵelementEnd()();
|
|
279
|
+
} if (rf & 2) {
|
|
280
|
+
const ctx_r2 = i0.ɵɵnextContext();
|
|
281
|
+
i0.ɵɵadvance();
|
|
282
|
+
i0.ɵɵconditional(ctx_r2.IsLoading ? 1 : -1);
|
|
283
|
+
i0.ɵɵadvance();
|
|
284
|
+
i0.ɵɵconditional(!ctx_r2.IsLoading && ctx_r2.FilteredJobs.length === 0 ? 2 : -1);
|
|
285
|
+
i0.ɵɵadvance();
|
|
286
|
+
i0.ɵɵconditional(!ctx_r2.IsLoading && ctx_r2.FilteredJobs.length > 0 ? 3 : -1);
|
|
287
|
+
i0.ɵɵadvance();
|
|
288
|
+
i0.ɵɵproperty("IsOpen", ctx_r2.SlideoutOpen)("ScheduledJobID", (ctx_r2.SelectedJob == null ? null : ctx_r2.SelectedJob.jobId) ?? null);
|
|
239
289
|
} }
|
|
240
290
|
export class SchedulingJobsComponent {
|
|
241
291
|
schedulingService;
|
|
242
292
|
cdr;
|
|
243
293
|
initialState = {};
|
|
294
|
+
/** When true, the inner toolbar is hidden — the parent shell is rendering it in `<mj-page-header>` instead. */
|
|
295
|
+
HideToolbar = false;
|
|
244
296
|
stateChange = new EventEmitter();
|
|
245
297
|
Jobs = [];
|
|
246
298
|
FilteredJobs = [];
|
|
@@ -368,6 +420,63 @@ export class SchedulingJobsComponent {
|
|
|
368
420
|
this.TypeFilter = type;
|
|
369
421
|
this.typeSubject.next(type);
|
|
370
422
|
}
|
|
423
|
+
get JobsFilterFields() {
|
|
424
|
+
const statusOptions = this.StatusOptions.map(s => ({
|
|
425
|
+
text: s === '' ? 'All Statuses' : s,
|
|
426
|
+
value: s
|
|
427
|
+
}));
|
|
428
|
+
const typeOptions = this.TypeOptions.map(t => ({
|
|
429
|
+
text: t === '' ? 'All Types' : t,
|
|
430
|
+
value: t
|
|
431
|
+
}));
|
|
432
|
+
return [
|
|
433
|
+
{
|
|
434
|
+
key: 'statusFilter',
|
|
435
|
+
type: 'dropdown',
|
|
436
|
+
label: 'Status',
|
|
437
|
+
icon: 'fa-solid fa-circle-info',
|
|
438
|
+
placeholder: 'All Statuses',
|
|
439
|
+
options: statusOptions
|
|
440
|
+
},
|
|
441
|
+
{
|
|
442
|
+
key: 'typeFilter',
|
|
443
|
+
type: 'dropdown',
|
|
444
|
+
label: 'Type',
|
|
445
|
+
icon: 'fa-solid fa-shapes',
|
|
446
|
+
placeholder: 'All Types',
|
|
447
|
+
options: typeOptions
|
|
448
|
+
}
|
|
449
|
+
];
|
|
450
|
+
}
|
|
451
|
+
get JobsFilterValues() {
|
|
452
|
+
return {
|
|
453
|
+
statusFilter: this.StatusFilter,
|
|
454
|
+
typeFilter: this.TypeFilter
|
|
455
|
+
};
|
|
456
|
+
}
|
|
457
|
+
get ActiveFilterCount() {
|
|
458
|
+
let count = 0;
|
|
459
|
+
if (this.StatusFilter)
|
|
460
|
+
count++;
|
|
461
|
+
if (this.TypeFilter)
|
|
462
|
+
count++;
|
|
463
|
+
return count;
|
|
464
|
+
}
|
|
465
|
+
OnFilterValuesChange(values) {
|
|
466
|
+
const next = (values ?? {});
|
|
467
|
+
if ((next.statusFilter ?? '') !== this.StatusFilter) {
|
|
468
|
+
this.OnStatusFilterChange(next.statusFilter ?? '');
|
|
469
|
+
}
|
|
470
|
+
if ((next.typeFilter ?? '') !== this.TypeFilter) {
|
|
471
|
+
this.OnTypeFilterChange(next.typeFilter ?? '');
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
ResetFilters() {
|
|
475
|
+
if (this.StatusFilter)
|
|
476
|
+
this.OnStatusFilterChange('');
|
|
477
|
+
if (this.TypeFilter)
|
|
478
|
+
this.OnTypeFilterChange('');
|
|
479
|
+
}
|
|
371
480
|
Refresh() {
|
|
372
481
|
this.schedulingService.refresh();
|
|
373
482
|
}
|
|
@@ -496,75 +605,22 @@ export class SchedulingJobsComponent {
|
|
|
496
605
|
this.settingsPersistSubject.next();
|
|
497
606
|
}
|
|
498
607
|
static ɵfac = function SchedulingJobsComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SchedulingJobsComponent)(i0.ɵɵdirectiveInject(i1.SchedulingInstrumentationService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
|
|
499
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SchedulingJobsComponent, selectors: [["app-scheduling-jobs"]], inputs: { initialState: "initialState" }, outputs: { stateChange: "stateChange" }, standalone: false, decls:
|
|
500
|
-
i0.ɵɵ
|
|
501
|
-
i0.ɵɵ
|
|
502
|
-
i0.ɵɵelementStart(5, "input", 5);
|
|
503
|
-
i0.ɵɵlistener("input", function SchedulingJobsComponent_Template_input_input_5_listener($event) { return ctx.OnSearchChange($event.target.value); });
|
|
504
|
-
i0.ɵɵelementEnd()();
|
|
505
|
-
i0.ɵɵelementStart(6, "select", 6);
|
|
506
|
-
i0.ɵɵlistener("change", function SchedulingJobsComponent_Template_select_change_6_listener($event) { return ctx.OnStatusFilterChange($event.target.value); });
|
|
507
|
-
i0.ɵɵelementStart(7, "option", 7);
|
|
508
|
-
i0.ɵɵtext(8, "All Statuses");
|
|
509
|
-
i0.ɵɵelementEnd();
|
|
510
|
-
i0.ɵɵrepeaterCreate(9, SchedulingJobsComponent_For_10_Template, 2, 2, "option", 8, i0.ɵɵrepeaterTrackByIdentity);
|
|
511
|
-
i0.ɵɵelementEnd();
|
|
512
|
-
i0.ɵɵelementStart(11, "select", 6);
|
|
513
|
-
i0.ɵɵlistener("change", function SchedulingJobsComponent_Template_select_change_11_listener($event) { return ctx.OnTypeFilterChange($event.target.value); });
|
|
514
|
-
i0.ɵɵelementStart(12, "option", 7);
|
|
515
|
-
i0.ɵɵtext(13, "All Types");
|
|
516
|
-
i0.ɵɵelementEnd();
|
|
517
|
-
i0.ɵɵrepeaterCreate(14, SchedulingJobsComponent_For_15_Template, 2, 2, "option", 8, i0.ɵɵrepeaterTrackByIdentity);
|
|
518
|
-
i0.ɵɵelementEnd()();
|
|
519
|
-
i0.ɵɵelementStart(16, "div", 9)(17, "span", 10);
|
|
520
|
-
i0.ɵɵtext(18);
|
|
521
|
-
i0.ɵɵelementEnd();
|
|
522
|
-
i0.ɵɵelementStart(19, "button", 11);
|
|
523
|
-
i0.ɵɵlistener("click", function SchedulingJobsComponent_Template_button_click_19_listener() { return ctx.Refresh(); });
|
|
524
|
-
i0.ɵɵelement(20, "i", 12);
|
|
525
|
-
i0.ɵɵtext(21, " Refresh ");
|
|
526
|
-
i0.ɵɵelementEnd();
|
|
527
|
-
i0.ɵɵelementStart(22, "button", 13);
|
|
528
|
-
i0.ɵɵlistener("click", function SchedulingJobsComponent_Template_button_click_22_listener() { return ctx.OpenCreateSlideout(); });
|
|
529
|
-
i0.ɵɵelement(23, "i", 14);
|
|
530
|
-
i0.ɵɵtext(24, " New Job ");
|
|
531
|
-
i0.ɵɵelementEnd()()();
|
|
532
|
-
i0.ɵɵconditionalCreate(25, SchedulingJobsComponent_Conditional_25_Template, 2, 0, "div", 15);
|
|
533
|
-
i0.ɵɵconditionalCreate(26, SchedulingJobsComponent_Conditional_26_Template, 8, 3, "div", 16);
|
|
534
|
-
i0.ɵɵconditionalCreate(27, SchedulingJobsComponent_Conditional_27_Template, 3, 0, "div", 17);
|
|
535
|
-
i0.ɵɵelementStart(28, "mj-scheduled-job-slide-panel", 18);
|
|
536
|
-
i0.ɵɵlistener("Close", function SchedulingJobsComponent_Template_mj_scheduled_job_slide_panel_Close_28_listener() { return ctx.CloseSlideout(); })("Saved", function SchedulingJobsComponent_Template_mj_scheduled_job_slide_panel_Saved_28_listener() { return ctx.OnSlideoutSaved(); })("Deleted", function SchedulingJobsComponent_Template_mj_scheduled_job_slide_panel_Deleted_28_listener() { return ctx.OnSlideoutSaved(); });
|
|
537
|
-
i0.ɵɵelementEnd()();
|
|
608
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SchedulingJobsComponent, selectors: [["app-scheduling-jobs"]], inputs: { initialState: "initialState", HideToolbar: "HideToolbar" }, outputs: { stateChange: "stateChange" }, standalone: false, decls: 4, vars: 1, consts: [["content", ""], [4, "ngTemplateOutlet"], ["Title", "Scheduled Jobs", "Icon", "fa-solid fa-calendar-check", "Subtitle", "Configure and manage scheduled jobs"], ["meta", ""], ["Label", "jobs", 3, "Count", "Total"], ["actions", ""], [3, "ClearAllRequested", "ActiveCount", "ShowClearAll"], [3, "ValuesChange", "Reset", "Fields", "Values"], [3, "Clicked"], ["mjButton", "", "variant", "primary", "size", "sm", 3, "click"], [1, "fa-solid", "fa-plus"], ["toolbar", ""], ["Placeholder", "Search jobs...", 3, "ValueChange", "Value"], [1, "jobs-container"], [1, "loading-container"], [1, "empty-state"], [1, "jobs-grid"], [3, "Close", "Saved", "Deleted", "IsOpen", "ScheduledJobID"], ["text", "Loading jobs...", "size", "medium"], [1, "empty-icon"], [1, "fa-solid", "fa-calendar-xmark"], [1, "primary-btn"], [1, "primary-btn", 3, "click"], [1, "job-card"], [1, "job-card", 3, "click"], [1, "job-card-header"], [1, "job-card-title"], [1, "type-icon"], [1, "job-name"], [1, "status-chip", 3, "ngClass"], [1, "job-card-body"], [1, "job-description"], [1, "job-meta-grid"], [1, "meta-item"], [1, "meta-label"], [1, "meta-value"], [1, "meta-value", "mono"], [1, "success-section"], [1, "success-header"], [1, "success-label"], [1, "success-value"], [1, "success-bar-track"], [1, "success-bar-fill"], [1, "run-stats"], [1, "stat-success"], [1, "fa-solid", "fa-check"], [1, "stat-failure"], [1, "fa-solid", "fa-xmark"], [1, "stat-total"], [1, "delete-confirm-overlay"], [1, "job-card-footer"], ["mjButton", "", "variant", "flat", "size", "sm", 3, "click"], [1, "fa-solid", "fa-up-right-from-square"], ["mjButton", "", "variant", "danger", "size", "sm", 3, "click"], [1, "fa-solid", "fa-trash-can"], [1, "delete-confirm-overlay", 3, "click"], [1, "delete-confirm-content"], [1, "fa-solid", "fa-triangle-exclamation", "delete-warn-icon"], [1, "delete-confirm-text"], [1, "delete-confirm-actions"], [1, "delete-confirm-btn", 3, "click", "disabled"], [1, "delete-cancel-btn", 3, "click"], [1, "fa-solid", "fa-spinner", "fa-spin"]], template: function SchedulingJobsComponent_Template(rf, ctx) { if (rf & 1) {
|
|
609
|
+
i0.ɵɵconditionalCreate(0, SchedulingJobsComponent_Conditional_0_Template, 1, 1, "ng-container")(1, SchedulingJobsComponent_Conditional_1_Template, 15, 8, "mj-page-layout");
|
|
610
|
+
i0.ɵɵtemplate(2, SchedulingJobsComponent_ng_template_2_Template, 5, 5, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
|
|
538
611
|
} if (rf & 2) {
|
|
539
|
-
i0.ɵɵ
|
|
540
|
-
i0.ɵɵproperty("value", ctx.SearchTerm);
|
|
541
|
-
i0.ɵɵadvance();
|
|
542
|
-
i0.ɵɵproperty("value", ctx.StatusFilter);
|
|
543
|
-
i0.ɵɵadvance(3);
|
|
544
|
-
i0.ɵɵrepeater(ctx.StatusOptions.slice(1));
|
|
545
|
-
i0.ɵɵadvance(2);
|
|
546
|
-
i0.ɵɵproperty("value", ctx.TypeFilter);
|
|
547
|
-
i0.ɵɵadvance(3);
|
|
548
|
-
i0.ɵɵrepeater(ctx.TypeOptions.slice(1));
|
|
549
|
-
i0.ɵɵadvance(4);
|
|
550
|
-
i0.ɵɵtextInterpolate2("", ctx.FilteredJobs.length, " of ", ctx.Jobs.length, " jobs");
|
|
551
|
-
i0.ɵɵadvance(7);
|
|
552
|
-
i0.ɵɵconditional(ctx.IsLoading ? 25 : -1);
|
|
553
|
-
i0.ɵɵadvance();
|
|
554
|
-
i0.ɵɵconditional(!ctx.IsLoading && ctx.FilteredJobs.length === 0 ? 26 : -1);
|
|
555
|
-
i0.ɵɵadvance();
|
|
556
|
-
i0.ɵɵconditional(!ctx.IsLoading && ctx.FilteredJobs.length > 0 ? 27 : -1);
|
|
557
|
-
i0.ɵɵadvance();
|
|
558
|
-
i0.ɵɵproperty("IsOpen", ctx.SlideoutOpen)("ScheduledJobID", (ctx.SelectedJob == null ? null : ctx.SelectedJob.jobId) ?? null);
|
|
559
|
-
} }, dependencies: [i2.NgClass, i3.NgSelectOption, i3.ɵNgSelectMultipleOption, i4.MJButtonDirective, i5.LoadingComponent, i6.ScheduledJobSlidePanelComponent], styles: [".jobs-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 20px;\n position: relative;\n}\n\n\n\n.jobs-toolbar[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-wrap: wrap;\n gap: 12px;\n}\n\n.toolbar-left[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n align-items: center;\n flex-wrap: wrap;\n}\n\n.toolbar-right[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.search-box[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n min-width: 240px;\n transition: border-color 0.2s;\n}\n\n.search-box[_ngcontent-%COMP%]:focus-within {\n border-color: var(--mj-brand-primary);\n box-shadow: var(--mj-shadow-sm);\n}\n\n.search-box[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 0.85rem;\n}\n\n.search-box[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n border: none;\n outline: none;\n background: transparent;\n font-size: 0.85rem;\n color: var(--mj-text-primary);\n width: 100%;\n}\n\n.filter-select[_ngcontent-%COMP%] {\n padding: 8px 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n font-size: 0.85rem;\n color: var(--mj-text-secondary);\n cursor: pointer;\n outline: none;\n transition: border-color 0.2s;\n}\n\n.filter-select[_ngcontent-%COMP%]:focus {\n border-color: var(--mj-brand-primary);\n}\n\n.result-count[_ngcontent-%COMP%] {\n font-size: 0.8rem;\n color: var(--mj-text-muted);\n white-space: nowrap;\n}\n\n.control-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n cursor: pointer;\n font-size: 0.8rem;\n font-weight: 500;\n color: var(--mj-text-secondary);\n transition: all 0.2s ease;\n}\n\n.control-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n}\n\n.primary-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 20px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: none;\n border-radius: 10px;\n cursor: pointer;\n font-size: 0.8rem;\n font-weight: 600;\n transition: all 0.2s ease;\n}\n\n.primary-btn[_ngcontent-%COMP%]:hover {\n transform: translateY(-1px);\n box-shadow: var(--mj-shadow-md);\n}\n\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.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 64px 24px;\n background: var(--mj-bg-surface-card);\n border-radius: 16px;\n border: 2px dashed var(--mj-border-default);\n text-align: center;\n}\n\n.empty-icon[_ngcontent-%COMP%] {\n width: 80px;\n height: 80px;\n border-radius: 50%;\n background: var(--mj-bg-surface-sunken);\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 20px;\n}\n\n.empty-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 2rem;\n color: var(--mj-text-muted);\n}\n\n.empty-state[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 1.1rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0 0 8px;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n margin: 0 0 16px;\n font-size: 0.9rem;\n}\n\n\n\n.jobs-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(360px, 1fr));\n gap: 16px;\n}\n\n.job-card[_ngcontent-%COMP%] {\n position: relative;\n background: var(--mj-bg-surface-card);\n border-radius: 16px;\n border: 1px solid var(--mj-border-default);\n box-shadow: var(--mj-shadow-sm);\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.job-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: var(--mj-shadow-lg);\n border-color: var(--mj-brand-primary);\n}\n\n\n\n.job-card-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.job-card-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n flex: 1;\n min-width: 0;\n}\n\n.type-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 1rem;\n flex-shrink: 0;\n}\n\n.job-name[_ngcontent-%COMP%] {\n font-weight: 700;\n color: var(--mj-text-primary);\n font-size: 0.9rem;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n line-height: 1.3;\n}\n\n.status-chip[_ngcontent-%COMP%] {\n font-size: 0.7rem;\n font-weight: 700;\n padding: 3px 10px;\n border-radius: 12px;\n flex-shrink: 0;\n margin-left: 8px;\n}\n\n.status-active[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface)); color: var(--mj-status-success); }\n.status-paused[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface)); color: var(--mj-status-warning); }\n.status-disabled[_ngcontent-%COMP%] { background: var(--mj-bg-surface-sunken); color: var(--mj-text-secondary); }\n.status-pending[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface)); color: var(--mj-brand-primary); }\n.status-expired[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface)); color: var(--mj-status-error); }\n\n\n\n.job-card-body[_ngcontent-%COMP%] {\n padding: 16px 20px;\n flex: 1;\n}\n\n.job-description[_ngcontent-%COMP%] {\n font-size: 0.8rem;\n color: var(--mj-text-secondary);\n margin-bottom: 12px;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n line-height: 1.4;\n}\n\n.job-meta-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 8px;\n margin-bottom: 16px;\n}\n\n.meta-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.meta-label[_ngcontent-%COMP%] {\n font-size: 0.65rem;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n}\n\n.meta-value[_ngcontent-%COMP%] {\n font-size: 0.8rem;\n color: var(--mj-text-primary);\n font-weight: 500;\n}\n\n.meta-value.mono[_ngcontent-%COMP%] {\n font-family: 'SFMono-Regular', Consolas, monospace;\n font-size: 0.75rem;\n}\n\n\n\n.success-section[_ngcontent-%COMP%] {\n padding-top: 12px;\n border-top: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.success-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 6px;\n}\n\n.success-label[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.success-value[_ngcontent-%COMP%] {\n font-size: 0.85rem;\n font-weight: 800;\n}\n\n.success-bar-track[_ngcontent-%COMP%] {\n height: 6px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 3px;\n overflow: hidden;\n}\n\n.success-bar-fill[_ngcontent-%COMP%] {\n height: 100%;\n border-radius: 3px;\n transition: width 0.5s ease;\n}\n\n.run-stats[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n margin-top: 8px;\n font-size: 0.75rem;\n}\n\n.stat-success[_ngcontent-%COMP%] { color: var(--mj-status-success); font-weight: 600; }\n.stat-failure[_ngcontent-%COMP%] { color: var(--mj-status-error); font-weight: 600; }\n.stat-total[_ngcontent-%COMP%] { color: var(--mj-text-muted); margin-left: auto; }\n\n\n\n.job-card-footer[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n padding: 12px 20px;\n border-top: 1px solid var(--mj-bg-surface-sunken);\n background: var(--mj-bg-surface-sunken);\n}\n\n.action-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: transparent;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n cursor: pointer;\n font-size: 0.75rem;\n font-weight: 500;\n color: var(--mj-text-secondary);\n transition: all 0.2s;\n}\n\n.action-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n}\n\n\n\n.slideout-backdrop[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--mj-bg-overlay);\n z-index: 999;\n animation: _ngcontent-%COMP%_fadeInBackdrop 0.2s ease;\n}\n\n@keyframes _ngcontent-%COMP%_fadeInBackdrop {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n.slideout-panel[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n right: -100%;\n height: 100vh;\n background: var(--mj-bg-surface-card);\n box-shadow: var(--mj-shadow-lg);\n z-index: 1000;\n transition: right 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n overflow-y: auto;\n}\n\n.slideout-panel.open[_ngcontent-%COMP%] {\n right: 0;\n}\n\n.slideout-resize-handle[_ngcontent-%COMP%] {\n position: absolute;\n inset: 0;\n background: rgba(255, 255, 255, 0.95);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10;\n border-radius: 16px;\n backdrop-filter: blur(4px);\n}\n\n.slideout-resize-handle[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.slideout-resize-handle[_ngcontent-%COMP%]:active {\n background: color-mix(in srgb, var(--mj-brand-primary) 50%, transparent);\n}\n\n\n\n.delete-confirm-overlay[_ngcontent-%COMP%] {\n position: absolute;\n inset: 0;\n background: rgba(255, 255, 255, 0.95);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10;\n border-radius: 16px;\n backdrop-filter: blur(4px);\n}\n\n.delete-confirm-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n padding: 24px;\n text-align: center;\n}\n\n.delete-warn-icon[_ngcontent-%COMP%] {\n font-size: 1.5rem;\n color: var(--mj-status-error);\n}\n\n.delete-confirm-text[_ngcontent-%COMP%] {\n font-size: 0.85rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.delete-confirm-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n margin-top: 4px;\n}\n\n.delete-confirm-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 16px;\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n border: none;\n border-radius: 8px;\n cursor: pointer;\n font-size: 0.8rem;\n font-weight: 600;\n transition: background 0.2s;\n}\n\n.delete-confirm-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-status-error-text);\n}\n\n.delete-confirm-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.7;\n cursor: not-allowed;\n}\n\n.delete-cancel-btn[_ngcontent-%COMP%] {\n padding: 6px 16px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n cursor: pointer;\n font-size: 0.8rem;\n font-weight: 500;\n transition: all 0.2s;\n}\n\n.delete-cancel-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n}\n\n\n\n.action-btn-danger[_ngcontent-%COMP%] {\n margin-left: auto;\n color: var(--mj-status-error);\n border-color: var(--mj-status-error-border);\n}\n\n.action-btn-danger[_ngcontent-%COMP%]:hover {\n background: var(--mj-status-error-bg);\n border-color: var(--mj-status-error);\n color: var(--mj-status-error-text);\n}\n\n\n\n@media (max-width: 1024px) {\n .jobs-grid[_ngcontent-%COMP%] {\n grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));\n }\n}\n\n@media (max-width: 768px) {\n .jobs-toolbar[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: stretch;\n }\n .toolbar-right[_ngcontent-%COMP%] {\n justify-content: space-between;\n }\n .jobs-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n .search-box[_ngcontent-%COMP%] {\n min-width: auto;\n flex: 1;\n }\n}"], changeDetection: 0 });
|
|
612
|
+
i0.ɵɵconditional(ctx.HideToolbar ? 0 : 1);
|
|
613
|
+
} }, dependencies: [i2.NgClass, i2.NgTemplateOutlet, i3.MJButtonDirective, i3.MJPageHeaderComponent, i3.MJPageLayoutComponent, i3.MJPageBodyComponent, i3.MJPageSearchComponent, i3.MJFilterPopoverComponent, i3.MJFilterPanelComponent, i3.MJStatBadgeComponent, i3.MJRefreshButtonComponent, i4.LoadingComponent, i5.ScheduledJobSlidePanelComponent], styles: [".jobs-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 20px;\n position: relative;\n}\n\n\n\n.jobs-toolbar[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-wrap: wrap;\n gap: 12px;\n}\n\n.toolbar-left[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n align-items: center;\n flex-wrap: wrap;\n}\n\n.toolbar-right[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.search-box[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n min-width: 240px;\n transition: border-color 0.2s;\n}\n\n.search-box[_ngcontent-%COMP%]:focus-within {\n border-color: var(--mj-brand-primary);\n box-shadow: var(--mj-shadow-sm);\n}\n\n.search-box[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 0.85rem;\n}\n\n.search-box[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n border: none;\n outline: none;\n background: transparent;\n font-size: 0.85rem;\n color: var(--mj-text-primary);\n width: 100%;\n}\n\n.filter-select[_ngcontent-%COMP%] {\n padding: 8px 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n font-size: 0.85rem;\n color: var(--mj-text-secondary);\n cursor: pointer;\n outline: none;\n transition: border-color 0.2s;\n}\n\n.filter-select[_ngcontent-%COMP%]:focus {\n border-color: var(--mj-brand-primary);\n}\n\n.result-count[_ngcontent-%COMP%] {\n font-size: 0.8rem;\n color: var(--mj-text-muted);\n white-space: nowrap;\n}\n\n.control-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n cursor: pointer;\n font-size: 0.8rem;\n font-weight: 500;\n color: var(--mj-text-secondary);\n transition: all 0.2s ease;\n}\n\n.control-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n}\n\n.primary-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 20px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: none;\n border-radius: 10px;\n cursor: pointer;\n font-size: 0.8rem;\n font-weight: 600;\n transition: all 0.2s ease;\n}\n\n.primary-btn[_ngcontent-%COMP%]:hover {\n transform: translateY(-1px);\n box-shadow: var(--mj-shadow-md);\n}\n\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.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 64px 24px;\n background: var(--mj-bg-surface-card);\n border-radius: 16px;\n border: 2px dashed var(--mj-border-default);\n text-align: center;\n}\n\n.empty-icon[_ngcontent-%COMP%] {\n width: 80px;\n height: 80px;\n border-radius: 50%;\n background: var(--mj-bg-surface-sunken);\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 20px;\n}\n\n.empty-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 2rem;\n color: var(--mj-text-muted);\n}\n\n.empty-state[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 1.1rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0 0 8px;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n margin: 0 0 16px;\n font-size: 0.9rem;\n}\n\n\n\n.jobs-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(360px, 1fr));\n gap: 16px;\n}\n\n.job-card[_ngcontent-%COMP%] {\n position: relative;\n background: var(--mj-bg-surface-card);\n border-radius: 16px;\n border: 1px solid var(--mj-border-default);\n box-shadow: var(--mj-shadow-sm);\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.job-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: var(--mj-shadow-lg);\n border-color: var(--mj-brand-primary);\n}\n\n\n\n.job-card-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.job-card-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n flex: 1;\n min-width: 0;\n}\n\n.type-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 1rem;\n flex-shrink: 0;\n}\n\n.job-name[_ngcontent-%COMP%] {\n font-weight: 700;\n color: var(--mj-text-primary);\n font-size: 0.9rem;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n line-height: 1.3;\n}\n\n.status-chip[_ngcontent-%COMP%] {\n font-size: 0.7rem;\n font-weight: 700;\n padding: 3px 10px;\n border-radius: 12px;\n flex-shrink: 0;\n margin-left: 8px;\n}\n\n.status-active[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface)); color: var(--mj-status-success); }\n.status-paused[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface)); color: var(--mj-status-warning); }\n.status-disabled[_ngcontent-%COMP%] { background: var(--mj-bg-surface-sunken); color: var(--mj-text-secondary); }\n.status-pending[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface)); color: var(--mj-brand-primary); }\n.status-expired[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface)); color: var(--mj-status-error); }\n\n\n\n.job-card-body[_ngcontent-%COMP%] {\n padding: 16px 20px;\n flex: 1;\n}\n\n.job-description[_ngcontent-%COMP%] {\n font-size: 0.8rem;\n color: var(--mj-text-secondary);\n margin-bottom: 12px;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n line-height: 1.4;\n}\n\n.job-meta-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 8px;\n margin-bottom: 16px;\n}\n\n.meta-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.meta-label[_ngcontent-%COMP%] {\n font-size: 0.65rem;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n}\n\n.meta-value[_ngcontent-%COMP%] {\n font-size: 0.8rem;\n color: var(--mj-text-primary);\n font-weight: 500;\n}\n\n.meta-value.mono[_ngcontent-%COMP%] {\n font-family: 'SFMono-Regular', Consolas, monospace;\n font-size: 0.75rem;\n}\n\n\n\n.success-section[_ngcontent-%COMP%] {\n padding-top: 12px;\n border-top: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.success-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 6px;\n}\n\n.success-label[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.success-value[_ngcontent-%COMP%] {\n font-size: 0.85rem;\n font-weight: 800;\n}\n\n.success-bar-track[_ngcontent-%COMP%] {\n height: 6px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 3px;\n overflow: hidden;\n}\n\n.success-bar-fill[_ngcontent-%COMP%] {\n height: 100%;\n border-radius: 3px;\n transition: width 0.5s ease;\n}\n\n.run-stats[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n margin-top: 8px;\n font-size: 0.75rem;\n}\n\n.stat-success[_ngcontent-%COMP%] { color: var(--mj-status-success); font-weight: 600; }\n.stat-failure[_ngcontent-%COMP%] { color: var(--mj-status-error); font-weight: 600; }\n.stat-total[_ngcontent-%COMP%] { color: var(--mj-text-muted); margin-left: auto; }\n\n\n\n.job-card-footer[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n padding: 12px 20px;\n border-top: 1px solid var(--mj-bg-surface-sunken);\n background: var(--mj-bg-surface-sunken);\n}\n\n.action-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: transparent;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n cursor: pointer;\n font-size: 0.75rem;\n font-weight: 500;\n color: var(--mj-text-secondary);\n transition: all 0.2s;\n}\n\n.action-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n}\n\n\n\n.slideout-backdrop[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--mj-bg-overlay);\n z-index: 999;\n animation: _ngcontent-%COMP%_fadeInBackdrop 0.2s ease;\n}\n\n@keyframes _ngcontent-%COMP%_fadeInBackdrop {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n.slideout-panel[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n right: -100%;\n height: 100vh;\n background: var(--mj-bg-surface-card);\n box-shadow: var(--mj-shadow-lg);\n z-index: 1000;\n transition: right 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n overflow-y: auto;\n}\n\n.slideout-panel.open[_ngcontent-%COMP%] {\n right: 0;\n}\n\n.slideout-resize-handle[_ngcontent-%COMP%] {\n position: absolute;\n inset: 0;\n background: rgba(255, 255, 255, 0.95);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10;\n border-radius: 16px;\n backdrop-filter: blur(4px);\n}\n\n.slideout-resize-handle[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.slideout-resize-handle[_ngcontent-%COMP%]:active {\n background: color-mix(in srgb, var(--mj-brand-primary) 50%, transparent);\n}\n\n\n\n.delete-confirm-overlay[_ngcontent-%COMP%] {\n position: absolute;\n inset: 0;\n background: rgba(255, 255, 255, 0.95);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10;\n border-radius: 16px;\n backdrop-filter: blur(4px);\n}\n\n.delete-confirm-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n padding: 24px;\n text-align: center;\n}\n\n.delete-warn-icon[_ngcontent-%COMP%] {\n font-size: 1.5rem;\n color: var(--mj-status-error);\n}\n\n.delete-confirm-text[_ngcontent-%COMP%] {\n font-size: 0.85rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.delete-confirm-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n margin-top: 4px;\n}\n\n.delete-confirm-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 16px;\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n border: none;\n border-radius: 8px;\n cursor: pointer;\n font-size: 0.8rem;\n font-weight: 600;\n transition: background 0.2s;\n}\n\n.delete-confirm-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-status-error-text);\n}\n\n.delete-confirm-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.7;\n cursor: not-allowed;\n}\n\n.delete-cancel-btn[_ngcontent-%COMP%] {\n padding: 6px 16px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n cursor: pointer;\n font-size: 0.8rem;\n font-weight: 500;\n transition: all 0.2s;\n}\n\n.delete-cancel-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n}\n\n\n\n.action-btn-danger[_ngcontent-%COMP%] {\n margin-left: auto;\n color: var(--mj-status-error);\n border-color: var(--mj-status-error-border);\n}\n\n.action-btn-danger[_ngcontent-%COMP%]:hover {\n background: var(--mj-status-error-bg);\n border-color: var(--mj-status-error);\n color: var(--mj-status-error-text);\n}\n\n\n\n@media (max-width: 1024px) {\n .jobs-grid[_ngcontent-%COMP%] {\n grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));\n }\n}\n\n@media (max-width: 768px) {\n .jobs-toolbar[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: stretch;\n }\n .toolbar-right[_ngcontent-%COMP%] {\n justify-content: space-between;\n }\n .jobs-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n .search-box[_ngcontent-%COMP%] {\n min-width: auto;\n flex: 1;\n }\n}"], changeDetection: 0 });
|
|
560
614
|
}
|
|
561
615
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SchedulingJobsComponent, [{
|
|
562
616
|
type: Component,
|
|
563
|
-
args: [{ standalone: false, selector: 'app-scheduling-jobs', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"jobs-container\">\n <!-- Toolbar -->\n <div class=\"jobs-toolbar\">\n <div class=\"toolbar-left\">\n <div class=\"search-box\">\n <i class=\"fa-solid fa-search\"></i>\n <input type=\"text\"\n placeholder=\"Search jobs...\"\n [value]=\"SearchTerm\"\n (input)=\"OnSearchChange($any($event.target).value)\" />\n </div>\n <select class=\"filter-select\" [value]=\"StatusFilter\" (change)=\"OnStatusFilterChange($any($event.target).value)\">\n <option value=\"\">All Statuses</option>\n @for (s of StatusOptions.slice(1); track s) {\n <option [value]=\"s\">{{s}}</option>\n }\n </select>\n <select class=\"filter-select\" [value]=\"TypeFilter\" (change)=\"OnTypeFilterChange($any($event.target).value)\">\n <option value=\"\">All Types</option>\n @for (t of TypeOptions.slice(1); track t) {\n <option [value]=\"t\">{{t}}</option>\n }\n </select>\n </div>\n <div class=\"toolbar-right\">\n <span class=\"result-count\">{{FilteredJobs.length}} of {{Jobs.length}} jobs</span>\n <button mjButton variant=\"secondary\" (click)=\"Refresh()\">\n <i class=\"fa-solid fa-arrows-rotate\"></i> Refresh\n </button>\n <button class=\"primary-btn\" (click)=\"OpenCreateSlideout()\">\n <i class=\"fa-solid fa-plus\"></i> New Job\n </button>\n </div>\n </div>\n\n <!-- Loading -->\n @if (IsLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading jobs...\" size=\"medium\"></mj-loading>\n </div>\n }\n\n <!-- Empty State -->\n @if (!IsLoading && FilteredJobs.length === 0) {\n <div class=\"empty-state\">\n <div class=\"empty-icon\">\n <i class=\"fa-solid fa-calendar-xmark\"></i>\n </div>\n <h3>No jobs found</h3>\n @if (SearchTerm || StatusFilter || TypeFilter) {\n <p>Try adjusting your filters</p>\n }\n @if (!SearchTerm && !StatusFilter && !TypeFilter) {\n <p>Create your first scheduled job to get started</p>\n }\n @if (!SearchTerm && !StatusFilter && !TypeFilter) {\n <button class=\"primary-btn\" (click)=\"OpenCreateSlideout()\">\n <i class=\"fa-solid fa-plus\"></i> Create Job\n </button>\n }\n </div>\n }\n\n <!-- Job Cards Grid -->\n @if (!IsLoading && FilteredJobs.length > 0) {\n <div class=\"jobs-grid\">\n @for (job of FilteredJobs; track job) {\n <div\n class=\"job-card\"\n (click)=\"OpenEditSlideout(job)\">\n <!-- Card Header -->\n <div class=\"job-card-header\">\n <div class=\"job-card-title\">\n <i [class]=\"GetTypeIcon(job.jobType)\" class=\"type-icon\"></i>\n <span class=\"job-name\">{{job.jobName}}</span>\n </div>\n <span class=\"status-chip\" [ngClass]=\"GetStatusClass(job.status)\">{{job.status}}</span>\n </div>\n <!-- Card Body -->\n <div class=\"job-card-body\">\n @if (job.description) {\n <div class=\"job-description\">{{job.description}}</div>\n }\n <div class=\"job-meta-grid\">\n <div class=\"meta-item\">\n <span class=\"meta-label\">Type</span>\n <span class=\"meta-value\">{{job.jobType}}</span>\n </div>\n <div class=\"meta-item\">\n <span class=\"meta-label\">Schedule</span>\n <span class=\"meta-value mono\">{{job.cronExpression}}</span>\n </div>\n <div class=\"meta-item\">\n <span class=\"meta-label\">Last Run</span>\n <span class=\"meta-value\">{{FormatDate(job.lastRunAt)}}</span>\n </div>\n <div class=\"meta-item\">\n <span class=\"meta-label\">Next Run</span>\n <span class=\"meta-value\">{{FormatDate(job.nextRunAt)}}</span>\n </div>\n </div>\n <!-- Success Rate Bar -->\n <div class=\"success-section\">\n <div class=\"success-header\">\n <span class=\"success-label\">Success Rate</span>\n <span class=\"success-value\" [style.color]=\"GetSuccessRateColor(job.successRate)\">\n {{FormatPercentage(job.successRate)}}\n </span>\n </div>\n <div class=\"success-bar-track\">\n <div class=\"success-bar-fill\"\n [style.width]=\"(job.successRate * 100) + '%'\"\n [style.background]=\"GetSuccessRateColor(job.successRate)\">\n </div>\n </div>\n <div class=\"run-stats\">\n <span class=\"stat-success\"><i class=\"fa-solid fa-check\"></i> {{job.successCount}}</span>\n <span class=\"stat-failure\"><i class=\"fa-solid fa-xmark\"></i> {{job.failureCount}}</span>\n <span class=\"stat-total\">{{job.totalRuns}} total</span>\n </div>\n </div>\n </div>\n <!-- Delete confirmation overlay -->\n @if (IsDeleteConfirming(job.jobId)) {\n <div class=\"delete-confirm-overlay\" (click)=\"$event.stopPropagation()\">\n <div class=\"delete-confirm-content\">\n <i class=\"fa-solid fa-triangle-exclamation delete-warn-icon\"></i>\n <span class=\"delete-confirm-text\">Delete this scheduled job?</span>\n <div class=\"delete-confirm-actions\">\n <button class=\"delete-confirm-btn\" [disabled]=\"IsDeleting\" (click)=\"ConfirmDelete(job.jobId, $event)\">\n @if (IsDeleting) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Deleting...\n } @else {\n Delete\n }\n </button>\n <button class=\"delete-cancel-btn\" (click)=\"CancelDelete($event)\">Cancel</button>\n </div>\n </div>\n </div>\n }\n <!-- Card Footer -->\n <div class=\"job-card-footer\">\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"ToggleJobStatus(job, $event)\">\n <i [class]=\"job.status === 'Active' ? 'fa-solid fa-pause' : 'fa-solid fa-play'\"></i>\n {{job.status === 'Active' ? 'Pause' : 'Resume'}}\n </button>\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"OpenEntityRecord(job); $event.stopPropagation()\">\n <i class=\"fa-solid fa-up-right-from-square\"></i>\n Full Details\n </button>\n <button mjButton variant=\"danger\" size=\"sm\" (click)=\"ShowDeleteConfirm(job, $event)\">\n <i class=\"fa-solid fa-trash-can\"></i>\n Delete\n </button>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Slideout Panel -->\n <mj-scheduled-job-slide-panel\n [IsOpen]=\"SlideoutOpen\"\n [ScheduledJobID]=\"SelectedJob?.jobId ?? null\"\n (Close)=\"CloseSlideout()\"\n (Saved)=\"OnSlideoutSaved()\"\n (Deleted)=\"OnSlideoutSaved()\">\n </mj-scheduled-job-slide-panel>\n</div>\n", styles: [".jobs-container {\n display: flex;\n flex-direction: column;\n gap: 20px;\n position: relative;\n}\n\n/* \u2500\u2500 Toolbar \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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.jobs-toolbar {\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-wrap: wrap;\n gap: 12px;\n}\n\n.toolbar-left {\n display: flex;\n gap: 8px;\n align-items: center;\n flex-wrap: wrap;\n}\n\n.toolbar-right {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.search-box {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n min-width: 240px;\n transition: border-color 0.2s;\n}\n\n.search-box:focus-within {\n border-color: var(--mj-brand-primary);\n box-shadow: var(--mj-shadow-sm);\n}\n\n.search-box i {\n color: var(--mj-text-muted);\n font-size: 0.85rem;\n}\n\n.search-box input {\n border: none;\n outline: none;\n background: transparent;\n font-size: 0.85rem;\n color: var(--mj-text-primary);\n width: 100%;\n}\n\n.filter-select {\n padding: 8px 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n font-size: 0.85rem;\n color: var(--mj-text-secondary);\n cursor: pointer;\n outline: none;\n transition: border-color 0.2s;\n}\n\n.filter-select:focus {\n border-color: var(--mj-brand-primary);\n}\n\n.result-count {\n font-size: 0.8rem;\n color: var(--mj-text-muted);\n white-space: nowrap;\n}\n\n.control-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n cursor: pointer;\n font-size: 0.8rem;\n font-weight: 500;\n color: var(--mj-text-secondary);\n transition: all 0.2s ease;\n}\n\n.control-btn:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n}\n\n.primary-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 20px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: none;\n border-radius: 10px;\n cursor: pointer;\n font-size: 0.8rem;\n font-weight: 600;\n transition: all 0.2s ease;\n}\n\n.primary-btn:hover {\n transform: translateY(-1px);\n box-shadow: var(--mj-shadow-md);\n}\n\n/* \u2500\u2500 Loading & Empty \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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.loading-container {\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 300px;\n}\n\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 64px 24px;\n background: var(--mj-bg-surface-card);\n border-radius: 16px;\n border: 2px dashed var(--mj-border-default);\n text-align: center;\n}\n\n.empty-icon {\n width: 80px;\n height: 80px;\n border-radius: 50%;\n background: var(--mj-bg-surface-sunken);\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 20px;\n}\n\n.empty-icon i {\n font-size: 2rem;\n color: var(--mj-text-muted);\n}\n\n.empty-state h3 {\n font-size: 1.1rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0 0 8px;\n}\n\n.empty-state p {\n color: var(--mj-text-secondary);\n margin: 0 0 16px;\n font-size: 0.9rem;\n}\n\n/* \u2500\u2500 Job Cards Grid \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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.jobs-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(360px, 1fr));\n gap: 16px;\n}\n\n.job-card {\n position: relative;\n background: var(--mj-bg-surface-card);\n border-radius: 16px;\n border: 1px solid var(--mj-border-default);\n box-shadow: var(--mj-shadow-sm);\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.job-card:hover {\n transform: translateY(-2px);\n box-shadow: var(--mj-shadow-lg);\n border-color: var(--mj-brand-primary);\n}\n\n/* Card Header */\n.job-card-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.job-card-title {\n display: flex;\n align-items: center;\n gap: 10px;\n flex: 1;\n min-width: 0;\n}\n\n.type-icon {\n color: var(--mj-brand-primary);\n font-size: 1rem;\n flex-shrink: 0;\n}\n\n.job-name {\n font-weight: 700;\n color: var(--mj-text-primary);\n font-size: 0.9rem;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n line-height: 1.3;\n}\n\n.status-chip {\n font-size: 0.7rem;\n font-weight: 700;\n padding: 3px 10px;\n border-radius: 12px;\n flex-shrink: 0;\n margin-left: 8px;\n}\n\n.status-active { background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface)); color: var(--mj-status-success); }\n.status-paused { background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface)); color: var(--mj-status-warning); }\n.status-disabled { background: var(--mj-bg-surface-sunken); color: var(--mj-text-secondary); }\n.status-pending { background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface)); color: var(--mj-brand-primary); }\n.status-expired { background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface)); color: var(--mj-status-error); }\n\n/* Card Body */\n.job-card-body {\n padding: 16px 20px;\n flex: 1;\n}\n\n.job-description {\n font-size: 0.8rem;\n color: var(--mj-text-secondary);\n margin-bottom: 12px;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n line-height: 1.4;\n}\n\n.job-meta-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 8px;\n margin-bottom: 16px;\n}\n\n.meta-item {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.meta-label {\n font-size: 0.65rem;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n}\n\n.meta-value {\n font-size: 0.8rem;\n color: var(--mj-text-primary);\n font-weight: 500;\n}\n\n.meta-value.mono {\n font-family: 'SFMono-Regular', Consolas, monospace;\n font-size: 0.75rem;\n}\n\n/* Success Rate */\n.success-section {\n padding-top: 12px;\n border-top: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.success-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 6px;\n}\n\n.success-label {\n font-size: 0.75rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.success-value {\n font-size: 0.85rem;\n font-weight: 800;\n}\n\n.success-bar-track {\n height: 6px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 3px;\n overflow: hidden;\n}\n\n.success-bar-fill {\n height: 100%;\n border-radius: 3px;\n transition: width 0.5s ease;\n}\n\n.run-stats {\n display: flex;\n gap: 12px;\n margin-top: 8px;\n font-size: 0.75rem;\n}\n\n.stat-success { color: var(--mj-status-success); font-weight: 600; }\n.stat-failure { color: var(--mj-status-error); font-weight: 600; }\n.stat-total { color: var(--mj-text-muted); margin-left: auto; }\n\n/* Card Footer */\n.job-card-footer {\n display: flex;\n gap: 8px;\n padding: 12px 20px;\n border-top: 1px solid var(--mj-bg-surface-sunken);\n background: var(--mj-bg-surface-sunken);\n}\n\n.action-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: transparent;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n cursor: pointer;\n font-size: 0.75rem;\n font-weight: 500;\n color: var(--mj-text-secondary);\n transition: all 0.2s;\n}\n\n.action-btn:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n}\n\n/* \u2500\u2500 Slideout Panel \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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.slideout-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--mj-bg-overlay);\n z-index: 999;\n animation: fadeInBackdrop 0.2s ease;\n}\n\n@keyframes fadeInBackdrop {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n.slideout-panel {\n position: fixed;\n top: 0;\n right: -100%;\n height: 100vh;\n background: var(--mj-bg-surface-card);\n box-shadow: var(--mj-shadow-lg);\n z-index: 1000;\n transition: right 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n overflow-y: auto;\n}\n\n.slideout-panel.open {\n right: 0;\n}\n\n.slideout-resize-handle {\n position: absolute;\n inset: 0;\n background: rgba(255, 255, 255, 0.95);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10;\n border-radius: 16px;\n backdrop-filter: blur(4px);\n}\n\n.slideout-resize-handle:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.slideout-resize-handle:active {\n background: color-mix(in srgb, var(--mj-brand-primary) 50%, transparent);\n}\n\n/* \u2500\u2500 Delete Confirmation Overlay \u2500\u2500\u2500\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.delete-confirm-overlay {\n position: absolute;\n inset: 0;\n background: rgba(255, 255, 255, 0.95);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10;\n border-radius: 16px;\n backdrop-filter: blur(4px);\n}\n\n.delete-confirm-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n padding: 24px;\n text-align: center;\n}\n\n.delete-warn-icon {\n font-size: 1.5rem;\n color: var(--mj-status-error);\n}\n\n.delete-confirm-text {\n font-size: 0.85rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.delete-confirm-actions {\n display: flex;\n gap: 8px;\n margin-top: 4px;\n}\n\n.delete-confirm-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 16px;\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n border: none;\n border-radius: 8px;\n cursor: pointer;\n font-size: 0.8rem;\n font-weight: 600;\n transition: background 0.2s;\n}\n\n.delete-confirm-btn:hover:not(:disabled) {\n background: var(--mj-status-error-text);\n}\n\n.delete-confirm-btn:disabled {\n opacity: 0.7;\n cursor: not-allowed;\n}\n\n.delete-cancel-btn {\n padding: 6px 16px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n cursor: pointer;\n font-size: 0.8rem;\n font-weight: 500;\n transition: all 0.2s;\n}\n\n.delete-cancel-btn:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n}\n\n/* \u2500\u2500 Danger Action Button \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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.action-btn-danger {\n margin-left: auto;\n color: var(--mj-status-error);\n border-color: var(--mj-status-error-border);\n}\n\n.action-btn-danger:hover {\n background: var(--mj-status-error-bg);\n border-color: var(--mj-status-error);\n color: var(--mj-status-error-text);\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 .jobs-grid {\n grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));\n }\n}\n\n@media (max-width: 768px) {\n .jobs-toolbar {\n flex-direction: column;\n align-items: stretch;\n }\n .toolbar-right {\n justify-content: space-between;\n }\n .jobs-grid {\n grid-template-columns: 1fr;\n }\n .search-box {\n min-width: auto;\n flex: 1;\n }\n}\n"] }]
|
|
617
|
+
args: [{ standalone: false, selector: 'app-scheduling-jobs', changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (HideToolbar) {\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n} @else {\n <mj-page-layout>\n <mj-page-header\n Title=\"Scheduled Jobs\"\n Icon=\"fa-solid fa-calendar-check\"\n Subtitle=\"Configure and manage scheduled jobs\">\n <div meta>\n <mj-stat-badge [Count]=\"FilteredJobs.length\" [Total]=\"Jobs.length\" Label=\"jobs\"></mj-stat-badge>\n </div>\n <div actions>\n <mj-filter-popover\n [ActiveCount]=\"ActiveFilterCount\"\n [ShowClearAll]=\"ActiveFilterCount > 0\"\n (ClearAllRequested)=\"ResetFilters()\">\n <mj-filter-panel\n [Fields]=\"JobsFilterFields\"\n [Values]=\"JobsFilterValues\"\n (ValuesChange)=\"OnFilterValuesChange($event)\"\n (Reset)=\"ResetFilters()\">\n </mj-filter-panel>\n </mj-filter-popover>\n <mj-refresh-button (Clicked)=\"Refresh()\"></mj-refresh-button>\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"OpenCreateSlideout()\">\n <i class=\"fa-solid fa-plus\"></i> New Job\n </button>\n </div>\n <div toolbar>\n <mj-page-search\n Placeholder=\"Search jobs...\"\n [Value]=\"SearchTerm\"\n (ValueChange)=\"OnSearchChange($event)\">\n </mj-page-search>\n </div>\n </mj-page-header>\n <mj-page-body>\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </mj-page-body>\n </mj-page-layout>\n}\n\n<ng-template #content>\n<div class=\"jobs-container\">\n\n <!-- Loading -->\n @if (IsLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading jobs...\" size=\"medium\"></mj-loading>\n </div>\n }\n\n <!-- Empty State -->\n @if (!IsLoading && FilteredJobs.length === 0) {\n <div class=\"empty-state\">\n <div class=\"empty-icon\">\n <i class=\"fa-solid fa-calendar-xmark\"></i>\n </div>\n <h3>No jobs found</h3>\n @if (SearchTerm || StatusFilter || TypeFilter) {\n <p>Try adjusting your filters</p>\n }\n @if (!SearchTerm && !StatusFilter && !TypeFilter) {\n <p>Create your first scheduled job to get started</p>\n }\n @if (!SearchTerm && !StatusFilter && !TypeFilter) {\n <button class=\"primary-btn\" (click)=\"OpenCreateSlideout()\">\n <i class=\"fa-solid fa-plus\"></i> Create Job\n </button>\n }\n </div>\n }\n\n <!-- Job Cards Grid -->\n @if (!IsLoading && FilteredJobs.length > 0) {\n <div class=\"jobs-grid\">\n @for (job of FilteredJobs; track job) {\n <div\n class=\"job-card\"\n (click)=\"OpenEditSlideout(job)\">\n <!-- Card Header -->\n <div class=\"job-card-header\">\n <div class=\"job-card-title\">\n <i [class]=\"GetTypeIcon(job.jobType)\" class=\"type-icon\"></i>\n <span class=\"job-name\">{{job.jobName}}</span>\n </div>\n <span class=\"status-chip\" [ngClass]=\"GetStatusClass(job.status)\">{{job.status}}</span>\n </div>\n <!-- Card Body -->\n <div class=\"job-card-body\">\n @if (job.description) {\n <div class=\"job-description\">{{job.description}}</div>\n }\n <div class=\"job-meta-grid\">\n <div class=\"meta-item\">\n <span class=\"meta-label\">Type</span>\n <span class=\"meta-value\">{{job.jobType}}</span>\n </div>\n <div class=\"meta-item\">\n <span class=\"meta-label\">Schedule</span>\n <span class=\"meta-value mono\">{{job.cronExpression}}</span>\n </div>\n <div class=\"meta-item\">\n <span class=\"meta-label\">Last Run</span>\n <span class=\"meta-value\">{{FormatDate(job.lastRunAt)}}</span>\n </div>\n <div class=\"meta-item\">\n <span class=\"meta-label\">Next Run</span>\n <span class=\"meta-value\">{{FormatDate(job.nextRunAt)}}</span>\n </div>\n </div>\n <!-- Success Rate Bar -->\n <div class=\"success-section\">\n <div class=\"success-header\">\n <span class=\"success-label\">Success Rate</span>\n <span class=\"success-value\" [style.color]=\"GetSuccessRateColor(job.successRate)\">\n {{FormatPercentage(job.successRate)}}\n </span>\n </div>\n <div class=\"success-bar-track\">\n <div class=\"success-bar-fill\"\n [style.width]=\"(job.successRate * 100) + '%'\"\n [style.background]=\"GetSuccessRateColor(job.successRate)\">\n </div>\n </div>\n <div class=\"run-stats\">\n <span class=\"stat-success\"><i class=\"fa-solid fa-check\"></i> {{job.successCount}}</span>\n <span class=\"stat-failure\"><i class=\"fa-solid fa-xmark\"></i> {{job.failureCount}}</span>\n <span class=\"stat-total\">{{job.totalRuns}} total</span>\n </div>\n </div>\n </div>\n <!-- Delete confirmation overlay -->\n @if (IsDeleteConfirming(job.jobId)) {\n <div class=\"delete-confirm-overlay\" (click)=\"$event.stopPropagation()\">\n <div class=\"delete-confirm-content\">\n <i class=\"fa-solid fa-triangle-exclamation delete-warn-icon\"></i>\n <span class=\"delete-confirm-text\">Delete this scheduled job?</span>\n <div class=\"delete-confirm-actions\">\n <button class=\"delete-confirm-btn\" [disabled]=\"IsDeleting\" (click)=\"ConfirmDelete(job.jobId, $event)\">\n @if (IsDeleting) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Deleting...\n } @else {\n Delete\n }\n </button>\n <button class=\"delete-cancel-btn\" (click)=\"CancelDelete($event)\">Cancel</button>\n </div>\n </div>\n </div>\n }\n <!-- Card Footer -->\n <div class=\"job-card-footer\">\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"ToggleJobStatus(job, $event)\">\n <i [class]=\"job.status === 'Active' ? 'fa-solid fa-pause' : 'fa-solid fa-play'\"></i>\n {{job.status === 'Active' ? 'Pause' : 'Resume'}}\n </button>\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"OpenEntityRecord(job); $event.stopPropagation()\">\n <i class=\"fa-solid fa-up-right-from-square\"></i>\n Full Details\n </button>\n <button mjButton variant=\"danger\" size=\"sm\" (click)=\"ShowDeleteConfirm(job, $event)\">\n <i class=\"fa-solid fa-trash-can\"></i>\n Delete\n </button>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Slideout Panel -->\n <mj-scheduled-job-slide-panel\n [IsOpen]=\"SlideoutOpen\"\n [ScheduledJobID]=\"SelectedJob?.jobId ?? null\"\n (Close)=\"CloseSlideout()\"\n (Saved)=\"OnSlideoutSaved()\"\n (Deleted)=\"OnSlideoutSaved()\">\n </mj-scheduled-job-slide-panel>\n</div>\n</ng-template>\n", styles: [".jobs-container {\n display: flex;\n flex-direction: column;\n gap: 20px;\n position: relative;\n}\n\n/* \u2500\u2500 Toolbar \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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.jobs-toolbar {\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-wrap: wrap;\n gap: 12px;\n}\n\n.toolbar-left {\n display: flex;\n gap: 8px;\n align-items: center;\n flex-wrap: wrap;\n}\n\n.toolbar-right {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.search-box {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n min-width: 240px;\n transition: border-color 0.2s;\n}\n\n.search-box:focus-within {\n border-color: var(--mj-brand-primary);\n box-shadow: var(--mj-shadow-sm);\n}\n\n.search-box i {\n color: var(--mj-text-muted);\n font-size: 0.85rem;\n}\n\n.search-box input {\n border: none;\n outline: none;\n background: transparent;\n font-size: 0.85rem;\n color: var(--mj-text-primary);\n width: 100%;\n}\n\n.filter-select {\n padding: 8px 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n font-size: 0.85rem;\n color: var(--mj-text-secondary);\n cursor: pointer;\n outline: none;\n transition: border-color 0.2s;\n}\n\n.filter-select:focus {\n border-color: var(--mj-brand-primary);\n}\n\n.result-count {\n font-size: 0.8rem;\n color: var(--mj-text-muted);\n white-space: nowrap;\n}\n\n.control-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n cursor: pointer;\n font-size: 0.8rem;\n font-weight: 500;\n color: var(--mj-text-secondary);\n transition: all 0.2s ease;\n}\n\n.control-btn:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n}\n\n.primary-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 20px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: none;\n border-radius: 10px;\n cursor: pointer;\n font-size: 0.8rem;\n font-weight: 600;\n transition: all 0.2s ease;\n}\n\n.primary-btn:hover {\n transform: translateY(-1px);\n box-shadow: var(--mj-shadow-md);\n}\n\n/* \u2500\u2500 Loading & Empty \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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.loading-container {\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 300px;\n}\n\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 64px 24px;\n background: var(--mj-bg-surface-card);\n border-radius: 16px;\n border: 2px dashed var(--mj-border-default);\n text-align: center;\n}\n\n.empty-icon {\n width: 80px;\n height: 80px;\n border-radius: 50%;\n background: var(--mj-bg-surface-sunken);\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 20px;\n}\n\n.empty-icon i {\n font-size: 2rem;\n color: var(--mj-text-muted);\n}\n\n.empty-state h3 {\n font-size: 1.1rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0 0 8px;\n}\n\n.empty-state p {\n color: var(--mj-text-secondary);\n margin: 0 0 16px;\n font-size: 0.9rem;\n}\n\n/* \u2500\u2500 Job Cards Grid \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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.jobs-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(360px, 1fr));\n gap: 16px;\n}\n\n.job-card {\n position: relative;\n background: var(--mj-bg-surface-card);\n border-radius: 16px;\n border: 1px solid var(--mj-border-default);\n box-shadow: var(--mj-shadow-sm);\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.job-card:hover {\n transform: translateY(-2px);\n box-shadow: var(--mj-shadow-lg);\n border-color: var(--mj-brand-primary);\n}\n\n/* Card Header */\n.job-card-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.job-card-title {\n display: flex;\n align-items: center;\n gap: 10px;\n flex: 1;\n min-width: 0;\n}\n\n.type-icon {\n color: var(--mj-brand-primary);\n font-size: 1rem;\n flex-shrink: 0;\n}\n\n.job-name {\n font-weight: 700;\n color: var(--mj-text-primary);\n font-size: 0.9rem;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n line-height: 1.3;\n}\n\n.status-chip {\n font-size: 0.7rem;\n font-weight: 700;\n padding: 3px 10px;\n border-radius: 12px;\n flex-shrink: 0;\n margin-left: 8px;\n}\n\n.status-active { background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface)); color: var(--mj-status-success); }\n.status-paused { background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface)); color: var(--mj-status-warning); }\n.status-disabled { background: var(--mj-bg-surface-sunken); color: var(--mj-text-secondary); }\n.status-pending { background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface)); color: var(--mj-brand-primary); }\n.status-expired { background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface)); color: var(--mj-status-error); }\n\n/* Card Body */\n.job-card-body {\n padding: 16px 20px;\n flex: 1;\n}\n\n.job-description {\n font-size: 0.8rem;\n color: var(--mj-text-secondary);\n margin-bottom: 12px;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n line-height: 1.4;\n}\n\n.job-meta-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 8px;\n margin-bottom: 16px;\n}\n\n.meta-item {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.meta-label {\n font-size: 0.65rem;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n}\n\n.meta-value {\n font-size: 0.8rem;\n color: var(--mj-text-primary);\n font-weight: 500;\n}\n\n.meta-value.mono {\n font-family: 'SFMono-Regular', Consolas, monospace;\n font-size: 0.75rem;\n}\n\n/* Success Rate */\n.success-section {\n padding-top: 12px;\n border-top: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.success-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 6px;\n}\n\n.success-label {\n font-size: 0.75rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.success-value {\n font-size: 0.85rem;\n font-weight: 800;\n}\n\n.success-bar-track {\n height: 6px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 3px;\n overflow: hidden;\n}\n\n.success-bar-fill {\n height: 100%;\n border-radius: 3px;\n transition: width 0.5s ease;\n}\n\n.run-stats {\n display: flex;\n gap: 12px;\n margin-top: 8px;\n font-size: 0.75rem;\n}\n\n.stat-success { color: var(--mj-status-success); font-weight: 600; }\n.stat-failure { color: var(--mj-status-error); font-weight: 600; }\n.stat-total { color: var(--mj-text-muted); margin-left: auto; }\n\n/* Card Footer */\n.job-card-footer {\n display: flex;\n gap: 8px;\n padding: 12px 20px;\n border-top: 1px solid var(--mj-bg-surface-sunken);\n background: var(--mj-bg-surface-sunken);\n}\n\n.action-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: transparent;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n cursor: pointer;\n font-size: 0.75rem;\n font-weight: 500;\n color: var(--mj-text-secondary);\n transition: all 0.2s;\n}\n\n.action-btn:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n}\n\n/* \u2500\u2500 Slideout Panel \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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.slideout-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--mj-bg-overlay);\n z-index: 999;\n animation: fadeInBackdrop 0.2s ease;\n}\n\n@keyframes fadeInBackdrop {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n.slideout-panel {\n position: fixed;\n top: 0;\n right: -100%;\n height: 100vh;\n background: var(--mj-bg-surface-card);\n box-shadow: var(--mj-shadow-lg);\n z-index: 1000;\n transition: right 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n overflow-y: auto;\n}\n\n.slideout-panel.open {\n right: 0;\n}\n\n.slideout-resize-handle {\n position: absolute;\n inset: 0;\n background: rgba(255, 255, 255, 0.95);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10;\n border-radius: 16px;\n backdrop-filter: blur(4px);\n}\n\n.slideout-resize-handle:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.slideout-resize-handle:active {\n background: color-mix(in srgb, var(--mj-brand-primary) 50%, transparent);\n}\n\n/* \u2500\u2500 Delete Confirmation Overlay \u2500\u2500\u2500\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.delete-confirm-overlay {\n position: absolute;\n inset: 0;\n background: rgba(255, 255, 255, 0.95);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10;\n border-radius: 16px;\n backdrop-filter: blur(4px);\n}\n\n.delete-confirm-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n padding: 24px;\n text-align: center;\n}\n\n.delete-warn-icon {\n font-size: 1.5rem;\n color: var(--mj-status-error);\n}\n\n.delete-confirm-text {\n font-size: 0.85rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.delete-confirm-actions {\n display: flex;\n gap: 8px;\n margin-top: 4px;\n}\n\n.delete-confirm-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 16px;\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n border: none;\n border-radius: 8px;\n cursor: pointer;\n font-size: 0.8rem;\n font-weight: 600;\n transition: background 0.2s;\n}\n\n.delete-confirm-btn:hover:not(:disabled) {\n background: var(--mj-status-error-text);\n}\n\n.delete-confirm-btn:disabled {\n opacity: 0.7;\n cursor: not-allowed;\n}\n\n.delete-cancel-btn {\n padding: 6px 16px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n cursor: pointer;\n font-size: 0.8rem;\n font-weight: 500;\n transition: all 0.2s;\n}\n\n.delete-cancel-btn:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n}\n\n/* \u2500\u2500 Danger Action Button \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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.action-btn-danger {\n margin-left: auto;\n color: var(--mj-status-error);\n border-color: var(--mj-status-error-border);\n}\n\n.action-btn-danger:hover {\n background: var(--mj-status-error-bg);\n border-color: var(--mj-status-error);\n color: var(--mj-status-error-text);\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 .jobs-grid {\n grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));\n }\n}\n\n@media (max-width: 768px) {\n .jobs-toolbar {\n flex-direction: column;\n align-items: stretch;\n }\n .toolbar-right {\n justify-content: space-between;\n }\n .jobs-grid {\n grid-template-columns: 1fr;\n }\n .search-box {\n min-width: auto;\n flex: 1;\n }\n}\n"] }]
|
|
564
618
|
}], () => [{ type: i1.SchedulingInstrumentationService }, { type: i0.ChangeDetectorRef }], { initialState: [{
|
|
565
619
|
type: Input
|
|
620
|
+
}], HideToolbar: [{
|
|
621
|
+
type: Input
|
|
566
622
|
}], stateChange: [{
|
|
567
623
|
type: Output
|
|
568
624
|
}] }); })();
|
|
569
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SchedulingJobsComponent, { className: "SchedulingJobsComponent", filePath: "src/Scheduling/components/scheduling-jobs.component.ts", lineNumber:
|
|
625
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SchedulingJobsComponent, { className: "SchedulingJobsComponent", filePath: "src/Scheduling/components/scheduling-jobs.component.ts", lineNumber: 21 }); })();
|
|
570
626
|
//# sourceMappingURL=scheduling-jobs.component.js.map
|