@memberjunction/ng-dashboards 5.21.0 → 5.23.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 (262) hide show
  1. package/README.md +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 +364 -362
  4. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  5. package/dist/AI/components/agents/agent-editor.component.js +2 -2
  6. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +313 -0
  7. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -0
  8. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +2792 -0
  9. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -0
  10. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +382 -0
  11. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -0
  12. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +2683 -0
  13. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -0
  14. package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
  15. package/dist/AI/components/execution-monitoring.component.js +191 -197
  16. package/dist/AI/components/execution-monitoring.component.js.map +1 -1
  17. package/dist/AI/components/models/model-management.component.js +9 -8
  18. package/dist/AI/components/models/model-management.component.js.map +1 -1
  19. package/dist/AI/components/prompts/prompt-management.component.js +305 -299
  20. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  21. package/dist/AI/components/system/system-configuration.component.js +319 -313
  22. package/dist/AI/components/system/system-configuration.component.js.map +1 -1
  23. package/dist/AI/components/vectors/vector-management-resource.component.d.ts +240 -0
  24. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -0
  25. package/dist/AI/components/vectors/vector-management-resource.component.js +1767 -0
  26. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -0
  27. package/dist/AI/index.d.ts +3 -0
  28. package/dist/AI/index.d.ts.map +1 -1
  29. package/dist/AI/index.js +6 -0
  30. package/dist/AI/index.js.map +1 -1
  31. package/dist/AI/services/ai-instrumentation.service.d.ts +50 -7
  32. package/dist/AI/services/ai-instrumentation.service.d.ts.map +1 -1
  33. package/dist/AI/services/ai-instrumentation.service.js +161 -193
  34. package/dist/AI/services/ai-instrumentation.service.js.map +1 -1
  35. package/dist/APIKeys/api-applications-panel.component.js +10 -12
  36. package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
  37. package/dist/APIKeys/api-key-create-dialog.component.js +13 -19
  38. package/dist/APIKeys/api-key-create-dialog.component.js.map +1 -1
  39. package/dist/APIKeys/api-key-edit-panel.component.js +12 -14
  40. package/dist/APIKeys/api-key-edit-panel.component.js.map +1 -1
  41. package/dist/APIKeys/api-scopes-panel.component.js +61 -68
  42. package/dist/APIKeys/api-scopes-panel.component.js.map +1 -1
  43. package/dist/APIKeys/api-usage-panel.component.js +10 -11
  44. package/dist/APIKeys/api-usage-panel.component.js.map +1 -1
  45. package/dist/Actions/components/actions-list-view.component.js +82 -96
  46. package/dist/Actions/components/actions-list-view.component.js.map +1 -1
  47. package/dist/Actions/components/actions-overview.component.js +130 -134
  48. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  49. package/dist/Actions/components/categories-list-view.component.d.ts.map +1 -1
  50. package/dist/Actions/components/categories-list-view.component.js +40 -46
  51. package/dist/Actions/components/categories-list-view.component.js.map +1 -1
  52. package/dist/Actions/components/code-management.component.js +2 -2
  53. package/dist/Actions/components/code-management.component.js.map +1 -1
  54. package/dist/Actions/components/entity-integration.component.js +2 -2
  55. package/dist/Actions/components/entity-integration.component.js.map +1 -1
  56. package/dist/Actions/components/execution-monitoring.component.js +127 -132
  57. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  58. package/dist/Actions/components/executions-list-view.component.js +2 -2
  59. package/dist/Actions/components/executions-list-view.component.js.map +1 -1
  60. package/dist/Actions/components/explorer/action-card.component.js +11 -17
  61. package/dist/Actions/components/explorer/action-card.component.js.map +1 -1
  62. package/dist/Actions/components/explorer/action-explorer.component.js +5 -11
  63. package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
  64. package/dist/Actions/components/explorer/action-list-item.component.js +8 -10
  65. package/dist/Actions/components/explorer/action-list-item.component.js.map +1 -1
  66. package/dist/Actions/components/explorer/action-toolbar.component.js +112 -133
  67. package/dist/Actions/components/explorer/action-toolbar.component.js.map +1 -1
  68. package/dist/Actions/components/explorer/action-tree-panel.component.js +63 -83
  69. package/dist/Actions/components/explorer/action-tree-panel.component.js.map +1 -1
  70. package/dist/Actions/components/explorer/new-action-panel.component.js +17 -21
  71. package/dist/Actions/components/explorer/new-action-panel.component.js.map +1 -1
  72. package/dist/Actions/components/explorer/new-category-panel.component.js +17 -21
  73. package/dist/Actions/components/explorer/new-category-panel.component.js.map +1 -1
  74. package/dist/Actions/components/scheduled-actions.component.js +2 -2
  75. package/dist/Actions/components/scheduled-actions.component.js.map +1 -1
  76. package/dist/Actions/components/security-permissions.component.js +2 -2
  77. package/dist/Actions/components/security-permissions.component.js.map +1 -1
  78. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts +13 -5
  79. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
  80. package/dist/ComponentStudio/component-studio-dashboard.component.js +168 -145
  81. package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
  82. package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts +4 -5
  83. package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts.map +1 -1
  84. package/dist/ComponentStudio/components/artifact-load-dialog.component.js +197 -200
  85. package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
  86. package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts +5 -7
  87. package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
  88. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +142 -148
  89. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
  90. package/dist/ComponentStudio/components/browser/component-browser.component.js +153 -166
  91. package/dist/ComponentStudio/components/browser/component-browser.component.js.map +1 -1
  92. package/dist/ComponentStudio/components/editors/code-editor-panel.component.js +15 -20
  93. package/dist/ComponentStudio/components/editors/code-editor-panel.component.js.map +1 -1
  94. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js +16 -21
  95. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js.map +1 -1
  96. package/dist/ComponentStudio/components/editors/requirements-editor.component.js +18 -23
  97. package/dist/ComponentStudio/components/editors/requirements-editor.component.js.map +1 -1
  98. package/dist/ComponentStudio/components/editors/spec-editor.component.js +25 -30
  99. package/dist/ComponentStudio/components/editors/spec-editor.component.js.map +1 -1
  100. package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js +10 -11
  101. package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js.map +1 -1
  102. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.d.ts.map +1 -1
  103. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js +24 -35
  104. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js.map +1 -1
  105. package/dist/ComponentStudio/components/text-import-dialog.component.js +15 -17
  106. package/dist/ComponentStudio/components/text-import-dialog.component.js.map +1 -1
  107. package/dist/Credentials/components/credentials-categories-resource.component.js +7 -6
  108. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  109. package/dist/Credentials/components/credentials-list-resource.component.js +6 -5
  110. package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
  111. package/dist/Credentials/components/credentials-types-resource.component.js +7 -6
  112. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  113. package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts +11 -0
  114. package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts.map +1 -1
  115. package/dist/DashboardBrowser/dashboard-browser-resource.component.js +57 -0
  116. package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
  117. package/dist/DashboardBrowser/dashboard-share-dialog.component.js +9 -9
  118. package/dist/DashboardBrowser/dashboard-share-dialog.component.js.map +1 -1
  119. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts +1 -1
  120. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +10 -2
  121. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
  122. package/dist/DataExplorer/data-explorer-dashboard.component.js +35 -11
  123. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  124. package/dist/DataExplorer/data-explorer-resource.component.d.ts +1 -0
  125. package/dist/DataExplorer/data-explorer-resource.component.d.ts.map +1 -1
  126. package/dist/DataExplorer/data-explorer-resource.component.js +8 -4
  127. package/dist/DataExplorer/data-explorer-resource.component.js.map +1 -1
  128. package/dist/Home/home-dashboard.component.d.ts +181 -1
  129. package/dist/Home/home-dashboard.component.d.ts.map +1 -1
  130. package/dist/Home/home-dashboard.component.js +1704 -182
  131. package/dist/Home/home-dashboard.component.js.map +1 -1
  132. package/dist/Integration/components/connections/connections.component.js +4 -4
  133. package/dist/Integration/components/connections/connections.component.js.map +1 -1
  134. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +246 -259
  135. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
  136. package/dist/Integration/components/widgets/integration-card.component.js +7 -9
  137. package/dist/Integration/components/widgets/integration-card.component.js.map +1 -1
  138. package/dist/Integration/integration.module.d.ts +6 -10
  139. package/dist/Integration/integration.module.d.ts.map +1 -1
  140. package/dist/Integration/integration.module.js +12 -20
  141. package/dist/Integration/integration.module.js.map +1 -1
  142. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts +106 -0
  143. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts.map +1 -0
  144. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +607 -0
  145. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -0
  146. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts +126 -0
  147. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts.map +1 -0
  148. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +1086 -0
  149. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -0
  150. package/dist/KnowledgeHub/components/results-detail/search-result-detail.component.d.ts +56 -0
  151. package/dist/KnowledgeHub/components/results-detail/search-result-detail.component.d.ts.map +1 -0
  152. package/dist/KnowledgeHub/components/results-detail/search-result-detail.component.js +291 -0
  153. package/dist/KnowledgeHub/components/results-detail/search-result-detail.component.js.map +1 -0
  154. package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.d.ts +85 -0
  155. package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.d.ts.map +1 -0
  156. package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.js +461 -0
  157. package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.js.map +1 -0
  158. package/dist/KnowledgeHub/index.d.ts +5 -0
  159. package/dist/KnowledgeHub/index.d.ts.map +1 -0
  160. package/dist/KnowledgeHub/index.js +6 -0
  161. package/dist/KnowledgeHub/index.js.map +1 -0
  162. package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
  163. package/dist/Lists/components/lists-browse-resource.component.js +9 -7
  164. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  165. package/dist/Lists/components/lists-my-lists-resource.component.js +5 -4
  166. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  167. package/dist/Lists/components/lists-operations-resource.component.js +10 -9
  168. package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
  169. package/dist/MCP/components/mcp-connection-dialog.component.js +141 -132
  170. package/dist/MCP/components/mcp-connection-dialog.component.js.map +1 -1
  171. package/dist/MCP/components/mcp-log-detail-panel.component.js +4 -4
  172. package/dist/MCP/components/mcp-log-detail-panel.component.js.map +1 -1
  173. package/dist/MCP/components/mcp-server-dialog.component.js +141 -128
  174. package/dist/MCP/components/mcp-server-dialog.component.js.map +1 -1
  175. package/dist/MCP/components/mcp-test-tool-dialog.component.js +210 -218
  176. package/dist/MCP/components/mcp-test-tool-dialog.component.js.map +1 -1
  177. package/dist/MCP/mcp-dashboard.component.js +2 -2
  178. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  179. package/dist/MCP/mcp.module.d.ts +6 -9
  180. package/dist/MCP/mcp.module.d.ts.map +1 -1
  181. package/dist/MCP/mcp.module.js +20 -22
  182. package/dist/MCP/mcp.module.js.map +1 -1
  183. package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
  184. package/dist/QueryBrowser/query-browser-resource.component.js +5 -1
  185. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  186. package/dist/Scheduling/components/scheduling-activity.component.js +5 -4
  187. package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
  188. package/dist/Scheduling/components/scheduling-jobs.component.js +6 -5
  189. package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
  190. package/dist/Scheduling/components/scheduling-overview.component.js +93 -92
  191. package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
  192. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
  193. package/dist/SystemDiagnostics/system-diagnostics.component.js +1 -0
  194. package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
  195. package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts +7 -1
  196. package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts.map +1 -1
  197. package/dist/Testing/components/testing-dashboard-tab-resource.component.js +63 -8
  198. package/dist/Testing/components/testing-dashboard-tab-resource.component.js.map +1 -1
  199. package/dist/Testing/components/testing-dashboard-tab.component.d.ts +9 -1
  200. package/dist/Testing/components/testing-dashboard-tab.component.d.ts.map +1 -1
  201. package/dist/Testing/components/testing-dashboard-tab.component.js +109 -62
  202. package/dist/Testing/components/testing-dashboard-tab.component.js.map +1 -1
  203. package/dist/Testing/components/testing-explorer.component.d.ts +2 -1
  204. package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
  205. package/dist/Testing/components/testing-explorer.component.js +241 -200
  206. package/dist/Testing/components/testing-explorer.component.js.map +1 -1
  207. package/dist/Testing/components/testing-runs-resource.component.d.ts +7 -1
  208. package/dist/Testing/components/testing-runs-resource.component.d.ts.map +1 -1
  209. package/dist/Testing/components/testing-runs-resource.component.js +63 -8
  210. package/dist/Testing/components/testing-runs-resource.component.js.map +1 -1
  211. package/dist/Testing/components/testing-runs.component.d.ts.map +1 -1
  212. package/dist/Testing/components/testing-runs.component.js +7 -5
  213. package/dist/Testing/components/testing-runs.component.js.map +1 -1
  214. package/dist/Testing/testing-dashboard.component.d.ts +9 -1
  215. package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
  216. package/dist/Testing/testing-dashboard.component.js +122 -54
  217. package/dist/Testing/testing-dashboard.component.js.map +1 -1
  218. package/dist/actions-dashboards.module.d.ts +8 -13
  219. package/dist/actions-dashboards.module.d.ts.map +1 -1
  220. package/dist/actions-dashboards.module.js +6 -27
  221. package/dist/actions-dashboards.module.js.map +1 -1
  222. package/dist/ai-dashboards.module.d.ts +14 -11
  223. package/dist/ai-dashboards.module.d.ts.map +1 -1
  224. package/dist/ai-dashboards.module.js +58 -44
  225. package/dist/ai-dashboards.module.js.map +1 -1
  226. package/dist/communication-dashboards.module.d.ts +4 -8
  227. package/dist/communication-dashboards.module.d.ts.map +1 -1
  228. package/dist/communication-dashboards.module.js +0 -19
  229. package/dist/communication-dashboards.module.js.map +1 -1
  230. package/dist/component-studio-dashboards.module.d.ts +7 -11
  231. package/dist/component-studio-dashboards.module.d.ts.map +1 -1
  232. package/dist/component-studio-dashboards.module.js +22 -34
  233. package/dist/component-studio-dashboards.module.js.map +1 -1
  234. package/dist/core-dashboards.module.d.ts +13 -18
  235. package/dist/core-dashboards.module.d.ts.map +1 -1
  236. package/dist/core-dashboards.module.js +18 -31
  237. package/dist/core-dashboards.module.js.map +1 -1
  238. package/dist/credentials-dashboards.module.d.ts +5 -8
  239. package/dist/credentials-dashboards.module.d.ts.map +1 -1
  240. package/dist/credentials-dashboards.module.js +3 -19
  241. package/dist/credentials-dashboards.module.js.map +1 -1
  242. package/dist/data-explorer-dashboards.module.d.ts +7 -13
  243. package/dist/data-explorer-dashboards.module.d.ts.map +1 -1
  244. package/dist/data-explorer-dashboards.module.js +0 -27
  245. package/dist/data-explorer-dashboards.module.js.map +1 -1
  246. package/dist/lists-dashboards.module.d.ts +5 -8
  247. package/dist/lists-dashboards.module.d.ts.map +1 -1
  248. package/dist/lists-dashboards.module.js +3 -19
  249. package/dist/lists-dashboards.module.js.map +1 -1
  250. package/dist/public-api.d.ts +5 -1
  251. package/dist/public-api.d.ts.map +1 -1
  252. package/dist/public-api.js +6 -1
  253. package/dist/public-api.js.map +1 -1
  254. package/dist/scheduling-dashboards.module.d.ts +6 -10
  255. package/dist/scheduling-dashboards.module.d.ts.map +1 -1
  256. package/dist/scheduling-dashboards.module.js +3 -23
  257. package/dist/scheduling-dashboards.module.js.map +1 -1
  258. package/dist/testing-dashboards.module.d.ts +7 -12
  259. package/dist/testing-dashboards.module.d.ts.map +1 -1
  260. package/dist/testing-dashboards.module.js +4 -27
  261. package/dist/testing-dashboards.module.js.map +1 -1
  262. package/package.json +47 -53
@@ -1 +1 @@
1
- {"version":3,"file":"system-configuration.component.js","sourceRoot":"","sources":["../../../../src/AI/components/system/system-configuration.component.ts","../../../../src/AI/components/system/system-configuration.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, ChangeDetectorRef } from '@angular/core';\nimport { LogError, LogStatus, CompositeKey } from '@memberjunction/core';\nimport { MJAIConfigurationEntity, MJAIConfigurationParamEntity, ResourceData } from '@memberjunction/core-entities';\nimport { AIEngineBase } from '@memberjunction/ai-engine-base';\nimport { RegisterClass , UUIDsEqual } from '@memberjunction/global';\nimport { BaseResourceComponent, NavigationService } from '@memberjunction/ng-shared';\nimport { MJAIPromptEntityExtended } from '@memberjunction/ai-core-plus';\n\ninterface SystemConfigFilter {\n searchTerm: string;\n status: string;\n isDefault: string;\n}\n\ninterface ConfigurationWithParams extends MJAIConfigurationEntity {\n params?: MJAIConfigurationParamEntity[];\n isExpanded?: boolean;\n compressionPrompt?: MJAIPromptEntityExtended | null;\n summarizationPrompt?: MJAIPromptEntityExtended | null;\n}\n/**\n * AI Configuration Resource - displays AI system configuration management\n * Extends BaseResourceComponent to work with the resource type system\n */\n@RegisterClass(BaseResourceComponent, 'AIConfigResource')\n@Component({\n standalone: false,\n selector: 'app-system-configuration',\n templateUrl: './system-configuration.component.html',\n styleUrls: ['./system-configuration.component.css']\n})\nexport class SystemConfigurationComponent extends BaseResourceComponent implements OnInit {\n\n public isLoading = false;\n public error: string | null = null;\n public filterPanelVisible = true;\n public viewMode: 'grid' | 'list' = 'grid';\n\n public configurations: ConfigurationWithParams[] = [];\n public filteredConfigurations: ConfigurationWithParams[] = [];\n public allParams: MJAIConfigurationParamEntity[] = [];\n public allPrompts: MJAIPromptEntityExtended[] = [];\n\n public currentFilters: SystemConfigFilter = {\n searchTerm: '',\n status: 'all',\n isDefault: 'all'\n };\n\n // Sorting\n public sortColumn: string = 'Name';\n public sortDirection: 'asc' | 'desc' = 'asc';\n\n // Detail panel\n public selectedConfig: ConfigurationWithParams | null = null;\n public detailPanelVisible = false;\n\n // Stats\n public totalConfigs = 0;\n public activeConfigs = 0;\n public defaultConfig: ConfigurationWithParams | null = null;\n\n constructor(\n private navigationService: NavigationService,\n private cdr: ChangeDetectorRef\n ) {\n super();\n }\n\n ngOnInit(): void {\n this.loadData();\n }\n\n public async loadData(): Promise<void> {\n try {\n this.isLoading = true;\n this.error = null;\n this.cdr.detectChanges();\n\n // Ensure AIEngineBase is configured (no-op if already loaded)\n await AIEngineBase.Instance.Config(false);\n\n // Get cached data from AIEngineBase\n const configs = AIEngineBase.Instance.Configurations;\n const params = AIEngineBase.Instance.ConfigurationParams;\n const prompts = AIEngineBase.Instance.Prompts;\n\n // Create extended configurations with associated data\n this.configurations = configs.map(config => {\n const extended = config as ConfigurationWithParams;\n extended.params = params.filter(p => UUIDsEqual(p.ConfigurationID, config.ID));\n extended.isExpanded = false;\n\n // Find linked prompts\n if (config.DefaultPromptForContextCompressionID) {\n extended.compressionPrompt = prompts.find(p => UUIDsEqual(p.ID, config.DefaultPromptForContextCompressionID)) || null;\n }\n if (config.DefaultPromptForContextSummarizationID) {\n extended.summarizationPrompt = prompts.find(p => UUIDsEqual(p.ID, config.DefaultPromptForContextSummarizationID)) || null;\n }\n\n return extended;\n });\n\n this.allParams = params;\n this.allPrompts = prompts;\n\n // Calculate stats\n this.totalConfigs = this.configurations.length;\n this.activeConfigs = this.configurations.filter(c => c.Status === 'Active').length;\n this.defaultConfig = this.configurations.find(c => c.IsDefault) || null;\n\n this.applyFilters();\n LogStatus('AI Configurations loaded successfully');\n } catch (error) {\n this.error = 'Failed to load AI configurations. Please try again.';\n LogError('Error loading AI configurations', undefined, error);\n } finally {\n this.isLoading = false;\n this.NotifyLoadComplete();\n this.cdr.detectChanges();\n }\n }\n\n public toggleFilterPanel(): void {\n this.filterPanelVisible = !this.filterPanelVisible;\n }\n\n public setViewMode(mode: 'grid' | 'list'): void {\n this.viewMode = mode;\n }\n\n public toggleExpanded(config: ConfigurationWithParams): void {\n config.isExpanded = !config.isExpanded;\n }\n\n public onFiltersChange(filters: SystemConfigFilter): void {\n this.currentFilters = { ...filters };\n this.applyFilters();\n }\n\n public onFilterChange(): void {\n this.applyFilters();\n }\n\n public onResetFilters(): void {\n this.currentFilters = {\n searchTerm: '',\n status: 'all',\n isDefault: 'all'\n };\n this.applyFilters();\n }\n\n private applyFilters(): void {\n let filtered = [...this.configurations];\n\n // Apply search filter\n if (this.currentFilters.searchTerm) {\n const searchTerm = this.currentFilters.searchTerm.toLowerCase();\n filtered = filtered.filter(config =>\n config.Name.toLowerCase().includes(searchTerm) ||\n (config.Description || '').toLowerCase().includes(searchTerm) ||\n (config.params?.some(p => p.Name.toLowerCase().includes(searchTerm) ||\n (p.Description || '').toLowerCase().includes(searchTerm)))\n );\n }\n\n // Apply status filter\n if (this.currentFilters.status !== 'all') {\n filtered = filtered.filter(config => config.Status === this.currentFilters.status);\n }\n\n // Apply default configuration filter\n if (this.currentFilters.isDefault !== 'all') {\n const isDefault = this.currentFilters.isDefault === 'true';\n filtered = filtered.filter(config => config.IsDefault === isDefault);\n }\n\n // Apply sorting\n this.filteredConfigurations = this.applySorting(filtered);\n this.cdr.detectChanges();\n }\n\n /**\n * Sort the configurations by the specified column\n */\n public sortBy(column: string): void {\n if (this.sortColumn === column) {\n // Toggle direction if same column\n this.sortDirection = this.sortDirection === 'asc' ? 'desc' : 'asc';\n } else {\n // New column, default to ascending\n this.sortColumn = column;\n this.sortDirection = 'asc';\n }\n this.applyFilters();\n }\n\n /**\n * Apply sorting to the filtered list\n */\n private applySorting(configs: ConfigurationWithParams[]): ConfigurationWithParams[] {\n return configs.sort((a, b) => {\n let valueA: string | number | boolean | null | undefined;\n let valueB: string | number | boolean | null | undefined;\n\n switch (this.sortColumn) {\n case 'Name':\n valueA = a.Name;\n valueB = b.Name;\n break;\n case 'Status':\n valueA = a.Status;\n valueB = b.Status;\n break;\n case 'Parameters':\n valueA = a.params?.length || 0;\n valueB = b.params?.length || 0;\n break;\n case 'Updated':\n valueA = a.__mj_UpdatedAt ? new Date(a.__mj_UpdatedAt).getTime() : 0;\n valueB = b.__mj_UpdatedAt ? new Date(b.__mj_UpdatedAt).getTime() : 0;\n break;\n default:\n valueA = a.Name;\n valueB = b.Name;\n }\n\n // Handle numeric comparison\n if (typeof valueA === 'number' && typeof valueB === 'number') {\n const comparison = valueA - valueB;\n return this.sortDirection === 'desc' ? -comparison : comparison;\n }\n\n // Handle string/other comparison\n const strA = (valueA ?? '').toString().toLowerCase();\n const strB = (valueB ?? '').toString().toLowerCase();\n\n const comparison = strA.localeCompare(strB);\n return this.sortDirection === 'desc' ? -comparison : comparison;\n });\n }\n\n public onOpenConfiguration(config: ConfigurationWithParams): void {\n const compositeKey = new CompositeKey([{ FieldName: 'ID', Value: config.ID }]);\n this.navigationService.OpenEntityRecord('MJ: AI Configurations', compositeKey);\n }\n\n public onOpenPrompt(promptId: string): void {\n const compositeKey = new CompositeKey([{ FieldName: 'ID', Value: promptId }]);\n this.navigationService.OpenEntityRecord('MJ: AI Prompts', compositeKey);\n }\n\n public onOpenParam(param: MJAIConfigurationParamEntity): void {\n const compositeKey = new CompositeKey([{ FieldName: 'ID', Value: param.ID }]);\n this.navigationService.OpenEntityRecord('MJ: AI Configuration Params', compositeKey);\n }\n\n /**\n * Show the detail panel for a configuration\n */\n public showConfigDetails(config: ConfigurationWithParams, event?: Event): void {\n if (event) {\n event.stopPropagation();\n }\n this.selectedConfig = config;\n this.detailPanelVisible = true;\n }\n\n /**\n * Close the detail panel\n */\n public closeDetailPanel(): void {\n this.detailPanelVisible = false;\n // Delay clearing selectedConfig for smoother animation\n setTimeout(() => {\n if (!this.detailPanelVisible) {\n this.selectedConfig = null;\n }\n }, 300);\n }\n\n /**\n * Open the full entity record from the detail panel\n */\n public openConfigFromPanel(): void {\n if (this.selectedConfig) {\n this.onOpenConfiguration(this.selectedConfig);\n }\n }\n\n public getStatusClass(status: string): string {\n switch (status) {\n case 'Active': return 'status-active';\n case 'Preview': return 'status-preview';\n case 'Inactive': return 'status-inactive';\n case 'Deprecated': return 'status-deprecated';\n default: return 'status-unknown';\n }\n }\n\n public getStatusIcon(status: string): string {\n switch (status) {\n case 'Active': return 'fa-solid fa-circle-check';\n case 'Preview': return 'fa-solid fa-flask';\n case 'Inactive': return 'fa-solid fa-circle-pause';\n case 'Deprecated': return 'fa-solid fa-triangle-exclamation';\n default: return 'fa-solid fa-circle-question';\n }\n }\n\n public getParamTypeIcon(type: string): string {\n switch (type) {\n case 'string': return 'fa-solid fa-font';\n case 'number': return 'fa-solid fa-hashtag';\n case 'boolean': return 'fa-solid fa-toggle-on';\n case 'date': return 'fa-solid fa-calendar';\n case 'object': return 'fa-solid fa-brackets-curly';\n default: return 'fa-solid fa-code';\n }\n }\n\n public formatParamValue(param: MJAIConfigurationParamEntity): string {\n if (!param.Value) return '(not set)';\n\n switch (param.Type) {\n case 'boolean':\n return param.Value === 'true' ? 'Yes' : 'No';\n case 'object':\n try {\n return JSON.stringify(JSON.parse(param.Value), null, 2).substring(0, 50) + '...';\n } catch {\n return param.Value.substring(0, 50) + '...';\n }\n default:\n return param.Value.length > 50 ? param.Value.substring(0, 50) + '...' : param.Value;\n }\n }\n\n public formatDate(date: Date): string {\n if (!date) return 'N/A';\n return new Date(date).toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit'\n });\n }\n\n // BaseResourceComponent abstract method implementations\n async GetResourceDisplayName(_data: ResourceData): Promise<string> {\n return 'AI Configuration';\n }\n\n async GetResourceIconClass(_data: ResourceData): Promise<string> {\n return 'fa-solid fa-sliders';\n }\n}\n","<div class=\"system-configuration-container\">\n <!-- Header -->\n <div class=\"dashboard-header\">\n <div class=\"header-info\">\n <h2 class=\"dashboard-title\">\n <i class=\"fa-solid fa-sliders\"></i>\n AI Configuration\n </h2>\n <button\n type=\"button\"\n class=\"filter-toggle-btn\"\n (click)=\"toggleFilterPanel()\"\n title=\"Toggle Filters\">\n <i class=\"fa-solid fa-filter\"></i>\n @if (filterPanelVisible) {\n Hide Filters\n } @else {\n Show Filters\n }\n </button>\n <span class=\"config-count\">\n {{ filteredConfigurations.length }} of {{ configurations.length }} configurations\n </span>\n </div>\n\n <div class=\"header-controls\">\n <!-- View Toggle -->\n <div class=\"view-toggle\">\n <button\n type=\"button\"\n class=\"view-btn\"\n [class.active]=\"viewMode === 'grid'\"\n (click)=\"setViewMode('grid')\"\n title=\"Grid View\">\n <i class=\"fa-solid fa-grid-2\"></i>\n </button>\n <button\n type=\"button\"\n class=\"view-btn\"\n [class.active]=\"viewMode === 'list'\"\n (click)=\"setViewMode('list')\"\n title=\"List View\">\n <i class=\"fa-solid fa-list\"></i>\n </button>\n </div>\n\n <button\n type=\"button\"\n class=\"control-btn\"\n (click)=\"loadData()\"\n [disabled]=\"isLoading\"\n title=\"Refresh\">\n <i class=\"fa-solid fa-refresh\" [class.fa-spin]=\"isLoading\"></i>\n Refresh\n </button>\n </div>\n </div>\n\n <!-- Main Content with Splitter -->\n <div class=\"main-content\">\n <kendo-splitter\n class=\"main-splitter\"\n orientation=\"horizontal\">\n\n <!-- Filter Panel (Left) -->\n <kendo-splitter-pane\n [size]=\"filterPanelVisible ? '320px' : '0px'\"\n [collapsible]=\"false\"\n [resizable]=\"filterPanelVisible\"\n [scrollable]=\"false\"\n [hidden]=\"!filterPanelVisible\">\n <mj-system-config-filter-panel\n [configurations]=\"configurations\"\n [filteredConfigurations]=\"filteredConfigurations\"\n [filters]=\"currentFilters\"\n (filtersChange)=\"onFiltersChange($event)\"\n (filterChange)=\"onFilterChange()\"\n (resetFilters)=\"onResetFilters()\"\n (closePanel)=\"toggleFilterPanel()\">\n </mj-system-config-filter-panel>\n </kendo-splitter-pane>\n\n <!-- Configurations List Panel -->\n <kendo-splitter-pane\n [resizable]=\"true\"\n [scrollable]=\"false\">\n <div class=\"configurations-content\">\n <!-- Loading State -->\n @if (isLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading AI configurations...\" size=\"large\"></mj-loading>\n </div>\n }\n\n <!-- Error State -->\n @if (error && !isLoading) {\n <div class=\"error-container\">\n <p class=\"error-message\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n {{ error }}\n </p>\n </div>\n }\n\n <!-- Configurations Content -->\n @if (!isLoading && !error) {\n @if (filteredConfigurations.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-sliders\"></i>\n <h3>No configurations found</h3>\n <p>No AI configurations match your current filters. Try adjusting your search criteria or create a new configuration.</p>\n </div>\n } @else {\n <!-- Grid View -->\n @if (viewMode === 'grid') {\n <div class=\"configurations-grid\">\n @for (config of filteredConfigurations; track config.ID) {\n <div class=\"config-card\" [class.expanded]=\"config.isExpanded\">\n <!-- Card Header -->\n <div class=\"card-header\" (click)=\"toggleExpanded(config)\">\n <div class=\"config-info\">\n <div class=\"config-icon\">\n <i class=\"fa-solid fa-sliders\"></i>\n </div>\n <div class=\"config-details\">\n <h4 class=\"config-name\">{{ config.Name }}</h4>\n <div class=\"config-meta\">\n @if (config.IsDefault) {\n <span class=\"default-badge\">\n <i class=\"fa-solid fa-star\"></i>\n Default\n </span>\n }\n <span class=\"status-badge\" [ngClass]=\"getStatusClass(config.Status)\">\n <i [class]=\"getStatusIcon(config.Status)\"></i>\n {{ config.Status }}\n </span>\n </div>\n </div>\n </div>\n\n <i class=\"fa-solid fa-chevron-down expand-icon\"\n [class.rotated]=\"config.isExpanded\"></i>\n </div>\n\n <!-- Card Body -->\n <div class=\"card-body\">\n @if (config.Description) {\n <p class=\"config-description\">{{ config.Description }}</p>\n } @else {\n <p class=\"config-description text-muted\">No description provided</p>\n }\n\n <!-- Expanded Content -->\n @if (config.isExpanded) {\n <div class=\"expanded-content\">\n <!-- Stats Grid -->\n <div class=\"config-stats\">\n <div class=\"stat-item\">\n <span class=\"stat-label\">Parameters</span>\n <span class=\"stat-value\">{{ config.params?.length || 0 }}</span>\n </div>\n <div class=\"stat-item\">\n <span class=\"stat-label\">Created</span>\n <span class=\"stat-value\">{{ formatDate(config.__mj_CreatedAt) }}</span>\n </div>\n <div class=\"stat-item\">\n <span class=\"stat-label\">Updated</span>\n <span class=\"stat-value\">{{ formatDate(config.__mj_UpdatedAt) }}</span>\n </div>\n </div>\n\n <!-- Linked Prompts -->\n <div class=\"prompts-section\">\n <h5 class=\"section-title\">\n <i class=\"fa-solid fa-message-lines\"></i>\n Linked Prompts\n </h5>\n <div class=\"prompt-links\">\n @if (config.compressionPrompt) {\n <div class=\"prompt-link\" (click)=\"onOpenPrompt(config.DefaultPromptForContextCompressionID!); $event.stopPropagation()\">\n <div class=\"prompt-link-info\">\n <div class=\"prompt-link-icon\">\n <i class=\"fa-solid fa-compress\"></i>\n </div>\n <div class=\"prompt-link-details\">\n <span class=\"prompt-link-label\">Context Compression</span>\n <span class=\"prompt-link-name\">{{ config.compressionPrompt.Name }}</span>\n </div>\n </div>\n <i class=\"fa-solid fa-arrow-right prompt-link-arrow\"></i>\n </div>\n } @else {\n <div class=\"no-prompt\">No compression prompt configured</div>\n }\n\n @if (config.summarizationPrompt) {\n <div class=\"prompt-link\" (click)=\"onOpenPrompt(config.DefaultPromptForContextSummarizationID!); $event.stopPropagation()\">\n <div class=\"prompt-link-info\">\n <div class=\"prompt-link-icon\">\n <i class=\"fa-solid fa-file-lines\"></i>\n </div>\n <div class=\"prompt-link-details\">\n <span class=\"prompt-link-label\">Context Summarization</span>\n <span class=\"prompt-link-name\">{{ config.summarizationPrompt.Name }}</span>\n </div>\n </div>\n <i class=\"fa-solid fa-arrow-right prompt-link-arrow\"></i>\n </div>\n } @else {\n <div class=\"no-prompt\">No summarization prompt configured</div>\n }\n </div>\n </div>\n\n <!-- Configuration Parameters -->\n @if (config.params && config.params.length > 0) {\n <div class=\"params-section\">\n <h5 class=\"section-title\">\n <i class=\"fa-solid fa-gear\"></i>\n Configuration Parameters\n </h5>\n <div class=\"params-grid\">\n @for (param of config.params; track param.ID) {\n <div class=\"param-item\" (click)=\"onOpenParam(param); $event.stopPropagation()\">\n <div class=\"param-info\">\n <div class=\"param-type-icon\">\n <i [class]=\"getParamTypeIcon(param.Type)\"></i>\n </div>\n <div class=\"param-details\">\n <span class=\"param-name\">{{ param.Name }}</span>\n <span class=\"param-type\">{{ param.Type }}</span>\n </div>\n </div>\n <span class=\"param-value\">{{ formatParamValue(param) }}</span>\n </div>\n }\n </div>\n </div>\n } @else {\n <div class=\"params-section\">\n <h5 class=\"section-title\">\n <i class=\"fa-solid fa-gear\"></i>\n Configuration Parameters\n </h5>\n <div class=\"no-params\">No parameters configured</div>\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Card Actions -->\n <div class=\"card-actions\" (click)=\"$event.stopPropagation()\">\n <button\n type=\"button\"\n class=\"action-btn\"\n (click)=\"showConfigDetails(config, $event)\"\n title=\"View Details\">\n <i class=\"fa-solid fa-eye\"></i>\n Details\n </button>\n\n <button\n type=\"button\"\n class=\"action-btn action-btn-primary\"\n (click)=\"onOpenConfiguration(config)\">\n <i class=\"fa-solid fa-edit\"></i>\n Configure\n </button>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- List View -->\n @if (viewMode === 'list') {\n <div class=\"configurations-list\">\n <table class=\"configurations-table\">\n <thead>\n <tr>\n <th (click)=\"sortBy('Name')\"\n [class.sorted]=\"sortColumn === 'Name'\"\n [class.desc]=\"sortColumn === 'Name' && sortDirection === 'desc'\">\n <span class=\"sort-header\">\n Configuration\n <i class=\"fa-solid fa-chevron-up sort-icon\"></i>\n </span>\n </th>\n <th (click)=\"sortBy('Status')\"\n [class.sorted]=\"sortColumn === 'Status'\"\n [class.desc]=\"sortColumn === 'Status' && sortDirection === 'desc'\">\n <span class=\"sort-header\">\n Status\n <i class=\"fa-solid fa-chevron-up sort-icon\"></i>\n </span>\n </th>\n <th (click)=\"sortBy('Parameters')\"\n [class.sorted]=\"sortColumn === 'Parameters'\"\n [class.desc]=\"sortColumn === 'Parameters' && sortDirection === 'desc'\">\n <span class=\"sort-header\">\n Parameters\n <i class=\"fa-solid fa-chevron-up sort-icon\"></i>\n </span>\n </th>\n <th (click)=\"sortBy('Updated')\"\n [class.sorted]=\"sortColumn === 'Updated'\"\n [class.desc]=\"sortColumn === 'Updated' && sortDirection === 'desc'\">\n <span class=\"sort-header\">\n Updated\n <i class=\"fa-solid fa-chevron-up sort-icon\"></i>\n </span>\n </th>\n <th>Actions</th>\n </tr>\n </thead>\n <tbody>\n @for (config of filteredConfigurations; track config.ID) {\n <tr>\n <td>\n <div class=\"config-name-cell\">\n <div class=\"config-icon-small\">\n <i class=\"fa-solid fa-sliders\"></i>\n </div>\n <div>\n <div class=\"config-name-text\">\n {{ config.Name }}\n @if (config.IsDefault) {\n <span class=\"default-badge\" style=\"margin-left: 8px;\">\n <i class=\"fa-solid fa-star\"></i>\n Default\n </span>\n }\n </div>\n @if (config.Description) {\n <div class=\"config-description-small\">{{ config.Description }}</div>\n }\n </div>\n </div>\n </td>\n <td>\n <span class=\"status-badge\" [ngClass]=\"getStatusClass(config.Status)\">\n <i [class]=\"getStatusIcon(config.Status)\"></i>\n {{ config.Status }}\n </span>\n </td>\n <td>{{ config.params?.length || 0 }}</td>\n <td>{{ formatDate(config.__mj_UpdatedAt) }}</td>\n <td>\n <div class=\"table-actions\">\n <button\n type=\"button\"\n class=\"action-btn-small\"\n (click)=\"showConfigDetails(config)\"\n title=\"View Details\">\n <i class=\"fa-solid fa-eye\"></i>\n </button>\n <button\n type=\"button\"\n class=\"action-btn-small primary\"\n (click)=\"onOpenConfiguration(config)\">\n <i class=\"fa-solid fa-edit\"></i>\n </button>\n </div>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n }\n }\n </div>\n </kendo-splitter-pane>\n </kendo-splitter>\n </div>\n\n <!-- Detail Panel Overlay -->\n @if (detailPanelVisible) {\n <div class=\"detail-panel-overlay\" (click)=\"closeDetailPanel()\"></div>\n }\n\n <!-- Detail Panel -->\n <div class=\"detail-panel\" [class.visible]=\"detailPanelVisible\">\n @if (selectedConfig) {\n <!-- Panel Header -->\n <div class=\"detail-panel-header\">\n <div class=\"detail-panel-title\">\n <div class=\"detail-icon\">\n <i class=\"fa-solid fa-sliders\"></i>\n </div>\n <div class=\"detail-title-info\">\n <h3>{{ selectedConfig.Name }}</h3>\n <span class=\"detail-subtitle\">AI Configuration</span>\n </div>\n </div>\n <button class=\"detail-panel-close\" (click)=\"closeDetailPanel()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n\n <!-- Panel Content -->\n <div class=\"detail-panel-content\">\n <!-- Status Section -->\n <div class=\"detail-section\">\n <div class=\"detail-badges\">\n <span class=\"status-badge\" [ngClass]=\"getStatusClass(selectedConfig.Status)\">\n <i [class]=\"getStatusIcon(selectedConfig.Status)\"></i>\n {{ selectedConfig.Status }}\n </span>\n @if (selectedConfig.IsDefault) {\n <span class=\"feature-badge default\">\n <i class=\"fa-solid fa-star\"></i>\n Default Configuration\n </span>\n }\n </div>\n </div>\n\n <!-- Description -->\n @if (selectedConfig.Description) {\n <div class=\"detail-section\">\n <h4 class=\"detail-section-title\">\n <i class=\"fa-solid fa-align-left\"></i>\n Description\n </h4>\n <p class=\"detail-description\">{{ selectedConfig.Description }}</p>\n </div>\n }\n\n <!-- Configuration Stats -->\n <div class=\"detail-section\">\n <h4 class=\"detail-section-title\">\n <i class=\"fa-solid fa-chart-bar\"></i>\n Overview\n </h4>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"detail-label\">Parameters</span>\n <span class=\"detail-value\">{{ selectedConfig.params?.length || 0 }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"detail-label\">Status</span>\n <span class=\"detail-value\">{{ selectedConfig.Status }}</span>\n </div>\n </div>\n </div>\n\n <!-- Linked Prompts -->\n <div class=\"detail-section\">\n <h4 class=\"detail-section-title\">\n <i class=\"fa-solid fa-message-lines\"></i>\n Linked Prompts\n </h4>\n <div class=\"detail-grid single-column\">\n <div class=\"detail-item\">\n <span class=\"detail-label\">Context Compression</span>\n <span class=\"detail-value\">\n @if (selectedConfig.compressionPrompt) {\n {{ selectedConfig.compressionPrompt.Name }}\n } @else {\n <span class=\"muted\">Not configured</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <span class=\"detail-label\">Context Summarization</span>\n <span class=\"detail-value\">\n @if (selectedConfig.summarizationPrompt) {\n {{ selectedConfig.summarizationPrompt.Name }}\n } @else {\n <span class=\"muted\">Not configured</span>\n }\n </span>\n </div>\n </div>\n </div>\n\n <!-- Parameters Preview -->\n @if (selectedConfig.params && selectedConfig.params.length > 0) {\n <div class=\"detail-section\">\n <h4 class=\"detail-section-title\">\n <i class=\"fa-solid fa-gear\"></i>\n Parameters ({{ selectedConfig.params.length }})\n </h4>\n <div class=\"detail-params-list\">\n @for (param of selectedConfig.params.slice(0, 5); track param.ID) {\n <div class=\"detail-param-item\">\n <div class=\"param-info\">\n <i [class]=\"getParamTypeIcon(param.Type)\"></i>\n <span class=\"param-name\">{{ param.Name }}</span>\n </div>\n <span class=\"param-value\">{{ formatParamValue(param) }}</span>\n </div>\n }\n @if (selectedConfig.params.length > 5) {\n <div class=\"params-more\">\n +{{ selectedConfig.params.length - 5 }} more parameters\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Timestamps -->\n <div class=\"detail-section\">\n <h4 class=\"detail-section-title\">\n <i class=\"fa-solid fa-clock\"></i>\n Timestamps\n </h4>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"detail-label\">Created</span>\n <span class=\"detail-value\">{{ formatDate(selectedConfig.__mj_CreatedAt) }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"detail-label\">Updated</span>\n <span class=\"detail-value\">{{ formatDate(selectedConfig.__mj_UpdatedAt) }}</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Panel Actions -->\n <div class=\"detail-panel-actions\">\n <button\n type=\"button\"\n class=\"detail-action-btn primary\"\n (click)=\"openConfigFromPanel()\">\n <i class=\"fa-solid fa-edit\"></i>\n Open Full Record\n </button>\n </div>\n }\n </div>\n</div>\n"]}
1
+ {"version":3,"file":"system-configuration.component.js","sourceRoot":"","sources":["../../../../src/AI/components/system/system-configuration.component.ts","../../../../src/AI/components/system/system-configuration.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, ChangeDetectorRef } from '@angular/core';\nimport { LogError, LogStatus, CompositeKey } from '@memberjunction/core';\nimport { MJAIConfigurationEntity, MJAIConfigurationParamEntity, ResourceData } from '@memberjunction/core-entities';\nimport { AIEngineBase } from '@memberjunction/ai-engine-base';\nimport { RegisterClass , UUIDsEqual } from '@memberjunction/global';\nimport { BaseResourceComponent, NavigationService } from '@memberjunction/ng-shared';\nimport { MJAIPromptEntityExtended } from '@memberjunction/ai-core-plus';\n\ninterface SystemConfigFilter {\n searchTerm: string;\n status: string;\n isDefault: string;\n}\n\ninterface ConfigurationWithParams extends MJAIConfigurationEntity {\n params?: MJAIConfigurationParamEntity[];\n isExpanded?: boolean;\n compressionPrompt?: MJAIPromptEntityExtended | null;\n summarizationPrompt?: MJAIPromptEntityExtended | null;\n}\n/**\n * AI Configuration Resource - displays AI system configuration management\n * Extends BaseResourceComponent to work with the resource type system\n */\n@RegisterClass(BaseResourceComponent, 'AIConfigResource')\n@Component({\n standalone: false,\n selector: 'app-system-configuration',\n templateUrl: './system-configuration.component.html',\n styleUrls: ['./system-configuration.component.css']\n})\nexport class SystemConfigurationComponent extends BaseResourceComponent implements OnInit {\n\n public isLoading = false;\n public error: string | null = null;\n public filterPanelVisible = true;\n public viewMode: 'grid' | 'list' = 'grid';\n\n public configurations: ConfigurationWithParams[] = [];\n public filteredConfigurations: ConfigurationWithParams[] = [];\n public allParams: MJAIConfigurationParamEntity[] = [];\n public allPrompts: MJAIPromptEntityExtended[] = [];\n\n public currentFilters: SystemConfigFilter = {\n searchTerm: '',\n status: 'all',\n isDefault: 'all'\n };\n\n // Sorting\n public sortColumn: string = 'Name';\n public sortDirection: 'asc' | 'desc' = 'asc';\n\n // Detail panel\n public selectedConfig: ConfigurationWithParams | null = null;\n public detailPanelVisible = false;\n\n // Stats\n public totalConfigs = 0;\n public activeConfigs = 0;\n public defaultConfig: ConfigurationWithParams | null = null;\n\n constructor(\n private navigationService: NavigationService,\n private cdr: ChangeDetectorRef\n ) {\n super();\n }\n\n ngOnInit(): void {\n this.loadData();\n }\n\n public async loadData(): Promise<void> {\n try {\n this.isLoading = true;\n this.error = null;\n this.cdr.detectChanges();\n\n // Ensure AIEngineBase is configured (no-op if already loaded)\n await AIEngineBase.Instance.Config(false);\n\n // Get cached data from AIEngineBase\n const configs = AIEngineBase.Instance.Configurations;\n const params = AIEngineBase.Instance.ConfigurationParams;\n const prompts = AIEngineBase.Instance.Prompts;\n\n // Create extended configurations with associated data\n this.configurations = configs.map(config => {\n const extended = config as ConfigurationWithParams;\n extended.params = params.filter(p => UUIDsEqual(p.ConfigurationID, config.ID));\n extended.isExpanded = false;\n\n // Find linked prompts\n if (config.DefaultPromptForContextCompressionID) {\n extended.compressionPrompt = prompts.find(p => UUIDsEqual(p.ID, config.DefaultPromptForContextCompressionID)) || null;\n }\n if (config.DefaultPromptForContextSummarizationID) {\n extended.summarizationPrompt = prompts.find(p => UUIDsEqual(p.ID, config.DefaultPromptForContextSummarizationID)) || null;\n }\n\n return extended;\n });\n\n this.allParams = params;\n this.allPrompts = prompts;\n\n // Calculate stats\n this.totalConfigs = this.configurations.length;\n this.activeConfigs = this.configurations.filter(c => c.Status === 'Active').length;\n this.defaultConfig = this.configurations.find(c => c.IsDefault) || null;\n\n this.applyFilters();\n LogStatus('AI Configurations loaded successfully');\n } catch (error) {\n this.error = 'Failed to load AI configurations. Please try again.';\n LogError('Error loading AI configurations', undefined, error);\n } finally {\n this.isLoading = false;\n this.NotifyLoadComplete();\n this.cdr.detectChanges();\n }\n }\n\n public toggleFilterPanel(): void {\n this.filterPanelVisible = !this.filterPanelVisible;\n }\n\n public setViewMode(mode: 'grid' | 'list'): void {\n this.viewMode = mode;\n }\n\n public toggleExpanded(config: ConfigurationWithParams): void {\n config.isExpanded = !config.isExpanded;\n }\n\n public onFiltersChange(filters: SystemConfigFilter): void {\n this.currentFilters = { ...filters };\n this.applyFilters();\n }\n\n public onFilterChange(): void {\n this.applyFilters();\n }\n\n public onResetFilters(): void {\n this.currentFilters = {\n searchTerm: '',\n status: 'all',\n isDefault: 'all'\n };\n this.applyFilters();\n }\n\n private applyFilters(): void {\n let filtered = [...this.configurations];\n\n // Apply search filter\n if (this.currentFilters.searchTerm) {\n const searchTerm = this.currentFilters.searchTerm.toLowerCase();\n filtered = filtered.filter(config =>\n config.Name.toLowerCase().includes(searchTerm) ||\n (config.Description || '').toLowerCase().includes(searchTerm) ||\n (config.params?.some(p => p.Name.toLowerCase().includes(searchTerm) ||\n (p.Description || '').toLowerCase().includes(searchTerm)))\n );\n }\n\n // Apply status filter\n if (this.currentFilters.status !== 'all') {\n filtered = filtered.filter(config => config.Status === this.currentFilters.status);\n }\n\n // Apply default configuration filter\n if (this.currentFilters.isDefault !== 'all') {\n const isDefault = this.currentFilters.isDefault === 'true';\n filtered = filtered.filter(config => config.IsDefault === isDefault);\n }\n\n // Apply sorting\n this.filteredConfigurations = this.applySorting(filtered);\n this.cdr.detectChanges();\n }\n\n /**\n * Sort the configurations by the specified column\n */\n public sortBy(column: string): void {\n if (this.sortColumn === column) {\n // Toggle direction if same column\n this.sortDirection = this.sortDirection === 'asc' ? 'desc' : 'asc';\n } else {\n // New column, default to ascending\n this.sortColumn = column;\n this.sortDirection = 'asc';\n }\n this.applyFilters();\n }\n\n /**\n * Apply sorting to the filtered list\n */\n private applySorting(configs: ConfigurationWithParams[]): ConfigurationWithParams[] {\n return configs.sort((a, b) => {\n let valueA: string | number | boolean | null | undefined;\n let valueB: string | number | boolean | null | undefined;\n\n switch (this.sortColumn) {\n case 'Name':\n valueA = a.Name;\n valueB = b.Name;\n break;\n case 'Status':\n valueA = a.Status;\n valueB = b.Status;\n break;\n case 'Parameters':\n valueA = a.params?.length || 0;\n valueB = b.params?.length || 0;\n break;\n case 'Updated':\n valueA = a.__mj_UpdatedAt ? new Date(a.__mj_UpdatedAt).getTime() : 0;\n valueB = b.__mj_UpdatedAt ? new Date(b.__mj_UpdatedAt).getTime() : 0;\n break;\n default:\n valueA = a.Name;\n valueB = b.Name;\n }\n\n // Handle numeric comparison\n if (typeof valueA === 'number' && typeof valueB === 'number') {\n const comparison = valueA - valueB;\n return this.sortDirection === 'desc' ? -comparison : comparison;\n }\n\n // Handle string/other comparison\n const strA = (valueA ?? '').toString().toLowerCase();\n const strB = (valueB ?? '').toString().toLowerCase();\n\n const comparison = strA.localeCompare(strB);\n return this.sortDirection === 'desc' ? -comparison : comparison;\n });\n }\n\n public onOpenConfiguration(config: ConfigurationWithParams): void {\n const compositeKey = new CompositeKey([{ FieldName: 'ID', Value: config.ID }]);\n this.navigationService.OpenEntityRecord('MJ: AI Configurations', compositeKey);\n }\n\n public onOpenPrompt(promptId: string): void {\n const compositeKey = new CompositeKey([{ FieldName: 'ID', Value: promptId }]);\n this.navigationService.OpenEntityRecord('MJ: AI Prompts', compositeKey);\n }\n\n public onOpenParam(param: MJAIConfigurationParamEntity): void {\n const compositeKey = new CompositeKey([{ FieldName: 'ID', Value: param.ID }]);\n this.navigationService.OpenEntityRecord('MJ: AI Configuration Params', compositeKey);\n }\n\n /**\n * Show the detail panel for a configuration\n */\n public showConfigDetails(config: ConfigurationWithParams, event?: Event): void {\n if (event) {\n event.stopPropagation();\n }\n this.selectedConfig = config;\n this.detailPanelVisible = true;\n }\n\n /**\n * Close the detail panel\n */\n public closeDetailPanel(): void {\n this.detailPanelVisible = false;\n // Delay clearing selectedConfig for smoother animation\n setTimeout(() => {\n if (!this.detailPanelVisible) {\n this.selectedConfig = null;\n }\n }, 300);\n }\n\n /**\n * Open the full entity record from the detail panel\n */\n public openConfigFromPanel(): void {\n if (this.selectedConfig) {\n this.onOpenConfiguration(this.selectedConfig);\n }\n }\n\n public getStatusClass(status: string): string {\n switch (status) {\n case 'Active': return 'status-active';\n case 'Preview': return 'status-preview';\n case 'Inactive': return 'status-inactive';\n case 'Deprecated': return 'status-deprecated';\n default: return 'status-unknown';\n }\n }\n\n public getStatusIcon(status: string): string {\n switch (status) {\n case 'Active': return 'fa-solid fa-circle-check';\n case 'Preview': return 'fa-solid fa-flask';\n case 'Inactive': return 'fa-solid fa-circle-pause';\n case 'Deprecated': return 'fa-solid fa-triangle-exclamation';\n default: return 'fa-solid fa-circle-question';\n }\n }\n\n public getParamTypeIcon(type: string): string {\n switch (type) {\n case 'string': return 'fa-solid fa-font';\n case 'number': return 'fa-solid fa-hashtag';\n case 'boolean': return 'fa-solid fa-toggle-on';\n case 'date': return 'fa-solid fa-calendar';\n case 'object': return 'fa-solid fa-brackets-curly';\n default: return 'fa-solid fa-code';\n }\n }\n\n public formatParamValue(param: MJAIConfigurationParamEntity): string {\n if (!param.Value) return '(not set)';\n\n switch (param.Type) {\n case 'boolean':\n return param.Value === 'true' ? 'Yes' : 'No';\n case 'object':\n try {\n return JSON.stringify(JSON.parse(param.Value), null, 2).substring(0, 50) + '...';\n } catch {\n return param.Value.substring(0, 50) + '...';\n }\n default:\n return param.Value.length > 50 ? param.Value.substring(0, 50) + '...' : param.Value;\n }\n }\n\n public formatDate(date: Date): string {\n if (!date) return 'N/A';\n return new Date(date).toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit'\n });\n }\n\n // BaseResourceComponent abstract method implementations\n async GetResourceDisplayName(_data: ResourceData): Promise<string> {\n return 'AI Configuration';\n }\n\n async GetResourceIconClass(_data: ResourceData): Promise<string> {\n return 'fa-solid fa-sliders';\n }\n}\n","<div class=\"system-configuration-container\">\n <!-- Header -->\n <div class=\"dashboard-header\">\n <div class=\"header-info\">\n <h2 class=\"dashboard-title\">\n <i class=\"fa-solid fa-sliders\"></i>\n AI Configuration\n </h2>\n <button\n type=\"button\"\n class=\"filter-toggle-btn\"\n (click)=\"toggleFilterPanel()\"\n title=\"Toggle Filters\">\n <i class=\"fa-solid fa-filter\"></i>\n @if (filterPanelVisible) {\n Hide Filters\n } @else {\n Show Filters\n }\n </button>\n <span class=\"config-count\">\n {{ filteredConfigurations.length }} of {{ configurations.length }} configurations\n </span>\n </div>\n\n <div class=\"header-controls\">\n <!-- View Toggle -->\n <div class=\"view-toggle\">\n <button\n type=\"button\"\n class=\"view-btn\"\n [class.active]=\"viewMode === 'grid'\"\n (click)=\"setViewMode('grid')\"\n title=\"Grid View\">\n <i class=\"fa-solid fa-grid-2\"></i>\n </button>\n <button\n type=\"button\"\n class=\"view-btn\"\n [class.active]=\"viewMode === 'list'\"\n (click)=\"setViewMode('list')\"\n title=\"List View\">\n <i class=\"fa-solid fa-list\"></i>\n </button>\n </div>\n\n <button\n type=\"button\"\n class=\"control-btn\"\n (click)=\"loadData()\"\n [disabled]=\"isLoading\"\n title=\"Refresh\">\n <i class=\"fa-solid fa-refresh\" [class.fa-spin]=\"isLoading\"></i>\n Refresh\n </button>\n </div>\n </div>\n\n <!-- Main Content with Splitter -->\n <div class=\"main-content\">\n <as-split direction=\"horizontal\" class=\"main-splitter\">\n\n <!-- Filter Panel (Left) -->\n @if (filterPanelVisible) {\n <as-split-area [size]=\"20\" [minSize]=\"15\" [maxSize]=\"30\">\n <mj-system-config-filter-panel\n [configurations]=\"configurations\"\n [filteredConfigurations]=\"filteredConfigurations\"\n [filters]=\"currentFilters\"\n (filtersChange)=\"onFiltersChange($event)\"\n (filterChange)=\"onFilterChange()\"\n (resetFilters)=\"onResetFilters()\"\n (closePanel)=\"toggleFilterPanel()\">\n </mj-system-config-filter-panel>\n </as-split-area>\n }\n\n <!-- Configurations List Panel -->\n <as-split-area>\n <div class=\"configurations-content\">\n <!-- Loading State -->\n @if (isLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading AI configurations...\" size=\"large\"></mj-loading>\n </div>\n }\n\n <!-- Error State -->\n @if (error && !isLoading) {\n <div class=\"error-container\">\n <p class=\"error-message\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n {{ error }}\n </p>\n </div>\n }\n\n <!-- Configurations Content -->\n @if (!isLoading && !error) {\n @if (filteredConfigurations.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-sliders\"></i>\n <h3>No configurations found</h3>\n <p>No AI configurations match your current filters. Try adjusting your search criteria or create a new configuration.</p>\n </div>\n } @else {\n <!-- Grid View -->\n @if (viewMode === 'grid') {\n <div class=\"configurations-grid\">\n @for (config of filteredConfigurations; track config.ID) {\n <div class=\"config-card\" [class.expanded]=\"config.isExpanded\">\n <!-- Card Header -->\n <div class=\"card-header\" (click)=\"toggleExpanded(config)\">\n <div class=\"config-info\">\n <div class=\"config-icon\">\n <i class=\"fa-solid fa-sliders\"></i>\n </div>\n <div class=\"config-details\">\n <h4 class=\"config-name\">{{ config.Name }}</h4>\n <div class=\"config-meta\">\n @if (config.IsDefault) {\n <span class=\"default-badge\">\n <i class=\"fa-solid fa-star\"></i>\n Default\n </span>\n }\n <span class=\"status-badge\" [ngClass]=\"getStatusClass(config.Status)\">\n <i [class]=\"getStatusIcon(config.Status)\"></i>\n {{ config.Status }}\n </span>\n </div>\n </div>\n </div>\n\n <i class=\"fa-solid fa-chevron-down expand-icon\"\n [class.rotated]=\"config.isExpanded\"></i>\n </div>\n\n <!-- Card Body -->\n <div class=\"card-body\">\n @if (config.Description) {\n <p class=\"config-description\">{{ config.Description }}</p>\n } @else {\n <p class=\"config-description text-muted\">No description provided</p>\n }\n\n <!-- Expanded Content -->\n @if (config.isExpanded) {\n <div class=\"expanded-content\">\n <!-- Stats Grid -->\n <div class=\"config-stats\">\n <div class=\"stat-item\">\n <span class=\"stat-label\">Parameters</span>\n <span class=\"stat-value\">{{ config.params?.length || 0 }}</span>\n </div>\n <div class=\"stat-item\">\n <span class=\"stat-label\">Created</span>\n <span class=\"stat-value\">{{ formatDate(config.__mj_CreatedAt) }}</span>\n </div>\n <div class=\"stat-item\">\n <span class=\"stat-label\">Updated</span>\n <span class=\"stat-value\">{{ formatDate(config.__mj_UpdatedAt) }}</span>\n </div>\n </div>\n\n <!-- Linked Prompts -->\n <div class=\"prompts-section\">\n <h5 class=\"section-title\">\n <i class=\"fa-solid fa-message-lines\"></i>\n Linked Prompts\n </h5>\n <div class=\"prompt-links\">\n @if (config.compressionPrompt) {\n <div class=\"prompt-link\" (click)=\"onOpenPrompt(config.DefaultPromptForContextCompressionID!); $event.stopPropagation()\">\n <div class=\"prompt-link-info\">\n <div class=\"prompt-link-icon\">\n <i class=\"fa-solid fa-compress\"></i>\n </div>\n <div class=\"prompt-link-details\">\n <span class=\"prompt-link-label\">Context Compression</span>\n <span class=\"prompt-link-name\">{{ config.compressionPrompt.Name }}</span>\n </div>\n </div>\n <i class=\"fa-solid fa-arrow-right prompt-link-arrow\"></i>\n </div>\n } @else {\n <div class=\"no-prompt\">No compression prompt configured</div>\n }\n\n @if (config.summarizationPrompt) {\n <div class=\"prompt-link\" (click)=\"onOpenPrompt(config.DefaultPromptForContextSummarizationID!); $event.stopPropagation()\">\n <div class=\"prompt-link-info\">\n <div class=\"prompt-link-icon\">\n <i class=\"fa-solid fa-file-lines\"></i>\n </div>\n <div class=\"prompt-link-details\">\n <span class=\"prompt-link-label\">Context Summarization</span>\n <span class=\"prompt-link-name\">{{ config.summarizationPrompt.Name }}</span>\n </div>\n </div>\n <i class=\"fa-solid fa-arrow-right prompt-link-arrow\"></i>\n </div>\n } @else {\n <div class=\"no-prompt\">No summarization prompt configured</div>\n }\n </div>\n </div>\n\n <!-- Configuration Parameters -->\n @if (config.params && config.params.length > 0) {\n <div class=\"params-section\">\n <h5 class=\"section-title\">\n <i class=\"fa-solid fa-gear\"></i>\n Configuration Parameters\n </h5>\n <div class=\"params-grid\">\n @for (param of config.params; track param.ID) {\n <div class=\"param-item\" (click)=\"onOpenParam(param); $event.stopPropagation()\">\n <div class=\"param-info\">\n <div class=\"param-type-icon\">\n <i [class]=\"getParamTypeIcon(param.Type)\"></i>\n </div>\n <div class=\"param-details\">\n <span class=\"param-name\">{{ param.Name }}</span>\n <span class=\"param-type\">{{ param.Type }}</span>\n </div>\n </div>\n <span class=\"param-value\">{{ formatParamValue(param) }}</span>\n </div>\n }\n </div>\n </div>\n } @else {\n <div class=\"params-section\">\n <h5 class=\"section-title\">\n <i class=\"fa-solid fa-gear\"></i>\n Configuration Parameters\n </h5>\n <div class=\"no-params\">No parameters configured</div>\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Card Actions -->\n <div class=\"card-actions\" (click)=\"$event.stopPropagation()\">\n <button\n type=\"button\"\n class=\"action-btn\"\n (click)=\"showConfigDetails(config, $event)\"\n title=\"View Details\">\n <i class=\"fa-solid fa-eye\"></i>\n Details\n </button>\n\n <button\n type=\"button\"\n class=\"action-btn action-btn-primary\"\n (click)=\"onOpenConfiguration(config)\">\n <i class=\"fa-solid fa-edit\"></i>\n Configure\n </button>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- List View -->\n @if (viewMode === 'list') {\n <div class=\"configurations-list\">\n <table class=\"configurations-table\">\n <thead>\n <tr>\n <th (click)=\"sortBy('Name')\"\n [class.sorted]=\"sortColumn === 'Name'\"\n [class.desc]=\"sortColumn === 'Name' && sortDirection === 'desc'\">\n <span class=\"sort-header\">\n Configuration\n <i class=\"fa-solid fa-chevron-up sort-icon\"></i>\n </span>\n </th>\n <th (click)=\"sortBy('Status')\"\n [class.sorted]=\"sortColumn === 'Status'\"\n [class.desc]=\"sortColumn === 'Status' && sortDirection === 'desc'\">\n <span class=\"sort-header\">\n Status\n <i class=\"fa-solid fa-chevron-up sort-icon\"></i>\n </span>\n </th>\n <th (click)=\"sortBy('Parameters')\"\n [class.sorted]=\"sortColumn === 'Parameters'\"\n [class.desc]=\"sortColumn === 'Parameters' && sortDirection === 'desc'\">\n <span class=\"sort-header\">\n Parameters\n <i class=\"fa-solid fa-chevron-up sort-icon\"></i>\n </span>\n </th>\n <th (click)=\"sortBy('Updated')\"\n [class.sorted]=\"sortColumn === 'Updated'\"\n [class.desc]=\"sortColumn === 'Updated' && sortDirection === 'desc'\">\n <span class=\"sort-header\">\n Updated\n <i class=\"fa-solid fa-chevron-up sort-icon\"></i>\n </span>\n </th>\n <th>Actions</th>\n </tr>\n </thead>\n <tbody>\n @for (config of filteredConfigurations; track config.ID) {\n <tr>\n <td>\n <div class=\"config-name-cell\">\n <div class=\"config-icon-small\">\n <i class=\"fa-solid fa-sliders\"></i>\n </div>\n <div>\n <div class=\"config-name-text\">\n {{ config.Name }}\n @if (config.IsDefault) {\n <span class=\"default-badge\" style=\"margin-left: 8px;\">\n <i class=\"fa-solid fa-star\"></i>\n Default\n </span>\n }\n </div>\n @if (config.Description) {\n <div class=\"config-description-small\">{{ config.Description }}</div>\n }\n </div>\n </div>\n </td>\n <td>\n <span class=\"status-badge\" [ngClass]=\"getStatusClass(config.Status)\">\n <i [class]=\"getStatusIcon(config.Status)\"></i>\n {{ config.Status }}\n </span>\n </td>\n <td>{{ config.params?.length || 0 }}</td>\n <td>{{ formatDate(config.__mj_UpdatedAt) }}</td>\n <td>\n <div class=\"table-actions\">\n <button\n type=\"button\"\n class=\"action-btn-small\"\n (click)=\"showConfigDetails(config)\"\n title=\"View Details\">\n <i class=\"fa-solid fa-eye\"></i>\n </button>\n <button\n type=\"button\"\n class=\"action-btn-small primary\"\n (click)=\"onOpenConfiguration(config)\">\n <i class=\"fa-solid fa-edit\"></i>\n </button>\n </div>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n }\n }\n </div>\n </as-split-area>\n </as-split>\n </div>\n\n <!-- Detail Panel Overlay -->\n @if (detailPanelVisible) {\n <div class=\"detail-panel-overlay\" (click)=\"closeDetailPanel()\"></div>\n }\n\n <!-- Detail Panel -->\n <div class=\"detail-panel\" [class.visible]=\"detailPanelVisible\">\n @if (selectedConfig) {\n <!-- Panel Header -->\n <div class=\"detail-panel-header\">\n <div class=\"detail-panel-title\">\n <div class=\"detail-icon\">\n <i class=\"fa-solid fa-sliders\"></i>\n </div>\n <div class=\"detail-title-info\">\n <h3>{{ selectedConfig.Name }}</h3>\n <span class=\"detail-subtitle\">AI Configuration</span>\n </div>\n </div>\n <button class=\"detail-panel-close\" (click)=\"closeDetailPanel()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n\n <!-- Panel Content -->\n <div class=\"detail-panel-content\">\n <!-- Status Section -->\n <div class=\"detail-section\">\n <div class=\"detail-badges\">\n <span class=\"status-badge\" [ngClass]=\"getStatusClass(selectedConfig.Status)\">\n <i [class]=\"getStatusIcon(selectedConfig.Status)\"></i>\n {{ selectedConfig.Status }}\n </span>\n @if (selectedConfig.IsDefault) {\n <span class=\"feature-badge default\">\n <i class=\"fa-solid fa-star\"></i>\n Default Configuration\n </span>\n }\n </div>\n </div>\n\n <!-- Description -->\n @if (selectedConfig.Description) {\n <div class=\"detail-section\">\n <h4 class=\"detail-section-title\">\n <i class=\"fa-solid fa-align-left\"></i>\n Description\n </h4>\n <p class=\"detail-description\">{{ selectedConfig.Description }}</p>\n </div>\n }\n\n <!-- Configuration Stats -->\n <div class=\"detail-section\">\n <h4 class=\"detail-section-title\">\n <i class=\"fa-solid fa-chart-bar\"></i>\n Overview\n </h4>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"detail-label\">Parameters</span>\n <span class=\"detail-value\">{{ selectedConfig.params?.length || 0 }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"detail-label\">Status</span>\n <span class=\"detail-value\">{{ selectedConfig.Status }}</span>\n </div>\n </div>\n </div>\n\n <!-- Linked Prompts -->\n <div class=\"detail-section\">\n <h4 class=\"detail-section-title\">\n <i class=\"fa-solid fa-message-lines\"></i>\n Linked Prompts\n </h4>\n <div class=\"detail-grid single-column\">\n <div class=\"detail-item\">\n <span class=\"detail-label\">Context Compression</span>\n <span class=\"detail-value\">\n @if (selectedConfig.compressionPrompt) {\n {{ selectedConfig.compressionPrompt.Name }}\n } @else {\n <span class=\"muted\">Not configured</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <span class=\"detail-label\">Context Summarization</span>\n <span class=\"detail-value\">\n @if (selectedConfig.summarizationPrompt) {\n {{ selectedConfig.summarizationPrompt.Name }}\n } @else {\n <span class=\"muted\">Not configured</span>\n }\n </span>\n </div>\n </div>\n </div>\n\n <!-- Parameters Preview -->\n @if (selectedConfig.params && selectedConfig.params.length > 0) {\n <div class=\"detail-section\">\n <h4 class=\"detail-section-title\">\n <i class=\"fa-solid fa-gear\"></i>\n Parameters ({{ selectedConfig.params.length }})\n </h4>\n <div class=\"detail-params-list\">\n @for (param of selectedConfig.params.slice(0, 5); track param.ID) {\n <div class=\"detail-param-item\">\n <div class=\"param-info\">\n <i [class]=\"getParamTypeIcon(param.Type)\"></i>\n <span class=\"param-name\">{{ param.Name }}</span>\n </div>\n <span class=\"param-value\">{{ formatParamValue(param) }}</span>\n </div>\n }\n @if (selectedConfig.params.length > 5) {\n <div class=\"params-more\">\n +{{ selectedConfig.params.length - 5 }} more parameters\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Timestamps -->\n <div class=\"detail-section\">\n <h4 class=\"detail-section-title\">\n <i class=\"fa-solid fa-clock\"></i>\n Timestamps\n </h4>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"detail-label\">Created</span>\n <span class=\"detail-value\">{{ formatDate(selectedConfig.__mj_CreatedAt) }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"detail-label\">Updated</span>\n <span class=\"detail-value\">{{ formatDate(selectedConfig.__mj_UpdatedAt) }}</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Panel Actions -->\n <div class=\"detail-panel-actions\">\n <button\n type=\"button\"\n class=\"detail-action-btn primary\"\n (click)=\"openConfigFromPanel()\">\n <i class=\"fa-solid fa-edit\"></i>\n Open Full Record\n </button>\n </div>\n }\n </div>\n</div>\n"]}
@@ -0,0 +1,240 @@
1
+ /**
2
+ * @fileoverview Vector Management Resource Component
3
+ *
4
+ * Dashboard resource for managing vector databases and entity vectorization.
5
+ * Displays KPI cards (total vectors, entities synced, last sync, avg embedding time),
6
+ * an entity sync table, and sidebar panels for DB health, embedding model info,
7
+ * and storage usage.
8
+ */
9
+ import { OnDestroy, AfterViewInit } from '@angular/core';
10
+ import { ResourceData, MJVectorDatabaseEntity } from '@memberjunction/core-entities';
11
+ import { BaseResourceComponent } from '@memberjunction/ng-shared';
12
+ import { KPICardData } from '../widgets/kpi-card.component';
13
+ import * as i0 from "@angular/core";
14
+ /** Flattened row for the entity sync table */
15
+ interface EntitySyncRow {
16
+ EntityDocumentID: string;
17
+ EntityName: string;
18
+ DocumentName: string;
19
+ VectorCount: number;
20
+ LastSynced: Date | null;
21
+ Status: 'Synced' | 'Syncing' | 'Error' | 'Pending';
22
+ /** Percent complete during active sync (0-100) */
23
+ PercentComplete: number;
24
+ /** Pipeline run ID for tracking active subscription */
25
+ PipelineRunID?: string;
26
+ }
27
+ /** Sidebar embedding model summary */
28
+ interface EmbeddingModelInfo {
29
+ Name: string;
30
+ Dimensions: number | null;
31
+ }
32
+ /** Result from AI document suggestion */
33
+ interface DocumentSuggestionResult {
34
+ template: string;
35
+ selectedFields: string[];
36
+ selectedRelationships: {
37
+ name: string;
38
+ fields: string[];
39
+ }[];
40
+ potentialMatchThreshold: number;
41
+ absoluteMatchThreshold: number;
42
+ reasoning: string;
43
+ }
44
+ export declare class VectorManagementResourceComponent extends BaseResourceComponent implements AfterViewInit, OnDestroy {
45
+ private cdr;
46
+ private destroy$;
47
+ /** View mode: 'index' = Option A (shared index as hero, entity docs as children),
48
+ * 'operations' = Option C (operations monitoring with real-time sync status) */
49
+ ViewMode: 'index' | 'operations';
50
+ /** Whether this component is embedded inside the Knowledge Hub shell */
51
+ EmbeddedMode: boolean;
52
+ /** Toggle between view modes */
53
+ ToggleViewMode(): void;
54
+ IsLoading: boolean;
55
+ KPICards: KPICardData[];
56
+ SyncRows: EntitySyncRow[];
57
+ SyncingIds: Set<string>;
58
+ VectorDBName: string;
59
+ VectorDBStatus: 'Healthy' | 'Degraded' | 'Offline';
60
+ EmbeddingModel: EmbeddingModelInfo;
61
+ StorageUsagePercent: number;
62
+ TotalVectors: number;
63
+ ShowEditPanel: boolean;
64
+ IsEditSaving: boolean;
65
+ IsEditDeleting: boolean;
66
+ EditDocID: string;
67
+ EditDocName: string;
68
+ EditDocEntityName: string;
69
+ EditDocVectorDBID: string;
70
+ EditDocAIModelID: string;
71
+ EditDocVectorIndexID: string;
72
+ EditDocStatus: string;
73
+ /** Open the edit panel for an entity document */
74
+ OpenEditPanel(entityDocumentId: string): void;
75
+ CloseEditPanel(): void;
76
+ SaveEditedDocument(): Promise<void>;
77
+ DeleteEntityDocument(): Promise<void>;
78
+ ShowSuggestDialog: boolean;
79
+ IsSuggesting: boolean;
80
+ SuggestEntityName: string;
81
+ SuggestUseCase: string;
82
+ SuggestionResult: DocumentSuggestionResult | null;
83
+ SaveDocumentName: string;
84
+ SuggestionError: string;
85
+ IsSavingDocument: boolean;
86
+ EditableTemplate: string;
87
+ /** Prerequisites check — are vector DB and embedding model configured? */
88
+ HasVectorDB: boolean;
89
+ HasEmbeddingModel: boolean;
90
+ get PrerequisitesMet(): boolean;
91
+ /** Available embedding models for selection in save form */
92
+ AvailableEmbeddingModels: {
93
+ ID: string;
94
+ Name: string;
95
+ }[];
96
+ /** Selected embedding model ID for the new entity document */
97
+ SelectedEmbeddingModelID: string;
98
+ /** Selected vector database ID for the new entity document */
99
+ SelectedVectorDBID: string;
100
+ /** Available vector indexes for selection */
101
+ AvailableVectorIndexes: {
102
+ ID: string;
103
+ Name: string;
104
+ VectorDatabaseID: string;
105
+ EmbeddingModelID: string;
106
+ }[];
107
+ /** Selected vector index ID — if user picks an existing one */
108
+ SelectedVectorIndexID: string;
109
+ /** Indexes filtered by the currently selected vector DB (for create/edit forms) */
110
+ get FilteredIndexesForSelectedDB(): {
111
+ ID: string;
112
+ Name: string;
113
+ VectorDatabaseID: string;
114
+ EmbeddingModelID: string;
115
+ }[];
116
+ /** Indexes filtered by the edit panel's selected vector DB */
117
+ get EditFilteredIndexes(): {
118
+ ID: string;
119
+ Name: string;
120
+ VectorDatabaseID: string;
121
+ EmbeddingModelID: string;
122
+ }[];
123
+ /** Grouped entity list for the suggestion panel — schemas as groups, entities as items */
124
+ EntityGroups: {
125
+ SchemaName: string;
126
+ Entities: {
127
+ Name: string;
128
+ ID: string;
129
+ }[];
130
+ }[];
131
+ /** Filtered entity groups based on search input */
132
+ FilteredEntityGroups: {
133
+ SchemaName: string;
134
+ Entities: {
135
+ Name: string;
136
+ ID: string;
137
+ }[];
138
+ }[];
139
+ /** Search text for filtering entities */
140
+ EntitySearchText: string;
141
+ /** Whether the entity picker dropdown is open */
142
+ ShowEntityPicker: boolean;
143
+ private entityDocuments;
144
+ protected vectorDatabases: MJVectorDatabaseEntity[];
145
+ private vectorIndexes;
146
+ private recordDocuments;
147
+ private aiModels;
148
+ ngAfterViewInit(): Promise<void>;
149
+ ngOnDestroy(): void;
150
+ GetResourceDisplayName(_data: ResourceData): Promise<string>;
151
+ GetResourceIconClass(_data: ResourceData): Promise<string>;
152
+ /** Reload all dashboard data */
153
+ LoadData(): Promise<void>;
154
+ /** Trigger vectorization for a specific entity document via GraphQL (fire-and-forget with progress subscription) */
155
+ SyncEntity(entityDocumentId: string): Promise<void>;
156
+ /** Subscribe to PipelineProgress for a specific pipeline run */
157
+ private subscribeToPipelineProgress;
158
+ /**
159
+ * Add an ID to SyncingIds, creating a new Set reference so Angular
160
+ * change detection picks up the mutation in template bindings.
161
+ */
162
+ private addSyncingId;
163
+ /**
164
+ * Remove an ID from SyncingIds, creating a new Set reference so Angular
165
+ * change detection picks up the mutation in template bindings.
166
+ */
167
+ private removeSyncingId;
168
+ /** Opens the AI suggestion dialog */
169
+ OpenSuggestDialog(): void;
170
+ /** Select an entity from the grouped picker */
171
+ SelectEntity(entityName: string): void;
172
+ /** Filter entities by search text */
173
+ FilterEntities(): void;
174
+ /** Toggle entity picker visibility */
175
+ ToggleEntityPicker(): void;
176
+ /** Handle template edits from code editor */
177
+ OnTemplateChange(newValue: string): void;
178
+ /** Closes the suggestion dialog */
179
+ CloseSuggestDialog(): void;
180
+ /** Clears the current suggestion to try again */
181
+ ClearSuggestion(): void;
182
+ /**
183
+ * Runs the AI suggestion by calling the server-side "Entity Document Suggestion"
184
+ * AI prompt via GraphQL. The LLM analyzes the entity schema and generates
185
+ * natural language Nunjucks templates optimized for embedding quality.
186
+ */
187
+ RunSuggestion(): Promise<void>;
188
+ /** Saves the current suggestion as an Entity Document record */
189
+ SaveAsEntityDocument(): Promise<void>;
190
+ /** Returns the CSS class for a given sync status badge */
191
+ GetStatusClass(status: string): string;
192
+ /** Returns the icon class for a given sync status */
193
+ GetStatusIcon(status: string): string;
194
+ /** Format a Date value for display */
195
+ FormatDate(date: Date | null): string;
196
+ /** Format the storage gauge label */
197
+ get StorageLabel(): string;
198
+ /** CSS class for the DB health indicator dot */
199
+ get DBHealthClass(): string;
200
+ private fetchAllData;
201
+ private buildSyncRows;
202
+ private computeLastSynced;
203
+ private computeSyncStatus;
204
+ private buildKPICards;
205
+ private buildSidebarData;
206
+ private buildVectorDBHealth;
207
+ private buildEmbeddingModelInfo;
208
+ private buildStorageUsage;
209
+ /** Check if vector DB and embedding model are configured, populate selection lists */
210
+ private checkPrerequisites;
211
+ /** Find the best embedding model from loaded AI models */
212
+ private findEmbeddingModel;
213
+ /**
214
+ * Populate required foreign key fields on an Entity Document before saving.
215
+ * Throws if prerequisites are not met.
216
+ */
217
+ private populateEntityDocumentFKs;
218
+ /** Create a Template + TemplateContent record for the entity document */
219
+ private createTemplateForDocument;
220
+ /** Build grouped entity list from metadata, grouped by SchemaName */
221
+ private loadEntityGroups;
222
+ private updateRowStatus;
223
+ private updateRowProgress;
224
+ /** Refresh a single sync row's vector count and status from the DB */
225
+ private refreshSyncRow;
226
+ /**
227
+ * Calls the "Entity Document Suggestion" AI prompt via GraphQL to generate
228
+ * a natural language template optimized for vector embeddings.
229
+ */
230
+ private callSuggestionPrompt;
231
+ /** Find the Entity Document Suggestion prompt from AIEngineBase */
232
+ private findSuggestionPrompt;
233
+ /** Build the data payload for the suggestion prompt */
234
+ private buildPromptData;
235
+ static ɵfac: i0.ɵɵFactoryDeclaration<VectorManagementResourceComponent, never>;
236
+ static ɵcmp: i0.ɵɵComponentDeclaration<VectorManagementResourceComponent, "app-vector-management-resource", never, { "EmbeddedMode": { "alias": "EmbeddedMode"; "required": false; }; }, {}, never, never, false, never>;
237
+ }
238
+ export declare function LoadVectorManagementResource(): void;
239
+ export {};
240
+ //# sourceMappingURL=vector-management-resource.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vector-management-resource.component.d.ts","sourceRoot":"","sources":["../../../../src/AI/components/vectors/vector-management-resource.component.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAgC,SAAS,EAAE,aAAa,EAAiB,MAAM,eAAe,CAAC;AAItG,OAAO,EACH,YAAY,EAEZ,sBAAsB,EAOzB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;;AAM5D,8CAA8C;AAC9C,UAAU,aAAa;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IACnD,kDAAkD;IAClD,eAAe,EAAE,MAAM,CAAC;IACxB,uDAAuD;IACvD,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,sCAAsC;AACtC,UAAU,kBAAkB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,yCAAyC;AACzC,UAAU,wBAAwB;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,qBAAqB,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE,CAAC;IAC5D,uBAAuB,EAAE,MAAM,CAAC;IAChC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,qBAOa,iCAAkC,SAAQ,qBAAsB,YAAW,aAAa,EAAE,SAAS;IAC5G,OAAO,CAAC,GAAG,CAA6B;IACxC,OAAO,CAAC,QAAQ,CAAuB;IAEvC;qFACiF;IAC1E,QAAQ,EAAE,OAAO,GAAG,YAAY,CAAW;IAElD,wEAAwE;IAC/D,YAAY,UAAS;IAE9B,gCAAgC;IACzB,cAAc,IAAI,IAAI;IAMtB,SAAS,UAAQ;IAGjB,QAAQ,EAAE,WAAW,EAAE,CAAM;IAG7B,QAAQ,EAAE,aAAa,EAAE,CAAM;IAC/B,UAAU,cAAqB;IAG/B,YAAY,SAAM;IAClB,cAAc,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,CAAa;IAC/D,cAAc,EAAE,kBAAkB,CAAkC;IACpE,mBAAmB,SAAK;IACxB,YAAY,SAAK;IAGjB,aAAa,UAAS;IACtB,YAAY,UAAS;IACrB,cAAc,UAAS;IACvB,SAAS,SAAM;IACf,WAAW,SAAM;IACjB,iBAAiB,SAAM;IACvB,iBAAiB,SAAM;IACvB,gBAAgB,SAAM;IACtB,oBAAoB,SAAM;IAC1B,aAAa,SAAM;IAE1B,iDAAiD;IAC1C,aAAa,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI;IAc7C,cAAc,IAAI,IAAI;IAKhB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAiCnC,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IA2B3C,iBAAiB,UAAS;IAC1B,YAAY,UAAS;IACrB,iBAAiB,SAAM;IACvB,cAAc,SAAyB;IACvC,gBAAgB,EAAE,wBAAwB,GAAG,IAAI,CAAQ;IACzD,gBAAgB,SAAM;IACtB,eAAe,SAAM;IACrB,gBAAgB,UAAS;IACzB,gBAAgB,SAAM;IAE7B,0EAA0E;IACnE,WAAW,UAAS;IACpB,iBAAiB,UAAS;IACjC,IAAW,gBAAgB,IAAI,OAAO,CAErC;IAED,4DAA4D;IACrD,wBAAwB,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAM;IACrE,8DAA8D;IACvD,wBAAwB,SAAM;IACrC,8DAA8D;IACvD,kBAAkB,SAAM;IAC/B,6CAA6C;IACtC,sBAAsB,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,EAAE,CAAM;IACvH,+DAA+D;IACxD,qBAAqB,SAAM;IAElC,mFAAmF;IACnF,IAAW,4BAA4B,IAAI;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,EAAE,CAI5H;IAED,8DAA8D;IAC9D,IAAW,mBAAmB,IAAI;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,EAAE,CAGnH;IAED,0FAA0F;IACnF,YAAY,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,EAAE,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;KAAE,EAAE,CAAM;IAC7F,mDAAmD;IAC5C,oBAAoB,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,EAAE,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;KAAE,EAAE,CAAM;IACrG,yCAAyC;IAClC,gBAAgB,SAAM;IAC7B,iDAAiD;IAC1C,gBAAgB,UAAS;IAGhC,OAAO,CAAC,eAAe,CAAgC;IACvD,SAAS,CAAC,eAAe,EAAE,sBAAsB,EAAE,CAAM;IACzD,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,eAAe,CAAsC;IAC7D,OAAO,CAAC,QAAQ,CAAyB;IAMnC,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtC,WAAW,IAAI,IAAI;IASb,sBAAsB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAI5D,oBAAoB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAQhE,gCAAgC;IACnB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBtC,oHAAoH;IACvG,UAAU,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4DhE,gEAAgE;IAChE,OAAO,CAAC,2BAA2B;IAqFnC;;;OAGG;IACH,OAAO,CAAC,YAAY;IAIpB;;;OAGG;IACH,OAAO,CAAC,eAAe;IAQvB,qCAAqC;IAC9B,iBAAiB,IAAI,IAAI;IAahC,+CAA+C;IACxC,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAM7C,qCAAqC;IAC9B,cAAc,IAAI,IAAI;IAe7B,sCAAsC;IAC/B,kBAAkB,IAAI,IAAI;IASjC,6CAA6C;IACtC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAO/C,mCAAmC;IAC5B,kBAAkB,IAAI,IAAI;IAMjC,iDAAiD;IAC1C,eAAe,IAAI,IAAI;IAK9B;;;;OAIG;IACU,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IA0B3C,gEAAgE;IACnD,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IA2DlD,0DAA0D;IACnD,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAU7C,qDAAqD;IAC9C,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAU5C,sCAAsC;IAC/B,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,MAAM;IAY5C,qCAAqC;IACrC,IAAW,YAAY,IAAI,MAAM,CAEhC;IAED,gDAAgD;IAChD,IAAW,aAAa,IAAI,MAAM,CAOjC;YAMa,YAAY;IAmC1B,OAAO,CAAC,aAAa;IAwBrB,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,iBAAiB;IAsBzB,OAAO,CAAC,aAAa;IAkDrB,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,mBAAmB;IAa3B,OAAO,CAAC,uBAAuB;IAa/B,OAAO,CAAC,iBAAiB;IAOzB,sFAAsF;IACtF,OAAO,CAAC,kBAAkB;IA6B1B,0DAA0D;IAC1D,OAAO,CAAC,kBAAkB;IAM1B;;;OAGG;YACW,yBAAyB;IA2CvC,yEAAyE;YAC3D,yBAAyB;IAgDvC,qEAAqE;IACrE,OAAO,CAAC,gBAAgB;IAwBxB,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,iBAAiB;IAOzB,sEAAsE;YACxD,cAAc;IAqB5B;;;OAGG;YACW,oBAAoB;IAiClC,mEAAmE;IACnE,OAAO,CAAC,oBAAoB;IAa5B,uDAAuD;IACvD,OAAO,CAAC,eAAe;yCA7gCd,iCAAiC;2CAAjC,iCAAiC;CAkjC7C;AAED,wBAAgB,4BAA4B,IAAI,IAAI,CAEnD"}