@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.
Files changed (348) hide show
  1. package/dist/AI/components/agents/agent-configuration.component.d.ts +51 -0
  2. package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
  3. package/dist/AI/components/agents/agent-configuration.component.js +399 -292
  4. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  5. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts +8 -2
  6. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts.map +1 -1
  7. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js +87 -85
  8. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js.map +1 -1
  9. package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts +75 -0
  10. package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts.map +1 -1
  11. package/dist/AI/components/analytics/ai-analytics-resource.component.js +400 -89
  12. package/dist/AI/components/analytics/ai-analytics-resource.component.js.map +1 -1
  13. package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts +5 -0
  14. package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts.map +1 -1
  15. package/dist/AI/components/analytics/analytics-filter-bar.component.js +184 -135
  16. package/dist/AI/components/analytics/analytics-filter-bar.component.js.map +1 -1
  17. package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts +8 -2
  18. package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts.map +1 -1
  19. package/dist/AI/components/analytics/cost-budget/cost-budget.component.js +104 -103
  20. package/dist/AI/components/analytics/cost-budget/cost-budget.component.js.map +1 -1
  21. package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts +8 -2
  22. package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts.map +1 -1
  23. package/dist/AI/components/analytics/error-analysis/error-analysis.component.js +76 -74
  24. package/dist/AI/components/analytics/error-analysis/error-analysis.component.js.map +1 -1
  25. package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts.map +1 -1
  26. package/dist/AI/components/analytics/executive-summary/executive-summary.component.js +67 -87
  27. package/dist/AI/components/analytics/executive-summary/executive-summary.component.js.map +1 -1
  28. package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts +12 -19
  29. package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts.map +1 -1
  30. package/dist/AI/components/analytics/model-performance/model-performance.component.js +96 -203
  31. package/dist/AI/components/analytics/model-performance/model-performance.component.js.map +1 -1
  32. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts.map +1 -1
  33. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js +110 -126
  34. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js.map +1 -1
  35. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts.map +1 -1
  36. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js +61 -77
  37. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js.map +1 -1
  38. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +990 -992
  39. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
  40. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +6 -3
  41. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
  42. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +493 -490
  43. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
  44. package/dist/AI/components/models/model-management.component.d.ts +17 -0
  45. package/dist/AI/components/models/model-management.component.d.ts.map +1 -1
  46. package/dist/AI/components/models/model-management.component.js +370 -425
  47. package/dist/AI/components/models/model-management.component.js.map +1 -1
  48. package/dist/AI/components/prompts/prompt-management.component.d.ts +17 -0
  49. package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
  50. package/dist/AI/components/prompts/prompt-management.component.js +317 -357
  51. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  52. package/dist/AI/components/requests/agent-requests-resource.component.d.ts +11 -0
  53. package/dist/AI/components/requests/agent-requests-resource.component.d.ts.map +1 -1
  54. package/dist/AI/components/requests/agent-requests-resource.component.js +170 -175
  55. package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
  56. package/dist/AI/components/system/system-configuration.component.d.ts +19 -0
  57. package/dist/AI/components/system/system-configuration.component.d.ts.map +1 -1
  58. package/dist/AI/components/system/system-configuration.component.js +403 -362
  59. package/dist/AI/components/system/system-configuration.component.js.map +1 -1
  60. package/dist/AI/components/tags/tags-resource.component.js +781 -783
  61. package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
  62. package/dist/AI/components/vectors/vector-management-resource.component.d.ts +8 -3
  63. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
  64. package/dist/AI/components/vectors/vector-management-resource.component.js +547 -521
  65. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  66. package/dist/Actions/components/actions-overview.component.d.ts +6 -0
  67. package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
  68. package/dist/Actions/components/actions-overview.component.js +79 -30
  69. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  70. package/dist/Actions/components/execution-monitoring.component.d.ts +9 -3
  71. package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
  72. package/dist/Actions/components/execution-monitoring.component.js +196 -142
  73. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  74. package/dist/Actions/components/explorer/action-explorer.component.d.ts +41 -1
  75. package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -1
  76. package/dist/Actions/components/explorer/action-explorer.component.js +388 -94
  77. package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
  78. package/dist/Actions/components/explorer/index.d.ts +0 -1
  79. package/dist/Actions/components/explorer/index.d.ts.map +1 -1
  80. package/dist/Actions/components/explorer/index.js +0 -1
  81. package/dist/Actions/components/explorer/index.js.map +1 -1
  82. package/dist/Admin/admin-data-schema.component.js +32 -40
  83. package/dist/Admin/admin-data-schema.component.js.map +1 -1
  84. package/dist/Admin/admin-dev-tools-resource.component.js +32 -40
  85. package/dist/Admin/admin-dev-tools-resource.component.js.map +1 -1
  86. package/dist/Admin/admin-identity-access.component.js +32 -40
  87. package/dist/Admin/admin-identity-access.component.js.map +1 -1
  88. package/dist/Admin/admin-monitoring.component.js +32 -40
  89. package/dist/Admin/admin-monitoring.component.js.map +1 -1
  90. package/dist/ApplicationRoles/application-roles-resource.component.js +76 -82
  91. package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
  92. package/dist/Archiving/components/archive-config-resource.component.d.ts.map +1 -1
  93. package/dist/Archiving/components/archive-config-resource.component.js +24 -5
  94. package/dist/Archiving/components/archive-config-resource.component.js.map +1 -1
  95. package/dist/Archiving/components/archive-runs-resource.component.d.ts.map +1 -1
  96. package/dist/Archiving/components/archive-runs-resource.component.js +24 -5
  97. package/dist/Archiving/components/archive-runs-resource.component.js.map +1 -1
  98. package/dist/Communication/communication-logs-resource.component.d.ts +1 -1
  99. package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
  100. package/dist/Communication/communication-logs-resource.component.js +80 -99
  101. package/dist/Communication/communication-logs-resource.component.js.map +1 -1
  102. package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
  103. package/dist/Communication/communication-monitor-resource.component.js +127 -106
  104. package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
  105. package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
  106. package/dist/Communication/communication-providers-resource.component.js +44 -45
  107. package/dist/Communication/communication-providers-resource.component.js.map +1 -1
  108. package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
  109. package/dist/Communication/communication-runs-resource.component.js +60 -58
  110. package/dist/Communication/communication-runs-resource.component.js.map +1 -1
  111. package/dist/Communication/communication-templates-resource.component.d.ts +1 -1
  112. package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -1
  113. package/dist/Communication/communication-templates-resource.component.js +139 -162
  114. package/dist/Communication/communication-templates-resource.component.js.map +1 -1
  115. package/dist/Credentials/components/credentials-audit-resource.component.d.ts +7 -0
  116. package/dist/Credentials/components/credentials-audit-resource.component.d.ts.map +1 -1
  117. package/dist/Credentials/components/credentials-audit-resource.component.js +310 -297
  118. package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
  119. package/dist/Credentials/components/credentials-categories-resource.component.js +245 -266
  120. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  121. package/dist/Credentials/components/credentials-list-resource.component.d.ts +7 -0
  122. package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
  123. package/dist/Credentials/components/credentials-list-resource.component.js +381 -399
  124. package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
  125. package/dist/Credentials/components/credentials-overview-resource.component.js +222 -228
  126. package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
  127. package/dist/Credentials/components/credentials-types-resource.component.d.ts +6 -0
  128. package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
  129. package/dist/Credentials/components/credentials-types-resource.component.js +294 -305
  130. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  131. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts +8 -0
  132. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts.map +1 -1
  133. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +21 -0
  134. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js.map +1 -1
  135. package/dist/DatabaseDesigner/components/entity-list.component.js +147 -160
  136. package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -1
  137. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +1 -1
  138. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -1
  139. package/dist/DatabaseDesigner/database-designer-dashboards.module.js +19 -1
  140. package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -1
  141. package/dist/EntityAdmin/entity-admin-dashboard.component.js +20 -16
  142. package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
  143. package/dist/Home/home-dashboard.component.d.ts +6 -0
  144. package/dist/Home/home-dashboard.component.d.ts.map +1 -1
  145. package/dist/Home/home-dashboard.component.js +521 -485
  146. package/dist/Home/home-dashboard.component.js.map +1 -1
  147. package/dist/Integration/components/activity/activity.component.d.ts +8 -0
  148. package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
  149. package/dist/Integration/components/activity/activity.component.js +309 -318
  150. package/dist/Integration/components/activity/activity.component.js.map +1 -1
  151. package/dist/Integration/components/connections/connections.component.js +866 -847
  152. package/dist/Integration/components/connections/connections.component.js.map +1 -1
  153. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +234 -233
  154. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
  155. package/dist/Integration/components/overview/overview.component.js +182 -163
  156. package/dist/Integration/components/overview/overview.component.js.map +1 -1
  157. package/dist/Integration/components/pipelines/pipelines.component.d.ts +2 -0
  158. package/dist/Integration/components/pipelines/pipelines.component.d.ts.map +1 -1
  159. package/dist/Integration/components/pipelines/pipelines.component.js +610 -606
  160. package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
  161. package/dist/Integration/components/schedules/schedules.component.js +241 -241
  162. package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
  163. package/dist/Integration/integration.module.d.ts +1 -1
  164. package/dist/Integration/integration.module.d.ts.map +1 -1
  165. package/dist/Integration/integration.module.js +28 -1
  166. package/dist/Integration/integration.module.js.map +1 -1
  167. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +673 -674
  168. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
  169. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +54 -51
  170. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
  171. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +745 -703
  172. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
  173. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts +12 -1
  174. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts.map +1 -1
  175. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +191 -120
  176. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -1
  177. package/dist/Lists/components/lists-browse-resource.component.d.ts +18 -1
  178. package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
  179. package/dist/Lists/components/lists-browse-resource.component.js +486 -532
  180. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  181. package/dist/Lists/components/lists-categories-resource.component.d.ts.map +1 -1
  182. package/dist/Lists/components/lists-categories-resource.component.js +152 -160
  183. package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
  184. package/dist/Lists/components/lists-my-lists-resource.component.d.ts.map +1 -1
  185. package/dist/Lists/components/lists-my-lists-resource.component.js +302 -319
  186. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  187. package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
  188. package/dist/Lists/components/lists-operations-resource.component.js +234 -246
  189. package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
  190. package/dist/MCP/mcp-dashboard.component.d.ts +20 -0
  191. package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
  192. package/dist/MCP/mcp-dashboard.component.js +1248 -1338
  193. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  194. package/dist/MCP/mcp.module.d.ts +1 -1
  195. package/dist/MCP/mcp.module.d.ts.map +1 -1
  196. package/dist/MCP/mcp.module.js +34 -1
  197. package/dist/MCP/mcp.module.js.map +1 -1
  198. package/dist/Permissions/audit-log-resource.component.js +76 -85
  199. package/dist/Permissions/audit-log-resource.component.js.map +1 -1
  200. package/dist/Permissions/resource-access-resource.component.js +64 -69
  201. package/dist/Permissions/resource-access-resource.component.js.map +1 -1
  202. package/dist/Permissions/user-access-resource.component.js +63 -74
  203. package/dist/Permissions/user-access-resource.component.js.map +1 -1
  204. package/dist/QueryBrowser/query-browser-resource.component.js +2 -2
  205. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  206. package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts +2 -1
  207. package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts.map +1 -1
  208. package/dist/Scheduling/components/scheduling-activity-resource.component.js +11 -12
  209. package/dist/Scheduling/components/scheduling-activity-resource.component.js.map +1 -1
  210. package/dist/Scheduling/components/scheduling-activity.component.d.ts +9 -1
  211. package/dist/Scheduling/components/scheduling-activity.component.d.ts.map +1 -1
  212. package/dist/Scheduling/components/scheduling-activity.component.js +250 -197
  213. package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
  214. package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts +2 -1
  215. package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts.map +1 -1
  216. package/dist/Scheduling/components/scheduling-jobs-resource.component.js +11 -12
  217. package/dist/Scheduling/components/scheduling-jobs-resource.component.js.map +1 -1
  218. package/dist/Scheduling/components/scheduling-jobs.component.d.ts +9 -1
  219. package/dist/Scheduling/components/scheduling-jobs.component.d.ts.map +1 -1
  220. package/dist/Scheduling/components/scheduling-jobs.component.js +203 -147
  221. package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
  222. package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts +2 -1
  223. package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts.map +1 -1
  224. package/dist/Scheduling/components/scheduling-overview-resource.component.js +11 -12
  225. package/dist/Scheduling/components/scheduling-overview-resource.component.js.map +1 -1
  226. package/dist/Scheduling/components/scheduling-overview.component.d.ts +3 -1
  227. package/dist/Scheduling/components/scheduling-overview.component.d.ts.map +1 -1
  228. package/dist/Scheduling/components/scheduling-overview.component.js +224 -190
  229. package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
  230. package/dist/Scheduling/scheduling-dashboard.component.d.ts +19 -6
  231. package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
  232. package/dist/Scheduling/scheduling-dashboard.component.js +262 -104
  233. package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
  234. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts +4 -0
  235. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
  236. package/dist/SystemDiagnostics/system-diagnostics.component.js +812 -784
  237. package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
  238. package/dist/Testing/components/testing-analytics-resource.component.d.ts +2 -1
  239. package/dist/Testing/components/testing-analytics-resource.component.d.ts.map +1 -1
  240. package/dist/Testing/components/testing-analytics-resource.component.js +7 -14
  241. package/dist/Testing/components/testing-analytics-resource.component.js.map +1 -1
  242. package/dist/Testing/components/testing-analytics.component.d.ts +3 -1
  243. package/dist/Testing/components/testing-analytics.component.d.ts.map +1 -1
  244. package/dist/Testing/components/testing-analytics.component.js +420 -393
  245. package/dist/Testing/components/testing-analytics.component.js.map +1 -1
  246. package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts +2 -1
  247. package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts.map +1 -1
  248. package/dist/Testing/components/testing-dashboard-tab-resource.component.js +16 -19
  249. package/dist/Testing/components/testing-dashboard-tab-resource.component.js.map +1 -1
  250. package/dist/Testing/components/testing-dashboard-tab.component.d.ts +3 -1
  251. package/dist/Testing/components/testing-dashboard-tab.component.d.ts.map +1 -1
  252. package/dist/Testing/components/testing-dashboard-tab.component.js +157 -122
  253. package/dist/Testing/components/testing-dashboard-tab.component.js.map +1 -1
  254. package/dist/Testing/components/testing-explorer-resource.component.d.ts +2 -1
  255. package/dist/Testing/components/testing-explorer-resource.component.d.ts.map +1 -1
  256. package/dist/Testing/components/testing-explorer-resource.component.js +7 -12
  257. package/dist/Testing/components/testing-explorer-resource.component.js.map +1 -1
  258. package/dist/Testing/components/testing-explorer.component.d.ts +8 -1
  259. package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
  260. package/dist/Testing/components/testing-explorer.component.js +587 -608
  261. package/dist/Testing/components/testing-explorer.component.js.map +1 -1
  262. package/dist/Testing/components/testing-review-resource.component.d.ts +4 -1
  263. package/dist/Testing/components/testing-review-resource.component.d.ts.map +1 -1
  264. package/dist/Testing/components/testing-review-resource.component.js +9 -12
  265. package/dist/Testing/components/testing-review-resource.component.js.map +1 -1
  266. package/dist/Testing/components/testing-review.component.d.ts +3 -1
  267. package/dist/Testing/components/testing-review.component.d.ts.map +1 -1
  268. package/dist/Testing/components/testing-review.component.js +310 -274
  269. package/dist/Testing/components/testing-review.component.js.map +1 -1
  270. package/dist/Testing/components/testing-runs-resource.component.d.ts +2 -1
  271. package/dist/Testing/components/testing-runs-resource.component.d.ts.map +1 -1
  272. package/dist/Testing/components/testing-runs-resource.component.js +16 -19
  273. package/dist/Testing/components/testing-runs-resource.component.js.map +1 -1
  274. package/dist/Testing/components/testing-runs.component.d.ts +3 -1
  275. package/dist/Testing/components/testing-runs.component.d.ts.map +1 -1
  276. package/dist/Testing/components/testing-runs.component.js +307 -273
  277. package/dist/Testing/components/testing-runs.component.js.map +1 -1
  278. package/dist/Testing/testing-dashboard.component.d.ts +2 -0
  279. package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
  280. package/dist/Testing/testing-dashboard.component.js +107 -93
  281. package/dist/Testing/testing-dashboard.component.js.map +1 -1
  282. package/dist/VersionHistory/components/diff-resource.component.js +185 -188
  283. package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
  284. package/dist/VersionHistory/components/graph-resource.component.js +154 -184
  285. package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
  286. package/dist/VersionHistory/components/labels-resource.component.d.ts +7 -0
  287. package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -1
  288. package/dist/VersionHistory/components/labels-resource.component.js +350 -354
  289. package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
  290. package/dist/VersionHistory/components/restore-resource.component.js +163 -169
  291. package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
  292. package/dist/actions-dashboards.module.d.ts +15 -16
  293. package/dist/actions-dashboards.module.d.ts.map +1 -1
  294. package/dist/actions-dashboards.module.js +34 -11
  295. package/dist/actions-dashboards.module.js.map +1 -1
  296. package/dist/ai-dashboards.module.d.ts +45 -48
  297. package/dist/ai-dashboards.module.d.ts.map +1 -1
  298. package/dist/ai-dashboards.module.js +36 -10
  299. package/dist/ai-dashboards.module.js.map +1 -1
  300. package/dist/archiving-dashboards.module.d.ts +2 -1
  301. package/dist/archiving-dashboards.module.d.ts.map +1 -1
  302. package/dist/archiving-dashboards.module.js +12 -2
  303. package/dist/archiving-dashboards.module.js.map +1 -1
  304. package/dist/communication-dashboards.module.d.ts +2 -1
  305. package/dist/communication-dashboards.module.d.ts.map +1 -1
  306. package/dist/communication-dashboards.module.js +24 -3
  307. package/dist/communication-dashboards.module.js.map +1 -1
  308. package/dist/core-dashboards.module.d.ts +1 -1
  309. package/dist/core-dashboards.module.d.ts.map +1 -1
  310. package/dist/core-dashboards.module.js +31 -1
  311. package/dist/core-dashboards.module.js.map +1 -1
  312. package/dist/credentials-dashboards.module.d.ts +1 -1
  313. package/dist/credentials-dashboards.module.d.ts.map +1 -1
  314. package/dist/credentials-dashboards.module.js +28 -1
  315. package/dist/credentials-dashboards.module.js.map +1 -1
  316. package/dist/lists-dashboards.module.d.ts +1 -1
  317. package/dist/lists-dashboards.module.d.ts.map +1 -1
  318. package/dist/lists-dashboards.module.js +28 -1
  319. package/dist/lists-dashboards.module.js.map +1 -1
  320. package/dist/public-api.d.ts +2 -2
  321. package/dist/public-api.d.ts.map +1 -1
  322. package/dist/public-api.js +3 -3
  323. package/dist/public-api.js.map +1 -1
  324. package/dist/scheduling-dashboards.module.d.ts +1 -1
  325. package/dist/scheduling-dashboards.module.d.ts.map +1 -1
  326. package/dist/scheduling-dashboards.module.js +31 -1
  327. package/dist/scheduling-dashboards.module.js.map +1 -1
  328. package/dist/testing-dashboards.module.d.ts +8 -7
  329. package/dist/testing-dashboards.module.d.ts.map +1 -1
  330. package/dist/testing-dashboards.module.js +30 -0
  331. package/dist/testing-dashboards.module.js.map +1 -1
  332. package/package.json +52 -52
  333. package/dist/AI/components/agents/agent-filter-panel.component.d.ts +0 -56
  334. package/dist/AI/components/agents/agent-filter-panel.component.d.ts.map +0 -1
  335. package/dist/AI/components/agents/agent-filter-panel.component.js +0 -285
  336. package/dist/AI/components/agents/agent-filter-panel.component.js.map +0 -1
  337. package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts +0 -49
  338. package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts.map +0 -1
  339. package/dist/AI/components/prompts/prompt-filter-panel.component.js +0 -184
  340. package/dist/AI/components/prompts/prompt-filter-panel.component.js.map +0 -1
  341. package/dist/AI/components/system/system-config-filter-panel.component.d.ts +0 -33
  342. package/dist/AI/components/system/system-config-filter-panel.component.d.ts.map +0 -1
  343. package/dist/AI/components/system/system-config-filter-panel.component.js +0 -144
  344. package/dist/AI/components/system/system-config-filter-panel.component.js.map +0 -1
  345. package/dist/Actions/components/explorer/action-toolbar.component.d.ts +0 -63
  346. package/dist/Actions/components/explorer/action-toolbar.component.d.ts.map +0 -1
  347. package/dist/Actions/components/explorer/action-toolbar.component.js +0 -463
  348. 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-shared-generic";
14
- function SchedulesComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
15
- i0.ɵɵelementStart(0, "div", 0);
16
- i0.ɵɵelement(1, "mj-loading", 2);
17
- i0.ɵɵelementEnd();
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 SchedulesComponent_Conditional_1_Conditional_10_Template(rf, ctx) { if (rf & 1) {
20
- i0.ɵɵelementStart(0, "span", 8);
21
- i0.ɵɵelement(1, "i", 15);
22
- i0.ɵɵtext(2);
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 ctx_r1 = i0.ɵɵnextContext(2);
26
- i0.ɵɵadvance(2);
27
- i0.ɵɵtextInterpolate1(" ", ctx_r1.LockedCount, " running ");
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 SchedulesComponent_Conditional_1_Conditional_14_For_9_Conditional_0_Template(rf, ctx) { if (rf & 1) {
30
- i0.ɵɵelementStart(0, "span", 24);
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 hour_r3 = i0.ɵɵnextContext().$implicit;
35
- const ctx_r1 = i0.ɵɵnextContext(3);
36
- i0.ɵɵstyleProp("left", ctx_r1.ComputeTimelinePosition(hour_r3, 0), "%");
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(" ", hour_r3, ":00 ");
49
+ i0.ɵɵtextInterpolate1(" ", hour_r2, ":00 ");
39
50
  } }
40
- function SchedulesComponent_Conditional_1_Conditional_14_For_9_Template(rf, ctx) { if (rf & 1) {
41
- i0.ɵɵconditionalCreate(0, SchedulesComponent_Conditional_1_Conditional_14_For_9_Conditional_0_Template, 2, 3, "span", 23);
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 hour_r3 = ctx.$implicit;
44
- i0.ɵɵconditional(hour_r3 % 4 === 0 ? 0 : -1);
54
+ const hour_r2 = ctx.$implicit;
55
+ i0.ɵɵconditional(hour_r2 % 4 === 0 ? 0 : -1);
45
56
  } }
46
- function SchedulesComponent_Conditional_1_Conditional_14_For_11_For_5_Conditional_0_Template(rf, ctx) { if (rf & 1) {
47
- i0.ɵɵelement(0, "div", 32);
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 hour_r4 = i0.ɵɵnextContext().$implicit;
50
- const ctx_r1 = i0.ɵɵnextContext(4);
51
- i0.ɵɵstyleProp("left", ctx_r1.ComputeTimelinePosition(hour_r4, 0), "%");
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 SchedulesComponent_Conditional_1_Conditional_14_For_11_For_5_Template(rf, ctx) { if (rf & 1) {
54
- i0.ɵɵconditionalCreate(0, SchedulesComponent_Conditional_1_Conditional_14_For_11_For_5_Conditional_0_Template, 1, 2, "div", 31);
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 hour_r4 = ctx.$implicit;
57
- i0.ɵɵconditional(hour_r4 % 4 === 0 ? 0 : -1);
67
+ const hour_r3 = ctx.$implicit;
68
+ i0.ɵɵconditional(hour_r3 % 4 === 0 ? 0 : -1);
58
69
  } }
59
- function SchedulesComponent_Conditional_1_Conditional_14_For_11_For_8_Template(rf, ctx) { if (rf & 1) {
60
- i0.ɵɵelement(0, "div", 33);
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 marker_r5 = ctx.$implicit;
63
- const ctx_r1 = i0.ɵɵnextContext(4);
64
- i0.ɵɵstyleProp("left", ctx_r1.ComputeTimelinePosition(marker_r5.Hour, marker_r5.Minute), "%");
65
- i0.ɵɵclassProp("timeline-marker-next", marker_r5.IsNext);
66
- i0.ɵɵproperty("title", marker_r5.Hour + ":" + ("" + marker_r5.Minute).padStart(2, "0"));
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 SchedulesComponent_Conditional_1_Conditional_14_For_11_Conditional_9_Template(rf, ctx) { if (rf & 1) {
69
- i0.ɵɵelementStart(0, "div", 29);
70
- i0.ɵɵelement(1, "i", 15);
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 SchedulesComponent_Conditional_1_Conditional_14_For_11_Template(rf, ctx) { if (rf & 1) {
74
- i0.ɵɵelementStart(0, "div", 22)(1, "div", 25);
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", 26);
78
- i0.ɵɵrepeaterCreate(4, SchedulesComponent_Conditional_1_Conditional_14_For_11_For_5_Template, 1, 1, null, null, i0.ɵɵcomponentInstance().TrackHour, true);
79
- i0.ɵɵelement(6, "div", 27);
80
- i0.ɵɵrepeaterCreate(7, SchedulesComponent_Conditional_1_Conditional_14_For_11_For_8_Template, 1, 5, "div", 28, i0.ɵɵcomponentInstance().TrackMarker, true);
81
- i0.ɵɵconditionalCreate(9, SchedulesComponent_Conditional_1_Conditional_14_For_11_Conditional_9_Template, 2, 0, "div", 29);
82
- i0.ɵɵelement(10, "div", 30);
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 row_r6 = ctx.$implicit;
86
- const ctx_r1 = i0.ɵɵnextContext(3);
96
+ const row_r5 = ctx.$implicit;
97
+ const ctx_r0 = i0.ɵɵnextContext(3);
87
98
  i0.ɵɵadvance();
88
- i0.ɵɵproperty("title", row_r6.IntegrationName);
99
+ i0.ɵɵproperty("title", row_r5.IntegrationName);
89
100
  i0.ɵɵadvance();
90
- i0.ɵɵtextInterpolate1(" ", row_r6.IntegrationName, " ");
101
+ i0.ɵɵtextInterpolate1(" ", row_r5.IntegrationName, " ");
91
102
  i0.ɵɵadvance(2);
92
- i0.ɵɵrepeater(ctx_r1.TimelineHours);
103
+ i0.ɵɵrepeater(ctx_r0.TimelineHours);
93
104
  i0.ɵɵadvance(3);
94
- i0.ɵɵrepeater(row_r6.Markers);
105
+ i0.ɵɵrepeater(row_r5.Markers);
95
106
  i0.ɵɵadvance(2);
96
- i0.ɵɵconditional(row_r6.IsLocked ? 9 : -1);
107
+ i0.ɵɵconditional(row_r5.IsLocked ? 9 : -1);
97
108
  } }
98
- function SchedulesComponent_Conditional_1_Conditional_14_Template(rf, ctx) { if (rf & 1) {
99
- i0.ɵɵelementStart(0, "div", 11)(1, "div", 16);
100
- i0.ɵɵelement(2, "i", 17);
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", 18)(5, "div", 19);
104
- i0.ɵɵelement(6, "div", 20);
105
- i0.ɵɵelementStart(7, "div", 21);
106
- i0.ɵɵrepeaterCreate(8, SchedulesComponent_Conditional_1_Conditional_14_For_9_Template, 1, 1, null, null, i0.ɵɵcomponentInstance().TrackHour, true);
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, SchedulesComponent_Conditional_1_Conditional_14_For_11_Template, 11, 3, "div", 22, i0.ɵɵcomponentInstance().TrackTimelineByID, true);
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 ctx_r1 = i0.ɵɵnextContext(2);
122
+ const ctx_r0 = i0.ɵɵnextContext(2);
112
123
  i0.ɵɵadvance(8);
113
- i0.ɵɵrepeater(ctx_r1.TimelineHours);
124
+ i0.ɵɵrepeater(ctx_r0.TimelineHours);
114
125
  i0.ɵɵadvance(2);
115
- i0.ɵɵrepeater(ctx_r1.TimelineMarkers);
126
+ i0.ɵɵrepeater(ctx_r0.TimelineMarkers);
116
127
  } }
117
- function SchedulesComponent_Conditional_1_For_17_Conditional_10_Template(rf, ctx) { if (rf & 1) {
118
- i0.ɵɵelementStart(0, "span", 41);
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 SchedulesComponent_Conditional_1_For_17_Conditional_11_Template(rf, ctx) { if (rf & 1) {
123
- i0.ɵɵelementStart(0, "span", 42);
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 SchedulesComponent_Conditional_1_For_17_Conditional_12_Template(rf, ctx) { if (rf & 1) {
128
- i0.ɵɵelementStart(0, "span", 43);
129
- i0.ɵɵelement(1, "i", 15);
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 SchedulesComponent_Conditional_1_For_17_Conditional_19_Conditional_8_For_3_Template(rf, ctx) { if (rf & 1) {
134
- const _r11 = i0.ɵɵgetCurrentView();
135
- i0.ɵɵelementStart(0, "button", 66);
136
- i0.ɵɵlistener("click", function SchedulesComponent_Conditional_1_For_17_Conditional_19_Conditional_8_For_3_Template_button_click_0_listener() { const preset_r12 = i0.ɵɵrestoreView(_r11).$implicit; const schedule_r8 = i0.ɵɵnextContext(3).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.SetInterval(schedule_r8.ID, preset_r12.Minutes)); });
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 preset_r12 = ctx.$implicit;
141
- const schedule_r8 = i0.ɵɵnextContext(3).$implicit;
142
- const ctx_r1 = i0.ɵɵnextContext(2);
143
- i0.ɵɵclassProp("preset-btn-active", ctx_r1.IsIntervalSelected(schedule_r8, preset_r12.Minutes));
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(" ", preset_r12.Label, " ");
156
+ i0.ɵɵtextInterpolate1(" ", preset_r11.Label, " ");
146
157
  } }
147
- function SchedulesComponent_Conditional_1_For_17_Conditional_19_Conditional_8_Template(rf, ctx) { if (rf & 1) {
148
- const _r10 = i0.ɵɵgetCurrentView();
149
- i0.ɵɵelementStart(0, "div", 45)(1, "div", 61);
150
- i0.ɵɵrepeaterCreate(2, SchedulesComponent_Conditional_1_For_17_Conditional_19_Conditional_8_For_3_Template, 2, 3, "button", 62, i0.ɵɵcomponentInstance().TrackPresetByMinutes, true);
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", 63)(5, "input", 64);
153
- i0.ɵɵlistener("change", function SchedulesComponent_Conditional_1_For_17_Conditional_19_Conditional_8_Template_input_change_5_listener($event) { i0.ɵɵrestoreView(_r10); const schedule_r8 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.SetCustomInterval(schedule_r8.ID, $event)); });
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", 65);
166
+ i0.ɵɵelementStart(6, "span", 64);
156
167
  i0.ɵɵtext(7, "min");
157
168
  i0.ɵɵelementEnd()()();
158
169
  } if (rf & 2) {
159
- const schedule_r8 = i0.ɵɵnextContext(2).$implicit;
160
- const ctx_r1 = i0.ɵɵnextContext(2);
170
+ const schedule_r7 = i0.ɵɵnextContext(2).$implicit;
171
+ const ctx_r0 = i0.ɵɵnextContext(2);
161
172
  i0.ɵɵadvance(2);
162
- i0.ɵɵrepeater(ctx_r1.IntervalPresets);
173
+ i0.ɵɵrepeater(ctx_r0.IntervalPresets);
163
174
  i0.ɵɵadvance(3);
164
- i0.ɵɵproperty("value", ctx_r1.GetEffectiveInterval(schedule_r8));
175
+ i0.ɵɵproperty("value", ctx_r0.GetEffectiveInterval(schedule_r7));
165
176
  } }
166
- function SchedulesComponent_Conditional_1_For_17_Conditional_19_Conditional_9_For_3_Template(rf, ctx) { if (rf & 1) {
167
- const _r14 = i0.ɵɵgetCurrentView();
168
- i0.ɵɵelementStart(0, "button", 66);
169
- i0.ɵɵlistener("click", function SchedulesComponent_Conditional_1_For_17_Conditional_19_Conditional_9_For_3_Template_button_click_0_listener() { const preset_r15 = i0.ɵɵrestoreView(_r14).$implicit; const schedule_r8 = i0.ɵɵnextContext(3).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.SetCronExpression(schedule_r8.ID, preset_r15.Expression)); });
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 preset_r15 = ctx.$implicit;
174
- const schedule_r8 = i0.ɵɵnextContext(3).$implicit;
175
- const ctx_r1 = i0.ɵɵnextContext(2);
176
- i0.ɵɵclassProp("preset-btn-active", ctx_r1.GetEffectiveCron(schedule_r8) === preset_r15.Expression);
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(" ", preset_r15.Label, " ");
189
+ i0.ɵɵtextInterpolate1(" ", preset_r14.Label, " ");
179
190
  } }
180
- function SchedulesComponent_Conditional_1_For_17_Conditional_19_Conditional_9_Conditional_6_Template(rf, ctx) { if (rf & 1) {
181
- i0.ɵɵelementStart(0, "span", 70);
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 schedule_r8 = i0.ɵɵnextContext(3).$implicit;
186
- const ctx_r1 = i0.ɵɵnextContext(2);
196
+ const schedule_r7 = i0.ɵɵnextContext(3).$implicit;
197
+ const ctx_r0 = i0.ɵɵnextContext(2);
187
198
  i0.ɵɵadvance();
188
- i0.ɵɵtextInterpolate1(" ", ctx_r1.GetCronDescription(ctx_r1.GetEffectiveCron(schedule_r8)), " ");
199
+ i0.ɵɵtextInterpolate1(" ", ctx_r0.GetCronDescription(ctx_r0.GetEffectiveCron(schedule_r7)), " ");
189
200
  } }
190
- function SchedulesComponent_Conditional_1_For_17_Conditional_19_Conditional_9_Template(rf, ctx) { if (rf & 1) {
191
- const _r13 = i0.ɵɵgetCurrentView();
192
- i0.ɵɵelementStart(0, "div", 45)(1, "div", 67);
193
- i0.ɵɵrepeaterCreate(2, SchedulesComponent_Conditional_1_For_17_Conditional_19_Conditional_9_For_3_Template, 2, 3, "button", 62, i0.ɵɵcomponentInstance().TrackCronPresetByExpr, true);
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", 68)(5, "input", 69);
196
- i0.ɵɵlistener("change", function SchedulesComponent_Conditional_1_For_17_Conditional_19_Conditional_9_Template_input_change_5_listener($event) { i0.ɵɵrestoreView(_r13); const schedule_r8 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnCronInputChange(schedule_r8.ID, $event)); });
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, SchedulesComponent_Conditional_1_For_17_Conditional_19_Conditional_9_Conditional_6_Template, 2, 1, "span", 70);
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 schedule_r8 = i0.ɵɵnextContext(2).$implicit;
202
- const ctx_r1 = i0.ɵɵnextContext(2);
212
+ const schedule_r7 = i0.ɵɵnextContext(2).$implicit;
213
+ const ctx_r0 = i0.ɵɵnextContext(2);
203
214
  i0.ɵɵadvance(2);
204
- i0.ɵɵrepeater(ctx_r1.CronPresets);
215
+ i0.ɵɵrepeater(ctx_r0.CronPresets);
205
216
  i0.ɵɵadvance(3);
206
- i0.ɵɵproperty("value", ctx_r1.GetEffectiveCron(schedule_r8) ?? "");
217
+ i0.ɵɵproperty("value", ctx_r0.GetEffectiveCron(schedule_r7) ?? "");
207
218
  i0.ɵɵadvance();
208
- i0.ɵɵconditional(ctx_r1.GetEffectiveCron(schedule_r8) ? 6 : -1);
219
+ i0.ɵɵconditional(ctx_r0.GetEffectiveCron(schedule_r7) ? 6 : -1);
209
220
  } }
210
- function SchedulesComponent_Conditional_1_For_17_Conditional_19_Template(rf, ctx) { if (rf & 1) {
211
- const _r9 = i0.ɵɵgetCurrentView();
212
- i0.ɵɵelementStart(0, "div", 45)(1, "div", 59)(2, "button", 60);
213
- i0.ɵɵlistener("click", function SchedulesComponent_Conditional_1_For_17_Conditional_19_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r9); const schedule_r8 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.SetScheduleType(schedule_r8.ID, "Manual")); });
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", 60);
217
- i0.ɵɵlistener("click", function SchedulesComponent_Conditional_1_For_17_Conditional_19_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r9); const schedule_r8 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.SetScheduleType(schedule_r8.ID, "Interval")); });
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", 60);
221
- i0.ɵɵlistener("click", function SchedulesComponent_Conditional_1_For_17_Conditional_19_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r9); const schedule_r8 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.SetScheduleType(schedule_r8.ID, "Cron")); });
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, SchedulesComponent_Conditional_1_For_17_Conditional_19_Conditional_8_Template, 8, 1, "div", 45);
225
- i0.ɵɵconditionalCreate(9, SchedulesComponent_Conditional_1_For_17_Conditional_19_Conditional_9_Template, 7, 2, "div", 45);
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 schedule_r8 = i0.ɵɵnextContext().$implicit;
228
- const ctx_r1 = i0.ɵɵnextContext(2);
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", ctx_r1.GetEffectiveScheduleType(schedule_r8) === "Manual");
241
+ i0.ɵɵclassProp("type-pill-active", ctx_r0.GetEffectiveScheduleType(schedule_r7) === "Manual");
231
242
  i0.ɵɵadvance(2);
232
- i0.ɵɵclassProp("type-pill-active", ctx_r1.GetEffectiveScheduleType(schedule_r8) === "Interval");
243
+ i0.ɵɵclassProp("type-pill-active", ctx_r0.GetEffectiveScheduleType(schedule_r7) === "Interval");
233
244
  i0.ɵɵadvance(2);
234
- i0.ɵɵclassProp("type-pill-active", ctx_r1.GetEffectiveScheduleType(schedule_r8) === "Cron");
245
+ i0.ɵɵclassProp("type-pill-active", ctx_r0.GetEffectiveScheduleType(schedule_r7) === "Cron");
235
246
  i0.ɵɵadvance(2);
236
- i0.ɵɵconditional(ctx_r1.GetEffectiveScheduleType(schedule_r8) === "Interval" ? 8 : -1);
247
+ i0.ɵɵconditional(ctx_r0.GetEffectiveScheduleType(schedule_r7) === "Interval" ? 8 : -1);
237
248
  i0.ɵɵadvance();
238
- i0.ɵɵconditional(ctx_r1.GetEffectiveScheduleType(schedule_r8) === "Cron" ? 9 : -1);
249
+ i0.ɵɵconditional(ctx_r0.GetEffectiveScheduleType(schedule_r7) === "Cron" ? 9 : -1);
239
250
  } }
240
- function SchedulesComponent_Conditional_1_For_17_Conditional_35_Template(rf, ctx) { if (rf & 1) {
241
- i0.ɵɵelementStart(0, "span", 54);
242
- i0.ɵɵelement(1, "i", 15);
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 SchedulesComponent_Conditional_1_For_17_Conditional_36_Template(rf, ctx) { if (rf & 1) {
247
- i0.ɵɵelementStart(0, "span", 55);
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 SchedulesComponent_Conditional_1_For_17_Conditional_38_Conditional_1_Template(rf, ctx) { if (rf & 1) {
252
- i0.ɵɵelement(0, "i", 15);
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 SchedulesComponent_Conditional_1_For_17_Conditional_38_Conditional_2_Template(rf, ctx) { if (rf & 1) {
256
- i0.ɵɵelement(0, "i", 72);
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 SchedulesComponent_Conditional_1_For_17_Conditional_38_Template(rf, ctx) { if (rf & 1) {
260
- const _r16 = i0.ɵɵgetCurrentView();
261
- i0.ɵɵelementStart(0, "button", 71);
262
- i0.ɵɵlistener("click", function SchedulesComponent_Conditional_1_For_17_Conditional_38_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r16); const schedule_r8 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.SaveSchedule(schedule_r8.ID)); });
263
- i0.ɵɵconditionalCreate(1, SchedulesComponent_Conditional_1_For_17_Conditional_38_Conditional_1_Template, 2, 0)(2, SchedulesComponent_Conditional_1_For_17_Conditional_38_Conditional_2_Template, 2, 0);
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 schedule_r8 = i0.ɵɵnextContext().$implicit;
267
- const ctx_r1 = i0.ɵɵnextContext(2);
268
- i0.ɵɵproperty("disabled", ctx_r1.IsSaving(schedule_r8.ID));
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(ctx_r1.IsSaving(schedule_r8.ID) ? 1 : 2);
281
+ i0.ɵɵconditional(ctx_r0.IsSaving(schedule_r7.ID) ? 1 : 2);
271
282
  } }
272
- function SchedulesComponent_Conditional_1_For_17_Conditional_40_Template(rf, ctx) { if (rf & 1) {
273
- i0.ɵɵelement(0, "i", 15);
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 SchedulesComponent_Conditional_1_For_17_Conditional_41_Template(rf, ctx) { if (rf & 1) {
277
- i0.ɵɵelement(0, "i", 73);
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 SchedulesComponent_Conditional_1_For_17_Template(rf, ctx) { if (rf & 1) {
281
- const _r7 = i0.ɵɵgetCurrentView();
282
- i0.ɵɵelementStart(0, "div", 34)(1, "div", 35)(2, "div", 36);
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", 37)(5, "div", 38);
296
+ i0.ɵɵelementStart(4, "div", 36)(5, "div", 37);
286
297
  i0.ɵɵtext(6);
287
298
  i0.ɵɵelementEnd();
288
- i0.ɵɵelementStart(7, "div", 39);
299
+ i0.ɵɵelementStart(7, "div", 38);
289
300
  i0.ɵɵtext(8);
290
301
  i0.ɵɵelementEnd();
291
- i0.ɵɵelementStart(9, "div", 40);
292
- i0.ɵɵconditionalCreate(10, SchedulesComponent_Conditional_1_For_17_Conditional_10_Template, 2, 0, "span", 41)(11, SchedulesComponent_Conditional_1_For_17_Conditional_11_Template, 2, 0, "span", 42);
293
- i0.ɵɵconditionalCreate(12, SchedulesComponent_Conditional_1_For_17_Conditional_12_Template, 3, 0, "span", 43);
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", 44)(14, "div", 45)(15, "label", 46);
306
+ i0.ɵɵelementStart(13, "div", 43)(14, "div", 44)(15, "label", 45);
296
307
  i0.ɵɵtext(16, " Auto-sync ");
297
- i0.ɵɵelementStart(17, "button", 47);
298
- i0.ɵɵlistener("click", function SchedulesComponent_Conditional_1_For_17_Template_button_click_17_listener() { const schedule_r8 = i0.ɵɵrestoreView(_r7).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.ToggleScheduleEnabled(schedule_r8.ID)); });
299
- i0.ɵɵelement(18, "span", 48);
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, SchedulesComponent_Conditional_1_For_17_Conditional_19_Template, 10, 8);
312
+ i0.ɵɵconditionalCreate(19, SchedulesComponent_Conditional_7_For_4_Conditional_19_Template, 10, 8);
302
313
  i0.ɵɵelementEnd();
303
- i0.ɵɵelementStart(20, "div", 49)(21, "div", 50)(22, "div", 51)(23, "span", 52);
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", 53);
317
+ i0.ɵɵelementStart(25, "span", 52);
307
318
  i0.ɵɵtext(26);
308
319
  i0.ɵɵelementEnd()();
309
- i0.ɵɵelementStart(27, "div", 51)(28, "span", 52);
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", 53);
323
+ i0.ɵɵelementStart(30, "span", 52);
313
324
  i0.ɵɵtext(31);
314
325
  i0.ɵɵelementEnd()();
315
- i0.ɵɵelementStart(32, "div", 51)(33, "span", 52);
326
+ i0.ɵɵelementStart(32, "div", 50)(33, "span", 51);
316
327
  i0.ɵɵtext(34, "Status");
317
328
  i0.ɵɵelementEnd();
318
- i0.ɵɵconditionalCreate(35, SchedulesComponent_Conditional_1_For_17_Conditional_35_Template, 3, 0, "span", 54)(36, SchedulesComponent_Conditional_1_For_17_Conditional_36_Template, 2, 0, "span", 55);
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", 56);
321
- i0.ɵɵconditionalCreate(38, SchedulesComponent_Conditional_1_For_17_Conditional_38_Template, 3, 2, "button", 57);
322
- i0.ɵɵelementStart(39, "button", 58);
323
- i0.ɵɵlistener("click", function SchedulesComponent_Conditional_1_For_17_Template_button_click_39_listener() { const schedule_r8 = i0.ɵɵrestoreView(_r7).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.RunNow(schedule_r8.ID)); });
324
- i0.ɵɵconditionalCreate(40, SchedulesComponent_Conditional_1_For_17_Conditional_40_Template, 2, 0)(41, SchedulesComponent_Conditional_1_For_17_Conditional_41_Template, 2, 0);
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 schedule_r8 = ctx.$implicit;
328
- const ctx_r1 = i0.ɵɵnextContext(2);
329
- i0.ɵɵclassProp("schedule-card-disabled", !schedule_r8.IsActive);
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(ctx_r1.GetIntegrationIcon(schedule_r8.Integration || schedule_r8.Name));
342
+ i0.ɵɵclassMap(ctx_r0.GetIntegrationIcon(schedule_r7.Integration || schedule_r7.Name));
332
343
  i0.ɵɵadvance(3);
333
- i0.ɵɵtextInterpolate(schedule_r8.Integration || schedule_r8.Name);
344
+ i0.ɵɵtextInterpolate(schedule_r7.Integration || schedule_r7.Name);
334
345
  i0.ɵɵadvance(2);
335
- i0.ɵɵtextInterpolate(schedule_r8.Company);
346
+ i0.ɵɵtextInterpolate(schedule_r7.Company);
336
347
  i0.ɵɵadvance(2);
337
- i0.ɵɵconditional(schedule_r8.IsActive ? 10 : 11);
348
+ i0.ɵɵconditional(schedule_r7.IsActive ? 10 : 11);
338
349
  i0.ɵɵadvance(2);
339
- i0.ɵɵconditional(schedule_r8.IsLocked ? 12 : -1);
350
+ i0.ɵɵconditional(schedule_r7.IsLocked ? 12 : -1);
340
351
  i0.ɵɵadvance(5);
341
- i0.ɵɵclassProp("toggle-on", ctx_r1.GetEffectiveScheduleEnabled(schedule_r8));
342
- i0.ɵɵattribute("aria-checked", ctx_r1.GetEffectiveScheduleEnabled(schedule_r8));
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(ctx_r1.GetEffectiveScheduleEnabled(schedule_r8) ? 19 : -1);
355
+ i0.ɵɵconditional(ctx_r0.GetEffectiveScheduleEnabled(schedule_r7) ? 19 : -1);
345
356
  i0.ɵɵadvance(7);
346
- i0.ɵɵtextInterpolate(ctx_r1.GetNextRunRelative(schedule_r8));
357
+ i0.ɵɵtextInterpolate(ctx_r0.GetNextRunRelative(schedule_r7));
347
358
  i0.ɵɵadvance(5);
348
- i0.ɵɵtextInterpolate(ctx_r1.GetLastRunRelative(schedule_r8));
359
+ i0.ɵɵtextInterpolate(ctx_r0.GetLastRunRelative(schedule_r7));
349
360
  i0.ɵɵadvance(4);
350
- i0.ɵɵconditional(schedule_r8.IsLocked ? 35 : 36);
361
+ i0.ɵɵconditional(schedule_r7.IsLocked ? 35 : 36);
351
362
  i0.ɵɵadvance(3);
352
- i0.ɵɵconditional(ctx_r1.HasChanges(schedule_r8.ID) ? 38 : -1);
363
+ i0.ɵɵconditional(ctx_r0.HasChanges(schedule_r7.ID) ? 38 : -1);
353
364
  i0.ɵɵadvance();
354
- i0.ɵɵproperty("disabled", ctx_r1.IsRunning(schedule_r8.ID) || schedule_r8.IsLocked);
365
+ i0.ɵɵproperty("disabled", ctx_r0.IsRunning(schedule_r7.ID) || schedule_r7.IsLocked);
355
366
  i0.ɵɵadvance();
356
- i0.ɵɵconditional(ctx_r1.IsRunning(schedule_r8.ID) ? 40 : 41);
367
+ i0.ɵɵconditional(ctx_r0.IsRunning(schedule_r7.ID) ? 40 : 41);
357
368
  } }
358
- function SchedulesComponent_Conditional_1_Conditional_18_Template(rf, ctx) { if (rf & 1) {
359
- i0.ɵɵelementStart(0, "div", 14);
360
- i0.ɵɵelement(1, "i", 74);
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 SchedulesComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
366
- const _r1 = i0.ɵɵgetCurrentView();
367
- i0.ɵɵelementStart(0, "div", 1)(1, "div", 3)(2, "div", 4)(3, "h2", 5);
368
- i0.ɵɵelement(4, "i", 6);
369
- i0.ɵɵtext(5, " Sync Schedules ");
370
- i0.ɵɵelementEnd();
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 ctx_r1 = i0.ɵɵnextContext();
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(ctx_r1.LockedCount > 0 ? 10 : -1);
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(ctx_r1.Schedules);
388
+ i0.ɵɵrepeater(ctx_r0.Schedules);
401
389
  i0.ɵɵadvance(2);
402
- i0.ɵɵconditional(ctx_r1.Schedules.length === 0 ? 18 : -1);
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: 2, vars: 1, consts: [[1, "loading-container"], [1, "schedules-root"], ["text", "Loading schedules..."], [1, "section-header"], [1, "header-left"], [1, "section-title"], [1, "fa-solid", "fa-calendar-check"], [1, "header-meta"], [1, "header-meta", "running-badge"], [1, "btn", "btn-outline", 3, "click"], [1, "fa-solid", "fa-arrows-rotate"], [1, "timeline-section"], [1, "cards-section"], [1, "schedule-card", 3, "schedule-card-disabled"], [1, "empty-state"], [1, "fa-solid", "fa-spinner", "fa-spin"], [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, "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) {
920
- i0.ɵɵconditionalCreate(0, SchedulesComponent_Conditional_0_Template, 2, 0, "div", 0)(1, SchedulesComponent_Conditional_1_Template, 19, 6, "div", 1);
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.ɵɵconditional(ctx.IsLoading ? 0 : 1);
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() {