@memberjunction/ng-dashboards 5.34.0 → 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.d.ts +4 -0
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.js +812 -784
- 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
|
@@ -10,396 +10,384 @@ import { RunView } from '@memberjunction/core';
|
|
|
10
10
|
import { BaseResourceComponent } from '@memberjunction/ng-shared';
|
|
11
11
|
import { IntegrationDataService, ResolveIntegrationIcon } from '../../services/integration-data.service';
|
|
12
12
|
import * as i0 from "@angular/core";
|
|
13
|
-
import * as i1 from "@memberjunction/ng-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
i0.ɵɵelement(
|
|
17
|
-
|
|
13
|
+
import * as i1 from "@memberjunction/ng-ui-components";
|
|
14
|
+
import * as i2 from "@memberjunction/ng-shared-generic";
|
|
15
|
+
function SchedulesComponent_Conditional_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
16
|
+
i0.ɵɵelement(0, "mj-stat-badge", 8);
|
|
17
|
+
} if (rf & 2) {
|
|
18
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
19
|
+
i0.ɵɵproperty("Count", ctx_r0.LockedCount);
|
|
18
20
|
} }
|
|
19
|
-
function
|
|
20
|
-
i0.ɵɵelementStart(0, "
|
|
21
|
-
i0.ɵɵelement(1, "
|
|
22
|
-
i0.ɵɵ
|
|
21
|
+
function SchedulesComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
22
|
+
i0.ɵɵelementStart(0, "div", 1);
|
|
23
|
+
i0.ɵɵelement(1, "mj-stat-badge", 6)(2, "mj-stat-badge", 7);
|
|
24
|
+
i0.ɵɵconditionalCreate(3, SchedulesComponent_Conditional_2_Conditional_3_Template, 1, 1, "mj-stat-badge", 8);
|
|
23
25
|
i0.ɵɵelementEnd();
|
|
24
26
|
} if (rf & 2) {
|
|
25
|
-
const
|
|
26
|
-
i0.ɵɵadvance(
|
|
27
|
-
i0.ɵɵ
|
|
27
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
28
|
+
i0.ɵɵadvance();
|
|
29
|
+
i0.ɵɵproperty("Count", ctx_r0.Schedules.length)("Label", ctx_r0.Schedules.length === 1 ? "integration" : "integrations");
|
|
30
|
+
i0.ɵɵadvance();
|
|
31
|
+
i0.ɵɵproperty("Count", ctx_r0.ScheduledCount);
|
|
32
|
+
i0.ɵɵadvance();
|
|
33
|
+
i0.ɵɵconditional(ctx_r0.LockedCount > 0 ? 3 : -1);
|
|
28
34
|
} }
|
|
29
|
-
function
|
|
30
|
-
i0.ɵɵelementStart(0, "
|
|
35
|
+
function SchedulesComponent_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
36
|
+
i0.ɵɵelementStart(0, "div", 4);
|
|
37
|
+
i0.ɵɵelement(1, "mj-loading", 9);
|
|
38
|
+
i0.ɵɵelementEnd();
|
|
39
|
+
} }
|
|
40
|
+
function SchedulesComponent_Conditional_7_Conditional_1_For_9_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
41
|
+
i0.ɵɵelementStart(0, "span", 22);
|
|
31
42
|
i0.ɵɵtext(1);
|
|
32
43
|
i0.ɵɵelementEnd();
|
|
33
44
|
} if (rf & 2) {
|
|
34
|
-
const
|
|
35
|
-
const
|
|
36
|
-
i0.ɵɵstyleProp("left",
|
|
45
|
+
const hour_r2 = i0.ɵɵnextContext().$implicit;
|
|
46
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
47
|
+
i0.ɵɵstyleProp("left", ctx_r0.ComputeTimelinePosition(hour_r2, 0), "%");
|
|
37
48
|
i0.ɵɵadvance();
|
|
38
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
49
|
+
i0.ɵɵtextInterpolate1(" ", hour_r2, ":00 ");
|
|
39
50
|
} }
|
|
40
|
-
function
|
|
41
|
-
i0.ɵɵconditionalCreate(0,
|
|
51
|
+
function SchedulesComponent_Conditional_7_Conditional_1_For_9_Template(rf, ctx) { if (rf & 1) {
|
|
52
|
+
i0.ɵɵconditionalCreate(0, SchedulesComponent_Conditional_7_Conditional_1_For_9_Conditional_0_Template, 2, 3, "span", 21);
|
|
42
53
|
} if (rf & 2) {
|
|
43
|
-
const
|
|
44
|
-
i0.ɵɵconditional(
|
|
54
|
+
const hour_r2 = ctx.$implicit;
|
|
55
|
+
i0.ɵɵconditional(hour_r2 % 4 === 0 ? 0 : -1);
|
|
45
56
|
} }
|
|
46
|
-
function
|
|
47
|
-
i0.ɵɵelement(0, "div",
|
|
57
|
+
function SchedulesComponent_Conditional_7_Conditional_1_For_11_For_5_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
58
|
+
i0.ɵɵelement(0, "div", 30);
|
|
48
59
|
} if (rf & 2) {
|
|
49
|
-
const
|
|
50
|
-
const
|
|
51
|
-
i0.ɵɵstyleProp("left",
|
|
60
|
+
const hour_r3 = i0.ɵɵnextContext().$implicit;
|
|
61
|
+
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
62
|
+
i0.ɵɵstyleProp("left", ctx_r0.ComputeTimelinePosition(hour_r3, 0), "%");
|
|
52
63
|
} }
|
|
53
|
-
function
|
|
54
|
-
i0.ɵɵconditionalCreate(0,
|
|
64
|
+
function SchedulesComponent_Conditional_7_Conditional_1_For_11_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
65
|
+
i0.ɵɵconditionalCreate(0, SchedulesComponent_Conditional_7_Conditional_1_For_11_For_5_Conditional_0_Template, 1, 2, "div", 29);
|
|
55
66
|
} if (rf & 2) {
|
|
56
|
-
const
|
|
57
|
-
i0.ɵɵconditional(
|
|
67
|
+
const hour_r3 = ctx.$implicit;
|
|
68
|
+
i0.ɵɵconditional(hour_r3 % 4 === 0 ? 0 : -1);
|
|
58
69
|
} }
|
|
59
|
-
function
|
|
60
|
-
i0.ɵɵelement(0, "div",
|
|
70
|
+
function SchedulesComponent_Conditional_7_Conditional_1_For_11_For_8_Template(rf, ctx) { if (rf & 1) {
|
|
71
|
+
i0.ɵɵelement(0, "div", 31);
|
|
61
72
|
} if (rf & 2) {
|
|
62
|
-
const
|
|
63
|
-
const
|
|
64
|
-
i0.ɵɵstyleProp("left",
|
|
65
|
-
i0.ɵɵclassProp("timeline-marker-next",
|
|
66
|
-
i0.ɵɵproperty("title",
|
|
73
|
+
const marker_r4 = ctx.$implicit;
|
|
74
|
+
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
75
|
+
i0.ɵɵstyleProp("left", ctx_r0.ComputeTimelinePosition(marker_r4.Hour, marker_r4.Minute), "%");
|
|
76
|
+
i0.ɵɵclassProp("timeline-marker-next", marker_r4.IsNext);
|
|
77
|
+
i0.ɵɵproperty("title", marker_r4.Hour + ":" + ("" + marker_r4.Minute).padStart(2, "0"));
|
|
67
78
|
} }
|
|
68
|
-
function
|
|
69
|
-
i0.ɵɵelementStart(0, "div",
|
|
70
|
-
i0.ɵɵelement(1, "i",
|
|
79
|
+
function SchedulesComponent_Conditional_7_Conditional_1_For_11_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
80
|
+
i0.ɵɵelementStart(0, "div", 27);
|
|
81
|
+
i0.ɵɵelement(1, "i", 32);
|
|
71
82
|
i0.ɵɵelementEnd();
|
|
72
83
|
} }
|
|
73
|
-
function
|
|
74
|
-
i0.ɵɵelementStart(0, "div",
|
|
84
|
+
function SchedulesComponent_Conditional_7_Conditional_1_For_11_Template(rf, ctx) { if (rf & 1) {
|
|
85
|
+
i0.ɵɵelementStart(0, "div", 20)(1, "div", 23);
|
|
75
86
|
i0.ɵɵtext(2);
|
|
76
87
|
i0.ɵɵelementEnd();
|
|
77
|
-
i0.ɵɵelementStart(3, "div",
|
|
78
|
-
i0.ɵɵrepeaterCreate(4,
|
|
79
|
-
i0.ɵɵelement(6, "div",
|
|
80
|
-
i0.ɵɵrepeaterCreate(7,
|
|
81
|
-
i0.ɵɵconditionalCreate(9,
|
|
82
|
-
i0.ɵɵelement(10, "div",
|
|
88
|
+
i0.ɵɵelementStart(3, "div", 24);
|
|
89
|
+
i0.ɵɵrepeaterCreate(4, SchedulesComponent_Conditional_7_Conditional_1_For_11_For_5_Template, 1, 1, null, null, i0.ɵɵcomponentInstance().TrackHour, true);
|
|
90
|
+
i0.ɵɵelement(6, "div", 25);
|
|
91
|
+
i0.ɵɵrepeaterCreate(7, SchedulesComponent_Conditional_7_Conditional_1_For_11_For_8_Template, 1, 5, "div", 26, i0.ɵɵcomponentInstance().TrackMarker, true);
|
|
92
|
+
i0.ɵɵconditionalCreate(9, SchedulesComponent_Conditional_7_Conditional_1_For_11_Conditional_9_Template, 2, 0, "div", 27);
|
|
93
|
+
i0.ɵɵelement(10, "div", 28);
|
|
83
94
|
i0.ɵɵelementEnd()();
|
|
84
95
|
} if (rf & 2) {
|
|
85
|
-
const
|
|
86
|
-
const
|
|
96
|
+
const row_r5 = ctx.$implicit;
|
|
97
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
87
98
|
i0.ɵɵadvance();
|
|
88
|
-
i0.ɵɵproperty("title",
|
|
99
|
+
i0.ɵɵproperty("title", row_r5.IntegrationName);
|
|
89
100
|
i0.ɵɵadvance();
|
|
90
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
101
|
+
i0.ɵɵtextInterpolate1(" ", row_r5.IntegrationName, " ");
|
|
91
102
|
i0.ɵɵadvance(2);
|
|
92
|
-
i0.ɵɵrepeater(
|
|
103
|
+
i0.ɵɵrepeater(ctx_r0.TimelineHours);
|
|
93
104
|
i0.ɵɵadvance(3);
|
|
94
|
-
i0.ɵɵrepeater(
|
|
105
|
+
i0.ɵɵrepeater(row_r5.Markers);
|
|
95
106
|
i0.ɵɵadvance(2);
|
|
96
|
-
i0.ɵɵconditional(
|
|
107
|
+
i0.ɵɵconditional(row_r5.IsLocked ? 9 : -1);
|
|
97
108
|
} }
|
|
98
|
-
function
|
|
99
|
-
i0.ɵɵelementStart(0, "div",
|
|
100
|
-
i0.ɵɵelement(2, "i",
|
|
109
|
+
function SchedulesComponent_Conditional_7_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
110
|
+
i0.ɵɵelementStart(0, "div", 10)(1, "div", 14);
|
|
111
|
+
i0.ɵɵelement(2, "i", 15);
|
|
101
112
|
i0.ɵɵtext(3, " Next 24 Hours ");
|
|
102
113
|
i0.ɵɵelementEnd();
|
|
103
|
-
i0.ɵɵelementStart(4, "div",
|
|
104
|
-
i0.ɵɵelement(6, "div",
|
|
105
|
-
i0.ɵɵelementStart(7, "div",
|
|
106
|
-
i0.ɵɵrepeaterCreate(8,
|
|
114
|
+
i0.ɵɵelementStart(4, "div", 16)(5, "div", 17);
|
|
115
|
+
i0.ɵɵelement(6, "div", 18);
|
|
116
|
+
i0.ɵɵelementStart(7, "div", 19);
|
|
117
|
+
i0.ɵɵrepeaterCreate(8, SchedulesComponent_Conditional_7_Conditional_1_For_9_Template, 1, 1, null, null, i0.ɵɵcomponentInstance().TrackHour, true);
|
|
107
118
|
i0.ɵɵelementEnd()();
|
|
108
|
-
i0.ɵɵrepeaterCreate(10,
|
|
119
|
+
i0.ɵɵrepeaterCreate(10, SchedulesComponent_Conditional_7_Conditional_1_For_11_Template, 11, 3, "div", 20, i0.ɵɵcomponentInstance().TrackTimelineByID, true);
|
|
109
120
|
i0.ɵɵelementEnd()();
|
|
110
121
|
} if (rf & 2) {
|
|
111
|
-
const
|
|
122
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
112
123
|
i0.ɵɵadvance(8);
|
|
113
|
-
i0.ɵɵrepeater(
|
|
124
|
+
i0.ɵɵrepeater(ctx_r0.TimelineHours);
|
|
114
125
|
i0.ɵɵadvance(2);
|
|
115
|
-
i0.ɵɵrepeater(
|
|
126
|
+
i0.ɵɵrepeater(ctx_r0.TimelineMarkers);
|
|
116
127
|
} }
|
|
117
|
-
function
|
|
118
|
-
i0.ɵɵelementStart(0, "span",
|
|
128
|
+
function SchedulesComponent_Conditional_7_For_4_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
129
|
+
i0.ɵɵelementStart(0, "span", 40);
|
|
119
130
|
i0.ɵɵtext(1, "Active");
|
|
120
131
|
i0.ɵɵelementEnd();
|
|
121
132
|
} }
|
|
122
|
-
function
|
|
123
|
-
i0.ɵɵelementStart(0, "span",
|
|
133
|
+
function SchedulesComponent_Conditional_7_For_4_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
134
|
+
i0.ɵɵelementStart(0, "span", 41);
|
|
124
135
|
i0.ɵɵtext(1, "Inactive");
|
|
125
136
|
i0.ɵɵelementEnd();
|
|
126
137
|
} }
|
|
127
|
-
function
|
|
128
|
-
i0.ɵɵelementStart(0, "span",
|
|
129
|
-
i0.ɵɵelement(1, "i",
|
|
138
|
+
function SchedulesComponent_Conditional_7_For_4_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
139
|
+
i0.ɵɵelementStart(0, "span", 42);
|
|
140
|
+
i0.ɵɵelement(1, "i", 32);
|
|
130
141
|
i0.ɵɵtext(2, " Running ");
|
|
131
142
|
i0.ɵɵelementEnd();
|
|
132
143
|
} }
|
|
133
|
-
function
|
|
134
|
-
const
|
|
135
|
-
i0.ɵɵelementStart(0, "button",
|
|
136
|
-
i0.ɵɵlistener("click", function
|
|
144
|
+
function SchedulesComponent_Conditional_7_For_4_Conditional_19_Conditional_8_For_3_Template(rf, ctx) { if (rf & 1) {
|
|
145
|
+
const _r10 = i0.ɵɵgetCurrentView();
|
|
146
|
+
i0.ɵɵelementStart(0, "button", 65);
|
|
147
|
+
i0.ɵɵlistener("click", function SchedulesComponent_Conditional_7_For_4_Conditional_19_Conditional_8_For_3_Template_button_click_0_listener() { const preset_r11 = i0.ɵɵrestoreView(_r10).$implicit; const schedule_r7 = i0.ɵɵnextContext(3).$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.SetInterval(schedule_r7.ID, preset_r11.Minutes)); });
|
|
137
148
|
i0.ɵɵtext(1);
|
|
138
149
|
i0.ɵɵelementEnd();
|
|
139
150
|
} if (rf & 2) {
|
|
140
|
-
const
|
|
141
|
-
const
|
|
142
|
-
const
|
|
143
|
-
i0.ɵɵclassProp("preset-btn-active",
|
|
151
|
+
const preset_r11 = ctx.$implicit;
|
|
152
|
+
const schedule_r7 = i0.ɵɵnextContext(3).$implicit;
|
|
153
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
154
|
+
i0.ɵɵclassProp("preset-btn-active", ctx_r0.IsIntervalSelected(schedule_r7, preset_r11.Minutes));
|
|
144
155
|
i0.ɵɵadvance();
|
|
145
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
156
|
+
i0.ɵɵtextInterpolate1(" ", preset_r11.Label, " ");
|
|
146
157
|
} }
|
|
147
|
-
function
|
|
148
|
-
const
|
|
149
|
-
i0.ɵɵelementStart(0, "div",
|
|
150
|
-
i0.ɵɵrepeaterCreate(2,
|
|
158
|
+
function SchedulesComponent_Conditional_7_For_4_Conditional_19_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
159
|
+
const _r9 = i0.ɵɵgetCurrentView();
|
|
160
|
+
i0.ɵɵelementStart(0, "div", 44)(1, "div", 60);
|
|
161
|
+
i0.ɵɵrepeaterCreate(2, SchedulesComponent_Conditional_7_For_4_Conditional_19_Conditional_8_For_3_Template, 2, 3, "button", 61, i0.ɵɵcomponentInstance().TrackPresetByMinutes, true);
|
|
151
162
|
i0.ɵɵelementEnd();
|
|
152
|
-
i0.ɵɵelementStart(4, "div",
|
|
153
|
-
i0.ɵɵlistener("change", function
|
|
163
|
+
i0.ɵɵelementStart(4, "div", 62)(5, "input", 63);
|
|
164
|
+
i0.ɵɵlistener("change", function SchedulesComponent_Conditional_7_For_4_Conditional_19_Conditional_8_Template_input_change_5_listener($event) { i0.ɵɵrestoreView(_r9); const schedule_r7 = i0.ɵɵnextContext(2).$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.SetCustomInterval(schedule_r7.ID, $event)); });
|
|
154
165
|
i0.ɵɵelementEnd();
|
|
155
|
-
i0.ɵɵelementStart(6, "span",
|
|
166
|
+
i0.ɵɵelementStart(6, "span", 64);
|
|
156
167
|
i0.ɵɵtext(7, "min");
|
|
157
168
|
i0.ɵɵelementEnd()()();
|
|
158
169
|
} if (rf & 2) {
|
|
159
|
-
const
|
|
160
|
-
const
|
|
170
|
+
const schedule_r7 = i0.ɵɵnextContext(2).$implicit;
|
|
171
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
161
172
|
i0.ɵɵadvance(2);
|
|
162
|
-
i0.ɵɵrepeater(
|
|
173
|
+
i0.ɵɵrepeater(ctx_r0.IntervalPresets);
|
|
163
174
|
i0.ɵɵadvance(3);
|
|
164
|
-
i0.ɵɵproperty("value",
|
|
175
|
+
i0.ɵɵproperty("value", ctx_r0.GetEffectiveInterval(schedule_r7));
|
|
165
176
|
} }
|
|
166
|
-
function
|
|
167
|
-
const
|
|
168
|
-
i0.ɵɵelementStart(0, "button",
|
|
169
|
-
i0.ɵɵlistener("click", function
|
|
177
|
+
function SchedulesComponent_Conditional_7_For_4_Conditional_19_Conditional_9_For_3_Template(rf, ctx) { if (rf & 1) {
|
|
178
|
+
const _r13 = i0.ɵɵgetCurrentView();
|
|
179
|
+
i0.ɵɵelementStart(0, "button", 65);
|
|
180
|
+
i0.ɵɵlistener("click", function SchedulesComponent_Conditional_7_For_4_Conditional_19_Conditional_9_For_3_Template_button_click_0_listener() { const preset_r14 = i0.ɵɵrestoreView(_r13).$implicit; const schedule_r7 = i0.ɵɵnextContext(3).$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.SetCronExpression(schedule_r7.ID, preset_r14.Expression)); });
|
|
170
181
|
i0.ɵɵtext(1);
|
|
171
182
|
i0.ɵɵelementEnd();
|
|
172
183
|
} if (rf & 2) {
|
|
173
|
-
const
|
|
174
|
-
const
|
|
175
|
-
const
|
|
176
|
-
i0.ɵɵclassProp("preset-btn-active",
|
|
184
|
+
const preset_r14 = ctx.$implicit;
|
|
185
|
+
const schedule_r7 = i0.ɵɵnextContext(3).$implicit;
|
|
186
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
187
|
+
i0.ɵɵclassProp("preset-btn-active", ctx_r0.GetEffectiveCron(schedule_r7) === preset_r14.Expression);
|
|
177
188
|
i0.ɵɵadvance();
|
|
178
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
189
|
+
i0.ɵɵtextInterpolate1(" ", preset_r14.Label, " ");
|
|
179
190
|
} }
|
|
180
|
-
function
|
|
181
|
-
i0.ɵɵelementStart(0, "span",
|
|
191
|
+
function SchedulesComponent_Conditional_7_For_4_Conditional_19_Conditional_9_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
192
|
+
i0.ɵɵelementStart(0, "span", 69);
|
|
182
193
|
i0.ɵɵtext(1);
|
|
183
194
|
i0.ɵɵelementEnd();
|
|
184
195
|
} if (rf & 2) {
|
|
185
|
-
const
|
|
186
|
-
const
|
|
196
|
+
const schedule_r7 = i0.ɵɵnextContext(3).$implicit;
|
|
197
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
187
198
|
i0.ɵɵadvance();
|
|
188
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
199
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r0.GetCronDescription(ctx_r0.GetEffectiveCron(schedule_r7)), " ");
|
|
189
200
|
} }
|
|
190
|
-
function
|
|
191
|
-
const
|
|
192
|
-
i0.ɵɵelementStart(0, "div",
|
|
193
|
-
i0.ɵɵrepeaterCreate(2,
|
|
201
|
+
function SchedulesComponent_Conditional_7_For_4_Conditional_19_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
202
|
+
const _r12 = i0.ɵɵgetCurrentView();
|
|
203
|
+
i0.ɵɵelementStart(0, "div", 44)(1, "div", 66);
|
|
204
|
+
i0.ɵɵrepeaterCreate(2, SchedulesComponent_Conditional_7_For_4_Conditional_19_Conditional_9_For_3_Template, 2, 3, "button", 61, i0.ɵɵcomponentInstance().TrackCronPresetByExpr, true);
|
|
194
205
|
i0.ɵɵelementEnd();
|
|
195
|
-
i0.ɵɵelementStart(4, "div",
|
|
196
|
-
i0.ɵɵlistener("change", function
|
|
206
|
+
i0.ɵɵelementStart(4, "div", 67)(5, "input", 68);
|
|
207
|
+
i0.ɵɵlistener("change", function SchedulesComponent_Conditional_7_For_4_Conditional_19_Conditional_9_Template_input_change_5_listener($event) { i0.ɵɵrestoreView(_r12); const schedule_r7 = i0.ɵɵnextContext(2).$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.OnCronInputChange(schedule_r7.ID, $event)); });
|
|
197
208
|
i0.ɵɵelementEnd();
|
|
198
|
-
i0.ɵɵconditionalCreate(6,
|
|
209
|
+
i0.ɵɵconditionalCreate(6, SchedulesComponent_Conditional_7_For_4_Conditional_19_Conditional_9_Conditional_6_Template, 2, 1, "span", 69);
|
|
199
210
|
i0.ɵɵelementEnd()();
|
|
200
211
|
} if (rf & 2) {
|
|
201
|
-
const
|
|
202
|
-
const
|
|
212
|
+
const schedule_r7 = i0.ɵɵnextContext(2).$implicit;
|
|
213
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
203
214
|
i0.ɵɵadvance(2);
|
|
204
|
-
i0.ɵɵrepeater(
|
|
215
|
+
i0.ɵɵrepeater(ctx_r0.CronPresets);
|
|
205
216
|
i0.ɵɵadvance(3);
|
|
206
|
-
i0.ɵɵproperty("value",
|
|
217
|
+
i0.ɵɵproperty("value", ctx_r0.GetEffectiveCron(schedule_r7) ?? "");
|
|
207
218
|
i0.ɵɵadvance();
|
|
208
|
-
i0.ɵɵconditional(
|
|
219
|
+
i0.ɵɵconditional(ctx_r0.GetEffectiveCron(schedule_r7) ? 6 : -1);
|
|
209
220
|
} }
|
|
210
|
-
function
|
|
211
|
-
const
|
|
212
|
-
i0.ɵɵelementStart(0, "div",
|
|
213
|
-
i0.ɵɵlistener("click", function
|
|
221
|
+
function SchedulesComponent_Conditional_7_For_4_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
222
|
+
const _r8 = i0.ɵɵgetCurrentView();
|
|
223
|
+
i0.ɵɵelementStart(0, "div", 44)(1, "div", 58)(2, "button", 59);
|
|
224
|
+
i0.ɵɵlistener("click", function SchedulesComponent_Conditional_7_For_4_Conditional_19_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r8); const schedule_r7 = i0.ɵɵnextContext().$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.SetScheduleType(schedule_r7.ID, "Manual")); });
|
|
214
225
|
i0.ɵɵtext(3, " Manual ");
|
|
215
226
|
i0.ɵɵelementEnd();
|
|
216
|
-
i0.ɵɵelementStart(4, "button",
|
|
217
|
-
i0.ɵɵlistener("click", function
|
|
227
|
+
i0.ɵɵelementStart(4, "button", 59);
|
|
228
|
+
i0.ɵɵlistener("click", function SchedulesComponent_Conditional_7_For_4_Conditional_19_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r8); const schedule_r7 = i0.ɵɵnextContext().$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.SetScheduleType(schedule_r7.ID, "Interval")); });
|
|
218
229
|
i0.ɵɵtext(5, " Interval ");
|
|
219
230
|
i0.ɵɵelementEnd();
|
|
220
|
-
i0.ɵɵelementStart(6, "button",
|
|
221
|
-
i0.ɵɵlistener("click", function
|
|
231
|
+
i0.ɵɵelementStart(6, "button", 59);
|
|
232
|
+
i0.ɵɵlistener("click", function SchedulesComponent_Conditional_7_For_4_Conditional_19_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r8); const schedule_r7 = i0.ɵɵnextContext().$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.SetScheduleType(schedule_r7.ID, "Cron")); });
|
|
222
233
|
i0.ɵɵtext(7, " Cron ");
|
|
223
234
|
i0.ɵɵelementEnd()()();
|
|
224
|
-
i0.ɵɵconditionalCreate(8,
|
|
225
|
-
i0.ɵɵconditionalCreate(9,
|
|
235
|
+
i0.ɵɵconditionalCreate(8, SchedulesComponent_Conditional_7_For_4_Conditional_19_Conditional_8_Template, 8, 1, "div", 44);
|
|
236
|
+
i0.ɵɵconditionalCreate(9, SchedulesComponent_Conditional_7_For_4_Conditional_19_Conditional_9_Template, 7, 2, "div", 44);
|
|
226
237
|
} if (rf & 2) {
|
|
227
|
-
const
|
|
228
|
-
const
|
|
238
|
+
const schedule_r7 = i0.ɵɵnextContext().$implicit;
|
|
239
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
229
240
|
i0.ɵɵadvance(2);
|
|
230
|
-
i0.ɵɵclassProp("type-pill-active",
|
|
241
|
+
i0.ɵɵclassProp("type-pill-active", ctx_r0.GetEffectiveScheduleType(schedule_r7) === "Manual");
|
|
231
242
|
i0.ɵɵadvance(2);
|
|
232
|
-
i0.ɵɵclassProp("type-pill-active",
|
|
243
|
+
i0.ɵɵclassProp("type-pill-active", ctx_r0.GetEffectiveScheduleType(schedule_r7) === "Interval");
|
|
233
244
|
i0.ɵɵadvance(2);
|
|
234
|
-
i0.ɵɵclassProp("type-pill-active",
|
|
245
|
+
i0.ɵɵclassProp("type-pill-active", ctx_r0.GetEffectiveScheduleType(schedule_r7) === "Cron");
|
|
235
246
|
i0.ɵɵadvance(2);
|
|
236
|
-
i0.ɵɵconditional(
|
|
247
|
+
i0.ɵɵconditional(ctx_r0.GetEffectiveScheduleType(schedule_r7) === "Interval" ? 8 : -1);
|
|
237
248
|
i0.ɵɵadvance();
|
|
238
|
-
i0.ɵɵconditional(
|
|
249
|
+
i0.ɵɵconditional(ctx_r0.GetEffectiveScheduleType(schedule_r7) === "Cron" ? 9 : -1);
|
|
239
250
|
} }
|
|
240
|
-
function
|
|
241
|
-
i0.ɵɵelementStart(0, "span",
|
|
242
|
-
i0.ɵɵelement(1, "i",
|
|
251
|
+
function SchedulesComponent_Conditional_7_For_4_Conditional_35_Template(rf, ctx) { if (rf & 1) {
|
|
252
|
+
i0.ɵɵelementStart(0, "span", 53);
|
|
253
|
+
i0.ɵɵelement(1, "i", 32);
|
|
243
254
|
i0.ɵɵtext(2, " Running ");
|
|
244
255
|
i0.ɵɵelementEnd();
|
|
245
256
|
} }
|
|
246
|
-
function
|
|
247
|
-
i0.ɵɵelementStart(0, "span",
|
|
257
|
+
function SchedulesComponent_Conditional_7_For_4_Conditional_36_Template(rf, ctx) { if (rf & 1) {
|
|
258
|
+
i0.ɵɵelementStart(0, "span", 54);
|
|
248
259
|
i0.ɵɵtext(1, "Idle");
|
|
249
260
|
i0.ɵɵelementEnd();
|
|
250
261
|
} }
|
|
251
|
-
function
|
|
252
|
-
i0.ɵɵelement(0, "i",
|
|
262
|
+
function SchedulesComponent_Conditional_7_For_4_Conditional_38_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
263
|
+
i0.ɵɵelement(0, "i", 32);
|
|
253
264
|
i0.ɵɵtext(1, " Saving... ");
|
|
254
265
|
} }
|
|
255
|
-
function
|
|
256
|
-
i0.ɵɵelement(0, "i",
|
|
266
|
+
function SchedulesComponent_Conditional_7_For_4_Conditional_38_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
267
|
+
i0.ɵɵelement(0, "i", 71);
|
|
257
268
|
i0.ɵɵtext(1, " Save ");
|
|
258
269
|
} }
|
|
259
|
-
function
|
|
260
|
-
const
|
|
261
|
-
i0.ɵɵelementStart(0, "button",
|
|
262
|
-
i0.ɵɵlistener("click", function
|
|
263
|
-
i0.ɵɵconditionalCreate(1,
|
|
270
|
+
function SchedulesComponent_Conditional_7_For_4_Conditional_38_Template(rf, ctx) { if (rf & 1) {
|
|
271
|
+
const _r15 = i0.ɵɵgetCurrentView();
|
|
272
|
+
i0.ɵɵelementStart(0, "button", 70);
|
|
273
|
+
i0.ɵɵlistener("click", function SchedulesComponent_Conditional_7_For_4_Conditional_38_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r15); const schedule_r7 = i0.ɵɵnextContext().$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.SaveSchedule(schedule_r7.ID)); });
|
|
274
|
+
i0.ɵɵconditionalCreate(1, SchedulesComponent_Conditional_7_For_4_Conditional_38_Conditional_1_Template, 2, 0)(2, SchedulesComponent_Conditional_7_For_4_Conditional_38_Conditional_2_Template, 2, 0);
|
|
264
275
|
i0.ɵɵelementEnd();
|
|
265
276
|
} if (rf & 2) {
|
|
266
|
-
const
|
|
267
|
-
const
|
|
268
|
-
i0.ɵɵproperty("disabled",
|
|
277
|
+
const schedule_r7 = i0.ɵɵnextContext().$implicit;
|
|
278
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
279
|
+
i0.ɵɵproperty("disabled", ctx_r0.IsSaving(schedule_r7.ID));
|
|
269
280
|
i0.ɵɵadvance();
|
|
270
|
-
i0.ɵɵconditional(
|
|
281
|
+
i0.ɵɵconditional(ctx_r0.IsSaving(schedule_r7.ID) ? 1 : 2);
|
|
271
282
|
} }
|
|
272
|
-
function
|
|
273
|
-
i0.ɵɵelement(0, "i",
|
|
283
|
+
function SchedulesComponent_Conditional_7_For_4_Conditional_40_Template(rf, ctx) { if (rf & 1) {
|
|
284
|
+
i0.ɵɵelement(0, "i", 32);
|
|
274
285
|
i0.ɵɵtext(1, " Running... ");
|
|
275
286
|
} }
|
|
276
|
-
function
|
|
277
|
-
i0.ɵɵelement(0, "i",
|
|
287
|
+
function SchedulesComponent_Conditional_7_For_4_Conditional_41_Template(rf, ctx) { if (rf & 1) {
|
|
288
|
+
i0.ɵɵelement(0, "i", 72);
|
|
278
289
|
i0.ɵɵtext(1, " Run Now ");
|
|
279
290
|
} }
|
|
280
|
-
function
|
|
281
|
-
const
|
|
282
|
-
i0.ɵɵelementStart(0, "div",
|
|
291
|
+
function SchedulesComponent_Conditional_7_For_4_Template(rf, ctx) { if (rf & 1) {
|
|
292
|
+
const _r6 = i0.ɵɵgetCurrentView();
|
|
293
|
+
i0.ɵɵelementStart(0, "div", 33)(1, "div", 34)(2, "div", 35);
|
|
283
294
|
i0.ɵɵelement(3, "i");
|
|
284
295
|
i0.ɵɵelementEnd();
|
|
285
|
-
i0.ɵɵelementStart(4, "div",
|
|
296
|
+
i0.ɵɵelementStart(4, "div", 36)(5, "div", 37);
|
|
286
297
|
i0.ɵɵtext(6);
|
|
287
298
|
i0.ɵɵelementEnd();
|
|
288
|
-
i0.ɵɵelementStart(7, "div",
|
|
299
|
+
i0.ɵɵelementStart(7, "div", 38);
|
|
289
300
|
i0.ɵɵtext(8);
|
|
290
301
|
i0.ɵɵelementEnd();
|
|
291
|
-
i0.ɵɵelementStart(9, "div",
|
|
292
|
-
i0.ɵɵconditionalCreate(10,
|
|
293
|
-
i0.ɵɵconditionalCreate(12,
|
|
302
|
+
i0.ɵɵelementStart(9, "div", 39);
|
|
303
|
+
i0.ɵɵconditionalCreate(10, SchedulesComponent_Conditional_7_For_4_Conditional_10_Template, 2, 0, "span", 40)(11, SchedulesComponent_Conditional_7_For_4_Conditional_11_Template, 2, 0, "span", 41);
|
|
304
|
+
i0.ɵɵconditionalCreate(12, SchedulesComponent_Conditional_7_For_4_Conditional_12_Template, 3, 0, "span", 42);
|
|
294
305
|
i0.ɵɵelementEnd()()();
|
|
295
|
-
i0.ɵɵelementStart(13, "div",
|
|
306
|
+
i0.ɵɵelementStart(13, "div", 43)(14, "div", 44)(15, "label", 45);
|
|
296
307
|
i0.ɵɵtext(16, " Auto-sync ");
|
|
297
|
-
i0.ɵɵelementStart(17, "button",
|
|
298
|
-
i0.ɵɵlistener("click", function
|
|
299
|
-
i0.ɵɵelement(18, "span",
|
|
308
|
+
i0.ɵɵelementStart(17, "button", 46);
|
|
309
|
+
i0.ɵɵlistener("click", function SchedulesComponent_Conditional_7_For_4_Template_button_click_17_listener() { const schedule_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.ToggleScheduleEnabled(schedule_r7.ID)); });
|
|
310
|
+
i0.ɵɵelement(18, "span", 47);
|
|
300
311
|
i0.ɵɵelementEnd()()();
|
|
301
|
-
i0.ɵɵconditionalCreate(19,
|
|
312
|
+
i0.ɵɵconditionalCreate(19, SchedulesComponent_Conditional_7_For_4_Conditional_19_Template, 10, 8);
|
|
302
313
|
i0.ɵɵelementEnd();
|
|
303
|
-
i0.ɵɵelementStart(20, "div",
|
|
314
|
+
i0.ɵɵelementStart(20, "div", 48)(21, "div", 49)(22, "div", 50)(23, "span", 51);
|
|
304
315
|
i0.ɵɵtext(24, "Next run");
|
|
305
316
|
i0.ɵɵelementEnd();
|
|
306
|
-
i0.ɵɵelementStart(25, "span",
|
|
317
|
+
i0.ɵɵelementStart(25, "span", 52);
|
|
307
318
|
i0.ɵɵtext(26);
|
|
308
319
|
i0.ɵɵelementEnd()();
|
|
309
|
-
i0.ɵɵelementStart(27, "div",
|
|
320
|
+
i0.ɵɵelementStart(27, "div", 50)(28, "span", 51);
|
|
310
321
|
i0.ɵɵtext(29, "Last run");
|
|
311
322
|
i0.ɵɵelementEnd();
|
|
312
|
-
i0.ɵɵelementStart(30, "span",
|
|
323
|
+
i0.ɵɵelementStart(30, "span", 52);
|
|
313
324
|
i0.ɵɵtext(31);
|
|
314
325
|
i0.ɵɵelementEnd()();
|
|
315
|
-
i0.ɵɵelementStart(32, "div",
|
|
326
|
+
i0.ɵɵelementStart(32, "div", 50)(33, "span", 51);
|
|
316
327
|
i0.ɵɵtext(34, "Status");
|
|
317
328
|
i0.ɵɵelementEnd();
|
|
318
|
-
i0.ɵɵconditionalCreate(35,
|
|
329
|
+
i0.ɵɵconditionalCreate(35, SchedulesComponent_Conditional_7_For_4_Conditional_35_Template, 3, 0, "span", 53)(36, SchedulesComponent_Conditional_7_For_4_Conditional_36_Template, 2, 0, "span", 54);
|
|
319
330
|
i0.ɵɵelementEnd()();
|
|
320
|
-
i0.ɵɵelementStart(37, "div",
|
|
321
|
-
i0.ɵɵconditionalCreate(38,
|
|
322
|
-
i0.ɵɵelementStart(39, "button",
|
|
323
|
-
i0.ɵɵlistener("click", function
|
|
324
|
-
i0.ɵɵconditionalCreate(40,
|
|
331
|
+
i0.ɵɵelementStart(37, "div", 55);
|
|
332
|
+
i0.ɵɵconditionalCreate(38, SchedulesComponent_Conditional_7_For_4_Conditional_38_Template, 3, 2, "button", 56);
|
|
333
|
+
i0.ɵɵelementStart(39, "button", 57);
|
|
334
|
+
i0.ɵɵlistener("click", function SchedulesComponent_Conditional_7_For_4_Template_button_click_39_listener() { const schedule_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.RunNow(schedule_r7.ID)); });
|
|
335
|
+
i0.ɵɵconditionalCreate(40, SchedulesComponent_Conditional_7_For_4_Conditional_40_Template, 2, 0)(41, SchedulesComponent_Conditional_7_For_4_Conditional_41_Template, 2, 0);
|
|
325
336
|
i0.ɵɵelementEnd()()()();
|
|
326
337
|
} if (rf & 2) {
|
|
327
|
-
const
|
|
328
|
-
const
|
|
329
|
-
i0.ɵɵclassProp("schedule-card-disabled", !
|
|
338
|
+
const schedule_r7 = ctx.$implicit;
|
|
339
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
340
|
+
i0.ɵɵclassProp("schedule-card-disabled", !schedule_r7.IsActive);
|
|
330
341
|
i0.ɵɵadvance(3);
|
|
331
|
-
i0.ɵɵclassMap(
|
|
342
|
+
i0.ɵɵclassMap(ctx_r0.GetIntegrationIcon(schedule_r7.Integration || schedule_r7.Name));
|
|
332
343
|
i0.ɵɵadvance(3);
|
|
333
|
-
i0.ɵɵtextInterpolate(
|
|
344
|
+
i0.ɵɵtextInterpolate(schedule_r7.Integration || schedule_r7.Name);
|
|
334
345
|
i0.ɵɵadvance(2);
|
|
335
|
-
i0.ɵɵtextInterpolate(
|
|
346
|
+
i0.ɵɵtextInterpolate(schedule_r7.Company);
|
|
336
347
|
i0.ɵɵadvance(2);
|
|
337
|
-
i0.ɵɵconditional(
|
|
348
|
+
i0.ɵɵconditional(schedule_r7.IsActive ? 10 : 11);
|
|
338
349
|
i0.ɵɵadvance(2);
|
|
339
|
-
i0.ɵɵconditional(
|
|
350
|
+
i0.ɵɵconditional(schedule_r7.IsLocked ? 12 : -1);
|
|
340
351
|
i0.ɵɵadvance(5);
|
|
341
|
-
i0.ɵɵclassProp("toggle-on",
|
|
342
|
-
i0.ɵɵattribute("aria-checked",
|
|
352
|
+
i0.ɵɵclassProp("toggle-on", ctx_r0.GetEffectiveScheduleEnabled(schedule_r7));
|
|
353
|
+
i0.ɵɵattribute("aria-checked", ctx_r0.GetEffectiveScheduleEnabled(schedule_r7));
|
|
343
354
|
i0.ɵɵadvance(2);
|
|
344
|
-
i0.ɵɵconditional(
|
|
355
|
+
i0.ɵɵconditional(ctx_r0.GetEffectiveScheduleEnabled(schedule_r7) ? 19 : -1);
|
|
345
356
|
i0.ɵɵadvance(7);
|
|
346
|
-
i0.ɵɵtextInterpolate(
|
|
357
|
+
i0.ɵɵtextInterpolate(ctx_r0.GetNextRunRelative(schedule_r7));
|
|
347
358
|
i0.ɵɵadvance(5);
|
|
348
|
-
i0.ɵɵtextInterpolate(
|
|
359
|
+
i0.ɵɵtextInterpolate(ctx_r0.GetLastRunRelative(schedule_r7));
|
|
349
360
|
i0.ɵɵadvance(4);
|
|
350
|
-
i0.ɵɵconditional(
|
|
361
|
+
i0.ɵɵconditional(schedule_r7.IsLocked ? 35 : 36);
|
|
351
362
|
i0.ɵɵadvance(3);
|
|
352
|
-
i0.ɵɵconditional(
|
|
363
|
+
i0.ɵɵconditional(ctx_r0.HasChanges(schedule_r7.ID) ? 38 : -1);
|
|
353
364
|
i0.ɵɵadvance();
|
|
354
|
-
i0.ɵɵproperty("disabled",
|
|
365
|
+
i0.ɵɵproperty("disabled", ctx_r0.IsRunning(schedule_r7.ID) || schedule_r7.IsLocked);
|
|
355
366
|
i0.ɵɵadvance();
|
|
356
|
-
i0.ɵɵconditional(
|
|
367
|
+
i0.ɵɵconditional(ctx_r0.IsRunning(schedule_r7.ID) ? 40 : 41);
|
|
357
368
|
} }
|
|
358
|
-
function
|
|
359
|
-
i0.ɵɵelementStart(0, "div",
|
|
360
|
-
i0.ɵɵelement(1, "i",
|
|
369
|
+
function SchedulesComponent_Conditional_7_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
370
|
+
i0.ɵɵelementStart(0, "div", 13);
|
|
371
|
+
i0.ɵɵelement(1, "i", 73);
|
|
361
372
|
i0.ɵɵelementStart(2, "p");
|
|
362
373
|
i0.ɵɵtext(3, "No integrations found");
|
|
363
374
|
i0.ɵɵelementEnd()();
|
|
364
375
|
} }
|
|
365
|
-
function
|
|
366
|
-
|
|
367
|
-
i0.ɵɵ
|
|
368
|
-
i0.ɵɵ
|
|
369
|
-
i0.ɵɵ
|
|
370
|
-
i0.ɵɵ
|
|
371
|
-
i0.ɵɵelementStart(6, "span", 7);
|
|
372
|
-
i0.ɵɵtext(7);
|
|
373
|
-
i0.ɵɵelementEnd();
|
|
374
|
-
i0.ɵɵelementStart(8, "span", 7);
|
|
375
|
-
i0.ɵɵtext(9);
|
|
376
|
-
i0.ɵɵelementEnd();
|
|
377
|
-
i0.ɵɵconditionalCreate(10, SchedulesComponent_Conditional_1_Conditional_10_Template, 3, 1, "span", 8);
|
|
378
|
-
i0.ɵɵelementEnd();
|
|
379
|
-
i0.ɵɵelementStart(11, "button", 9);
|
|
380
|
-
i0.ɵɵlistener("click", function SchedulesComponent_Conditional_1_Template_button_click_11_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.LoadData()); });
|
|
381
|
-
i0.ɵɵelement(12, "i", 10);
|
|
382
|
-
i0.ɵɵtext(13, " Refresh ");
|
|
383
|
-
i0.ɵɵelementEnd()();
|
|
384
|
-
i0.ɵɵconditionalCreate(14, SchedulesComponent_Conditional_1_Conditional_14_Template, 12, 0, "div", 11);
|
|
385
|
-
i0.ɵɵelementStart(15, "div", 12);
|
|
386
|
-
i0.ɵɵrepeaterCreate(16, SchedulesComponent_Conditional_1_For_17_Template, 42, 18, "div", 13, i0.ɵɵcomponentInstance().TrackByID, true);
|
|
387
|
-
i0.ɵɵconditionalCreate(18, SchedulesComponent_Conditional_1_Conditional_18_Template, 4, 0, "div", 14);
|
|
376
|
+
function SchedulesComponent_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
377
|
+
i0.ɵɵelementStart(0, "div", 5);
|
|
378
|
+
i0.ɵɵconditionalCreate(1, SchedulesComponent_Conditional_7_Conditional_1_Template, 12, 0, "div", 10);
|
|
379
|
+
i0.ɵɵelementStart(2, "div", 11);
|
|
380
|
+
i0.ɵɵrepeaterCreate(3, SchedulesComponent_Conditional_7_For_4_Template, 42, 18, "div", 12, i0.ɵɵcomponentInstance().TrackByID, true);
|
|
381
|
+
i0.ɵɵconditionalCreate(5, SchedulesComponent_Conditional_7_Conditional_5_Template, 4, 0, "div", 13);
|
|
388
382
|
i0.ɵɵelementEnd()();
|
|
389
383
|
} if (rf & 2) {
|
|
390
|
-
const
|
|
391
|
-
i0.ɵɵadvance(7);
|
|
392
|
-
i0.ɵɵtextInterpolate2("", ctx_r1.Schedules.length, " integration", ctx_r1.Schedules.length === 1 ? "" : "s");
|
|
393
|
-
i0.ɵɵadvance(2);
|
|
394
|
-
i0.ɵɵtextInterpolate1("", ctx_r1.ScheduledCount, " scheduled");
|
|
384
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
395
385
|
i0.ɵɵadvance();
|
|
396
|
-
i0.ɵɵconditional(
|
|
397
|
-
i0.ɵɵadvance(4);
|
|
398
|
-
i0.ɵɵconditional(ctx_r1.TimelineMarkers.length > 0 ? 14 : -1);
|
|
386
|
+
i0.ɵɵconditional(ctx_r0.TimelineMarkers.length > 0 ? 1 : -1);
|
|
399
387
|
i0.ɵɵadvance(2);
|
|
400
|
-
i0.ɵɵrepeater(
|
|
388
|
+
i0.ɵɵrepeater(ctx_r0.Schedules);
|
|
401
389
|
i0.ɵɵadvance(2);
|
|
402
|
-
i0.ɵɵconditional(
|
|
390
|
+
i0.ɵɵconditional(ctx_r0.Schedules.length === 0 ? 5 : -1);
|
|
403
391
|
} }
|
|
404
392
|
// ---------------------------------------------------------------------------
|
|
405
393
|
// Component
|
|
@@ -916,11 +904,23 @@ let SchedulesComponent = class SchedulesComponent extends BaseResourceComponent
|
|
|
916
904
|
return `${hours}h ${minutes}m`;
|
|
917
905
|
}
|
|
918
906
|
static ɵfac = /*@__PURE__*/ (() => { let ɵSchedulesComponent_BaseFactory; return function SchedulesComponent_Factory(__ngFactoryType__) { return (ɵSchedulesComponent_BaseFactory || (ɵSchedulesComponent_BaseFactory = i0.ɵɵgetInheritedFactory(SchedulesComponent)))(__ngFactoryType__ || SchedulesComponent); }; })();
|
|
919
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SchedulesComponent, selectors: [["app-integration-schedules"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls:
|
|
920
|
-
i0.ɵɵ
|
|
907
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SchedulesComponent, selectors: [["app-integration-schedules"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 8, vars: 3, consts: [["Title", "Integration Schedules", "Icon", "fa-solid fa-calendar-check", "Subtitle", "When and how often integrations sync"], ["meta", ""], ["actions", ""], [3, "Clicked", "Loading"], [1, "loading-container"], [1, "schedules-root"], [3, "Count", "Label"], ["Label", "scheduled", 3, "Count"], ["Icon", "fa-solid fa-spinner fa-spin", "Label", "running", "Variant", "running", 3, "Count"], ["text", "Loading schedules..."], [1, "timeline-section"], [1, "cards-section"], [1, "schedule-card", 3, "schedule-card-disabled"], [1, "empty-state"], [1, "timeline-title"], [1, "fa-regular", "fa-clock"], [1, "timeline-container"], [1, "timeline-grid-labels"], [1, "timeline-label-spacer"], [1, "timeline-grid-track"], [1, "timeline-row"], [1, "timeline-hour-label", 3, "left"], [1, "timeline-hour-label"], [1, "timeline-row-label", 3, "title"], [1, "timeline-track-container"], [1, "timeline-track"], [1, "timeline-marker", 3, "timeline-marker-next", "left", "title"], [1, "timeline-locked-indicator"], [1, "timeline-now-line"], [1, "timeline-grid-line", 3, "left"], [1, "timeline-grid-line"], [1, "timeline-marker", 3, "title"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "schedule-card"], [1, "card-info"], [1, "card-icon"], [1, "card-details"], [1, "card-name"], [1, "card-company"], [1, "card-badges"], [1, "badge", "badge-success"], [1, "badge", "badge-gray"], [1, "badge", "badge-running"], [1, "card-config"], [1, "config-row"], [1, "toggle-label"], ["role", "switch", 1, "toggle-switch", 3, "click"], [1, "toggle-knob"], [1, "card-status"], [1, "status-items"], [1, "status-item"], [1, "status-label"], [1, "status-value"], [1, "status-value", "status-running"], [1, "status-value", "status-idle"], [1, "card-actions"], [1, "btn", "btn-primary", "btn-save", 3, "disabled"], [1, "btn", "btn-outline", "btn-run", 3, "click", "disabled"], [1, "type-pills"], [1, "type-pill", 3, "click"], [1, "interval-presets"], [1, "preset-btn", 3, "preset-btn-active"], [1, "custom-interval"], ["type", "number", "placeholder", "Custom min", "min", "1", 1, "interval-input", 3, "change", "value"], [1, "interval-unit"], [1, "preset-btn", 3, "click"], [1, "cron-presets"], [1, "cron-input-row"], ["type", "text", "placeholder", "* * * * *", 1, "cron-input", 3, "change", "value"], [1, "cron-description"], [1, "btn", "btn-primary", "btn-save", 3, "click", "disabled"], [1, "fa-solid", "fa-check"], [1, "fa-solid", "fa-play"], [1, "fa-solid", "fa-calendar-xmark"]], template: function SchedulesComponent_Template(rf, ctx) { if (rf & 1) {
|
|
908
|
+
i0.ɵɵelementStart(0, "mj-page-layout")(1, "mj-page-header", 0);
|
|
909
|
+
i0.ɵɵconditionalCreate(2, SchedulesComponent_Conditional_2_Template, 4, 4, "div", 1);
|
|
910
|
+
i0.ɵɵelementStart(3, "div", 2)(4, "mj-refresh-button", 3);
|
|
911
|
+
i0.ɵɵlistener("Clicked", function SchedulesComponent_Template_mj_refresh_button_Clicked_4_listener() { return ctx.LoadData(); });
|
|
912
|
+
i0.ɵɵelementEnd()()();
|
|
913
|
+
i0.ɵɵelementStart(5, "mj-page-body");
|
|
914
|
+
i0.ɵɵconditionalCreate(6, SchedulesComponent_Conditional_6_Template, 2, 0, "div", 4)(7, SchedulesComponent_Conditional_7_Template, 6, 2, "div", 5);
|
|
915
|
+
i0.ɵɵelementEnd()();
|
|
921
916
|
} if (rf & 2) {
|
|
922
|
-
i0.ɵɵ
|
|
923
|
-
} }, dependencies: [i1.LoadingComponent], styles: ["\n\n\n\n\n[_nghost-%COMP%] {\n display: block;\n height: 100%;\n overflow-y: auto;\n background: var(--mj-bg-page);\n}\n\n.schedules-root[_ngcontent-%COMP%] {\n padding: 24px;\n max-width: 1400px;\n margin: 0 auto;\n}\n\n.loading-container[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 300px;\n}\n\n\n\n\n\n\n.section-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 24px;\n}\n\n.header-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n flex-wrap: wrap;\n}\n\n.section-title[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.section-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.header-meta[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n padding: 2px 10px;\n background: var(--mj-bg-surface-active);\n border-radius: 12px;\n}\n\n.running-badge[_ngcontent-%COMP%] {\n background: var(--mj-color-warning-100);\n color: var(--mj-color-warning-600);\n}\n\n.running-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 4px;\n}\n\n\n\n\n\n\n.btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n border-radius: 8px;\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n border: none;\n transition: all 0.15s ease;\n white-space: nowrap;\n}\n\n.btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.btn-primary[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-bg-surface);\n}\n\n.btn-primary[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-color-info-700);\n}\n\n.btn-outline[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-strong);\n}\n\n.btn-outline[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-text-disabled);\n}\n\n\n\n\n\n\n.timeline-section[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n padding: 20px 24px;\n margin-bottom: 24px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);\n border: 1px solid var(--mj-border-default);\n}\n\n.timeline-title[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 16px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.timeline-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n.timeline-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n\n\n.timeline-grid-labels[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n height: 20px;\n margin-bottom: 4px;\n}\n\n.timeline-label-spacer[_ngcontent-%COMP%] {\n width: 200px;\n min-width: 200px;\n flex-shrink: 0;\n}\n\n.timeline-grid-track[_ngcontent-%COMP%] {\n flex: 1;\n position: relative;\n height: 20px;\n}\n\n.timeline-hour-label[_ngcontent-%COMP%] {\n position: absolute;\n font-size: 10px;\n color: var(--mj-text-disabled);\n transform: translateX(-50%);\n white-space: nowrap;\n}\n\n\n\n.timeline-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n height: 28px;\n}\n\n.timeline-row-label[_ngcontent-%COMP%] {\n width: 200px;\n min-width: 200px;\n flex-shrink: 0;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n padding-right: 16px;\n}\n\n.timeline-track-container[_ngcontent-%COMP%] {\n flex: 1;\n position: relative;\n height: 28px;\n display: flex;\n align-items: center;\n}\n\n.timeline-track[_ngcontent-%COMP%] {\n position: absolute;\n left: 0;\n right: 0;\n height: 4px;\n background: var(--mj-border-default);\n border-radius: 2px;\n}\n\n.timeline-grid-line[_ngcontent-%COMP%] {\n position: absolute;\n top: 0;\n bottom: 0;\n width: 1px;\n background: var(--mj-border-subtle);\n z-index: 0;\n}\n\n\n\n.timeline-marker[_ngcontent-%COMP%] {\n position: absolute;\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: var(--mj-text-disabled);\n transform: translate(-50%, 0);\n z-index: 2;\n transition: all 0.2s ease;\n}\n\n.timeline-marker[_ngcontent-%COMP%]:hover {\n transform: translate(-50%, 0) scale(1.4);\n}\n\n.timeline-marker-next[_ngcontent-%COMP%] {\n width: 12px;\n height: 12px;\n background: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.2);\n}\n\n\n\n.timeline-now-line[_ngcontent-%COMP%] {\n position: absolute;\n left: 0;\n top: -2px;\n bottom: -2px;\n width: 2px;\n background: var(--mj-status-error);\n z-index: 3;\n border-radius: 1px;\n}\n\n\n\n.timeline-locked-indicator[_ngcontent-%COMP%] {\n position: absolute;\n left: -4px;\n font-size: 12px;\n color: var(--mj-color-warning-600);\n z-index: 4;\n animation: _ngcontent-%COMP%_pulse-opacity 1.5s ease-in-out infinite;\n}\n\n@keyframes _ngcontent-%COMP%_pulse-opacity {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.4; }\n}\n\n\n\n\n\n\n.cards-section[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.schedule-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n background: var(--mj-bg-surface);\n border-radius: 12px;\n padding: 24px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);\n border: 1px solid var(--mj-border-default);\n transition: box-shadow 0.2s ease;\n gap: 32px;\n}\n\n.schedule-card[_ngcontent-%COMP%]:hover {\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);\n}\n\n.schedule-card-disabled[_ngcontent-%COMP%] {\n opacity: 0.6;\n}\n\n\n\n.card-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 16px;\n min-width: 220px;\n flex-shrink: 0;\n}\n\n.card-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n border-radius: 12px;\n background: var(--mj-status-info-bg);\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.card-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n color: var(--mj-brand-primary);\n}\n\n.card-details[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.card-name[_ngcontent-%COMP%] {\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.card-company[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-disabled);\n}\n\n.card-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n margin-top: 4px;\n flex-wrap: wrap;\n}\n\n.badge[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 500;\n padding: 2px 8px;\n border-radius: 10px;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.badge-success[_ngcontent-%COMP%] {\n background: var(--mj-status-success-bg);\n color: var(--mj-color-success-600);\n}\n\n.badge-gray[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-muted);\n}\n\n.badge-running[_ngcontent-%COMP%] {\n background: var(--mj-color-warning-100);\n color: var(--mj-color-warning-600);\n}\n\n\n\n.card-config[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.config-row[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n\n\n.toggle-label[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n}\n\n.toggle-switch[_ngcontent-%COMP%] {\n position: relative;\n width: 40px;\n height: 22px;\n border-radius: 11px;\n background: var(--mj-color-neutral-300);\n border: none;\n cursor: pointer;\n transition: background 0.2s ease;\n padding: 0;\n flex-shrink: 0;\n}\n\n.toggle-switch.toggle-on[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n}\n\n.toggle-knob[_ngcontent-%COMP%] {\n position: absolute;\n top: 2px;\n left: 2px;\n width: 18px;\n height: 18px;\n border-radius: 50%;\n background: var(--mj-bg-surface);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);\n transition: transform 0.2s ease;\n}\n\n.toggle-on[_ngcontent-%COMP%] .toggle-knob[_ngcontent-%COMP%] {\n transform: translateX(18px);\n}\n\n\n\n.type-pills[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n background: var(--mj-bg-surface-hover);\n border-radius: 8px;\n padding: 3px;\n width: fit-content;\n}\n\n.type-pill[_ngcontent-%COMP%] {\n padding: 5px 14px;\n border-radius: 6px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-muted);\n background: transparent;\n border: none;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.type-pill[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-secondary);\n}\n\n.type-pill-active[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n color: var(--mj-brand-primary);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);\n}\n\n\n\n.interval-presets[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n}\n\n.preset-btn[_ngcontent-%COMP%] {\n padding: 4px 12px;\n border-radius: 6px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-hover);\n border: 1px solid var(--mj-border-default);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.preset-btn[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-text-disabled);\n color: var(--mj-text-secondary);\n}\n\n.preset-btn-active[_ngcontent-%COMP%] {\n background: var(--mj-status-info-bg);\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n\n\n.custom-interval[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-top: 4px;\n}\n\n.interval-input[_ngcontent-%COMP%] {\n width: 100px;\n padding: 5px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n outline: none;\n transition: border-color 0.15s ease;\n}\n\n.interval-input[_ngcontent-%COMP%]:focus {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.1);\n}\n\n.interval-unit[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-disabled);\n}\n\n\n\n.cron-presets[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n}\n\n.cron-input-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-top: 4px;\n flex-wrap: wrap;\n}\n\n.cron-input[_ngcontent-%COMP%] {\n width: 180px;\n padding: 5px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 12px;\n font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', monospace;\n color: var(--mj-text-secondary);\n outline: none;\n transition: border-color 0.15s ease;\n}\n\n.cron-input[_ngcontent-%COMP%]:focus {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.1);\n}\n\n.cron-description[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n\n\n.card-status[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 16px;\n min-width: 180px;\n flex-shrink: 0;\n}\n\n.status-items[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n text-align: right;\n}\n\n.status-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.status-label[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-disabled);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.status-value[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n}\n\n.status-running[_ngcontent-%COMP%] {\n color: var(--mj-color-warning-600);\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 6px;\n}\n\n.status-idle[_ngcontent-%COMP%] {\n color: var(--mj-color-success-600);\n}\n\n\n\n.card-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n.btn-save[_ngcontent-%COMP%] {\n animation: _ngcontent-%COMP%_slideIn 0.2s ease;\n}\n\n@keyframes _ngcontent-%COMP%_slideIn {\n from {\n opacity: 0;\n transform: translateX(8px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n\n.btn-run[_ngcontent-%COMP%] {\n font-size: 12px;\n padding: 6px 12px;\n}\n\n\n\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 60px 24px;\n color: var(--mj-text-disabled);\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 48px;\n margin-bottom: 16px;\n display: block;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 15px;\n margin: 0;\n}\n\n\n\n\n\n\n@media (max-width: 900px) {\n .schedule-card[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 20px;\n }\n\n .card-info[_ngcontent-%COMP%] {\n min-width: 0;\n width: 100%;\n }\n\n .card-config[_ngcontent-%COMP%] {\n width: 100%;\n }\n\n .card-status[_ngcontent-%COMP%] {\n align-items: flex-start;\n width: 100%;\n min-width: 0;\n }\n\n .status-items[_ngcontent-%COMP%] {\n text-align: left;\n flex-direction: row;\n gap: 20px;\n flex-wrap: wrap;\n }\n\n .status-running[_ngcontent-%COMP%] {\n justify-content: flex-start;\n }\n\n .card-actions[_ngcontent-%COMP%] {\n width: 100%;\n }\n\n .card-actions[_ngcontent-%COMP%] .btn[_ngcontent-%COMP%] {\n flex: 1;\n justify-content: center;\n }\n}\n\n@media (max-width: 768px) {\n .timeline-section[_ngcontent-%COMP%] {\n display: none;\n }\n\n .schedules-root[_ngcontent-%COMP%] {\n padding: 16px;\n }\n\n .section-header[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: flex-start;\n gap: 12px;\n }\n\n .header-left[_ngcontent-%COMP%] {\n gap: 8px;\n }\n}"] });
|
|
917
|
+
i0.ɵɵadvance(2);
|
|
918
|
+
i0.ɵɵconditional(!ctx.IsLoading && ctx.Schedules.length > 0 ? 2 : -1);
|
|
919
|
+
i0.ɵɵadvance(2);
|
|
920
|
+
i0.ɵɵproperty("Loading", ctx.IsLoading);
|
|
921
|
+
i0.ɵɵadvance(2);
|
|
922
|
+
i0.ɵɵconditional(ctx.IsLoading ? 6 : 7);
|
|
923
|
+
} }, dependencies: [i1.MJPageLayoutComponent, i1.MJPageHeaderComponent, i1.MJPageBodyComponent, i1.MJStatBadgeComponent, i1.MJRefreshButtonComponent, i2.LoadingComponent], styles: ["\n\n\n\n\n[_nghost-%COMP%] {\n display: block;\n height: 100%;\n overflow-y: auto;\n background: var(--mj-bg-page);\n}\n\n\n\n\n.schedules-root[_ngcontent-%COMP%] {\n padding: 24px;\n max-width: 1400px;\n margin: 0 auto;\n}\n\n.loading-container[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 300px;\n}\n\n\n\n\n\n\n\n\n\n\n\n.btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n border-radius: 8px;\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n border: none;\n transition: all 0.15s ease;\n white-space: nowrap;\n}\n\n.btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.btn-primary[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-bg-surface);\n}\n\n.btn-primary[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-color-info-700);\n}\n\n.btn-outline[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-strong);\n}\n\n.btn-outline[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-text-disabled);\n}\n\n\n\n\n\n\n.timeline-section[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n padding: 20px 24px;\n margin-bottom: 24px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);\n border: 1px solid var(--mj-border-default);\n}\n\n.timeline-title[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 16px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.timeline-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n.timeline-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n\n\n.timeline-grid-labels[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n height: 20px;\n margin-bottom: 4px;\n}\n\n.timeline-label-spacer[_ngcontent-%COMP%] {\n width: 200px;\n min-width: 200px;\n flex-shrink: 0;\n}\n\n.timeline-grid-track[_ngcontent-%COMP%] {\n flex: 1;\n position: relative;\n height: 20px;\n}\n\n.timeline-hour-label[_ngcontent-%COMP%] {\n position: absolute;\n font-size: 10px;\n color: var(--mj-text-disabled);\n transform: translateX(-50%);\n white-space: nowrap;\n}\n\n\n\n.timeline-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n height: 28px;\n}\n\n.timeline-row-label[_ngcontent-%COMP%] {\n width: 200px;\n min-width: 200px;\n flex-shrink: 0;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n padding-right: 16px;\n}\n\n.timeline-track-container[_ngcontent-%COMP%] {\n flex: 1;\n position: relative;\n height: 28px;\n display: flex;\n align-items: center;\n}\n\n.timeline-track[_ngcontent-%COMP%] {\n position: absolute;\n left: 0;\n right: 0;\n height: 4px;\n background: var(--mj-border-default);\n border-radius: 2px;\n}\n\n.timeline-grid-line[_ngcontent-%COMP%] {\n position: absolute;\n top: 0;\n bottom: 0;\n width: 1px;\n background: var(--mj-border-subtle);\n z-index: 0;\n}\n\n\n\n.timeline-marker[_ngcontent-%COMP%] {\n position: absolute;\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: var(--mj-text-disabled);\n transform: translate(-50%, 0);\n z-index: 2;\n transition: all 0.2s ease;\n}\n\n.timeline-marker[_ngcontent-%COMP%]:hover {\n transform: translate(-50%, 0) scale(1.4);\n}\n\n.timeline-marker-next[_ngcontent-%COMP%] {\n width: 12px;\n height: 12px;\n background: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.2);\n}\n\n\n\n.timeline-now-line[_ngcontent-%COMP%] {\n position: absolute;\n left: 0;\n top: -2px;\n bottom: -2px;\n width: 2px;\n background: var(--mj-status-error);\n z-index: 3;\n border-radius: 1px;\n}\n\n\n\n.timeline-locked-indicator[_ngcontent-%COMP%] {\n position: absolute;\n left: -4px;\n font-size: 12px;\n color: var(--mj-color-warning-600);\n z-index: 4;\n animation: _ngcontent-%COMP%_pulse-opacity 1.5s ease-in-out infinite;\n}\n\n@keyframes _ngcontent-%COMP%_pulse-opacity {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.4; }\n}\n\n\n\n\n\n\n.cards-section[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.schedule-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n background: var(--mj-bg-surface);\n border-radius: 12px;\n padding: 24px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);\n border: 1px solid var(--mj-border-default);\n transition: box-shadow 0.2s ease;\n gap: 32px;\n}\n\n.schedule-card[_ngcontent-%COMP%]:hover {\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);\n}\n\n.schedule-card-disabled[_ngcontent-%COMP%] {\n opacity: 0.6;\n}\n\n\n\n.card-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 16px;\n min-width: 220px;\n flex-shrink: 0;\n}\n\n.card-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n border-radius: 12px;\n background: var(--mj-status-info-bg);\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.card-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n color: var(--mj-brand-primary);\n}\n\n.card-details[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.card-name[_ngcontent-%COMP%] {\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.card-company[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-disabled);\n}\n\n.card-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n margin-top: 4px;\n flex-wrap: wrap;\n}\n\n.badge[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 500;\n padding: 2px 8px;\n border-radius: 10px;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.badge-success[_ngcontent-%COMP%] {\n background: var(--mj-status-success-bg);\n color: var(--mj-color-success-600);\n}\n\n.badge-gray[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-muted);\n}\n\n.badge-running[_ngcontent-%COMP%] {\n background: var(--mj-color-warning-100);\n color: var(--mj-color-warning-600);\n}\n\n\n\n.card-config[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.config-row[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n\n\n.toggle-label[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n}\n\n.toggle-switch[_ngcontent-%COMP%] {\n position: relative;\n width: 40px;\n height: 22px;\n border-radius: 11px;\n background: var(--mj-color-neutral-300);\n border: none;\n cursor: pointer;\n transition: background 0.2s ease;\n padding: 0;\n flex-shrink: 0;\n}\n\n.toggle-switch.toggle-on[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n}\n\n.toggle-knob[_ngcontent-%COMP%] {\n position: absolute;\n top: 2px;\n left: 2px;\n width: 18px;\n height: 18px;\n border-radius: 50%;\n background: var(--mj-bg-surface);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);\n transition: transform 0.2s ease;\n}\n\n.toggle-on[_ngcontent-%COMP%] .toggle-knob[_ngcontent-%COMP%] {\n transform: translateX(18px);\n}\n\n\n\n.type-pills[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n background: var(--mj-bg-surface-hover);\n border-radius: 8px;\n padding: 3px;\n width: fit-content;\n}\n\n.type-pill[_ngcontent-%COMP%] {\n padding: 5px 14px;\n border-radius: 6px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-muted);\n background: transparent;\n border: none;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.type-pill[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-secondary);\n}\n\n.type-pill-active[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n color: var(--mj-brand-primary);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);\n}\n\n\n\n.interval-presets[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n}\n\n.preset-btn[_ngcontent-%COMP%] {\n padding: 4px 12px;\n border-radius: 6px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-hover);\n border: 1px solid var(--mj-border-default);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.preset-btn[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-text-disabled);\n color: var(--mj-text-secondary);\n}\n\n.preset-btn-active[_ngcontent-%COMP%] {\n background: var(--mj-status-info-bg);\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n\n\n.custom-interval[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-top: 4px;\n}\n\n.interval-input[_ngcontent-%COMP%] {\n width: 100px;\n padding: 5px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n outline: none;\n transition: border-color 0.15s ease;\n}\n\n.interval-input[_ngcontent-%COMP%]:focus {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.1);\n}\n\n.interval-unit[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-disabled);\n}\n\n\n\n.cron-presets[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n}\n\n.cron-input-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-top: 4px;\n flex-wrap: wrap;\n}\n\n.cron-input[_ngcontent-%COMP%] {\n width: 180px;\n padding: 5px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 12px;\n font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', monospace;\n color: var(--mj-text-secondary);\n outline: none;\n transition: border-color 0.15s ease;\n}\n\n.cron-input[_ngcontent-%COMP%]:focus {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.1);\n}\n\n.cron-description[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n\n\n.card-status[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 16px;\n min-width: 180px;\n flex-shrink: 0;\n}\n\n.status-items[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n text-align: right;\n}\n\n.status-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.status-label[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-disabled);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.status-value[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n}\n\n.status-running[_ngcontent-%COMP%] {\n color: var(--mj-color-warning-600);\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 6px;\n}\n\n.status-idle[_ngcontent-%COMP%] {\n color: var(--mj-color-success-600);\n}\n\n\n\n.card-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n.btn-save[_ngcontent-%COMP%] {\n animation: _ngcontent-%COMP%_slideIn 0.2s ease;\n}\n\n@keyframes _ngcontent-%COMP%_slideIn {\n from {\n opacity: 0;\n transform: translateX(8px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n\n.btn-run[_ngcontent-%COMP%] {\n font-size: 12px;\n padding: 6px 12px;\n}\n\n\n\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 60px 24px;\n color: var(--mj-text-disabled);\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 48px;\n margin-bottom: 16px;\n display: block;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 15px;\n margin: 0;\n}\n\n\n\n\n\n\n@media (max-width: 900px) {\n .schedule-card[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 20px;\n }\n\n .card-info[_ngcontent-%COMP%] {\n min-width: 0;\n width: 100%;\n }\n\n .card-config[_ngcontent-%COMP%] {\n width: 100%;\n }\n\n .card-status[_ngcontent-%COMP%] {\n align-items: flex-start;\n width: 100%;\n min-width: 0;\n }\n\n .status-items[_ngcontent-%COMP%] {\n text-align: left;\n flex-direction: row;\n gap: 20px;\n flex-wrap: wrap;\n }\n\n .status-running[_ngcontent-%COMP%] {\n justify-content: flex-start;\n }\n\n .card-actions[_ngcontent-%COMP%] {\n width: 100%;\n }\n\n .card-actions[_ngcontent-%COMP%] .btn[_ngcontent-%COMP%] {\n flex: 1;\n justify-content: center;\n }\n}\n\n@media (max-width: 768px) {\n .timeline-section[_ngcontent-%COMP%] {\n display: none;\n }\n\n .schedules-root[_ngcontent-%COMP%] {\n padding: 16px;\n }\n}"] });
|
|
924
924
|
};
|
|
925
925
|
SchedulesComponent = __decorate([
|
|
926
926
|
RegisterClass(BaseResourceComponent, 'IntegrationSchedules')
|
|
@@ -928,7 +928,7 @@ SchedulesComponent = __decorate([
|
|
|
928
928
|
export { SchedulesComponent };
|
|
929
929
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SchedulesComponent, [{
|
|
930
930
|
type: Component,
|
|
931
|
-
args: [{ standalone: false, selector: 'app-integration-schedules', template: "<!-- Loading state -->\n@if (IsLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading schedules...\"></mj-loading>\n </div>\n} @else {\n <div class=\"schedules-root\">\n\n <!-- ================================================================= -->\n <!-- HEADER -->\n <!-- ================================================================= -->\n <div class=\"section-header\">\n <div class=\"header-left\">\n <h2 class=\"section-title\">\n <i class=\"fa-solid fa-calendar-check\"></i>\n Sync Schedules\n </h2>\n <span class=\"header-meta\">{{ Schedules.length }} integration{{ Schedules.length === 1 ? '' : 's' }}</span>\n <span class=\"header-meta\">{{ ScheduledCount }} scheduled</span>\n @if (LockedCount > 0) {\n <span class=\"header-meta running-badge\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n {{ LockedCount }} running\n </span>\n }\n </div>\n <button class=\"btn btn-outline\" (click)=\"LoadData()\">\n <i class=\"fa-solid fa-arrows-rotate\"></i>\n Refresh\n </button>\n </div>\n\n <!-- ================================================================= -->\n <!-- TIMELINE (24-hour visual) -->\n <!-- ================================================================= -->\n @if (TimelineMarkers.length > 0) {\n <div class=\"timeline-section\">\n <div class=\"timeline-title\">\n <i class=\"fa-regular fa-clock\"></i>\n Next 24 Hours\n </div>\n <div class=\"timeline-container\">\n <!-- Hour grid labels -->\n <div class=\"timeline-grid-labels\">\n <div class=\"timeline-label-spacer\"></div>\n <div class=\"timeline-grid-track\">\n @for (hour of TimelineHours; track TrackHour($index, hour)) {\n @if (hour % 4 === 0) {\n <span class=\"timeline-hour-label\"\n [style.left.%]=\"ComputeTimelinePosition(hour, 0)\">\n {{ hour }}:00\n </span>\n }\n }\n </div>\n </div>\n\n <!-- Integration rows -->\n @for (row of TimelineMarkers; track TrackTimelineByID($index, row)) {\n <div class=\"timeline-row\">\n <div class=\"timeline-row-label\" [title]=\"row.IntegrationName\">\n {{ row.IntegrationName }}\n </div>\n <div class=\"timeline-track-container\">\n <!-- Hour grid lines -->\n @for (hour of TimelineHours; track TrackHour($index, hour)) {\n @if (hour % 4 === 0) {\n <div class=\"timeline-grid-line\"\n [style.left.%]=\"ComputeTimelinePosition(hour, 0)\">\n </div>\n }\n }\n\n <!-- Track bar -->\n <div class=\"timeline-track\"></div>\n\n <!-- Markers -->\n @for (marker of row.Markers; track TrackMarker($index, marker)) {\n <div class=\"timeline-marker\"\n [class.timeline-marker-next]=\"marker.IsNext\"\n [style.left.%]=\"ComputeTimelinePosition(marker.Hour, marker.Minute)\"\n [title]=\"marker.Hour + ':' + ('' + marker.Minute).padStart(2, '0')\">\n </div>\n }\n\n <!-- Locked indicator -->\n @if (row.IsLocked) {\n <div class=\"timeline-locked-indicator\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n </div>\n }\n\n <!-- Current time line -->\n <div class=\"timeline-now-line\"></div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- ================================================================= -->\n <!-- SCHEDULE CARDS -->\n <!-- ================================================================= -->\n <div class=\"cards-section\">\n @for (schedule of Schedules; track TrackByID($index, schedule)) {\n <div class=\"schedule-card\" [class.schedule-card-disabled]=\"!schedule.IsActive\">\n\n <!-- LEFT: Icon + Info -->\n <div class=\"card-info\">\n <div class=\"card-icon\">\n <i [class]=\"GetIntegrationIcon(schedule.Integration || schedule.Name)\"></i>\n </div>\n <div class=\"card-details\">\n <div class=\"card-name\">{{ schedule.Integration || schedule.Name }}</div>\n <div class=\"card-company\">{{ schedule.Company }}</div>\n <div class=\"card-badges\">\n @if (schedule.IsActive) {\n <span class=\"badge badge-success\">Active</span>\n } @else {\n <span class=\"badge badge-gray\">Inactive</span>\n }\n @if (schedule.IsLocked) {\n <span class=\"badge badge-running\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Running\n </span>\n }\n </div>\n </div>\n </div>\n\n <!-- CENTER: Schedule Configuration -->\n <div class=\"card-config\">\n <!-- Schedule toggle -->\n <div class=\"config-row\">\n <label class=\"toggle-label\">\n Auto-sync\n <button class=\"toggle-switch\"\n [class.toggle-on]=\"GetEffectiveScheduleEnabled(schedule)\"\n (click)=\"ToggleScheduleEnabled(schedule.ID)\"\n [attr.aria-checked]=\"GetEffectiveScheduleEnabled(schedule)\"\n role=\"switch\">\n <span class=\"toggle-knob\"></span>\n </button>\n </label>\n </div>\n\n @if (GetEffectiveScheduleEnabled(schedule)) {\n <!-- Schedule type pills -->\n <div class=\"config-row\">\n <div class=\"type-pills\">\n <button class=\"type-pill\"\n [class.type-pill-active]=\"GetEffectiveScheduleType(schedule) === 'Manual'\"\n (click)=\"SetScheduleType(schedule.ID, 'Manual')\">\n Manual\n </button>\n <button class=\"type-pill\"\n [class.type-pill-active]=\"GetEffectiveScheduleType(schedule) === 'Interval'\"\n (click)=\"SetScheduleType(schedule.ID, 'Interval')\">\n Interval\n </button>\n <button class=\"type-pill\"\n [class.type-pill-active]=\"GetEffectiveScheduleType(schedule) === 'Cron'\"\n (click)=\"SetScheduleType(schedule.ID, 'Cron')\">\n Cron\n </button>\n </div>\n </div>\n\n <!-- Interval config -->\n @if (GetEffectiveScheduleType(schedule) === 'Interval') {\n <div class=\"config-row\">\n <div class=\"interval-presets\">\n @for (preset of IntervalPresets; track TrackPresetByMinutes($index, preset)) {\n <button class=\"preset-btn\"\n [class.preset-btn-active]=\"IsIntervalSelected(schedule, preset.Minutes)\"\n (click)=\"SetInterval(schedule.ID, preset.Minutes)\">\n {{ preset.Label }}\n </button>\n }\n </div>\n <div class=\"custom-interval\">\n <input type=\"number\"\n class=\"interval-input\"\n placeholder=\"Custom min\"\n min=\"1\"\n [value]=\"GetEffectiveInterval(schedule)\"\n (change)=\"SetCustomInterval(schedule.ID, $event)\" />\n <span class=\"interval-unit\">min</span>\n </div>\n </div>\n }\n\n <!-- Cron config -->\n @if (GetEffectiveScheduleType(schedule) === 'Cron') {\n <div class=\"config-row\">\n <div class=\"cron-presets\">\n @for (preset of CronPresets; track TrackCronPresetByExpr($index, preset)) {\n <button class=\"preset-btn\"\n [class.preset-btn-active]=\"GetEffectiveCron(schedule) === preset.Expression\"\n (click)=\"SetCronExpression(schedule.ID, preset.Expression)\">\n {{ preset.Label }}\n </button>\n }\n </div>\n <div class=\"cron-input-row\">\n <input type=\"text\"\n class=\"cron-input\"\n placeholder=\"* * * * *\"\n [value]=\"GetEffectiveCron(schedule) ?? ''\"\n (change)=\"OnCronInputChange(schedule.ID, $event)\" />\n @if (GetEffectiveCron(schedule)) {\n <span class=\"cron-description\">\n {{ GetCronDescription(GetEffectiveCron(schedule)) }}\n </span>\n }\n </div>\n </div>\n }\n }\n </div>\n\n <!-- RIGHT: Status + Actions -->\n <div class=\"card-status\">\n <div class=\"status-items\">\n <div class=\"status-item\">\n <span class=\"status-label\">Next run</span>\n <span class=\"status-value\">{{ GetNextRunRelative(schedule) }}</span>\n </div>\n <div class=\"status-item\">\n <span class=\"status-label\">Last run</span>\n <span class=\"status-value\">{{ GetLastRunRelative(schedule) }}</span>\n </div>\n <div class=\"status-item\">\n <span class=\"status-label\">Status</span>\n @if (schedule.IsLocked) {\n <span class=\"status-value status-running\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Running\n </span>\n } @else {\n <span class=\"status-value status-idle\">Idle</span>\n }\n </div>\n </div>\n\n <div class=\"card-actions\">\n @if (HasChanges(schedule.ID)) {\n <button class=\"btn btn-primary btn-save\"\n [disabled]=\"IsSaving(schedule.ID)\"\n (click)=\"SaveSchedule(schedule.ID)\">\n @if (IsSaving(schedule.ID)) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Saving...\n } @else {\n <i class=\"fa-solid fa-check\"></i>\n Save\n }\n </button>\n }\n <button class=\"btn btn-outline btn-run\"\n [disabled]=\"IsRunning(schedule.ID) || schedule.IsLocked\"\n (click)=\"RunNow(schedule.ID)\">\n @if (IsRunning(schedule.ID)) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Running...\n } @else {\n <i class=\"fa-solid fa-play\"></i>\n Run Now\n }\n </button>\n </div>\n </div>\n </div>\n }\n\n @if (Schedules.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-calendar-xmark\"></i>\n <p>No integrations found</p>\n </div>\n }\n </div>\n </div>\n}\n", styles: ["/* ==========================================================================\n Schedules Component\n ========================================================================== */\n\n:host {\n display: block;\n height: 100%;\n overflow-y: auto;\n background: var(--mj-bg-page);\n}\n\n.schedules-root {\n padding: 24px;\n max-width: 1400px;\n margin: 0 auto;\n}\n\n.loading-container {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 300px;\n}\n\n/* --------------------------------------------------------------------------\n Header\n -------------------------------------------------------------------------- */\n\n.section-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 24px;\n}\n\n.header-left {\n display: flex;\n align-items: center;\n gap: 16px;\n flex-wrap: wrap;\n}\n\n.section-title {\n font-size: 20px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.section-title i {\n color: var(--mj-brand-primary);\n}\n\n.header-meta {\n font-size: 13px;\n color: var(--mj-text-muted);\n padding: 2px 10px;\n background: var(--mj-bg-surface-active);\n border-radius: 12px;\n}\n\n.running-badge {\n background: var(--mj-color-warning-100);\n color: var(--mj-color-warning-600);\n}\n\n.running-badge i {\n margin-right: 4px;\n}\n\n/* --------------------------------------------------------------------------\n Buttons (shared)\n -------------------------------------------------------------------------- */\n\n.btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n border-radius: 8px;\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n border: none;\n transition: all 0.15s ease;\n white-space: nowrap;\n}\n\n.btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.btn-primary {\n background: var(--mj-brand-primary);\n color: var(--mj-bg-surface);\n}\n\n.btn-primary:hover:not(:disabled) {\n background: var(--mj-color-info-700);\n}\n\n.btn-outline {\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-strong);\n}\n\n.btn-outline:hover:not(:disabled) {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-text-disabled);\n}\n\n/* --------------------------------------------------------------------------\n Timeline Section\n -------------------------------------------------------------------------- */\n\n.timeline-section {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n padding: 20px 24px;\n margin-bottom: 24px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);\n border: 1px solid var(--mj-border-default);\n}\n\n.timeline-title {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 16px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.timeline-title i {\n color: var(--mj-text-muted);\n}\n\n.timeline-container {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n/* Grid labels row */\n.timeline-grid-labels {\n display: flex;\n align-items: flex-end;\n height: 20px;\n margin-bottom: 4px;\n}\n\n.timeline-label-spacer {\n width: 200px;\n min-width: 200px;\n flex-shrink: 0;\n}\n\n.timeline-grid-track {\n flex: 1;\n position: relative;\n height: 20px;\n}\n\n.timeline-hour-label {\n position: absolute;\n font-size: 10px;\n color: var(--mj-text-disabled);\n transform: translateX(-50%);\n white-space: nowrap;\n}\n\n/* Individual timeline rows */\n.timeline-row {\n display: flex;\n align-items: center;\n height: 28px;\n}\n\n.timeline-row-label {\n width: 200px;\n min-width: 200px;\n flex-shrink: 0;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n padding-right: 16px;\n}\n\n.timeline-track-container {\n flex: 1;\n position: relative;\n height: 28px;\n display: flex;\n align-items: center;\n}\n\n.timeline-track {\n position: absolute;\n left: 0;\n right: 0;\n height: 4px;\n background: var(--mj-border-default);\n border-radius: 2px;\n}\n\n.timeline-grid-line {\n position: absolute;\n top: 0;\n bottom: 0;\n width: 1px;\n background: var(--mj-border-subtle);\n z-index: 0;\n}\n\n/* Markers */\n.timeline-marker {\n position: absolute;\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: var(--mj-text-disabled);\n transform: translate(-50%, 0);\n z-index: 2;\n transition: all 0.2s ease;\n}\n\n.timeline-marker:hover {\n transform: translate(-50%, 0) scale(1.4);\n}\n\n.timeline-marker-next {\n width: 12px;\n height: 12px;\n background: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.2);\n}\n\n/* Now line */\n.timeline-now-line {\n position: absolute;\n left: 0;\n top: -2px;\n bottom: -2px;\n width: 2px;\n background: var(--mj-status-error);\n z-index: 3;\n border-radius: 1px;\n}\n\n/* Locked indicator */\n.timeline-locked-indicator {\n position: absolute;\n left: -4px;\n font-size: 12px;\n color: var(--mj-color-warning-600);\n z-index: 4;\n animation: pulse-opacity 1.5s ease-in-out infinite;\n}\n\n@keyframes pulse-opacity {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.4; }\n}\n\n/* --------------------------------------------------------------------------\n Schedule Cards\n -------------------------------------------------------------------------- */\n\n.cards-section {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.schedule-card {\n display: flex;\n align-items: flex-start;\n background: var(--mj-bg-surface);\n border-radius: 12px;\n padding: 24px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);\n border: 1px solid var(--mj-border-default);\n transition: box-shadow 0.2s ease;\n gap: 32px;\n}\n\n.schedule-card:hover {\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);\n}\n\n.schedule-card-disabled {\n opacity: 0.6;\n}\n\n/* Card: Left (info) */\n.card-info {\n display: flex;\n align-items: flex-start;\n gap: 16px;\n min-width: 220px;\n flex-shrink: 0;\n}\n\n.card-icon {\n width: 48px;\n height: 48px;\n border-radius: 12px;\n background: var(--mj-status-info-bg);\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.card-icon i {\n font-size: 20px;\n color: var(--mj-brand-primary);\n}\n\n.card-details {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.card-name {\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.card-company {\n font-size: 12px;\n color: var(--mj-text-disabled);\n}\n\n.card-badges {\n display: flex;\n gap: 6px;\n margin-top: 4px;\n flex-wrap: wrap;\n}\n\n.badge {\n font-size: 11px;\n font-weight: 500;\n padding: 2px 8px;\n border-radius: 10px;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.badge-success {\n background: var(--mj-status-success-bg);\n color: var(--mj-color-success-600);\n}\n\n.badge-gray {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-muted);\n}\n\n.badge-running {\n background: var(--mj-color-warning-100);\n color: var(--mj-color-warning-600);\n}\n\n/* Card: Center (config) */\n.card-config {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.config-row {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n/* Toggle switch */\n.toggle-label {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n}\n\n.toggle-switch {\n position: relative;\n width: 40px;\n height: 22px;\n border-radius: 11px;\n background: var(--mj-color-neutral-300);\n border: none;\n cursor: pointer;\n transition: background 0.2s ease;\n padding: 0;\n flex-shrink: 0;\n}\n\n.toggle-switch.toggle-on {\n background: var(--mj-brand-primary);\n}\n\n.toggle-knob {\n position: absolute;\n top: 2px;\n left: 2px;\n width: 18px;\n height: 18px;\n border-radius: 50%;\n background: var(--mj-bg-surface);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);\n transition: transform 0.2s ease;\n}\n\n.toggle-on .toggle-knob {\n transform: translateX(18px);\n}\n\n/* Type pills */\n.type-pills {\n display: flex;\n gap: 4px;\n background: var(--mj-bg-surface-hover);\n border-radius: 8px;\n padding: 3px;\n width: fit-content;\n}\n\n.type-pill {\n padding: 5px 14px;\n border-radius: 6px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-muted);\n background: transparent;\n border: none;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.type-pill:hover {\n color: var(--mj-text-secondary);\n}\n\n.type-pill-active {\n background: var(--mj-bg-surface);\n color: var(--mj-brand-primary);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);\n}\n\n/* Interval presets */\n.interval-presets {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n}\n\n.preset-btn {\n padding: 4px 12px;\n border-radius: 6px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-hover);\n border: 1px solid var(--mj-border-default);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.preset-btn:hover {\n border-color: var(--mj-text-disabled);\n color: var(--mj-text-secondary);\n}\n\n.preset-btn-active {\n background: var(--mj-status-info-bg);\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n/* Custom interval input */\n.custom-interval {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-top: 4px;\n}\n\n.interval-input {\n width: 100px;\n padding: 5px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n outline: none;\n transition: border-color 0.15s ease;\n}\n\n.interval-input:focus {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.1);\n}\n\n.interval-unit {\n font-size: 12px;\n color: var(--mj-text-disabled);\n}\n\n/* Cron config */\n.cron-presets {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n}\n\n.cron-input-row {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-top: 4px;\n flex-wrap: wrap;\n}\n\n.cron-input {\n width: 180px;\n padding: 5px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 12px;\n font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', monospace;\n color: var(--mj-text-secondary);\n outline: none;\n transition: border-color 0.15s ease;\n}\n\n.cron-input:focus {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.1);\n}\n\n.cron-description {\n font-size: 12px;\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n/* Card: Right (status) */\n.card-status {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 16px;\n min-width: 180px;\n flex-shrink: 0;\n}\n\n.status-items {\n display: flex;\n flex-direction: column;\n gap: 8px;\n text-align: right;\n}\n\n.status-item {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.status-label {\n font-size: 11px;\n color: var(--mj-text-disabled);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.status-value {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n}\n\n.status-running {\n color: var(--mj-color-warning-600);\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 6px;\n}\n\n.status-idle {\n color: var(--mj-color-success-600);\n}\n\n/* Card actions */\n.card-actions {\n display: flex;\n gap: 8px;\n}\n\n.btn-save {\n animation: slideIn 0.2s ease;\n}\n\n@keyframes slideIn {\n from {\n opacity: 0;\n transform: translateX(8px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n\n.btn-run {\n font-size: 12px;\n padding: 6px 12px;\n}\n\n/* --------------------------------------------------------------------------\n Empty State\n -------------------------------------------------------------------------- */\n\n.empty-state {\n text-align: center;\n padding: 60px 24px;\n color: var(--mj-text-disabled);\n}\n\n.empty-state i {\n font-size: 48px;\n margin-bottom: 16px;\n display: block;\n}\n\n.empty-state p {\n font-size: 15px;\n margin: 0;\n}\n\n/* --------------------------------------------------------------------------\n Responsive\n -------------------------------------------------------------------------- */\n\n@media (max-width: 900px) {\n .schedule-card {\n flex-direction: column;\n gap: 20px;\n }\n\n .card-info {\n min-width: 0;\n width: 100%;\n }\n\n .card-config {\n width: 100%;\n }\n\n .card-status {\n align-items: flex-start;\n width: 100%;\n min-width: 0;\n }\n\n .status-items {\n text-align: left;\n flex-direction: row;\n gap: 20px;\n flex-wrap: wrap;\n }\n\n .status-running {\n justify-content: flex-start;\n }\n\n .card-actions {\n width: 100%;\n }\n\n .card-actions .btn {\n flex: 1;\n justify-content: center;\n }\n}\n\n@media (max-width: 768px) {\n .timeline-section {\n display: none;\n }\n\n .schedules-root {\n padding: 16px;\n }\n\n .section-header {\n flex-direction: column;\n align-items: flex-start;\n gap: 12px;\n }\n\n .header-left {\n gap: 8px;\n }\n}\n"] }]
|
|
931
|
+
args: [{ standalone: false, selector: 'app-integration-schedules', template: "<mj-page-layout>\n <mj-page-header\n Title=\"Integration Schedules\"\n Icon=\"fa-solid fa-calendar-check\"\n Subtitle=\"When and how often integrations sync\">\n @if (!IsLoading && Schedules.length > 0) {\n <div meta>\n <mj-stat-badge\n [Count]=\"Schedules.length\"\n [Label]=\"Schedules.length === 1 ? 'integration' : 'integrations'\">\n </mj-stat-badge>\n <mj-stat-badge [Count]=\"ScheduledCount\" Label=\"scheduled\"></mj-stat-badge>\n @if (LockedCount > 0) {\n <mj-stat-badge\n Icon=\"fa-solid fa-spinner fa-spin\"\n [Count]=\"LockedCount\"\n Label=\"running\"\n Variant=\"running\">\n </mj-stat-badge>\n }\n </div>\n }\n <div actions>\n <mj-refresh-button [Loading]=\"IsLoading\" (Clicked)=\"LoadData()\"></mj-refresh-button>\n </div>\n </mj-page-header>\n\n <mj-page-body>\n<!-- Loading state -->\n@if (IsLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading schedules...\"></mj-loading>\n </div>\n} @else {\n <div class=\"schedules-root\">\n\n\n <!-- ================================================================= -->\n <!-- TIMELINE (24-hour visual) -->\n <!-- ================================================================= -->\n @if (TimelineMarkers.length > 0) {\n <div class=\"timeline-section\">\n <div class=\"timeline-title\">\n <i class=\"fa-regular fa-clock\"></i>\n Next 24 Hours\n </div>\n <div class=\"timeline-container\">\n <!-- Hour grid labels -->\n <div class=\"timeline-grid-labels\">\n <div class=\"timeline-label-spacer\"></div>\n <div class=\"timeline-grid-track\">\n @for (hour of TimelineHours; track TrackHour($index, hour)) {\n @if (hour % 4 === 0) {\n <span class=\"timeline-hour-label\"\n [style.left.%]=\"ComputeTimelinePosition(hour, 0)\">\n {{ hour }}:00\n </span>\n }\n }\n </div>\n </div>\n\n <!-- Integration rows -->\n @for (row of TimelineMarkers; track TrackTimelineByID($index, row)) {\n <div class=\"timeline-row\">\n <div class=\"timeline-row-label\" [title]=\"row.IntegrationName\">\n {{ row.IntegrationName }}\n </div>\n <div class=\"timeline-track-container\">\n <!-- Hour grid lines -->\n @for (hour of TimelineHours; track TrackHour($index, hour)) {\n @if (hour % 4 === 0) {\n <div class=\"timeline-grid-line\"\n [style.left.%]=\"ComputeTimelinePosition(hour, 0)\">\n </div>\n }\n }\n\n <!-- Track bar -->\n <div class=\"timeline-track\"></div>\n\n <!-- Markers -->\n @for (marker of row.Markers; track TrackMarker($index, marker)) {\n <div class=\"timeline-marker\"\n [class.timeline-marker-next]=\"marker.IsNext\"\n [style.left.%]=\"ComputeTimelinePosition(marker.Hour, marker.Minute)\"\n [title]=\"marker.Hour + ':' + ('' + marker.Minute).padStart(2, '0')\">\n </div>\n }\n\n <!-- Locked indicator -->\n @if (row.IsLocked) {\n <div class=\"timeline-locked-indicator\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n </div>\n }\n\n <!-- Current time line -->\n <div class=\"timeline-now-line\"></div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- ================================================================= -->\n <!-- SCHEDULE CARDS -->\n <!-- ================================================================= -->\n <div class=\"cards-section\">\n @for (schedule of Schedules; track TrackByID($index, schedule)) {\n <div class=\"schedule-card\" [class.schedule-card-disabled]=\"!schedule.IsActive\">\n\n <!-- LEFT: Icon + Info -->\n <div class=\"card-info\">\n <div class=\"card-icon\">\n <i [class]=\"GetIntegrationIcon(schedule.Integration || schedule.Name)\"></i>\n </div>\n <div class=\"card-details\">\n <div class=\"card-name\">{{ schedule.Integration || schedule.Name }}</div>\n <div class=\"card-company\">{{ schedule.Company }}</div>\n <div class=\"card-badges\">\n @if (schedule.IsActive) {\n <span class=\"badge badge-success\">Active</span>\n } @else {\n <span class=\"badge badge-gray\">Inactive</span>\n }\n @if (schedule.IsLocked) {\n <span class=\"badge badge-running\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Running\n </span>\n }\n </div>\n </div>\n </div>\n\n <!-- CENTER: Schedule Configuration -->\n <div class=\"card-config\">\n <!-- Schedule toggle -->\n <div class=\"config-row\">\n <label class=\"toggle-label\">\n Auto-sync\n <button class=\"toggle-switch\"\n [class.toggle-on]=\"GetEffectiveScheduleEnabled(schedule)\"\n (click)=\"ToggleScheduleEnabled(schedule.ID)\"\n [attr.aria-checked]=\"GetEffectiveScheduleEnabled(schedule)\"\n role=\"switch\">\n <span class=\"toggle-knob\"></span>\n </button>\n </label>\n </div>\n\n @if (GetEffectiveScheduleEnabled(schedule)) {\n <!-- Schedule type pills -->\n <div class=\"config-row\">\n <div class=\"type-pills\">\n <button class=\"type-pill\"\n [class.type-pill-active]=\"GetEffectiveScheduleType(schedule) === 'Manual'\"\n (click)=\"SetScheduleType(schedule.ID, 'Manual')\">\n Manual\n </button>\n <button class=\"type-pill\"\n [class.type-pill-active]=\"GetEffectiveScheduleType(schedule) === 'Interval'\"\n (click)=\"SetScheduleType(schedule.ID, 'Interval')\">\n Interval\n </button>\n <button class=\"type-pill\"\n [class.type-pill-active]=\"GetEffectiveScheduleType(schedule) === 'Cron'\"\n (click)=\"SetScheduleType(schedule.ID, 'Cron')\">\n Cron\n </button>\n </div>\n </div>\n\n <!-- Interval config -->\n @if (GetEffectiveScheduleType(schedule) === 'Interval') {\n <div class=\"config-row\">\n <div class=\"interval-presets\">\n @for (preset of IntervalPresets; track TrackPresetByMinutes($index, preset)) {\n <button class=\"preset-btn\"\n [class.preset-btn-active]=\"IsIntervalSelected(schedule, preset.Minutes)\"\n (click)=\"SetInterval(schedule.ID, preset.Minutes)\">\n {{ preset.Label }}\n </button>\n }\n </div>\n <div class=\"custom-interval\">\n <input type=\"number\"\n class=\"interval-input\"\n placeholder=\"Custom min\"\n min=\"1\"\n [value]=\"GetEffectiveInterval(schedule)\"\n (change)=\"SetCustomInterval(schedule.ID, $event)\" />\n <span class=\"interval-unit\">min</span>\n </div>\n </div>\n }\n\n <!-- Cron config -->\n @if (GetEffectiveScheduleType(schedule) === 'Cron') {\n <div class=\"config-row\">\n <div class=\"cron-presets\">\n @for (preset of CronPresets; track TrackCronPresetByExpr($index, preset)) {\n <button class=\"preset-btn\"\n [class.preset-btn-active]=\"GetEffectiveCron(schedule) === preset.Expression\"\n (click)=\"SetCronExpression(schedule.ID, preset.Expression)\">\n {{ preset.Label }}\n </button>\n }\n </div>\n <div class=\"cron-input-row\">\n <input type=\"text\"\n class=\"cron-input\"\n placeholder=\"* * * * *\"\n [value]=\"GetEffectiveCron(schedule) ?? ''\"\n (change)=\"OnCronInputChange(schedule.ID, $event)\" />\n @if (GetEffectiveCron(schedule)) {\n <span class=\"cron-description\">\n {{ GetCronDescription(GetEffectiveCron(schedule)) }}\n </span>\n }\n </div>\n </div>\n }\n }\n </div>\n\n <!-- RIGHT: Status + Actions -->\n <div class=\"card-status\">\n <div class=\"status-items\">\n <div class=\"status-item\">\n <span class=\"status-label\">Next run</span>\n <span class=\"status-value\">{{ GetNextRunRelative(schedule) }}</span>\n </div>\n <div class=\"status-item\">\n <span class=\"status-label\">Last run</span>\n <span class=\"status-value\">{{ GetLastRunRelative(schedule) }}</span>\n </div>\n <div class=\"status-item\">\n <span class=\"status-label\">Status</span>\n @if (schedule.IsLocked) {\n <span class=\"status-value status-running\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Running\n </span>\n } @else {\n <span class=\"status-value status-idle\">Idle</span>\n }\n </div>\n </div>\n\n <div class=\"card-actions\">\n @if (HasChanges(schedule.ID)) {\n <button class=\"btn btn-primary btn-save\"\n [disabled]=\"IsSaving(schedule.ID)\"\n (click)=\"SaveSchedule(schedule.ID)\">\n @if (IsSaving(schedule.ID)) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Saving...\n } @else {\n <i class=\"fa-solid fa-check\"></i>\n Save\n }\n </button>\n }\n <button class=\"btn btn-outline btn-run\"\n [disabled]=\"IsRunning(schedule.ID) || schedule.IsLocked\"\n (click)=\"RunNow(schedule.ID)\">\n @if (IsRunning(schedule.ID)) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Running...\n } @else {\n <i class=\"fa-solid fa-play\"></i>\n Run Now\n }\n </button>\n </div>\n </div>\n </div>\n }\n\n @if (Schedules.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-calendar-xmark\"></i>\n <p>No integrations found</p>\n </div>\n }\n </div>\n </div>\n}\n </mj-page-body>\n</mj-page-layout>\n", styles: ["/* ==========================================================================\n Schedules Component\n ========================================================================== */\n\n:host {\n display: block;\n height: 100%;\n overflow-y: auto;\n background: var(--mj-bg-page);\n}\n\n/* Slot passthrough now in <mj-page-header>; stat badges now via <mj-stat-badge>. */\n\n.schedules-root {\n padding: 24px;\n max-width: 1400px;\n margin: 0 auto;\n}\n\n.loading-container {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 300px;\n}\n\n/* --------------------------------------------------------------------------\n Header\n -------------------------------------------------------------------------- */\n\n/* --------------------------------------------------------------------------\n Buttons (shared)\n -------------------------------------------------------------------------- */\n\n.btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n border-radius: 8px;\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n border: none;\n transition: all 0.15s ease;\n white-space: nowrap;\n}\n\n.btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.btn-primary {\n background: var(--mj-brand-primary);\n color: var(--mj-bg-surface);\n}\n\n.btn-primary:hover:not(:disabled) {\n background: var(--mj-color-info-700);\n}\n\n.btn-outline {\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-strong);\n}\n\n.btn-outline:hover:not(:disabled) {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-text-disabled);\n}\n\n/* --------------------------------------------------------------------------\n Timeline Section\n -------------------------------------------------------------------------- */\n\n.timeline-section {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n padding: 20px 24px;\n margin-bottom: 24px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);\n border: 1px solid var(--mj-border-default);\n}\n\n.timeline-title {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 16px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.timeline-title i {\n color: var(--mj-text-muted);\n}\n\n.timeline-container {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n/* Grid labels row */\n.timeline-grid-labels {\n display: flex;\n align-items: flex-end;\n height: 20px;\n margin-bottom: 4px;\n}\n\n.timeline-label-spacer {\n width: 200px;\n min-width: 200px;\n flex-shrink: 0;\n}\n\n.timeline-grid-track {\n flex: 1;\n position: relative;\n height: 20px;\n}\n\n.timeline-hour-label {\n position: absolute;\n font-size: 10px;\n color: var(--mj-text-disabled);\n transform: translateX(-50%);\n white-space: nowrap;\n}\n\n/* Individual timeline rows */\n.timeline-row {\n display: flex;\n align-items: center;\n height: 28px;\n}\n\n.timeline-row-label {\n width: 200px;\n min-width: 200px;\n flex-shrink: 0;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n padding-right: 16px;\n}\n\n.timeline-track-container {\n flex: 1;\n position: relative;\n height: 28px;\n display: flex;\n align-items: center;\n}\n\n.timeline-track {\n position: absolute;\n left: 0;\n right: 0;\n height: 4px;\n background: var(--mj-border-default);\n border-radius: 2px;\n}\n\n.timeline-grid-line {\n position: absolute;\n top: 0;\n bottom: 0;\n width: 1px;\n background: var(--mj-border-subtle);\n z-index: 0;\n}\n\n/* Markers */\n.timeline-marker {\n position: absolute;\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: var(--mj-text-disabled);\n transform: translate(-50%, 0);\n z-index: 2;\n transition: all 0.2s ease;\n}\n\n.timeline-marker:hover {\n transform: translate(-50%, 0) scale(1.4);\n}\n\n.timeline-marker-next {\n width: 12px;\n height: 12px;\n background: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.2);\n}\n\n/* Now line */\n.timeline-now-line {\n position: absolute;\n left: 0;\n top: -2px;\n bottom: -2px;\n width: 2px;\n background: var(--mj-status-error);\n z-index: 3;\n border-radius: 1px;\n}\n\n/* Locked indicator */\n.timeline-locked-indicator {\n position: absolute;\n left: -4px;\n font-size: 12px;\n color: var(--mj-color-warning-600);\n z-index: 4;\n animation: pulse-opacity 1.5s ease-in-out infinite;\n}\n\n@keyframes pulse-opacity {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.4; }\n}\n\n/* --------------------------------------------------------------------------\n Schedule Cards\n -------------------------------------------------------------------------- */\n\n.cards-section {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.schedule-card {\n display: flex;\n align-items: flex-start;\n background: var(--mj-bg-surface);\n border-radius: 12px;\n padding: 24px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);\n border: 1px solid var(--mj-border-default);\n transition: box-shadow 0.2s ease;\n gap: 32px;\n}\n\n.schedule-card:hover {\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);\n}\n\n.schedule-card-disabled {\n opacity: 0.6;\n}\n\n/* Card: Left (info) */\n.card-info {\n display: flex;\n align-items: flex-start;\n gap: 16px;\n min-width: 220px;\n flex-shrink: 0;\n}\n\n.card-icon {\n width: 48px;\n height: 48px;\n border-radius: 12px;\n background: var(--mj-status-info-bg);\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.card-icon i {\n font-size: 20px;\n color: var(--mj-brand-primary);\n}\n\n.card-details {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.card-name {\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.card-company {\n font-size: 12px;\n color: var(--mj-text-disabled);\n}\n\n.card-badges {\n display: flex;\n gap: 6px;\n margin-top: 4px;\n flex-wrap: wrap;\n}\n\n.badge {\n font-size: 11px;\n font-weight: 500;\n padding: 2px 8px;\n border-radius: 10px;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.badge-success {\n background: var(--mj-status-success-bg);\n color: var(--mj-color-success-600);\n}\n\n.badge-gray {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-muted);\n}\n\n.badge-running {\n background: var(--mj-color-warning-100);\n color: var(--mj-color-warning-600);\n}\n\n/* Card: Center (config) */\n.card-config {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.config-row {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n/* Toggle switch */\n.toggle-label {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n}\n\n.toggle-switch {\n position: relative;\n width: 40px;\n height: 22px;\n border-radius: 11px;\n background: var(--mj-color-neutral-300);\n border: none;\n cursor: pointer;\n transition: background 0.2s ease;\n padding: 0;\n flex-shrink: 0;\n}\n\n.toggle-switch.toggle-on {\n background: var(--mj-brand-primary);\n}\n\n.toggle-knob {\n position: absolute;\n top: 2px;\n left: 2px;\n width: 18px;\n height: 18px;\n border-radius: 50%;\n background: var(--mj-bg-surface);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);\n transition: transform 0.2s ease;\n}\n\n.toggle-on .toggle-knob {\n transform: translateX(18px);\n}\n\n/* Type pills */\n.type-pills {\n display: flex;\n gap: 4px;\n background: var(--mj-bg-surface-hover);\n border-radius: 8px;\n padding: 3px;\n width: fit-content;\n}\n\n.type-pill {\n padding: 5px 14px;\n border-radius: 6px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-muted);\n background: transparent;\n border: none;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.type-pill:hover {\n color: var(--mj-text-secondary);\n}\n\n.type-pill-active {\n background: var(--mj-bg-surface);\n color: var(--mj-brand-primary);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);\n}\n\n/* Interval presets */\n.interval-presets {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n}\n\n.preset-btn {\n padding: 4px 12px;\n border-radius: 6px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-hover);\n border: 1px solid var(--mj-border-default);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.preset-btn:hover {\n border-color: var(--mj-text-disabled);\n color: var(--mj-text-secondary);\n}\n\n.preset-btn-active {\n background: var(--mj-status-info-bg);\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n/* Custom interval input */\n.custom-interval {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-top: 4px;\n}\n\n.interval-input {\n width: 100px;\n padding: 5px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n outline: none;\n transition: border-color 0.15s ease;\n}\n\n.interval-input:focus {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.1);\n}\n\n.interval-unit {\n font-size: 12px;\n color: var(--mj-text-disabled);\n}\n\n/* Cron config */\n.cron-presets {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n}\n\n.cron-input-row {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-top: 4px;\n flex-wrap: wrap;\n}\n\n.cron-input {\n width: 180px;\n padding: 5px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 12px;\n font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', monospace;\n color: var(--mj-text-secondary);\n outline: none;\n transition: border-color 0.15s ease;\n}\n\n.cron-input:focus {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.1);\n}\n\n.cron-description {\n font-size: 12px;\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n/* Card: Right (status) */\n.card-status {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 16px;\n min-width: 180px;\n flex-shrink: 0;\n}\n\n.status-items {\n display: flex;\n flex-direction: column;\n gap: 8px;\n text-align: right;\n}\n\n.status-item {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.status-label {\n font-size: 11px;\n color: var(--mj-text-disabled);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.status-value {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n}\n\n.status-running {\n color: var(--mj-color-warning-600);\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 6px;\n}\n\n.status-idle {\n color: var(--mj-color-success-600);\n}\n\n/* Card actions */\n.card-actions {\n display: flex;\n gap: 8px;\n}\n\n.btn-save {\n animation: slideIn 0.2s ease;\n}\n\n@keyframes slideIn {\n from {\n opacity: 0;\n transform: translateX(8px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n\n.btn-run {\n font-size: 12px;\n padding: 6px 12px;\n}\n\n/* --------------------------------------------------------------------------\n Empty State\n -------------------------------------------------------------------------- */\n\n.empty-state {\n text-align: center;\n padding: 60px 24px;\n color: var(--mj-text-disabled);\n}\n\n.empty-state i {\n font-size: 48px;\n margin-bottom: 16px;\n display: block;\n}\n\n.empty-state p {\n font-size: 15px;\n margin: 0;\n}\n\n/* --------------------------------------------------------------------------\n Responsive\n -------------------------------------------------------------------------- */\n\n@media (max-width: 900px) {\n .schedule-card {\n flex-direction: column;\n gap: 20px;\n }\n\n .card-info {\n min-width: 0;\n width: 100%;\n }\n\n .card-config {\n width: 100%;\n }\n\n .card-status {\n align-items: flex-start;\n width: 100%;\n min-width: 0;\n }\n\n .status-items {\n text-align: left;\n flex-direction: row;\n gap: 20px;\n flex-wrap: wrap;\n }\n\n .status-running {\n justify-content: flex-start;\n }\n\n .card-actions {\n width: 100%;\n }\n\n .card-actions .btn {\n flex: 1;\n justify-content: center;\n }\n}\n\n@media (max-width: 768px) {\n .timeline-section {\n display: none;\n }\n\n .schedules-root {\n padding: 16px;\n }\n}\n"] }]
|
|
932
932
|
}], null, null); })();
|
|
933
933
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SchedulesComponent, { className: "SchedulesComponent", filePath: "src/Integration/components/schedules/schedules.component.ts", lineNumber: 63 }); })();
|
|
934
934
|
export function LoadSchedulesComponent() {
|