@memberjunction/ng-dashboards 5.38.0 → 5.40.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 (321) hide show
  1. package/README.md +14 -7
  2. package/dist/AI/components/agents/agent-configuration.component.js +199 -198
  3. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  4. package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts.map +1 -1
  5. package/dist/AI/components/analytics/ai-analytics-resource.component.js +20 -17
  6. package/dist/AI/components/analytics/ai-analytics-resource.component.js.map +1 -1
  7. package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts +15 -0
  8. package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts.map +1 -1
  9. package/dist/AI/components/analytics/cost-budget/cost-budget.component.js +166 -58
  10. package/dist/AI/components/analytics/cost-budget/cost-budget.component.js.map +1 -1
  11. package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts.map +1 -1
  12. package/dist/AI/components/analytics/executive-summary/executive-summary.component.js +2 -1
  13. package/dist/AI/components/analytics/executive-summary/executive-summary.component.js.map +1 -1
  14. package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts +1 -0
  15. package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts.map +1 -1
  16. package/dist/AI/components/analytics/model-performance/model-performance.component.js +55 -36
  17. package/dist/AI/components/analytics/model-performance/model-performance.component.js.map +1 -1
  18. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts +9 -1
  19. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts.map +1 -1
  20. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js +158 -117
  21. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js.map +1 -1
  22. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts +1 -0
  23. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts.map +1 -1
  24. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js +22 -8
  25. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js.map +1 -1
  26. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +217 -860
  27. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
  28. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +1717 -7802
  29. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
  30. package/dist/AI/components/autotagging/components/classify-item-drilldown.component.d.ts +56 -0
  31. package/dist/AI/components/autotagging/components/classify-item-drilldown.component.d.ts.map +1 -0
  32. package/dist/AI/components/autotagging/components/classify-item-drilldown.component.js +423 -0
  33. package/dist/AI/components/autotagging/components/classify-item-drilldown.component.js.map +1 -0
  34. package/dist/AI/components/autotagging/components/classify-item-grid.component.d.ts +70 -0
  35. package/dist/AI/components/autotagging/components/classify-item-grid.component.d.ts.map +1 -0
  36. package/dist/AI/components/autotagging/components/classify-item-grid.component.js +308 -0
  37. package/dist/AI/components/autotagging/components/classify-item-grid.component.js.map +1 -0
  38. package/dist/AI/components/autotagging/components/classify-org-context-editor.component.d.ts +29 -0
  39. package/dist/AI/components/autotagging/components/classify-org-context-editor.component.d.ts.map +1 -0
  40. package/dist/AI/components/autotagging/components/classify-org-context-editor.component.js +186 -0
  41. package/dist/AI/components/autotagging/components/classify-org-context-editor.component.js.map +1 -0
  42. package/dist/AI/components/autotagging/components/classify-overview-analytics.component.d.ts +69 -0
  43. package/dist/AI/components/autotagging/components/classify-overview-analytics.component.d.ts.map +1 -0
  44. package/dist/AI/components/autotagging/components/classify-overview-analytics.component.js +278 -0
  45. package/dist/AI/components/autotagging/components/classify-overview-analytics.component.js.map +1 -0
  46. package/dist/AI/components/autotagging/components/classify-seed-taxonomy.component.d.ts +73 -0
  47. package/dist/AI/components/autotagging/components/classify-seed-taxonomy.component.d.ts.map +1 -0
  48. package/dist/AI/components/autotagging/components/classify-seed-taxonomy.component.js +393 -0
  49. package/dist/AI/components/autotagging/components/classify-seed-taxonomy.component.js.map +1 -0
  50. package/dist/AI/components/autotagging/dialogs/classify-setup-wizard.component.d.ts +122 -0
  51. package/dist/AI/components/autotagging/dialogs/classify-setup-wizard.component.d.ts.map +1 -0
  52. package/dist/AI/components/autotagging/dialogs/classify-setup-wizard.component.js +908 -0
  53. package/dist/AI/components/autotagging/dialogs/classify-setup-wizard.component.js.map +1 -0
  54. package/dist/AI/components/autotagging/dialogs/dry-run-preview.dialog.component.d.ts +87 -0
  55. package/dist/AI/components/autotagging/dialogs/dry-run-preview.dialog.component.d.ts.map +1 -0
  56. package/dist/AI/components/autotagging/dialogs/dry-run-preview.dialog.component.js +475 -0
  57. package/dist/AI/components/autotagging/dialogs/dry-run-preview.dialog.component.js.map +1 -0
  58. package/dist/AI/components/autotagging/dialogs/item-detail.dialog.component.d.ts +29 -0
  59. package/dist/AI/components/autotagging/dialogs/item-detail.dialog.component.d.ts.map +1 -0
  60. package/dist/AI/components/autotagging/dialogs/item-detail.dialog.component.js +208 -0
  61. package/dist/AI/components/autotagging/dialogs/item-detail.dialog.component.js.map +1 -0
  62. package/dist/AI/components/autotagging/dialogs/no-content-type-warning.dialog.component.d.ts +21 -0
  63. package/dist/AI/components/autotagging/dialogs/no-content-type-warning.dialog.component.d.ts.map +1 -0
  64. package/dist/AI/components/autotagging/dialogs/no-content-type-warning.dialog.component.js +70 -0
  65. package/dist/AI/components/autotagging/dialogs/no-content-type-warning.dialog.component.js.map +1 -0
  66. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.d.ts +333 -0
  67. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.d.ts.map +1 -0
  68. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js +2125 -0
  69. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js.map +1 -0
  70. package/dist/AI/components/autotagging/shared/classify.dryrun.d.ts +61 -0
  71. package/dist/AI/components/autotagging/shared/classify.dryrun.d.ts.map +1 -0
  72. package/dist/AI/components/autotagging/shared/classify.dryrun.js +78 -0
  73. package/dist/AI/components/autotagging/shared/classify.dryrun.js.map +1 -0
  74. package/dist/AI/components/autotagging/shared/classify.format.d.ts +58 -0
  75. package/dist/AI/components/autotagging/shared/classify.format.d.ts.map +1 -0
  76. package/dist/AI/components/autotagging/shared/classify.format.js +260 -0
  77. package/dist/AI/components/autotagging/shared/classify.format.js.map +1 -0
  78. package/dist/AI/components/autotagging/shared/classify.types.d.ts +319 -0
  79. package/dist/AI/components/autotagging/shared/classify.types.d.ts.map +1 -0
  80. package/dist/AI/components/autotagging/shared/classify.types.js +6 -0
  81. package/dist/AI/components/autotagging/shared/classify.types.js.map +1 -0
  82. package/dist/AI/components/autotagging/tabs/health-tab.component.d.ts +103 -0
  83. package/dist/AI/components/autotagging/tabs/health-tab.component.d.ts.map +1 -0
  84. package/dist/AI/components/autotagging/tabs/health-tab.component.js +571 -0
  85. package/dist/AI/components/autotagging/tabs/health-tab.component.js.map +1 -0
  86. package/dist/AI/components/autotagging/tabs/history-tab.component.d.ts +77 -0
  87. package/dist/AI/components/autotagging/tabs/history-tab.component.d.ts.map +1 -0
  88. package/dist/AI/components/autotagging/tabs/history-tab.component.js +519 -0
  89. package/dist/AI/components/autotagging/tabs/history-tab.component.js.map +1 -0
  90. package/dist/AI/components/autotagging/tabs/inbox-tab.component.d.ts +107 -0
  91. package/dist/AI/components/autotagging/tabs/inbox-tab.component.d.ts.map +1 -0
  92. package/dist/AI/components/autotagging/tabs/inbox-tab.component.js +719 -0
  93. package/dist/AI/components/autotagging/tabs/inbox-tab.component.js.map +1 -0
  94. package/dist/AI/components/autotagging/tabs/pipeline-tab.component.d.ts +131 -0
  95. package/dist/AI/components/autotagging/tabs/pipeline-tab.component.d.ts.map +1 -0
  96. package/dist/AI/components/autotagging/tabs/pipeline-tab.component.js +813 -0
  97. package/dist/AI/components/autotagging/tabs/pipeline-tab.component.js.map +1 -0
  98. package/dist/AI/components/autotagging/tabs/sources-tab.component.d.ts +177 -0
  99. package/dist/AI/components/autotagging/tabs/sources-tab.component.d.ts.map +1 -0
  100. package/dist/AI/components/autotagging/tabs/sources-tab.component.js +1465 -0
  101. package/dist/AI/components/autotagging/tabs/sources-tab.component.js.map +1 -0
  102. package/dist/AI/components/autotagging/tabs/tags-tab.component.d.ts +78 -0
  103. package/dist/AI/components/autotagging/tabs/tags-tab.component.d.ts.map +1 -0
  104. package/dist/AI/components/autotagging/tabs/tags-tab.component.js +492 -0
  105. package/dist/AI/components/autotagging/tabs/tags-tab.component.js.map +1 -0
  106. package/dist/AI/components/autotagging/tabs/taxonomy-tab.component.d.ts +397 -0
  107. package/dist/AI/components/autotagging/tabs/taxonomy-tab.component.d.ts.map +1 -0
  108. package/dist/AI/components/autotagging/tabs/taxonomy-tab.component.js +3490 -0
  109. package/dist/AI/components/autotagging/tabs/taxonomy-tab.component.js.map +1 -0
  110. package/dist/AI/components/autotagging/tabs/types-tab.component.d.ts +56 -0
  111. package/dist/AI/components/autotagging/tabs/types-tab.component.d.ts.map +1 -0
  112. package/dist/AI/components/autotagging/tabs/types-tab.component.js +271 -0
  113. package/dist/AI/components/autotagging/tabs/types-tab.component.js.map +1 -0
  114. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +3 -0
  115. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
  116. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +306 -290
  117. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
  118. package/dist/AI/components/execution-monitoring.component.js +1 -1
  119. package/dist/AI/components/execution-monitoring.component.js.map +1 -1
  120. package/dist/AI/components/models/model-management.component.js +209 -208
  121. package/dist/AI/components/models/model-management.component.js.map +1 -1
  122. package/dist/AI/components/prompts/prompt-management.component.js +130 -128
  123. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  124. package/dist/AI/components/requests/agent-requests-resource.component.js +61 -61
  125. package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
  126. package/dist/AI/components/system/system-configuration.component.js +17 -17
  127. package/dist/AI/components/system/system-configuration.component.js.map +1 -1
  128. package/dist/AI/components/tags/tags-resource.component.d.ts +1 -0
  129. package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
  130. package/dist/AI/components/tags/tags-resource.component.js +578 -538
  131. package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
  132. package/dist/AI/components/vectors/vector-management-resource.component.d.ts +3 -0
  133. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
  134. package/dist/AI/components/vectors/vector-management-resource.component.js +331 -303
  135. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  136. package/dist/AI/services/ai-instrumentation.service.d.ts +5 -0
  137. package/dist/AI/services/ai-instrumentation.service.d.ts.map +1 -1
  138. package/dist/AI/services/ai-instrumentation.service.js +14 -2
  139. package/dist/AI/services/ai-instrumentation.service.js.map +1 -1
  140. package/dist/AI/services/cache-metrics.d.ts +50 -0
  141. package/dist/AI/services/cache-metrics.d.ts.map +1 -0
  142. package/dist/AI/services/cache-metrics.js +43 -0
  143. package/dist/AI/services/cache-metrics.js.map +1 -0
  144. package/dist/APIKeys/api-applications-panel.component.js +2 -2
  145. package/dist/APIKeys/api-key-create-dialog.component.js +2 -2
  146. package/dist/APIKeys/api-key-edit-panel.component.js +2 -2
  147. package/dist/APIKeys/api-keys-resource.component.js +132 -131
  148. package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
  149. package/dist/Actions/components/actions-overview.component.js +141 -141
  150. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  151. package/dist/Actions/components/execution-monitoring.component.js +15 -15
  152. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  153. package/dist/Actions/components/explorer/action-explorer.component.d.ts +0 -5
  154. package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -1
  155. package/dist/Actions/components/explorer/action-explorer.component.js +139 -212
  156. package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
  157. package/dist/Admin/admin-data-schema.component.js +2 -2
  158. package/dist/Admin/admin-data-schema.component.js.map +1 -1
  159. package/dist/Admin/admin-dev-tools-resource.component.js +2 -2
  160. package/dist/Admin/admin-dev-tools-resource.component.js.map +1 -1
  161. package/dist/Admin/admin-identity-access.component.js +2 -2
  162. package/dist/Admin/admin-identity-access.component.js.map +1 -1
  163. package/dist/Admin/admin-monitoring.component.js +2 -2
  164. package/dist/Admin/admin-monitoring.component.js.map +1 -1
  165. package/dist/ApplicationRoles/application-roles-resource.component.js +54 -49
  166. package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
  167. package/dist/Communication/communication-logs-resource.component.d.ts +6 -0
  168. package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
  169. package/dist/Communication/communication-logs-resource.component.js +72 -50
  170. package/dist/Communication/communication-logs-resource.component.js.map +1 -1
  171. package/dist/Communication/communication-monitor-resource.component.js +103 -102
  172. package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
  173. package/dist/Communication/communication-providers-resource.component.js +52 -51
  174. package/dist/Communication/communication-providers-resource.component.js.map +1 -1
  175. package/dist/Communication/communication-runs-resource.component.js +39 -38
  176. package/dist/Communication/communication-runs-resource.component.js.map +1 -1
  177. package/dist/Communication/communication-templates-resource.component.d.ts +6 -0
  178. package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -1
  179. package/dist/Communication/communication-templates-resource.component.js +92 -89
  180. package/dist/Communication/communication-templates-resource.component.js.map +1 -1
  181. package/dist/Credentials/components/credentials-audit-resource.component.js +136 -135
  182. package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
  183. package/dist/Credentials/components/credentials-categories-resource.component.js +155 -152
  184. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  185. package/dist/Credentials/components/credentials-list-resource.component.js +119 -118
  186. package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
  187. package/dist/Credentials/components/credentials-overview-resource.component.js +129 -128
  188. package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
  189. package/dist/Credentials/components/credentials-types-resource.component.js +107 -106
  190. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  191. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +31 -340
  192. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
  193. package/dist/DataExplorer/data-explorer-dashboard.component.js +468 -1958
  194. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  195. package/dist/DataExplorer/data-explorer-resource.component.d.ts.map +1 -1
  196. package/dist/DataExplorer/data-explorer-resource.component.js +10 -0
  197. package/dist/DataExplorer/data-explorer-resource.component.js.map +1 -1
  198. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +1 -1
  199. package/dist/DatabaseDesigner/components/entity-list.component.js +115 -114
  200. package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -1
  201. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +5 -6
  202. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -1
  203. package/dist/DatabaseDesigner/database-designer-dashboards.module.js +4 -5
  204. package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -1
  205. package/dist/DevTools/app-state-inspector.component.js +18 -17
  206. package/dist/DevTools/app-state-inspector.component.js.map +1 -1
  207. package/dist/DevTools/class-registry.component.js +88 -85
  208. package/dist/DevTools/class-registry.component.js.map +1 -1
  209. package/dist/DevTools/event-monitor.component.js +155 -150
  210. package/dist/DevTools/event-monitor.component.js.map +1 -1
  211. package/dist/DevTools/graphql-console.component.js +245 -243
  212. package/dist/DevTools/graphql-console.component.js.map +1 -1
  213. package/dist/DevTools/layout-inspector.component.js +18 -17
  214. package/dist/DevTools/layout-inspector.component.js.map +1 -1
  215. package/dist/EntityAdmin/entity-admin-dashboard.component.js +20 -19
  216. package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
  217. package/dist/Home/home-dashboard.component.js +2 -2
  218. package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
  219. package/dist/Integration/components/activity/activity.component.js +236 -229
  220. package/dist/Integration/components/activity/activity.component.js.map +1 -1
  221. package/dist/Integration/components/connections/connections.component.js +390 -389
  222. package/dist/Integration/components/connections/connections.component.js.map +1 -1
  223. package/dist/Integration/components/overview/overview.component.js +2 -2
  224. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts.map +1 -1
  225. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +14 -11
  226. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
  227. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts +27 -2
  228. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts.map +1 -1
  229. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +244 -119
  230. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
  231. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +293 -291
  232. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
  233. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +62 -61
  234. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -1
  235. package/dist/KnowledgeHub/components/visualize/record-drilldown/record-drilldown.component.d.ts +65 -0
  236. package/dist/KnowledgeHub/components/visualize/record-drilldown/record-drilldown.component.d.ts.map +1 -0
  237. package/dist/KnowledgeHub/components/visualize/record-drilldown/record-drilldown.component.js +176 -0
  238. package/dist/KnowledgeHub/components/visualize/record-drilldown/record-drilldown.component.js.map +1 -0
  239. package/dist/KnowledgeHub/components/visualize/tag-cloud/tag-cloud.component.d.ts +81 -0
  240. package/dist/KnowledgeHub/components/visualize/tag-cloud/tag-cloud.component.d.ts.map +1 -0
  241. package/dist/KnowledgeHub/components/visualize/tag-cloud/tag-cloud.component.js +308 -0
  242. package/dist/KnowledgeHub/components/visualize/tag-cloud/tag-cloud.component.js.map +1 -0
  243. package/dist/KnowledgeHub/components/visualize/visualize-resource.component.d.ts +85 -0
  244. package/dist/KnowledgeHub/components/visualize/visualize-resource.component.d.ts.map +1 -0
  245. package/dist/KnowledgeHub/components/visualize/visualize-resource.component.js +362 -0
  246. package/dist/KnowledgeHub/components/visualize/visualize-resource.component.js.map +1 -0
  247. package/dist/KnowledgeHub/index.d.ts +3 -0
  248. package/dist/KnowledgeHub/index.d.ts.map +1 -1
  249. package/dist/KnowledgeHub/index.js +3 -0
  250. package/dist/KnowledgeHub/index.js.map +1 -1
  251. package/dist/Lists/components/lists-browse-resource.component.d.ts +6 -2
  252. package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
  253. package/dist/Lists/components/lists-browse-resource.component.js +525 -566
  254. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  255. package/dist/Lists/components/lists-categories-resource.component.js +135 -134
  256. package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
  257. package/dist/Lists/components/lists-my-lists-resource.component.js +199 -198
  258. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  259. package/dist/MCP/components/mcp-server-dialog.component.js +2 -2
  260. package/dist/MCP/mcp-dashboard.component.js +443 -438
  261. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  262. package/dist/QueryBrowser/query-browser-resource.component.js +1 -1
  263. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  264. package/dist/Scheduling/components/scheduling-activity.component.d.ts.map +1 -1
  265. package/dist/Scheduling/components/scheduling-activity.component.js +146 -147
  266. package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
  267. package/dist/Scheduling/components/scheduling-jobs.component.js +76 -75
  268. package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
  269. package/dist/Scheduling/components/scheduling-overview.component.js +97 -96
  270. package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
  271. package/dist/Scheduling/scheduling-dashboard.component.js +24 -22
  272. package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
  273. package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts +2 -0
  274. package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts.map +1 -1
  275. package/dist/Scheduling/services/scheduling-instrumentation.service.js +1 -0
  276. package/dist/Scheduling/services/scheduling-instrumentation.service.js.map +1 -1
  277. package/dist/Testing/components/testing-dashboard-tab-resource.component.js +1 -1
  278. package/dist/Testing/components/testing-explorer.component.d.ts +14 -4
  279. package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
  280. package/dist/Testing/components/testing-explorer.component.js +436 -427
  281. package/dist/Testing/components/testing-explorer.component.js.map +1 -1
  282. package/dist/Testing/components/testing-runs-resource.component.js +1 -1
  283. package/dist/Testing/components/testing-runs.component.js +116 -115
  284. package/dist/Testing/components/testing-runs.component.js.map +1 -1
  285. package/dist/Testing/testing-dashboard.component.js +6 -7
  286. package/dist/Testing/testing-dashboard.component.js.map +1 -1
  287. package/dist/VersionHistory/components/labels-resource.component.js +173 -172
  288. package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
  289. package/dist/VersionHistory/components/restore-resource.component.d.ts +6 -0
  290. package/dist/VersionHistory/components/restore-resource.component.d.ts.map +1 -1
  291. package/dist/VersionHistory/components/restore-resource.component.js +116 -92
  292. package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
  293. package/dist/ai-dashboards.module.d.ts +57 -35
  294. package/dist/ai-dashboards.module.d.ts.map +1 -1
  295. package/dist/ai-dashboards.module.js +80 -1
  296. package/dist/ai-dashboards.module.js.map +1 -1
  297. package/dist/communication-dashboards.module.d.ts +1 -1
  298. package/dist/communication-dashboards.module.d.ts.map +1 -1
  299. package/dist/communication-dashboards.module.js +7 -1
  300. package/dist/communication-dashboards.module.js.map +1 -1
  301. package/dist/data-explorer-dashboards.module.d.ts +12 -14
  302. package/dist/data-explorer-dashboards.module.d.ts.map +1 -1
  303. package/dist/data-explorer-dashboards.module.js +5 -14
  304. package/dist/data-explorer-dashboards.module.js.map +1 -1
  305. package/dist/public-api.d.ts +3 -0
  306. package/dist/public-api.d.ts.map +1 -1
  307. package/dist/public-api.js +3 -0
  308. package/dist/public-api.js.map +1 -1
  309. package/dist/testing-dashboards.module.d.ts +4 -5
  310. package/dist/testing-dashboards.module.d.ts.map +1 -1
  311. package/dist/testing-dashboards.module.js +7 -5
  312. package/dist/testing-dashboards.module.js.map +1 -1
  313. package/package.json +57 -54
  314. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.d.ts +0 -79
  315. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.d.ts.map +0 -1
  316. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js +0 -195
  317. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js.map +0 -1
  318. package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts +0 -226
  319. package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts.map +0 -1
  320. package/dist/DataExplorer/components/view-selector/view-selector.component.js +0 -861
  321. package/dist/DataExplorer/components/view-selector/view-selector.component.js.map +0 -1
@@ -9,7 +9,6 @@ import * as i1 from "../services/scheduling-instrumentation.service";
9
9
  import * as i2 from "@angular/common";
10
10
  import * as i3 from "@memberjunction/ng-ui-components";
11
11
  import * as i4 from "@memberjunction/ng-shared-generic";
12
- const _forTrack0 = ($index, $item) => $item.value;
13
12
  function SchedulingActivityComponent_Conditional_0_ng_container_0_Template(rf, ctx) { if (rf & 1) {
14
13
  i0.ɵɵelementContainer(0);
15
14
  } }
@@ -20,102 +19,88 @@ function SchedulingActivityComponent_Conditional_0_Template(rf, ctx) { if (rf &
20
19
  const content_r1 = i0.ɵɵreference(3);
21
20
  i0.ɵɵproperty("ngTemplateOutlet", content_r1);
22
21
  } }
23
- function SchedulingActivityComponent_Conditional_1_For_9_Template(rf, ctx) { if (rf & 1) {
24
- const _r4 = i0.ɵɵgetCurrentView();
25
- i0.ɵɵelementStart(0, "mj-filter-chip", 10);
26
- i0.ɵɵlistener("Clicked", function SchedulingActivityComponent_Conditional_1_For_9_Template_mj_filter_chip_Clicked_0_listener() { const range_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.OnTimeRangeChange(range_r5.value)); });
27
- i0.ɵɵelementEnd();
28
- } if (rf & 2) {
29
- const range_r5 = ctx.$implicit;
30
- const ctx_r2 = i0.ɵɵnextContext(2);
31
- i0.ɵɵproperty("Label", range_r5.label)("Active", ctx_r2.SelectedTimeRange === range_r5.value);
32
- } }
33
- function SchedulingActivityComponent_Conditional_1_ng_container_11_Template(rf, ctx) { if (rf & 1) {
22
+ function SchedulingActivityComponent_Conditional_1_ng_container_9_Template(rf, ctx) { if (rf & 1) {
34
23
  i0.ɵɵelementContainer(0);
35
24
  } }
36
25
  function SchedulingActivityComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
37
26
  const _r2 = i0.ɵɵgetCurrentView();
38
- i0.ɵɵelementStart(0, "mj-page-layout")(1, "mj-page-header", 2)(2, "div", 3)(3, "mj-filter-popover", 4);
39
- i0.ɵɵlistener("ClearAllRequested", function SchedulingActivityComponent_Conditional_1_Template_mj_filter_popover_ClearAllRequested_3_listener() { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ResetFilters()); });
40
- i0.ɵɵelementStart(4, "mj-filter-panel", 5);
41
- i0.ɵɵlistener("ValuesChange", function SchedulingActivityComponent_Conditional_1_Template_mj_filter_panel_ValuesChange_4_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OnFilterValuesChange($event)); })("Reset", function SchedulingActivityComponent_Conditional_1_Template_mj_filter_panel_Reset_4_listener() { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ResetFilters()); });
27
+ i0.ɵɵelementStart(0, "mj-page-layout")(1, "mj-page-header", 2)(2, "div", 3)(3, "mj-refresh-button", 4);
28
+ i0.ɵɵlistener("Clicked", function SchedulingActivityComponent_Conditional_1_Template_mj_refresh_button_Clicked_3_listener() { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.Refresh()); });
42
29
  i0.ɵɵelementEnd()();
43
- i0.ɵɵelementStart(5, "mj-refresh-button", 6);
44
- i0.ɵɵlistener("Clicked", function SchedulingActivityComponent_Conditional_1_Template_mj_refresh_button_Clicked_5_listener() { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.Refresh()); });
45
- i0.ɵɵelementEnd()();
46
- i0.ɵɵelementStart(6, "div", 7)(7, "mj-page-search", 8);
47
- i0.ɵɵlistener("ValueChange", function SchedulingActivityComponent_Conditional_1_Template_mj_page_search_ValueChange_7_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OnSearchChange($event)); });
30
+ i0.ɵɵelementStart(4, "div", 5)(5, "mj-page-search", 6);
31
+ i0.ɵɵlistener("ValueChange", function SchedulingActivityComponent_Conditional_1_Template_mj_page_search_ValueChange_5_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OnSearchChange($event)); });
48
32
  i0.ɵɵelementEnd();
49
- i0.ɵɵrepeaterCreate(8, SchedulingActivityComponent_Conditional_1_For_9_Template, 1, 2, "mj-filter-chip", 9, _forTrack0);
50
- i0.ɵɵelementEnd()();
51
- i0.ɵɵelementStart(10, "mj-page-body");
52
- i0.ɵɵtemplate(11, SchedulingActivityComponent_Conditional_1_ng_container_11_Template, 1, 0, "ng-container", 1);
33
+ i0.ɵɵelementStart(6, "mj-filter-popover", 7);
34
+ i0.ɵɵlistener("ClearAllRequested", function SchedulingActivityComponent_Conditional_1_Template_mj_filter_popover_ClearAllRequested_6_listener() { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ResetFilters()); });
35
+ i0.ɵɵelementStart(7, "mj-filter-panel", 8);
36
+ i0.ɵɵlistener("ValuesChange", function SchedulingActivityComponent_Conditional_1_Template_mj_filter_panel_ValuesChange_7_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OnFilterValuesChange($event)); })("Reset", function SchedulingActivityComponent_Conditional_1_Template_mj_filter_panel_Reset_7_listener() { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ResetFilters()); });
37
+ i0.ɵɵelementEnd()()()();
38
+ i0.ɵɵelementStart(8, "mj-page-body");
39
+ i0.ɵɵtemplate(9, SchedulingActivityComponent_Conditional_1_ng_container_9_Template, 1, 0, "ng-container", 1);
53
40
  i0.ɵɵelementEnd()();
54
41
  } if (rf & 2) {
55
42
  const ctx_r2 = i0.ɵɵnextContext();
56
43
  const content_r1 = i0.ɵɵreference(3);
57
- i0.ɵɵadvance(3);
44
+ i0.ɵɵadvance(5);
45
+ i0.ɵɵproperty("Value", ctx_r2.SearchTerm);
46
+ i0.ɵɵadvance();
58
47
  i0.ɵɵproperty("ActiveCount", ctx_r2.ActiveFilterCount)("ShowClearAll", ctx_r2.ActiveFilterCount > 0);
59
48
  i0.ɵɵadvance();
60
49
  i0.ɵɵproperty("Fields", ctx_r2.ActivityFilterFields)("Values", ctx_r2.ActivityFilterValues);
61
- i0.ɵɵadvance(3);
62
- i0.ɵɵproperty("Value", ctx_r2.SearchTerm);
63
- i0.ɵɵadvance();
64
- i0.ɵɵrepeater(ctx_r2.TimeRanges);
65
- i0.ɵɵadvance(3);
50
+ i0.ɵɵadvance(2);
66
51
  i0.ɵɵproperty("ngTemplateOutlet", content_r1);
67
52
  } }
68
53
  function SchedulingActivityComponent_ng_template_2_Conditional_1_Template(rf, ctx) { if (rf & 1) {
69
- i0.ɵɵelementStart(0, "div", 12);
70
- i0.ɵɵelement(1, "mj-loading", 14);
54
+ i0.ɵɵelementStart(0, "div", 10);
55
+ i0.ɵɵelement(1, "mj-loading", 12);
71
56
  i0.ɵɵelementEnd();
72
57
  } }
73
58
  function SchedulingActivityComponent_ng_template_2_Conditional_2_Conditional_1_For_2_Template(rf, ctx) { if (rf & 1) {
74
- i0.ɵɵelementStart(0, "div", 24)(1, "div", 25);
59
+ i0.ɵɵelementStart(0, "div", 22)(1, "div", 23);
75
60
  i0.ɵɵelement(2, "i");
76
61
  i0.ɵɵelementEnd();
77
- i0.ɵɵelementStart(3, "div", 26)(4, "div", 27);
62
+ i0.ɵɵelementStart(3, "div", 24)(4, "div", 25);
78
63
  i0.ɵɵtext(5);
79
64
  i0.ɵɵelementEnd();
80
- i0.ɵɵelementStart(6, "div", 28)(7, "span");
65
+ i0.ɵɵelementStart(6, "div", 26)(7, "span");
81
66
  i0.ɵɵtext(8);
82
67
  i0.ɵɵelementEnd();
83
- i0.ɵɵelementStart(9, "span", 29);
68
+ i0.ɵɵelementStart(9, "span", 27);
84
69
  i0.ɵɵtext(10, "\u00B7");
85
70
  i0.ɵɵelementEnd();
86
71
  i0.ɵɵelementStart(11, "span");
87
72
  i0.ɵɵtext(12);
88
73
  i0.ɵɵelementEnd();
89
- i0.ɵɵelementStart(13, "span", 29);
74
+ i0.ɵɵelementStart(13, "span", 27);
90
75
  i0.ɵɵtext(14, "\u00B7");
91
76
  i0.ɵɵelementEnd();
92
77
  i0.ɵɵelementStart(15, "span");
93
78
  i0.ɵɵtext(16);
94
79
  i0.ɵɵelementEnd()()();
95
- i0.ɵɵelementStart(17, "div", 30);
96
- i0.ɵɵelement(18, "div", 31);
80
+ i0.ɵɵelementStart(17, "div", 28);
81
+ i0.ɵɵelement(18, "div", 29);
97
82
  i0.ɵɵelementEnd()();
98
83
  } if (rf & 2) {
99
- const type_r6 = ctx.$implicit;
84
+ const type_r4 = ctx.$implicit;
100
85
  const ctx_r2 = i0.ɵɵnextContext(4);
101
86
  i0.ɵɵadvance(2);
102
- i0.ɵɵclassMap(ctx_r2.GetTypeIcon(type_r6.typeName));
87
+ i0.ɵɵclassMap(ctx_r2.GetTypeIcon(type_r4.typeName));
103
88
  i0.ɵɵadvance(3);
104
- i0.ɵɵtextInterpolate(type_r6.typeName);
89
+ i0.ɵɵtextInterpolate(type_r4.typeName);
105
90
  i0.ɵɵadvance(3);
106
- i0.ɵɵtextInterpolate1("", type_r6.activeJobsCount, " active");
91
+ i0.ɵɵtextInterpolate1("", type_r4.activeJobsCount, " active");
107
92
  i0.ɵɵadvance(4);
108
- i0.ɵɵtextInterpolate1("", type_r6.totalRuns, " runs");
93
+ i0.ɵɵtextInterpolate1("", type_r4.totalRuns, " runs");
109
94
  i0.ɵɵadvance(3);
110
- i0.ɵɵstyleProp("color", ctx_r2.GetSuccessRateColor(type_r6.successRate));
95
+ i0.ɵɵstyleProp("color", ctx_r2.GetSuccessRateColor(type_r4.successRate));
111
96
  i0.ɵɵadvance();
112
- i0.ɵɵtextInterpolate1(" ", ctx_r2.FormatPercentage(type_r6.successRate), " ");
97
+ i0.ɵɵtextInterpolate1(" ", ctx_r2.FormatPercentage(type_r4.successRate), " ");
113
98
  i0.ɵɵadvance(2);
114
- i0.ɵɵstyleProp("width", type_r6.successRate * 100 + "%")("background", ctx_r2.GetSuccessRateColor(type_r6.successRate));
99
+ i0.ɵɵstyleProp("width", type_r4.successRate * 100 + "%")("background", ctx_r2.GetSuccessRateColor(type_r4.successRate));
115
100
  } }
116
101
  function SchedulingActivityComponent_ng_template_2_Conditional_2_Conditional_1_Template(rf, ctx) { if (rf & 1) {
117
- i0.ɵɵelementStart(0, "div", 15);
118
- i0.ɵɵrepeaterCreate(1, SchedulingActivityComponent_ng_template_2_Conditional_2_Conditional_1_For_2_Template, 19, 12, "div", 24, i0.ɵɵrepeaterTrackByIdentity);
102
+ i0.ɵɵelementStart(0, "div", 13);
103
+ i0.ɵɵrepeaterCreate(1, SchedulingActivityComponent_ng_template_2_Conditional_2_Conditional_1_For_2_Template, 19, 12, "div", 22, i0.ɵɵrepeaterTrackByIdentity);
119
104
  i0.ɵɵelementEnd();
120
105
  } if (rf & 2) {
121
106
  const ctx_r2 = i0.ɵɵnextContext(3);
@@ -123,52 +108,52 @@ function SchedulingActivityComponent_ng_template_2_Conditional_2_Conditional_1_T
123
108
  i0.ɵɵrepeater(ctx_r2.JobTypes);
124
109
  } }
125
110
  function SchedulingActivityComponent_ng_template_2_Conditional_2_Conditional_2_For_10_Conditional_3_Template(rf, ctx) { if (rf & 1) {
126
- i0.ɵɵelement(0, "div", 44);
111
+ i0.ɵɵelement(0, "div", 42);
127
112
  } if (rf & 2) {
128
- const trend_r7 = i0.ɵɵnextContext().$implicit;
113
+ const trend_r5 = i0.ɵɵnextContext().$implicit;
129
114
  const ctx_r2 = i0.ɵɵnextContext(4);
130
- i0.ɵɵstyleProp("height", ctx_r2.GetBarHeight(trend_r7.failures));
131
- i0.ɵɵproperty("title", trend_r7.failures + " failed");
115
+ i0.ɵɵstyleProp("height", ctx_r2.GetBarHeight(trend_r5.failures));
116
+ i0.ɵɵproperty("title", trend_r5.failures + " failed");
132
117
  } }
133
118
  function SchedulingActivityComponent_ng_template_2_Conditional_2_Conditional_2_For_10_Template(rf, ctx) { if (rf & 1) {
134
- i0.ɵɵelementStart(0, "div", 35)(1, "div", 40);
135
- i0.ɵɵelement(2, "div", 41);
136
- i0.ɵɵconditionalCreate(3, SchedulingActivityComponent_ng_template_2_Conditional_2_Conditional_2_For_10_Conditional_3_Template, 1, 3, "div", 42);
119
+ i0.ɵɵelementStart(0, "div", 33)(1, "div", 38);
120
+ i0.ɵɵelement(2, "div", 39);
121
+ i0.ɵɵconditionalCreate(3, SchedulingActivityComponent_ng_template_2_Conditional_2_Conditional_2_For_10_Conditional_3_Template, 1, 3, "div", 40);
137
122
  i0.ɵɵelementEnd();
138
- i0.ɵɵelementStart(4, "div", 43);
123
+ i0.ɵɵelementStart(4, "div", 41);
139
124
  i0.ɵɵtext(5);
140
125
  i0.ɵɵelementEnd()();
141
126
  } if (rf & 2) {
142
- const trend_r7 = ctx.$implicit;
143
- const ɵ$index_97_r8 = ctx.$index;
127
+ const trend_r5 = ctx.$implicit;
128
+ const ɵ$index_94_r6 = ctx.$index;
144
129
  const ctx_r2 = i0.ɵɵnextContext(4);
145
130
  i0.ɵɵadvance(2);
146
- i0.ɵɵstyleProp("height", ctx_r2.GetBarHeight(trend_r7.successes));
147
- i0.ɵɵproperty("title", trend_r7.successes + " successful");
131
+ i0.ɵɵstyleProp("height", ctx_r2.GetBarHeight(trend_r5.successes));
132
+ i0.ɵɵproperty("title", trend_r5.successes + " successful");
148
133
  i0.ɵɵadvance();
149
- i0.ɵɵconditional(trend_r7.failures > 0 ? 3 : -1);
134
+ i0.ɵɵconditional(trend_r5.failures > 0 ? 3 : -1);
150
135
  i0.ɵɵadvance();
151
- i0.ɵɵclassProp("hidden-label", !ctx_r2.ShouldShowLabel(ɵ$index_97_r8));
136
+ i0.ɵɵclassProp("hidden-label", !ctx_r2.ShouldShowLabel(ɵ$index_94_r6));
152
137
  i0.ɵɵadvance();
153
- i0.ɵɵtextInterpolate(ctx_r2.FormatChartLabel(trend_r7.timestamp));
138
+ i0.ɵɵtextInterpolate(ctx_r2.FormatChartLabel(trend_r5.timestamp));
154
139
  } }
155
140
  function SchedulingActivityComponent_ng_template_2_Conditional_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
156
- i0.ɵɵelementStart(0, "div", 16)(1, "div", 17)(2, "div", 18);
157
- i0.ɵɵelement(3, "i", 32);
141
+ i0.ɵɵelementStart(0, "div", 14)(1, "div", 15)(2, "div", 16);
142
+ i0.ɵɵelement(3, "i", 30);
158
143
  i0.ɵɵtext(4, " Execution Trends ");
159
144
  i0.ɵɵelementEnd();
160
- i0.ɵɵelementStart(5, "span", 20);
145
+ i0.ɵɵelementStart(5, "span", 18);
161
146
  i0.ɵɵtext(6);
162
147
  i0.ɵɵelementEnd()();
163
- i0.ɵɵelementStart(7, "div", 33)(8, "div", 34);
164
- i0.ɵɵrepeaterCreate(9, SchedulingActivityComponent_ng_template_2_Conditional_2_Conditional_2_For_10_Template, 6, 7, "div", 35, i0.ɵɵrepeaterTrackByIdentity);
148
+ i0.ɵɵelementStart(7, "div", 31)(8, "div", 32);
149
+ i0.ɵɵrepeaterCreate(9, SchedulingActivityComponent_ng_template_2_Conditional_2_Conditional_2_For_10_Template, 6, 7, "div", 33, i0.ɵɵrepeaterTrackByIdentity);
165
150
  i0.ɵɵelementEnd();
166
- i0.ɵɵelementStart(11, "div", 36)(12, "span", 37);
167
- i0.ɵɵelement(13, "span", 38);
151
+ i0.ɵɵelementStart(11, "div", 34)(12, "span", 35);
152
+ i0.ɵɵelement(13, "span", 36);
168
153
  i0.ɵɵtext(14, " Successful");
169
154
  i0.ɵɵelementEnd();
170
- i0.ɵɵelementStart(15, "span", 37);
171
- i0.ɵɵelement(16, "span", 39);
155
+ i0.ɵɵelementStart(15, "span", 35);
156
+ i0.ɵɵelement(16, "span", 37);
172
157
  i0.ɵɵtext(17, " Failed");
173
158
  i0.ɵɵelementEnd()()()();
174
159
  } if (rf & 2) {
@@ -179,141 +164,141 @@ function SchedulingActivityComponent_ng_template_2_Conditional_2_Conditional_2_T
179
164
  i0.ɵɵrepeater(ctx_r2.Trends);
180
165
  } }
181
166
  function SchedulingActivityComponent_ng_template_2_Conditional_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
182
- i0.ɵɵelementStart(0, "div", 22);
183
- i0.ɵɵelement(1, "i", 45);
167
+ i0.ɵɵelementStart(0, "div", 20);
168
+ i0.ɵɵelement(1, "i", 43);
184
169
  i0.ɵɵelementStart(2, "span");
185
170
  i0.ɵɵtext(3, "No executions found for this time range");
186
171
  i0.ɵɵelementEnd()();
187
172
  } }
188
173
  function SchedulingActivityComponent_ng_template_2_Conditional_2_Conditional_12_For_16_Conditional_15_Conditional_31_Template(rf, ctx) { if (rf & 1) {
189
- i0.ɵɵelementStart(0, "div", 56)(1, "span", 57);
174
+ i0.ɵɵelementStart(0, "div", 54)(1, "span", 55);
190
175
  i0.ɵɵtext(2, "Error");
191
176
  i0.ɵɵelementEnd();
192
- i0.ɵɵelementStart(3, "span", 64);
177
+ i0.ɵɵelementStart(3, "span", 62);
193
178
  i0.ɵɵtext(4);
194
179
  i0.ɵɵelementEnd()();
195
180
  } if (rf & 2) {
196
- const exec_r10 = i0.ɵɵnextContext(2).$implicit;
181
+ const exec_r8 = i0.ɵɵnextContext(2).$implicit;
197
182
  i0.ɵɵadvance(4);
198
- i0.ɵɵtextInterpolate(exec_r10.errorMessage);
183
+ i0.ɵɵtextInterpolate(exec_r8.errorMessage);
199
184
  } }
200
185
  function SchedulingActivityComponent_ng_template_2_Conditional_2_Conditional_12_For_16_Conditional_15_Template(rf, ctx) { if (rf & 1) {
201
- const _r11 = i0.ɵɵgetCurrentView();
202
- i0.ɵɵelementStart(0, "tr", 53)(1, "td")(2, "div", 54)(3, "div", 55)(4, "div", 56)(5, "span", 57);
186
+ const _r9 = i0.ɵɵgetCurrentView();
187
+ i0.ɵɵelementStart(0, "tr", 51)(1, "td")(2, "div", 52)(3, "div", 53)(4, "div", 54)(5, "span", 55);
203
188
  i0.ɵɵtext(6, "Job Name");
204
189
  i0.ɵɵelementEnd();
205
- i0.ɵɵelementStart(7, "span", 58);
190
+ i0.ɵɵelementStart(7, "span", 56);
206
191
  i0.ɵɵtext(8);
207
192
  i0.ɵɵelementEnd()();
208
- i0.ɵɵelementStart(9, "div", 56)(10, "span", 57);
193
+ i0.ɵɵelementStart(9, "div", 54)(10, "span", 55);
209
194
  i0.ɵɵtext(11, "Started");
210
195
  i0.ɵɵelementEnd();
211
- i0.ɵɵelementStart(12, "span", 58);
196
+ i0.ɵɵelementStart(12, "span", 56);
212
197
  i0.ɵɵtext(13);
213
198
  i0.ɵɵelementEnd()();
214
- i0.ɵɵelementStart(14, "div", 56)(15, "span", 57);
199
+ i0.ɵɵelementStart(14, "div", 54)(15, "span", 55);
215
200
  i0.ɵɵtext(16, "Completed");
216
201
  i0.ɵɵelementEnd();
217
- i0.ɵɵelementStart(17, "span", 58);
202
+ i0.ɵɵelementStart(17, "span", 56);
218
203
  i0.ɵɵtext(18);
219
204
  i0.ɵɵelementEnd()();
220
- i0.ɵɵelementStart(19, "div", 56)(20, "span", 57);
205
+ i0.ɵɵelementStart(19, "div", 54)(20, "span", 55);
221
206
  i0.ɵɵtext(21, "Duration");
222
207
  i0.ɵɵelementEnd();
223
- i0.ɵɵelementStart(22, "span", 58);
208
+ i0.ɵɵelementStart(22, "span", 56);
224
209
  i0.ɵɵtext(23);
225
210
  i0.ɵɵelementEnd()();
226
- i0.ɵɵelementStart(24, "div", 56)(25, "span", 57);
211
+ i0.ɵɵelementStart(24, "div", 54)(25, "span", 55);
227
212
  i0.ɵɵtext(26, "Status");
228
213
  i0.ɵɵelementEnd();
229
- i0.ɵɵelementStart(27, "span", 58)(28, "span", 49);
214
+ i0.ɵɵelementStart(27, "span", 56)(28, "span", 47);
230
215
  i0.ɵɵelement(29, "i");
231
216
  i0.ɵɵtext(30);
232
217
  i0.ɵɵelementEnd()()();
233
- i0.ɵɵconditionalCreate(31, SchedulingActivityComponent_ng_template_2_Conditional_2_Conditional_12_For_16_Conditional_15_Conditional_31_Template, 5, 1, "div", 56);
218
+ i0.ɵɵconditionalCreate(31, SchedulingActivityComponent_ng_template_2_Conditional_2_Conditional_12_For_16_Conditional_15_Conditional_31_Template, 5, 1, "div", 54);
234
219
  i0.ɵɵelementEnd();
235
- i0.ɵɵelementStart(32, "div", 59)(33, "button", 60);
236
- i0.ɵɵlistener("click", function SchedulingActivityComponent_ng_template_2_Conditional_2_Conditional_12_For_16_Conditional_15_Template_button_click_33_listener($event) { i0.ɵɵrestoreView(_r11); const exec_r10 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.OpenExecutionRecord(exec_r10, $event)); });
237
- i0.ɵɵelement(34, "i", 61);
220
+ i0.ɵɵelementStart(32, "div", 57)(33, "button", 58);
221
+ i0.ɵɵlistener("click", function SchedulingActivityComponent_ng_template_2_Conditional_2_Conditional_12_For_16_Conditional_15_Template_button_click_33_listener($event) { i0.ɵɵrestoreView(_r9); const exec_r8 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.OpenExecutionRecord(exec_r8, $event)); });
222
+ i0.ɵɵelement(34, "i", 59);
238
223
  i0.ɵɵtext(35, " Open Run Record ");
239
224
  i0.ɵɵelementEnd();
240
- i0.ɵɵelementStart(36, "button", 62);
241
- i0.ɵɵlistener("click", function SchedulingActivityComponent_ng_template_2_Conditional_2_Conditional_12_For_16_Conditional_15_Template_button_click_36_listener($event) { i0.ɵɵrestoreView(_r11); const exec_r10 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.OpenJobRecord(exec_r10, $event)); });
242
- i0.ɵɵelement(37, "i", 63);
225
+ i0.ɵɵelementStart(36, "button", 60);
226
+ i0.ɵɵlistener("click", function SchedulingActivityComponent_ng_template_2_Conditional_2_Conditional_12_For_16_Conditional_15_Template_button_click_36_listener($event) { i0.ɵɵrestoreView(_r9); const exec_r8 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.OpenJobRecord(exec_r8, $event)); });
227
+ i0.ɵɵelement(37, "i", 61);
243
228
  i0.ɵɵtext(38, " Open Job ");
244
229
  i0.ɵɵelementEnd()()()()();
245
230
  } if (rf & 2) {
246
- const exec_r10 = i0.ɵɵnextContext().$implicit;
231
+ const exec_r8 = i0.ɵɵnextContext().$implicit;
247
232
  const ctx_r2 = i0.ɵɵnextContext(4);
248
233
  i0.ɵɵadvance();
249
234
  i0.ɵɵattribute("colspan", 6);
250
235
  i0.ɵɵadvance(7);
251
- i0.ɵɵtextInterpolate(exec_r10.jobName);
236
+ i0.ɵɵtextInterpolate(exec_r8.jobName);
252
237
  i0.ɵɵadvance(5);
253
- i0.ɵɵtextInterpolate(ctx_r2.FormatDateTime(exec_r10.startedAt));
238
+ i0.ɵɵtextInterpolate(ctx_r2.FormatDateTime(exec_r8.startedAt));
254
239
  i0.ɵɵadvance(5);
255
- i0.ɵɵtextInterpolate(exec_r10.completedAt ? ctx_r2.FormatDateTime(exec_r10.completedAt) : "-");
240
+ i0.ɵɵtextInterpolate(exec_r8.completedAt ? ctx_r2.FormatDateTime(exec_r8.completedAt) : "-");
256
241
  i0.ɵɵadvance(5);
257
- i0.ɵɵtextInterpolate(ctx_r2.FormatDuration(exec_r10.duration));
242
+ i0.ɵɵtextInterpolate(ctx_r2.FormatDuration(exec_r8.duration));
258
243
  i0.ɵɵadvance(5);
259
- i0.ɵɵproperty("ngClass", ctx_r2.GetStatusClass(exec_r10.status));
244
+ i0.ɵɵproperty("ngClass", ctx_r2.GetStatusClass(exec_r8.status));
260
245
  i0.ɵɵadvance();
261
- i0.ɵɵclassMap(ctx_r2.GetStatusIcon(exec_r10.status));
246
+ i0.ɵɵclassMap(ctx_r2.GetStatusIcon(exec_r8.status));
262
247
  i0.ɵɵadvance();
263
- i0.ɵɵtextInterpolate1(" ", exec_r10.status, " ");
248
+ i0.ɵɵtextInterpolate1(" ", exec_r8.status, " ");
264
249
  i0.ɵɵadvance();
265
- i0.ɵɵconditional(exec_r10.errorMessage ? 31 : -1);
250
+ i0.ɵɵconditional(exec_r8.errorMessage ? 31 : -1);
266
251
  } }
267
252
  function SchedulingActivityComponent_ng_template_2_Conditional_2_Conditional_12_For_16_Template(rf, ctx) { if (rf & 1) {
268
- const _r9 = i0.ɵɵgetCurrentView();
269
- i0.ɵɵelementStart(0, "tr", 47);
270
- i0.ɵɵlistener("click", function SchedulingActivityComponent_ng_template_2_Conditional_2_Conditional_12_For_16_Template_tr_click_0_listener() { const exec_r10 = i0.ɵɵrestoreView(_r9).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.ToggleExpand(exec_r10)); });
271
- i0.ɵɵelementStart(1, "td", 46);
272
- i0.ɵɵelement(2, "i", 48);
253
+ const _r7 = i0.ɵɵgetCurrentView();
254
+ i0.ɵɵelementStart(0, "tr", 45);
255
+ i0.ɵɵlistener("click", function SchedulingActivityComponent_ng_template_2_Conditional_2_Conditional_12_For_16_Template_tr_click_0_listener() { const exec_r8 = i0.ɵɵrestoreView(_r7).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.ToggleExpand(exec_r8)); });
256
+ i0.ɵɵelementStart(1, "td", 44);
257
+ i0.ɵɵelement(2, "i", 46);
273
258
  i0.ɵɵelementEnd();
274
- i0.ɵɵelementStart(3, "td")(4, "span", 49);
259
+ i0.ɵɵelementStart(3, "td")(4, "span", 47);
275
260
  i0.ɵɵelement(5, "i");
276
261
  i0.ɵɵtext(6);
277
262
  i0.ɵɵelementEnd()();
278
- i0.ɵɵelementStart(7, "td", 50);
263
+ i0.ɵɵelementStart(7, "td", 48);
279
264
  i0.ɵɵtext(8);
280
265
  i0.ɵɵelementEnd();
281
- i0.ɵɵelementStart(9, "td", 51);
266
+ i0.ɵɵelementStart(9, "td", 49);
282
267
  i0.ɵɵtext(10);
283
268
  i0.ɵɵelementEnd();
284
- i0.ɵɵelementStart(11, "td", 51);
269
+ i0.ɵɵelementStart(11, "td", 49);
285
270
  i0.ɵɵtext(12);
286
271
  i0.ɵɵelementEnd();
287
- i0.ɵɵelementStart(13, "td", 52);
272
+ i0.ɵɵelementStart(13, "td", 50);
288
273
  i0.ɵɵtext(14);
289
274
  i0.ɵɵelementEnd()();
290
- i0.ɵɵconditionalCreate(15, SchedulingActivityComponent_ng_template_2_Conditional_2_Conditional_12_For_16_Conditional_15_Template, 39, 10, "tr", 53);
275
+ i0.ɵɵconditionalCreate(15, SchedulingActivityComponent_ng_template_2_Conditional_2_Conditional_12_For_16_Conditional_15_Template, 39, 10, "tr", 51);
291
276
  } if (rf & 2) {
292
- const exec_r10 = ctx.$implicit;
277
+ const exec_r8 = ctx.$implicit;
293
278
  const ctx_r2 = i0.ɵɵnextContext(4);
294
- i0.ɵɵclassProp("expanded", ctx_r2.IsExpanded(exec_r10));
279
+ i0.ɵɵclassProp("expanded", ctx_r2.IsExpanded(exec_r8));
295
280
  i0.ɵɵadvance(2);
296
- i0.ɵɵclassProp("rotated", ctx_r2.IsExpanded(exec_r10));
281
+ i0.ɵɵclassProp("rotated", ctx_r2.IsExpanded(exec_r8));
297
282
  i0.ɵɵadvance(2);
298
- i0.ɵɵproperty("ngClass", ctx_r2.GetStatusClass(exec_r10.status));
283
+ i0.ɵɵproperty("ngClass", ctx_r2.GetStatusClass(exec_r8.status));
299
284
  i0.ɵɵadvance();
300
- i0.ɵɵclassMap(ctx_r2.GetStatusIcon(exec_r10.status));
285
+ i0.ɵɵclassMap(ctx_r2.GetStatusIcon(exec_r8.status));
301
286
  i0.ɵɵadvance();
302
- i0.ɵɵtextInterpolate1(" ", exec_r10.status, " ");
287
+ i0.ɵɵtextInterpolate1(" ", exec_r8.status, " ");
303
288
  i0.ɵɵadvance(2);
304
- i0.ɵɵtextInterpolate(exec_r10.jobName);
289
+ i0.ɵɵtextInterpolate(exec_r8.jobName);
305
290
  i0.ɵɵadvance(2);
306
- i0.ɵɵtextInterpolate(ctx_r2.FormatDateTime(exec_r10.startedAt));
291
+ i0.ɵɵtextInterpolate(ctx_r2.FormatDateTime(exec_r8.startedAt));
307
292
  i0.ɵɵadvance(2);
308
- i0.ɵɵtextInterpolate(ctx_r2.FormatDuration(exec_r10.duration));
293
+ i0.ɵɵtextInterpolate(ctx_r2.FormatDuration(exec_r8.duration));
309
294
  i0.ɵɵadvance(2);
310
- i0.ɵɵtextInterpolate(ctx_r2.TruncateError(exec_r10.errorMessage));
295
+ i0.ɵɵtextInterpolate(ctx_r2.TruncateError(exec_r8.errorMessage));
311
296
  i0.ɵɵadvance();
312
- i0.ɵɵconditional(ctx_r2.IsExpanded(exec_r10) ? 15 : -1);
297
+ i0.ɵɵconditional(ctx_r2.IsExpanded(exec_r8) ? 15 : -1);
313
298
  } }
314
299
  function SchedulingActivityComponent_ng_template_2_Conditional_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
315
- i0.ɵɵelementStart(0, "table", 23)(1, "thead")(2, "tr");
316
- i0.ɵɵelement(3, "th", 46);
300
+ i0.ɵɵelementStart(0, "table", 21)(1, "thead")(2, "tr");
301
+ i0.ɵɵelement(3, "th", 44);
317
302
  i0.ɵɵelementStart(4, "th");
318
303
  i0.ɵɵtext(5, "Status");
319
304
  i0.ɵɵelementEnd();
@@ -338,19 +323,19 @@ function SchedulingActivityComponent_ng_template_2_Conditional_2_Conditional_12_
338
323
  i0.ɵɵrepeater(ctx_r2.FilteredExecutions);
339
324
  } }
340
325
  function SchedulingActivityComponent_ng_template_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
341
- i0.ɵɵelementStart(0, "div", 13);
342
- i0.ɵɵconditionalCreate(1, SchedulingActivityComponent_ng_template_2_Conditional_2_Conditional_1_Template, 3, 0, "div", 15);
343
- i0.ɵɵconditionalCreate(2, SchedulingActivityComponent_ng_template_2_Conditional_2_Conditional_2_Template, 18, 1, "div", 16);
344
- i0.ɵɵelementStart(3, "div", 16)(4, "div", 17)(5, "div", 18);
345
- i0.ɵɵelement(6, "i", 19);
326
+ i0.ɵɵelementStart(0, "div", 11);
327
+ i0.ɵɵconditionalCreate(1, SchedulingActivityComponent_ng_template_2_Conditional_2_Conditional_1_Template, 3, 0, "div", 13);
328
+ i0.ɵɵconditionalCreate(2, SchedulingActivityComponent_ng_template_2_Conditional_2_Conditional_2_Template, 18, 1, "div", 14);
329
+ i0.ɵɵelementStart(3, "div", 14)(4, "div", 15)(5, "div", 16);
330
+ i0.ɵɵelement(6, "i", 17);
346
331
  i0.ɵɵtext(7, " Execution History ");
347
332
  i0.ɵɵelementEnd();
348
- i0.ɵɵelementStart(8, "span", 20);
333
+ i0.ɵɵelementStart(8, "span", 18);
349
334
  i0.ɵɵtext(9);
350
335
  i0.ɵɵelementEnd()();
351
- i0.ɵɵelementStart(10, "div", 21);
352
- i0.ɵɵconditionalCreate(11, SchedulingActivityComponent_ng_template_2_Conditional_2_Conditional_11_Template, 4, 0, "div", 22);
353
- i0.ɵɵconditionalCreate(12, SchedulingActivityComponent_ng_template_2_Conditional_2_Conditional_12_Template, 17, 0, "table", 23);
336
+ i0.ɵɵelementStart(10, "div", 19);
337
+ i0.ɵɵconditionalCreate(11, SchedulingActivityComponent_ng_template_2_Conditional_2_Conditional_11_Template, 4, 0, "div", 20);
338
+ i0.ɵɵconditionalCreate(12, SchedulingActivityComponent_ng_template_2_Conditional_2_Conditional_12_Template, 17, 0, "table", 21);
354
339
  i0.ɵɵelementEnd()()();
355
340
  } if (rf & 2) {
356
341
  const ctx_r2 = i0.ɵɵnextContext(2);
@@ -366,9 +351,9 @@ function SchedulingActivityComponent_ng_template_2_Conditional_2_Template(rf, ct
366
351
  i0.ɵɵconditional(ctx_r2.FilteredExecutions.length > 0 ? 12 : -1);
367
352
  } }
368
353
  function SchedulingActivityComponent_ng_template_2_Template(rf, ctx) { if (rf & 1) {
369
- i0.ɵɵelementStart(0, "div", 11);
370
- i0.ɵɵconditionalCreate(1, SchedulingActivityComponent_ng_template_2_Conditional_1_Template, 2, 0, "div", 12);
371
- i0.ɵɵconditionalCreate(2, SchedulingActivityComponent_ng_template_2_Conditional_2_Template, 13, 6, "div", 13);
354
+ i0.ɵɵelementStart(0, "div", 9);
355
+ i0.ɵɵconditionalCreate(1, SchedulingActivityComponent_ng_template_2_Conditional_1_Template, 2, 0, "div", 10);
356
+ i0.ɵɵconditionalCreate(2, SchedulingActivityComponent_ng_template_2_Conditional_2_Template, 13, 6, "div", 11);
372
357
  i0.ɵɵelementEnd();
373
358
  } if (rf & 2) {
374
359
  const ctx_r2 = i0.ɵɵnextContext();
@@ -529,6 +514,12 @@ export class SchedulingActivityComponent {
529
514
  ...this.UniqueJobNames.map(n => ({ text: n, value: n }))
530
515
  ];
531
516
  return [
517
+ {
518
+ key: 'timeRange',
519
+ type: 'chips',
520
+ label: 'Time range',
521
+ chipOptions: this.TimeRanges.map(r => ({ text: r.label, value: r.value }))
522
+ },
532
523
  {
533
524
  key: 'statusFilter',
534
525
  type: 'dropdown',
@@ -550,12 +541,15 @@ export class SchedulingActivityComponent {
550
541
  }
551
542
  get ActivityFilterValues() {
552
543
  return {
544
+ timeRange: this.SelectedTimeRange,
553
545
  statusFilter: this.StatusFilter,
554
546
  jobNameFilter: this.JobNameFilter
555
547
  };
556
548
  }
557
549
  get ActiveFilterCount() {
558
550
  let count = 0;
551
+ if (this.SelectedTimeRange !== '7d')
552
+ count++;
559
553
  if (this.StatusFilter)
560
554
  count++;
561
555
  if (this.JobNameFilter)
@@ -564,6 +558,9 @@ export class SchedulingActivityComponent {
564
558
  }
565
559
  OnFilterValuesChange(values) {
566
560
  const next = (values ?? {});
561
+ if (next.timeRange && next.timeRange !== this.SelectedTimeRange) {
562
+ this.OnTimeRangeChange(next.timeRange);
563
+ }
567
564
  if ((next.statusFilter ?? '') !== this.StatusFilter) {
568
565
  this.OnStatusFilterChange(next.statusFilter ?? '');
569
566
  }
@@ -572,6 +569,8 @@ export class SchedulingActivityComponent {
572
569
  }
573
570
  }
574
571
  ResetFilters() {
572
+ if (this.SelectedTimeRange !== '7d')
573
+ this.OnTimeRangeChange('7d');
575
574
  if (this.StatusFilter)
576
575
  this.OnStatusFilterChange('');
577
576
  if (this.JobNameFilter)
@@ -747,16 +746,16 @@ export class SchedulingActivityComponent {
747
746
  this.settingsPersistSubject.next();
748
747
  }
749
748
  static ɵfac = function SchedulingActivityComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SchedulingActivityComponent)(i0.ɵɵdirectiveInject(i1.SchedulingInstrumentationService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
750
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SchedulingActivityComponent, selectors: [["app-scheduling-activity"]], inputs: { initialState: "initialState", HideToolbar: "HideToolbar" }, outputs: { stateChange: "stateChange" }, standalone: false, decls: 4, vars: 1, consts: [["content", ""], [4, "ngTemplateOutlet"], ["Title", "Scheduling Activity", "Icon", "fa-solid fa-clock-rotate-left", "Subtitle", "Execution history, trends, and job type statistics"], ["actions", ""], [3, "ClearAllRequested", "ActiveCount", "ShowClearAll"], [3, "ValuesChange", "Reset", "Fields", "Values"], [3, "Clicked"], ["toolbar", ""], ["Placeholder", "Search executions...", 3, "ValueChange", "Value"], [3, "Label", "Active"], [3, "Clicked", "Label", "Active"], [1, "activity-container"], [1, "loading-container"], [1, "activity-content"], ["text", "Loading activity...", "size", "medium"], [1, "type-cards-row"], [1, "panel"], [1, "panel-header"], [1, "panel-title"], [1, "fa-solid", "fa-clock-rotate-left"], [1, "result-count"], [1, "panel-body", "table-container"], [1, "empty-state-small"], [1, "data-table"], [1, "type-card"], [1, "type-card-icon"], [1, "type-card-info"], [1, "type-card-name"], [1, "type-card-stats"], [1, "dot"], [1, "type-card-bar"], [1, "type-bar-fill"], [1, "fa-solid", "fa-chart-bar"], [1, "panel-body", "chart-container"], [1, "trend-chart"], [1, "chart-column"], [1, "chart-legend"], [1, "legend-item"], [1, "legend-dot", "success"], [1, "legend-dot", "failure"], [1, "bars-wrapper"], [1, "bar", "success-bar", 3, "title"], [1, "bar", "failure-bar", 3, "height", "title"], [1, "chart-label"], [1, "bar", "failure-bar", 3, "title"], [1, "fa-solid", "fa-inbox"], [1, "col-expand"], [1, "exec-row", 3, "click"], [1, "fa-solid", "fa-chevron-right", "expand-icon"], [1, "exec-status-badge", 3, "ngClass"], [1, "cell-name"], [1, "cell-meta"], [1, "cell-error"], [1, "exec-detail-row"], [1, "exec-detail-content"], [1, "exec-detail-grid"], [1, "detail-item"], [1, "detail-label"], [1, "detail-value"], [1, "exec-detail-actions"], [1, "detail-action-btn", 3, "click"], [1, "fa-solid", "fa-arrow-up-right-from-square"], [1, "detail-action-btn", "secondary", 3, "click"], [1, "fa-solid", "fa-briefcase"], [1, "detail-value", "error-text"]], template: function SchedulingActivityComponent_Template(rf, ctx) { if (rf & 1) {
751
- i0.ɵɵconditionalCreate(0, SchedulingActivityComponent_Conditional_0_Template, 1, 1, "ng-container")(1, SchedulingActivityComponent_Conditional_1_Template, 12, 6, "mj-page-layout");
749
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SchedulingActivityComponent, selectors: [["app-scheduling-activity"]], inputs: { initialState: "initialState", HideToolbar: "HideToolbar" }, outputs: { stateChange: "stateChange" }, standalone: false, decls: 4, vars: 1, consts: [["content", ""], [4, "ngTemplateOutlet"], ["Title", "Scheduling Activity", "Icon", "fa-solid fa-clock-rotate-left", "Subtitle", "Execution history, trends, and job type statistics"], ["actions", ""], [3, "Clicked"], ["toolbar", ""], ["Placeholder", "Search executions...", 3, "ValueChange", "Value"], [3, "ClearAllRequested", "ActiveCount", "ShowClearAll"], [3, "ValuesChange", "Reset", "Fields", "Values"], [1, "activity-container"], [1, "loading-container"], [1, "activity-content"], ["text", "Loading activity...", "size", "medium"], [1, "type-cards-row"], [1, "panel"], [1, "panel-header"], [1, "panel-title"], [1, "fa-solid", "fa-clock-rotate-left"], [1, "result-count"], [1, "panel-body", "table-container"], [1, "empty-state-small"], [1, "data-table"], [1, "type-card"], [1, "type-card-icon"], [1, "type-card-info"], [1, "type-card-name"], [1, "type-card-stats"], [1, "dot"], [1, "type-card-bar"], [1, "type-bar-fill"], [1, "fa-solid", "fa-chart-bar"], [1, "panel-body", "chart-container"], [1, "trend-chart"], [1, "chart-column"], [1, "chart-legend"], [1, "legend-item"], [1, "legend-dot", "success"], [1, "legend-dot", "failure"], [1, "bars-wrapper"], [1, "bar", "success-bar", 3, "title"], [1, "bar", "failure-bar", 3, "height", "title"], [1, "chart-label"], [1, "bar", "failure-bar", 3, "title"], [1, "fa-solid", "fa-inbox"], [1, "col-expand"], [1, "exec-row", 3, "click"], [1, "fa-solid", "fa-chevron-right", "expand-icon"], [1, "exec-status-badge", 3, "ngClass"], [1, "cell-name"], [1, "cell-meta"], [1, "cell-error"], [1, "exec-detail-row"], [1, "exec-detail-content"], [1, "exec-detail-grid"], [1, "detail-item"], [1, "detail-label"], [1, "detail-value"], [1, "exec-detail-actions"], [1, "detail-action-btn", 3, "click"], [1, "fa-solid", "fa-arrow-up-right-from-square"], [1, "detail-action-btn", "secondary", 3, "click"], [1, "fa-solid", "fa-briefcase"], [1, "detail-value", "error-text"]], template: function SchedulingActivityComponent_Template(rf, ctx) { if (rf & 1) {
750
+ i0.ɵɵconditionalCreate(0, SchedulingActivityComponent_Conditional_0_Template, 1, 1, "ng-container")(1, SchedulingActivityComponent_Conditional_1_Template, 10, 6, "mj-page-layout");
752
751
  i0.ɵɵtemplate(2, SchedulingActivityComponent_ng_template_2_Template, 3, 2, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
753
752
  } if (rf & 2) {
754
753
  i0.ɵɵconditional(ctx.HideToolbar ? 0 : 1);
755
- } }, dependencies: [i2.NgClass, i2.NgTemplateOutlet, i3.MJPageHeaderComponent, i3.MJPageLayoutComponent, i3.MJPageBodyComponent, i3.MJPageSearchComponent, i3.MJFilterChipComponent, i3.MJFilterPopoverComponent, i3.MJFilterPanelComponent, i3.MJRefreshButtonComponent, i4.LoadingComponent], styles: [".activity-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n\n\n\n.activity-toolbar[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-wrap: wrap;\n gap: 12px;\n}\n\n.toolbar-left[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n align-items: center;\n flex-wrap: wrap;\n}\n\n.toolbar-right[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.search-box[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n min-width: 220px;\n transition: border-color 0.2s;\n}\n\n.search-box[_ngcontent-%COMP%]:focus-within {\n border-color: var(--mj-brand-primary);\n box-shadow: var(--mj-shadow-sm);\n}\n\n.search-box[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-text-muted); font-size: 0.85rem; }\n\n.search-box[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n border: none; outline: none; background: transparent;\n font-size: 0.85rem; color: var(--mj-text-primary); width: 100%;\n}\n\n.filter-select[_ngcontent-%COMP%] {\n padding: 8px 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n font-size: 0.85rem;\n color: var(--mj-text-secondary);\n cursor: pointer;\n outline: none;\n}\n\n.time-range-group[_ngcontent-%COMP%] {\n display: flex;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n overflow: hidden;\n}\n\n.range-btn[_ngcontent-%COMP%] {\n padding: 8px 14px;\n border: none;\n background: transparent;\n font-size: 0.8rem;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s;\n border-right: 1px solid var(--mj-border-default);\n}\n\n.range-btn[_ngcontent-%COMP%]:last-child { border-right: none; }\n\n.range-btn[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-sunken); }\n\n.range-btn.active[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.control-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n cursor: pointer;\n font-size: 0.8rem;\n font-weight: 500;\n color: var(--mj-text-secondary);\n transition: all 0.2s ease;\n}\n\n.control-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n}\n\n.result-count[_ngcontent-%COMP%] {\n font-size: 0.8rem;\n color: var(--mj-text-muted);\n white-space: nowrap;\n}\n\n.loading-container[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 300px;\n}\n\n\n\n.type-cards-row[_ngcontent-%COMP%] {\n display: flex;\n gap: 16px;\n flex-wrap: wrap;\n}\n\n.type-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 16px 20px;\n background: var(--mj-bg-surface-card);\n border-radius: 14px;\n border: 1px solid var(--mj-border-default);\n box-shadow: var(--mj-shadow-sm);\n flex: 1;\n min-width: 240px;\n transition: all 0.2s ease;\n}\n\n.type-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-1px);\n box-shadow: var(--mj-shadow-md);\n}\n\n.type-card-icon[_ngcontent-%COMP%] {\n width: 44px;\n height: 44px;\n border-radius: 12px;\n background: var(--mj-brand-primary);\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n font-size: 1.1rem;\n flex-shrink: 0;\n}\n\n.type-card-info[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.type-card-name[_ngcontent-%COMP%] {\n font-weight: 700;\n color: var(--mj-text-primary);\n font-size: 0.9rem;\n}\n\n.type-card-stats[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n color: var(--mj-text-secondary);\n margin-top: 2px;\n}\n\n.type-card-stats[_ngcontent-%COMP%] .dot[_ngcontent-%COMP%] {\n margin: 0 4px;\n}\n\n.type-card-bar[_ngcontent-%COMP%] {\n width: 60px;\n height: 6px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 3px;\n overflow: hidden;\n}\n\n.type-bar-fill[_ngcontent-%COMP%] {\n height: 100%;\n border-radius: 3px;\n transition: width 0.5s;\n}\n\n\n\n.panel[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border-radius: 16px;\n border: 1px solid var(--mj-border-default);\n box-shadow: var(--mj-shadow-sm);\n overflow: hidden;\n}\n\n.panel-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 20px;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.panel-title[_ngcontent-%COMP%] {\n font-size: 0.95rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.panel-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-brand-primary); }\n\n.panel-body[_ngcontent-%COMP%] {\n padding: 20px;\n}\n\n.chart-container[_ngcontent-%COMP%] {\n padding: 20px;\n}\n\n.table-container[_ngcontent-%COMP%] {\n padding: 0;\n max-height: 600px;\n overflow-y: auto;\n}\n\n\n\n.trend-chart[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n height: 220px;\n align-items: flex-end;\n padding-bottom: 50px;\n overflow-x: auto;\n}\n\n.chart-column[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n flex: 1;\n min-width: 24px;\n max-width: 40px;\n height: 100%;\n}\n\n.bars-wrapper[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 1px;\n flex: 1;\n justify-content: flex-end;\n width: 100%;\n}\n\n.bar[_ngcontent-%COMP%] {\n width: 100%;\n border-radius: 3px 3px 0 0;\n min-height: 2px;\n transition: height 0.3s;\n}\n\n.success-bar[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n}\n\n.failure-bar[_ngcontent-%COMP%] {\n background: var(--mj-status-error);\n border-radius: 0;\n}\n\n.chart-label[_ngcontent-%COMP%] {\n font-size: 0.6rem;\n color: var(--mj-text-muted);\n margin-top: 6px;\n white-space: nowrap;\n text-align: center;\n transform: rotate(-45deg);\n transform-origin: top center;\n height: 40px;\n overflow: visible;\n}\n\n.chart-label.hidden-label[_ngcontent-%COMP%] {\n visibility: hidden;\n}\n\n.chart-legend[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n gap: 20px;\n margin-top: 12px;\n}\n\n.legend-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 0.75rem;\n color: var(--mj-text-secondary);\n}\n\n.legend-dot[_ngcontent-%COMP%] {\n width: 10px;\n height: 10px;\n border-radius: 3px;\n}\n\n.legend-dot.success[_ngcontent-%COMP%] { background: var(--mj-status-success); }\n.legend-dot.failure[_ngcontent-%COMP%] { background: var(--mj-status-error); }\n\n\n\n.data-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n}\n\n.data-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n text-align: left;\n font-size: 0.7rem;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-default);\n position: sticky;\n top: 0;\n background: var(--mj-bg-surface-sunken);\n z-index: 1;\n}\n\n.data-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 10px 16px;\n font-size: 0.85rem;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.data-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.cell-name[_ngcontent-%COMP%] { font-weight: 600; color: var(--mj-text-primary); }\n.cell-meta[_ngcontent-%COMP%] { color: var(--mj-text-secondary); }\n.cell-error[_ngcontent-%COMP%] { color: var(--mj-status-error); font-size: 0.8rem; max-width: 300px; }\n\n.exec-status-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n font-size: 0.7rem;\n font-weight: 600;\n padding: 3px 10px;\n border-radius: 12px;\n white-space: nowrap;\n}\n\n.exec-status-badge.status-running[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface)); color: var(--mj-brand-primary); }\n.exec-status-badge.status-success[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface)); color: var(--mj-status-success); }\n.exec-status-badge.status-error[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface)); color: var(--mj-status-error); }\n.exec-status-badge.status-warning[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface)); color: var(--mj-status-warning); }\n\n\n\n.col-expand[_ngcontent-%COMP%] {\n width: 32px;\n text-align: center;\n}\n\n.expand-icon[_ngcontent-%COMP%] {\n font-size: 0.7rem;\n color: var(--mj-text-muted);\n transition: transform 0.2s ease;\n}\n\n.expand-icon.rotated[_ngcontent-%COMP%] {\n transform: rotate(90deg);\n}\n\n.exec-row[_ngcontent-%COMP%] {\n cursor: pointer;\n transition: background 0.15s;\n}\n\n.exec-row[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.exec-row.expanded[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n border-bottom-color: transparent;\n}\n\n.exec-detail-row[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 0 !important;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.exec-detail-content[_ngcontent-%COMP%] {\n padding: 16px 20px 16px 48px;\n background: var(--mj-bg-surface-sunken);\n border-top: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.exec-detail-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));\n gap: 12px 24px;\n margin-bottom: 14px;\n}\n\n.detail-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.detail-label[_ngcontent-%COMP%] {\n font-size: 0.7rem;\n font-weight: 600;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.03em;\n}\n\n.detail-value[_ngcontent-%COMP%] {\n font-size: 0.85rem;\n color: var(--mj-text-primary);\n}\n\n.detail-value.error-text[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n font-size: 0.8rem;\n word-break: break-word;\n}\n\n.exec-detail-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n padding-top: 10px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n.detail-action-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: none;\n border-radius: 8px;\n font-size: 0.8rem;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.2s;\n}\n\n.detail-action-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary-hover);\n}\n\n.detail-action-btn.secondary[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-default);\n}\n\n.detail-action-btn.secondary[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n}\n\n.empty-state-small[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n padding: 48px 16px;\n color: var(--mj-text-muted);\n}\n\n.empty-state-small[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 2rem; color: var(--mj-border-strong); }\n.empty-state-small[_ngcontent-%COMP%] span[_ngcontent-%COMP%] { font-size: 0.85rem; }\n\n\n\n@media (max-width: 1024px) {\n .type-cards-row[_ngcontent-%COMP%] {\n flex-direction: column;\n }\n .type-card[_ngcontent-%COMP%] {\n min-width: auto;\n }\n}\n\n@media (max-width: 768px) {\n .activity-toolbar[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: stretch;\n }\n .toolbar-right[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n justify-content: space-between;\n }\n .search-box[_ngcontent-%COMP%] {\n min-width: auto;\n flex: 1;\n }\n .trend-chart[_ngcontent-%COMP%] {\n height: 120px;\n }\n .data-table[_ngcontent-%COMP%] {\n font-size: 0.8rem;\n }\n}"], changeDetection: 0 });
754
+ } }, dependencies: [i2.NgClass, i2.NgTemplateOutlet, i3.MJPageHeaderComponent, i3.MJPageLayoutComponent, i3.MJPageBodyComponent, i3.MJPageSearchComponent, i3.MJFilterPopoverComponent, i3.MJFilterPanelComponent, i3.MJRefreshButtonComponent, i4.LoadingComponent], styles: [".activity-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n\n\n\n.activity-toolbar[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-wrap: wrap;\n gap: 12px;\n}\n\n.toolbar-left[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n align-items: center;\n flex-wrap: wrap;\n}\n\n.toolbar-right[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.search-box[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n min-width: 220px;\n transition: border-color 0.2s;\n}\n\n.search-box[_ngcontent-%COMP%]:focus-within {\n border-color: var(--mj-brand-primary);\n box-shadow: var(--mj-shadow-sm);\n}\n\n.search-box[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-text-muted); font-size: 0.85rem; }\n\n.search-box[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n border: none; outline: none; background: transparent;\n font-size: 0.85rem; color: var(--mj-text-primary); width: 100%;\n}\n\n.filter-select[_ngcontent-%COMP%] {\n padding: 8px 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n font-size: 0.85rem;\n color: var(--mj-text-secondary);\n cursor: pointer;\n outline: none;\n}\n\n.time-range-group[_ngcontent-%COMP%] {\n display: flex;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n overflow: hidden;\n}\n\n.range-btn[_ngcontent-%COMP%] {\n padding: 8px 14px;\n border: none;\n background: transparent;\n font-size: 0.8rem;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s;\n border-right: 1px solid var(--mj-border-default);\n}\n\n.range-btn[_ngcontent-%COMP%]:last-child { border-right: none; }\n\n.range-btn[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-sunken); }\n\n.range-btn.active[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.control-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n cursor: pointer;\n font-size: 0.8rem;\n font-weight: 500;\n color: var(--mj-text-secondary);\n transition: all 0.2s ease;\n}\n\n.control-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n}\n\n.result-count[_ngcontent-%COMP%] {\n font-size: 0.8rem;\n color: var(--mj-text-muted);\n white-space: nowrap;\n}\n\n.loading-container[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 300px;\n}\n\n\n\n.type-cards-row[_ngcontent-%COMP%] {\n display: flex;\n gap: 16px;\n flex-wrap: wrap;\n}\n\n.type-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 16px 20px;\n background: var(--mj-bg-surface-card);\n border-radius: 14px;\n border: 1px solid var(--mj-border-default);\n box-shadow: var(--mj-shadow-sm);\n flex: 1;\n min-width: 240px;\n transition: all 0.2s ease;\n}\n\n.type-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-1px);\n box-shadow: var(--mj-shadow-md);\n}\n\n.type-card-icon[_ngcontent-%COMP%] {\n width: 44px;\n height: 44px;\n border-radius: 12px;\n background: var(--mj-brand-primary);\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n font-size: 1.1rem;\n flex-shrink: 0;\n}\n\n.type-card-info[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.type-card-name[_ngcontent-%COMP%] {\n font-weight: 700;\n color: var(--mj-text-primary);\n font-size: 0.9rem;\n}\n\n.type-card-stats[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n color: var(--mj-text-secondary);\n margin-top: 2px;\n}\n\n.type-card-stats[_ngcontent-%COMP%] .dot[_ngcontent-%COMP%] {\n margin: 0 4px;\n}\n\n.type-card-bar[_ngcontent-%COMP%] {\n width: 60px;\n height: 6px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 3px;\n overflow: hidden;\n}\n\n.type-bar-fill[_ngcontent-%COMP%] {\n height: 100%;\n border-radius: 3px;\n transition: width 0.5s;\n}\n\n\n\n.panel[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border-radius: 16px;\n border: 1px solid var(--mj-border-default);\n box-shadow: var(--mj-shadow-sm);\n overflow: hidden;\n}\n\n.panel-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 20px;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.panel-title[_ngcontent-%COMP%] {\n font-size: 0.95rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.panel-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-brand-primary); }\n\n.panel-body[_ngcontent-%COMP%] {\n padding: 20px;\n}\n\n.chart-container[_ngcontent-%COMP%] {\n padding: 20px;\n}\n\n.table-container[_ngcontent-%COMP%] {\n padding: 0;\n max-height: 600px;\n overflow-y: auto;\n}\n\n\n\n.trend-chart[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n height: 220px;\n align-items: flex-end;\n padding-bottom: 50px;\n overflow-x: auto;\n}\n\n.chart-column[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n flex: 1;\n min-width: 24px;\n max-width: 40px;\n height: 100%;\n}\n\n.bars-wrapper[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 1px;\n flex: 1;\n justify-content: flex-end;\n width: 100%;\n}\n\n.bar[_ngcontent-%COMP%] {\n width: 100%;\n border-radius: 3px 3px 0 0;\n min-height: 2px;\n transition: height 0.3s;\n}\n\n.success-bar[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n}\n\n.failure-bar[_ngcontent-%COMP%] {\n background: var(--mj-status-error);\n border-radius: 0;\n}\n\n.chart-label[_ngcontent-%COMP%] {\n font-size: 0.6rem;\n color: var(--mj-text-muted);\n margin-top: 6px;\n white-space: nowrap;\n text-align: center;\n transform: rotate(-45deg);\n transform-origin: top center;\n height: 40px;\n overflow: visible;\n}\n\n.chart-label.hidden-label[_ngcontent-%COMP%] {\n visibility: hidden;\n}\n\n.chart-legend[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n gap: 20px;\n margin-top: 12px;\n}\n\n.legend-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 0.75rem;\n color: var(--mj-text-secondary);\n}\n\n.legend-dot[_ngcontent-%COMP%] {\n width: 10px;\n height: 10px;\n border-radius: 3px;\n}\n\n.legend-dot.success[_ngcontent-%COMP%] { background: var(--mj-status-success); }\n.legend-dot.failure[_ngcontent-%COMP%] { background: var(--mj-status-error); }\n\n\n\n.data-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n}\n\n.data-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n text-align: left;\n font-size: 0.7rem;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-default);\n position: sticky;\n top: 0;\n background: var(--mj-bg-surface-sunken);\n z-index: 1;\n}\n\n.data-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 10px 16px;\n font-size: 0.85rem;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.data-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.cell-name[_ngcontent-%COMP%] { font-weight: 600; color: var(--mj-text-primary); }\n.cell-meta[_ngcontent-%COMP%] { color: var(--mj-text-secondary); }\n.cell-error[_ngcontent-%COMP%] { color: var(--mj-status-error); font-size: 0.8rem; max-width: 300px; }\n\n.exec-status-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n font-size: 0.7rem;\n font-weight: 600;\n padding: 3px 10px;\n border-radius: 12px;\n white-space: nowrap;\n}\n\n.exec-status-badge.status-running[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface)); color: var(--mj-brand-primary); }\n.exec-status-badge.status-success[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface)); color: var(--mj-status-success); }\n.exec-status-badge.status-error[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface)); color: var(--mj-status-error); }\n.exec-status-badge.status-warning[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface)); color: var(--mj-status-warning); }\n\n\n\n.col-expand[_ngcontent-%COMP%] {\n width: 32px;\n text-align: center;\n}\n\n.expand-icon[_ngcontent-%COMP%] {\n font-size: 0.7rem;\n color: var(--mj-text-muted);\n transition: transform 0.2s ease;\n}\n\n.expand-icon.rotated[_ngcontent-%COMP%] {\n transform: rotate(90deg);\n}\n\n.exec-row[_ngcontent-%COMP%] {\n cursor: pointer;\n transition: background 0.15s;\n}\n\n.exec-row[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.exec-row.expanded[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n border-bottom-color: transparent;\n}\n\n.exec-detail-row[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 0 !important;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.exec-detail-content[_ngcontent-%COMP%] {\n padding: 16px 20px 16px 48px;\n background: var(--mj-bg-surface-sunken);\n border-top: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.exec-detail-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));\n gap: 12px 24px;\n margin-bottom: 14px;\n}\n\n.detail-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.detail-label[_ngcontent-%COMP%] {\n font-size: 0.7rem;\n font-weight: 600;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.03em;\n}\n\n.detail-value[_ngcontent-%COMP%] {\n font-size: 0.85rem;\n color: var(--mj-text-primary);\n}\n\n.detail-value.error-text[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n font-size: 0.8rem;\n word-break: break-word;\n}\n\n.exec-detail-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n padding-top: 10px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n.detail-action-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: none;\n border-radius: 8px;\n font-size: 0.8rem;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.2s;\n}\n\n.detail-action-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary-hover);\n}\n\n.detail-action-btn.secondary[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-default);\n}\n\n.detail-action-btn.secondary[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n}\n\n.empty-state-small[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n padding: 48px 16px;\n color: var(--mj-text-muted);\n}\n\n.empty-state-small[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 2rem; color: var(--mj-border-strong); }\n.empty-state-small[_ngcontent-%COMP%] span[_ngcontent-%COMP%] { font-size: 0.85rem; }\n\n\n\n@media (max-width: 1024px) {\n .type-cards-row[_ngcontent-%COMP%] {\n flex-direction: column;\n }\n .type-card[_ngcontent-%COMP%] {\n min-width: auto;\n }\n}\n\n@media (max-width: 768px) {\n .activity-toolbar[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: stretch;\n }\n .toolbar-right[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n justify-content: space-between;\n }\n .search-box[_ngcontent-%COMP%] {\n min-width: auto;\n flex: 1;\n }\n .trend-chart[_ngcontent-%COMP%] {\n height: 120px;\n }\n .data-table[_ngcontent-%COMP%] {\n font-size: 0.8rem;\n }\n}"], changeDetection: 0 });
756
755
  }
757
756
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SchedulingActivityComponent, [{
758
757
  type: Component,
759
- args: [{ standalone: false, selector: 'app-scheduling-activity', changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (HideToolbar) {\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n} @else {\n <mj-page-layout>\n <mj-page-header\n Title=\"Scheduling Activity\"\n Icon=\"fa-solid fa-clock-rotate-left\"\n Subtitle=\"Execution history, trends, and job type statistics\">\n <div actions>\n <mj-filter-popover\n [ActiveCount]=\"ActiveFilterCount\"\n [ShowClearAll]=\"ActiveFilterCount > 0\"\n (ClearAllRequested)=\"ResetFilters()\">\n <mj-filter-panel\n [Fields]=\"ActivityFilterFields\"\n [Values]=\"ActivityFilterValues\"\n (ValuesChange)=\"OnFilterValuesChange($event)\"\n (Reset)=\"ResetFilters()\">\n </mj-filter-panel>\n </mj-filter-popover>\n <mj-refresh-button (Clicked)=\"Refresh()\"></mj-refresh-button>\n </div>\n <div toolbar>\n <mj-page-search\n Placeholder=\"Search executions...\"\n [Value]=\"SearchTerm\"\n (ValueChange)=\"OnSearchChange($event)\">\n </mj-page-search>\n @for (range of TimeRanges; track range.value) {\n <mj-filter-chip\n [Label]=\"range.label\"\n [Active]=\"SelectedTimeRange === range.value\"\n (Clicked)=\"OnTimeRangeChange(range.value)\">\n </mj-filter-chip>\n }\n </div>\n </mj-page-header>\n <mj-page-body>\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </mj-page-body>\n </mj-page-layout>\n}\n\n<ng-template #content>\n<div class=\"activity-container\">\n\n <!-- Loading -->\n @if (IsLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading activity...\" size=\"medium\"></mj-loading>\n </div>\n }\n\n @if (!IsLoading) {\n <div class=\"activity-content\">\n <!-- Job Type Summary Cards -->\n @if (JobTypes.length > 0) {\n <div class=\"type-cards-row\">\n @for (type of JobTypes; track type) {\n <div class=\"type-card\">\n <div class=\"type-card-icon\">\n <i [class]=\"GetTypeIcon(type.typeName)\"></i>\n </div>\n <div class=\"type-card-info\">\n <div class=\"type-card-name\">{{type.typeName}}</div>\n <div class=\"type-card-stats\">\n <span>{{type.activeJobsCount}} active</span>\n <span class=\"dot\">&middot;</span>\n <span>{{type.totalRuns}} runs</span>\n <span class=\"dot\">&middot;</span>\n <span [style.color]=\"GetSuccessRateColor(type.successRate)\">\n {{FormatPercentage(type.successRate)}}\n </span>\n </div>\n </div>\n <div class=\"type-card-bar\">\n <div class=\"type-bar-fill\"\n [style.width]=\"(type.successRate * 100) + '%'\"\n [style.background]=\"GetSuccessRateColor(type.successRate)\">\n </div>\n </div>\n </div>\n }\n </div>\n }\n <!-- Execution Trends Chart -->\n @if (Trends.length > 0) {\n <div class=\"panel\">\n <div class=\"panel-header\">\n <div class=\"panel-title\">\n <i class=\"fa-solid fa-chart-bar\"></i> Execution Trends\n </div>\n <span class=\"result-count\">{{FilteredExecutions.length}} executions</span>\n </div>\n <div class=\"panel-body chart-container\">\n <div class=\"trend-chart\">\n @for (trend of Trends; track trend; let i = $index) {\n <div class=\"chart-column\">\n <div class=\"bars-wrapper\">\n <div class=\"bar success-bar\"\n [style.height]=\"GetBarHeight(trend.successes)\"\n [title]=\"trend.successes + ' successful'\">\n </div>\n @if (trend.failures > 0) {\n <div class=\"bar failure-bar\"\n [style.height]=\"GetBarHeight(trend.failures)\"\n [title]=\"trend.failures + ' failed'\">\n </div>\n }\n </div>\n <div class=\"chart-label\" [class.hidden-label]=\"!ShouldShowLabel(i)\" >{{FormatChartLabel(trend.timestamp)}}</div>\n </div>\n }\n </div>\n <div class=\"chart-legend\">\n <span class=\"legend-item\"><span class=\"legend-dot success\"></span> Successful</span>\n <span class=\"legend-item\"><span class=\"legend-dot failure\"></span> Failed</span>\n </div>\n </div>\n </div>\n }\n <!-- Execution History Table -->\n <div class=\"panel\">\n <div class=\"panel-header\">\n <div class=\"panel-title\">\n <i class=\"fa-solid fa-clock-rotate-left\"></i> Execution History\n </div>\n <span class=\"result-count\">{{FilteredExecutions.length}} of {{Executions.length}}</span>\n </div>\n <div class=\"panel-body table-container\">\n @if (FilteredExecutions.length === 0) {\n <div class=\"empty-state-small\">\n <i class=\"fa-solid fa-inbox\"></i>\n <span>No executions found for this time range</span>\n </div>\n }\n @if (FilteredExecutions.length > 0) {\n <table class=\"data-table\">\n <thead>\n <tr>\n <th class=\"col-expand\"></th>\n <th>Status</th>\n <th>Job Name</th>\n <th>Started</th>\n <th>Duration</th>\n <th>Error</th>\n </tr>\n </thead>\n <tbody>\n @for (exec of FilteredExecutions; track exec) {\n <tr class=\"exec-row\" [class.expanded]=\"IsExpanded(exec)\" (click)=\"ToggleExpand(exec)\">\n <td class=\"col-expand\">\n <i class=\"fa-solid fa-chevron-right expand-icon\"\n [class.rotated]=\"IsExpanded(exec)\"></i>\n </td>\n <td>\n <span class=\"exec-status-badge\" [ngClass]=\"GetStatusClass(exec.status)\">\n <i [class]=\"GetStatusIcon(exec.status)\"></i>\n {{exec.status}}\n </span>\n </td>\n <td class=\"cell-name\">{{exec.jobName}}</td>\n <td class=\"cell-meta\">{{FormatDateTime(exec.startedAt)}}</td>\n <td class=\"cell-meta\">{{FormatDuration(exec.duration)}}</td>\n <td class=\"cell-error\">{{TruncateError(exec.errorMessage)}}</td>\n </tr>\n @if (IsExpanded(exec)) {\n <tr class=\"exec-detail-row\">\n <td [attr.colspan]=\"6\">\n <div class=\"exec-detail-content\">\n <div class=\"exec-detail-grid\">\n <div class=\"detail-item\">\n <span class=\"detail-label\">Job Name</span>\n <span class=\"detail-value\">{{exec.jobName}}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"detail-label\">Started</span>\n <span class=\"detail-value\">{{FormatDateTime(exec.startedAt)}}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"detail-label\">Completed</span>\n <span class=\"detail-value\">{{exec.completedAt ? FormatDateTime(exec.completedAt) : '-'}}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"detail-label\">Duration</span>\n <span class=\"detail-value\">{{FormatDuration(exec.duration)}}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"detail-label\">Status</span>\n <span class=\"detail-value\">\n <span class=\"exec-status-badge\" [ngClass]=\"GetStatusClass(exec.status)\">\n <i [class]=\"GetStatusIcon(exec.status)\"></i>\n {{exec.status}}\n </span>\n </span>\n </div>\n @if (exec.errorMessage) {\n <div class=\"detail-item\">\n <span class=\"detail-label\">Error</span>\n <span class=\"detail-value error-text\">{{exec.errorMessage}}</span>\n </div>\n }\n </div>\n <div class=\"exec-detail-actions\">\n <button class=\"detail-action-btn\" (click)=\"OpenExecutionRecord(exec, $event)\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i> Open Run Record\n </button>\n <button class=\"detail-action-btn secondary\" (click)=\"OpenJobRecord(exec, $event)\">\n <i class=\"fa-solid fa-briefcase\"></i> Open Job\n </button>\n </div>\n </div>\n </td>\n </tr>\n }\n }\n </tbody>\n </table>\n }\n </div>\n </div>\n </div>\n }\n</div>\n</ng-template>\n", styles: [".activity-container {\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n\n/* \u2500\u2500 Toolbar \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.activity-toolbar {\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-wrap: wrap;\n gap: 12px;\n}\n\n.toolbar-left {\n display: flex;\n gap: 8px;\n align-items: center;\n flex-wrap: wrap;\n}\n\n.toolbar-right {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.search-box {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n min-width: 220px;\n transition: border-color 0.2s;\n}\n\n.search-box:focus-within {\n border-color: var(--mj-brand-primary);\n box-shadow: var(--mj-shadow-sm);\n}\n\n.search-box i { color: var(--mj-text-muted); font-size: 0.85rem; }\n\n.search-box input {\n border: none; outline: none; background: transparent;\n font-size: 0.85rem; color: var(--mj-text-primary); width: 100%;\n}\n\n.filter-select {\n padding: 8px 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n font-size: 0.85rem;\n color: var(--mj-text-secondary);\n cursor: pointer;\n outline: none;\n}\n\n.time-range-group {\n display: flex;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n overflow: hidden;\n}\n\n.range-btn {\n padding: 8px 14px;\n border: none;\n background: transparent;\n font-size: 0.8rem;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s;\n border-right: 1px solid var(--mj-border-default);\n}\n\n.range-btn:last-child { border-right: none; }\n\n.range-btn:hover { background: var(--mj-bg-surface-sunken); }\n\n.range-btn.active {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.control-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n cursor: pointer;\n font-size: 0.8rem;\n font-weight: 500;\n color: var(--mj-text-secondary);\n transition: all 0.2s ease;\n}\n\n.control-btn:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n}\n\n.result-count {\n font-size: 0.8rem;\n color: var(--mj-text-muted);\n white-space: nowrap;\n}\n\n.loading-container {\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 300px;\n}\n\n/* \u2500\u2500 Type Summary Cards \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.type-cards-row {\n display: flex;\n gap: 16px;\n flex-wrap: wrap;\n}\n\n.type-card {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 16px 20px;\n background: var(--mj-bg-surface-card);\n border-radius: 14px;\n border: 1px solid var(--mj-border-default);\n box-shadow: var(--mj-shadow-sm);\n flex: 1;\n min-width: 240px;\n transition: all 0.2s ease;\n}\n\n.type-card:hover {\n transform: translateY(-1px);\n box-shadow: var(--mj-shadow-md);\n}\n\n.type-card-icon {\n width: 44px;\n height: 44px;\n border-radius: 12px;\n background: var(--mj-brand-primary);\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n font-size: 1.1rem;\n flex-shrink: 0;\n}\n\n.type-card-info {\n flex: 1;\n}\n\n.type-card-name {\n font-weight: 700;\n color: var(--mj-text-primary);\n font-size: 0.9rem;\n}\n\n.type-card-stats {\n font-size: 0.75rem;\n color: var(--mj-text-secondary);\n margin-top: 2px;\n}\n\n.type-card-stats .dot {\n margin: 0 4px;\n}\n\n.type-card-bar {\n width: 60px;\n height: 6px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 3px;\n overflow: hidden;\n}\n\n.type-bar-fill {\n height: 100%;\n border-radius: 3px;\n transition: width 0.5s;\n}\n\n/* \u2500\u2500 Panels \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.panel {\n background: var(--mj-bg-surface-card);\n border-radius: 16px;\n border: 1px solid var(--mj-border-default);\n box-shadow: var(--mj-shadow-sm);\n overflow: hidden;\n}\n\n.panel-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 20px;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.panel-title {\n font-size: 0.95rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.panel-title i { color: var(--mj-brand-primary); }\n\n.panel-body {\n padding: 20px;\n}\n\n.chart-container {\n padding: 20px;\n}\n\n.table-container {\n padding: 0;\n max-height: 600px;\n overflow-y: auto;\n}\n\n/* \u2500\u2500 Trend Chart \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.trend-chart {\n display: flex;\n gap: 4px;\n height: 220px;\n align-items: flex-end;\n padding-bottom: 50px;\n overflow-x: auto;\n}\n\n.chart-column {\n display: flex;\n flex-direction: column;\n align-items: center;\n flex: 1;\n min-width: 24px;\n max-width: 40px;\n height: 100%;\n}\n\n.bars-wrapper {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 1px;\n flex: 1;\n justify-content: flex-end;\n width: 100%;\n}\n\n.bar {\n width: 100%;\n border-radius: 3px 3px 0 0;\n min-height: 2px;\n transition: height 0.3s;\n}\n\n.success-bar {\n background: var(--mj-status-success);\n}\n\n.failure-bar {\n background: var(--mj-status-error);\n border-radius: 0;\n}\n\n.chart-label {\n font-size: 0.6rem;\n color: var(--mj-text-muted);\n margin-top: 6px;\n white-space: nowrap;\n text-align: center;\n transform: rotate(-45deg);\n transform-origin: top center;\n height: 40px;\n overflow: visible;\n}\n\n.chart-label.hidden-label {\n visibility: hidden;\n}\n\n.chart-legend {\n display: flex;\n justify-content: center;\n gap: 20px;\n margin-top: 12px;\n}\n\n.legend-item {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 0.75rem;\n color: var(--mj-text-secondary);\n}\n\n.legend-dot {\n width: 10px;\n height: 10px;\n border-radius: 3px;\n}\n\n.legend-dot.success { background: var(--mj-status-success); }\n.legend-dot.failure { background: var(--mj-status-error); }\n\n/* \u2500\u2500 Data Table \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.data-table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.data-table th {\n text-align: left;\n font-size: 0.7rem;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-default);\n position: sticky;\n top: 0;\n background: var(--mj-bg-surface-sunken);\n z-index: 1;\n}\n\n.data-table td {\n padding: 10px 16px;\n font-size: 0.85rem;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.data-table tbody tr:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.cell-name { font-weight: 600; color: var(--mj-text-primary); }\n.cell-meta { color: var(--mj-text-secondary); }\n.cell-error { color: var(--mj-status-error); font-size: 0.8rem; max-width: 300px; }\n\n.exec-status-badge {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n font-size: 0.7rem;\n font-weight: 600;\n padding: 3px 10px;\n border-radius: 12px;\n white-space: nowrap;\n}\n\n.exec-status-badge.status-running { background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface)); color: var(--mj-brand-primary); }\n.exec-status-badge.status-success { background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface)); color: var(--mj-status-success); }\n.exec-status-badge.status-error { background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface)); color: var(--mj-status-error); }\n.exec-status-badge.status-warning { background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface)); color: var(--mj-status-warning); }\n\n/* \u2500\u2500 Expandable Rows \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.col-expand {\n width: 32px;\n text-align: center;\n}\n\n.expand-icon {\n font-size: 0.7rem;\n color: var(--mj-text-muted);\n transition: transform 0.2s ease;\n}\n\n.expand-icon.rotated {\n transform: rotate(90deg);\n}\n\n.exec-row {\n cursor: pointer;\n transition: background 0.15s;\n}\n\n.exec-row:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.exec-row.expanded {\n background: var(--mj-bg-surface-sunken);\n border-bottom-color: transparent;\n}\n\n.exec-detail-row td {\n padding: 0 !important;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.exec-detail-content {\n padding: 16px 20px 16px 48px;\n background: var(--mj-bg-surface-sunken);\n border-top: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.exec-detail-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));\n gap: 12px 24px;\n margin-bottom: 14px;\n}\n\n.detail-item {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.detail-label {\n font-size: 0.7rem;\n font-weight: 600;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.03em;\n}\n\n.detail-value {\n font-size: 0.85rem;\n color: var(--mj-text-primary);\n}\n\n.detail-value.error-text {\n color: var(--mj-status-error);\n font-size: 0.8rem;\n word-break: break-word;\n}\n\n.exec-detail-actions {\n display: flex;\n gap: 8px;\n padding-top: 10px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n.detail-action-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: none;\n border-radius: 8px;\n font-size: 0.8rem;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.2s;\n}\n\n.detail-action-btn:hover {\n background: var(--mj-brand-primary-hover);\n}\n\n.detail-action-btn.secondary {\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-default);\n}\n\n.detail-action-btn.secondary:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n}\n\n.empty-state-small {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n padding: 48px 16px;\n color: var(--mj-text-muted);\n}\n\n.empty-state-small i { font-size: 2rem; color: var(--mj-border-strong); }\n.empty-state-small span { font-size: 0.85rem; }\n\n/* \u2500\u2500 Responsive \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@media (max-width: 1024px) {\n .type-cards-row {\n flex-direction: column;\n }\n .type-card {\n min-width: auto;\n }\n}\n\n@media (max-width: 768px) {\n .activity-toolbar {\n flex-direction: column;\n align-items: stretch;\n }\n .toolbar-right {\n flex-wrap: wrap;\n justify-content: space-between;\n }\n .search-box {\n min-width: auto;\n flex: 1;\n }\n .trend-chart {\n height: 120px;\n }\n .data-table {\n font-size: 0.8rem;\n }\n}\n"] }]
758
+ args: [{ standalone: false, selector: 'app-scheduling-activity', changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (HideToolbar) {\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n} @else {\n <mj-page-layout>\n <mj-page-header\n Title=\"Scheduling Activity\"\n Icon=\"fa-solid fa-clock-rotate-left\"\n Subtitle=\"Execution history, trends, and job type statistics\">\n <div actions>\n <mj-refresh-button (Clicked)=\"Refresh()\"></mj-refresh-button>\n </div>\n <div toolbar>\n <mj-page-search\n Placeholder=\"Search executions...\"\n [Value]=\"SearchTerm\"\n (ValueChange)=\"OnSearchChange($event)\">\n </mj-page-search>\n <mj-filter-popover\n [ActiveCount]=\"ActiveFilterCount\"\n [ShowClearAll]=\"ActiveFilterCount > 0\"\n (ClearAllRequested)=\"ResetFilters()\">\n <mj-filter-panel\n [Fields]=\"ActivityFilterFields\"\n [Values]=\"ActivityFilterValues\"\n (ValuesChange)=\"OnFilterValuesChange($event)\"\n (Reset)=\"ResetFilters()\">\n </mj-filter-panel>\n </mj-filter-popover>\n </div>\n </mj-page-header>\n <mj-page-body>\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </mj-page-body>\n </mj-page-layout>\n}\n\n<ng-template #content>\n<div class=\"activity-container\">\n\n <!-- Loading -->\n @if (IsLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading activity...\" size=\"medium\"></mj-loading>\n </div>\n }\n\n @if (!IsLoading) {\n <div class=\"activity-content\">\n <!-- Job Type Summary Cards -->\n @if (JobTypes.length > 0) {\n <div class=\"type-cards-row\">\n @for (type of JobTypes; track type) {\n <div class=\"type-card\">\n <div class=\"type-card-icon\">\n <i [class]=\"GetTypeIcon(type.typeName)\"></i>\n </div>\n <div class=\"type-card-info\">\n <div class=\"type-card-name\">{{type.typeName}}</div>\n <div class=\"type-card-stats\">\n <span>{{type.activeJobsCount}} active</span>\n <span class=\"dot\">&middot;</span>\n <span>{{type.totalRuns}} runs</span>\n <span class=\"dot\">&middot;</span>\n <span [style.color]=\"GetSuccessRateColor(type.successRate)\">\n {{FormatPercentage(type.successRate)}}\n </span>\n </div>\n </div>\n <div class=\"type-card-bar\">\n <div class=\"type-bar-fill\"\n [style.width]=\"(type.successRate * 100) + '%'\"\n [style.background]=\"GetSuccessRateColor(type.successRate)\">\n </div>\n </div>\n </div>\n }\n </div>\n }\n <!-- Execution Trends Chart -->\n @if (Trends.length > 0) {\n <div class=\"panel\">\n <div class=\"panel-header\">\n <div class=\"panel-title\">\n <i class=\"fa-solid fa-chart-bar\"></i> Execution Trends\n </div>\n <span class=\"result-count\">{{FilteredExecutions.length}} executions</span>\n </div>\n <div class=\"panel-body chart-container\">\n <div class=\"trend-chart\">\n @for (trend of Trends; track trend; let i = $index) {\n <div class=\"chart-column\">\n <div class=\"bars-wrapper\">\n <div class=\"bar success-bar\"\n [style.height]=\"GetBarHeight(trend.successes)\"\n [title]=\"trend.successes + ' successful'\">\n </div>\n @if (trend.failures > 0) {\n <div class=\"bar failure-bar\"\n [style.height]=\"GetBarHeight(trend.failures)\"\n [title]=\"trend.failures + ' failed'\">\n </div>\n }\n </div>\n <div class=\"chart-label\" [class.hidden-label]=\"!ShouldShowLabel(i)\" >{{FormatChartLabel(trend.timestamp)}}</div>\n </div>\n }\n </div>\n <div class=\"chart-legend\">\n <span class=\"legend-item\"><span class=\"legend-dot success\"></span> Successful</span>\n <span class=\"legend-item\"><span class=\"legend-dot failure\"></span> Failed</span>\n </div>\n </div>\n </div>\n }\n <!-- Execution History Table -->\n <div class=\"panel\">\n <div class=\"panel-header\">\n <div class=\"panel-title\">\n <i class=\"fa-solid fa-clock-rotate-left\"></i> Execution History\n </div>\n <span class=\"result-count\">{{FilteredExecutions.length}} of {{Executions.length}}</span>\n </div>\n <div class=\"panel-body table-container\">\n @if (FilteredExecutions.length === 0) {\n <div class=\"empty-state-small\">\n <i class=\"fa-solid fa-inbox\"></i>\n <span>No executions found for this time range</span>\n </div>\n }\n @if (FilteredExecutions.length > 0) {\n <table class=\"data-table\">\n <thead>\n <tr>\n <th class=\"col-expand\"></th>\n <th>Status</th>\n <th>Job Name</th>\n <th>Started</th>\n <th>Duration</th>\n <th>Error</th>\n </tr>\n </thead>\n <tbody>\n @for (exec of FilteredExecutions; track exec) {\n <tr class=\"exec-row\" [class.expanded]=\"IsExpanded(exec)\" (click)=\"ToggleExpand(exec)\">\n <td class=\"col-expand\">\n <i class=\"fa-solid fa-chevron-right expand-icon\"\n [class.rotated]=\"IsExpanded(exec)\"></i>\n </td>\n <td>\n <span class=\"exec-status-badge\" [ngClass]=\"GetStatusClass(exec.status)\">\n <i [class]=\"GetStatusIcon(exec.status)\"></i>\n {{exec.status}}\n </span>\n </td>\n <td class=\"cell-name\">{{exec.jobName}}</td>\n <td class=\"cell-meta\">{{FormatDateTime(exec.startedAt)}}</td>\n <td class=\"cell-meta\">{{FormatDuration(exec.duration)}}</td>\n <td class=\"cell-error\">{{TruncateError(exec.errorMessage)}}</td>\n </tr>\n @if (IsExpanded(exec)) {\n <tr class=\"exec-detail-row\">\n <td [attr.colspan]=\"6\">\n <div class=\"exec-detail-content\">\n <div class=\"exec-detail-grid\">\n <div class=\"detail-item\">\n <span class=\"detail-label\">Job Name</span>\n <span class=\"detail-value\">{{exec.jobName}}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"detail-label\">Started</span>\n <span class=\"detail-value\">{{FormatDateTime(exec.startedAt)}}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"detail-label\">Completed</span>\n <span class=\"detail-value\">{{exec.completedAt ? FormatDateTime(exec.completedAt) : '-'}}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"detail-label\">Duration</span>\n <span class=\"detail-value\">{{FormatDuration(exec.duration)}}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"detail-label\">Status</span>\n <span class=\"detail-value\">\n <span class=\"exec-status-badge\" [ngClass]=\"GetStatusClass(exec.status)\">\n <i [class]=\"GetStatusIcon(exec.status)\"></i>\n {{exec.status}}\n </span>\n </span>\n </div>\n @if (exec.errorMessage) {\n <div class=\"detail-item\">\n <span class=\"detail-label\">Error</span>\n <span class=\"detail-value error-text\">{{exec.errorMessage}}</span>\n </div>\n }\n </div>\n <div class=\"exec-detail-actions\">\n <button class=\"detail-action-btn\" (click)=\"OpenExecutionRecord(exec, $event)\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i> Open Run Record\n </button>\n <button class=\"detail-action-btn secondary\" (click)=\"OpenJobRecord(exec, $event)\">\n <i class=\"fa-solid fa-briefcase\"></i> Open Job\n </button>\n </div>\n </div>\n </td>\n </tr>\n }\n }\n </tbody>\n </table>\n }\n </div>\n </div>\n </div>\n }\n</div>\n</ng-template>\n", styles: [".activity-container {\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n\n/* \u2500\u2500 Toolbar \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.activity-toolbar {\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-wrap: wrap;\n gap: 12px;\n}\n\n.toolbar-left {\n display: flex;\n gap: 8px;\n align-items: center;\n flex-wrap: wrap;\n}\n\n.toolbar-right {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.search-box {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n min-width: 220px;\n transition: border-color 0.2s;\n}\n\n.search-box:focus-within {\n border-color: var(--mj-brand-primary);\n box-shadow: var(--mj-shadow-sm);\n}\n\n.search-box i { color: var(--mj-text-muted); font-size: 0.85rem; }\n\n.search-box input {\n border: none; outline: none; background: transparent;\n font-size: 0.85rem; color: var(--mj-text-primary); width: 100%;\n}\n\n.filter-select {\n padding: 8px 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n font-size: 0.85rem;\n color: var(--mj-text-secondary);\n cursor: pointer;\n outline: none;\n}\n\n.time-range-group {\n display: flex;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n overflow: hidden;\n}\n\n.range-btn {\n padding: 8px 14px;\n border: none;\n background: transparent;\n font-size: 0.8rem;\n font-weight: 500;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s;\n border-right: 1px solid var(--mj-border-default);\n}\n\n.range-btn:last-child { border-right: none; }\n\n.range-btn:hover { background: var(--mj-bg-surface-sunken); }\n\n.range-btn.active {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.control-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n cursor: pointer;\n font-size: 0.8rem;\n font-weight: 500;\n color: var(--mj-text-secondary);\n transition: all 0.2s ease;\n}\n\n.control-btn:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n}\n\n.result-count {\n font-size: 0.8rem;\n color: var(--mj-text-muted);\n white-space: nowrap;\n}\n\n.loading-container {\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 300px;\n}\n\n/* \u2500\u2500 Type Summary Cards \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.type-cards-row {\n display: flex;\n gap: 16px;\n flex-wrap: wrap;\n}\n\n.type-card {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 16px 20px;\n background: var(--mj-bg-surface-card);\n border-radius: 14px;\n border: 1px solid var(--mj-border-default);\n box-shadow: var(--mj-shadow-sm);\n flex: 1;\n min-width: 240px;\n transition: all 0.2s ease;\n}\n\n.type-card:hover {\n transform: translateY(-1px);\n box-shadow: var(--mj-shadow-md);\n}\n\n.type-card-icon {\n width: 44px;\n height: 44px;\n border-radius: 12px;\n background: var(--mj-brand-primary);\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n font-size: 1.1rem;\n flex-shrink: 0;\n}\n\n.type-card-info {\n flex: 1;\n}\n\n.type-card-name {\n font-weight: 700;\n color: var(--mj-text-primary);\n font-size: 0.9rem;\n}\n\n.type-card-stats {\n font-size: 0.75rem;\n color: var(--mj-text-secondary);\n margin-top: 2px;\n}\n\n.type-card-stats .dot {\n margin: 0 4px;\n}\n\n.type-card-bar {\n width: 60px;\n height: 6px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 3px;\n overflow: hidden;\n}\n\n.type-bar-fill {\n height: 100%;\n border-radius: 3px;\n transition: width 0.5s;\n}\n\n/* \u2500\u2500 Panels \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.panel {\n background: var(--mj-bg-surface-card);\n border-radius: 16px;\n border: 1px solid var(--mj-border-default);\n box-shadow: var(--mj-shadow-sm);\n overflow: hidden;\n}\n\n.panel-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 20px;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.panel-title {\n font-size: 0.95rem;\n font-weight: 700;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.panel-title i { color: var(--mj-brand-primary); }\n\n.panel-body {\n padding: 20px;\n}\n\n.chart-container {\n padding: 20px;\n}\n\n.table-container {\n padding: 0;\n max-height: 600px;\n overflow-y: auto;\n}\n\n/* \u2500\u2500 Trend Chart \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.trend-chart {\n display: flex;\n gap: 4px;\n height: 220px;\n align-items: flex-end;\n padding-bottom: 50px;\n overflow-x: auto;\n}\n\n.chart-column {\n display: flex;\n flex-direction: column;\n align-items: center;\n flex: 1;\n min-width: 24px;\n max-width: 40px;\n height: 100%;\n}\n\n.bars-wrapper {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 1px;\n flex: 1;\n justify-content: flex-end;\n width: 100%;\n}\n\n.bar {\n width: 100%;\n border-radius: 3px 3px 0 0;\n min-height: 2px;\n transition: height 0.3s;\n}\n\n.success-bar {\n background: var(--mj-status-success);\n}\n\n.failure-bar {\n background: var(--mj-status-error);\n border-radius: 0;\n}\n\n.chart-label {\n font-size: 0.6rem;\n color: var(--mj-text-muted);\n margin-top: 6px;\n white-space: nowrap;\n text-align: center;\n transform: rotate(-45deg);\n transform-origin: top center;\n height: 40px;\n overflow: visible;\n}\n\n.chart-label.hidden-label {\n visibility: hidden;\n}\n\n.chart-legend {\n display: flex;\n justify-content: center;\n gap: 20px;\n margin-top: 12px;\n}\n\n.legend-item {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 0.75rem;\n color: var(--mj-text-secondary);\n}\n\n.legend-dot {\n width: 10px;\n height: 10px;\n border-radius: 3px;\n}\n\n.legend-dot.success { background: var(--mj-status-success); }\n.legend-dot.failure { background: var(--mj-status-error); }\n\n/* \u2500\u2500 Data Table \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.data-table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.data-table th {\n text-align: left;\n font-size: 0.7rem;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-default);\n position: sticky;\n top: 0;\n background: var(--mj-bg-surface-sunken);\n z-index: 1;\n}\n\n.data-table td {\n padding: 10px 16px;\n font-size: 0.85rem;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.data-table tbody tr:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.cell-name { font-weight: 600; color: var(--mj-text-primary); }\n.cell-meta { color: var(--mj-text-secondary); }\n.cell-error { color: var(--mj-status-error); font-size: 0.8rem; max-width: 300px; }\n\n.exec-status-badge {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n font-size: 0.7rem;\n font-weight: 600;\n padding: 3px 10px;\n border-radius: 12px;\n white-space: nowrap;\n}\n\n.exec-status-badge.status-running { background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface)); color: var(--mj-brand-primary); }\n.exec-status-badge.status-success { background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface)); color: var(--mj-status-success); }\n.exec-status-badge.status-error { background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface)); color: var(--mj-status-error); }\n.exec-status-badge.status-warning { background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface)); color: var(--mj-status-warning); }\n\n/* \u2500\u2500 Expandable Rows \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.col-expand {\n width: 32px;\n text-align: center;\n}\n\n.expand-icon {\n font-size: 0.7rem;\n color: var(--mj-text-muted);\n transition: transform 0.2s ease;\n}\n\n.expand-icon.rotated {\n transform: rotate(90deg);\n}\n\n.exec-row {\n cursor: pointer;\n transition: background 0.15s;\n}\n\n.exec-row:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.exec-row.expanded {\n background: var(--mj-bg-surface-sunken);\n border-bottom-color: transparent;\n}\n\n.exec-detail-row td {\n padding: 0 !important;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.exec-detail-content {\n padding: 16px 20px 16px 48px;\n background: var(--mj-bg-surface-sunken);\n border-top: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.exec-detail-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));\n gap: 12px 24px;\n margin-bottom: 14px;\n}\n\n.detail-item {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.detail-label {\n font-size: 0.7rem;\n font-weight: 600;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.03em;\n}\n\n.detail-value {\n font-size: 0.85rem;\n color: var(--mj-text-primary);\n}\n\n.detail-value.error-text {\n color: var(--mj-status-error);\n font-size: 0.8rem;\n word-break: break-word;\n}\n\n.exec-detail-actions {\n display: flex;\n gap: 8px;\n padding-top: 10px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n.detail-action-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: none;\n border-radius: 8px;\n font-size: 0.8rem;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.2s;\n}\n\n.detail-action-btn:hover {\n background: var(--mj-brand-primary-hover);\n}\n\n.detail-action-btn.secondary {\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-default);\n}\n\n.detail-action-btn.secondary:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n}\n\n.empty-state-small {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n padding: 48px 16px;\n color: var(--mj-text-muted);\n}\n\n.empty-state-small i { font-size: 2rem; color: var(--mj-border-strong); }\n.empty-state-small span { font-size: 0.85rem; }\n\n/* \u2500\u2500 Responsive \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@media (max-width: 1024px) {\n .type-cards-row {\n flex-direction: column;\n }\n .type-card {\n min-width: auto;\n }\n}\n\n@media (max-width: 768px) {\n .activity-toolbar {\n flex-direction: column;\n align-items: stretch;\n }\n .toolbar-right {\n flex-wrap: wrap;\n justify-content: space-between;\n }\n .search-box {\n min-width: auto;\n flex: 1;\n }\n .trend-chart {\n height: 120px;\n }\n .data-table {\n font-size: 0.8rem;\n }\n}\n"] }]
760
759
  }], () => [{ type: i1.SchedulingInstrumentationService }, { type: i0.ChangeDetectorRef }], { initialState: [{
761
760
  type: Input
762
761
  }], HideToolbar: [{