@memberjunction/ng-dashboards 5.34.1 → 5.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (346) hide show
  1. package/dist/AI/components/agents/agent-configuration.component.d.ts +51 -0
  2. package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
  3. package/dist/AI/components/agents/agent-configuration.component.js +399 -292
  4. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  5. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts +8 -2
  6. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts.map +1 -1
  7. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js +87 -85
  8. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js.map +1 -1
  9. package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts +75 -0
  10. package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts.map +1 -1
  11. package/dist/AI/components/analytics/ai-analytics-resource.component.js +400 -89
  12. package/dist/AI/components/analytics/ai-analytics-resource.component.js.map +1 -1
  13. package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts +5 -0
  14. package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts.map +1 -1
  15. package/dist/AI/components/analytics/analytics-filter-bar.component.js +184 -135
  16. package/dist/AI/components/analytics/analytics-filter-bar.component.js.map +1 -1
  17. package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts +8 -2
  18. package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts.map +1 -1
  19. package/dist/AI/components/analytics/cost-budget/cost-budget.component.js +104 -103
  20. package/dist/AI/components/analytics/cost-budget/cost-budget.component.js.map +1 -1
  21. package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts +8 -2
  22. package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts.map +1 -1
  23. package/dist/AI/components/analytics/error-analysis/error-analysis.component.js +76 -74
  24. package/dist/AI/components/analytics/error-analysis/error-analysis.component.js.map +1 -1
  25. package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts.map +1 -1
  26. package/dist/AI/components/analytics/executive-summary/executive-summary.component.js +67 -87
  27. package/dist/AI/components/analytics/executive-summary/executive-summary.component.js.map +1 -1
  28. package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts +12 -19
  29. package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts.map +1 -1
  30. package/dist/AI/components/analytics/model-performance/model-performance.component.js +96 -203
  31. package/dist/AI/components/analytics/model-performance/model-performance.component.js.map +1 -1
  32. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts.map +1 -1
  33. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js +110 -126
  34. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js.map +1 -1
  35. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts.map +1 -1
  36. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js +61 -77
  37. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js.map +1 -1
  38. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +990 -992
  39. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
  40. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +6 -3
  41. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
  42. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +493 -490
  43. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
  44. package/dist/AI/components/models/model-management.component.d.ts +17 -0
  45. package/dist/AI/components/models/model-management.component.d.ts.map +1 -1
  46. package/dist/AI/components/models/model-management.component.js +370 -425
  47. package/dist/AI/components/models/model-management.component.js.map +1 -1
  48. package/dist/AI/components/prompts/prompt-management.component.d.ts +17 -0
  49. package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
  50. package/dist/AI/components/prompts/prompt-management.component.js +317 -357
  51. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  52. package/dist/AI/components/requests/agent-requests-resource.component.d.ts +11 -0
  53. package/dist/AI/components/requests/agent-requests-resource.component.d.ts.map +1 -1
  54. package/dist/AI/components/requests/agent-requests-resource.component.js +170 -175
  55. package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
  56. package/dist/AI/components/system/system-configuration.component.d.ts +19 -0
  57. package/dist/AI/components/system/system-configuration.component.d.ts.map +1 -1
  58. package/dist/AI/components/system/system-configuration.component.js +403 -362
  59. package/dist/AI/components/system/system-configuration.component.js.map +1 -1
  60. package/dist/AI/components/tags/tags-resource.component.js +781 -783
  61. package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
  62. package/dist/AI/components/vectors/vector-management-resource.component.d.ts +8 -3
  63. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
  64. package/dist/AI/components/vectors/vector-management-resource.component.js +547 -521
  65. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  66. package/dist/Actions/components/actions-overview.component.d.ts +6 -0
  67. package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
  68. package/dist/Actions/components/actions-overview.component.js +79 -30
  69. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  70. package/dist/Actions/components/execution-monitoring.component.d.ts +9 -3
  71. package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
  72. package/dist/Actions/components/execution-monitoring.component.js +196 -142
  73. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  74. package/dist/Actions/components/explorer/action-explorer.component.d.ts +41 -1
  75. package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -1
  76. package/dist/Actions/components/explorer/action-explorer.component.js +388 -94
  77. package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
  78. package/dist/Actions/components/explorer/index.d.ts +0 -1
  79. package/dist/Actions/components/explorer/index.d.ts.map +1 -1
  80. package/dist/Actions/components/explorer/index.js +0 -1
  81. package/dist/Actions/components/explorer/index.js.map +1 -1
  82. package/dist/Admin/admin-data-schema.component.js +32 -40
  83. package/dist/Admin/admin-data-schema.component.js.map +1 -1
  84. package/dist/Admin/admin-dev-tools-resource.component.js +32 -40
  85. package/dist/Admin/admin-dev-tools-resource.component.js.map +1 -1
  86. package/dist/Admin/admin-identity-access.component.js +32 -40
  87. package/dist/Admin/admin-identity-access.component.js.map +1 -1
  88. package/dist/Admin/admin-monitoring.component.js +32 -40
  89. package/dist/Admin/admin-monitoring.component.js.map +1 -1
  90. package/dist/ApplicationRoles/application-roles-resource.component.js +76 -82
  91. package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
  92. package/dist/Archiving/components/archive-config-resource.component.d.ts.map +1 -1
  93. package/dist/Archiving/components/archive-config-resource.component.js +24 -5
  94. package/dist/Archiving/components/archive-config-resource.component.js.map +1 -1
  95. package/dist/Archiving/components/archive-runs-resource.component.d.ts.map +1 -1
  96. package/dist/Archiving/components/archive-runs-resource.component.js +24 -5
  97. package/dist/Archiving/components/archive-runs-resource.component.js.map +1 -1
  98. package/dist/Communication/communication-logs-resource.component.d.ts +1 -1
  99. package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
  100. package/dist/Communication/communication-logs-resource.component.js +80 -99
  101. package/dist/Communication/communication-logs-resource.component.js.map +1 -1
  102. package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
  103. package/dist/Communication/communication-monitor-resource.component.js +127 -106
  104. package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
  105. package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
  106. package/dist/Communication/communication-providers-resource.component.js +44 -45
  107. package/dist/Communication/communication-providers-resource.component.js.map +1 -1
  108. package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
  109. package/dist/Communication/communication-runs-resource.component.js +60 -58
  110. package/dist/Communication/communication-runs-resource.component.js.map +1 -1
  111. package/dist/Communication/communication-templates-resource.component.d.ts +1 -1
  112. package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -1
  113. package/dist/Communication/communication-templates-resource.component.js +139 -162
  114. package/dist/Communication/communication-templates-resource.component.js.map +1 -1
  115. package/dist/Credentials/components/credentials-audit-resource.component.d.ts +7 -0
  116. package/dist/Credentials/components/credentials-audit-resource.component.d.ts.map +1 -1
  117. package/dist/Credentials/components/credentials-audit-resource.component.js +310 -297
  118. package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
  119. package/dist/Credentials/components/credentials-categories-resource.component.js +245 -266
  120. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  121. package/dist/Credentials/components/credentials-list-resource.component.d.ts +7 -0
  122. package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
  123. package/dist/Credentials/components/credentials-list-resource.component.js +381 -399
  124. package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
  125. package/dist/Credentials/components/credentials-overview-resource.component.js +222 -228
  126. package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
  127. package/dist/Credentials/components/credentials-types-resource.component.d.ts +6 -0
  128. package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
  129. package/dist/Credentials/components/credentials-types-resource.component.js +294 -305
  130. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  131. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts +8 -0
  132. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts.map +1 -1
  133. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +21 -0
  134. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js.map +1 -1
  135. package/dist/DatabaseDesigner/components/entity-list.component.js +147 -160
  136. package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -1
  137. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +1 -1
  138. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -1
  139. package/dist/DatabaseDesigner/database-designer-dashboards.module.js +19 -1
  140. package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -1
  141. package/dist/EntityAdmin/entity-admin-dashboard.component.js +20 -16
  142. package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
  143. package/dist/Home/home-dashboard.component.d.ts +6 -0
  144. package/dist/Home/home-dashboard.component.d.ts.map +1 -1
  145. package/dist/Home/home-dashboard.component.js +521 -485
  146. package/dist/Home/home-dashboard.component.js.map +1 -1
  147. package/dist/Integration/components/activity/activity.component.d.ts +8 -0
  148. package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
  149. package/dist/Integration/components/activity/activity.component.js +309 -318
  150. package/dist/Integration/components/activity/activity.component.js.map +1 -1
  151. package/dist/Integration/components/connections/connections.component.js +866 -847
  152. package/dist/Integration/components/connections/connections.component.js.map +1 -1
  153. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +234 -233
  154. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
  155. package/dist/Integration/components/overview/overview.component.js +182 -163
  156. package/dist/Integration/components/overview/overview.component.js.map +1 -1
  157. package/dist/Integration/components/pipelines/pipelines.component.d.ts +2 -0
  158. package/dist/Integration/components/pipelines/pipelines.component.d.ts.map +1 -1
  159. package/dist/Integration/components/pipelines/pipelines.component.js +610 -606
  160. package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
  161. package/dist/Integration/components/schedules/schedules.component.js +241 -241
  162. package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
  163. package/dist/Integration/integration.module.d.ts +1 -1
  164. package/dist/Integration/integration.module.d.ts.map +1 -1
  165. package/dist/Integration/integration.module.js +28 -1
  166. package/dist/Integration/integration.module.js.map +1 -1
  167. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +673 -674
  168. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
  169. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +54 -51
  170. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
  171. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +745 -703
  172. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
  173. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts +12 -1
  174. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts.map +1 -1
  175. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +191 -120
  176. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -1
  177. package/dist/Lists/components/lists-browse-resource.component.d.ts +18 -1
  178. package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
  179. package/dist/Lists/components/lists-browse-resource.component.js +486 -532
  180. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  181. package/dist/Lists/components/lists-categories-resource.component.d.ts.map +1 -1
  182. package/dist/Lists/components/lists-categories-resource.component.js +152 -160
  183. package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
  184. package/dist/Lists/components/lists-my-lists-resource.component.d.ts.map +1 -1
  185. package/dist/Lists/components/lists-my-lists-resource.component.js +302 -319
  186. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  187. package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
  188. package/dist/Lists/components/lists-operations-resource.component.js +234 -246
  189. package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
  190. package/dist/MCP/mcp-dashboard.component.d.ts +20 -0
  191. package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
  192. package/dist/MCP/mcp-dashboard.component.js +1248 -1338
  193. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  194. package/dist/MCP/mcp.module.d.ts +1 -1
  195. package/dist/MCP/mcp.module.d.ts.map +1 -1
  196. package/dist/MCP/mcp.module.js +34 -1
  197. package/dist/MCP/mcp.module.js.map +1 -1
  198. package/dist/Permissions/audit-log-resource.component.js +76 -85
  199. package/dist/Permissions/audit-log-resource.component.js.map +1 -1
  200. package/dist/Permissions/resource-access-resource.component.js +64 -69
  201. package/dist/Permissions/resource-access-resource.component.js.map +1 -1
  202. package/dist/Permissions/user-access-resource.component.js +63 -74
  203. package/dist/Permissions/user-access-resource.component.js.map +1 -1
  204. package/dist/QueryBrowser/query-browser-resource.component.js +2 -2
  205. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  206. package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts +2 -1
  207. package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts.map +1 -1
  208. package/dist/Scheduling/components/scheduling-activity-resource.component.js +11 -12
  209. package/dist/Scheduling/components/scheduling-activity-resource.component.js.map +1 -1
  210. package/dist/Scheduling/components/scheduling-activity.component.d.ts +9 -1
  211. package/dist/Scheduling/components/scheduling-activity.component.d.ts.map +1 -1
  212. package/dist/Scheduling/components/scheduling-activity.component.js +250 -197
  213. package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
  214. package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts +2 -1
  215. package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts.map +1 -1
  216. package/dist/Scheduling/components/scheduling-jobs-resource.component.js +11 -12
  217. package/dist/Scheduling/components/scheduling-jobs-resource.component.js.map +1 -1
  218. package/dist/Scheduling/components/scheduling-jobs.component.d.ts +9 -1
  219. package/dist/Scheduling/components/scheduling-jobs.component.d.ts.map +1 -1
  220. package/dist/Scheduling/components/scheduling-jobs.component.js +203 -147
  221. package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
  222. package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts +2 -1
  223. package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts.map +1 -1
  224. package/dist/Scheduling/components/scheduling-overview-resource.component.js +11 -12
  225. package/dist/Scheduling/components/scheduling-overview-resource.component.js.map +1 -1
  226. package/dist/Scheduling/components/scheduling-overview.component.d.ts +3 -1
  227. package/dist/Scheduling/components/scheduling-overview.component.d.ts.map +1 -1
  228. package/dist/Scheduling/components/scheduling-overview.component.js +224 -190
  229. package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
  230. package/dist/Scheduling/scheduling-dashboard.component.d.ts +19 -6
  231. package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
  232. package/dist/Scheduling/scheduling-dashboard.component.js +262 -104
  233. package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
  234. package/dist/SystemDiagnostics/system-diagnostics.component.js +773 -783
  235. package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
  236. package/dist/Testing/components/testing-analytics-resource.component.d.ts +2 -1
  237. package/dist/Testing/components/testing-analytics-resource.component.d.ts.map +1 -1
  238. package/dist/Testing/components/testing-analytics-resource.component.js +7 -14
  239. package/dist/Testing/components/testing-analytics-resource.component.js.map +1 -1
  240. package/dist/Testing/components/testing-analytics.component.d.ts +3 -1
  241. package/dist/Testing/components/testing-analytics.component.d.ts.map +1 -1
  242. package/dist/Testing/components/testing-analytics.component.js +420 -393
  243. package/dist/Testing/components/testing-analytics.component.js.map +1 -1
  244. package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts +2 -1
  245. package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts.map +1 -1
  246. package/dist/Testing/components/testing-dashboard-tab-resource.component.js +16 -19
  247. package/dist/Testing/components/testing-dashboard-tab-resource.component.js.map +1 -1
  248. package/dist/Testing/components/testing-dashboard-tab.component.d.ts +3 -1
  249. package/dist/Testing/components/testing-dashboard-tab.component.d.ts.map +1 -1
  250. package/dist/Testing/components/testing-dashboard-tab.component.js +157 -122
  251. package/dist/Testing/components/testing-dashboard-tab.component.js.map +1 -1
  252. package/dist/Testing/components/testing-explorer-resource.component.d.ts +2 -1
  253. package/dist/Testing/components/testing-explorer-resource.component.d.ts.map +1 -1
  254. package/dist/Testing/components/testing-explorer-resource.component.js +7 -12
  255. package/dist/Testing/components/testing-explorer-resource.component.js.map +1 -1
  256. package/dist/Testing/components/testing-explorer.component.d.ts +8 -1
  257. package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
  258. package/dist/Testing/components/testing-explorer.component.js +587 -608
  259. package/dist/Testing/components/testing-explorer.component.js.map +1 -1
  260. package/dist/Testing/components/testing-review-resource.component.d.ts +4 -1
  261. package/dist/Testing/components/testing-review-resource.component.d.ts.map +1 -1
  262. package/dist/Testing/components/testing-review-resource.component.js +9 -12
  263. package/dist/Testing/components/testing-review-resource.component.js.map +1 -1
  264. package/dist/Testing/components/testing-review.component.d.ts +3 -1
  265. package/dist/Testing/components/testing-review.component.d.ts.map +1 -1
  266. package/dist/Testing/components/testing-review.component.js +310 -274
  267. package/dist/Testing/components/testing-review.component.js.map +1 -1
  268. package/dist/Testing/components/testing-runs-resource.component.d.ts +2 -1
  269. package/dist/Testing/components/testing-runs-resource.component.d.ts.map +1 -1
  270. package/dist/Testing/components/testing-runs-resource.component.js +16 -19
  271. package/dist/Testing/components/testing-runs-resource.component.js.map +1 -1
  272. package/dist/Testing/components/testing-runs.component.d.ts +3 -1
  273. package/dist/Testing/components/testing-runs.component.d.ts.map +1 -1
  274. package/dist/Testing/components/testing-runs.component.js +307 -273
  275. package/dist/Testing/components/testing-runs.component.js.map +1 -1
  276. package/dist/Testing/testing-dashboard.component.d.ts +2 -0
  277. package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
  278. package/dist/Testing/testing-dashboard.component.js +107 -93
  279. package/dist/Testing/testing-dashboard.component.js.map +1 -1
  280. package/dist/VersionHistory/components/diff-resource.component.js +185 -188
  281. package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
  282. package/dist/VersionHistory/components/graph-resource.component.js +154 -184
  283. package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
  284. package/dist/VersionHistory/components/labels-resource.component.d.ts +7 -0
  285. package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -1
  286. package/dist/VersionHistory/components/labels-resource.component.js +350 -354
  287. package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
  288. package/dist/VersionHistory/components/restore-resource.component.js +163 -169
  289. package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
  290. package/dist/actions-dashboards.module.d.ts +15 -16
  291. package/dist/actions-dashboards.module.d.ts.map +1 -1
  292. package/dist/actions-dashboards.module.js +34 -11
  293. package/dist/actions-dashboards.module.js.map +1 -1
  294. package/dist/ai-dashboards.module.d.ts +45 -48
  295. package/dist/ai-dashboards.module.d.ts.map +1 -1
  296. package/dist/ai-dashboards.module.js +36 -10
  297. package/dist/ai-dashboards.module.js.map +1 -1
  298. package/dist/archiving-dashboards.module.d.ts +2 -1
  299. package/dist/archiving-dashboards.module.d.ts.map +1 -1
  300. package/dist/archiving-dashboards.module.js +12 -2
  301. package/dist/archiving-dashboards.module.js.map +1 -1
  302. package/dist/communication-dashboards.module.d.ts +2 -1
  303. package/dist/communication-dashboards.module.d.ts.map +1 -1
  304. package/dist/communication-dashboards.module.js +24 -3
  305. package/dist/communication-dashboards.module.js.map +1 -1
  306. package/dist/core-dashboards.module.d.ts +1 -1
  307. package/dist/core-dashboards.module.d.ts.map +1 -1
  308. package/dist/core-dashboards.module.js +31 -1
  309. package/dist/core-dashboards.module.js.map +1 -1
  310. package/dist/credentials-dashboards.module.d.ts +1 -1
  311. package/dist/credentials-dashboards.module.d.ts.map +1 -1
  312. package/dist/credentials-dashboards.module.js +28 -1
  313. package/dist/credentials-dashboards.module.js.map +1 -1
  314. package/dist/lists-dashboards.module.d.ts +1 -1
  315. package/dist/lists-dashboards.module.d.ts.map +1 -1
  316. package/dist/lists-dashboards.module.js +28 -1
  317. package/dist/lists-dashboards.module.js.map +1 -1
  318. package/dist/public-api.d.ts +2 -2
  319. package/dist/public-api.d.ts.map +1 -1
  320. package/dist/public-api.js +3 -3
  321. package/dist/public-api.js.map +1 -1
  322. package/dist/scheduling-dashboards.module.d.ts +1 -1
  323. package/dist/scheduling-dashboards.module.d.ts.map +1 -1
  324. package/dist/scheduling-dashboards.module.js +31 -1
  325. package/dist/scheduling-dashboards.module.js.map +1 -1
  326. package/dist/testing-dashboards.module.d.ts +8 -7
  327. package/dist/testing-dashboards.module.d.ts.map +1 -1
  328. package/dist/testing-dashboards.module.js +30 -0
  329. package/dist/testing-dashboards.module.js.map +1 -1
  330. package/package.json +52 -52
  331. package/dist/AI/components/agents/agent-filter-panel.component.d.ts +0 -56
  332. package/dist/AI/components/agents/agent-filter-panel.component.d.ts.map +0 -1
  333. package/dist/AI/components/agents/agent-filter-panel.component.js +0 -285
  334. package/dist/AI/components/agents/agent-filter-panel.component.js.map +0 -1
  335. package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts +0 -49
  336. package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts.map +0 -1
  337. package/dist/AI/components/prompts/prompt-filter-panel.component.js +0 -184
  338. package/dist/AI/components/prompts/prompt-filter-panel.component.js.map +0 -1
  339. package/dist/AI/components/system/system-config-filter-panel.component.d.ts +0 -33
  340. package/dist/AI/components/system/system-config-filter-panel.component.d.ts.map +0 -1
  341. package/dist/AI/components/system/system-config-filter-panel.component.js +0 -144
  342. package/dist/AI/components/system/system-config-filter-panel.component.js.map +0 -1
  343. package/dist/Actions/components/explorer/action-toolbar.component.d.ts +0 -63
  344. package/dist/Actions/components/explorer/action-toolbar.component.d.ts.map +0 -1
  345. package/dist/Actions/components/explorer/action-toolbar.component.js +0 -463
  346. package/dist/Actions/components/explorer/action-toolbar.component.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"error-analysis.component.js","sourceRoot":"","sources":["../../../../../src/AI/components/analytics/error-analysis/error-analysis.component.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Error Analysis -- Basic.\n *\n * Displays error summary cards, and errors grouped by source (Prompt+Model combination).\n * Each group can be expanded to show individual error details.\n * Data loaded from MJ: AI Prompt Runs where Success=false.\n */\n\nimport {\n Component, Input, Output, EventEmitter,\n OnInit, OnDestroy, ChangeDetectorRef, inject\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { RunView } from '@memberjunction/core';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { GlobalFilterState } from '../../../interfaces/analytics-preferences.interface';\n\n// ── Interfaces ──\n\ninterface FailedRunRecord {\n ID: string;\n RunAt: string;\n ErrorMessage: string | null;\n Model: string | null;\n Prompt: string | null;\n Vendor: string | null;\n ExecutionTimeMS: number | null;\n Status: string;\n}\n\ninterface ErrorSummary {\n TotalErrors: number;\n ErrorRate: number;\n MostCommonError: string;\n}\n\ninterface ErrorGroup {\n Source: string;\n PromptName: string;\n ModelName: string;\n Count: number;\n LastErrorMessage: string;\n LastErrorTime: string;\n IsExpanded: boolean;\n Errors: ErrorDetail[];\n}\n\ninterface ErrorDetail {\n ID: string;\n Time: string;\n ErrorMessage: string;\n Duration: string;\n}\n\nconst FIELDS = [\n 'ID', 'RunAt', 'ErrorMessage', 'Model', 'Prompt',\n 'Vendor', 'ExecutionTimeMS', 'Status'\n];\n\n@Component({\n standalone: false,\n selector: 'app-analytics-error-analysis',\n template: `\n <!-- Filter Bar -->\n <app-analytics-filter-bar\n [TimeRange]=\"TimeRange\"\n [Filters]=\"Filters\"\n [ShowAgentFilter]=\"false\"\n [ShowPromptFilter]=\"true\"\n [ShowModelFilter]=\"true\"\n [ShowStatusFilter]=\"false\"\n [ShowCompareToggle]=\"false\"\n [ShowExportButton]=\"false\"\n (TimeRangeChange)=\"OnTimeRangeChange($event)\"\n (FiltersChange)=\"OnFiltersChange($event)\"\n ></app-analytics-filter-bar>\n\n @if (IsLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading error data...\"></mj-loading>\n </div>\n } @else {\n <!-- Summary Cards -->\n <div class=\"summary-row\">\n <div class=\"summary-card summary-card--error\">\n <div class=\"summary-icon\">\n <i class=\"fa-solid fa-circle-exclamation\"></i>\n </div>\n <div class=\"summary-content\">\n <div class=\"summary-label\">Total Errors</div>\n <div class=\"summary-value\">{{ Summary.TotalErrors | number }}</div>\n </div>\n </div>\n <div class=\"summary-card\">\n <div class=\"summary-icon summary-icon--warning\">\n <i class=\"fa-solid fa-percentage\"></i>\n </div>\n <div class=\"summary-content\">\n <div class=\"summary-label\">Error Rate</div>\n <div class=\"summary-value\">{{ Summary.ErrorRate | number:'1.1-1' }}%</div>\n </div>\n </div>\n <div class=\"summary-card\">\n <div class=\"summary-icon summary-icon--info\">\n <i class=\"fa-solid fa-bug\"></i>\n </div>\n <div class=\"summary-content\">\n <div class=\"summary-label\">Most Common</div>\n <div class=\"summary-value summary-value--text\" [title]=\"Summary.MostCommonError\">\n {{ Summary.MostCommonError || 'N/A' }}\n </div>\n </div>\n </div>\n </div>\n\n <!-- Error Groups -->\n @if (ErrorGroups.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-check-circle empty-state__icon\"></i>\n <div class=\"empty-state__title\">No Errors Found</div>\n <div class=\"empty-state__subtitle\">No errors detected in the selected time range.</div>\n </div>\n }\n\n @for (group of ErrorGroups; track group.Source) {\n <div class=\"error-group\" [class.error-group--expanded]=\"group.IsExpanded\">\n <div\n class=\"error-group__header\"\n (click)=\"ToggleGroup(group)\"\n role=\"button\"\n tabindex=\"0\"\n (keydown.enter)=\"ToggleGroup(group)\">\n <div class=\"error-group__left\">\n <i [class]=\"group.IsExpanded ? 'fa-solid fa-chevron-down' : 'fa-solid fa-chevron-right'\"\n class=\"expand-icon\"></i>\n <div class=\"error-group__source\">\n <div class=\"source-name\">{{ group.Source }}</div>\n <div class=\"source-details\">\n <span class=\"source-prompt\">{{ group.PromptName }}</span>\n <span class=\"source-separator\">+</span>\n <span class=\"source-model\">{{ group.ModelName }}</span>\n </div>\n </div>\n </div>\n <div class=\"error-group__right\">\n <span class=\"error-count-badge\">{{ group.Count }}</span>\n <div class=\"last-error-time\">{{ group.LastErrorTime }}</div>\n </div>\n </div>\n\n @if (!group.IsExpanded) {\n <div class=\"error-group__preview\">\n <span class=\"preview-label\">Last error:</span>\n {{ group.LastErrorMessage }}\n </div>\n }\n\n @if (group.IsExpanded) {\n <div class=\"error-group__body\">\n @for (err of group.Errors; track err.ID) {\n <div class=\"error-detail\">\n <div class=\"error-detail__header\">\n <span class=\"error-detail__time\">{{ err.Time }}</span>\n @if (err.Duration) {\n <span class=\"error-detail__duration\">{{ err.Duration }}</span>\n }\n </div>\n <div class=\"error-detail__message\">{{ err.ErrorMessage }}</div>\n </div>\n }\n </div>\n }\n </div>\n }\n }\n `,\n styles: [`\n :host { display: block; }\n\n .loading-container {\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 300px;\n }\n\n /* ── Summary Row ── */\n .summary-row {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n margin: 16px 0;\n }\n\n .summary-card {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n padding: 16px;\n display: flex;\n align-items: center;\n gap: 14px;\n }\n\n .summary-card--error {\n border-left: 4px solid var(--mj-status-error);\n }\n\n .summary-icon {\n width: 40px;\n height: 40px;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n font-size: 16px;\n flex-shrink: 0;\n }\n\n .summary-icon--warning {\n background: color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n }\n\n .summary-icon--info {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n }\n\n .summary-label {\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n }\n\n .summary-value {\n font-size: 22px;\n font-weight: 700;\n color: var(--mj-text-primary);\n letter-spacing: -0.02em;\n }\n\n .summary-value--text {\n font-size: 13px;\n font-weight: 500;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 220px;\n }\n\n /* ── Empty State ── */\n .empty-state {\n text-align: center;\n padding: 48px 24px;\n color: var(--mj-text-muted);\n }\n\n .empty-state__icon {\n font-size: 40px;\n color: var(--mj-status-success);\n margin-bottom: 12px;\n }\n\n .empty-state__title {\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n }\n\n .empty-state__subtitle {\n font-size: 13px;\n color: var(--mj-text-muted);\n }\n\n /* ── Error Groups ── */\n .error-group {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n margin-bottom: 8px;\n overflow: hidden;\n transition: border-color 0.2s;\n }\n\n .error-group--expanded {\n border-color: var(--mj-status-error);\n }\n\n .error-group__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 14px 16px;\n cursor: pointer;\n transition: background 0.15s;\n }\n\n .error-group__header:hover {\n background: var(--mj-bg-surface-hover);\n }\n\n .error-group__left {\n display: flex;\n align-items: center;\n gap: 10px;\n min-width: 0;\n }\n\n .expand-icon {\n font-size: 11px;\n color: var(--mj-text-muted);\n width: 16px;\n flex-shrink: 0;\n transition: transform 0.2s;\n }\n\n .error-group__source {\n min-width: 0;\n }\n\n .source-name {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .source-details {\n font-size: 12px;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 4px;\n margin-top: 2px;\n }\n\n .source-separator {\n color: var(--mj-text-disabled);\n }\n\n .error-group__right {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-shrink: 0;\n }\n\n .error-count-badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 28px;\n height: 24px;\n padding: 0 8px;\n border-radius: 12px;\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n font-size: 12px;\n font-weight: 700;\n }\n\n .last-error-time {\n font-size: 12px;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n }\n\n .error-group__preview {\n padding: 0 16px 12px 42px;\n font-size: 12px;\n color: var(--mj-text-muted);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .preview-label {\n color: var(--mj-text-disabled);\n margin-right: 4px;\n }\n\n .error-group__body {\n border-top: 1px solid var(--mj-border-subtle);\n max-height: 400px;\n overflow-y: auto;\n }\n\n .error-detail {\n padding: 12px 16px 12px 42px;\n border-bottom: 1px solid var(--mj-border-subtle);\n }\n\n .error-detail:last-child {\n border-bottom: none;\n }\n\n .error-detail__header {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-bottom: 4px;\n }\n\n .error-detail__time {\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-muted);\n }\n\n .error-detail__duration {\n font-size: 11px;\n color: var(--mj-text-disabled);\n font-variant-numeric: tabular-nums;\n }\n\n .error-detail__message {\n font-size: 13px;\n color: var(--mj-status-error-text, var(--mj-status-error));\n line-height: 1.5;\n word-break: break-word;\n font-family: monospace;\n background: color-mix(in srgb, var(--mj-status-error) 5%, var(--mj-bg-surface));\n padding: 8px 10px;\n border-radius: 6px;\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n }\n\n /* ── Responsive ── */\n @media (max-width: 768px) {\n .summary-row {\n grid-template-columns: 1fr;\n }\n\n .summary-value {\n font-size: 18px;\n }\n }\n `]\n})\nexport class AnalyticsErrorAnalysisComponent extends BaseAngularComponent implements OnInit, OnDestroy {\n @Input() TimeRange = '7d';\n @Input() Filters: GlobalFilterState = { Models: [], Agents: [], Prompts: [], Statuses: [] };\n\n private cdr = inject(ChangeDetectorRef);\n private destroy$ = new Subject<void>();\n\n public IsLoading = false;\n\n public Summary: ErrorSummary = {\n TotalErrors: 0,\n ErrorRate: 0,\n MostCommonError: ''\n };\n\n public ErrorGroups: ErrorGroup[] = [];\n\n private failedRuns: FailedRunRecord[] = [];\n private totalRunCount = 0;\n\n ngOnInit(): void {\n this.LoadData();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n // ── Public Handlers ──\n\n public OnTimeRangeChange(range: string): void {\n this.TimeRange = range;\n this.LoadData();\n }\n\n public OnFiltersChange(filters: GlobalFilterState): void {\n this.Filters = filters;\n this.LoadData();\n }\n\n public ToggleGroup(group: ErrorGroup): void {\n group.IsExpanded = !group.IsExpanded;\n this.cdr.detectChanges();\n }\n\n // ── Data Loading ──\n\n private async LoadData(): Promise<void> {\n this.IsLoading = true;\n this.cdr.detectChanges();\n\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const dateFilter = this.buildDateFilter();\n const extraFilters = this.buildExtraFilters();\n const baseFilter = [dateFilter, ...extraFilters].filter(Boolean).join(' AND ');\n const errorFilter = baseFilter + ' AND Success = 0';\n\n const [errorResult, totalResult] = await rv.RunViews([\n {\n EntityName: 'MJ: AI Prompt Runs',\n ExtraFilter: errorFilter,\n Fields: FIELDS,\n OrderBy: 'RunAt DESC',\n ResultType: 'simple'\n },\n {\n EntityName: 'MJ: AI Prompt Runs',\n ExtraFilter: baseFilter,\n Fields: ['ID'],\n ResultType: 'simple'\n }\n ]);\n\n this.failedRuns = (errorResult?.Results ?? []) as FailedRunRecord[];\n this.totalRunCount = totalResult?.Results?.length ?? 0;\n\n this.computeSummary();\n this.buildErrorGroups();\n } catch (e) {\n console.error('Error Analysis load error:', e);\n } finally {\n this.IsLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n // ── Computations ──\n\n private computeSummary(): void {\n const errorCount = this.failedRuns.length;\n const errorRate = this.totalRunCount > 0 ? (errorCount / this.totalRunCount) * 100 : 0;\n\n // Find most common error by grouping error messages\n const messageCounts = new Map<string, number>();\n for (const run of this.failedRuns) {\n const msg = this.normalizeErrorMessage(run.ErrorMessage ?? 'Unknown error');\n messageCounts.set(msg, (messageCounts.get(msg) ?? 0) + 1);\n }\n\n let mostCommon = '';\n let maxCount = 0;\n for (const [msg, count] of messageCounts) {\n if (count > maxCount) {\n maxCount = count;\n mostCommon = msg;\n }\n }\n\n this.Summary = {\n TotalErrors: errorCount,\n ErrorRate: errorRate,\n MostCommonError: mostCommon\n };\n }\n\n private buildErrorGroups(): void {\n const groups = new Map<string, FailedRunRecord[]>();\n\n for (const run of this.failedRuns) {\n const prompt = run.Prompt ?? 'Unknown Prompt';\n const model = run.Model ?? 'Unknown Model';\n const key = prompt + ' + ' + model;\n if (!groups.has(key)) groups.set(key, []);\n groups.get(key)!.push(run);\n }\n\n this.ErrorGroups = Array.from(groups.entries())\n .map(([source, runs]) => {\n const sortedRuns = runs.sort((a, b) =>\n new Date(b.RunAt).getTime() - new Date(a.RunAt).getTime()\n );\n\n return {\n Source: source,\n PromptName: sortedRuns[0].Prompt ?? 'Unknown',\n ModelName: sortedRuns[0].Model ?? 'Unknown',\n Count: sortedRuns.length,\n LastErrorMessage: this.truncateMessage(sortedRuns[0].ErrorMessage ?? 'No message'),\n LastErrorTime: this.formatRelativeTime(sortedRuns[0].RunAt),\n IsExpanded: false,\n Errors: sortedRuns.slice(0, 20).map(r => ({\n ID: r.ID,\n Time: this.formatDateTime(r.RunAt),\n ErrorMessage: r.ErrorMessage ?? 'No error message',\n Duration: r.ExecutionTimeMS != null ? r.ExecutionTimeMS + 'ms' : ''\n }))\n };\n })\n .sort((a, b) => b.Count - a.Count);\n }\n\n // ── Helpers ──\n\n private buildDateFilter(): string {\n const now = new Date();\n const msMap: Record<string, number> = {\n '1h': 3600000, '6h': 21600000, '24h': 86400000,\n '7d': 604800000, '30d': 2592000000\n };\n const ms = msMap[this.TimeRange] ?? 604800000;\n const start = new Date(now.getTime() - ms);\n return `RunAt >= '${start.toISOString()}'`;\n }\n\n private buildExtraFilters(): string[] {\n const filters: string[] = [];\n if (this.Filters.Models.length > 0) {\n filters.push(`ModelID IN (${this.Filters.Models.map(id => `'${id}'`).join(',')})`);\n }\n if (this.Filters.Prompts.length > 0) {\n filters.push(`PromptID IN (${this.Filters.Prompts.map(id => `'${id}'`).join(',')})`);\n }\n return filters;\n }\n\n private normalizeErrorMessage(msg: string): string {\n // Truncate and normalize for grouping\n return msg.slice(0, 100).trim().toLowerCase();\n }\n\n private truncateMessage(msg: string): string {\n if (msg.length <= 120) return msg;\n return msg.slice(0, 120) + '...';\n }\n\n private formatRelativeTime(dateStr: string): string {\n const now = Date.now();\n const then = new Date(dateStr).getTime();\n const diffMin = Math.floor((now - then) / 60000);\n if (diffMin < 1) return 'just now';\n if (diffMin < 60) return diffMin + 'm ago';\n const diffHr = Math.floor(diffMin / 60);\n if (diffHr < 24) return diffHr + 'h ago';\n const diffDay = Math.floor(diffHr / 24);\n return diffDay + 'd ago';\n }\n\n private formatDateTime(dateStr: string): string {\n const d = new Date(dateStr);\n const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n const hh = d.getHours().toString().padStart(2, '0');\n const mm = d.getMinutes().toString().padStart(2, '0');\n return `${months[d.getMonth()]} ${d.getDate()} ${hh}:${mm}`;\n }\n}\n\nexport function LoadAnalyticsErrorAnalysis() { /* tree-shaking prevention */ }\n"]}
1
+ {"version":3,"file":"error-analysis.component.js","sourceRoot":"","sources":["../../../../../src/AI/components/analytics/error-analysis/error-analysis.component.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACH,SAAS,EAAE,KAAK,EACG,iBAAiB,EAAE,MAAM,EAC/C,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;;;;;;;IAmDzD,8BAA+B;IAC3B,gCAAsD;IAC1D,iBAAM;;;IAqCF,+BAAyB;IACrB,wBAA0D;IAC1D,+BAAgC;IAAA,+BAAe;IAAA,iBAAM;IACrD,+BAAmC;IAAA,8DAA8C;IACrF,AADqF,iBAAM,EACrF;;;IA+BM,AADJ,+BAAkC,eACF;IAAA,2BAAW;IAAA,iBAAO;IAC9C,YACJ;IAAA,iBAAM;;;IADF,eACJ;IADI,0DACJ;;;IAUoB,gCAAqC;IAAA,YAAkB;IAAA,iBAAO;;;IAAzB,cAAkB;IAAlB,qCAAkB;;;IAF3D,AADJ,AADJ,+BAA0B,cACY,eACG;IAAA,YAAc;IAAA,iBAAO;IACtD,6IAAoB;IAGxB,iBAAM;IACN,+BAAmC;IAAA,YAAsB;IAC7D,AAD6D,iBAAM,EAC7D;;;IANmC,eAAc;IAAd,iCAAc;IAC/C,cAEC;IAFD,0CAEC;IAE8B,eAAsB;IAAtB,yCAAsB;;;IATrE,+BAA+B;IAC3B,uIAUC;IACL,iBAAM;;;IAXF,cAUC;IAVD,8BAUC;;;;IA3CT,AADJ,+BAA0E,cAM7B;IAArC,AAHA,mOAAS,4BAAkB,KAAC,sOAGX,4BAAkB,KAAC;IACpC,+BAA+B;IAC3B,wBAC2B;IAEvB,AADJ,+BAAiC,cACJ;IAAA,YAAkB;IAAA,iBAAM;IAE7C,AADJ,+BAA4B,eACI;IAAA,YAAsB;IAAA,iBAAO;IACzD,iCAA+B;IAAA,kBAAC;IAAA,iBAAO;IACvC,iCAA2B;IAAA,aAAqB;IAG5D,AADI,AADI,AADoD,iBAAO,EACrD,EACJ,EACJ;IAEF,AADJ,gCAAgC,gBACI;IAAA,aAAiB;IAAA,iBAAO;IACxD,gCAA6B;IAAA,aAAyB;IAE9D,AADI,AAD0D,iBAAM,EAC1D,EACJ;IAEN,yHAAyB;IAOzB,yHAAwB;IAe5B,iBAAM;;;IA/CmB,4DAAgD;IAQ1D,eAAqF;IAArF,6FAAqF;IAG3D,eAAkB;IAAlB,qCAAkB;IAEX,eAAsB;IAAtB,yCAAsB;IAEvB,eAAqB;IAArB,wCAAqB;IAKxB,eAAiB;IAAjB,oCAAiB;IACpB,eAAyB;IAAzB,4CAAyB;IAI9D,cAKC;IALD,gDAKC;IAED,cAcC;IAdD,+CAcC;;;IAtFD,AADJ,AADJ,8BAAyB,aACyB,aAChB;IACtB,uBAA8C;IAClD,iBAAM;IAEF,AADJ,8BAA6B,aACE;IAAA,4BAAY;IAAA,iBAAM;IAC7C,8BAA2B;IAAA,YAAkC;;IAErE,AADI,AADiE,iBAAM,EACjE,EACJ;IAEF,AADJ,+BAA0B,eAC0B;IAC5C,yBAAsC;IAC1C,iBAAM;IAEF,AADJ,+BAA6B,cACE;IAAA,2BAAU;IAAA,iBAAM;IAC3C,+BAA2B;IAAA,aAAyC;;IAE5E,AADI,AADwE,iBAAM,EACxE,EACJ;IAEF,AADJ,+BAA0B,eACuB;IACzC,yBAA+B;IACnC,iBAAM;IAEF,AADJ,+BAA6B,cACE;IAAA,4BAAW;IAAA,iBAAM;IAC5C,gCAAiF;IAC7E,aACJ;IAGZ,AADI,AADI,AADI,iBAAM,EACJ,EACJ,EACJ;IAGN,kHAAgC;IAQhC,qHAiDC;;;IAnFsC,eAAkC;IAAlC,sEAAkC;IASlC,eAAyC;IAAzC,wFAAyC;IASrB,eAAiC;IAAjC,sDAAiC;IAC5E,cACJ;IADI,wEACJ;IAMZ,cAMC;IAND,2DAMC;IAED,cAiDC;IAjDD,iCAiDC;;AA1Gb,MAAM,MAAM,GAAG;IACX,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,QAAQ;IAChD,QAAQ,EAAE,iBAAiB,EAAE,QAAQ;CACxC,CAAC;AAyXF,MAAM,OAAO,+BAAgC,SAAQ,oBAAoB;IAC7D,UAAU,GAAG,IAAI,CAAC;IAC1B,IACI,SAAS,CAAC,KAAa;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,WAAW;YAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC5D,CAAC;IACD,IAAI,SAAS,KAAa,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IAE3C,QAAQ,GAAsB,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAC5F,IACI,OAAO,CAAC,KAAwB;QAChC,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;QAC5E,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC/D,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,OAAO,IAAI,IAAI,CAAC,WAAW;YAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;IACrD,CAAC;IACD,IAAI,OAAO,KAAwB,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAElD,mBAAmB,CAAC,CAAoB,EAAE,CAAoB;QAClE,MAAM,OAAO,GAAG,CAAC,CAAW,EAAE,CAAW,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrG,OAAO,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC1I,CAAC;IAEO,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAChC,QAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;IAC/B,WAAW,GAAG,KAAK,CAAC;IAErB,SAAS,GAAG,KAAK,CAAC;IAElB,OAAO,GAAiB;QAC3B,WAAW,EAAE,CAAC;QACd,SAAS,EAAE,CAAC;QACZ,eAAe,EAAE,EAAE;KACtB,CAAC;IAEK,WAAW,GAAiB,EAAE,CAAC;IAE9B,UAAU,GAAsB,EAAE,CAAC;IACnC,aAAa,GAAG,CAAC,CAAC;IAE1B,QAAQ;QACJ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,QAAQ,EAAE,CAAC;IACpB,CAAC;IAED,WAAW;QACP,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAC7B,CAAC;IAED,wBAAwB;IAEjB,iBAAiB,CAAC,KAAa;QAClC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,QAAQ,EAAE,CAAC;IACpB,CAAC;IAEM,eAAe,CAAC,OAA0B;QAC7C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,QAAQ,EAAE,CAAC;IACpB,CAAC;IAEM,WAAW,CAAC,KAAiB;QAChC,KAAK,CAAC,UAAU,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAED,qBAAqB;IAEb,KAAK,CAAC,QAAQ;QAClB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAEzB,IAAI,CAAC;YACD,MAAM,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC9C,MAAM,UAAU,GAAG,CAAC,UAAU,EAAE,GAAG,YAAY,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC/E,MAAM,WAAW,GAAG,UAAU,GAAG,kBAAkB,CAAC;YAEpD,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC;gBACjD;oBACI,UAAU,EAAE,oBAAoB;oBAChC,WAAW,EAAE,WAAW;oBACxB,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,YAAY;oBACrB,UAAU,EAAE,QAAQ;iBACvB;gBACD;oBACI,UAAU,EAAE,oBAAoB;oBAChC,WAAW,EAAE,UAAU;oBACvB,MAAM,EAAE,CAAC,IAAI,CAAC;oBACd,UAAU,EAAE,QAAQ;iBACvB;aACJ,CAAC,CAAC;YAEH,IAAI,CAAC,UAAU,GAAG,CAAC,WAAW,EAAE,OAAO,IAAI,EAAE,CAAsB,CAAC;YACpE,IAAI,CAAC,aAAa,GAAG,WAAW,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC;YAEvD,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC5B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,CAAC,CAAC,CAAC;QACnD,CAAC;gBAAS,CAAC;YACP,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC7B,CAAC;IACL,CAAC;IAED,qBAAqB;IAEb,cAAc;QAClB,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAEvF,oDAAoD;QACpD,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;QAChD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAChC,MAAM,GAAG,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,YAAY,IAAI,eAAe,CAAC,CAAC;YAC5E,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9D,CAAC;QAED,IAAI,UAAU,GAAG,EAAE,CAAC;QACpB,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,aAAa,EAAE,CAAC;YACvC,IAAI,KAAK,GAAG,QAAQ,EAAE,CAAC;gBACnB,QAAQ,GAAG,KAAK,CAAC;gBACjB,UAAU,GAAG,GAAG,CAAC;YACrB,CAAC;QACL,CAAC;QAED,IAAI,CAAC,OAAO,GAAG;YACX,WAAW,EAAE,UAAU;YACvB,SAAS,EAAE,SAAS;YACpB,eAAe,EAAE,UAAU;SAC9B,CAAC;IACN,CAAC;IAEO,gBAAgB;QACpB,MAAM,MAAM,GAAG,IAAI,GAAG,EAA6B,CAAC;QAEpD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,gBAAgB,CAAC;YAC9C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,eAAe,CAAC;YAC3C,MAAM,GAAG,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;YACnC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC1C,MAAM,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/B,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;aAC1C,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE;YACpB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAClC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAC5D,CAAC;YAEF,OAAO;gBACH,MAAM,EAAE,MAAM;gBACd,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,SAAS;gBAC7C,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,SAAS;gBAC3C,KAAK,EAAE,UAAU,CAAC,MAAM;gBACxB,gBAAgB,EAAE,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI,YAAY,CAAC;gBAClF,aAAa,EAAE,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBAC3D,UAAU,EAAE,KAAK;gBACjB,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBACtC,EAAE,EAAE,CAAC,CAAC,EAAE;oBACR,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC;oBAClC,YAAY,EAAE,CAAC,CAAC,YAAY,IAAI,kBAAkB;oBAClD,QAAQ,EAAE,CAAC,CAAC,eAAe,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE;iBACtE,CAAC,CAAC;aACN,CAAC;QACN,CAAC,CAAC;aACD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,gBAAgB;IAER,eAAe;QACnB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,KAAK,GAA2B;YAClC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ;YAC9C,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU;SACrC,CAAC;QACF,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC;QAC9C,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;QAC3C,OAAO,aAAa,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC;IAC/C,CAAC;IAEO,iBAAiB;QACrB,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,OAAO,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvF,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,OAAO,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzF,CAAC;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IAEO,qBAAqB,CAAC,GAAW;QACrC,sCAAsC;QACtC,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAClD,CAAC;IAEO,eAAe,CAAC,GAAW;QAC/B,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG;YAAE,OAAO,GAAG,CAAC;QAClC,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;IACrC,CAAC;IAEO,kBAAkB,CAAC,OAAe;QACtC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QACjD,IAAI,OAAO,GAAG,CAAC;YAAE,OAAO,UAAU,CAAC;QACnC,IAAI,OAAO,GAAG,EAAE;YAAE,OAAO,OAAO,GAAG,OAAO,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;QACxC,IAAI,MAAM,GAAG,EAAE;YAAE,OAAO,MAAM,GAAG,OAAO,CAAC;QACzC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;QACxC,OAAO,OAAO,GAAG,OAAO,CAAC;IAC7B,CAAC;IAEO,cAAc,CAAC,OAAe;QAClC,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5B,MAAM,MAAM,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QACpG,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACpD,MAAM,EAAE,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACtD,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;IAChE,CAAC;ySApOQ,+BAA+B,yBAA/B,+BAA+B;6DAA/B,+BAA+B;YA9WlC,AAJF,iGAAiB,mEAIR;;YAJT,uCAiGC;;;iFAiRI,+BAA+B;cAvX3C,SAAS;6BACM,KAAK,YACP,8BAA8B,YAC9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAoGT;;kBAkRA,KAAK;;kBASL,KAAK;;kFAXG,+BAA+B;AAuO5C,MAAM,UAAU,0BAA0B,KAAmC,CAAC","sourcesContent":["/**\n * @fileoverview Error Analysis -- Basic.\n *\n * Displays error summary cards, and errors grouped by source (Prompt+Model combination).\n * Each group can be expanded to show individual error details.\n * Data loaded from MJ: AI Prompt Runs where Success=false.\n */\n\nimport {\n Component, Input, Output, EventEmitter,\n OnInit, OnDestroy, ChangeDetectorRef, inject\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { RunView } from '@memberjunction/core';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { GlobalFilterState } from '../../../interfaces/analytics-preferences.interface';\n\n// ── Interfaces ──\n\ninterface FailedRunRecord {\n ID: string;\n RunAt: string;\n ErrorMessage: string | null;\n Model: string | null;\n Prompt: string | null;\n Vendor: string | null;\n ExecutionTimeMS: number | null;\n Status: string;\n}\n\ninterface ErrorSummary {\n TotalErrors: number;\n ErrorRate: number;\n MostCommonError: string;\n}\n\ninterface ErrorGroup {\n Source: string;\n PromptName: string;\n ModelName: string;\n Count: number;\n LastErrorMessage: string;\n LastErrorTime: string;\n IsExpanded: boolean;\n Errors: ErrorDetail[];\n}\n\ninterface ErrorDetail {\n ID: string;\n Time: string;\n ErrorMessage: string;\n Duration: string;\n}\n\nconst FIELDS = [\n 'ID', 'RunAt', 'ErrorMessage', 'Model', 'Prompt',\n 'Vendor', 'ExecutionTimeMS', 'Status'\n];\n\n@Component({\n standalone: false,\n selector: 'app-analytics-error-analysis',\n template: `\n\n @if (IsLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading error data...\"></mj-loading>\n </div>\n } @else {\n <!-- Summary Cards -->\n <div class=\"summary-row\">\n <div class=\"summary-card summary-card--error\">\n <div class=\"summary-icon\">\n <i class=\"fa-solid fa-circle-exclamation\"></i>\n </div>\n <div class=\"summary-content\">\n <div class=\"summary-label\">Total Errors</div>\n <div class=\"summary-value\">{{ Summary.TotalErrors | number }}</div>\n </div>\n </div>\n <div class=\"summary-card\">\n <div class=\"summary-icon summary-icon--warning\">\n <i class=\"fa-solid fa-percentage\"></i>\n </div>\n <div class=\"summary-content\">\n <div class=\"summary-label\">Error Rate</div>\n <div class=\"summary-value\">{{ Summary.ErrorRate | number:'1.1-1' }}%</div>\n </div>\n </div>\n <div class=\"summary-card\">\n <div class=\"summary-icon summary-icon--info\">\n <i class=\"fa-solid fa-bug\"></i>\n </div>\n <div class=\"summary-content\">\n <div class=\"summary-label\">Most Common</div>\n <div class=\"summary-value summary-value--text\" [title]=\"Summary.MostCommonError\">\n {{ Summary.MostCommonError || 'N/A' }}\n </div>\n </div>\n </div>\n </div>\n\n <!-- Error Groups -->\n @if (ErrorGroups.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-check-circle empty-state__icon\"></i>\n <div class=\"empty-state__title\">No Errors Found</div>\n <div class=\"empty-state__subtitle\">No errors detected in the selected time range.</div>\n </div>\n }\n\n @for (group of ErrorGroups; track group.Source) {\n <div class=\"error-group\" [class.error-group--expanded]=\"group.IsExpanded\">\n <div\n class=\"error-group__header\"\n (click)=\"ToggleGroup(group)\"\n role=\"button\"\n tabindex=\"0\"\n (keydown.enter)=\"ToggleGroup(group)\">\n <div class=\"error-group__left\">\n <i [class]=\"group.IsExpanded ? 'fa-solid fa-chevron-down' : 'fa-solid fa-chevron-right'\"\n class=\"expand-icon\"></i>\n <div class=\"error-group__source\">\n <div class=\"source-name\">{{ group.Source }}</div>\n <div class=\"source-details\">\n <span class=\"source-prompt\">{{ group.PromptName }}</span>\n <span class=\"source-separator\">+</span>\n <span class=\"source-model\">{{ group.ModelName }}</span>\n </div>\n </div>\n </div>\n <div class=\"error-group__right\">\n <span class=\"error-count-badge\">{{ group.Count }}</span>\n <div class=\"last-error-time\">{{ group.LastErrorTime }}</div>\n </div>\n </div>\n\n @if (!group.IsExpanded) {\n <div class=\"error-group__preview\">\n <span class=\"preview-label\">Last error:</span>\n {{ group.LastErrorMessage }}\n </div>\n }\n\n @if (group.IsExpanded) {\n <div class=\"error-group__body\">\n @for (err of group.Errors; track err.ID) {\n <div class=\"error-detail\">\n <div class=\"error-detail__header\">\n <span class=\"error-detail__time\">{{ err.Time }}</span>\n @if (err.Duration) {\n <span class=\"error-detail__duration\">{{ err.Duration }}</span>\n }\n </div>\n <div class=\"error-detail__message\">{{ err.ErrorMessage }}</div>\n </div>\n }\n </div>\n }\n </div>\n }\n }\n `,\n styles: [`\n :host { display: block; }\n\n .loading-container {\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 300px;\n }\n\n /* ── Summary Row ── */\n .summary-row {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n margin: 16px 0;\n }\n\n .summary-card {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n padding: 16px;\n display: flex;\n align-items: center;\n gap: 14px;\n }\n\n .summary-card--error {\n border-left: 4px solid var(--mj-status-error);\n }\n\n .summary-icon {\n width: 40px;\n height: 40px;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n font-size: 16px;\n flex-shrink: 0;\n }\n\n .summary-icon--warning {\n background: color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n }\n\n .summary-icon--info {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n }\n\n .summary-label {\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n }\n\n .summary-value {\n font-size: 22px;\n font-weight: 700;\n color: var(--mj-text-primary);\n letter-spacing: -0.02em;\n }\n\n .summary-value--text {\n font-size: 13px;\n font-weight: 500;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 220px;\n }\n\n /* ── Empty State ── */\n .empty-state {\n text-align: center;\n padding: 48px 24px;\n color: var(--mj-text-muted);\n }\n\n .empty-state__icon {\n font-size: 40px;\n color: var(--mj-status-success);\n margin-bottom: 12px;\n }\n\n .empty-state__title {\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n }\n\n .empty-state__subtitle {\n font-size: 13px;\n color: var(--mj-text-muted);\n }\n\n /* ── Error Groups ── */\n .error-group {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n margin-bottom: 8px;\n overflow: hidden;\n transition: border-color 0.2s;\n }\n\n .error-group--expanded {\n border-color: var(--mj-status-error);\n }\n\n .error-group__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 14px 16px;\n cursor: pointer;\n transition: background 0.15s;\n }\n\n .error-group__header:hover {\n background: var(--mj-bg-surface-hover);\n }\n\n .error-group__left {\n display: flex;\n align-items: center;\n gap: 10px;\n min-width: 0;\n }\n\n .expand-icon {\n font-size: 11px;\n color: var(--mj-text-muted);\n width: 16px;\n flex-shrink: 0;\n transition: transform 0.2s;\n }\n\n .error-group__source {\n min-width: 0;\n }\n\n .source-name {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .source-details {\n font-size: 12px;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 4px;\n margin-top: 2px;\n }\n\n .source-separator {\n color: var(--mj-text-disabled);\n }\n\n .error-group__right {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-shrink: 0;\n }\n\n .error-count-badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 28px;\n height: 24px;\n padding: 0 8px;\n border-radius: 12px;\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n font-size: 12px;\n font-weight: 700;\n }\n\n .last-error-time {\n font-size: 12px;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n }\n\n .error-group__preview {\n padding: 0 16px 12px 42px;\n font-size: 12px;\n color: var(--mj-text-muted);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .preview-label {\n color: var(--mj-text-disabled);\n margin-right: 4px;\n }\n\n .error-group__body {\n border-top: 1px solid var(--mj-border-subtle);\n max-height: 400px;\n overflow-y: auto;\n }\n\n .error-detail {\n padding: 12px 16px 12px 42px;\n border-bottom: 1px solid var(--mj-border-subtle);\n }\n\n .error-detail:last-child {\n border-bottom: none;\n }\n\n .error-detail__header {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-bottom: 4px;\n }\n\n .error-detail__time {\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-muted);\n }\n\n .error-detail__duration {\n font-size: 11px;\n color: var(--mj-text-disabled);\n font-variant-numeric: tabular-nums;\n }\n\n .error-detail__message {\n font-size: 13px;\n color: var(--mj-status-error-text, var(--mj-status-error));\n line-height: 1.5;\n word-break: break-word;\n font-family: monospace;\n background: color-mix(in srgb, var(--mj-status-error) 5%, var(--mj-bg-surface));\n padding: 8px 10px;\n border-radius: 6px;\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n }\n\n /* ── Responsive ── */\n @media (max-width: 768px) {\n .summary-row {\n grid-template-columns: 1fr;\n }\n\n .summary-value {\n font-size: 18px;\n }\n }\n `]\n})\nexport class AnalyticsErrorAnalysisComponent extends BaseAngularComponent implements OnInit, OnDestroy {\n private _timeRange = '7d';\n @Input()\n set TimeRange(value: string) {\n const prev = this._timeRange;\n this._timeRange = value;\n if (prev !== value && this.initialized) this.LoadData();\n }\n get TimeRange(): string { return this._timeRange; }\n\n private _filters: GlobalFilterState = { Models: [], Agents: [], Prompts: [], Statuses: [] };\n @Input()\n set Filters(value: GlobalFilterState) {\n const next = value ?? { Models: [], Agents: [], Prompts: [], Statuses: [] };\n const changed = !this.shallowFiltersEqual(this._filters, next);\n this._filters = next;\n if (changed && this.initialized) this.LoadData();\n }\n get Filters(): GlobalFilterState { return this._filters; }\n\n private shallowFiltersEqual(a: GlobalFilterState, b: GlobalFilterState): boolean {\n const sameArr = (x: string[], y: string[]) => x.length === y.length && x.every((v, i) => v === y[i]);\n return sameArr(a.Models, b.Models) && sameArr(a.Agents, b.Agents) && sameArr(a.Prompts, b.Prompts) && sameArr(a.Statuses, b.Statuses);\n }\n\n private cdr = inject(ChangeDetectorRef);\n private destroy$ = new Subject<void>();\n private initialized = false;\n\n public IsLoading = false;\n\n public Summary: ErrorSummary = {\n TotalErrors: 0,\n ErrorRate: 0,\n MostCommonError: ''\n };\n\n public ErrorGroups: ErrorGroup[] = [];\n\n private failedRuns: FailedRunRecord[] = [];\n private totalRunCount = 0;\n\n ngOnInit(): void {\n this.initialized = true;\n this.LoadData();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n // ── Public Handlers ──\n\n public OnTimeRangeChange(range: string): void {\n this.TimeRange = range;\n this.LoadData();\n }\n\n public OnFiltersChange(filters: GlobalFilterState): void {\n this.Filters = filters;\n this.LoadData();\n }\n\n public ToggleGroup(group: ErrorGroup): void {\n group.IsExpanded = !group.IsExpanded;\n this.cdr.detectChanges();\n }\n\n // ── Data Loading ──\n\n private async LoadData(): Promise<void> {\n this.IsLoading = true;\n this.cdr.detectChanges();\n\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const dateFilter = this.buildDateFilter();\n const extraFilters = this.buildExtraFilters();\n const baseFilter = [dateFilter, ...extraFilters].filter(Boolean).join(' AND ');\n const errorFilter = baseFilter + ' AND Success = 0';\n\n const [errorResult, totalResult] = await rv.RunViews([\n {\n EntityName: 'MJ: AI Prompt Runs',\n ExtraFilter: errorFilter,\n Fields: FIELDS,\n OrderBy: 'RunAt DESC',\n ResultType: 'simple'\n },\n {\n EntityName: 'MJ: AI Prompt Runs',\n ExtraFilter: baseFilter,\n Fields: ['ID'],\n ResultType: 'simple'\n }\n ]);\n\n this.failedRuns = (errorResult?.Results ?? []) as FailedRunRecord[];\n this.totalRunCount = totalResult?.Results?.length ?? 0;\n\n this.computeSummary();\n this.buildErrorGroups();\n } catch (e) {\n console.error('Error Analysis load error:', e);\n } finally {\n this.IsLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n // ── Computations ──\n\n private computeSummary(): void {\n const errorCount = this.failedRuns.length;\n const errorRate = this.totalRunCount > 0 ? (errorCount / this.totalRunCount) * 100 : 0;\n\n // Find most common error by grouping error messages\n const messageCounts = new Map<string, number>();\n for (const run of this.failedRuns) {\n const msg = this.normalizeErrorMessage(run.ErrorMessage ?? 'Unknown error');\n messageCounts.set(msg, (messageCounts.get(msg) ?? 0) + 1);\n }\n\n let mostCommon = '';\n let maxCount = 0;\n for (const [msg, count] of messageCounts) {\n if (count > maxCount) {\n maxCount = count;\n mostCommon = msg;\n }\n }\n\n this.Summary = {\n TotalErrors: errorCount,\n ErrorRate: errorRate,\n MostCommonError: mostCommon\n };\n }\n\n private buildErrorGroups(): void {\n const groups = new Map<string, FailedRunRecord[]>();\n\n for (const run of this.failedRuns) {\n const prompt = run.Prompt ?? 'Unknown Prompt';\n const model = run.Model ?? 'Unknown Model';\n const key = prompt + ' + ' + model;\n if (!groups.has(key)) groups.set(key, []);\n groups.get(key)!.push(run);\n }\n\n this.ErrorGroups = Array.from(groups.entries())\n .map(([source, runs]) => {\n const sortedRuns = runs.sort((a, b) =>\n new Date(b.RunAt).getTime() - new Date(a.RunAt).getTime()\n );\n\n return {\n Source: source,\n PromptName: sortedRuns[0].Prompt ?? 'Unknown',\n ModelName: sortedRuns[0].Model ?? 'Unknown',\n Count: sortedRuns.length,\n LastErrorMessage: this.truncateMessage(sortedRuns[0].ErrorMessage ?? 'No message'),\n LastErrorTime: this.formatRelativeTime(sortedRuns[0].RunAt),\n IsExpanded: false,\n Errors: sortedRuns.slice(0, 20).map(r => ({\n ID: r.ID,\n Time: this.formatDateTime(r.RunAt),\n ErrorMessage: r.ErrorMessage ?? 'No error message',\n Duration: r.ExecutionTimeMS != null ? r.ExecutionTimeMS + 'ms' : ''\n }))\n };\n })\n .sort((a, b) => b.Count - a.Count);\n }\n\n // ── Helpers ──\n\n private buildDateFilter(): string {\n const now = new Date();\n const msMap: Record<string, number> = {\n '1h': 3600000, '6h': 21600000, '24h': 86400000,\n '7d': 604800000, '30d': 2592000000\n };\n const ms = msMap[this.TimeRange] ?? 604800000;\n const start = new Date(now.getTime() - ms);\n return `RunAt >= '${start.toISOString()}'`;\n }\n\n private buildExtraFilters(): string[] {\n const filters: string[] = [];\n if (this.Filters.Models.length > 0) {\n filters.push(`ModelID IN (${this.Filters.Models.map(id => `'${id}'`).join(',')})`);\n }\n if (this.Filters.Prompts.length > 0) {\n filters.push(`PromptID IN (${this.Filters.Prompts.map(id => `'${id}'`).join(',')})`);\n }\n return filters;\n }\n\n private normalizeErrorMessage(msg: string): string {\n // Truncate and normalize for grouping\n return msg.slice(0, 100).trim().toLowerCase();\n }\n\n private truncateMessage(msg: string): string {\n if (msg.length <= 120) return msg;\n return msg.slice(0, 120) + '...';\n }\n\n private formatRelativeTime(dateStr: string): string {\n const now = Date.now();\n const then = new Date(dateStr).getTime();\n const diffMin = Math.floor((now - then) / 60000);\n if (diffMin < 1) return 'just now';\n if (diffMin < 60) return diffMin + 'm ago';\n const diffHr = Math.floor(diffMin / 60);\n if (diffHr < 24) return diffHr + 'h ago';\n const diffDay = Math.floor(diffHr / 24);\n return diffDay + 'd ago';\n }\n\n private formatDateTime(dateStr: string): string {\n const d = new Date(dateStr);\n const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n const hh = d.getHours().toString().padStart(2, '0');\n const mm = d.getMinutes().toString().padStart(2, '0');\n return `${months[d.getMonth()]} ${d.getDate()} ${hh}:${mm}`;\n }\n}\n\nexport function LoadAnalyticsErrorAnalysis() { /* tree-shaking prevention */ }\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"executive-summary.component.d.ts","sourceRoot":"","sources":["../../../../../src/AI/components/analytics/executive-summary/executive-summary.component.ts"],"names":[],"mappings":"AAAA,OAAO,EACqB,YAAY,EAAE,MAAM,EAAE,SAAS,EAE1D,MAAM,eAAe,CAAC;AAGvB,OAAO,EAGL,SAAS,EAEV,MAAM,8CAA8C,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qDAAqD,CAAC;AACxF,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;;AAIrE,UAAU,cAAc;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,IAAI,GAAG,MAAM,GAAG,QAAQ,CAAC;IACzC,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,YAAY;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAID,qBAqba,kCAAmC,SAAQ,oBAAqB,YAAW,MAAM,EAAE,SAAS;IAGvG,OAAO,CAAC,UAAU,CAAS;IAC3B,IACI,SAAS,CAAC,KAAK,EAAE,MAAM,EAO1B;IACD,IAAI,SAAS,IAAI,MAAM,CAA4B;IAE1C,OAAO,EAAE,iBAAiB,CAAyD;IAElF,eAAe,uBAA8B;IAC7C,aAAa,kCAAyC;IACtD,eAAe,uBAA8B;IAIvD,OAAO,CAAC,sBAAsB,CAAoC;IAClE,OAAO,CAAC,GAAG,CAA6B;IAIxC,QAAQ,EAAE,cAAc,EAAE,CAAM;IAChC,UAAU,EAAE,SAAS,EAAE,CAAM;IAC7B,YAAY,EAAE,WAAW,EAAE,CAAM;IACjC,aAAa,EAAE,YAAY,EAAE,CAAM;IACnC,SAAS,UAAS;IAClB,iBAAiB,UAAS;IAC1B,WAAW,SAAY;IAEvB,gBAAgB,EAAE,gBAAgB,CAKhC;IAIF,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,YAAY,CAA8B;IAIlD,QAAQ,IAAI,IAAI;IAOhB,WAAW,IAAI,IAAI;IAOnB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKtC,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAKjD,gBAAgB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAUvC,SAAS,IAAI,IAAI;IAOjB,eAAe,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IAMxC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAYhC,OAAO,CAAC,UAAU,CAA8B;IAEhD,OAAO,CAAC,kBAAkB;IAkC1B,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,gBAAgB;IAyBxB,OAAO,CAAC,cAAc;YAaR,kBAAkB;IAwBhC,OAAO,CAAC,eAAe;IA+CvB,OAAO,CAAC,YAAY;IAuBpB,OAAO,CAAC,YAAY;IAcpB,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,gBAAgB;IAiBxB,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,iBAAiB;IAoCzB,OAAO,CAAC,kBAAkB;IAqB1B,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,aAAa;yCAjZV,kCAAkC;2CAAlC,kCAAkC;CAsZ9C;AAED,wBAAgB,6BAA6B,SAE5C"}
1
+ {"version":3,"file":"executive-summary.component.d.ts","sourceRoot":"","sources":["../../../../../src/AI/components/analytics/executive-summary/executive-summary.component.ts"],"names":[],"mappings":"AAAA,OAAO,EACqB,YAAY,EAAE,MAAM,EAAE,SAAS,EAE1D,MAAM,eAAe,CAAC;AAGvB,OAAO,EAGL,SAAS,EAEV,MAAM,8CAA8C,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qDAAqD,CAAC;AACxF,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;;AAIrE,UAAU,cAAc;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,IAAI,GAAG,MAAM,GAAG,QAAQ,CAAC;IACzC,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,YAAY;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAID,qBAuaa,kCAAmC,SAAQ,oBAAqB,YAAW,MAAM,EAAE,SAAS;IAGvG,OAAO,CAAC,UAAU,CAAS;IAC3B,IACI,SAAS,CAAC,KAAK,EAAE,MAAM,EAO1B;IACD,IAAI,SAAS,IAAI,MAAM,CAA4B;IAE1C,OAAO,EAAE,iBAAiB,CAAyD;IAElF,eAAe,uBAA8B;IAC7C,aAAa,kCAAyC;IACtD,eAAe,uBAA8B;IAIvD,OAAO,CAAC,sBAAsB,CAAoC;IAClE,OAAO,CAAC,GAAG,CAA6B;IAIxC,QAAQ,EAAE,cAAc,EAAE,CAAM;IAChC,UAAU,EAAE,SAAS,EAAE,CAAM;IAC7B,YAAY,EAAE,WAAW,EAAE,CAAM;IACjC,aAAa,EAAE,YAAY,EAAE,CAAM;IACnC,SAAS,UAAS;IAClB,iBAAiB,UAAS;IAC1B,WAAW,SAAY;IAEvB,gBAAgB,EAAE,gBAAgB,CAKhC;IAIF,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,YAAY,CAA8B;IAIlD,QAAQ,IAAI,IAAI;IAOhB,WAAW,IAAI,IAAI;IAOnB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKtC,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAKjD,gBAAgB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAUvC,SAAS,IAAI,IAAI;IAOjB,eAAe,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IAMxC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAYhC,OAAO,CAAC,UAAU,CAA8B;IAEhD,OAAO,CAAC,kBAAkB;IAkC1B,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,gBAAgB;IAyBxB,OAAO,CAAC,cAAc;YAaR,kBAAkB;IAwBhC,OAAO,CAAC,eAAe;IA+CvB,OAAO,CAAC,YAAY;IAuBpB,OAAO,CAAC,YAAY;IAcpB,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,gBAAgB;IAiBxB,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,iBAAiB;IAoCzB,OAAO,CAAC,kBAAkB;IAqB1B,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,aAAa;yCAjZV,kCAAkC;2CAAlC,kCAAkC;CAsZ9C;AAED,wBAAgB,6BAA6B,SAE5C"}
@@ -6,29 +6,28 @@ import { BaseAngularComponent } from '@memberjunction/ng-base-types';
6
6
  import * as i0 from "@angular/core";
7
7
  import * as i1 from "@memberjunction/ng-shared-generic";
8
8
  import * as i2 from "../../charts/time-series-chart.component";
9
- import * as i3 from "../analytics-filter-bar.component";
10
- import * as i4 from "@angular/common";
9
+ import * as i3 from "@angular/common";
11
10
  const _forTrack0 = ($index, $item) => $item.Label;
12
11
  const _forTrack1 = ($index, $item) => $item.Name;
13
12
  const _forTrack2 = ($index, $item) => $item.Source;
14
- function AnalyticsExecutiveSummaryComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
15
- i0.ɵɵelementStart(0, "div", 1);
16
- i0.ɵɵelement(1, "mj-loading", 18);
13
+ function AnalyticsExecutiveSummaryComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
14
+ i0.ɵɵelementStart(0, "div", 0);
15
+ i0.ɵɵelement(1, "mj-loading", 17);
17
16
  i0.ɵɵelementEnd();
18
17
  } }
19
- function AnalyticsExecutiveSummaryComponent_For_4_For_7_Template(rf, ctx) { if (rf & 1) {
20
- i0.ɵɵelement(0, "div", 25);
18
+ function AnalyticsExecutiveSummaryComponent_For_3_For_7_Template(rf, ctx) { if (rf & 1) {
19
+ i0.ɵɵelement(0, "div", 24);
21
20
  } if (rf & 2) {
22
21
  const bar_r1 = ctx.$implicit;
23
22
  const card_r2 = i0.ɵɵnextContext().$implicit;
24
23
  i0.ɵɵstyleProp("height", bar_r1, "%")("background", card_r2.BorderColor);
25
24
  } }
26
- function AnalyticsExecutiveSummaryComponent_For_4_Conditional_8_Template(rf, ctx) { if (rf & 1) {
27
- i0.ɵɵelementStart(0, "div", 26);
25
+ function AnalyticsExecutiveSummaryComponent_For_3_Conditional_8_Template(rf, ctx) { if (rf & 1) {
26
+ i0.ɵɵelementStart(0, "div", 25);
28
27
  i0.ɵɵelement(1, "i");
29
28
  i0.ɵɵtext(2);
30
29
  i0.ɵɵpipe(3, "number");
31
- i0.ɵɵelementStart(4, "span", 27);
30
+ i0.ɵɵelementStart(4, "span", 26);
32
31
  i0.ɵɵtext(5);
33
32
  i0.ɵɵelementEnd()();
34
33
  } if (rf & 2) {
@@ -42,17 +41,17 @@ function AnalyticsExecutiveSummaryComponent_For_4_Conditional_8_Template(rf, ctx
42
41
  i0.ɵɵadvance(3);
43
42
  i0.ɵɵtextInterpolate1("vs prev ", ctx_r2.PeriodLabel);
44
43
  } }
45
- function AnalyticsExecutiveSummaryComponent_For_4_Template(rf, ctx) { if (rf & 1) {
46
- i0.ɵɵelementStart(0, "div", 19)(1, "div", 20);
44
+ function AnalyticsExecutiveSummaryComponent_For_3_Template(rf, ctx) { if (rf & 1) {
45
+ i0.ɵɵelementStart(0, "div", 18)(1, "div", 19);
47
46
  i0.ɵɵtext(2);
48
47
  i0.ɵɵelementEnd();
49
- i0.ɵɵelementStart(3, "div", 21);
48
+ i0.ɵɵelementStart(3, "div", 20);
50
49
  i0.ɵɵtext(4);
51
50
  i0.ɵɵelementEnd();
52
- i0.ɵɵelementStart(5, "div", 22);
53
- i0.ɵɵrepeaterCreate(6, AnalyticsExecutiveSummaryComponent_For_4_For_7_Template, 1, 4, "div", 23, i0.ɵɵrepeaterTrackByIndex);
51
+ i0.ɵɵelementStart(5, "div", 21);
52
+ i0.ɵɵrepeaterCreate(6, AnalyticsExecutiveSummaryComponent_For_3_For_7_Template, 1, 4, "div", 22, i0.ɵɵrepeaterTrackByIndex);
54
53
  i0.ɵɵelementEnd();
55
- i0.ɵɵconditionalCreate(8, AnalyticsExecutiveSummaryComponent_For_4_Conditional_8_Template, 6, 11, "div", 24);
54
+ i0.ɵɵconditionalCreate(8, AnalyticsExecutiveSummaryComponent_For_3_Conditional_8_Template, 6, 11, "div", 23);
56
55
  i0.ɵɵelementEnd();
57
56
  } if (rf & 2) {
58
57
  const card_r2 = ctx.$implicit;
@@ -67,29 +66,29 @@ function AnalyticsExecutiveSummaryComponent_For_4_Template(rf, ctx) { if (rf & 1
67
66
  i0.ɵɵadvance(2);
68
67
  i0.ɵɵconditional(ctx_r2.ComparisonEnabled && card_r2.DeltaDirection !== "stable" ? 8 : -1);
69
68
  } }
70
- function AnalyticsExecutiveSummaryComponent_Conditional_16_Template(rf, ctx) { if (rf & 1) {
71
- i0.ɵɵelementStart(0, "div", 13);
69
+ function AnalyticsExecutiveSummaryComponent_Conditional_15_Template(rf, ctx) { if (rf & 1) {
70
+ i0.ɵɵelementStart(0, "div", 12);
72
71
  i0.ɵɵtext(1, "No data for selected period");
73
72
  i0.ɵɵelementEnd();
74
73
  } }
75
- function AnalyticsExecutiveSummaryComponent_For_18_Template(rf, ctx) { if (rf & 1) {
74
+ function AnalyticsExecutiveSummaryComponent_For_17_Template(rf, ctx) { if (rf & 1) {
76
75
  const _r4 = i0.ɵɵgetCurrentView();
77
- i0.ɵɵelementStart(0, "div", 28);
78
- i0.ɵɵlistener("click", function AnalyticsExecutiveSummaryComponent_For_18_Template_div_click_0_listener() { const item_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OnConsumerClick(item_r5)); })("keydown.enter", function AnalyticsExecutiveSummaryComponent_For_18_Template_div_keydown_enter_0_listener() { const item_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OnConsumerClick(item_r5)); });
79
- i0.ɵɵelementStart(1, "div", 29);
76
+ i0.ɵɵelementStart(0, "div", 27);
77
+ i0.ɵɵlistener("click", function AnalyticsExecutiveSummaryComponent_For_17_Template_div_click_0_listener() { const item_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OnConsumerClick(item_r5)); })("keydown.enter", function AnalyticsExecutiveSummaryComponent_For_17_Template_div_keydown_enter_0_listener() { const item_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OnConsumerClick(item_r5)); });
78
+ i0.ɵɵelementStart(1, "div", 28);
80
79
  i0.ɵɵtext(2);
81
80
  i0.ɵɵelementEnd();
82
- i0.ɵɵelementStart(3, "div", 30);
81
+ i0.ɵɵelementStart(3, "div", 29);
83
82
  i0.ɵɵtext(4);
84
83
  i0.ɵɵelementEnd();
85
- i0.ɵɵelementStart(5, "div", 31);
84
+ i0.ɵɵelementStart(5, "div", 30);
86
85
  i0.ɵɵtext(6);
87
86
  i0.ɵɵelementEnd();
88
- i0.ɵɵelementStart(7, "div", 32);
87
+ i0.ɵɵelementStart(7, "div", 31);
89
88
  i0.ɵɵtext(8);
90
89
  i0.ɵɵelementEnd();
91
- i0.ɵɵelementStart(9, "div", 33);
92
- i0.ɵɵelement(10, "div", 34);
90
+ i0.ɵɵelementStart(9, "div", 32);
91
+ i0.ɵɵelement(10, "div", 33);
93
92
  i0.ɵɵelementEnd()();
94
93
  } if (rf & 2) {
95
94
  const item_r5 = ctx.$implicit;
@@ -111,22 +110,22 @@ function AnalyticsExecutiveSummaryComponent_For_18_Template(rf, ctx) { if (rf &
111
110
  i0.ɵɵadvance(2);
112
111
  i0.ɵɵstyleProp("width", item_r5.Proportion * 100, "%");
113
112
  } }
114
- function AnalyticsExecutiveSummaryComponent_Conditional_27_Template(rf, ctx) { if (rf & 1) {
115
- i0.ɵɵelementStart(0, "div", 13);
113
+ function AnalyticsExecutiveSummaryComponent_Conditional_26_Template(rf, ctx) { if (rf & 1) {
114
+ i0.ɵɵelementStart(0, "div", 12);
116
115
  i0.ɵɵtext(1, "No errors in selected period");
117
116
  i0.ɵɵelementEnd();
118
117
  } }
119
- function AnalyticsExecutiveSummaryComponent_For_29_Template(rf, ctx) { if (rf & 1) {
120
- i0.ɵɵelementStart(0, "div", 16)(1, "div", 35);
121
- i0.ɵɵelement(2, "i", 36);
118
+ function AnalyticsExecutiveSummaryComponent_For_28_Template(rf, ctx) { if (rf & 1) {
119
+ i0.ɵɵelementStart(0, "div", 15)(1, "div", 34);
120
+ i0.ɵɵelement(2, "i", 35);
122
121
  i0.ɵɵelementEnd();
123
- i0.ɵɵelementStart(3, "div", 37)(4, "div", 38);
122
+ i0.ɵɵelementStart(3, "div", 36)(4, "div", 37);
124
123
  i0.ɵɵtext(5);
125
124
  i0.ɵɵelementEnd();
126
- i0.ɵɵelementStart(6, "div", 39);
125
+ i0.ɵɵelementStart(6, "div", 38);
127
126
  i0.ɵɵtext(7);
128
127
  i0.ɵɵelementEnd()();
129
- i0.ɵɵelementStart(8, "div", 40);
128
+ i0.ɵɵelementStart(8, "div", 39);
130
129
  i0.ɵɵtext(9);
131
130
  i0.ɵɵelementEnd()();
132
131
  } if (rf & 2) {
@@ -140,12 +139,12 @@ function AnalyticsExecutiveSummaryComponent_For_29_Template(rf, ctx) { if (rf &
140
139
  i0.ɵɵadvance(2);
141
140
  i0.ɵɵtextInterpolate(item_r6.Count);
142
141
  } }
143
- function AnalyticsExecutiveSummaryComponent_Conditional_30_Template(rf, ctx) { if (rf & 1) {
142
+ function AnalyticsExecutiveSummaryComponent_Conditional_29_Template(rf, ctx) { if (rf & 1) {
144
143
  const _r7 = i0.ɵɵgetCurrentView();
145
- i0.ɵɵelementStart(0, "button", 41);
146
- i0.ɵɵlistener("click", function AnalyticsExecutiveSummaryComponent_Conditional_30_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.SectionNavigate.emit("error-analysis")); });
144
+ i0.ɵɵelementStart(0, "button", 40);
145
+ i0.ɵɵlistener("click", function AnalyticsExecutiveSummaryComponent_Conditional_29_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.SectionNavigate.emit("error-analysis")); });
147
146
  i0.ɵɵtext(1, " View All Errors ");
148
- i0.ɵɵelement(2, "i", 42);
147
+ i0.ɵɵelement(2, "i", 41);
149
148
  i0.ɵɵelementEnd();
150
149
  } }
151
150
  // ─── Component ─────────────────────────────────────────────────────
@@ -464,79 +463,60 @@ export class AnalyticsExecutiveSummaryComponent extends BaseAngularComponent {
464
463
  return Math.round(ms) + 'ms';
465
464
  }
466
465
  static ɵfac = /*@__PURE__*/ (() => { let ɵAnalyticsExecutiveSummaryComponent_BaseFactory; return function AnalyticsExecutiveSummaryComponent_Factory(__ngFactoryType__) { return (ɵAnalyticsExecutiveSummaryComponent_BaseFactory || (ɵAnalyticsExecutiveSummaryComponent_BaseFactory = i0.ɵɵgetInheritedFactory(AnalyticsExecutiveSummaryComponent)))(__ngFactoryType__ || AnalyticsExecutiveSummaryComponent); }; })();
467
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AnalyticsExecutiveSummaryComponent, selectors: [["app-analytics-executive-summary"]], inputs: { TimeRange: "TimeRange", Filters: "Filters" }, outputs: { TimeRangeChange: "TimeRangeChange", FiltersChange: "FiltersChange", SectionNavigate: "SectionNavigate" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 31, vars: 15, consts: [[3, "TimeRangeChange", "FiltersChange", "CompareToggled", "TimeRange", "Filters", "ShowCompareToggle", "ShowModelFilter", "ShowAgentFilter", "ShowPromptFilter", "ShowStatusFilter"], [1, "loading-container"], [1, "kpi-row"], [1, "kpi-card", 3, "border-left-color"], [1, "trends-panel"], ["title", "Execution Trends", 3, "data", "config"], [1, "panels-grid"], [1, "panel"], [1, "panel-header"], [1, "panel-header__title"], [1, "fa-solid", "fa-ranking-star", "panel-header__icon"], [1, "panel-header__subtitle"], [1, "panel-body"], [1, "panel-empty"], ["role", "button", "tabindex", "0", 1, "consumer-item"], [1, "fa-solid", "fa-triangle-exclamation", "panel-header__icon", "panel-header__icon--error"], [1, "error-item"], [1, "view-all-link"], ["text", "Loading executive summary...", "size", "medium"], [1, "kpi-card"], [1, "kpi-label"], [1, "kpi-value"], [1, "kpi-sparkline"], [1, "spark-bar", 3, "height", "background"], [1, "kpi-delta", 3, "kpi-delta--good", "kpi-delta--bad"], [1, "spark-bar"], [1, "kpi-delta"], [1, "kpi-delta__period"], ["role", "button", "tabindex", "0", 1, "consumer-item", 3, "click", "keydown.enter"], [1, "consumer-rank"], [1, "consumer-type-pill"], [1, "consumer-name", 3, "title"], [1, "consumer-cost"], [1, "consumer-bar-container"], [1, "consumer-bar"], [1, "error-icon"], [1, "fa-solid", "fa-circle-exclamation"], [1, "error-info"], [1, "error-source"], [1, "error-message", 3, "title"], [1, "error-count"], [1, "view-all-link", 3, "click"], [1, "fa-solid", "fa-arrow-right"]], template: function AnalyticsExecutiveSummaryComponent_Template(rf, ctx) { if (rf & 1) {
468
- i0.ɵɵelementStart(0, "app-analytics-filter-bar", 0);
469
- i0.ɵɵlistener("TimeRangeChange", function AnalyticsExecutiveSummaryComponent_Template_app_analytics_filter_bar_TimeRangeChange_0_listener($event) { return ctx.OnTimeRangeChange($event); })("FiltersChange", function AnalyticsExecutiveSummaryComponent_Template_app_analytics_filter_bar_FiltersChange_0_listener($event) { return ctx.OnFiltersChange($event); })("CompareToggled", function AnalyticsExecutiveSummaryComponent_Template_app_analytics_filter_bar_CompareToggled_0_listener($event) { return ctx.OnCompareToggled($event); });
466
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AnalyticsExecutiveSummaryComponent, selectors: [["app-analytics-executive-summary"]], inputs: { TimeRange: "TimeRange", Filters: "Filters" }, outputs: { TimeRangeChange: "TimeRangeChange", FiltersChange: "FiltersChange", SectionNavigate: "SectionNavigate" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 30, vars: 8, consts: [[1, "loading-container"], [1, "kpi-row"], [1, "kpi-card", 3, "border-left-color"], [1, "trends-panel"], ["title", "Execution Trends", 3, "data", "config"], [1, "panels-grid"], [1, "panel"], [1, "panel-header"], [1, "panel-header__title"], [1, "fa-solid", "fa-ranking-star", "panel-header__icon"], [1, "panel-header__subtitle"], [1, "panel-body"], [1, "panel-empty"], ["role", "button", "tabindex", "0", 1, "consumer-item"], [1, "fa-solid", "fa-triangle-exclamation", "panel-header__icon", "panel-header__icon--error"], [1, "error-item"], [1, "view-all-link"], ["text", "Loading executive summary...", "size", "medium"], [1, "kpi-card"], [1, "kpi-label"], [1, "kpi-value"], [1, "kpi-sparkline"], [1, "spark-bar", 3, "height", "background"], [1, "kpi-delta", 3, "kpi-delta--good", "kpi-delta--bad"], [1, "spark-bar"], [1, "kpi-delta"], [1, "kpi-delta__period"], ["role", "button", "tabindex", "0", 1, "consumer-item", 3, "click", "keydown.enter"], [1, "consumer-rank"], [1, "consumer-type-pill"], [1, "consumer-name", 3, "title"], [1, "consumer-cost"], [1, "consumer-bar-container"], [1, "consumer-bar"], [1, "error-icon"], [1, "fa-solid", "fa-circle-exclamation"], [1, "error-info"], [1, "error-source"], [1, "error-message", 3, "title"], [1, "error-count"], [1, "view-all-link", 3, "click"], [1, "fa-solid", "fa-arrow-right"]], template: function AnalyticsExecutiveSummaryComponent_Template(rf, ctx) { if (rf & 1) {
467
+ i0.ɵɵconditionalCreate(0, AnalyticsExecutiveSummaryComponent_Conditional_0_Template, 2, 0, "div", 0);
468
+ i0.ɵɵelementStart(1, "div", 1);
469
+ i0.ɵɵrepeaterCreate(2, AnalyticsExecutiveSummaryComponent_For_3_Template, 9, 5, "div", 2, _forTrack0);
470
470
  i0.ɵɵelementEnd();
471
- i0.ɵɵconditionalCreate(1, AnalyticsExecutiveSummaryComponent_Conditional_1_Template, 2, 0, "div", 1);
472
- i0.ɵɵelementStart(2, "div", 2);
473
- i0.ɵɵrepeaterCreate(3, AnalyticsExecutiveSummaryComponent_For_4_Template, 9, 5, "div", 3, _forTrack0);
471
+ i0.ɵɵelementStart(4, "div", 3);
472
+ i0.ɵɵelement(5, "app-time-series-chart", 4);
474
473
  i0.ɵɵelementEnd();
475
- i0.ɵɵelementStart(5, "div", 4);
476
- i0.ɵɵelement(6, "app-time-series-chart", 5);
474
+ i0.ɵɵelementStart(6, "div", 5)(7, "div", 6)(8, "div", 7)(9, "div", 8);
475
+ i0.ɵɵelement(10, "i", 9);
476
+ i0.ɵɵtext(11, " Top Consumers ");
477
477
  i0.ɵɵelementEnd();
478
- i0.ɵɵelementStart(7, "div", 6)(8, "div", 7)(9, "div", 8)(10, "div", 9);
479
- i0.ɵɵelement(11, "i", 10);
480
- i0.ɵɵtext(12, " Top Consumers ");
481
- i0.ɵɵelementEnd();
482
- i0.ɵɵelementStart(13, "span", 11);
483
- i0.ɵɵtext(14, "by cost");
478
+ i0.ɵɵelementStart(12, "span", 10);
479
+ i0.ɵɵtext(13, "by cost");
484
480
  i0.ɵɵelementEnd()();
485
- i0.ɵɵelementStart(15, "div", 12);
486
- i0.ɵɵconditionalCreate(16, AnalyticsExecutiveSummaryComponent_Conditional_16_Template, 2, 0, "div", 13);
487
- i0.ɵɵrepeaterCreate(17, AnalyticsExecutiveSummaryComponent_For_18_Template, 11, 11, "div", 14, _forTrack1);
481
+ i0.ɵɵelementStart(14, "div", 11);
482
+ i0.ɵɵconditionalCreate(15, AnalyticsExecutiveSummaryComponent_Conditional_15_Template, 2, 0, "div", 12);
483
+ i0.ɵɵrepeaterCreate(16, AnalyticsExecutiveSummaryComponent_For_17_Template, 11, 11, "div", 13, _forTrack1);
488
484
  i0.ɵɵelementEnd()();
489
- i0.ɵɵelementStart(19, "div", 7)(20, "div", 8)(21, "div", 9);
490
- i0.ɵɵelement(22, "i", 15);
491
- i0.ɵɵtext(23, " Error Hotspots ");
485
+ i0.ɵɵelementStart(18, "div", 6)(19, "div", 7)(20, "div", 8);
486
+ i0.ɵɵelement(21, "i", 14);
487
+ i0.ɵɵtext(22, " Error Hotspots ");
492
488
  i0.ɵɵelementEnd();
493
- i0.ɵɵelementStart(24, "span", 11);
494
- i0.ɵɵtext(25);
489
+ i0.ɵɵelementStart(23, "span", 10);
490
+ i0.ɵɵtext(24);
495
491
  i0.ɵɵelementEnd()();
496
- i0.ɵɵelementStart(26, "div", 12);
497
- i0.ɵɵconditionalCreate(27, AnalyticsExecutiveSummaryComponent_Conditional_27_Template, 2, 0, "div", 13);
498
- i0.ɵɵrepeaterCreate(28, AnalyticsExecutiveSummaryComponent_For_29_Template, 10, 4, "div", 16, _forTrack2);
499
- i0.ɵɵconditionalCreate(30, AnalyticsExecutiveSummaryComponent_Conditional_30_Template, 3, 0, "button", 17);
492
+ i0.ɵɵelementStart(25, "div", 11);
493
+ i0.ɵɵconditionalCreate(26, AnalyticsExecutiveSummaryComponent_Conditional_26_Template, 2, 0, "div", 12);
494
+ i0.ɵɵrepeaterCreate(27, AnalyticsExecutiveSummaryComponent_For_28_Template, 10, 4, "div", 15, _forTrack2);
495
+ i0.ɵɵconditionalCreate(29, AnalyticsExecutiveSummaryComponent_Conditional_29_Template, 3, 0, "button", 16);
500
496
  i0.ɵɵelementEnd()()();
501
497
  } if (rf & 2) {
502
- i0.ɵɵproperty("TimeRange", ctx.TimeRange)("Filters", ctx.Filters)("ShowCompareToggle", true)("ShowModelFilter", false)("ShowAgentFilter", false)("ShowPromptFilter", false)("ShowStatusFilter", false);
503
- i0.ɵɵadvance();
504
- i0.ɵɵconditional(ctx.IsLoading && ctx.KpiCards.length === 0 ? 1 : -1);
498
+ i0.ɵɵconditional(ctx.IsLoading && ctx.KpiCards.length === 0 ? 0 : -1);
505
499
  i0.ɵɵadvance(2);
506
500
  i0.ɵɵrepeater(ctx.KpiCards);
507
501
  i0.ɵɵadvance(3);
508
502
  i0.ɵɵproperty("data", ctx.TrendsData)("config", ctx.TimeSeriesConfig);
509
503
  i0.ɵɵadvance(10);
510
- i0.ɵɵconditional(ctx.TopConsumers.length === 0 ? 16 : -1);
504
+ i0.ɵɵconditional(ctx.TopConsumers.length === 0 ? 15 : -1);
511
505
  i0.ɵɵadvance();
512
506
  i0.ɵɵrepeater(ctx.TopConsumers);
513
507
  i0.ɵɵadvance(8);
514
508
  i0.ɵɵtextInterpolate2(" ", ctx.ErrorHotspots.length, " source", ctx.ErrorHotspots.length !== 1 ? "s" : "", " ");
515
509
  i0.ɵɵadvance(2);
516
- i0.ɵɵconditional(ctx.ErrorHotspots.length === 0 ? 27 : -1);
510
+ i0.ɵɵconditional(ctx.ErrorHotspots.length === 0 ? 26 : -1);
517
511
  i0.ɵɵadvance();
518
512
  i0.ɵɵrepeater(ctx.ErrorHotspots);
519
513
  i0.ɵɵadvance(2);
520
- i0.ɵɵconditional(ctx.ErrorHotspots.length > 0 ? 30 : -1);
521
- } }, dependencies: [i1.LoadingComponent, i2.TimeSeriesChartComponent, i3.AnalyticsFilterBarComponent, i4.DecimalPipe], styles: ["\n\n [_nghost-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 20px;\n padding: 4px;\n }\n\n \n\n .loading-container[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 60px 20px;\n }\n\n \n\n .kpi-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n gap: 14px;\n }\n .kpi-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-left: 4px solid var(--mj-brand-primary);\n border-radius: 12px;\n padding: 16px 18px;\n display: flex;\n flex-direction: column;\n gap: 6px;\n transition: all 0.25s ease;\n }\n .kpi-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: 0 6px 20px color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n }\n .kpi-label[_ngcontent-%COMP%] {\n font-size: 10px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.6px;\n color: var(--mj-text-muted);\n }\n .kpi-value[_ngcontent-%COMP%] {\n font-size: 24px;\n font-weight: 700;\n color: var(--mj-text-primary);\n line-height: 1.1;\n letter-spacing: -0.02em;\n }\n\n \n\n .kpi-sparkline[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n gap: 2px;\n height: 24px;\n margin-top: 4px;\n }\n .spark-bar[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 4px;\n max-width: 8px;\n border-radius: 1px;\n opacity: 0.35;\n transition: opacity 0.15s ease;\n }\n .kpi-card[_ngcontent-%COMP%]:hover .spark-bar[_ngcontent-%COMP%] {\n opacity: 0.55;\n }\n\n \n\n .kpi-delta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 11px;\n font-weight: 600;\n margin-top: 2px;\n }\n .kpi-delta--good[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n }\n .kpi-delta--bad[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n }\n .kpi-delta__period[_ngcontent-%COMP%] {\n font-weight: 400;\n color: var(--mj-text-disabled);\n }\n\n \n\n .trends-panel[_ngcontent-%COMP%] {\n height: 320px;\n border-radius: 12px;\n overflow: hidden;\n }\n\n \n\n .panels-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 16px;\n }\n .panel[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n overflow: hidden;\n }\n .panel-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 14px 18px;\n border-bottom: 1px solid var(--mj-border-subtle);\n }\n .panel-header__title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n }\n .panel-header__icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 14px;\n }\n .panel-header__icon--error[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n }\n .panel-header__subtitle[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n }\n .panel-body[_ngcontent-%COMP%] {\n padding: 8px 0;\n }\n .panel-empty[_ngcontent-%COMP%] {\n padding: 24px 18px;\n text-align: center;\n font-size: 13px;\n color: var(--mj-text-disabled);\n }\n\n \n\n .consumer-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 18px;\n cursor: pointer;\n transition: background 0.15s ease;\n }\n .consumer-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n }\n .consumer-rank[_ngcontent-%COMP%] {\n width: 22px;\n height: 22px;\n border-radius: 6px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 11px;\n font-weight: 700;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n flex-shrink: 0;\n }\n .consumer-rank--top[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n }\n .consumer-type-pill[_ngcontent-%COMP%] {\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n padding: 2px 8px;\n border-radius: 4px;\n background: color-mix(in srgb, var(--mj-status-info) 12%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n flex-shrink: 0;\n }\n .consumer-type-pill--agent[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n }\n .consumer-name[_ngcontent-%COMP%] {\n flex: 1;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .consumer-cost[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n flex-shrink: 0;\n }\n .consumer-bar-container[_ngcontent-%COMP%] {\n width: 60px;\n height: 6px;\n border-radius: 3px;\n background: var(--mj-bg-surface-sunken);\n overflow: hidden;\n flex-shrink: 0;\n }\n .consumer-bar[_ngcontent-%COMP%] {\n height: 100%;\n border-radius: 3px;\n background: var(--mj-brand-primary);\n transition: width 0.3s ease;\n }\n\n \n\n .error-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n padding: 10px 18px;\n }\n .error-icon[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n font-size: 14px;\n margin-top: 2px;\n flex-shrink: 0;\n }\n .error-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n }\n .error-source[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 2px;\n }\n .error-message[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .error-count[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 700;\n color: var(--mj-status-error);\n flex-shrink: 0;\n min-width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n }\n .view-all-link[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n margin: 8px 18px 10px;\n padding: 0;\n border: none;\n background: none;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-brand-primary);\n cursor: pointer;\n transition: color 0.15s ease;\n }\n .view-all-link[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary-hover);\n }\n\n \n\n @media (max-width: 1200px) {\n .panels-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n }\n @media (max-width: 768px) {\n .kpi-row[_ngcontent-%COMP%] {\n grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));\n }\n .trends-panel[_ngcontent-%COMP%] {\n height: 260px;\n }\n }"] });
514
+ i0.ɵɵconditional(ctx.ErrorHotspots.length > 0 ? 29 : -1);
515
+ } }, dependencies: [i1.LoadingComponent, i2.TimeSeriesChartComponent, i3.DecimalPipe], styles: ["\n\n [_nghost-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 20px;\n padding: 4px;\n }\n\n \n\n .loading-container[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 60px 20px;\n }\n\n \n\n .kpi-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n gap: 14px;\n }\n .kpi-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-left: 4px solid var(--mj-brand-primary);\n border-radius: 12px;\n padding: 16px 18px;\n display: flex;\n flex-direction: column;\n gap: 6px;\n transition: all 0.25s ease;\n }\n .kpi-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: 0 6px 20px color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n }\n .kpi-label[_ngcontent-%COMP%] {\n font-size: 10px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.6px;\n color: var(--mj-text-muted);\n }\n .kpi-value[_ngcontent-%COMP%] {\n font-size: 24px;\n font-weight: 700;\n color: var(--mj-text-primary);\n line-height: 1.1;\n letter-spacing: -0.02em;\n }\n\n \n\n .kpi-sparkline[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n gap: 2px;\n height: 24px;\n margin-top: 4px;\n }\n .spark-bar[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 4px;\n max-width: 8px;\n border-radius: 1px;\n opacity: 0.35;\n transition: opacity 0.15s ease;\n }\n .kpi-card[_ngcontent-%COMP%]:hover .spark-bar[_ngcontent-%COMP%] {\n opacity: 0.55;\n }\n\n \n\n .kpi-delta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 11px;\n font-weight: 600;\n margin-top: 2px;\n }\n .kpi-delta--good[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n }\n .kpi-delta--bad[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n }\n .kpi-delta__period[_ngcontent-%COMP%] {\n font-weight: 400;\n color: var(--mj-text-disabled);\n }\n\n \n\n .trends-panel[_ngcontent-%COMP%] {\n height: 320px;\n border-radius: 12px;\n overflow: hidden;\n }\n\n \n\n .panels-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 16px;\n }\n .panel[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n overflow: hidden;\n }\n .panel-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 14px 18px;\n border-bottom: 1px solid var(--mj-border-subtle);\n }\n .panel-header__title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n }\n .panel-header__icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 14px;\n }\n .panel-header__icon--error[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n }\n .panel-header__subtitle[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n }\n .panel-body[_ngcontent-%COMP%] {\n padding: 8px 0;\n }\n .panel-empty[_ngcontent-%COMP%] {\n padding: 24px 18px;\n text-align: center;\n font-size: 13px;\n color: var(--mj-text-disabled);\n }\n\n \n\n .consumer-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 18px;\n cursor: pointer;\n transition: background 0.15s ease;\n }\n .consumer-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n }\n .consumer-rank[_ngcontent-%COMP%] {\n width: 22px;\n height: 22px;\n border-radius: 6px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 11px;\n font-weight: 700;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n flex-shrink: 0;\n }\n .consumer-rank--top[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n }\n .consumer-type-pill[_ngcontent-%COMP%] {\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n padding: 2px 8px;\n border-radius: 4px;\n background: color-mix(in srgb, var(--mj-status-info) 12%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n flex-shrink: 0;\n }\n .consumer-type-pill--agent[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n }\n .consumer-name[_ngcontent-%COMP%] {\n flex: 1;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .consumer-cost[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n flex-shrink: 0;\n }\n .consumer-bar-container[_ngcontent-%COMP%] {\n width: 60px;\n height: 6px;\n border-radius: 3px;\n background: var(--mj-bg-surface-sunken);\n overflow: hidden;\n flex-shrink: 0;\n }\n .consumer-bar[_ngcontent-%COMP%] {\n height: 100%;\n border-radius: 3px;\n background: var(--mj-brand-primary);\n transition: width 0.3s ease;\n }\n\n \n\n .error-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n padding: 10px 18px;\n }\n .error-icon[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n font-size: 14px;\n margin-top: 2px;\n flex-shrink: 0;\n }\n .error-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n }\n .error-source[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 2px;\n }\n .error-message[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .error-count[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 700;\n color: var(--mj-status-error);\n flex-shrink: 0;\n min-width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n }\n .view-all-link[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n margin: 8px 18px 10px;\n padding: 0;\n border: none;\n background: none;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-brand-primary);\n cursor: pointer;\n transition: color 0.15s ease;\n }\n .view-all-link[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary-hover);\n }\n\n \n\n @media (max-width: 1200px) {\n .panels-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n }\n @media (max-width: 768px) {\n .kpi-row[_ngcontent-%COMP%] {\n grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));\n }\n .trends-panel[_ngcontent-%COMP%] {\n height: 260px;\n }\n }"] });
522
516
  }
523
517
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AnalyticsExecutiveSummaryComponent, [{
524
518
  type: Component,
525
519
  args: [{ standalone: false, selector: 'app-analytics-executive-summary', template: `
526
- <!-- Filter Bar -->
527
- <app-analytics-filter-bar
528
- [TimeRange]="TimeRange"
529
- [Filters]="Filters"
530
- [ShowCompareToggle]="true"
531
- [ShowModelFilter]="false"
532
- [ShowAgentFilter]="false"
533
- [ShowPromptFilter]="false"
534
- [ShowStatusFilter]="false"
535
- (TimeRangeChange)="OnTimeRangeChange($event)"
536
- (FiltersChange)="OnFiltersChange($event)"
537
- (CompareToggled)="OnCompareToggled($event)"
538
- ></app-analytics-filter-bar>
539
-
540
520
  @if (IsLoading && KpiCards.length === 0) {
541
521
  <div class="loading-container">
542
522
  <mj-loading text="Loading executive summary..." size="medium"></mj-loading>
@@ -669,7 +649,7 @@ export class AnalyticsExecutiveSummaryComponent extends BaseAngularComponent {
669
649
  }], SectionNavigate: [{
670
650
  type: Output
671
651
  }] }); })();
672
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AnalyticsExecutiveSummaryComponent, { className: "AnalyticsExecutiveSummaryComponent", filePath: "src/AI/components/analytics/executive-summary/executive-summary.component.ts", lineNumber: 482 }); })();
652
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AnalyticsExecutiveSummaryComponent, { className: "AnalyticsExecutiveSummaryComponent", filePath: "src/AI/components/analytics/executive-summary/executive-summary.component.ts", lineNumber: 468 }); })();
673
653
  export function LoadAnalyticsExecutiveSummary() {
674
654
  // Prevents tree-shaking
675
655
  }