@memberjunction/ng-dashboards 5.34.1 → 5.36.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 (407) hide show
  1. package/dist/AI/components/agents/agent-configuration.component.d.ts +51 -0
  2. package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
  3. package/dist/AI/components/agents/agent-configuration.component.js +399 -292
  4. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  5. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts +8 -2
  6. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts.map +1 -1
  7. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js +87 -85
  8. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js.map +1 -1
  9. package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts +96 -0
  10. package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts.map +1 -1
  11. package/dist/AI/components/analytics/ai-analytics-resource.component.js +453 -122
  12. package/dist/AI/components/analytics/ai-analytics-resource.component.js.map +1 -1
  13. package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts +5 -0
  14. package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts.map +1 -1
  15. package/dist/AI/components/analytics/analytics-filter-bar.component.js +184 -135
  16. package/dist/AI/components/analytics/analytics-filter-bar.component.js.map +1 -1
  17. package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts +8 -2
  18. package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts.map +1 -1
  19. package/dist/AI/components/analytics/cost-budget/cost-budget.component.js +104 -103
  20. package/dist/AI/components/analytics/cost-budget/cost-budget.component.js.map +1 -1
  21. package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts +8 -2
  22. package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts.map +1 -1
  23. package/dist/AI/components/analytics/error-analysis/error-analysis.component.js +76 -74
  24. package/dist/AI/components/analytics/error-analysis/error-analysis.component.js.map +1 -1
  25. package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts.map +1 -1
  26. package/dist/AI/components/analytics/executive-summary/executive-summary.component.js +67 -87
  27. package/dist/AI/components/analytics/executive-summary/executive-summary.component.js.map +1 -1
  28. package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts +12 -19
  29. package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts.map +1 -1
  30. package/dist/AI/components/analytics/model-performance/model-performance.component.js +96 -203
  31. package/dist/AI/components/analytics/model-performance/model-performance.component.js.map +1 -1
  32. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts.map +1 -1
  33. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js +110 -126
  34. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js.map +1 -1
  35. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts.map +1 -1
  36. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js +61 -77
  37. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js.map +1 -1
  38. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +28 -0
  39. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
  40. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +2084 -2079
  41. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
  42. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +6 -3
  43. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
  44. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +493 -490
  45. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
  46. package/dist/AI/components/models/model-management.component.d.ts +17 -0
  47. package/dist/AI/components/models/model-management.component.d.ts.map +1 -1
  48. package/dist/AI/components/models/model-management.component.js +370 -425
  49. package/dist/AI/components/models/model-management.component.js.map +1 -1
  50. package/dist/AI/components/prompts/prompt-management.component.d.ts +17 -0
  51. package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
  52. package/dist/AI/components/prompts/prompt-management.component.js +317 -357
  53. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  54. package/dist/AI/components/requests/agent-requests-resource.component.d.ts +11 -0
  55. package/dist/AI/components/requests/agent-requests-resource.component.d.ts.map +1 -1
  56. package/dist/AI/components/requests/agent-requests-resource.component.js +170 -175
  57. package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
  58. package/dist/AI/components/system/system-configuration.component.d.ts +19 -0
  59. package/dist/AI/components/system/system-configuration.component.d.ts.map +1 -1
  60. package/dist/AI/components/system/system-configuration.component.js +403 -362
  61. package/dist/AI/components/system/system-configuration.component.js.map +1 -1
  62. package/dist/AI/components/tags/tags-resource.component.d.ts +15 -0
  63. package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
  64. package/dist/AI/components/tags/tags-resource.component.js +1423 -1438
  65. package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
  66. package/dist/AI/components/vectors/vector-management-resource.component.d.ts +8 -3
  67. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
  68. package/dist/AI/components/vectors/vector-management-resource.component.js +547 -521
  69. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  70. package/dist/APIKeys/api-keys-resource.component.d.ts +12 -8
  71. package/dist/APIKeys/api-keys-resource.component.d.ts.map +1 -1
  72. package/dist/APIKeys/api-keys-resource.component.js +329 -371
  73. package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
  74. package/dist/Actions/components/actions-overview.component.d.ts +6 -0
  75. package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
  76. package/dist/Actions/components/actions-overview.component.js +202 -158
  77. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  78. package/dist/Actions/components/execution-monitoring.component.d.ts +9 -3
  79. package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
  80. package/dist/Actions/components/execution-monitoring.component.js +191 -142
  81. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  82. package/dist/Actions/components/explorer/action-explorer.component.d.ts +41 -1
  83. package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -1
  84. package/dist/Actions/components/explorer/action-explorer.component.js +388 -94
  85. package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
  86. package/dist/Actions/components/explorer/index.d.ts +0 -1
  87. package/dist/Actions/components/explorer/index.d.ts.map +1 -1
  88. package/dist/Actions/components/explorer/index.js +0 -1
  89. package/dist/Actions/components/explorer/index.js.map +1 -1
  90. package/dist/Admin/admin-data-schema.component.js +19 -79
  91. package/dist/Admin/admin-data-schema.component.js.map +1 -1
  92. package/dist/Admin/admin-dev-tools-resource.component.js +19 -79
  93. package/dist/Admin/admin-dev-tools-resource.component.js.map +1 -1
  94. package/dist/Admin/admin-identity-access.component.js +19 -79
  95. package/dist/Admin/admin-identity-access.component.js.map +1 -1
  96. package/dist/Admin/admin-monitoring.component.js +19 -79
  97. package/dist/Admin/admin-monitoring.component.js.map +1 -1
  98. package/dist/Admin/base-admin-container.component.d.ts +9 -7
  99. package/dist/Admin/base-admin-container.component.d.ts.map +1 -1
  100. package/dist/Admin/base-admin-container.component.js +26 -17
  101. package/dist/Admin/base-admin-container.component.js.map +1 -1
  102. package/dist/ApplicationRoles/application-roles-resource.component.js +92 -91
  103. package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
  104. package/dist/Archiving/components/archive-config-resource.component.d.ts.map +1 -1
  105. package/dist/Archiving/components/archive-config-resource.component.js +24 -5
  106. package/dist/Archiving/components/archive-config-resource.component.js.map +1 -1
  107. package/dist/Archiving/components/archive-runs-resource.component.d.ts.map +1 -1
  108. package/dist/Archiving/components/archive-runs-resource.component.js +24 -5
  109. package/dist/Archiving/components/archive-runs-resource.component.js.map +1 -1
  110. package/dist/Communication/communication-logs-resource.component.d.ts +1 -1
  111. package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
  112. package/dist/Communication/communication-logs-resource.component.js +80 -99
  113. package/dist/Communication/communication-logs-resource.component.js.map +1 -1
  114. package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
  115. package/dist/Communication/communication-monitor-resource.component.js +127 -106
  116. package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
  117. package/dist/Communication/communication-new-message-resource.component.d.ts +93 -0
  118. package/dist/Communication/communication-new-message-resource.component.d.ts.map +1 -0
  119. package/dist/Communication/communication-new-message-resource.component.js +661 -0
  120. package/dist/Communication/communication-new-message-resource.component.js.map +1 -0
  121. package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
  122. package/dist/Communication/communication-providers-resource.component.js +44 -45
  123. package/dist/Communication/communication-providers-resource.component.js.map +1 -1
  124. package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
  125. package/dist/Communication/communication-runs-resource.component.js +60 -58
  126. package/dist/Communication/communication-runs-resource.component.js.map +1 -1
  127. package/dist/Communication/communication-templates-resource.component.d.ts +1 -1
  128. package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -1
  129. package/dist/Communication/communication-templates-resource.component.js +139 -162
  130. package/dist/Communication/communication-templates-resource.component.js.map +1 -1
  131. package/dist/Credentials/components/credentials-audit-resource.component.d.ts +7 -0
  132. package/dist/Credentials/components/credentials-audit-resource.component.d.ts.map +1 -1
  133. package/dist/Credentials/components/credentials-audit-resource.component.js +310 -297
  134. package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
  135. package/dist/Credentials/components/credentials-categories-resource.component.js +238 -266
  136. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  137. package/dist/Credentials/components/credentials-list-resource.component.d.ts +7 -0
  138. package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
  139. package/dist/Credentials/components/credentials-list-resource.component.js +381 -399
  140. package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
  141. package/dist/Credentials/components/credentials-overview-resource.component.js +222 -228
  142. package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
  143. package/dist/Credentials/components/credentials-types-resource.component.d.ts +6 -0
  144. package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
  145. package/dist/Credentials/components/credentials-types-resource.component.js +290 -305
  146. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  147. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts +8 -0
  148. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts.map +1 -1
  149. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +41 -21
  150. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js.map +1 -1
  151. package/dist/DatabaseDesigner/components/entity-list.component.d.ts +2 -0
  152. package/dist/DatabaseDesigner/components/entity-list.component.d.ts.map +1 -1
  153. package/dist/DatabaseDesigner/components/entity-list.component.js +148 -155
  154. package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -1
  155. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +1 -1
  156. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -1
  157. package/dist/DatabaseDesigner/database-designer-dashboards.module.js +25 -1
  158. package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -1
  159. package/dist/DevTools/app-state-inspector.component.d.ts +5 -0
  160. package/dist/DevTools/app-state-inspector.component.d.ts.map +1 -1
  161. package/dist/DevTools/app-state-inspector.component.js +46 -72
  162. package/dist/DevTools/app-state-inspector.component.js.map +1 -1
  163. package/dist/DevTools/class-registry.component.js +88 -100
  164. package/dist/DevTools/class-registry.component.js.map +1 -1
  165. package/dist/DevTools/event-monitor.component.js +158 -168
  166. package/dist/DevTools/event-monitor.component.js.map +1 -1
  167. package/dist/DevTools/graphql-console.component.js +257 -264
  168. package/dist/DevTools/graphql-console.component.js.map +1 -1
  169. package/dist/DevTools/layout-inspector.component.d.ts +5 -0
  170. package/dist/DevTools/layout-inspector.component.d.ts.map +1 -1
  171. package/dist/DevTools/layout-inspector.component.js +46 -64
  172. package/dist/DevTools/layout-inspector.component.js.map +1 -1
  173. package/dist/DevTools/lazy-module-status.component.js +75 -84
  174. package/dist/DevTools/lazy-module-status.component.js.map +1 -1
  175. package/dist/DevTools/settings-explorer.component.js +76 -85
  176. package/dist/DevTools/settings-explorer.component.js.map +1 -1
  177. package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts +2 -0
  178. package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
  179. package/dist/EntityAdmin/entity-admin-dashboard.component.js +24 -16
  180. package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
  181. package/dist/Home/home-dashboard.component.d.ts +6 -0
  182. package/dist/Home/home-dashboard.component.d.ts.map +1 -1
  183. package/dist/Home/home-dashboard.component.js +521 -485
  184. package/dist/Home/home-dashboard.component.js.map +1 -1
  185. package/dist/Integration/components/activity/activity.component.d.ts +8 -0
  186. package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
  187. package/dist/Integration/components/activity/activity.component.js +307 -318
  188. package/dist/Integration/components/activity/activity.component.js.map +1 -1
  189. package/dist/Integration/components/connections/connections.component.js +654 -648
  190. package/dist/Integration/components/connections/connections.component.js.map +1 -1
  191. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +234 -233
  192. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
  193. package/dist/Integration/components/overview/overview.component.js +182 -163
  194. package/dist/Integration/components/overview/overview.component.js.map +1 -1
  195. package/dist/Integration/components/pipelines/pipelines.component.d.ts +2 -0
  196. package/dist/Integration/components/pipelines/pipelines.component.d.ts.map +1 -1
  197. package/dist/Integration/components/pipelines/pipelines.component.js +595 -606
  198. package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
  199. package/dist/Integration/components/schedules/schedules.component.js +230 -241
  200. package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
  201. package/dist/Integration/integration.module.d.ts +1 -1
  202. package/dist/Integration/integration.module.d.ts.map +1 -1
  203. package/dist/Integration/integration.module.js +28 -1
  204. package/dist/Integration/integration.module.js.map +1 -1
  205. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts +5 -0
  206. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts.map +1 -1
  207. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +1138 -1147
  208. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
  209. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +54 -51
  210. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
  211. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts +11 -0
  212. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts.map +1 -1
  213. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +684 -697
  214. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
  215. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts +12 -1
  216. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts.map +1 -1
  217. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +191 -120
  218. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -1
  219. package/dist/Lists/components/lists-browse-resource.component.d.ts +120 -1
  220. package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
  221. package/dist/Lists/components/lists-browse-resource.component.js +1239 -610
  222. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  223. package/dist/Lists/components/lists-categories-resource.component.d.ts.map +1 -1
  224. package/dist/Lists/components/lists-categories-resource.component.js +152 -160
  225. package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
  226. package/dist/Lists/components/lists-my-lists-resource.component.d.ts.map +1 -1
  227. package/dist/Lists/components/lists-my-lists-resource.component.js +302 -319
  228. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  229. package/dist/Lists/components/lists-operations-resource.component.d.ts +133 -3
  230. package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
  231. package/dist/Lists/components/lists-operations-resource.component.js +1460 -272
  232. package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
  233. package/dist/Lists/components/lists-shared-with-me-resource.component.d.ts +29 -0
  234. package/dist/Lists/components/lists-shared-with-me-resource.component.d.ts.map +1 -0
  235. package/dist/Lists/components/lists-shared-with-me-resource.component.js +77 -0
  236. package/dist/Lists/components/lists-shared-with-me-resource.component.js.map +1 -0
  237. package/dist/Lists/components/venn-diagram/venn-diagram.component.d.ts +6 -0
  238. package/dist/Lists/components/venn-diagram/venn-diagram.component.d.ts.map +1 -1
  239. package/dist/Lists/components/venn-diagram/venn-diagram.component.js +35 -7
  240. package/dist/Lists/components/venn-diagram/venn-diagram.component.js.map +1 -1
  241. package/dist/Lists/index.d.ts +1 -0
  242. package/dist/Lists/index.d.ts.map +1 -1
  243. package/dist/Lists/index.js +1 -0
  244. package/dist/Lists/index.js.map +1 -1
  245. package/dist/Lists/services/list-set-operations.service.d.ts +93 -2
  246. package/dist/Lists/services/list-set-operations.service.d.ts.map +1 -1
  247. package/dist/Lists/services/list-set-operations.service.js +236 -10
  248. package/dist/Lists/services/list-set-operations.service.js.map +1 -1
  249. package/dist/MCP/mcp-dashboard.component.d.ts +20 -0
  250. package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
  251. package/dist/MCP/mcp-dashboard.component.js +1248 -1338
  252. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  253. package/dist/MCP/mcp.module.d.ts +1 -1
  254. package/dist/MCP/mcp.module.d.ts.map +1 -1
  255. package/dist/MCP/mcp.module.js +34 -1
  256. package/dist/MCP/mcp.module.js.map +1 -1
  257. package/dist/Permissions/audit-log-resource.component.js +76 -85
  258. package/dist/Permissions/audit-log-resource.component.js.map +1 -1
  259. package/dist/Permissions/resource-access-resource.component.js +64 -69
  260. package/dist/Permissions/resource-access-resource.component.js.map +1 -1
  261. package/dist/Permissions/user-access-resource.component.js +63 -74
  262. package/dist/Permissions/user-access-resource.component.js.map +1 -1
  263. package/dist/QueryBrowser/query-browser-resource.component.js +2 -2
  264. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  265. package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts +2 -1
  266. package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts.map +1 -1
  267. package/dist/Scheduling/components/scheduling-activity-resource.component.js +11 -12
  268. package/dist/Scheduling/components/scheduling-activity-resource.component.js.map +1 -1
  269. package/dist/Scheduling/components/scheduling-activity.component.d.ts +9 -1
  270. package/dist/Scheduling/components/scheduling-activity.component.d.ts.map +1 -1
  271. package/dist/Scheduling/components/scheduling-activity.component.js +250 -197
  272. package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
  273. package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts +2 -1
  274. package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts.map +1 -1
  275. package/dist/Scheduling/components/scheduling-jobs-resource.component.js +11 -12
  276. package/dist/Scheduling/components/scheduling-jobs-resource.component.js.map +1 -1
  277. package/dist/Scheduling/components/scheduling-jobs.component.d.ts +9 -1
  278. package/dist/Scheduling/components/scheduling-jobs.component.d.ts.map +1 -1
  279. package/dist/Scheduling/components/scheduling-jobs.component.js +203 -147
  280. package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
  281. package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts +2 -1
  282. package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts.map +1 -1
  283. package/dist/Scheduling/components/scheduling-overview-resource.component.js +11 -12
  284. package/dist/Scheduling/components/scheduling-overview-resource.component.js.map +1 -1
  285. package/dist/Scheduling/components/scheduling-overview.component.d.ts +3 -1
  286. package/dist/Scheduling/components/scheduling-overview.component.d.ts.map +1 -1
  287. package/dist/Scheduling/components/scheduling-overview.component.js +224 -190
  288. package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
  289. package/dist/Scheduling/scheduling-dashboard.component.d.ts +19 -6
  290. package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
  291. package/dist/Scheduling/scheduling-dashboard.component.js +259 -103
  292. package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
  293. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts +13 -3
  294. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
  295. package/dist/SystemDiagnostics/system-diagnostics.component.js +1009 -1264
  296. package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
  297. package/dist/Testing/components/testing-analytics-resource.component.d.ts +2 -1
  298. package/dist/Testing/components/testing-analytics-resource.component.d.ts.map +1 -1
  299. package/dist/Testing/components/testing-analytics-resource.component.js +7 -14
  300. package/dist/Testing/components/testing-analytics-resource.component.js.map +1 -1
  301. package/dist/Testing/components/testing-analytics.component.d.ts +3 -1
  302. package/dist/Testing/components/testing-analytics.component.d.ts.map +1 -1
  303. package/dist/Testing/components/testing-analytics.component.js +420 -393
  304. package/dist/Testing/components/testing-analytics.component.js.map +1 -1
  305. package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts +2 -1
  306. package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts.map +1 -1
  307. package/dist/Testing/components/testing-dashboard-tab-resource.component.js +16 -19
  308. package/dist/Testing/components/testing-dashboard-tab-resource.component.js.map +1 -1
  309. package/dist/Testing/components/testing-dashboard-tab.component.d.ts +3 -1
  310. package/dist/Testing/components/testing-dashboard-tab.component.d.ts.map +1 -1
  311. package/dist/Testing/components/testing-dashboard-tab.component.js +157 -122
  312. package/dist/Testing/components/testing-dashboard-tab.component.js.map +1 -1
  313. package/dist/Testing/components/testing-explorer-resource.component.d.ts +2 -1
  314. package/dist/Testing/components/testing-explorer-resource.component.d.ts.map +1 -1
  315. package/dist/Testing/components/testing-explorer-resource.component.js +7 -12
  316. package/dist/Testing/components/testing-explorer-resource.component.js.map +1 -1
  317. package/dist/Testing/components/testing-explorer.component.d.ts +38 -6
  318. package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
  319. package/dist/Testing/components/testing-explorer.component.js +679 -786
  320. package/dist/Testing/components/testing-explorer.component.js.map +1 -1
  321. package/dist/Testing/components/testing-review-resource.component.d.ts +4 -1
  322. package/dist/Testing/components/testing-review-resource.component.d.ts.map +1 -1
  323. package/dist/Testing/components/testing-review-resource.component.js +9 -12
  324. package/dist/Testing/components/testing-review-resource.component.js.map +1 -1
  325. package/dist/Testing/components/testing-review.component.d.ts +3 -1
  326. package/dist/Testing/components/testing-review.component.d.ts.map +1 -1
  327. package/dist/Testing/components/testing-review.component.js +310 -274
  328. package/dist/Testing/components/testing-review.component.js.map +1 -1
  329. package/dist/Testing/components/testing-runs-resource.component.d.ts +2 -1
  330. package/dist/Testing/components/testing-runs-resource.component.d.ts.map +1 -1
  331. package/dist/Testing/components/testing-runs-resource.component.js +16 -19
  332. package/dist/Testing/components/testing-runs-resource.component.js.map +1 -1
  333. package/dist/Testing/components/testing-runs.component.d.ts +3 -1
  334. package/dist/Testing/components/testing-runs.component.d.ts.map +1 -1
  335. package/dist/Testing/components/testing-runs.component.js +307 -273
  336. package/dist/Testing/components/testing-runs.component.js.map +1 -1
  337. package/dist/Testing/testing-dashboard.component.d.ts +2 -0
  338. package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
  339. package/dist/Testing/testing-dashboard.component.js +114 -99
  340. package/dist/Testing/testing-dashboard.component.js.map +1 -1
  341. package/dist/VersionHistory/components/diff-resource.component.js +185 -188
  342. package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
  343. package/dist/VersionHistory/components/graph-resource.component.js +154 -184
  344. package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
  345. package/dist/VersionHistory/components/labels-resource.component.d.ts +7 -0
  346. package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -1
  347. package/dist/VersionHistory/components/labels-resource.component.js +350 -354
  348. package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
  349. package/dist/VersionHistory/components/restore-resource.component.js +163 -169
  350. package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
  351. package/dist/actions-dashboards.module.d.ts +15 -16
  352. package/dist/actions-dashboards.module.d.ts.map +1 -1
  353. package/dist/actions-dashboards.module.js +34 -11
  354. package/dist/actions-dashboards.module.js.map +1 -1
  355. package/dist/ai-dashboards.module.d.ts +45 -48
  356. package/dist/ai-dashboards.module.d.ts.map +1 -1
  357. package/dist/ai-dashboards.module.js +51 -10
  358. package/dist/ai-dashboards.module.js.map +1 -1
  359. package/dist/archiving-dashboards.module.d.ts +2 -1
  360. package/dist/archiving-dashboards.module.d.ts.map +1 -1
  361. package/dist/archiving-dashboards.module.js +12 -2
  362. package/dist/archiving-dashboards.module.js.map +1 -1
  363. package/dist/communication-dashboards.module.d.ts +9 -6
  364. package/dist/communication-dashboards.module.d.ts.map +1 -1
  365. package/dist/communication-dashboards.module.js +37 -7
  366. package/dist/communication-dashboards.module.js.map +1 -1
  367. package/dist/core-dashboards.module.d.ts +1 -1
  368. package/dist/core-dashboards.module.d.ts.map +1 -1
  369. package/dist/core-dashboards.module.js +46 -1
  370. package/dist/core-dashboards.module.js.map +1 -1
  371. package/dist/credentials-dashboards.module.d.ts +1 -1
  372. package/dist/credentials-dashboards.module.d.ts.map +1 -1
  373. package/dist/credentials-dashboards.module.js +28 -1
  374. package/dist/credentials-dashboards.module.js.map +1 -1
  375. package/dist/lists-dashboards.module.d.ts +10 -9
  376. package/dist/lists-dashboards.module.d.ts.map +1 -1
  377. package/dist/lists-dashboards.module.js +40 -2
  378. package/dist/lists-dashboards.module.js.map +1 -1
  379. package/dist/public-api.d.ts +3 -2
  380. package/dist/public-api.d.ts.map +1 -1
  381. package/dist/public-api.js +4 -3
  382. package/dist/public-api.js.map +1 -1
  383. package/dist/scheduling-dashboards.module.d.ts +1 -1
  384. package/dist/scheduling-dashboards.module.d.ts.map +1 -1
  385. package/dist/scheduling-dashboards.module.js +31 -1
  386. package/dist/scheduling-dashboards.module.js.map +1 -1
  387. package/dist/testing-dashboards.module.d.ts +8 -7
  388. package/dist/testing-dashboards.module.d.ts.map +1 -1
  389. package/dist/testing-dashboards.module.js +42 -0
  390. package/dist/testing-dashboards.module.js.map +1 -1
  391. package/package.json +53 -52
  392. package/dist/AI/components/agents/agent-filter-panel.component.d.ts +0 -56
  393. package/dist/AI/components/agents/agent-filter-panel.component.d.ts.map +0 -1
  394. package/dist/AI/components/agents/agent-filter-panel.component.js +0 -285
  395. package/dist/AI/components/agents/agent-filter-panel.component.js.map +0 -1
  396. package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts +0 -49
  397. package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts.map +0 -1
  398. package/dist/AI/components/prompts/prompt-filter-panel.component.js +0 -184
  399. package/dist/AI/components/prompts/prompt-filter-panel.component.js.map +0 -1
  400. package/dist/AI/components/system/system-config-filter-panel.component.d.ts +0 -33
  401. package/dist/AI/components/system/system-config-filter-panel.component.d.ts.map +0 -1
  402. package/dist/AI/components/system/system-config-filter-panel.component.js +0 -144
  403. package/dist/AI/components/system/system-config-filter-panel.component.js.map +0 -1
  404. package/dist/Actions/components/explorer/action-toolbar.component.d.ts +0 -63
  405. package/dist/Actions/components/explorer/action-toolbar.component.d.ts.map +0 -1
  406. package/dist/Actions/components/explorer/action-toolbar.component.js +0 -463
  407. package/dist/Actions/components/explorer/action-toolbar.component.js.map +0 -1
@@ -4,7 +4,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- import { Component, ChangeDetectionStrategy } from '@angular/core';
7
+ import { Component, ChangeDetectionStrategy, ViewChild } from '@angular/core';
8
8
  import { BaseDashboard } from '@memberjunction/ng-shared';
9
9
  import { RegisterClass } from '@memberjunction/global';
10
10
  import { Subject } from 'rxjs';
@@ -12,65 +12,140 @@ import { debounceTime } from 'rxjs/operators';
12
12
  import { SharedService } from '@memberjunction/ng-shared';
13
13
  import * as i0 from "@angular/core";
14
14
  import * as i1 from "./services/scheduling-instrumentation.service";
15
- import * as i2 from "./components/scheduling-overview.component";
16
- import * as i3 from "./components/scheduling-jobs.component";
17
- import * as i4 from "./components/scheduling-activity.component";
18
- function SchedulingDashboardComponent_Conditional_7_Template(rf, ctx) { if (rf & 1) {
19
- i0.ɵɵelementStart(0, "div", 5);
20
- i0.ɵɵelement(1, "i", 19);
21
- i0.ɵɵelementStart(2, "span");
22
- i0.ɵɵtext(3);
23
- i0.ɵɵelementEnd()();
15
+ import * as i2 from "@memberjunction/ng-ui-components";
16
+ import * as i3 from "./components/scheduling-overview.component";
17
+ import * as i4 from "./components/scheduling-jobs.component";
18
+ import * as i5 from "./components/scheduling-activity.component";
19
+ const _c0 = ["overviewCmp"];
20
+ const _c1 = ["jobsCmp"];
21
+ const _c2 = ["activityCmp"];
22
+ const _forTrack0 = ($index, $item) => $item.value;
23
+ function SchedulingDashboardComponent_Conditional_3_Template(rf, ctx) { if (rf & 1) {
24
+ i0.ɵɵelement(0, "mj-stat-badge", 5);
24
25
  } if (rf & 2) {
25
26
  const ctx_r0 = i0.ɵɵnextContext();
26
- i0.ɵɵadvance(3);
27
- i0.ɵɵtextInterpolate2("", ctx_r0.AlertCount, " Alert", ctx_r0.AlertCount !== 1 ? "s" : "");
27
+ i0.ɵɵproperty("Count", ctx_r0.AlertCount)("Label", ctx_r0.AlertCount === 1 ? "Alert" : "Alerts");
28
28
  } }
29
- function SchedulingDashboardComponent_Conditional_8_Template(rf, ctx) { if (rf & 1) {
30
- i0.ɵɵelementStart(0, "div", 6);
31
- i0.ɵɵelement(1, "i", 20);
32
- i0.ɵɵelementStart(2, "span");
33
- i0.ɵɵtext(3, "Healthy");
34
- i0.ɵɵelementEnd()();
29
+ function SchedulingDashboardComponent_Conditional_4_Template(rf, ctx) { if (rf & 1) {
30
+ i0.ɵɵelement(0, "mj-stat-badge", 6);
35
31
  } }
36
- function SchedulingDashboardComponent_Conditional_27_Template(rf, ctx) { if (rf & 1) {
37
- i0.ɵɵelementStart(0, "span", 14);
38
- i0.ɵɵtext(1);
39
- i0.ɵɵelementEnd();
32
+ function SchedulingDashboardComponent_Conditional_5_Template(rf, ctx) { if (rf & 1) {
33
+ i0.ɵɵelement(0, "mj-stat-badge", 7);
40
34
  } if (rf & 2) {
41
35
  const ctx_r0 = i0.ɵɵnextContext();
42
- i0.ɵɵadvance();
43
- i0.ɵɵtextInterpolate(ctx_r0.ActiveJobCount);
36
+ i0.ɵɵproperty("Count", (ctx_r0.jobsCmp == null ? null : ctx_r0.jobsCmp.FilteredJobs == null ? null : ctx_r0.jobsCmp.FilteredJobs.length) ?? 0)("Total", (ctx_r0.jobsCmp == null ? null : ctx_r0.jobsCmp.Jobs == null ? null : ctx_r0.jobsCmp.Jobs.length) ?? 0);
44
37
  } }
45
- function SchedulingDashboardComponent_Case_34_Template(rf, ctx) { if (rf & 1) {
38
+ function SchedulingDashboardComponent_Case_7_Template(rf, ctx) { if (rf & 1) {
46
39
  const _r2 = i0.ɵɵgetCurrentView();
47
- i0.ɵɵelementStart(0, "div", 18)(1, "app-scheduling-overview", 21);
48
- i0.ɵɵlistener("stateChange", function SchedulingDashboardComponent_Case_34_Template_app_scheduling_overview_stateChange_1_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.OnDashboardStateChange($event)); });
49
- i0.ɵɵelementEnd()();
40
+ i0.ɵɵelementStart(0, "mj-refresh-button", 13);
41
+ i0.ɵɵlistener("Clicked", function SchedulingDashboardComponent_Case_7_Template_mj_refresh_button_Clicked_0_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.overviewCmp == null ? null : ctx_r0.overviewCmp.Refresh()); });
42
+ i0.ɵɵelementEnd();
43
+ i0.ɵɵelementStart(1, "button", 14);
44
+ i0.ɵɵlistener("click", function SchedulingDashboardComponent_Case_7_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.overviewCmp == null ? null : ctx_r0.overviewCmp.ToggleAutoRefresh()); });
45
+ i0.ɵɵelement(2, "i", 15);
46
+ i0.ɵɵtext(3);
47
+ i0.ɵɵelementEnd();
50
48
  } if (rf & 2) {
51
49
  const ctx_r0 = i0.ɵɵnextContext();
52
50
  i0.ɵɵadvance();
53
- i0.ɵɵproperty("initialState", ctx_r0.DashboardState);
51
+ i0.ɵɵproperty("variant", (ctx_r0.overviewCmp == null ? null : ctx_r0.overviewCmp.AutoRefreshEnabled) ? "primary" : "secondary");
52
+ i0.ɵɵadvance(2);
53
+ i0.ɵɵtextInterpolate1(" Auto: ", (ctx_r0.overviewCmp == null ? null : ctx_r0.overviewCmp.AutoRefreshEnabled) ? "ON" : "OFF", " ");
54
54
  } }
55
- function SchedulingDashboardComponent_Case_35_Template(rf, ctx) { if (rf & 1) {
55
+ function SchedulingDashboardComponent_Case_8_Template(rf, ctx) { if (rf & 1) {
56
56
  const _r3 = i0.ɵɵgetCurrentView();
57
- i0.ɵɵelementStart(0, "div", 18)(1, "app-scheduling-jobs", 21);
58
- i0.ɵɵlistener("stateChange", function SchedulingDashboardComponent_Case_35_Template_app_scheduling_jobs_stateChange_1_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.OnJobsStateChange($event)); });
57
+ i0.ɵɵelementStart(0, "mj-filter-popover", 16);
58
+ i0.ɵɵlistener("ClearAllRequested", function SchedulingDashboardComponent_Case_8_Template_mj_filter_popover_ClearAllRequested_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.resetJobsFilters()); });
59
+ i0.ɵɵelementStart(1, "mj-filter-panel", 17);
60
+ i0.ɵɵlistener("ValuesChange", function SchedulingDashboardComponent_Case_8_Template_mj_filter_panel_ValuesChange_1_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.onJobsFilterValuesChange($event)); })("Reset", function SchedulingDashboardComponent_Case_8_Template_mj_filter_panel_Reset_1_listener() { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.resetJobsFilters()); });
59
61
  i0.ɵɵelementEnd()();
62
+ i0.ɵɵelementStart(2, "mj-refresh-button", 13);
63
+ i0.ɵɵlistener("Clicked", function SchedulingDashboardComponent_Case_8_Template_mj_refresh_button_Clicked_2_listener() { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.jobsCmp == null ? null : ctx_r0.jobsCmp.Refresh()); });
64
+ i0.ɵɵelementEnd();
65
+ i0.ɵɵelementStart(3, "button", 18);
66
+ i0.ɵɵlistener("click", function SchedulingDashboardComponent_Case_8_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.jobsCmp == null ? null : ctx_r0.jobsCmp.OpenCreateSlideout()); });
67
+ i0.ɵɵelement(4, "i", 19);
68
+ i0.ɵɵtext(5, " New Job ");
69
+ i0.ɵɵelementEnd();
60
70
  } if (rf & 2) {
61
71
  const ctx_r0 = i0.ɵɵnextContext();
72
+ i0.ɵɵproperty("ActiveCount", ctx_r0.JobsActiveFilterCount)("ShowClearAll", ctx_r0.JobsActiveFilterCount > 0);
62
73
  i0.ɵɵadvance();
63
- i0.ɵɵproperty("initialState", ctx_r0.JobsState);
74
+ i0.ɵɵproperty("Fields", ctx_r0.JobsFilterFields)("Values", ctx_r0.JobsFilterValues);
64
75
  } }
65
- function SchedulingDashboardComponent_Case_36_Template(rf, ctx) { if (rf & 1) {
76
+ function SchedulingDashboardComponent_Case_9_Template(rf, ctx) { if (rf & 1) {
66
77
  const _r4 = i0.ɵɵgetCurrentView();
67
- i0.ɵɵelementStart(0, "div", 18)(1, "app-scheduling-activity", 21);
68
- i0.ɵɵlistener("stateChange", function SchedulingDashboardComponent_Case_36_Template_app_scheduling_activity_stateChange_1_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.OnActivityStateChange($event)); });
78
+ i0.ɵɵelementStart(0, "mj-filter-popover", 16);
79
+ i0.ɵɵlistener("ClearAllRequested", function SchedulingDashboardComponent_Case_9_Template_mj_filter_popover_ClearAllRequested_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.resetActivityFilters()); });
80
+ i0.ɵɵelementStart(1, "mj-filter-panel", 17);
81
+ i0.ɵɵlistener("ValuesChange", function SchedulingDashboardComponent_Case_9_Template_mj_filter_panel_ValuesChange_1_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.onActivityFilterValuesChange($event)); })("Reset", function SchedulingDashboardComponent_Case_9_Template_mj_filter_panel_Reset_1_listener() { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.resetActivityFilters()); });
69
82
  i0.ɵɵelementEnd()();
83
+ i0.ɵɵelementStart(2, "mj-refresh-button", 13);
84
+ i0.ɵɵlistener("Clicked", function SchedulingDashboardComponent_Case_9_Template_mj_refresh_button_Clicked_2_listener() { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.activityCmp == null ? null : ctx_r0.activityCmp.Refresh()); });
85
+ i0.ɵɵelementEnd();
70
86
  } if (rf & 2) {
71
87
  const ctx_r0 = i0.ɵɵnextContext();
88
+ i0.ɵɵproperty("ActiveCount", ctx_r0.ActivityActiveFilterCount)("ShowClearAll", ctx_r0.ActivityActiveFilterCount > 0);
72
89
  i0.ɵɵadvance();
73
- i0.ɵɵproperty("initialState", ctx_r0.ActivityState);
90
+ i0.ɵɵproperty("Fields", ctx_r0.ActivityFilterFields)("Values", ctx_r0.ActivityFilterValues);
91
+ } }
92
+ function SchedulingDashboardComponent_Case_12_Template(rf, ctx) { if (rf & 1) {
93
+ const _r5 = i0.ɵɵgetCurrentView();
94
+ i0.ɵɵelementStart(0, "mj-page-search", 20);
95
+ i0.ɵɵlistener("ValueChange", function SchedulingDashboardComponent_Case_12_Template_mj_page_search_ValueChange_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.jobsCmp == null ? null : ctx_r0.jobsCmp.OnSearchChange($event)); });
96
+ i0.ɵɵelementEnd();
97
+ } if (rf & 2) {
98
+ const ctx_r0 = i0.ɵɵnextContext();
99
+ i0.ɵɵproperty("Value", (ctx_r0.jobsCmp == null ? null : ctx_r0.jobsCmp.SearchTerm) ?? "");
100
+ } }
101
+ function SchedulingDashboardComponent_Case_13_For_2_Template(rf, ctx) { if (rf & 1) {
102
+ const _r7 = i0.ɵɵgetCurrentView();
103
+ i0.ɵɵelementStart(0, "mj-filter-chip", 23);
104
+ i0.ɵɵlistener("Clicked", function SchedulingDashboardComponent_Case_13_For_2_Template_mj_filter_chip_Clicked_0_listener() { const range_r8 = i0.ɵɵrestoreView(_r7).$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.activityCmp == null ? null : ctx_r0.activityCmp.OnTimeRangeChange(range_r8.value)); });
105
+ i0.ɵɵelementEnd();
106
+ } if (rf & 2) {
107
+ const range_r8 = ctx.$implicit;
108
+ const ctx_r0 = i0.ɵɵnextContext(2);
109
+ i0.ɵɵproperty("Label", range_r8.label)("Active", (ctx_r0.activityCmp == null ? null : ctx_r0.activityCmp.SelectedTimeRange) === range_r8.value);
110
+ } }
111
+ function SchedulingDashboardComponent_Case_13_Template(rf, ctx) { if (rf & 1) {
112
+ const _r6 = i0.ɵɵgetCurrentView();
113
+ i0.ɵɵelementStart(0, "mj-page-search", 21);
114
+ i0.ɵɵlistener("ValueChange", function SchedulingDashboardComponent_Case_13_Template_mj_page_search_ValueChange_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.activityCmp == null ? null : ctx_r0.activityCmp.OnSearchChange($event)); });
115
+ i0.ɵɵelementEnd();
116
+ i0.ɵɵrepeaterCreate(1, SchedulingDashboardComponent_Case_13_For_2_Template, 1, 2, "mj-filter-chip", 22, _forTrack0);
117
+ } if (rf & 2) {
118
+ const ctx_r0 = i0.ɵɵnextContext();
119
+ i0.ɵɵproperty("Value", (ctx_r0.activityCmp == null ? null : ctx_r0.activityCmp.SearchTerm) ?? "");
120
+ i0.ɵɵadvance();
121
+ i0.ɵɵrepeater(ctx_r0.activityCmp == null ? null : ctx_r0.activityCmp.TimeRanges);
122
+ } }
123
+ function SchedulingDashboardComponent_Case_15_Template(rf, ctx) { if (rf & 1) {
124
+ const _r9 = i0.ɵɵgetCurrentView();
125
+ i0.ɵɵelementStart(0, "app-scheduling-overview", 24, 0);
126
+ i0.ɵɵlistener("stateChange", function SchedulingDashboardComponent_Case_15_Template_app_scheduling_overview_stateChange_0_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.OnDashboardStateChange($event)); });
127
+ i0.ɵɵelementEnd();
128
+ } if (rf & 2) {
129
+ const ctx_r0 = i0.ɵɵnextContext();
130
+ i0.ɵɵproperty("initialState", ctx_r0.DashboardState)("HideToolbar", true);
131
+ } }
132
+ function SchedulingDashboardComponent_Case_16_Template(rf, ctx) { if (rf & 1) {
133
+ const _r10 = i0.ɵɵgetCurrentView();
134
+ i0.ɵɵelementStart(0, "app-scheduling-jobs", 24, 1);
135
+ i0.ɵɵlistener("stateChange", function SchedulingDashboardComponent_Case_16_Template_app_scheduling_jobs_stateChange_0_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.OnJobsStateChange($event)); });
136
+ i0.ɵɵelementEnd();
137
+ } if (rf & 2) {
138
+ const ctx_r0 = i0.ɵɵnextContext();
139
+ i0.ɵɵproperty("initialState", ctx_r0.JobsState)("HideToolbar", true);
140
+ } }
141
+ function SchedulingDashboardComponent_Case_17_Template(rf, ctx) { if (rf & 1) {
142
+ const _r11 = i0.ɵɵgetCurrentView();
143
+ i0.ɵɵelementStart(0, "app-scheduling-activity", 24, 2);
144
+ i0.ɵɵlistener("stateChange", function SchedulingDashboardComponent_Case_17_Template_app_scheduling_activity_stateChange_0_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.OnActivityStateChange($event)); });
145
+ i0.ɵɵelementEnd();
146
+ } if (rf & 2) {
147
+ const ctx_r0 = i0.ɵɵnextContext();
148
+ i0.ɵɵproperty("initialState", ctx_r0.ActivityState)("HideToolbar", true);
74
149
  } }
75
150
  let SchedulingDashboardComponent = class SchedulingDashboardComponent extends BaseDashboard {
76
151
  cdr;
@@ -84,13 +159,24 @@ let SchedulingDashboardComponent = class SchedulingDashboardComponent extends Ba
84
159
  stateChangeSubject = new Subject();
85
160
  ActiveJobCount = 0;
86
161
  AlertCount = 0;
162
+ /** ViewChild references to the active inner tab component — drive the toolbar UI rendered in <mj-page-header>. */
163
+ overviewCmp;
164
+ jobsCmp;
165
+ activityCmp;
87
166
  kpiSub;
88
167
  alertSub;
89
- NavigationItems = [
90
- { id: 'dashboard', text: 'Dashboard', icon: 'fa-solid fa-gauge-high' },
91
- { id: 'jobs', text: 'Jobs', icon: 'fa-solid fa-calendar-check' },
92
- { id: 'activity', text: 'Activity', icon: 'fa-solid fa-clock-rotate-left' }
93
- ];
168
+ get Tabs() {
169
+ return [
170
+ { key: 'dashboard', label: 'Dashboard', icon: 'fa-solid fa-gauge-high' },
171
+ {
172
+ key: 'jobs',
173
+ label: 'Jobs',
174
+ icon: 'fa-solid fa-calendar-check',
175
+ badge: this.ActiveJobCount > 0 ? this.ActiveJobCount : null
176
+ },
177
+ { key: 'activity', label: 'Activity', icon: 'fa-solid fa-clock-rotate-left' }
178
+ ];
179
+ }
94
180
  constructor(cdr, schedulingService) {
95
181
  super();
96
182
  this.cdr = cdr;
@@ -135,6 +221,91 @@ let SchedulingDashboardComponent = class SchedulingDashboardComponent extends Ba
135
221
  HasVisited(tabId) {
136
222
  return this.visitedTabs.has(tabId);
137
223
  }
224
+ // ───── Filter-popover plumbing for the [actions]/[toolbar] slots ─────
225
+ get JobsFilterFields() {
226
+ const statusOptions = (this.jobsCmp?.StatusOptions ?? ['']).map(s => ({
227
+ text: s === '' ? 'All Statuses' : s,
228
+ value: s
229
+ }));
230
+ const typeOptions = (this.jobsCmp?.TypeOptions ?? ['']).map(t => ({
231
+ text: t === '' ? 'All Types' : t,
232
+ value: t
233
+ }));
234
+ return [
235
+ { key: 'statusFilter', type: 'dropdown', label: 'Status', icon: 'fa-solid fa-circle-info', placeholder: 'All Statuses', options: statusOptions },
236
+ { key: 'typeFilter', type: 'dropdown', label: 'Type', icon: 'fa-solid fa-shapes', placeholder: 'All Types', options: typeOptions }
237
+ ];
238
+ }
239
+ get JobsFilterValues() {
240
+ return {
241
+ statusFilter: this.jobsCmp?.StatusFilter ?? '',
242
+ typeFilter: this.jobsCmp?.TypeFilter ?? ''
243
+ };
244
+ }
245
+ get JobsActiveFilterCount() {
246
+ let n = 0;
247
+ if (this.jobsCmp?.StatusFilter)
248
+ n++;
249
+ if (this.jobsCmp?.TypeFilter)
250
+ n++;
251
+ return n;
252
+ }
253
+ onJobsFilterValuesChange(v) {
254
+ if (!this.jobsCmp)
255
+ return;
256
+ const next = (v ?? {});
257
+ if ((next.statusFilter ?? '') !== this.jobsCmp.StatusFilter)
258
+ this.jobsCmp.OnStatusFilterChange(next.statusFilter ?? '');
259
+ if ((next.typeFilter ?? '') !== this.jobsCmp.TypeFilter)
260
+ this.jobsCmp.OnTypeFilterChange(next.typeFilter ?? '');
261
+ }
262
+ resetJobsFilters() {
263
+ if (this.jobsCmp?.StatusFilter)
264
+ this.jobsCmp.OnStatusFilterChange('');
265
+ if (this.jobsCmp?.TypeFilter)
266
+ this.jobsCmp.OnTypeFilterChange('');
267
+ }
268
+ get ActivityFilterFields() {
269
+ const statusOptions = (this.activityCmp?.StatusOptions ?? ['']).map(s => ({
270
+ text: s === '' ? 'All Statuses' : s,
271
+ value: s
272
+ }));
273
+ const jobNames = this.activityCmp?.UniqueJobNames ?? [];
274
+ const jobOptions = [{ text: 'All Jobs', value: '' }, ...jobNames.map(n => ({ text: n, value: n }))];
275
+ return [
276
+ { key: 'statusFilter', type: 'dropdown', label: 'Status', icon: 'fa-solid fa-circle-info', placeholder: 'All Statuses', options: statusOptions },
277
+ { key: 'jobNameFilter', type: 'dropdown', label: 'Job', icon: 'fa-solid fa-tag', placeholder: 'All Jobs', filterable: true, options: jobOptions }
278
+ ];
279
+ }
280
+ get ActivityFilterValues() {
281
+ return {
282
+ statusFilter: this.activityCmp?.StatusFilter ?? '',
283
+ jobNameFilter: this.activityCmp?.JobNameFilter ?? ''
284
+ };
285
+ }
286
+ get ActivityActiveFilterCount() {
287
+ let n = 0;
288
+ if (this.activityCmp?.StatusFilter)
289
+ n++;
290
+ if (this.activityCmp?.JobNameFilter)
291
+ n++;
292
+ return n;
293
+ }
294
+ onActivityFilterValuesChange(v) {
295
+ if (!this.activityCmp)
296
+ return;
297
+ const next = (v ?? {});
298
+ if ((next.statusFilter ?? '') !== this.activityCmp.StatusFilter)
299
+ this.activityCmp.OnStatusFilterChange(next.statusFilter ?? '');
300
+ if ((next.jobNameFilter ?? '') !== this.activityCmp.JobNameFilter)
301
+ this.activityCmp.OnJobNameFilterChange(next.jobNameFilter ?? '');
302
+ }
303
+ resetActivityFilters() {
304
+ if (this.activityCmp?.StatusFilter)
305
+ this.activityCmp.OnStatusFilterChange('');
306
+ if (this.activityCmp?.JobNameFilter)
307
+ this.activityCmp.OnJobNameFilterChange('');
308
+ }
138
309
  setupStateManagement() {
139
310
  this.stateChangeSubject.pipe(debounceTime(50)).subscribe(state => {
140
311
  this.UserStateChanged.emit(state);
@@ -160,10 +331,6 @@ let SchedulingDashboardComponent = class SchedulingDashboardComponent extends Ba
160
331
  this.ActivityState = state;
161
332
  this.emitStateChange();
162
333
  }
163
- GetCurrentTabLabel() {
164
- const item = this.NavigationItems.find(n => n.id === this.ActiveTab);
165
- return item ? item.text : 'Scheduling';
166
- }
167
334
  initDashboard() {
168
335
  this.schedulingService.Provider = this.ProviderToUse;
169
336
  this.IsLoading = false;
@@ -186,66 +353,46 @@ let SchedulingDashboardComponent = class SchedulingDashboardComponent extends Ba
186
353
  this.NotifyLoadComplete();
187
354
  }
188
355
  static ɵfac = function SchedulingDashboardComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SchedulingDashboardComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i1.SchedulingInstrumentationService)); };
189
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SchedulingDashboardComponent, selectors: [["mj-scheduling-dashboard"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 37, vars: 11, consts: [[1, "scheduling-dashboard-container"], [1, "dashboard-header"], [1, "header-title"], [1, "fa-solid", "fa-calendar-check"], [1, "header-actions"], [1, "status-badge"], [1, "status-badge", "healthy"], [1, "tab-label"], [1, "dashboard-content"], [1, "sidebar"], [1, "sidebar-section"], [1, "sidebar-section-title"], [1, "nav-item", 3, "click"], [1, "fa-solid", "fa-gauge-high"], [1, "badge"], [1, "fa-solid", "fa-clock-rotate-left"], [1, "main-content"], [1, "tab-container"], [1, "tab-content"], [1, "fa-solid", "fa-triangle-exclamation"], [1, "fa-solid", "fa-circle-check"], [3, "stateChange", "initialState"]], template: function SchedulingDashboardComponent_Template(rf, ctx) { if (rf & 1) {
190
- i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2);
191
- i0.ɵɵelement(3, "i", 3);
192
- i0.ɵɵelementStart(4, "span");
193
- i0.ɵɵtext(5, "Job Scheduling");
194
- i0.ɵɵelementEnd()();
195
- i0.ɵɵelementStart(6, "div", 4);
196
- i0.ɵɵconditionalCreate(7, SchedulingDashboardComponent_Conditional_7_Template, 4, 2, "div", 5);
197
- i0.ɵɵconditionalCreate(8, SchedulingDashboardComponent_Conditional_8_Template, 4, 0, "div", 6);
198
- i0.ɵɵelementStart(9, "span", 7);
199
- i0.ɵɵtext(10);
200
- i0.ɵɵelementEnd()()();
201
- i0.ɵɵelementStart(11, "div", 8)(12, "div", 9)(13, "div", 10)(14, "div", 11);
202
- i0.ɵɵtext(15, "Overview");
203
- i0.ɵɵelementEnd()();
204
- i0.ɵɵelementStart(16, "div", 12);
205
- i0.ɵɵlistener("click", function SchedulingDashboardComponent_Template_div_click_16_listener() { return ctx.OnTabChange("dashboard"); });
206
- i0.ɵɵelement(17, "i", 13);
207
- i0.ɵɵelementStart(18, "span");
208
- i0.ɵɵtext(19, "Dashboard");
209
- i0.ɵɵelementEnd()();
210
- i0.ɵɵelementStart(20, "div", 10)(21, "div", 11);
211
- i0.ɵɵtext(22, "Management");
212
- i0.ɵɵelementEnd()();
213
- i0.ɵɵelementStart(23, "div", 12);
214
- i0.ɵɵlistener("click", function SchedulingDashboardComponent_Template_div_click_23_listener() { return ctx.OnTabChange("jobs"); });
215
- i0.ɵɵelement(24, "i", 3);
216
- i0.ɵɵelementStart(25, "span");
217
- i0.ɵɵtext(26, "Jobs");
356
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SchedulingDashboardComponent, selectors: [["mj-scheduling-dashboard"]], viewQuery: function SchedulingDashboardComponent_Query(rf, ctx) { if (rf & 1) {
357
+ i0.ɵɵviewQuery(_c0, 5)(_c1, 5)(_c2, 5);
358
+ } if (rf & 2) {
359
+ let _t;
360
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.overviewCmp = _t.first);
361
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.jobsCmp = _t.first);
362
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.activityCmp = _t.first);
363
+ } }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 18, vars: 7, consts: [["overviewCmp", ""], ["jobsCmp", ""], ["activityCmp", ""], ["Title", "Scheduling", "Icon", "fa-solid fa-calendar-check", "Subtitle", "Background jobs, executions, and system health"], ["meta", ""], ["Icon", "fa-solid fa-triangle-exclamation", "Variant", "error", 3, "Count", "Label"], ["Icon", "fa-solid fa-circle-check", "Label", "Healthy", "Variant", "success"], ["Label", "jobs", 3, "Count", "Total"], ["actions", ""], ["toolbar", "", 1, "scheduling-toolbar"], [3, "TabChange", "Tabs", "ActiveKey"], ["Placeholder", "Search jobs...", 3, "Value"], [3, "initialState", "HideToolbar"], [3, "Clicked"], ["mjButton", "", "size", "sm", "title", "Toggle auto-refresh", 3, "click", "variant"], [1, "fa-solid", "fa-rotate"], [3, "ClearAllRequested", "ActiveCount", "ShowClearAll"], [3, "ValuesChange", "Reset", "Fields", "Values"], ["mjButton", "", "variant", "primary", "size", "sm", 3, "click"], [1, "fa-solid", "fa-plus"], ["Placeholder", "Search jobs...", 3, "ValueChange", "Value"], ["Placeholder", "Search executions...", 3, "ValueChange", "Value"], [3, "Label", "Active"], [3, "Clicked", "Label", "Active"], [3, "stateChange", "initialState", "HideToolbar"]], template: function SchedulingDashboardComponent_Template(rf, ctx) { if (rf & 1) {
364
+ i0.ɵɵelementStart(0, "mj-page-layout")(1, "mj-page-header", 3)(2, "div", 4);
365
+ i0.ɵɵconditionalCreate(3, SchedulingDashboardComponent_Conditional_3_Template, 1, 2, "mj-stat-badge", 5)(4, SchedulingDashboardComponent_Conditional_4_Template, 1, 0, "mj-stat-badge", 6);
366
+ i0.ɵɵconditionalCreate(5, SchedulingDashboardComponent_Conditional_5_Template, 1, 2, "mj-stat-badge", 7);
218
367
  i0.ɵɵelementEnd();
219
- i0.ɵɵconditionalCreate(27, SchedulingDashboardComponent_Conditional_27_Template, 2, 1, "span", 14);
368
+ i0.ɵɵelementStart(6, "div", 8);
369
+ i0.ɵɵconditionalCreate(7, SchedulingDashboardComponent_Case_7_Template, 4, 2)(8, SchedulingDashboardComponent_Case_8_Template, 6, 4)(9, SchedulingDashboardComponent_Case_9_Template, 3, 4);
220
370
  i0.ɵɵelementEnd();
221
- i0.ɵɵelementStart(28, "div", 12);
222
- i0.ɵɵlistener("click", function SchedulingDashboardComponent_Template_div_click_28_listener() { return ctx.OnTabChange("activity"); });
223
- i0.ɵɵelement(29, "i", 15);
224
- i0.ɵɵelementStart(30, "span");
225
- i0.ɵɵtext(31, "Activity");
226
- i0.ɵɵelementEnd()()();
227
- i0.ɵɵelementStart(32, "div", 16)(33, "div", 17);
228
- i0.ɵɵconditionalCreate(34, SchedulingDashboardComponent_Case_34_Template, 2, 1, "div", 18)(35, SchedulingDashboardComponent_Case_35_Template, 2, 1, "div", 18)(36, SchedulingDashboardComponent_Case_36_Template, 2, 1, "div", 18);
229
- i0.ɵɵelementEnd()()()();
371
+ i0.ɵɵelementStart(10, "div", 9)(11, "mj-tab-nav", 10);
372
+ i0.ɵɵlistener("TabChange", function SchedulingDashboardComponent_Template_mj_tab_nav_TabChange_11_listener($event) { return ctx.OnTabChange($event); });
373
+ i0.ɵɵelementEnd();
374
+ i0.ɵɵconditionalCreate(12, SchedulingDashboardComponent_Case_12_Template, 1, 1, "mj-page-search", 11)(13, SchedulingDashboardComponent_Case_13_Template, 3, 1);
375
+ i0.ɵɵelementEnd()();
376
+ i0.ɵɵelementStart(14, "mj-page-body");
377
+ i0.ɵɵconditionalCreate(15, SchedulingDashboardComponent_Case_15_Template, 2, 2, "app-scheduling-overview", 12)(16, SchedulingDashboardComponent_Case_16_Template, 2, 2, "app-scheduling-jobs", 12)(17, SchedulingDashboardComponent_Case_17_Template, 2, 2, "app-scheduling-activity", 12);
378
+ i0.ɵɵelementEnd()();
230
379
  } if (rf & 2) {
231
- let tmp_7_0;
232
- i0.ɵɵadvance(7);
233
- i0.ɵɵconditional(ctx.AlertCount > 0 ? 7 : -1);
234
- i0.ɵɵadvance();
235
- i0.ɵɵconditional(ctx.AlertCount === 0 ? 8 : -1);
380
+ let tmp_2_0;
381
+ let tmp_5_0;
382
+ let tmp_6_0;
383
+ i0.ɵɵadvance(3);
384
+ i0.ɵɵconditional(ctx.AlertCount > 0 ? 3 : 4);
385
+ i0.ɵɵadvance(2);
386
+ i0.ɵɵconditional(ctx.ActiveTab === "jobs" ? 5 : -1);
236
387
  i0.ɵɵadvance(2);
237
- i0.ɵɵtextInterpolate(ctx.GetCurrentTabLabel());
238
- i0.ɵɵadvance(6);
239
- i0.ɵɵclassProp("selected", ctx.ActiveTab === "dashboard");
240
- i0.ɵɵadvance(7);
241
- i0.ɵɵclassProp("selected", ctx.ActiveTab === "jobs");
388
+ i0.ɵɵconditional((tmp_2_0 = ctx.ActiveTab) === "dashboard" ? 7 : tmp_2_0 === "jobs" ? 8 : tmp_2_0 === "activity" ? 9 : -1);
242
389
  i0.ɵɵadvance(4);
243
- i0.ɵɵconditional(ctx.ActiveJobCount > 0 ? 27 : -1);
390
+ i0.ɵɵproperty("Tabs", ctx.Tabs)("ActiveKey", ctx.ActiveTab);
244
391
  i0.ɵɵadvance();
245
- i0.ɵɵclassProp("selected", ctx.ActiveTab === "activity");
246
- i0.ɵɵadvance(6);
247
- i0.ɵɵconditional((tmp_7_0 = ctx.ActiveTab) === "dashboard" ? 34 : tmp_7_0 === "jobs" ? 35 : tmp_7_0 === "activity" ? 36 : -1);
248
- } }, dependencies: [i2.SchedulingOverviewComponent, i3.SchedulingJobsComponent, i4.SchedulingActivityComponent], styles: [".scheduling-dashboard-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n background-color: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n font-family: 'Inter', -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\n}\n\n\n\n.dashboard-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 24px;\n background: var(--mj-brand-primary);\n border-bottom: 1px solid var(--mj-border-default);\n box-shadow: var(--mj-shadow-md);\n flex-shrink: 0;\n}\n\n.header-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n font-size: 1.25rem;\n font-weight: 600;\n color: var(--mj-text-inverse);\n}\n\n.header-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-inverse);\n font-size: 1.5rem;\n}\n\n.header-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.tab-label[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n font-weight: 500;\n color: var(--mj-text-inverse);\n background: rgba(255,255,255,0.15);\n padding: 6px 14px;\n border-radius: 20px;\n backdrop-filter: blur(4px);\n}\n\n.status-badge[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 0.75rem;\n font-weight: 600;\n color: var(--mj-status-warning);\n background: rgba(251, 191, 36, 0.15);\n padding: 6px 12px;\n border-radius: 20px;\n}\n\n.status-badge.healthy[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n background: rgba(52, 211, 153, 0.15);\n}\n\n\n\n.dashboard-content[_ngcontent-%COMP%] {\n display: flex;\n flex: 1;\n overflow: hidden;\n}\n\n\n\n.sidebar[_ngcontent-%COMP%] {\n width: 240px;\n background-color: var(--mj-bg-surface-card);\n border-right: 1px solid var(--mj-border-default);\n padding: 20px 0;\n display: flex;\n flex-direction: column;\n gap: 4px;\n flex-shrink: 0;\n}\n\n.sidebar-section[_ngcontent-%COMP%] {\n padding: 0 16px;\n margin-bottom: 4px;\n}\n\n.sidebar-section[_ngcontent-%COMP%]:not(:first-child) {\n margin-top: 16px;\n}\n\n.sidebar-section-title[_ngcontent-%COMP%] {\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: 8px 0;\n}\n\n.nav-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 20px;\n margin: 0 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n color: var(--mj-text-secondary);\n font-weight: 500;\n border-radius: 10px;\n font-size: 0.9rem;\n}\n\n.nav-item[_ngcontent-%COMP%]:hover {\n background-color: var(--mj-bg-surface-sunken);\n color: var(--mj-brand-primary);\n}\n\n.nav-item.selected[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n box-shadow: var(--mj-shadow-md);\n}\n\n.nav-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n width: 20px;\n text-align: center;\n font-size: 1rem;\n}\n\n.nav-item[_ngcontent-%COMP%] .badge[_ngcontent-%COMP%] {\n margin-left: auto;\n font-size: 0.7rem;\n font-weight: 700;\n padding: 2px 8px;\n border-radius: 12px;\n background: rgba(0, 118, 182, 0.1);\n color: var(--mj-brand-primary);\n}\n\n.nav-item.selected[_ngcontent-%COMP%] .badge[_ngcontent-%COMP%] {\n background: rgba(255,255,255,0.2);\n color: var(--mj-text-inverse);\n}\n\n\n\n.main-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 24px;\n background: var(--mj-bg-surface-sunken);\n}\n\n.tab-container[_ngcontent-%COMP%] {\n height: 100%;\n}\n\n.tab-content[_ngcontent-%COMP%] {\n height: 100%;\n animation: _ngcontent-%COMP%_fadeIn 0.3s ease;\n}\n\n@keyframes _ngcontent-%COMP%_fadeIn {\n from { opacity: 0; transform: translateY(8px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n\n\n@media (max-width: 1024px) {\n .sidebar[_ngcontent-%COMP%] {\n width: 200px;\n }\n .main-content[_ngcontent-%COMP%] {\n padding: 20px;\n }\n}\n\n@media (max-width: 768px) {\n .dashboard-content[_ngcontent-%COMP%] {\n flex-direction: column;\n }\n .sidebar[_ngcontent-%COMP%] {\n width: 100%;\n flex-direction: row;\n padding: 12px;\n gap: 0;\n overflow-x: auto;\n border-right: none;\n border-bottom: 1px solid var(--mj-border-default);\n }\n .sidebar-section[_ngcontent-%COMP%] {\n display: none;\n }\n .nav-item[_ngcontent-%COMP%] {\n flex-direction: column;\n padding: 10px 16px;\n margin: 0 4px;\n gap: 6px;\n white-space: nowrap;\n font-size: 12px;\n }\n .nav-item[_ngcontent-%COMP%] .badge[_ngcontent-%COMP%] {\n position: absolute;\n top: 4px;\n right: 4px;\n margin-left: 0;\n font-size: 9px;\n padding: 1px 5px;\n }\n .main-content[_ngcontent-%COMP%] {\n padding: 16px;\n }\n .dashboard-header[_ngcontent-%COMP%] {\n padding: 12px 16px;\n }\n .header-title[_ngcontent-%COMP%] {\n font-size: 1rem;\n }\n .tab-label[_ngcontent-%COMP%] {\n display: none;\n }\n .status-badge[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n display: none;\n }\n}"], changeDetection: 0 });
392
+ i0.ɵɵconditional((tmp_5_0 = ctx.ActiveTab) === "jobs" ? 12 : tmp_5_0 === "activity" ? 13 : -1);
393
+ i0.ɵɵadvance(3);
394
+ i0.ɵɵconditional((tmp_6_0 = ctx.ActiveTab) === "dashboard" ? 15 : tmp_6_0 === "jobs" ? 16 : tmp_6_0 === "activity" ? 17 : -1);
395
+ } }, dependencies: [i2.MJButtonDirective, i2.MJPageHeaderComponent, i2.MJPageLayoutComponent, i2.MJPageBodyComponent, i2.MJTabNavComponent, i2.MJPageSearchComponent, i2.MJFilterChipComponent, i2.MJFilterPopoverComponent, i2.MJFilterPanelComponent, i2.MJStatBadgeComponent, i2.MJRefreshButtonComponent, i3.SchedulingOverviewComponent, i4.SchedulingJobsComponent, i5.SchedulingActivityComponent], styles: ["\n\n.scheduling-toolbar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n}"], changeDetection: 0 });
249
396
  };
250
397
  SchedulingDashboardComponent = __decorate([
251
398
  RegisterClass(BaseDashboard, 'SchedulingDashboard')
@@ -253,7 +400,16 @@ SchedulingDashboardComponent = __decorate([
253
400
  export { SchedulingDashboardComponent };
254
401
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SchedulingDashboardComponent, [{
255
402
  type: Component,
256
- args: [{ standalone: false, selector: 'mj-scheduling-dashboard', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"scheduling-dashboard-container\">\n <div class=\"dashboard-header\">\n <div class=\"header-title\">\n <i class=\"fa-solid fa-calendar-check\"></i>\n <span>Job Scheduling</span>\n </div>\n <div class=\"header-actions\">\n @if (AlertCount > 0) {\n <div class=\"status-badge\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n <span>{{AlertCount}} Alert{{AlertCount !== 1 ? 's' : ''}}</span>\n </div>\n }\n @if (AlertCount === 0) {\n <div class=\"status-badge healthy\">\n <i class=\"fa-solid fa-circle-check\"></i>\n <span>Healthy</span>\n </div>\n }\n <span class=\"tab-label\">{{GetCurrentTabLabel()}}</span>\n </div>\n </div>\n\n <div class=\"dashboard-content\">\n <div class=\"sidebar\">\n <div class=\"sidebar-section\">\n <div class=\"sidebar-section-title\">Overview</div>\n </div>\n <div class=\"nav-item\" [class.selected]=\"ActiveTab === 'dashboard'\" (click)=\"OnTabChange('dashboard')\">\n <i class=\"fa-solid fa-gauge-high\"></i>\n <span>Dashboard</span>\n </div>\n\n <div class=\"sidebar-section\">\n <div class=\"sidebar-section-title\">Management</div>\n </div>\n <div class=\"nav-item\" [class.selected]=\"ActiveTab === 'jobs'\" (click)=\"OnTabChange('jobs')\">\n <i class=\"fa-solid fa-calendar-check\"></i>\n <span>Jobs</span>\n @if (ActiveJobCount > 0) {\n <span class=\"badge\">{{ActiveJobCount}}</span>\n }\n </div>\n <div class=\"nav-item\" [class.selected]=\"ActiveTab === 'activity'\" (click)=\"OnTabChange('activity')\">\n <i class=\"fa-solid fa-clock-rotate-left\"></i>\n <span>Activity</span>\n </div>\n </div>\n\n <div class=\"main-content\">\n <div class=\"tab-container\">\n @switch (ActiveTab) {\n @case ('dashboard') {\n <div class=\"tab-content\">\n <app-scheduling-overview\n [initialState]=\"DashboardState\"\n (stateChange)=\"OnDashboardStateChange($event)\">\n </app-scheduling-overview>\n </div>\n }\n @case ('jobs') {\n <div class=\"tab-content\">\n <app-scheduling-jobs\n [initialState]=\"JobsState\"\n (stateChange)=\"OnJobsStateChange($event)\">\n </app-scheduling-jobs>\n </div>\n }\n @case ('activity') {\n <div class=\"tab-content\">\n <app-scheduling-activity\n [initialState]=\"ActivityState\"\n (stateChange)=\"OnActivityStateChange($event)\">\n </app-scheduling-activity>\n </div>\n }\n }\n </div>\n </div>\n </div>\n</div>\n", styles: [".scheduling-dashboard-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n background-color: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n font-family: 'Inter', -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\n}\n\n/* \u2500\u2500 Header \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.dashboard-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 24px;\n background: var(--mj-brand-primary);\n border-bottom: 1px solid var(--mj-border-default);\n box-shadow: var(--mj-shadow-md);\n flex-shrink: 0;\n}\n\n.header-title {\n display: flex;\n align-items: center;\n gap: 12px;\n font-size: 1.25rem;\n font-weight: 600;\n color: var(--mj-text-inverse);\n}\n\n.header-title i {\n color: var(--mj-text-inverse);\n font-size: 1.5rem;\n}\n\n.header-actions {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.tab-label {\n font-size: 0.875rem;\n font-weight: 500;\n color: var(--mj-text-inverse);\n background: rgba(255,255,255,0.15);\n padding: 6px 14px;\n border-radius: 20px;\n backdrop-filter: blur(4px);\n}\n\n.status-badge {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 0.75rem;\n font-weight: 600;\n color: var(--mj-status-warning);\n background: rgba(251, 191, 36, 0.15);\n padding: 6px 12px;\n border-radius: 20px;\n}\n\n.status-badge.healthy {\n color: var(--mj-status-success);\n background: rgba(52, 211, 153, 0.15);\n}\n\n/* \u2500\u2500 Layout \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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.dashboard-content {\n display: flex;\n flex: 1;\n overflow: hidden;\n}\n\n/* \u2500\u2500 Sidebar \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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.sidebar {\n width: 240px;\n background-color: var(--mj-bg-surface-card);\n border-right: 1px solid var(--mj-border-default);\n padding: 20px 0;\n display: flex;\n flex-direction: column;\n gap: 4px;\n flex-shrink: 0;\n}\n\n.sidebar-section {\n padding: 0 16px;\n margin-bottom: 4px;\n}\n\n.sidebar-section:not(:first-child) {\n margin-top: 16px;\n}\n\n.sidebar-section-title {\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: 8px 0;\n}\n\n.nav-item {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 20px;\n margin: 0 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n color: var(--mj-text-secondary);\n font-weight: 500;\n border-radius: 10px;\n font-size: 0.9rem;\n}\n\n.nav-item:hover {\n background-color: var(--mj-bg-surface-sunken);\n color: var(--mj-brand-primary);\n}\n\n.nav-item.selected {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n box-shadow: var(--mj-shadow-md);\n}\n\n.nav-item i {\n width: 20px;\n text-align: center;\n font-size: 1rem;\n}\n\n.nav-item .badge {\n margin-left: auto;\n font-size: 0.7rem;\n font-weight: 700;\n padding: 2px 8px;\n border-radius: 12px;\n background: rgba(0, 118, 182, 0.1);\n color: var(--mj-brand-primary);\n}\n\n.nav-item.selected .badge {\n background: rgba(255,255,255,0.2);\n color: var(--mj-text-inverse);\n}\n\n/* \u2500\u2500 Main Content \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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.main-content {\n flex: 1;\n overflow-y: auto;\n padding: 24px;\n background: var(--mj-bg-surface-sunken);\n}\n\n.tab-container {\n height: 100%;\n}\n\n.tab-content {\n height: 100%;\n animation: fadeIn 0.3s ease;\n}\n\n@keyframes fadeIn {\n from { opacity: 0; transform: translateY(8px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n/* \u2500\u2500 Responsive \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n@media (max-width: 1024px) {\n .sidebar {\n width: 200px;\n }\n .main-content {\n padding: 20px;\n }\n}\n\n@media (max-width: 768px) {\n .dashboard-content {\n flex-direction: column;\n }\n .sidebar {\n width: 100%;\n flex-direction: row;\n padding: 12px;\n gap: 0;\n overflow-x: auto;\n border-right: none;\n border-bottom: 1px solid var(--mj-border-default);\n }\n .sidebar-section {\n display: none;\n }\n .nav-item {\n flex-direction: column;\n padding: 10px 16px;\n margin: 0 4px;\n gap: 6px;\n white-space: nowrap;\n font-size: 12px;\n }\n .nav-item .badge {\n position: absolute;\n top: 4px;\n right: 4px;\n margin-left: 0;\n font-size: 9px;\n padding: 1px 5px;\n }\n .main-content {\n padding: 16px;\n }\n .dashboard-header {\n padding: 12px 16px;\n }\n .header-title {\n font-size: 1rem;\n }\n .tab-label {\n display: none;\n }\n .status-badge span {\n display: none;\n }\n}\n"] }]
257
- }], () => [{ type: i0.ChangeDetectorRef }, { type: i1.SchedulingInstrumentationService }], null); })();
258
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SchedulingDashboardComponent, { className: "SchedulingDashboardComponent", filePath: "src/Scheduling/scheduling-dashboard.component.ts", lineNumber: 25 }); })();
403
+ args: [{ standalone: false, selector: 'mj-scheduling-dashboard', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mj-page-layout>\n <mj-page-header\n Title=\"Scheduling\"\n Icon=\"fa-solid fa-calendar-check\"\n Subtitle=\"Background jobs, executions, and system health\">\n <div meta>\n @if (AlertCount > 0) {\n <mj-stat-badge\n Icon=\"fa-solid fa-triangle-exclamation\"\n [Count]=\"AlertCount\"\n [Label]=\"AlertCount === 1 ? 'Alert' : 'Alerts'\"\n Variant=\"error\">\n </mj-stat-badge>\n } @else {\n <mj-stat-badge\n Icon=\"fa-solid fa-circle-check\"\n Label=\"Healthy\"\n Variant=\"success\">\n </mj-stat-badge>\n }\n @if (ActiveTab === 'jobs') {\n <mj-stat-badge\n [Count]=\"jobsCmp?.FilteredJobs?.length ?? 0\"\n [Total]=\"jobsCmp?.Jobs?.length ?? 0\"\n Label=\"jobs\">\n </mj-stat-badge>\n }\n </div>\n <div actions>\n @switch (ActiveTab) {\n @case ('dashboard') {\n <mj-refresh-button (Clicked)=\"overviewCmp?.Refresh()\"></mj-refresh-button>\n <button mjButton\n [variant]=\"overviewCmp?.AutoRefreshEnabled ? 'primary' : 'secondary'\"\n size=\"sm\"\n (click)=\"overviewCmp?.ToggleAutoRefresh()\"\n title=\"Toggle auto-refresh\">\n <i class=\"fa-solid fa-rotate\"></i>\n Auto: {{overviewCmp?.AutoRefreshEnabled ? 'ON' : 'OFF'}}\n </button>\n }\n @case ('jobs') {\n <mj-filter-popover\n [ActiveCount]=\"JobsActiveFilterCount\"\n [ShowClearAll]=\"JobsActiveFilterCount > 0\"\n (ClearAllRequested)=\"resetJobsFilters()\">\n <mj-filter-panel\n [Fields]=\"JobsFilterFields\"\n [Values]=\"JobsFilterValues\"\n (ValuesChange)=\"onJobsFilterValuesChange($event)\"\n (Reset)=\"resetJobsFilters()\">\n </mj-filter-panel>\n </mj-filter-popover>\n <mj-refresh-button (Clicked)=\"jobsCmp?.Refresh()\"></mj-refresh-button>\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"jobsCmp?.OpenCreateSlideout()\">\n <i class=\"fa-solid fa-plus\"></i> New Job\n </button>\n }\n @case ('activity') {\n <mj-filter-popover\n [ActiveCount]=\"ActivityActiveFilterCount\"\n [ShowClearAll]=\"ActivityActiveFilterCount > 0\"\n (ClearAllRequested)=\"resetActivityFilters()\">\n <mj-filter-panel\n [Fields]=\"ActivityFilterFields\"\n [Values]=\"ActivityFilterValues\"\n (ValuesChange)=\"onActivityFilterValuesChange($event)\"\n (Reset)=\"resetActivityFilters()\">\n </mj-filter-panel>\n </mj-filter-popover>\n <mj-refresh-button (Clicked)=\"activityCmp?.Refresh()\"></mj-refresh-button>\n }\n }\n </div>\n\n <div toolbar class=\"scheduling-toolbar\">\n <mj-tab-nav\n [Tabs]=\"Tabs\"\n [ActiveKey]=\"ActiveTab\"\n (TabChange)=\"OnTabChange($any($event))\">\n </mj-tab-nav>\n @switch (ActiveTab) {\n @case ('jobs') {\n <mj-page-search\n Placeholder=\"Search jobs...\"\n [Value]=\"jobsCmp?.SearchTerm ?? ''\"\n (ValueChange)=\"jobsCmp?.OnSearchChange($event)\">\n </mj-page-search>\n }\n @case ('activity') {\n <mj-page-search\n Placeholder=\"Search executions...\"\n [Value]=\"activityCmp?.SearchTerm ?? ''\"\n (ValueChange)=\"activityCmp?.OnSearchChange($event)\">\n </mj-page-search>\n @for (range of activityCmp?.TimeRanges; track range.value) {\n <mj-filter-chip\n [Label]=\"range.label\"\n [Active]=\"activityCmp?.SelectedTimeRange === range.value\"\n (Clicked)=\"activityCmp?.OnTimeRangeChange(range.value)\">\n </mj-filter-chip>\n }\n }\n }\n </div>\n </mj-page-header>\n\n <mj-page-body>\n @switch (ActiveTab) {\n @case ('dashboard') {\n <app-scheduling-overview\n #overviewCmp\n [initialState]=\"DashboardState\"\n [HideToolbar]=\"true\"\n (stateChange)=\"OnDashboardStateChange($event)\">\n </app-scheduling-overview>\n }\n @case ('jobs') {\n <app-scheduling-jobs\n #jobsCmp\n [initialState]=\"JobsState\"\n [HideToolbar]=\"true\"\n (stateChange)=\"OnJobsStateChange($event)\">\n </app-scheduling-jobs>\n }\n @case ('activity') {\n <app-scheduling-activity\n #activityCmp\n [initialState]=\"ActivityState\"\n [HideToolbar]=\"true\"\n (stateChange)=\"OnActivityStateChange($event)\">\n </app-scheduling-activity>\n }\n }\n </mj-page-body>\n</mj-page-layout>\n", styles: ["/* Per-tab toolbar rendered in the [toolbar] slot of <mj-page-header>. */\n.scheduling-toolbar {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n}\n"] }]
404
+ }], () => [{ type: i0.ChangeDetectorRef }, { type: i1.SchedulingInstrumentationService }], { overviewCmp: [{
405
+ type: ViewChild,
406
+ args: ['overviewCmp']
407
+ }], jobsCmp: [{
408
+ type: ViewChild,
409
+ args: ['jobsCmp']
410
+ }], activityCmp: [{
411
+ type: ViewChild,
412
+ args: ['activityCmp']
413
+ }] }); })();
414
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SchedulingDashboardComponent, { className: "SchedulingDashboardComponent", filePath: "src/Scheduling/scheduling-dashboard.component.ts", lineNumber: 29 }); })();
259
415
  //# sourceMappingURL=scheduling-dashboard.component.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scheduling-dashboard.component.js","sourceRoot":"","sources":["../../src/Scheduling/scheduling-dashboard.component.ts","../../src/Scheduling/scheduling-dashboard.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, AfterViewInit, OnDestroy, ChangeDetectorRef, ChangeDetectionStrategy } from '@angular/core';\nimport { BaseDashboard } from '@memberjunction/ng-shared';\nimport { RegisterClass } from '@memberjunction/global';\nimport { Subject, Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { SharedService } from '@memberjunction/ng-shared';\nimport { ResourceData } from '@memberjunction/core-entities';\nimport { SchedulingInstrumentationService } from './services/scheduling-instrumentation.service';\n\ninterface SchedulingDashboardState {\n activeTab: string;\n dashboardState: Record<string, unknown>;\n jobsState: Record<string, unknown>;\n activityState: Record<string, unknown>;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-scheduling-dashboard',\n templateUrl: './scheduling-dashboard.component.html',\n styleUrls: ['./scheduling-dashboard.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\n@RegisterClass(BaseDashboard, 'SchedulingDashboard')\nexport class SchedulingDashboardComponent extends BaseDashboard implements AfterViewInit, OnDestroy {\n public IsLoading = false;\n public ActiveTab = 'dashboard';\n\n public DashboardState: Record<string, unknown> = {};\n public JobsState: Record<string, unknown> = {};\n public ActivityState: Record<string, unknown> = {};\n\n private visitedTabs = new Set<string>();\n private stateChangeSubject = new Subject<SchedulingDashboardState>();\n\n public ActiveJobCount = 0;\n public AlertCount = 0;\n\n private kpiSub: Subscription | undefined;\n private alertSub: Subscription | undefined;\n\n public NavigationItems = [\n { id: 'dashboard', text: 'Dashboard', icon: 'fa-solid fa-gauge-high' },\n { id: 'jobs', text: 'Jobs', icon: 'fa-solid fa-calendar-check' },\n { id: 'activity', text: 'Activity', icon: 'fa-solid fa-clock-rotate-left' }\n ];\n\n constructor(\n private cdr: ChangeDetectorRef,\n private schedulingService: SchedulingInstrumentationService\n ) {\n super();\n this.setupStateManagement();\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'Scheduling';\n }\n\n ngAfterViewInit(): void {\n this.visitedTabs.add(this.ActiveTab);\n this.loadSidebarCounts();\n this.cdr.detectChanges();\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this.stateChangeSubject.complete();\n if (this.kpiSub) this.kpiSub.unsubscribe();\n if (this.alertSub) this.alertSub.unsubscribe();\n }\n\n private loadSidebarCounts(): void {\n this.kpiSub = this.schedulingService.kpis$.subscribe(kpis => {\n this.ActiveJobCount = kpis.totalActiveJobs;\n this.cdr.markForCheck();\n });\n\n this.alertSub = this.schedulingService.alerts$.subscribe(alerts => {\n this.AlertCount = alerts.length;\n this.cdr.markForCheck();\n });\n }\n\n public OnTabChange(tabId: string): void {\n this.ActiveTab = tabId;\n this.visitedTabs.add(tabId);\n\n setTimeout(() => {\n SharedService.Instance.InvokeManualResize();\n }, 100);\n\n this.emitStateChange();\n this.cdr.markForCheck();\n }\n\n public HasVisited(tabId: string): boolean {\n return this.visitedTabs.has(tabId);\n }\n\n private setupStateManagement(): void {\n this.stateChangeSubject.pipe(\n debounceTime(50)\n ).subscribe(state => {\n this.UserStateChanged.emit(state);\n });\n }\n\n private emitStateChange(): void {\n this.stateChangeSubject.next({\n activeTab: this.ActiveTab,\n dashboardState: this.DashboardState,\n jobsState: this.JobsState,\n activityState: this.ActivityState\n });\n }\n\n public OnDashboardStateChange(state: Record<string, unknown>): void {\n this.DashboardState = state;\n this.emitStateChange();\n }\n\n public OnJobsStateChange(state: Record<string, unknown>): void {\n this.JobsState = state;\n this.emitStateChange();\n }\n\n public OnActivityStateChange(state: Record<string, unknown>): void {\n this.ActivityState = state;\n this.emitStateChange();\n }\n\n public GetCurrentTabLabel(): string {\n const item = this.NavigationItems.find(n => n.id === this.ActiveTab);\n return item ? item.text : 'Scheduling';\n }\n\n initDashboard(): void {\n this.schedulingService.Provider = this.ProviderToUse;\n this.IsLoading = false;\n }\n\n loadData(): void {\n if (this.Config?.userState) {\n const state = this.Config.userState as Partial<SchedulingDashboardState>;\n if (state.activeTab) {\n this.ActiveTab = state.activeTab;\n this.visitedTabs.add(state.activeTab);\n }\n if (state.dashboardState) this.DashboardState = state.dashboardState;\n if (state.jobsState) this.JobsState = state.jobsState;\n if (state.activityState) this.ActivityState = state.activityState;\n this.cdr.markForCheck();\n }\n this.NotifyLoadComplete();\n }\n}\n","<div class=\"scheduling-dashboard-container\">\n <div class=\"dashboard-header\">\n <div class=\"header-title\">\n <i class=\"fa-solid fa-calendar-check\"></i>\n <span>Job Scheduling</span>\n </div>\n <div class=\"header-actions\">\n @if (AlertCount > 0) {\n <div class=\"status-badge\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n <span>{{AlertCount}} Alert{{AlertCount !== 1 ? 's' : ''}}</span>\n </div>\n }\n @if (AlertCount === 0) {\n <div class=\"status-badge healthy\">\n <i class=\"fa-solid fa-circle-check\"></i>\n <span>Healthy</span>\n </div>\n }\n <span class=\"tab-label\">{{GetCurrentTabLabel()}}</span>\n </div>\n </div>\n\n <div class=\"dashboard-content\">\n <div class=\"sidebar\">\n <div class=\"sidebar-section\">\n <div class=\"sidebar-section-title\">Overview</div>\n </div>\n <div class=\"nav-item\" [class.selected]=\"ActiveTab === 'dashboard'\" (click)=\"OnTabChange('dashboard')\">\n <i class=\"fa-solid fa-gauge-high\"></i>\n <span>Dashboard</span>\n </div>\n\n <div class=\"sidebar-section\">\n <div class=\"sidebar-section-title\">Management</div>\n </div>\n <div class=\"nav-item\" [class.selected]=\"ActiveTab === 'jobs'\" (click)=\"OnTabChange('jobs')\">\n <i class=\"fa-solid fa-calendar-check\"></i>\n <span>Jobs</span>\n @if (ActiveJobCount > 0) {\n <span class=\"badge\">{{ActiveJobCount}}</span>\n }\n </div>\n <div class=\"nav-item\" [class.selected]=\"ActiveTab === 'activity'\" (click)=\"OnTabChange('activity')\">\n <i class=\"fa-solid fa-clock-rotate-left\"></i>\n <span>Activity</span>\n </div>\n </div>\n\n <div class=\"main-content\">\n <div class=\"tab-container\">\n @switch (ActiveTab) {\n @case ('dashboard') {\n <div class=\"tab-content\">\n <app-scheduling-overview\n [initialState]=\"DashboardState\"\n (stateChange)=\"OnDashboardStateChange($event)\">\n </app-scheduling-overview>\n </div>\n }\n @case ('jobs') {\n <div class=\"tab-content\">\n <app-scheduling-jobs\n [initialState]=\"JobsState\"\n (stateChange)=\"OnJobsStateChange($event)\">\n </app-scheduling-jobs>\n </div>\n }\n @case ('activity') {\n <div class=\"tab-content\">\n <app-scheduling-activity\n [initialState]=\"ActivityState\"\n (stateChange)=\"OnActivityStateChange($event)\">\n </app-scheduling-activity>\n </div>\n }\n }\n </div>\n </div>\n </div>\n</div>\n"]}
1
+ {"version":3,"file":"scheduling-dashboard.component.js","sourceRoot":"","sources":["../../src/Scheduling/scheduling-dashboard.component.ts","../../src/Scheduling/scheduling-dashboard.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, AfterViewInit, OnDestroy, ChangeDetectorRef, ChangeDetectionStrategy, ViewChild } from '@angular/core';\nimport { BaseDashboard } from '@memberjunction/ng-shared';\nimport { RegisterClass } from '@memberjunction/global';\nimport { Subject, Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { SharedService } from '@memberjunction/ng-shared';\nimport { ResourceData } from '@memberjunction/core-entities';\nimport { TabConfig, FilterFieldConfig } from '@memberjunction/ng-ui-components';\nimport { SchedulingInstrumentationService } from './services/scheduling-instrumentation.service';\nimport { SchedulingOverviewComponent } from './components/scheduling-overview.component';\nimport { SchedulingJobsComponent } from './components/scheduling-jobs.component';\nimport { SchedulingActivityComponent } from './components/scheduling-activity.component';\n\ninterface SchedulingDashboardState {\n activeTab: string;\n dashboardState: Record<string, unknown>;\n jobsState: Record<string, unknown>;\n activityState: Record<string, unknown>;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-scheduling-dashboard',\n templateUrl: './scheduling-dashboard.component.html',\n styleUrls: ['./scheduling-dashboard.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\n@RegisterClass(BaseDashboard, 'SchedulingDashboard')\nexport class SchedulingDashboardComponent extends BaseDashboard implements AfterViewInit, OnDestroy {\n public IsLoading = false;\n public ActiveTab = 'dashboard';\n\n public DashboardState: Record<string, unknown> = {};\n public JobsState: Record<string, unknown> = {};\n public ActivityState: Record<string, unknown> = {};\n\n private visitedTabs = new Set<string>();\n private stateChangeSubject = new Subject<SchedulingDashboardState>();\n\n public ActiveJobCount = 0;\n public AlertCount = 0;\n\n /** ViewChild references to the active inner tab component — drive the toolbar UI rendered in <mj-page-header>. */\n @ViewChild('overviewCmp') overviewCmp?: SchedulingOverviewComponent;\n @ViewChild('jobsCmp') jobsCmp?: SchedulingJobsComponent;\n @ViewChild('activityCmp') activityCmp?: SchedulingActivityComponent;\n\n private kpiSub: Subscription | undefined;\n private alertSub: Subscription | undefined;\n\n public get Tabs(): TabConfig[] {\n return [\n { key: 'dashboard', label: 'Dashboard', icon: 'fa-solid fa-gauge-high' },\n {\n key: 'jobs',\n label: 'Jobs',\n icon: 'fa-solid fa-calendar-check',\n badge: this.ActiveJobCount > 0 ? this.ActiveJobCount : null\n },\n { key: 'activity', label: 'Activity', icon: 'fa-solid fa-clock-rotate-left' }\n ];\n }\n\n constructor(\n private cdr: ChangeDetectorRef,\n private schedulingService: SchedulingInstrumentationService\n ) {\n super();\n this.setupStateManagement();\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'Scheduling';\n }\n\n ngAfterViewInit(): void {\n this.visitedTabs.add(this.ActiveTab);\n this.loadSidebarCounts();\n this.cdr.detectChanges();\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this.stateChangeSubject.complete();\n if (this.kpiSub) this.kpiSub.unsubscribe();\n if (this.alertSub) this.alertSub.unsubscribe();\n }\n\n private loadSidebarCounts(): void {\n this.kpiSub = this.schedulingService.kpis$.subscribe(kpis => {\n this.ActiveJobCount = kpis.totalActiveJobs;\n this.cdr.markForCheck();\n });\n\n this.alertSub = this.schedulingService.alerts$.subscribe(alerts => {\n this.AlertCount = alerts.length;\n this.cdr.markForCheck();\n });\n }\n\n public OnTabChange(tabId: string): void {\n this.ActiveTab = tabId;\n this.visitedTabs.add(tabId);\n\n setTimeout(() => {\n SharedService.Instance.InvokeManualResize();\n }, 100);\n\n this.emitStateChange();\n this.cdr.markForCheck();\n }\n\n public HasVisited(tabId: string): boolean {\n return this.visitedTabs.has(tabId);\n }\n\n // ───── Filter-popover plumbing for the [actions]/[toolbar] slots ─────\n\n public get JobsFilterFields(): FilterFieldConfig[] {\n const statusOptions = (this.jobsCmp?.StatusOptions ?? ['']).map(s => ({\n text: s === '' ? 'All Statuses' : s,\n value: s\n }));\n const typeOptions = (this.jobsCmp?.TypeOptions ?? ['']).map(t => ({\n text: t === '' ? 'All Types' : t,\n value: t\n }));\n return [\n { key: 'statusFilter', type: 'dropdown', label: 'Status', icon: 'fa-solid fa-circle-info', placeholder: 'All Statuses', options: statusOptions },\n { key: 'typeFilter', type: 'dropdown', label: 'Type', icon: 'fa-solid fa-shapes', placeholder: 'All Types', options: typeOptions }\n ];\n }\n public get JobsFilterValues(): Record<string, unknown> {\n return {\n statusFilter: this.jobsCmp?.StatusFilter ?? '',\n typeFilter: this.jobsCmp?.TypeFilter ?? ''\n };\n }\n public get JobsActiveFilterCount(): number {\n let n = 0;\n if (this.jobsCmp?.StatusFilter) n++;\n if (this.jobsCmp?.TypeFilter) n++;\n return n;\n }\n public onJobsFilterValuesChange(v: Record<string, unknown>): void {\n if (!this.jobsCmp) return;\n const next = (v ?? {}) as { statusFilter?: string; typeFilter?: string };\n if ((next.statusFilter ?? '') !== this.jobsCmp.StatusFilter) this.jobsCmp.OnStatusFilterChange(next.statusFilter ?? '');\n if ((next.typeFilter ?? '') !== this.jobsCmp.TypeFilter) this.jobsCmp.OnTypeFilterChange(next.typeFilter ?? '');\n }\n public resetJobsFilters(): void {\n if (this.jobsCmp?.StatusFilter) this.jobsCmp.OnStatusFilterChange('');\n if (this.jobsCmp?.TypeFilter) this.jobsCmp.OnTypeFilterChange('');\n }\n\n public get ActivityFilterFields(): FilterFieldConfig[] {\n const statusOptions = (this.activityCmp?.StatusOptions ?? ['']).map(s => ({\n text: s === '' ? 'All Statuses' : s,\n value: s\n }));\n const jobNames = this.activityCmp?.UniqueJobNames ?? [];\n const jobOptions = [{ text: 'All Jobs', value: '' }, ...jobNames.map(n => ({ text: n, value: n }))];\n return [\n { key: 'statusFilter', type: 'dropdown', label: 'Status', icon: 'fa-solid fa-circle-info', placeholder: 'All Statuses', options: statusOptions },\n { key: 'jobNameFilter', type: 'dropdown', label: 'Job', icon: 'fa-solid fa-tag', placeholder: 'All Jobs', filterable: true, options: jobOptions }\n ];\n }\n public get ActivityFilterValues(): Record<string, unknown> {\n return {\n statusFilter: this.activityCmp?.StatusFilter ?? '',\n jobNameFilter: this.activityCmp?.JobNameFilter ?? ''\n };\n }\n public get ActivityActiveFilterCount(): number {\n let n = 0;\n if (this.activityCmp?.StatusFilter) n++;\n if (this.activityCmp?.JobNameFilter) n++;\n return n;\n }\n public onActivityFilterValuesChange(v: Record<string, unknown>): void {\n if (!this.activityCmp) return;\n const next = (v ?? {}) as { statusFilter?: string; jobNameFilter?: string };\n if ((next.statusFilter ?? '') !== this.activityCmp.StatusFilter) this.activityCmp.OnStatusFilterChange(next.statusFilter ?? '');\n if ((next.jobNameFilter ?? '') !== this.activityCmp.JobNameFilter) this.activityCmp.OnJobNameFilterChange(next.jobNameFilter ?? '');\n }\n public resetActivityFilters(): void {\n if (this.activityCmp?.StatusFilter) this.activityCmp.OnStatusFilterChange('');\n if (this.activityCmp?.JobNameFilter) this.activityCmp.OnJobNameFilterChange('');\n }\n\n private setupStateManagement(): void {\n this.stateChangeSubject.pipe(\n debounceTime(50)\n ).subscribe(state => {\n this.UserStateChanged.emit(state);\n });\n }\n\n private emitStateChange(): void {\n this.stateChangeSubject.next({\n activeTab: this.ActiveTab,\n dashboardState: this.DashboardState,\n jobsState: this.JobsState,\n activityState: this.ActivityState\n });\n }\n\n public OnDashboardStateChange(state: Record<string, unknown>): void {\n this.DashboardState = state;\n this.emitStateChange();\n }\n\n public OnJobsStateChange(state: Record<string, unknown>): void {\n this.JobsState = state;\n this.emitStateChange();\n }\n\n public OnActivityStateChange(state: Record<string, unknown>): void {\n this.ActivityState = state;\n this.emitStateChange();\n }\n\n initDashboard(): void {\n this.schedulingService.Provider = this.ProviderToUse;\n this.IsLoading = false;\n }\n\n loadData(): void {\n if (this.Config?.userState) {\n const state = this.Config.userState as Partial<SchedulingDashboardState>;\n if (state.activeTab) {\n this.ActiveTab = state.activeTab;\n this.visitedTabs.add(state.activeTab);\n }\n if (state.dashboardState) this.DashboardState = state.dashboardState;\n if (state.jobsState) this.JobsState = state.jobsState;\n if (state.activityState) this.ActivityState = state.activityState;\n this.cdr.markForCheck();\n }\n this.NotifyLoadComplete();\n }\n}\n","<mj-page-layout>\n <mj-page-header\n Title=\"Scheduling\"\n Icon=\"fa-solid fa-calendar-check\"\n Subtitle=\"Background jobs, executions, and system health\">\n <div meta>\n @if (AlertCount > 0) {\n <mj-stat-badge\n Icon=\"fa-solid fa-triangle-exclamation\"\n [Count]=\"AlertCount\"\n [Label]=\"AlertCount === 1 ? 'Alert' : 'Alerts'\"\n Variant=\"error\">\n </mj-stat-badge>\n } @else {\n <mj-stat-badge\n Icon=\"fa-solid fa-circle-check\"\n Label=\"Healthy\"\n Variant=\"success\">\n </mj-stat-badge>\n }\n @if (ActiveTab === 'jobs') {\n <mj-stat-badge\n [Count]=\"jobsCmp?.FilteredJobs?.length ?? 0\"\n [Total]=\"jobsCmp?.Jobs?.length ?? 0\"\n Label=\"jobs\">\n </mj-stat-badge>\n }\n </div>\n <div actions>\n @switch (ActiveTab) {\n @case ('dashboard') {\n <mj-refresh-button (Clicked)=\"overviewCmp?.Refresh()\"></mj-refresh-button>\n <button mjButton\n [variant]=\"overviewCmp?.AutoRefreshEnabled ? 'primary' : 'secondary'\"\n size=\"sm\"\n (click)=\"overviewCmp?.ToggleAutoRefresh()\"\n title=\"Toggle auto-refresh\">\n <i class=\"fa-solid fa-rotate\"></i>\n Auto: {{overviewCmp?.AutoRefreshEnabled ? 'ON' : 'OFF'}}\n </button>\n }\n @case ('jobs') {\n <mj-filter-popover\n [ActiveCount]=\"JobsActiveFilterCount\"\n [ShowClearAll]=\"JobsActiveFilterCount > 0\"\n (ClearAllRequested)=\"resetJobsFilters()\">\n <mj-filter-panel\n [Fields]=\"JobsFilterFields\"\n [Values]=\"JobsFilterValues\"\n (ValuesChange)=\"onJobsFilterValuesChange($event)\"\n (Reset)=\"resetJobsFilters()\">\n </mj-filter-panel>\n </mj-filter-popover>\n <mj-refresh-button (Clicked)=\"jobsCmp?.Refresh()\"></mj-refresh-button>\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"jobsCmp?.OpenCreateSlideout()\">\n <i class=\"fa-solid fa-plus\"></i> New Job\n </button>\n }\n @case ('activity') {\n <mj-filter-popover\n [ActiveCount]=\"ActivityActiveFilterCount\"\n [ShowClearAll]=\"ActivityActiveFilterCount > 0\"\n (ClearAllRequested)=\"resetActivityFilters()\">\n <mj-filter-panel\n [Fields]=\"ActivityFilterFields\"\n [Values]=\"ActivityFilterValues\"\n (ValuesChange)=\"onActivityFilterValuesChange($event)\"\n (Reset)=\"resetActivityFilters()\">\n </mj-filter-panel>\n </mj-filter-popover>\n <mj-refresh-button (Clicked)=\"activityCmp?.Refresh()\"></mj-refresh-button>\n }\n }\n </div>\n\n <div toolbar class=\"scheduling-toolbar\">\n <mj-tab-nav\n [Tabs]=\"Tabs\"\n [ActiveKey]=\"ActiveTab\"\n (TabChange)=\"OnTabChange($any($event))\">\n </mj-tab-nav>\n @switch (ActiveTab) {\n @case ('jobs') {\n <mj-page-search\n Placeholder=\"Search jobs...\"\n [Value]=\"jobsCmp?.SearchTerm ?? ''\"\n (ValueChange)=\"jobsCmp?.OnSearchChange($event)\">\n </mj-page-search>\n }\n @case ('activity') {\n <mj-page-search\n Placeholder=\"Search executions...\"\n [Value]=\"activityCmp?.SearchTerm ?? ''\"\n (ValueChange)=\"activityCmp?.OnSearchChange($event)\">\n </mj-page-search>\n @for (range of activityCmp?.TimeRanges; track range.value) {\n <mj-filter-chip\n [Label]=\"range.label\"\n [Active]=\"activityCmp?.SelectedTimeRange === range.value\"\n (Clicked)=\"activityCmp?.OnTimeRangeChange(range.value)\">\n </mj-filter-chip>\n }\n }\n }\n </div>\n </mj-page-header>\n\n <mj-page-body>\n @switch (ActiveTab) {\n @case ('dashboard') {\n <app-scheduling-overview\n #overviewCmp\n [initialState]=\"DashboardState\"\n [HideToolbar]=\"true\"\n (stateChange)=\"OnDashboardStateChange($event)\">\n </app-scheduling-overview>\n }\n @case ('jobs') {\n <app-scheduling-jobs\n #jobsCmp\n [initialState]=\"JobsState\"\n [HideToolbar]=\"true\"\n (stateChange)=\"OnJobsStateChange($event)\">\n </app-scheduling-jobs>\n }\n @case ('activity') {\n <app-scheduling-activity\n #activityCmp\n [initialState]=\"ActivityState\"\n [HideToolbar]=\"true\"\n (stateChange)=\"OnActivityStateChange($event)\">\n </app-scheduling-activity>\n }\n }\n </mj-page-body>\n</mj-page-layout>\n"]}