@memberjunction/ng-dashboards 4.4.0 → 5.0.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 (411) hide show
  1. package/dist/AI/ai-dashboard.component.d.ts +62 -0
  2. package/dist/AI/ai-dashboard.component.d.ts.map +1 -0
  3. package/dist/AI/ai-dashboard.component.js +338 -0
  4. package/dist/AI/ai-dashboard.component.js.map +1 -0
  5. package/dist/AI/components/agents/agent-configuration.component.js +7 -7
  6. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  7. package/dist/AI/components/agents/agent-editor.component.js +4 -4
  8. package/dist/AI/components/agents/agent-editor.component.js.map +1 -1
  9. package/dist/AI/components/agents/agent-filter-panel.component.js +1 -1
  10. package/dist/AI/components/agents/agent-filter-panel.component.js.map +1 -1
  11. package/dist/AI/components/charts/performance-heatmap.component.js +3 -3
  12. package/dist/AI/components/charts/performance-heatmap.component.js.map +1 -1
  13. package/dist/AI/components/charts/time-series-chart.component.js +1 -1
  14. package/dist/AI/components/execution-monitoring.component.js +2 -2
  15. package/dist/AI/components/execution-monitoring.component.js.map +1 -1
  16. package/dist/AI/components/models/model-management-v2.component.d.ts +96 -0
  17. package/dist/AI/components/models/model-management-v2.component.d.ts.map +1 -0
  18. package/dist/AI/components/models/model-management-v2.component.js +981 -0
  19. package/dist/AI/components/models/model-management-v2.component.js.map +1 -0
  20. package/dist/AI/components/models/model-management.component.d.ts +3 -3
  21. package/dist/AI/components/models/model-management.component.d.ts.map +1 -1
  22. package/dist/AI/components/models/model-management.component.js +4 -4
  23. package/dist/AI/components/models/model-management.component.js.map +1 -1
  24. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts +2 -2
  25. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts.map +1 -1
  26. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +3 -3
  27. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
  28. package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts +4 -4
  29. package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts.map +1 -1
  30. package/dist/AI/components/prompts/prompt-filter-panel.component.js +1 -1
  31. package/dist/AI/components/prompts/prompt-filter-panel.component.js.map +1 -1
  32. package/dist/AI/components/prompts/prompt-management-v2.component.d.ts +97 -0
  33. package/dist/AI/components/prompts/prompt-management-v2.component.d.ts.map +1 -0
  34. package/dist/AI/components/prompts/prompt-management-v2.component.js +811 -0
  35. package/dist/AI/components/prompts/prompt-management-v2.component.js.map +1 -0
  36. package/dist/AI/components/prompts/prompt-management.component.d.ts +5 -5
  37. package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
  38. package/dist/AI/components/prompts/prompt-management.component.js +12 -12
  39. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  40. package/dist/AI/components/prompts/prompt-version-control.component.d.ts +4 -4
  41. package/dist/AI/components/prompts/prompt-version-control.component.d.ts.map +1 -1
  42. package/dist/AI/components/prompts/prompt-version-control.component.js +5 -5
  43. package/dist/AI/components/prompts/prompt-version-control.component.js.map +1 -1
  44. package/dist/AI/components/system/system-config-filter-panel.component.d.ts +3 -3
  45. package/dist/AI/components/system/system-config-filter-panel.component.d.ts.map +1 -1
  46. package/dist/AI/components/system/system-config-filter-panel.component.js +1 -1
  47. package/dist/AI/components/system/system-config-filter-panel.component.js.map +1 -1
  48. package/dist/AI/components/system/system-configuration.component.d.ts +6 -6
  49. package/dist/AI/components/system/system-configuration.component.d.ts.map +1 -1
  50. package/dist/AI/components/system/system-configuration.component.js +2 -2
  51. package/dist/AI/components/system/system-configuration.component.js.map +1 -1
  52. package/dist/AI/components/widgets/kpi-card.component.js +1 -1
  53. package/dist/AI/components/widgets/live-execution-widget.component.js +1 -1
  54. package/dist/APIKeys/api-applications-panel.component.d.ts +6 -6
  55. package/dist/APIKeys/api-applications-panel.component.d.ts.map +1 -1
  56. package/dist/APIKeys/api-applications-panel.component.js +1 -1
  57. package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
  58. package/dist/APIKeys/api-key-create-dialog.component.d.ts +2 -2
  59. package/dist/APIKeys/api-key-create-dialog.component.d.ts.map +1 -1
  60. package/dist/APIKeys/api-key-create-dialog.component.js +1 -1
  61. package/dist/APIKeys/api-key-edit-panel.component.d.ts +5 -5
  62. package/dist/APIKeys/api-key-edit-panel.component.d.ts.map +1 -1
  63. package/dist/APIKeys/api-key-edit-panel.component.js +1 -1
  64. package/dist/APIKeys/api-key-edit-panel.component.js.map +1 -1
  65. package/dist/APIKeys/api-key-list.component.d.ts +8 -8
  66. package/dist/APIKeys/api-key-list.component.d.ts.map +1 -1
  67. package/dist/APIKeys/api-key-list.component.js +1 -1
  68. package/dist/APIKeys/api-key-list.component.js.map +1 -1
  69. package/dist/APIKeys/api-keys-resource.component.d.ts +6 -6
  70. package/dist/APIKeys/api-keys-resource.component.d.ts.map +1 -1
  71. package/dist/APIKeys/api-keys-resource.component.js +1 -1
  72. package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
  73. package/dist/APIKeys/api-scopes-panel.component.d.ts +8 -8
  74. package/dist/APIKeys/api-scopes-panel.component.d.ts.map +1 -1
  75. package/dist/APIKeys/api-scopes-panel.component.js +1 -1
  76. package/dist/APIKeys/api-scopes-panel.component.js.map +1 -1
  77. package/dist/APIKeys/api-usage-panel.component.js +1 -1
  78. package/dist/APIKeys/api-usage-panel.component.js.map +1 -1
  79. package/dist/Actions/actions-management-dashboard.component.d.ts +52 -0
  80. package/dist/Actions/actions-management-dashboard.component.d.ts.map +1 -0
  81. package/dist/Actions/actions-management-dashboard.component.js +308 -0
  82. package/dist/Actions/actions-management-dashboard.component.js.map +1 -0
  83. package/dist/Actions/components/actions-list-view.component.d.ts +7 -7
  84. package/dist/Actions/components/actions-list-view.component.d.ts.map +1 -1
  85. package/dist/Actions/components/actions-list-view.component.js +4 -4
  86. package/dist/Actions/components/actions-list-view.component.js.map +1 -1
  87. package/dist/Actions/components/actions-overview.component.d.ts +8 -8
  88. package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
  89. package/dist/Actions/components/actions-overview.component.js +8 -8
  90. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  91. package/dist/Actions/components/categories-list-view.component.d.ts +4 -4
  92. package/dist/Actions/components/categories-list-view.component.d.ts.map +1 -1
  93. package/dist/Actions/components/categories-list-view.component.js +4 -4
  94. package/dist/Actions/components/categories-list-view.component.js.map +1 -1
  95. package/dist/Actions/components/code-management.component.js +1 -1
  96. package/dist/Actions/components/entity-integration.component.js +1 -1
  97. package/dist/Actions/components/execution-monitoring.component.d.ts +6 -6
  98. package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
  99. package/dist/Actions/components/execution-monitoring.component.js +5 -5
  100. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  101. package/dist/Actions/components/executions-list-view.component.js +1 -1
  102. package/dist/Actions/components/explorer/action-breadcrumb.component.d.ts +2 -2
  103. package/dist/Actions/components/explorer/action-breadcrumb.component.d.ts.map +1 -1
  104. package/dist/Actions/components/explorer/action-breadcrumb.component.js +1 -1
  105. package/dist/Actions/components/explorer/action-breadcrumb.component.js.map +1 -1
  106. package/dist/Actions/components/explorer/action-card.component.d.ts +2 -2
  107. package/dist/Actions/components/explorer/action-card.component.d.ts.map +1 -1
  108. package/dist/Actions/components/explorer/action-card.component.js +3 -3
  109. package/dist/Actions/components/explorer/action-card.component.js.map +1 -1
  110. package/dist/Actions/components/explorer/action-explorer.component.d.ts +7 -7
  111. package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -1
  112. package/dist/Actions/components/explorer/action-explorer.component.js +5 -5
  113. package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
  114. package/dist/Actions/components/explorer/action-list-item.component.d.ts +2 -2
  115. package/dist/Actions/components/explorer/action-list-item.component.d.ts.map +1 -1
  116. package/dist/Actions/components/explorer/action-list-item.component.js +1 -1
  117. package/dist/Actions/components/explorer/action-list-item.component.js.map +1 -1
  118. package/dist/Actions/components/explorer/action-toolbar.component.js +1 -1
  119. package/dist/Actions/components/explorer/action-tree-panel.component.d.ts +5 -5
  120. package/dist/Actions/components/explorer/action-tree-panel.component.d.ts.map +1 -1
  121. package/dist/Actions/components/explorer/action-tree-panel.component.js +1 -1
  122. package/dist/Actions/components/explorer/action-tree-panel.component.js.map +1 -1
  123. package/dist/Actions/components/explorer/new-action-panel.component.d.ts +3 -3
  124. package/dist/Actions/components/explorer/new-action-panel.component.d.ts.map +1 -1
  125. package/dist/Actions/components/explorer/new-action-panel.component.js +3 -3
  126. package/dist/Actions/components/explorer/new-action-panel.component.js.map +1 -1
  127. package/dist/Actions/components/explorer/new-category-panel.component.d.ts +3 -3
  128. package/dist/Actions/components/explorer/new-category-panel.component.d.ts.map +1 -1
  129. package/dist/Actions/components/explorer/new-category-panel.component.js +2 -2
  130. package/dist/Actions/components/explorer/new-category-panel.component.js.map +1 -1
  131. package/dist/Actions/components/scheduled-actions.component.js +2 -2
  132. package/dist/Actions/components/scheduled-actions.component.js.map +1 -1
  133. package/dist/Actions/components/security-permissions.component.js +1 -1
  134. package/dist/Communication/communication-dashboard.component.js +1 -1
  135. package/dist/Communication/communication-logs-resource.component.d.ts +3 -3
  136. package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
  137. package/dist/Communication/communication-logs-resource.component.js +2 -2
  138. package/dist/Communication/communication-logs-resource.component.js.map +1 -1
  139. package/dist/Communication/communication-monitor-resource.component.d.ts +4 -4
  140. package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
  141. package/dist/Communication/communication-monitor-resource.component.js +7 -7
  142. package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
  143. package/dist/Communication/communication-providers-resource.component.d.ts +4 -4
  144. package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
  145. package/dist/Communication/communication-providers-resource.component.js +6 -6
  146. package/dist/Communication/communication-providers-resource.component.js.map +1 -1
  147. package/dist/Communication/communication-runs-resource.component.d.ts +2 -2
  148. package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
  149. package/dist/Communication/communication-runs-resource.component.js +5 -5
  150. package/dist/Communication/communication-runs-resource.component.js.map +1 -1
  151. package/dist/Communication/communication-templates-resource.component.d.ts +3 -3
  152. package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -1
  153. package/dist/Communication/communication-templates-resource.component.js +6 -6
  154. package/dist/Communication/communication-templates-resource.component.js.map +1 -1
  155. package/dist/ComponentStudio/component-studio-dashboard.component.js +1 -1
  156. package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
  157. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js +2 -2
  158. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js.map +1 -1
  159. package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts +13 -13
  160. package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts.map +1 -1
  161. package/dist/ComponentStudio/components/artifact-load-dialog.component.js +2 -2
  162. package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
  163. package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts +8 -8
  164. package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
  165. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +2 -2
  166. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
  167. package/dist/ComponentStudio/components/browser/component-browser.component.js +1 -1
  168. package/dist/ComponentStudio/components/editors/code-editor-panel.component.js +1 -1
  169. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js +1 -1
  170. package/dist/ComponentStudio/components/editors/requirements-editor.component.js +1 -1
  171. package/dist/ComponentStudio/components/editors/spec-editor.component.js +1 -1
  172. package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js +1 -1
  173. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js +1 -1
  174. package/dist/ComponentStudio/components/text-import-dialog.component.js +1 -1
  175. package/dist/ComponentStudio/components/workspace/component-preview.component.js +1 -1
  176. package/dist/ComponentStudio/components/workspace/editor-tabs.component.js +1 -1
  177. package/dist/ComponentStudio/services/component-version.service.d.ts +1 -1
  178. package/dist/ComponentStudio/services/component-version.service.js +3 -3
  179. package/dist/ComponentStudio/services/component-version.service.js.map +1 -1
  180. package/dist/Credentials/components/credential-category-edit-panel.component.d.ts +44 -0
  181. package/dist/Credentials/components/credential-category-edit-panel.component.d.ts.map +1 -0
  182. package/dist/Credentials/components/credential-category-edit-panel.component.js +456 -0
  183. package/dist/Credentials/components/credential-category-edit-panel.component.js.map +1 -0
  184. package/dist/Credentials/components/credential-edit-panel.component.d.ts +70 -0
  185. package/dist/Credentials/components/credential-edit-panel.component.d.ts.map +1 -0
  186. package/dist/Credentials/components/credential-edit-panel.component.js +694 -0
  187. package/dist/Credentials/components/credential-edit-panel.component.js.map +1 -0
  188. package/dist/Credentials/components/credential-type-edit-panel.component.d.ts +56 -0
  189. package/dist/Credentials/components/credential-type-edit-panel.component.d.ts.map +1 -0
  190. package/dist/Credentials/components/credential-type-edit-panel.component.js +563 -0
  191. package/dist/Credentials/components/credential-type-edit-panel.component.js.map +1 -0
  192. package/dist/Credentials/components/credentials-audit-resource.component.d.ts +2 -2
  193. package/dist/Credentials/components/credentials-audit-resource.component.d.ts.map +1 -1
  194. package/dist/Credentials/components/credentials-audit-resource.component.js +2 -2
  195. package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
  196. package/dist/Credentials/components/credentials-categories-resource.component.d.ts +6 -6
  197. package/dist/Credentials/components/credentials-categories-resource.component.d.ts.map +1 -1
  198. package/dist/Credentials/components/credentials-categories-resource.component.js +1 -1
  199. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  200. package/dist/Credentials/components/credentials-list-resource.component.d.ts +18 -18
  201. package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
  202. package/dist/Credentials/components/credentials-list-resource.component.js +1 -1
  203. package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
  204. package/dist/Credentials/components/credentials-overview-resource.component.d.ts.map +1 -1
  205. package/dist/Credentials/components/credentials-overview-resource.component.js +2 -2
  206. package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
  207. package/dist/Credentials/components/credentials-types-resource.component.d.ts +4 -4
  208. package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
  209. package/dist/Credentials/components/credentials-types-resource.component.js +1 -1
  210. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  211. package/dist/Credentials/credentials-dashboard.component.js +1 -1
  212. package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts +7 -7
  213. package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts.map +1 -1
  214. package/dist/DashboardBrowser/dashboard-browser-resource.component.js +3 -3
  215. package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
  216. package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts +9 -9
  217. package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts.map +1 -1
  218. package/dist/DashboardBrowser/dashboard-share-dialog.component.js +2 -2
  219. package/dist/DashboardBrowser/dashboard-share-dialog.component.js.map +1 -1
  220. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js +1 -1
  221. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js +4 -4
  222. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js.map +1 -1
  223. package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.d.ts +245 -0
  224. package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.d.ts.map +1 -0
  225. package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.js +1143 -0
  226. package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.js.map +1 -0
  227. package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts +60 -2
  228. package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts.map +1 -1
  229. package/dist/DataExplorer/components/view-selector/view-selector.component.js +454 -107
  230. package/dist/DataExplorer/components/view-selector/view-selector.component.js.map +1 -1
  231. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +81 -2
  232. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
  233. package/dist/DataExplorer/data-explorer-dashboard.component.js +557 -185
  234. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  235. package/dist/DataExplorer/data-explorer-resource.component.d.ts.map +1 -1
  236. package/dist/DataExplorer/data-explorer-resource.component.js +1 -1
  237. package/dist/DataExplorer/data-explorer-resource.component.js.map +1 -1
  238. package/dist/DataExplorer/services/explorer-state.service.d.ts.map +1 -1
  239. package/dist/DataExplorer/services/explorer-state.service.js +6 -6
  240. package/dist/DataExplorer/services/explorer-state.service.js.map +1 -1
  241. package/dist/EntityAdmin/components/entity-details.component.d.ts +50 -0
  242. package/dist/EntityAdmin/components/entity-details.component.d.ts.map +1 -0
  243. package/dist/EntityAdmin/components/entity-details.component.js +680 -0
  244. package/dist/EntityAdmin/components/entity-details.component.js.map +1 -0
  245. package/dist/EntityAdmin/components/entity-filter-panel.component.d.ts +31 -0
  246. package/dist/EntityAdmin/components/entity-filter-panel.component.d.ts.map +1 -0
  247. package/dist/EntityAdmin/components/entity-filter-panel.component.js +160 -0
  248. package/dist/EntityAdmin/components/entity-filter-panel.component.js.map +1 -0
  249. package/dist/EntityAdmin/components/erd-composite.component.d.ts +73 -0
  250. package/dist/EntityAdmin/components/erd-composite.component.d.ts.map +1 -0
  251. package/dist/EntityAdmin/components/erd-composite.component.js +271 -0
  252. package/dist/EntityAdmin/components/erd-composite.component.js.map +1 -0
  253. package/dist/EntityAdmin/components/erd-diagram.component.d.ts +47 -0
  254. package/dist/EntityAdmin/components/erd-diagram.component.d.ts.map +1 -0
  255. package/dist/EntityAdmin/components/erd-diagram.component.js +618 -0
  256. package/dist/EntityAdmin/components/erd-diagram.component.js.map +1 -0
  257. package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
  258. package/dist/EntityAdmin/entity-admin-dashboard.component.js +1 -1
  259. package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
  260. package/dist/Home/home-dashboard.component.d.ts +8 -8
  261. package/dist/Home/home-dashboard.component.d.ts.map +1 -1
  262. package/dist/Home/home-dashboard.component.js +2 -2
  263. package/dist/Home/home-dashboard.component.js.map +1 -1
  264. package/dist/Lists/components/lists-browse-resource.component.d.ts +7 -7
  265. package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
  266. package/dist/Lists/components/lists-browse-resource.component.js +9 -9
  267. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  268. package/dist/Lists/components/lists-categories-resource.component.d.ts +10 -10
  269. package/dist/Lists/components/lists-categories-resource.component.d.ts.map +1 -1
  270. package/dist/Lists/components/lists-categories-resource.component.js +4 -4
  271. package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
  272. package/dist/Lists/components/lists-my-lists-resource.component.d.ts +9 -9
  273. package/dist/Lists/components/lists-my-lists-resource.component.d.ts.map +1 -1
  274. package/dist/Lists/components/lists-my-lists-resource.component.js +8 -8
  275. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  276. package/dist/Lists/components/lists-operations-resource.component.d.ts +6 -6
  277. package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
  278. package/dist/Lists/components/lists-operations-resource.component.js +5 -5
  279. package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
  280. package/dist/Lists/components/venn-diagram/venn-diagram.component.js +1 -1
  281. package/dist/Lists/services/list-set-operations.service.d.ts +2 -2
  282. package/dist/Lists/services/list-set-operations.service.d.ts.map +1 -1
  283. package/dist/Lists/services/list-set-operations.service.js +2 -2
  284. package/dist/Lists/services/list-set-operations.service.js.map +1 -1
  285. package/dist/MCP/components/mcp-connection-dialog.component.d.ts +2 -2
  286. package/dist/MCP/components/mcp-connection-dialog.component.d.ts.map +1 -1
  287. package/dist/MCP/components/mcp-connection-dialog.component.js +2 -2
  288. package/dist/MCP/components/mcp-connection-dialog.component.js.map +1 -1
  289. package/dist/MCP/components/mcp-log-detail-panel.component.js +1 -1
  290. package/dist/MCP/components/mcp-server-dialog.component.js +1 -1
  291. package/dist/MCP/components/mcp-server-dialog.component.js.map +1 -1
  292. package/dist/MCP/components/mcp-test-tool-dialog.component.js +1 -1
  293. package/dist/MCP/mcp-dashboard.component.js +1 -1
  294. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  295. package/dist/MCP/mcp-filter-panel.component.js +1 -1
  296. package/dist/MCP/mcp-resource.component.js +1 -1
  297. package/dist/QueryBrowser/query-browser-resource.component.js +3 -3
  298. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  299. package/dist/Scheduling/components/job-slideout.component.js +1 -1
  300. package/dist/Scheduling/components/scheduling-activity-resource.component.js +1 -1
  301. package/dist/Scheduling/components/scheduling-activity.component.js +1 -1
  302. package/dist/Scheduling/components/scheduling-health-resource.component.d.ts +20 -0
  303. package/dist/Scheduling/components/scheduling-health-resource.component.d.ts.map +1 -0
  304. package/dist/Scheduling/components/scheduling-health-resource.component.js +55 -0
  305. package/dist/Scheduling/components/scheduling-health-resource.component.js.map +1 -0
  306. package/dist/Scheduling/components/scheduling-health.component.d.ts +30 -0
  307. package/dist/Scheduling/components/scheduling-health.component.d.ts.map +1 -0
  308. package/dist/Scheduling/components/scheduling-health.component.js +315 -0
  309. package/dist/Scheduling/components/scheduling-health.component.js.map +1 -0
  310. package/dist/Scheduling/components/scheduling-history-resource.component.d.ts +20 -0
  311. package/dist/Scheduling/components/scheduling-history-resource.component.d.ts.map +1 -0
  312. package/dist/Scheduling/components/scheduling-history-resource.component.js +55 -0
  313. package/dist/Scheduling/components/scheduling-history-resource.component.js.map +1 -0
  314. package/dist/Scheduling/components/scheduling-history.component.d.ts +48 -0
  315. package/dist/Scheduling/components/scheduling-history.component.d.ts.map +1 -0
  316. package/dist/Scheduling/components/scheduling-history.component.js +377 -0
  317. package/dist/Scheduling/components/scheduling-history.component.js.map +1 -0
  318. package/dist/Scheduling/components/scheduling-jobs-resource.component.js +1 -1
  319. package/dist/Scheduling/components/scheduling-jobs.component.js +2 -2
  320. package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
  321. package/dist/Scheduling/components/scheduling-monitor-resource.component.d.ts +20 -0
  322. package/dist/Scheduling/components/scheduling-monitor-resource.component.d.ts.map +1 -0
  323. package/dist/Scheduling/components/scheduling-monitor-resource.component.js +55 -0
  324. package/dist/Scheduling/components/scheduling-monitor-resource.component.js.map +1 -0
  325. package/dist/Scheduling/components/scheduling-monitoring.component.d.ts +37 -0
  326. package/dist/Scheduling/components/scheduling-monitoring.component.d.ts.map +1 -0
  327. package/dist/Scheduling/components/scheduling-monitoring.component.js +488 -0
  328. package/dist/Scheduling/components/scheduling-monitoring.component.js.map +1 -0
  329. package/dist/Scheduling/components/scheduling-overview-resource.component.js +1 -1
  330. package/dist/Scheduling/components/scheduling-overview.component.js +1 -1
  331. package/dist/Scheduling/components/scheduling-types-resource.component.d.ts +20 -0
  332. package/dist/Scheduling/components/scheduling-types-resource.component.d.ts.map +1 -0
  333. package/dist/Scheduling/components/scheduling-types-resource.component.js +55 -0
  334. package/dist/Scheduling/components/scheduling-types-resource.component.js.map +1 -0
  335. package/dist/Scheduling/components/scheduling-types.component.d.ts +22 -0
  336. package/dist/Scheduling/components/scheduling-types.component.d.ts.map +1 -0
  337. package/dist/Scheduling/components/scheduling-types.component.js +165 -0
  338. package/dist/Scheduling/components/scheduling-types.component.js.map +1 -0
  339. package/dist/Scheduling/scheduling-dashboard.component.js +1 -1
  340. package/dist/Scheduling/services/scheduling-instrumentation.service.js.map +1 -1
  341. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
  342. package/dist/SystemDiagnostics/system-diagnostics.component.js +1 -1
  343. package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
  344. package/dist/Testing/components/testing-analytics-resource.component.js +1 -1
  345. package/dist/Testing/components/testing-analytics.component.js +1 -1
  346. package/dist/Testing/components/testing-dashboard-tab-resource.component.js +1 -1
  347. package/dist/Testing/components/testing-dashboard-tab.component.js +1 -1
  348. package/dist/Testing/components/testing-execution-resource.component.d.ts +20 -0
  349. package/dist/Testing/components/testing-execution-resource.component.d.ts.map +1 -0
  350. package/dist/Testing/components/testing-execution-resource.component.js +55 -0
  351. package/dist/Testing/components/testing-execution-resource.component.js.map +1 -0
  352. package/dist/Testing/components/testing-execution.component.d.ts +71 -0
  353. package/dist/Testing/components/testing-execution.component.d.ts.map +1 -0
  354. package/dist/Testing/components/testing-execution.component.js +845 -0
  355. package/dist/Testing/components/testing-execution.component.js.map +1 -0
  356. package/dist/Testing/components/testing-explorer-resource.component.js +1 -1
  357. package/dist/Testing/components/testing-explorer.component.d.ts +4 -4
  358. package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
  359. package/dist/Testing/components/testing-explorer.component.js +1 -1
  360. package/dist/Testing/components/testing-explorer.component.js.map +1 -1
  361. package/dist/Testing/components/testing-feedback-resource.component.d.ts +20 -0
  362. package/dist/Testing/components/testing-feedback-resource.component.d.ts.map +1 -0
  363. package/dist/Testing/components/testing-feedback-resource.component.js +55 -0
  364. package/dist/Testing/components/testing-feedback-resource.component.js.map +1 -0
  365. package/dist/Testing/components/testing-feedback.component.d.ts +111 -0
  366. package/dist/Testing/components/testing-feedback.component.d.ts.map +1 -0
  367. package/dist/Testing/components/testing-feedback.component.js +1486 -0
  368. package/dist/Testing/components/testing-feedback.component.js.map +1 -0
  369. package/dist/Testing/components/testing-overview-resource.component.d.ts +20 -0
  370. package/dist/Testing/components/testing-overview-resource.component.d.ts.map +1 -0
  371. package/dist/Testing/components/testing-overview-resource.component.js +55 -0
  372. package/dist/Testing/components/testing-overview-resource.component.js.map +1 -0
  373. package/dist/Testing/components/testing-overview.component.d.ts +30 -0
  374. package/dist/Testing/components/testing-overview.component.d.ts.map +1 -0
  375. package/dist/Testing/components/testing-overview.component.js +361 -0
  376. package/dist/Testing/components/testing-overview.component.js.map +1 -0
  377. package/dist/Testing/components/testing-review-resource.component.js +1 -1
  378. package/dist/Testing/components/testing-review.component.js +1 -1
  379. package/dist/Testing/components/testing-runs-resource.component.js +1 -1
  380. package/dist/Testing/components/testing-runs.component.js +1 -1
  381. package/dist/Testing/components/testing-version-comparison.component.d.ts +62 -0
  382. package/dist/Testing/components/testing-version-comparison.component.d.ts.map +1 -0
  383. package/dist/Testing/components/testing-version-comparison.component.js +815 -0
  384. package/dist/Testing/components/testing-version-comparison.component.js.map +1 -0
  385. package/dist/Testing/components/testing-version-resource.component.d.ts +20 -0
  386. package/dist/Testing/components/testing-version-resource.component.d.ts.map +1 -0
  387. package/dist/Testing/components/testing-version-resource.component.js +55 -0
  388. package/dist/Testing/components/testing-version-resource.component.js.map +1 -0
  389. package/dist/Testing/components/widgets/oracle-breakdown-table.component.js +1 -1
  390. package/dist/Testing/components/widgets/suite-tree.component.js +2 -2
  391. package/dist/Testing/components/widgets/test-run-detail-panel.component.js +1 -1
  392. package/dist/Testing/services/testing-instrumentation.service.js.map +1 -1
  393. package/dist/Testing/testing-dashboard.component.js +1 -1
  394. package/dist/VersionHistory/components/diff-resource.component.d.ts +5 -5
  395. package/dist/VersionHistory/components/diff-resource.component.d.ts.map +1 -1
  396. package/dist/VersionHistory/components/diff-resource.component.js +4 -4
  397. package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
  398. package/dist/VersionHistory/components/graph-resource.component.js +1 -1
  399. package/dist/VersionHistory/components/labels-resource.component.d.ts +7 -7
  400. package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -1
  401. package/dist/VersionHistory/components/labels-resource.component.js +1 -1
  402. package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
  403. package/dist/VersionHistory/components/restore-resource.component.d.ts +4 -4
  404. package/dist/VersionHistory/components/restore-resource.component.d.ts.map +1 -1
  405. package/dist/VersionHistory/components/restore-resource.component.js +1 -1
  406. package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
  407. package/dist/generic/base-dashboard.d.ts +65 -0
  408. package/dist/generic/base-dashboard.d.ts.map +1 -0
  409. package/dist/generic/base-dashboard.js +74 -0
  410. package/dist/generic/base-dashboard.js.map +1 -0
  411. package/package.json +38 -38
@@ -0,0 +1,981 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Component } from '@angular/core';
8
+ import { Subject, BehaviorSubject } from 'rxjs';
9
+ import { takeUntil, debounceTime, distinctUntilChanged } from 'rxjs/operators';
10
+ import { Metadata, RunView, CompositeKey } from '@memberjunction/core';
11
+ import { BaseResourceComponent } from '@memberjunction/ng-shared';
12
+ import { RegisterClass } from '@memberjunction/global';
13
+ import * as i0 from "@angular/core";
14
+ import * as i1 from "@memberjunction/ng-shared";
15
+ import * as i2 from "@angular/forms";
16
+ import * as i3 from "@progress/kendo-angular-layout";
17
+ import * as i4 from "@memberjunction/ng-shared-generic";
18
+ const _forTrack0 = ($index, $item) => $item.value;
19
+ const _forTrack1 = ($index, $item) => $item.ID;
20
+ function ModelManagementV2Component_Conditional_1_Template(rf, ctx) { if (rf & 1) {
21
+ i0.ɵɵelementStart(0, "div", 1);
22
+ i0.ɵɵelement(1, "mj-loading", 2);
23
+ i0.ɵɵelementEnd();
24
+ } if (rf & 2) {
25
+ const ctx_r0 = i0.ɵɵnextContext();
26
+ i0.ɵɵadvance();
27
+ i0.ɵɵproperty("text", ctx_r0.currentLoadingMessage);
28
+ } }
29
+ function ModelManagementV2Component_Conditional_2_Conditional_7_Template(rf, ctx) { if (rf & 1) {
30
+ i0.ɵɵtext(0, " Hide Filters ");
31
+ } }
32
+ function ModelManagementV2Component_Conditional_2_Conditional_8_Template(rf, ctx) { if (rf & 1) {
33
+ i0.ɵɵtext(0, " Show Filters ");
34
+ } }
35
+ function ModelManagementV2Component_Conditional_2_Conditional_21_For_24_Template(rf, ctx) { if (rf & 1) {
36
+ i0.ɵɵelementStart(0, "option", 36);
37
+ i0.ɵɵtext(1);
38
+ i0.ɵɵelementEnd();
39
+ } if (rf & 2) {
40
+ const option_r4 = ctx.$implicit;
41
+ i0.ɵɵproperty("value", option_r4.value);
42
+ i0.ɵɵadvance();
43
+ i0.ɵɵtextInterpolate(option_r4.label);
44
+ } }
45
+ function ModelManagementV2Component_Conditional_2_Conditional_21_For_33_Template(rf, ctx) { if (rf & 1) {
46
+ i0.ɵɵelementStart(0, "option", 36);
47
+ i0.ɵɵtext(1);
48
+ i0.ɵɵelementEnd();
49
+ } if (rf & 2) {
50
+ const vendor_r5 = ctx.$implicit;
51
+ i0.ɵɵproperty("value", vendor_r5.ID);
52
+ i0.ɵɵadvance();
53
+ i0.ɵɵtextInterpolate(vendor_r5.Name);
54
+ } }
55
+ function ModelManagementV2Component_Conditional_2_Conditional_21_For_42_Template(rf, ctx) { if (rf & 1) {
56
+ i0.ɵɵelementStart(0, "option", 36);
57
+ i0.ɵɵtext(1);
58
+ i0.ɵɵelementEnd();
59
+ } if (rf & 2) {
60
+ const type_r6 = ctx.$implicit;
61
+ i0.ɵɵproperty("value", type_r6.ID);
62
+ i0.ɵɵadvance();
63
+ i0.ɵɵtextInterpolate(type_r6.Name);
64
+ } }
65
+ function ModelManagementV2Component_Conditional_2_Conditional_21_Template(rf, ctx) { if (rf & 1) {
66
+ const _r3 = i0.ɵɵgetCurrentView();
67
+ i0.ɵɵelementStart(0, "kendo-splitter-pane", 19)(1, "div", 22)(2, "div", 23)(3, "h3");
68
+ i0.ɵɵtext(4, "Model Filters");
69
+ i0.ɵɵelementEnd();
70
+ i0.ɵɵelementStart(5, "div", 24)(6, "span", 25);
71
+ i0.ɵɵtext(7);
72
+ i0.ɵɵelementEnd();
73
+ i0.ɵɵelementStart(8, "span", 26);
74
+ i0.ɵɵtext(9);
75
+ i0.ɵɵelementEnd()();
76
+ i0.ɵɵelementStart(10, "button", 27);
77
+ i0.ɵɵlistener("click", function ModelManagementV2Component_Conditional_2_Conditional_21_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.toggleFilterPanel()); });
78
+ i0.ɵɵelement(11, "span", 28);
79
+ i0.ɵɵelementEnd()();
80
+ i0.ɵɵelementStart(12, "div", 29)(13, "div", 30)(14, "label", 31);
81
+ i0.ɵɵelement(15, "span", 32);
82
+ i0.ɵɵtext(16, " Name ");
83
+ i0.ɵɵelementEnd();
84
+ i0.ɵɵelementStart(17, "input", 33);
85
+ i0.ɵɵlistener("input", function ModelManagementV2Component_Conditional_2_Conditional_21_Template_input_input_17_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onSearchChange($event.target.value)); });
86
+ i0.ɵɵelementEnd()();
87
+ i0.ɵɵelementStart(18, "div", 30)(19, "label", 31);
88
+ i0.ɵɵelement(20, "span", 34);
89
+ i0.ɵɵtext(21, " Sort By ");
90
+ i0.ɵɵelementEnd();
91
+ i0.ɵɵelementStart(22, "select", 35);
92
+ i0.ɵɵlistener("change", function ModelManagementV2Component_Conditional_2_Conditional_21_Template_select_change_22_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onSortChange($event.target.value)); });
93
+ i0.ɵɵrepeaterCreate(23, ModelManagementV2Component_Conditional_2_Conditional_21_For_24_Template, 2, 2, "option", 36, _forTrack0);
94
+ i0.ɵɵelementEnd()();
95
+ i0.ɵɵelementStart(25, "div", 30)(26, "label", 31);
96
+ i0.ɵɵelement(27, "span", 37);
97
+ i0.ɵɵtext(28, " Vendor ");
98
+ i0.ɵɵelementEnd();
99
+ i0.ɵɵelementStart(29, "select", 35);
100
+ i0.ɵɵlistener("change", function ModelManagementV2Component_Conditional_2_Conditional_21_Template_select_change_29_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onVendorChange($event.target.value)); });
101
+ i0.ɵɵelementStart(30, "option", 38);
102
+ i0.ɵɵtext(31, "All Vendors");
103
+ i0.ɵɵelementEnd();
104
+ i0.ɵɵrepeaterCreate(32, ModelManagementV2Component_Conditional_2_Conditional_21_For_33_Template, 2, 2, "option", 36, _forTrack1);
105
+ i0.ɵɵelementEnd()();
106
+ i0.ɵɵelementStart(34, "div", 30)(35, "label", 31);
107
+ i0.ɵɵelement(36, "span", 6);
108
+ i0.ɵɵtext(37, " Type ");
109
+ i0.ɵɵelementEnd();
110
+ i0.ɵɵelementStart(38, "select", 35);
111
+ i0.ɵɵlistener("change", function ModelManagementV2Component_Conditional_2_Conditional_21_Template_select_change_38_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onTypeChange($event.target.value)); });
112
+ i0.ɵɵelementStart(39, "option", 38);
113
+ i0.ɵɵtext(40, "All Types");
114
+ i0.ɵɵelementEnd();
115
+ i0.ɵɵrepeaterCreate(41, ModelManagementV2Component_Conditional_2_Conditional_21_For_42_Template, 2, 2, "option", 36, _forTrack1);
116
+ i0.ɵɵelementEnd()();
117
+ i0.ɵɵelementStart(43, "div", 30)(44, "label", 31);
118
+ i0.ɵɵelement(45, "span", 39);
119
+ i0.ɵɵtext(46, " Status ");
120
+ i0.ɵɵelementEnd();
121
+ i0.ɵɵelementStart(47, "select", 35);
122
+ i0.ɵɵlistener("change", function ModelManagementV2Component_Conditional_2_Conditional_21_Template_select_change_47_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onStatusChange($event.target.value)); });
123
+ i0.ɵɵelementStart(48, "option", 38);
124
+ i0.ɵɵtext(49, "All Statuses");
125
+ i0.ɵɵelementEnd();
126
+ i0.ɵɵelementStart(50, "option", 40);
127
+ i0.ɵɵtext(51, "Active");
128
+ i0.ɵɵelementEnd();
129
+ i0.ɵɵelementStart(52, "option", 41);
130
+ i0.ɵɵtext(53, "Inactive");
131
+ i0.ɵɵelementEnd()()();
132
+ i0.ɵɵelementStart(54, "div", 30)(55, "label", 31);
133
+ i0.ɵɵelement(56, "span", 42);
134
+ i0.ɵɵtext(57, " Power Rank ");
135
+ i0.ɵɵelementEnd();
136
+ i0.ɵɵelementStart(58, "div", 43)(59, "input", 44);
137
+ i0.ɵɵtwoWayListener("ngModelChange", function ModelManagementV2Component_Conditional_2_Conditional_21_Template_input_ngModelChange_59_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r0.powerRankRange.min, $event) || (ctx_r0.powerRankRange.min = $event); return i0.ɵɵresetView($event); });
138
+ i0.ɵɵlistener("change", function ModelManagementV2Component_Conditional_2_Conditional_21_Template_input_change_59_listener() { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.validateAndApplyRankFilters("power")); });
139
+ i0.ɵɵelementEnd();
140
+ i0.ɵɵelementStart(60, "span", 45);
141
+ i0.ɵɵtext(61, "-");
142
+ i0.ɵɵelementEnd();
143
+ i0.ɵɵelementStart(62, "input", 46);
144
+ i0.ɵɵtwoWayListener("ngModelChange", function ModelManagementV2Component_Conditional_2_Conditional_21_Template_input_ngModelChange_62_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r0.powerRankRange.max, $event) || (ctx_r0.powerRankRange.max = $event); return i0.ɵɵresetView($event); });
145
+ i0.ɵɵlistener("change", function ModelManagementV2Component_Conditional_2_Conditional_21_Template_input_change_62_listener() { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.validateAndApplyRankFilters("power")); });
146
+ i0.ɵɵelementEnd()()();
147
+ i0.ɵɵelementStart(63, "div", 47)(64, "button", 48);
148
+ i0.ɵɵlistener("click", function ModelManagementV2Component_Conditional_2_Conditional_21_Template_button_click_64_listener() { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.clearFilters()); });
149
+ i0.ɵɵelement(65, "span", 49);
150
+ i0.ɵɵtext(66, " Reset Filters ");
151
+ i0.ɵɵelementEnd()()()()();
152
+ } if (rf & 2) {
153
+ const ctx_r0 = i0.ɵɵnextContext(2);
154
+ i0.ɵɵadvance(7);
155
+ i0.ɵɵtextInterpolate(ctx_r0.filteredModels.length);
156
+ i0.ɵɵadvance(2);
157
+ i0.ɵɵtextInterpolate1("of ", ctx_r0.models.length, "");
158
+ i0.ɵɵadvance(8);
159
+ i0.ɵɵproperty("value", ctx_r0.searchTerm);
160
+ i0.ɵɵadvance(5);
161
+ i0.ɵɵproperty("value", ctx_r0.sortBy);
162
+ i0.ɵɵadvance();
163
+ i0.ɵɵrepeater(ctx_r0.sortOptions);
164
+ i0.ɵɵadvance(6);
165
+ i0.ɵɵproperty("value", ctx_r0.selectedVendor);
166
+ i0.ɵɵadvance(3);
167
+ i0.ɵɵrepeater(ctx_r0.vendors);
168
+ i0.ɵɵadvance(6);
169
+ i0.ɵɵproperty("value", ctx_r0.selectedType);
170
+ i0.ɵɵadvance(3);
171
+ i0.ɵɵrepeater(ctx_r0.modelTypes);
172
+ i0.ɵɵadvance(6);
173
+ i0.ɵɵproperty("value", ctx_r0.selectedStatus);
174
+ i0.ɵɵadvance(12);
175
+ i0.ɵɵproperty("max", ctx_r0.maxPowerRank);
176
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r0.powerRankRange.min);
177
+ i0.ɵɵadvance(3);
178
+ i0.ɵɵproperty("max", ctx_r0.maxPowerRank);
179
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r0.powerRankRange.max);
180
+ } }
181
+ function ModelManagementV2Component_Conditional_2_Conditional_24_Conditional_6_Template(rf, ctx) { if (rf & 1) {
182
+ const _r7 = i0.ɵɵgetCurrentView();
183
+ i0.ɵɵelementStart(0, "button", 52);
184
+ i0.ɵɵlistener("click", function ModelManagementV2Component_Conditional_2_Conditional_24_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.createNewModel()); });
185
+ i0.ɵɵelement(1, "i", 17);
186
+ i0.ɵɵtext(2, " Create First Model ");
187
+ i0.ɵɵelementEnd();
188
+ } }
189
+ function ModelManagementV2Component_Conditional_2_Conditional_24_Template(rf, ctx) { if (rf & 1) {
190
+ i0.ɵɵelementStart(0, "div", 21);
191
+ i0.ɵɵelement(1, "i", 50);
192
+ i0.ɵɵelementStart(2, "h3");
193
+ i0.ɵɵtext(3, "No models found");
194
+ i0.ɵɵelementEnd();
195
+ i0.ɵɵelementStart(4, "p");
196
+ i0.ɵɵtext(5);
197
+ i0.ɵɵelementEnd();
198
+ i0.ɵɵtemplate(6, ModelManagementV2Component_Conditional_2_Conditional_24_Conditional_6_Template, 3, 0, "button", 51);
199
+ i0.ɵɵelementEnd();
200
+ } if (rf & 2) {
201
+ const ctx_r0 = i0.ɵɵnextContext(2);
202
+ i0.ɵɵadvance(5);
203
+ i0.ɵɵtextInterpolate(ctx_r0.hasActiveFilters ? "Try adjusting your filters" : "Create your first AI model to get started");
204
+ i0.ɵɵadvance();
205
+ i0.ɵɵconditional(!ctx_r0.hasActiveFilters ? 6 : -1);
206
+ } }
207
+ function ModelManagementV2Component_Conditional_2_Conditional_25_Case_0_For_2_Conditional_9_Template(rf, ctx) { if (rf & 1) {
208
+ i0.ɵɵelementStart(0, "span", 63);
209
+ i0.ɵɵelement(1, "i", 37);
210
+ i0.ɵɵtext(2);
211
+ i0.ɵɵelementEnd();
212
+ } if (rf & 2) {
213
+ const model_r9 = i0.ɵɵnextContext().$implicit;
214
+ i0.ɵɵadvance(2);
215
+ i0.ɵɵtextInterpolate1(" ", model_r9.Vendor, " ");
216
+ } }
217
+ function ModelManagementV2Component_Conditional_2_Conditional_25_Case_0_For_2_Conditional_10_Template(rf, ctx) { if (rf & 1) {
218
+ i0.ɵɵelementStart(0, "span", 63);
219
+ i0.ɵɵelement(1, "i", 6);
220
+ i0.ɵɵtext(2);
221
+ i0.ɵɵelementEnd();
222
+ } if (rf & 2) {
223
+ const model_r9 = i0.ɵɵnextContext().$implicit;
224
+ i0.ɵɵadvance(2);
225
+ i0.ɵɵtextInterpolate1(" ", model_r9.AIModelType, " ");
226
+ } }
227
+ function ModelManagementV2Component_Conditional_2_Conditional_25_Case_0_For_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
228
+ i0.ɵɵelementStart(0, "span", 64);
229
+ i0.ɵɵelement(1, "i", 74);
230
+ i0.ɵɵtext(2, " Active ");
231
+ i0.ɵɵelementEnd();
232
+ } }
233
+ function ModelManagementV2Component_Conditional_2_Conditional_25_Case_0_For_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
234
+ i0.ɵɵelementStart(0, "span", 65);
235
+ i0.ɵɵelement(1, "i", 74);
236
+ i0.ɵɵtext(2, " Inactive ");
237
+ i0.ɵɵelementEnd();
238
+ } }
239
+ function ModelManagementV2Component_Conditional_2_Conditional_25_Case_0_For_2_Conditional_15_Template(rf, ctx) { if (rf & 1) {
240
+ i0.ɵɵelementStart(0, "p", 68);
241
+ i0.ɵɵtext(1);
242
+ i0.ɵɵelementEnd();
243
+ } if (rf & 2) {
244
+ const model_r9 = i0.ɵɵnextContext().$implicit;
245
+ i0.ɵɵadvance();
246
+ i0.ɵɵtextInterpolate(model_r9.Description);
247
+ } }
248
+ function ModelManagementV2Component_Conditional_2_Conditional_25_Case_0_For_2_Conditional_16_Template(rf, ctx) { if (rf & 1) {
249
+ i0.ɵɵelementStart(0, "p", 69);
250
+ i0.ɵɵtext(1, "No description provided");
251
+ i0.ɵɵelementEnd();
252
+ } }
253
+ function ModelManagementV2Component_Conditional_2_Conditional_25_Case_0_For_2_Conditional_17_Conditional_17_Template(rf, ctx) { if (rf & 1) {
254
+ i0.ɵɵelementStart(0, "div", 76)(1, "span", 77);
255
+ i0.ɵɵtext(2, "Token Limit");
256
+ i0.ɵɵelementEnd();
257
+ i0.ɵɵelementStart(3, "span", 78);
258
+ i0.ɵɵtext(4);
259
+ i0.ɵɵelementEnd()();
260
+ } if (rf & 2) {
261
+ const model_r9 = i0.ɵɵnextContext(2).$implicit;
262
+ const ctx_r0 = i0.ɵɵnextContext(4);
263
+ i0.ɵɵadvance(4);
264
+ i0.ɵɵtextInterpolate(ctx_r0.formatTokenLimit(model_r9.InputTokenLimit));
265
+ } }
266
+ function ModelManagementV2Component_Conditional_2_Conditional_25_Case_0_For_2_Conditional_17_Conditional_18_Template(rf, ctx) { if (rf & 1) {
267
+ i0.ɵɵelementStart(0, "div", 76)(1, "span", 77);
268
+ i0.ɵɵtext(2, "API Name");
269
+ i0.ɵɵelementEnd();
270
+ i0.ɵɵelementStart(3, "span", 78);
271
+ i0.ɵɵtext(4);
272
+ i0.ɵɵelementEnd()();
273
+ } if (rf & 2) {
274
+ const model_r9 = i0.ɵɵnextContext(2).$implicit;
275
+ i0.ɵɵadvance(4);
276
+ i0.ɵɵtextInterpolate(model_r9.APIName);
277
+ } }
278
+ function ModelManagementV2Component_Conditional_2_Conditional_25_Case_0_For_2_Conditional_17_Conditional_19_Template(rf, ctx) { if (rf & 1) {
279
+ i0.ɵɵelementStart(0, "div", 76)(1, "span", 77);
280
+ i0.ɵɵtext(2, "Driver");
281
+ i0.ɵɵelementEnd();
282
+ i0.ɵɵelementStart(3, "span", 78);
283
+ i0.ɵɵtext(4);
284
+ i0.ɵɵelementEnd()();
285
+ } if (rf & 2) {
286
+ const model_r9 = i0.ɵɵnextContext(2).$implicit;
287
+ i0.ɵɵadvance(4);
288
+ i0.ɵɵtextInterpolate(model_r9.DriverClass);
289
+ } }
290
+ function ModelManagementV2Component_Conditional_2_Conditional_25_Case_0_For_2_Conditional_17_Template(rf, ctx) { if (rf & 1) {
291
+ i0.ɵɵelementStart(0, "div", 70)(1, "div", 75)(2, "div", 76)(3, "span", 77);
292
+ i0.ɵɵtext(4, "Power Rank");
293
+ i0.ɵɵelementEnd();
294
+ i0.ɵɵelementStart(5, "span", 78);
295
+ i0.ɵɵtext(6);
296
+ i0.ɵɵelementEnd()();
297
+ i0.ɵɵelementStart(7, "div", 76)(8, "span", 77);
298
+ i0.ɵɵtext(9, "Speed Rank");
299
+ i0.ɵɵelementEnd();
300
+ i0.ɵɵelementStart(10, "span", 78);
301
+ i0.ɵɵtext(11);
302
+ i0.ɵɵelementEnd()();
303
+ i0.ɵɵelementStart(12, "div", 76)(13, "span", 77);
304
+ i0.ɵɵtext(14, "Cost Rank");
305
+ i0.ɵɵelementEnd();
306
+ i0.ɵɵelementStart(15, "span", 78);
307
+ i0.ɵɵtext(16);
308
+ i0.ɵɵelementEnd()();
309
+ i0.ɵɵtemplate(17, ModelManagementV2Component_Conditional_2_Conditional_25_Case_0_For_2_Conditional_17_Conditional_17_Template, 5, 1, "div", 76)(18, ModelManagementV2Component_Conditional_2_Conditional_25_Case_0_For_2_Conditional_17_Conditional_18_Template, 5, 1, "div", 76)(19, ModelManagementV2Component_Conditional_2_Conditional_25_Case_0_For_2_Conditional_17_Conditional_19_Template, 5, 1, "div", 76);
310
+ i0.ɵɵelementEnd()();
311
+ } if (rf & 2) {
312
+ const model_r9 = i0.ɵɵnextContext().$implicit;
313
+ const ctx_r0 = i0.ɵɵnextContext(4);
314
+ i0.ɵɵadvance(6);
315
+ i0.ɵɵtextInterpolate(ctx_r0.formatRank(model_r9.PowerRank, "power"));
316
+ i0.ɵɵadvance(5);
317
+ i0.ɵɵtextInterpolate(ctx_r0.formatRank(model_r9.SpeedRank, "speed"));
318
+ i0.ɵɵadvance(5);
319
+ i0.ɵɵtextInterpolate(ctx_r0.formatRank(model_r9.CostRank, "cost"));
320
+ i0.ɵɵadvance();
321
+ i0.ɵɵconditional(model_r9.InputTokenLimit ? 17 : -1);
322
+ i0.ɵɵadvance();
323
+ i0.ɵɵconditional(model_r9.APIName ? 18 : -1);
324
+ i0.ɵɵadvance();
325
+ i0.ɵɵconditional(model_r9.DriverClass ? 19 : -1);
326
+ } }
327
+ function ModelManagementV2Component_Conditional_2_Conditional_25_Case_0_For_2_Template(rf, ctx) { if (rf & 1) {
328
+ const _r8 = i0.ɵɵgetCurrentView();
329
+ i0.ɵɵelementStart(0, "div", 56)(1, "div", 57);
330
+ i0.ɵɵlistener("click", function ModelManagementV2Component_Conditional_2_Conditional_25_Case_0_For_2_Template_div_click_1_listener() { const model_r9 = i0.ɵɵrestoreView(_r8).$implicit; const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.toggleModelExpansion(model_r9.ID)); });
331
+ i0.ɵɵelementStart(2, "div", 58)(3, "div", 59);
332
+ i0.ɵɵelement(4, "i");
333
+ i0.ɵɵelementEnd();
334
+ i0.ɵɵelementStart(5, "div", 60)(6, "h4", 61);
335
+ i0.ɵɵtext(7);
336
+ i0.ɵɵelementEnd();
337
+ i0.ɵɵelementStart(8, "div", 62);
338
+ i0.ɵɵtemplate(9, ModelManagementV2Component_Conditional_2_Conditional_25_Case_0_For_2_Conditional_9_Template, 3, 1, "span", 63)(10, ModelManagementV2Component_Conditional_2_Conditional_25_Case_0_For_2_Conditional_10_Template, 3, 1, "span", 63)(11, ModelManagementV2Component_Conditional_2_Conditional_25_Case_0_For_2_Conditional_11_Template, 3, 0, "span", 64)(12, ModelManagementV2Component_Conditional_2_Conditional_25_Case_0_For_2_Conditional_12_Template, 3, 0, "span", 65);
339
+ i0.ɵɵelementEnd()()();
340
+ i0.ɵɵelement(13, "i", 66);
341
+ i0.ɵɵelementEnd();
342
+ i0.ɵɵelementStart(14, "div", 67);
343
+ i0.ɵɵtemplate(15, ModelManagementV2Component_Conditional_2_Conditional_25_Case_0_For_2_Conditional_15_Template, 2, 1, "p", 68)(16, ModelManagementV2Component_Conditional_2_Conditional_25_Case_0_For_2_Conditional_16_Template, 2, 0, "p", 69)(17, ModelManagementV2Component_Conditional_2_Conditional_25_Case_0_For_2_Conditional_17_Template, 20, 6, "div", 70);
344
+ i0.ɵɵelementEnd();
345
+ i0.ɵɵelementStart(18, "div", 71)(19, "button", 72);
346
+ i0.ɵɵlistener("click", function ModelManagementV2Component_Conditional_2_Conditional_25_Case_0_For_2_Template_button_click_19_listener($event) { const model_r9 = i0.ɵɵrestoreView(_r8).$implicit; const ctx_r0 = i0.ɵɵnextContext(4); ctx_r0.openModel(model_r9.ID); return i0.ɵɵresetView($event.stopPropagation()); });
347
+ i0.ɵɵelement(20, "i", 73);
348
+ i0.ɵɵtext(21, " Open ");
349
+ i0.ɵɵelementEnd()()();
350
+ } if (rf & 2) {
351
+ const model_r9 = ctx.$implicit;
352
+ const ctx_r0 = i0.ɵɵnextContext(4);
353
+ i0.ɵɵclassProp("expanded", ctx_r0.expandedModelId === model_r9.ID);
354
+ i0.ɵɵadvance(4);
355
+ i0.ɵɵclassMap(ctx_r0.getModelIcon(model_r9));
356
+ i0.ɵɵadvance(3);
357
+ i0.ɵɵtextInterpolate(model_r9.Name || "Unnamed Model");
358
+ i0.ɵɵadvance(2);
359
+ i0.ɵɵconditional(model_r9.Vendor ? 9 : -1);
360
+ i0.ɵɵadvance();
361
+ i0.ɵɵconditional(model_r9.AIModelType ? 10 : -1);
362
+ i0.ɵɵadvance();
363
+ i0.ɵɵconditional(model_r9.IsActive ? 11 : 12);
364
+ i0.ɵɵadvance(2);
365
+ i0.ɵɵclassProp("rotated", ctx_r0.expandedModelId === model_r9.ID);
366
+ i0.ɵɵadvance(2);
367
+ i0.ɵɵconditional(model_r9.Description ? 15 : 16);
368
+ i0.ɵɵadvance(2);
369
+ i0.ɵɵconditional(ctx_r0.expandedModelId === model_r9.ID ? 17 : -1);
370
+ } }
371
+ function ModelManagementV2Component_Conditional_2_Conditional_25_Case_0_Template(rf, ctx) { if (rf & 1) {
372
+ i0.ɵɵelementStart(0, "div", 53);
373
+ i0.ɵɵrepeaterCreate(1, ModelManagementV2Component_Conditional_2_Conditional_25_Case_0_For_2_Template, 22, 12, "div", 55, _forTrack1);
374
+ i0.ɵɵelementEnd();
375
+ } if (rf & 2) {
376
+ const ctx_r0 = i0.ɵɵnextContext(3);
377
+ i0.ɵɵadvance();
378
+ i0.ɵɵrepeater(ctx_r0.filteredModels);
379
+ } }
380
+ function ModelManagementV2Component_Conditional_2_Conditional_25_Case_1_For_22_Template(rf, ctx) { if (rf & 1) {
381
+ const _r10 = i0.ɵɵgetCurrentView();
382
+ i0.ɵɵelementStart(0, "tr")(1, "td")(2, "div", 80);
383
+ i0.ɵɵelement(3, "i");
384
+ i0.ɵɵtext(4);
385
+ i0.ɵɵelementEnd()();
386
+ i0.ɵɵelementStart(5, "td");
387
+ i0.ɵɵtext(6);
388
+ i0.ɵɵelementEnd();
389
+ i0.ɵɵelementStart(7, "td");
390
+ i0.ɵɵtext(8);
391
+ i0.ɵɵelementEnd();
392
+ i0.ɵɵelementStart(9, "td")(10, "span", 81);
393
+ i0.ɵɵtext(11);
394
+ i0.ɵɵelementEnd()();
395
+ i0.ɵɵelementStart(12, "td")(13, "span", 81);
396
+ i0.ɵɵtext(14);
397
+ i0.ɵɵelementEnd()();
398
+ i0.ɵɵelementStart(15, "td")(16, "span", 81);
399
+ i0.ɵɵtext(17);
400
+ i0.ɵɵelementEnd()();
401
+ i0.ɵɵelementStart(18, "td")(19, "span", 82);
402
+ i0.ɵɵtext(20);
403
+ i0.ɵɵelementEnd()();
404
+ i0.ɵɵelementStart(21, "td")(22, "button", 83);
405
+ i0.ɵɵlistener("click", function ModelManagementV2Component_Conditional_2_Conditional_25_Case_1_For_22_Template_button_click_22_listener() { const model_r11 = i0.ɵɵrestoreView(_r10).$implicit; const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.openModel(model_r11.ID)); });
406
+ i0.ɵɵelement(23, "i", 84);
407
+ i0.ɵɵelementEnd()()();
408
+ } if (rf & 2) {
409
+ const model_r11 = ctx.$implicit;
410
+ const ctx_r0 = i0.ɵɵnextContext(4);
411
+ i0.ɵɵadvance(3);
412
+ i0.ɵɵclassMap(ctx_r0.getModelIcon(model_r11));
413
+ i0.ɵɵadvance();
414
+ i0.ɵɵtextInterpolate1(" ", model_r11.Name || "Unnamed Model", " ");
415
+ i0.ɵɵadvance(2);
416
+ i0.ɵɵtextInterpolate(model_r11.Vendor || "-");
417
+ i0.ɵɵadvance(2);
418
+ i0.ɵɵtextInterpolate(model_r11.AIModelType);
419
+ i0.ɵɵadvance(2);
420
+ i0.ɵɵclassMap(ctx_r0.getRankClass(model_r11.PowerRank, "power"));
421
+ i0.ɵɵadvance();
422
+ i0.ɵɵtextInterpolate1(" ", ctx_r0.formatRank(model_r11.PowerRank, "power"), " ");
423
+ i0.ɵɵadvance(2);
424
+ i0.ɵɵclassMap(ctx_r0.getRankClass(model_r11.SpeedRank, "speed"));
425
+ i0.ɵɵadvance();
426
+ i0.ɵɵtextInterpolate1(" ", ctx_r0.formatRank(model_r11.SpeedRank, "speed"), " ");
427
+ i0.ɵɵadvance(2);
428
+ i0.ɵɵclassMap(ctx_r0.getRankClass(model_r11.CostRank, "cost"));
429
+ i0.ɵɵadvance();
430
+ i0.ɵɵtextInterpolate1(" ", ctx_r0.formatRank(model_r11.CostRank, "cost"), " ");
431
+ i0.ɵɵadvance(2);
432
+ i0.ɵɵclassProp("active", model_r11.IsActive)("inactive", !model_r11.IsActive);
433
+ i0.ɵɵadvance();
434
+ i0.ɵɵtextInterpolate1(" ", model_r11.IsActive ? "Active" : "Inactive", " ");
435
+ } }
436
+ function ModelManagementV2Component_Conditional_2_Conditional_25_Case_1_Template(rf, ctx) { if (rf & 1) {
437
+ i0.ɵɵelementStart(0, "div", 54)(1, "table", 79)(2, "thead")(3, "tr")(4, "th");
438
+ i0.ɵɵtext(5, "Name");
439
+ i0.ɵɵelementEnd();
440
+ i0.ɵɵelementStart(6, "th");
441
+ i0.ɵɵtext(7, "Vendor");
442
+ i0.ɵɵelementEnd();
443
+ i0.ɵɵelementStart(8, "th");
444
+ i0.ɵɵtext(9, "Type");
445
+ i0.ɵɵelementEnd();
446
+ i0.ɵɵelementStart(10, "th");
447
+ i0.ɵɵtext(11, "Power");
448
+ i0.ɵɵelementEnd();
449
+ i0.ɵɵelementStart(12, "th");
450
+ i0.ɵɵtext(13, "Speed");
451
+ i0.ɵɵelementEnd();
452
+ i0.ɵɵelementStart(14, "th");
453
+ i0.ɵɵtext(15, "Cost");
454
+ i0.ɵɵelementEnd();
455
+ i0.ɵɵelementStart(16, "th");
456
+ i0.ɵɵtext(17, "Status");
457
+ i0.ɵɵelementEnd();
458
+ i0.ɵɵelementStart(18, "th");
459
+ i0.ɵɵtext(19, "Actions");
460
+ i0.ɵɵelementEnd()()();
461
+ i0.ɵɵelementStart(20, "tbody");
462
+ i0.ɵɵrepeaterCreate(21, ModelManagementV2Component_Conditional_2_Conditional_25_Case_1_For_22_Template, 24, 19, "tr", null, _forTrack1);
463
+ i0.ɵɵelementEnd()()();
464
+ } if (rf & 2) {
465
+ const ctx_r0 = i0.ɵɵnextContext(3);
466
+ i0.ɵɵadvance(21);
467
+ i0.ɵɵrepeater(ctx_r0.filteredModels);
468
+ } }
469
+ function ModelManagementV2Component_Conditional_2_Conditional_25_Template(rf, ctx) { if (rf & 1) {
470
+ i0.ɵɵtemplate(0, ModelManagementV2Component_Conditional_2_Conditional_25_Case_0_Template, 3, 0, "div", 53)(1, ModelManagementV2Component_Conditional_2_Conditional_25_Case_1_Template, 23, 0, "div", 54);
471
+ } if (rf & 2) {
472
+ let tmp_2_0;
473
+ const ctx_r0 = i0.ɵɵnextContext(2);
474
+ i0.ɵɵconditional((tmp_2_0 = ctx_r0.viewMode) === "grid" ? 0 : tmp_2_0 === "list" ? 1 : -1);
475
+ } }
476
+ function ModelManagementV2Component_Conditional_2_Template(rf, ctx) { if (rf & 1) {
477
+ const _r2 = i0.ɵɵgetCurrentView();
478
+ i0.ɵɵelementStart(0, "div", 3)(1, "div", 4)(2, "h2", 5);
479
+ i0.ɵɵelement(3, "i", 6);
480
+ i0.ɵɵtext(4, " AI Models ");
481
+ i0.ɵɵelementEnd();
482
+ i0.ɵɵelementStart(5, "button", 7);
483
+ i0.ɵɵlistener("click", function ModelManagementV2Component_Conditional_2_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.toggleFilters()); });
484
+ i0.ɵɵelement(6, "i", 8);
485
+ i0.ɵɵtemplate(7, ModelManagementV2Component_Conditional_2_Conditional_7_Template, 1, 0)(8, ModelManagementV2Component_Conditional_2_Conditional_8_Template, 1, 0);
486
+ i0.ɵɵelementEnd();
487
+ i0.ɵɵelementStart(9, "span", 9);
488
+ i0.ɵɵtext(10);
489
+ i0.ɵɵelementEnd()();
490
+ i0.ɵɵelementStart(11, "div", 10)(12, "div", 11)(13, "button", 12);
491
+ i0.ɵɵlistener("click", function ModelManagementV2Component_Conditional_2_Template_button_click_13_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.setViewMode("grid")); });
492
+ i0.ɵɵelement(14, "i", 13);
493
+ i0.ɵɵelementEnd();
494
+ i0.ɵɵelementStart(15, "button", 14);
495
+ i0.ɵɵlistener("click", function ModelManagementV2Component_Conditional_2_Template_button_click_15_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.setViewMode("list")); });
496
+ i0.ɵɵelement(16, "i", 15);
497
+ i0.ɵɵelementEnd()();
498
+ i0.ɵɵelementStart(17, "button", 16);
499
+ i0.ɵɵlistener("click", function ModelManagementV2Component_Conditional_2_Template_button_click_17_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.createNewModel()); });
500
+ i0.ɵɵelement(18, "i", 17);
501
+ i0.ɵɵtext(19, " New Model ");
502
+ i0.ɵɵelementEnd()()();
503
+ i0.ɵɵelementStart(20, "kendo-splitter", 18);
504
+ i0.ɵɵtemplate(21, ModelManagementV2Component_Conditional_2_Conditional_21_Template, 67, 11, "kendo-splitter-pane", 19);
505
+ i0.ɵɵelementStart(22, "kendo-splitter-pane")(23, "div", 20);
506
+ i0.ɵɵtemplate(24, ModelManagementV2Component_Conditional_2_Conditional_24_Template, 7, 2, "div", 21)(25, ModelManagementV2Component_Conditional_2_Conditional_25_Template, 2, 1);
507
+ i0.ɵɵelementEnd()()();
508
+ } if (rf & 2) {
509
+ const ctx_r0 = i0.ɵɵnextContext();
510
+ i0.ɵɵadvance(7);
511
+ i0.ɵɵconditional(ctx_r0.showFilters ? 7 : 8);
512
+ i0.ɵɵadvance(3);
513
+ i0.ɵɵtextInterpolate1("", ctx_r0.filteredModels.length, " models");
514
+ i0.ɵɵadvance(3);
515
+ i0.ɵɵclassProp("active", ctx_r0.viewMode === "grid");
516
+ i0.ɵɵadvance(2);
517
+ i0.ɵɵclassProp("active", ctx_r0.viewMode === "list");
518
+ i0.ɵɵadvance(6);
519
+ i0.ɵɵconditional(ctx_r0.showFilters ? 21 : -1);
520
+ i0.ɵɵadvance(3);
521
+ i0.ɵɵconditional(ctx_r0.filteredModels.length === 0 ? 24 : 25);
522
+ } }
523
+ /**
524
+ * Tree-shaking prevention function - ensures component is included in builds
525
+ */
526
+ export function LoadAIModelsResource() {
527
+ // Force inclusion in production builds
528
+ }
529
+ /**
530
+ * AI Models Resource - displays AI model management
531
+ * Extends BaseResourceComponent to work with the resource type system
532
+ */
533
+ let ModelManagementV2Component = class ModelManagementV2Component extends BaseResourceComponent {
534
+ sharedService;
535
+ navigationService;
536
+ // View state
537
+ viewMode = 'grid';
538
+ isLoading = true;
539
+ showFilters = true;
540
+ expandedModelId = null;
541
+ // Data - Keep as AIModelEntityExtended to preserve getters
542
+ models = [];
543
+ filteredModels = [];
544
+ vendors = [];
545
+ modelTypes = [];
546
+ // Filtering
547
+ searchTerm = '';
548
+ searchSubject = new BehaviorSubject('');
549
+ selectedVendor = 'all';
550
+ selectedType = 'all';
551
+ selectedStatus = 'all';
552
+ powerRankRange = { min: 0, max: 10 };
553
+ speedRankRange = { min: 0, max: 10 };
554
+ costRankRange = { min: 0, max: 10 };
555
+ // Sorting
556
+ sortBy = 'name';
557
+ sortOptions = [
558
+ { value: 'name', label: 'Name' },
559
+ { value: 'vendor', label: 'Vendor' },
560
+ { value: 'type', label: 'Type' },
561
+ { value: 'powerRank', label: 'Power Rank' },
562
+ { value: 'speedRank', label: 'Speed Rank' },
563
+ { value: 'costRank', label: 'Cost Rank' },
564
+ { value: 'created', label: 'Created Date' },
565
+ { value: 'updated', label: 'Updated Date' }
566
+ ];
567
+ // Max rank values calculated from all models
568
+ maxPowerRank = 10;
569
+ maxSpeedRank = 10;
570
+ maxCostRank = 10;
571
+ // Loading messages
572
+ loadingMessages = [
573
+ 'Loading AI models...',
574
+ 'Fetching vendor information...',
575
+ 'Calculating rankings...',
576
+ 'Almost ready...'
577
+ ];
578
+ currentLoadingMessage = this.loadingMessages[0];
579
+ loadingMessageIndex = 0;
580
+ loadingMessageInterval;
581
+ destroy$ = new Subject();
582
+ constructor(sharedService, navigationService) {
583
+ super();
584
+ this.sharedService = sharedService;
585
+ this.navigationService = navigationService;
586
+ }
587
+ ngOnInit() {
588
+ this.setupSearchListener();
589
+ this.startLoadingMessages();
590
+ this.loadInitialData();
591
+ if (this.Data?.Configuration) {
592
+ this.applyInitialState(this.Data.Configuration);
593
+ }
594
+ }
595
+ ngOnDestroy() {
596
+ this.destroy$.next();
597
+ this.destroy$.complete();
598
+ if (this.loadingMessageInterval) {
599
+ clearInterval(this.loadingMessageInterval);
600
+ }
601
+ }
602
+ setupSearchListener() {
603
+ this.searchSubject.pipe(debounceTime(300), distinctUntilChanged(), takeUntil(this.destroy$)).subscribe(searchTerm => {
604
+ this.searchTerm = searchTerm;
605
+ this.applyFilters();
606
+ });
607
+ }
608
+ startLoadingMessages() {
609
+ this.loadingMessageInterval = setInterval(() => {
610
+ this.loadingMessageIndex = (this.loadingMessageIndex + 1) % this.loadingMessages.length;
611
+ this.currentLoadingMessage = this.loadingMessages[this.loadingMessageIndex];
612
+ }, 2000);
613
+ }
614
+ async loadInitialData() {
615
+ try {
616
+ const rv = new RunView();
617
+ // Load models with proper generic typing
618
+ const modelResults = await rv.RunView({
619
+ EntityName: 'AI Models',
620
+ OrderBy: 'Name',
621
+ MaxRows: 1000
622
+ });
623
+ // Load vendors and types in parallel
624
+ const [vendorResults, typeResults] = await Promise.all([
625
+ rv.RunView({
626
+ EntityName: 'MJ: AI Vendors',
627
+ OrderBy: 'Name',
628
+ MaxRows: 1000
629
+ }),
630
+ rv.RunView({
631
+ EntityName: 'AI Model Types',
632
+ OrderBy: 'Name',
633
+ MaxRows: 1000
634
+ })
635
+ ]);
636
+ // Results are now properly typed, no casting needed
637
+ this.vendors = vendorResults.Results;
638
+ this.modelTypes = typeResults.Results;
639
+ // Log summary data
640
+ // Create lookup maps
641
+ const vendorMap = new Map(this.vendors.map(v => [v.ID, v.Name]));
642
+ const typeMap = new Map(this.modelTypes.map(t => [t.ID, t.Name]));
643
+ // Transform models to display format - Results already typed as AIModelEntityExtended[]
644
+ this.models = modelResults.Results.map((model, index) => {
645
+ // Find vendor ID by matching vendor name
646
+ let vendorId;
647
+ if (model.Vendor) {
648
+ const vendor = this.vendors.find(v => v.Name === model.Vendor);
649
+ vendorId = vendor?.ID;
650
+ }
651
+ // Don't spread the model - it loses getter properties!
652
+ // Instead, augment the model with display properties
653
+ const modelWithDisplay = model;
654
+ modelWithDisplay.VendorID = vendorId;
655
+ modelWithDisplay.VendorName = model.Vendor || 'No Vendor';
656
+ modelWithDisplay.ModelTypeName = model.AIModelTypeID ? typeMap.get(model.AIModelTypeID) || 'Unknown' : 'No Type';
657
+ return model;
658
+ });
659
+ // Calculate max values for each rank type from ALL models
660
+ this.maxPowerRank = Math.max(...this.models.map(m => m.PowerRank || 0), 10);
661
+ this.maxSpeedRank = Math.max(...this.models.map(m => m.SpeedRank || 0), 10);
662
+ this.maxCostRank = Math.max(...this.models.map(m => m.CostRank || 0), 10);
663
+ // Update filter ranges based on actual max values
664
+ this.powerRankRange = { min: 0, max: this.maxPowerRank };
665
+ this.speedRankRange = { min: 0, max: this.maxSpeedRank };
666
+ this.costRankRange = { min: 0, max: this.maxCostRank };
667
+ this.filteredModels = [...this.models];
668
+ this.sortModels();
669
+ this.applyFilters();
670
+ }
671
+ catch (error) {
672
+ console.error('Error loading model data:', error);
673
+ this.sharedService.CreateSimpleNotification('Error loading models', 'error', 3000);
674
+ }
675
+ finally {
676
+ this.isLoading = false;
677
+ if (this.loadingMessageInterval) {
678
+ clearInterval(this.loadingMessageInterval);
679
+ }
680
+ this.NotifyLoadComplete();
681
+ }
682
+ }
683
+ formatRank(rank, rankType) {
684
+ if (rank === null)
685
+ return 'N/A';
686
+ // Determine which max value to use
687
+ let maxValue = 10;
688
+ if (rankType === 'power') {
689
+ maxValue = this.maxPowerRank;
690
+ }
691
+ else if (rankType === 'speed') {
692
+ maxValue = this.maxSpeedRank;
693
+ }
694
+ else if (rankType === 'cost') {
695
+ maxValue = this.maxCostRank;
696
+ }
697
+ return `${rank}/${maxValue}`;
698
+ }
699
+ applyInitialState(state) {
700
+ if (state.viewMode)
701
+ this.viewMode = state.viewMode;
702
+ if (state.showFilters !== undefined)
703
+ this.showFilters = state.showFilters;
704
+ if (state.searchTerm)
705
+ this.searchTerm = state.searchTerm;
706
+ if (state.selectedVendor)
707
+ this.selectedVendor = state.selectedVendor;
708
+ if (state.selectedType)
709
+ this.selectedType = state.selectedType;
710
+ if (state.selectedStatus)
711
+ this.selectedStatus = state.selectedStatus;
712
+ if (state.sortBy)
713
+ this.sortBy = state.sortBy;
714
+ if (state.powerRankRange)
715
+ this.powerRankRange = state.powerRankRange;
716
+ if (state.speedRankRange)
717
+ this.speedRankRange = state.speedRankRange;
718
+ if (state.costRankRange)
719
+ this.costRankRange = state.costRankRange;
720
+ }
721
+ onSearchChange(value) {
722
+ this.searchSubject.next(value);
723
+ }
724
+ toggleFilters() {
725
+ this.showFilters = !this.showFilters;
726
+ }
727
+ toggleFilterPanel() {
728
+ this.showFilters = !this.showFilters;
729
+ }
730
+ setViewMode(mode) {
731
+ this.viewMode = mode;
732
+ this.expandedModelId = null;
733
+ }
734
+ toggleModelExpansion(modelId) {
735
+ this.expandedModelId = this.expandedModelId === modelId ? null : modelId;
736
+ }
737
+ applyFilters() {
738
+ this.filteredModels = this.models.filter(m => {
739
+ const model = m;
740
+ // Search filter
741
+ if (this.searchTerm) {
742
+ const searchLower = this.searchTerm.toLowerCase();
743
+ const matchesSearch = model.Name?.toLowerCase().includes(searchLower) ||
744
+ model.Description?.toLowerCase().includes(searchLower) ||
745
+ model.VendorName?.toLowerCase().includes(searchLower) ||
746
+ model.ModelTypeName?.toLowerCase().includes(searchLower);
747
+ if (!matchesSearch)
748
+ return false;
749
+ }
750
+ // Vendor filter
751
+ if (this.selectedVendor !== 'all' && model.VendorID !== this.selectedVendor) {
752
+ return false;
753
+ }
754
+ // Type filter
755
+ if (this.selectedType !== 'all' && model.AIModelTypeID !== this.selectedType) {
756
+ return false;
757
+ }
758
+ // Status filter
759
+ if (this.selectedStatus !== 'all') {
760
+ const isActive = model.IsActive === true;
761
+ if (this.selectedStatus === 'active' && !isActive)
762
+ return false;
763
+ if (this.selectedStatus === 'inactive' && isActive)
764
+ return false;
765
+ }
766
+ // Rank filters
767
+ if (model.PowerRank !== null && (model.PowerRank < this.powerRankRange.min || model.PowerRank > this.powerRankRange.max)) {
768
+ return false;
769
+ }
770
+ if (model.SpeedRank !== null && (model.SpeedRank < this.speedRankRange.min || model.SpeedRank > this.speedRankRange.max)) {
771
+ return false;
772
+ }
773
+ if (model.CostRank !== null && (model.CostRank < this.costRankRange.min || model.CostRank > this.costRankRange.max)) {
774
+ return false;
775
+ }
776
+ return true;
777
+ });
778
+ this.sortModels();
779
+ }
780
+ sortModels() {
781
+ this.filteredModels.sort((a, b) => {
782
+ const modelA = a;
783
+ const modelB = b;
784
+ switch (this.sortBy) {
785
+ case 'name':
786
+ return (modelA.Name || '').localeCompare(modelB.Name || '');
787
+ case 'vendor':
788
+ return (modelA.VendorName || '').localeCompare(modelB.VendorName || '');
789
+ case 'type':
790
+ return (modelA.ModelTypeName || '').localeCompare(modelB.ModelTypeName || '');
791
+ case 'powerRank':
792
+ return (modelB.PowerRank || 0) - (modelA.PowerRank || 0);
793
+ case 'speedRank':
794
+ return (modelB.SpeedRank || 0) - (modelA.SpeedRank || 0);
795
+ case 'costRank':
796
+ return (modelA.CostRank || 0) - (modelB.CostRank || 0);
797
+ case 'created':
798
+ return new Date(modelB.__mj_CreatedAt).getTime() - new Date(modelA.__mj_CreatedAt).getTime();
799
+ case 'updated':
800
+ return new Date(modelB.__mj_UpdatedAt).getTime() - new Date(modelA.__mj_UpdatedAt).getTime();
801
+ default:
802
+ return 0;
803
+ }
804
+ });
805
+ }
806
+ onVendorChange(vendorId) {
807
+ this.selectedVendor = vendorId;
808
+ this.applyFilters();
809
+ }
810
+ onTypeChange(typeId) {
811
+ this.selectedType = typeId;
812
+ this.applyFilters();
813
+ }
814
+ onStatusChange(status) {
815
+ this.selectedStatus = status;
816
+ this.applyFilters();
817
+ }
818
+ onSortChange(sortBy) {
819
+ this.sortBy = sortBy;
820
+ this.sortModels();
821
+ }
822
+ async toggleModelStatus(model, event) {
823
+ event.stopPropagation();
824
+ try {
825
+ model.IsActive = !model.IsActive;
826
+ if (await model.Save()) {
827
+ this.sharedService.CreateSimpleNotification(`Model ${model.IsActive ? 'activated' : 'deactivated'} successfully`, 'success', 3000);
828
+ }
829
+ else {
830
+ // Revert on failure
831
+ model.IsActive = !model.IsActive;
832
+ throw new Error('Failed to save model status');
833
+ }
834
+ }
835
+ catch (error) {
836
+ console.error('Error toggling model status:', error);
837
+ this.sharedService.CreateSimpleNotification('Error updating model status', 'error', 3000);
838
+ }
839
+ }
840
+ openModel(modelId) {
841
+ const compositeKey = new CompositeKey([{ FieldName: 'ID', Value: modelId }]);
842
+ this.navigationService.OpenEntityRecord('AI Models', compositeKey);
843
+ }
844
+ async createNewModel() {
845
+ try {
846
+ const md = new Metadata();
847
+ const newModel = await md.GetEntityObject('AI Models');
848
+ if (newModel) {
849
+ newModel.Name = 'New AI Model';
850
+ newModel.IsActive = true;
851
+ if (await newModel.Save()) {
852
+ const compositeKey = new CompositeKey([{ FieldName: 'ID', Value: newModel.ID }]);
853
+ this.navigationService.OpenEntityRecord('AI Models', compositeKey);
854
+ // Reload the data
855
+ await this.loadInitialData();
856
+ }
857
+ }
858
+ }
859
+ catch (error) {
860
+ console.error('Error creating new model:', error);
861
+ this.sharedService.CreateSimpleNotification('Error creating model', 'error', 3000);
862
+ }
863
+ }
864
+ getModelIcon(model) {
865
+ const typeName = model.ModelTypeName?.toLowerCase();
866
+ if (typeName?.includes('chat') || typeName?.includes('conversation')) {
867
+ return 'fa-solid fa-comments';
868
+ }
869
+ else if (typeName?.includes('image') || typeName?.includes('vision')) {
870
+ return 'fa-solid fa-image';
871
+ }
872
+ else if (typeName?.includes('audio') || typeName?.includes('speech')) {
873
+ return 'fa-solid fa-microphone';
874
+ }
875
+ else if (typeName?.includes('embed')) {
876
+ return 'fa-solid fa-vector-square';
877
+ }
878
+ return 'fa-solid fa-microchip';
879
+ }
880
+ getRankClass(rank, rankType) {
881
+ if (rank === null || rank === 0)
882
+ return 'rank-none';
883
+ // Determine which max value to use
884
+ let maxValue = 10;
885
+ if (rankType === 'power') {
886
+ maxValue = this.maxPowerRank;
887
+ }
888
+ else if (rankType === 'speed') {
889
+ maxValue = this.maxSpeedRank;
890
+ }
891
+ else if (rankType === 'cost') {
892
+ maxValue = this.maxCostRank;
893
+ }
894
+ // Calculate percentage of max
895
+ const percentage = (rank / maxValue) * 100;
896
+ if (percentage >= 70)
897
+ return 'rank-high';
898
+ if (percentage >= 40)
899
+ return 'rank-medium';
900
+ return 'rank-low';
901
+ }
902
+ get hasActiveFilters() {
903
+ return this.searchTerm !== '' ||
904
+ this.selectedVendor !== 'all' ||
905
+ this.selectedType !== 'all' ||
906
+ this.selectedStatus !== 'all' ||
907
+ this.powerRankRange.min > 0 ||
908
+ this.powerRankRange.max < this.maxPowerRank ||
909
+ this.speedRankRange.min > 0 ||
910
+ this.speedRankRange.max < this.maxSpeedRank ||
911
+ this.costRankRange.min > 0 ||
912
+ this.costRankRange.max < this.maxCostRank;
913
+ }
914
+ clearFilters() {
915
+ this.searchTerm = '';
916
+ this.selectedVendor = 'all';
917
+ this.selectedType = 'all';
918
+ this.selectedStatus = 'all';
919
+ this.powerRankRange = { min: 0, max: this.maxPowerRank };
920
+ this.speedRankRange = { min: 0, max: this.maxSpeedRank };
921
+ this.costRankRange = { min: 0, max: this.maxCostRank };
922
+ this.searchSubject.next('');
923
+ this.applyFilters();
924
+ }
925
+ formatTokenLimit(limit) {
926
+ if (limit >= 1000000) {
927
+ return Math.floor(limit / 1000000) + 'M';
928
+ }
929
+ else if (limit >= 1000) {
930
+ return Math.floor(limit / 1000) + 'K';
931
+ }
932
+ return limit.toString();
933
+ }
934
+ validateAndApplyRankFilters(rankType) {
935
+ // Get the appropriate range and max value based on type
936
+ let range = rankType === 'power' ? this.powerRankRange :
937
+ rankType === 'speed' ? this.speedRankRange :
938
+ this.costRankRange;
939
+ let maxValue = rankType === 'power' ? this.maxPowerRank :
940
+ rankType === 'speed' ? this.maxSpeedRank :
941
+ this.maxCostRank;
942
+ // Ensure min is not greater than max
943
+ if (range.min > range.max) {
944
+ // Swap the values
945
+ const temp = range.min;
946
+ range.min = range.max;
947
+ range.max = temp;
948
+ }
949
+ // Ensure values are within bounds
950
+ range.min = Math.max(0, Math.min(maxValue, range.min));
951
+ range.max = Math.max(0, Math.min(maxValue, range.max));
952
+ // Apply the filters
953
+ this.applyFilters();
954
+ }
955
+ // BaseResourceComponent abstract method implementations
956
+ async GetResourceDisplayName(data) {
957
+ return 'Models';
958
+ }
959
+ async GetResourceIconClass(data) {
960
+ return 'fa-solid fa-microchip';
961
+ }
962
+ static ɵfac = function ModelManagementV2Component_Factory(t) { return new (t || ModelManagementV2Component)(i0.ɵɵdirectiveInject(i1.SharedService), i0.ɵɵdirectiveInject(i1.NavigationService)); };
963
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ModelManagementV2Component, selectors: [["app-model-management-v2"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 3, vars: 1, consts: [[1, "model-management-v2"], [1, "loading-container"], ["size", "large", 3, "text"], [1, "dashboard-header"], [1, "header-info"], [1, "dashboard-title"], [1, "fa-solid", "fa-microchip"], ["type", "button", "title", "Toggle Filters", 1, "filter-toggle-btn", 3, "click"], [1, "fa-solid", "fa-filter"], [1, "item-count"], [1, "header-controls"], [1, "view-toggle"], ["type", "button", "title", "Grid View", 1, "view-btn", 3, "click"], [1, "fa-solid", "fa-grip"], ["type", "button", "title", "List View", 1, "view-btn", 3, "click"], [1, "fa-solid", "fa-list"], ["type", "button", "title", "Create New Model", 1, "control-btn", "primary", 3, "click"], [1, "fa-solid", "fa-plus"], ["orientation", "horizontal"], ["size", "320", "min", "250", "max", "400"], [1, "content-area"], [1, "empty-state"], [1, "filter-panel"], [1, "filter-panel-header"], [1, "filter-summary-inline"], [1, "summary-value"], [1, "summary-label"], [1, "close-btn", 3, "click"], [1, "fa-solid", "fa-times"], [1, "filter-content"], [1, "filter-group"], [1, "filter-label"], [1, "fa-solid", "fa-search"], ["type", "text", "placeholder", "Search models...", 1, "filter-input", 3, "input", "value"], [1, "fa-solid", "fa-sort"], [1, "filter-select", 3, "change", "value"], [3, "value"], [1, "fa-solid", "fa-building"], ["value", "all"], [1, "fa-solid", "fa-toggle-on"], ["value", "active"], ["value", "inactive"], [1, "fa-solid", "fa-bolt"], [1, "rank-filter-inputs"], ["type", "number", "min", "0", "placeholder", "Min", 1, "rank-input", 3, "ngModelChange", "change", "max", "ngModel"], [1, "rank-separator"], ["type", "number", "min", "0", "placeholder", "Max", 1, "rank-input", 3, "ngModelChange", "change", "max", "ngModel"], [1, "filter-actions"], ["title", "Reset all filters", 1, "reset-btn", 3, "click"], [1, "fa-solid", "fa-undo"], [1, "fa-solid", "fa-microchip", "fa-4x"], [1, "primary-action"], [1, "primary-action", 3, "click"], [1, "model-grid"], [1, "model-list"], [1, "model-card", 3, "expanded"], [1, "model-card"], [1, "card-header", 3, "click"], [1, "model-info"], [1, "model-icon"], [1, "model-details"], [1, "model-name"], [1, "model-meta"], [1, "meta-item"], [1, "meta-item", "status-active"], [1, "meta-item", "status-inactive"], [1, "fa-solid", "fa-chevron-down", "expand-icon"], [1, "card-body"], [1, "model-description"], [1, "model-description", "text-muted"], [1, "expanded-content"], [1, "card-actions"], ["type", "button", "title", "Open Model", 1, "action-btn", 3, "click"], [1, "fa-solid", "fa-external-link-alt"], [1, "fa-solid", "fa-circle", 2, "font-size", "8px"], [1, "model-stats"], [1, "stat-item"], [1, "stat-label"], [1, "stat-value"], [1, "data-table"], [1, "name-cell"], [1, "rank-badge"], [1, "status-badge"], [1, "action-button", "small", 3, "click"], [1, "fa-solid", "fa-edit"]], template: function ModelManagementV2Component_Template(rf, ctx) { if (rf & 1) {
964
+ i0.ɵɵelementStart(0, "div", 0);
965
+ i0.ɵɵtemplate(1, ModelManagementV2Component_Conditional_1_Template, 2, 1, "div", 1)(2, ModelManagementV2Component_Conditional_2_Template, 26, 8);
966
+ i0.ɵɵelementEnd();
967
+ } if (rf & 2) {
968
+ i0.ɵɵadvance();
969
+ i0.ɵɵconditional(ctx.isLoading ? 1 : 2);
970
+ } }, dependencies: [i2.NgSelectOption, i2.ɵNgSelectMultipleOption, i2.DefaultValueAccessor, i2.NumberValueAccessor, i2.NgControlStatus, i2.MinValidator, i2.MaxValidator, i2.NgModel, i3.SplitterComponent, i3.SplitterPaneComponent, i4.LoadingComponent], styles: [".model-management-v2[_ngcontent-%COMP%] {\n height: 100%;\n display: flex;\n flex-direction: column;\n background-color: #f5f7fa;\n}\n\n.loading-container[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n background-color: #f5f7fa;\n}\n\n.loading-content[_ngcontent-%COMP%] {\n text-align: center;\n}\n\n.loading-spinner[_ngcontent-%COMP%] {\n display: inline-block;\n margin-bottom: 16px;\n}\n\n.spinner-ring[_ngcontent-%COMP%] {\n display: inline-block;\n width: 40px;\n height: 40px;\n margin: 3px;\n border-radius: 50%;\n border: 3px solid #17a2b8;\n border-color: #17a2b8 transparent #17a2b8 transparent;\n animation: _ngcontent-%COMP%_spinner-ring 1.2s linear infinite;\n}\n\n@keyframes _ngcontent-%COMP%_spinner-ring {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n.loading-text[_ngcontent-%COMP%] {\n color: #6c757d;\n font-size: 14px;\n}\n\n.dashboard-header[_ngcontent-%COMP%] {\n background: white;\n padding: 16px 24px;\n border-bottom: 1px solid #e0e6ed;\n display: flex;\n justify-content: space-between;\n align-items: center;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.04);\n}\n\n.header-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.dashboard-title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 20px;\n font-weight: 600;\n color: #2c3e50;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.dashboard-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #17a2b8;\n}\n\n.filter-toggle-btn[_ngcontent-%COMP%] {\n background: #f8f9fa;\n border: 1px solid #dee2e6;\n padding: 8px 16px;\n border-radius: 6px;\n font-size: 14px;\n color: #495057;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.filter-toggle-btn[_ngcontent-%COMP%]:hover {\n background: #e9ecef;\n border-color: #ced4da;\n}\n\n.item-count[_ngcontent-%COMP%] {\n color: #6c757d;\n font-size: 14px;\n font-weight: 500;\n}\n\n.header-controls[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.view-toggle[_ngcontent-%COMP%] {\n display: flex;\n background: #f8f9fa;\n border-radius: 6px;\n padding: 2px;\n border: 1px solid #dee2e6;\n}\n\n.view-btn[_ngcontent-%COMP%] {\n background: transparent;\n border: none;\n padding: 6px 12px;\n border-radius: 4px;\n color: #6c757d;\n cursor: pointer;\n transition: all 0.2s ease;\n font-size: 16px;\n}\n\n.view-btn[_ngcontent-%COMP%]:hover {\n color: #495057;\n}\n\n.view-btn.active[_ngcontent-%COMP%] {\n background: white;\n color: #17a2b8;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);\n}\n\n.control-btn[_ngcontent-%COMP%] {\n background: white;\n border: 1px solid #dee2e6;\n padding: 8px 16px;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n color: #495057;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.control-btn[_ngcontent-%COMP%]:hover {\n background: #f8f9fa;\n border-color: #ced4da;\n}\n\n.control-btn.primary[_ngcontent-%COMP%] {\n background: #17a2b8;\n border-color: #17a2b8;\n color: white;\n}\n\n.control-btn.primary[_ngcontent-%COMP%]:hover {\n background: #1485a3;\n border-color: #1485a3;\n}\n\nkendo-splitter[_ngcontent-%COMP%] {\n flex: 1;\n background-color: #f5f7fa;\n margin-top: 8px;\n}\n\n.filter-panel[_ngcontent-%COMP%] {\n height: 100%;\n background: white;\n border-right: 1px solid #e0e0e0;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.filter-panel-header[_ngcontent-%COMP%] {\n padding: 16px;\n border-bottom: 1px solid #f0f0f0;\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-shrink: 0;\n}\n.filter-panel-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #2c3e50;\n flex: 1;\n}\n.filter-panel-header[_ngcontent-%COMP%] .filter-summary-inline[_ngcontent-%COMP%] {\n display: flex;\n align-items: baseline;\n gap: 4px;\n margin-right: 12px;\n font-size: 12px;\n}\n.filter-panel-header[_ngcontent-%COMP%] .filter-summary-inline[_ngcontent-%COMP%] .summary-value[_ngcontent-%COMP%] {\n font-weight: 600;\n color: #17a2b8;\n}\n.filter-panel-header[_ngcontent-%COMP%] .filter-summary-inline[_ngcontent-%COMP%] .summary-label[_ngcontent-%COMP%] {\n color: #6c757d;\n}\n.filter-panel-header[_ngcontent-%COMP%] .close-btn[_ngcontent-%COMP%] {\n background: none;\n border: none;\n padding: 4px 8px;\n cursor: pointer;\n color: #6c757d;\n border-radius: 4px;\n transition: all 0.2s;\n}\n.filter-panel-header[_ngcontent-%COMP%] .close-btn[_ngcontent-%COMP%]:hover {\n background: #f0f0f0;\n color: #333;\n}\n\n.filter-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 16px;\n}\n\n.filter-group[_ngcontent-%COMP%] {\n margin-bottom: 20px;\n}\n.filter-group[_ngcontent-%COMP%] .filter-label[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 8px;\n font-size: 12px;\n font-weight: 600;\n color: #6c757d;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n.filter-group[_ngcontent-%COMP%] .filter-label[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n color: #17a2b8;\n}\n\n.filter-input[_ngcontent-%COMP%], \n.filter-select[_ngcontent-%COMP%] {\n width: 100%;\n padding: 10px 12px;\n border: 1px solid #dee2e6;\n border-radius: 6px;\n font-size: 14px;\n background: white;\n transition: border-color 0.2s;\n box-sizing: border-box;\n}\n.filter-input[_ngcontent-%COMP%]:focus, \n.filter-select[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: #17a2b8;\n}\n.filter-input[_ngcontent-%COMP%]::placeholder, \n.filter-select[_ngcontent-%COMP%]::placeholder {\n color: #adb5bd;\n}\n\n.filter-select[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.rank-filter-inputs[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n align-items: center;\n margin-top: 6px;\n}\n\n.rank-input[_ngcontent-%COMP%] {\n width: 60px;\n padding: 6px 8px;\n border: 1px solid #ddd;\n border-radius: 4px;\n font-size: 12px;\n text-align: center;\n background: white;\n transition: border-color 0.2s;\n box-sizing: border-box;\n -moz-appearance: textfield;\n}\n.rank-input[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: #17a2b8;\n}\n.rank-input[_ngcontent-%COMP%]::placeholder {\n color: #999;\n font-size: 11px;\n}\n.rank-input[_ngcontent-%COMP%]::-webkit-inner-spin-button, .rank-input[_ngcontent-%COMP%]::-webkit-outer-spin-button {\n -webkit-appearance: none;\n margin: 0;\n}\n\n.rank-separator[_ngcontent-%COMP%] {\n color: #999;\n font-size: 12px;\n font-weight: 500;\n}\n\n.filter-actions[_ngcontent-%COMP%] {\n margin-top: 24px;\n padding-top: 16px;\n border-top: 1px solid #f0f0f0;\n}\n.filter-actions[_ngcontent-%COMP%] .reset-btn[_ngcontent-%COMP%] {\n width: 100%;\n padding: 10px 16px;\n background: #f8f9fa;\n border: 1px solid #dee2e6;\n border-radius: 6px;\n color: #6c757d;\n font-size: 14px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n transition: all 0.2s;\n}\n.filter-actions[_ngcontent-%COMP%] .reset-btn[_ngcontent-%COMP%]:hover {\n background: #e9ecef;\n border-color: #ced4da;\n color: #495057;\n}\n\n.content-area[_ngcontent-%COMP%] {\n height: 100%;\n padding: 24px;\n overflow-y: auto;\n background: #f5f7fa;\n}\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n text-align: center;\n color: #6c757d;\n}\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n opacity: 0.3;\n}\n.empty-state[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n font-size: 20px;\n font-weight: 600;\n color: #495057;\n}\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0 0 24px 0;\n font-size: 16px;\n}\n\n.model-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(380px, 1fr));\n gap: 20px;\n}\n\n.model-card[_ngcontent-%COMP%] {\n background: white;\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);\n border: 1px solid #e0e6ed;\n transition: all 0.3s ease;\n overflow: hidden;\n}\n\n.model-card[_ngcontent-%COMP%]:hover {\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);\n transform: translateY(-2px);\n}\n\n.model-card.expanded[_ngcontent-%COMP%] {\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.12);\n}\n\n.card-header[_ngcontent-%COMP%] {\n padding: 20px;\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n cursor: pointer;\n user-select: none;\n border-bottom: 1px solid #f0f4f8;\n}\n\n.model-info[_ngcontent-%COMP%] {\n display: flex;\n gap: 16px;\n flex: 1;\n}\n\n.model-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: #17a2b8;\n}\n\n.model-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: white;\n font-size: 20px;\n}\n\n.model-details[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.model-name[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #2c3e50;\n margin-bottom: 6px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.model-meta[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n flex-wrap: wrap;\n}\n\n.meta-item[_ngcontent-%COMP%] {\n font-size: 13px;\n color: #6c757d;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.meta-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n}\n\n.meta-item.status-active[_ngcontent-%COMP%] {\n color: #28a745;\n}\n\n.meta-item.status-inactive[_ngcontent-%COMP%] {\n color: #6c757d;\n}\n\n.expand-icon[_ngcontent-%COMP%] {\n font-size: 14px;\n color: #6c757d;\n transition: transform 0.3s ease;\n}\n\n.expand-icon.rotated[_ngcontent-%COMP%] {\n transform: rotate(180deg);\n}\n\n.card-body[_ngcontent-%COMP%] {\n padding: 0 20px 20px 20px;\n}\n\n.model-description[_ngcontent-%COMP%] {\n margin: 16px 0 0 0;\n font-size: 14px;\n line-height: 1.6;\n color: #6c757d;\n}\n\n.model-description.text-muted[_ngcontent-%COMP%] {\n font-style: italic;\n color: #adb5bd;\n}\n\n\n\n.expanded-content[_ngcontent-%COMP%] {\n margin-top: 16px;\n padding-top: 16px;\n border-top: 1px solid #f0f4f8;\n animation: _ngcontent-%COMP%_slideDown 0.3s ease;\n}\n\n@keyframes _ngcontent-%COMP%_slideDown {\n from {\n opacity: 0;\n transform: translateY(-10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n.model-stats[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));\n gap: 16px;\n}\n\n.stat-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.stat-label[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 600;\n color: #6c757d;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.stat-value[_ngcontent-%COMP%] {\n font-size: 14px;\n color: #495057;\n font-weight: 500;\n}\n\n\n\n.card-actions[_ngcontent-%COMP%] {\n padding: 16px 20px;\n background: #f8f9fa;\n border-top: 1px solid #e0e6ed;\n display: flex;\n gap: 12px;\n justify-content: flex-end;\n}\n\n.action-btn[_ngcontent-%COMP%] {\n background: white;\n border: 1px solid #dee2e6;\n padding: 6px 16px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n color: #495057;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.action-btn[_ngcontent-%COMP%]:hover {\n background: #f8f9fa;\n border-color: #ced4da;\n}\n\n.action-btn-primary[_ngcontent-%COMP%] {\n background: #17a2b8;\n border-color: #17a2b8;\n color: white;\n}\n\n.action-btn-primary[_ngcontent-%COMP%]:hover {\n background: #1485a3;\n border-color: #1485a3;\n}\n\n.model-list[_ngcontent-%COMP%] {\n background: white;\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);\n border: 1px solid #e0e6ed;\n overflow: hidden;\n}\n\n.data-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n}\n.data-table[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] {\n background-color: #f8f9fa;\n}\n.data-table[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] {\n border-bottom: 2px solid #dee2e6;\n}\n.data-table[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n padding: 12px 16px;\n text-align: left;\n font-size: 13px;\n font-weight: 600;\n color: #495057;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n.data-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] {\n border-bottom: 1px solid #e9ecef;\n transition: background-color 0.2s ease;\n}\n.data-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover {\n background-color: #f8f9fa;\n}\n.data-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n.data-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 16px;\n font-size: 14px;\n color: #495057;\n}\n\n.name-cell[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n color: #2c3e50;\n}\n.name-cell[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #17a2b8;\n}\n\n.rank-badge[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 4px 8px;\n border-radius: 4px;\n font-size: 12px;\n font-weight: 500;\n background-color: #f8f9fa;\n}\n.rank-badge.rank-high[_ngcontent-%COMP%] {\n background-color: #d4edda;\n color: #155724;\n}\n.rank-badge.rank-medium[_ngcontent-%COMP%] {\n background-color: #fff3cd;\n color: #856404;\n}\n.rank-badge.rank-low[_ngcontent-%COMP%] {\n background-color: #f8d7da;\n color: #721c24;\n}\n.rank-badge.rank-none[_ngcontent-%COMP%] {\n background-color: #e9ecef;\n color: #6c757d;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 4px 8px;\n border-radius: 4px;\n font-size: 12px;\n font-weight: 500;\n}\n.status-badge.active[_ngcontent-%COMP%] {\n background-color: #d4edda;\n color: #155724;\n}\n.status-badge.inactive[_ngcontent-%COMP%] {\n background-color: #f8d7da;\n color: #721c24;\n}\n\n@media (max-width: 768px) {\n .model-header[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n gap: 16px;\n }\n .header-right[_ngcontent-%COMP%] {\n width: 100%;\n justify-content: space-between;\n }\n .model-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n .stats-grid[_ngcontent-%COMP%], \n .ranks-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n}"] });
971
+ };
972
+ ModelManagementV2Component = __decorate([
973
+ RegisterClass(BaseResourceComponent, 'AIModelsResource')
974
+ ], ModelManagementV2Component);
975
+ export { ModelManagementV2Component };
976
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ModelManagementV2Component, [{
977
+ type: Component,
978
+ args: [{ selector: 'app-model-management-v2', template: "<div class=\"model-management-v2\">\n @if (isLoading) {\n <div class=\"loading-container\">\n <mj-loading [text]=\"currentLoadingMessage\" size=\"large\"></mj-loading>\n </div>\n } @else {\n <div class=\"dashboard-header\">\n <div class=\"header-info\">\n <h2 class=\"dashboard-title\">\n <i class=\"fa-solid fa-microchip\"></i>\n AI Models\n </h2>\n <button\n type=\"button\"\n class=\"filter-toggle-btn\"\n (click)=\"toggleFilters()\"\n title=\"Toggle Filters\">\n <i class=\"fa-solid fa-filter\"></i>\n @if (showFilters) {\n Hide Filters\n } @else {\n Show Filters\n }\n </button>\n <span class=\"item-count\">{{ filteredModels.length }} models</span>\n </div>\n\n <div class=\"header-controls\">\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-grip\"></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 primary\"\n (click)=\"createNewModel()\"\n title=\"Create New Model\">\n <i class=\"fa-solid fa-plus\"></i>\n New Model\n </button>\n </div>\n </div>\n\n <kendo-splitter orientation=\"horizontal\">\n @if (showFilters) {\n <kendo-splitter-pane size=\"320\" min=\"250\" max=\"400\">\n <div class=\"filter-panel\">\n <div class=\"filter-panel-header\">\n <h3>Model Filters</h3>\n <div class=\"filter-summary-inline\">\n <span class=\"summary-value\">{{ filteredModels.length }}</span>\n <span class=\"summary-label\">of {{ models.length }}</span>\n </div>\n <button class=\"close-btn\" (click)=\"toggleFilterPanel()\">\n <span class=\"fa-solid fa-times\"></span>\n </button>\n </div>\n \n <div class=\"filter-content\">\n <!-- Search Filter -->\n <div class=\"filter-group\">\n <label class=\"filter-label\">\n <span class=\"fa-solid fa-search\"></span>\n Name\n </label>\n <input \n type=\"text\"\n class=\"filter-input\"\n placeholder=\"Search models...\"\n [value]=\"searchTerm\"\n (input)=\"onSearchChange($any($event.target).value)\"\n />\n </div>\n\n <!-- Sort By Filter -->\n <div class=\"filter-group\">\n <label class=\"filter-label\">\n <span class=\"fa-solid fa-sort\"></span>\n Sort By\n </label>\n <select class=\"filter-select\" [value]=\"sortBy\" (change)=\"onSortChange($any($event.target).value)\">\n @for (option of sortOptions; track option.value) {\n <option [value]=\"option.value\">{{ option.label }}</option>\n }\n </select>\n </div>\n\n <!-- Vendor Filter -->\n <div class=\"filter-group\">\n <label class=\"filter-label\">\n <span class=\"fa-solid fa-building\"></span>\n Vendor\n </label>\n <select class=\"filter-select\" [value]=\"selectedVendor\" (change)=\"onVendorChange($any($event.target).value)\">\n <option value=\"all\">All Vendors</option>\n @for (vendor of vendors; track vendor.ID) {\n <option [value]=\"vendor.ID\">{{ vendor.Name }}</option>\n }\n </select>\n </div>\n\n <!-- Type Filter -->\n <div class=\"filter-group\">\n <label class=\"filter-label\">\n <span class=\"fa-solid fa-microchip\"></span>\n Type\n </label>\n <select class=\"filter-select\" [value]=\"selectedType\" (change)=\"onTypeChange($any($event.target).value)\">\n <option value=\"all\">All Types</option>\n @for (type of modelTypes; track type.ID) {\n <option [value]=\"type.ID\">{{ type.Name }}</option>\n }\n </select>\n </div>\n\n <!-- Status Filter -->\n <div class=\"filter-group\">\n <label class=\"filter-label\">\n <span class=\"fa-solid fa-toggle-on\"></span>\n Status\n </label>\n <select class=\"filter-select\" [value]=\"selectedStatus\" (change)=\"onStatusChange($any($event.target).value)\">\n <option value=\"all\">All Statuses</option>\n <option value=\"active\">Active</option>\n <option value=\"inactive\">Inactive</option>\n </select>\n </div>\n\n <!-- Power Rank Filter -->\n <div class=\"filter-group\">\n <label class=\"filter-label\">\n <span class=\"fa-solid fa-bolt\"></span>\n Power Rank\n </label>\n <div class=\"rank-filter-inputs\">\n <input \n type=\"number\" \n min=\"0\" \n [max]=\"maxPowerRank\" \n [(ngModel)]=\"powerRankRange.min\"\n (change)=\"validateAndApplyRankFilters('power')\"\n class=\"rank-input\"\n placeholder=\"Min\"\n />\n <span class=\"rank-separator\">-</span>\n <input \n type=\"number\" \n min=\"0\" \n [max]=\"maxPowerRank\" \n [(ngModel)]=\"powerRankRange.max\"\n (change)=\"validateAndApplyRankFilters('power')\"\n class=\"rank-input\"\n placeholder=\"Max\"\n />\n </div>\n </div>\n\n <!-- Reset Button -->\n <div class=\"filter-actions\">\n <button class=\"reset-btn\" (click)=\"clearFilters()\" title=\"Reset all filters\">\n <span class=\"fa-solid fa-undo\"></span>\n Reset Filters\n </button>\n </div>\n </div>\n </div>\n </kendo-splitter-pane>\n }\n\n <kendo-splitter-pane>\n <div class=\"content-area\">\n @if (filteredModels.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-microchip fa-4x\"></i>\n <h3>No models found</h3>\n <p>{{ hasActiveFilters ? 'Try adjusting your filters' : 'Create your first AI model to get started' }}</p>\n @if (!hasActiveFilters) {\n <button class=\"primary-action\" (click)=\"createNewModel()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create First Model\n </button>\n }\n </div>\n } @else {\n @switch (viewMode) {\n @case ('grid') {\n <div class=\"model-grid\">\n @for (model of filteredModels; track model.ID) {\n <div class=\"model-card\" [class.expanded]=\"expandedModelId === model.ID\">\n <!-- Card Header -->\n <div class=\"card-header\" (click)=\"toggleModelExpansion(model.ID)\">\n <div class=\"model-info\">\n <div class=\"model-icon\">\n <i [class]=\"getModelIcon(model)\"></i>\n </div>\n <div class=\"model-details\">\n <h4 class=\"model-name\">{{ model.Name || 'Unnamed Model' }}</h4>\n <div class=\"model-meta\">\n @if (model.Vendor) {\n <span class=\"meta-item\">\n <i class=\"fa-solid fa-building\"></i>\n {{ model.Vendor }}\n </span>\n }\n @if (model.AIModelType) {\n <span class=\"meta-item\">\n <i class=\"fa-solid fa-microchip\"></i>\n {{ model.AIModelType }}\n </span>\n }\n @if (model.IsActive) {\n <span class=\"meta-item status-active\">\n <i class=\"fa-solid fa-circle\" style=\"font-size: 8px;\"></i>\n Active\n </span>\n } @else {\n <span class=\"meta-item status-inactive\">\n <i class=\"fa-solid fa-circle\" style=\"font-size: 8px;\"></i>\n Inactive\n </span>\n }\n </div>\n </div>\n </div>\n\n <i class=\"fa-solid fa-chevron-down expand-icon\"\n [class.rotated]=\"expandedModelId === model.ID\"></i>\n </div>\n\n <!-- Card Body -->\n <div class=\"card-body\">\n @if (model.Description) {\n <p class=\"model-description\">{{ model.Description }}</p>\n } @else {\n <p class=\"model-description text-muted\">No description provided</p>\n }\n\n <!-- Expandable Content -->\n @if (expandedModelId === model.ID) {\n <div class=\"expanded-content\">\n <div class=\"model-stats\">\n <div class=\"stat-item\">\n <span class=\"stat-label\">Power Rank</span>\n <span class=\"stat-value\">{{ formatRank(model.PowerRank, 'power') }}</span>\n </div>\n <div class=\"stat-item\">\n <span class=\"stat-label\">Speed Rank</span>\n <span class=\"stat-value\">{{ formatRank(model.SpeedRank, 'speed') }}</span>\n </div>\n <div class=\"stat-item\">\n <span class=\"stat-label\">Cost Rank</span>\n <span class=\"stat-value\">{{ formatRank(model.CostRank, 'cost') }}</span>\n </div>\n @if (model.InputTokenLimit) {\n <div class=\"stat-item\">\n <span class=\"stat-label\">Token Limit</span>\n <span class=\"stat-value\">{{ formatTokenLimit(model.InputTokenLimit) }}</span>\n </div>\n }\n @if (model.APIName) {\n <div class=\"stat-item\">\n <span class=\"stat-label\">API Name</span>\n <span class=\"stat-value\">{{ model.APIName }}</span>\n </div>\n }\n @if (model.DriverClass) {\n <div class=\"stat-item\">\n <span class=\"stat-label\">Driver</span>\n <span class=\"stat-value\">{{ model.DriverClass }}</span>\n </div>\n }\n </div>\n </div>\n }\n </div>\n\n <!-- Card Actions -->\n <div class=\"card-actions\">\n <button\n type=\"button\"\n class=\"action-btn\"\n (click)=\"openModel(model.ID); $event.stopPropagation()\"\n title=\"Open Model\">\n <i class=\"fa-solid fa-external-link-alt\"></i>\n Open\n </button>\n </div>\n </div>\n }\n </div>\n }\n \n @case ('list') {\n <div class=\"model-list\">\n <table class=\"data-table\">\n <thead>\n <tr>\n <th>Name</th>\n <th>Vendor</th>\n <th>Type</th>\n <th>Power</th>\n <th>Speed</th>\n <th>Cost</th>\n <th>Status</th>\n <th>Actions</th>\n </tr>\n </thead>\n <tbody>\n @for (model of filteredModels; track model.ID) {\n <tr>\n <td>\n <div class=\"name-cell\">\n <i [class]=\"getModelIcon(model)\"></i>\n {{ model.Name || 'Unnamed Model' }}\n </div>\n </td>\n <td>{{ model.Vendor || '-' }}</td>\n <td>{{ model.AIModelType }}</td>\n <td>\n <span class=\"rank-badge\" [class]=\"getRankClass(model.PowerRank, 'power')\">\n {{ formatRank(model.PowerRank, 'power') }}\n </span>\n </td>\n <td>\n <span class=\"rank-badge\" [class]=\"getRankClass(model.SpeedRank, 'speed')\">\n {{ formatRank(model.SpeedRank, 'speed') }}\n </span>\n </td>\n <td>\n <span class=\"rank-badge\" [class]=\"getRankClass(model.CostRank, 'cost')\">\n {{ formatRank(model.CostRank, 'cost') }}\n </span>\n </td>\n <td>\n <span class=\"status-badge\" [class.active]=\"model.IsActive\" [class.inactive]=\"!model.IsActive\">\n {{ model.IsActive ? 'Active' : 'Inactive' }}\n </span>\n </td>\n <td>\n <button class=\"action-button small\" (click)=\"openModel(model.ID)\">\n <i class=\"fa-solid fa-edit\"></i>\n </button>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n }\n }\n </div>\n </kendo-splitter-pane>\n </kendo-splitter>\n }\n</div>", styles: [".model-management-v2 {\n height: 100%;\n display: flex;\n flex-direction: column;\n background-color: #f5f7fa;\n}\n\n.loading-container {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n background-color: #f5f7fa;\n}\n\n.loading-content {\n text-align: center;\n}\n\n.loading-spinner {\n display: inline-block;\n margin-bottom: 16px;\n}\n\n.spinner-ring {\n display: inline-block;\n width: 40px;\n height: 40px;\n margin: 3px;\n border-radius: 50%;\n border: 3px solid #17a2b8;\n border-color: #17a2b8 transparent #17a2b8 transparent;\n animation: spinner-ring 1.2s linear infinite;\n}\n\n@keyframes spinner-ring {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n.loading-text {\n color: #6c757d;\n font-size: 14px;\n}\n\n.dashboard-header {\n background: white;\n padding: 16px 24px;\n border-bottom: 1px solid #e0e6ed;\n display: flex;\n justify-content: space-between;\n align-items: center;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.04);\n}\n\n.header-info {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.dashboard-title {\n margin: 0;\n font-size: 20px;\n font-weight: 600;\n color: #2c3e50;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.dashboard-title i {\n color: #17a2b8;\n}\n\n.filter-toggle-btn {\n background: #f8f9fa;\n border: 1px solid #dee2e6;\n padding: 8px 16px;\n border-radius: 6px;\n font-size: 14px;\n color: #495057;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.filter-toggle-btn:hover {\n background: #e9ecef;\n border-color: #ced4da;\n}\n\n.item-count {\n color: #6c757d;\n font-size: 14px;\n font-weight: 500;\n}\n\n.header-controls {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.view-toggle {\n display: flex;\n background: #f8f9fa;\n border-radius: 6px;\n padding: 2px;\n border: 1px solid #dee2e6;\n}\n\n.view-btn {\n background: transparent;\n border: none;\n padding: 6px 12px;\n border-radius: 4px;\n color: #6c757d;\n cursor: pointer;\n transition: all 0.2s ease;\n font-size: 16px;\n}\n\n.view-btn:hover {\n color: #495057;\n}\n\n.view-btn.active {\n background: white;\n color: #17a2b8;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);\n}\n\n.control-btn {\n background: white;\n border: 1px solid #dee2e6;\n padding: 8px 16px;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n color: #495057;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.control-btn:hover {\n background: #f8f9fa;\n border-color: #ced4da;\n}\n\n.control-btn.primary {\n background: #17a2b8;\n border-color: #17a2b8;\n color: white;\n}\n\n.control-btn.primary:hover {\n background: #1485a3;\n border-color: #1485a3;\n}\n\nkendo-splitter {\n flex: 1;\n background-color: #f5f7fa;\n margin-top: 8px;\n}\n\n.filter-panel {\n height: 100%;\n background: white;\n border-right: 1px solid #e0e0e0;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.filter-panel-header {\n padding: 16px;\n border-bottom: 1px solid #f0f0f0;\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-shrink: 0;\n}\n.filter-panel-header h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #2c3e50;\n flex: 1;\n}\n.filter-panel-header .filter-summary-inline {\n display: flex;\n align-items: baseline;\n gap: 4px;\n margin-right: 12px;\n font-size: 12px;\n}\n.filter-panel-header .filter-summary-inline .summary-value {\n font-weight: 600;\n color: #17a2b8;\n}\n.filter-panel-header .filter-summary-inline .summary-label {\n color: #6c757d;\n}\n.filter-panel-header .close-btn {\n background: none;\n border: none;\n padding: 4px 8px;\n cursor: pointer;\n color: #6c757d;\n border-radius: 4px;\n transition: all 0.2s;\n}\n.filter-panel-header .close-btn:hover {\n background: #f0f0f0;\n color: #333;\n}\n\n.filter-content {\n flex: 1;\n overflow-y: auto;\n padding: 16px;\n}\n\n.filter-group {\n margin-bottom: 20px;\n}\n.filter-group .filter-label {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 8px;\n font-size: 12px;\n font-weight: 600;\n color: #6c757d;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n.filter-group .filter-label i {\n font-size: 12px;\n color: #17a2b8;\n}\n\n.filter-input,\n.filter-select {\n width: 100%;\n padding: 10px 12px;\n border: 1px solid #dee2e6;\n border-radius: 6px;\n font-size: 14px;\n background: white;\n transition: border-color 0.2s;\n box-sizing: border-box;\n}\n.filter-input:focus,\n.filter-select:focus {\n outline: none;\n border-color: #17a2b8;\n}\n.filter-input::placeholder,\n.filter-select::placeholder {\n color: #adb5bd;\n}\n\n.filter-select {\n cursor: pointer;\n}\n\n.rank-filter-inputs {\n display: flex;\n gap: 8px;\n align-items: center;\n margin-top: 6px;\n}\n\n.rank-input {\n width: 60px;\n padding: 6px 8px;\n border: 1px solid #ddd;\n border-radius: 4px;\n font-size: 12px;\n text-align: center;\n background: white;\n transition: border-color 0.2s;\n box-sizing: border-box;\n -moz-appearance: textfield;\n}\n.rank-input:focus {\n outline: none;\n border-color: #17a2b8;\n}\n.rank-input::placeholder {\n color: #999;\n font-size: 11px;\n}\n.rank-input::-webkit-inner-spin-button, .rank-input::-webkit-outer-spin-button {\n -webkit-appearance: none;\n margin: 0;\n}\n\n.rank-separator {\n color: #999;\n font-size: 12px;\n font-weight: 500;\n}\n\n.filter-actions {\n margin-top: 24px;\n padding-top: 16px;\n border-top: 1px solid #f0f0f0;\n}\n.filter-actions .reset-btn {\n width: 100%;\n padding: 10px 16px;\n background: #f8f9fa;\n border: 1px solid #dee2e6;\n border-radius: 6px;\n color: #6c757d;\n font-size: 14px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n transition: all 0.2s;\n}\n.filter-actions .reset-btn:hover {\n background: #e9ecef;\n border-color: #ced4da;\n color: #495057;\n}\n\n.content-area {\n height: 100%;\n padding: 24px;\n overflow-y: auto;\n background: #f5f7fa;\n}\n\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n text-align: center;\n color: #6c757d;\n}\n.empty-state i {\n margin-bottom: 24px;\n opacity: 0.3;\n}\n.empty-state h3 {\n margin: 0 0 8px 0;\n font-size: 20px;\n font-weight: 600;\n color: #495057;\n}\n.empty-state p {\n margin: 0 0 24px 0;\n font-size: 16px;\n}\n\n.model-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(380px, 1fr));\n gap: 20px;\n}\n\n.model-card {\n background: white;\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);\n border: 1px solid #e0e6ed;\n transition: all 0.3s ease;\n overflow: hidden;\n}\n\n.model-card:hover {\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);\n transform: translateY(-2px);\n}\n\n.model-card.expanded {\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.12);\n}\n\n.card-header {\n padding: 20px;\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n cursor: pointer;\n user-select: none;\n border-bottom: 1px solid #f0f4f8;\n}\n\n.model-info {\n display: flex;\n gap: 16px;\n flex: 1;\n}\n\n.model-icon {\n width: 48px;\n height: 48px;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: #17a2b8;\n}\n\n.model-icon i {\n color: white;\n font-size: 20px;\n}\n\n.model-details {\n flex: 1;\n min-width: 0;\n}\n\n.model-name {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #2c3e50;\n margin-bottom: 6px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.model-meta {\n display: flex;\n gap: 12px;\n flex-wrap: wrap;\n}\n\n.meta-item {\n font-size: 13px;\n color: #6c757d;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.meta-item i {\n font-size: 12px;\n}\n\n.meta-item.status-active {\n color: #28a745;\n}\n\n.meta-item.status-inactive {\n color: #6c757d;\n}\n\n.expand-icon {\n font-size: 14px;\n color: #6c757d;\n transition: transform 0.3s ease;\n}\n\n.expand-icon.rotated {\n transform: rotate(180deg);\n}\n\n.card-body {\n padding: 0 20px 20px 20px;\n}\n\n.model-description {\n margin: 16px 0 0 0;\n font-size: 14px;\n line-height: 1.6;\n color: #6c757d;\n}\n\n.model-description.text-muted {\n font-style: italic;\n color: #adb5bd;\n}\n\n/* Expanded Content */\n.expanded-content {\n margin-top: 16px;\n padding-top: 16px;\n border-top: 1px solid #f0f4f8;\n animation: slideDown 0.3s ease;\n}\n\n@keyframes slideDown {\n from {\n opacity: 0;\n transform: translateY(-10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n.model-stats {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));\n gap: 16px;\n}\n\n.stat-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.stat-label {\n font-size: 12px;\n font-weight: 600;\n color: #6c757d;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.stat-value {\n font-size: 14px;\n color: #495057;\n font-weight: 500;\n}\n\n/* Card Actions */\n.card-actions {\n padding: 16px 20px;\n background: #f8f9fa;\n border-top: 1px solid #e0e6ed;\n display: flex;\n gap: 12px;\n justify-content: flex-end;\n}\n\n.action-btn {\n background: white;\n border: 1px solid #dee2e6;\n padding: 6px 16px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n color: #495057;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.action-btn:hover {\n background: #f8f9fa;\n border-color: #ced4da;\n}\n\n.action-btn-primary {\n background: #17a2b8;\n border-color: #17a2b8;\n color: white;\n}\n\n.action-btn-primary:hover {\n background: #1485a3;\n border-color: #1485a3;\n}\n\n.model-list {\n background: white;\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);\n border: 1px solid #e0e6ed;\n overflow: hidden;\n}\n\n.data-table {\n width: 100%;\n border-collapse: collapse;\n}\n.data-table thead {\n background-color: #f8f9fa;\n}\n.data-table thead tr {\n border-bottom: 2px solid #dee2e6;\n}\n.data-table thead th {\n padding: 12px 16px;\n text-align: left;\n font-size: 13px;\n font-weight: 600;\n color: #495057;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n.data-table tbody tr {\n border-bottom: 1px solid #e9ecef;\n transition: background-color 0.2s ease;\n}\n.data-table tbody tr:hover {\n background-color: #f8f9fa;\n}\n.data-table tbody tr:last-child {\n border-bottom: none;\n}\n.data-table tbody td {\n padding: 16px;\n font-size: 14px;\n color: #495057;\n}\n\n.name-cell {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n color: #2c3e50;\n}\n.name-cell i {\n color: #17a2b8;\n}\n\n.rank-badge {\n display: inline-block;\n padding: 4px 8px;\n border-radius: 4px;\n font-size: 12px;\n font-weight: 500;\n background-color: #f8f9fa;\n}\n.rank-badge.rank-high {\n background-color: #d4edda;\n color: #155724;\n}\n.rank-badge.rank-medium {\n background-color: #fff3cd;\n color: #856404;\n}\n.rank-badge.rank-low {\n background-color: #f8d7da;\n color: #721c24;\n}\n.rank-badge.rank-none {\n background-color: #e9ecef;\n color: #6c757d;\n}\n\n.status-badge {\n display: inline-block;\n padding: 4px 8px;\n border-radius: 4px;\n font-size: 12px;\n font-weight: 500;\n}\n.status-badge.active {\n background-color: #d4edda;\n color: #155724;\n}\n.status-badge.inactive {\n background-color: #f8d7da;\n color: #721c24;\n}\n\n@media (max-width: 768px) {\n .model-header {\n flex-wrap: wrap;\n gap: 16px;\n }\n .header-right {\n width: 100%;\n justify-content: space-between;\n }\n .model-grid {\n grid-template-columns: 1fr;\n }\n .stats-grid,\n .ranks-grid {\n grid-template-columns: 1fr;\n }\n}\n"] }]
979
+ }], () => [{ type: i1.SharedService }, { type: i1.NavigationService }], null); })();
980
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ModelManagementV2Component, { className: "ModelManagementV2Component" }); })();
981
+ //# sourceMappingURL=model-management-v2.component.js.map