@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
@@ -9,73 +9,111 @@ import { Component, Input, Output, EventEmitter } from '@angular/core';
9
9
  import { AIEngineBase } from '@memberjunction/ai-engine-base';
10
10
  import * as i0 from "@angular/core";
11
11
  import * as i1 from "@memberjunction/ng-ui-components";
12
- function AnalyticsFilterBarComponent_Conditional_5_Template(rf, ctx) { if (rf & 1) {
13
- const _r1 = i0.ɵɵgetCurrentView();
14
- i0.ɵɵelementStart(0, "mj-dropdown", 12);
15
- i0.ɵɵlistener("ValueChange", function AnalyticsFilterBarComponent_Conditional_5_Template_mj_dropdown_ValueChange_0_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnModelChange($event)); });
12
+ function AnalyticsFilterBarComponent_Conditional_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
13
+ const _r3 = i0.ɵɵgetCurrentView();
14
+ i0.ɵɵelementStart(0, "label", 8)(1, "span", 9);
15
+ i0.ɵɵtext(2, "Model");
16
16
  i0.ɵɵelementEnd();
17
+ i0.ɵɵelementStart(3, "mj-dropdown", 10);
18
+ i0.ɵɵlistener("ValueChange", function AnalyticsFilterBarComponent_Conditional_1_Conditional_2_Template_mj_dropdown_ValueChange_3_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnModelChange($event)); });
19
+ i0.ɵɵelementEnd()();
17
20
  } if (rf & 2) {
18
- const ctx_r1 = i0.ɵɵnextContext();
21
+ const ctx_r1 = i0.ɵɵnextContext(2);
22
+ i0.ɵɵadvance(3);
19
23
  i0.ɵɵproperty("Data", ctx_r1.ModelOptions)("ValuePrimitive", true)("DefaultItem", ctx_r1.modelDefaultItem)("Filterable", ctx_r1.ModelOptions.length > 10);
20
24
  } }
21
- function AnalyticsFilterBarComponent_Conditional_6_Template(rf, ctx) { if (rf & 1) {
22
- const _r3 = i0.ɵɵgetCurrentView();
23
- i0.ɵɵelementStart(0, "mj-dropdown", 13);
24
- i0.ɵɵlistener("ValueChange", function AnalyticsFilterBarComponent_Conditional_6_Template_mj_dropdown_ValueChange_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnAgentChange($event)); });
25
+ function AnalyticsFilterBarComponent_Conditional_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
26
+ const _r4 = i0.ɵɵgetCurrentView();
27
+ i0.ɵɵelementStart(0, "label", 8)(1, "span", 9);
28
+ i0.ɵɵtext(2, "Agent");
25
29
  i0.ɵɵelementEnd();
30
+ i0.ɵɵelementStart(3, "mj-dropdown", 11);
31
+ i0.ɵɵlistener("ValueChange", function AnalyticsFilterBarComponent_Conditional_1_Conditional_3_Template_mj_dropdown_ValueChange_3_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnAgentChange($event)); });
32
+ i0.ɵɵelementEnd()();
26
33
  } if (rf & 2) {
27
- const ctx_r1 = i0.ɵɵnextContext();
34
+ const ctx_r1 = i0.ɵɵnextContext(2);
35
+ i0.ɵɵadvance(3);
28
36
  i0.ɵɵproperty("Data", ctx_r1.AgentOptions)("ValuePrimitive", true)("DefaultItem", ctx_r1.agentDefaultItem)("Filterable", ctx_r1.AgentOptions.length > 10);
29
37
  } }
30
- function AnalyticsFilterBarComponent_Conditional_7_Template(rf, ctx) { if (rf & 1) {
31
- const _r4 = i0.ɵɵgetCurrentView();
32
- i0.ɵɵelementStart(0, "mj-dropdown", 14);
33
- i0.ɵɵlistener("ValueChange", function AnalyticsFilterBarComponent_Conditional_7_Template_mj_dropdown_ValueChange_0_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnPromptChange($event)); });
38
+ function AnalyticsFilterBarComponent_Conditional_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
39
+ const _r5 = i0.ɵɵgetCurrentView();
40
+ i0.ɵɵelementStart(0, "label", 8)(1, "span", 9);
41
+ i0.ɵɵtext(2, "Prompt");
34
42
  i0.ɵɵelementEnd();
43
+ i0.ɵɵelementStart(3, "mj-dropdown", 12);
44
+ i0.ɵɵlistener("ValueChange", function AnalyticsFilterBarComponent_Conditional_1_Conditional_4_Template_mj_dropdown_ValueChange_3_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnPromptChange($event)); });
45
+ i0.ɵɵelementEnd()();
35
46
  } if (rf & 2) {
36
- const ctx_r1 = i0.ɵɵnextContext();
47
+ const ctx_r1 = i0.ɵɵnextContext(2);
48
+ i0.ɵɵadvance(3);
37
49
  i0.ɵɵproperty("Data", ctx_r1.PromptOptions)("ValuePrimitive", true)("DefaultItem", ctx_r1.promptDefaultItem)("Filterable", ctx_r1.PromptOptions.length > 10);
38
50
  } }
39
- function AnalyticsFilterBarComponent_Conditional_8_Template(rf, ctx) { if (rf & 1) {
40
- const _r5 = i0.ɵɵgetCurrentView();
41
- i0.ɵɵelementStart(0, "mj-dropdown", 15);
42
- i0.ɵɵlistener("ValueChange", function AnalyticsFilterBarComponent_Conditional_8_Template_mj_dropdown_ValueChange_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnStatusChange($event)); });
51
+ function AnalyticsFilterBarComponent_Conditional_1_Conditional_5_Template(rf, ctx) { if (rf & 1) {
52
+ const _r6 = i0.ɵɵgetCurrentView();
53
+ i0.ɵɵelementStart(0, "label", 8)(1, "span", 9);
54
+ i0.ɵɵtext(2, "Status");
43
55
  i0.ɵɵelementEnd();
56
+ i0.ɵɵelementStart(3, "mj-dropdown", 13);
57
+ i0.ɵɵlistener("ValueChange", function AnalyticsFilterBarComponent_Conditional_1_Conditional_5_Template_mj_dropdown_ValueChange_3_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnStatusChange($event)); });
58
+ i0.ɵɵelementEnd()();
44
59
  } if (rf & 2) {
45
- const ctx_r1 = i0.ɵɵnextContext();
60
+ const ctx_r1 = i0.ɵɵnextContext(2);
61
+ i0.ɵɵadvance(3);
46
62
  i0.ɵɵproperty("Data", ctx_r1.StatusOptions)("ValuePrimitive", true)("DefaultItem", ctx_r1.statusDefaultItem);
47
63
  } }
48
- function AnalyticsFilterBarComponent_Conditional_9_Template(rf, ctx) { if (rf & 1) {
49
- const _r6 = i0.ɵɵgetCurrentView();
50
- i0.ɵɵelementStart(0, "button", 16);
51
- i0.ɵɵlistener("click", function AnalyticsFilterBarComponent_Conditional_9_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ToggleCompare()); });
52
- i0.ɵɵelement(1, "i", 17);
64
+ function AnalyticsFilterBarComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
65
+ const _r1 = i0.ɵɵgetCurrentView();
66
+ i0.ɵɵelementStart(0, "mj-filter-popover", 6);
67
+ i0.ɵɵlistener("ClearAllRequested", function AnalyticsFilterBarComponent_Conditional_1_Template_mj_filter_popover_ClearAllRequested_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ClearAllFilters()); });
68
+ i0.ɵɵelementStart(1, "div", 7);
69
+ i0.ɵɵconditionalCreate(2, AnalyticsFilterBarComponent_Conditional_1_Conditional_2_Template, 4, 4, "label", 8);
70
+ i0.ɵɵconditionalCreate(3, AnalyticsFilterBarComponent_Conditional_1_Conditional_3_Template, 4, 4, "label", 8);
71
+ i0.ɵɵconditionalCreate(4, AnalyticsFilterBarComponent_Conditional_1_Conditional_4_Template, 4, 4, "label", 8);
72
+ i0.ɵɵconditionalCreate(5, AnalyticsFilterBarComponent_Conditional_1_Conditional_5_Template, 4, 3, "label", 8);
73
+ i0.ɵɵelementEnd()();
74
+ } if (rf & 2) {
75
+ const ctx_r1 = i0.ɵɵnextContext();
76
+ i0.ɵɵproperty("ActiveCount", ctx_r1.ActiveFilterCount)("ShowClearAll", ctx_r1.ActiveFilterCount > 0);
77
+ i0.ɵɵadvance(2);
78
+ i0.ɵɵconditional(ctx_r1.ShowModelFilter ? 2 : -1);
79
+ i0.ɵɵadvance();
80
+ i0.ɵɵconditional(ctx_r1.ShowAgentFilter ? 3 : -1);
81
+ i0.ɵɵadvance();
82
+ i0.ɵɵconditional(ctx_r1.ShowPromptFilter ? 4 : -1);
83
+ i0.ɵɵadvance();
84
+ i0.ɵɵconditional(ctx_r1.ShowStatusFilter ? 5 : -1);
85
+ } }
86
+ function AnalyticsFilterBarComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
87
+ const _r7 = i0.ɵɵgetCurrentView();
88
+ i0.ɵɵelementStart(0, "button", 14);
89
+ i0.ɵɵlistener("click", function AnalyticsFilterBarComponent_Conditional_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ToggleCompare()); });
90
+ i0.ɵɵelement(1, "i", 15);
53
91
  i0.ɵɵtext(2, " Compare ");
54
92
  i0.ɵɵelementEnd();
55
93
  } if (rf & 2) {
56
94
  const ctx_r1 = i0.ɵɵnextContext();
57
95
  i0.ɵɵclassProp("active", ctx_r1.compareActive);
58
96
  } }
59
- function AnalyticsFilterBarComponent_Conditional_10_Template(rf, ctx) { if (rf & 1) {
60
- const _r7 = i0.ɵɵgetCurrentView();
61
- i0.ɵɵelementStart(0, "button", 18);
62
- i0.ɵɵlistener("click", function AnalyticsFilterBarComponent_Conditional_10_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ExportClicked.emit()); });
63
- i0.ɵɵelement(1, "i", 19);
97
+ function AnalyticsFilterBarComponent_Conditional_3_Template(rf, ctx) { if (rf & 1) {
98
+ const _r8 = i0.ɵɵgetCurrentView();
99
+ i0.ɵɵelementStart(0, "button", 16);
100
+ i0.ɵɵlistener("click", function AnalyticsFilterBarComponent_Conditional_3_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ExportClicked.emit()); });
101
+ i0.ɵɵelement(1, "i", 17);
64
102
  i0.ɵɵtext(2, " Export ");
65
103
  i0.ɵɵelementEnd();
66
104
  } }
67
- function AnalyticsFilterBarComponent_For_13_Template(rf, ctx) { if (rf & 1) {
68
- const _r8 = i0.ɵɵgetCurrentView();
69
- i0.ɵɵelementStart(0, "button", 20);
70
- i0.ɵɵlistener("click", function AnalyticsFilterBarComponent_For_13_Template_button_click_0_listener() { const option_r9 = i0.ɵɵrestoreView(_r8).$implicit; const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnTimeRangeSelect(option_r9)); });
105
+ function AnalyticsFilterBarComponent_For_6_Template(rf, ctx) { if (rf & 1) {
106
+ const _r9 = i0.ɵɵgetCurrentView();
107
+ i0.ɵɵelementStart(0, "button", 18);
108
+ i0.ɵɵlistener("click", function AnalyticsFilterBarComponent_For_6_Template_button_click_0_listener() { const option_r10 = i0.ɵɵrestoreView(_r9).$implicit; const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnTimeRangeSelect(option_r10)); });
71
109
  i0.ɵɵtext(1);
72
110
  i0.ɵɵelementEnd();
73
111
  } if (rf & 2) {
74
- const option_r9 = ctx.$implicit;
112
+ const option_r10 = ctx.$implicit;
75
113
  const ctx_r1 = i0.ɵɵnextContext();
76
- i0.ɵɵclassProp("active", ctx_r1.TimeRange === option_r9);
114
+ i0.ɵɵclassProp("active", ctx_r1.TimeRange === option_r10);
77
115
  i0.ɵɵadvance();
78
- i0.ɵɵtextInterpolate1(" ", option_r9, " ");
116
+ i0.ɵɵtextInterpolate1(" ", option_r10, " ");
79
117
  } }
80
118
  export class AnalyticsFilterBarComponent {
81
119
  TimeRange = '24h';
@@ -107,6 +145,19 @@ export class AnalyticsFilterBarComponent {
107
145
  promptDefaultItem = { text: 'All Prompts', value: '' };
108
146
  statusDefaultItem = { text: 'All Statuses', value: '' };
109
147
  compareActive = false;
148
+ /** True when at least one of the filter dropdowns is enabled — drives whether to render the popover trigger. */
149
+ get HasFilterDropdowns() {
150
+ return this.ShowModelFilter || this.ShowAgentFilter || this.ShowPromptFilter || this.ShowStatusFilter;
151
+ }
152
+ /** Number of active filter selections — drives the popover badge. */
153
+ get ActiveFilterCount() {
154
+ const f = this.Filters ?? { Models: [], Agents: [], Prompts: [], Statuses: [] };
155
+ return (f.Models?.length ?? 0) + (f.Agents?.length ?? 0) + (f.Prompts?.length ?? 0) + (f.Statuses?.length ?? 0);
156
+ }
157
+ ClearAllFilters() {
158
+ this.Filters = { Models: [], Agents: [], Prompts: [], Statuses: [] };
159
+ this.FiltersChange.emit(this.Filters);
160
+ }
110
161
  ngOnInit() {
111
162
  this.BuildOptions();
112
163
  }
@@ -152,116 +203,114 @@ export class AnalyticsFilterBarComponent {
152
203
  .sort((a, b) => a.text.localeCompare(b.text));
153
204
  }
154
205
  static ɵfac = function AnalyticsFilterBarComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || AnalyticsFilterBarComponent)(); };
155
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AnalyticsFilterBarComponent, selectors: [["app-analytics-filter-bar"]], inputs: { TimeRange: "TimeRange", TimeRangeOptions: "TimeRangeOptions", ShowModelFilter: "ShowModelFilter", ShowAgentFilter: "ShowAgentFilter", ShowPromptFilter: "ShowPromptFilter", ShowStatusFilter: "ShowStatusFilter", ShowCompareToggle: "ShowCompareToggle", ShowExportButton: "ShowExportButton", Filters: "Filters" }, outputs: { TimeRangeChange: "TimeRangeChange", FiltersChange: "FiltersChange", CompareToggled: "CompareToggled", ExportClicked: "ExportClicked" }, standalone: false, decls: 14, vars: 6, consts: [[1, "filter-bar"], [1, "filter-controls"], [1, "filter-label"], [1, "fa-solid", "fa-filter"], ["TextField", "text", "ValueField", "value", "Placeholder", "All Models", 3, "Data", "ValuePrimitive", "DefaultItem", "Filterable"], ["TextField", "text", "ValueField", "value", "Placeholder", "All Agents", 3, "Data", "ValuePrimitive", "DefaultItem", "Filterable"], ["TextField", "text", "ValueField", "value", "Placeholder", "All Prompts", 3, "Data", "ValuePrimitive", "DefaultItem", "Filterable"], ["TextField", "text", "ValueField", "value", "Placeholder", "All Statuses", 3, "Data", "ValuePrimitive", "DefaultItem"], [1, "compare-btn", 3, "active"], [1, "export-btn"], [1, "time-chips"], [1, "time-chip", 3, "active"], ["TextField", "text", "ValueField", "value", "Placeholder", "All Models", 3, "ValueChange", "Data", "ValuePrimitive", "DefaultItem", "Filterable"], ["TextField", "text", "ValueField", "value", "Placeholder", "All Agents", 3, "ValueChange", "Data", "ValuePrimitive", "DefaultItem", "Filterable"], ["TextField", "text", "ValueField", "value", "Placeholder", "All Prompts", 3, "ValueChange", "Data", "ValuePrimitive", "DefaultItem", "Filterable"], ["TextField", "text", "ValueField", "value", "Placeholder", "All Statuses", 3, "ValueChange", "Data", "ValuePrimitive", "DefaultItem"], [1, "compare-btn", 3, "click"], [1, "fa-solid", "fa-code-compare"], [1, "export-btn", 3, "click"], [1, "fa-solid", "fa-download"], [1, "time-chip", 3, "click"]], template: function AnalyticsFilterBarComponent_Template(rf, ctx) { if (rf & 1) {
156
- i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "span", 2);
157
- i0.ɵɵelement(3, "i", 3);
158
- i0.ɵɵtext(4, " Filters: ");
159
- i0.ɵɵelementEnd();
160
- i0.ɵɵconditionalCreate(5, AnalyticsFilterBarComponent_Conditional_5_Template, 1, 4, "mj-dropdown", 4);
161
- i0.ɵɵconditionalCreate(6, AnalyticsFilterBarComponent_Conditional_6_Template, 1, 4, "mj-dropdown", 5);
162
- i0.ɵɵconditionalCreate(7, AnalyticsFilterBarComponent_Conditional_7_Template, 1, 4, "mj-dropdown", 6);
163
- i0.ɵɵconditionalCreate(8, AnalyticsFilterBarComponent_Conditional_8_Template, 1, 3, "mj-dropdown", 7);
164
- i0.ɵɵconditionalCreate(9, AnalyticsFilterBarComponent_Conditional_9_Template, 3, 2, "button", 8);
165
- i0.ɵɵconditionalCreate(10, AnalyticsFilterBarComponent_Conditional_10_Template, 3, 0, "button", 9);
166
- i0.ɵɵelementEnd();
167
- i0.ɵɵelementStart(11, "div", 10);
168
- i0.ɵɵrepeaterCreate(12, AnalyticsFilterBarComponent_For_13_Template, 2, 3, "button", 11, i0.ɵɵrepeaterTrackByIdentity);
206
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AnalyticsFilterBarComponent, selectors: [["app-analytics-filter-bar"]], inputs: { TimeRange: "TimeRange", TimeRangeOptions: "TimeRangeOptions", ShowModelFilter: "ShowModelFilter", ShowAgentFilter: "ShowAgentFilter", ShowPromptFilter: "ShowPromptFilter", ShowStatusFilter: "ShowStatusFilter", ShowCompareToggle: "ShowCompareToggle", ShowExportButton: "ShowExportButton", Filters: "Filters" }, outputs: { TimeRangeChange: "TimeRangeChange", FiltersChange: "FiltersChange", CompareToggled: "CompareToggled", ExportClicked: "ExportClicked" }, standalone: false, decls: 7, vars: 3, consts: [[1, "filter-bar"], [3, "ActiveCount", "ShowClearAll"], [1, "compare-btn", 3, "active"], [1, "export-btn"], [1, "time-chips"], [1, "time-chip", 3, "active"], [3, "ClearAllRequested", "ActiveCount", "ShowClearAll"], [1, "popover-fields"], [1, "popover-field"], [1, "popover-field-label"], ["TextField", "text", "ValueField", "value", "Placeholder", "All Models", 3, "ValueChange", "Data", "ValuePrimitive", "DefaultItem", "Filterable"], ["TextField", "text", "ValueField", "value", "Placeholder", "All Agents", 3, "ValueChange", "Data", "ValuePrimitive", "DefaultItem", "Filterable"], ["TextField", "text", "ValueField", "value", "Placeholder", "All Prompts", 3, "ValueChange", "Data", "ValuePrimitive", "DefaultItem", "Filterable"], ["TextField", "text", "ValueField", "value", "Placeholder", "All Statuses", 3, "ValueChange", "Data", "ValuePrimitive", "DefaultItem"], [1, "compare-btn", 3, "click"], [1, "fa-solid", "fa-code-compare"], [1, "export-btn", 3, "click"], [1, "fa-solid", "fa-download"], [1, "time-chip", 3, "click"]], template: function AnalyticsFilterBarComponent_Template(rf, ctx) { if (rf & 1) {
207
+ i0.ɵɵelementStart(0, "div", 0);
208
+ i0.ɵɵconditionalCreate(1, AnalyticsFilterBarComponent_Conditional_1_Template, 6, 6, "mj-filter-popover", 1);
209
+ i0.ɵɵconditionalCreate(2, AnalyticsFilterBarComponent_Conditional_2_Template, 3, 2, "button", 2);
210
+ i0.ɵɵconditionalCreate(3, AnalyticsFilterBarComponent_Conditional_3_Template, 3, 0, "button", 3);
211
+ i0.ɵɵelementStart(4, "div", 4);
212
+ i0.ɵɵrepeaterCreate(5, AnalyticsFilterBarComponent_For_6_Template, 2, 3, "button", 5, i0.ɵɵrepeaterTrackByIdentity);
169
213
  i0.ɵɵelementEnd()();
170
214
  } if (rf & 2) {
171
- i0.ɵɵadvance(5);
172
- i0.ɵɵconditional(ctx.ShowModelFilter ? 5 : -1);
173
- i0.ɵɵadvance();
174
- i0.ɵɵconditional(ctx.ShowAgentFilter ? 6 : -1);
175
215
  i0.ɵɵadvance();
176
- i0.ɵɵconditional(ctx.ShowPromptFilter ? 7 : -1);
216
+ i0.ɵɵconditional(ctx.HasFilterDropdowns ? 1 : -1);
177
217
  i0.ɵɵadvance();
178
- i0.ɵɵconditional(ctx.ShowStatusFilter ? 8 : -1);
218
+ i0.ɵɵconditional(ctx.ShowCompareToggle ? 2 : -1);
179
219
  i0.ɵɵadvance();
180
- i0.ɵɵconditional(ctx.ShowCompareToggle ? 9 : -1);
181
- i0.ɵɵadvance();
182
- i0.ɵɵconditional(ctx.ShowExportButton ? 10 : -1);
220
+ i0.ɵɵconditional(ctx.ShowExportButton ? 3 : -1);
183
221
  i0.ɵɵadvance(2);
184
222
  i0.ɵɵrepeater(ctx.TimeRangeOptions);
185
- } }, dependencies: [i1.MJDropdownComponent], styles: [".filter-bar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n padding: 12px 16px;\n flex-wrap: wrap;\n }\n\n .filter-controls[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n flex-wrap: wrap;\n }\n\n .filter-label[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n white-space: nowrap;\n display: flex;\n align-items: center;\n gap: 6px;\n }\n\n .filter-label[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n }\n\n [_nghost-%COMP%] mj-dropdown {\n min-width: 160px;\n max-width: 220px;\n }\n\n [_nghost-%COMP%] mj-dropdown .mj-dropdown {\n font-size: 13px;\n border-radius: 6px;\n }\n\n .compare-btn[_ngcontent-%COMP%], \n .export-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 5px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 13px;\n cursor: pointer;\n white-space: nowrap;\n transition: background 0.15s, color 0.15s, border-color 0.15s;\n }\n\n .compare-btn[_ngcontent-%COMP%]:hover, \n .export-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n }\n\n .compare-btn.active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n }\n\n .time-chips[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n margin-left: auto;\n }\n\n .time-chip[_ngcontent-%COMP%] {\n padding: 5px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 16px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.15s, color 0.15s, border-color 0.15s;\n white-space: nowrap;\n }\n\n .time-chip[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n }\n\n .time-chip.active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n font-weight: 600;\n }\n\n @media (max-width: 768px) {\n .filter-bar[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: stretch;\n }\n\n .time-chips[_ngcontent-%COMP%] {\n margin-left: 0;\n justify-content: flex-start;\n flex-wrap: wrap;\n }\n }"] });
223
+ } }, dependencies: [i1.MJDropdownComponent, i1.MJFilterPopoverComponent], styles: ["\n\n .filter-bar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n \n\n .popover-fields[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 10px;\n }\n\n .popover-field[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .popover-field-label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n }\n\n .popover-field [_nghost-%COMP%] mj-dropdown, \n [_nghost-%COMP%] .popover-field mj-dropdown {\n display: block;\n width: 100%;\n min-width: 0;\n max-width: none;\n }\n\n .compare-btn[_ngcontent-%COMP%], \n .export-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 5px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 13px;\n cursor: pointer;\n white-space: nowrap;\n transition: background 0.15s, color 0.15s, border-color 0.15s;\n }\n\n .compare-btn[_ngcontent-%COMP%]:hover, \n .export-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n }\n\n .compare-btn.active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n }\n\n .time-chips[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .time-chip[_ngcontent-%COMP%] {\n padding: 5px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 16px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.15s, color 0.15s, border-color 0.15s;\n white-space: nowrap;\n }\n\n .time-chip[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n }\n\n .time-chip.active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n font-weight: 600;\n }\n\n @media (max-width: 768px) {\n .filter-bar[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: stretch;\n }\n\n .time-chips[_ngcontent-%COMP%] {\n margin-left: 0;\n justify-content: flex-start;\n flex-wrap: wrap;\n }\n }"] });
186
224
  }
187
225
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AnalyticsFilterBarComponent, [{
188
226
  type: Component,
189
227
  args: [{ standalone: false, selector: 'app-analytics-filter-bar', template: `
190
228
  <div class="filter-bar">
191
- <div class="filter-controls">
192
- <span class="filter-label">
193
- <i class="fa-solid fa-filter"></i>
194
- Filters:
195
- </span>
229
+ @if (HasFilterDropdowns) {
230
+ <mj-filter-popover
231
+ [ActiveCount]="ActiveFilterCount"
232
+ [ShowClearAll]="ActiveFilterCount > 0"
233
+ (ClearAllRequested)="ClearAllFilters()">
234
+ <div class="popover-fields">
235
+ @if (ShowModelFilter) {
236
+ <label class="popover-field">
237
+ <span class="popover-field-label">Model</span>
238
+ <mj-dropdown
239
+ [Data]="ModelOptions"
240
+ TextField="text"
241
+ ValueField="value"
242
+ [ValuePrimitive]="true"
243
+ [DefaultItem]="modelDefaultItem"
244
+ [Filterable]="ModelOptions.length > 10"
245
+ Placeholder="All Models"
246
+ (ValueChange)="OnModelChange($event)">
247
+ </mj-dropdown>
248
+ </label>
249
+ }
250
+ @if (ShowAgentFilter) {
251
+ <label class="popover-field">
252
+ <span class="popover-field-label">Agent</span>
253
+ <mj-dropdown
254
+ [Data]="AgentOptions"
255
+ TextField="text"
256
+ ValueField="value"
257
+ [ValuePrimitive]="true"
258
+ [DefaultItem]="agentDefaultItem"
259
+ [Filterable]="AgentOptions.length > 10"
260
+ Placeholder="All Agents"
261
+ (ValueChange)="OnAgentChange($event)">
262
+ </mj-dropdown>
263
+ </label>
264
+ }
265
+ @if (ShowPromptFilter) {
266
+ <label class="popover-field">
267
+ <span class="popover-field-label">Prompt</span>
268
+ <mj-dropdown
269
+ [Data]="PromptOptions"
270
+ TextField="text"
271
+ ValueField="value"
272
+ [ValuePrimitive]="true"
273
+ [DefaultItem]="promptDefaultItem"
274
+ [Filterable]="PromptOptions.length > 10"
275
+ Placeholder="All Prompts"
276
+ (ValueChange)="OnPromptChange($event)">
277
+ </mj-dropdown>
278
+ </label>
279
+ }
280
+ @if (ShowStatusFilter) {
281
+ <label class="popover-field">
282
+ <span class="popover-field-label">Status</span>
283
+ <mj-dropdown
284
+ [Data]="StatusOptions"
285
+ TextField="text"
286
+ ValueField="value"
287
+ [ValuePrimitive]="true"
288
+ [DefaultItem]="statusDefaultItem"
289
+ Placeholder="All Statuses"
290
+ (ValueChange)="OnStatusChange($event)">
291
+ </mj-dropdown>
292
+ </label>
293
+ }
294
+ </div>
295
+ </mj-filter-popover>
296
+ }
196
297
 
197
- @if (ShowModelFilter) {
198
- <mj-dropdown
199
- [Data]="ModelOptions"
200
- TextField="text"
201
- ValueField="value"
202
- [ValuePrimitive]="true"
203
- [DefaultItem]="modelDefaultItem"
204
- [Filterable]="ModelOptions.length > 10"
205
- Placeholder="All Models"
206
- (ValueChange)="OnModelChange($event)">
207
- </mj-dropdown>
208
- }
298
+ @if (ShowCompareToggle) {
299
+ <button
300
+ class="compare-btn"
301
+ [class.active]="compareActive"
302
+ (click)="ToggleCompare()">
303
+ <i class="fa-solid fa-code-compare"></i>
304
+ Compare
305
+ </button>
306
+ }
209
307
 
210
- @if (ShowAgentFilter) {
211
- <mj-dropdown
212
- [Data]="AgentOptions"
213
- TextField="text"
214
- ValueField="value"
215
- [ValuePrimitive]="true"
216
- [DefaultItem]="agentDefaultItem"
217
- [Filterable]="AgentOptions.length > 10"
218
- Placeholder="All Agents"
219
- (ValueChange)="OnAgentChange($event)">
220
- </mj-dropdown>
221
- }
222
-
223
- @if (ShowPromptFilter) {
224
- <mj-dropdown
225
- [Data]="PromptOptions"
226
- TextField="text"
227
- ValueField="value"
228
- [ValuePrimitive]="true"
229
- [DefaultItem]="promptDefaultItem"
230
- [Filterable]="PromptOptions.length > 10"
231
- Placeholder="All Prompts"
232
- (ValueChange)="OnPromptChange($event)">
233
- </mj-dropdown>
234
- }
235
-
236
- @if (ShowStatusFilter) {
237
- <mj-dropdown
238
- [Data]="StatusOptions"
239
- TextField="text"
240
- ValueField="value"
241
- [ValuePrimitive]="true"
242
- [DefaultItem]="statusDefaultItem"
243
- Placeholder="All Statuses"
244
- (ValueChange)="OnStatusChange($event)">
245
- </mj-dropdown>
246
- }
247
-
248
- @if (ShowCompareToggle) {
249
- <button
250
- class="compare-btn"
251
- [class.active]="compareActive"
252
- (click)="ToggleCompare()">
253
- <i class="fa-solid fa-code-compare"></i>
254
- Compare
255
- </button>
256
- }
257
-
258
- @if (ShowExportButton) {
259
- <button class="export-btn" (click)="ExportClicked.emit()">
260
- <i class="fa-solid fa-download"></i>
261
- Export
262
- </button>
263
- }
264
- </div>
308
+ @if (ShowExportButton) {
309
+ <button class="export-btn" (click)="ExportClicked.emit()">
310
+ <i class="fa-solid fa-download"></i>
311
+ Export
312
+ </button>
313
+ }
265
314
 
266
315
  <div class="time-chips">
267
316
  @for (option of TimeRangeOptions; track option) {
@@ -274,7 +323,7 @@ export class AnalyticsFilterBarComponent {
274
323
  }
275
324
  </div>
276
325
  </div>
277
- `, styles: ["\n .filter-bar {\n display: flex;\n align-items: center;\n gap: 12px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n padding: 12px 16px;\n flex-wrap: wrap;\n }\n\n .filter-controls {\n display: flex;\n align-items: center;\n gap: 10px;\n flex-wrap: wrap;\n }\n\n .filter-label {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n white-space: nowrap;\n display: flex;\n align-items: center;\n gap: 6px;\n }\n\n .filter-label i {\n font-size: 12px;\n color: var(--mj-text-muted);\n }\n\n :host ::ng-deep mj-dropdown {\n min-width: 160px;\n max-width: 220px;\n }\n\n :host ::ng-deep mj-dropdown .mj-dropdown {\n font-size: 13px;\n border-radius: 6px;\n }\n\n .compare-btn,\n .export-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 5px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 13px;\n cursor: pointer;\n white-space: nowrap;\n transition: background 0.15s, color 0.15s, border-color 0.15s;\n }\n\n .compare-btn:hover,\n .export-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n }\n\n .compare-btn.active {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n }\n\n .time-chips {\n display: flex;\n align-items: center;\n gap: 4px;\n margin-left: auto;\n }\n\n .time-chip {\n padding: 5px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 16px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.15s, color 0.15s, border-color 0.15s;\n white-space: nowrap;\n }\n\n .time-chip:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n }\n\n .time-chip.active {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n font-weight: 600;\n }\n\n @media (max-width: 768px) {\n .filter-bar {\n flex-direction: column;\n align-items: stretch;\n }\n\n .time-chips {\n margin-left: 0;\n justify-content: flex-start;\n flex-wrap: wrap;\n }\n }\n "] }]
326
+ `, styles: ["\n /* Filter bar renders inline inside <mj-page-header>'s actions slot \u2014 no wrapper card. */\n .filter-bar {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n /* Popover panel content \u2014 stacked labeled fields */\n .popover-fields {\n display: flex;\n flex-direction: column;\n gap: 10px;\n }\n\n .popover-field {\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .popover-field-label {\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n }\n\n .popover-field :host ::ng-deep mj-dropdown,\n :host ::ng-deep .popover-field mj-dropdown {\n display: block;\n width: 100%;\n min-width: 0;\n max-width: none;\n }\n\n .compare-btn,\n .export-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 5px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 13px;\n cursor: pointer;\n white-space: nowrap;\n transition: background 0.15s, color 0.15s, border-color 0.15s;\n }\n\n .compare-btn:hover,\n .export-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n }\n\n .compare-btn.active {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n }\n\n .time-chips {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .time-chip {\n padding: 5px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 16px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.15s, color 0.15s, border-color 0.15s;\n white-space: nowrap;\n }\n\n .time-chip:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n }\n\n .time-chip.active {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n font-weight: 600;\n }\n\n @media (max-width: 768px) {\n .filter-bar {\n flex-direction: column;\n align-items: stretch;\n }\n\n .time-chips {\n margin-left: 0;\n justify-content: flex-start;\n flex-wrap: wrap;\n }\n }\n "] }]
278
327
  }], null, { TimeRange: [{
279
328
  type: Input
280
329
  }], TimeRangeOptions: [{
@@ -302,5 +351,5 @@ export class AnalyticsFilterBarComponent {
302
351
  }], ExportClicked: [{
303
352
  type: Output
304
353
  }] }); })();
305
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AnalyticsFilterBarComponent, { className: "AnalyticsFilterBarComponent", filePath: "src/AI/components/analytics/analytics-filter-bar.component.ts", lineNumber: 229 }); })();
354
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AnalyticsFilterBarComponent, { className: "AnalyticsFilterBarComponent", filePath: "src/AI/components/analytics/analytics-filter-bar.component.ts", lineNumber: 232 }); })();
306
355
  //# sourceMappingURL=analytics-filter-bar.component.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"analytics-filter-bar.component.js","sourceRoot":"","sources":["../../../../src/AI/components/analytics/analytics-filter-bar.component.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Reusable filter bar for AI Analytics dashboard sections.\n *\n * Provides time-range chips, model/agent/prompt/status dropdowns\n * (using mj-dropdown), a compare toggle, and an optional export button.\n * Each section shows/hides filters via boolean inputs.\n */\n\nimport { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\nimport { AIEngineBase } from '@memberjunction/ai-engine-base';\nimport { GlobalFilterState } from '../../interfaces/analytics-preferences.interface';\n\ninterface FilterOption {\n text: string;\n value: string;\n [key: string]: unknown;\n}\n\n@Component({\n standalone: false,\n selector: 'app-analytics-filter-bar',\n template: `\n <div class=\"filter-bar\">\n <div class=\"filter-controls\">\n <span class=\"filter-label\">\n <i class=\"fa-solid fa-filter\"></i>\n Filters:\n </span>\n\n @if (ShowModelFilter) {\n <mj-dropdown\n [Data]=\"ModelOptions\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n [DefaultItem]=\"modelDefaultItem\"\n [Filterable]=\"ModelOptions.length > 10\"\n Placeholder=\"All Models\"\n (ValueChange)=\"OnModelChange($event)\">\n </mj-dropdown>\n }\n\n @if (ShowAgentFilter) {\n <mj-dropdown\n [Data]=\"AgentOptions\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n [DefaultItem]=\"agentDefaultItem\"\n [Filterable]=\"AgentOptions.length > 10\"\n Placeholder=\"All Agents\"\n (ValueChange)=\"OnAgentChange($event)\">\n </mj-dropdown>\n }\n\n @if (ShowPromptFilter) {\n <mj-dropdown\n [Data]=\"PromptOptions\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n [DefaultItem]=\"promptDefaultItem\"\n [Filterable]=\"PromptOptions.length > 10\"\n Placeholder=\"All Prompts\"\n (ValueChange)=\"OnPromptChange($event)\">\n </mj-dropdown>\n }\n\n @if (ShowStatusFilter) {\n <mj-dropdown\n [Data]=\"StatusOptions\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n [DefaultItem]=\"statusDefaultItem\"\n Placeholder=\"All Statuses\"\n (ValueChange)=\"OnStatusChange($event)\">\n </mj-dropdown>\n }\n\n @if (ShowCompareToggle) {\n <button\n class=\"compare-btn\"\n [class.active]=\"compareActive\"\n (click)=\"ToggleCompare()\">\n <i class=\"fa-solid fa-code-compare\"></i>\n Compare\n </button>\n }\n\n @if (ShowExportButton) {\n <button class=\"export-btn\" (click)=\"ExportClicked.emit()\">\n <i class=\"fa-solid fa-download\"></i>\n Export\n </button>\n }\n </div>\n\n <div class=\"time-chips\">\n @for (option of TimeRangeOptions; track option) {\n <button\n class=\"time-chip\"\n [class.active]=\"TimeRange === option\"\n (click)=\"OnTimeRangeSelect(option)\">\n {{ option }}\n </button>\n }\n </div>\n </div>\n `,\n styles: [`\n .filter-bar {\n display: flex;\n align-items: center;\n gap: 12px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n padding: 12px 16px;\n flex-wrap: wrap;\n }\n\n .filter-controls {\n display: flex;\n align-items: center;\n gap: 10px;\n flex-wrap: wrap;\n }\n\n .filter-label {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n white-space: nowrap;\n display: flex;\n align-items: center;\n gap: 6px;\n }\n\n .filter-label i {\n font-size: 12px;\n color: var(--mj-text-muted);\n }\n\n :host ::ng-deep mj-dropdown {\n min-width: 160px;\n max-width: 220px;\n }\n\n :host ::ng-deep mj-dropdown .mj-dropdown {\n font-size: 13px;\n border-radius: 6px;\n }\n\n .compare-btn,\n .export-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 5px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 13px;\n cursor: pointer;\n white-space: nowrap;\n transition: background 0.15s, color 0.15s, border-color 0.15s;\n }\n\n .compare-btn:hover,\n .export-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n }\n\n .compare-btn.active {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n }\n\n .time-chips {\n display: flex;\n align-items: center;\n gap: 4px;\n margin-left: auto;\n }\n\n .time-chip {\n padding: 5px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 16px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.15s, color 0.15s, border-color 0.15s;\n white-space: nowrap;\n }\n\n .time-chip:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n }\n\n .time-chip.active {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n font-weight: 600;\n }\n\n @media (max-width: 768px) {\n .filter-bar {\n flex-direction: column;\n align-items: stretch;\n }\n\n .time-chips {\n margin-left: 0;\n justify-content: flex-start;\n flex-wrap: wrap;\n }\n }\n `]\n})\nexport class AnalyticsFilterBarComponent implements OnInit {\n @Input() TimeRange = '24h';\n @Input() TimeRangeOptions: string[] = ['1h', '6h', '24h', '7d', '30d'];\n @Input() ShowModelFilter = true;\n @Input() ShowAgentFilter = true;\n @Input() ShowPromptFilter = true;\n @Input() ShowStatusFilter = true;\n @Input() ShowCompareToggle = true;\n @Input() ShowExportButton = false;\n @Input() Filters: GlobalFilterState = { Models: [], Agents: [], Prompts: [], Statuses: [] };\n\n @Output() TimeRangeChange = new EventEmitter<string>();\n @Output() FiltersChange = new EventEmitter<GlobalFilterState>();\n @Output() CompareToggled = new EventEmitter<boolean>();\n @Output() ExportClicked = new EventEmitter<void>();\n\n public ModelOptions: FilterOption[] = [];\n public AgentOptions: FilterOption[] = [];\n public PromptOptions: FilterOption[] = [];\n public StatusOptions: FilterOption[] = [\n { text: 'Success', value: 'Success' },\n { text: 'Error', value: 'Error' },\n { text: 'Running', value: 'Running' },\n { text: 'Pending', value: 'Pending' },\n { text: 'Canceled', value: 'Canceled' }\n ];\n\n /** Default items shown when nothing is selected (the \"All X\" option) */\n public modelDefaultItem: FilterOption = { text: 'All Models', value: '' };\n public agentDefaultItem: FilterOption = { text: 'All Agents', value: '' };\n public promptDefaultItem: FilterOption = { text: 'All Prompts', value: '' };\n public statusDefaultItem: FilterOption = { text: 'All Statuses', value: '' };\n\n public compareActive = false;\n\n ngOnInit(): void {\n this.BuildOptions();\n }\n\n public OnTimeRangeSelect(range: string): void {\n this.TimeRange = range;\n this.TimeRangeChange.emit(range);\n }\n\n public OnModelChange(event: unknown): void {\n const id = (event as string) ?? '';\n this.Filters = { ...this.Filters, Models: id ? [id] : [] };\n this.FiltersChange.emit(this.Filters);\n }\n\n public OnAgentChange(event: unknown): void {\n const id = (event as string) ?? '';\n this.Filters = { ...this.Filters, Agents: id ? [id] : [] };\n this.FiltersChange.emit(this.Filters);\n }\n\n public OnPromptChange(event: unknown): void {\n const id = (event as string) ?? '';\n this.Filters = { ...this.Filters, Prompts: id ? [id] : [] };\n this.FiltersChange.emit(this.Filters);\n }\n\n public OnStatusChange(event: unknown): void {\n const status = (event as string) ?? '';\n this.Filters = { ...this.Filters, Statuses: status ? [status] : [] };\n this.FiltersChange.emit(this.Filters);\n }\n\n public ToggleCompare(): void {\n this.compareActive = !this.compareActive;\n this.CompareToggled.emit(this.compareActive);\n }\n\n private BuildOptions(): void {\n const engine = AIEngineBase.Instance;\n\n this.ModelOptions = engine.Models\n .map(m => ({ text: m.Name ?? '', value: m.ID }))\n .sort((a, b) => a.text.localeCompare(b.text));\n\n this.AgentOptions = engine.Agents\n .filter(a => a.Status === 'Active')\n .map(a => ({ text: a.Name ?? '', value: a.ID }))\n .sort((a, b) => a.text.localeCompare(b.text));\n\n this.PromptOptions = engine.Prompts\n .map(p => ({ text: p.Name ?? '', value: p.ID }))\n .sort((a, b) => a.text.localeCompare(b.text));\n }\n}\n"]}
1
+ {"version":3,"file":"analytics-filter-bar.component.js","sourceRoot":"","sources":["../../../../src/AI/components/analytics/analytics-filter-bar.component.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAU,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;;;;;IAsB9B,AADJ,gCAA6B,cACS;IAAA,qBAAK;IAAA,iBAAO;IAC9C,uCAQ0C;IAAtC,qOAAe,4BAAqB,KAAC;IAE7C,AADI,iBAAc,EACV;;;IATA,eAAqB;IAKrB,AADA,AADA,AAHA,0CAAqB,wBAGE,wCACS,+CACO;;;;IAQ3C,AADJ,gCAA6B,cACS;IAAA,qBAAK;IAAA,iBAAO;IAC9C,uCAQ0C;IAAtC,qOAAe,4BAAqB,KAAC;IAE7C,AADI,iBAAc,EACV;;;IATA,eAAqB;IAKrB,AADA,AADA,AAHA,0CAAqB,wBAGE,wCACS,+CACO;;;;IAQ3C,AADJ,gCAA6B,cACS;IAAA,sBAAM;IAAA,iBAAO;IAC/C,uCAQ2C;IAAvC,qOAAe,6BAAsB,KAAC;IAE9C,AADI,iBAAc,EACV;;;IATA,eAAsB;IAKtB,AADA,AADA,AAHA,2CAAsB,wBAGC,yCACU,gDACO;;;;IAQ5C,AADJ,gCAA6B,cACS;IAAA,sBAAM;IAAA,iBAAO;IAC/C,uCAO2C;IAAvC,qOAAe,6BAAsB,KAAC;IAE9C,AADI,iBAAc,EACV;;;IARA,eAAsB;IAItB,AADA,AAHA,2CAAsB,wBAGC,yCACU;;;;IA1DrD,4CAG4C;IAAxC,kOAAqB,wBAAiB,KAAC;IACvC,8BAA4B;IACxB,6GAAuB;IAevB,6GAAuB;IAevB,6GAAwB;IAexB,6GAAwB;IAehC,AADI,iBAAM,EACU;;;IA/DhB,AADA,sDAAiC,8CACK;IAGlC,eAcC;IAdD,iDAcC;IACD,cAcC;IAdD,iDAcC;IACD,cAcC;IAdD,kDAcC;IACD,cAaC;IAbD,kDAaC;;;;IAMT,kCAG8B;IAA1B,+LAAS,sBAAe,KAAC;IACzB,wBAAwC;IACxC,yBACJ;IAAA,iBAAS;;;IAJL,8CAA8B;;;;IAQlC,kCAA0D;IAA/B,+LAAS,2BAAoB,KAAC;IACrD,wBAAoC;IACpC,wBACJ;IAAA,iBAAS;;;;IAKL,kCAGwC;IAApC,oNAAS,oCAAyB,KAAC;IACnC,YACJ;IAAA,iBAAS;;;;IAHL,yDAAqC;IAErC,cACJ;IADI,2CACJ;;AAmHpB,MAAM,OAAO,2BAA2B;IAC3B,SAAS,GAAG,KAAK,CAAC;IAClB,gBAAgB,GAAa,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC9D,eAAe,GAAG,IAAI,CAAC;IACvB,eAAe,GAAG,IAAI,CAAC;IACvB,gBAAgB,GAAG,IAAI,CAAC;IACxB,gBAAgB,GAAG,IAAI,CAAC;IACxB,iBAAiB,GAAG,IAAI,CAAC;IACzB,gBAAgB,GAAG,KAAK,CAAC;IACzB,OAAO,GAAsB,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAElF,eAAe,GAAG,IAAI,YAAY,EAAU,CAAC;IAC7C,aAAa,GAAG,IAAI,YAAY,EAAqB,CAAC;IACtD,cAAc,GAAG,IAAI,YAAY,EAAW,CAAC;IAC7C,aAAa,GAAG,IAAI,YAAY,EAAQ,CAAC;IAE5C,YAAY,GAAmB,EAAE,CAAC;IAClC,YAAY,GAAmB,EAAE,CAAC;IAClC,aAAa,GAAmB,EAAE,CAAC;IACnC,aAAa,GAAmB;QACnC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;QACrC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;QACjC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;QACrC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;QACrC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;KAC1C,CAAC;IAEF,wEAAwE;IACjE,gBAAgB,GAAiB,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACnE,gBAAgB,GAAiB,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACnE,iBAAiB,GAAiB,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACrE,iBAAiB,GAAiB,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IAEtE,aAAa,GAAG,KAAK,CAAC;IAE7B,gHAAgH;IAChH,IAAW,kBAAkB;QACzB,OAAO,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,CAAC;IAC1G,CAAC;IAED,qEAAqE;IACrE,IAAW,iBAAiB;QACxB,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;QAChF,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC;IACpH,CAAC;IAEM,eAAe;QAClB,IAAI,CAAC,OAAO,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;QACrE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED,QAAQ;QACJ,IAAI,CAAC,YAAY,EAAE,CAAC;IACxB,CAAC;IAEM,iBAAiB,CAAC,KAAa;QAClC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAEM,aAAa,CAAC,KAAc;QAC/B,MAAM,EAAE,GAAI,KAAgB,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC3D,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IAEM,aAAa,CAAC,KAAc;QAC/B,MAAM,EAAE,GAAI,KAAgB,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC3D,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IAEM,cAAc,CAAC,KAAc;QAChC,MAAM,EAAE,GAAI,KAAgB,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC5D,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IAEM,cAAc,CAAC,KAAc;QAChC,MAAM,MAAM,GAAI,KAAgB,IAAI,EAAE,CAAC;QACvC,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACrE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IAEM,aAAa;QAChB,IAAI,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC;QACzC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACjD,CAAC;IAEO,YAAY;QAChB,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC;QAErC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM;aAC5B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;aAC/C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAElD,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM;aAC5B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC;aAClC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;aAC/C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAElD,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,OAAO;aAC9B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;aAC/C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACtD,CAAC;qHAxGQ,2BAA2B;6DAA3B,2BAA2B;YAjNhC,8BAAwB;YACpB,2GAA0B;YAqE1B,gGAAyB;YAUzB,gGAAwB;YAOxB,8BAAwB;YACpB,mHAOC;YAET,AADI,iBAAM,EACJ;;YAhGF,cAmEC;YAnED,iDAmEC;YAED,cAQC;YARD,gDAQC;YAED,cAKC;YALD,+CAKC;YAGG,eAOC;YAPD,mCAOC;;;iFAkHJ,2BAA2B;cArNvC,SAAS;6BACM,KAAK,YACP,0BAA0B,YAC1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAmGT;;kBAgHA,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBAEL,MAAM;;kBACN,MAAM;;kBACN,MAAM;;kBACN,MAAM;;kFAdE,2BAA2B","sourcesContent":["/**\n * @fileoverview Reusable filter bar for AI Analytics dashboard sections.\n *\n * Provides time-range chips, model/agent/prompt/status dropdowns\n * (using mj-dropdown), a compare toggle, and an optional export button.\n * Each section shows/hides filters via boolean inputs.\n */\n\nimport { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\nimport { AIEngineBase } from '@memberjunction/ai-engine-base';\nimport { GlobalFilterState } from '../../interfaces/analytics-preferences.interface';\n\ninterface FilterOption {\n text: string;\n value: string;\n [key: string]: unknown;\n}\n\n@Component({\n standalone: false,\n selector: 'app-analytics-filter-bar',\n template: `\n <div class=\"filter-bar\">\n @if (HasFilterDropdowns) {\n <mj-filter-popover\n [ActiveCount]=\"ActiveFilterCount\"\n [ShowClearAll]=\"ActiveFilterCount > 0\"\n (ClearAllRequested)=\"ClearAllFilters()\">\n <div class=\"popover-fields\">\n @if (ShowModelFilter) {\n <label class=\"popover-field\">\n <span class=\"popover-field-label\">Model</span>\n <mj-dropdown\n [Data]=\"ModelOptions\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n [DefaultItem]=\"modelDefaultItem\"\n [Filterable]=\"ModelOptions.length > 10\"\n Placeholder=\"All Models\"\n (ValueChange)=\"OnModelChange($event)\">\n </mj-dropdown>\n </label>\n }\n @if (ShowAgentFilter) {\n <label class=\"popover-field\">\n <span class=\"popover-field-label\">Agent</span>\n <mj-dropdown\n [Data]=\"AgentOptions\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n [DefaultItem]=\"agentDefaultItem\"\n [Filterable]=\"AgentOptions.length > 10\"\n Placeholder=\"All Agents\"\n (ValueChange)=\"OnAgentChange($event)\">\n </mj-dropdown>\n </label>\n }\n @if (ShowPromptFilter) {\n <label class=\"popover-field\">\n <span class=\"popover-field-label\">Prompt</span>\n <mj-dropdown\n [Data]=\"PromptOptions\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n [DefaultItem]=\"promptDefaultItem\"\n [Filterable]=\"PromptOptions.length > 10\"\n Placeholder=\"All Prompts\"\n (ValueChange)=\"OnPromptChange($event)\">\n </mj-dropdown>\n </label>\n }\n @if (ShowStatusFilter) {\n <label class=\"popover-field\">\n <span class=\"popover-field-label\">Status</span>\n <mj-dropdown\n [Data]=\"StatusOptions\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n [DefaultItem]=\"statusDefaultItem\"\n Placeholder=\"All Statuses\"\n (ValueChange)=\"OnStatusChange($event)\">\n </mj-dropdown>\n </label>\n }\n </div>\n </mj-filter-popover>\n }\n\n @if (ShowCompareToggle) {\n <button\n class=\"compare-btn\"\n [class.active]=\"compareActive\"\n (click)=\"ToggleCompare()\">\n <i class=\"fa-solid fa-code-compare\"></i>\n Compare\n </button>\n }\n\n @if (ShowExportButton) {\n <button class=\"export-btn\" (click)=\"ExportClicked.emit()\">\n <i class=\"fa-solid fa-download\"></i>\n Export\n </button>\n }\n\n <div class=\"time-chips\">\n @for (option of TimeRangeOptions; track option) {\n <button\n class=\"time-chip\"\n [class.active]=\"TimeRange === option\"\n (click)=\"OnTimeRangeSelect(option)\">\n {{ option }}\n </button>\n }\n </div>\n </div>\n `,\n styles: [`\n /* Filter bar renders inline inside <mj-page-header>'s actions slot — no wrapper card. */\n .filter-bar {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n /* Popover panel content — stacked labeled fields */\n .popover-fields {\n display: flex;\n flex-direction: column;\n gap: 10px;\n }\n\n .popover-field {\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .popover-field-label {\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n }\n\n .popover-field :host ::ng-deep mj-dropdown,\n :host ::ng-deep .popover-field mj-dropdown {\n display: block;\n width: 100%;\n min-width: 0;\n max-width: none;\n }\n\n .compare-btn,\n .export-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 5px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 13px;\n cursor: pointer;\n white-space: nowrap;\n transition: background 0.15s, color 0.15s, border-color 0.15s;\n }\n\n .compare-btn:hover,\n .export-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n }\n\n .compare-btn.active {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n }\n\n .time-chips {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .time-chip {\n padding: 5px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 16px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.15s, color 0.15s, border-color 0.15s;\n white-space: nowrap;\n }\n\n .time-chip:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n }\n\n .time-chip.active {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n font-weight: 600;\n }\n\n @media (max-width: 768px) {\n .filter-bar {\n flex-direction: column;\n align-items: stretch;\n }\n\n .time-chips {\n margin-left: 0;\n justify-content: flex-start;\n flex-wrap: wrap;\n }\n }\n `]\n})\nexport class AnalyticsFilterBarComponent implements OnInit {\n @Input() TimeRange = '24h';\n @Input() TimeRangeOptions: string[] = ['1h', '6h', '24h', '7d', '30d'];\n @Input() ShowModelFilter = true;\n @Input() ShowAgentFilter = true;\n @Input() ShowPromptFilter = true;\n @Input() ShowStatusFilter = true;\n @Input() ShowCompareToggle = true;\n @Input() ShowExportButton = false;\n @Input() Filters: GlobalFilterState = { Models: [], Agents: [], Prompts: [], Statuses: [] };\n\n @Output() TimeRangeChange = new EventEmitter<string>();\n @Output() FiltersChange = new EventEmitter<GlobalFilterState>();\n @Output() CompareToggled = new EventEmitter<boolean>();\n @Output() ExportClicked = new EventEmitter<void>();\n\n public ModelOptions: FilterOption[] = [];\n public AgentOptions: FilterOption[] = [];\n public PromptOptions: FilterOption[] = [];\n public StatusOptions: FilterOption[] = [\n { text: 'Success', value: 'Success' },\n { text: 'Error', value: 'Error' },\n { text: 'Running', value: 'Running' },\n { text: 'Pending', value: 'Pending' },\n { text: 'Canceled', value: 'Canceled' }\n ];\n\n /** Default items shown when nothing is selected (the \"All X\" option) */\n public modelDefaultItem: FilterOption = { text: 'All Models', value: '' };\n public agentDefaultItem: FilterOption = { text: 'All Agents', value: '' };\n public promptDefaultItem: FilterOption = { text: 'All Prompts', value: '' };\n public statusDefaultItem: FilterOption = { text: 'All Statuses', value: '' };\n\n public compareActive = false;\n\n /** True when at least one of the filter dropdowns is enabled — drives whether to render the popover trigger. */\n public get HasFilterDropdowns(): boolean {\n return this.ShowModelFilter || this.ShowAgentFilter || this.ShowPromptFilter || this.ShowStatusFilter;\n }\n\n /** Number of active filter selections — drives the popover badge. */\n public get ActiveFilterCount(): number {\n const f = this.Filters ?? { Models: [], Agents: [], Prompts: [], Statuses: [] };\n return (f.Models?.length ?? 0) + (f.Agents?.length ?? 0) + (f.Prompts?.length ?? 0) + (f.Statuses?.length ?? 0);\n }\n\n public ClearAllFilters(): void {\n this.Filters = { Models: [], Agents: [], Prompts: [], Statuses: [] };\n this.FiltersChange.emit(this.Filters);\n }\n\n ngOnInit(): void {\n this.BuildOptions();\n }\n\n public OnTimeRangeSelect(range: string): void {\n this.TimeRange = range;\n this.TimeRangeChange.emit(range);\n }\n\n public OnModelChange(event: unknown): void {\n const id = (event as string) ?? '';\n this.Filters = { ...this.Filters, Models: id ? [id] : [] };\n this.FiltersChange.emit(this.Filters);\n }\n\n public OnAgentChange(event: unknown): void {\n const id = (event as string) ?? '';\n this.Filters = { ...this.Filters, Agents: id ? [id] : [] };\n this.FiltersChange.emit(this.Filters);\n }\n\n public OnPromptChange(event: unknown): void {\n const id = (event as string) ?? '';\n this.Filters = { ...this.Filters, Prompts: id ? [id] : [] };\n this.FiltersChange.emit(this.Filters);\n }\n\n public OnStatusChange(event: unknown): void {\n const status = (event as string) ?? '';\n this.Filters = { ...this.Filters, Statuses: status ? [status] : [] };\n this.FiltersChange.emit(this.Filters);\n }\n\n public ToggleCompare(): void {\n this.compareActive = !this.compareActive;\n this.CompareToggled.emit(this.compareActive);\n }\n\n private BuildOptions(): void {\n const engine = AIEngineBase.Instance;\n\n this.ModelOptions = engine.Models\n .map(m => ({ text: m.Name ?? '', value: m.ID }))\n .sort((a, b) => a.text.localeCompare(b.text));\n\n this.AgentOptions = engine.Agents\n .filter(a => a.Status === 'Active')\n .map(a => ({ text: a.Name ?? '', value: a.ID }))\n .sort((a, b) => a.text.localeCompare(b.text));\n\n this.PromptOptions = engine.Prompts\n .map(p => ({ text: p.Name ?? '', value: p.ID }))\n .sort((a, b) => a.text.localeCompare(b.text));\n }\n}\n"]}
@@ -42,10 +42,16 @@ interface CostByModelRow {
42
42
  PercentOfTotal: number;
43
43
  }
44
44
  export declare class AnalyticsCostBudgetComponent extends BaseAngularComponent implements OnInit, OnDestroy {
45
- TimeRange: string;
46
- Filters: GlobalFilterState;
45
+ private _timeRange;
46
+ set TimeRange(value: string);
47
+ get TimeRange(): string;
48
+ private _filters;
49
+ set Filters(value: GlobalFilterState);
50
+ get Filters(): GlobalFilterState;
51
+ private shallowFiltersEqual;
47
52
  TimeRangeChange: EventEmitter<string>;
48
53
  FiltersChange: EventEmitter<GlobalFilterState>;
54
+ private initialized;
49
55
  private cdr;
50
56
  private destroy$;
51
57
  IsLoading: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"cost-budget.component.d.ts","sourceRoot":"","sources":["../../../../../src/AI/components/analytics/cost-budget/cost-budget.component.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACuB,YAAY,EACtC,MAAM,EAAE,SAAS,EACpB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qDAAqD,CAAC;;AAmBxF,UAAU,OAAO;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,cAAc,EAAE,IAAI,GAAG,MAAM,GAAG,QAAQ,CAAC;IACzC,WAAW,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,QAAQ;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;CACtB;AAED,UAAU,WAAW;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,cAAc;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CAC1B;AAkBD,qBAogBa,4BAA6B,SAAQ,oBAAqB,YAAW,MAAM,EAAE,SAAS;IACtF,SAAS,SAAQ;IACjB,OAAO,EAAE,iBAAiB,CAAyD;IAElF,eAAe,uBAA8B;IAC7C,aAAa,kCAAyC;IAEhE,OAAO,CAAC,GAAG,CAA6B;IACxC,OAAO,CAAC,QAAQ,CAAuB;IAEhC,SAAS,UAAS;IAClB,oBAAoB,WAAsB;IAE1C,QAAQ,EAAE,OAAO,EAAE,CAAM;IACzB,SAAS,EAAE,QAAQ,EAAE,CAAM;IAC3B,cAAc,SAAK;IACnB,YAAY,EAAE,WAAW,EAAE,CAAM;IACjC,eAAe,EAAE,cAAc,EAAE,CAAM;IAE9C,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,kBAAkB,CAAyB;IAEnD,QAAQ,IAAI,IAAI;IAIhB,WAAW,IAAI,IAAI;IAOZ,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAMtC,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAMjD,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,SAAI,GAAG,MAAM;IAMnD,SAAS,IAAI,IAAI;YAWV,QAAQ;IA8CtB,OAAO,CAAC,WAAW;IAuDnB,OAAO,CAAC,gBAAgB;IA+BxB,OAAO,CAAC,cAAc;IAmBtB,OAAO,CAAC,kBAAkB;IAuC1B,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,aAAa;IAcrB,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,yBAAyB;IASjC,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,WAAW;yCAxSV,4BAA4B;2CAA5B,4BAA4B;CAiTxC;AAED,wBAAgB,uBAAuB,SAAoC"}
1
+ {"version":3,"file":"cost-budget.component.d.ts","sourceRoot":"","sources":["../../../../../src/AI/components/analytics/cost-budget/cost-budget.component.ts"],"names":[],"mappings":"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"}