@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":"ai-analytics-resource.component.js","sourceRoot":"","sources":["../../../../src/AI/components/analytics/ai-analytics-resource.component.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview AI Analytics Shell — Resource Component\n *\n * Main resource component for the AI Analytics dashboard. Provides a left\n * navigation panel and content area that switches between analytics sections:\n * Executive Summary, Prompt Runs, Agent Runs, Model Performance, Cost & Budget,\n * Error Analysis, and Usage Patterns.\n *\n * Persists the active section and filter state via UserInfoEngine settings\n * with debounced writes.\n */\n\nimport { Component, ChangeDetectorRef, OnInit, OnDestroy, inject } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { debounceTime, takeUntil } from 'rxjs/operators';\nimport { ResourceData, UserInfoEngine } from '@memberjunction/core-entities';\nimport { RegisterClass } from '@memberjunction/global';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { AIAnalyticsPreferences, GlobalFilterState } from '../../interfaces/analytics-preferences.interface';\n\ninterface NavItem {\n Label?: string;\n Icon?: string;\n Key: string;\n}\n\n@RegisterClass(BaseResourceComponent, 'AIAnalyticsResource')\n@Component({\n standalone: false,\n selector: 'app-ai-analytics-resource',\n template: `\n <div class=\"analytics-shell\">\n <nav class=\"analytics-nav\">\n <div class=\"nav-header\">\n <i class=\"fa-solid fa-chart-line\"></i>\n <span>AI Analytics</span>\n </div>\n @for (item of NavItems; track item.Key) {\n @if (item.Key === 'divider') {\n <div class=\"nav-divider\"></div>\n } @else {\n <button\n class=\"nav-item\"\n [class.active]=\"ActiveSection === item.Key\"\n (click)=\"OnSectionChange(item.Key)\">\n <i [class]=\"item.Icon\"></i>\n <span>{{ item.Label }}</span>\n </button>\n }\n }\n </nav>\n\n <div class=\"analytics-content\">\n @switch (ActiveSection) {\n @case ('executive-summary') {\n <app-analytics-executive-summary\n [TimeRange]=\"CurrentTimeRange\"\n [Filters]=\"CurrentFilters\"\n (TimeRangeChange)=\"OnTimeRangeChange($event)\"\n (FiltersChange)=\"OnFiltersChange($event)\"\n (SectionNavigate)=\"OnSectionChange($event)\"\n ></app-analytics-executive-summary>\n }\n @case ('prompt-runs') {\n <app-analytics-prompt-runs\n [TimeRange]=\"CurrentTimeRange\"\n [Filters]=\"CurrentFilters\"\n (TimeRangeChange)=\"OnTimeRangeChange($event)\"\n (FiltersChange)=\"OnFiltersChange($event)\"\n ></app-analytics-prompt-runs>\n }\n @case ('agent-runs') {\n <app-analytics-agent-runs\n [TimeRange]=\"CurrentTimeRange\"\n (TimeRangeChange)=\"OnTimeRangeChange($event)\"\n ></app-analytics-agent-runs>\n }\n @case ('model-performance') {\n <app-analytics-model-performance\n [TimeRange]=\"CurrentTimeRange\"\n (TimeRangeChange)=\"OnTimeRangeChange($event)\"\n ></app-analytics-model-performance>\n }\n @case ('cost-budget') {\n <app-analytics-cost-budget\n [TimeRange]=\"CurrentTimeRange\"\n [Filters]=\"CurrentFilters\"\n (TimeRangeChange)=\"OnTimeRangeChange($event)\"\n (FiltersChange)=\"OnFiltersChange($event)\"\n ></app-analytics-cost-budget>\n }\n @case ('error-analysis') {\n <app-analytics-error-analysis\n [TimeRange]=\"CurrentTimeRange\"\n [Filters]=\"CurrentFilters\"\n ></app-analytics-error-analysis>\n }\n @case ('usage-patterns') {\n <app-analytics-usage-patterns\n [TimeRange]=\"CurrentTimeRange\"\n (TimeRangeChange)=\"OnTimeRangeChange($event)\"\n ></app-analytics-usage-patterns>\n }\n }\n </div>\n </div>\n `,\n styles: [`\n :host {\n display: block;\n height: 100%;\n }\n\n .analytics-shell {\n display: flex;\n height: 100%;\n background: var(--mj-bg-page);\n }\n\n /* ── Left Navigation ── */\n\n .analytics-nav {\n width: 220px;\n min-width: 220px;\n background: var(--mj-bg-surface);\n border-right: 1px solid var(--mj-border-default);\n display: flex;\n flex-direction: column;\n padding: 12px 0;\n overflow-y: auto;\n }\n\n .nav-header {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 8px 18px 16px;\n font-size: 15px;\n font-weight: 700;\n color: var(--mj-text-primary);\n border-bottom: 1px solid var(--mj-border-subtle);\n margin-bottom: 8px;\n }\n\n .nav-header i {\n color: var(--mj-brand-primary);\n font-size: 16px;\n }\n\n .nav-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 18px;\n border: none;\n border-left: 3px solid transparent;\n background: transparent;\n color: var(--mj-text-secondary);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.15s, color 0.15s, border-color 0.15s;\n text-align: left;\n width: 100%;\n }\n\n .nav-item:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n }\n\n .nav-item.active {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-left-color: var(--mj-brand-primary);\n font-weight: 600;\n }\n\n .nav-item i {\n width: 18px;\n text-align: center;\n font-size: 14px;\n }\n\n .nav-divider {\n height: 1px;\n background: var(--mj-border-subtle);\n margin: 8px 18px;\n }\n\n /* ── Content Area ── */\n\n .analytics-content {\n flex: 1;\n overflow-y: auto;\n padding: 24px;\n }\n\n /* ── Section Placeholders ── */\n\n .section-placeholder {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n padding: 80px 24px;\n color: var(--mj-text-muted);\n }\n\n .placeholder-icon {\n font-size: 48px;\n margin-bottom: 20px;\n color: var(--mj-brand-primary);\n opacity: 0.4;\n }\n\n .section-placeholder h2 {\n font-size: 20px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 8px;\n }\n\n .section-placeholder p {\n font-size: 14px;\n color: var(--mj-text-muted);\n margin: 0;\n max-width: 420px;\n }\n\n /* ── Responsive: collapse nav to horizontal strip ── */\n\n @media (max-width: 768px) {\n .analytics-shell {\n flex-direction: column;\n }\n\n .analytics-nav {\n width: 100%;\n min-width: unset;\n flex-direction: row;\n overflow-x: auto;\n overflow-y: hidden;\n border-right: none;\n border-bottom: 1px solid var(--mj-border-default);\n padding: 0 8px;\n gap: 2px;\n }\n\n .nav-header {\n display: none;\n }\n\n .nav-divider {\n width: 1px;\n height: 28px;\n margin: auto 4px;\n }\n\n .nav-item {\n white-space: nowrap;\n border-left: none;\n border-bottom: 3px solid transparent;\n padding: 10px 14px;\n }\n\n .nav-item.active {\n border-left-color: transparent;\n border-bottom-color: var(--mj-brand-primary);\n }\n\n .analytics-content {\n padding: 16px;\n }\n }\n `]\n})\nexport class AIAnalyticsResourceComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n private readonly USER_SETTINGS_KEY = 'AI.Analytics.UserPreferences';\n private settingsPersistSubject = new Subject<void>();\n protected override destroy$ = new Subject<void>();\n private settingsLoaded = false;\n private cdr = inject(ChangeDetectorRef);\n\n public ActiveSection = 'executive-summary';\n public CurrentTimeRange = '24h';\n public CurrentFilters: GlobalFilterState = {\n Models: [],\n Agents: [],\n Prompts: [],\n Statuses: []\n };\n\n readonly NavItems: NavItem[] = [\n { Label: 'Executive Summary', Icon: 'fa-solid fa-gauge-high', Key: 'executive-summary' },\n { Label: 'Prompt Runs', Icon: 'fa-solid fa-comment-dots', Key: 'prompt-runs' },\n { Label: 'Agent Runs', Icon: 'fa-solid fa-robot', Key: 'agent-runs' },\n { Label: 'Model Performance', Icon: 'fa-solid fa-microchip', Key: 'model-performance' },\n { Key: 'divider' },\n { Label: 'Cost & Budget', Icon: 'fa-solid fa-coins', Key: 'cost-budget' },\n { Label: 'Error Analysis', Icon: 'fa-solid fa-triangle-exclamation', Key: 'error-analysis' },\n { Label: 'Usage Patterns', Icon: 'fa-solid fa-clock', Key: 'usage-patterns' },\n ];\n\n async ngOnInit(): Promise<void> {\n super.ngOnInit();\n this.setupSettingsDebounce();\n await this.loadUserSettings();\n this.NotifyLoadComplete();\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'AI Analytics';\n }\n\n async GetResourceIconClass(data: ResourceData): Promise<string> {\n return 'fa-solid fa-chart-line';\n }\n\n /** Navigate to a different analytics section */\n public OnSectionChange(key: string): void {\n if (key === 'divider' || key === this.ActiveSection) {\n return;\n }\n this.ActiveSection = key;\n this.saveUserSettings();\n this.cdr.detectChanges();\n }\n\n /** Handle time range changes from the filter bar */\n public OnTimeRangeChange(range: string): void {\n this.CurrentTimeRange = range;\n this.saveUserSettings();\n }\n\n /** Handle filter changes from the filter bar */\n public OnFiltersChange(filters: GlobalFilterState): void {\n this.CurrentFilters = filters;\n this.saveUserSettings();\n }\n\n // ── Private Helpers ──\n\n private setupSettingsDebounce(): void {\n this.settingsPersistSubject.pipe(\n debounceTime(500),\n takeUntil(this.destroy$)\n ).subscribe(() => this.persistUserSettings());\n }\n\n private async loadUserSettings(): Promise<void> {\n try {\n const raw = UserInfoEngine.Instance.GetSetting(this.USER_SETTINGS_KEY);\n if (raw) {\n const prefs: AIAnalyticsPreferences = JSON.parse(raw);\n if (prefs.ActiveSection) {\n this.ActiveSection = prefs.ActiveSection;\n }\n if (prefs.ExecutiveSummary?.Filters) {\n this.CurrentFilters = { ...this.CurrentFilters, ...prefs.ExecutiveSummary.Filters };\n }\n if (prefs.ExecutiveSummary?.TimeRange) {\n this.CurrentTimeRange = prefs.ExecutiveSummary.TimeRange;\n }\n }\n } catch {\n // Use defaults on parse failure\n }\n this.settingsLoaded = true;\n }\n\n private saveUserSettings(): void {\n if (this.settingsLoaded) {\n this.settingsPersistSubject.next();\n }\n }\n\n private async persistUserSettings(): Promise<void> {\n try {\n const prefs: AIAnalyticsPreferences = {\n ActiveSection: this.ActiveSection,\n ExecutiveSummary: {\n TimeRange: this.CurrentTimeRange,\n ComparisonEnabled: false,\n Filters: this.CurrentFilters\n },\n PromptRuns: {\n TimeRange: this.CurrentTimeRange,\n Filters: this.CurrentFilters,\n ChartMetric: 'count',\n SortField: 'StartedAt',\n SortDirection: 'desc'\n },\n AgentRuns: {\n TimeRange: this.CurrentTimeRange,\n Filters: {\n Agents: this.CurrentFilters.Agents,\n Statuses: this.CurrentFilters.Statuses\n }\n },\n ModelPerformance: {\n TimeRange: this.CurrentTimeRange,\n SortBy: 'latency',\n VendorFilter: []\n },\n CostBudget: {\n TimeRange: this.CurrentTimeRange,\n Filters: this.CurrentFilters\n }\n };\n await UserInfoEngine.Instance.SetSetting(\n this.USER_SETTINGS_KEY,\n JSON.stringify(prefs)\n );\n } catch {\n // Silent failure for settings persistence\n }\n }\n}\n\nexport function LoadAIAnalyticsResource(): void {\n // Prevents tree-shaking of the @RegisterClass decorator\n}\n"]}
1
+ {"version":3,"file":"ai-analytics-resource.component.js","sourceRoot":"","sources":["../../../../src/AI/components/analytics/ai-analytics-resource.component.ts"],"names":[],"mappings":";;;;;;AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAqB,SAAS,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAGnG,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAgB,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;;;;;;;;;;;;;;;;IAqBtC,6CAGgD;IAA5C,kPAAqB,4BAAqB,KAAC;IAC3C,2CAIoC;IAAhC,AADA,4OAAgB,4CAAqC,KAAC,2MAC7C,4BAAqB,KAAC;IAEvC,AADI,iBAAkB,EACF;;;IARhB,AADA,sDAAiC,8CACK;IAGlC,cAAgC;IAChC,AADA,qDAAgC,wCACA;;;;IAOxC,kCAAmI;IAAhE,gVAA4B;IAAC,iOAAkB,sBAAe,KAAC;IAC9H,wBAAwC;IAAC,yBAC7C;IAAA,iBAAS;;;IAFsC,iCAAmB;IAAC,qDAA4B;;;;IAK/F,kCAA2E;IAA5B,+MAAS,wBAAiB,KAAC;IACtE,wBAAoC;IAAC,wBACzC;IAAA,iBAAS;;;IAtBjB,8BAAa;IACT,2HAAwC;IAaxC,gHAAyC;IAKzC,gHAAwC;IAK5C,iBAAM;;;IAvBF,cAYC;IAZD,kEAYC;IACD,cAIC;IAJD,mEAIC;IACD,cAIC;IAJD,kEAIC;;;;IAMG,0CAG8C;IAA1C,6OAAW,uCAA6B,KAAC;IAC7C,iBAAiB;;;;IAFb,AADA,oCAAmB,qDACuB;;;IAJtD,8BAAsC;IAClC,yHAMC;IACL,iBAAM;;;IAPF,cAMC;IAND,0CAMC;;;IAQG,0BAA+B;;;;IAE/B,kCAGwC;IAApC,oPAAS,mCAAyB,KAAC;IACnC,oBAA2B;IAC3B,4BAAM;IAAA,YAAgB;IAC1B,AAD0B,iBAAO,EACxB;;;;IAJL,8DAA2C;IAExC,cAAmB;IAAnB,2BAAmB;IAChB,eAAgB;IAAhB,mCAAgB;;;IAN5B,AAFF,qGAA8B,kFAErB;;;IAFT,mDAUC;;;;IAOG,8DAKC;IADG,4OAAmB,8BAAuB,KAAC;IAC9C,iBAAkC;;;IAF/B,AADA,mDAA8B,kCACJ;;;IAK9B,kDAI6B;;;IADzB,AADA,mDAA8B,kCACJ;;;IAI9B,8CAG4B;;;IADxB,AADA,mDAA8B,kCACJ;;;IAI9B,qDAImC;;;IAD/B,AADA,AADA,mDAA8B,gCACN,wCACQ;;;IAIpC,+CAG6B;;;IADzB,AADA,mDAA8B,kCACJ;;;IAI9B,kDAGgC;;;IAD5B,AADA,mDAA8B,kCACJ;;;IAI9B,mDAEgC;;;IAD5B,mDAA8B;;AAmKnD,IAAM,4BAA4B,GAAlC,MAAM,4BAA6B,SAAQ,qBAAqB;IAClD,iBAAiB,GAAG,8BAA8B,CAAC;IAC5D,sBAAsB,GAAG,IAAI,OAAO,EAAQ,CAAC;IAClC,QAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;IAC1C,cAAc,GAAG,KAAK,CAAC;IACvB,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAED,gBAAgB,CAAsC;IAC5D,UAAU,CAAgC;IAEpE,aAAa,GAAG,mBAAmB,CAAC;IACpC,gBAAgB,GAAG,KAAK,CAAC;IACzB,cAAc,GAAsB;QACvC,MAAM,EAAE,EAAE;QACV,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,EAAE;QACX,QAAQ,EAAE,EAAE;KACf,CAAC;IACF,kFAAkF;IAC3E,aAAa,GAAW,iBAAiB,CAAC;IACjD,yFAAyF;IAClF,aAAa,GAAW,EAAE,CAAC;IAElC,wDAAwD;IACxC,aAAa,GAAG;QAC5B,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,iBAAiB,EAAE;QACpD,EAAE,IAAI,EAAE,SAAS,EAAS,KAAK,EAAE,MAAM,EAAE;QACzC,EAAE,IAAI,EAAE,UAAU,EAAQ,KAAK,EAAE,OAAO,EAAE;QAC1C,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,aAAa,EAAE;QAChD,EAAE,IAAI,EAAE,UAAU,EAAQ,KAAK,EAAE,cAAc,EAAE;KACpD,CAAC;IAEF,wFAAwF;IACxF,IAAW,aAAa;QACpB,OAAO,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;YACxF,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7D,CAAC;IAED,iEAAiE;IACjE,IAAW,eAAe;QACtB,QAAQ,IAAI,CAAC,aAAa,EAAE,CAAC;YACzB,KAAK,mBAAmB;gBACpB,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAG,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;YAC7P,KAAK,aAAa;gBACd,OAAO,EAAE,eAAe,EAAE,IAAI,EAAG,eAAe,EAAE,IAAI,EAAG,gBAAgB,EAAE,IAAI,EAAG,gBAAgB,EAAE,IAAI,EAAG,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAG,gBAAgB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;YAC7P,KAAK,YAAY;gBACb,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAG,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAG,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;YAC7P,KAAK,mBAAmB;gBACpB,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAG,UAAU,EAAE,IAAI,EAAG,iBAAiB,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;YACjP,KAAK,aAAa;gBACd,OAAO,EAAE,eAAe,EAAE,IAAI,EAAG,eAAe,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;YAC/P,KAAK,gBAAgB;gBACjB,OAAO,EAAE,eAAe,EAAE,IAAI,EAAG,eAAe,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAG,gBAAgB,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;YAC7P,KAAK,gBAAgB;gBACjB,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;YAC7P;gBACI,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;QACjQ,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,IAAW,mBAAmB;QAC1B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,yFAAyF;IACzE,aAAa,GAAG;QAC5B,EAAE,IAAI,EAAE,SAAS,EAAG,KAAK,EAAE,SAAS,EAAE;QACtC,EAAE,IAAI,EAAE,OAAO,EAAK,KAAK,EAAE,OAAO,EAAE;QACpC,EAAE,IAAI,EAAE,SAAS,EAAG,KAAK,EAAE,SAAS,EAAE;QACtC,EAAE,IAAI,EAAE,SAAS,EAAG,KAAK,EAAE,SAAS,EAAE;QACtC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;KAC1C,CAAC;IAEF,sCAAsC;IACtC,IAAW,YAAY;QACnB,OAAO,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACjF,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7D,CAAC;IAED,IAAW,YAAY;QACnB,OAAO,YAAY,CAAC,QAAQ,EAAE,MAAM;YAChC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC;YACpC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACjD,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7D,CAAC;IAED,IAAW,aAAa;QACpB,OAAO,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAClF,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7D,CAAC;IAED,oDAAoD;IACpD,IAAW,oBAAoB;QAC3B,OAAO,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACnF,CAAC;IAED,2FAA2F;IACpF,aAAa,GAAG,KAAK,CAAC;IAE7B,iFAAiF;IACjF,IAAW,qBAAqB;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC;QACjC,MAAM,MAAM,GAAwB,EAAE,CAAC;QACvC,IAAI,GAAG,CAAC,eAAe,EAAE,CAAC;YACtB,MAAM,CAAC,IAAI,CAAC;gBACR,GAAG,EAAE,QAAQ;gBACb,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,OAAO;gBACd,IAAI,EAAE,uBAAuB;gBAC7B,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,EAAE;gBACzC,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC;aACrE,CAAC,CAAC;QACP,CAAC;QACD,IAAI,GAAG,CAAC,eAAe,EAAE,CAAC;YACtB,MAAM,CAAC,IAAI,CAAC;gBACR,GAAG,EAAE,QAAQ;gBACb,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,OAAO;gBACd,IAAI,EAAE,mBAAmB;gBACzB,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,EAAE;gBACzC,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC;aACrE,CAAC,CAAC;QACP,CAAC;QACD,IAAI,GAAG,CAAC,gBAAgB,EAAE,CAAC;YACvB,MAAM,CAAC,IAAI,CAAC;gBACR,GAAG,EAAE,SAAS;gBACd,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,QAAQ;gBACf,IAAI,EAAE,0BAA0B;gBAChC,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,EAAE;gBAC1C,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC;aACvE,CAAC,CAAC;QACP,CAAC;QACD,IAAI,GAAG,CAAC,gBAAgB,EAAE,CAAC;YACvB,MAAM,CAAC,IAAI,CAAC;gBACR,GAAG,EAAE,UAAU;gBACf,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,QAAQ;gBACf,IAAI,EAAE,uBAAuB;gBAC7B,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC;aACxE,CAAC,CAAC;QACP,CAAC;QACD,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC;gBACR,GAAG,EAAE,QAAQ;gBACb,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE,mCAAmC;gBACzC,OAAO,EAAE,IAAI,CAAC,aAAa;aAC9B,CAAC,CAAC;QACP,CAAC;QACD,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC;gBACR,GAAG,EAAE,QAAQ;gBACb,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,QAAQ;gBACf,IAAI,EAAE,sBAAsB;gBAC5B,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,EAAE;gBAC1C,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC;aACvE,CAAC,CAAC;QACP,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,gIAAgI;IAChI,IAAW,qBAAqB;QAC5B,OAAO;YACH,MAAM,EAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAM,EAAE;YACjD,MAAM,EAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAM,EAAE;YACjD,OAAO,EAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAK,EAAE;YACjD,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE;YACjD,MAAM,EAAI,IAAI,CAAC,aAAa;YAC5B,MAAM,EAAI,IAAI,CAAC,aAAa;SAC/B,CAAC;IACN,CAAC;IAED,4FAA4F;IACrF,6BAA6B,CAAC,MAA+B;QAChE,MAAM,IAAI,GAAsB;YAC5B,MAAM,EAAI,MAAM,CAAC,QAAQ,CAAC,CAAG,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAa,CAAC,CAAC,CAAC,CAAC,EAAE;YAClE,MAAM,EAAI,MAAM,CAAC,QAAQ,CAAC,CAAG,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAa,CAAC,CAAC,CAAC,CAAC,EAAE;YAClE,OAAO,EAAG,MAAM,CAAC,SAAS,CAAC,CAAE,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAY,CAAC,CAAC,CAAC,CAAC,EAAE;YAClE,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAW,CAAC,CAAC,CAAC,CAAC,EAAE;SACrE,CAAC;QACF,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,QAAQ,IAAI,MAAM,EAAE,CAAC;YACrB,IAAI,CAAC,aAAa,GAAI,MAAM,CAAC,QAAQ,CAAY,IAAI,iBAAiB,CAAC;QAC3E,CAAC;QACD,IAAI,QAAQ,IAAI,MAAM,EAAE,CAAC;YACrB,IAAI,CAAC,aAAa,GAAI,MAAM,CAAC,QAAQ,CAAY,IAAI,EAAE,CAAC;QAC5D,CAAC;IACL,CAAC;IAED,iFAAiF;IAC1E,mBAAmB;QACtB,IAAI,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5E,2EAA2E;QAC3E,IAAI,IAAI,CAAC,aAAa,KAAK,mBAAmB,EAAE,CAAC;YAC7C,IAAI,CAAC,aAAa,GAAG,iBAAiB,CAAC;YACvC,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QAC5B,CAAC;IACL,CAAC;IAED,iDAAiD;IACjD,IAAW,iBAAiB;QACxB,MAAM,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC;QAC9B,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC;QACrH,8DAA8D;QAC9D,IAAI,IAAI,CAAC,eAAe,CAAC,UAAU,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,KAAK,iBAAiB;YAAE,KAAK,EAAE,CAAC;QAC/G,IAAI,IAAI,CAAC,eAAe,CAAC,UAAU,IAAI,IAAI,CAAC,aAAa;YAAE,KAAK,EAAE,CAAC;QACnE,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,4HAA4H;IACrH,aAAa;QAChB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC9C,CAAC;IAEQ,QAAQ,GAAc;QAC3B,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,wBAAwB,EAAE,GAAG,EAAE,mBAAmB,EAAE;QACxF,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,0BAA0B,EAAE,GAAG,EAAE,aAAa,EAAE;QAC9E,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,mBAAmB,EAAE,GAAG,EAAE,YAAY,EAAE;QACrE,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,uBAAuB,EAAE,GAAG,EAAE,mBAAmB,EAAE;QACvF,EAAE,GAAG,EAAE,SAAS,EAAE;QAClB,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,mBAAmB,EAAE,GAAG,EAAE,aAAa,EAAE;QACzE,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,kCAAkC,EAAE,GAAG,EAAE,gBAAgB,EAAE;QAC5F,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,mBAAmB,EAAE,GAAG,EAAE,gBAAgB,EAAE;KAChF,CAAC;IAEF,KAAK,CAAC,QAAQ;QACV,KAAK,CAAC,QAAQ,EAAE,CAAC;QACjB,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC9B,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC9B,CAAC;IAED,WAAW;QACP,KAAK,CAAC,WAAW,EAAE,CAAC;QACpB,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,IAAkB;QAC3C,OAAO,cAAc,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,IAAkB;QACzC,OAAO,wBAAwB,CAAC;IACpC,CAAC;IAED,gDAAgD;IACzC,eAAe,CAAC,GAAW;QAC9B,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,CAAC,aAAa,EAAE,CAAC;YAClD,OAAO;QACX,CAAC;QACD,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC;QACzB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAED,oDAAoD;IAC7C,iBAAiB,CAAC,KAAa;QAClC,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAC9B,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC5B,CAAC;IAED,gDAAgD;IACzC,eAAe,CAAC,OAA0B;QAC7C,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;QAC9B,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC5B,CAAC;IAED,2FAA2F;IACpF,gBAAgB,CAAC,KAAc;QAClC,IAAI,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,CAAC,KAAK,CAAC,CAAC;IACrD,CAAC;IAED,6EAA6E;IACtE,eAAe;QAClB,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,EAAE,CAAC;IACnC,CAAC;IAED,wBAAwB;IAEhB,qBAAqB;QACzB,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAC5B,YAAY,CAAC,GAAG,CAAC,EACjB,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAC3B,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAClD,CAAC;IAEO,KAAK,CAAC,gBAAgB;QAC1B,IAAI,CAAC;YACD,MAAM,GAAG,GAAG,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACvE,IAAI,GAAG,EAAE,CAAC;gBACN,MAAM,KAAK,GAA2B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACtD,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;oBACtB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;gBAC7C,CAAC;gBACD,IAAI,KAAK,CAAC,gBAAgB,EAAE,OAAO,EAAE,CAAC;oBAClC,IAAI,CAAC,cAAc,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,GAAG,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;gBACxF,CAAC;gBACD,IAAI,KAAK,CAAC,gBAAgB,EAAE,SAAS,EAAE,CAAC;oBACpC,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC,SAAS,CAAC;gBAC7D,CAAC;YACL,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACL,gCAAgC;QACpC,CAAC;QACD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;IAC/B,CAAC;IAEO,gBAAgB;QACpB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,CAAC;QACvC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,mBAAmB;QAC7B,IAAI,CAAC;YACD,MAAM,KAAK,GAA2B;gBAClC,aAAa,EAAE,IAAI,CAAC,aAAa;gBACjC,gBAAgB,EAAE;oBACd,SAAS,EAAE,IAAI,CAAC,gBAAgB;oBAChC,iBAAiB,EAAE,KAAK;oBACxB,OAAO,EAAE,IAAI,CAAC,cAAc;iBAC/B;gBACD,UAAU,EAAE;oBACR,SAAS,EAAE,IAAI,CAAC,gBAAgB;oBAChC,OAAO,EAAE,IAAI,CAAC,cAAc;oBAC5B,WAAW,EAAE,OAAO;oBACpB,SAAS,EAAE,WAAW;oBACtB,aAAa,EAAE,MAAM;iBACxB;gBACD,SAAS,EAAE;oBACP,SAAS,EAAE,IAAI,CAAC,gBAAgB;oBAChC,OAAO,EAAE;wBACL,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM;wBAClC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,QAAQ;qBACzC;iBACJ;gBACD,gBAAgB,EAAE;oBACd,SAAS,EAAE,IAAI,CAAC,gBAAgB;oBAChC,MAAM,EAAE,SAAS;oBACjB,YAAY,EAAE,EAAE;iBACnB;gBACD,UAAU,EAAE;oBACR,SAAS,EAAE,IAAI,CAAC,gBAAgB;oBAChC,OAAO,EAAE,IAAI,CAAC,cAAc;iBAC/B;aACJ,CAAC;YACF,MAAM,cAAc,CAAC,QAAQ,CAAC,UAAU,CACpC,IAAI,CAAC,iBAAiB,EACtB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CACxB,CAAC;QACN,CAAC;QAAC,MAAM,CAAC;YACL,0CAA0C;QAC9C,CAAC;IACL,CAAC;6RA1WQ,4BAA4B,yBAA5B,4BAA4B;6DAA5B,4BAA4B;;;;;;;YA1QjC,AADF,sCAAgB,wBAGoB;YAC9B,8FAA2B;YA2B3B,8FAA8D;YAWlE,iBAAiB;YAEb,AADJ,uCAAwD,aACzB;YACvB,iGAYC;YACL,iBAAM;YAEN,8BAA+B;YA0CvB,AANA,AANA,AAPA,AANA,AAPA,AARA,mHAA6B,yFAQN,wFAOD,+FAMO,yFAON,4FAMG,6FAMA;YAQxC,AADE,AADI,iBAAM,EACK,EACA;;;YA1GX,eA0BC;YA1BD,kDA0BC;YACD,cAUC;YAVD,yFAUC;YAES,cAAiB;YAAjB,+BAAiB;YAEvB,eAYC;YAZD,2BAYC;YAID,eA8CC;YA9CD,mDAAA,mBAAmB,mBAAnB,aAAa,oBAAb,YAAY,oBAAZ,mBAAmB,oBAAnB,aAAa,oBAAb,gBAAgB,oBAAhB,gBAAgB,WA8Cf;;;AAgKJ,4BAA4B;IAhRxC,aAAa,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;GAgR/C,4BAA4B,CA2WxC;;iFA3WY,4BAA4B;cA/QxC,SAAS;6BACM,KAAK,YACP,2BAA2B,YAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAgHT;;kBAmKA,SAAS;mBAAC,kBAAkB;;kBAC5B,SAAS;mBAAC,YAAY;;kFARd,4BAA4B;AA6WzC,MAAM,UAAU,uBAAuB;IACnC,wDAAwD;AAC5D,CAAC","sourcesContent":["/**\n * @fileoverview AI Analytics Shell — Resource Component\n *\n * Main resource component for the AI Analytics dashboard. Provides a left\n * navigation panel and content area that switches between analytics sections:\n * Executive Summary, Prompt Runs, Agent Runs, Model Performance, Cost & Budget,\n * Error Analysis, and Usage Patterns.\n *\n * Persists the active section and filter state via UserInfoEngine settings\n * with debounced writes.\n */\n\nimport { Component, ChangeDetectorRef, OnInit, OnDestroy, ViewChild, inject } from '@angular/core';\nimport { AnalyticsExecutiveSummaryComponent } from './executive-summary/executive-summary.component';\nimport { AnalyticsPromptRunsComponent } from './prompt-runs/prompt-run-analysis.component';\nimport { Subject } from 'rxjs';\nimport { debounceTime, takeUntil } from 'rxjs/operators';\nimport { ResourceData, UserInfoEngine } from '@memberjunction/core-entities';\nimport { RegisterClass } from '@memberjunction/global';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { AIAnalyticsPreferences, GlobalFilterState } from '../../interfaces/analytics-preferences.interface';\nimport { AIEngineBase } from '@memberjunction/ai-engine-base';\nimport { FilterFieldConfig } from '@memberjunction/ng-ui-components';\n\ninterface NavItem {\n Label?: string;\n Icon?: string;\n Key: string;\n}\n\n@RegisterClass(BaseResourceComponent, 'AIAnalyticsResource')\n@Component({\n standalone: false,\n selector: 'app-ai-analytics-resource',\n template: `\n <mj-page-layout>\n <mj-page-header\n Title=\"Analytics\"\n Icon=\"fa-solid fa-chart-line\">\n @if (ShowSharedFilterBar) {\n <div actions>\n @if (analyticsFilterFields.length > 0) {\n <mj-filter-popover\n [ActiveCount]=\"ActiveFilterCount\"\n [ShowClearAll]=\"ActiveFilterCount > 0\"\n (ClearAllRequested)=\"resetPopoverFilters()\">\n <mj-filter-panel\n [Fields]=\"analyticsFilterFields\"\n [Values]=\"analyticsFilterValues\"\n (ValuesChange)=\"onAnalyticsFilterValuesChange($event)\"\n (Reset)=\"resetPopoverFilters()\">\n </mj-filter-panel>\n </mj-filter-popover>\n }\n @if (FilterBarConfig.ShowCompareToggle) {\n <button mjButton variant=\"secondary\" size=\"sm\" [toggleable]=\"true\" [(selected)]=\"compareActive\" (selectedChange)=\"toggleCompare()\">\n <i class=\"fa-solid fa-code-compare\"></i> Compare\n </button>\n }\n @if (FilterBarConfig.ShowExportButton) {\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"OnExportClicked()\">\n <i class=\"fa-solid fa-download\"></i> Export\n </button>\n }\n </div>\n }\n @if (ShowSharedFilterBar && timeRangeChipOptions.length > 0) {\n <div toolbar class=\"time-range-chips\">\n @for (chip of timeRangeChipOptions; track chip.value) {\n <mj-filter-chip\n [Label]=\"chip.text\"\n [Active]=\"CurrentTimeRange === chip.value\"\n (Clicked)=\"OnTimeRangeChange(chip.value)\">\n </mj-filter-chip>\n }\n </div>\n }\n </mj-page-header>\n <mj-page-body [Padding]=\"false\" class=\"analytics-shell\">\n <nav class=\"analytics-nav\">\n @for (item of NavItems; track item.Key) {\n @if (item.Key === 'divider') {\n <div class=\"nav-divider\"></div>\n } @else {\n <button\n class=\"nav-item\"\n [class.active]=\"ActiveSection === item.Key\"\n (click)=\"OnSectionChange(item.Key)\">\n <i [class]=\"item.Icon\"></i>\n <span>{{ item.Label }}</span>\n </button>\n }\n }\n </nav>\n\n <div class=\"analytics-content\">\n @switch (ActiveSection) {\n @case ('executive-summary') {\n <app-analytics-executive-summary\n #executiveSummary\n [TimeRange]=\"CurrentTimeRange\"\n [Filters]=\"CurrentFilters\"\n (SectionNavigate)=\"OnSectionChange($event)\"\n ></app-analytics-executive-summary>\n }\n @case ('prompt-runs') {\n <app-analytics-prompt-runs\n #promptRuns\n [TimeRange]=\"CurrentTimeRange\"\n [Filters]=\"CurrentFilters\"\n ></app-analytics-prompt-runs>\n }\n @case ('agent-runs') {\n <app-analytics-agent-runs\n [TimeRange]=\"CurrentTimeRange\"\n [Filters]=\"CurrentFilters\"\n ></app-analytics-agent-runs>\n }\n @case ('model-performance') {\n <app-analytics-model-performance\n [TimeRange]=\"CurrentTimeRange\"\n [SortBy]=\"CurrentSortBy\"\n [SelectedVendor]=\"CurrentVendor\"\n ></app-analytics-model-performance>\n }\n @case ('cost-budget') {\n <app-analytics-cost-budget\n [TimeRange]=\"CurrentTimeRange\"\n [Filters]=\"CurrentFilters\"\n ></app-analytics-cost-budget>\n }\n @case ('error-analysis') {\n <app-analytics-error-analysis\n [TimeRange]=\"CurrentTimeRange\"\n [Filters]=\"CurrentFilters\"\n ></app-analytics-error-analysis>\n }\n @case ('usage-patterns') {\n <app-analytics-usage-patterns\n [TimeRange]=\"CurrentTimeRange\"\n ></app-analytics-usage-patterns>\n }\n }\n </div>\n </mj-page-body>\n </mj-page-layout>\n `,\n styles: [`\n :host {\n display: block;\n height: 100%;\n }\n\n .analytics-shell {\n display: flex;\n flex: 1;\n min-height: 0;\n background: var(--mj-bg-page);\n }\n\n /* ── Left Navigation ── */\n\n .analytics-nav {\n width: 220px;\n min-width: 220px;\n background: var(--mj-bg-surface);\n border-right: 1px solid var(--mj-border-default);\n display: flex;\n flex-direction: column;\n padding: 12px 0;\n overflow-y: auto;\n }\n\n .nav-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 18px;\n border: none;\n border-left: 3px solid transparent;\n background: transparent;\n color: var(--mj-text-secondary);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.15s, color 0.15s, border-color 0.15s;\n text-align: left;\n width: 100%;\n }\n\n .nav-item:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n }\n\n .nav-item.active {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-left-color: var(--mj-brand-primary);\n font-weight: 600;\n }\n\n .nav-item i {\n width: 18px;\n text-align: center;\n font-size: 14px;\n }\n\n .nav-divider {\n height: 1px;\n background: var(--mj-border-subtle);\n margin: 8px 18px;\n }\n\n /* ── Content Area ── */\n\n .analytics-content {\n flex: 1;\n overflow-y: auto;\n padding: 24px;\n }\n\n /* ── Section Placeholders ── */\n\n .section-placeholder {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n padding: 80px 24px;\n color: var(--mj-text-muted);\n }\n\n .placeholder-icon {\n font-size: 48px;\n margin-bottom: 20px;\n color: var(--mj-brand-primary);\n opacity: 0.4;\n }\n\n .section-placeholder h2 {\n font-size: 20px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 8px;\n }\n\n .section-placeholder p {\n font-size: 14px;\n color: var(--mj-text-muted);\n margin: 0;\n max-width: 420px;\n }\n\n /* ── Responsive: collapse nav to horizontal strip ── */\n\n @media (max-width: 768px) {\n .analytics-shell {\n flex-direction: column;\n }\n\n .analytics-nav {\n width: 100%;\n min-width: unset;\n flex-direction: row;\n overflow-x: auto;\n overflow-y: hidden;\n border-right: none;\n border-bottom: 1px solid var(--mj-border-default);\n padding: 0 8px;\n gap: 2px;\n }\n\n .nav-header {\n display: none;\n }\n\n .nav-divider {\n width: 1px;\n height: 28px;\n margin: auto 4px;\n }\n\n .nav-item {\n white-space: nowrap;\n border-left: none;\n border-bottom: 3px solid transparent;\n padding: 10px 14px;\n }\n\n .nav-item.active {\n border-left-color: transparent;\n border-bottom-color: var(--mj-brand-primary);\n }\n\n .analytics-content {\n padding: 16px;\n }\n }\n `]\n})\nexport class AIAnalyticsResourceComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n private readonly USER_SETTINGS_KEY = 'AI.Analytics.UserPreferences';\n private settingsPersistSubject = new Subject<void>();\n protected override destroy$ = new Subject<void>();\n private settingsLoaded = false;\n private cdr = inject(ChangeDetectorRef);\n\n @ViewChild('executiveSummary') private executiveSummary?: AnalyticsExecutiveSummaryComponent;\n @ViewChild('promptRuns') private promptRuns?: AnalyticsPromptRunsComponent;\n\n public ActiveSection = 'executive-summary';\n public CurrentTimeRange = '24h';\n public CurrentFilters: GlobalFilterState = {\n Models: [],\n Agents: [],\n Prompts: [],\n Statuses: []\n };\n /** Single-value SortBy used by Model Performance (lives on the shared chrome). */\n public CurrentSortBy: string = 'cost-efficiency';\n /** Single-value Vendor filter used by Model Performance (lives on the shared chrome). */\n public CurrentVendor: string = '';\n\n /** SortBy options for Model Performance leaderboard. */\n public readonly sortByOptions = [\n { text: 'By Performance', value: 'cost-efficiency' },\n { text: 'By Cost', value: 'cost' },\n { text: 'By Speed', value: 'speed' },\n { text: 'By Reliability', value: 'reliability' },\n { text: 'By Usage', value: 'usage-volume' }\n ];\n\n /** Vendor options, lazily built from AIEngineBase for Model Performance leaderboard. */\n public get vendorOptions(): { text: string; value: string }[] {\n return AIEngineBase.Instance?.Vendors?.map(v => ({ text: v.Name ?? '', value: v.ID ?? '' }))\n ?.sort((a, b) => a.text.localeCompare(b.text)) ?? [];\n }\n\n /** Per-section filter-bar config — switched on ActiveSection. */\n public get FilterBarConfig() {\n switch (this.ActiveSection) {\n case 'executive-summary':\n return { ShowModelFilter: false, ShowAgentFilter: false, ShowPromptFilter: false, ShowStatusFilter: false, ShowSortBy: false, ShowVendor: false, ShowCompareToggle: true, ShowExportButton: false, TimeRangeOptions: ['1h', '6h', '24h', '7d', '30d'] };\n case 'prompt-runs':\n return { ShowModelFilter: true, ShowAgentFilter: true, ShowPromptFilter: true, ShowStatusFilter: true, ShowSortBy: false, ShowVendor: false, ShowCompareToggle: false, ShowExportButton: true, TimeRangeOptions: ['1h', '6h', '24h', '7d', '30d'] };\n case 'agent-runs':\n return { ShowModelFilter: false, ShowAgentFilter: true, ShowPromptFilter: false, ShowStatusFilter: true, ShowSortBy: false, ShowVendor: false, ShowCompareToggle: false, ShowExportButton: false, TimeRangeOptions: ['1h', '6h', '24h', '7d', '30d'] };\n case 'model-performance':\n return { ShowModelFilter: false, ShowAgentFilter: false, ShowPromptFilter: false, ShowStatusFilter: false, ShowSortBy: true, ShowVendor: true, ShowCompareToggle: false, ShowExportButton: false, TimeRangeOptions: ['24h', '7d', '30d'] };\n case 'cost-budget':\n return { ShowModelFilter: true, ShowAgentFilter: false, ShowPromptFilter: false, ShowStatusFilter: false, ShowSortBy: false, ShowVendor: false, ShowCompareToggle: false, ShowExportButton: false, TimeRangeOptions: ['7d', '30d', '90d', 'MTD', 'YTD'] };\n case 'error-analysis':\n return { ShowModelFilter: true, ShowAgentFilter: false, ShowPromptFilter: true, ShowStatusFilter: false, ShowSortBy: false, ShowVendor: false, ShowCompareToggle: false, ShowExportButton: false, TimeRangeOptions: ['1h', '6h', '24h', '7d', '30d'] };\n case 'usage-patterns':\n return { ShowModelFilter: false, ShowAgentFilter: false, ShowPromptFilter: false, ShowStatusFilter: false, ShowSortBy: false, ShowVendor: false, ShowCompareToggle: false, ShowExportButton: false, TimeRangeOptions: ['1h', '6h', '24h', '7d', '30d'] };\n default:\n return { ShowModelFilter: false, ShowAgentFilter: false, ShowPromptFilter: false, ShowStatusFilter: false, ShowSortBy: false, ShowVendor: false, ShowCompareToggle: false, ShowExportButton: false, TimeRangeOptions: ['1h', '6h', '24h', '7d', '30d'] };\n }\n }\n\n /**\n * Always true now — every section uses the shared chrome filter bar.\n * Kept as a getter for future per-section carve-outs.\n */\n public get ShowSharedFilterBar(): boolean {\n return true;\n }\n\n /** Status options used by the popover dropdown when the section has ShowStatusFilter. */\n public readonly statusOptions = [\n { text: 'Success', value: 'Success' },\n { text: 'Error', value: 'Error' },\n { text: 'Running', value: 'Running' },\n { text: 'Pending', value: 'Pending' },\n { text: 'Canceled', value: 'Canceled' },\n ];\n\n /** Built lazily from AIEngineBase. */\n public get modelOptions(): { text: string; value: string }[] {\n return AIEngineBase.Instance?.Models?.map(m => ({ text: m.Name ?? '', value: m.ID }))\n ?.sort((a, b) => a.text.localeCompare(b.text)) ?? [];\n }\n\n public get agentOptions(): { text: string; value: string }[] {\n return AIEngineBase.Instance?.Agents\n ?.filter(a => a.Status === 'Active')\n ?.map(a => ({ text: a.Name ?? '', value: a.ID }))\n ?.sort((a, b) => a.text.localeCompare(b.text)) ?? [];\n }\n\n public get promptOptions(): { text: string; value: string }[] {\n return AIEngineBase.Instance?.Prompts?.map(p => ({ text: p.Name ?? '', value: p.ID }))\n ?.sort((a, b) => a.text.localeCompare(b.text)) ?? [];\n }\n\n /** Time-range chip options for the toolbar slot. */\n public get timeRangeChipOptions(): { text: string; value: string }[] {\n return this.FilterBarConfig.TimeRangeOptions.map(t => ({ text: t, value: t }));\n }\n\n /** Compare-mode visual state (kept on the shell now that analytics-filter-bar is gone). */\n public compareActive = false;\n\n /** Build the FilterFieldConfig[] for the popover based on the active section. */\n public get analyticsFilterFields(): FilterFieldConfig[] {\n const cfg = this.FilterBarConfig;\n const fields: FilterFieldConfig[] = [];\n if (cfg.ShowModelFilter) {\n fields.push({\n key: 'Models',\n type: 'dropdown',\n label: 'Model',\n icon: 'fa-solid fa-microchip',\n filterable: this.modelOptions.length > 10,\n options: [{ text: 'All Models', value: '' }, ...this.modelOptions],\n });\n }\n if (cfg.ShowAgentFilter) {\n fields.push({\n key: 'Agents',\n type: 'dropdown',\n label: 'Agent',\n icon: 'fa-solid fa-robot',\n filterable: this.agentOptions.length > 10,\n options: [{ text: 'All Agents', value: '' }, ...this.agentOptions],\n });\n }\n if (cfg.ShowPromptFilter) {\n fields.push({\n key: 'Prompts',\n type: 'dropdown',\n label: 'Prompt',\n icon: 'fa-solid fa-comment-dots',\n filterable: this.promptOptions.length > 10,\n options: [{ text: 'All Prompts', value: '' }, ...this.promptOptions],\n });\n }\n if (cfg.ShowStatusFilter) {\n fields.push({\n key: 'Statuses',\n type: 'dropdown',\n label: 'Status',\n icon: 'fa-solid fa-toggle-on',\n options: [{ text: 'All Statuses', value: '' }, ...this.statusOptions],\n });\n }\n if (cfg.ShowSortBy) {\n fields.push({\n key: 'SortBy',\n type: 'dropdown',\n label: 'Sort By',\n icon: 'fa-solid fa-arrow-down-wide-short',\n options: this.sortByOptions,\n });\n }\n if (cfg.ShowVendor) {\n fields.push({\n key: 'Vendor',\n type: 'dropdown',\n label: 'Vendor',\n icon: 'fa-solid fa-building',\n filterable: this.vendorOptions.length > 10,\n options: [{ text: 'All Vendors', value: '' }, ...this.vendorOptions],\n });\n }\n return fields;\n }\n\n /** Single-value flattened state for the centralized panel (the panel takes scalar values; we hold arrays in CurrentFilters). */\n public get analyticsFilterValues(): Record<string, unknown> {\n return {\n Models: this.CurrentFilters.Models?.[0] ?? '',\n Agents: this.CurrentFilters.Agents?.[0] ?? '',\n Prompts: this.CurrentFilters.Prompts?.[0] ?? '',\n Statuses: this.CurrentFilters.Statuses?.[0] ?? '',\n SortBy: this.CurrentSortBy,\n Vendor: this.CurrentVendor,\n };\n }\n\n /** Receive popover updates and translate scalar → array shape used by GlobalFilterState. */\n public onAnalyticsFilterValuesChange(values: Record<string, unknown>): void {\n const next: GlobalFilterState = {\n Models: values['Models'] ? [values['Models'] as string] : [],\n Agents: values['Agents'] ? [values['Agents'] as string] : [],\n Prompts: values['Prompts'] ? [values['Prompts'] as string] : [],\n Statuses: values['Statuses'] ? [values['Statuses'] as string] : [],\n };\n this.OnFiltersChange(next);\n if ('SortBy' in values) {\n this.CurrentSortBy = (values['SortBy'] as string) || 'cost-efficiency';\n }\n if ('Vendor' in values) {\n this.CurrentVendor = (values['Vendor'] as string) || '';\n }\n }\n\n /** Reset only the popover filters — leaves TimeRange and CompareActive alone. */\n public resetPopoverFilters(): void {\n this.OnFiltersChange({ Models: [], Agents: [], Prompts: [], Statuses: [] });\n // SortBy + Vendor reset only when Model Performance is the active section.\n if (this.ActiveSection === 'model-performance') {\n this.CurrentSortBy = 'cost-efficiency';\n this.CurrentVendor = '';\n }\n }\n\n /** Active filter count for the popover badge. */\n public get ActiveFilterCount(): number {\n const f = this.CurrentFilters;\n let count = (f.Models?.length ?? 0) + (f.Agents?.length ?? 0) + (f.Prompts?.length ?? 0) + (f.Statuses?.length ?? 0);\n // SortBy counts as \"active\" when it differs from the default.\n if (this.FilterBarConfig.ShowSortBy && this.CurrentSortBy && this.CurrentSortBy !== 'cost-efficiency') count++;\n if (this.FilterBarConfig.ShowVendor && this.CurrentVendor) count++;\n return count;\n }\n\n /** Toggle Compare mode — the mjButton directive owns the [(selected)] flip, so this handler only forwards the new value. */\n public toggleCompare(): void {\n this.OnCompareToggled(this.compareActive);\n }\n\n readonly NavItems: NavItem[] = [\n { Label: 'Executive Summary', Icon: 'fa-solid fa-gauge-high', Key: 'executive-summary' },\n { Label: 'Prompt Runs', Icon: 'fa-solid fa-comment-dots', Key: 'prompt-runs' },\n { Label: 'Agent Runs', Icon: 'fa-solid fa-robot', Key: 'agent-runs' },\n { Label: 'Model Performance', Icon: 'fa-solid fa-microchip', Key: 'model-performance' },\n { Key: 'divider' },\n { Label: 'Cost & Budget', Icon: 'fa-solid fa-coins', Key: 'cost-budget' },\n { Label: 'Error Analysis', Icon: 'fa-solid fa-triangle-exclamation', Key: 'error-analysis' },\n { Label: 'Usage Patterns', Icon: 'fa-solid fa-clock', Key: 'usage-patterns' },\n ];\n\n async ngOnInit(): Promise<void> {\n super.ngOnInit();\n this.setupSettingsDebounce();\n await this.loadUserSettings();\n this.NotifyLoadComplete();\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'AI Analytics';\n }\n\n async GetResourceIconClass(data: ResourceData): Promise<string> {\n return 'fa-solid fa-chart-line';\n }\n\n /** Navigate to a different analytics section */\n public OnSectionChange(key: string): void {\n if (key === 'divider' || key === this.ActiveSection) {\n return;\n }\n this.ActiveSection = key;\n this.saveUserSettings();\n this.cdr.detectChanges();\n }\n\n /** Handle time range changes from the filter bar */\n public OnTimeRangeChange(range: string): void {\n this.CurrentTimeRange = range;\n this.saveUserSettings();\n }\n\n /** Handle filter changes from the filter bar */\n public OnFiltersChange(filters: GlobalFilterState): void {\n this.CurrentFilters = filters;\n this.saveUserSettings();\n }\n\n /** Compare-toggle button — only visible on Executive Summary; forwards to that section. */\n public OnCompareToggled(value: boolean): void {\n this.executiveSummary?.OnCompareToggled?.(value);\n }\n\n /** Export button — only visible on Prompt Runs; forwards to that section. */\n public OnExportClicked(): void {\n this.promptRuns?.ExportCSV?.();\n }\n\n // ── Private Helpers ──\n\n private setupSettingsDebounce(): void {\n this.settingsPersistSubject.pipe(\n debounceTime(500),\n takeUntil(this.destroy$)\n ).subscribe(() => this.persistUserSettings());\n }\n\n private async loadUserSettings(): Promise<void> {\n try {\n const raw = UserInfoEngine.Instance.GetSetting(this.USER_SETTINGS_KEY);\n if (raw) {\n const prefs: AIAnalyticsPreferences = JSON.parse(raw);\n if (prefs.ActiveSection) {\n this.ActiveSection = prefs.ActiveSection;\n }\n if (prefs.ExecutiveSummary?.Filters) {\n this.CurrentFilters = { ...this.CurrentFilters, ...prefs.ExecutiveSummary.Filters };\n }\n if (prefs.ExecutiveSummary?.TimeRange) {\n this.CurrentTimeRange = prefs.ExecutiveSummary.TimeRange;\n }\n }\n } catch {\n // Use defaults on parse failure\n }\n this.settingsLoaded = true;\n }\n\n private saveUserSettings(): void {\n if (this.settingsLoaded) {\n this.settingsPersistSubject.next();\n }\n }\n\n private async persistUserSettings(): Promise<void> {\n try {\n const prefs: AIAnalyticsPreferences = {\n ActiveSection: this.ActiveSection,\n ExecutiveSummary: {\n TimeRange: this.CurrentTimeRange,\n ComparisonEnabled: false,\n Filters: this.CurrentFilters\n },\n PromptRuns: {\n TimeRange: this.CurrentTimeRange,\n Filters: this.CurrentFilters,\n ChartMetric: 'count',\n SortField: 'StartedAt',\n SortDirection: 'desc'\n },\n AgentRuns: {\n TimeRange: this.CurrentTimeRange,\n Filters: {\n Agents: this.CurrentFilters.Agents,\n Statuses: this.CurrentFilters.Statuses\n }\n },\n ModelPerformance: {\n TimeRange: this.CurrentTimeRange,\n SortBy: 'latency',\n VendorFilter: []\n },\n CostBudget: {\n TimeRange: this.CurrentTimeRange,\n Filters: this.CurrentFilters\n }\n };\n await UserInfoEngine.Instance.SetSetting(\n this.USER_SETTINGS_KEY,\n JSON.stringify(prefs)\n );\n } catch {\n // Silent failure for settings persistence\n }\n }\n}\n\nexport function LoadAIAnalyticsResource(): void {\n // Prevents tree-shaking of the @RegisterClass decorator\n}\n"]}
@@ -37,6 +37,11 @@ export declare class AnalyticsFilterBarComponent implements OnInit {
37
37
  promptDefaultItem: FilterOption;
38
38
  statusDefaultItem: FilterOption;
39
39
  compareActive: boolean;
40
+ /** True when at least one of the filter dropdowns is enabled — drives whether to render the popover trigger. */
41
+ get HasFilterDropdowns(): boolean;
42
+ /** Number of active filter selections — drives the popover badge. */
43
+ get ActiveFilterCount(): number;
44
+ ClearAllFilters(): void;
40
45
  ngOnInit(): void;
41
46
  OnTimeRangeSelect(range: string): void;
42
47
  OnModelChange(event: unknown): void;
@@ -1 +1 @@
1
- {"version":3,"file":"analytics-filter-bar.component.d.ts","sourceRoot":"","sources":["../../../../src/AI/components/analytics/analytics-filter-bar.component.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kDAAkD,CAAC;;AAErF,UAAU,YAAY;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED,qBAkNa,2BAA4B,YAAW,MAAM;IAC7C,SAAS,SAAS;IAClB,gBAAgB,EAAE,MAAM,EAAE,CAAoC;IAC9D,eAAe,UAAQ;IACvB,eAAe,UAAQ;IACvB,gBAAgB,UAAQ;IACxB,gBAAgB,UAAQ;IACxB,iBAAiB,UAAQ;IACzB,gBAAgB,UAAS;IACzB,OAAO,EAAE,iBAAiB,CAAyD;IAElF,eAAe,uBAA8B;IAC7C,aAAa,kCAAyC;IACtD,cAAc,wBAA+B;IAC7C,aAAa,qBAA4B;IAE5C,YAAY,EAAE,YAAY,EAAE,CAAM;IAClC,YAAY,EAAE,YAAY,EAAE,CAAM;IAClC,aAAa,EAAE,YAAY,EAAE,CAAM;IACnC,aAAa,EAAE,YAAY,EAAE,CAMlC;IAEF,wEAAwE;IACjE,gBAAgB,EAAE,YAAY,CAAqC;IACnE,gBAAgB,EAAE,YAAY,CAAqC;IACnE,iBAAiB,EAAE,YAAY,CAAsC;IACrE,iBAAiB,EAAE,YAAY,CAAuC;IAEtE,aAAa,UAAS;IAE7B,QAAQ,IAAI,IAAI;IAIT,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKtC,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAMnC,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAMnC,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAMpC,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAMpC,aAAa,IAAI,IAAI;IAK5B,OAAO,CAAC,YAAY;yCAzEX,2BAA2B;2CAA3B,2BAA2B;CAyFvC"}
1
+ {"version":3,"file":"analytics-filter-bar.component.d.ts","sourceRoot":"","sources":["../../../../src/AI/components/analytics/analytics-filter-bar.component.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kDAAkD,CAAC;;AAErF,UAAU,YAAY;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED,qBAqNa,2BAA4B,YAAW,MAAM;IAC7C,SAAS,SAAS;IAClB,gBAAgB,EAAE,MAAM,EAAE,CAAoC;IAC9D,eAAe,UAAQ;IACvB,eAAe,UAAQ;IACvB,gBAAgB,UAAQ;IACxB,gBAAgB,UAAQ;IACxB,iBAAiB,UAAQ;IACzB,gBAAgB,UAAS;IACzB,OAAO,EAAE,iBAAiB,CAAyD;IAElF,eAAe,uBAA8B;IAC7C,aAAa,kCAAyC;IACtD,cAAc,wBAA+B;IAC7C,aAAa,qBAA4B;IAE5C,YAAY,EAAE,YAAY,EAAE,CAAM;IAClC,YAAY,EAAE,YAAY,EAAE,CAAM;IAClC,aAAa,EAAE,YAAY,EAAE,CAAM;IACnC,aAAa,EAAE,YAAY,EAAE,CAMlC;IAEF,wEAAwE;IACjE,gBAAgB,EAAE,YAAY,CAAqC;IACnE,gBAAgB,EAAE,YAAY,CAAqC;IACnE,iBAAiB,EAAE,YAAY,CAAsC;IACrE,iBAAiB,EAAE,YAAY,CAAuC;IAEtE,aAAa,UAAS;IAE7B,gHAAgH;IAChH,IAAW,kBAAkB,IAAI,OAAO,CAEvC;IAED,qEAAqE;IACrE,IAAW,iBAAiB,IAAI,MAAM,CAGrC;IAEM,eAAe,IAAI,IAAI;IAK9B,QAAQ,IAAI,IAAI;IAIT,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKtC,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAMnC,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAMnC,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAMpC,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAMpC,aAAa,IAAI,IAAI;IAK5B,OAAO,CAAC,YAAY;yCAzFX,2BAA2B;2CAA3B,2BAA2B;CAyGvC"}