@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
@@ -15,106 +15,122 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
15
15
  * Persists the active section and filter state via UserInfoEngine settings
16
16
  * with debounced writes.
17
17
  */
18
- import { Component, ChangeDetectorRef, inject } from '@angular/core';
18
+ import { Component, ChangeDetectorRef, ViewChild, inject } from '@angular/core';
19
19
  import { Subject } from 'rxjs';
20
20
  import { debounceTime, takeUntil } from 'rxjs/operators';
21
21
  import { UserInfoEngine } from '@memberjunction/core-entities';
22
22
  import { RegisterClass } from '@memberjunction/global';
23
23
  import { BaseResourceComponent } from '@memberjunction/ng-shared';
24
+ import { AIEngineBase } from '@memberjunction/ai-engine-base';
24
25
  import * as i0 from "@angular/core";
25
- import * as i1 from "./executive-summary/executive-summary.component";
26
- import * as i2 from "./prompt-runs/prompt-run-analysis.component";
27
- import * as i3 from "./agent-runs/agent-run-analysis.component";
28
- import * as i4 from "./model-performance/model-performance.component";
29
- import * as i5 from "./cost-budget/cost-budget.component";
30
- import * as i6 from "./error-analysis/error-analysis.component";
31
- import * as i7 from "./usage-patterns/usage-patterns.component";
32
- const _forTrack0 = ($index, $item) => $item.Key;
33
- function AIAnalyticsResourceComponent_For_7_Conditional_0_Template(rf, ctx) { if (rf & 1) {
34
- i0.ɵɵelement(0, "div", 7);
35
- } }
36
- function AIAnalyticsResourceComponent_For_7_Conditional_1_Template(rf, ctx) { if (rf & 1) {
26
+ import * as i1 from "@memberjunction/ng-ui-components";
27
+ import * as i2 from "./executive-summary/executive-summary.component";
28
+ import * as i3 from "./prompt-runs/prompt-run-analysis.component";
29
+ import * as i4 from "./agent-runs/agent-run-analysis.component";
30
+ import * as i5 from "./model-performance/model-performance.component";
31
+ import * as i6 from "./cost-budget/cost-budget.component";
32
+ import * as i7 from "./error-analysis/error-analysis.component";
33
+ import * as i8 from "./usage-patterns/usage-patterns.component";
34
+ const _c0 = ["executiveSummary"];
35
+ const _c1 = ["promptRuns"];
36
+ const _forTrack0 = ($index, $item) => $item.value;
37
+ function AIAnalyticsResourceComponent_Conditional_7_Template(rf, ctx) { if (rf & 1) {
37
38
  const _r1 = i0.ɵɵgetCurrentView();
38
- i0.ɵɵelementStart(0, "button", 9);
39
- i0.ɵɵlistener("click", function AIAnalyticsResourceComponent_For_7_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r1); const item_r2 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OnSectionChange(item_r2.Key)); });
40
- i0.ɵɵelement(1, "i");
41
- i0.ɵɵelementStart(2, "span");
42
- i0.ɵɵtext(3);
39
+ i0.ɵɵelementStart(0, "mj-filter-popover", 16);
40
+ i0.ɵɵlistener("ClearAllRequested", function AIAnalyticsResourceComponent_Conditional_7_Template_mj_filter_popover_ClearAllRequested_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.resetPopoverFilters()); });
41
+ i0.ɵɵelementStart(1, "mj-filter-panel", 17);
42
+ i0.ɵɵlistener("ValuesChange", function AIAnalyticsResourceComponent_Conditional_7_Template_mj_filter_panel_ValuesChange_1_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onAnalyticsFilterValuesChange($event)); })("Reset", function AIAnalyticsResourceComponent_Conditional_7_Template_mj_filter_panel_Reset_1_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.resetPopoverFilters()); });
43
43
  i0.ɵɵelementEnd()();
44
44
  } if (rf & 2) {
45
- const item_r2 = i0.ɵɵnextContext().$implicit;
46
- const ctx_r2 = i0.ɵɵnextContext();
47
- i0.ɵɵclassProp("active", ctx_r2.ActiveSection === item_r2.Key);
45
+ const ctx_r1 = i0.ɵɵnextContext();
46
+ i0.ɵɵproperty("ActiveCount", ctx_r1.ActiveFilterCount)("ShowClearAll", ctx_r1.ActiveFilterCount > 0);
48
47
  i0.ɵɵadvance();
49
- i0.ɵɵclassMap(item_r2.Icon);
50
- i0.ɵɵadvance(2);
51
- i0.ɵɵtextInterpolate(item_r2.Label);
48
+ i0.ɵɵproperty("Fields", ctx_r1.analyticsFilterFields)("Values", ctx_r1.analyticsFilterValues);
52
49
  } }
53
- function AIAnalyticsResourceComponent_For_7_Template(rf, ctx) { if (rf & 1) {
54
- i0.ɵɵconditionalCreate(0, AIAnalyticsResourceComponent_For_7_Conditional_0_Template, 1, 0, "div", 7)(1, AIAnalyticsResourceComponent_For_7_Conditional_1_Template, 4, 5, "button", 8);
50
+ function AIAnalyticsResourceComponent_Conditional_8_Template(rf, ctx) { if (rf & 1) {
51
+ const _r3 = i0.ɵɵgetCurrentView();
52
+ i0.ɵɵelementStart(0, "button", 18);
53
+ i0.ɵɵtwoWayListener("selectedChange", function AIAnalyticsResourceComponent_Conditional_8_Template_button_selectedChange_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.compareActive, $event) || (ctx_r1.compareActive = $event); return i0.ɵɵresetView($event); });
54
+ i0.ɵɵlistener("selectedChange", function AIAnalyticsResourceComponent_Conditional_8_Template_button_selectedChange_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleCompare()); });
55
+ i0.ɵɵelement(1, "i", 19);
56
+ i0.ɵɵtext(2, " Compare ");
57
+ i0.ɵɵelementEnd();
55
58
  } if (rf & 2) {
56
- const item_r2 = ctx.$implicit;
57
- i0.ɵɵconditional(item_r2.Key === "divider" ? 0 : 1);
59
+ const ctx_r1 = i0.ɵɵnextContext();
60
+ i0.ɵɵproperty("toggleable", true);
61
+ i0.ɵɵtwoWayProperty("selected", ctx_r1.compareActive);
58
62
  } }
59
- function AIAnalyticsResourceComponent_Case_9_Template(rf, ctx) { if (rf & 1) {
63
+ function AIAnalyticsResourceComponent_Conditional_9_Template(rf, ctx) { if (rf & 1) {
60
64
  const _r4 = i0.ɵɵgetCurrentView();
61
- i0.ɵɵelementStart(0, "app-analytics-executive-summary", 10);
62
- i0.ɵɵlistener("TimeRangeChange", function AIAnalyticsResourceComponent_Case_9_Template_app_analytics_executive_summary_TimeRangeChange_0_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OnTimeRangeChange($event)); })("FiltersChange", function AIAnalyticsResourceComponent_Case_9_Template_app_analytics_executive_summary_FiltersChange_0_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OnFiltersChange($event)); })("SectionNavigate", function AIAnalyticsResourceComponent_Case_9_Template_app_analytics_executive_summary_SectionNavigate_0_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OnSectionChange($event)); });
65
+ i0.ɵɵelementStart(0, "button", 20);
66
+ i0.ɵɵlistener("click", function AIAnalyticsResourceComponent_Conditional_9_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnExportClicked()); });
67
+ i0.ɵɵelement(1, "i", 21);
68
+ i0.ɵɵtext(2, " Export ");
63
69
  i0.ɵɵelementEnd();
64
- } if (rf & 2) {
65
- const ctx_r2 = i0.ɵɵnextContext();
66
- i0.ɵɵproperty("TimeRange", ctx_r2.CurrentTimeRange)("Filters", ctx_r2.CurrentFilters);
67
70
  } }
68
- function AIAnalyticsResourceComponent_Case_10_Template(rf, ctx) { if (rf & 1) {
71
+ function AIAnalyticsResourceComponent_Conditional_10_For_2_Template(rf, ctx) { if (rf & 1) {
69
72
  const _r5 = i0.ɵɵgetCurrentView();
70
- i0.ɵɵelementStart(0, "app-analytics-prompt-runs", 11);
71
- i0.ɵɵlistener("TimeRangeChange", function AIAnalyticsResourceComponent_Case_10_Template_app_analytics_prompt_runs_TimeRangeChange_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OnTimeRangeChange($event)); })("FiltersChange", function AIAnalyticsResourceComponent_Case_10_Template_app_analytics_prompt_runs_FiltersChange_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OnFiltersChange($event)); });
72
- i0.ɵɵelementEnd();
73
- } if (rf & 2) {
74
- const ctx_r2 = i0.ɵɵnextContext();
75
- i0.ɵɵproperty("TimeRange", ctx_r2.CurrentTimeRange)("Filters", ctx_r2.CurrentFilters);
76
- } }
77
- function AIAnalyticsResourceComponent_Case_11_Template(rf, ctx) { if (rf & 1) {
78
- const _r6 = i0.ɵɵgetCurrentView();
79
- i0.ɵɵelementStart(0, "app-analytics-agent-runs", 12);
80
- i0.ɵɵlistener("TimeRangeChange", function AIAnalyticsResourceComponent_Case_11_Template_app_analytics_agent_runs_TimeRangeChange_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OnTimeRangeChange($event)); });
73
+ i0.ɵɵelementStart(0, "mj-filter-chip", 23);
74
+ i0.ɵɵlistener("Clicked", function AIAnalyticsResourceComponent_Conditional_10_For_2_Template_mj_filter_chip_Clicked_0_listener() { const chip_r6 = i0.ɵɵrestoreView(_r5).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnTimeRangeChange(chip_r6.value)); });
81
75
  i0.ɵɵelementEnd();
82
76
  } if (rf & 2) {
83
- const ctx_r2 = i0.ɵɵnextContext();
84
- i0.ɵɵproperty("TimeRange", ctx_r2.CurrentTimeRange);
77
+ const chip_r6 = ctx.$implicit;
78
+ const ctx_r1 = i0.ɵɵnextContext(2);
79
+ i0.ɵɵproperty("Label", chip_r6.text)("Active", ctx_r1.CurrentTimeRange === chip_r6.value);
85
80
  } }
86
- function AIAnalyticsResourceComponent_Case_12_Template(rf, ctx) { if (rf & 1) {
87
- const _r7 = i0.ɵɵgetCurrentView();
88
- i0.ɵɵelementStart(0, "app-analytics-model-performance", 12);
89
- i0.ɵɵlistener("TimeRangeChange", function AIAnalyticsResourceComponent_Case_12_Template_app_analytics_model_performance_TimeRangeChange_0_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OnTimeRangeChange($event)); });
81
+ function AIAnalyticsResourceComponent_Conditional_10_Template(rf, ctx) { if (rf & 1) {
82
+ i0.ɵɵelementStart(0, "div", 10);
83
+ i0.ɵɵrepeaterCreate(1, AIAnalyticsResourceComponent_Conditional_10_For_2_Template, 1, 2, "mj-filter-chip", 22, _forTrack0);
90
84
  i0.ɵɵelementEnd();
91
85
  } if (rf & 2) {
92
- const ctx_r2 = i0.ɵɵnextContext();
93
- i0.ɵɵproperty("TimeRange", ctx_r2.CurrentTimeRange);
86
+ const ctx_r1 = i0.ɵɵnextContext();
87
+ i0.ɵɵadvance();
88
+ i0.ɵɵrepeater(ctx_r1.timeRangeChipOptions);
94
89
  } }
95
90
  function AIAnalyticsResourceComponent_Case_13_Template(rf, ctx) { if (rf & 1) {
96
- const _r8 = i0.ɵɵgetCurrentView();
97
- i0.ɵɵelementStart(0, "app-analytics-cost-budget", 11);
98
- i0.ɵɵlistener("TimeRangeChange", function AIAnalyticsResourceComponent_Case_13_Template_app_analytics_cost_budget_TimeRangeChange_0_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OnTimeRangeChange($event)); })("FiltersChange", function AIAnalyticsResourceComponent_Case_13_Template_app_analytics_cost_budget_FiltersChange_0_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OnFiltersChange($event)); });
91
+ const _r7 = i0.ɵɵgetCurrentView();
92
+ i0.ɵɵelementStart(0, "app-analytics-executive-summary", 24, 0);
93
+ i0.ɵɵlistener("SectionNavigate", function AIAnalyticsResourceComponent_Case_13_Template_app_analytics_executive_summary_SectionNavigate_0_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnSectionChange($event)); });
99
94
  i0.ɵɵelementEnd();
100
95
  } if (rf & 2) {
101
- const ctx_r2 = i0.ɵɵnextContext();
102
- i0.ɵɵproperty("TimeRange", ctx_r2.CurrentTimeRange)("Filters", ctx_r2.CurrentFilters);
96
+ const ctx_r1 = i0.ɵɵnextContext();
97
+ i0.ɵɵproperty("TimeRange", ctx_r1.CurrentTimeRange)("Filters", ctx_r1.CurrentFilters);
103
98
  } }
104
99
  function AIAnalyticsResourceComponent_Case_14_Template(rf, ctx) { if (rf & 1) {
105
- i0.ɵɵelement(0, "app-analytics-error-analysis", 5);
100
+ i0.ɵɵelement(0, "app-analytics-prompt-runs", 13, 1);
106
101
  } if (rf & 2) {
107
- const ctx_r2 = i0.ɵɵnextContext();
108
- i0.ɵɵproperty("TimeRange", ctx_r2.CurrentTimeRange)("Filters", ctx_r2.CurrentFilters);
102
+ const ctx_r1 = i0.ɵɵnextContext();
103
+ i0.ɵɵproperty("TimeRange", ctx_r1.CurrentTimeRange)("Filters", ctx_r1.CurrentFilters);
109
104
  } }
110
105
  function AIAnalyticsResourceComponent_Case_15_Template(rf, ctx) { if (rf & 1) {
111
- const _r9 = i0.ɵɵgetCurrentView();
112
- i0.ɵɵelementStart(0, "app-analytics-usage-patterns", 12);
113
- i0.ɵɵlistener("TimeRangeChange", function AIAnalyticsResourceComponent_Case_15_Template_app_analytics_usage_patterns_TimeRangeChange_0_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OnTimeRangeChange($event)); });
114
- i0.ɵɵelementEnd();
106
+ i0.ɵɵelement(0, "app-analytics-agent-runs", 13);
107
+ } if (rf & 2) {
108
+ const ctx_r1 = i0.ɵɵnextContext();
109
+ i0.ɵɵproperty("TimeRange", ctx_r1.CurrentTimeRange)("Filters", ctx_r1.CurrentFilters);
110
+ } }
111
+ function AIAnalyticsResourceComponent_Case_16_Template(rf, ctx) { if (rf & 1) {
112
+ i0.ɵɵelement(0, "app-analytics-model-performance", 14);
113
+ } if (rf & 2) {
114
+ const ctx_r1 = i0.ɵɵnextContext();
115
+ i0.ɵɵproperty("TimeRange", ctx_r1.CurrentTimeRange)("SortBy", ctx_r1.CurrentSortBy)("SelectedVendor", ctx_r1.CurrentVendor);
116
+ } }
117
+ function AIAnalyticsResourceComponent_Case_17_Template(rf, ctx) { if (rf & 1) {
118
+ i0.ɵɵelement(0, "app-analytics-cost-budget", 13);
119
+ } if (rf & 2) {
120
+ const ctx_r1 = i0.ɵɵnextContext();
121
+ i0.ɵɵproperty("TimeRange", ctx_r1.CurrentTimeRange)("Filters", ctx_r1.CurrentFilters);
122
+ } }
123
+ function AIAnalyticsResourceComponent_Case_18_Template(rf, ctx) { if (rf & 1) {
124
+ i0.ɵɵelement(0, "app-analytics-error-analysis", 13);
115
125
  } if (rf & 2) {
116
- const ctx_r2 = i0.ɵɵnextContext();
117
- i0.ɵɵproperty("TimeRange", ctx_r2.CurrentTimeRange);
126
+ const ctx_r1 = i0.ɵɵnextContext();
127
+ i0.ɵɵproperty("TimeRange", ctx_r1.CurrentTimeRange)("Filters", ctx_r1.CurrentFilters);
128
+ } }
129
+ function AIAnalyticsResourceComponent_Case_19_Template(rf, ctx) { if (rf & 1) {
130
+ i0.ɵɵelement(0, "app-analytics-usage-patterns", 15);
131
+ } if (rf & 2) {
132
+ const ctx_r1 = i0.ɵɵnextContext();
133
+ i0.ɵɵproperty("TimeRange", ctx_r1.CurrentTimeRange);
118
134
  } }
119
135
  let AIAnalyticsResourceComponent = class AIAnalyticsResourceComponent extends BaseResourceComponent {
120
136
  USER_SETTINGS_KEY = 'AI.Analytics.UserPreferences';
@@ -122,6 +138,8 @@ let AIAnalyticsResourceComponent = class AIAnalyticsResourceComponent extends Ba
122
138
  destroy$ = new Subject();
123
139
  settingsLoaded = false;
124
140
  cdr = inject(ChangeDetectorRef);
141
+ executiveSummary;
142
+ promptRuns;
125
143
  ActiveSection = 'executive-summary';
126
144
  CurrentTimeRange = '24h';
127
145
  CurrentFilters = {
@@ -130,16 +148,247 @@ let AIAnalyticsResourceComponent = class AIAnalyticsResourceComponent extends Ba
130
148
  Prompts: [],
131
149
  Statuses: []
132
150
  };
151
+ /** Single-value SortBy used by Model Performance (lives on the shared chrome). */
152
+ CurrentSortBy = 'cost-efficiency';
153
+ /** Single-value Vendor filter used by Model Performance (lives on the shared chrome). */
154
+ CurrentVendor = '';
155
+ /** SortBy options for Model Performance leaderboard. */
156
+ sortByOptions = [
157
+ { text: 'By Performance', value: 'cost-efficiency' },
158
+ { text: 'By Cost', value: 'cost' },
159
+ { text: 'By Speed', value: 'speed' },
160
+ { text: 'By Reliability', value: 'reliability' },
161
+ { text: 'By Usage', value: 'usage-volume' }
162
+ ];
163
+ /** Vendor options, lazily built from AIEngineBase for Model Performance leaderboard. */
164
+ get vendorOptions() {
165
+ return AIEngineBase.Instance?.Vendors?.map(v => ({ text: v.Name ?? '', value: v.ID ?? '' }))
166
+ ?.sort((a, b) => a.text.localeCompare(b.text)) ?? [];
167
+ }
168
+ /** Per-section filter-bar config — switched on ActiveSection. */
169
+ get FilterBarConfig() {
170
+ switch (this.ActiveSection) {
171
+ case 'executive-summary':
172
+ return { ShowModelFilter: false, ShowAgentFilter: false, ShowPromptFilter: false, ShowStatusFilter: false, ShowSortBy: false, ShowVendor: false, ShowCompareToggle: true, ShowExportButton: false, TimeRangeOptions: ['1h', '6h', '24h', '7d', '30d'] };
173
+ case 'prompt-runs':
174
+ return { ShowModelFilter: true, ShowAgentFilter: true, ShowPromptFilter: true, ShowStatusFilter: true, ShowSortBy: false, ShowVendor: false, ShowCompareToggle: false, ShowExportButton: true, TimeRangeOptions: ['1h', '6h', '24h', '7d', '30d'] };
175
+ case 'agent-runs':
176
+ return { ShowModelFilter: false, ShowAgentFilter: true, ShowPromptFilter: false, ShowStatusFilter: true, ShowSortBy: false, ShowVendor: false, ShowCompareToggle: false, ShowExportButton: false, TimeRangeOptions: ['1h', '6h', '24h', '7d', '30d'] };
177
+ case 'model-performance':
178
+ return { ShowModelFilter: false, ShowAgentFilter: false, ShowPromptFilter: false, ShowStatusFilter: false, ShowSortBy: true, ShowVendor: true, ShowCompareToggle: false, ShowExportButton: false, TimeRangeOptions: ['24h', '7d', '30d'] };
179
+ case 'cost-budget':
180
+ return { ShowModelFilter: true, ShowAgentFilter: false, ShowPromptFilter: false, ShowStatusFilter: false, ShowSortBy: false, ShowVendor: false, ShowCompareToggle: false, ShowExportButton: false, TimeRangeOptions: ['7d', '30d', '90d', 'MTD', 'YTD'] };
181
+ case 'error-analysis':
182
+ return { ShowModelFilter: true, ShowAgentFilter: false, ShowPromptFilter: true, ShowStatusFilter: false, ShowSortBy: false, ShowVendor: false, ShowCompareToggle: false, ShowExportButton: false, TimeRangeOptions: ['1h', '6h', '24h', '7d', '30d'] };
183
+ case 'usage-patterns':
184
+ return { ShowModelFilter: false, ShowAgentFilter: false, ShowPromptFilter: false, ShowStatusFilter: false, ShowSortBy: false, ShowVendor: false, ShowCompareToggle: false, ShowExportButton: false, TimeRangeOptions: ['1h', '6h', '24h', '7d', '30d'] };
185
+ default:
186
+ return { ShowModelFilter: false, ShowAgentFilter: false, ShowPromptFilter: false, ShowStatusFilter: false, ShowSortBy: false, ShowVendor: false, ShowCompareToggle: false, ShowExportButton: false, TimeRangeOptions: ['1h', '6h', '24h', '7d', '30d'] };
187
+ }
188
+ }
189
+ /**
190
+ * Always true now — every section uses the shared chrome filter bar.
191
+ * Kept as a getter for future per-section carve-outs.
192
+ */
193
+ get ShowSharedFilterBar() {
194
+ return true;
195
+ }
196
+ /** Status options used by the popover dropdown when the section has ShowStatusFilter. */
197
+ statusOptions = [
198
+ { text: 'Success', value: 'Success' },
199
+ { text: 'Error', value: 'Error' },
200
+ { text: 'Running', value: 'Running' },
201
+ { text: 'Pending', value: 'Pending' },
202
+ { text: 'Canceled', value: 'Canceled' },
203
+ ];
204
+ /** Built lazily from AIEngineBase. */
205
+ get modelOptions() {
206
+ return AIEngineBase.Instance?.Models?.map(m => ({ text: m.Name ?? '', value: m.ID }))
207
+ ?.sort((a, b) => a.text.localeCompare(b.text)) ?? [];
208
+ }
209
+ get agentOptions() {
210
+ return AIEngineBase.Instance?.Agents
211
+ ?.filter(a => a.Status === 'Active')
212
+ ?.map(a => ({ text: a.Name ?? '', value: a.ID }))
213
+ ?.sort((a, b) => a.text.localeCompare(b.text)) ?? [];
214
+ }
215
+ get promptOptions() {
216
+ return AIEngineBase.Instance?.Prompts?.map(p => ({ text: p.Name ?? '', value: p.ID }))
217
+ ?.sort((a, b) => a.text.localeCompare(b.text)) ?? [];
218
+ }
219
+ /** Time-range chip options for the toolbar slot. */
220
+ get timeRangeChipOptions() {
221
+ return this.FilterBarConfig.TimeRangeOptions.map(t => ({ text: t, value: t }));
222
+ }
223
+ /** Compare-mode visual state (kept on the shell now that analytics-filter-bar is gone). */
224
+ compareActive = false;
225
+ /** Build the FilterFieldConfig[] for the popover based on the active section. */
226
+ get analyticsFilterFields() {
227
+ const cfg = this.FilterBarConfig;
228
+ const fields = [];
229
+ if (cfg.ShowModelFilter) {
230
+ fields.push({
231
+ key: 'Models',
232
+ type: 'dropdown',
233
+ label: 'Model',
234
+ icon: 'fa-solid fa-microchip',
235
+ filterable: this.modelOptions.length > 10,
236
+ options: [{ text: 'All Models', value: '' }, ...this.modelOptions],
237
+ });
238
+ }
239
+ if (cfg.ShowAgentFilter) {
240
+ fields.push({
241
+ key: 'Agents',
242
+ type: 'dropdown',
243
+ label: 'Agent',
244
+ icon: 'fa-solid fa-robot',
245
+ filterable: this.agentOptions.length > 10,
246
+ options: [{ text: 'All Agents', value: '' }, ...this.agentOptions],
247
+ });
248
+ }
249
+ if (cfg.ShowPromptFilter) {
250
+ fields.push({
251
+ key: 'Prompts',
252
+ type: 'dropdown',
253
+ label: 'Prompt',
254
+ icon: 'fa-solid fa-comment-dots',
255
+ filterable: this.promptOptions.length > 10,
256
+ options: [{ text: 'All Prompts', value: '' }, ...this.promptOptions],
257
+ });
258
+ }
259
+ if (cfg.ShowStatusFilter) {
260
+ fields.push({
261
+ key: 'Statuses',
262
+ type: 'dropdown',
263
+ label: 'Status',
264
+ icon: 'fa-solid fa-toggle-on',
265
+ options: [{ text: 'All Statuses', value: '' }, ...this.statusOptions],
266
+ });
267
+ }
268
+ if (cfg.ShowSortBy) {
269
+ fields.push({
270
+ key: 'SortBy',
271
+ type: 'dropdown',
272
+ label: 'Sort By',
273
+ icon: 'fa-solid fa-arrow-down-wide-short',
274
+ options: this.sortByOptions,
275
+ });
276
+ }
277
+ if (cfg.ShowVendor) {
278
+ fields.push({
279
+ key: 'Vendor',
280
+ type: 'dropdown',
281
+ label: 'Vendor',
282
+ icon: 'fa-solid fa-building',
283
+ filterable: this.vendorOptions.length > 10,
284
+ options: [{ text: 'All Vendors', value: '' }, ...this.vendorOptions],
285
+ });
286
+ }
287
+ return fields;
288
+ }
289
+ /** Single-value flattened state for the centralized panel (the panel takes scalar values; we hold arrays in CurrentFilters). */
290
+ get analyticsFilterValues() {
291
+ return {
292
+ Models: this.CurrentFilters.Models?.[0] ?? '',
293
+ Agents: this.CurrentFilters.Agents?.[0] ?? '',
294
+ Prompts: this.CurrentFilters.Prompts?.[0] ?? '',
295
+ Statuses: this.CurrentFilters.Statuses?.[0] ?? '',
296
+ SortBy: this.CurrentSortBy,
297
+ Vendor: this.CurrentVendor,
298
+ };
299
+ }
300
+ /** Receive popover updates and translate scalar → array shape used by GlobalFilterState. */
301
+ onAnalyticsFilterValuesChange(values) {
302
+ const next = {
303
+ Models: values['Models'] ? [values['Models']] : [],
304
+ Agents: values['Agents'] ? [values['Agents']] : [],
305
+ Prompts: values['Prompts'] ? [values['Prompts']] : [],
306
+ Statuses: values['Statuses'] ? [values['Statuses']] : [],
307
+ };
308
+ this.OnFiltersChange(next);
309
+ if ('SortBy' in values) {
310
+ this.CurrentSortBy = values['SortBy'] || 'cost-efficiency';
311
+ }
312
+ if ('Vendor' in values) {
313
+ this.CurrentVendor = values['Vendor'] || '';
314
+ }
315
+ }
316
+ /** Reset only the popover filters — leaves TimeRange and CompareActive alone. */
317
+ resetPopoverFilters() {
318
+ this.OnFiltersChange({ Models: [], Agents: [], Prompts: [], Statuses: [] });
319
+ // SortBy + Vendor reset only when Model Performance is the active section.
320
+ if (this.ActiveSection === 'model-performance') {
321
+ this.CurrentSortBy = 'cost-efficiency';
322
+ this.CurrentVendor = '';
323
+ }
324
+ }
325
+ /** Active filter count for the popover badge. */
326
+ get ActiveFilterCount() {
327
+ const f = this.CurrentFilters;
328
+ let count = (f.Models?.length ?? 0) + (f.Agents?.length ?? 0) + (f.Prompts?.length ?? 0) + (f.Statuses?.length ?? 0);
329
+ // SortBy counts as "active" when it differs from the default.
330
+ if (this.FilterBarConfig.ShowSortBy && this.CurrentSortBy && this.CurrentSortBy !== 'cost-efficiency')
331
+ count++;
332
+ if (this.FilterBarConfig.ShowVendor && this.CurrentVendor)
333
+ count++;
334
+ return count;
335
+ }
336
+ /** Toggle Compare mode — the mjButton directive owns the [(selected)] flip, so this handler only forwards the new value. */
337
+ toggleCompare() {
338
+ this.OnCompareToggled(this.compareActive);
339
+ }
133
340
  NavItems = [
134
- { Label: 'Executive Summary', Icon: 'fa-solid fa-gauge-high', Key: 'executive-summary' },
135
- { Label: 'Prompt Runs', Icon: 'fa-solid fa-comment-dots', Key: 'prompt-runs' },
136
- { Label: 'Agent Runs', Icon: 'fa-solid fa-robot', Key: 'agent-runs' },
137
- { Label: 'Model Performance', Icon: 'fa-solid fa-microchip', Key: 'model-performance' },
341
+ { Label: 'Executive Summary', Icon: 'fa-solid fa-gauge-high', Key: 'executive-summary',
342
+ Description: 'High-level KPIs and trends across the platform' },
343
+ { Label: 'Prompt Runs', Icon: 'fa-solid fa-comment-dots', Key: 'prompt-runs',
344
+ Description: 'Detailed analysis of individual prompt executions' },
345
+ { Label: 'Agent Runs', Icon: 'fa-solid fa-robot', Key: 'agent-runs',
346
+ Description: 'Performance breakdown by agent' },
347
+ { Label: 'Model Performance', Icon: 'fa-solid fa-microchip', Key: 'model-performance',
348
+ Description: 'Compare models across cost, speed, and quality' },
138
349
  { Key: 'divider' },
139
- { Label: 'Cost & Budget', Icon: 'fa-solid fa-coins', Key: 'cost-budget' },
140
- { Label: 'Error Analysis', Icon: 'fa-solid fa-triangle-exclamation', Key: 'error-analysis' },
141
- { Label: 'Usage Patterns', Icon: 'fa-solid fa-clock', Key: 'usage-patterns' },
350
+ { Label: 'Cost & Budget', Icon: 'fa-solid fa-coins', Key: 'cost-budget',
351
+ Description: 'Spend trends and budget tracking' },
352
+ { Label: 'Error Analysis', Icon: 'fa-solid fa-triangle-exclamation', Key: 'error-analysis',
353
+ Description: 'Failure patterns and root causes' },
354
+ { Label: 'Usage Patterns', Icon: 'fa-solid fa-clock', Key: 'usage-patterns',
355
+ Description: 'Volume, frequency, and concurrency over time' },
142
356
  ];
357
+ /**
358
+ * Active section metadata — drives <mj-page-header-interior> Title +
359
+ * Subtitle. Mirrors the pattern in KH Configuration / KH Analytics: one
360
+ * source of truth (NavItems) used both to build the rail and to render
361
+ * per-section identity.
362
+ */
363
+ get currentSection() {
364
+ return this.NavItems.find(n => n.Key === this.ActiveSection);
365
+ }
366
+ /**
367
+ * Wraps `NavItems` for `<mj-left-nav>`. The `{ Key: 'divider' }` entry
368
+ * splits the items into two `MJLeftNavSection`s (an unlabeled section per
369
+ * group) — the rail's natural section break replaces the bespoke
370
+ * `.nav-divider` line.
371
+ */
372
+ get navSections() {
373
+ const sections = [{ items: [] }];
374
+ for (const item of this.NavItems) {
375
+ if (item.Key === 'divider') {
376
+ sections.push({ items: [] });
377
+ }
378
+ else {
379
+ sections[sections.length - 1].items.push({
380
+ id: item.Key,
381
+ label: item.Label ?? '',
382
+ icon: item.Icon
383
+ });
384
+ }
385
+ }
386
+ return sections;
387
+ }
388
+ /** Adapter for `<mj-left-nav>`'s `(ItemClicked)` output. */
389
+ onNavItemClicked(item) {
390
+ this.OnSectionChange(item.id);
391
+ }
143
392
  async ngOnInit() {
144
393
  super.ngOnInit();
145
394
  this.setupSettingsDebounce();
@@ -176,6 +425,14 @@ let AIAnalyticsResourceComponent = class AIAnalyticsResourceComponent extends Ba
176
425
  this.CurrentFilters = filters;
177
426
  this.saveUserSettings();
178
427
  }
428
+ /** Compare-toggle button — only visible on Executive Summary; forwards to that section. */
429
+ OnCompareToggled(value) {
430
+ this.executiveSummary?.OnCompareToggled?.(value);
431
+ }
432
+ /** Export button — only visible on Prompt Runs; forwards to that section. */
433
+ OnExportClicked() {
434
+ this.promptRuns?.ExportCSV?.();
435
+ }
179
436
  // ── Private Helpers ──
180
437
  setupSettingsDebounce() {
181
438
  this.settingsPersistSubject.pipe(debounceTime(500), takeUntil(this.destroy$)).subscribe(() => this.persistUserSettings());
@@ -246,24 +503,49 @@ let AIAnalyticsResourceComponent = class AIAnalyticsResourceComponent extends Ba
246
503
  }
247
504
  }
248
505
  static ɵfac = /*@__PURE__*/ (() => { let ɵAIAnalyticsResourceComponent_BaseFactory; return function AIAnalyticsResourceComponent_Factory(__ngFactoryType__) { return (ɵAIAnalyticsResourceComponent_BaseFactory || (ɵAIAnalyticsResourceComponent_BaseFactory = i0.ɵɵgetInheritedFactory(AIAnalyticsResourceComponent)))(__ngFactoryType__ || AIAnalyticsResourceComponent); }; })();
249
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AIAnalyticsResourceComponent, selectors: [["app-ai-analytics-resource"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 16, vars: 1, consts: [[1, "analytics-shell"], [1, "analytics-nav"], [1, "nav-header"], [1, "fa-solid", "fa-chart-line"], [1, "analytics-content"], [3, "TimeRange", "Filters"], [3, "TimeRange"], [1, "nav-divider"], [1, "nav-item", 3, "active"], [1, "nav-item", 3, "click"], [3, "TimeRangeChange", "FiltersChange", "SectionNavigate", "TimeRange", "Filters"], [3, "TimeRangeChange", "FiltersChange", "TimeRange", "Filters"], [3, "TimeRangeChange", "TimeRange"]], template: function AIAnalyticsResourceComponent_Template(rf, ctx) { if (rf & 1) {
250
- i0.ɵɵelementStart(0, "div", 0)(1, "nav", 1)(2, "div", 2);
251
- i0.ɵɵelement(3, "i", 3);
252
- i0.ɵɵelementStart(4, "span");
253
- i0.ɵɵtext(5, "AI Analytics");
254
- i0.ɵɵelementEnd()();
255
- i0.ɵɵrepeaterCreate(6, AIAnalyticsResourceComponent_For_7_Template, 2, 1, null, null, _forTrack0);
506
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AIAnalyticsResourceComponent, selectors: [["app-ai-analytics-resource"]], viewQuery: function AIAnalyticsResourceComponent_Query(rf, ctx) { if (rf & 1) {
507
+ i0.ɵɵviewQuery(_c0, 5)(_c1, 5);
508
+ } if (rf & 2) {
509
+ let _t;
510
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.executiveSummary = _t.first);
511
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.promptRuns = _t.first);
512
+ } }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 20, vars: 11, consts: [["executiveSummary", ""], ["promptRuns", ""], ["Title", "AI Analytics", "Icon", "fa-solid fa-chart-line", "Subtitle", "Performance, cost, and usage analytics"], [1, "analytics-shell", 3, "Padding"], [3, "ItemClicked", "Sections", "ActiveId"], [3, "Title", "Subtitle"], ["actions", ""], [3, "ActiveCount", "ShowClearAll"], ["mjButton", "", "variant", "secondary", "size", "sm", 3, "toggleable", "selected"], ["mjButton", "", "variant", "secondary", "size", "sm"], ["toolbar", "", 1, "time-range-chips"], [3, "Padding"], [1, "analytics-content"], [3, "TimeRange", "Filters"], [3, "TimeRange", "SortBy", "SelectedVendor"], [3, "TimeRange"], [3, "ClearAllRequested", "ActiveCount", "ShowClearAll"], [3, "ValuesChange", "Reset", "Fields", "Values"], ["mjButton", "", "variant", "secondary", "size", "sm", 3, "selectedChange", "toggleable", "selected"], [1, "fa-solid", "fa-code-compare"], ["mjButton", "", "variant", "secondary", "size", "sm", 3, "click"], [1, "fa-solid", "fa-download"], [3, "Label", "Active"], [3, "Clicked", "Label", "Active"], [3, "SectionNavigate", "TimeRange", "Filters"]], template: function AIAnalyticsResourceComponent_Template(rf, ctx) { if (rf & 1) {
513
+ i0.ɵɵelementStart(0, "mj-page-layout");
514
+ i0.ɵɵelement(1, "mj-page-header", 2);
515
+ i0.ɵɵelementStart(2, "mj-page-body", 3)(3, "mj-left-nav", 4);
516
+ i0.ɵɵlistener("ItemClicked", function AIAnalyticsResourceComponent_Template_mj_left_nav_ItemClicked_3_listener($event) { return ctx.onNavItemClicked($event); });
517
+ i0.ɵɵelementEnd();
518
+ i0.ɵɵelementStart(4, "mj-left-nav-content")(5, "mj-page-header-interior", 5)(6, "div", 6);
519
+ i0.ɵɵconditionalCreate(7, AIAnalyticsResourceComponent_Conditional_7_Template, 2, 4, "mj-filter-popover", 7);
520
+ i0.ɵɵconditionalCreate(8, AIAnalyticsResourceComponent_Conditional_8_Template, 3, 2, "button", 8);
521
+ i0.ɵɵconditionalCreate(9, AIAnalyticsResourceComponent_Conditional_9_Template, 3, 0, "button", 9);
256
522
  i0.ɵɵelementEnd();
257
- i0.ɵɵelementStart(8, "div", 4);
258
- i0.ɵɵconditionalCreate(9, AIAnalyticsResourceComponent_Case_9_Template, 1, 2, "app-analytics-executive-summary", 5)(10, AIAnalyticsResourceComponent_Case_10_Template, 1, 2, "app-analytics-prompt-runs", 5)(11, AIAnalyticsResourceComponent_Case_11_Template, 1, 1, "app-analytics-agent-runs", 6)(12, AIAnalyticsResourceComponent_Case_12_Template, 1, 1, "app-analytics-model-performance", 6)(13, AIAnalyticsResourceComponent_Case_13_Template, 1, 2, "app-analytics-cost-budget", 5)(14, AIAnalyticsResourceComponent_Case_14_Template, 1, 2, "app-analytics-error-analysis", 5)(15, AIAnalyticsResourceComponent_Case_15_Template, 1, 1, "app-analytics-usage-patterns", 6);
259
- i0.ɵɵelementEnd()();
523
+ i0.ɵɵconditionalCreate(10, AIAnalyticsResourceComponent_Conditional_10_Template, 3, 0, "div", 10);
524
+ i0.ɵɵelementEnd();
525
+ i0.ɵɵelementStart(11, "mj-page-body-interior", 11)(12, "div", 12);
526
+ i0.ɵɵconditionalCreate(13, AIAnalyticsResourceComponent_Case_13_Template, 2, 2, "app-analytics-executive-summary", 13)(14, AIAnalyticsResourceComponent_Case_14_Template, 2, 2, "app-analytics-prompt-runs", 13)(15, AIAnalyticsResourceComponent_Case_15_Template, 1, 2, "app-analytics-agent-runs", 13)(16, AIAnalyticsResourceComponent_Case_16_Template, 1, 3, "app-analytics-model-performance", 14)(17, AIAnalyticsResourceComponent_Case_17_Template, 1, 2, "app-analytics-cost-budget", 13)(18, AIAnalyticsResourceComponent_Case_18_Template, 1, 2, "app-analytics-error-analysis", 13)(19, AIAnalyticsResourceComponent_Case_19_Template, 1, 1, "app-analytics-usage-patterns", 15);
527
+ i0.ɵɵelementEnd()()()()();
260
528
  } if (rf & 2) {
261
- let tmp_1_0;
262
- i0.ɵɵadvance(6);
263
- i0.ɵɵrepeater(ctx.NavItems);
264
- i0.ɵɵadvance(3);
265
- i0.ɵɵconditional((tmp_1_0 = ctx.ActiveSection) === "executive-summary" ? 9 : tmp_1_0 === "prompt-runs" ? 10 : tmp_1_0 === "agent-runs" ? 11 : tmp_1_0 === "model-performance" ? 12 : tmp_1_0 === "cost-budget" ? 13 : tmp_1_0 === "error-analysis" ? 14 : tmp_1_0 === "usage-patterns" ? 15 : -1);
266
- } }, dependencies: [i1.AnalyticsExecutiveSummaryComponent, i2.AnalyticsPromptRunsComponent, i3.AnalyticsAgentRunsComponent, i4.AnalyticsModelPerformanceComponent, i5.AnalyticsCostBudgetComponent, i6.AnalyticsErrorAnalysisComponent, i7.AnalyticsUsagePatternsComponent], styles: ["[_nghost-%COMP%] {\n display: block;\n height: 100%;\n }\n\n .analytics-shell[_ngcontent-%COMP%] {\n display: flex;\n height: 100%;\n background: var(--mj-bg-page);\n }\n\n \n\n\n .analytics-nav[_ngcontent-%COMP%] {\n width: 220px;\n min-width: 220px;\n background: var(--mj-bg-surface);\n border-right: 1px solid var(--mj-border-default);\n display: flex;\n flex-direction: column;\n padding: 12px 0;\n overflow-y: auto;\n }\n\n .nav-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 8px 18px 16px;\n font-size: 15px;\n font-weight: 700;\n color: var(--mj-text-primary);\n border-bottom: 1px solid var(--mj-border-subtle);\n margin-bottom: 8px;\n }\n\n .nav-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 16px;\n }\n\n .nav-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 18px;\n border: none;\n border-left: 3px solid transparent;\n background: transparent;\n color: var(--mj-text-secondary);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.15s, color 0.15s, border-color 0.15s;\n text-align: left;\n width: 100%;\n }\n\n .nav-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n }\n\n .nav-item.active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-left-color: var(--mj-brand-primary);\n font-weight: 600;\n }\n\n .nav-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n width: 18px;\n text-align: center;\n font-size: 14px;\n }\n\n .nav-divider[_ngcontent-%COMP%] {\n height: 1px;\n background: var(--mj-border-subtle);\n margin: 8px 18px;\n }\n\n \n\n\n .analytics-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 24px;\n }\n\n \n\n\n .section-placeholder[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n padding: 80px 24px;\n color: var(--mj-text-muted);\n }\n\n .placeholder-icon[_ngcontent-%COMP%] {\n font-size: 48px;\n margin-bottom: 20px;\n color: var(--mj-brand-primary);\n opacity: 0.4;\n }\n\n .section-placeholder[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 8px;\n }\n\n .section-placeholder[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-muted);\n margin: 0;\n max-width: 420px;\n }\n\n \n\n\n @media (max-width: 768px) {\n .analytics-shell[_ngcontent-%COMP%] {\n flex-direction: column;\n }\n\n .analytics-nav[_ngcontent-%COMP%] {\n width: 100%;\n min-width: unset;\n flex-direction: row;\n overflow-x: auto;\n overflow-y: hidden;\n border-right: none;\n border-bottom: 1px solid var(--mj-border-default);\n padding: 0 8px;\n gap: 2px;\n }\n\n .nav-header[_ngcontent-%COMP%] {\n display: none;\n }\n\n .nav-divider[_ngcontent-%COMP%] {\n width: 1px;\n height: 28px;\n margin: auto 4px;\n }\n\n .nav-item[_ngcontent-%COMP%] {\n white-space: nowrap;\n border-left: none;\n border-bottom: 3px solid transparent;\n padding: 10px 14px;\n }\n\n .nav-item.active[_ngcontent-%COMP%] {\n border-left-color: transparent;\n border-bottom-color: var(--mj-brand-primary);\n }\n\n .analytics-content[_ngcontent-%COMP%] {\n padding: 16px;\n }\n }"] });
529
+ let tmp_10_0;
530
+ i0.ɵɵadvance(2);
531
+ i0.ɵɵproperty("Padding", false);
532
+ i0.ɵɵadvance();
533
+ i0.ɵɵproperty("Sections", ctx.navSections)("ActiveId", ctx.ActiveSection);
534
+ i0.ɵɵadvance(2);
535
+ i0.ɵɵproperty("Title", (ctx.currentSection == null ? null : ctx.currentSection.Label) || "")("Subtitle", (ctx.currentSection == null ? null : ctx.currentSection.Description) || "");
536
+ i0.ɵɵadvance(2);
537
+ i0.ɵɵconditional(ctx.analyticsFilterFields.length > 0 ? 7 : -1);
538
+ i0.ɵɵadvance();
539
+ i0.ɵɵconditional(ctx.FilterBarConfig.ShowCompareToggle ? 8 : -1);
540
+ i0.ɵɵadvance();
541
+ i0.ɵɵconditional(ctx.FilterBarConfig.ShowExportButton ? 9 : -1);
542
+ i0.ɵɵadvance();
543
+ i0.ɵɵconditional(ctx.timeRangeChipOptions.length > 0 ? 10 : -1);
544
+ i0.ɵɵadvance();
545
+ i0.ɵɵproperty("Padding", false);
546
+ i0.ɵɵadvance(2);
547
+ i0.ɵɵconditional((tmp_10_0 = ctx.ActiveSection) === "executive-summary" ? 13 : tmp_10_0 === "prompt-runs" ? 14 : tmp_10_0 === "agent-runs" ? 15 : tmp_10_0 === "model-performance" ? 16 : tmp_10_0 === "cost-budget" ? 17 : tmp_10_0 === "error-analysis" ? 18 : tmp_10_0 === "usage-patterns" ? 19 : -1);
548
+ } }, dependencies: [i1.MJButtonDirective, i1.MJPageHeaderComponent, i1.MJPageLayoutComponent, i1.MJPageBodyComponent, i1.MJPageHeaderInteriorComponent, i1.MJPageBodyInteriorComponent, i1.MJLeftNavComponent, i1.MJLeftNavContentComponent, i1.MJFilterPopoverComponent, i1.MJFilterPanelComponent, i1.MJFilterChipComponent, i2.AnalyticsExecutiveSummaryComponent, i3.AnalyticsPromptRunsComponent, i4.AnalyticsAgentRunsComponent, i5.AnalyticsModelPerformanceComponent, i6.AnalyticsCostBudgetComponent, i7.AnalyticsErrorAnalysisComponent, i8.AnalyticsUsagePatternsComponent], styles: ["[_nghost-%COMP%] {\n display: block;\n height: 100%;\n }\n\n .analytics-shell[_ngcontent-%COMP%] {\n display: flex;\n flex: 1;\n min-height: 0;\n background: var(--mj-bg-page);\n }\n\n \n\n\n \n\n\n\n\n \n\n\n .analytics-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 24px;\n }\n\n \n\n\n .section-placeholder[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n padding: 80px 24px;\n color: var(--mj-text-muted);\n }\n\n .placeholder-icon[_ngcontent-%COMP%] {\n font-size: 48px;\n margin-bottom: 20px;\n color: var(--mj-brand-primary);\n opacity: 0.4;\n }\n\n .section-placeholder[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 8px;\n }\n\n .section-placeholder[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-muted);\n margin: 0;\n max-width: 420px;\n }\n\n \n\n\n \n\n\n @media (max-width: 768px) {\n .analytics-content[_ngcontent-%COMP%] {\n padding: 16px;\n }\n }"] });
267
549
  };
268
550
  AIAnalyticsResourceComponent = __decorate([
269
551
  RegisterClass(BaseResourceComponent, 'AIAnalyticsResource')
@@ -272,64 +554,105 @@ export { AIAnalyticsResourceComponent };
272
554
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AIAnalyticsResourceComponent, [{
273
555
  type: Component,
274
556
  args: [{ standalone: false, selector: 'app-ai-analytics-resource', template: `
275
- <div class="analytics-shell">
276
- <nav class="analytics-nav">
277
- <div class="nav-header">
278
- <i class="fa-solid fa-chart-line"></i>
279
- <span>AI Analytics</span>
280
- </div>
281
- @for (item of NavItems; track item.Key) {
282
- @if (item.Key === 'divider') {
283
- <div class="nav-divider"></div>
284
- } @else {
285
- <button
286
- class="nav-item"
287
- [class.active]="ActiveSection === item.Key"
288
- (click)="OnSectionChange(item.Key)">
289
- <i [class]="item.Icon"></i>
290
- <span>{{ item.Label }}</span>
557
+ <mj-page-layout>
558
+ <!-- Outer chrome — pure identity. Every control (filter-popover,
559
+ TimeRange chips, Compare, Export) lives in the per-section
560
+ <mj-page-header-interior> card below because each section
561
+ configures its own filter fields and time-range options. -->
562
+ <mj-page-header
563
+ Title="AI Analytics"
564
+ Icon="fa-solid fa-chart-line"
565
+ Subtitle="Performance, cost, and usage analytics">
566
+ </mj-page-header>
567
+ <mj-page-body [Padding]="false" class="analytics-shell">
568
+ <mj-left-nav
569
+ [Sections]="navSections"
570
+ [ActiveId]="ActiveSection"
571
+ (ItemClicked)="onNavItemClicked($event)">
572
+ </mj-left-nav>
573
+
574
+ <mj-left-nav-content>
575
+ <!-- Per-section interior chrome owns the complete control surface
576
+ for the active section: identity + actions + the section's
577
+ own time-range chip strip. Even TimeRange options vary per
578
+ section (Cost & Budget adds MTD / YTD, Model Performance
579
+ drops 1h / 6h, etc.) so it belongs here rather than in the
580
+ outer chrome. -->
581
+ <mj-page-header-interior
582
+ [Title]="currentSection?.Label || ''"
583
+ [Subtitle]="currentSection?.Description || ''">
584
+ <div actions>
585
+ @if (analyticsFilterFields.length > 0) {
586
+ <mj-filter-popover
587
+ [ActiveCount]="ActiveFilterCount"
588
+ [ShowClearAll]="ActiveFilterCount > 0"
589
+ (ClearAllRequested)="resetPopoverFilters()">
590
+ <mj-filter-panel
591
+ [Fields]="analyticsFilterFields"
592
+ [Values]="analyticsFilterValues"
593
+ (ValuesChange)="onAnalyticsFilterValuesChange($event)"
594
+ (Reset)="resetPopoverFilters()">
595
+ </mj-filter-panel>
596
+ </mj-filter-popover>
597
+ }
598
+ @if (FilterBarConfig.ShowCompareToggle) {
599
+ <button mjButton variant="secondary" size="sm" [toggleable]="true" [(selected)]="compareActive" (selectedChange)="toggleCompare()">
600
+ <i class="fa-solid fa-code-compare"></i> Compare
601
+ </button>
602
+ }
603
+ @if (FilterBarConfig.ShowExportButton) {
604
+ <button mjButton variant="secondary" size="sm" (click)="OnExportClicked()">
605
+ <i class="fa-solid fa-download"></i> Export
291
606
  </button>
292
607
  }
608
+ </div>
609
+ @if (timeRangeChipOptions.length > 0) {
610
+ <div toolbar class="time-range-chips">
611
+ @for (chip of timeRangeChipOptions; track chip.value) {
612
+ <mj-filter-chip
613
+ [Label]="chip.text"
614
+ [Active]="CurrentTimeRange === chip.value"
615
+ (Clicked)="OnTimeRangeChange(chip.value)">
616
+ </mj-filter-chip>
617
+ }
618
+ </div>
293
619
  }
294
- </nav>
295
-
620
+ </mj-page-header-interior>
621
+ <mj-page-body-interior [Padding]="false">
296
622
  <div class="analytics-content">
297
623
  @switch (ActiveSection) {
298
624
  @case ('executive-summary') {
299
625
  <app-analytics-executive-summary
626
+ #executiveSummary
300
627
  [TimeRange]="CurrentTimeRange"
301
628
  [Filters]="CurrentFilters"
302
- (TimeRangeChange)="OnTimeRangeChange($event)"
303
- (FiltersChange)="OnFiltersChange($event)"
304
629
  (SectionNavigate)="OnSectionChange($event)"
305
630
  ></app-analytics-executive-summary>
306
631
  }
307
632
  @case ('prompt-runs') {
308
633
  <app-analytics-prompt-runs
634
+ #promptRuns
309
635
  [TimeRange]="CurrentTimeRange"
310
636
  [Filters]="CurrentFilters"
311
- (TimeRangeChange)="OnTimeRangeChange($event)"
312
- (FiltersChange)="OnFiltersChange($event)"
313
637
  ></app-analytics-prompt-runs>
314
638
  }
315
639
  @case ('agent-runs') {
316
640
  <app-analytics-agent-runs
317
641
  [TimeRange]="CurrentTimeRange"
318
- (TimeRangeChange)="OnTimeRangeChange($event)"
642
+ [Filters]="CurrentFilters"
319
643
  ></app-analytics-agent-runs>
320
644
  }
321
645
  @case ('model-performance') {
322
646
  <app-analytics-model-performance
323
647
  [TimeRange]="CurrentTimeRange"
324
- (TimeRangeChange)="OnTimeRangeChange($event)"
648
+ [SortBy]="CurrentSortBy"
649
+ [SelectedVendor]="CurrentVendor"
325
650
  ></app-analytics-model-performance>
326
651
  }
327
652
  @case ('cost-budget') {
328
653
  <app-analytics-cost-budget
329
654
  [TimeRange]="CurrentTimeRange"
330
655
  [Filters]="CurrentFilters"
331
- (TimeRangeChange)="OnTimeRangeChange($event)"
332
- (FiltersChange)="OnFiltersChange($event)"
333
656
  ></app-analytics-cost-budget>
334
657
  }
335
658
  @case ('error-analysis') {
@@ -341,15 +664,23 @@ export { AIAnalyticsResourceComponent };
341
664
  @case ('usage-patterns') {
342
665
  <app-analytics-usage-patterns
343
666
  [TimeRange]="CurrentTimeRange"
344
- (TimeRangeChange)="OnTimeRangeChange($event)"
345
667
  ></app-analytics-usage-patterns>
346
668
  }
347
669
  }
348
670
  </div>
349
- </div>
350
- `, styles: ["\n :host {\n display: block;\n height: 100%;\n }\n\n .analytics-shell {\n display: flex;\n height: 100%;\n background: var(--mj-bg-page);\n }\n\n /* \u2500\u2500 Left Navigation \u2500\u2500 */\n\n .analytics-nav {\n width: 220px;\n min-width: 220px;\n background: var(--mj-bg-surface);\n border-right: 1px solid var(--mj-border-default);\n display: flex;\n flex-direction: column;\n padding: 12px 0;\n overflow-y: auto;\n }\n\n .nav-header {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 8px 18px 16px;\n font-size: 15px;\n font-weight: 700;\n color: var(--mj-text-primary);\n border-bottom: 1px solid var(--mj-border-subtle);\n margin-bottom: 8px;\n }\n\n .nav-header i {\n color: var(--mj-brand-primary);\n font-size: 16px;\n }\n\n .nav-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 18px;\n border: none;\n border-left: 3px solid transparent;\n background: transparent;\n color: var(--mj-text-secondary);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.15s, color 0.15s, border-color 0.15s;\n text-align: left;\n width: 100%;\n }\n\n .nav-item:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n }\n\n .nav-item.active {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-left-color: var(--mj-brand-primary);\n font-weight: 600;\n }\n\n .nav-item i {\n width: 18px;\n text-align: center;\n font-size: 14px;\n }\n\n .nav-divider {\n height: 1px;\n background: var(--mj-border-subtle);\n margin: 8px 18px;\n }\n\n /* \u2500\u2500 Content Area \u2500\u2500 */\n\n .analytics-content {\n flex: 1;\n overflow-y: auto;\n padding: 24px;\n }\n\n /* \u2500\u2500 Section Placeholders \u2500\u2500 */\n\n .section-placeholder {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n padding: 80px 24px;\n color: var(--mj-text-muted);\n }\n\n .placeholder-icon {\n font-size: 48px;\n margin-bottom: 20px;\n color: var(--mj-brand-primary);\n opacity: 0.4;\n }\n\n .section-placeholder h2 {\n font-size: 20px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 8px;\n }\n\n .section-placeholder p {\n font-size: 14px;\n color: var(--mj-text-muted);\n margin: 0;\n max-width: 420px;\n }\n\n /* \u2500\u2500 Responsive: collapse nav to horizontal strip \u2500\u2500 */\n\n @media (max-width: 768px) {\n .analytics-shell {\n flex-direction: column;\n }\n\n .analytics-nav {\n width: 100%;\n min-width: unset;\n flex-direction: row;\n overflow-x: auto;\n overflow-y: hidden;\n border-right: none;\n border-bottom: 1px solid var(--mj-border-default);\n padding: 0 8px;\n gap: 2px;\n }\n\n .nav-header {\n display: none;\n }\n\n .nav-divider {\n width: 1px;\n height: 28px;\n margin: auto 4px;\n }\n\n .nav-item {\n white-space: nowrap;\n border-left: none;\n border-bottom: 3px solid transparent;\n padding: 10px 14px;\n }\n\n .nav-item.active {\n border-left-color: transparent;\n border-bottom-color: var(--mj-brand-primary);\n }\n\n .analytics-content {\n padding: 16px;\n }\n }\n "] }]
351
- }], null, null); })();
352
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AIAnalyticsResourceComponent, { className: "AIAnalyticsResourceComponent", filePath: "src/AI/components/analytics/ai-analytics-resource.component.ts", lineNumber: 279 }); })();
671
+ </mj-page-body-interior>
672
+ </mj-left-nav-content>
673
+ </mj-page-body>
674
+ </mj-page-layout>
675
+ `, styles: ["\n :host {\n display: block;\n height: 100%;\n }\n\n .analytics-shell {\n display: flex;\n flex: 1;\n min-height: 0;\n background: var(--mj-bg-page);\n }\n\n /* \u2500\u2500 Left Navigation \u2500\u2500 */\n\n /* Rail width + nav-item styling now owned by <mj-left-nav>; the\n divider is expressed as a new MJLeftNavSection rather than a CSS\n rule. */\n\n /* \u2500\u2500 Content Area \u2500\u2500 */\n\n .analytics-content {\n flex: 1;\n overflow-y: auto;\n padding: 24px;\n }\n\n /* \u2500\u2500 Section Placeholders \u2500\u2500 */\n\n .section-placeholder {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n padding: 80px 24px;\n color: var(--mj-text-muted);\n }\n\n .placeholder-icon {\n font-size: 48px;\n margin-bottom: 20px;\n color: var(--mj-brand-primary);\n opacity: 0.4;\n }\n\n .section-placeholder h2 {\n font-size: 20px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 8px;\n }\n\n .section-placeholder p {\n font-size: 14px;\n color: var(--mj-text-muted);\n margin: 0;\n max-width: 420px;\n }\n\n /* \u2500\u2500 Responsive: collapse nav to horizontal strip \u2500\u2500 */\n\n /* Responsive \u2014 <mj-left-nav> handles its own collapse-to-row at\n narrow viewports. We only need to tune the content padding. */\n @media (max-width: 768px) {\n .analytics-content {\n padding: 16px;\n }\n }\n "] }]
676
+ }], null, { executiveSummary: [{
677
+ type: ViewChild,
678
+ args: ['executiveSummary']
679
+ }], promptRuns: [{
680
+ type: ViewChild,
681
+ args: ['promptRuns']
682
+ }] }); })();
683
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AIAnalyticsResourceComponent, { className: "AIAnalyticsResourceComponent", filePath: "src/AI/components/analytics/ai-analytics-resource.component.ts", lineNumber: 231 }); })();
353
684
  export function LoadAIAnalyticsResource() {
354
685
  // Prevents tree-shaking of the @RegisterClass decorator
355
686
  }