@memberjunction/ng-dashboards 5.34.0 → 5.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (348) hide show
  1. package/dist/AI/components/agents/agent-configuration.component.d.ts +51 -0
  2. package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
  3. package/dist/AI/components/agents/agent-configuration.component.js +399 -292
  4. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  5. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts +8 -2
  6. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts.map +1 -1
  7. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js +87 -85
  8. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js.map +1 -1
  9. package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts +75 -0
  10. package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts.map +1 -1
  11. package/dist/AI/components/analytics/ai-analytics-resource.component.js +400 -89
  12. package/dist/AI/components/analytics/ai-analytics-resource.component.js.map +1 -1
  13. package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts +5 -0
  14. package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts.map +1 -1
  15. package/dist/AI/components/analytics/analytics-filter-bar.component.js +184 -135
  16. package/dist/AI/components/analytics/analytics-filter-bar.component.js.map +1 -1
  17. package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts +8 -2
  18. package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts.map +1 -1
  19. package/dist/AI/components/analytics/cost-budget/cost-budget.component.js +104 -103
  20. package/dist/AI/components/analytics/cost-budget/cost-budget.component.js.map +1 -1
  21. package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts +8 -2
  22. package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts.map +1 -1
  23. package/dist/AI/components/analytics/error-analysis/error-analysis.component.js +76 -74
  24. package/dist/AI/components/analytics/error-analysis/error-analysis.component.js.map +1 -1
  25. package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts.map +1 -1
  26. package/dist/AI/components/analytics/executive-summary/executive-summary.component.js +67 -87
  27. package/dist/AI/components/analytics/executive-summary/executive-summary.component.js.map +1 -1
  28. package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts +12 -19
  29. package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts.map +1 -1
  30. package/dist/AI/components/analytics/model-performance/model-performance.component.js +96 -203
  31. package/dist/AI/components/analytics/model-performance/model-performance.component.js.map +1 -1
  32. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts.map +1 -1
  33. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js +110 -126
  34. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js.map +1 -1
  35. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts.map +1 -1
  36. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js +61 -77
  37. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js.map +1 -1
  38. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +990 -992
  39. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
  40. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +6 -3
  41. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
  42. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +493 -490
  43. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
  44. package/dist/AI/components/models/model-management.component.d.ts +17 -0
  45. package/dist/AI/components/models/model-management.component.d.ts.map +1 -1
  46. package/dist/AI/components/models/model-management.component.js +370 -425
  47. package/dist/AI/components/models/model-management.component.js.map +1 -1
  48. package/dist/AI/components/prompts/prompt-management.component.d.ts +17 -0
  49. package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
  50. package/dist/AI/components/prompts/prompt-management.component.js +317 -357
  51. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  52. package/dist/AI/components/requests/agent-requests-resource.component.d.ts +11 -0
  53. package/dist/AI/components/requests/agent-requests-resource.component.d.ts.map +1 -1
  54. package/dist/AI/components/requests/agent-requests-resource.component.js +170 -175
  55. package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
  56. package/dist/AI/components/system/system-configuration.component.d.ts +19 -0
  57. package/dist/AI/components/system/system-configuration.component.d.ts.map +1 -1
  58. package/dist/AI/components/system/system-configuration.component.js +403 -362
  59. package/dist/AI/components/system/system-configuration.component.js.map +1 -1
  60. package/dist/AI/components/tags/tags-resource.component.js +781 -783
  61. package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
  62. package/dist/AI/components/vectors/vector-management-resource.component.d.ts +8 -3
  63. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
  64. package/dist/AI/components/vectors/vector-management-resource.component.js +547 -521
  65. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  66. package/dist/Actions/components/actions-overview.component.d.ts +6 -0
  67. package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
  68. package/dist/Actions/components/actions-overview.component.js +79 -30
  69. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  70. package/dist/Actions/components/execution-monitoring.component.d.ts +9 -3
  71. package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
  72. package/dist/Actions/components/execution-monitoring.component.js +196 -142
  73. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  74. package/dist/Actions/components/explorer/action-explorer.component.d.ts +41 -1
  75. package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -1
  76. package/dist/Actions/components/explorer/action-explorer.component.js +388 -94
  77. package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
  78. package/dist/Actions/components/explorer/index.d.ts +0 -1
  79. package/dist/Actions/components/explorer/index.d.ts.map +1 -1
  80. package/dist/Actions/components/explorer/index.js +0 -1
  81. package/dist/Actions/components/explorer/index.js.map +1 -1
  82. package/dist/Admin/admin-data-schema.component.js +32 -40
  83. package/dist/Admin/admin-data-schema.component.js.map +1 -1
  84. package/dist/Admin/admin-dev-tools-resource.component.js +32 -40
  85. package/dist/Admin/admin-dev-tools-resource.component.js.map +1 -1
  86. package/dist/Admin/admin-identity-access.component.js +32 -40
  87. package/dist/Admin/admin-identity-access.component.js.map +1 -1
  88. package/dist/Admin/admin-monitoring.component.js +32 -40
  89. package/dist/Admin/admin-monitoring.component.js.map +1 -1
  90. package/dist/ApplicationRoles/application-roles-resource.component.js +76 -82
  91. package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
  92. package/dist/Archiving/components/archive-config-resource.component.d.ts.map +1 -1
  93. package/dist/Archiving/components/archive-config-resource.component.js +24 -5
  94. package/dist/Archiving/components/archive-config-resource.component.js.map +1 -1
  95. package/dist/Archiving/components/archive-runs-resource.component.d.ts.map +1 -1
  96. package/dist/Archiving/components/archive-runs-resource.component.js +24 -5
  97. package/dist/Archiving/components/archive-runs-resource.component.js.map +1 -1
  98. package/dist/Communication/communication-logs-resource.component.d.ts +1 -1
  99. package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
  100. package/dist/Communication/communication-logs-resource.component.js +80 -99
  101. package/dist/Communication/communication-logs-resource.component.js.map +1 -1
  102. package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
  103. package/dist/Communication/communication-monitor-resource.component.js +127 -106
  104. package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
  105. package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
  106. package/dist/Communication/communication-providers-resource.component.js +44 -45
  107. package/dist/Communication/communication-providers-resource.component.js.map +1 -1
  108. package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
  109. package/dist/Communication/communication-runs-resource.component.js +60 -58
  110. package/dist/Communication/communication-runs-resource.component.js.map +1 -1
  111. package/dist/Communication/communication-templates-resource.component.d.ts +1 -1
  112. package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -1
  113. package/dist/Communication/communication-templates-resource.component.js +139 -162
  114. package/dist/Communication/communication-templates-resource.component.js.map +1 -1
  115. package/dist/Credentials/components/credentials-audit-resource.component.d.ts +7 -0
  116. package/dist/Credentials/components/credentials-audit-resource.component.d.ts.map +1 -1
  117. package/dist/Credentials/components/credentials-audit-resource.component.js +310 -297
  118. package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
  119. package/dist/Credentials/components/credentials-categories-resource.component.js +245 -266
  120. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  121. package/dist/Credentials/components/credentials-list-resource.component.d.ts +7 -0
  122. package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
  123. package/dist/Credentials/components/credentials-list-resource.component.js +381 -399
  124. package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
  125. package/dist/Credentials/components/credentials-overview-resource.component.js +222 -228
  126. package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
  127. package/dist/Credentials/components/credentials-types-resource.component.d.ts +6 -0
  128. package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
  129. package/dist/Credentials/components/credentials-types-resource.component.js +294 -305
  130. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  131. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts +8 -0
  132. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts.map +1 -1
  133. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +21 -0
  134. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js.map +1 -1
  135. package/dist/DatabaseDesigner/components/entity-list.component.js +147 -160
  136. package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -1
  137. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +1 -1
  138. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -1
  139. package/dist/DatabaseDesigner/database-designer-dashboards.module.js +19 -1
  140. package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -1
  141. package/dist/EntityAdmin/entity-admin-dashboard.component.js +20 -16
  142. package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
  143. package/dist/Home/home-dashboard.component.d.ts +6 -0
  144. package/dist/Home/home-dashboard.component.d.ts.map +1 -1
  145. package/dist/Home/home-dashboard.component.js +521 -485
  146. package/dist/Home/home-dashboard.component.js.map +1 -1
  147. package/dist/Integration/components/activity/activity.component.d.ts +8 -0
  148. package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
  149. package/dist/Integration/components/activity/activity.component.js +309 -318
  150. package/dist/Integration/components/activity/activity.component.js.map +1 -1
  151. package/dist/Integration/components/connections/connections.component.js +866 -847
  152. package/dist/Integration/components/connections/connections.component.js.map +1 -1
  153. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +234 -233
  154. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
  155. package/dist/Integration/components/overview/overview.component.js +182 -163
  156. package/dist/Integration/components/overview/overview.component.js.map +1 -1
  157. package/dist/Integration/components/pipelines/pipelines.component.d.ts +2 -0
  158. package/dist/Integration/components/pipelines/pipelines.component.d.ts.map +1 -1
  159. package/dist/Integration/components/pipelines/pipelines.component.js +610 -606
  160. package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
  161. package/dist/Integration/components/schedules/schedules.component.js +241 -241
  162. package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
  163. package/dist/Integration/integration.module.d.ts +1 -1
  164. package/dist/Integration/integration.module.d.ts.map +1 -1
  165. package/dist/Integration/integration.module.js +28 -1
  166. package/dist/Integration/integration.module.js.map +1 -1
  167. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +673 -674
  168. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
  169. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +54 -51
  170. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
  171. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +745 -703
  172. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
  173. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts +12 -1
  174. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts.map +1 -1
  175. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +191 -120
  176. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -1
  177. package/dist/Lists/components/lists-browse-resource.component.d.ts +18 -1
  178. package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
  179. package/dist/Lists/components/lists-browse-resource.component.js +486 -532
  180. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  181. package/dist/Lists/components/lists-categories-resource.component.d.ts.map +1 -1
  182. package/dist/Lists/components/lists-categories-resource.component.js +152 -160
  183. package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
  184. package/dist/Lists/components/lists-my-lists-resource.component.d.ts.map +1 -1
  185. package/dist/Lists/components/lists-my-lists-resource.component.js +302 -319
  186. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  187. package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
  188. package/dist/Lists/components/lists-operations-resource.component.js +234 -246
  189. package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
  190. package/dist/MCP/mcp-dashboard.component.d.ts +20 -0
  191. package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
  192. package/dist/MCP/mcp-dashboard.component.js +1248 -1338
  193. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  194. package/dist/MCP/mcp.module.d.ts +1 -1
  195. package/dist/MCP/mcp.module.d.ts.map +1 -1
  196. package/dist/MCP/mcp.module.js +34 -1
  197. package/dist/MCP/mcp.module.js.map +1 -1
  198. package/dist/Permissions/audit-log-resource.component.js +76 -85
  199. package/dist/Permissions/audit-log-resource.component.js.map +1 -1
  200. package/dist/Permissions/resource-access-resource.component.js +64 -69
  201. package/dist/Permissions/resource-access-resource.component.js.map +1 -1
  202. package/dist/Permissions/user-access-resource.component.js +63 -74
  203. package/dist/Permissions/user-access-resource.component.js.map +1 -1
  204. package/dist/QueryBrowser/query-browser-resource.component.js +2 -2
  205. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  206. package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts +2 -1
  207. package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts.map +1 -1
  208. package/dist/Scheduling/components/scheduling-activity-resource.component.js +11 -12
  209. package/dist/Scheduling/components/scheduling-activity-resource.component.js.map +1 -1
  210. package/dist/Scheduling/components/scheduling-activity.component.d.ts +9 -1
  211. package/dist/Scheduling/components/scheduling-activity.component.d.ts.map +1 -1
  212. package/dist/Scheduling/components/scheduling-activity.component.js +250 -197
  213. package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
  214. package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts +2 -1
  215. package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts.map +1 -1
  216. package/dist/Scheduling/components/scheduling-jobs-resource.component.js +11 -12
  217. package/dist/Scheduling/components/scheduling-jobs-resource.component.js.map +1 -1
  218. package/dist/Scheduling/components/scheduling-jobs.component.d.ts +9 -1
  219. package/dist/Scheduling/components/scheduling-jobs.component.d.ts.map +1 -1
  220. package/dist/Scheduling/components/scheduling-jobs.component.js +203 -147
  221. package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
  222. package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts +2 -1
  223. package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts.map +1 -1
  224. package/dist/Scheduling/components/scheduling-overview-resource.component.js +11 -12
  225. package/dist/Scheduling/components/scheduling-overview-resource.component.js.map +1 -1
  226. package/dist/Scheduling/components/scheduling-overview.component.d.ts +3 -1
  227. package/dist/Scheduling/components/scheduling-overview.component.d.ts.map +1 -1
  228. package/dist/Scheduling/components/scheduling-overview.component.js +224 -190
  229. package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
  230. package/dist/Scheduling/scheduling-dashboard.component.d.ts +19 -6
  231. package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
  232. package/dist/Scheduling/scheduling-dashboard.component.js +262 -104
  233. package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
  234. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts +4 -0
  235. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
  236. package/dist/SystemDiagnostics/system-diagnostics.component.js +812 -784
  237. package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
  238. package/dist/Testing/components/testing-analytics-resource.component.d.ts +2 -1
  239. package/dist/Testing/components/testing-analytics-resource.component.d.ts.map +1 -1
  240. package/dist/Testing/components/testing-analytics-resource.component.js +7 -14
  241. package/dist/Testing/components/testing-analytics-resource.component.js.map +1 -1
  242. package/dist/Testing/components/testing-analytics.component.d.ts +3 -1
  243. package/dist/Testing/components/testing-analytics.component.d.ts.map +1 -1
  244. package/dist/Testing/components/testing-analytics.component.js +420 -393
  245. package/dist/Testing/components/testing-analytics.component.js.map +1 -1
  246. package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts +2 -1
  247. package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts.map +1 -1
  248. package/dist/Testing/components/testing-dashboard-tab-resource.component.js +16 -19
  249. package/dist/Testing/components/testing-dashboard-tab-resource.component.js.map +1 -1
  250. package/dist/Testing/components/testing-dashboard-tab.component.d.ts +3 -1
  251. package/dist/Testing/components/testing-dashboard-tab.component.d.ts.map +1 -1
  252. package/dist/Testing/components/testing-dashboard-tab.component.js +157 -122
  253. package/dist/Testing/components/testing-dashboard-tab.component.js.map +1 -1
  254. package/dist/Testing/components/testing-explorer-resource.component.d.ts +2 -1
  255. package/dist/Testing/components/testing-explorer-resource.component.d.ts.map +1 -1
  256. package/dist/Testing/components/testing-explorer-resource.component.js +7 -12
  257. package/dist/Testing/components/testing-explorer-resource.component.js.map +1 -1
  258. package/dist/Testing/components/testing-explorer.component.d.ts +8 -1
  259. package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
  260. package/dist/Testing/components/testing-explorer.component.js +587 -608
  261. package/dist/Testing/components/testing-explorer.component.js.map +1 -1
  262. package/dist/Testing/components/testing-review-resource.component.d.ts +4 -1
  263. package/dist/Testing/components/testing-review-resource.component.d.ts.map +1 -1
  264. package/dist/Testing/components/testing-review-resource.component.js +9 -12
  265. package/dist/Testing/components/testing-review-resource.component.js.map +1 -1
  266. package/dist/Testing/components/testing-review.component.d.ts +3 -1
  267. package/dist/Testing/components/testing-review.component.d.ts.map +1 -1
  268. package/dist/Testing/components/testing-review.component.js +310 -274
  269. package/dist/Testing/components/testing-review.component.js.map +1 -1
  270. package/dist/Testing/components/testing-runs-resource.component.d.ts +2 -1
  271. package/dist/Testing/components/testing-runs-resource.component.d.ts.map +1 -1
  272. package/dist/Testing/components/testing-runs-resource.component.js +16 -19
  273. package/dist/Testing/components/testing-runs-resource.component.js.map +1 -1
  274. package/dist/Testing/components/testing-runs.component.d.ts +3 -1
  275. package/dist/Testing/components/testing-runs.component.d.ts.map +1 -1
  276. package/dist/Testing/components/testing-runs.component.js +307 -273
  277. package/dist/Testing/components/testing-runs.component.js.map +1 -1
  278. package/dist/Testing/testing-dashboard.component.d.ts +2 -0
  279. package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
  280. package/dist/Testing/testing-dashboard.component.js +107 -93
  281. package/dist/Testing/testing-dashboard.component.js.map +1 -1
  282. package/dist/VersionHistory/components/diff-resource.component.js +185 -188
  283. package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
  284. package/dist/VersionHistory/components/graph-resource.component.js +154 -184
  285. package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
  286. package/dist/VersionHistory/components/labels-resource.component.d.ts +7 -0
  287. package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -1
  288. package/dist/VersionHistory/components/labels-resource.component.js +350 -354
  289. package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
  290. package/dist/VersionHistory/components/restore-resource.component.js +163 -169
  291. package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
  292. package/dist/actions-dashboards.module.d.ts +15 -16
  293. package/dist/actions-dashboards.module.d.ts.map +1 -1
  294. package/dist/actions-dashboards.module.js +34 -11
  295. package/dist/actions-dashboards.module.js.map +1 -1
  296. package/dist/ai-dashboards.module.d.ts +45 -48
  297. package/dist/ai-dashboards.module.d.ts.map +1 -1
  298. package/dist/ai-dashboards.module.js +36 -10
  299. package/dist/ai-dashboards.module.js.map +1 -1
  300. package/dist/archiving-dashboards.module.d.ts +2 -1
  301. package/dist/archiving-dashboards.module.d.ts.map +1 -1
  302. package/dist/archiving-dashboards.module.js +12 -2
  303. package/dist/archiving-dashboards.module.js.map +1 -1
  304. package/dist/communication-dashboards.module.d.ts +2 -1
  305. package/dist/communication-dashboards.module.d.ts.map +1 -1
  306. package/dist/communication-dashboards.module.js +24 -3
  307. package/dist/communication-dashboards.module.js.map +1 -1
  308. package/dist/core-dashboards.module.d.ts +1 -1
  309. package/dist/core-dashboards.module.d.ts.map +1 -1
  310. package/dist/core-dashboards.module.js +31 -1
  311. package/dist/core-dashboards.module.js.map +1 -1
  312. package/dist/credentials-dashboards.module.d.ts +1 -1
  313. package/dist/credentials-dashboards.module.d.ts.map +1 -1
  314. package/dist/credentials-dashboards.module.js +28 -1
  315. package/dist/credentials-dashboards.module.js.map +1 -1
  316. package/dist/lists-dashboards.module.d.ts +1 -1
  317. package/dist/lists-dashboards.module.d.ts.map +1 -1
  318. package/dist/lists-dashboards.module.js +28 -1
  319. package/dist/lists-dashboards.module.js.map +1 -1
  320. package/dist/public-api.d.ts +2 -2
  321. package/dist/public-api.d.ts.map +1 -1
  322. package/dist/public-api.js +3 -3
  323. package/dist/public-api.js.map +1 -1
  324. package/dist/scheduling-dashboards.module.d.ts +1 -1
  325. package/dist/scheduling-dashboards.module.d.ts.map +1 -1
  326. package/dist/scheduling-dashboards.module.js +31 -1
  327. package/dist/scheduling-dashboards.module.js.map +1 -1
  328. package/dist/testing-dashboards.module.d.ts +8 -7
  329. package/dist/testing-dashboards.module.d.ts.map +1 -1
  330. package/dist/testing-dashboards.module.js +30 -0
  331. package/dist/testing-dashboards.module.js.map +1 -1
  332. package/package.json +52 -52
  333. package/dist/AI/components/agents/agent-filter-panel.component.d.ts +0 -56
  334. package/dist/AI/components/agents/agent-filter-panel.component.d.ts.map +0 -1
  335. package/dist/AI/components/agents/agent-filter-panel.component.js +0 -285
  336. package/dist/AI/components/agents/agent-filter-panel.component.js.map +0 -1
  337. package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts +0 -49
  338. package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts.map +0 -1
  339. package/dist/AI/components/prompts/prompt-filter-panel.component.js +0 -184
  340. package/dist/AI/components/prompts/prompt-filter-panel.component.js.map +0 -1
  341. package/dist/AI/components/system/system-config-filter-panel.component.d.ts +0 -33
  342. package/dist/AI/components/system/system-config-filter-panel.component.d.ts.map +0 -1
  343. package/dist/AI/components/system/system-config-filter-panel.component.js +0 -144
  344. package/dist/AI/components/system/system-config-filter-panel.component.js.map +0 -1
  345. package/dist/Actions/components/explorer/action-toolbar.component.d.ts +0 -63
  346. package/dist/Actions/components/explorer/action-toolbar.component.d.ts.map +0 -1
  347. package/dist/Actions/components/explorer/action-toolbar.component.js +0 -463
  348. package/dist/Actions/components/explorer/action-toolbar.component.js.map +0 -1
@@ -30,764 +30,573 @@ import * as i3 from "@angular/forms";
30
30
  import * as i4 from "@memberjunction/ng-ui-components";
31
31
  import * as i5 from "@memberjunction/ng-shared-generic";
32
32
  const _forTrack0 = ($index, $item) => $item.ID;
33
- const _forTrack1 = ($index, $item) => $item.category;
34
- const _forTrack2 = ($index, $item) => $item.server.ID;
35
- const _forTrack3 = ($index, $item) => $item.value;
36
- const _forTrack4 = ($index, $item) => $item.name;
37
- function MCPDashboardComponent_Conditional_8_Template(rf, ctx) { if (rf & 1) {
38
- i0.ɵɵtext(0, " Hide Filters ");
39
- } }
40
- function MCPDashboardComponent_Conditional_9_Template(rf, ctx) { if (rf & 1) {
41
- i0.ɵɵtext(0, " Show Filters ");
42
- } }
43
- function MCPDashboardComponent_Case_38_Template(rf, ctx) { if (rf & 1) {
44
- const _r2 = i0.ɵɵgetCurrentView();
45
- i0.ɵɵelementStart(0, "button", 68);
46
- i0.ɵɵlistener("click", function MCPDashboardComponent_Case_38_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.createServer()); });
47
- i0.ɵɵelement(1, "i", 69);
33
+ const _forTrack1 = ($index, $item) => $item.server.ID;
34
+ const _forTrack2 = ($index, $item) => $item.value;
35
+ const _forTrack3 = ($index, $item) => $item.name;
36
+ function MCPDashboardComponent_Case_8_Template(rf, ctx) { if (rf & 1) {
37
+ const _r1 = i0.ɵɵgetCurrentView();
38
+ i0.ɵɵelementStart(0, "button", 34);
39
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Case_8_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.createServer()); });
40
+ i0.ɵɵelement(1, "i", 35);
48
41
  i0.ɵɵtext(2, " Add Server ");
49
42
  i0.ɵɵelementEnd();
50
43
  } }
51
- function MCPDashboardComponent_Case_39_Template(rf, ctx) { if (rf & 1) {
52
- const _r4 = i0.ɵɵgetCurrentView();
53
- i0.ɵɵelementStart(0, "button", 68);
54
- i0.ɵɵlistener("click", function MCPDashboardComponent_Case_39_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.createConnection()); });
55
- i0.ɵɵelement(1, "i", 69);
44
+ function MCPDashboardComponent_Case_9_Template(rf, ctx) { if (rf & 1) {
45
+ const _r3 = i0.ɵɵgetCurrentView();
46
+ i0.ɵɵelementStart(0, "button", 34);
47
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Case_9_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.createConnection()); });
48
+ i0.ɵɵelement(1, "i", 35);
56
49
  i0.ɵɵtext(2, " Add Connection ");
57
50
  i0.ɵɵelementEnd();
58
51
  } }
59
- function MCPDashboardComponent_Case_40_Template(rf, ctx) { if (rf & 1) {
60
- const _r5 = i0.ɵɵgetCurrentView();
61
- i0.ɵɵelementStart(0, "div", 70)(1, "button", 71);
62
- i0.ɵɵlistener("click", function MCPDashboardComponent_Case_40_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.setToolsViewMode("card")); });
63
- i0.ɵɵelement(2, "i", 72);
52
+ function MCPDashboardComponent_Case_10_Template(rf, ctx) { if (rf & 1) {
53
+ const _r4 = i0.ɵɵgetCurrentView();
54
+ i0.ɵɵelementStart(0, "mj-view-toggle", 36);
55
+ i0.ɵɵlistener("KeyChange", function MCPDashboardComponent_Case_10_Template_mj_view_toggle_KeyChange_0_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.setToolsViewMode($event)); });
64
56
  i0.ɵɵelementEnd();
65
- i0.ɵɵelementStart(3, "button", 73);
66
- i0.ɵɵlistener("click", function MCPDashboardComponent_Case_40_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.setToolsViewMode("list")); });
67
- i0.ɵɵelement(4, "i", 74);
68
- i0.ɵɵelementEnd()();
69
- i0.ɵɵelementStart(5, "button", 68);
70
- i0.ɵɵlistener("click", function MCPDashboardComponent_Case_40_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.openTestToolDialog()); });
71
- i0.ɵɵelement(6, "i", 75);
72
- i0.ɵɵtext(7, " Test Tool ");
57
+ i0.ɵɵelementStart(1, "button", 37);
58
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Case_10_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleScalableMode(!ctx_r1.useScalablePagination)); });
59
+ i0.ɵɵelement(2, "i", 38);
60
+ i0.ɵɵtext(3);
73
61
  i0.ɵɵelementEnd();
74
- } if (rf & 2) {
75
- const ctx_r2 = i0.ɵɵnextContext();
76
- i0.ɵɵadvance();
77
- i0.ɵɵclassProp("active", ctx_r2.ToolsViewMode === "card");
78
- i0.ɵɵadvance(2);
79
- i0.ɵɵclassProp("active", ctx_r2.ToolsViewMode === "list");
80
- } }
81
- function MCPDashboardComponent_Case_41_Template(rf, ctx) { if (rf & 1) {
82
- const _r6 = i0.ɵɵgetCurrentView();
83
- i0.ɵɵelementStart(0, "button", 76);
84
- i0.ɵɵlistener("click", function MCPDashboardComponent_Case_41_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.loadAllData()); });
85
- i0.ɵɵelement(1, "i", 77);
86
- i0.ɵɵtext(2, " Refresh ");
62
+ i0.ɵɵelementStart(4, "button", 34);
63
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Case_10_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.openTestToolDialog()); });
64
+ i0.ɵɵelement(5, "i", 39);
65
+ i0.ɵɵtext(6, " Test Tool ");
87
66
  i0.ɵɵelementEnd();
88
67
  } if (rf & 2) {
89
- const ctx_r2 = i0.ɵɵnextContext();
90
- i0.ɵɵproperty("disabled", ctx_r2.IsLoading);
68
+ const ctx_r1 = i0.ɵɵnextContext();
69
+ i0.ɵɵproperty("Options", ctx_r1.toolsViewOptions)("ActiveKey", ctx_r1.ToolsViewMode);
91
70
  i0.ɵɵadvance();
92
- i0.ɵɵclassProp("fa-spin", ctx_r2.IsLoading);
93
- } }
94
- function MCPDashboardComponent_Conditional_49_Template(rf, ctx) { if (rf & 1) {
95
- i0.ɵɵelementStart(0, "span", 52);
96
- i0.ɵɵtext(1);
97
- i0.ɵɵelementEnd();
98
- } if (rf & 2) {
99
- const ctx_r2 = i0.ɵɵnextContext();
100
- i0.ɵɵadvance();
101
- i0.ɵɵtextInterpolate(ctx_r2.activeFilterCount());
102
- } }
103
- function MCPDashboardComponent_Conditional_58_For_9_Template(rf, ctx) { if (rf & 1) {
104
- i0.ɵɵelementStart(0, "option", 80);
105
- i0.ɵɵtext(1);
106
- i0.ɵɵelementEnd();
107
- } if (rf & 2) {
108
- const s_r10 = ctx.$implicit;
109
- i0.ɵɵproperty("value", s_r10.ID);
71
+ i0.ɵɵproperty("title", ctx_r1.useScalablePagination ? "Scale mode on: virtual scroll, paginated" : "Enable scale mode for large tool sets");
110
72
  i0.ɵɵadvance();
111
- i0.ɵɵtextInterpolate(s_r10.Name);
112
- } }
113
- function MCPDashboardComponent_Conditional_58_For_19_Template(rf, ctx) { if (rf & 1) {
114
- i0.ɵɵelementStart(0, "option", 80);
115
- i0.ɵɵtext(1);
116
- i0.ɵɵelementEnd();
117
- } if (rf & 2) {
118
- const c_r12 = ctx.$implicit;
119
- i0.ɵɵproperty("value", c_r12.category);
73
+ i0.ɵɵclassProp("fa-bolt", ctx_r1.useScalablePagination)("fa-bolt-lightning", !ctx_r1.useScalablePagination);
120
74
  i0.ɵɵadvance();
121
- i0.ɵɵtextInterpolate2("", c_r12.category, " (", c_r12.count, ")");
122
- } }
123
- function MCPDashboardComponent_Conditional_58_Template(rf, ctx) { if (rf & 1) {
124
- const _r8 = i0.ɵɵgetCurrentView();
125
- i0.ɵɵelementStart(0, "div", 54)(1, "label", 55);
126
- i0.ɵɵelement(2, "i", 38);
127
- i0.ɵɵtext(3, " Server");
128
- i0.ɵɵelementEnd();
129
- i0.ɵɵelementStart(4, "select", 78, 1);
130
- i0.ɵɵlistener("change", function MCPDashboardComponent_Conditional_58_Template_select_change_4_listener() { i0.ɵɵrestoreView(_r8); const fServer_r9 = i0.ɵɵreference(5); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onFilterFieldChange("toolsServer", fServer_r9.value)); });
131
- i0.ɵɵelementStart(6, "option", 79);
132
- i0.ɵɵtext(7, "All Servers");
133
- i0.ɵɵelementEnd();
134
- i0.ɵɵrepeaterCreate(8, MCPDashboardComponent_Conditional_58_For_9_Template, 2, 2, "option", 80, _forTrack0);
135
- i0.ɵɵelementEnd()();
136
- i0.ɵɵelementStart(10, "div", 54)(11, "label", 55);
137
- i0.ɵɵelement(12, "i", 81);
138
- i0.ɵɵtext(13, " Category");
139
- i0.ɵɵelementEnd();
140
- i0.ɵɵelementStart(14, "select", 78, 2);
141
- i0.ɵɵlistener("change", function MCPDashboardComponent_Conditional_58_Template_select_change_14_listener() { i0.ɵɵrestoreView(_r8); const fCat_r11 = i0.ɵɵreference(15); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onFilterFieldChange("toolsCategory", fCat_r11.value)); });
142
- i0.ɵɵelementStart(16, "option", 79);
143
- i0.ɵɵtext(17, "All Categories");
144
- i0.ɵɵelementEnd();
145
- i0.ɵɵrepeaterCreate(18, MCPDashboardComponent_Conditional_58_For_19_Template, 2, 3, "option", 80, _forTrack1);
146
- i0.ɵɵelementEnd()();
147
- i0.ɵɵelementStart(20, "div", 54)(21, "label", 82)(22, "input", 83, 3);
148
- i0.ɵɵlistener("change", function MCPDashboardComponent_Conditional_58_Template_input_change_22_listener() { i0.ɵɵrestoreView(_r8); const fFav_r13 = i0.ɵɵreference(23); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onFilterFieldChange("favoritesOnly", fFav_r13.checked)); });
149
- i0.ɵɵelementEnd();
150
- i0.ɵɵelement(24, "i", 84);
151
- i0.ɵɵtext(25, " Favorites only ");
152
- i0.ɵɵelementEnd()();
153
- i0.ɵɵelementStart(26, "div", 54)(27, "label", 82)(28, "input", 83, 4);
154
- i0.ɵɵlistener("change", function MCPDashboardComponent_Conditional_58_Template_input_change_28_listener() { i0.ɵɵrestoreView(_r8); const fRec_r14 = i0.ɵɵreference(29); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onFilterFieldChange("recentOnly", fRec_r14.checked)); });
155
- i0.ɵɵelementEnd();
156
- i0.ɵɵelement(30, "i", 85);
157
- i0.ɵɵtext(31, " Recently used only ");
158
- i0.ɵɵelementEnd()();
159
- } if (rf & 2) {
160
- const ctx_r2 = i0.ɵɵnextContext();
161
- i0.ɵɵadvance(4);
162
- i0.ɵɵproperty("value", ctx_r2.CurrentFilters.toolsServer ?? "all");
163
- i0.ɵɵadvance(4);
164
- i0.ɵɵrepeater(ctx_r2.toolsAvailableServers);
165
- i0.ɵɵadvance(6);
166
- i0.ɵɵproperty("value", ctx_r2.CurrentFilters.toolsCategory ?? "all");
167
- i0.ɵɵadvance(4);
168
- i0.ɵɵrepeater(ctx_r2.toolsAvailableCategories);
169
- i0.ɵɵadvance(4);
170
- i0.ɵɵproperty("checked", ctx_r2.CurrentFilters.favoritesOnly === true);
171
- i0.ɵɵadvance(6);
172
- i0.ɵɵproperty("checked", ctx_r2.CurrentFilters.recentOnly === true);
173
- } }
174
- function MCPDashboardComponent_Conditional_59_Template(rf, ctx) { if (rf & 1) {
175
- const _r15 = i0.ɵɵgetCurrentView();
176
- i0.ɵɵelementStart(0, "div", 54)(1, "label", 55);
177
- i0.ɵɵelement(2, "i", 86);
178
- i0.ɵɵtext(3, " Server Status");
179
- i0.ɵɵelementEnd();
180
- i0.ɵɵelementStart(4, "select", 78, 5);
181
- i0.ɵɵlistener("change", function MCPDashboardComponent_Conditional_59_Template_select_change_4_listener() { i0.ɵɵrestoreView(_r15); const fSStatus_r16 = i0.ɵɵreference(5); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onFilterFieldChange("serverStatus", fSStatus_r16.value)); });
182
- i0.ɵɵelementStart(6, "option", 79);
183
- i0.ɵɵtext(7, "All Statuses");
184
- i0.ɵɵelementEnd();
185
- i0.ɵɵelementStart(8, "option", 87);
186
- i0.ɵɵtext(9, "Active");
187
- i0.ɵɵelementEnd();
188
- i0.ɵɵelementStart(10, "option", 88);
189
- i0.ɵɵtext(11, "Inactive");
190
- i0.ɵɵelementEnd()()();
191
- } if (rf & 2) {
192
- const ctx_r2 = i0.ɵɵnextContext();
193
- i0.ɵɵadvance(4);
194
- i0.ɵɵproperty("value", ctx_r2.CurrentFilters.serverStatus);
75
+ i0.ɵɵtextInterpolate1(" Scale: ", ctx_r1.useScalablePagination ? "ON" : "OFF", " ");
195
76
  } }
196
- function MCPDashboardComponent_Conditional_60_Template(rf, ctx) { if (rf & 1) {
197
- const _r17 = i0.ɵɵgetCurrentView();
198
- i0.ɵɵelementStart(0, "div", 54)(1, "label", 55);
199
- i0.ɵɵelement(2, "i", 86);
200
- i0.ɵɵtext(3, " Connection Status");
201
- i0.ɵɵelementEnd();
202
- i0.ɵɵelementStart(4, "select", 78, 6);
203
- i0.ɵɵlistener("change", function MCPDashboardComponent_Conditional_60_Template_select_change_4_listener() { i0.ɵɵrestoreView(_r17); const fCStatus_r18 = i0.ɵɵreference(5); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onFilterFieldChange("connectionStatus", fCStatus_r18.value)); });
204
- i0.ɵɵelementStart(6, "option", 79);
205
- i0.ɵɵtext(7, "All Statuses");
206
- i0.ɵɵelementEnd();
207
- i0.ɵɵelementStart(8, "option", 87);
208
- i0.ɵɵtext(9, "Active");
209
- i0.ɵɵelementEnd();
210
- i0.ɵɵelementStart(10, "option", 88);
211
- i0.ɵɵtext(11, "Inactive");
77
+ function MCPDashboardComponent_Case_11_Template(rf, ctx) { if (rf & 1) {
78
+ const _r5 = i0.ɵɵgetCurrentView();
79
+ i0.ɵɵelementStart(0, "mj-refresh-button", 40);
80
+ i0.ɵɵlistener("Clicked", function MCPDashboardComponent_Case_11_Template_mj_refresh_button_Clicked_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.loadAllData()); });
212
81
  i0.ɵɵelementEnd();
213
- i0.ɵɵelementStart(12, "option", 89);
214
- i0.ɵɵtext(13, "Error");
215
- i0.ɵɵelementEnd()()();
216
- } if (rf & 2) {
217
- const ctx_r2 = i0.ɵɵnextContext();
218
- i0.ɵɵadvance(4);
219
- i0.ɵɵproperty("value", ctx_r2.CurrentFilters.connectionStatus);
220
- } }
221
- function MCPDashboardComponent_Conditional_61_Template(rf, ctx) { if (rf & 1) {
222
- const _r19 = i0.ɵɵgetCurrentView();
223
- i0.ɵɵelementStart(0, "div", 54)(1, "label", 55);
224
- i0.ɵɵelement(2, "i", 86);
225
- i0.ɵɵtext(3, " Tool Status");
226
- i0.ɵɵelementEnd();
227
- i0.ɵɵelementStart(4, "select", 78, 7);
228
- i0.ɵɵlistener("change", function MCPDashboardComponent_Conditional_61_Template_select_change_4_listener() { i0.ɵɵrestoreView(_r19); const fTStatus_r20 = i0.ɵɵreference(5); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onFilterFieldChange("toolStatus", fTStatus_r20.value)); });
229
- i0.ɵɵelementStart(6, "option", 79);
230
- i0.ɵɵtext(7, "All Statuses");
231
- i0.ɵɵelementEnd();
232
- i0.ɵɵelementStart(8, "option", 87);
233
- i0.ɵɵtext(9, "Active");
234
- i0.ɵɵelementEnd();
235
- i0.ɵɵelementStart(10, "option", 90);
236
- i0.ɵɵtext(11, "Deprecated");
237
- i0.ɵɵelementEnd()()();
238
82
  } if (rf & 2) {
239
- const ctx_r2 = i0.ɵɵnextContext();
240
- i0.ɵɵadvance(4);
241
- i0.ɵɵproperty("value", ctx_r2.CurrentFilters.toolStatus);
83
+ const ctx_r1 = i0.ɵɵnextContext();
84
+ i0.ɵɵproperty("Loading", ctx_r1.IsLoading);
242
85
  } }
243
- function MCPDashboardComponent_Conditional_62_Template(rf, ctx) { if (rf & 1) {
244
- const _r21 = i0.ɵɵgetCurrentView();
245
- i0.ɵɵelementStart(0, "div", 54)(1, "label", 55);
246
- i0.ɵɵelement(2, "i", 91);
247
- i0.ɵɵtext(3, " Log Status");
248
- i0.ɵɵelementEnd();
249
- i0.ɵɵelementStart(4, "select", 78, 8);
250
- i0.ɵɵlistener("change", function MCPDashboardComponent_Conditional_62_Template_select_change_4_listener() { i0.ɵɵrestoreView(_r21); const fLStatus_r22 = i0.ɵɵreference(5); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onFilterFieldChange("logStatus", fLStatus_r22.value)); });
251
- i0.ɵɵelementStart(6, "option", 79);
252
- i0.ɵɵtext(7, "All Statuses");
253
- i0.ɵɵelementEnd();
254
- i0.ɵɵelementStart(8, "option", 92);
255
- i0.ɵɵtext(9, "Success");
256
- i0.ɵɵelementEnd();
257
- i0.ɵɵelementStart(10, "option", 89);
258
- i0.ɵɵtext(11, "Error");
259
- i0.ɵɵelementEnd();
260
- i0.ɵɵelementStart(12, "option", 93);
261
- i0.ɵɵtext(13, "Running");
262
- i0.ɵɵelementEnd()()();
263
- } if (rf & 2) {
264
- const ctx_r2 = i0.ɵɵnextContext();
265
- i0.ɵɵadvance(4);
266
- i0.ɵɵproperty("value", ctx_r2.CurrentFilters.logStatus);
267
- } }
268
- function MCPDashboardComponent_Conditional_69_Template(rf, ctx) { if (rf & 1) {
269
- const _r23 = i0.ɵɵgetCurrentView();
270
- i0.ɵɵelementStart(0, "div", 63);
271
- i0.ɵɵelement(1, "i", 94);
86
+ function MCPDashboardComponent_Conditional_15_Template(rf, ctx) { if (rf & 1) {
87
+ const _r6 = i0.ɵɵgetCurrentView();
88
+ i0.ɵɵelementStart(0, "div", 30);
89
+ i0.ɵɵelement(1, "i", 41);
272
90
  i0.ɵɵtext(2);
273
- i0.ɵɵelementStart(3, "button", 95);
274
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_69_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r23); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ErrorMessage = null); });
275
- i0.ɵɵelement(4, "i", 96);
91
+ i0.ɵɵelementStart(3, "button", 42);
92
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_15_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ErrorMessage = null); });
93
+ i0.ɵɵelement(4, "i", 43);
276
94
  i0.ɵɵelementEnd()();
277
95
  } if (rf & 2) {
278
- const ctx_r2 = i0.ɵɵnextContext();
96
+ const ctx_r1 = i0.ɵɵnextContext();
279
97
  i0.ɵɵadvance(2);
280
- i0.ɵɵtextInterpolate1(" ", ctx_r2.ErrorMessage, " ");
98
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.ErrorMessage, " ");
281
99
  } }
282
- function MCPDashboardComponent_Conditional_71_Template(rf, ctx) { if (rf & 1) {
283
- i0.ɵɵelement(0, "mj-loading", 65);
100
+ function MCPDashboardComponent_Conditional_16_Template(rf, ctx) { if (rf & 1) {
101
+ i0.ɵɵelement(0, "mj-loading", 31);
284
102
  } }
285
- function MCPDashboardComponent_Conditional_72_Case_0_Conditional_1_Template(rf, ctx) { if (rf & 1) {
286
- const _r24 = i0.ɵɵgetCurrentView();
287
- i0.ɵɵelementStart(0, "div", 100);
288
- i0.ɵɵelement(1, "i", 38);
103
+ function MCPDashboardComponent_Conditional_17_Case_0_Conditional_1_Template(rf, ctx) { if (rf & 1) {
104
+ const _r7 = i0.ɵɵgetCurrentView();
105
+ i0.ɵɵelementStart(0, "div", 47);
106
+ i0.ɵɵelement(1, "i", 48);
289
107
  i0.ɵɵelementStart(2, "p");
290
108
  i0.ɵɵtext(3, "No MCP servers configured");
291
109
  i0.ɵɵelementEnd();
292
- i0.ɵɵelementStart(4, "button", 68);
293
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_72_Case_0_Conditional_1_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.createServer()); });
110
+ i0.ɵɵelementStart(4, "button", 34);
111
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_17_Case_0_Conditional_1_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.createServer()); });
294
112
  i0.ɵɵtext(5, " Add Your First Server ");
295
113
  i0.ɵɵelementEnd()();
296
114
  } }
297
- function MCPDashboardComponent_Conditional_72_Case_0_Conditional_2_For_1_Conditional_15_Template(rf, ctx) { if (rf & 1) {
298
- i0.ɵɵelementStart(0, "p", 114);
115
+ function MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_For_1_Conditional_15_Template(rf, ctx) { if (rf & 1) {
116
+ i0.ɵɵelementStart(0, "p", 62);
299
117
  i0.ɵɵtext(1);
300
118
  i0.ɵɵelementEnd();
301
119
  } if (rf & 2) {
302
- const server_r26 = i0.ɵɵnextContext().$implicit;
120
+ const server_r9 = i0.ɵɵnextContext().$implicit;
303
121
  i0.ɵɵadvance();
304
- i0.ɵɵtextInterpolate(server_r26.Description);
122
+ i0.ɵɵtextInterpolate(server_r9.Description);
305
123
  } }
306
- function MCPDashboardComponent_Conditional_72_Case_0_Conditional_2_For_1_Conditional_37_Template(rf, ctx) { if (rf & 1) {
307
- i0.ɵɵelementStart(0, "div", 119)(1, "span", 117);
124
+ function MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_For_1_Conditional_37_Template(rf, ctx) { if (rf & 1) {
125
+ i0.ɵɵelementStart(0, "div", 67)(1, "span", 65);
308
126
  i0.ɵɵtext(2, "URL");
309
127
  i0.ɵɵelementEnd();
310
- i0.ɵɵelementStart(3, "span", 121);
128
+ i0.ɵɵelementStart(3, "span", 69);
311
129
  i0.ɵɵtext(4);
312
130
  i0.ɵɵelementEnd()();
313
131
  } if (rf & 2) {
314
- const server_r26 = i0.ɵɵnextContext().$implicit;
132
+ const server_r9 = i0.ɵɵnextContext().$implicit;
315
133
  i0.ɵɵadvance(4);
316
- i0.ɵɵtextInterpolate(server_r26.ServerURL);
134
+ i0.ɵɵtextInterpolate(server_r9.ServerURL);
317
135
  } }
318
- function MCPDashboardComponent_Conditional_72_Case_0_Conditional_2_For_1_Conditional_38_Template(rf, ctx) { if (rf & 1) {
319
- i0.ɵɵelementStart(0, "div", 119)(1, "span", 117);
136
+ function MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_For_1_Conditional_38_Template(rf, ctx) { if (rf & 1) {
137
+ i0.ɵɵelementStart(0, "div", 67)(1, "span", 65);
320
138
  i0.ɵɵtext(2, "Command");
321
139
  i0.ɵɵelementEnd();
322
- i0.ɵɵelementStart(3, "span", 122);
140
+ i0.ɵɵelementStart(3, "span", 70);
323
141
  i0.ɵɵtext(4);
324
142
  i0.ɵɵelementEnd()();
325
143
  } if (rf & 2) {
326
- const server_r26 = i0.ɵɵnextContext().$implicit;
144
+ const server_r9 = i0.ɵɵnextContext().$implicit;
327
145
  i0.ɵɵadvance(4);
328
- i0.ɵɵtextInterpolate(server_r26.Command);
146
+ i0.ɵɵtextInterpolate(server_r9.Command);
329
147
  } }
330
- function MCPDashboardComponent_Conditional_72_Case_0_Conditional_2_For_1_Conditional_44_Conditional_5_Template(rf, ctx) { if (rf & 1) {
331
- i0.ɵɵelementStart(0, "div", 124);
332
- i0.ɵɵelement(1, "i", 126);
148
+ function MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_For_1_Conditional_44_Conditional_5_Template(rf, ctx) { if (rf & 1) {
149
+ i0.ɵɵelementStart(0, "div", 73);
150
+ i0.ɵɵelement(1, "i", 75);
333
151
  i0.ɵɵtext(2, " No tools discovered yet. Sync a connection to discover tools. ");
334
152
  i0.ɵɵelementEnd();
335
153
  } }
336
- function MCPDashboardComponent_Conditional_72_Case_0_Conditional_2_For_1_Conditional_44_Conditional_6_For_2_Template(rf, ctx) { if (rf & 1) {
337
- const _r27 = i0.ɵɵgetCurrentView();
338
- i0.ɵɵelementStart(0, "div", 127)(1, "div", 128)(2, "span", 129);
154
+ function MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_For_1_Conditional_44_Conditional_6_For_2_Template(rf, ctx) { if (rf & 1) {
155
+ const _r10 = i0.ɵɵgetCurrentView();
156
+ i0.ɵɵelementStart(0, "div", 76)(1, "div", 77)(2, "span", 78);
339
157
  i0.ɵɵtext(3);
340
158
  i0.ɵɵelementEnd();
341
- i0.ɵɵelementStart(4, "span", 130);
342
- i0.ɵɵelement(5, "i", 131);
159
+ i0.ɵɵelementStart(4, "span", 79);
160
+ i0.ɵɵelement(5, "i", 80);
343
161
  i0.ɵɵtext(6);
344
162
  i0.ɵɵelementEnd()();
345
- i0.ɵɵelementStart(7, "button", 132);
346
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_72_Case_0_Conditional_2_For_1_Conditional_44_Conditional_6_For_2_Template_button_click_7_listener($event) { const tool_r28 = i0.ɵɵrestoreView(_r27).$implicit; const ctx_r2 = i0.ɵɵnextContext(7); ctx_r2.runToolFromCard(tool_r28); return i0.ɵɵresetView($event.stopPropagation()); });
347
- i0.ɵɵelement(8, "i", 75);
163
+ i0.ɵɵelementStart(7, "button", 81);
164
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_For_1_Conditional_44_Conditional_6_For_2_Template_button_click_7_listener($event) { const tool_r11 = i0.ɵɵrestoreView(_r10).$implicit; const ctx_r1 = i0.ɵɵnextContext(7); ctx_r1.runToolFromCard(tool_r11); return i0.ɵɵresetView($event.stopPropagation()); });
165
+ i0.ɵɵelement(8, "i", 39);
348
166
  i0.ɵɵelementEnd()();
349
167
  } if (rf & 2) {
350
- const tool_r28 = ctx.$implicit;
351
- const ctx_r2 = i0.ɵɵnextContext(7);
168
+ const tool_r11 = ctx.$implicit;
169
+ const ctx_r1 = i0.ɵɵnextContext(7);
352
170
  i0.ɵɵadvance(3);
353
- i0.ɵɵtextInterpolate(tool_r28.ToolTitle || tool_r28.ToolName);
171
+ i0.ɵɵtextInterpolate(tool_r11.ToolTitle || tool_r11.ToolName);
354
172
  i0.ɵɵadvance(3);
355
- i0.ɵɵtextInterpolate1(" ", ctx_r2.getParamCount(tool_r28), " params ");
173
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.getParamCount(tool_r11), " params ");
356
174
  } }
357
- function MCPDashboardComponent_Conditional_72_Case_0_Conditional_2_For_1_Conditional_44_Conditional_6_Template(rf, ctx) { if (rf & 1) {
358
- i0.ɵɵelementStart(0, "div", 125);
359
- i0.ɵɵrepeaterCreate(1, MCPDashboardComponent_Conditional_72_Case_0_Conditional_2_For_1_Conditional_44_Conditional_6_For_2_Template, 9, 2, "div", 127, _forTrack0);
175
+ function MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_For_1_Conditional_44_Conditional_6_Template(rf, ctx) { if (rf & 1) {
176
+ i0.ɵɵelementStart(0, "div", 74);
177
+ i0.ɵɵrepeaterCreate(1, MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_For_1_Conditional_44_Conditional_6_For_2_Template, 9, 2, "div", 76, _forTrack0);
360
178
  i0.ɵɵelementEnd();
361
179
  } if (rf & 2) {
362
- const server_r26 = i0.ɵɵnextContext(2).$implicit;
363
- const ctx_r2 = i0.ɵɵnextContext(4);
180
+ const server_r9 = i0.ɵɵnextContext(2).$implicit;
181
+ const ctx_r1 = i0.ɵɵnextContext(4);
364
182
  i0.ɵɵadvance();
365
- i0.ɵɵrepeater(ctx_r2.getToolsForServer(server_r26.ID));
183
+ i0.ɵɵrepeater(ctx_r1.getToolsForServer(server_r9.ID));
366
184
  } }
367
- function MCPDashboardComponent_Conditional_72_Case_0_Conditional_2_For_1_Conditional_44_Template(rf, ctx) { if (rf & 1) {
368
- i0.ɵɵelementStart(0, "div", 120)(1, "div", 123);
369
- i0.ɵɵelement(2, "i", 42);
185
+ function MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_For_1_Conditional_44_Template(rf, ctx) { if (rf & 1) {
186
+ i0.ɵɵelementStart(0, "div", 68)(1, "div", 71);
187
+ i0.ɵɵelement(2, "i", 72);
370
188
  i0.ɵɵelementStart(3, "span");
371
189
  i0.ɵɵtext(4);
372
190
  i0.ɵɵelementEnd()();
373
- i0.ɵɵconditionalCreate(5, MCPDashboardComponent_Conditional_72_Case_0_Conditional_2_For_1_Conditional_44_Conditional_5_Template, 3, 0, "div", 124)(6, MCPDashboardComponent_Conditional_72_Case_0_Conditional_2_For_1_Conditional_44_Conditional_6_Template, 3, 0, "div", 125);
191
+ i0.ɵɵconditionalCreate(5, MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_For_1_Conditional_44_Conditional_5_Template, 3, 0, "div", 73)(6, MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_For_1_Conditional_44_Conditional_6_Template, 3, 0, "div", 74);
374
192
  i0.ɵɵelementEnd();
375
193
  } if (rf & 2) {
376
- const server_r26 = i0.ɵɵnextContext().$implicit;
377
- const ctx_r2 = i0.ɵɵnextContext(4);
194
+ const server_r9 = i0.ɵɵnextContext().$implicit;
195
+ const ctx_r1 = i0.ɵɵnextContext(4);
378
196
  i0.ɵɵadvance(4);
379
- i0.ɵɵtextInterpolate1("Available Tools (", ctx_r2.getToolsForServer(server_r26.ID).length, ")");
197
+ i0.ɵɵtextInterpolate1("Available Tools (", ctx_r1.getToolsForServer(server_r9.ID).length, ")");
380
198
  i0.ɵɵadvance();
381
- i0.ɵɵconditional(ctx_r2.getToolsForServer(server_r26.ID).length === 0 ? 5 : 6);
199
+ i0.ɵɵconditional(ctx_r1.getToolsForServer(server_r9.ID).length === 0 ? 5 : 6);
382
200
  } }
383
- function MCPDashboardComponent_Conditional_72_Case_0_Conditional_2_For_1_Template(rf, ctx) { if (rf & 1) {
384
- const _r25 = i0.ɵɵgetCurrentView();
385
- i0.ɵɵelementStart(0, "div", 102)(1, "div", 103);
386
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_72_Case_0_Conditional_2_For_1_Template_div_click_1_listener() { const server_r26 = i0.ɵɵrestoreView(_r25).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.toggleServerExpand(server_r26)); });
387
- i0.ɵɵelementStart(2, "div", 104);
388
- i0.ɵɵelement(3, "i", 105)(4, "i");
389
- i0.ɵɵelementStart(5, "span", 106);
201
+ function MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_For_1_Template(rf, ctx) { if (rf & 1) {
202
+ const _r8 = i0.ɵɵgetCurrentView();
203
+ i0.ɵɵelementStart(0, "div", 50)(1, "div", 51);
204
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_For_1_Template_div_click_1_listener() { const server_r9 = i0.ɵɵrestoreView(_r8).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.toggleServerExpand(server_r9)); });
205
+ i0.ɵɵelementStart(2, "div", 52);
206
+ i0.ɵɵelement(3, "i", 53)(4, "i");
207
+ i0.ɵɵelementStart(5, "span", 54);
390
208
  i0.ɵɵtext(6);
391
209
  i0.ɵɵelementEnd();
392
- i0.ɵɵelementStart(7, "span", 107);
210
+ i0.ɵɵelementStart(7, "span", 55);
393
211
  i0.ɵɵtext(8);
394
212
  i0.ɵɵelementEnd()();
395
- i0.ɵɵelementStart(9, "div", 108);
396
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_72_Case_0_Conditional_2_For_1_Template_div_click_9_listener($event) { i0.ɵɵrestoreView(_r25); return i0.ɵɵresetView($event.stopPropagation()); });
397
- i0.ɵɵelementStart(10, "button", 109);
398
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_72_Case_0_Conditional_2_For_1_Template_button_click_10_listener() { const server_r26 = i0.ɵɵrestoreView(_r25).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.editServer(server_r26)); });
399
- i0.ɵɵelement(11, "i", 110);
400
- i0.ɵɵelementEnd();
401
- i0.ɵɵelementStart(12, "button", 111);
402
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_72_Case_0_Conditional_2_For_1_Template_button_click_12_listener() { const server_r26 = i0.ɵɵrestoreView(_r25).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.deleteServer(server_r26)); });
403
- i0.ɵɵelement(13, "i", 112);
213
+ i0.ɵɵelementStart(9, "div", 56);
214
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_For_1_Template_div_click_9_listener($event) { i0.ɵɵrestoreView(_r8); return i0.ɵɵresetView($event.stopPropagation()); });
215
+ i0.ɵɵelementStart(10, "button", 57);
216
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_For_1_Template_button_click_10_listener() { const server_r9 = i0.ɵɵrestoreView(_r8).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.editServer(server_r9)); });
217
+ i0.ɵɵelement(11, "i", 58);
218
+ i0.ɵɵelementEnd();
219
+ i0.ɵɵelementStart(12, "button", 59);
220
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_For_1_Template_button_click_12_listener() { const server_r9 = i0.ɵɵrestoreView(_r8).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.deleteServer(server_r9)); });
221
+ i0.ɵɵelement(13, "i", 60);
404
222
  i0.ɵɵelementEnd()()();
405
- i0.ɵɵelementStart(14, "div", 113);
406
- i0.ɵɵconditionalCreate(15, MCPDashboardComponent_Conditional_72_Case_0_Conditional_2_For_1_Conditional_15_Template, 2, 1, "p", 114);
407
- i0.ɵɵelementStart(16, "div", 115)(17, "div", 116)(18, "span", 117);
223
+ i0.ɵɵelementStart(14, "div", 61);
224
+ i0.ɵɵconditionalCreate(15, MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_For_1_Conditional_15_Template, 2, 1, "p", 62);
225
+ i0.ɵɵelementStart(16, "div", 63)(17, "div", 64)(18, "span", 65);
408
226
  i0.ɵɵtext(19, "Transport");
409
227
  i0.ɵɵelementEnd();
410
- i0.ɵɵelementStart(20, "span", 118);
228
+ i0.ɵɵelementStart(20, "span", 66);
411
229
  i0.ɵɵtext(21);
412
230
  i0.ɵɵelementEnd()();
413
- i0.ɵɵelementStart(22, "div", 116)(23, "span", 117);
231
+ i0.ɵɵelementStart(22, "div", 64)(23, "span", 65);
414
232
  i0.ɵɵtext(24, "Auth");
415
233
  i0.ɵɵelementEnd();
416
- i0.ɵɵelementStart(25, "span", 118);
234
+ i0.ɵɵelementStart(25, "span", 66);
417
235
  i0.ɵɵtext(26);
418
236
  i0.ɵɵelementEnd()();
419
- i0.ɵɵelementStart(27, "div", 116)(28, "span", 117);
237
+ i0.ɵɵelementStart(27, "div", 64)(28, "span", 65);
420
238
  i0.ɵɵtext(29, "Connections");
421
239
  i0.ɵɵelementEnd();
422
- i0.ɵɵelementStart(30, "span", 118);
240
+ i0.ɵɵelementStart(30, "span", 66);
423
241
  i0.ɵɵtext(31);
424
242
  i0.ɵɵelementEnd()();
425
- i0.ɵɵelementStart(32, "div", 116)(33, "span", 117);
243
+ i0.ɵɵelementStart(32, "div", 64)(33, "span", 65);
426
244
  i0.ɵɵtext(34, "Tools");
427
245
  i0.ɵɵelementEnd();
428
- i0.ɵɵelementStart(35, "span", 118);
246
+ i0.ɵɵelementStart(35, "span", 66);
429
247
  i0.ɵɵtext(36);
430
248
  i0.ɵɵelementEnd()();
431
- i0.ɵɵconditionalCreate(37, MCPDashboardComponent_Conditional_72_Case_0_Conditional_2_For_1_Conditional_37_Template, 5, 1, "div", 119);
432
- i0.ɵɵconditionalCreate(38, MCPDashboardComponent_Conditional_72_Case_0_Conditional_2_For_1_Conditional_38_Template, 5, 1, "div", 119);
433
- i0.ɵɵelementStart(39, "div", 116)(40, "span", 117);
249
+ i0.ɵɵconditionalCreate(37, MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_For_1_Conditional_37_Template, 5, 1, "div", 67);
250
+ i0.ɵɵconditionalCreate(38, MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_For_1_Conditional_38_Template, 5, 1, "div", 67);
251
+ i0.ɵɵelementStart(39, "div", 64)(40, "span", 65);
434
252
  i0.ɵɵtext(41, "Last Sync");
435
253
  i0.ɵɵelementEnd();
436
- i0.ɵɵelementStart(42, "span", 118);
254
+ i0.ɵɵelementStart(42, "span", 66);
437
255
  i0.ɵɵtext(43);
438
256
  i0.ɵɵelementEnd()()()();
439
- i0.ɵɵconditionalCreate(44, MCPDashboardComponent_Conditional_72_Case_0_Conditional_2_For_1_Conditional_44_Template, 7, 2, "div", 120);
257
+ i0.ɵɵconditionalCreate(44, MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_For_1_Conditional_44_Template, 7, 2, "div", 68);
440
258
  i0.ɵɵelementEnd();
441
259
  } if (rf & 2) {
442
- const server_r26 = ctx.$implicit;
443
- const ctx_r2 = i0.ɵɵnextContext(4);
444
- i0.ɵɵclassProp("expanded", ctx_r2.isServerExpanded(server_r26));
260
+ const server_r9 = ctx.$implicit;
261
+ const ctx_r1 = i0.ɵɵnextContext(4);
262
+ i0.ɵɵclassProp("expanded", ctx_r1.isServerExpanded(server_r9));
445
263
  i0.ɵɵadvance(3);
446
- i0.ɵɵclassProp("rotated", ctx_r2.isServerExpanded(server_r26));
264
+ i0.ɵɵclassProp("rotated", ctx_r1.isServerExpanded(server_r9));
447
265
  i0.ɵɵadvance();
448
- i0.ɵɵclassMap(ctx_r2.getTransportIcon(server_r26.TransportType));
266
+ i0.ɵɵclassMap(ctx_r1.getTransportIcon(server_r9.TransportType));
449
267
  i0.ɵɵadvance(2);
450
- i0.ɵɵtextInterpolate(server_r26.Name);
268
+ i0.ɵɵtextInterpolate(server_r9.Name);
451
269
  i0.ɵɵadvance();
452
- i0.ɵɵproperty("ngClass", ctx_r2.getStatusClass(server_r26.Status));
270
+ i0.ɵɵproperty("ngClass", ctx_r1.getStatusClass(server_r9.Status));
453
271
  i0.ɵɵadvance();
454
- i0.ɵɵtextInterpolate1(" ", server_r26.Status, " ");
272
+ i0.ɵɵtextInterpolate1(" ", server_r9.Status, " ");
455
273
  i0.ɵɵadvance(7);
456
- i0.ɵɵconditional(server_r26.Description ? 15 : -1);
274
+ i0.ɵɵconditional(server_r9.Description ? 15 : -1);
457
275
  i0.ɵɵadvance(6);
458
- i0.ɵɵtextInterpolate(server_r26.TransportType);
276
+ i0.ɵɵtextInterpolate(server_r9.TransportType);
459
277
  i0.ɵɵadvance(5);
460
- i0.ɵɵtextInterpolate(server_r26.DefaultAuthType);
278
+ i0.ɵɵtextInterpolate(server_r9.DefaultAuthType);
461
279
  i0.ɵɵadvance(5);
462
- i0.ɵɵtextInterpolate(server_r26.ConnectionCount);
280
+ i0.ɵɵtextInterpolate(server_r9.ConnectionCount);
463
281
  i0.ɵɵadvance(5);
464
- i0.ɵɵtextInterpolate(server_r26.ToolCount);
282
+ i0.ɵɵtextInterpolate(server_r9.ToolCount);
465
283
  i0.ɵɵadvance();
466
- i0.ɵɵconditional(server_r26.ServerURL ? 37 : -1);
284
+ i0.ɵɵconditional(server_r9.ServerURL ? 37 : -1);
467
285
  i0.ɵɵadvance();
468
- i0.ɵɵconditional(server_r26.Command ? 38 : -1);
286
+ i0.ɵɵconditional(server_r9.Command ? 38 : -1);
469
287
  i0.ɵɵadvance(5);
470
- i0.ɵɵtextInterpolate(ctx_r2.formatDate(server_r26.LastSyncAt));
288
+ i0.ɵɵtextInterpolate(ctx_r1.formatDate(server_r9.LastSyncAt));
471
289
  i0.ɵɵadvance();
472
- i0.ɵɵconditional(ctx_r2.isServerExpanded(server_r26) ? 44 : -1);
290
+ i0.ɵɵconditional(ctx_r1.isServerExpanded(server_r9) ? 44 : -1);
473
291
  } }
474
- function MCPDashboardComponent_Conditional_72_Case_0_Conditional_2_Template(rf, ctx) { if (rf & 1) {
475
- i0.ɵɵrepeaterCreate(0, MCPDashboardComponent_Conditional_72_Case_0_Conditional_2_For_1_Template, 45, 18, "div", 101, _forTrack0);
292
+ function MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_Template(rf, ctx) { if (rf & 1) {
293
+ i0.ɵɵrepeaterCreate(0, MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_For_1_Template, 45, 18, "div", 49, _forTrack0);
476
294
  } if (rf & 2) {
477
- const ctx_r2 = i0.ɵɵnextContext(3);
478
- i0.ɵɵrepeater(ctx_r2.filteredServers);
295
+ const ctx_r1 = i0.ɵɵnextContext(3);
296
+ i0.ɵɵrepeater(ctx_r1.filteredServers);
479
297
  } }
480
- function MCPDashboardComponent_Conditional_72_Case_0_Template(rf, ctx) { if (rf & 1) {
481
- i0.ɵɵelementStart(0, "div", 97);
482
- i0.ɵɵconditionalCreate(1, MCPDashboardComponent_Conditional_72_Case_0_Conditional_1_Template, 6, 0, "div", 100)(2, MCPDashboardComponent_Conditional_72_Case_0_Conditional_2_Template, 2, 0);
298
+ function MCPDashboardComponent_Conditional_17_Case_0_Template(rf, ctx) { if (rf & 1) {
299
+ i0.ɵɵelementStart(0, "div", 44);
300
+ i0.ɵɵconditionalCreate(1, MCPDashboardComponent_Conditional_17_Case_0_Conditional_1_Template, 6, 0, "div", 47)(2, MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_Template, 2, 0);
483
301
  i0.ɵɵelementEnd();
484
302
  } if (rf & 2) {
485
- const ctx_r2 = i0.ɵɵnextContext(2);
303
+ const ctx_r1 = i0.ɵɵnextContext(2);
486
304
  i0.ɵɵadvance();
487
- i0.ɵɵconditional(ctx_r2.filteredServers.length === 0 ? 1 : 2);
305
+ i0.ɵɵconditional(ctx_r1.filteredServers.length === 0 ? 1 : 2);
488
306
  } }
489
- function MCPDashboardComponent_Conditional_72_Case_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
490
- const _r29 = i0.ɵɵgetCurrentView();
491
- i0.ɵɵelementStart(0, "div", 100);
492
- i0.ɵɵelement(1, "i", 41);
307
+ function MCPDashboardComponent_Conditional_17_Case_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
308
+ const _r12 = i0.ɵɵgetCurrentView();
309
+ i0.ɵɵelementStart(0, "div", 47);
310
+ i0.ɵɵelement(1, "i", 82);
493
311
  i0.ɵɵelementStart(2, "p");
494
312
  i0.ɵɵtext(3, "No connections configured");
495
313
  i0.ɵɵelementEnd();
496
- i0.ɵɵelementStart(4, "button", 68);
497
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_72_Case_1_Conditional_1_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r29); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.createConnection()); });
314
+ i0.ɵɵelementStart(4, "button", 34);
315
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_17_Case_1_Conditional_1_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.createConnection()); });
498
316
  i0.ɵɵtext(5, " Add Your First Connection ");
499
317
  i0.ɵɵelementEnd()();
500
318
  } }
501
- function MCPDashboardComponent_Conditional_72_Case_1_Conditional_2_For_1_Conditional_11_Template(rf, ctx) { if (rf & 1) {
502
- i0.ɵɵelement(0, "i", 134);
319
+ function MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_11_Template(rf, ctx) { if (rf & 1) {
320
+ i0.ɵɵelement(0, "i", 84);
503
321
  } }
504
- function MCPDashboardComponent_Conditional_72_Case_1_Conditional_2_For_1_Conditional_12_Template(rf, ctx) { if (rf & 1) {
505
- i0.ɵɵelement(0, "i", 77);
322
+ function MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_12_Template(rf, ctx) { if (rf & 1) {
323
+ i0.ɵɵelement(0, "i", 85);
506
324
  } }
507
- function MCPDashboardComponent_Conditional_72_Case_1_Conditional_2_For_1_Conditional_17_Template(rf, ctx) { if (rf & 1) {
508
- i0.ɵɵelementStart(0, "div", 135);
509
- i0.ɵɵelement(1, "i", 138);
510
- i0.ɵɵelementStart(2, "span", 139);
325
+ function MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_17_Template(rf, ctx) { if (rf & 1) {
326
+ i0.ɵɵelementStart(0, "div", 86);
327
+ i0.ɵɵelement(1, "i", 89);
328
+ i0.ɵɵelementStart(2, "span", 90);
511
329
  i0.ɵɵtext(3);
512
330
  i0.ɵɵelementEnd()();
513
331
  } if (rf & 2) {
514
- const conn_r31 = i0.ɵɵnextContext().$implicit;
515
- const ctx_r2 = i0.ɵɵnextContext(4);
332
+ const conn_r14 = i0.ɵɵnextContext().$implicit;
333
+ const ctx_r1 = i0.ɵɵnextContext(4);
516
334
  i0.ɵɵadvance(3);
517
- i0.ɵɵtextInterpolate(ctx_r2.getSyncProgressMessage(conn_r31.ID) || "Syncing...");
335
+ i0.ɵɵtextInterpolate(ctx_r1.getSyncProgressMessage(conn_r14.ID) || "Syncing...");
518
336
  } }
519
- function MCPDashboardComponent_Conditional_72_Case_1_Conditional_2_For_1_Conditional_18_Conditional_1_Template(rf, ctx) { if (rf & 1) {
520
- i0.ɵɵelement(0, "i", 141);
337
+ function MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_18_Conditional_1_Template(rf, ctx) { if (rf & 1) {
338
+ i0.ɵɵelement(0, "i", 92);
521
339
  i0.ɵɵelementStart(1, "span");
522
340
  i0.ɵɵtext(2);
523
341
  i0.ɵɵelementEnd();
524
342
  } if (rf & 2) {
525
- let tmp_16_0;
526
- const conn_r31 = i0.ɵɵnextContext(2).$implicit;
527
- const ctx_r2 = i0.ɵɵnextContext(4);
343
+ let tmp_15_0;
344
+ const conn_r14 = i0.ɵɵnextContext(2).$implicit;
345
+ const ctx_r1 = i0.ɵɵnextContext(4);
528
346
  i0.ɵɵadvance(2);
529
- i0.ɵɵtextInterpolate3("Synced: ", (tmp_16_0 = ctx_r2.getSyncState(conn_r31.ID)) == null ? null : tmp_16_0.lastResult == null ? null : tmp_16_0.lastResult.Added, " added, ", (tmp_16_0 = ctx_r2.getSyncState(conn_r31.ID)) == null ? null : tmp_16_0.lastResult == null ? null : tmp_16_0.lastResult.Updated, " updated, ", (tmp_16_0 = ctx_r2.getSyncState(conn_r31.ID)) == null ? null : tmp_16_0.lastResult == null ? null : tmp_16_0.lastResult.Deprecated, " deprecated ");
347
+ i0.ɵɵtextInterpolate3("Synced: ", (tmp_15_0 = ctx_r1.getSyncState(conn_r14.ID)) == null ? null : tmp_15_0.lastResult == null ? null : tmp_15_0.lastResult.Added, " added, ", (tmp_15_0 = ctx_r1.getSyncState(conn_r14.ID)) == null ? null : tmp_15_0.lastResult == null ? null : tmp_15_0.lastResult.Updated, " updated, ", (tmp_15_0 = ctx_r1.getSyncState(conn_r14.ID)) == null ? null : tmp_15_0.lastResult == null ? null : tmp_15_0.lastResult.Deprecated, " deprecated ");
530
348
  } }
531
- function MCPDashboardComponent_Conditional_72_Case_1_Conditional_2_For_1_Conditional_18_Conditional_2_Template(rf, ctx) { if (rf & 1) {
532
- i0.ɵɵelement(0, "i", 142);
349
+ function MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_18_Conditional_2_Template(rf, ctx) { if (rf & 1) {
350
+ i0.ɵɵelement(0, "i", 93);
533
351
  i0.ɵɵelementStart(1, "span");
534
352
  i0.ɵɵtext(2);
535
353
  i0.ɵɵelementEnd();
536
354
  } if (rf & 2) {
537
- let tmp_16_0;
538
- const conn_r31 = i0.ɵɵnextContext(2).$implicit;
539
- const ctx_r2 = i0.ɵɵnextContext(4);
355
+ let tmp_15_0;
356
+ const conn_r14 = i0.ɵɵnextContext(2).$implicit;
357
+ const ctx_r1 = i0.ɵɵnextContext(4);
540
358
  i0.ɵɵadvance(2);
541
- i0.ɵɵtextInterpolate((tmp_16_0 = ctx_r2.getSyncState(conn_r31.ID)) == null ? null : tmp_16_0.lastResult == null ? null : tmp_16_0.lastResult.ErrorMessage);
359
+ i0.ɵɵtextInterpolate((tmp_15_0 = ctx_r1.getSyncState(conn_r14.ID)) == null ? null : tmp_15_0.lastResult == null ? null : tmp_15_0.lastResult.ErrorMessage);
542
360
  } }
543
- function MCPDashboardComponent_Conditional_72_Case_1_Conditional_2_For_1_Conditional_18_Template(rf, ctx) { if (rf & 1) {
544
- i0.ɵɵelementStart(0, "div", 140);
545
- i0.ɵɵconditionalCreate(1, MCPDashboardComponent_Conditional_72_Case_1_Conditional_2_For_1_Conditional_18_Conditional_1_Template, 3, 3)(2, MCPDashboardComponent_Conditional_72_Case_1_Conditional_2_For_1_Conditional_18_Conditional_2_Template, 3, 1);
361
+ function MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_18_Template(rf, ctx) { if (rf & 1) {
362
+ i0.ɵɵelementStart(0, "div", 91);
363
+ i0.ɵɵconditionalCreate(1, MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_18_Conditional_1_Template, 3, 3)(2, MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_18_Conditional_2_Template, 3, 1);
546
364
  i0.ɵɵelementEnd();
547
365
  } if (rf & 2) {
366
+ let tmp_14_0;
548
367
  let tmp_15_0;
549
368
  let tmp_16_0;
550
- let tmp_17_0;
551
- const conn_r31 = i0.ɵɵnextContext().$implicit;
552
- const ctx_r2 = i0.ɵɵnextContext(4);
553
- i0.ɵɵclassProp("success", (tmp_15_0 = ctx_r2.getSyncState(conn_r31.ID)) == null ? null : tmp_15_0.lastResult == null ? null : tmp_15_0.lastResult.Success)("error", !((tmp_16_0 = ctx_r2.getSyncState(conn_r31.ID)) == null ? null : tmp_16_0.lastResult == null ? null : tmp_16_0.lastResult.Success));
369
+ const conn_r14 = i0.ɵɵnextContext().$implicit;
370
+ const ctx_r1 = i0.ɵɵnextContext(4);
371
+ i0.ɵɵclassProp("success", (tmp_14_0 = ctx_r1.getSyncState(conn_r14.ID)) == null ? null : tmp_14_0.lastResult == null ? null : tmp_14_0.lastResult.Success)("error", !((tmp_15_0 = ctx_r1.getSyncState(conn_r14.ID)) == null ? null : tmp_15_0.lastResult == null ? null : tmp_15_0.lastResult.Success));
554
372
  i0.ɵɵadvance();
555
- i0.ɵɵconditional(((tmp_17_0 = ctx_r2.getSyncState(conn_r31.ID)) == null ? null : tmp_17_0.lastResult == null ? null : tmp_17_0.lastResult.Success) ? 1 : 2);
373
+ i0.ɵɵconditional(((tmp_16_0 = ctx_r1.getSyncState(conn_r14.ID)) == null ? null : tmp_16_0.lastResult == null ? null : tmp_16_0.lastResult.Success) ? 1 : 2);
556
374
  } }
557
- function MCPDashboardComponent_Conditional_72_Case_1_Conditional_2_For_1_Conditional_20_Template(rf, ctx) { if (rf & 1) {
558
- i0.ɵɵelementStart(0, "p", 114);
375
+ function MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_20_Template(rf, ctx) { if (rf & 1) {
376
+ i0.ɵɵelementStart(0, "p", 62);
559
377
  i0.ɵɵtext(1);
560
378
  i0.ɵɵelementEnd();
561
379
  } if (rf & 2) {
562
- const conn_r31 = i0.ɵɵnextContext().$implicit;
380
+ const conn_r14 = i0.ɵɵnextContext().$implicit;
563
381
  i0.ɵɵadvance();
564
- i0.ɵɵtextInterpolate(conn_r31.Description);
382
+ i0.ɵɵtextInterpolate(conn_r14.Description);
565
383
  } }
566
- function MCPDashboardComponent_Conditional_72_Case_1_Conditional_2_For_1_Conditional_42_Template(rf, ctx) { if (rf & 1) {
567
- i0.ɵɵelementStart(0, "div", 137)(1, "span", 117);
384
+ function MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_42_Template(rf, ctx) { if (rf & 1) {
385
+ i0.ɵɵelementStart(0, "div", 88)(1, "span", 65);
568
386
  i0.ɵɵtext(2, "Last Error");
569
387
  i0.ɵɵelementEnd();
570
- i0.ɵɵelementStart(3, "span", 118);
388
+ i0.ɵɵelementStart(3, "span", 66);
571
389
  i0.ɵɵtext(4);
572
390
  i0.ɵɵelementEnd()();
573
391
  } if (rf & 2) {
574
- const conn_r31 = i0.ɵɵnextContext().$implicit;
392
+ const conn_r14 = i0.ɵɵnextContext().$implicit;
575
393
  i0.ɵɵadvance(4);
576
- i0.ɵɵtextInterpolate(conn_r31.LastErrorMessage);
394
+ i0.ɵɵtextInterpolate(conn_r14.LastErrorMessage);
577
395
  } }
578
- function MCPDashboardComponent_Conditional_72_Case_1_Conditional_2_For_1_Conditional_43_Conditional_5_Template(rf, ctx) { if (rf & 1) {
579
- i0.ɵɵelementStart(0, "div", 124);
580
- i0.ɵɵelement(1, "i", 126);
396
+ function MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_43_Conditional_5_Template(rf, ctx) { if (rf & 1) {
397
+ i0.ɵɵelementStart(0, "div", 73);
398
+ i0.ɵɵelement(1, "i", 75);
581
399
  i0.ɵɵtext(2, " No tools discovered yet. Click the sync button to discover tools. ");
582
400
  i0.ɵɵelementEnd();
583
401
  } }
584
- function MCPDashboardComponent_Conditional_72_Case_1_Conditional_2_For_1_Conditional_43_Conditional_6_For_2_Template(rf, ctx) { if (rf & 1) {
585
- const _r32 = i0.ɵɵgetCurrentView();
586
- i0.ɵɵelementStart(0, "div", 127)(1, "div", 128)(2, "span", 129);
402
+ function MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_43_Conditional_6_For_2_Template(rf, ctx) { if (rf & 1) {
403
+ const _r15 = i0.ɵɵgetCurrentView();
404
+ i0.ɵɵelementStart(0, "div", 76)(1, "div", 77)(2, "span", 78);
587
405
  i0.ɵɵtext(3);
588
406
  i0.ɵɵelementEnd();
589
- i0.ɵɵelementStart(4, "span", 130);
590
- i0.ɵɵelement(5, "i", 131);
407
+ i0.ɵɵelementStart(4, "span", 79);
408
+ i0.ɵɵelement(5, "i", 80);
591
409
  i0.ɵɵtext(6);
592
410
  i0.ɵɵelementEnd()();
593
- i0.ɵɵelementStart(7, "button", 143);
594
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_72_Case_1_Conditional_2_For_1_Conditional_43_Conditional_6_For_2_Template_button_click_7_listener($event) { const tool_r33 = i0.ɵɵrestoreView(_r32).$implicit; const conn_r31 = i0.ɵɵnextContext(3).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); ctx_r2.runToolFromCard(tool_r33, conn_r31); return i0.ɵɵresetView($event.stopPropagation()); });
595
- i0.ɵɵelement(8, "i", 75);
411
+ i0.ɵɵelementStart(7, "button", 94);
412
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_43_Conditional_6_For_2_Template_button_click_7_listener($event) { const tool_r16 = i0.ɵɵrestoreView(_r15).$implicit; const conn_r14 = i0.ɵɵnextContext(3).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); ctx_r1.runToolFromCard(tool_r16, conn_r14); return i0.ɵɵresetView($event.stopPropagation()); });
413
+ i0.ɵɵelement(8, "i", 39);
596
414
  i0.ɵɵelementEnd()();
597
415
  } if (rf & 2) {
598
- const tool_r33 = ctx.$implicit;
599
- const ctx_r2 = i0.ɵɵnextContext(7);
416
+ const tool_r16 = ctx.$implicit;
417
+ const ctx_r1 = i0.ɵɵnextContext(7);
600
418
  i0.ɵɵadvance(3);
601
- i0.ɵɵtextInterpolate(tool_r33.ToolTitle || tool_r33.ToolName);
419
+ i0.ɵɵtextInterpolate(tool_r16.ToolTitle || tool_r16.ToolName);
602
420
  i0.ɵɵadvance(3);
603
- i0.ɵɵtextInterpolate1(" ", ctx_r2.getParamCount(tool_r33), " params ");
421
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.getParamCount(tool_r16), " params ");
604
422
  } }
605
- function MCPDashboardComponent_Conditional_72_Case_1_Conditional_2_For_1_Conditional_43_Conditional_6_Template(rf, ctx) { if (rf & 1) {
606
- i0.ɵɵelementStart(0, "div", 125);
607
- i0.ɵɵrepeaterCreate(1, MCPDashboardComponent_Conditional_72_Case_1_Conditional_2_For_1_Conditional_43_Conditional_6_For_2_Template, 9, 2, "div", 127, _forTrack0);
423
+ function MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_43_Conditional_6_Template(rf, ctx) { if (rf & 1) {
424
+ i0.ɵɵelementStart(0, "div", 74);
425
+ i0.ɵɵrepeaterCreate(1, MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_43_Conditional_6_For_2_Template, 9, 2, "div", 76, _forTrack0);
608
426
  i0.ɵɵelementEnd();
609
427
  } if (rf & 2) {
610
- const conn_r31 = i0.ɵɵnextContext(2).$implicit;
611
- const ctx_r2 = i0.ɵɵnextContext(4);
428
+ const conn_r14 = i0.ɵɵnextContext(2).$implicit;
429
+ const ctx_r1 = i0.ɵɵnextContext(4);
612
430
  i0.ɵɵadvance();
613
- i0.ɵɵrepeater(ctx_r2.getToolsForConnection(conn_r31.ID));
431
+ i0.ɵɵrepeater(ctx_r1.getToolsForConnection(conn_r14.ID));
614
432
  } }
615
- function MCPDashboardComponent_Conditional_72_Case_1_Conditional_2_For_1_Conditional_43_Template(rf, ctx) { if (rf & 1) {
616
- i0.ɵɵelementStart(0, "div", 120)(1, "div", 123);
617
- i0.ɵɵelement(2, "i", 42);
433
+ function MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_43_Template(rf, ctx) { if (rf & 1) {
434
+ i0.ɵɵelementStart(0, "div", 68)(1, "div", 71);
435
+ i0.ɵɵelement(2, "i", 72);
618
436
  i0.ɵɵelementStart(3, "span");
619
437
  i0.ɵɵtext(4);
620
438
  i0.ɵɵelementEnd()();
621
- i0.ɵɵconditionalCreate(5, MCPDashboardComponent_Conditional_72_Case_1_Conditional_2_For_1_Conditional_43_Conditional_5_Template, 3, 0, "div", 124)(6, MCPDashboardComponent_Conditional_72_Case_1_Conditional_2_For_1_Conditional_43_Conditional_6_Template, 3, 0, "div", 125);
439
+ i0.ɵɵconditionalCreate(5, MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_43_Conditional_5_Template, 3, 0, "div", 73)(6, MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_43_Conditional_6_Template, 3, 0, "div", 74);
622
440
  i0.ɵɵelementEnd();
623
441
  } if (rf & 2) {
624
- const conn_r31 = i0.ɵɵnextContext().$implicit;
625
- const ctx_r2 = i0.ɵɵnextContext(4);
442
+ const conn_r14 = i0.ɵɵnextContext().$implicit;
443
+ const ctx_r1 = i0.ɵɵnextContext(4);
626
444
  i0.ɵɵadvance(4);
627
- i0.ɵɵtextInterpolate1("Available Tools (", ctx_r2.getToolsForConnection(conn_r31.ID).length, ")");
445
+ i0.ɵɵtextInterpolate1("Available Tools (", ctx_r1.getToolsForConnection(conn_r14.ID).length, ")");
628
446
  i0.ɵɵadvance();
629
- i0.ɵɵconditional(ctx_r2.getToolsForConnection(conn_r31.ID).length === 0 ? 5 : 6);
447
+ i0.ɵɵconditional(ctx_r1.getToolsForConnection(conn_r14.ID).length === 0 ? 5 : 6);
630
448
  } }
631
- function MCPDashboardComponent_Conditional_72_Case_1_Conditional_2_For_1_Template(rf, ctx) { if (rf & 1) {
632
- const _r30 = i0.ɵɵgetCurrentView();
633
- i0.ɵɵelementStart(0, "div", 102)(1, "div", 103);
634
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_72_Case_1_Conditional_2_For_1_Template_div_click_1_listener() { const conn_r31 = i0.ɵɵrestoreView(_r30).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.toggleConnectionExpand(conn_r31)); });
635
- i0.ɵɵelementStart(2, "div", 104);
636
- i0.ɵɵelement(3, "i", 105)(4, "i", 41);
637
- i0.ɵɵelementStart(5, "span", 106);
449
+ function MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Template(rf, ctx) { if (rf & 1) {
450
+ const _r13 = i0.ɵɵgetCurrentView();
451
+ i0.ɵɵelementStart(0, "div", 50)(1, "div", 51);
452
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Template_div_click_1_listener() { const conn_r14 = i0.ɵɵrestoreView(_r13).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.toggleConnectionExpand(conn_r14)); });
453
+ i0.ɵɵelementStart(2, "div", 52);
454
+ i0.ɵɵelement(3, "i", 53)(4, "i", 82);
455
+ i0.ɵɵelementStart(5, "span", 54);
638
456
  i0.ɵɵtext(6);
639
457
  i0.ɵɵelementEnd();
640
- i0.ɵɵelementStart(7, "span", 107);
458
+ i0.ɵɵelementStart(7, "span", 55);
641
459
  i0.ɵɵtext(8);
642
460
  i0.ɵɵelementEnd()();
643
- i0.ɵɵelementStart(9, "div", 108);
644
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_72_Case_1_Conditional_2_For_1_Template_div_click_9_listener($event) { i0.ɵɵrestoreView(_r30); return i0.ɵɵresetView($event.stopPropagation()); });
645
- i0.ɵɵelementStart(10, "button", 133);
646
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_72_Case_1_Conditional_2_For_1_Template_button_click_10_listener() { const conn_r31 = i0.ɵɵrestoreView(_r30).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.syncConnectionTools(conn_r31)); });
647
- i0.ɵɵconditionalCreate(11, MCPDashboardComponent_Conditional_72_Case_1_Conditional_2_For_1_Conditional_11_Template, 1, 0, "i", 134)(12, MCPDashboardComponent_Conditional_72_Case_1_Conditional_2_For_1_Conditional_12_Template, 1, 0, "i", 77);
648
- i0.ɵɵelementEnd();
649
- i0.ɵɵelementStart(13, "button", 109);
650
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_72_Case_1_Conditional_2_For_1_Template_button_click_13_listener() { const conn_r31 = i0.ɵɵrestoreView(_r30).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.editConnection(conn_r31)); });
651
- i0.ɵɵelement(14, "i", 110);
652
- i0.ɵɵelementEnd();
653
- i0.ɵɵelementStart(15, "button", 111);
654
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_72_Case_1_Conditional_2_For_1_Template_button_click_15_listener() { const conn_r31 = i0.ɵɵrestoreView(_r30).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.deleteConnection(conn_r31)); });
655
- i0.ɵɵelement(16, "i", 112);
461
+ i0.ɵɵelementStart(9, "div", 56);
462
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Template_div_click_9_listener($event) { i0.ɵɵrestoreView(_r13); return i0.ɵɵresetView($event.stopPropagation()); });
463
+ i0.ɵɵelementStart(10, "button", 83);
464
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Template_button_click_10_listener() { const conn_r14 = i0.ɵɵrestoreView(_r13).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.syncConnectionTools(conn_r14)); });
465
+ i0.ɵɵconditionalCreate(11, MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_11_Template, 1, 0, "i", 84)(12, MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_12_Template, 1, 0, "i", 85);
466
+ i0.ɵɵelementEnd();
467
+ i0.ɵɵelementStart(13, "button", 57);
468
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Template_button_click_13_listener() { const conn_r14 = i0.ɵɵrestoreView(_r13).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.editConnection(conn_r14)); });
469
+ i0.ɵɵelement(14, "i", 58);
470
+ i0.ɵɵelementEnd();
471
+ i0.ɵɵelementStart(15, "button", 59);
472
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Template_button_click_15_listener() { const conn_r14 = i0.ɵɵrestoreView(_r13).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.deleteConnection(conn_r14)); });
473
+ i0.ɵɵelement(16, "i", 60);
656
474
  i0.ɵɵelementEnd()()();
657
- i0.ɵɵconditionalCreate(17, MCPDashboardComponent_Conditional_72_Case_1_Conditional_2_For_1_Conditional_17_Template, 4, 1, "div", 135);
658
- i0.ɵɵconditionalCreate(18, MCPDashboardComponent_Conditional_72_Case_1_Conditional_2_For_1_Conditional_18_Template, 3, 5, "div", 136);
659
- i0.ɵɵelementStart(19, "div", 113);
660
- i0.ɵɵconditionalCreate(20, MCPDashboardComponent_Conditional_72_Case_1_Conditional_2_For_1_Conditional_20_Template, 2, 1, "p", 114);
661
- i0.ɵɵelementStart(21, "div", 115)(22, "div", 116)(23, "span", 117);
475
+ i0.ɵɵconditionalCreate(17, MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_17_Template, 4, 1, "div", 86);
476
+ i0.ɵɵconditionalCreate(18, MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_18_Template, 3, 5, "div", 87);
477
+ i0.ɵɵelementStart(19, "div", 61);
478
+ i0.ɵɵconditionalCreate(20, MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_20_Template, 2, 1, "p", 62);
479
+ i0.ɵɵelementStart(21, "div", 63)(22, "div", 64)(23, "span", 65);
662
480
  i0.ɵɵtext(24, "Server");
663
481
  i0.ɵɵelementEnd();
664
- i0.ɵɵelementStart(25, "span", 118);
482
+ i0.ɵɵelementStart(25, "span", 66);
665
483
  i0.ɵɵtext(26);
666
484
  i0.ɵɵelementEnd()();
667
- i0.ɵɵelementStart(27, "div", 116)(28, "span", 117);
485
+ i0.ɵɵelementStart(27, "div", 64)(28, "span", 65);
668
486
  i0.ɵɵtext(29, "Auto Sync");
669
487
  i0.ɵɵelementEnd();
670
- i0.ɵɵelementStart(30, "span", 118);
488
+ i0.ɵɵelementStart(30, "span", 66);
671
489
  i0.ɵɵtext(31);
672
490
  i0.ɵɵelementEnd()();
673
- i0.ɵɵelementStart(32, "div", 116)(33, "span", 117);
491
+ i0.ɵɵelementStart(32, "div", 64)(33, "span", 65);
674
492
  i0.ɵɵtext(34, "Logging");
675
493
  i0.ɵɵelementEnd();
676
- i0.ɵɵelementStart(35, "span", 118);
494
+ i0.ɵɵelementStart(35, "span", 66);
677
495
  i0.ɵɵtext(36);
678
496
  i0.ɵɵelementEnd()();
679
- i0.ɵɵelementStart(37, "div", 116)(38, "span", 117);
497
+ i0.ɵɵelementStart(37, "div", 64)(38, "span", 65);
680
498
  i0.ɵɵtext(39, "Last Connected");
681
499
  i0.ɵɵelementEnd();
682
- i0.ɵɵelementStart(40, "span", 118);
500
+ i0.ɵɵelementStart(40, "span", 66);
683
501
  i0.ɵɵtext(41);
684
502
  i0.ɵɵelementEnd()();
685
- i0.ɵɵconditionalCreate(42, MCPDashboardComponent_Conditional_72_Case_1_Conditional_2_For_1_Conditional_42_Template, 5, 1, "div", 137);
503
+ i0.ɵɵconditionalCreate(42, MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_42_Template, 5, 1, "div", 88);
686
504
  i0.ɵɵelementEnd()();
687
- i0.ɵɵconditionalCreate(43, MCPDashboardComponent_Conditional_72_Case_1_Conditional_2_For_1_Conditional_43_Template, 7, 2, "div", 120);
505
+ i0.ɵɵconditionalCreate(43, MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_43_Template, 7, 2, "div", 68);
688
506
  i0.ɵɵelementEnd();
689
507
  } if (rf & 2) {
690
- let tmp_22_0;
691
- const conn_r31 = ctx.$implicit;
692
- const ctx_r2 = i0.ɵɵnextContext(4);
693
- i0.ɵɵclassProp("expanded", ctx_r2.isConnectionExpanded(conn_r31));
508
+ let tmp_21_0;
509
+ const conn_r14 = ctx.$implicit;
510
+ const ctx_r1 = i0.ɵɵnextContext(4);
511
+ i0.ɵɵclassProp("expanded", ctx_r1.isConnectionExpanded(conn_r14));
694
512
  i0.ɵɵadvance(3);
695
- i0.ɵɵclassProp("rotated", ctx_r2.isConnectionExpanded(conn_r31));
513
+ i0.ɵɵclassProp("rotated", ctx_r1.isConnectionExpanded(conn_r14));
696
514
  i0.ɵɵadvance(3);
697
- i0.ɵɵtextInterpolate(conn_r31.Name);
515
+ i0.ɵɵtextInterpolate(conn_r14.Name);
698
516
  i0.ɵɵadvance();
699
- i0.ɵɵproperty("ngClass", ctx_r2.getStatusClass(conn_r31.Status));
517
+ i0.ɵɵproperty("ngClass", ctx_r1.getStatusClass(conn_r14.Status));
700
518
  i0.ɵɵadvance();
701
- i0.ɵɵtextInterpolate1(" ", conn_r31.Status, " ");
519
+ i0.ɵɵtextInterpolate1(" ", conn_r14.Status, " ");
702
520
  i0.ɵɵadvance(2);
703
- i0.ɵɵproperty("disabled", ctx_r2.isSyncing(conn_r31.ID));
521
+ i0.ɵɵproperty("disabled", ctx_r1.isSyncing(conn_r14.ID));
704
522
  i0.ɵɵadvance();
705
- i0.ɵɵconditional(ctx_r2.isSyncing(conn_r31.ID) ? 11 : 12);
523
+ i0.ɵɵconditional(ctx_r1.isSyncing(conn_r14.ID) ? 11 : 12);
706
524
  i0.ɵɵadvance(6);
707
- i0.ɵɵconditional(ctx_r2.isSyncing(conn_r31.ID) ? 17 : -1);
525
+ i0.ɵɵconditional(ctx_r1.isSyncing(conn_r14.ID) ? 17 : -1);
708
526
  i0.ɵɵadvance();
709
- i0.ɵɵconditional(((tmp_22_0 = ctx_r2.getSyncState(conn_r31.ID)) == null ? null : tmp_22_0.lastResult) && !ctx_r2.isSyncing(conn_r31.ID) ? 18 : -1);
527
+ i0.ɵɵconditional(((tmp_21_0 = ctx_r1.getSyncState(conn_r14.ID)) == null ? null : tmp_21_0.lastResult) && !ctx_r1.isSyncing(conn_r14.ID) ? 18 : -1);
710
528
  i0.ɵɵadvance(2);
711
- i0.ɵɵconditional(conn_r31.Description ? 20 : -1);
529
+ i0.ɵɵconditional(conn_r14.Description ? 20 : -1);
712
530
  i0.ɵɵadvance(6);
713
- i0.ɵɵtextInterpolate(conn_r31.ServerName);
531
+ i0.ɵɵtextInterpolate(conn_r14.ServerName);
714
532
  i0.ɵɵadvance(5);
715
- i0.ɵɵtextInterpolate(conn_r31.AutoSyncTools ? "Yes" : "No");
533
+ i0.ɵɵtextInterpolate(conn_r14.AutoSyncTools ? "Yes" : "No");
716
534
  i0.ɵɵadvance(5);
717
- i0.ɵɵtextInterpolate(conn_r31.LogToolCalls ? "Enabled" : "Disabled");
535
+ i0.ɵɵtextInterpolate(conn_r14.LogToolCalls ? "Enabled" : "Disabled");
718
536
  i0.ɵɵadvance(5);
719
- i0.ɵɵtextInterpolate(ctx_r2.formatDate(conn_r31.LastConnectedAt));
537
+ i0.ɵɵtextInterpolate(ctx_r1.formatDate(conn_r14.LastConnectedAt));
720
538
  i0.ɵɵadvance();
721
- i0.ɵɵconditional(conn_r31.LastErrorMessage ? 42 : -1);
539
+ i0.ɵɵconditional(conn_r14.LastErrorMessage ? 42 : -1);
722
540
  i0.ɵɵadvance();
723
- i0.ɵɵconditional(ctx_r2.isConnectionExpanded(conn_r31) ? 43 : -1);
724
- } }
725
- function MCPDashboardComponent_Conditional_72_Case_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
726
- i0.ɵɵrepeaterCreate(0, MCPDashboardComponent_Conditional_72_Case_1_Conditional_2_For_1_Template, 44, 18, "div", 101, _forTrack0);
727
- } if (rf & 2) {
728
- const ctx_r2 = i0.ɵɵnextContext(3);
729
- i0.ɵɵrepeater(ctx_r2.filteredConnections);
541
+ i0.ɵɵconditional(ctx_r1.isConnectionExpanded(conn_r14) ? 43 : -1);
730
542
  } }
731
- function MCPDashboardComponent_Conditional_72_Case_1_Template(rf, ctx) { if (rf & 1) {
732
- i0.ɵɵelementStart(0, "div", 98);
733
- i0.ɵɵconditionalCreate(1, MCPDashboardComponent_Conditional_72_Case_1_Conditional_1_Template, 6, 0, "div", 100)(2, MCPDashboardComponent_Conditional_72_Case_1_Conditional_2_Template, 2, 0);
734
- i0.ɵɵelementEnd();
543
+ function MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
544
+ i0.ɵɵrepeaterCreate(0, MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Template, 44, 18, "div", 49, _forTrack0);
735
545
  } if (rf & 2) {
736
- const ctx_r2 = i0.ɵɵnextContext(2);
737
- i0.ɵɵadvance();
738
- i0.ɵɵconditional(ctx_r2.filteredConnections.length === 0 ? 1 : 2);
546
+ const ctx_r1 = i0.ɵɵnextContext(3);
547
+ i0.ɵɵrepeater(ctx_r1.filteredConnections);
739
548
  } }
740
- function MCPDashboardComponent_Conditional_72_Case_2_Conditional_4_Template(rf, ctx) { if (rf & 1) {
741
- i0.ɵɵelementStart(0, "span");
742
- i0.ɵɵtext(1);
549
+ function MCPDashboardComponent_Conditional_17_Case_1_Template(rf, ctx) { if (rf & 1) {
550
+ i0.ɵɵelementStart(0, "div", 45);
551
+ i0.ɵɵconditionalCreate(1, MCPDashboardComponent_Conditional_17_Case_1_Conditional_1_Template, 6, 0, "div", 47)(2, MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_Template, 2, 0);
743
552
  i0.ɵɵelementEnd();
744
553
  } if (rf & 2) {
745
- const ctx_r2 = i0.ɵɵnextContext(3);
554
+ const ctx_r1 = i0.ɵɵnextContext(2);
746
555
  i0.ɵɵadvance();
747
- i0.ɵɵtextInterpolate2("\u00B7 Showing ", ctx_r2.pagedTools.length, " of ", ctx_r2.toolsTotalCount);
556
+ i0.ɵɵconditional(ctx_r1.filteredConnections.length === 0 ? 1 : 2);
748
557
  } }
749
- function MCPDashboardComponent_Conditional_72_Case_2_Conditional_5_For_10_Template(rf, ctx) { if (rf & 1) {
750
- const _r36 = i0.ɵɵgetCurrentView();
751
- i0.ɵɵelementStart(0, "div", 149);
752
- i0.ɵɵelement(1, "i", 151);
753
- i0.ɵɵelementStart(2, "div", 152)(3, "div", 153);
558
+ function MCPDashboardComponent_Conditional_17_Case_2_Conditional_0_For_10_Template(rf, ctx) { if (rf & 1) {
559
+ const _r18 = i0.ɵɵgetCurrentView();
560
+ i0.ɵɵelementStart(0, "div", 98);
561
+ i0.ɵɵelement(1, "i", 100);
562
+ i0.ɵɵelementStart(2, "div", 101)(3, "div", 102);
754
563
  i0.ɵɵtext(4);
755
564
  i0.ɵɵelementEnd();
756
- i0.ɵɵelementStart(5, "div", 154);
565
+ i0.ɵɵelementStart(5, "div", 103);
757
566
  i0.ɵɵtext(6);
758
567
  i0.ɵɵelementEnd()();
759
- i0.ɵɵelementStart(7, "button", 155);
760
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_72_Case_2_Conditional_5_For_10_Template_button_click_7_listener($event) { const tool_r37 = i0.ɵɵrestoreView(_r36).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.toggleFavorite(tool_r37.ID, $event)); });
568
+ i0.ɵɵelementStart(7, "button", 104);
569
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_17_Case_2_Conditional_0_For_10_Template_button_click_7_listener($event) { const tool_r19 = i0.ɵɵrestoreView(_r18).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.toggleFavorite(tool_r19.ID, $event)); });
761
570
  i0.ɵɵelement(8, "i");
762
571
  i0.ɵɵelementEnd();
763
- i0.ɵɵelementStart(9, "span", 156);
572
+ i0.ɵɵelementStart(9, "span", 105);
764
573
  i0.ɵɵtext(10);
765
574
  i0.ɵɵelementEnd()();
766
575
  } if (rf & 2) {
767
- const tool_r37 = ctx.$implicit;
768
- const ctx_r2 = i0.ɵɵnextContext(4);
576
+ const tool_r19 = ctx.$implicit;
577
+ const ctx_r1 = i0.ɵɵnextContext(4);
769
578
  i0.ɵɵadvance(4);
770
- i0.ɵɵtextInterpolate(tool_r37.ToolTitle || tool_r37.ToolName);
579
+ i0.ɵɵtextInterpolate(tool_r19.ToolTitle || tool_r19.ToolName);
771
580
  i0.ɵɵadvance(2);
772
- i0.ɵɵtextInterpolate2("", tool_r37.ServerName, " \u00B7 ", tool_r37.ToolName);
581
+ i0.ɵɵtextInterpolate2("", tool_r19.ServerName, " \u00B7 ", tool_r19.ToolName);
773
582
  i0.ɵɵadvance();
774
- i0.ɵɵstyleProp("color", ctx_r2.isFavorited(tool_r37.ID) ? "var(--mj-status-warning, #f59e0b)" : "var(--mj-text-muted, #bbb)");
775
- i0.ɵɵproperty("title", ctx_r2.isFavorited(tool_r37.ID) ? "Unfavorite" : "Favorite");
583
+ i0.ɵɵstyleProp("color", ctx_r1.isFavorited(tool_r19.ID) ? "var(--mj-status-warning, #f59e0b)" : "var(--mj-text-muted, #bbb)");
584
+ i0.ɵɵproperty("title", ctx_r1.isFavorited(tool_r19.ID) ? "Unfavorite" : "Favorite");
776
585
  i0.ɵɵadvance();
777
- i0.ɵɵclassMap(ctx_r2.isFavorited(tool_r37.ID) ? "fa-solid fa-star" : "fa-regular fa-star");
586
+ i0.ɵɵclassMap(ctx_r1.isFavorited(tool_r19.ID) ? "fa-solid fa-star" : "fa-regular fa-star");
778
587
  i0.ɵɵadvance();
779
- i0.ɵɵproperty("ngClass", ctx_r2.getStatusClass(tool_r37.Status));
588
+ i0.ɵɵproperty("ngClass", ctx_r1.getStatusClass(tool_r19.Status));
780
589
  i0.ɵɵadvance();
781
- i0.ɵɵtextInterpolate(tool_r37.Status);
590
+ i0.ɵɵtextInterpolate(tool_r19.Status);
782
591
  } }
783
- function MCPDashboardComponent_Conditional_72_Case_2_Conditional_5_Conditional_11_Template(rf, ctx) { if (rf & 1) {
784
- i0.ɵɵelementStart(0, "div", 150);
592
+ function MCPDashboardComponent_Conditional_17_Case_2_Conditional_0_Conditional_11_Template(rf, ctx) { if (rf & 1) {
593
+ i0.ɵɵelementStart(0, "div", 99);
785
594
  i0.ɵɵtext(1, "Loading more\u2026");
786
595
  i0.ɵɵelementEnd();
787
596
  } }
788
- function MCPDashboardComponent_Conditional_72_Case_2_Conditional_5_Template(rf, ctx) { if (rf & 1) {
789
- const _r35 = i0.ɵɵgetCurrentView();
790
- i0.ɵɵelementStart(0, "div", 147);
597
+ function MCPDashboardComponent_Conditional_17_Case_2_Conditional_0_Template(rf, ctx) { if (rf & 1) {
598
+ const _r17 = i0.ɵɵgetCurrentView();
599
+ i0.ɵɵelementStart(0, "div", 96);
791
600
  i0.ɵɵtext(1, " Showing ");
792
601
  i0.ɵɵelementStart(2, "strong");
793
602
  i0.ɵɵtext(3);
@@ -798,282 +607,282 @@ function MCPDashboardComponent_Conditional_72_Case_2_Conditional_5_Template(rf,
798
607
  i0.ɵɵelementEnd();
799
608
  i0.ɵɵtext(7, " tools ");
800
609
  i0.ɵɵelementEnd();
801
- i0.ɵɵelementStart(8, "div", 148);
802
- i0.ɵɵlistener("scroll", function MCPDashboardComponent_Conditional_72_Case_2_Conditional_5_Template_div_scroll_8_listener($event) { i0.ɵɵrestoreView(_r35); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.onToolsScrollNative($event)); });
803
- i0.ɵɵrepeaterCreate(9, MCPDashboardComponent_Conditional_72_Case_2_Conditional_5_For_10_Template, 11, 10, "div", 149, _forTrack0);
804
- i0.ɵɵconditionalCreate(11, MCPDashboardComponent_Conditional_72_Case_2_Conditional_5_Conditional_11_Template, 2, 0, "div", 150);
610
+ i0.ɵɵelementStart(8, "div", 97);
611
+ i0.ɵɵlistener("scroll", function MCPDashboardComponent_Conditional_17_Case_2_Conditional_0_Template_div_scroll_8_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onToolsScrollNative($event)); });
612
+ i0.ɵɵrepeaterCreate(9, MCPDashboardComponent_Conditional_17_Case_2_Conditional_0_For_10_Template, 11, 10, "div", 98, _forTrack0);
613
+ i0.ɵɵconditionalCreate(11, MCPDashboardComponent_Conditional_17_Case_2_Conditional_0_Conditional_11_Template, 2, 0, "div", 99);
805
614
  i0.ɵɵelementEnd();
806
615
  } if (rf & 2) {
807
- const ctx_r2 = i0.ɵɵnextContext(3);
616
+ const ctx_r1 = i0.ɵɵnextContext(3);
808
617
  i0.ɵɵadvance(3);
809
- i0.ɵɵtextInterpolate(ctx_r2.visiblePagedTools.length);
618
+ i0.ɵɵtextInterpolate(ctx_r1.visiblePagedTools.length);
810
619
  i0.ɵɵadvance(3);
811
- i0.ɵɵtextInterpolate(ctx_r2.scaleDenominator());
620
+ i0.ɵɵtextInterpolate(ctx_r1.scaleDenominator());
812
621
  i0.ɵɵadvance(3);
813
- i0.ɵɵrepeater(ctx_r2.visiblePagedTools);
622
+ i0.ɵɵrepeater(ctx_r1.visiblePagedTools);
814
623
  i0.ɵɵadvance(2);
815
- i0.ɵɵconditional(ctx_r2.toolsLoading ? 11 : -1);
624
+ i0.ɵɵconditional(ctx_r1.toolsLoading ? 11 : -1);
816
625
  } }
817
- function MCPDashboardComponent_Conditional_72_Case_2_Conditional_6_Template(rf, ctx) { if (rf & 1) {
818
- i0.ɵɵelementStart(0, "div", 100);
819
- i0.ɵɵelement(1, "i", 42);
626
+ function MCPDashboardComponent_Conditional_17_Case_2_Conditional_1_Template(rf, ctx) { if (rf & 1) {
627
+ i0.ɵɵelementStart(0, "div", 47);
628
+ i0.ɵɵelement(1, "i", 72);
820
629
  i0.ɵɵelementStart(2, "p");
821
630
  i0.ɵɵtext(3, "No tools discovered yet");
822
631
  i0.ɵɵelementEnd();
823
- i0.ɵɵelementStart(4, "span", 157);
632
+ i0.ɵɵelementStart(4, "span", 106);
824
633
  i0.ɵɵtext(5, "Tools are discovered when connections sync with MCP servers");
825
634
  i0.ɵɵelementEnd()();
826
635
  } }
827
- function MCPDashboardComponent_Conditional_72_Case_2_Conditional_7_For_2_Conditional_14_Conditional_0_For_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
828
- i0.ɵɵelementStart(0, "p", 175);
636
+ function MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditional_14_Conditional_0_For_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
637
+ i0.ɵɵelementStart(0, "p", 124);
829
638
  i0.ɵɵtext(1);
830
639
  i0.ɵɵelementEnd();
831
640
  } if (rf & 2) {
832
- const tool_r41 = i0.ɵɵnextContext().$implicit;
641
+ const tool_r23 = i0.ɵɵnextContext().$implicit;
833
642
  i0.ɵɵadvance();
834
- i0.ɵɵtextInterpolate(tool_r41.ToolDescription);
643
+ i0.ɵɵtextInterpolate(tool_r23.ToolDescription);
835
644
  } }
836
- function MCPDashboardComponent_Conditional_72_Case_2_Conditional_7_For_2_Conditional_14_Conditional_0_For_2_Conditional_22_Conditional_21_Template(rf, ctx) { if (rf & 1) {
837
- i0.ɵɵelementStart(0, "div", 184)(1, "span", 181);
645
+ function MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditional_14_Conditional_0_For_2_Conditional_22_Conditional_21_Template(rf, ctx) { if (rf & 1) {
646
+ i0.ɵɵelementStart(0, "div", 132)(1, "span", 129);
838
647
  i0.ɵɵtext(2, "Input Schema:");
839
648
  i0.ɵɵelementEnd();
840
- i0.ɵɵelementStart(3, "pre", 185);
649
+ i0.ɵɵelementStart(3, "pre", 133);
841
650
  i0.ɵɵtext(4);
842
651
  i0.ɵɵelementEnd()();
843
652
  } if (rf & 2) {
844
- const tool_r41 = i0.ɵɵnextContext(2).$implicit;
845
- const ctx_r2 = i0.ɵɵnextContext(7);
653
+ const tool_r23 = i0.ɵɵnextContext(2).$implicit;
654
+ const ctx_r1 = i0.ɵɵnextContext(7);
846
655
  i0.ɵɵadvance(4);
847
- i0.ɵɵtextInterpolate(ctx_r2.getFormattedInputSchema(tool_r41));
656
+ i0.ɵɵtextInterpolate(ctx_r1.getFormattedInputSchema(tool_r23));
848
657
  } }
849
- function MCPDashboardComponent_Conditional_72_Case_2_Conditional_7_For_2_Conditional_14_Conditional_0_For_2_Conditional_22_Template(rf, ctx) { if (rf & 1) {
850
- i0.ɵɵelementStart(0, "div", 179)(1, "div", 180)(2, "span", 181);
658
+ function MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditional_14_Conditional_0_For_2_Conditional_22_Template(rf, ctx) { if (rf & 1) {
659
+ i0.ɵɵelementStart(0, "div", 127)(1, "div", 128)(2, "span", 129);
851
660
  i0.ɵɵtext(3, "Tool Name:");
852
661
  i0.ɵɵelementEnd();
853
- i0.ɵɵelementStart(4, "span", 182);
662
+ i0.ɵɵelementStart(4, "span", 130);
854
663
  i0.ɵɵtext(5);
855
664
  i0.ɵɵelementEnd()();
856
- i0.ɵɵelementStart(6, "div", 180)(7, "span", 181);
665
+ i0.ɵɵelementStart(6, "div", 128)(7, "span", 129);
857
666
  i0.ɵɵtext(8, "Parameters:");
858
667
  i0.ɵɵelementEnd();
859
- i0.ɵɵelementStart(9, "span", 183);
668
+ i0.ɵɵelementStart(9, "span", 131);
860
669
  i0.ɵɵtext(10);
861
670
  i0.ɵɵelementEnd()();
862
- i0.ɵɵelementStart(11, "div", 180)(12, "span", 181);
671
+ i0.ɵɵelementStart(11, "div", 128)(12, "span", 129);
863
672
  i0.ɵɵtext(13, "Discovered:");
864
673
  i0.ɵɵelementEnd();
865
- i0.ɵɵelementStart(14, "span", 183);
674
+ i0.ɵɵelementStart(14, "span", 131);
866
675
  i0.ɵɵtext(15);
867
676
  i0.ɵɵelementEnd()();
868
- i0.ɵɵelementStart(16, "div", 180)(17, "span", 181);
677
+ i0.ɵɵelementStart(16, "div", 128)(17, "span", 129);
869
678
  i0.ɵɵtext(18, "Last Seen:");
870
679
  i0.ɵɵelementEnd();
871
- i0.ɵɵelementStart(19, "span", 183);
680
+ i0.ɵɵelementStart(19, "span", 131);
872
681
  i0.ɵɵtext(20);
873
682
  i0.ɵɵelementEnd()();
874
- i0.ɵɵconditionalCreate(21, MCPDashboardComponent_Conditional_72_Case_2_Conditional_7_For_2_Conditional_14_Conditional_0_For_2_Conditional_22_Conditional_21_Template, 5, 1, "div", 184);
683
+ i0.ɵɵconditionalCreate(21, MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditional_14_Conditional_0_For_2_Conditional_22_Conditional_21_Template, 5, 1, "div", 132);
875
684
  i0.ɵɵelementEnd();
876
685
  } if (rf & 2) {
877
- const tool_r41 = i0.ɵɵnextContext().$implicit;
878
- const ctx_r2 = i0.ɵɵnextContext(7);
686
+ const tool_r23 = i0.ɵɵnextContext().$implicit;
687
+ const ctx_r1 = i0.ɵɵnextContext(7);
879
688
  i0.ɵɵadvance(5);
880
- i0.ɵɵtextInterpolate(tool_r41.ToolName);
689
+ i0.ɵɵtextInterpolate(tool_r23.ToolName);
881
690
  i0.ɵɵadvance(5);
882
- i0.ɵɵtextInterpolate2(" ", ctx_r2.getParamCount(tool_r41), " total, ", ctx_r2.getRequiredParamCount(tool_r41), " required ");
691
+ i0.ɵɵtextInterpolate2(" ", ctx_r1.getParamCount(tool_r23), " total, ", ctx_r1.getRequiredParamCount(tool_r23), " required ");
883
692
  i0.ɵɵadvance(5);
884
- i0.ɵɵtextInterpolate(ctx_r2.formatDate(tool_r41.DiscoveredAt));
693
+ i0.ɵɵtextInterpolate(ctx_r1.formatDate(tool_r23.DiscoveredAt));
885
694
  i0.ɵɵadvance(5);
886
- i0.ɵɵtextInterpolate(ctx_r2.formatDate(tool_r41.LastSeenAt));
695
+ i0.ɵɵtextInterpolate(ctx_r1.formatDate(tool_r23.LastSeenAt));
887
696
  i0.ɵɵadvance();
888
- i0.ɵɵconditional(tool_r41.InputSchema ? 21 : -1);
697
+ i0.ɵɵconditional(tool_r23.InputSchema ? 21 : -1);
889
698
  } }
890
- function MCPDashboardComponent_Conditional_72_Case_2_Conditional_7_For_2_Conditional_14_Conditional_0_For_2_Template(rf, ctx) { if (rf & 1) {
891
- const _r40 = i0.ɵɵgetCurrentView();
892
- i0.ɵɵelementStart(0, "div", 170)(1, "div", 171);
893
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_72_Case_2_Conditional_7_For_2_Conditional_14_Conditional_0_For_2_Template_div_click_1_listener() { const tool_r41 = i0.ɵɵrestoreView(_r40).$implicit; const ctx_r2 = i0.ɵɵnextContext(7); return i0.ɵɵresetView(ctx_r2.toggleToolExpand(tool_r41)); });
894
- i0.ɵɵelementStart(2, "div", 172);
895
- i0.ɵɵelement(3, "i", 42);
896
- i0.ɵɵelementStart(4, "span", 106);
699
+ function MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditional_14_Conditional_0_For_2_Template(rf, ctx) { if (rf & 1) {
700
+ const _r22 = i0.ɵɵgetCurrentView();
701
+ i0.ɵɵelementStart(0, "div", 119)(1, "div", 120);
702
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditional_14_Conditional_0_For_2_Template_div_click_1_listener() { const tool_r23 = i0.ɵɵrestoreView(_r22).$implicit; const ctx_r1 = i0.ɵɵnextContext(7); return i0.ɵɵresetView(ctx_r1.toggleToolExpand(tool_r23)); });
703
+ i0.ɵɵelementStart(2, "div", 121);
704
+ i0.ɵɵelement(3, "i", 72);
705
+ i0.ɵɵelementStart(4, "span", 54);
897
706
  i0.ɵɵtext(5);
898
707
  i0.ɵɵelementEnd()();
899
- i0.ɵɵelementStart(6, "div", 173)(7, "span", 174);
900
- i0.ɵɵelement(8, "i", 131);
708
+ i0.ɵɵelementStart(6, "div", 122)(7, "span", 123);
709
+ i0.ɵɵelement(8, "i", 80);
901
710
  i0.ɵɵtext(9);
902
711
  i0.ɵɵelementEnd();
903
- i0.ɵɵelementStart(10, "span", 156);
712
+ i0.ɵɵelementStart(10, "span", 105);
904
713
  i0.ɵɵtext(11);
905
714
  i0.ɵɵelementEnd()()();
906
- i0.ɵɵconditionalCreate(12, MCPDashboardComponent_Conditional_72_Case_2_Conditional_7_For_2_Conditional_14_Conditional_0_For_2_Conditional_12_Template, 2, 1, "p", 175);
907
- i0.ɵɵelementStart(13, "div", 176)(14, "button", 155);
908
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_72_Case_2_Conditional_7_For_2_Conditional_14_Conditional_0_For_2_Template_button_click_14_listener($event) { const tool_r41 = i0.ɵɵrestoreView(_r40).$implicit; const ctx_r2 = i0.ɵɵnextContext(7); return i0.ɵɵresetView(ctx_r2.toggleFavorite(tool_r41.ID, $event)); });
715
+ i0.ɵɵconditionalCreate(12, MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditional_14_Conditional_0_For_2_Conditional_12_Template, 2, 1, "p", 124);
716
+ i0.ɵɵelementStart(13, "div", 125)(14, "button", 104);
717
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditional_14_Conditional_0_For_2_Template_button_click_14_listener($event) { const tool_r23 = i0.ɵɵrestoreView(_r22).$implicit; const ctx_r1 = i0.ɵɵnextContext(7); return i0.ɵɵresetView(ctx_r1.toggleFavorite(tool_r23.ID, $event)); });
909
718
  i0.ɵɵelement(15, "i");
910
719
  i0.ɵɵelementEnd();
911
- i0.ɵɵelementStart(16, "button", 132);
912
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_72_Case_2_Conditional_7_For_2_Conditional_14_Conditional_0_For_2_Template_button_click_16_listener() { const tool_r41 = i0.ɵɵrestoreView(_r40).$implicit; const ctx_r2 = i0.ɵɵnextContext(7); return i0.ɵɵresetView(ctx_r2.openTestToolDialog(tool_r41)); });
913
- i0.ɵɵelement(17, "i", 75);
720
+ i0.ɵɵelementStart(16, "button", 81);
721
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditional_14_Conditional_0_For_2_Template_button_click_16_listener() { const tool_r23 = i0.ɵɵrestoreView(_r22).$implicit; const ctx_r1 = i0.ɵɵnextContext(7); return i0.ɵɵresetView(ctx_r1.openTestToolDialog(tool_r23)); });
722
+ i0.ɵɵelement(17, "i", 39);
914
723
  i0.ɵɵtext(18, " Test ");
915
724
  i0.ɵɵelementEnd();
916
- i0.ɵɵelementStart(19, "button", 177);
917
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_72_Case_2_Conditional_7_For_2_Conditional_14_Conditional_0_For_2_Template_button_click_19_listener() { const tool_r41 = i0.ɵɵrestoreView(_r40).$implicit; const ctx_r2 = i0.ɵɵnextContext(7); return i0.ɵɵresetView(ctx_r2.toggleToolExpand(tool_r41)); });
918
- i0.ɵɵelement(20, "i", 178);
725
+ i0.ɵɵelementStart(19, "button", 126);
726
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditional_14_Conditional_0_For_2_Template_button_click_19_listener() { const tool_r23 = i0.ɵɵrestoreView(_r22).$implicit; const ctx_r1 = i0.ɵɵnextContext(7); return i0.ɵɵresetView(ctx_r1.toggleToolExpand(tool_r23)); });
727
+ i0.ɵɵelement(20, "i", 38);
919
728
  i0.ɵɵtext(21);
920
729
  i0.ɵɵelementEnd()();
921
- i0.ɵɵconditionalCreate(22, MCPDashboardComponent_Conditional_72_Case_2_Conditional_7_For_2_Conditional_14_Conditional_0_For_2_Conditional_22_Template, 22, 6, "div", 179);
730
+ i0.ɵɵconditionalCreate(22, MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditional_14_Conditional_0_For_2_Conditional_22_Template, 22, 6, "div", 127);
922
731
  i0.ɵɵelementEnd();
923
732
  } if (rf & 2) {
924
- const tool_r41 = ctx.$implicit;
925
- const ctx_r2 = i0.ɵɵnextContext(7);
926
- i0.ɵɵclassProp("expanded", ctx_r2.isToolExpanded(tool_r41));
733
+ const tool_r23 = ctx.$implicit;
734
+ const ctx_r1 = i0.ɵɵnextContext(7);
735
+ i0.ɵɵclassProp("expanded", ctx_r1.isToolExpanded(tool_r23));
927
736
  i0.ɵɵadvance(5);
928
- i0.ɵɵtextInterpolate(tool_r41.ToolTitle || tool_r41.ToolName);
737
+ i0.ɵɵtextInterpolate(tool_r23.ToolTitle || tool_r23.ToolName);
929
738
  i0.ɵɵadvance(4);
930
- i0.ɵɵtextInterpolate1(" ", ctx_r2.getParamCount(tool_r41), " ");
739
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.getParamCount(tool_r23), " ");
931
740
  i0.ɵɵadvance();
932
- i0.ɵɵproperty("ngClass", ctx_r2.getStatusClass(tool_r41.Status));
741
+ i0.ɵɵproperty("ngClass", ctx_r1.getStatusClass(tool_r23.Status));
933
742
  i0.ɵɵadvance();
934
- i0.ɵɵtextInterpolate1(" ", tool_r41.Status, " ");
743
+ i0.ɵɵtextInterpolate1(" ", tool_r23.Status, " ");
935
744
  i0.ɵɵadvance();
936
- i0.ɵɵconditional(tool_r41.ToolDescription ? 12 : -1);
745
+ i0.ɵɵconditional(tool_r23.ToolDescription ? 12 : -1);
937
746
  i0.ɵɵadvance(2);
938
- i0.ɵɵstyleProp("color", ctx_r2.isFavorited(tool_r41.ID) ? "var(--mj-status-warning, #f59e0b)" : "var(--mj-text-muted, #bbb)");
939
- i0.ɵɵproperty("title", ctx_r2.isFavorited(tool_r41.ID) ? "Unfavorite" : "Favorite");
747
+ i0.ɵɵstyleProp("color", ctx_r1.isFavorited(tool_r23.ID) ? "var(--mj-status-warning, #f59e0b)" : "var(--mj-text-muted, #bbb)");
748
+ i0.ɵɵproperty("title", ctx_r1.isFavorited(tool_r23.ID) ? "Unfavorite" : "Favorite");
940
749
  i0.ɵɵadvance();
941
- i0.ɵɵclassMap(ctx_r2.isFavorited(tool_r41.ID) ? "fa-solid fa-star" : "fa-regular fa-star");
750
+ i0.ɵɵclassMap(ctx_r1.isFavorited(tool_r23.ID) ? "fa-solid fa-star" : "fa-regular fa-star");
942
751
  i0.ɵɵadvance(5);
943
- i0.ɵɵclassProp("fa-chevron-down", !ctx_r2.isToolExpanded(tool_r41))("fa-chevron-up", ctx_r2.isToolExpanded(tool_r41));
752
+ i0.ɵɵclassProp("fa-chevron-down", !ctx_r1.isToolExpanded(tool_r23))("fa-chevron-up", ctx_r1.isToolExpanded(tool_r23));
944
753
  i0.ɵɵadvance();
945
- i0.ɵɵtextInterpolate1(" ", ctx_r2.isToolExpanded(tool_r41) ? "Less" : "More", " ");
754
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.isToolExpanded(tool_r23) ? "Less" : "More", " ");
946
755
  i0.ɵɵadvance();
947
- i0.ɵɵconditional(ctx_r2.isToolExpanded(tool_r41) ? 22 : -1);
756
+ i0.ɵɵconditional(ctx_r1.isToolExpanded(tool_r23) ? 22 : -1);
948
757
  } }
949
- function MCPDashboardComponent_Conditional_72_Case_2_Conditional_7_For_2_Conditional_14_Conditional_0_Template(rf, ctx) { if (rf & 1) {
950
- i0.ɵɵelementStart(0, "div", 167);
951
- i0.ɵɵrepeaterCreate(1, MCPDashboardComponent_Conditional_72_Case_2_Conditional_7_For_2_Conditional_14_Conditional_0_For_2_Template, 23, 18, "div", 169, _forTrack0);
758
+ function MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditional_14_Conditional_0_Template(rf, ctx) { if (rf & 1) {
759
+ i0.ɵɵelementStart(0, "div", 116);
760
+ i0.ɵɵrepeaterCreate(1, MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditional_14_Conditional_0_For_2_Template, 23, 18, "div", 118, _forTrack0);
952
761
  i0.ɵɵelementEnd();
953
762
  } if (rf & 2) {
954
- const group_r39 = i0.ɵɵnextContext(2).$implicit;
763
+ const group_r21 = i0.ɵɵnextContext(2).$implicit;
955
764
  i0.ɵɵadvance();
956
- i0.ɵɵrepeater(group_r39.tools);
765
+ i0.ɵɵrepeater(group_r21.tools);
957
766
  } }
958
- function MCPDashboardComponent_Conditional_72_Case_2_Conditional_7_For_2_Conditional_14_Conditional_1_For_18_Conditional_6_Template(rf, ctx) { if (rf & 1) {
959
- i0.ɵɵelementStart(0, "span", 188);
767
+ function MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditional_14_Conditional_1_For_18_Conditional_6_Template(rf, ctx) { if (rf & 1) {
768
+ i0.ɵɵelementStart(0, "span", 136);
960
769
  i0.ɵɵtext(1);
961
770
  i0.ɵɵelementEnd();
962
771
  } if (rf & 2) {
963
- const tool_r43 = i0.ɵɵnextContext().$implicit;
772
+ const tool_r25 = i0.ɵɵnextContext().$implicit;
964
773
  i0.ɵɵadvance();
965
- i0.ɵɵtextInterpolate(tool_r43.ToolName);
774
+ i0.ɵɵtextInterpolate(tool_r25.ToolName);
966
775
  } }
967
- function MCPDashboardComponent_Conditional_72_Case_2_Conditional_7_For_2_Conditional_14_Conditional_1_For_18_Conditional_24_Conditional_18_Template(rf, ctx) { if (rf & 1) {
968
- i0.ɵɵelementStart(0, "div", 199)(1, "span", 181);
776
+ function MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditional_14_Conditional_1_For_18_Conditional_24_Conditional_18_Template(rf, ctx) { if (rf & 1) {
777
+ i0.ɵɵelementStart(0, "div", 147)(1, "span", 129);
969
778
  i0.ɵɵtext(2, "Input Schema:");
970
779
  i0.ɵɵelementEnd();
971
- i0.ɵɵelementStart(3, "pre", 185);
780
+ i0.ɵɵelementStart(3, "pre", 133);
972
781
  i0.ɵɵtext(4);
973
782
  i0.ɵɵelementEnd()();
974
783
  } if (rf & 2) {
975
- const tool_r43 = i0.ɵɵnextContext(2).$implicit;
976
- const ctx_r2 = i0.ɵɵnextContext(7);
784
+ const tool_r25 = i0.ɵɵnextContext(2).$implicit;
785
+ const ctx_r1 = i0.ɵɵnextContext(7);
977
786
  i0.ɵɵadvance(4);
978
- i0.ɵɵtextInterpolate(ctx_r2.getFormattedInputSchema(tool_r43));
787
+ i0.ɵɵtextInterpolate(ctx_r1.getFormattedInputSchema(tool_r25));
979
788
  } }
980
- function MCPDashboardComponent_Conditional_72_Case_2_Conditional_7_For_2_Conditional_14_Conditional_1_For_18_Conditional_24_Template(rf, ctx) { if (rf & 1) {
981
- i0.ɵɵelementStart(0, "tr", 195)(1, "td", 196)(2, "div", 197)(3, "div", 198)(4, "span", 181);
789
+ function MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditional_14_Conditional_1_For_18_Conditional_24_Template(rf, ctx) { if (rf & 1) {
790
+ i0.ɵɵelementStart(0, "tr", 143)(1, "td", 144)(2, "div", 145)(3, "div", 146)(4, "span", 129);
982
791
  i0.ɵɵtext(5, "Tool Name:");
983
792
  i0.ɵɵelementEnd();
984
- i0.ɵɵelementStart(6, "span", 182);
793
+ i0.ɵɵelementStart(6, "span", 130);
985
794
  i0.ɵɵtext(7);
986
795
  i0.ɵɵelementEnd()();
987
- i0.ɵɵelementStart(8, "div", 198)(9, "span", 181);
796
+ i0.ɵɵelementStart(8, "div", 146)(9, "span", 129);
988
797
  i0.ɵɵtext(10, "Discovered:");
989
798
  i0.ɵɵelementEnd();
990
- i0.ɵɵelementStart(11, "span", 183);
799
+ i0.ɵɵelementStart(11, "span", 131);
991
800
  i0.ɵɵtext(12);
992
801
  i0.ɵɵelementEnd()();
993
- i0.ɵɵelementStart(13, "div", 198)(14, "span", 181);
802
+ i0.ɵɵelementStart(13, "div", 146)(14, "span", 129);
994
803
  i0.ɵɵtext(15, "Required Params:");
995
804
  i0.ɵɵelementEnd();
996
- i0.ɵɵelementStart(16, "span", 183);
805
+ i0.ɵɵelementStart(16, "span", 131);
997
806
  i0.ɵɵtext(17);
998
807
  i0.ɵɵelementEnd()();
999
- i0.ɵɵconditionalCreate(18, MCPDashboardComponent_Conditional_72_Case_2_Conditional_7_For_2_Conditional_14_Conditional_1_For_18_Conditional_24_Conditional_18_Template, 5, 1, "div", 199);
808
+ i0.ɵɵconditionalCreate(18, MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditional_14_Conditional_1_For_18_Conditional_24_Conditional_18_Template, 5, 1, "div", 147);
1000
809
  i0.ɵɵelementEnd()()();
1001
810
  } if (rf & 2) {
1002
- const tool_r43 = i0.ɵɵnextContext().$implicit;
1003
- const ctx_r2 = i0.ɵɵnextContext(7);
811
+ const tool_r25 = i0.ɵɵnextContext().$implicit;
812
+ const ctx_r1 = i0.ɵɵnextContext(7);
1004
813
  i0.ɵɵadvance(7);
1005
- i0.ɵɵtextInterpolate(tool_r43.ToolName);
814
+ i0.ɵɵtextInterpolate(tool_r25.ToolName);
1006
815
  i0.ɵɵadvance(5);
1007
- i0.ɵɵtextInterpolate(ctx_r2.formatDate(tool_r43.DiscoveredAt));
816
+ i0.ɵɵtextInterpolate(ctx_r1.formatDate(tool_r25.DiscoveredAt));
1008
817
  i0.ɵɵadvance(5);
1009
- i0.ɵɵtextInterpolate(ctx_r2.getRequiredParamCount(tool_r43));
818
+ i0.ɵɵtextInterpolate(ctx_r1.getRequiredParamCount(tool_r25));
1010
819
  i0.ɵɵadvance();
1011
- i0.ɵɵconditional(tool_r43.InputSchema ? 18 : -1);
820
+ i0.ɵɵconditional(tool_r25.InputSchema ? 18 : -1);
1012
821
  } }
1013
- function MCPDashboardComponent_Conditional_72_Case_2_Conditional_7_For_2_Conditional_14_Conditional_1_For_18_Template(rf, ctx) { if (rf & 1) {
1014
- const _r42 = i0.ɵɵgetCurrentView();
1015
- i0.ɵɵelementStart(0, "tr")(1, "td", 186);
1016
- i0.ɵɵelement(2, "i", 42);
1017
- i0.ɵɵelementStart(3, "div", 187)(4, "span", 172);
822
+ function MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditional_14_Conditional_1_For_18_Template(rf, ctx) { if (rf & 1) {
823
+ const _r24 = i0.ɵɵgetCurrentView();
824
+ i0.ɵɵelementStart(0, "tr")(1, "td", 134);
825
+ i0.ɵɵelement(2, "i", 72);
826
+ i0.ɵɵelementStart(3, "div", 135)(4, "span", 121);
1018
827
  i0.ɵɵtext(5);
1019
828
  i0.ɵɵelementEnd();
1020
- i0.ɵɵconditionalCreate(6, MCPDashboardComponent_Conditional_72_Case_2_Conditional_7_For_2_Conditional_14_Conditional_1_For_18_Conditional_6_Template, 2, 1, "span", 188);
829
+ i0.ɵɵconditionalCreate(6, MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditional_14_Conditional_1_For_18_Conditional_6_Template, 2, 1, "span", 136);
1021
830
  i0.ɵɵelementEnd()();
1022
- i0.ɵɵelementStart(7, "td", 189);
831
+ i0.ɵɵelementStart(7, "td", 137);
1023
832
  i0.ɵɵtext(8);
1024
833
  i0.ɵɵelementEnd();
1025
- i0.ɵɵelementStart(9, "td")(10, "span", 190);
834
+ i0.ɵɵelementStart(9, "td")(10, "span", 138);
1026
835
  i0.ɵɵtext(11);
1027
836
  i0.ɵɵelementEnd()();
1028
- i0.ɵɵelementStart(12, "td")(13, "span", 156);
837
+ i0.ɵɵelementStart(12, "td")(13, "span", 105);
1029
838
  i0.ɵɵtext(14);
1030
839
  i0.ɵɵelementEnd()();
1031
840
  i0.ɵɵelementStart(15, "td");
1032
841
  i0.ɵɵtext(16);
1033
842
  i0.ɵɵelementEnd();
1034
- i0.ɵɵelementStart(17, "td", 191)(18, "button", 192);
1035
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_72_Case_2_Conditional_7_For_2_Conditional_14_Conditional_1_For_18_Template_button_click_18_listener($event) { const tool_r43 = i0.ɵɵrestoreView(_r42).$implicit; const ctx_r2 = i0.ɵɵnextContext(7); return i0.ɵɵresetView(ctx_r2.toggleFavorite(tool_r43.ID, $event)); });
843
+ i0.ɵɵelementStart(17, "td", 139)(18, "button", 140);
844
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditional_14_Conditional_1_For_18_Template_button_click_18_listener($event) { const tool_r25 = i0.ɵɵrestoreView(_r24).$implicit; const ctx_r1 = i0.ɵɵnextContext(7); return i0.ɵɵresetView(ctx_r1.toggleFavorite(tool_r25.ID, $event)); });
1036
845
  i0.ɵɵelement(19, "i");
1037
846
  i0.ɵɵelementEnd();
1038
- i0.ɵɵelementStart(20, "button", 193);
1039
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_72_Case_2_Conditional_7_For_2_Conditional_14_Conditional_1_For_18_Template_button_click_20_listener() { const tool_r43 = i0.ɵɵrestoreView(_r42).$implicit; const ctx_r2 = i0.ɵɵnextContext(7); return i0.ɵɵresetView(ctx_r2.openTestToolDialog(tool_r43)); });
1040
- i0.ɵɵelement(21, "i", 75);
847
+ i0.ɵɵelementStart(20, "button", 141);
848
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditional_14_Conditional_1_For_18_Template_button_click_20_listener() { const tool_r25 = i0.ɵɵrestoreView(_r24).$implicit; const ctx_r1 = i0.ɵɵnextContext(7); return i0.ɵɵresetView(ctx_r1.openTestToolDialog(tool_r25)); });
849
+ i0.ɵɵelement(21, "i", 39);
1041
850
  i0.ɵɵelementEnd();
1042
- i0.ɵɵelementStart(22, "button", 194);
1043
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_72_Case_2_Conditional_7_For_2_Conditional_14_Conditional_1_For_18_Template_button_click_22_listener() { const tool_r43 = i0.ɵɵrestoreView(_r42).$implicit; const ctx_r2 = i0.ɵɵnextContext(7); return i0.ɵɵresetView(ctx_r2.toggleToolExpand(tool_r43)); });
1044
- i0.ɵɵelement(23, "i", 178);
851
+ i0.ɵɵelementStart(22, "button", 142);
852
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditional_14_Conditional_1_For_18_Template_button_click_22_listener() { const tool_r25 = i0.ɵɵrestoreView(_r24).$implicit; const ctx_r1 = i0.ɵɵnextContext(7); return i0.ɵɵresetView(ctx_r1.toggleToolExpand(tool_r25)); });
853
+ i0.ɵɵelement(23, "i", 38);
1045
854
  i0.ɵɵelementEnd()()();
1046
- i0.ɵɵconditionalCreate(24, MCPDashboardComponent_Conditional_72_Case_2_Conditional_7_For_2_Conditional_14_Conditional_1_For_18_Conditional_24_Template, 19, 4, "tr", 195);
855
+ i0.ɵɵconditionalCreate(24, MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditional_14_Conditional_1_For_18_Conditional_24_Template, 19, 4, "tr", 143);
1047
856
  } if (rf & 2) {
1048
- const tool_r43 = ctx.$implicit;
1049
- const ctx_r2 = i0.ɵɵnextContext(7);
1050
- i0.ɵɵclassProp("expanded", ctx_r2.isToolExpanded(tool_r43));
857
+ const tool_r25 = ctx.$implicit;
858
+ const ctx_r1 = i0.ɵɵnextContext(7);
859
+ i0.ɵɵclassProp("expanded", ctx_r1.isToolExpanded(tool_r25));
1051
860
  i0.ɵɵadvance(5);
1052
- i0.ɵɵtextInterpolate(tool_r43.ToolTitle || tool_r43.ToolName);
861
+ i0.ɵɵtextInterpolate(tool_r25.ToolTitle || tool_r25.ToolName);
1053
862
  i0.ɵɵadvance();
1054
- i0.ɵɵconditional(tool_r43.ToolTitle ? 6 : -1);
863
+ i0.ɵɵconditional(tool_r25.ToolTitle ? 6 : -1);
1055
864
  i0.ɵɵadvance(2);
1056
- i0.ɵɵtextInterpolate(tool_r43.ToolDescription || "-");
865
+ i0.ɵɵtextInterpolate(tool_r25.ToolDescription || "-");
1057
866
  i0.ɵɵadvance(3);
1058
- i0.ɵɵtextInterpolate(ctx_r2.getParamCount(tool_r43));
867
+ i0.ɵɵtextInterpolate(ctx_r1.getParamCount(tool_r25));
1059
868
  i0.ɵɵadvance(2);
1060
- i0.ɵɵproperty("ngClass", ctx_r2.getStatusClass(tool_r43.Status));
869
+ i0.ɵɵproperty("ngClass", ctx_r1.getStatusClass(tool_r25.Status));
1061
870
  i0.ɵɵadvance();
1062
- i0.ɵɵtextInterpolate1(" ", tool_r43.Status, " ");
871
+ i0.ɵɵtextInterpolate1(" ", tool_r25.Status, " ");
1063
872
  i0.ɵɵadvance(2);
1064
- i0.ɵɵtextInterpolate(ctx_r2.formatDate(tool_r43.LastSeenAt));
873
+ i0.ɵɵtextInterpolate(ctx_r1.formatDate(tool_r25.LastSeenAt));
1065
874
  i0.ɵɵadvance(2);
1066
- i0.ɵɵstyleProp("color", ctx_r2.isFavorited(tool_r43.ID) ? "var(--mj-status-warning, #f59e0b)" : "var(--mj-text-muted, #bbb)");
1067
- i0.ɵɵproperty("title", ctx_r2.isFavorited(tool_r43.ID) ? "Unfavorite" : "Favorite");
875
+ i0.ɵɵstyleProp("color", ctx_r1.isFavorited(tool_r25.ID) ? "var(--mj-status-warning, #f59e0b)" : "var(--mj-text-muted, #bbb)");
876
+ i0.ɵɵproperty("title", ctx_r1.isFavorited(tool_r25.ID) ? "Unfavorite" : "Favorite");
1068
877
  i0.ɵɵadvance();
1069
- i0.ɵɵclassMap(ctx_r2.isFavorited(tool_r43.ID) ? "fa-solid fa-star" : "fa-regular fa-star");
878
+ i0.ɵɵclassMap(ctx_r1.isFavorited(tool_r25.ID) ? "fa-solid fa-star" : "fa-regular fa-star");
1070
879
  i0.ɵɵadvance(4);
1071
- i0.ɵɵclassProp("fa-chevron-down", !ctx_r2.isToolExpanded(tool_r43))("fa-chevron-up", ctx_r2.isToolExpanded(tool_r43));
880
+ i0.ɵɵclassProp("fa-chevron-down", !ctx_r1.isToolExpanded(tool_r25))("fa-chevron-up", ctx_r1.isToolExpanded(tool_r25));
1072
881
  i0.ɵɵadvance();
1073
- i0.ɵɵconditional(ctx_r2.isToolExpanded(tool_r43) ? 24 : -1);
882
+ i0.ɵɵconditional(ctx_r1.isToolExpanded(tool_r25) ? 24 : -1);
1074
883
  } }
1075
- function MCPDashboardComponent_Conditional_72_Case_2_Conditional_7_For_2_Conditional_14_Conditional_1_Template(rf, ctx) { if (rf & 1) {
1076
- i0.ɵɵelementStart(0, "div", 168)(1, "table")(2, "thead")(3, "tr")(4, "th");
884
+ function MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditional_14_Conditional_1_Template(rf, ctx) { if (rf & 1) {
885
+ i0.ɵɵelementStart(0, "div", 117)(1, "table")(2, "thead")(3, "tr")(4, "th");
1077
886
  i0.ɵɵtext(5, "Tool");
1078
887
  i0.ɵɵelementEnd();
1079
888
  i0.ɵɵelementStart(6, "th");
@@ -1092,123 +901,110 @@ function MCPDashboardComponent_Conditional_72_Case_2_Conditional_7_For_2_Conditi
1092
901
  i0.ɵɵtext(15, "Actions");
1093
902
  i0.ɵɵelementEnd()()();
1094
903
  i0.ɵɵelementStart(16, "tbody");
1095
- i0.ɵɵrepeaterCreate(17, MCPDashboardComponent_Conditional_72_Case_2_Conditional_7_For_2_Conditional_14_Conditional_1_For_18_Template, 25, 19, null, null, _forTrack0);
904
+ i0.ɵɵrepeaterCreate(17, MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditional_14_Conditional_1_For_18_Template, 25, 19, null, null, _forTrack0);
1096
905
  i0.ɵɵelementEnd()()();
1097
906
  } if (rf & 2) {
1098
- const group_r39 = i0.ɵɵnextContext(2).$implicit;
907
+ const group_r21 = i0.ɵɵnextContext(2).$implicit;
1099
908
  i0.ɵɵadvance(17);
1100
- i0.ɵɵrepeater(group_r39.tools);
909
+ i0.ɵɵrepeater(group_r21.tools);
1101
910
  } }
1102
- function MCPDashboardComponent_Conditional_72_Case_2_Conditional_7_For_2_Conditional_14_Template(rf, ctx) { if (rf & 1) {
1103
- i0.ɵɵconditionalCreate(0, MCPDashboardComponent_Conditional_72_Case_2_Conditional_7_For_2_Conditional_14_Conditional_0_Template, 3, 0, "div", 167)(1, MCPDashboardComponent_Conditional_72_Case_2_Conditional_7_For_2_Conditional_14_Conditional_1_Template, 19, 0, "div", 168);
911
+ function MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditional_14_Template(rf, ctx) { if (rf & 1) {
912
+ i0.ɵɵconditionalCreate(0, MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditional_14_Conditional_0_Template, 3, 0, "div", 116)(1, MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditional_14_Conditional_1_Template, 19, 0, "div", 117);
1104
913
  } if (rf & 2) {
1105
- const ctx_r2 = i0.ɵɵnextContext(5);
1106
- i0.ɵɵconditional(ctx_r2.ToolsViewMode === "card" ? 0 : 1);
914
+ const ctx_r1 = i0.ɵɵnextContext(5);
915
+ i0.ɵɵconditional(ctx_r1.ToolsViewMode === "card" ? 0 : 1);
1107
916
  } }
1108
- function MCPDashboardComponent_Conditional_72_Case_2_Conditional_7_For_2_Template(rf, ctx) { if (rf & 1) {
1109
- const _r38 = i0.ɵɵgetCurrentView();
1110
- i0.ɵɵelementStart(0, "div", 159)(1, "div", 160);
1111
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_72_Case_2_Conditional_7_For_2_Template_div_click_1_listener() { const group_r39 = i0.ɵɵrestoreView(_r38).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.toggleServerGroup(group_r39)); });
1112
- i0.ɵɵelementStart(2, "div", 161);
1113
- i0.ɵɵelement(3, "i", 162)(4, "i");
1114
- i0.ɵɵelementStart(5, "span", 163);
917
+ function MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Template(rf, ctx) { if (rf & 1) {
918
+ const _r20 = i0.ɵɵgetCurrentView();
919
+ i0.ɵɵelementStart(0, "div", 108)(1, "div", 109);
920
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Template_div_click_1_listener() { const group_r21 = i0.ɵɵrestoreView(_r20).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.toggleServerGroup(group_r21)); });
921
+ i0.ɵɵelementStart(2, "div", 110);
922
+ i0.ɵɵelement(3, "i", 111)(4, "i");
923
+ i0.ɵɵelementStart(5, "span", 112);
1115
924
  i0.ɵɵtext(6);
1116
925
  i0.ɵɵelementEnd();
1117
- i0.ɵɵelementStart(7, "span", 164);
926
+ i0.ɵɵelementStart(7, "span", 113);
1118
927
  i0.ɵɵtext(8);
1119
928
  i0.ɵɵelementEnd();
1120
- i0.ɵɵelementStart(9, "span", 156);
929
+ i0.ɵɵelementStart(9, "span", 105);
1121
930
  i0.ɵɵtext(10);
1122
931
  i0.ɵɵelementEnd()();
1123
- i0.ɵɵelementStart(11, "div", 165);
1124
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_72_Case_2_Conditional_7_For_2_Template_div_click_11_listener($event) { i0.ɵɵrestoreView(_r38); return i0.ɵɵresetView($event.stopPropagation()); });
1125
- i0.ɵɵelementStart(12, "button", 166);
1126
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_72_Case_2_Conditional_7_For_2_Template_button_click_12_listener() { i0.ɵɵrestoreView(_r38); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.openTestToolDialog(undefined, undefined)); });
1127
- i0.ɵɵelement(13, "i", 75);
932
+ i0.ɵɵelementStart(11, "div", 114);
933
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Template_div_click_11_listener($event) { i0.ɵɵrestoreView(_r20); return i0.ɵɵresetView($event.stopPropagation()); });
934
+ i0.ɵɵelementStart(12, "button", 115);
935
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Template_button_click_12_listener() { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.openTestToolDialog(undefined, undefined)); });
936
+ i0.ɵɵelement(13, "i", 39);
1128
937
  i0.ɵɵelementEnd()()();
1129
- i0.ɵɵconditionalCreate(14, MCPDashboardComponent_Conditional_72_Case_2_Conditional_7_For_2_Conditional_14_Template, 2, 1);
938
+ i0.ɵɵconditionalCreate(14, MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditional_14_Template, 2, 1);
1130
939
  i0.ɵɵelementEnd();
1131
940
  } if (rf & 2) {
1132
- const group_r39 = ctx.$implicit;
1133
- const ctx_r2 = i0.ɵɵnextContext(4);
1134
- i0.ɵɵclassProp("collapsed", !group_r39.expanded);
941
+ const group_r21 = ctx.$implicit;
942
+ const ctx_r1 = i0.ɵɵnextContext(4);
943
+ i0.ɵɵclassProp("collapsed", !group_r21.expanded);
1135
944
  i0.ɵɵadvance(3);
1136
- i0.ɵɵclassProp("expanded", group_r39.expanded);
945
+ i0.ɵɵclassProp("expanded", group_r21.expanded);
1137
946
  i0.ɵɵadvance();
1138
- i0.ɵɵclassMap(ctx_r2.getTransportIcon(group_r39.server.TransportType));
947
+ i0.ɵɵclassMap(ctx_r1.getTransportIcon(group_r21.server.TransportType));
1139
948
  i0.ɵɵadvance(2);
1140
- i0.ɵɵtextInterpolate(group_r39.server.Name);
949
+ i0.ɵɵtextInterpolate(group_r21.server.Name);
1141
950
  i0.ɵɵadvance(2);
1142
- i0.ɵɵtextInterpolate1("", ctx_r2.getServerToolCount(group_r39.server.ID), " tools");
951
+ i0.ɵɵtextInterpolate1("", ctx_r1.getServerToolCount(group_r21.server.ID), " tools");
1143
952
  i0.ɵɵadvance();
1144
- i0.ɵɵproperty("ngClass", ctx_r2.getStatusClass(group_r39.server.Status));
953
+ i0.ɵɵproperty("ngClass", ctx_r1.getStatusClass(group_r21.server.Status));
1145
954
  i0.ɵɵadvance();
1146
- i0.ɵɵtextInterpolate1(" ", group_r39.server.Status, " ");
955
+ i0.ɵɵtextInterpolate1(" ", group_r21.server.Status, " ");
1147
956
  i0.ɵɵadvance(4);
1148
- i0.ɵɵconditional(group_r39.expanded ? 14 : -1);
957
+ i0.ɵɵconditional(group_r21.expanded ? 14 : -1);
1149
958
  } }
1150
- function MCPDashboardComponent_Conditional_72_Case_2_Conditional_7_Template(rf, ctx) { if (rf & 1) {
1151
- i0.ɵɵelementStart(0, "div", 146);
1152
- i0.ɵɵrepeaterCreate(1, MCPDashboardComponent_Conditional_72_Case_2_Conditional_7_For_2_Template, 15, 11, "div", 158, _forTrack2);
959
+ function MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
960
+ i0.ɵɵelementStart(0, "div", 95);
961
+ i0.ɵɵrepeaterCreate(1, MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Template, 15, 11, "div", 107, _forTrack1);
1153
962
  i0.ɵɵelementEnd();
1154
963
  } if (rf & 2) {
1155
- const ctx_r2 = i0.ɵɵnextContext(3);
964
+ const ctx_r1 = i0.ɵɵnextContext(3);
1156
965
  i0.ɵɵadvance();
1157
- i0.ɵɵrepeater(ctx_r2.ServerGroups);
966
+ i0.ɵɵrepeater(ctx_r1.ServerGroups);
1158
967
  } }
1159
- function MCPDashboardComponent_Conditional_72_Case_2_Template(rf, ctx) { if (rf & 1) {
1160
- const _r34 = i0.ɵɵgetCurrentView();
1161
- i0.ɵɵelementStart(0, "div", 144)(1, "label", 145)(2, "input", 83);
1162
- i0.ɵɵlistener("change", function MCPDashboardComponent_Conditional_72_Case_2_Template_input_change_2_listener($event) { i0.ɵɵrestoreView(_r34); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.toggleScalableMode($event.target.checked)); });
1163
- i0.ɵɵelementEnd();
1164
- i0.ɵɵtext(3, " Scale mode (virtual scroll, paginated) ");
1165
- i0.ɵɵelementEnd();
1166
- i0.ɵɵconditionalCreate(4, MCPDashboardComponent_Conditional_72_Case_2_Conditional_4_Template, 2, 2, "span");
1167
- i0.ɵɵelementEnd();
1168
- i0.ɵɵconditionalCreate(5, MCPDashboardComponent_Conditional_72_Case_2_Conditional_5_Template, 12, 3)(6, MCPDashboardComponent_Conditional_72_Case_2_Conditional_6_Template, 6, 0, "div", 100)(7, MCPDashboardComponent_Conditional_72_Case_2_Conditional_7_Template, 3, 0, "div", 146);
968
+ function MCPDashboardComponent_Conditional_17_Case_2_Template(rf, ctx) { if (rf & 1) {
969
+ i0.ɵɵconditionalCreate(0, MCPDashboardComponent_Conditional_17_Case_2_Conditional_0_Template, 12, 3)(1, MCPDashboardComponent_Conditional_17_Case_2_Conditional_1_Template, 6, 0, "div", 47)(2, MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_Template, 3, 0, "div", 95);
1169
970
  } if (rf & 2) {
1170
- const ctx_r2 = i0.ɵɵnextContext(2);
1171
- i0.ɵɵadvance(2);
1172
- i0.ɵɵproperty("checked", ctx_r2.useScalablePagination);
1173
- i0.ɵɵadvance(2);
1174
- i0.ɵɵconditional(ctx_r2.useScalablePagination ? 4 : -1);
1175
- i0.ɵɵadvance();
1176
- i0.ɵɵconditional(ctx_r2.useScalablePagination ? 5 : ctx_r2.ServerGroups.length === 0 ? 6 : 7);
971
+ const ctx_r1 = i0.ɵɵnextContext(2);
972
+ i0.ɵɵconditional(ctx_r1.useScalablePagination ? 0 : ctx_r1.ServerGroups.length === 0 ? 1 : 2);
1177
973
  } }
1178
- function MCPDashboardComponent_Conditional_72_Case_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
1179
- i0.ɵɵelementStart(0, "div", 100);
1180
- i0.ɵɵelement(1, "i", 43);
974
+ function MCPDashboardComponent_Conditional_17_Case_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
975
+ i0.ɵɵelementStart(0, "div", 47);
976
+ i0.ɵɵelement(1, "i", 148);
1181
977
  i0.ɵɵelementStart(2, "p");
1182
978
  i0.ɵɵtext(3, "No recent execution logs");
1183
979
  i0.ɵɵelementEnd();
1184
- i0.ɵɵelementStart(4, "span", 157);
980
+ i0.ɵɵelementStart(4, "span", 106);
1185
981
  i0.ɵɵtext(5, "Logs appear when tools are executed via MCP connections");
1186
982
  i0.ɵɵelementEnd()();
1187
983
  } }
1188
- function MCPDashboardComponent_Conditional_72_Case_3_Conditional_2_For_27_Case_3_Template(rf, ctx) { if (rf & 1) {
1189
- i0.ɵɵelement(0, "i", 141);
984
+ function MCPDashboardComponent_Conditional_17_Case_3_Conditional_2_For_27_Case_3_Template(rf, ctx) { if (rf & 1) {
985
+ i0.ɵɵelement(0, "i", 92);
1190
986
  } }
1191
- function MCPDashboardComponent_Conditional_72_Case_3_Conditional_2_For_27_Case_4_Template(rf, ctx) { if (rf & 1) {
1192
- i0.ɵɵelement(0, "i", 204);
987
+ function MCPDashboardComponent_Conditional_17_Case_3_Conditional_2_For_27_Case_4_Template(rf, ctx) { if (rf & 1) {
988
+ i0.ɵɵelement(0, "i", 153);
1193
989
  } }
1194
- function MCPDashboardComponent_Conditional_72_Case_3_Conditional_2_For_27_Case_5_Template(rf, ctx) { if (rf & 1) {
1195
- i0.ɵɵelement(0, "i", 205);
990
+ function MCPDashboardComponent_Conditional_17_Case_3_Conditional_2_For_27_Case_5_Template(rf, ctx) { if (rf & 1) {
991
+ i0.ɵɵelement(0, "i", 154);
1196
992
  } }
1197
- function MCPDashboardComponent_Conditional_72_Case_3_Conditional_2_For_27_Case_6_Template(rf, ctx) { if (rf & 1) {
1198
- i0.ɵɵelement(0, "i", 206);
993
+ function MCPDashboardComponent_Conditional_17_Case_3_Conditional_2_For_27_Case_6_Template(rf, ctx) { if (rf & 1) {
994
+ i0.ɵɵelement(0, "i", 155);
1199
995
  } }
1200
- function MCPDashboardComponent_Conditional_72_Case_3_Conditional_2_For_27_Template(rf, ctx) { if (rf & 1) {
1201
- const _r45 = i0.ɵɵgetCurrentView();
1202
- i0.ɵɵelementStart(0, "tr", 203);
1203
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_72_Case_3_Conditional_2_For_27_Template_tr_click_0_listener() { const log_r46 = i0.ɵɵrestoreView(_r45).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.onLogClick(log_r46)); });
1204
- i0.ɵɵelementStart(1, "td")(2, "span", 107);
1205
- i0.ɵɵconditionalCreate(3, MCPDashboardComponent_Conditional_72_Case_3_Conditional_2_For_27_Case_3_Template, 1, 0, "i", 141)(4, MCPDashboardComponent_Conditional_72_Case_3_Conditional_2_For_27_Case_4_Template, 1, 0, "i", 204)(5, MCPDashboardComponent_Conditional_72_Case_3_Conditional_2_For_27_Case_5_Template, 1, 0, "i", 205)(6, MCPDashboardComponent_Conditional_72_Case_3_Conditional_2_For_27_Case_6_Template, 1, 0, "i", 206);
996
+ function MCPDashboardComponent_Conditional_17_Case_3_Conditional_2_For_27_Template(rf, ctx) { if (rf & 1) {
997
+ const _r27 = i0.ɵɵgetCurrentView();
998
+ i0.ɵɵelementStart(0, "tr", 152);
999
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_17_Case_3_Conditional_2_For_27_Template_tr_click_0_listener() { const log_r28 = i0.ɵɵrestoreView(_r27).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.onLogClick(log_r28)); });
1000
+ i0.ɵɵelementStart(1, "td")(2, "span", 55);
1001
+ i0.ɵɵconditionalCreate(3, MCPDashboardComponent_Conditional_17_Case_3_Conditional_2_For_27_Case_3_Template, 1, 0, "i", 92)(4, MCPDashboardComponent_Conditional_17_Case_3_Conditional_2_For_27_Case_4_Template, 1, 0, "i", 153)(5, MCPDashboardComponent_Conditional_17_Case_3_Conditional_2_For_27_Case_5_Template, 1, 0, "i", 154)(6, MCPDashboardComponent_Conditional_17_Case_3_Conditional_2_For_27_Case_6_Template, 1, 0, "i", 155);
1206
1002
  i0.ɵɵtext(7);
1207
1003
  i0.ɵɵelementEnd()();
1208
- i0.ɵɵelementStart(8, "td", 163);
1004
+ i0.ɵɵelementStart(8, "td", 112);
1209
1005
  i0.ɵɵtext(9);
1210
1006
  i0.ɵɵelementEnd();
1211
- i0.ɵɵelementStart(10, "td", 207);
1007
+ i0.ɵɵelementStart(10, "td", 156);
1212
1008
  i0.ɵɵtext(11);
1213
1009
  i0.ɵɵelementEnd();
1214
1010
  i0.ɵɵelementStart(12, "td");
@@ -1220,931 +1016,931 @@ function MCPDashboardComponent_Conditional_72_Case_3_Conditional_2_For_27_Templa
1220
1016
  i0.ɵɵelementStart(16, "td");
1221
1017
  i0.ɵɵtext(17);
1222
1018
  i0.ɵɵelementEnd();
1223
- i0.ɵɵelementStart(18, "td", 208);
1019
+ i0.ɵɵelementStart(18, "td", 157);
1224
1020
  i0.ɵɵtext(19);
1225
1021
  i0.ɵɵelementEnd();
1226
- i0.ɵɵelementStart(20, "td", 209);
1227
- i0.ɵɵelement(21, "i", 210);
1022
+ i0.ɵɵelementStart(20, "td", 158);
1023
+ i0.ɵɵelement(21, "i", 159);
1228
1024
  i0.ɵɵelementEnd()();
1229
1025
  } if (rf & 2) {
1230
- let tmp_16_0;
1231
- const log_r46 = ctx.$implicit;
1232
- const ctx_r2 = i0.ɵɵnextContext(4);
1233
- i0.ɵɵclassProp("error-row", log_r46.Status === "Error");
1026
+ let tmp_15_0;
1027
+ const log_r28 = ctx.$implicit;
1028
+ const ctx_r1 = i0.ɵɵnextContext(4);
1029
+ i0.ɵɵclassProp("error-row", log_r28.Status === "Error");
1234
1030
  i0.ɵɵadvance(2);
1235
- i0.ɵɵproperty("ngClass", ctx_r2.getStatusClass(log_r46.Status));
1031
+ i0.ɵɵproperty("ngClass", ctx_r1.getStatusClass(log_r28.Status));
1236
1032
  i0.ɵɵadvance();
1237
- i0.ɵɵconditional((tmp_16_0 = log_r46.Status) === "Success" ? 3 : tmp_16_0 === "Error" ? 4 : tmp_16_0 === "Running" ? 5 : 6);
1033
+ i0.ɵɵconditional((tmp_15_0 = log_r28.Status) === "Success" ? 3 : tmp_15_0 === "Error" ? 4 : tmp_15_0 === "Running" ? 5 : 6);
1238
1034
  i0.ɵɵadvance(4);
1239
- i0.ɵɵtextInterpolate1(" ", log_r46.Status || "Unknown", " ");
1035
+ i0.ɵɵtextInterpolate1(" ", log_r28.Status || "Unknown", " ");
1240
1036
  i0.ɵɵadvance(2);
1241
- i0.ɵɵtextInterpolate(log_r46.ServerName);
1037
+ i0.ɵɵtextInterpolate(log_r28.ServerName);
1242
1038
  i0.ɵɵadvance(2);
1243
- i0.ɵɵtextInterpolate(log_r46.ToolName);
1039
+ i0.ɵɵtextInterpolate(log_r28.ToolName);
1244
1040
  i0.ɵɵadvance(2);
1245
- i0.ɵɵtextInterpolate(log_r46.ConnectionName);
1041
+ i0.ɵɵtextInterpolate(log_r28.ConnectionName);
1246
1042
  i0.ɵɵadvance(2);
1247
- i0.ɵɵtextInterpolate(ctx_r2.formatDate(log_r46.StartedAt));
1043
+ i0.ɵɵtextInterpolate(ctx_r1.formatDate(log_r28.StartedAt));
1248
1044
  i0.ɵɵadvance(2);
1249
- i0.ɵɵtextInterpolate(ctx_r2.formatDuration(log_r46.DurationMs));
1045
+ i0.ɵɵtextInterpolate(ctx_r1.formatDuration(log_r28.DurationMs));
1250
1046
  i0.ɵɵadvance();
1251
- i0.ɵɵproperty("title", log_r46.ErrorMessage || "");
1047
+ i0.ɵɵproperty("title", log_r28.ErrorMessage || "");
1252
1048
  i0.ɵɵadvance();
1253
- i0.ɵɵtextInterpolate1(" ", log_r46.ErrorMessage || "-", " ");
1049
+ i0.ɵɵtextInterpolate1(" ", log_r28.ErrorMessage || "-", " ");
1254
1050
  } }
1255
- function MCPDashboardComponent_Conditional_72_Case_3_Conditional_2_Template(rf, ctx) { if (rf & 1) {
1256
- const _r44 = i0.ɵɵgetCurrentView();
1257
- i0.ɵɵelementStart(0, "table")(1, "thead")(2, "tr")(3, "th", 200);
1258
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_72_Case_3_Conditional_2_Template_th_click_3_listener() { i0.ɵɵrestoreView(_r44); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.onLogSortColumn("status")); });
1051
+ function MCPDashboardComponent_Conditional_17_Case_3_Conditional_2_Template(rf, ctx) { if (rf & 1) {
1052
+ const _r26 = i0.ɵɵgetCurrentView();
1053
+ i0.ɵɵelementStart(0, "table")(1, "thead")(2, "tr")(3, "th", 149);
1054
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_17_Case_3_Conditional_2_Template_th_click_3_listener() { i0.ɵɵrestoreView(_r26); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onLogSortColumn("status")); });
1259
1055
  i0.ɵɵtext(4, " Status ");
1260
- i0.ɵɵelement(5, "i", 201);
1056
+ i0.ɵɵelement(5, "i", 150);
1261
1057
  i0.ɵɵelementEnd();
1262
- i0.ɵɵelementStart(6, "th", 200);
1263
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_72_Case_3_Conditional_2_Template_th_click_6_listener() { i0.ɵɵrestoreView(_r44); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.onLogSortColumn("server")); });
1058
+ i0.ɵɵelementStart(6, "th", 149);
1059
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_17_Case_3_Conditional_2_Template_th_click_6_listener() { i0.ɵɵrestoreView(_r26); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onLogSortColumn("server")); });
1264
1060
  i0.ɵɵtext(7, " Server ");
1265
- i0.ɵɵelement(8, "i", 201);
1061
+ i0.ɵɵelement(8, "i", 150);
1266
1062
  i0.ɵɵelementEnd();
1267
- i0.ɵɵelementStart(9, "th", 200);
1268
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_72_Case_3_Conditional_2_Template_th_click_9_listener() { i0.ɵɵrestoreView(_r44); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.onLogSortColumn("tool")); });
1063
+ i0.ɵɵelementStart(9, "th", 149);
1064
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_17_Case_3_Conditional_2_Template_th_click_9_listener() { i0.ɵɵrestoreView(_r26); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onLogSortColumn("tool")); });
1269
1065
  i0.ɵɵtext(10, " Tool ");
1270
- i0.ɵɵelement(11, "i", 201);
1066
+ i0.ɵɵelement(11, "i", 150);
1271
1067
  i0.ɵɵelementEnd();
1272
- i0.ɵɵelementStart(12, "th", 200);
1273
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_72_Case_3_Conditional_2_Template_th_click_12_listener() { i0.ɵɵrestoreView(_r44); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.onLogSortColumn("connection")); });
1068
+ i0.ɵɵelementStart(12, "th", 149);
1069
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_17_Case_3_Conditional_2_Template_th_click_12_listener() { i0.ɵɵrestoreView(_r26); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onLogSortColumn("connection")); });
1274
1070
  i0.ɵɵtext(13, " Connection ");
1275
- i0.ɵɵelement(14, "i", 201);
1071
+ i0.ɵɵelement(14, "i", 150);
1276
1072
  i0.ɵɵelementEnd();
1277
- i0.ɵɵelementStart(15, "th", 200);
1278
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_72_Case_3_Conditional_2_Template_th_click_15_listener() { i0.ɵɵrestoreView(_r44); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.onLogSortColumn("started")); });
1073
+ i0.ɵɵelementStart(15, "th", 149);
1074
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_17_Case_3_Conditional_2_Template_th_click_15_listener() { i0.ɵɵrestoreView(_r26); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onLogSortColumn("started")); });
1279
1075
  i0.ɵɵtext(16, " Started ");
1280
- i0.ɵɵelement(17, "i", 201);
1076
+ i0.ɵɵelement(17, "i", 150);
1281
1077
  i0.ɵɵelementEnd();
1282
- i0.ɵɵelementStart(18, "th", 200);
1283
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_72_Case_3_Conditional_2_Template_th_click_18_listener() { i0.ɵɵrestoreView(_r44); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.onLogSortColumn("duration")); });
1078
+ i0.ɵɵelementStart(18, "th", 149);
1079
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_17_Case_3_Conditional_2_Template_th_click_18_listener() { i0.ɵɵrestoreView(_r26); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onLogSortColumn("duration")); });
1284
1080
  i0.ɵɵtext(19, " Duration ");
1285
- i0.ɵɵelement(20, "i", 201);
1081
+ i0.ɵɵelement(20, "i", 150);
1286
1082
  i0.ɵɵelementEnd();
1287
- i0.ɵɵelementStart(21, "th", 200);
1288
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_72_Case_3_Conditional_2_Template_th_click_21_listener() { i0.ɵɵrestoreView(_r44); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.onLogSortColumn("error")); });
1083
+ i0.ɵɵelementStart(21, "th", 149);
1084
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_17_Case_3_Conditional_2_Template_th_click_21_listener() { i0.ɵɵrestoreView(_r26); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onLogSortColumn("error")); });
1289
1085
  i0.ɵɵtext(22, " Error ");
1290
- i0.ɵɵelement(23, "i", 201);
1086
+ i0.ɵɵelement(23, "i", 150);
1291
1087
  i0.ɵɵelementEnd();
1292
1088
  i0.ɵɵelement(24, "th");
1293
1089
  i0.ɵɵelementEnd()();
1294
1090
  i0.ɵɵelementStart(25, "tbody");
1295
- i0.ɵɵrepeaterCreate(26, MCPDashboardComponent_Conditional_72_Case_3_Conditional_2_For_27_Template, 22, 12, "tr", 202, _forTrack0);
1091
+ i0.ɵɵrepeaterCreate(26, MCPDashboardComponent_Conditional_17_Case_3_Conditional_2_For_27_Template, 22, 12, "tr", 151, _forTrack0);
1296
1092
  i0.ɵɵelementEnd()();
1297
1093
  } if (rf & 2) {
1298
- const ctx_r2 = i0.ɵɵnextContext(3);
1094
+ const ctx_r1 = i0.ɵɵnextContext(3);
1299
1095
  i0.ɵɵadvance(3);
1300
- i0.ɵɵproperty("ngClass", ctx_r2.getLogSortClass("status"));
1096
+ i0.ɵɵproperty("ngClass", ctx_r1.getLogSortClass("status"));
1301
1097
  i0.ɵɵadvance(2);
1302
- i0.ɵɵclassProp("fa-sort-up", ctx_r2.LogsSortColumn === "status" && ctx_r2.LogsSortAscending)("fa-sort-down", ctx_r2.LogsSortColumn === "status" && !ctx_r2.LogsSortAscending)("fa-sort", ctx_r2.LogsSortColumn !== "status");
1098
+ i0.ɵɵclassProp("fa-sort-up", ctx_r1.LogsSortColumn === "status" && ctx_r1.LogsSortAscending)("fa-sort-down", ctx_r1.LogsSortColumn === "status" && !ctx_r1.LogsSortAscending)("fa-sort", ctx_r1.LogsSortColumn !== "status");
1303
1099
  i0.ɵɵadvance();
1304
- i0.ɵɵproperty("ngClass", ctx_r2.getLogSortClass("server"));
1100
+ i0.ɵɵproperty("ngClass", ctx_r1.getLogSortClass("server"));
1305
1101
  i0.ɵɵadvance(2);
1306
- i0.ɵɵclassProp("fa-sort-up", ctx_r2.LogsSortColumn === "server" && ctx_r2.LogsSortAscending)("fa-sort-down", ctx_r2.LogsSortColumn === "server" && !ctx_r2.LogsSortAscending)("fa-sort", ctx_r2.LogsSortColumn !== "server");
1102
+ i0.ɵɵclassProp("fa-sort-up", ctx_r1.LogsSortColumn === "server" && ctx_r1.LogsSortAscending)("fa-sort-down", ctx_r1.LogsSortColumn === "server" && !ctx_r1.LogsSortAscending)("fa-sort", ctx_r1.LogsSortColumn !== "server");
1307
1103
  i0.ɵɵadvance();
1308
- i0.ɵɵproperty("ngClass", ctx_r2.getLogSortClass("tool"));
1104
+ i0.ɵɵproperty("ngClass", ctx_r1.getLogSortClass("tool"));
1309
1105
  i0.ɵɵadvance(2);
1310
- i0.ɵɵclassProp("fa-sort-up", ctx_r2.LogsSortColumn === "tool" && ctx_r2.LogsSortAscending)("fa-sort-down", ctx_r2.LogsSortColumn === "tool" && !ctx_r2.LogsSortAscending)("fa-sort", ctx_r2.LogsSortColumn !== "tool");
1106
+ i0.ɵɵclassProp("fa-sort-up", ctx_r1.LogsSortColumn === "tool" && ctx_r1.LogsSortAscending)("fa-sort-down", ctx_r1.LogsSortColumn === "tool" && !ctx_r1.LogsSortAscending)("fa-sort", ctx_r1.LogsSortColumn !== "tool");
1311
1107
  i0.ɵɵadvance();
1312
- i0.ɵɵproperty("ngClass", ctx_r2.getLogSortClass("connection"));
1108
+ i0.ɵɵproperty("ngClass", ctx_r1.getLogSortClass("connection"));
1313
1109
  i0.ɵɵadvance(2);
1314
- i0.ɵɵclassProp("fa-sort-up", ctx_r2.LogsSortColumn === "connection" && ctx_r2.LogsSortAscending)("fa-sort-down", ctx_r2.LogsSortColumn === "connection" && !ctx_r2.LogsSortAscending)("fa-sort", ctx_r2.LogsSortColumn !== "connection");
1110
+ i0.ɵɵclassProp("fa-sort-up", ctx_r1.LogsSortColumn === "connection" && ctx_r1.LogsSortAscending)("fa-sort-down", ctx_r1.LogsSortColumn === "connection" && !ctx_r1.LogsSortAscending)("fa-sort", ctx_r1.LogsSortColumn !== "connection");
1315
1111
  i0.ɵɵadvance();
1316
- i0.ɵɵproperty("ngClass", ctx_r2.getLogSortClass("started"));
1112
+ i0.ɵɵproperty("ngClass", ctx_r1.getLogSortClass("started"));
1317
1113
  i0.ɵɵadvance(2);
1318
- i0.ɵɵclassProp("fa-sort-up", ctx_r2.LogsSortColumn === "started" && ctx_r2.LogsSortAscending)("fa-sort-down", ctx_r2.LogsSortColumn === "started" && !ctx_r2.LogsSortAscending)("fa-sort", ctx_r2.LogsSortColumn !== "started");
1114
+ i0.ɵɵclassProp("fa-sort-up", ctx_r1.LogsSortColumn === "started" && ctx_r1.LogsSortAscending)("fa-sort-down", ctx_r1.LogsSortColumn === "started" && !ctx_r1.LogsSortAscending)("fa-sort", ctx_r1.LogsSortColumn !== "started");
1319
1115
  i0.ɵɵadvance();
1320
- i0.ɵɵproperty("ngClass", ctx_r2.getLogSortClass("duration"));
1116
+ i0.ɵɵproperty("ngClass", ctx_r1.getLogSortClass("duration"));
1321
1117
  i0.ɵɵadvance(2);
1322
- i0.ɵɵclassProp("fa-sort-up", ctx_r2.LogsSortColumn === "duration" && ctx_r2.LogsSortAscending)("fa-sort-down", ctx_r2.LogsSortColumn === "duration" && !ctx_r2.LogsSortAscending)("fa-sort", ctx_r2.LogsSortColumn !== "duration");
1118
+ i0.ɵɵclassProp("fa-sort-up", ctx_r1.LogsSortColumn === "duration" && ctx_r1.LogsSortAscending)("fa-sort-down", ctx_r1.LogsSortColumn === "duration" && !ctx_r1.LogsSortAscending)("fa-sort", ctx_r1.LogsSortColumn !== "duration");
1323
1119
  i0.ɵɵadvance();
1324
- i0.ɵɵproperty("ngClass", ctx_r2.getLogSortClass("error"));
1120
+ i0.ɵɵproperty("ngClass", ctx_r1.getLogSortClass("error"));
1325
1121
  i0.ɵɵadvance(2);
1326
- i0.ɵɵclassProp("fa-sort-up", ctx_r2.LogsSortColumn === "error" && ctx_r2.LogsSortAscending)("fa-sort-down", ctx_r2.LogsSortColumn === "error" && !ctx_r2.LogsSortAscending)("fa-sort", ctx_r2.LogsSortColumn !== "error");
1122
+ i0.ɵɵclassProp("fa-sort-up", ctx_r1.LogsSortColumn === "error" && ctx_r1.LogsSortAscending)("fa-sort-down", ctx_r1.LogsSortColumn === "error" && !ctx_r1.LogsSortAscending)("fa-sort", ctx_r1.LogsSortColumn !== "error");
1327
1123
  i0.ɵɵadvance(3);
1328
- i0.ɵɵrepeater(ctx_r2.filteredLogs);
1124
+ i0.ɵɵrepeater(ctx_r1.filteredLogs);
1329
1125
  } }
1330
- function MCPDashboardComponent_Conditional_72_Case_3_Template(rf, ctx) { if (rf & 1) {
1331
- i0.ɵɵelementStart(0, "div", 99);
1332
- i0.ɵɵconditionalCreate(1, MCPDashboardComponent_Conditional_72_Case_3_Conditional_1_Template, 6, 0, "div", 100)(2, MCPDashboardComponent_Conditional_72_Case_3_Conditional_2_Template, 28, 49, "table");
1126
+ function MCPDashboardComponent_Conditional_17_Case_3_Template(rf, ctx) { if (rf & 1) {
1127
+ i0.ɵɵelementStart(0, "div", 46);
1128
+ i0.ɵɵconditionalCreate(1, MCPDashboardComponent_Conditional_17_Case_3_Conditional_1_Template, 6, 0, "div", 47)(2, MCPDashboardComponent_Conditional_17_Case_3_Conditional_2_Template, 28, 49, "table");
1333
1129
  i0.ɵɵelementEnd();
1334
1130
  } if (rf & 2) {
1335
- const ctx_r2 = i0.ɵɵnextContext(2);
1131
+ const ctx_r1 = i0.ɵɵnextContext(2);
1336
1132
  i0.ɵɵadvance();
1337
- i0.ɵɵconditional(ctx_r2.filteredLogs.length === 0 ? 1 : 2);
1133
+ i0.ɵɵconditional(ctx_r1.filteredLogs.length === 0 ? 1 : 2);
1338
1134
  } }
1339
- function MCPDashboardComponent_Conditional_72_Template(rf, ctx) { if (rf & 1) {
1340
- i0.ɵɵconditionalCreate(0, MCPDashboardComponent_Conditional_72_Case_0_Template, 3, 1, "div", 97)(1, MCPDashboardComponent_Conditional_72_Case_1_Template, 3, 1, "div", 98)(2, MCPDashboardComponent_Conditional_72_Case_2_Template, 8, 3)(3, MCPDashboardComponent_Conditional_72_Case_3_Template, 3, 1, "div", 99);
1135
+ function MCPDashboardComponent_Conditional_17_Template(rf, ctx) { if (rf & 1) {
1136
+ i0.ɵɵconditionalCreate(0, MCPDashboardComponent_Conditional_17_Case_0_Template, 3, 1, "div", 44)(1, MCPDashboardComponent_Conditional_17_Case_1_Template, 3, 1, "div", 45)(2, MCPDashboardComponent_Conditional_17_Case_2_Template, 3, 1)(3, MCPDashboardComponent_Conditional_17_Case_3_Template, 3, 1, "div", 46);
1341
1137
  } if (rf & 2) {
1342
- let tmp_2_0;
1343
- const ctx_r2 = i0.ɵɵnextContext();
1344
- i0.ɵɵconditional((tmp_2_0 = ctx_r2.ActiveTab) === "servers" ? 0 : tmp_2_0 === "connections" ? 1 : tmp_2_0 === "tools" ? 2 : tmp_2_0 === "logs" ? 3 : -1);
1138
+ let tmp_1_0;
1139
+ const ctx_r1 = i0.ɵɵnextContext();
1140
+ i0.ɵɵconditional((tmp_1_0 = ctx_r1.ActiveTab) === "servers" ? 0 : tmp_1_0 === "connections" ? 1 : tmp_1_0 === "tools" ? 2 : tmp_1_0 === "logs" ? 3 : -1);
1345
1141
  } }
1346
- function MCPDashboardComponent_Conditional_73_Conditional_8_Template(rf, ctx) { if (rf & 1) {
1347
- i0.ɵɵelementStart(0, "div", 217);
1348
- i0.ɵɵelement(1, "i", 94);
1142
+ function MCPDashboardComponent_Conditional_18_Conditional_8_Template(rf, ctx) { if (rf & 1) {
1143
+ i0.ɵɵelementStart(0, "div", 166);
1144
+ i0.ɵɵelement(1, "i", 41);
1349
1145
  i0.ɵɵtext(2);
1350
1146
  i0.ɵɵelementEnd();
1351
1147
  } if (rf & 2) {
1352
- const ctx_r2 = i0.ɵɵnextContext(2);
1148
+ const ctx_r1 = i0.ɵɵnextContext(2);
1353
1149
  i0.ɵɵadvance(2);
1354
- i0.ɵɵtextInterpolate1(" ", ctx_r2.ServerFormError, " ");
1150
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.ServerFormError, " ");
1355
1151
  } }
1356
- function MCPDashboardComponent_Conditional_73_For_29_Template(rf, ctx) { if (rf & 1) {
1357
- i0.ɵɵelementStart(0, "option", 80);
1152
+ function MCPDashboardComponent_Conditional_18_For_29_Template(rf, ctx) { if (rf & 1) {
1153
+ i0.ɵɵelementStart(0, "option", 173);
1358
1154
  i0.ɵɵtext(1);
1359
1155
  i0.ɵɵelementEnd();
1360
1156
  } if (rf & 2) {
1361
- const t_r51 = ctx.$implicit;
1362
- i0.ɵɵproperty("value", t_r51.value);
1157
+ const t_r33 = ctx.$implicit;
1158
+ i0.ɵɵproperty("value", t_r33.value);
1363
1159
  i0.ɵɵadvance();
1364
- i0.ɵɵtextInterpolate(t_r51.label);
1160
+ i0.ɵɵtextInterpolate(t_r33.label);
1365
1161
  } }
1366
- function MCPDashboardComponent_Conditional_73_Conditional_30_Template(rf, ctx) { if (rf & 1) {
1367
- const _r52 = i0.ɵɵgetCurrentView();
1368
- i0.ɵɵelementStart(0, "div", 218)(1, "label", 219);
1162
+ function MCPDashboardComponent_Conditional_18_Conditional_30_Template(rf, ctx) { if (rf & 1) {
1163
+ const _r34 = i0.ɵɵgetCurrentView();
1164
+ i0.ɵɵelementStart(0, "div", 167)(1, "label", 168);
1369
1165
  i0.ɵɵtext(2, "Server URL ");
1370
- i0.ɵɵelementStart(3, "span", 220);
1166
+ i0.ɵɵelementStart(3, "span", 169);
1371
1167
  i0.ɵɵtext(4, "*");
1372
1168
  i0.ɵɵelementEnd()();
1373
- i0.ɵɵelementStart(5, "input", 226, 14);
1374
- i0.ɵɵlistener("input", function MCPDashboardComponent_Conditional_73_Conditional_30_Template_input_input_5_listener() { i0.ɵɵrestoreView(_r52); const sfUrl_r53 = i0.ɵɵreference(6); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.ServerForm.ServerURL = sfUrl_r53.value); });
1169
+ i0.ɵɵelementStart(5, "input", 179, 5);
1170
+ i0.ɵɵlistener("input", function MCPDashboardComponent_Conditional_18_Conditional_30_Template_input_input_5_listener() { i0.ɵɵrestoreView(_r34); const sfUrl_r35 = i0.ɵɵreference(6); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.ServerForm.ServerURL = sfUrl_r35.value); });
1375
1171
  i0.ɵɵelementEnd()();
1376
1172
  } if (rf & 2) {
1377
- const ctx_r2 = i0.ɵɵnextContext(2);
1173
+ const ctx_r1 = i0.ɵɵnextContext(2);
1378
1174
  i0.ɵɵadvance(5);
1379
- i0.ɵɵproperty("value", ctx_r2.ServerForm.ServerURL);
1175
+ i0.ɵɵproperty("value", ctx_r1.ServerForm.ServerURL);
1380
1176
  } }
1381
- function MCPDashboardComponent_Conditional_73_Conditional_31_Template(rf, ctx) { if (rf & 1) {
1382
- const _r54 = i0.ɵɵgetCurrentView();
1383
- i0.ɵɵelementStart(0, "div", 218)(1, "label", 219);
1177
+ function MCPDashboardComponent_Conditional_18_Conditional_31_Template(rf, ctx) { if (rf & 1) {
1178
+ const _r36 = i0.ɵɵgetCurrentView();
1179
+ i0.ɵɵelementStart(0, "div", 167)(1, "label", 168);
1384
1180
  i0.ɵɵtext(2, "Command ");
1385
- i0.ɵɵelementStart(3, "span", 220);
1181
+ i0.ɵɵelementStart(3, "span", 169);
1386
1182
  i0.ɵɵtext(4, "*");
1387
1183
  i0.ɵɵelementEnd()();
1388
- i0.ɵɵelementStart(5, "input", 227, 15);
1389
- i0.ɵɵlistener("input", function MCPDashboardComponent_Conditional_73_Conditional_31_Template_input_input_5_listener() { i0.ɵɵrestoreView(_r54); const sfCmd_r55 = i0.ɵɵreference(6); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.ServerForm.Command = sfCmd_r55.value); });
1184
+ i0.ɵɵelementStart(5, "input", 180, 6);
1185
+ i0.ɵɵlistener("input", function MCPDashboardComponent_Conditional_18_Conditional_31_Template_input_input_5_listener() { i0.ɵɵrestoreView(_r36); const sfCmd_r37 = i0.ɵɵreference(6); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.ServerForm.Command = sfCmd_r37.value); });
1390
1186
  i0.ɵɵelementEnd()();
1391
1187
  } if (rf & 2) {
1392
- const ctx_r2 = i0.ɵɵnextContext(2);
1188
+ const ctx_r1 = i0.ɵɵnextContext(2);
1393
1189
  i0.ɵɵadvance(5);
1394
- i0.ɵɵproperty("value", ctx_r2.ServerForm.Command);
1190
+ i0.ɵɵproperty("value", ctx_r1.ServerForm.Command);
1395
1191
  } }
1396
- function MCPDashboardComponent_Conditional_73_For_38_Template(rf, ctx) { if (rf & 1) {
1397
- i0.ɵɵelementStart(0, "option", 80);
1192
+ function MCPDashboardComponent_Conditional_18_For_38_Template(rf, ctx) { if (rf & 1) {
1193
+ i0.ɵɵelementStart(0, "option", 173);
1398
1194
  i0.ɵɵtext(1);
1399
1195
  i0.ɵɵelementEnd();
1400
1196
  } if (rf & 2) {
1401
- const a_r57 = ctx.$implicit;
1402
- i0.ɵɵproperty("value", a_r57.value);
1197
+ const a_r39 = ctx.$implicit;
1198
+ i0.ɵɵproperty("value", a_r39.value);
1403
1199
  i0.ɵɵadvance();
1404
- i0.ɵɵtextInterpolate(a_r57.label);
1200
+ i0.ɵɵtextInterpolate(a_r39.label);
1405
1201
  } }
1406
- function MCPDashboardComponent_Conditional_73_Conditional_50_Template(rf, ctx) { if (rf & 1) {
1407
- i0.ɵɵelement(0, "i", 205);
1202
+ function MCPDashboardComponent_Conditional_18_Conditional_50_Template(rf, ctx) { if (rf & 1) {
1203
+ i0.ɵɵelement(0, "i", 154);
1408
1204
  } }
1409
- function MCPDashboardComponent_Conditional_73_Template(rf, ctx) { if (rf & 1) {
1410
- const _r47 = i0.ɵɵgetCurrentView();
1411
- i0.ɵɵelementStart(0, "div", 211);
1412
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_73_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r47); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.cancelServerForm()); });
1413
- i0.ɵɵelementStart(1, "div", 212);
1414
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_73_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r47); return i0.ɵɵresetView($event.stopPropagation()); });
1415
- i0.ɵɵelementStart(2, "div", 213)(3, "h2", 214);
1205
+ function MCPDashboardComponent_Conditional_18_Template(rf, ctx) { if (rf & 1) {
1206
+ const _r29 = i0.ɵɵgetCurrentView();
1207
+ i0.ɵɵelementStart(0, "div", 160);
1208
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_18_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r29); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.cancelServerForm()); });
1209
+ i0.ɵɵelementStart(1, "div", 161);
1210
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_18_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r29); return i0.ɵɵresetView($event.stopPropagation()); });
1211
+ i0.ɵɵelementStart(2, "div", 162)(3, "h2", 163);
1416
1212
  i0.ɵɵtext(4);
1417
1213
  i0.ɵɵelementEnd();
1418
- i0.ɵɵelementStart(5, "button", 215);
1419
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_73_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r47); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.cancelServerForm()); });
1420
- i0.ɵɵelement(6, "i", 96);
1214
+ i0.ɵɵelementStart(5, "button", 164);
1215
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_18_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r29); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.cancelServerForm()); });
1216
+ i0.ɵɵelement(6, "i", 43);
1421
1217
  i0.ɵɵelementEnd()();
1422
- i0.ɵɵelementStart(7, "div", 216);
1423
- i0.ɵɵconditionalCreate(8, MCPDashboardComponent_Conditional_73_Conditional_8_Template, 3, 1, "div", 217);
1424
- i0.ɵɵelementStart(9, "div", 218)(10, "label", 219);
1218
+ i0.ɵɵelementStart(7, "div", 165);
1219
+ i0.ɵɵconditionalCreate(8, MCPDashboardComponent_Conditional_18_Conditional_8_Template, 3, 1, "div", 166);
1220
+ i0.ɵɵelementStart(9, "div", 167)(10, "label", 168);
1425
1221
  i0.ɵɵtext(11, "Name ");
1426
- i0.ɵɵelementStart(12, "span", 220);
1222
+ i0.ɵɵelementStart(12, "span", 169);
1427
1223
  i0.ɵɵtext(13, "*");
1428
1224
  i0.ɵɵelementEnd()();
1429
- i0.ɵɵelementStart(14, "input", 221, 9);
1430
- i0.ɵɵlistener("input", function MCPDashboardComponent_Conditional_73_Template_input_input_14_listener() { i0.ɵɵrestoreView(_r47); const sfName_r48 = i0.ɵɵreference(15); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ServerForm.Name = sfName_r48.value); });
1225
+ i0.ɵɵelementStart(14, "input", 170, 0);
1226
+ i0.ɵɵlistener("input", function MCPDashboardComponent_Conditional_18_Template_input_input_14_listener() { i0.ɵɵrestoreView(_r29); const sfName_r30 = i0.ɵɵreference(15); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ServerForm.Name = sfName_r30.value); });
1431
1227
  i0.ɵɵelementEnd()();
1432
- i0.ɵɵelementStart(16, "div", 218)(17, "label", 219);
1228
+ i0.ɵɵelementStart(16, "div", 167)(17, "label", 168);
1433
1229
  i0.ɵɵtext(18, "Description");
1434
1230
  i0.ɵɵelementEnd();
1435
- i0.ɵɵelementStart(19, "textarea", 222, 10);
1436
- i0.ɵɵlistener("input", function MCPDashboardComponent_Conditional_73_Template_textarea_input_19_listener() { i0.ɵɵrestoreView(_r47); const sfDesc_r49 = i0.ɵɵreference(20); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ServerForm.Description = sfDesc_r49.value); });
1231
+ i0.ɵɵelementStart(19, "textarea", 171, 1);
1232
+ i0.ɵɵlistener("input", function MCPDashboardComponent_Conditional_18_Template_textarea_input_19_listener() { i0.ɵɵrestoreView(_r29); const sfDesc_r31 = i0.ɵɵreference(20); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ServerForm.Description = sfDesc_r31.value); });
1437
1233
  i0.ɵɵelementEnd()();
1438
- i0.ɵɵelementStart(21, "div", 218)(22, "label", 219);
1234
+ i0.ɵɵelementStart(21, "div", 167)(22, "label", 168);
1439
1235
  i0.ɵɵtext(23, "Transport Type ");
1440
- i0.ɵɵelementStart(24, "span", 220);
1236
+ i0.ɵɵelementStart(24, "span", 169);
1441
1237
  i0.ɵɵtext(25, "*");
1442
1238
  i0.ɵɵelementEnd()();
1443
- i0.ɵɵelementStart(26, "select", 78, 11);
1444
- i0.ɵɵlistener("change", function MCPDashboardComponent_Conditional_73_Template_select_change_26_listener() { i0.ɵɵrestoreView(_r47); const sfTransport_r50 = i0.ɵɵreference(27); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ServerForm.TransportType = sfTransport_r50.value); });
1445
- i0.ɵɵrepeaterCreate(28, MCPDashboardComponent_Conditional_73_For_29_Template, 2, 2, "option", 80, _forTrack3);
1239
+ i0.ɵɵelementStart(26, "select", 172, 2);
1240
+ i0.ɵɵlistener("change", function MCPDashboardComponent_Conditional_18_Template_select_change_26_listener() { i0.ɵɵrestoreView(_r29); const sfTransport_r32 = i0.ɵɵreference(27); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ServerForm.TransportType = sfTransport_r32.value); });
1241
+ i0.ɵɵrepeaterCreate(28, MCPDashboardComponent_Conditional_18_For_29_Template, 2, 2, "option", 173, _forTrack2);
1446
1242
  i0.ɵɵelementEnd()();
1447
- i0.ɵɵconditionalCreate(30, MCPDashboardComponent_Conditional_73_Conditional_30_Template, 7, 1, "div", 218);
1448
- i0.ɵɵconditionalCreate(31, MCPDashboardComponent_Conditional_73_Conditional_31_Template, 7, 1, "div", 218);
1449
- i0.ɵɵelementStart(32, "div", 218)(33, "label", 219);
1243
+ i0.ɵɵconditionalCreate(30, MCPDashboardComponent_Conditional_18_Conditional_30_Template, 7, 1, "div", 167);
1244
+ i0.ɵɵconditionalCreate(31, MCPDashboardComponent_Conditional_18_Conditional_31_Template, 7, 1, "div", 167);
1245
+ i0.ɵɵelementStart(32, "div", 167)(33, "label", 168);
1450
1246
  i0.ɵɵtext(34, "Default Auth Type");
1451
1247
  i0.ɵɵelementEnd();
1452
- i0.ɵɵelementStart(35, "select", 78, 12);
1453
- i0.ɵɵlistener("change", function MCPDashboardComponent_Conditional_73_Template_select_change_35_listener() { i0.ɵɵrestoreView(_r47); const sfAuth_r56 = i0.ɵɵreference(36); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ServerForm.DefaultAuthType = sfAuth_r56.value); });
1454
- i0.ɵɵrepeaterCreate(37, MCPDashboardComponent_Conditional_73_For_38_Template, 2, 2, "option", 80, _forTrack3);
1248
+ i0.ɵɵelementStart(35, "select", 172, 3);
1249
+ i0.ɵɵlistener("change", function MCPDashboardComponent_Conditional_18_Template_select_change_35_listener() { i0.ɵɵrestoreView(_r29); const sfAuth_r38 = i0.ɵɵreference(36); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ServerForm.DefaultAuthType = sfAuth_r38.value); });
1250
+ i0.ɵɵrepeaterCreate(37, MCPDashboardComponent_Conditional_18_For_38_Template, 2, 2, "option", 173, _forTrack2);
1455
1251
  i0.ɵɵelementEnd()();
1456
- i0.ɵɵelementStart(39, "div", 218)(40, "label", 219);
1252
+ i0.ɵɵelementStart(39, "div", 167)(40, "label", 168);
1457
1253
  i0.ɵɵtext(41, "Status");
1458
1254
  i0.ɵɵelementEnd();
1459
- i0.ɵɵelementStart(42, "select", 78, 13);
1460
- i0.ɵɵlistener("change", function MCPDashboardComponent_Conditional_73_Template_select_change_42_listener() { i0.ɵɵrestoreView(_r47); const sfStatus_r58 = i0.ɵɵreference(43); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ServerForm.Status = sfStatus_r58.value); });
1461
- i0.ɵɵelementStart(44, "option", 87);
1255
+ i0.ɵɵelementStart(42, "select", 172, 4);
1256
+ i0.ɵɵlistener("change", function MCPDashboardComponent_Conditional_18_Template_select_change_42_listener() { i0.ɵɵrestoreView(_r29); const sfStatus_r40 = i0.ɵɵreference(43); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ServerForm.Status = sfStatus_r40.value); });
1257
+ i0.ɵɵelementStart(44, "option", 174);
1462
1258
  i0.ɵɵtext(45, "Active");
1463
1259
  i0.ɵɵelementEnd();
1464
- i0.ɵɵelementStart(46, "option", 88);
1260
+ i0.ɵɵelementStart(46, "option", 175);
1465
1261
  i0.ɵɵtext(47, "Inactive");
1466
1262
  i0.ɵɵelementEnd()()()();
1467
- i0.ɵɵelementStart(48, "div", 223)(49, "button", 224);
1468
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_73_Template_button_click_49_listener() { i0.ɵɵrestoreView(_r47); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.saveServerForm()); });
1469
- i0.ɵɵconditionalCreate(50, MCPDashboardComponent_Conditional_73_Conditional_50_Template, 1, 0, "i", 205);
1263
+ i0.ɵɵelementStart(48, "div", 176)(49, "button", 177);
1264
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_18_Template_button_click_49_listener() { i0.ɵɵrestoreView(_r29); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.saveServerForm()); });
1265
+ i0.ɵɵconditionalCreate(50, MCPDashboardComponent_Conditional_18_Conditional_50_Template, 1, 0, "i", 154);
1470
1266
  i0.ɵɵtext(51);
1471
1267
  i0.ɵɵelementEnd();
1472
- i0.ɵɵelementStart(52, "button", 225);
1473
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_73_Template_button_click_52_listener() { i0.ɵɵrestoreView(_r47); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.cancelServerForm()); });
1268
+ i0.ɵɵelementStart(52, "button", 178);
1269
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_18_Template_button_click_52_listener() { i0.ɵɵrestoreView(_r29); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.cancelServerForm()); });
1474
1270
  i0.ɵɵtext(53, "Cancel");
1475
1271
  i0.ɵɵelementEnd()()()();
1476
1272
  } if (rf & 2) {
1477
- const ctx_r2 = i0.ɵɵnextContext();
1273
+ const ctx_r1 = i0.ɵɵnextContext();
1478
1274
  i0.ɵɵadvance(4);
1479
- i0.ɵɵtextInterpolate(ctx_r2.EditingServer ? "Edit MCP Server" : "Add MCP Server");
1275
+ i0.ɵɵtextInterpolate(ctx_r1.EditingServer ? "Edit MCP Server" : "Add MCP Server");
1480
1276
  i0.ɵɵadvance(4);
1481
- i0.ɵɵconditional(ctx_r2.ServerFormError ? 8 : -1);
1277
+ i0.ɵɵconditional(ctx_r1.ServerFormError ? 8 : -1);
1482
1278
  i0.ɵɵadvance(6);
1483
- i0.ɵɵproperty("value", ctx_r2.ServerForm.Name);
1279
+ i0.ɵɵproperty("value", ctx_r1.ServerForm.Name);
1484
1280
  i0.ɵɵadvance(5);
1485
- i0.ɵɵproperty("value", ctx_r2.ServerForm.Description);
1281
+ i0.ɵɵproperty("value", ctx_r1.ServerForm.Description);
1486
1282
  i0.ɵɵadvance(7);
1487
- i0.ɵɵproperty("value", ctx_r2.ServerForm.TransportType);
1283
+ i0.ɵɵproperty("value", ctx_r1.ServerForm.TransportType);
1488
1284
  i0.ɵɵadvance(2);
1489
- i0.ɵɵrepeater(ctx_r2.TransportTypes);
1285
+ i0.ɵɵrepeater(ctx_r1.TransportTypes);
1490
1286
  i0.ɵɵadvance(2);
1491
- i0.ɵɵconditional(ctx_r2.ServerForm.TransportType === "StreamableHTTP" || ctx_r2.ServerForm.TransportType === "SSE" || ctx_r2.ServerForm.TransportType === "WebSocket" ? 30 : -1);
1287
+ i0.ɵɵconditional(ctx_r1.ServerForm.TransportType === "StreamableHTTP" || ctx_r1.ServerForm.TransportType === "SSE" || ctx_r1.ServerForm.TransportType === "WebSocket" ? 30 : -1);
1492
1288
  i0.ɵɵadvance();
1493
- i0.ɵɵconditional(ctx_r2.ServerForm.TransportType === "Stdio" ? 31 : -1);
1289
+ i0.ɵɵconditional(ctx_r1.ServerForm.TransportType === "Stdio" ? 31 : -1);
1494
1290
  i0.ɵɵadvance(4);
1495
- i0.ɵɵproperty("value", ctx_r2.ServerForm.DefaultAuthType);
1291
+ i0.ɵɵproperty("value", ctx_r1.ServerForm.DefaultAuthType);
1496
1292
  i0.ɵɵadvance(2);
1497
- i0.ɵɵrepeater(ctx_r2.AuthTypes);
1293
+ i0.ɵɵrepeater(ctx_r1.AuthTypes);
1498
1294
  i0.ɵɵadvance(5);
1499
- i0.ɵɵproperty("value", ctx_r2.ServerForm.Status);
1295
+ i0.ɵɵproperty("value", ctx_r1.ServerForm.Status);
1500
1296
  i0.ɵɵadvance(7);
1501
- i0.ɵɵproperty("disabled", ctx_r2.ServerFormSaving);
1297
+ i0.ɵɵproperty("disabled", ctx_r1.ServerFormSaving);
1502
1298
  i0.ɵɵadvance();
1503
- i0.ɵɵconditional(ctx_r2.ServerFormSaving ? 50 : -1);
1299
+ i0.ɵɵconditional(ctx_r1.ServerFormSaving ? 50 : -1);
1504
1300
  i0.ɵɵadvance();
1505
- i0.ɵɵtextInterpolate1(" ", ctx_r2.EditingServer ? "Update" : "Create", " ");
1301
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.EditingServer ? "Update" : "Create", " ");
1506
1302
  } }
1507
- function MCPDashboardComponent_Conditional_74_Conditional_8_Template(rf, ctx) { if (rf & 1) {
1508
- i0.ɵɵelementStart(0, "div", 217);
1509
- i0.ɵɵelement(1, "i", 94);
1303
+ function MCPDashboardComponent_Conditional_19_Conditional_8_Template(rf, ctx) { if (rf & 1) {
1304
+ i0.ɵɵelementStart(0, "div", 166);
1305
+ i0.ɵɵelement(1, "i", 41);
1510
1306
  i0.ɵɵtext(2);
1511
1307
  i0.ɵɵelementEnd();
1512
1308
  } if (rf & 2) {
1513
- const ctx_r2 = i0.ɵɵnextContext(2);
1309
+ const ctx_r1 = i0.ɵɵnextContext(2);
1514
1310
  i0.ɵɵadvance(2);
1515
- i0.ɵɵtextInterpolate1(" ", ctx_r2.ConnectionFormError, " ");
1311
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.ConnectionFormError, " ");
1516
1312
  } }
1517
- function MCPDashboardComponent_Conditional_74_For_19_Template(rf, ctx) { if (rf & 1) {
1518
- i0.ɵɵelementStart(0, "option", 80);
1313
+ function MCPDashboardComponent_Conditional_19_For_19_Template(rf, ctx) { if (rf & 1) {
1314
+ i0.ɵɵelementStart(0, "option", 173);
1519
1315
  i0.ɵɵtext(1);
1520
1316
  i0.ɵɵelementEnd();
1521
1317
  } if (rf & 2) {
1522
- const s_r61 = ctx.$implicit;
1523
- i0.ɵɵproperty("value", s_r61.ID);
1318
+ const s_r43 = ctx.$implicit;
1319
+ i0.ɵɵproperty("value", s_r43.ID);
1524
1320
  i0.ɵɵadvance();
1525
- i0.ɵɵtextInterpolate(s_r61.Name);
1321
+ i0.ɵɵtextInterpolate(s_r43.Name);
1526
1322
  } }
1527
- function MCPDashboardComponent_Conditional_74_Conditional_45_Template(rf, ctx) { if (rf & 1) {
1528
- i0.ɵɵelement(0, "i", 205);
1323
+ function MCPDashboardComponent_Conditional_19_Conditional_45_Template(rf, ctx) { if (rf & 1) {
1324
+ i0.ɵɵelement(0, "i", 154);
1529
1325
  } }
1530
- function MCPDashboardComponent_Conditional_74_Template(rf, ctx) { if (rf & 1) {
1531
- const _r59 = i0.ɵɵgetCurrentView();
1532
- i0.ɵɵelementStart(0, "div", 211);
1533
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_74_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r59); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.cancelConnectionForm()); });
1534
- i0.ɵɵelementStart(1, "div", 228);
1535
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_74_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r59); return i0.ɵɵresetView($event.stopPropagation()); });
1536
- i0.ɵɵelementStart(2, "div", 213)(3, "h2", 214);
1326
+ function MCPDashboardComponent_Conditional_19_Template(rf, ctx) { if (rf & 1) {
1327
+ const _r41 = i0.ɵɵgetCurrentView();
1328
+ i0.ɵɵelementStart(0, "div", 160);
1329
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_19_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r41); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.cancelConnectionForm()); });
1330
+ i0.ɵɵelementStart(1, "div", 181);
1331
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_19_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r41); return i0.ɵɵresetView($event.stopPropagation()); });
1332
+ i0.ɵɵelementStart(2, "div", 162)(3, "h2", 163);
1537
1333
  i0.ɵɵtext(4, "Add Connection");
1538
1334
  i0.ɵɵelementEnd();
1539
- i0.ɵɵelementStart(5, "button", 215);
1540
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_74_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r59); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.cancelConnectionForm()); });
1541
- i0.ɵɵelement(6, "i", 96);
1335
+ i0.ɵɵelementStart(5, "button", 164);
1336
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_19_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r41); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.cancelConnectionForm()); });
1337
+ i0.ɵɵelement(6, "i", 43);
1542
1338
  i0.ɵɵelementEnd()();
1543
- i0.ɵɵelementStart(7, "div", 216);
1544
- i0.ɵɵconditionalCreate(8, MCPDashboardComponent_Conditional_74_Conditional_8_Template, 3, 1, "div", 217);
1545
- i0.ɵɵelementStart(9, "div", 218)(10, "label", 219);
1339
+ i0.ɵɵelementStart(7, "div", 165);
1340
+ i0.ɵɵconditionalCreate(8, MCPDashboardComponent_Conditional_19_Conditional_8_Template, 3, 1, "div", 166);
1341
+ i0.ɵɵelementStart(9, "div", 167)(10, "label", 168);
1546
1342
  i0.ɵɵtext(11, "Server ");
1547
- i0.ɵɵelementStart(12, "span", 220);
1343
+ i0.ɵɵelementStart(12, "span", 169);
1548
1344
  i0.ɵɵtext(13, "*");
1549
1345
  i0.ɵɵelementEnd()();
1550
- i0.ɵɵelementStart(14, "select", 78, 16);
1551
- i0.ɵɵlistener("change", function MCPDashboardComponent_Conditional_74_Template_select_change_14_listener() { i0.ɵɵrestoreView(_r59); const cfServer_r60 = i0.ɵɵreference(15); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ConnectionForm.MCPServerID = cfServer_r60.value); });
1552
- i0.ɵɵelementStart(16, "option", 229);
1346
+ i0.ɵɵelementStart(14, "select", 172, 7);
1347
+ i0.ɵɵlistener("change", function MCPDashboardComponent_Conditional_19_Template_select_change_14_listener() { i0.ɵɵrestoreView(_r41); const cfServer_r42 = i0.ɵɵreference(15); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ConnectionForm.MCPServerID = cfServer_r42.value); });
1348
+ i0.ɵɵelementStart(16, "option", 182);
1553
1349
  i0.ɵɵtext(17, "\u2014 select server \u2014");
1554
1350
  i0.ɵɵelementEnd();
1555
- i0.ɵɵrepeaterCreate(18, MCPDashboardComponent_Conditional_74_For_19_Template, 2, 2, "option", 80, _forTrack0);
1351
+ i0.ɵɵrepeaterCreate(18, MCPDashboardComponent_Conditional_19_For_19_Template, 2, 2, "option", 173, _forTrack0);
1556
1352
  i0.ɵɵelementEnd()();
1557
- i0.ɵɵelementStart(20, "div", 218)(21, "label", 219);
1353
+ i0.ɵɵelementStart(20, "div", 167)(21, "label", 168);
1558
1354
  i0.ɵɵtext(22, "Name ");
1559
- i0.ɵɵelementStart(23, "span", 220);
1355
+ i0.ɵɵelementStart(23, "span", 169);
1560
1356
  i0.ɵɵtext(24, "*");
1561
1357
  i0.ɵɵelementEnd()();
1562
- i0.ɵɵelementStart(25, "input", 230, 17);
1563
- i0.ɵɵlistener("input", function MCPDashboardComponent_Conditional_74_Template_input_input_25_listener() { i0.ɵɵrestoreView(_r59); const cfName_r62 = i0.ɵɵreference(26); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ConnectionForm.Name = cfName_r62.value); });
1358
+ i0.ɵɵelementStart(25, "input", 183, 8);
1359
+ i0.ɵɵlistener("input", function MCPDashboardComponent_Conditional_19_Template_input_input_25_listener() { i0.ɵɵrestoreView(_r41); const cfName_r44 = i0.ɵɵreference(26); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ConnectionForm.Name = cfName_r44.value); });
1564
1360
  i0.ɵɵelementEnd()();
1565
- i0.ɵɵelementStart(27, "div", 218)(28, "label", 219);
1361
+ i0.ɵɵelementStart(27, "div", 167)(28, "label", 168);
1566
1362
  i0.ɵɵtext(29, "Bearer Token");
1567
1363
  i0.ɵɵelementEnd();
1568
- i0.ɵɵelementStart(30, "input", 231, 18);
1569
- i0.ɵɵlistener("input", function MCPDashboardComponent_Conditional_74_Template_input_input_30_listener() { i0.ɵɵrestoreView(_r59); const cfToken_r63 = i0.ɵɵreference(31); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ConnectionForm.BearerToken = cfToken_r63.value); });
1364
+ i0.ɵɵelementStart(30, "input", 184, 9);
1365
+ i0.ɵɵlistener("input", function MCPDashboardComponent_Conditional_19_Template_input_input_30_listener() { i0.ɵɵrestoreView(_r41); const cfToken_r45 = i0.ɵɵreference(31); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ConnectionForm.BearerToken = cfToken_r45.value); });
1570
1366
  i0.ɵɵelementEnd();
1571
- i0.ɵɵelementStart(32, "span", 53);
1367
+ i0.ɵɵelementStart(32, "span", 185);
1572
1368
  i0.ɵɵtext(33, "Will be stored as a Credential and linked to this connection");
1573
1369
  i0.ɵɵelementEnd()();
1574
- i0.ɵɵelementStart(34, "div", 218)(35, "label", 219);
1370
+ i0.ɵɵelementStart(34, "div", 167)(35, "label", 168);
1575
1371
  i0.ɵɵtext(36, "Status");
1576
1372
  i0.ɵɵelementEnd();
1577
- i0.ɵɵelementStart(37, "select", 78, 19);
1578
- i0.ɵɵlistener("change", function MCPDashboardComponent_Conditional_74_Template_select_change_37_listener() { i0.ɵɵrestoreView(_r59); const cfStatus_r64 = i0.ɵɵreference(38); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ConnectionForm.Status = cfStatus_r64.value); });
1579
- i0.ɵɵelementStart(39, "option", 87);
1373
+ i0.ɵɵelementStart(37, "select", 172, 10);
1374
+ i0.ɵɵlistener("change", function MCPDashboardComponent_Conditional_19_Template_select_change_37_listener() { i0.ɵɵrestoreView(_r41); const cfStatus_r46 = i0.ɵɵreference(38); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ConnectionForm.Status = cfStatus_r46.value); });
1375
+ i0.ɵɵelementStart(39, "option", 174);
1580
1376
  i0.ɵɵtext(40, "Active");
1581
1377
  i0.ɵɵelementEnd();
1582
- i0.ɵɵelementStart(41, "option", 88);
1378
+ i0.ɵɵelementStart(41, "option", 175);
1583
1379
  i0.ɵɵtext(42, "Inactive");
1584
1380
  i0.ɵɵelementEnd()()()();
1585
- i0.ɵɵelementStart(43, "div", 223)(44, "button", 224);
1586
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_74_Template_button_click_44_listener() { i0.ɵɵrestoreView(_r59); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.saveConnectionForm()); });
1587
- i0.ɵɵconditionalCreate(45, MCPDashboardComponent_Conditional_74_Conditional_45_Template, 1, 0, "i", 205);
1381
+ i0.ɵɵelementStart(43, "div", 176)(44, "button", 177);
1382
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_19_Template_button_click_44_listener() { i0.ɵɵrestoreView(_r41); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.saveConnectionForm()); });
1383
+ i0.ɵɵconditionalCreate(45, MCPDashboardComponent_Conditional_19_Conditional_45_Template, 1, 0, "i", 154);
1588
1384
  i0.ɵɵtext(46, " Create ");
1589
1385
  i0.ɵɵelementEnd();
1590
- i0.ɵɵelementStart(47, "button", 225);
1591
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_74_Template_button_click_47_listener() { i0.ɵɵrestoreView(_r59); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.cancelConnectionForm()); });
1386
+ i0.ɵɵelementStart(47, "button", 178);
1387
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_19_Template_button_click_47_listener() { i0.ɵɵrestoreView(_r41); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.cancelConnectionForm()); });
1592
1388
  i0.ɵɵtext(48, "Cancel");
1593
1389
  i0.ɵɵelementEnd()()()();
1594
1390
  } if (rf & 2) {
1595
- const ctx_r2 = i0.ɵɵnextContext();
1391
+ const ctx_r1 = i0.ɵɵnextContext();
1596
1392
  i0.ɵɵadvance(8);
1597
- i0.ɵɵconditional(ctx_r2.ConnectionFormError ? 8 : -1);
1393
+ i0.ɵɵconditional(ctx_r1.ConnectionFormError ? 8 : -1);
1598
1394
  i0.ɵɵadvance(6);
1599
- i0.ɵɵproperty("value", ctx_r2.ConnectionForm.MCPServerID);
1395
+ i0.ɵɵproperty("value", ctx_r1.ConnectionForm.MCPServerID);
1600
1396
  i0.ɵɵadvance(4);
1601
- i0.ɵɵrepeater(ctx_r2.servers);
1397
+ i0.ɵɵrepeater(ctx_r1.servers);
1602
1398
  i0.ɵɵadvance(7);
1603
- i0.ɵɵproperty("value", ctx_r2.ConnectionForm.Name);
1399
+ i0.ɵɵproperty("value", ctx_r1.ConnectionForm.Name);
1604
1400
  i0.ɵɵadvance(5);
1605
- i0.ɵɵproperty("value", ctx_r2.ConnectionForm.BearerToken);
1401
+ i0.ɵɵproperty("value", ctx_r1.ConnectionForm.BearerToken);
1606
1402
  i0.ɵɵadvance(7);
1607
- i0.ɵɵproperty("value", ctx_r2.ConnectionForm.Status);
1403
+ i0.ɵɵproperty("value", ctx_r1.ConnectionForm.Status);
1608
1404
  i0.ɵɵadvance(7);
1609
- i0.ɵɵproperty("disabled", ctx_r2.ConnectionFormSaving);
1405
+ i0.ɵɵproperty("disabled", ctx_r1.ConnectionFormSaving);
1610
1406
  i0.ɵɵadvance();
1611
- i0.ɵɵconditional(ctx_r2.ConnectionFormSaving ? 45 : -1);
1407
+ i0.ɵɵconditional(ctx_r1.ConnectionFormSaving ? 45 : -1);
1612
1408
  } }
1613
- function MCPDashboardComponent_Conditional_75_Conditional_5_Template(rf, ctx) { if (rf & 1) {
1614
- i0.ɵɵelementStart(0, "span", 233);
1409
+ function MCPDashboardComponent_Conditional_20_Conditional_5_Template(rf, ctx) { if (rf & 1) {
1410
+ i0.ɵɵelementStart(0, "span", 187);
1615
1411
  i0.ɵɵtext(1);
1616
1412
  i0.ɵɵelementEnd();
1617
1413
  } if (rf & 2) {
1618
- const ctx_r2 = i0.ɵɵnextContext(2);
1414
+ const ctx_r1 = i0.ɵɵnextContext(2);
1619
1415
  i0.ɵɵadvance();
1620
- i0.ɵɵtextInterpolate1("\u2014 ", (ctx_r2.TestSelectedTool == null ? null : ctx_r2.TestSelectedTool.ToolTitle) || (ctx_r2.TestSelectedTool == null ? null : ctx_r2.TestSelectedTool.ToolName));
1416
+ i0.ɵɵtextInterpolate1("\u2014 ", (ctx_r1.TestSelectedTool == null ? null : ctx_r1.TestSelectedTool.ToolTitle) || (ctx_r1.TestSelectedTool == null ? null : ctx_r1.TestSelectedTool.ToolName));
1621
1417
  } }
1622
- function MCPDashboardComponent_Conditional_75_Conditional_20_For_10_Template(rf, ctx) { if (rf & 1) {
1623
- i0.ɵɵelementStart(0, "option", 238);
1418
+ function MCPDashboardComponent_Conditional_20_Conditional_20_For_10_Template(rf, ctx) { if (rf & 1) {
1419
+ i0.ɵɵelementStart(0, "option", 192);
1624
1420
  i0.ɵɵtext(1);
1625
1421
  i0.ɵɵelementEnd();
1626
1422
  } if (rf & 2) {
1627
- const s_r68 = ctx.$implicit;
1628
- const ctx_r2 = i0.ɵɵnextContext(3);
1629
- i0.ɵɵproperty("value", s_r68.ID)("selected", ctx_r2.TestToolServerID === s_r68.ID);
1423
+ const s_r50 = ctx.$implicit;
1424
+ const ctx_r1 = i0.ɵɵnextContext(3);
1425
+ i0.ɵɵproperty("value", s_r50.ID)("selected", ctx_r1.TestToolServerID === s_r50.ID);
1630
1426
  i0.ɵɵadvance();
1631
- i0.ɵɵtextInterpolate(s_r68.Name);
1427
+ i0.ɵɵtextInterpolate(s_r50.Name);
1632
1428
  } }
1633
- function MCPDashboardComponent_Conditional_75_Conditional_20_For_21_Template(rf, ctx) { if (rf & 1) {
1634
- i0.ɵɵelementStart(0, "option", 238);
1429
+ function MCPDashboardComponent_Conditional_20_Conditional_20_For_21_Template(rf, ctx) { if (rf & 1) {
1430
+ i0.ɵɵelementStart(0, "option", 192);
1635
1431
  i0.ɵɵtext(1);
1636
1432
  i0.ɵɵelementEnd();
1637
1433
  } if (rf & 2) {
1638
- const c_r70 = ctx.$implicit;
1639
- const ctx_r2 = i0.ɵɵnextContext(3);
1640
- i0.ɵɵproperty("value", c_r70.ID)("selected", ctx_r2.TestToolConnectionID === c_r70.ID);
1434
+ const c_r52 = ctx.$implicit;
1435
+ const ctx_r1 = i0.ɵɵnextContext(3);
1436
+ i0.ɵɵproperty("value", c_r52.ID)("selected", ctx_r1.TestToolConnectionID === c_r52.ID);
1641
1437
  i0.ɵɵadvance();
1642
- i0.ɵɵtextInterpolate(c_r70.Name);
1438
+ i0.ɵɵtextInterpolate(c_r52.Name);
1643
1439
  } }
1644
- function MCPDashboardComponent_Conditional_75_Conditional_20_Conditional_30_Template(rf, ctx) { if (rf & 1) {
1645
- i0.ɵɵelementStart(0, "div", 150);
1440
+ function MCPDashboardComponent_Conditional_20_Conditional_20_Conditional_30_Template(rf, ctx) { if (rf & 1) {
1441
+ i0.ɵɵelementStart(0, "div", 99);
1646
1442
  i0.ɵɵtext(1, "No tools match.");
1647
1443
  i0.ɵɵelementEnd();
1648
1444
  } }
1649
- function MCPDashboardComponent_Conditional_75_Conditional_20_For_32_Conditional_1_Template(rf, ctx) { if (rf & 1) {
1650
- i0.ɵɵelementStart(0, "span", 243);
1445
+ function MCPDashboardComponent_Conditional_20_Conditional_20_For_32_Conditional_1_Template(rf, ctx) { if (rf & 1) {
1446
+ i0.ɵɵelementStart(0, "span", 197);
1651
1447
  i0.ɵɵtext(1, "Recent");
1652
1448
  i0.ɵɵelementEnd();
1653
1449
  } }
1654
- function MCPDashboardComponent_Conditional_75_Conditional_20_For_32_Conditional_5_Template(rf, ctx) { if (rf & 1) {
1655
- i0.ɵɵelementStart(0, "div", 245);
1450
+ function MCPDashboardComponent_Conditional_20_Conditional_20_For_32_Conditional_5_Template(rf, ctx) { if (rf & 1) {
1451
+ i0.ɵɵelementStart(0, "div", 199);
1656
1452
  i0.ɵɵtext(1);
1657
1453
  i0.ɵɵelementEnd();
1658
1454
  } if (rf & 2) {
1659
- const t_r73 = i0.ɵɵnextContext().$implicit;
1455
+ const t_r55 = i0.ɵɵnextContext().$implicit;
1660
1456
  i0.ɵɵadvance();
1661
- i0.ɵɵtextInterpolate(t_r73.ToolName);
1457
+ i0.ɵɵtextInterpolate(t_r55.ToolName);
1662
1458
  } }
1663
- function MCPDashboardComponent_Conditional_75_Conditional_20_For_32_Conditional_6_Template(rf, ctx) { if (rf & 1) {
1664
- i0.ɵɵelement(0, "i", 246);
1459
+ function MCPDashboardComponent_Conditional_20_Conditional_20_For_32_Conditional_6_Template(rf, ctx) { if (rf & 1) {
1460
+ i0.ɵɵelement(0, "i", 200);
1665
1461
  } }
1666
- function MCPDashboardComponent_Conditional_75_Conditional_20_For_32_Template(rf, ctx) { if (rf & 1) {
1667
- const _r72 = i0.ɵɵgetCurrentView();
1668
- i0.ɵɵelementStart(0, "div", 242);
1669
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_75_Conditional_20_For_32_Template_div_click_0_listener() { const t_r73 = i0.ɵɵrestoreView(_r72).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.pickTestTool(t_r73.ID)); });
1670
- i0.ɵɵconditionalCreate(1, MCPDashboardComponent_Conditional_75_Conditional_20_For_32_Conditional_1_Template, 2, 0, "span", 243);
1671
- i0.ɵɵelementStart(2, "div", 152)(3, "div", 244);
1462
+ function MCPDashboardComponent_Conditional_20_Conditional_20_For_32_Template(rf, ctx) { if (rf & 1) {
1463
+ const _r54 = i0.ɵɵgetCurrentView();
1464
+ i0.ɵɵelementStart(0, "div", 196);
1465
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_20_Conditional_20_For_32_Template_div_click_0_listener() { const t_r55 = i0.ɵɵrestoreView(_r54).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.pickTestTool(t_r55.ID)); });
1466
+ i0.ɵɵconditionalCreate(1, MCPDashboardComponent_Conditional_20_Conditional_20_For_32_Conditional_1_Template, 2, 0, "span", 197);
1467
+ i0.ɵɵelementStart(2, "div", 101)(3, "div", 198);
1672
1468
  i0.ɵɵtext(4);
1673
1469
  i0.ɵɵelementEnd();
1674
- i0.ɵɵconditionalCreate(5, MCPDashboardComponent_Conditional_75_Conditional_20_For_32_Conditional_5_Template, 2, 1, "div", 245);
1470
+ i0.ɵɵconditionalCreate(5, MCPDashboardComponent_Conditional_20_Conditional_20_For_32_Conditional_5_Template, 2, 1, "div", 199);
1675
1471
  i0.ɵɵelementEnd();
1676
- i0.ɵɵconditionalCreate(6, MCPDashboardComponent_Conditional_75_Conditional_20_For_32_Conditional_6_Template, 1, 0, "i", 246);
1472
+ i0.ɵɵconditionalCreate(6, MCPDashboardComponent_Conditional_20_Conditional_20_For_32_Conditional_6_Template, 1, 0, "i", 200);
1677
1473
  i0.ɵɵelementEnd();
1678
1474
  } if (rf & 2) {
1679
- const t_r73 = ctx.$implicit;
1680
- const ctx_r2 = i0.ɵɵnextContext(3);
1681
- i0.ɵɵstyleProp("background", ctx_r2.TestToolID === t_r73.ID ? "color-mix(in srgb, var(--mj-brand-primary,#264FAF) 12%, var(--mj-bg-surface,#fff))" : null);
1475
+ const t_r55 = ctx.$implicit;
1476
+ const ctx_r1 = i0.ɵɵnextContext(3);
1477
+ i0.ɵɵstyleProp("background", ctx_r1.TestToolID === t_r55.ID ? "color-mix(in srgb, var(--mj-brand-primary,#264FAF) 12%, var(--mj-bg-surface,#fff))" : null);
1682
1478
  i0.ɵɵadvance();
1683
- i0.ɵɵconditional(ctx_r2.isRecentTestTool(t_r73.ID) ? 1 : -1);
1479
+ i0.ɵɵconditional(ctx_r1.isRecentTestTool(t_r55.ID) ? 1 : -1);
1684
1480
  i0.ɵɵadvance(3);
1685
- i0.ɵɵtextInterpolate(t_r73.ToolTitle || t_r73.ToolName);
1481
+ i0.ɵɵtextInterpolate(t_r55.ToolTitle || t_r55.ToolName);
1686
1482
  i0.ɵɵadvance();
1687
- i0.ɵɵconditional(t_r73.ToolTitle && t_r73.ToolName !== t_r73.ToolTitle ? 5 : -1);
1483
+ i0.ɵɵconditional(t_r55.ToolTitle && t_r55.ToolName !== t_r55.ToolTitle ? 5 : -1);
1688
1484
  i0.ɵɵadvance();
1689
- i0.ɵɵconditional(ctx_r2.TestToolID === t_r73.ID ? 6 : -1);
1485
+ i0.ɵɵconditional(ctx_r1.TestToolID === t_r55.ID ? 6 : -1);
1690
1486
  } }
1691
- function MCPDashboardComponent_Conditional_75_Conditional_20_Template(rf, ctx) { if (rf & 1) {
1692
- const _r66 = i0.ɵɵgetCurrentView();
1693
- i0.ɵɵelementStart(0, "div", 218)(1, "label", 219);
1487
+ function MCPDashboardComponent_Conditional_20_Conditional_20_Template(rf, ctx) { if (rf & 1) {
1488
+ const _r48 = i0.ɵɵgetCurrentView();
1489
+ i0.ɵɵelementStart(0, "div", 167)(1, "label", 168);
1694
1490
  i0.ɵɵtext(2, "Server ");
1695
- i0.ɵɵelementStart(3, "span", 220);
1491
+ i0.ɵɵelementStart(3, "span", 169);
1696
1492
  i0.ɵɵtext(4, "*");
1697
1493
  i0.ɵɵelementEnd()();
1698
- i0.ɵɵelementStart(5, "select", 237, 20);
1699
- i0.ɵɵlistener("change", function MCPDashboardComponent_Conditional_75_Conditional_20_Template_select_change_5_listener() { i0.ɵɵrestoreView(_r66); const tSrv_r67 = i0.ɵɵreference(6); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.onTestServerChange(tSrv_r67.value)); });
1700
- i0.ɵɵelementStart(7, "option", 229);
1494
+ i0.ɵɵelementStart(5, "select", 191, 11);
1495
+ i0.ɵɵlistener("change", function MCPDashboardComponent_Conditional_20_Conditional_20_Template_select_change_5_listener() { i0.ɵɵrestoreView(_r48); const tSrv_r49 = i0.ɵɵreference(6); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onTestServerChange(tSrv_r49.value)); });
1496
+ i0.ɵɵelementStart(7, "option", 182);
1701
1497
  i0.ɵɵtext(8, "\u2014 select server \u2014");
1702
1498
  i0.ɵɵelementEnd();
1703
- i0.ɵɵrepeaterCreate(9, MCPDashboardComponent_Conditional_75_Conditional_20_For_10_Template, 2, 3, "option", 238, _forTrack0);
1499
+ i0.ɵɵrepeaterCreate(9, MCPDashboardComponent_Conditional_20_Conditional_20_For_10_Template, 2, 3, "option", 192, _forTrack0);
1704
1500
  i0.ɵɵelementEnd()();
1705
- i0.ɵɵelementStart(11, "div", 218)(12, "label", 219);
1501
+ i0.ɵɵelementStart(11, "div", 167)(12, "label", 168);
1706
1502
  i0.ɵɵtext(13, "Connection ");
1707
- i0.ɵɵelementStart(14, "span", 220);
1503
+ i0.ɵɵelementStart(14, "span", 169);
1708
1504
  i0.ɵɵtext(15, "*");
1709
1505
  i0.ɵɵelementEnd()();
1710
- i0.ɵɵelementStart(16, "select", 237, 21);
1711
- i0.ɵɵlistener("change", function MCPDashboardComponent_Conditional_75_Conditional_20_Template_select_change_16_listener() { i0.ɵɵrestoreView(_r66); const tConn_r69 = i0.ɵɵreference(17); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.onTestConnectionChange(tConn_r69.value)); });
1712
- i0.ɵɵelementStart(18, "option", 229);
1506
+ i0.ɵɵelementStart(16, "select", 191, 12);
1507
+ i0.ɵɵlistener("change", function MCPDashboardComponent_Conditional_20_Conditional_20_Template_select_change_16_listener() { i0.ɵɵrestoreView(_r48); const tConn_r51 = i0.ɵɵreference(17); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onTestConnectionChange(tConn_r51.value)); });
1508
+ i0.ɵɵelementStart(18, "option", 182);
1713
1509
  i0.ɵɵtext(19, "\u2014 select connection \u2014");
1714
1510
  i0.ɵɵelementEnd();
1715
- i0.ɵɵrepeaterCreate(20, MCPDashboardComponent_Conditional_75_Conditional_20_For_21_Template, 2, 3, "option", 238, _forTrack0);
1511
+ i0.ɵɵrepeaterCreate(20, MCPDashboardComponent_Conditional_20_Conditional_20_For_21_Template, 2, 3, "option", 192, _forTrack0);
1716
1512
  i0.ɵɵelementEnd()();
1717
- i0.ɵɵelementStart(22, "div", 218)(23, "label", 219);
1513
+ i0.ɵɵelementStart(22, "div", 167)(23, "label", 168);
1718
1514
  i0.ɵɵtext(24, "Tool ");
1719
- i0.ɵɵelementStart(25, "span", 220);
1515
+ i0.ɵɵelementStart(25, "span", 169);
1720
1516
  i0.ɵɵtext(26, "*");
1721
1517
  i0.ɵɵelementEnd()();
1722
- i0.ɵɵelementStart(27, "input", 239, 22);
1723
- i0.ɵɵlistener("input", function MCPDashboardComponent_Conditional_75_Conditional_20_Template_input_input_27_listener() { i0.ɵɵrestoreView(_r66); const tSearch_r71 = i0.ɵɵreference(28); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.onTestToolSearchChange(tSearch_r71.value)); });
1518
+ i0.ɵɵelementStart(27, "input", 193, 13);
1519
+ i0.ɵɵlistener("input", function MCPDashboardComponent_Conditional_20_Conditional_20_Template_input_input_27_listener() { i0.ɵɵrestoreView(_r48); const tSearch_r53 = i0.ɵɵreference(28); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onTestToolSearchChange(tSearch_r53.value)); });
1724
1520
  i0.ɵɵelementEnd();
1725
- i0.ɵɵelementStart(29, "div", 240);
1726
- i0.ɵɵconditionalCreate(30, MCPDashboardComponent_Conditional_75_Conditional_20_Conditional_30_Template, 2, 0, "div", 150);
1727
- i0.ɵɵrepeaterCreate(31, MCPDashboardComponent_Conditional_75_Conditional_20_For_32_Template, 7, 6, "div", 241, _forTrack0);
1521
+ i0.ɵɵelementStart(29, "div", 194);
1522
+ i0.ɵɵconditionalCreate(30, MCPDashboardComponent_Conditional_20_Conditional_20_Conditional_30_Template, 2, 0, "div", 99);
1523
+ i0.ɵɵrepeaterCreate(31, MCPDashboardComponent_Conditional_20_Conditional_20_For_32_Template, 7, 6, "div", 195, _forTrack0);
1728
1524
  i0.ɵɵelementEnd()();
1729
1525
  } if (rf & 2) {
1730
- const ctx_r2 = i0.ɵɵnextContext(2);
1526
+ const ctx_r1 = i0.ɵɵnextContext(2);
1731
1527
  i0.ɵɵadvance(9);
1732
- i0.ɵɵrepeater(ctx_r2.servers);
1528
+ i0.ɵɵrepeater(ctx_r1.servers);
1733
1529
  i0.ɵɵadvance(7);
1734
- i0.ɵɵattribute("disabled", !ctx_r2.TestToolServerID ? true : null);
1530
+ i0.ɵɵattribute("disabled", !ctx_r1.TestToolServerID ? true : null);
1735
1531
  i0.ɵɵadvance(4);
1736
- i0.ɵɵrepeater(ctx_r2.TestFilteredConnections);
1532
+ i0.ɵɵrepeater(ctx_r1.TestFilteredConnections);
1737
1533
  i0.ɵɵadvance(7);
1738
- i0.ɵɵproperty("value", ctx_r2.TestToolSearch);
1739
- i0.ɵɵattribute("disabled", !ctx_r2.TestToolServerID ? true : null);
1534
+ i0.ɵɵproperty("value", ctx_r1.TestToolSearch);
1535
+ i0.ɵɵattribute("disabled", !ctx_r1.TestToolServerID ? true : null);
1740
1536
  i0.ɵɵadvance(3);
1741
- i0.ɵɵconditional(ctx_r2.TestComboboxTools.length === 0 ? 30 : -1);
1537
+ i0.ɵɵconditional(ctx_r1.TestComboboxTools.length === 0 ? 30 : -1);
1742
1538
  i0.ɵɵadvance();
1743
- i0.ɵɵrepeater(ctx_r2.TestComboboxTools);
1539
+ i0.ɵɵrepeater(ctx_r1.TestComboboxTools);
1744
1540
  } }
1745
- function MCPDashboardComponent_Conditional_75_Conditional_21_Conditional_0_Template(rf, ctx) { if (rf & 1) {
1746
- i0.ɵɵelementStart(0, "div", 247);
1747
- i0.ɵɵelement(1, "i", 248);
1541
+ function MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_0_Template(rf, ctx) { if (rf & 1) {
1542
+ i0.ɵɵelementStart(0, "div", 201);
1543
+ i0.ɵɵelement(1, "i", 202);
1748
1544
  i0.ɵɵelementStart(2, "p");
1749
1545
  i0.ɵɵtext(3, "This tool requires no parameters.");
1750
1546
  i0.ɵɵelementEnd()();
1751
1547
  } }
1752
- function MCPDashboardComponent_Conditional_75_Conditional_21_Conditional_1_For_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1753
- i0.ɵɵelementStart(0, "span", 220);
1548
+ function MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_1_For_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1549
+ i0.ɵɵelementStart(0, "span", 169);
1754
1550
  i0.ɵɵtext(1, "*");
1755
1551
  i0.ɵɵelementEnd();
1756
1552
  } }
1757
- function MCPDashboardComponent_Conditional_75_Conditional_21_Conditional_1_For_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
1758
- i0.ɵɵelementStart(0, "p", 249);
1553
+ function MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_1_For_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
1554
+ i0.ɵɵelementStart(0, "p", 203);
1759
1555
  i0.ɵɵtext(1);
1760
1556
  i0.ɵɵelementEnd();
1761
1557
  } if (rf & 2) {
1762
- const p_r74 = i0.ɵɵnextContext().$implicit;
1558
+ const p_r56 = i0.ɵɵnextContext().$implicit;
1763
1559
  i0.ɵɵadvance();
1764
- i0.ɵɵtextInterpolate(p_r74.description);
1560
+ i0.ɵɵtextInterpolate(p_r56.description);
1765
1561
  } }
1766
- function MCPDashboardComponent_Conditional_75_Conditional_21_Conditional_1_For_1_Conditional_5_For_5_Template(rf, ctx) { if (rf & 1) {
1767
- i0.ɵɵelementStart(0, "option", 80);
1562
+ function MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_1_For_1_Conditional_5_For_5_Template(rf, ctx) { if (rf & 1) {
1563
+ i0.ɵɵelementStart(0, "option", 173);
1768
1564
  i0.ɵɵtext(1);
1769
1565
  i0.ɵɵelementEnd();
1770
1566
  } if (rf & 2) {
1771
- const v_r77 = ctx.$implicit;
1772
- i0.ɵɵproperty("value", v_r77);
1567
+ const v_r59 = ctx.$implicit;
1568
+ i0.ɵɵproperty("value", v_r59);
1773
1569
  i0.ɵɵadvance();
1774
- i0.ɵɵtextInterpolate(v_r77);
1570
+ i0.ɵɵtextInterpolate(v_r59);
1775
1571
  } }
1776
- function MCPDashboardComponent_Conditional_75_Conditional_21_Conditional_1_For_1_Conditional_5_Template(rf, ctx) { if (rf & 1) {
1777
- const _r75 = i0.ɵɵgetCurrentView();
1778
- i0.ɵɵelementStart(0, "select", 237, 23);
1779
- i0.ɵɵlistener("change", function MCPDashboardComponent_Conditional_75_Conditional_21_Conditional_1_For_1_Conditional_5_Template_select_change_0_listener() { i0.ɵɵrestoreView(_r75); const enumEl_r76 = i0.ɵɵreference(1); const p_r74 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.testSetParam(p_r74.name, enumEl_r76.value)); });
1780
- i0.ɵɵelementStart(2, "option", 229);
1572
+ function MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_1_For_1_Conditional_5_Template(rf, ctx) { if (rf & 1) {
1573
+ const _r57 = i0.ɵɵgetCurrentView();
1574
+ i0.ɵɵelementStart(0, "select", 191, 14);
1575
+ i0.ɵɵlistener("change", function MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_1_For_1_Conditional_5_Template_select_change_0_listener() { i0.ɵɵrestoreView(_r57); const enumEl_r58 = i0.ɵɵreference(1); const p_r56 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.testSetParam(p_r56.name, enumEl_r58.value)); });
1576
+ i0.ɵɵelementStart(2, "option", 182);
1781
1577
  i0.ɵɵtext(3, "\u2014 select \u2014");
1782
1578
  i0.ɵɵelementEnd();
1783
- i0.ɵɵrepeaterCreate(4, MCPDashboardComponent_Conditional_75_Conditional_21_Conditional_1_For_1_Conditional_5_For_5_Template, 2, 2, "option", 80, i0.ɵɵrepeaterTrackByIndex);
1579
+ i0.ɵɵrepeaterCreate(4, MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_1_For_1_Conditional_5_For_5_Template, 2, 2, "option", 173, i0.ɵɵrepeaterTrackByIndex);
1784
1580
  i0.ɵɵelementEnd();
1785
1581
  } if (rf & 2) {
1786
- const p_r74 = i0.ɵɵnextContext().$implicit;
1582
+ const p_r56 = i0.ɵɵnextContext().$implicit;
1787
1583
  i0.ɵɵadvance(4);
1788
- i0.ɵɵrepeater(p_r74.enumValues);
1584
+ i0.ɵɵrepeater(p_r56.enumValues);
1789
1585
  } }
1790
- function MCPDashboardComponent_Conditional_75_Conditional_21_Conditional_1_For_1_Conditional_6_Template(rf, ctx) { if (rf & 1) {
1791
- const _r78 = i0.ɵɵgetCurrentView();
1792
- i0.ɵɵelementStart(0, "select", 237, 24);
1793
- i0.ɵɵlistener("change", function MCPDashboardComponent_Conditional_75_Conditional_21_Conditional_1_For_1_Conditional_6_Template_select_change_0_listener() { i0.ɵɵrestoreView(_r78); const boolEl_r79 = i0.ɵɵreference(1); const p_r74 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.testSetParam(p_r74.name, boolEl_r79.value)); });
1794
- i0.ɵɵelementStart(2, "option", 253);
1586
+ function MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_1_For_1_Conditional_6_Template(rf, ctx) { if (rf & 1) {
1587
+ const _r60 = i0.ɵɵgetCurrentView();
1588
+ i0.ɵɵelementStart(0, "select", 191, 15);
1589
+ i0.ɵɵlistener("change", function MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_1_For_1_Conditional_6_Template_select_change_0_listener() { i0.ɵɵrestoreView(_r60); const boolEl_r61 = i0.ɵɵreference(1); const p_r56 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.testSetParam(p_r56.name, boolEl_r61.value)); });
1590
+ i0.ɵɵelementStart(2, "option", 207);
1795
1591
  i0.ɵɵtext(3, "false");
1796
1592
  i0.ɵɵelementEnd();
1797
- i0.ɵɵelementStart(4, "option", 254);
1593
+ i0.ɵɵelementStart(4, "option", 208);
1798
1594
  i0.ɵɵtext(5, "true");
1799
1595
  i0.ɵɵelementEnd()();
1800
1596
  } }
1801
- function MCPDashboardComponent_Conditional_75_Conditional_21_Conditional_1_For_1_Conditional_7_Template(rf, ctx) { if (rf & 1) {
1802
- const _r80 = i0.ɵɵgetCurrentView();
1803
- i0.ɵɵelementStart(0, "textarea", 255, 25);
1804
- i0.ɵɵlistener("input", function MCPDashboardComponent_Conditional_75_Conditional_21_Conditional_1_For_1_Conditional_7_Template_textarea_input_0_listener() { i0.ɵɵrestoreView(_r80); const jsonEl_r81 = i0.ɵɵreference(1); const p_r74 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.testSetParam(p_r74.name, jsonEl_r81.value)); });
1597
+ function MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_1_For_1_Conditional_7_Template(rf, ctx) { if (rf & 1) {
1598
+ const _r62 = i0.ɵɵgetCurrentView();
1599
+ i0.ɵɵelementStart(0, "textarea", 209, 16);
1600
+ i0.ɵɵlistener("input", function MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_1_For_1_Conditional_7_Template_textarea_input_0_listener() { i0.ɵɵrestoreView(_r62); const jsonEl_r63 = i0.ɵɵreference(1); const p_r56 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.testSetParam(p_r56.name, jsonEl_r63.value)); });
1805
1601
  i0.ɵɵelementEnd();
1806
1602
  } if (rf & 2) {
1807
- const p_r74 = i0.ɵɵnextContext().$implicit;
1808
- i0.ɵɵproperty("placeholder", "Enter JSON " + p_r74.type + "...");
1603
+ const p_r56 = i0.ɵɵnextContext().$implicit;
1604
+ i0.ɵɵproperty("placeholder", "Enter JSON " + p_r56.type + "...");
1809
1605
  } }
1810
- function MCPDashboardComponent_Conditional_75_Conditional_21_Conditional_1_For_1_Conditional_8_Template(rf, ctx) { if (rf & 1) {
1811
- const _r82 = i0.ɵɵgetCurrentView();
1812
- i0.ɵɵelementStart(0, "input", 256, 26);
1813
- i0.ɵɵlistener("input", function MCPDashboardComponent_Conditional_75_Conditional_21_Conditional_1_For_1_Conditional_8_Template_input_input_0_listener() { i0.ɵɵrestoreView(_r82); const strEl_r83 = i0.ɵɵreference(1); const p_r74 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.testSetParam(p_r74.name, strEl_r83.value)); });
1606
+ function MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_1_For_1_Conditional_8_Template(rf, ctx) { if (rf & 1) {
1607
+ const _r64 = i0.ɵɵgetCurrentView();
1608
+ i0.ɵɵelementStart(0, "input", 210, 17);
1609
+ i0.ɵɵlistener("input", function MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_1_For_1_Conditional_8_Template_input_input_0_listener() { i0.ɵɵrestoreView(_r64); const strEl_r65 = i0.ɵɵreference(1); const p_r56 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.testSetParam(p_r56.name, strEl_r65.value)); });
1814
1610
  i0.ɵɵelementEnd();
1815
1611
  } if (rf & 2) {
1816
- const p_r74 = i0.ɵɵnextContext().$implicit;
1817
- i0.ɵɵproperty("placeholder", p_r74.description || "Enter value...");
1612
+ const p_r56 = i0.ɵɵnextContext().$implicit;
1613
+ i0.ɵɵproperty("placeholder", p_r56.description || "Enter value...");
1818
1614
  } }
1819
- function MCPDashboardComponent_Conditional_75_Conditional_21_Conditional_1_For_1_Template(rf, ctx) { if (rf & 1) {
1820
- i0.ɵɵelementStart(0, "div", 218)(1, "label", 219);
1615
+ function MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_1_For_1_Template(rf, ctx) { if (rf & 1) {
1616
+ i0.ɵɵelementStart(0, "div", 167)(1, "label", 168);
1821
1617
  i0.ɵɵtext(2);
1822
- i0.ɵɵconditionalCreate(3, MCPDashboardComponent_Conditional_75_Conditional_21_Conditional_1_For_1_Conditional_3_Template, 2, 0, "span", 220);
1618
+ i0.ɵɵconditionalCreate(3, MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_1_For_1_Conditional_3_Template, 2, 0, "span", 169);
1823
1619
  i0.ɵɵelementEnd();
1824
- i0.ɵɵconditionalCreate(4, MCPDashboardComponent_Conditional_75_Conditional_21_Conditional_1_For_1_Conditional_4_Template, 2, 1, "p", 249);
1825
- i0.ɵɵconditionalCreate(5, MCPDashboardComponent_Conditional_75_Conditional_21_Conditional_1_For_1_Conditional_5_Template, 6, 0, "select", 250)(6, MCPDashboardComponent_Conditional_75_Conditional_21_Conditional_1_For_1_Conditional_6_Template, 6, 0, "select", 250)(7, MCPDashboardComponent_Conditional_75_Conditional_21_Conditional_1_For_1_Conditional_7_Template, 2, 1, "textarea", 251)(8, MCPDashboardComponent_Conditional_75_Conditional_21_Conditional_1_For_1_Conditional_8_Template, 2, 1, "input", 252);
1620
+ i0.ɵɵconditionalCreate(4, MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_1_For_1_Conditional_4_Template, 2, 1, "p", 203);
1621
+ i0.ɵɵconditionalCreate(5, MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_1_For_1_Conditional_5_Template, 6, 0, "select", 204)(6, MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_1_For_1_Conditional_6_Template, 6, 0, "select", 204)(7, MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_1_For_1_Conditional_7_Template, 2, 1, "textarea", 205)(8, MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_1_For_1_Conditional_8_Template, 2, 1, "input", 206);
1826
1622
  i0.ɵɵelementEnd();
1827
1623
  } if (rf & 2) {
1828
- const p_r74 = ctx.$implicit;
1624
+ const p_r56 = ctx.$implicit;
1829
1625
  i0.ɵɵadvance(2);
1830
- i0.ɵɵtextInterpolate1(" ", p_r74.name, " ");
1626
+ i0.ɵɵtextInterpolate1(" ", p_r56.name, " ");
1831
1627
  i0.ɵɵadvance();
1832
- i0.ɵɵconditional(p_r74.required ? 3 : -1);
1628
+ i0.ɵɵconditional(p_r56.required ? 3 : -1);
1833
1629
  i0.ɵɵadvance();
1834
- i0.ɵɵconditional(p_r74.description ? 4 : -1);
1630
+ i0.ɵɵconditional(p_r56.description ? 4 : -1);
1835
1631
  i0.ɵɵadvance();
1836
- i0.ɵɵconditional(p_r74.enumValues.length > 0 ? 5 : p_r74.type === "boolean" ? 6 : p_r74.type === "array" || p_r74.type === "object" ? 7 : 8);
1632
+ i0.ɵɵconditional(p_r56.enumValues.length > 0 ? 5 : p_r56.type === "boolean" ? 6 : p_r56.type === "array" || p_r56.type === "object" ? 7 : 8);
1837
1633
  } }
1838
- function MCPDashboardComponent_Conditional_75_Conditional_21_Conditional_1_Template(rf, ctx) { if (rf & 1) {
1839
- i0.ɵɵrepeaterCreate(0, MCPDashboardComponent_Conditional_75_Conditional_21_Conditional_1_For_1_Template, 9, 4, "div", 218, _forTrack4);
1634
+ function MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_1_Template(rf, ctx) { if (rf & 1) {
1635
+ i0.ɵɵrepeaterCreate(0, MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_1_For_1_Template, 9, 4, "div", 167, _forTrack3);
1840
1636
  } if (rf & 2) {
1841
- const ctx_r2 = i0.ɵɵnextContext(3);
1842
- i0.ɵɵrepeater(ctx_r2.TestParamConfigs);
1637
+ const ctx_r1 = i0.ɵɵnextContext(3);
1638
+ i0.ɵɵrepeater(ctx_r1.TestParamConfigs);
1843
1639
  } }
1844
- function MCPDashboardComponent_Conditional_75_Conditional_21_Template(rf, ctx) { if (rf & 1) {
1845
- i0.ɵɵconditionalCreate(0, MCPDashboardComponent_Conditional_75_Conditional_21_Conditional_0_Template, 4, 0, "div", 247)(1, MCPDashboardComponent_Conditional_75_Conditional_21_Conditional_1_Template, 2, 0);
1640
+ function MCPDashboardComponent_Conditional_20_Conditional_21_Template(rf, ctx) { if (rf & 1) {
1641
+ i0.ɵɵconditionalCreate(0, MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_0_Template, 4, 0, "div", 201)(1, MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_1_Template, 2, 0);
1846
1642
  } if (rf & 2) {
1847
- const ctx_r2 = i0.ɵɵnextContext(2);
1848
- i0.ɵɵconditional(ctx_r2.TestParamConfigs.length === 0 ? 0 : 1);
1643
+ const ctx_r1 = i0.ɵɵnextContext(2);
1644
+ i0.ɵɵconditional(ctx_r1.TestParamConfigs.length === 0 ? 0 : 1);
1849
1645
  } }
1850
- function MCPDashboardComponent_Conditional_75_Conditional_22_Conditional_0_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1851
- i0.ɵɵelementStart(0, "span", 259);
1646
+ function MCPDashboardComponent_Conditional_20_Conditional_22_Conditional_0_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1647
+ i0.ɵɵelementStart(0, "span", 213);
1852
1648
  i0.ɵɵtext(1);
1853
1649
  i0.ɵɵelementEnd();
1854
1650
  } if (rf & 2) {
1855
- const ctx_r2 = i0.ɵɵnextContext(4);
1651
+ const ctx_r1 = i0.ɵɵnextContext(4);
1856
1652
  i0.ɵɵadvance();
1857
- i0.ɵɵtextInterpolate1("", ctx_r2.TestExecutionResult == null ? null : ctx_r2.TestExecutionResult.DurationMs, "ms");
1653
+ i0.ɵɵtextInterpolate1("", ctx_r1.TestExecutionResult == null ? null : ctx_r1.TestExecutionResult.DurationMs, "ms");
1858
1654
  } }
1859
- function MCPDashboardComponent_Conditional_75_Conditional_22_Conditional_0_Template(rf, ctx) { if (rf & 1) {
1860
- i0.ɵɵelementStart(0, "div", 257);
1861
- i0.ɵɵelement(1, "i", 141);
1655
+ function MCPDashboardComponent_Conditional_20_Conditional_22_Conditional_0_Template(rf, ctx) { if (rf & 1) {
1656
+ i0.ɵɵelementStart(0, "div", 211);
1657
+ i0.ɵɵelement(1, "i", 92);
1862
1658
  i0.ɵɵtext(2, " Execution Successful ");
1863
- i0.ɵɵconditionalCreate(3, MCPDashboardComponent_Conditional_75_Conditional_22_Conditional_0_Conditional_3_Template, 2, 1, "span", 259);
1659
+ i0.ɵɵconditionalCreate(3, MCPDashboardComponent_Conditional_20_Conditional_22_Conditional_0_Conditional_3_Template, 2, 1, "span", 213);
1864
1660
  i0.ɵɵelementEnd();
1865
1661
  } if (rf & 2) {
1866
- const ctx_r2 = i0.ɵɵnextContext(3);
1662
+ const ctx_r1 = i0.ɵɵnextContext(3);
1867
1663
  i0.ɵɵadvance(3);
1868
- i0.ɵɵconditional((ctx_r2.TestExecutionResult == null ? null : ctx_r2.TestExecutionResult.DurationMs) ? 3 : -1);
1664
+ i0.ɵɵconditional((ctx_r1.TestExecutionResult == null ? null : ctx_r1.TestExecutionResult.DurationMs) ? 3 : -1);
1869
1665
  } }
1870
- function MCPDashboardComponent_Conditional_75_Conditional_22_Conditional_1_Template(rf, ctx) { if (rf & 1) {
1871
- i0.ɵɵelementStart(0, "div", 258);
1872
- i0.ɵɵelement(1, "i", 204);
1666
+ function MCPDashboardComponent_Conditional_20_Conditional_22_Conditional_1_Template(rf, ctx) { if (rf & 1) {
1667
+ i0.ɵɵelementStart(0, "div", 212);
1668
+ i0.ɵɵelement(1, "i", 153);
1873
1669
  i0.ɵɵtext(2, " Execution Failed ");
1874
1670
  i0.ɵɵelementEnd();
1875
1671
  } }
1876
- function MCPDashboardComponent_Conditional_75_Conditional_22_Conditional_2_Template(rf, ctx) { if (rf & 1) {
1877
- i0.ɵɵelementStart(0, "div", 218)(1, "label", 260);
1672
+ function MCPDashboardComponent_Conditional_20_Conditional_22_Conditional_2_Template(rf, ctx) { if (rf & 1) {
1673
+ i0.ɵɵelementStart(0, "div", 167)(1, "label", 214);
1878
1674
  i0.ɵɵtext(2, "Error");
1879
1675
  i0.ɵɵelementEnd();
1880
- i0.ɵɵelementStart(3, "pre", 261);
1676
+ i0.ɵɵelementStart(3, "pre", 215);
1881
1677
  i0.ɵɵtext(4);
1882
1678
  i0.ɵɵelementEnd()();
1883
1679
  } if (rf & 2) {
1884
- const ctx_r2 = i0.ɵɵnextContext(3);
1680
+ const ctx_r1 = i0.ɵɵnextContext(3);
1885
1681
  i0.ɵɵadvance(4);
1886
- i0.ɵɵtextInterpolate(ctx_r2.TestExecutionResult == null ? null : ctx_r2.TestExecutionResult.ErrorMessage);
1682
+ i0.ɵɵtextInterpolate(ctx_r1.TestExecutionResult == null ? null : ctx_r1.TestExecutionResult.ErrorMessage);
1887
1683
  } }
1888
- function MCPDashboardComponent_Conditional_75_Conditional_22_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1889
- i0.ɵɵelementStart(0, "div")(1, "label", 260);
1684
+ function MCPDashboardComponent_Conditional_20_Conditional_22_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1685
+ i0.ɵɵelementStart(0, "div")(1, "label", 214);
1890
1686
  i0.ɵɵtext(2, "Result");
1891
1687
  i0.ɵɵelementEnd();
1892
- i0.ɵɵelementStart(3, "pre", 262);
1688
+ i0.ɵɵelementStart(3, "pre", 216);
1893
1689
  i0.ɵɵtext(4);
1894
1690
  i0.ɵɵelementEnd()();
1895
1691
  } if (rf & 2) {
1896
- const ctx_r2 = i0.ɵɵnextContext(3);
1692
+ const ctx_r1 = i0.ɵɵnextContext(3);
1897
1693
  i0.ɵɵadvance(4);
1898
- i0.ɵɵtextInterpolate(ctx_r2.formatTestResult(ctx_r2.TestExecutionResult == null ? null : ctx_r2.TestExecutionResult.Result));
1694
+ i0.ɵɵtextInterpolate(ctx_r1.formatTestResult(ctx_r1.TestExecutionResult == null ? null : ctx_r1.TestExecutionResult.Result));
1899
1695
  } }
1900
- function MCPDashboardComponent_Conditional_75_Conditional_22_Template(rf, ctx) { if (rf & 1) {
1901
- i0.ɵɵconditionalCreate(0, MCPDashboardComponent_Conditional_75_Conditional_22_Conditional_0_Template, 4, 1, "div", 257)(1, MCPDashboardComponent_Conditional_75_Conditional_22_Conditional_1_Template, 3, 0, "div", 258);
1902
- i0.ɵɵconditionalCreate(2, MCPDashboardComponent_Conditional_75_Conditional_22_Conditional_2_Template, 5, 1, "div", 218);
1903
- i0.ɵɵconditionalCreate(3, MCPDashboardComponent_Conditional_75_Conditional_22_Conditional_3_Template, 5, 1, "div");
1696
+ function MCPDashboardComponent_Conditional_20_Conditional_22_Template(rf, ctx) { if (rf & 1) {
1697
+ i0.ɵɵconditionalCreate(0, MCPDashboardComponent_Conditional_20_Conditional_22_Conditional_0_Template, 4, 1, "div", 211)(1, MCPDashboardComponent_Conditional_20_Conditional_22_Conditional_1_Template, 3, 0, "div", 212);
1698
+ i0.ɵɵconditionalCreate(2, MCPDashboardComponent_Conditional_20_Conditional_22_Conditional_2_Template, 5, 1, "div", 167);
1699
+ i0.ɵɵconditionalCreate(3, MCPDashboardComponent_Conditional_20_Conditional_22_Conditional_3_Template, 5, 1, "div");
1904
1700
  } if (rf & 2) {
1905
- const ctx_r2 = i0.ɵɵnextContext(2);
1906
- i0.ɵɵconditional((ctx_r2.TestExecutionResult == null ? null : ctx_r2.TestExecutionResult.Success) ? 0 : 1);
1701
+ const ctx_r1 = i0.ɵɵnextContext(2);
1702
+ i0.ɵɵconditional((ctx_r1.TestExecutionResult == null ? null : ctx_r1.TestExecutionResult.Success) ? 0 : 1);
1907
1703
  i0.ɵɵadvance(2);
1908
- i0.ɵɵconditional((ctx_r2.TestExecutionResult == null ? null : ctx_r2.TestExecutionResult.ErrorMessage) ? 2 : -1);
1704
+ i0.ɵɵconditional((ctx_r1.TestExecutionResult == null ? null : ctx_r1.TestExecutionResult.ErrorMessage) ? 2 : -1);
1909
1705
  i0.ɵɵadvance();
1910
- i0.ɵɵconditional((ctx_r2.TestExecutionResult == null ? null : ctx_r2.TestExecutionResult.Result) ? 3 : -1);
1706
+ i0.ɵɵconditional((ctx_r1.TestExecutionResult == null ? null : ctx_r1.TestExecutionResult.Result) ? 3 : -1);
1911
1707
  } }
1912
- function MCPDashboardComponent_Conditional_75_Conditional_24_Template(rf, ctx) { if (rf & 1) {
1913
- const _r84 = i0.ɵɵgetCurrentView();
1914
- i0.ɵɵelementStart(0, "button", 224);
1915
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_75_Conditional_24_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r84); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.testProceedToConfig()); });
1708
+ function MCPDashboardComponent_Conditional_20_Conditional_24_Template(rf, ctx) { if (rf & 1) {
1709
+ const _r66 = i0.ɵɵgetCurrentView();
1710
+ i0.ɵɵelementStart(0, "button", 177);
1711
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_20_Conditional_24_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r66); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.testProceedToConfig()); });
1916
1712
  i0.ɵɵtext(1, "Next ");
1917
- i0.ɵɵelement(2, "i", 263);
1713
+ i0.ɵɵelement(2, "i", 217);
1918
1714
  i0.ɵɵelementEnd();
1919
- i0.ɵɵelementStart(3, "button", 225);
1920
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_75_Conditional_24_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r84); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.testCloseDialog()); });
1715
+ i0.ɵɵelementStart(3, "button", 178);
1716
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_20_Conditional_24_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r66); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.testCloseDialog()); });
1921
1717
  i0.ɵɵtext(4, "Cancel");
1922
1718
  i0.ɵɵelementEnd();
1923
1719
  } if (rf & 2) {
1924
- const ctx_r2 = i0.ɵɵnextContext(2);
1925
- i0.ɵɵproperty("disabled", !ctx_r2.TestCanProceed);
1720
+ const ctx_r1 = i0.ɵɵnextContext(2);
1721
+ i0.ɵɵproperty("disabled", !ctx_r1.TestCanProceed);
1926
1722
  } }
1927
- function MCPDashboardComponent_Conditional_75_Conditional_25_Conditional_1_Template(rf, ctx) { if (rf & 1) {
1928
- i0.ɵɵelement(0, "i", 205);
1723
+ function MCPDashboardComponent_Conditional_20_Conditional_25_Conditional_1_Template(rf, ctx) { if (rf & 1) {
1724
+ i0.ɵɵelement(0, "i", 154);
1929
1725
  i0.ɵɵtext(1, " Executing... ");
1930
1726
  } }
1931
- function MCPDashboardComponent_Conditional_75_Conditional_25_Conditional_2_Template(rf, ctx) { if (rf & 1) {
1932
- i0.ɵɵelement(0, "i", 75);
1727
+ function MCPDashboardComponent_Conditional_20_Conditional_25_Conditional_2_Template(rf, ctx) { if (rf & 1) {
1728
+ i0.ɵɵelement(0, "i", 39);
1933
1729
  i0.ɵɵtext(1, " Execute ");
1934
1730
  } }
1935
- function MCPDashboardComponent_Conditional_75_Conditional_25_Template(rf, ctx) { if (rf & 1) {
1936
- const _r85 = i0.ɵɵgetCurrentView();
1937
- i0.ɵɵelementStart(0, "button", 224);
1938
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_75_Conditional_25_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r85); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.testExecuteTool()); });
1939
- i0.ɵɵconditionalCreate(1, MCPDashboardComponent_Conditional_75_Conditional_25_Conditional_1_Template, 2, 0)(2, MCPDashboardComponent_Conditional_75_Conditional_25_Conditional_2_Template, 2, 0);
1940
- i0.ɵɵelementEnd();
1941
- i0.ɵɵelementStart(3, "button", 225);
1942
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_75_Conditional_25_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r85); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.testGoBack()); });
1943
- i0.ɵɵelement(4, "i", 264);
1731
+ function MCPDashboardComponent_Conditional_20_Conditional_25_Template(rf, ctx) { if (rf & 1) {
1732
+ const _r67 = i0.ɵɵgetCurrentView();
1733
+ i0.ɵɵelementStart(0, "button", 177);
1734
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_20_Conditional_25_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r67); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.testExecuteTool()); });
1735
+ i0.ɵɵconditionalCreate(1, MCPDashboardComponent_Conditional_20_Conditional_25_Conditional_1_Template, 2, 0)(2, MCPDashboardComponent_Conditional_20_Conditional_25_Conditional_2_Template, 2, 0);
1736
+ i0.ɵɵelementEnd();
1737
+ i0.ɵɵelementStart(3, "button", 178);
1738
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_20_Conditional_25_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r67); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.testGoBack()); });
1739
+ i0.ɵɵelement(4, "i", 218);
1944
1740
  i0.ɵɵtext(5, " Back");
1945
1741
  i0.ɵɵelementEnd();
1946
1742
  } if (rf & 2) {
1947
- const ctx_r2 = i0.ɵɵnextContext(2);
1948
- i0.ɵɵproperty("disabled", !ctx_r2.TestIsValid || ctx_r2.TestIsExecuting);
1743
+ const ctx_r1 = i0.ɵɵnextContext(2);
1744
+ i0.ɵɵproperty("disabled", !ctx_r1.TestIsValid || ctx_r1.TestIsExecuting);
1949
1745
  i0.ɵɵadvance();
1950
- i0.ɵɵconditional(ctx_r2.TestIsExecuting ? 1 : 2);
1746
+ i0.ɵɵconditional(ctx_r1.TestIsExecuting ? 1 : 2);
1951
1747
  } }
1952
- function MCPDashboardComponent_Conditional_75_Conditional_26_Template(rf, ctx) { if (rf & 1) {
1953
- const _r86 = i0.ɵɵgetCurrentView();
1954
- i0.ɵɵelementStart(0, "button", 68);
1955
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_75_Conditional_26_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r86); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.testRunAgain()); });
1956
- i0.ɵɵelement(1, "i", 265);
1748
+ function MCPDashboardComponent_Conditional_20_Conditional_26_Template(rf, ctx) { if (rf & 1) {
1749
+ const _r68 = i0.ɵɵgetCurrentView();
1750
+ i0.ɵɵelementStart(0, "button", 219);
1751
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_20_Conditional_26_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r68); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.testRunAgain()); });
1752
+ i0.ɵɵelement(1, "i", 220);
1957
1753
  i0.ɵɵtext(2, " Run Again");
1958
1754
  i0.ɵɵelementEnd();
1959
- i0.ɵɵelementStart(3, "button", 225);
1960
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_75_Conditional_26_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r86); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.testGoBack()); });
1755
+ i0.ɵɵelementStart(3, "button", 178);
1756
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_20_Conditional_26_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r68); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.testGoBack()); });
1961
1757
  i0.ɵɵtext(4, "Edit Params");
1962
1758
  i0.ɵɵelementEnd();
1963
- i0.ɵɵelementStart(5, "button", 225);
1964
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_75_Conditional_26_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r86); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.testCloseDialog()); });
1759
+ i0.ɵɵelementStart(5, "button", 178);
1760
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_20_Conditional_26_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r68); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.testCloseDialog()); });
1965
1761
  i0.ɵɵtext(6, "Close");
1966
1762
  i0.ɵɵelementEnd();
1967
1763
  } }
1968
- function MCPDashboardComponent_Conditional_75_Template(rf, ctx) { if (rf & 1) {
1969
- const _r65 = i0.ɵɵgetCurrentView();
1970
- i0.ɵɵelementStart(0, "div", 211);
1971
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_75_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r65); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.testCloseDialog()); });
1972
- i0.ɵɵelementStart(1, "div", 232);
1973
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_75_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r65); return i0.ɵɵresetView($event.stopPropagation()); });
1974
- i0.ɵɵelementStart(2, "div", 213)(3, "h2", 214);
1764
+ function MCPDashboardComponent_Conditional_20_Template(rf, ctx) { if (rf & 1) {
1765
+ const _r47 = i0.ɵɵgetCurrentView();
1766
+ i0.ɵɵelementStart(0, "div", 160);
1767
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_20_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r47); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.testCloseDialog()); });
1768
+ i0.ɵɵelementStart(1, "div", 186);
1769
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_20_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r47); return i0.ɵɵresetView($event.stopPropagation()); });
1770
+ i0.ɵɵelementStart(2, "div", 162)(3, "h2", 163);
1975
1771
  i0.ɵɵtext(4, " Test MCP Tool ");
1976
- i0.ɵɵconditionalCreate(5, MCPDashboardComponent_Conditional_75_Conditional_5_Template, 2, 1, "span", 233);
1772
+ i0.ɵɵconditionalCreate(5, MCPDashboardComponent_Conditional_20_Conditional_5_Template, 2, 1, "span", 187);
1977
1773
  i0.ɵɵelementEnd();
1978
- i0.ɵɵelementStart(6, "button", 215);
1979
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_75_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r65); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.testCloseDialog()); });
1980
- i0.ɵɵelement(7, "i", 96);
1774
+ i0.ɵɵelementStart(6, "button", 164);
1775
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_20_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r47); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.testCloseDialog()); });
1776
+ i0.ɵɵelement(7, "i", 43);
1981
1777
  i0.ɵɵelementEnd()();
1982
- i0.ɵɵelementStart(8, "div", 234)(9, "span", 235);
1778
+ i0.ɵɵelementStart(8, "div", 188)(9, "span", 189);
1983
1779
  i0.ɵɵtext(10, "1. Select");
1984
1780
  i0.ɵɵelementEnd();
1985
- i0.ɵɵelementStart(11, "span", 236);
1781
+ i0.ɵɵelementStart(11, "span", 190);
1986
1782
  i0.ɵɵtext(12, "\u203A");
1987
1783
  i0.ɵɵelementEnd();
1988
- i0.ɵɵelementStart(13, "span", 235);
1784
+ i0.ɵɵelementStart(13, "span", 189);
1989
1785
  i0.ɵɵtext(14, "2. Configure");
1990
1786
  i0.ɵɵelementEnd();
1991
- i0.ɵɵelementStart(15, "span", 236);
1787
+ i0.ɵɵelementStart(15, "span", 190);
1992
1788
  i0.ɵɵtext(16, "\u203A");
1993
1789
  i0.ɵɵelementEnd();
1994
- i0.ɵɵelementStart(17, "span", 235);
1790
+ i0.ɵɵelementStart(17, "span", 189);
1995
1791
  i0.ɵɵtext(18, "3. Results");
1996
1792
  i0.ɵɵelementEnd()();
1997
- i0.ɵɵelementStart(19, "div", 216);
1998
- i0.ɵɵconditionalCreate(20, MCPDashboardComponent_Conditional_75_Conditional_20_Template, 33, 4)(21, MCPDashboardComponent_Conditional_75_Conditional_21_Template, 2, 1)(22, MCPDashboardComponent_Conditional_75_Conditional_22_Template, 4, 3);
1793
+ i0.ɵɵelementStart(19, "div", 165);
1794
+ i0.ɵɵconditionalCreate(20, MCPDashboardComponent_Conditional_20_Conditional_20_Template, 33, 4)(21, MCPDashboardComponent_Conditional_20_Conditional_21_Template, 2, 1)(22, MCPDashboardComponent_Conditional_20_Conditional_22_Template, 4, 3);
1999
1795
  i0.ɵɵelementEnd();
2000
- i0.ɵɵelementStart(23, "div", 223);
2001
- i0.ɵɵconditionalCreate(24, MCPDashboardComponent_Conditional_75_Conditional_24_Template, 5, 1)(25, MCPDashboardComponent_Conditional_75_Conditional_25_Template, 6, 2)(26, MCPDashboardComponent_Conditional_75_Conditional_26_Template, 7, 0);
1796
+ i0.ɵɵelementStart(23, "div", 176);
1797
+ i0.ɵɵconditionalCreate(24, MCPDashboardComponent_Conditional_20_Conditional_24_Template, 5, 1)(25, MCPDashboardComponent_Conditional_20_Conditional_25_Template, 6, 2)(26, MCPDashboardComponent_Conditional_20_Conditional_26_Template, 7, 0);
2002
1798
  i0.ɵɵelementEnd()()();
2003
1799
  } if (rf & 2) {
2004
- const ctx_r2 = i0.ɵɵnextContext();
1800
+ const ctx_r1 = i0.ɵɵnextContext();
2005
1801
  i0.ɵɵadvance(5);
2006
- i0.ɵɵconditional(ctx_r2.TestStep !== "select" ? 5 : -1);
1802
+ i0.ɵɵconditional(ctx_r1.TestStep !== "select" ? 5 : -1);
2007
1803
  i0.ɵɵadvance(4);
2008
- i0.ɵɵstyleProp("color", ctx_r2.TestStep === "select" ? "var(--mj-brand-primary,#264FAF)" : "var(--mj-text-muted,#888)");
1804
+ i0.ɵɵstyleProp("color", ctx_r1.TestStep === "select" ? "var(--mj-brand-primary,#264FAF)" : "var(--mj-text-muted,#888)");
2009
1805
  i0.ɵɵadvance(4);
2010
- i0.ɵɵstyleProp("color", ctx_r2.TestStep === "configure" ? "var(--mj-brand-primary,#264FAF)" : "var(--mj-text-muted,#888)");
1806
+ i0.ɵɵstyleProp("color", ctx_r1.TestStep === "configure" ? "var(--mj-brand-primary,#264FAF)" : "var(--mj-text-muted,#888)");
2011
1807
  i0.ɵɵadvance(4);
2012
- i0.ɵɵstyleProp("color", ctx_r2.TestStep === "results" ? "var(--mj-brand-primary,#264FAF)" : "var(--mj-text-muted,#888)");
1808
+ i0.ɵɵstyleProp("color", ctx_r1.TestStep === "results" ? "var(--mj-brand-primary,#264FAF)" : "var(--mj-text-muted,#888)");
2013
1809
  i0.ɵɵadvance(3);
2014
- i0.ɵɵconditional(ctx_r2.TestStep === "select" ? 20 : ctx_r2.TestStep === "configure" ? 21 : 22);
1810
+ i0.ɵɵconditional(ctx_r1.TestStep === "select" ? 20 : ctx_r1.TestStep === "configure" ? 21 : 22);
2015
1811
  i0.ɵɵadvance(4);
2016
- i0.ɵɵconditional(ctx_r2.TestStep === "select" ? 24 : ctx_r2.TestStep === "configure" ? 25 : 26);
1812
+ i0.ɵɵconditional(ctx_r1.TestStep === "select" ? 24 : ctx_r1.TestStep === "configure" ? 25 : 26);
2017
1813
  } }
2018
- function MCPDashboardComponent_Conditional_76_Conditional_14_Template(rf, ctx) { if (rf & 1) {
2019
- i0.ɵɵelementStart(0, "span", 272);
1814
+ function MCPDashboardComponent_Conditional_21_Conditional_14_Template(rf, ctx) { if (rf & 1) {
1815
+ i0.ɵɵelementStart(0, "span", 227);
2020
1816
  i0.ɵɵtext(1, "\u00B7");
2021
1817
  i0.ɵɵelementEnd();
2022
1818
  i0.ɵɵelementStart(2, "span");
2023
1819
  i0.ɵɵtext(3);
2024
1820
  i0.ɵɵelementEnd();
2025
1821
  } if (rf & 2) {
2026
- const ctx_r2 = i0.ɵɵnextContext(2);
1822
+ const ctx_r1 = i0.ɵɵnextContext(2);
2027
1823
  i0.ɵɵadvance(3);
2028
- i0.ɵɵtextInterpolate(ctx_r2.formatDuration(ctx_r2.SelectedLog.DurationMs));
1824
+ i0.ɵɵtextInterpolate(ctx_r1.formatDuration(ctx_r1.SelectedLog.DurationMs));
2029
1825
  } }
2030
- function MCPDashboardComponent_Conditional_76_Conditional_23_Template(rf, ctx) { if (rf & 1) {
2031
- i0.ɵɵelementStart(0, "div", 278);
1826
+ function MCPDashboardComponent_Conditional_21_Conditional_23_Template(rf, ctx) { if (rf & 1) {
1827
+ i0.ɵɵelementStart(0, "div", 233);
2032
1828
  i0.ɵɵtext(1);
2033
1829
  i0.ɵɵelementEnd();
2034
1830
  } if (rf & 2) {
2035
- const ctx_r2 = i0.ɵɵnextContext(2);
1831
+ const ctx_r1 = i0.ɵɵnextContext(2);
2036
1832
  i0.ɵɵadvance();
2037
- i0.ɵɵtextInterpolate(ctx_r2.SelectedLog.ServerName);
1833
+ i0.ɵɵtextInterpolate(ctx_r1.SelectedLog.ServerName);
2038
1834
  } }
2039
- function MCPDashboardComponent_Conditional_76_Conditional_24_Template(rf, ctx) { if (rf & 1) {
2040
- i0.ɵɵelementStart(0, "div", 218)(1, "label", 280);
1835
+ function MCPDashboardComponent_Conditional_21_Conditional_24_Template(rf, ctx) { if (rf & 1) {
1836
+ i0.ɵɵelementStart(0, "div", 167)(1, "label", 236);
2041
1837
  i0.ɵɵtext(2, "Input Arguments");
2042
1838
  i0.ɵɵelementEnd();
2043
- i0.ɵɵelementStart(3, "pre", 281);
1839
+ i0.ɵɵelementStart(3, "pre", 237);
2044
1840
  i0.ɵɵtext(4);
2045
1841
  i0.ɵɵelementEnd()();
2046
1842
  } if (rf & 2) {
2047
- const ctx_r2 = i0.ɵɵnextContext(2);
1843
+ const ctx_r1 = i0.ɵɵnextContext(2);
2048
1844
  i0.ɵɵadvance(4);
2049
- i0.ɵɵtextInterpolate(ctx_r2.formatLogJson(ctx_r2.SelectedLog.InputArgs));
1845
+ i0.ɵɵtextInterpolate(ctx_r1.formatLogJson(ctx_r1.SelectedLog.InputArgs));
2050
1846
  } }
2051
- function MCPDashboardComponent_Conditional_76_Conditional_25_Template(rf, ctx) { if (rf & 1) {
2052
- i0.ɵɵelementStart(0, "div", 218)(1, "label", 280);
1847
+ function MCPDashboardComponent_Conditional_21_Conditional_25_Template(rf, ctx) { if (rf & 1) {
1848
+ i0.ɵɵelementStart(0, "div", 167)(1, "label", 236);
2053
1849
  i0.ɵɵtext(2, "Result");
2054
1850
  i0.ɵɵelementEnd();
2055
- i0.ɵɵelementStart(3, "pre", 282);
1851
+ i0.ɵɵelementStart(3, "pre", 238);
2056
1852
  i0.ɵɵtext(4);
2057
1853
  i0.ɵɵelementEnd()();
2058
1854
  } if (rf & 2) {
2059
- const ctx_r2 = i0.ɵɵnextContext(2);
1855
+ const ctx_r1 = i0.ɵɵnextContext(2);
2060
1856
  i0.ɵɵadvance(4);
2061
- i0.ɵɵtextInterpolate(ctx_r2.formatLogJson(ctx_r2.SelectedLog.Result));
1857
+ i0.ɵɵtextInterpolate(ctx_r1.formatLogJson(ctx_r1.SelectedLog.Result));
2062
1858
  } }
2063
- function MCPDashboardComponent_Conditional_76_Conditional_26_Template(rf, ctx) { if (rf & 1) {
2064
- i0.ɵɵelementStart(0, "div", 218)(1, "label", 283);
1859
+ function MCPDashboardComponent_Conditional_21_Conditional_26_Template(rf, ctx) { if (rf & 1) {
1860
+ i0.ɵɵelementStart(0, "div", 167)(1, "label", 239);
2065
1861
  i0.ɵɵtext(2, "Error");
2066
1862
  i0.ɵɵelementEnd();
2067
- i0.ɵɵelementStart(3, "pre", 284);
1863
+ i0.ɵɵelementStart(3, "pre", 240);
2068
1864
  i0.ɵɵtext(4);
2069
1865
  i0.ɵɵelementEnd()();
2070
1866
  } if (rf & 2) {
2071
- const ctx_r2 = i0.ɵɵnextContext(2);
1867
+ const ctx_r1 = i0.ɵɵnextContext(2);
2072
1868
  i0.ɵɵadvance(4);
2073
- i0.ɵɵtextInterpolate(ctx_r2.SelectedLog.ErrorMessage);
1869
+ i0.ɵɵtextInterpolate(ctx_r1.SelectedLog.ErrorMessage);
2074
1870
  } }
2075
- function MCPDashboardComponent_Conditional_76_Conditional_28_Template(rf, ctx) { if (rf & 1) {
2076
- const _r88 = i0.ɵɵgetCurrentView();
2077
- i0.ɵɵelementStart(0, "button", 68);
2078
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_76_Conditional_28_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r88); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.onRunAgainFromLog({ toolId: ctx_r2.SelectedLog.ToolID, connectionId: ctx_r2.SelectedLog.ConnectionID })); });
2079
- i0.ɵɵelement(1, "i", 265);
1871
+ function MCPDashboardComponent_Conditional_21_Conditional_28_Template(rf, ctx) { if (rf & 1) {
1872
+ const _r70 = i0.ɵɵgetCurrentView();
1873
+ i0.ɵɵelementStart(0, "button", 219);
1874
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_21_Conditional_28_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r70); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onRunAgainFromLog({ toolId: ctx_r1.SelectedLog.ToolID, connectionId: ctx_r1.SelectedLog.ConnectionID })); });
1875
+ i0.ɵɵelement(1, "i", 220);
2080
1876
  i0.ɵɵtext(2, " Run Again");
2081
1877
  i0.ɵɵelementEnd();
2082
1878
  } }
2083
- function MCPDashboardComponent_Conditional_76_Template(rf, ctx) { if (rf & 1) {
2084
- const _r87 = i0.ɵɵgetCurrentView();
2085
- i0.ɵɵelementStart(0, "div", 67)(1, "div", 266);
2086
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_76_Template_div_click_1_listener() { i0.ɵɵrestoreView(_r87); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onLogDetailClose()); });
1879
+ function MCPDashboardComponent_Conditional_21_Template(rf, ctx) { if (rf & 1) {
1880
+ const _r69 = i0.ɵɵgetCurrentView();
1881
+ i0.ɵɵelementStart(0, "div", 33)(1, "div", 221);
1882
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_21_Template_div_click_1_listener() { i0.ɵɵrestoreView(_r69); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onLogDetailClose()); });
2087
1883
  i0.ɵɵelementEnd();
2088
- i0.ɵɵelementStart(2, "div", 267)(3, "div", 268)(4, "div")(5, "h3", 269);
1884
+ i0.ɵɵelementStart(2, "div", 222)(3, "div", 223)(4, "div")(5, "h3", 224);
2089
1885
  i0.ɵɵtext(6);
2090
1886
  i0.ɵɵelementEnd();
2091
- i0.ɵɵelementStart(7, "div", 270)(8, "span", 271);
1887
+ i0.ɵɵelementStart(7, "div", 225)(8, "span", 226);
2092
1888
  i0.ɵɵtext(9);
2093
1889
  i0.ɵɵelementEnd();
2094
- i0.ɵɵelementStart(10, "span", 272);
1890
+ i0.ɵɵelementStart(10, "span", 227);
2095
1891
  i0.ɵɵtext(11, "\u00B7");
2096
1892
  i0.ɵɵelementEnd();
2097
1893
  i0.ɵɵelementStart(12, "span");
2098
1894
  i0.ɵɵtext(13);
2099
1895
  i0.ɵɵelementEnd();
2100
- i0.ɵɵconditionalCreate(14, MCPDashboardComponent_Conditional_76_Conditional_14_Template, 4, 1);
1896
+ i0.ɵɵconditionalCreate(14, MCPDashboardComponent_Conditional_21_Conditional_14_Template, 4, 1);
2101
1897
  i0.ɵɵelementEnd()();
2102
- i0.ɵɵelementStart(15, "button", 273);
2103
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_76_Template_button_click_15_listener() { i0.ɵɵrestoreView(_r87); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onLogDetailClose()); });
2104
- i0.ɵɵelement(16, "i", 274);
1898
+ i0.ɵɵelementStart(15, "button", 228);
1899
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_21_Template_button_click_15_listener() { i0.ɵɵrestoreView(_r69); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onLogDetailClose()); });
1900
+ i0.ɵɵelement(16, "i", 229);
2105
1901
  i0.ɵɵelementEnd()();
2106
- i0.ɵɵelementStart(17, "div", 275)(18, "div", 218)(19, "div", 276);
1902
+ i0.ɵɵelementStart(17, "div", 230)(18, "div", 167)(19, "div", 231);
2107
1903
  i0.ɵɵtext(20, "Connection");
2108
1904
  i0.ɵɵelementEnd();
2109
- i0.ɵɵelementStart(21, "div", 277);
1905
+ i0.ɵɵelementStart(21, "div", 232);
2110
1906
  i0.ɵɵtext(22);
2111
1907
  i0.ɵɵelementEnd();
2112
- i0.ɵɵconditionalCreate(23, MCPDashboardComponent_Conditional_76_Conditional_23_Template, 2, 1, "div", 278);
1908
+ i0.ɵɵconditionalCreate(23, MCPDashboardComponent_Conditional_21_Conditional_23_Template, 2, 1, "div", 233);
2113
1909
  i0.ɵɵelementEnd();
2114
- i0.ɵɵconditionalCreate(24, MCPDashboardComponent_Conditional_76_Conditional_24_Template, 5, 1, "div", 218);
2115
- i0.ɵɵconditionalCreate(25, MCPDashboardComponent_Conditional_76_Conditional_25_Template, 5, 1, "div", 218);
2116
- i0.ɵɵconditionalCreate(26, MCPDashboardComponent_Conditional_76_Conditional_26_Template, 5, 1, "div", 218);
1910
+ i0.ɵɵconditionalCreate(24, MCPDashboardComponent_Conditional_21_Conditional_24_Template, 5, 1, "div", 167);
1911
+ i0.ɵɵconditionalCreate(25, MCPDashboardComponent_Conditional_21_Conditional_25_Template, 5, 1, "div", 167);
1912
+ i0.ɵɵconditionalCreate(26, MCPDashboardComponent_Conditional_21_Conditional_26_Template, 5, 1, "div", 167);
2117
1913
  i0.ɵɵelementEnd();
2118
- i0.ɵɵelementStart(27, "div", 279);
2119
- i0.ɵɵconditionalCreate(28, MCPDashboardComponent_Conditional_76_Conditional_28_Template, 3, 0, "button", 44);
2120
- i0.ɵɵelementStart(29, "button", 225);
2121
- i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_76_Template_button_click_29_listener() { i0.ɵɵrestoreView(_r87); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onLogDetailClose()); });
1914
+ i0.ɵɵelementStart(27, "div", 234);
1915
+ i0.ɵɵconditionalCreate(28, MCPDashboardComponent_Conditional_21_Conditional_28_Template, 3, 0, "button", 235);
1916
+ i0.ɵɵelementStart(29, "button", 178);
1917
+ i0.ɵɵlistener("click", function MCPDashboardComponent_Conditional_21_Template_button_click_29_listener() { i0.ɵɵrestoreView(_r69); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onLogDetailClose()); });
2122
1918
  i0.ɵɵtext(30, "Close");
2123
1919
  i0.ɵɵelementEnd()()()();
2124
1920
  } if (rf & 2) {
2125
- const ctx_r2 = i0.ɵɵnextContext();
1921
+ const ctx_r1 = i0.ɵɵnextContext();
2126
1922
  i0.ɵɵadvance(6);
2127
- i0.ɵɵtextInterpolate(ctx_r2.SelectedLog.ToolName);
1923
+ i0.ɵɵtextInterpolate(ctx_r1.SelectedLog.ToolName);
2128
1924
  i0.ɵɵadvance(2);
2129
- i0.ɵɵclassMap(ctx_r2.SelectedLog.Status === "Success" ? "status-success" : ctx_r2.SelectedLog.Status === "Error" ? "status-error" : "status-running");
1925
+ i0.ɵɵclassMap(ctx_r1.SelectedLog.Status === "Success" ? "status-success" : ctx_r1.SelectedLog.Status === "Error" ? "status-error" : "status-running");
2130
1926
  i0.ɵɵadvance();
2131
- i0.ɵɵtextInterpolate(ctx_r2.SelectedLog.Status);
1927
+ i0.ɵɵtextInterpolate(ctx_r1.SelectedLog.Status);
2132
1928
  i0.ɵɵadvance(4);
2133
- i0.ɵɵtextInterpolate(ctx_r2.formatDate(ctx_r2.SelectedLog.StartedAt));
1929
+ i0.ɵɵtextInterpolate(ctx_r1.formatDate(ctx_r1.SelectedLog.StartedAt));
2134
1930
  i0.ɵɵadvance();
2135
- i0.ɵɵconditional(ctx_r2.SelectedLog.DurationMs != null ? 14 : -1);
1931
+ i0.ɵɵconditional(ctx_r1.SelectedLog.DurationMs != null ? 14 : -1);
2136
1932
  i0.ɵɵadvance(8);
2137
- i0.ɵɵtextInterpolate(ctx_r2.SelectedLog.ConnectionName || ctx_r2.SelectedLog.ConnectionID);
1933
+ i0.ɵɵtextInterpolate(ctx_r1.SelectedLog.ConnectionName || ctx_r1.SelectedLog.ConnectionID);
2138
1934
  i0.ɵɵadvance();
2139
- i0.ɵɵconditional(ctx_r2.SelectedLog.ServerName ? 23 : -1);
1935
+ i0.ɵɵconditional(ctx_r1.SelectedLog.ServerName ? 23 : -1);
2140
1936
  i0.ɵɵadvance();
2141
- i0.ɵɵconditional(ctx_r2.SelectedLog.InputArgs ? 24 : -1);
1937
+ i0.ɵɵconditional(ctx_r1.SelectedLog.InputArgs ? 24 : -1);
2142
1938
  i0.ɵɵadvance();
2143
- i0.ɵɵconditional(ctx_r2.SelectedLog.Result ? 25 : -1);
1939
+ i0.ɵɵconditional(ctx_r1.SelectedLog.Result ? 25 : -1);
2144
1940
  i0.ɵɵadvance();
2145
- i0.ɵɵconditional(ctx_r2.SelectedLog.ErrorMessage ? 26 : -1);
1941
+ i0.ɵɵconditional(ctx_r1.SelectedLog.ErrorMessage ? 26 : -1);
2146
1942
  i0.ɵɵadvance(2);
2147
- i0.ɵɵconditional(ctx_r2.SelectedLog.ToolID ? 28 : -1);
1943
+ i0.ɵɵconditional(ctx_r1.SelectedLog.ToolID ? 28 : -1);
2148
1944
  } }
2149
1945
  /**
2150
1946
  * MCP Management Dashboard Component
@@ -2795,6 +2591,196 @@ let MCPDashboardComponent = class MCPDashboardComponent extends BaseDashboard {
2795
2591
  recentOnly: false
2796
2592
  });
2797
2593
  }
2594
+ /** Reset only the popover filters — leave searchTerm (toolbar) untouched. */
2595
+ resetPopoverFilters() {
2596
+ const current = this.filters$.value;
2597
+ this.onFiltersChange({
2598
+ ...current,
2599
+ serverStatus: 'all',
2600
+ connectionStatus: 'all',
2601
+ toolStatus: 'all',
2602
+ logStatus: 'all',
2603
+ toolsServer: 'all',
2604
+ toolsCategory: 'all',
2605
+ favoritesOnly: false,
2606
+ recentOnly: false
2607
+ });
2608
+ }
2609
+ /** Tools-tab view-mode options for the shared <mj-view-toggle>. */
2610
+ toolsViewOptions = [
2611
+ { key: 'card', icon: 'fa-solid fa-grip', title: 'Card View' },
2612
+ { key: 'list', icon: 'fa-solid fa-list', title: 'List View' },
2613
+ ];
2614
+ /** Tab config consumed by the centralized <mj-tab-nav>. */
2615
+ get mcpTabs() {
2616
+ return [
2617
+ { key: 'servers', label: 'Servers', icon: 'fa-solid fa-server', badge: this.servers.length },
2618
+ { key: 'connections', label: 'Connections', icon: 'fa-solid fa-link', badge: this.connections.length },
2619
+ { key: 'tools', label: 'Tools', icon: 'fa-solid fa-wrench', badge: this.tools.length },
2620
+ { key: 'logs', label: 'Logs', icon: 'fa-solid fa-list-check', badge: this.executionLogs.length, badgeVariant: this.stats.failedExecutions > 0 ? 'error' : 'default' },
2621
+ ];
2622
+ }
2623
+ /** Active filter count excluding searchTerm (surfaced separately via toolbar mj-page-search). */
2624
+ get ActiveFilterCount() {
2625
+ const f = this.filters$.value;
2626
+ let n = 0;
2627
+ if (f.serverStatus && f.serverStatus !== 'all')
2628
+ n++;
2629
+ if (f.connectionStatus && f.connectionStatus !== 'all')
2630
+ n++;
2631
+ if (f.toolStatus && f.toolStatus !== 'all')
2632
+ n++;
2633
+ if (f.logStatus && f.logStatus !== 'all')
2634
+ n++;
2635
+ if (f.toolsServer && f.toolsServer !== 'all')
2636
+ n++;
2637
+ if (f.toolsCategory && f.toolsCategory !== 'all')
2638
+ n++;
2639
+ if (f.favoritesOnly)
2640
+ n++;
2641
+ if (f.recentOnly)
2642
+ n++;
2643
+ return n;
2644
+ }
2645
+ /** Values record consumed by the centralized <mj-filter-panel>, scoped to the current tab. */
2646
+ get mcpFilterValues() {
2647
+ const f = this.filters$.value;
2648
+ return {
2649
+ serverStatus: f.serverStatus,
2650
+ connectionStatus: f.connectionStatus,
2651
+ toolStatus: f.toolStatus,
2652
+ logStatus: f.logStatus,
2653
+ toolsServer: f.toolsServer,
2654
+ toolsCategory: f.toolsCategory,
2655
+ favoritesOnly: f.favoritesOnly,
2656
+ recentOnly: f.recentOnly,
2657
+ };
2658
+ }
2659
+ /** Field config built dynamically based on the active tab. */
2660
+ get mcpFilterFields() {
2661
+ const fields = [];
2662
+ if (this.ActiveTab === 'tools') {
2663
+ fields.push({
2664
+ key: 'toolsServer',
2665
+ type: 'dropdown',
2666
+ label: 'Server',
2667
+ icon: 'fa-solid fa-server',
2668
+ filterable: this.toolsAvailableServers.length > 10,
2669
+ options: [
2670
+ { text: 'All Servers', value: 'all' },
2671
+ ...this.toolsAvailableServers.map(s => ({ text: s.Name, value: s.ID })),
2672
+ ],
2673
+ });
2674
+ fields.push({
2675
+ key: 'toolsCategory',
2676
+ type: 'dropdown',
2677
+ label: 'Category',
2678
+ icon: 'fa-solid fa-tags',
2679
+ filterable: this.toolsAvailableCategories.length > 10,
2680
+ options: [
2681
+ { text: 'All Categories', value: 'all' },
2682
+ ...this.toolsAvailableCategories.map(c => ({ text: `${c.category} (${c.count})`, value: c.category })),
2683
+ ],
2684
+ });
2685
+ }
2686
+ // Per-tab status filter
2687
+ if (this.ActiveTab === 'servers') {
2688
+ fields.push({
2689
+ key: 'serverStatus',
2690
+ type: 'dropdown',
2691
+ label: 'Server Status',
2692
+ icon: 'fa-solid fa-toggle-on',
2693
+ options: [
2694
+ { text: 'All Statuses', value: 'all' },
2695
+ { text: 'Active', value: 'Active' },
2696
+ { text: 'Inactive', value: 'Inactive' },
2697
+ ],
2698
+ });
2699
+ }
2700
+ else if (this.ActiveTab === 'connections') {
2701
+ fields.push({
2702
+ key: 'connectionStatus',
2703
+ type: 'dropdown',
2704
+ label: 'Connection Status',
2705
+ icon: 'fa-solid fa-toggle-on',
2706
+ options: [
2707
+ { text: 'All Statuses', value: 'all' },
2708
+ { text: 'Active', value: 'Active' },
2709
+ { text: 'Inactive', value: 'Inactive' },
2710
+ { text: 'Error', value: 'Error' },
2711
+ ],
2712
+ });
2713
+ }
2714
+ else if (this.ActiveTab === 'tools') {
2715
+ fields.push({
2716
+ key: 'toolStatus',
2717
+ type: 'dropdown',
2718
+ label: 'Tool Status',
2719
+ icon: 'fa-solid fa-toggle-on',
2720
+ options: [
2721
+ { text: 'All Statuses', value: 'all' },
2722
+ { text: 'Active', value: 'Active' },
2723
+ { text: 'Deprecated', value: 'Deprecated' },
2724
+ ],
2725
+ });
2726
+ // Boolean toggles as chips (active = true, all = false)
2727
+ fields.push({
2728
+ key: 'favoritesOnly',
2729
+ type: 'chips',
2730
+ label: 'Favorites',
2731
+ icon: 'fa-solid fa-star',
2732
+ chipOptions: [
2733
+ { text: 'All', value: false },
2734
+ { text: 'Favorites only', value: true, icon: 'fa-solid fa-star' },
2735
+ ],
2736
+ });
2737
+ fields.push({
2738
+ key: 'recentOnly',
2739
+ type: 'chips',
2740
+ label: 'Recency',
2741
+ icon: 'fa-solid fa-clock-rotate-left',
2742
+ chipOptions: [
2743
+ { text: 'All', value: false },
2744
+ { text: 'Recently used only', value: true, icon: 'fa-solid fa-clock-rotate-left' },
2745
+ ],
2746
+ });
2747
+ }
2748
+ else if (this.ActiveTab === 'logs') {
2749
+ fields.push({
2750
+ key: 'logStatus',
2751
+ type: 'dropdown',
2752
+ label: 'Log Status',
2753
+ icon: 'fa-solid fa-circle-check',
2754
+ options: [
2755
+ { text: 'All Statuses', value: 'all' },
2756
+ { text: 'Success', value: 'Success' },
2757
+ { text: 'Error', value: 'Error' },
2758
+ { text: 'Running', value: 'Running' },
2759
+ ],
2760
+ });
2761
+ }
2762
+ return fields;
2763
+ }
2764
+ /** Receive updated values from <mj-filter-panel> and propagate to filters$. */
2765
+ onFilterValuesChange(values) {
2766
+ const current = this.filters$.value;
2767
+ this.onFiltersChange({
2768
+ ...current,
2769
+ serverStatus: values['serverStatus'] ?? current.serverStatus,
2770
+ connectionStatus: values['connectionStatus'] ?? current.connectionStatus,
2771
+ toolStatus: values['toolStatus'] ?? current.toolStatus,
2772
+ logStatus: values['logStatus'] ?? current.logStatus,
2773
+ toolsServer: values['toolsServer'] ?? current.toolsServer,
2774
+ toolsCategory: values['toolsCategory'] ?? current.toolsCategory,
2775
+ favoritesOnly: values['favoritesOnly'] ?? false,
2776
+ recentOnly: values['recentOnly'] ?? false,
2777
+ });
2778
+ }
2779
+ /** Update searchTerm from the toolbar mj-page-search. */
2780
+ onSearchTermChange(value) {
2781
+ const current = this.filters$.value;
2782
+ this.onFiltersChange({ ...current, searchTerm: value ?? '' });
2783
+ }
2798
2784
  /**
2799
2785
  * Get the current filtered count based on active tab
2800
2786
  */
@@ -2845,6 +2831,21 @@ let MCPDashboardComponent = class MCPDashboardComponent extends BaseDashboard {
2845
2831
  if (this.ActiveTab === tab)
2846
2832
  return;
2847
2833
  this.ActiveTab = tab;
2834
+ // Clear filters that belong to OTHER tabs — they're not applicable here
2835
+ // and would otherwise stay stuck in state (counted in the badge, hidden from
2836
+ // the popover form). searchTerm is universal and preserved.
2837
+ const current = this.filters$.value;
2838
+ this.onFiltersChange({
2839
+ ...current,
2840
+ serverStatus: 'all',
2841
+ connectionStatus: 'all',
2842
+ toolStatus: 'all',
2843
+ logStatus: 'all',
2844
+ toolsServer: 'all',
2845
+ toolsCategory: 'all',
2846
+ favoritesOnly: false,
2847
+ recentOnly: false,
2848
+ });
2848
2849
  this.UpdateQueryParams({ tab: this.ActiveTab });
2849
2850
  this.cdr.detectChanges();
2850
2851
  }
@@ -4289,151 +4290,60 @@ let MCPDashboardComponent = class MCPDashboardComponent extends BaseDashboard {
4289
4290
  this.cdr.detectChanges();
4290
4291
  }
4291
4292
  static ɵfac = function MCPDashboardComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || MCPDashboardComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i1.MCPToolsService)); };
4292
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MCPDashboardComponent, selectors: [["mj-mcp-dashboard"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 77, vars: 35, consts: [["fSearch", ""], ["fServer", ""], ["fCat", ""], ["fFav", ""], ["fRec", ""], ["fSStatus", ""], ["fCStatus", ""], ["fTStatus", ""], ["fLStatus", ""], ["sfName", ""], ["sfDesc", ""], ["sfTransport", ""], ["sfAuth", ""], ["sfStatus", ""], ["sfUrl", ""], ["sfCmd", ""], ["cfServer", ""], ["cfName", ""], ["cfToken", ""], ["cfStatus", ""], ["tSrv", ""], ["tConn", ""], ["tSearch", ""], ["enumEl", ""], ["boolEl", ""], ["jsonEl", ""], ["strEl", ""], [1, "mcp-dashboard"], [1, "dashboard-header"], [1, "header-info"], [1, "dashboard-title"], [1, "fa-solid", "fa-plug-circle-bolt"], ["type", "button", "title", "Toggle Filters", 1, "filter-toggle-btn", 3, "click"], [1, "fa-solid", "fa-filter"], [1, "item-count"], [1, "header-controls"], [1, "tab-nav"], ["type", "button", 1, "tab-btn", 3, "click"], [1, "fa-solid", "fa-server"], [1, "tab-label"], [1, "tab-badge"], [1, "fa-solid", "fa-link"], [1, "fa-solid", "fa-wrench"], [1, "fa-solid", "fa-list-check"], ["mjButton", "", "variant", "primary"], ["mjButton", "", "variant", "flat", "title", "Refresh", 3, "disabled"], [1, "main-content"], [1, "filter-panel-container"], [2, "padding", "12px", "border-right", "1px solid var(--mj-border-default,#e0e0e0)", "height", "100%", "box-sizing", "border-box", "overflow-y", "auto", "background", "var(--mj-bg-surface,#fff)", "min-width", "240px"], [2, "display", "flex", "align-items", "center", "justify-content", "space-between", "margin-bottom", "12px"], [2, "display", "flex", "align-items", "center", "gap", "6px"], [2, "margin", "0", "font-size", "0.95rem", "font-weight", "600"], [2, "padding", "2px 8px", "background", "var(--mj-brand-primary,#264FAF)", "color", "#fff", "border-radius", "10px", "font-size", "0.7rem", "font-weight", "600"], [2, "font-size", "0.75rem", "color", "var(--mj-text-muted,#888)"], [2, "margin-bottom", "12px"], [2, "display", "block", "font-size", "0.75rem", "color", "var(--mj-text-secondary,#475569)", "margin-bottom", "4px"], [1, "fa-solid", "fa-search"], ["type", "text", "placeholder", "Search\u2026", 1, "mj-input", 2, "width", "100%", "box-sizing", "border-box", 3, "input", "value"], [2, "margin-top", "16px"], ["mjButton", "", "variant", "flat", 2, "width", "100%", 3, "click"], [1, "fa-solid", "fa-undo"], [1, "resize-handle"], [1, "content-area"], [1, "error-banner"], [1, "content-body"], ["text", "Loading MCP data..."], [2, "position", "fixed", "inset", "0", "z-index", "10000", "background", "rgba(0,0,0,0.5)", "display", "flex", "align-items", "center", "justify-content", "center"], [2, "position", "fixed", "inset", "0", "z-index", "10000", "pointer-events", "none"], ["mjButton", "", "variant", "primary", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "view-toggle"], ["type", "button", "title", "Card 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"], [1, "fa-solid", "fa-play"], ["mjButton", "", "variant", "flat", "title", "Refresh", 3, "click", "disabled"], [1, "fa-solid", "fa-sync"], [1, "mj-input", 2, "width", "100%", "box-sizing", "border-box", 3, "change", "value"], ["value", "all"], [3, "value"], [1, "fa-solid", "fa-tags"], [2, "display", "flex", "align-items", "center", "gap", "6px", "cursor", "pointer", "font-size", "0.85rem"], ["type", "checkbox", 3, "change", "checked"], [1, "fa-solid", "fa-star", 2, "color", "var(--mj-status-warning,#f59e0b)"], [1, "fa-solid", "fa-clock-rotate-left", 2, "color", "var(--mj-brand-primary,#264FAF)"], [1, "fa-solid", "fa-toggle-on"], ["value", "Active"], ["value", "Inactive"], ["value", "Error"], ["value", "Deprecated"], [1, "fa-solid", "fa-circle-check"], ["value", "Success"], ["value", "Running"], [1, "fa-solid", "fa-exclamation-triangle"], [1, "close-btn", 3, "click"], [1, "fa-solid", "fa-times"], [1, "data-grid", "servers-grid"], [1, "data-grid", "connections-grid"], [1, "data-table"], [1, "empty-state"], [1, "data-card", 3, "expanded"], [1, "data-card"], [1, "card-header", "clickable", 3, "click"], [1, "card-title"], [1, "fa-solid", "fa-chevron-right", "expand-arrow"], [1, "name"], [1, "status-badge", 3, "ngClass"], [1, "card-actions", 3, "click"], ["mjButton", "", "variant", "flat", "title", "Edit", 3, "click"], [1, "fa-solid", "fa-pen"], ["mjButton", "", "variant", "flat", "title", "Delete", 3, "click"], [1, "fa-solid", "fa-trash"], [1, "card-body"], [1, "description"], [1, "details-grid"], [1, "detail"], [1, "label"], [1, "value"], [1, "detail", "full-width"], [1, "expanded-tools-section"], [1, "value", "url"], [1, "value", "command"], [1, "tools-section-header"], [1, "no-tools-message"], [1, "tools-mini-list"], [1, "fa-solid", "fa-info-circle"], [1, "tool-mini-card"], [1, "tool-mini-info"], [1, "tool-mini-name"], [1, "tool-mini-params"], [1, "fa-solid", "fa-sliders"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Test this tool", 3, "click"], ["mjButton", "", "variant", "flat", "title", "Sync Tools", 3, "click", "disabled"], [1, "fa-solid", "fa-sync", "fa-spin"], [1, "sync-progress-banner"], [1, "sync-result-banner", 3, "success", "error"], [1, "detail", "full-width", "error"], [1, "fa-solid", "fa-circle-notch", "fa-spin"], [1, "sync-message"], [1, "sync-result-banner"], [1, "fa-solid", "fa-check-circle"], [1, "fa-solid", "fa-exclamation-circle"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Test this tool with this connection", 3, "click"], [2, "display", "flex", "justify-content", "flex-end", "align-items", "center", "gap", "8px", "padding", "4px 0", "font-size", "0.8rem", "color", "var(--mj-text-muted,#888)"], [2, "display", "flex", "align-items", "center", "gap", "6px", "cursor", "pointer"], [1, "tools-container"], [2, "padding", "8px 12px", "font-size", "0.8rem", "color", "var(--mj-text-secondary,#475569)", "background", "var(--mj-bg-surface-card,#f8f9fa)", "border-radius", "4px", "margin-bottom", "6px"], [2, "height", "calc(100vh - 260px)", "width", "100%", "overflow-y", "auto", "border", "1px solid var(--mj-border-subtle,#eee)", "border-radius", "4px", 3, "scroll"], [2, "display", "flex", "align-items", "center", "gap", "12px", "padding", "12px 14px", "border-bottom", "1px solid var(--mj-border-subtle,#eee)", "height", "72px", "box-sizing", "border-box"], [2, "padding", "12px", "text-align", "center", "font-size", "0.8rem", "color", "var(--mj-text-muted,#888)"], [1, "fa-solid", "fa-wrench", 2, "color", "var(--mj-brand-primary,#264FAF)"], [2, "flex", "1", "min-width", "0"], [2, "font-weight", "500", "font-size", "0.875rem", "overflow", "hidden", "text-overflow", "ellipsis", "white-space", "nowrap"], [2, "font-size", "0.75rem", "color", "var(--mj-text-muted,#888)", "overflow", "hidden", "text-overflow", "ellipsis", "white-space", "nowrap"], ["type", "button", 2, "background", "transparent", "border", "none", "cursor", "pointer", "padding", "4px", "font-size", "1rem", 3, "click", "title"], [1, "status-badge", "small", 3, "ngClass"], [1, "hint"], [1, "server-group", 3, "collapsed"], [1, "server-group"], [1, "server-group-header", 3, "click"], [1, "server-info"], [1, "fa-solid", "fa-chevron-right", "expand-icon"], [1, "server-name"], [1, "tool-count"], [1, "server-actions", 3, "click"], ["mjButton", "", "variant", "flat", "title", "Test a tool", 3, "click"], [1, "tools-grid"], [1, "tools-list"], [1, "tool-card", 3, "expanded"], [1, "tool-card"], [1, "tool-card-header", 3, "click"], [1, "tool-title"], [1, "tool-meta"], ["title", "Parameters", 1, "param-badge"], [1, "tool-description"], [1, "tool-card-actions"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "View details", 3, "click"], [1, "fa-solid"], [1, "tool-details"], [1, "detail-row"], [1, "detail-label"], [1, "detail-value", "mono"], [1, "detail-value"], [1, "detail-row", "full"], [1, "schema-preview"], [1, "tool-name-cell"], [1, "tool-name-info"], [1, "tool-code"], [1, "description-cell"], [1, "param-count"], [1, "actions-cell"], ["type", "button", 2, "background", "transparent", "border", "none", "cursor", "pointer", "padding", "4px", "font-size", "0.95rem", "margin-right", "4px", 3, "click", "title"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Test", 3, "click"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Details", 3, "click"], [1, "detail-row-expanded"], ["colspan", "6"], [1, "inline-details"], [1, "detail-section"], [1, "detail-section", "full"], [1, "sortable", 3, "click", "ngClass"], [1, "sort-icon", "fa-solid"], ["title", "Click for details", 1, "clickable-row", 3, "error-row"], ["title", "Click for details", 1, "clickable-row", 3, "click"], [1, "fa-solid", "fa-times-circle"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-question-circle"], [1, "tool-name"], [1, "error-message", 3, "title"], [1, "action-cell"], [1, "fa-solid", "fa-chevron-right"], [2, "position", "fixed", "inset", "0", "z-index", "10000", "background", "rgba(0,0,0,0.5)", "display", "flex", "align-items", "center", "justify-content", "center", 3, "click"], [2, "display", "flex", "flex-direction", "column", "background", "var(--mj-bg-surface,#fff)", "border-radius", "8px", "box-shadow", "0 20px 60px rgba(0,0,0,0.3)", "overflow", "hidden", "width", "600px", "max-width", "90vw", "max-height", "90vh", 3, "click"], [2, "display", "flex", "align-items", "center", "justify-content", "space-between", "padding", "16px 20px", "border-bottom", "1px solid var(--mj-border-default,#e0e0e0)", "flex-shrink", "0"], [2, "margin", "0", "font-size", "1.125rem", "font-weight", "600", "color", "var(--mj-text-primary,#333)"], [2, "display", "flex", "align-items", "center", "justify-content", "center", "width", "32px", "height", "32px", "border", "none", "background", "none", "cursor", "pointer", "color", "var(--mj-text-muted,#888)", "border-radius", "4px", 3, "click"], [2, "flex", "1", "overflow-y", "auto", "padding", "20px", "color", "var(--mj-text-primary,#333)"], [2, "background", "var(--mj-status-error-bg,#fff5f5)", "border", "1px solid var(--mj-status-error-border,#feb2b2)", "border-radius", "6px", "padding", "10px 14px", "margin-bottom", "16px", "color", "var(--mj-status-error-text,#c53030)", "font-size", "0.875rem"], [2, "margin-bottom", "16px"], [2, "display", "block", "font-size", "0.875rem", "font-weight", "500", "color", "var(--mj-text-primary,#333)", "margin-bottom", "4px"], [2, "color", "var(--mj-status-error,#e53e3e)"], ["placeholder", "e.g., GitHub MCP Server", 1, "mj-input", 2, "width", "100%", "box-sizing", "border-box", 3, "input", "value"], ["placeholder", "Optional description", "rows", "3", 1, "mj-textarea", 2, "width", "100%", "box-sizing", "border-box", 3, "input", "value"], [2, "display", "flex", "align-items", "center", "gap", "8px", "padding", "16px 20px", "border-top", "1px solid var(--mj-border-default,#e0e0e0)", "flex-shrink", "0"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], ["mjButton", "", 3, "click"], ["placeholder", "https://api.example.com/mcp", 1, "mj-input", 2, "width", "100%", "box-sizing", "border-box", 3, "input", "value"], ["placeholder", "e.g., npx", 1, "mj-input", 2, "width", "100%", "box-sizing", "border-box", 3, "input", "value"], [2, "display", "flex", "flex-direction", "column", "background", "var(--mj-bg-surface,#fff)", "border-radius", "8px", "box-shadow", "0 20px 60px rgba(0,0,0,0.3)", "overflow", "hidden", "width", "560px", "max-width", "90vw", "max-height", "90vh", 3, "click"], ["value", ""], ["placeholder", "e.g., Zapier Connection", 1, "mj-input", 2, "width", "100%", "box-sizing", "border-box", 3, "input", "value"], ["placeholder", "Paste bearer token here", 1, "mj-input", 2, "width", "100%", "box-sizing", "border-box", "font-family", "monospace", "font-size", "0.8rem", 3, "input", "value"], [2, "display", "flex", "flex-direction", "column", "background", "var(--mj-bg-surface,#fff)", "border-radius", "8px", "box-shadow", "0 20px 60px rgba(0,0,0,0.3)", "overflow", "hidden", "width", "640px", "max-width", "90vw", "max-height", "90vh", 3, "click"], [2, "font-size", "0.875rem", "font-weight", "400", "color", "var(--mj-text-muted,#888)", "margin-left", "8px"], [2, "display", "flex", "gap", "0", "padding", "10px 20px", "background", "var(--mj-bg-surface-card,#f9f9f9)", "border-bottom", "1px solid var(--mj-border-default,#e0e0e0)", "flex-shrink", "0"], [2, "font-size", "0.8rem", "font-weight", "500"], [2, "margin", "0 8px", "color", "var(--mj-text-muted,#888)"], [1, "mj-input", 2, "width", "100%", "box-sizing", "border-box", 3, "change"], [3, "value", "selected"], ["type", "text", "placeholder", "Search tools\u2026 (Recently used appear first)", 1, "mj-input", 2, "width", "100%", "box-sizing", "border-box", "margin-bottom", "6px", 3, "input", "value"], [2, "max-height", "220px", "overflow-y", "auto", "border", "1px solid var(--mj-border-default,#e0e0e0)", "border-radius", "4px", "background", "var(--mj-bg-surface,#fff)"], [2, "padding", "8px 12px", "cursor", "pointer", "display", "flex", "align-items", "center", "gap", "8px", "border-bottom", "1px solid var(--mj-border-subtle,#eee)", 3, "background"], [2, "padding", "8px 12px", "cursor", "pointer", "display", "flex", "align-items", "center", "gap", "8px", "border-bottom", "1px solid var(--mj-border-subtle,#eee)", 3, "click"], [2, "font-size", "0.65rem", "background", "var(--mj-brand-primary,#264FAF)", "color", "#fff", "padding", "1px 6px", "border-radius", "8px", "font-weight", "600"], [2, "font-size", "0.85rem", "font-weight", "500", "overflow", "hidden", "text-overflow", "ellipsis", "white-space", "nowrap"], [2, "font-size", "0.7rem", "color", "var(--mj-text-muted,#888)", "overflow", "hidden", "text-overflow", "ellipsis", "white-space", "nowrap"], [1, "fa-solid", "fa-check", 2, "color", "var(--mj-brand-primary,#264FAF)"], [2, "text-align", "center", "padding", "24px", "color", "var(--mj-text-muted,#888)"], [1, "fa-solid", "fa-check-circle", 2, "font-size", "2rem", "margin-bottom", "8px", "display", "block"], [2, "font-size", "0.75rem", "color", "var(--mj-text-muted,#888)", "margin", "0 0 4px 0"], [1, "mj-input", 2, "width", "100%", "box-sizing", "border-box"], ["rows", "3", 1, "mj-textarea", 2, "width", "100%", "box-sizing", "border-box", "font-family", "monospace", "font-size", "0.8rem", 3, "placeholder"], [1, "mj-input", 2, "width", "100%", "box-sizing", "border-box", 3, "placeholder"], ["value", "false"], ["value", "true"], ["rows", "3", 1, "mj-textarea", 2, "width", "100%", "box-sizing", "border-box", "font-family", "monospace", "font-size", "0.8rem", 3, "input", "placeholder"], [1, "mj-input", 2, "width", "100%", "box-sizing", "border-box", 3, "input", "placeholder"], [2, "background", "var(--mj-status-success-bg,#f0fff4)", "border", "1px solid var(--mj-status-success-border,#9ae6b4)", "border-radius", "6px", "padding", "12px 16px", "margin-bottom", "16px", "color", "var(--mj-status-success-text,#276749)"], [2, "background", "var(--mj-status-error-bg,#fff5f5)", "border", "1px solid var(--mj-status-error-border,#feb2b2)", "border-radius", "6px", "padding", "12px 16px", "margin-bottom", "16px", "color", "var(--mj-status-error-text,#c53030)"], [2, "float", "right", "font-size", "0.75rem"], [2, "display", "block", "font-size", "0.875rem", "font-weight", "500", "margin-bottom", "4px"], [2, "background", "var(--mj-bg-surface-sunken,#f0f0f0)", "border-radius", "4px", "padding", "12px", "font-size", "0.8rem", "white-space", "pre-wrap", "word-break", "break-all", "margin", "0"], [2, "background", "var(--mj-bg-surface-sunken,#f0f0f0)", "border-radius", "4px", "padding", "12px", "font-size", "0.8rem", "white-space", "pre-wrap", "word-break", "break-all", "overflow-y", "auto", "max-height", "300px", "margin", "0"], [1, "fa-solid", "fa-arrow-right"], [1, "fa-solid", "fa-arrow-left"], [1, "fa-solid", "fa-redo"], [2, "position", "absolute", "inset", "0", "background", "rgba(0,0,0,0.35)", "pointer-events", "auto", 3, "click"], [2, "position", "absolute", "top", "0", "right", "0", "height", "100%", "width", "560px", "max-width", "95vw", "background", "var(--mj-bg-surface,#fff)", "box-shadow", "-4px 0 20px rgba(0,0,0,0.15)", "display", "flex", "flex-direction", "column", "pointer-events", "auto"], [2, "padding", "16px 20px", "border-bottom", "1px solid var(--mj-border-default,#e0e0e0)", "display", "flex", "align-items", "center", "justify-content", "space-between"], [2, "margin", "0", "font-size", "1rem", "font-weight", "600"], [2, "font-size", "0.75rem", "color", "var(--mj-text-muted,#888)", "margin-top", "4px"], [2, "font-weight", "600"], [2, "margin", "0 8px"], ["mjButton", "", "aria-label", "Close", 3, "click"], [1, "fa-solid", "fa-xmark"], [2, "flex", "1", "overflow-y", "auto", "padding", "16px 20px"], [2, "font-size", "0.75rem", "color", "var(--mj-text-muted,#888)", "margin-bottom", "4px"], [2, "font-size", "0.875rem"], [2, "font-size", "0.75rem", "color", "var(--mj-text-muted,#888)", "margin-top", "2px"], [2, "padding", "12px 20px", "border-top", "1px solid var(--mj-border-default,#e0e0e0)", "display", "flex", "gap", "8px", "justify-content", "flex-start"], [2, "display", "block", "font-size", "0.875rem", "font-weight", "500", "margin-bottom", "6px"], [2, "background", "var(--mj-bg-surface-sunken,#f0f0f0)", "border-radius", "4px", "padding", "12px", "font-size", "0.75rem", "white-space", "pre-wrap", "word-break", "break-all", "overflow-y", "auto", "max-height", "240px", "margin", "0"], [2, "background", "var(--mj-bg-surface-sunken,#f0f0f0)", "border-radius", "4px", "padding", "12px", "font-size", "0.75rem", "white-space", "pre-wrap", "word-break", "break-all", "overflow-y", "auto", "max-height", "360px", "margin", "0"], [2, "display", "block", "font-size", "0.875rem", "font-weight", "500", "margin-bottom", "6px", "color", "var(--mj-status-error-text,#c53030)"], [2, "background", "var(--mj-status-error-bg,#fff5f5)", "border", "1px solid var(--mj-status-error-border,#feb2b2)", "border-radius", "4px", "padding", "12px", "font-size", "0.75rem", "white-space", "pre-wrap", "word-break", "break-all", "margin", "0", "color", "var(--mj-status-error-text,#c53030)"]], template: function MCPDashboardComponent_Template(rf, ctx) { if (rf & 1) {
4293
- const _r1 = i0.ɵɵgetCurrentView();
4294
- i0.ɵɵelementStart(0, "div", 27)(1, "div", 28)(2, "div", 29)(3, "h2", 30);
4295
- i0.ɵɵelement(4, "i", 31);
4296
- i0.ɵɵtext(5, " MCP Dashboard ");
4297
- i0.ɵɵelementEnd();
4298
- i0.ɵɵelementStart(6, "button", 32);
4299
- i0.ɵɵlistener("click", function MCPDashboardComponent_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.toggleFilterPanel()); });
4300
- i0.ɵɵelement(7, "i", 33);
4301
- i0.ɵɵconditionalCreate(8, MCPDashboardComponent_Conditional_8_Template, 1, 0)(9, MCPDashboardComponent_Conditional_9_Template, 1, 0);
4302
- i0.ɵɵelementEnd();
4303
- i0.ɵɵelementStart(10, "span", 34);
4304
- i0.ɵɵtext(11);
4305
- i0.ɵɵelementEnd()();
4306
- i0.ɵɵelementStart(12, "div", 35)(13, "div", 36)(14, "button", 37);
4307
- i0.ɵɵlistener("click", function MCPDashboardComponent_Template_button_click_14_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.setActiveTab("servers")); });
4308
- i0.ɵɵelement(15, "i", 38);
4309
- i0.ɵɵelementStart(16, "span", 39);
4310
- i0.ɵɵtext(17, "Servers");
4311
- i0.ɵɵelementEnd();
4312
- i0.ɵɵelementStart(18, "span", 40);
4313
- i0.ɵɵtext(19);
4314
- i0.ɵɵelementEnd()();
4315
- i0.ɵɵelementStart(20, "button", 37);
4316
- i0.ɵɵlistener("click", function MCPDashboardComponent_Template_button_click_20_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.setActiveTab("connections")); });
4317
- i0.ɵɵelement(21, "i", 41);
4318
- i0.ɵɵelementStart(22, "span", 39);
4319
- i0.ɵɵtext(23, "Connections");
4293
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MCPDashboardComponent, selectors: [["mj-mcp-dashboard"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 22, vars: 17, consts: [["sfName", ""], ["sfDesc", ""], ["sfTransport", ""], ["sfAuth", ""], ["sfStatus", ""], ["sfUrl", ""], ["sfCmd", ""], ["cfServer", ""], ["cfName", ""], ["cfToken", ""], ["cfStatus", ""], ["tSrv", ""], ["tConn", ""], ["tSearch", ""], ["enumEl", ""], ["boolEl", ""], ["jsonEl", ""], ["strEl", ""], ["Title", "MCP Dashboard", "Icon", "fa-solid fa-plug-circle-bolt"], ["meta", ""], ["Label", "items", 3, "Count", "Total"], ["actions", ""], [3, "ClearAllRequested", "ActiveCount", "ShowClearAll"], [3, "ValuesChange", "Reset", "Fields", "Values"], [3, "TabChange", "Tabs", "ActiveKey"], ["mjButton", "", "variant", "primary", "size", "sm"], [3, "Loading"], ["toolbar", ""], ["Placeholder", "Search\u2026", 3, "ValueChange", "Value"], [3, "Flex"], [1, "error-banner"], ["text", "Loading MCP data..."], [2, "position", "fixed", "inset", "0", "z-index", "10000", "background", "rgba(0,0,0,0.5)", "display", "flex", "align-items", "center", "justify-content", "center"], [2, "position", "fixed", "inset", "0", "z-index", "10000", "pointer-events", "none"], ["mjButton", "", "variant", "primary", "size", "sm", 3, "click"], [1, "fa-solid", "fa-plus"], [3, "KeyChange", "Options", "ActiveKey"], ["mjButton", "", "variant", "secondary", "size", "sm", 3, "click", "title"], [1, "fa-solid"], [1, "fa-solid", "fa-play"], [3, "Clicked", "Loading"], [1, "fa-solid", "fa-exclamation-triangle"], [1, "close-btn", 3, "click"], [1, "fa-solid", "fa-times"], [1, "data-grid", "servers-grid"], [1, "data-grid", "connections-grid"], [1, "data-table"], [1, "empty-state"], [1, "fa-solid", "fa-server"], [1, "data-card", 3, "expanded"], [1, "data-card"], [1, "card-header", "clickable", 3, "click"], [1, "card-title"], [1, "fa-solid", "fa-chevron-right", "expand-arrow"], [1, "name"], [1, "status-badge", 3, "ngClass"], [1, "card-actions", 3, "click"], ["mjButton", "", "variant", "flat", "title", "Edit", 3, "click"], [1, "fa-solid", "fa-pen"], ["mjButton", "", "variant", "flat", "title", "Delete", 3, "click"], [1, "fa-solid", "fa-trash"], [1, "card-body"], [1, "description"], [1, "details-grid"], [1, "detail"], [1, "label"], [1, "value"], [1, "detail", "full-width"], [1, "expanded-tools-section"], [1, "value", "url"], [1, "value", "command"], [1, "tools-section-header"], [1, "fa-solid", "fa-wrench"], [1, "no-tools-message"], [1, "tools-mini-list"], [1, "fa-solid", "fa-info-circle"], [1, "tool-mini-card"], [1, "tool-mini-info"], [1, "tool-mini-name"], [1, "tool-mini-params"], [1, "fa-solid", "fa-sliders"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Test this tool", 3, "click"], [1, "fa-solid", "fa-link"], ["mjButton", "", "variant", "flat", "title", "Sync Tools", 3, "click", "disabled"], [1, "fa-solid", "fa-sync", "fa-spin"], [1, "fa-solid", "fa-sync"], [1, "sync-progress-banner"], [1, "sync-result-banner", 3, "success", "error"], [1, "detail", "full-width", "error"], [1, "fa-solid", "fa-circle-notch", "fa-spin"], [1, "sync-message"], [1, "sync-result-banner"], [1, "fa-solid", "fa-check-circle"], [1, "fa-solid", "fa-exclamation-circle"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Test this tool with this connection", 3, "click"], [1, "tools-container"], [2, "padding", "8px 12px", "font-size", "0.8rem", "color", "var(--mj-text-secondary,#475569)", "background", "var(--mj-bg-surface-card,#f8f9fa)", "border-radius", "4px", "margin-bottom", "6px"], [2, "height", "calc(100vh - 260px)", "width", "100%", "overflow-y", "auto", "border", "1px solid var(--mj-border-subtle,#eee)", "border-radius", "4px", 3, "scroll"], [2, "display", "flex", "align-items", "center", "gap", "12px", "padding", "12px 14px", "border-bottom", "1px solid var(--mj-border-subtle,#eee)", "height", "72px", "box-sizing", "border-box"], [2, "padding", "12px", "text-align", "center", "font-size", "0.8rem", "color", "var(--mj-text-muted,#888)"], [1, "fa-solid", "fa-wrench", 2, "color", "var(--mj-brand-primary,#264FAF)"], [2, "flex", "1", "min-width", "0"], [2, "font-weight", "500", "font-size", "0.875rem", "overflow", "hidden", "text-overflow", "ellipsis", "white-space", "nowrap"], [2, "font-size", "0.75rem", "color", "var(--mj-text-muted,#888)", "overflow", "hidden", "text-overflow", "ellipsis", "white-space", "nowrap"], ["type", "button", 2, "background", "transparent", "border", "none", "cursor", "pointer", "padding", "4px", "font-size", "1rem", 3, "click", "title"], [1, "status-badge", "small", 3, "ngClass"], [1, "hint"], [1, "server-group", 3, "collapsed"], [1, "server-group"], [1, "server-group-header", 3, "click"], [1, "server-info"], [1, "fa-solid", "fa-chevron-right", "expand-icon"], [1, "server-name"], [1, "tool-count"], [1, "server-actions", 3, "click"], ["mjButton", "", "variant", "flat", "title", "Test a tool", 3, "click"], [1, "tools-grid"], [1, "tools-list"], [1, "tool-card", 3, "expanded"], [1, "tool-card"], [1, "tool-card-header", 3, "click"], [1, "tool-title"], [1, "tool-meta"], ["title", "Parameters", 1, "param-badge"], [1, "tool-description"], [1, "tool-card-actions"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "View details", 3, "click"], [1, "tool-details"], [1, "detail-row"], [1, "detail-label"], [1, "detail-value", "mono"], [1, "detail-value"], [1, "detail-row", "full"], [1, "schema-preview"], [1, "tool-name-cell"], [1, "tool-name-info"], [1, "tool-code"], [1, "description-cell"], [1, "param-count"], [1, "actions-cell"], ["type", "button", 2, "background", "transparent", "border", "none", "cursor", "pointer", "padding", "4px", "font-size", "0.95rem", "margin-right", "4px", 3, "click", "title"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Test", 3, "click"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Details", 3, "click"], [1, "detail-row-expanded"], ["colspan", "6"], [1, "inline-details"], [1, "detail-section"], [1, "detail-section", "full"], [1, "fa-solid", "fa-list-check"], [1, "sortable", 3, "click", "ngClass"], [1, "sort-icon", "fa-solid"], ["title", "Click for details", 1, "clickable-row", 3, "error-row"], ["title", "Click for details", 1, "clickable-row", 3, "click"], [1, "fa-solid", "fa-times-circle"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-question-circle"], [1, "tool-name"], [1, "error-message", 3, "title"], [1, "action-cell"], [1, "fa-solid", "fa-chevron-right"], [2, "position", "fixed", "inset", "0", "z-index", "10000", "background", "rgba(0,0,0,0.5)", "display", "flex", "align-items", "center", "justify-content", "center", 3, "click"], [2, "display", "flex", "flex-direction", "column", "background", "var(--mj-bg-surface,#fff)", "border-radius", "8px", "box-shadow", "0 20px 60px rgba(0,0,0,0.3)", "overflow", "hidden", "width", "600px", "max-width", "90vw", "max-height", "90vh", 3, "click"], [2, "display", "flex", "align-items", "center", "justify-content", "space-between", "padding", "16px 20px", "border-bottom", "1px solid var(--mj-border-default,#e0e0e0)", "flex-shrink", "0"], [2, "margin", "0", "font-size", "1.125rem", "font-weight", "600", "color", "var(--mj-text-primary,#333)"], [2, "display", "flex", "align-items", "center", "justify-content", "center", "width", "32px", "height", "32px", "border", "none", "background", "none", "cursor", "pointer", "color", "var(--mj-text-muted,#888)", "border-radius", "4px", 3, "click"], [2, "flex", "1", "overflow-y", "auto", "padding", "20px", "color", "var(--mj-text-primary,#333)"], [2, "background", "var(--mj-status-error-bg,#fff5f5)", "border", "1px solid var(--mj-status-error-border,#feb2b2)", "border-radius", "6px", "padding", "10px 14px", "margin-bottom", "16px", "color", "var(--mj-status-error-text,#c53030)", "font-size", "0.875rem"], [2, "margin-bottom", "16px"], [2, "display", "block", "font-size", "0.875rem", "font-weight", "500", "color", "var(--mj-text-primary,#333)", "margin-bottom", "4px"], [2, "color", "var(--mj-status-error,#e53e3e)"], ["placeholder", "e.g., GitHub MCP Server", 1, "mj-input", 2, "width", "100%", "box-sizing", "border-box", 3, "input", "value"], ["placeholder", "Optional description", "rows", "3", 1, "mj-textarea", 2, "width", "100%", "box-sizing", "border-box", 3, "input", "value"], [1, "mj-input", 2, "width", "100%", "box-sizing", "border-box", 3, "change", "value"], [3, "value"], ["value", "Active"], ["value", "Inactive"], [2, "display", "flex", "align-items", "center", "gap", "8px", "padding", "16px 20px", "border-top", "1px solid var(--mj-border-default,#e0e0e0)", "flex-shrink", "0"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], ["mjButton", "", 3, "click"], ["placeholder", "https://api.example.com/mcp", 1, "mj-input", 2, "width", "100%", "box-sizing", "border-box", 3, "input", "value"], ["placeholder", "e.g., npx", 1, "mj-input", 2, "width", "100%", "box-sizing", "border-box", 3, "input", "value"], [2, "display", "flex", "flex-direction", "column", "background", "var(--mj-bg-surface,#fff)", "border-radius", "8px", "box-shadow", "0 20px 60px rgba(0,0,0,0.3)", "overflow", "hidden", "width", "560px", "max-width", "90vw", "max-height", "90vh", 3, "click"], ["value", ""], ["placeholder", "e.g., Zapier Connection", 1, "mj-input", 2, "width", "100%", "box-sizing", "border-box", 3, "input", "value"], ["placeholder", "Paste bearer token here", 1, "mj-input", 2, "width", "100%", "box-sizing", "border-box", "font-family", "monospace", "font-size", "0.8rem", 3, "input", "value"], [2, "font-size", "0.75rem", "color", "var(--mj-text-muted,#888)"], [2, "display", "flex", "flex-direction", "column", "background", "var(--mj-bg-surface,#fff)", "border-radius", "8px", "box-shadow", "0 20px 60px rgba(0,0,0,0.3)", "overflow", "hidden", "width", "640px", "max-width", "90vw", "max-height", "90vh", 3, "click"], [2, "font-size", "0.875rem", "font-weight", "400", "color", "var(--mj-text-muted,#888)", "margin-left", "8px"], [2, "display", "flex", "gap", "0", "padding", "10px 20px", "background", "var(--mj-bg-surface-card,#f9f9f9)", "border-bottom", "1px solid var(--mj-border-default,#e0e0e0)", "flex-shrink", "0"], [2, "font-size", "0.8rem", "font-weight", "500"], [2, "margin", "0 8px", "color", "var(--mj-text-muted,#888)"], [1, "mj-input", 2, "width", "100%", "box-sizing", "border-box", 3, "change"], [3, "value", "selected"], ["type", "text", "placeholder", "Search tools\u2026 (Recently used appear first)", 1, "mj-input", 2, "width", "100%", "box-sizing", "border-box", "margin-bottom", "6px", 3, "input", "value"], [2, "max-height", "220px", "overflow-y", "auto", "border", "1px solid var(--mj-border-default,#e0e0e0)", "border-radius", "4px", "background", "var(--mj-bg-surface,#fff)"], [2, "padding", "8px 12px", "cursor", "pointer", "display", "flex", "align-items", "center", "gap", "8px", "border-bottom", "1px solid var(--mj-border-subtle,#eee)", 3, "background"], [2, "padding", "8px 12px", "cursor", "pointer", "display", "flex", "align-items", "center", "gap", "8px", "border-bottom", "1px solid var(--mj-border-subtle,#eee)", 3, "click"], [2, "font-size", "0.65rem", "background", "var(--mj-brand-primary,#264FAF)", "color", "#fff", "padding", "1px 6px", "border-radius", "8px", "font-weight", "600"], [2, "font-size", "0.85rem", "font-weight", "500", "overflow", "hidden", "text-overflow", "ellipsis", "white-space", "nowrap"], [2, "font-size", "0.7rem", "color", "var(--mj-text-muted,#888)", "overflow", "hidden", "text-overflow", "ellipsis", "white-space", "nowrap"], [1, "fa-solid", "fa-check", 2, "color", "var(--mj-brand-primary,#264FAF)"], [2, "text-align", "center", "padding", "24px", "color", "var(--mj-text-muted,#888)"], [1, "fa-solid", "fa-check-circle", 2, "font-size", "2rem", "margin-bottom", "8px", "display", "block"], [2, "font-size", "0.75rem", "color", "var(--mj-text-muted,#888)", "margin", "0 0 4px 0"], [1, "mj-input", 2, "width", "100%", "box-sizing", "border-box"], ["rows", "3", 1, "mj-textarea", 2, "width", "100%", "box-sizing", "border-box", "font-family", "monospace", "font-size", "0.8rem", 3, "placeholder"], [1, "mj-input", 2, "width", "100%", "box-sizing", "border-box", 3, "placeholder"], ["value", "false"], ["value", "true"], ["rows", "3", 1, "mj-textarea", 2, "width", "100%", "box-sizing", "border-box", "font-family", "monospace", "font-size", "0.8rem", 3, "input", "placeholder"], [1, "mj-input", 2, "width", "100%", "box-sizing", "border-box", 3, "input", "placeholder"], [2, "background", "var(--mj-status-success-bg,#f0fff4)", "border", "1px solid var(--mj-status-success-border,#9ae6b4)", "border-radius", "6px", "padding", "12px 16px", "margin-bottom", "16px", "color", "var(--mj-status-success-text,#276749)"], [2, "background", "var(--mj-status-error-bg,#fff5f5)", "border", "1px solid var(--mj-status-error-border,#feb2b2)", "border-radius", "6px", "padding", "12px 16px", "margin-bottom", "16px", "color", "var(--mj-status-error-text,#c53030)"], [2, "float", "right", "font-size", "0.75rem"], [2, "display", "block", "font-size", "0.875rem", "font-weight", "500", "margin-bottom", "4px"], [2, "background", "var(--mj-bg-surface-sunken,#f0f0f0)", "border-radius", "4px", "padding", "12px", "font-size", "0.8rem", "white-space", "pre-wrap", "word-break", "break-all", "margin", "0"], [2, "background", "var(--mj-bg-surface-sunken,#f0f0f0)", "border-radius", "4px", "padding", "12px", "font-size", "0.8rem", "white-space", "pre-wrap", "word-break", "break-all", "overflow-y", "auto", "max-height", "300px", "margin", "0"], [1, "fa-solid", "fa-arrow-right"], [1, "fa-solid", "fa-arrow-left"], ["mjButton", "", "variant", "primary", 3, "click"], [1, "fa-solid", "fa-redo"], [2, "position", "absolute", "inset", "0", "background", "rgba(0,0,0,0.35)", "pointer-events", "auto", 3, "click"], [2, "position", "absolute", "top", "0", "right", "0", "height", "100%", "width", "560px", "max-width", "95vw", "background", "var(--mj-bg-surface,#fff)", "box-shadow", "-4px 0 20px rgba(0,0,0,0.15)", "display", "flex", "flex-direction", "column", "pointer-events", "auto"], [2, "padding", "16px 20px", "border-bottom", "1px solid var(--mj-border-default,#e0e0e0)", "display", "flex", "align-items", "center", "justify-content", "space-between"], [2, "margin", "0", "font-size", "1rem", "font-weight", "600"], [2, "font-size", "0.75rem", "color", "var(--mj-text-muted,#888)", "margin-top", "4px"], [2, "font-weight", "600"], [2, "margin", "0 8px"], ["mjButton", "", "aria-label", "Close", 3, "click"], [1, "fa-solid", "fa-xmark"], [2, "flex", "1", "overflow-y", "auto", "padding", "16px 20px"], [2, "font-size", "0.75rem", "color", "var(--mj-text-muted,#888)", "margin-bottom", "4px"], [2, "font-size", "0.875rem"], [2, "font-size", "0.75rem", "color", "var(--mj-text-muted,#888)", "margin-top", "2px"], [2, "padding", "12px 20px", "border-top", "1px solid var(--mj-border-default,#e0e0e0)", "display", "flex", "gap", "8px", "justify-content", "flex-start"], ["mjButton", "", "variant", "primary"], [2, "display", "block", "font-size", "0.875rem", "font-weight", "500", "margin-bottom", "6px"], [2, "background", "var(--mj-bg-surface-sunken,#f0f0f0)", "border-radius", "4px", "padding", "12px", "font-size", "0.75rem", "white-space", "pre-wrap", "word-break", "break-all", "overflow-y", "auto", "max-height", "240px", "margin", "0"], [2, "background", "var(--mj-bg-surface-sunken,#f0f0f0)", "border-radius", "4px", "padding", "12px", "font-size", "0.75rem", "white-space", "pre-wrap", "word-break", "break-all", "overflow-y", "auto", "max-height", "360px", "margin", "0"], [2, "display", "block", "font-size", "0.875rem", "font-weight", "500", "margin-bottom", "6px", "color", "var(--mj-status-error-text,#c53030)"], [2, "background", "var(--mj-status-error-bg,#fff5f5)", "border", "1px solid var(--mj-status-error-border,#feb2b2)", "border-radius", "4px", "padding", "12px", "font-size", "0.75rem", "white-space", "pre-wrap", "word-break", "break-all", "margin", "0", "color", "var(--mj-status-error-text,#c53030)"]], template: function MCPDashboardComponent_Template(rf, ctx) { if (rf & 1) {
4294
+ i0.ɵɵelementStart(0, "mj-page-layout")(1, "mj-page-header", 18)(2, "div", 19);
4295
+ i0.ɵɵelement(3, "mj-stat-badge", 20);
4320
4296
  i0.ɵɵelementEnd();
4321
- i0.ɵɵelementStart(24, "span", 40);
4322
- i0.ɵɵtext(25);
4297
+ i0.ɵɵelementStart(4, "div", 21)(5, "mj-filter-popover", 22);
4298
+ i0.ɵɵlistener("ClearAllRequested", function MCPDashboardComponent_Template_mj_filter_popover_ClearAllRequested_5_listener() { return ctx.resetPopoverFilters(); });
4299
+ i0.ɵɵelementStart(6, "mj-filter-panel", 23);
4300
+ i0.ɵɵlistener("ValuesChange", function MCPDashboardComponent_Template_mj_filter_panel_ValuesChange_6_listener($event) { return ctx.onFilterValuesChange($event); })("Reset", function MCPDashboardComponent_Template_mj_filter_panel_Reset_6_listener() { return ctx.resetPopoverFilters(); });
4323
4301
  i0.ɵɵelementEnd()();
4324
- i0.ɵɵelementStart(26, "button", 37);
4325
- i0.ɵɵlistener("click", function MCPDashboardComponent_Template_button_click_26_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.setActiveTab("tools")); });
4326
- i0.ɵɵelement(27, "i", 42);
4327
- i0.ɵɵelementStart(28, "span", 39);
4328
- i0.ɵɵtext(29, "Tools");
4302
+ i0.ɵɵelementStart(7, "mj-tab-nav", 24);
4303
+ i0.ɵɵlistener("TabChange", function MCPDashboardComponent_Template_mj_tab_nav_TabChange_7_listener($event) { return ctx.setActiveTab($event); });
4329
4304
  i0.ɵɵelementEnd();
4330
- i0.ɵɵelementStart(30, "span", 40);
4331
- i0.ɵɵtext(31);
4332
- i0.ɵɵelementEnd()();
4333
- i0.ɵɵelementStart(32, "button", 37);
4334
- i0.ɵɵlistener("click", function MCPDashboardComponent_Template_button_click_32_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.setActiveTab("logs")); });
4335
- i0.ɵɵelement(33, "i", 43);
4336
- i0.ɵɵelementStart(34, "span", 39);
4337
- i0.ɵɵtext(35, "Logs");
4305
+ i0.ɵɵconditionalCreate(8, MCPDashboardComponent_Case_8_Template, 3, 0, "button", 25)(9, MCPDashboardComponent_Case_9_Template, 3, 0, "button", 25)(10, MCPDashboardComponent_Case_10_Template, 7, 8)(11, MCPDashboardComponent_Case_11_Template, 1, 1, "mj-refresh-button", 26);
4338
4306
  i0.ɵɵelementEnd();
4339
- i0.ɵɵelementStart(36, "span", 40);
4340
- i0.ɵɵtext(37);
4307
+ i0.ɵɵelementStart(12, "div", 27)(13, "mj-page-search", 28);
4308
+ i0.ɵɵlistener("ValueChange", function MCPDashboardComponent_Template_mj_page_search_ValueChange_13_listener($event) { return ctx.onSearchTermChange($event); });
4341
4309
  i0.ɵɵelementEnd()()();
4342
- i0.ɵɵconditionalCreate(38, MCPDashboardComponent_Case_38_Template, 3, 0, "button", 44)(39, MCPDashboardComponent_Case_39_Template, 3, 0, "button", 44)(40, MCPDashboardComponent_Case_40_Template, 8, 4)(41, MCPDashboardComponent_Case_41_Template, 3, 3, "button", 45);
4343
- i0.ɵɵelementEnd()();
4344
- i0.ɵɵelementStart(42, "div", 46)(43, "div", 47)(44, "div", 48)(45, "div", 49)(46, "div", 50)(47, "h3", 51);
4345
- i0.ɵɵtext(48, "MCP Filters");
4346
- i0.ɵɵelementEnd();
4347
- i0.ɵɵconditionalCreate(49, MCPDashboardComponent_Conditional_49_Template, 2, 1, "span", 52);
4348
- i0.ɵɵelementEnd();
4349
- i0.ɵɵelementStart(50, "div", 53);
4350
- i0.ɵɵtext(51);
4351
- i0.ɵɵelementEnd()();
4352
- i0.ɵɵelementStart(52, "div", 54)(53, "label", 55);
4353
- i0.ɵɵelement(54, "i", 56);
4354
- i0.ɵɵtext(55, " Search");
4355
- i0.ɵɵelementEnd();
4356
- i0.ɵɵelementStart(56, "input", 57, 0);
4357
- i0.ɵɵlistener("input", function MCPDashboardComponent_Template_input_input_56_listener() { i0.ɵɵrestoreView(_r1); const fSearch_r7 = i0.ɵɵreference(57); return i0.ɵɵresetView(ctx.onFilterFieldChange("searchTerm", fSearch_r7.value)); });
4310
+ i0.ɵɵelementStart(14, "mj-page-body", 29);
4311
+ i0.ɵɵconditionalCreate(15, MCPDashboardComponent_Conditional_15_Template, 5, 1, "div", 30);
4312
+ i0.ɵɵconditionalCreate(16, MCPDashboardComponent_Conditional_16_Template, 1, 0, "mj-loading", 31)(17, MCPDashboardComponent_Conditional_17_Template, 4, 1);
4358
4313
  i0.ɵɵelementEnd()();
4359
- i0.ɵɵconditionalCreate(58, MCPDashboardComponent_Conditional_58_Template, 32, 4);
4360
- i0.ɵɵconditionalCreate(59, MCPDashboardComponent_Conditional_59_Template, 12, 1, "div", 54);
4361
- i0.ɵɵconditionalCreate(60, MCPDashboardComponent_Conditional_60_Template, 14, 1, "div", 54);
4362
- i0.ɵɵconditionalCreate(61, MCPDashboardComponent_Conditional_61_Template, 12, 1, "div", 54);
4363
- i0.ɵɵconditionalCreate(62, MCPDashboardComponent_Conditional_62_Template, 14, 1, "div", 54);
4364
- i0.ɵɵelementStart(63, "div", 58)(64, "button", 59);
4365
- i0.ɵɵlistener("click", function MCPDashboardComponent_Template_button_click_64_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.resetAllFilters()); });
4366
- i0.ɵɵelement(65, "i", 60);
4367
- i0.ɵɵtext(66, " Reset Filters ");
4368
- i0.ɵɵelementEnd()()();
4369
- i0.ɵɵelement(67, "div", 61);
4370
- i0.ɵɵelementEnd();
4371
- i0.ɵɵelementStart(68, "div", 62);
4372
- i0.ɵɵconditionalCreate(69, MCPDashboardComponent_Conditional_69_Template, 5, 1, "div", 63);
4373
- i0.ɵɵelementStart(70, "div", 64);
4374
- i0.ɵɵconditionalCreate(71, MCPDashboardComponent_Conditional_71_Template, 1, 0, "mj-loading", 65)(72, MCPDashboardComponent_Conditional_72_Template, 4, 1);
4375
- i0.ɵɵelementEnd()()()();
4376
- i0.ɵɵconditionalCreate(73, MCPDashboardComponent_Conditional_73_Template, 54, 12, "div", 66);
4377
- i0.ɵɵconditionalCreate(74, MCPDashboardComponent_Conditional_74_Template, 49, 7, "div", 66);
4378
- i0.ɵɵconditionalCreate(75, MCPDashboardComponent_Conditional_75_Template, 27, 9, "div", 66);
4379
- i0.ɵɵconditionalCreate(76, MCPDashboardComponent_Conditional_76_Template, 31, 12, "div", 67);
4314
+ i0.ɵɵconditionalCreate(18, MCPDashboardComponent_Conditional_18_Template, 54, 12, "div", 32);
4315
+ i0.ɵɵconditionalCreate(19, MCPDashboardComponent_Conditional_19_Template, 49, 7, "div", 32);
4316
+ i0.ɵɵconditionalCreate(20, MCPDashboardComponent_Conditional_20_Template, 27, 9, "div", 32);
4317
+ i0.ɵɵconditionalCreate(21, MCPDashboardComponent_Conditional_21_Template, 31, 12, "div", 33);
4380
4318
  } if (rf & 2) {
4381
- let tmp_12_0;
4382
- i0.ɵɵadvance(8);
4383
- i0.ɵɵconditional(ctx.FilterPanelVisible ? 8 : 9);
4319
+ let tmp_8_0;
4384
4320
  i0.ɵɵadvance(3);
4385
- i0.ɵɵtextInterpolate2("", ctx.CurrentFilteredCount, " of ", ctx.CurrentTotalCount, " items");
4386
- i0.ɵɵadvance(3);
4387
- i0.ɵɵclassProp("active", ctx.ActiveTab === "servers");
4388
- i0.ɵɵadvance(5);
4389
- i0.ɵɵtextInterpolate(ctx.servers.length);
4390
- i0.ɵɵadvance();
4391
- i0.ɵɵclassProp("active", ctx.ActiveTab === "connections");
4392
- i0.ɵɵadvance(5);
4393
- i0.ɵɵtextInterpolate(ctx.connections.length);
4394
- i0.ɵɵadvance();
4395
- i0.ɵɵclassProp("active", ctx.ActiveTab === "tools");
4396
- i0.ɵɵadvance(5);
4397
- i0.ɵɵtextInterpolate(ctx.tools.length);
4321
+ i0.ɵɵproperty("Count", ctx.CurrentFilteredCount)("Total", ctx.CurrentTotalCount);
4322
+ i0.ɵɵadvance(2);
4323
+ i0.ɵɵproperty("ActiveCount", ctx.ActiveFilterCount)("ShowClearAll", ctx.ActiveFilterCount > 0);
4398
4324
  i0.ɵɵadvance();
4399
- i0.ɵɵclassProp("active", ctx.ActiveTab === "logs");
4400
- i0.ɵɵadvance(4);
4401
- i0.ɵɵclassProp("has-errors", ctx.stats.failedExecutions > 0);
4325
+ i0.ɵɵproperty("Fields", ctx.mcpFilterFields)("Values", ctx.mcpFilterValues);
4402
4326
  i0.ɵɵadvance();
4403
- i0.ɵɵtextInterpolate(ctx.executionLogs.length);
4327
+ i0.ɵɵproperty("Tabs", ctx.mcpTabs)("ActiveKey", ctx.ActiveTab);
4404
4328
  i0.ɵɵadvance();
4405
- i0.ɵɵconditional((tmp_12_0 = ctx.ActiveTab) === "servers" ? 38 : tmp_12_0 === "connections" ? 39 : tmp_12_0 === "tools" ? 40 : tmp_12_0 === "logs" ? 41 : -1);
4406
- i0.ɵɵadvance(5);
4407
- i0.ɵɵclassProp("hidden", !ctx.FilterPanelVisible);
4408
- i0.ɵɵadvance(6);
4409
- i0.ɵɵconditional(ctx.activeFilterCount() > 0 ? 49 : -1);
4410
- i0.ɵɵadvance(2);
4411
- i0.ɵɵtextInterpolate2("", ctx.CurrentFilteredCount, " / ", ctx.CurrentTotalCount);
4329
+ i0.ɵɵconditional((tmp_8_0 = ctx.ActiveTab) === "servers" ? 8 : tmp_8_0 === "connections" ? 9 : tmp_8_0 === "tools" ? 10 : tmp_8_0 === "logs" ? 11 : -1);
4412
4330
  i0.ɵɵadvance(5);
4413
- i0.ɵɵproperty("value", ctx.CurrentFilters.searchTerm);
4414
- i0.ɵɵadvance(2);
4415
- i0.ɵɵconditional(ctx.ActiveTab === "tools" ? 58 : -1);
4416
- i0.ɵɵadvance();
4417
- i0.ɵɵconditional(ctx.ActiveTab === "servers" ? 59 : -1);
4331
+ i0.ɵɵproperty("Value", ctx.CurrentFilters.searchTerm);
4418
4332
  i0.ɵɵadvance();
4419
- i0.ɵɵconditional(ctx.ActiveTab === "connections" ? 60 : -1);
4333
+ i0.ɵɵproperty("Flex", true);
4420
4334
  i0.ɵɵadvance();
4421
- i0.ɵɵconditional(ctx.ActiveTab === "tools" ? 61 : -1);
4335
+ i0.ɵɵconditional(ctx.ErrorMessage ? 15 : -1);
4422
4336
  i0.ɵɵadvance();
4423
- i0.ɵɵconditional(ctx.ActiveTab === "logs" ? 62 : -1);
4424
- i0.ɵɵadvance(7);
4425
- i0.ɵɵconditional(ctx.ErrorMessage ? 69 : -1);
4426
- i0.ɵɵadvance(2);
4427
- i0.ɵɵconditional(ctx.IsLoading ? 71 : 72);
4337
+ i0.ɵɵconditional(ctx.IsLoading ? 16 : 17);
4428
4338
  i0.ɵɵadvance(2);
4429
- i0.ɵɵconditional(ctx.ShowServerDialog ? 73 : -1);
4339
+ i0.ɵɵconditional(ctx.ShowServerDialog ? 18 : -1);
4430
4340
  i0.ɵɵadvance();
4431
- i0.ɵɵconditional(ctx.ShowConnectionDialog ? 74 : -1);
4341
+ i0.ɵɵconditional(ctx.ShowConnectionDialog ? 19 : -1);
4432
4342
  i0.ɵɵadvance();
4433
- i0.ɵɵconditional(ctx.ShowTestToolDialog ? 75 : -1);
4343
+ i0.ɵɵconditional(ctx.ShowTestToolDialog ? 20 : -1);
4434
4344
  i0.ɵɵadvance();
4435
- i0.ɵɵconditional(ctx.ShowLogDetailPanel && ctx.SelectedLog ? 76 : -1);
4436
- } }, dependencies: [i2.NgClass, i3.NgSelectOption, i3.ɵNgSelectMultipleOption, i4.MJButtonDirective, i5.LoadingComponent], styles: ["\n\n.mcp-dashboard[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--mj-bg-page);\n overflow: hidden;\n}\n\n\n\n\n\n.dashboard-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 20px;\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n gap: 16px;\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 display: flex;\n align-items: center;\n gap: 10px;\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.dashboard-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 20px;\n}\n\n.filter-toggle-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n cursor: pointer;\n font-size: 13px;\n color: var(--mj-text-secondary);\n transition: all 0.2s ease;\n}\n\n.filter-toggle-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-primary);\n}\n\n.filter-toggle-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n}\n\n.item-count[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-secondary);\n padding: 4px 10px;\n background: var(--mj-bg-surface-card);\n border-radius: 4px;\n}\n\n.header-controls[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n\n\n.tab-nav[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n background: var(--mj-bg-surface-card);\n padding: 4px;\n border-radius: 8px;\n}\n\n.tab-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 14px;\n background: transparent;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n transition: all 0.2s ease;\n}\n\n.tab-btn[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-bg-surface) 70%, transparent);\n color: var(--mj-text-primary);\n}\n\n.tab-btn.active[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n color: var(--mj-brand-primary);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n}\n\n.tab-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n.tab-label[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n\n.tab-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 22px;\n height: 18px;\n padding: 0 6px;\n background: var(--mj-border-default);\n border-radius: 9px;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-muted);\n}\n\n.tab-btn.active[_ngcontent-%COMP%] .tab-badge[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n color: var(--mj-brand-primary);\n}\n\n.tab-badge.has-errors[_ngcontent-%COMP%] {\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n}\n\n\n\n\n\n.main-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: row;\n flex: 1;\n overflow: hidden;\n min-width: 0;\n}\n\n\n\n.filter-panel-container[_ngcontent-%COMP%] {\n display: flex;\n flex-shrink: 0;\n width: 280px;\n min-width: 200px;\n max-width: 400px;\n background: var(--mj-bg-surface);\n border-right: 1px solid var(--mj-border-default);\n position: relative;\n transition: width 0.2s ease, margin 0.2s ease;\n}\n\n.filter-panel-container.hidden[_ngcontent-%COMP%] {\n width: 0;\n min-width: 0;\n margin-left: -1px;\n overflow: hidden;\n}\n\n\n\n.resize-handle[_ngcontent-%COMP%] {\n position: absolute;\n top: 0;\n right: 0;\n width: 4px;\n height: 100%;\n cursor: col-resize;\n background: transparent;\n transition: background 0.2s ease;\n z-index: 10;\n}\n\n.resize-handle[_ngcontent-%COMP%]:hover, \n.resize-handle[_ngcontent-%COMP%]:active {\n background: var(--mj-brand-primary);\n}\n\n\n\n.content-area[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow: hidden;\n min-width: 0;\n}\n\n\n\n.content-body[_ngcontent-%COMP%] {\n flex: 1;\n padding: 20px 24px;\n overflow: auto;\n}\n\n\n\n.error-banner[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 16px;\n margin: 16px 24px 0 24px;\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n border: 1px solid var(--mj-status-error);\n border-radius: 8px;\n color: var(--mj-status-error);\n}\n\n.error-banner[_ngcontent-%COMP%] .close-btn[_ngcontent-%COMP%] {\n margin-left: auto;\n background: none;\n border: none;\n cursor: pointer;\n color: var(--mj-status-error);\n padding: 4px;\n}\n\n\n\n\n\n\n\n\n.data-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(350px, 1fr));\n gap: 16px;\n}\n\n.data-card[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n background: var(--mj-bg-surface);\n transition: box-shadow 0.2s ease;\n}\n\n.data-card[_ngcontent-%COMP%]:hover {\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n}\n\n.card-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 16px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.card-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.card-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.card-title[_ngcontent-%COMP%] .name[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 15px;\n}\n\n.card-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n}\n\n.card-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n padding: 4px 8px;\n}\n\n.card-body[_ngcontent-%COMP%] {\n padding: 16px;\n}\n\n.card-body[_ngcontent-%COMP%] .description[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n color: var(--mj-text-secondary);\n font-size: 13px;\n}\n\n.details-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 12px;\n}\n\n.detail[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.detail.full-width[_ngcontent-%COMP%] {\n grid-column: 1 / -1;\n}\n\n.detail.error[_ngcontent-%COMP%] .value[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.detail[_ngcontent-%COMP%] .label[_ngcontent-%COMP%] {\n font-size: 11px;\n text-transform: uppercase;\n color: var(--mj-text-disabled);\n font-weight: 500;\n}\n\n.detail[_ngcontent-%COMP%] .value[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-primary);\n}\n\n.detail[_ngcontent-%COMP%] .value.url[_ngcontent-%COMP%], \n.detail[_ngcontent-%COMP%] .value.command[_ngcontent-%COMP%] {\n font-family: monospace;\n font-size: 12px;\n background: var(--mj-bg-surface-card);\n padding: 4px 8px;\n border-radius: 4px;\n word-break: break-all;\n}\n\n\n\n.status-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 8px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.status-active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 10%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.status-inactive[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-text-disabled) 10%, var(--mj-bg-surface));\n color: var(--mj-text-disabled);\n}\n\n.status-error[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.status-deprecated[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 10%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.status-unknown[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-text-disabled) 10%, var(--mj-bg-surface));\n color: var(--mj-text-disabled);\n}\n\n\n\n.sync-progress-banner[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 16px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-bottom: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n color: var(--mj-brand-primary);\n font-size: 13px;\n}\n\n.sync-progress-banner[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.sync-progress-banner[_ngcontent-%COMP%] .sync-message[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.sync-result-banner[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n font-size: 12px;\n border-bottom: 1px solid;\n}\n\n.sync-result-banner.success[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 8%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-success) 20%, transparent);\n color: var(--mj-color-success-700);\n}\n\n.sync-result-banner.success[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.sync-result-banner.error[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-error) 20%, transparent);\n color: var(--mj-status-error);\n}\n\n.sync-result-banner.error[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n\n\n.data-table[_ngcontent-%COMP%] {\n overflow: auto;\n background: var(--mj-bg-surface);\n border-radius: 8px;\n border: 1px solid var(--mj-border-default);\n}\n\n.data-table[_ngcontent-%COMP%] table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n}\n\n.data-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%], \n.data-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 12px 16px;\n text-align: left;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.data-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n font-size: 11px;\n text-transform: uppercase;\n color: var(--mj-text-disabled);\n font-weight: 600;\n background: var(--mj-bg-surface-card);\n position: sticky;\n top: 0;\n}\n\n.data-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] {\n cursor: pointer;\n transition: background 0.2s ease;\n}\n\n.data-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.data-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:last-child td[_ngcontent-%COMP%] {\n border-bottom: none;\n}\n\n.data-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr.error-row[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 5%, var(--mj-bg-surface));\n}\n\n.data-table[_ngcontent-%COMP%] .tool-name[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n}\n\n.data-table[_ngcontent-%COMP%] .tool-name[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.data-table[_ngcontent-%COMP%] .error-message[_ngcontent-%COMP%] {\n max-width: 200px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--mj-status-error);\n font-size: 12px;\n}\n\n.data-table[_ngcontent-%COMP%] .server-name[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-size: 13px;\n}\n\n\n\n.data-table[_ngcontent-%COMP%] th.sortable[_ngcontent-%COMP%] {\n cursor: pointer;\n user-select: none;\n transition: background 0.15s ease;\n}\n\n.data-table[_ngcontent-%COMP%] th.sortable[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.data-table[_ngcontent-%COMP%] th.sortable[_ngcontent-%COMP%] .sort-icon[_ngcontent-%COMP%] {\n margin-left: 6px;\n font-size: 10px;\n color: var(--mj-border-strong);\n transition: color 0.15s ease;\n}\n\n.data-table[_ngcontent-%COMP%] th.sortable[_ngcontent-%COMP%]:hover .sort-icon[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n}\n\n.data-table[_ngcontent-%COMP%] th.sorted-asc[_ngcontent-%COMP%] .sort-icon[_ngcontent-%COMP%], \n.data-table[_ngcontent-%COMP%] th.sorted-desc[_ngcontent-%COMP%] .sort-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n\n\n.status-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 20px;\n text-align: center;\n background: var(--mj-bg-surface);\n border-radius: 8px;\n border: 1px solid var(--mj-border-default);\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 48px;\n color: var(--mj-border-default);\n margin-bottom: 16px;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n font-size: 16px;\n color: var(--mj-text-primary);\n}\n\n.empty-state[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-secondary);\n margin-bottom: 16px;\n}\n\n\n\n\n\n.view-toggle[_ngcontent-%COMP%] {\n display: flex;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.view-toggle[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n border-radius: 0;\n border: none;\n padding: 6px 10px;\n}\n\n.view-toggle[_ngcontent-%COMP%] button.active[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-color-neutral-0);\n}\n\n\n\n\n\n.tools-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.server-group[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n}\n\n.server-group-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 16px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n cursor: pointer;\n transition: background 0.2s ease;\n}\n\n.server-group-header[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.server-group.collapsed[_ngcontent-%COMP%] .server-group-header[_ngcontent-%COMP%] {\n border-bottom: none;\n}\n\n.server-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.expand-icon[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-disabled);\n transition: transform 0.2s ease;\n}\n\n.expand-icon.expanded[_ngcontent-%COMP%] {\n transform: rotate(90deg);\n}\n\n.server-name[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 15px;\n color: var(--mj-text-primary);\n}\n\n.tool-count[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n background: rgba(0, 0, 0, 0.05);\n padding: 2px 8px;\n border-radius: 10px;\n}\n\n.status-badge.small[_ngcontent-%COMP%] {\n padding: 2px 6px;\n font-size: 10px;\n}\n\n.server-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n}\n\n\n\n\n\n.tools-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 12px;\n padding: 16px;\n}\n\n.tool-card[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n transition: all 0.2s ease;\n overflow: hidden;\n}\n\n.tool-card[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.tool-card.expanded[_ngcontent-%COMP%] {\n border-color: var(--mj-brand-primary);\n}\n\n.tool-card-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n padding: 12px 14px;\n cursor: pointer;\n}\n\n.tool-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n flex: 1;\n}\n\n.tool-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.tool-title[_ngcontent-%COMP%] .name[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 14px;\n color: var(--mj-text-primary);\n}\n\n.tool-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.param-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 8px;\n background: var(--mj-bg-surface-card);\n border-radius: 10px;\n font-size: 11px;\n color: var(--mj-text-secondary);\n}\n\n.param-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.tool-description[_ngcontent-%COMP%] {\n margin: 0;\n padding: 0 14px 8px 14px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n line-height: 1.4;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n.tool-card-actions[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n padding: 8px 14px;\n border-top: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n}\n\n\n\n.tool-details[_ngcontent-%COMP%] {\n padding: 12px 14px;\n background: var(--mj-bg-surface-card);\n border-top: 1px solid var(--mj-border-default);\n}\n\n.tool-details[_ngcontent-%COMP%] .detail-row[_ngcontent-%COMP%] {\n display: flex;\n padding: 6px 0;\n font-size: 12px;\n}\n\n.tool-details[_ngcontent-%COMP%] .detail-row.full[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 6px;\n}\n\n.tool-details[_ngcontent-%COMP%] .detail-label[_ngcontent-%COMP%] {\n min-width: 100px;\n color: var(--mj-text-secondary);\n font-weight: 500;\n}\n\n.tool-details[_ngcontent-%COMP%] .detail-value[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n}\n\n.tool-details[_ngcontent-%COMP%] .detail-value.mono[_ngcontent-%COMP%] {\n font-family: 'Consolas', 'Monaco', monospace;\n background: var(--mj-bg-surface);\n padding: 2px 6px;\n border-radius: 3px;\n border: 1px solid var(--mj-border-default);\n}\n\n.schema-preview[_ngcontent-%COMP%] {\n margin: 0;\n padding: 10px 12px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n font-family: 'Consolas', 'Monaco', monospace;\n font-size: 11px;\n line-height: 1.4;\n max-height: 200px;\n overflow: auto;\n white-space: pre-wrap;\n word-break: break-word;\n}\n\n\n\n\n\n.tools-list[_ngcontent-%COMP%] {\n overflow: auto;\n}\n\n.tools-list[_ngcontent-%COMP%] table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n}\n\n.tools-list[_ngcontent-%COMP%] th[_ngcontent-%COMP%], \n.tools-list[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 10px 14px;\n text-align: left;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.tools-list[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n font-size: 11px;\n text-transform: uppercase;\n color: var(--mj-text-disabled);\n font-weight: 600;\n background: var(--mj-bg-surface-card);\n position: sticky;\n top: 0;\n}\n\n.tools-list[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] {\n transition: background 0.15s ease;\n}\n\n.tools-list[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.tools-list[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr.expanded[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n}\n\n.tool-name-cell[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n}\n\n.tool-name-cell[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n margin-top: 2px;\n}\n\n.tool-name-info[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.tool-name-info[_ngcontent-%COMP%] .tool-title[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.tool-name-info[_ngcontent-%COMP%] .tool-code[_ngcontent-%COMP%] {\n font-size: 11px;\n font-family: monospace;\n color: var(--mj-text-secondary);\n}\n\n.description-cell[_ngcontent-%COMP%] {\n max-width: 300px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.param-count[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 24px;\n height: 24px;\n background: var(--mj-bg-surface-card);\n border-radius: 12px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n}\n\n.actions-cell[_ngcontent-%COMP%] {\n white-space: nowrap;\n}\n\n\n\n.detail-row-expanded[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 0;\n background: var(--mj-bg-surface-card);\n}\n\n.inline-details[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 16px;\n padding: 14px;\n border-top: 1px dashed var(--mj-border-default);\n}\n\n.inline-details[_ngcontent-%COMP%] .detail-section[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n font-size: 12px;\n}\n\n.inline-details[_ngcontent-%COMP%] .detail-section.full[_ngcontent-%COMP%] {\n flex-basis: 100%;\n flex-direction: column;\n gap: 6px;\n}\n\n.inline-details[_ngcontent-%COMP%] .detail-label[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-weight: 500;\n}\n\n.inline-details[_ngcontent-%COMP%] .detail-value[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n}\n\n.inline-details[_ngcontent-%COMP%] .detail-value.mono[_ngcontent-%COMP%] {\n font-family: monospace;\n}\n\n\n\n\n\n@media (max-width: 900px) {\n .mcp-dashboard[_ngcontent-%COMP%] {\n flex-direction: column;\n }\n\n .sidebar[_ngcontent-%COMP%] {\n width: 100%;\n min-width: 100%;\n flex-direction: row;\n height: auto;\n border-right: none;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .sidebar-header[_ngcontent-%COMP%] {\n padding: 12px 16px;\n border-bottom: none;\n border-right: 1px solid var(--mj-border-default);\n }\n\n .sidebar-nav[_ngcontent-%COMP%] {\n flex-direction: row;\n padding: 8px;\n overflow-x: auto;\n flex: 1;\n }\n\n .nav-item[_ngcontent-%COMP%] {\n padding: 8px 12px;\n margin-bottom: 0;\n margin-right: 4px;\n white-space: nowrap;\n }\n\n .sidebar-stats[_ngcontent-%COMP%] {\n display: none;\n }\n\n .sidebar-footer[_ngcontent-%COMP%] {\n border-top: none;\n border-left: 1px solid var(--mj-border-default);\n padding: 8px;\n }\n\n .data-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .header-actions[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n }\n\n .search-box[_ngcontent-%COMP%] {\n min-width: 100%;\n order: 1;\n }\n}\n\n@media (max-width: 600px) {\n .content-header[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: flex-start;\n gap: 12px;\n }\n\n .header-actions[_ngcontent-%COMP%] {\n width: 100%;\n }\n\n .search-box[_ngcontent-%COMP%] {\n width: 100%;\n }\n}\n\n\n\n\n\n.clickable-row[_ngcontent-%COMP%] {\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.clickable-row[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 5%, transparent) !important;\n}\n\n.clickable-row[_ngcontent-%COMP%] .action-cell[_ngcontent-%COMP%] {\n color: var(--mj-border-strong);\n transition: color 0.15s ease;\n}\n\n.clickable-row[_ngcontent-%COMP%]:hover .action-cell[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.action-cell[_ngcontent-%COMP%] {\n width: 40px;\n text-align: center;\n}\n\n\n\n\n\n.card-header.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.card-header.clickable[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.expand-arrow[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-disabled);\n transition: transform 0.2s ease;\n margin-right: 4px;\n}\n\n.expand-arrow.rotated[_ngcontent-%COMP%] {\n transform: rotate(90deg);\n}\n\n.data-card.expanded[_ngcontent-%COMP%] {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n\n\n\n\n.expanded-tools-section[_ngcontent-%COMP%] {\n border-top: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n}\n\n.tools-section-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 16px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-brand-primary);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.tools-section-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n.no-tools-message[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 16px;\n color: var(--mj-text-secondary);\n font-size: 13px;\n}\n\n.no-tools-message[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n}\n\n\n\n.tools-mini-list[_ngcontent-%COMP%] {\n padding: 8px;\n display: flex;\n flex-direction: column;\n gap: 4px;\n max-height: 300px;\n overflow-y: auto;\n}\n\n.tool-mini-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 12px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n transition: all 0.15s ease;\n}\n\n.tool-mini-card[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 2%, transparent);\n}\n\n.tool-mini-info[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n flex: 1;\n min-width: 0;\n}\n\n.tool-mini-name[_ngcontent-%COMP%] {\n font-weight: 500;\n font-size: 13px;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.tool-mini-params[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 11px;\n color: var(--mj-text-secondary);\n}\n\n.tool-mini-params[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.tool-mini-card[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n flex-shrink: 0;\n margin-left: 8px;\n}\n\n\n\n[_nghost-%COMP%] .search-highlight, \n.search-highlight[_ngcontent-%COMP%] {\n background-color: color-mix(in srgb, var(--mj-status-warning) 40%, var(--mj-bg-surface));\n padding: 1px 2px;\n border-radius: 2px;\n font-weight: inherit;\n}"] });
4345
+ i0.ɵɵconditional(ctx.ShowLogDetailPanel && ctx.SelectedLog ? 21 : -1);
4346
+ } }, dependencies: [i2.NgClass, i3.NgSelectOption, i3.ɵNgSelectMultipleOption, i4.MJButtonDirective, i4.MJPageHeaderComponent, i4.MJPageLayoutComponent, i4.MJPageBodyComponent, i4.MJFilterPopoverComponent, i4.MJFilterPanelComponent, i4.MJPageSearchComponent, i4.MJTabNavComponent, i4.MJViewToggleComponent, i4.MJRefreshButtonComponent, i4.MJStatBadgeComponent, i5.LoadingComponent], styles: ["\n\n\n\n\n\n\n\n\n\n\n\n.error-banner[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 16px;\n margin: 0 0 16px 0;\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n border: 1px solid var(--mj-status-error);\n border-radius: 8px;\n color: var(--mj-status-error);\n}\n\n.error-banner[_ngcontent-%COMP%] .close-btn[_ngcontent-%COMP%] {\n margin-left: auto;\n background: none;\n border: none;\n cursor: pointer;\n color: var(--mj-status-error);\n padding: 4px;\n}\n\n\n\n\n\n\n\n\n.data-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(350px, 1fr));\n gap: 16px;\n}\n\n.data-card[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n background: var(--mj-bg-surface);\n transition: box-shadow 0.2s ease;\n}\n\n.data-card[_ngcontent-%COMP%]:hover {\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n}\n\n.card-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 16px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.card-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.card-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.card-title[_ngcontent-%COMP%] .name[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 15px;\n}\n\n.card-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n}\n\n.card-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n padding: 4px 8px;\n}\n\n.card-body[_ngcontent-%COMP%] {\n padding: 16px;\n}\n\n.card-body[_ngcontent-%COMP%] .description[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n color: var(--mj-text-secondary);\n font-size: 13px;\n}\n\n.details-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 12px;\n}\n\n.detail[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.detail.full-width[_ngcontent-%COMP%] {\n grid-column: 1 / -1;\n}\n\n.detail.error[_ngcontent-%COMP%] .value[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.detail[_ngcontent-%COMP%] .label[_ngcontent-%COMP%] {\n font-size: 11px;\n text-transform: uppercase;\n color: var(--mj-text-disabled);\n font-weight: 500;\n}\n\n.detail[_ngcontent-%COMP%] .value[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-primary);\n}\n\n.detail[_ngcontent-%COMP%] .value.url[_ngcontent-%COMP%], \n.detail[_ngcontent-%COMP%] .value.command[_ngcontent-%COMP%] {\n font-family: monospace;\n font-size: 12px;\n background: var(--mj-bg-surface-card);\n padding: 4px 8px;\n border-radius: 4px;\n word-break: break-all;\n}\n\n\n\n.status-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 8px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.status-active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 10%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.status-inactive[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-text-disabled) 10%, var(--mj-bg-surface));\n color: var(--mj-text-disabled);\n}\n\n.status-error[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.status-deprecated[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 10%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.status-unknown[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-text-disabled) 10%, var(--mj-bg-surface));\n color: var(--mj-text-disabled);\n}\n\n\n\n.sync-progress-banner[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 16px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-bottom: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n color: var(--mj-brand-primary);\n font-size: 13px;\n}\n\n.sync-progress-banner[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.sync-progress-banner[_ngcontent-%COMP%] .sync-message[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.sync-result-banner[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n font-size: 12px;\n border-bottom: 1px solid;\n}\n\n.sync-result-banner.success[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 8%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-success) 20%, transparent);\n color: var(--mj-color-success-700);\n}\n\n.sync-result-banner.success[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.sync-result-banner.error[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-error) 20%, transparent);\n color: var(--mj-status-error);\n}\n\n.sync-result-banner.error[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n\n\n.data-table[_ngcontent-%COMP%] {\n overflow: auto;\n background: var(--mj-bg-surface);\n border-radius: 8px;\n border: 1px solid var(--mj-border-default);\n}\n\n.data-table[_ngcontent-%COMP%] table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n}\n\n.data-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%], \n.data-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 12px 16px;\n text-align: left;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.data-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n font-size: 11px;\n text-transform: uppercase;\n color: var(--mj-text-disabled);\n font-weight: 600;\n background: var(--mj-bg-surface-card);\n position: sticky;\n top: 0;\n}\n\n.data-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] {\n cursor: pointer;\n transition: background 0.2s ease;\n}\n\n.data-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.data-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:last-child td[_ngcontent-%COMP%] {\n border-bottom: none;\n}\n\n.data-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr.error-row[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 5%, var(--mj-bg-surface));\n}\n\n.data-table[_ngcontent-%COMP%] .tool-name[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n}\n\n.data-table[_ngcontent-%COMP%] .tool-name[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.data-table[_ngcontent-%COMP%] .error-message[_ngcontent-%COMP%] {\n max-width: 200px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--mj-status-error);\n font-size: 12px;\n}\n\n.data-table[_ngcontent-%COMP%] .server-name[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-size: 13px;\n}\n\n\n\n.data-table[_ngcontent-%COMP%] th.sortable[_ngcontent-%COMP%] {\n cursor: pointer;\n user-select: none;\n transition: background 0.15s ease;\n}\n\n.data-table[_ngcontent-%COMP%] th.sortable[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.data-table[_ngcontent-%COMP%] th.sortable[_ngcontent-%COMP%] .sort-icon[_ngcontent-%COMP%] {\n margin-left: 6px;\n font-size: 10px;\n color: var(--mj-border-strong);\n transition: color 0.15s ease;\n}\n\n.data-table[_ngcontent-%COMP%] th.sortable[_ngcontent-%COMP%]:hover .sort-icon[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n}\n\n.data-table[_ngcontent-%COMP%] th.sorted-asc[_ngcontent-%COMP%] .sort-icon[_ngcontent-%COMP%], \n.data-table[_ngcontent-%COMP%] th.sorted-desc[_ngcontent-%COMP%] .sort-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n\n\n.status-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 20px;\n text-align: center;\n background: var(--mj-bg-surface);\n border-radius: 8px;\n border: 1px solid var(--mj-border-default);\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 48px;\n color: var(--mj-border-default);\n margin-bottom: 16px;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n font-size: 16px;\n color: var(--mj-text-primary);\n}\n\n.empty-state[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-secondary);\n margin-bottom: 16px;\n}\n\n\n\n\n\n\n\n\n\n\n.tools-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.server-group[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n}\n\n.server-group-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 16px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n cursor: pointer;\n transition: background 0.2s ease;\n}\n\n.server-group-header[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.server-group.collapsed[_ngcontent-%COMP%] .server-group-header[_ngcontent-%COMP%] {\n border-bottom: none;\n}\n\n.server-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.expand-icon[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-disabled);\n transition: transform 0.2s ease;\n}\n\n.expand-icon.expanded[_ngcontent-%COMP%] {\n transform: rotate(90deg);\n}\n\n.server-name[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 15px;\n color: var(--mj-text-primary);\n}\n\n.tool-count[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n background: rgba(0, 0, 0, 0.05);\n padding: 2px 8px;\n border-radius: 10px;\n}\n\n.status-badge.small[_ngcontent-%COMP%] {\n padding: 2px 6px;\n font-size: 10px;\n}\n\n.server-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n}\n\n\n\n\n\n.tools-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 12px;\n padding: 16px;\n}\n\n.tool-card[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n transition: all 0.2s ease;\n overflow: hidden;\n}\n\n.tool-card[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.tool-card.expanded[_ngcontent-%COMP%] {\n border-color: var(--mj-brand-primary);\n}\n\n.tool-card-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n padding: 12px 14px;\n cursor: pointer;\n}\n\n.tool-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n flex: 1;\n}\n\n.tool-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.tool-title[_ngcontent-%COMP%] .name[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 14px;\n color: var(--mj-text-primary);\n}\n\n.tool-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.param-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 8px;\n background: var(--mj-bg-surface-card);\n border-radius: 10px;\n font-size: 11px;\n color: var(--mj-text-secondary);\n}\n\n.param-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.tool-description[_ngcontent-%COMP%] {\n margin: 0;\n padding: 0 14px 8px 14px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n line-height: 1.4;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n.tool-card-actions[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n padding: 8px 14px;\n border-top: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n}\n\n\n\n.tool-details[_ngcontent-%COMP%] {\n padding: 12px 14px;\n background: var(--mj-bg-surface-card);\n border-top: 1px solid var(--mj-border-default);\n}\n\n.tool-details[_ngcontent-%COMP%] .detail-row[_ngcontent-%COMP%] {\n display: flex;\n padding: 6px 0;\n font-size: 12px;\n}\n\n.tool-details[_ngcontent-%COMP%] .detail-row.full[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 6px;\n}\n\n.tool-details[_ngcontent-%COMP%] .detail-label[_ngcontent-%COMP%] {\n min-width: 100px;\n color: var(--mj-text-secondary);\n font-weight: 500;\n}\n\n.tool-details[_ngcontent-%COMP%] .detail-value[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n}\n\n.tool-details[_ngcontent-%COMP%] .detail-value.mono[_ngcontent-%COMP%] {\n font-family: 'Consolas', 'Monaco', monospace;\n background: var(--mj-bg-surface);\n padding: 2px 6px;\n border-radius: 3px;\n border: 1px solid var(--mj-border-default);\n}\n\n.schema-preview[_ngcontent-%COMP%] {\n margin: 0;\n padding: 10px 12px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n font-family: 'Consolas', 'Monaco', monospace;\n font-size: 11px;\n line-height: 1.4;\n max-height: 200px;\n overflow: auto;\n white-space: pre-wrap;\n word-break: break-word;\n}\n\n\n\n\n\n.tools-list[_ngcontent-%COMP%] {\n overflow: auto;\n}\n\n.tools-list[_ngcontent-%COMP%] table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n}\n\n.tools-list[_ngcontent-%COMP%] th[_ngcontent-%COMP%], \n.tools-list[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 10px 14px;\n text-align: left;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.tools-list[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n font-size: 11px;\n text-transform: uppercase;\n color: var(--mj-text-disabled);\n font-weight: 600;\n background: var(--mj-bg-surface-card);\n position: sticky;\n top: 0;\n}\n\n.tools-list[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] {\n transition: background 0.15s ease;\n}\n\n.tools-list[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.tools-list[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr.expanded[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n}\n\n.tool-name-cell[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n}\n\n.tool-name-cell[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n margin-top: 2px;\n}\n\n.tool-name-info[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.tool-name-info[_ngcontent-%COMP%] .tool-title[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.tool-name-info[_ngcontent-%COMP%] .tool-code[_ngcontent-%COMP%] {\n font-size: 11px;\n font-family: monospace;\n color: var(--mj-text-secondary);\n}\n\n.description-cell[_ngcontent-%COMP%] {\n max-width: 300px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.param-count[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 24px;\n height: 24px;\n background: var(--mj-bg-surface-card);\n border-radius: 12px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n}\n\n.actions-cell[_ngcontent-%COMP%] {\n white-space: nowrap;\n}\n\n\n\n.detail-row-expanded[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 0;\n background: var(--mj-bg-surface-card);\n}\n\n.inline-details[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 16px;\n padding: 14px;\n border-top: 1px dashed var(--mj-border-default);\n}\n\n.inline-details[_ngcontent-%COMP%] .detail-section[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n font-size: 12px;\n}\n\n.inline-details[_ngcontent-%COMP%] .detail-section.full[_ngcontent-%COMP%] {\n flex-basis: 100%;\n flex-direction: column;\n gap: 6px;\n}\n\n.inline-details[_ngcontent-%COMP%] .detail-label[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-weight: 500;\n}\n\n.inline-details[_ngcontent-%COMP%] .detail-value[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n}\n\n.inline-details[_ngcontent-%COMP%] .detail-value.mono[_ngcontent-%COMP%] {\n font-family: monospace;\n}\n\n\n\n\n\n@media (max-width: 900px) {\n .mcp-dashboard[_ngcontent-%COMP%] {\n flex-direction: column;\n }\n\n .sidebar[_ngcontent-%COMP%] {\n width: 100%;\n min-width: 100%;\n flex-direction: row;\n height: auto;\n border-right: none;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .sidebar-header[_ngcontent-%COMP%] {\n padding: 12px 16px;\n border-bottom: none;\n border-right: 1px solid var(--mj-border-default);\n }\n\n .sidebar-nav[_ngcontent-%COMP%] {\n flex-direction: row;\n padding: 8px;\n overflow-x: auto;\n flex: 1;\n }\n\n .nav-item[_ngcontent-%COMP%] {\n padding: 8px 12px;\n margin-bottom: 0;\n margin-right: 4px;\n white-space: nowrap;\n }\n\n .sidebar-stats[_ngcontent-%COMP%] {\n display: none;\n }\n\n .sidebar-footer[_ngcontent-%COMP%] {\n border-top: none;\n border-left: 1px solid var(--mj-border-default);\n padding: 8px;\n }\n\n .data-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .header-actions[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n }\n\n .search-box[_ngcontent-%COMP%] {\n min-width: 100%;\n order: 1;\n }\n}\n\n@media (max-width: 600px) {\n .content-header[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: flex-start;\n gap: 12px;\n }\n\n .header-actions[_ngcontent-%COMP%] {\n width: 100%;\n }\n\n .search-box[_ngcontent-%COMP%] {\n width: 100%;\n }\n}\n\n\n\n\n\n.clickable-row[_ngcontent-%COMP%] {\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.clickable-row[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 5%, transparent) !important;\n}\n\n.clickable-row[_ngcontent-%COMP%] .action-cell[_ngcontent-%COMP%] {\n color: var(--mj-border-strong);\n transition: color 0.15s ease;\n}\n\n.clickable-row[_ngcontent-%COMP%]:hover .action-cell[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.action-cell[_ngcontent-%COMP%] {\n width: 40px;\n text-align: center;\n}\n\n\n\n\n\n.card-header.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.card-header.clickable[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.expand-arrow[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-disabled);\n transition: transform 0.2s ease;\n margin-right: 4px;\n}\n\n.expand-arrow.rotated[_ngcontent-%COMP%] {\n transform: rotate(90deg);\n}\n\n.data-card.expanded[_ngcontent-%COMP%] {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n\n\n\n\n.expanded-tools-section[_ngcontent-%COMP%] {\n border-top: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n}\n\n.tools-section-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 16px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-brand-primary);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.tools-section-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n.no-tools-message[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 16px;\n color: var(--mj-text-secondary);\n font-size: 13px;\n}\n\n.no-tools-message[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n}\n\n\n\n.tools-mini-list[_ngcontent-%COMP%] {\n padding: 8px;\n display: flex;\n flex-direction: column;\n gap: 4px;\n max-height: 300px;\n overflow-y: auto;\n}\n\n.tool-mini-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 12px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n transition: all 0.15s ease;\n}\n\n.tool-mini-card[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 2%, transparent);\n}\n\n.tool-mini-info[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n flex: 1;\n min-width: 0;\n}\n\n.tool-mini-name[_ngcontent-%COMP%] {\n font-weight: 500;\n font-size: 13px;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.tool-mini-params[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 11px;\n color: var(--mj-text-secondary);\n}\n\n.tool-mini-params[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.tool-mini-card[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n flex-shrink: 0;\n margin-left: 8px;\n}\n\n\n\n[_nghost-%COMP%] .search-highlight, \n.search-highlight[_ngcontent-%COMP%] {\n background-color: color-mix(in srgb, var(--mj-status-warning) 40%, var(--mj-bg-surface));\n padding: 1px 2px;\n border-radius: 2px;\n font-weight: inherit;\n}"] });
4437
4347
  };
4438
4348
  MCPDashboardComponent = __decorate([
4439
4349
  RegisterClass(BaseDashboard, 'MCPDashboard')
@@ -4441,7 +4351,7 @@ MCPDashboardComponent = __decorate([
4441
4351
  export { MCPDashboardComponent };
4442
4352
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MCPDashboardComponent, [{
4443
4353
  type: Component,
4444
- args: [{ standalone: false, selector: 'mj-mcp-dashboard', template: "<div class=\"mcp-dashboard\">\n <!-- Header -->\n <div class=\"dashboard-header\">\n <div class=\"header-info\">\n <h2 class=\"dashboard-title\">\n <i class=\"fa-solid fa-plug-circle-bolt\"></i>\n MCP Dashboard\n </h2>\n <button\n type=\"button\"\n class=\"filter-toggle-btn\"\n (click)=\"toggleFilterPanel()\"\n title=\"Toggle Filters\">\n <i class=\"fa-solid fa-filter\"></i>\n @if (FilterPanelVisible) {\n Hide Filters\n } @else {\n Show Filters\n }\n </button>\n <span class=\"item-count\">{{ CurrentFilteredCount }} of {{ CurrentTotalCount }} items</span>\n </div>\n\n <div class=\"header-controls\">\n <!-- Tab Navigation -->\n <div class=\"tab-nav\">\n <button\n type=\"button\"\n class=\"tab-btn\"\n [class.active]=\"ActiveTab === 'servers'\"\n (click)=\"setActiveTab('servers')\">\n <i class=\"fa-solid fa-server\"></i>\n <span class=\"tab-label\">Servers</span>\n <span class=\"tab-badge\">{{ servers.length }}</span>\n </button>\n <button\n type=\"button\"\n class=\"tab-btn\"\n [class.active]=\"ActiveTab === 'connections'\"\n (click)=\"setActiveTab('connections')\">\n <i class=\"fa-solid fa-link\"></i>\n <span class=\"tab-label\">Connections</span>\n <span class=\"tab-badge\">{{ connections.length }}</span>\n </button>\n <button\n type=\"button\"\n class=\"tab-btn\"\n [class.active]=\"ActiveTab === 'tools'\"\n (click)=\"setActiveTab('tools')\">\n <i class=\"fa-solid fa-wrench\"></i>\n <span class=\"tab-label\">Tools</span>\n <span class=\"tab-badge\">{{ tools.length }}</span>\n </button>\n <button\n type=\"button\"\n class=\"tab-btn\"\n [class.active]=\"ActiveTab === 'logs'\"\n (click)=\"setActiveTab('logs')\">\n <i class=\"fa-solid fa-list-check\"></i>\n <span class=\"tab-label\">Logs</span>\n <span class=\"tab-badge\" [class.has-errors]=\"stats.failedExecutions > 0\">{{ executionLogs.length }}</span>\n </button>\n </div>\n\n <!-- Action Buttons based on tab -->\n @switch (ActiveTab) {\n @case ('servers') {\n <button mjButton variant=\"primary\" (click)=\"createServer()\">\n <i class=\"fa-solid fa-plus\"></i>\n Add Server\n </button>\n }\n @case ('connections') {\n <button mjButton variant=\"primary\" (click)=\"createConnection()\">\n <i class=\"fa-solid fa-plus\"></i>\n Add Connection\n </button>\n }\n @case ('tools') {\n <!-- View Mode Toggle -->\n <div class=\"view-toggle\">\n <button\n type=\"button\"\n class=\"view-btn\"\n [class.active]=\"ToolsViewMode === 'card'\"\n (click)=\"setToolsViewMode('card')\"\n title=\"Card View\">\n <i class=\"fa-solid fa-grip\"></i>\n </button>\n <button\n type=\"button\"\n class=\"view-btn\"\n [class.active]=\"ToolsViewMode === 'list'\"\n (click)=\"setToolsViewMode('list')\"\n title=\"List View\">\n <i class=\"fa-solid fa-list\"></i>\n </button>\n </div>\n <button mjButton variant=\"primary\" (click)=\"openTestToolDialog()\">\n <i class=\"fa-solid fa-play\"></i>\n Test Tool\n </button>\n }\n @case ('logs') {\n <button mjButton variant=\"flat\" (click)=\"loadAllData()\" [disabled]=\"IsLoading\" title=\"Refresh\">\n <i class=\"fa-solid fa-sync\" [class.fa-spin]=\"IsLoading\"></i>\n Refresh\n </button>\n }\n }\n </div>\n </div>\n\n <!-- Main Content with Filter Panel -->\n <div class=\"main-content\">\n <!-- Filter Panel (Left) \u2014 INLINED to avoid module-resolution failures in dynamic component -->\n <div class=\"filter-panel-container\" [class.hidden]=\"!FilterPanelVisible\">\n <div style=\"padding:12px;border-right:1px solid var(--mj-border-default,#e0e0e0);height:100%;box-sizing:border-box;overflow-y:auto;background:var(--mj-bg-surface,#fff);min-width:240px\">\n <!-- Header -->\n <div style=\"display:flex;align-items:center;justify-content:space-between;margin-bottom:12px\">\n <div style=\"display:flex;align-items:center;gap:6px\">\n <h3 style=\"margin:0;font-size:0.95rem;font-weight:600\">MCP Filters</h3>\n @if (activeFilterCount() > 0) {\n <span style=\"padding:2px 8px;background:var(--mj-brand-primary,#264FAF);color:#fff;border-radius:10px;font-size:0.7rem;font-weight:600\">{{ activeFilterCount() }}</span>\n }\n </div>\n <div style=\"font-size:0.75rem;color:var(--mj-text-muted,#888)\">{{ CurrentFilteredCount }} / {{ CurrentTotalCount }}</div>\n </div>\n\n <!-- Search -->\n <div style=\"margin-bottom:12px\">\n <label style=\"display:block;font-size:0.75rem;color:var(--mj-text-secondary,#475569);margin-bottom:4px\"><i class=\"fa-solid fa-search\"></i> Search</label>\n <input #fSearch type=\"text\" class=\"mj-input\" style=\"width:100%;box-sizing:border-box\" [value]=\"CurrentFilters.searchTerm\" (input)=\"onFilterFieldChange('searchTerm', fSearch.value)\" placeholder=\"Search\u2026\" />\n </div>\n\n <!-- Tool tab filters -->\n @if (ActiveTab === 'tools') {\n <div style=\"margin-bottom:12px\">\n <label style=\"display:block;font-size:0.75rem;color:var(--mj-text-secondary,#475569);margin-bottom:4px\"><i class=\"fa-solid fa-server\"></i> Server</label>\n <select #fServer class=\"mj-input\" style=\"width:100%;box-sizing:border-box\" [value]=\"CurrentFilters.toolsServer ?? 'all'\" (change)=\"onFilterFieldChange('toolsServer', fServer.value)\">\n <option value=\"all\">All Servers</option>\n @for (s of toolsAvailableServers; track s.ID) {\n <option [value]=\"s.ID\">{{ s.Name }}</option>\n }\n </select>\n </div>\n <div style=\"margin-bottom:12px\">\n <label style=\"display:block;font-size:0.75rem;color:var(--mj-text-secondary,#475569);margin-bottom:4px\"><i class=\"fa-solid fa-tags\"></i> Category</label>\n <select #fCat class=\"mj-input\" style=\"width:100%;box-sizing:border-box\" [value]=\"CurrentFilters.toolsCategory ?? 'all'\" (change)=\"onFilterFieldChange('toolsCategory', fCat.value)\">\n <option value=\"all\">All Categories</option>\n @for (c of toolsAvailableCategories; track c.category) {\n <option [value]=\"c.category\">{{ c.category }} ({{ c.count }})</option>\n }\n </select>\n </div>\n <div style=\"margin-bottom:12px\">\n <label style=\"display:flex;align-items:center;gap:6px;cursor:pointer;font-size:0.85rem\">\n <input #fFav type=\"checkbox\" [checked]=\"CurrentFilters.favoritesOnly === true\" (change)=\"onFilterFieldChange('favoritesOnly', fFav.checked)\" />\n <i class=\"fa-solid fa-star\" style=\"color:var(--mj-status-warning,#f59e0b)\"></i>\n Favorites only\n </label>\n </div>\n <div style=\"margin-bottom:12px\">\n <label style=\"display:flex;align-items:center;gap:6px;cursor:pointer;font-size:0.85rem\">\n <input #fRec type=\"checkbox\" [checked]=\"CurrentFilters.recentOnly === true\" (change)=\"onFilterFieldChange('recentOnly', fRec.checked)\" />\n <i class=\"fa-solid fa-clock-rotate-left\" style=\"color:var(--mj-brand-primary,#264FAF)\"></i>\n Recently used only\n </label>\n </div>\n }\n\n <!-- Tab-specific status filter -->\n @if (ActiveTab === 'servers') {\n <div style=\"margin-bottom:12px\">\n <label style=\"display:block;font-size:0.75rem;color:var(--mj-text-secondary,#475569);margin-bottom:4px\"><i class=\"fa-solid fa-toggle-on\"></i> Server Status</label>\n <select #fSStatus class=\"mj-input\" style=\"width:100%;box-sizing:border-box\" [value]=\"CurrentFilters.serverStatus\" (change)=\"onFilterFieldChange('serverStatus', fSStatus.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 @if (ActiveTab === 'connections') {\n <div style=\"margin-bottom:12px\">\n <label style=\"display:block;font-size:0.75rem;color:var(--mj-text-secondary,#475569);margin-bottom:4px\"><i class=\"fa-solid fa-toggle-on\"></i> Connection Status</label>\n <select #fCStatus class=\"mj-input\" style=\"width:100%;box-sizing:border-box\" [value]=\"CurrentFilters.connectionStatus\" (change)=\"onFilterFieldChange('connectionStatus', fCStatus.value)\">\n <option value=\"all\">All Statuses</option>\n <option value=\"Active\">Active</option>\n <option value=\"Inactive\">Inactive</option>\n <option value=\"Error\">Error</option>\n </select>\n </div>\n }\n @if (ActiveTab === 'tools') {\n <div style=\"margin-bottom:12px\">\n <label style=\"display:block;font-size:0.75rem;color:var(--mj-text-secondary,#475569);margin-bottom:4px\"><i class=\"fa-solid fa-toggle-on\"></i> Tool Status</label>\n <select #fTStatus class=\"mj-input\" style=\"width:100%;box-sizing:border-box\" [value]=\"CurrentFilters.toolStatus\" (change)=\"onFilterFieldChange('toolStatus', fTStatus.value)\">\n <option value=\"all\">All Statuses</option>\n <option value=\"Active\">Active</option>\n <option value=\"Deprecated\">Deprecated</option>\n </select>\n </div>\n }\n @if (ActiveTab === 'logs') {\n <div style=\"margin-bottom:12px\">\n <label style=\"display:block;font-size:0.75rem;color:var(--mj-text-secondary,#475569);margin-bottom:4px\"><i class=\"fa-solid fa-circle-check\"></i> Log Status</label>\n <select #fLStatus class=\"mj-input\" style=\"width:100%;box-sizing:border-box\" [value]=\"CurrentFilters.logStatus\" (change)=\"onFilterFieldChange('logStatus', fLStatus.value)\">\n <option value=\"all\">All Statuses</option>\n <option value=\"Success\">Success</option>\n <option value=\"Error\">Error</option>\n <option value=\"Running\">Running</option>\n </select>\n </div>\n }\n\n <!-- Reset -->\n <div style=\"margin-top:16px\">\n <button mjButton variant=\"flat\" style=\"width:100%\" (click)=\"resetAllFilters()\">\n <i class=\"fa-solid fa-undo\"></i> Reset Filters\n </button>\n </div>\n </div>\n <div class=\"resize-handle\"></div>\n </div>\n\n <!-- Content Area -->\n <div class=\"content-area\">\n <!-- Error Message -->\n @if (ErrorMessage) {\n <div class=\"error-banner\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n {{ ErrorMessage }}\n <button class=\"close-btn\" (click)=\"ErrorMessage = null\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n }\n\n <!-- Content Body -->\n <div class=\"content-body\">\n @if (IsLoading) {\n <mj-loading text=\"Loading MCP data...\"></mj-loading>\n } @else {\n @switch (ActiveTab) {\n <!-- Servers Tab -->\n @case ('servers') {\n <div class=\"data-grid servers-grid\">\n @if (filteredServers.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-server\"></i>\n <p>No MCP servers configured</p>\n <button mjButton variant=\"primary\" (click)=\"createServer()\">\n Add Your First Server\n </button>\n </div>\n } @else {\n @for (server of filteredServers; track server.ID) {\n <div class=\"data-card\" [class.expanded]=\"isServerExpanded(server)\">\n <div class=\"card-header clickable\" (click)=\"toggleServerExpand(server)\">\n <div class=\"card-title\">\n <i class=\"fa-solid fa-chevron-right expand-arrow\" [class.rotated]=\"isServerExpanded(server)\"></i>\n <i [class]=\"getTransportIcon(server.TransportType)\"></i>\n <span class=\"name\">{{ server.Name }}</span>\n <span class=\"status-badge\" [ngClass]=\"getStatusClass(server.Status)\">\n {{ server.Status }}\n </span>\n </div>\n <div class=\"card-actions\" (click)=\"$event.stopPropagation()\">\n <button mjButton variant=\"flat\" (click)=\"editServer(server)\" title=\"Edit\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n <button mjButton variant=\"flat\" (click)=\"deleteServer(server)\" title=\"Delete\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n </div>\n </div>\n <div class=\"card-body\">\n @if (server.Description) {\n <p class=\"description\">{{ server.Description }}</p>\n }\n <div class=\"details-grid\">\n <div class=\"detail\">\n <span class=\"label\">Transport</span>\n <span class=\"value\">{{ server.TransportType }}</span>\n </div>\n <div class=\"detail\">\n <span class=\"label\">Auth</span>\n <span class=\"value\">{{ server.DefaultAuthType }}</span>\n </div>\n <div class=\"detail\">\n <span class=\"label\">Connections</span>\n <span class=\"value\">{{ server.ConnectionCount }}</span>\n </div>\n <div class=\"detail\">\n <span class=\"label\">Tools</span>\n <span class=\"value\">{{ server.ToolCount }}</span>\n </div>\n @if (server.ServerURL) {\n <div class=\"detail full-width\">\n <span class=\"label\">URL</span>\n <span class=\"value url\">{{ server.ServerURL }}</span>\n </div>\n }\n @if (server.Command) {\n <div class=\"detail full-width\">\n <span class=\"label\">Command</span>\n <span class=\"value command\">{{ server.Command }}</span>\n </div>\n }\n <div class=\"detail\">\n <span class=\"label\">Last Sync</span>\n <span class=\"value\">{{ formatDate(server.LastSyncAt) }}</span>\n </div>\n </div>\n </div>\n <!-- Expanded Tools Section -->\n @if (isServerExpanded(server)) {\n <div class=\"expanded-tools-section\">\n <div class=\"tools-section-header\">\n <i class=\"fa-solid fa-wrench\"></i>\n <span>Available Tools ({{ getToolsForServer(server.ID).length }})</span>\n </div>\n @if (getToolsForServer(server.ID).length === 0) {\n <div class=\"no-tools-message\">\n <i class=\"fa-solid fa-info-circle\"></i>\n No tools discovered yet. Sync a connection to discover tools.\n </div>\n } @else {\n <div class=\"tools-mini-list\">\n @for (tool of getToolsForServer(server.ID); track tool.ID) {\n <div class=\"tool-mini-card\">\n <div class=\"tool-mini-info\">\n <span class=\"tool-mini-name\">{{ tool.ToolTitle || tool.ToolName }}</span>\n <span class=\"tool-mini-params\">\n <i class=\"fa-solid fa-sliders\"></i>\n {{ getParamCount(tool) }} params\n </span>\n </div>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"runToolFromCard(tool); $event.stopPropagation()\"\n title=\"Test this tool\">\n <i class=\"fa-solid fa-play\"></i>\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n }\n </div>\n }\n\n <!-- Connections Tab -->\n @case ('connections') {\n <div class=\"data-grid connections-grid\">\n @if (filteredConnections.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-link\"></i>\n <p>No connections configured</p>\n <button mjButton variant=\"primary\" (click)=\"createConnection()\">\n Add Your First Connection\n </button>\n </div>\n } @else {\n @for (conn of filteredConnections; track conn.ID) {\n <div class=\"data-card\" [class.expanded]=\"isConnectionExpanded(conn)\">\n <div class=\"card-header clickable\" (click)=\"toggleConnectionExpand(conn)\">\n <div class=\"card-title\">\n <i class=\"fa-solid fa-chevron-right expand-arrow\" [class.rotated]=\"isConnectionExpanded(conn)\"></i>\n <i class=\"fa-solid fa-link\"></i>\n <span class=\"name\">{{ conn.Name }}</span>\n <span class=\"status-badge\" [ngClass]=\"getStatusClass(conn.Status)\">\n {{ conn.Status }}\n </span>\n </div>\n <div class=\"card-actions\" (click)=\"$event.stopPropagation()\">\n <button mjButton\n variant=\"flat\"\n (click)=\"syncConnectionTools(conn)\"\n [disabled]=\"isSyncing(conn.ID)\"\n title=\"Sync Tools\">\n @if (isSyncing(conn.ID)) {\n <i class=\"fa-solid fa-sync fa-spin\"></i>\n } @else {\n <i class=\"fa-solid fa-sync\"></i>\n }\n </button>\n <button mjButton variant=\"flat\" (click)=\"editConnection(conn)\" title=\"Edit\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n <button mjButton variant=\"flat\" (click)=\"deleteConnection(conn)\" title=\"Delete\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n </div>\n </div>\n <!-- Sync Progress Banner -->\n @if (isSyncing(conn.ID)) {\n <div class=\"sync-progress-banner\">\n <i class=\"fa-solid fa-circle-notch fa-spin\"></i>\n <span class=\"sync-message\">{{ getSyncProgressMessage(conn.ID) || 'Syncing...' }}</span>\n </div>\n }\n <!-- Sync Result Banner -->\n @if (getSyncState(conn.ID)?.lastResult && !isSyncing(conn.ID)) {\n <div class=\"sync-result-banner\"\n [class.success]=\"getSyncState(conn.ID)?.lastResult?.Success\"\n [class.error]=\"!getSyncState(conn.ID)?.lastResult?.Success\">\n @if (getSyncState(conn.ID)?.lastResult?.Success) {\n <i class=\"fa-solid fa-check-circle\"></i>\n <span>Synced: {{ getSyncState(conn.ID)?.lastResult?.Added }} added,\n {{ getSyncState(conn.ID)?.lastResult?.Updated }} updated,\n {{ getSyncState(conn.ID)?.lastResult?.Deprecated }} deprecated\n </span>\n } @else {\n <i class=\"fa-solid fa-exclamation-circle\"></i>\n <span>{{ getSyncState(conn.ID)?.lastResult?.ErrorMessage }}</span>\n }\n </div>\n }\n <div class=\"card-body\">\n @if (conn.Description) {\n <p class=\"description\">{{ conn.Description }}</p>\n }\n <div class=\"details-grid\">\n <div class=\"detail\">\n <span class=\"label\">Server</span>\n <span class=\"value\">{{ conn.ServerName }}</span>\n </div>\n <div class=\"detail\">\n <span class=\"label\">Auto Sync</span>\n <span class=\"value\">{{ conn.AutoSyncTools ? 'Yes' : 'No' }}</span>\n </div>\n <div class=\"detail\">\n <span class=\"label\">Logging</span>\n <span class=\"value\">{{ conn.LogToolCalls ? 'Enabled' : 'Disabled' }}</span>\n </div>\n <div class=\"detail\">\n <span class=\"label\">Last Connected</span>\n <span class=\"value\">{{ formatDate(conn.LastConnectedAt) }}</span>\n </div>\n @if (conn.LastErrorMessage) {\n <div class=\"detail full-width error\">\n <span class=\"label\">Last Error</span>\n <span class=\"value\">{{ conn.LastErrorMessage }}</span>\n </div>\n }\n </div>\n </div>\n <!-- Expanded Tools Section -->\n @if (isConnectionExpanded(conn)) {\n <div class=\"expanded-tools-section\">\n <div class=\"tools-section-header\">\n <i class=\"fa-solid fa-wrench\"></i>\n <span>Available Tools ({{ getToolsForConnection(conn.ID).length }})</span>\n </div>\n @if (getToolsForConnection(conn.ID).length === 0) {\n <div class=\"no-tools-message\">\n <i class=\"fa-solid fa-info-circle\"></i>\n No tools discovered yet. Click the sync button to discover tools.\n </div>\n } @else {\n <div class=\"tools-mini-list\">\n @for (tool of getToolsForConnection(conn.ID); track tool.ID) {\n <div class=\"tool-mini-card\">\n <div class=\"tool-mini-info\">\n <span class=\"tool-mini-name\">{{ tool.ToolTitle || tool.ToolName }}</span>\n <span class=\"tool-mini-params\">\n <i class=\"fa-solid fa-sliders\"></i>\n {{ getParamCount(tool) }} params\n </span>\n </div>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"runToolFromCard(tool, conn); $event.stopPropagation()\"\n title=\"Test this tool with this connection\">\n <i class=\"fa-solid fa-play\"></i>\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n }\n </div>\n }\n\n <!-- Tools Tab -->\n @case ('tools') {\n <!-- Scale-mode toggle (Part 3.2): flip to virtual-scrolled paginated list for 1000s of tools -->\n <div style=\"display:flex;justify-content:flex-end;align-items:center;gap:8px;padding:4px 0;font-size:0.8rem;color:var(--mj-text-muted,#888)\">\n <label style=\"display:flex;align-items:center;gap:6px;cursor:pointer\">\n <input type=\"checkbox\" [checked]=\"useScalablePagination\" (change)=\"toggleScalableMode($any($event.target).checked)\" />\n Scale mode (virtual scroll, paginated)\n </label>\n @if (useScalablePagination) {\n <span>\u00B7 Showing {{ pagedTools.length }} of {{ toolsTotalCount }}</span>\n }\n </div>\n @if (useScalablePagination) {\n <div style=\"padding:8px 12px;font-size:0.8rem;color:var(--mj-text-secondary,#475569);background:var(--mj-bg-surface-card,#f8f9fa);border-radius:4px;margin-bottom:6px\">\n Showing <strong>{{ visiblePagedTools.length }}</strong> of <strong>{{ scaleDenominator() }}</strong> tools\n </div>\n <div style=\"height:calc(100vh - 260px);width:100%;overflow-y:auto;border:1px solid var(--mj-border-subtle,#eee);border-radius:4px\" (scroll)=\"onToolsScrollNative($event)\">\n @for (tool of visiblePagedTools; track tool.ID) {\n <div style=\"display:flex;align-items:center;gap:12px;padding:12px 14px;border-bottom:1px solid var(--mj-border-subtle,#eee);height:72px;box-sizing:border-box\">\n <i class=\"fa-solid fa-wrench\" style=\"color:var(--mj-brand-primary,#264FAF)\"></i>\n <div style=\"flex:1;min-width:0\">\n <div style=\"font-weight:500;font-size:0.875rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap\">{{ tool.ToolTitle || tool.ToolName }}</div>\n <div style=\"font-size:0.75rem;color:var(--mj-text-muted,#888);overflow:hidden;text-overflow:ellipsis;white-space:nowrap\">{{ tool.ServerName }} \u00B7 {{ tool.ToolName }}</div>\n </div>\n <button type=\"button\" (click)=\"toggleFavorite(tool.ID, $event)\" [title]=\"isFavorited(tool.ID) ? 'Unfavorite' : 'Favorite'\" style=\"background:transparent;border:none;cursor:pointer;padding:4px;font-size:1rem\" [style.color]=\"isFavorited(tool.ID) ? 'var(--mj-status-warning, #f59e0b)' : 'var(--mj-text-muted, #bbb)'\">\n <i [class]=\"isFavorited(tool.ID) ? 'fa-solid fa-star' : 'fa-regular fa-star'\"></i>\n </button>\n <span class=\"status-badge small\" [ngClass]=\"getStatusClass(tool.Status)\">{{ tool.Status }}</span>\n </div>\n }\n @if (toolsLoading) {\n <div style=\"padding:12px;text-align:center;font-size:0.8rem;color:var(--mj-text-muted,#888)\">Loading more\u2026</div>\n }\n </div>\n } @else if (ServerGroups.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-wrench\"></i>\n <p>No tools discovered yet</p>\n <span class=\"hint\">Tools are discovered when connections sync with MCP servers</span>\n </div>\n } @else {\n <div class=\"tools-container\">\n <!-- Server Groups -->\n @for (group of ServerGroups; track group.server.ID) {\n <div class=\"server-group\" [class.collapsed]=\"!group.expanded\">\n <!-- Server Group Header -->\n <div class=\"server-group-header\" (click)=\"toggleServerGroup(group)\">\n <div class=\"server-info\">\n <i class=\"fa-solid fa-chevron-right expand-icon\" [class.expanded]=\"group.expanded\"></i>\n <i [class]=\"getTransportIcon(group.server.TransportType)\"></i>\n <span class=\"server-name\">{{ group.server.Name }}</span>\n <span class=\"tool-count\">{{ getServerToolCount(group.server.ID) }} tools</span>\n <span class=\"status-badge small\" [ngClass]=\"getStatusClass(group.server.Status)\">\n {{ group.server.Status }}\n </span>\n </div>\n <div class=\"server-actions\" (click)=\"$event.stopPropagation()\">\n <button mjButton variant=\"flat\" (click)=\"openTestToolDialog(undefined, undefined)\" title=\"Test a tool\">\n <i class=\"fa-solid fa-play\"></i>\n </button>\n </div>\n </div>\n\n <!-- Tools Content -->\n @if (group.expanded) {\n <!-- Card View -->\n @if (ToolsViewMode === 'card') {\n <div class=\"tools-grid\">\n @for (tool of group.tools; track tool.ID) {\n <div class=\"tool-card\" [class.expanded]=\"isToolExpanded(tool)\">\n <div class=\"tool-card-header\" (click)=\"toggleToolExpand(tool)\">\n <div class=\"tool-title\">\n <i class=\"fa-solid fa-wrench\"></i>\n <span class=\"name\">{{ tool.ToolTitle || tool.ToolName }}</span>\n </div>\n <div class=\"tool-meta\">\n <span class=\"param-badge\" title=\"Parameters\">\n <i class=\"fa-solid fa-sliders\"></i>\n {{ getParamCount(tool) }}\n </span>\n <span class=\"status-badge small\" [ngClass]=\"getStatusClass(tool.Status)\">\n {{ tool.Status }}\n </span>\n </div>\n </div>\n @if (tool.ToolDescription) {\n <p class=\"tool-description\">{{ tool.ToolDescription }}</p>\n }\n <div class=\"tool-card-actions\">\n <button type=\"button\" (click)=\"toggleFavorite(tool.ID, $event)\" [title]=\"isFavorited(tool.ID) ? 'Unfavorite' : 'Favorite'\" style=\"background:transparent;border:none;cursor:pointer;padding:4px;font-size:1rem\" [style.color]=\"isFavorited(tool.ID) ? 'var(--mj-status-warning, #f59e0b)' : 'var(--mj-text-muted, #bbb)'\">\n <i [class]=\"isFavorited(tool.ID) ? 'fa-solid fa-star' : 'fa-regular fa-star'\"></i>\n </button>\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"openTestToolDialog(tool)\" title=\"Test this tool\">\n <i class=\"fa-solid fa-play\"></i>\n Test\n </button>\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"toggleToolExpand(tool)\" title=\"View details\">\n <i class=\"fa-solid\" [class.fa-chevron-down]=\"!isToolExpanded(tool)\" [class.fa-chevron-up]=\"isToolExpanded(tool)\"></i>\n {{ isToolExpanded(tool) ? 'Less' : 'More' }}\n </button>\n </div>\n <!-- Expanded Details -->\n @if (isToolExpanded(tool)) {\n <div class=\"tool-details\">\n <div class=\"detail-row\">\n <span class=\"detail-label\">Tool Name:</span>\n <span class=\"detail-value mono\">{{ tool.ToolName }}</span>\n </div>\n <div class=\"detail-row\">\n <span class=\"detail-label\">Parameters:</span>\n <span class=\"detail-value\">\n {{ getParamCount(tool) }} total, {{ getRequiredParamCount(tool) }} required\n </span>\n </div>\n <div class=\"detail-row\">\n <span class=\"detail-label\">Discovered:</span>\n <span class=\"detail-value\">{{ formatDate(tool.DiscoveredAt) }}</span>\n </div>\n <div class=\"detail-row\">\n <span class=\"detail-label\">Last Seen:</span>\n <span class=\"detail-value\">{{ formatDate(tool.LastSeenAt) }}</span>\n </div>\n @if (tool.InputSchema) {\n <div class=\"detail-row full\">\n <span class=\"detail-label\">Input Schema:</span>\n <pre class=\"schema-preview\">{{ getFormattedInputSchema(tool) }}</pre>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n } @else {\n <!-- List View -->\n <div class=\"tools-list\">\n <table>\n <thead>\n <tr>\n <th>Tool</th>\n <th>Description</th>\n <th>Params</th>\n <th>Status</th>\n <th>Last Seen</th>\n <th>Actions</th>\n </tr>\n </thead>\n <tbody>\n @for (tool of group.tools; track tool.ID) {\n <tr [class.expanded]=\"isToolExpanded(tool)\">\n <td class=\"tool-name-cell\">\n <i class=\"fa-solid fa-wrench\"></i>\n <div class=\"tool-name-info\">\n <span class=\"tool-title\">{{ tool.ToolTitle || tool.ToolName }}</span>\n @if (tool.ToolTitle) {\n <span class=\"tool-code\">{{ tool.ToolName }}</span>\n }\n </div>\n </td>\n <td class=\"description-cell\">{{ tool.ToolDescription || '-' }}</td>\n <td>\n <span class=\"param-count\">{{ getParamCount(tool) }}</span>\n </td>\n <td>\n <span class=\"status-badge small\" [ngClass]=\"getStatusClass(tool.Status)\">\n {{ tool.Status }}\n </span>\n </td>\n <td>{{ formatDate(tool.LastSeenAt) }}</td>\n <td class=\"actions-cell\">\n <button type=\"button\" (click)=\"toggleFavorite(tool.ID, $event)\" [title]=\"isFavorited(tool.ID) ? 'Unfavorite' : 'Favorite'\" style=\"background:transparent;border:none;cursor:pointer;padding:4px;font-size:0.95rem;margin-right:4px\" [style.color]=\"isFavorited(tool.ID) ? 'var(--mj-status-warning, #f59e0b)' : 'var(--mj-text-muted, #bbb)'\">\n <i [class]=\"isFavorited(tool.ID) ? 'fa-solid fa-star' : 'fa-regular fa-star'\"></i>\n </button>\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"openTestToolDialog(tool)\" title=\"Test\">\n <i class=\"fa-solid fa-play\"></i>\n </button>\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"toggleToolExpand(tool)\" title=\"Details\">\n <i class=\"fa-solid\" [class.fa-chevron-down]=\"!isToolExpanded(tool)\" [class.fa-chevron-up]=\"isToolExpanded(tool)\"></i>\n </button>\n </td>\n </tr>\n @if (isToolExpanded(tool)) {\n <tr class=\"detail-row-expanded\">\n <td colspan=\"6\">\n <div class=\"inline-details\">\n <div class=\"detail-section\">\n <span class=\"detail-label\">Tool Name:</span>\n <span class=\"detail-value mono\">{{ tool.ToolName }}</span>\n </div>\n <div class=\"detail-section\">\n <span class=\"detail-label\">Discovered:</span>\n <span class=\"detail-value\">{{ formatDate(tool.DiscoveredAt) }}</span>\n </div>\n <div class=\"detail-section\">\n <span class=\"detail-label\">Required Params:</span>\n <span class=\"detail-value\">{{ getRequiredParamCount(tool) }}</span>\n </div>\n @if (tool.InputSchema) {\n <div class=\"detail-section full\">\n <span class=\"detail-label\">Input Schema:</span>\n <pre class=\"schema-preview\">{{ getFormattedInputSchema(tool) }}</pre>\n </div>\n }\n </div>\n </td>\n </tr>\n }\n }\n </tbody>\n </table>\n </div>\n }\n }\n </div>\n }\n </div>\n }\n }\n\n <!-- Logs Tab -->\n @case ('logs') {\n <div class=\"data-table\">\n @if (filteredLogs.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-list-check\"></i>\n <p>No recent execution logs</p>\n <span class=\"hint\">Logs appear when tools are executed via MCP connections</span>\n </div>\n } @else {\n <table>\n <thead>\n <tr>\n <th class=\"sortable\" [ngClass]=\"getLogSortClass('status')\" (click)=\"onLogSortColumn('status')\">\n Status\n <i class=\"sort-icon fa-solid\" [class.fa-sort-up]=\"LogsSortColumn === 'status' && LogsSortAscending\" [class.fa-sort-down]=\"LogsSortColumn === 'status' && !LogsSortAscending\" [class.fa-sort]=\"LogsSortColumn !== 'status'\"></i>\n </th>\n <th class=\"sortable\" [ngClass]=\"getLogSortClass('server')\" (click)=\"onLogSortColumn('server')\">\n Server\n <i class=\"sort-icon fa-solid\" [class.fa-sort-up]=\"LogsSortColumn === 'server' && LogsSortAscending\" [class.fa-sort-down]=\"LogsSortColumn === 'server' && !LogsSortAscending\" [class.fa-sort]=\"LogsSortColumn !== 'server'\"></i>\n </th>\n <th class=\"sortable\" [ngClass]=\"getLogSortClass('tool')\" (click)=\"onLogSortColumn('tool')\">\n Tool\n <i class=\"sort-icon fa-solid\" [class.fa-sort-up]=\"LogsSortColumn === 'tool' && LogsSortAscending\" [class.fa-sort-down]=\"LogsSortColumn === 'tool' && !LogsSortAscending\" [class.fa-sort]=\"LogsSortColumn !== 'tool'\"></i>\n </th>\n <th class=\"sortable\" [ngClass]=\"getLogSortClass('connection')\" (click)=\"onLogSortColumn('connection')\">\n Connection\n <i class=\"sort-icon fa-solid\" [class.fa-sort-up]=\"LogsSortColumn === 'connection' && LogsSortAscending\" [class.fa-sort-down]=\"LogsSortColumn === 'connection' && !LogsSortAscending\" [class.fa-sort]=\"LogsSortColumn !== 'connection'\"></i>\n </th>\n <th class=\"sortable\" [ngClass]=\"getLogSortClass('started')\" (click)=\"onLogSortColumn('started')\">\n Started\n <i class=\"sort-icon fa-solid\" [class.fa-sort-up]=\"LogsSortColumn === 'started' && LogsSortAscending\" [class.fa-sort-down]=\"LogsSortColumn === 'started' && !LogsSortAscending\" [class.fa-sort]=\"LogsSortColumn !== 'started'\"></i>\n </th>\n <th class=\"sortable\" [ngClass]=\"getLogSortClass('duration')\" (click)=\"onLogSortColumn('duration')\">\n Duration\n <i class=\"sort-icon fa-solid\" [class.fa-sort-up]=\"LogsSortColumn === 'duration' && LogsSortAscending\" [class.fa-sort-down]=\"LogsSortColumn === 'duration' && !LogsSortAscending\" [class.fa-sort]=\"LogsSortColumn !== 'duration'\"></i>\n </th>\n <th class=\"sortable\" [ngClass]=\"getLogSortClass('error')\" (click)=\"onLogSortColumn('error')\">\n Error\n <i class=\"sort-icon fa-solid\" [class.fa-sort-up]=\"LogsSortColumn === 'error' && LogsSortAscending\" [class.fa-sort-down]=\"LogsSortColumn === 'error' && !LogsSortAscending\" [class.fa-sort]=\"LogsSortColumn !== 'error'\"></i>\n </th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n @for (log of filteredLogs; track log.ID) {\n <tr [class.error-row]=\"log.Status === 'Error'\"\n class=\"clickable-row\"\n (click)=\"onLogClick(log)\"\n title=\"Click for details\">\n <td>\n <span class=\"status-badge\" [ngClass]=\"getStatusClass(log.Status)\">\n @switch (log.Status) {\n @case ('Success') {\n <i class=\"fa-solid fa-check-circle\"></i>\n }\n @case ('Error') {\n <i class=\"fa-solid fa-times-circle\"></i>\n }\n @case ('Running') {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n }\n @default {\n <i class=\"fa-solid fa-question-circle\"></i>\n }\n }\n {{ log.Status || 'Unknown' }}\n </span>\n </td>\n <td class=\"server-name\">{{ log.ServerName }}</td>\n <td class=\"tool-name\">{{ log.ToolName }}</td>\n <td>{{ log.ConnectionName }}</td>\n <td>{{ formatDate(log.StartedAt) }}</td>\n <td>{{ formatDuration(log.DurationMs) }}</td>\n <td class=\"error-message\" [title]=\"log.ErrorMessage || ''\">\n {{ log.ErrorMessage || '-' }}\n </td>\n <td class=\"action-cell\">\n <i class=\"fa-solid fa-chevron-right\"></i>\n </td>\n </tr>\n }\n </tbody>\n </table>\n }\n </div>\n }\n }\n }\n </div>\n </div>\n </div>\n</div>\n\n<!-- Server Dialog (inline \u2014 avoids sub-component DI issues) -->\n@if (ShowServerDialog) {\n <div style=\"position:fixed;inset:0;z-index:10000;background:rgba(0,0,0,0.5);display:flex;align-items:center;justify-content:center\" (click)=\"cancelServerForm()\">\n <div style=\"display:flex;flex-direction:column;background:var(--mj-bg-surface,#fff);border-radius:8px;box-shadow:0 20px 60px rgba(0,0,0,0.3);overflow:hidden;width:600px;max-width:90vw;max-height:90vh\" (click)=\"$event.stopPropagation()\">\n <!-- Title bar -->\n <div style=\"display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--mj-border-default,#e0e0e0);flex-shrink:0\">\n <h2 style=\"margin:0;font-size:1.125rem;font-weight:600;color:var(--mj-text-primary,#333)\">{{ EditingServer ? 'Edit MCP Server' : 'Add MCP Server' }}</h2>\n <button style=\"display:flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;background:none;cursor:pointer;color:var(--mj-text-muted,#888);border-radius:4px\" (click)=\"cancelServerForm()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <!-- Body -->\n <div style=\"flex:1;overflow-y:auto;padding:20px;color:var(--mj-text-primary,#333)\">\n @if (ServerFormError) {\n <div style=\"background:var(--mj-status-error-bg,#fff5f5);border:1px solid var(--mj-status-error-border,#feb2b2);border-radius:6px;padding:10px 14px;margin-bottom:16px;color:var(--mj-status-error-text,#c53030);font-size:0.875rem\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i> {{ ServerFormError }}\n </div>\n }\n <!-- Name -->\n <div style=\"margin-bottom:16px\">\n <label style=\"display:block;font-size:0.875rem;font-weight:500;color:var(--mj-text-primary,#333);margin-bottom:4px\">Name <span style=\"color:var(--mj-status-error,#e53e3e)\">*</span></label>\n <input #sfName class=\"mj-input\" placeholder=\"e.g., GitHub MCP Server\" [value]=\"ServerForm.Name\" (input)=\"ServerForm.Name = sfName.value\" style=\"width:100%;box-sizing:border-box\" />\n </div>\n <!-- Description -->\n <div style=\"margin-bottom:16px\">\n <label style=\"display:block;font-size:0.875rem;font-weight:500;color:var(--mj-text-primary,#333);margin-bottom:4px\">Description</label>\n <textarea #sfDesc class=\"mj-textarea\" placeholder=\"Optional description\" [value]=\"ServerForm.Description\" (input)=\"ServerForm.Description = sfDesc.value\" rows=\"3\" style=\"width:100%;box-sizing:border-box\"></textarea>\n </div>\n <!-- Transport Type -->\n <div style=\"margin-bottom:16px\">\n <label style=\"display:block;font-size:0.875rem;font-weight:500;color:var(--mj-text-primary,#333);margin-bottom:4px\">Transport Type <span style=\"color:var(--mj-status-error,#e53e3e)\">*</span></label>\n <select #sfTransport class=\"mj-input\" [value]=\"ServerForm.TransportType\" (change)=\"ServerForm.TransportType = sfTransport.value\" style=\"width:100%;box-sizing:border-box\">\n @for (t of TransportTypes; track t.value) {\n <option [value]=\"t.value\">{{ t.label }}</option>\n }\n </select>\n </div>\n <!-- Server URL (for HTTP-based transports) -->\n @if (ServerForm.TransportType === 'StreamableHTTP' || ServerForm.TransportType === 'SSE' || ServerForm.TransportType === 'WebSocket') {\n <div style=\"margin-bottom:16px\">\n <label style=\"display:block;font-size:0.875rem;font-weight:500;color:var(--mj-text-primary,#333);margin-bottom:4px\">Server URL <span style=\"color:var(--mj-status-error,#e53e3e)\">*</span></label>\n <input #sfUrl class=\"mj-input\" placeholder=\"https://api.example.com/mcp\" [value]=\"ServerForm.ServerURL\" (input)=\"ServerForm.ServerURL = sfUrl.value\" style=\"width:100%;box-sizing:border-box\" />\n </div>\n }\n <!-- Command (for Stdio) -->\n @if (ServerForm.TransportType === 'Stdio') {\n <div style=\"margin-bottom:16px\">\n <label style=\"display:block;font-size:0.875rem;font-weight:500;color:var(--mj-text-primary,#333);margin-bottom:4px\">Command <span style=\"color:var(--mj-status-error,#e53e3e)\">*</span></label>\n <input #sfCmd class=\"mj-input\" placeholder=\"e.g., npx\" [value]=\"ServerForm.Command\" (input)=\"ServerForm.Command = sfCmd.value\" style=\"width:100%;box-sizing:border-box\" />\n </div>\n }\n <!-- Auth Type -->\n <div style=\"margin-bottom:16px\">\n <label style=\"display:block;font-size:0.875rem;font-weight:500;color:var(--mj-text-primary,#333);margin-bottom:4px\">Default Auth Type</label>\n <select #sfAuth class=\"mj-input\" [value]=\"ServerForm.DefaultAuthType\" (change)=\"ServerForm.DefaultAuthType = sfAuth.value\" style=\"width:100%;box-sizing:border-box\">\n @for (a of AuthTypes; track a.value) {\n <option [value]=\"a.value\">{{ a.label }}</option>\n }\n </select>\n </div>\n <!-- Status -->\n <div style=\"margin-bottom:16px\">\n <label style=\"display:block;font-size:0.875rem;font-weight:500;color:var(--mj-text-primary,#333);margin-bottom:4px\">Status</label>\n <select #sfStatus class=\"mj-input\" [value]=\"ServerForm.Status\" (change)=\"ServerForm.Status = sfStatus.value\" style=\"width:100%;box-sizing:border-box\">\n <option value=\"Active\">Active</option>\n <option value=\"Inactive\">Inactive</option>\n </select>\n </div>\n </div>\n <!-- Actions -->\n <div style=\"display:flex;align-items:center;gap:8px;padding:16px 20px;border-top:1px solid var(--mj-border-default,#e0e0e0);flex-shrink:0\">\n <button mjButton variant=\"primary\" (click)=\"saveServerForm()\" [disabled]=\"ServerFormSaving\">\n @if (ServerFormSaving) { <i class=\"fa-solid fa-spinner fa-spin\"></i> }\n {{ EditingServer ? 'Update' : 'Create' }}\n </button>\n <button mjButton (click)=\"cancelServerForm()\">Cancel</button>\n </div>\n </div>\n </div>\n}\n\n<!-- Connection Dialog (inline) -->\n@if (ShowConnectionDialog) {\n <div style=\"position:fixed;inset:0;z-index:10000;background:rgba(0,0,0,0.5);display:flex;align-items:center;justify-content:center\" (click)=\"cancelConnectionForm()\">\n <div style=\"display:flex;flex-direction:column;background:var(--mj-bg-surface,#fff);border-radius:8px;box-shadow:0 20px 60px rgba(0,0,0,0.3);overflow:hidden;width:560px;max-width:90vw;max-height:90vh\" (click)=\"$event.stopPropagation()\">\n <div style=\"display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--mj-border-default,#e0e0e0);flex-shrink:0\">\n <h2 style=\"margin:0;font-size:1.125rem;font-weight:600;color:var(--mj-text-primary,#333)\">Add Connection</h2>\n <button style=\"display:flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;background:none;cursor:pointer;color:var(--mj-text-muted,#888);border-radius:4px\" (click)=\"cancelConnectionForm()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <div style=\"flex:1;overflow-y:auto;padding:20px;color:var(--mj-text-primary,#333)\">\n @if (ConnectionFormError) {\n <div style=\"background:var(--mj-status-error-bg,#fff5f5);border:1px solid var(--mj-status-error-border,#feb2b2);border-radius:6px;padding:10px 14px;margin-bottom:16px;color:var(--mj-status-error-text,#c53030);font-size:0.875rem\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i> {{ ConnectionFormError }}\n </div>\n }\n <div style=\"margin-bottom:16px\">\n <label style=\"display:block;font-size:0.875rem;font-weight:500;color:var(--mj-text-primary,#333);margin-bottom:4px\">Server <span style=\"color:var(--mj-status-error,#e53e3e)\">*</span></label>\n <select #cfServer class=\"mj-input\" [value]=\"ConnectionForm.MCPServerID\" (change)=\"ConnectionForm.MCPServerID = cfServer.value\" style=\"width:100%;box-sizing:border-box\">\n <option value=\"\">\u2014 select server \u2014</option>\n @for (s of servers; track s.ID) {\n <option [value]=\"s.ID\">{{ s.Name }}</option>\n }\n </select>\n </div>\n <div style=\"margin-bottom:16px\">\n <label style=\"display:block;font-size:0.875rem;font-weight:500;color:var(--mj-text-primary,#333);margin-bottom:4px\">Name <span style=\"color:var(--mj-status-error,#e53e3e)\">*</span></label>\n <input #cfName class=\"mj-input\" placeholder=\"e.g., Zapier Connection\" [value]=\"ConnectionForm.Name\" (input)=\"ConnectionForm.Name = cfName.value\" style=\"width:100%;box-sizing:border-box\" />\n </div>\n <div style=\"margin-bottom:16px\">\n <label style=\"display:block;font-size:0.875rem;font-weight:500;color:var(--mj-text-primary,#333);margin-bottom:4px\">Bearer Token</label>\n <input #cfToken class=\"mj-input\" placeholder=\"Paste bearer token here\" [value]=\"ConnectionForm.BearerToken\" (input)=\"ConnectionForm.BearerToken = cfToken.value\" style=\"width:100%;box-sizing:border-box;font-family:monospace;font-size:0.8rem\" />\n <span style=\"font-size:0.75rem;color:var(--mj-text-muted,#888)\">Will be stored as a Credential and linked to this connection</span>\n </div>\n <div style=\"margin-bottom:16px\">\n <label style=\"display:block;font-size:0.875rem;font-weight:500;color:var(--mj-text-primary,#333);margin-bottom:4px\">Status</label>\n <select #cfStatus class=\"mj-input\" [value]=\"ConnectionForm.Status\" (change)=\"ConnectionForm.Status = cfStatus.value\" style=\"width:100%;box-sizing:border-box\">\n <option value=\"Active\">Active</option>\n <option value=\"Inactive\">Inactive</option>\n </select>\n </div>\n </div>\n <div style=\"display:flex;align-items:center;gap:8px;padding:16px 20px;border-top:1px solid var(--mj-border-default,#e0e0e0);flex-shrink:0\">\n <button mjButton variant=\"primary\" (click)=\"saveConnectionForm()\" [disabled]=\"ConnectionFormSaving\">\n @if (ConnectionFormSaving) { <i class=\"fa-solid fa-spinner fa-spin\"></i> }\n Create\n </button>\n <button mjButton (click)=\"cancelConnectionForm()\">Cancel</button>\n </div>\n </div>\n </div>\n}\n\n<!-- Test Tool Dialog (inline) -->\n@if (ShowTestToolDialog) {\n <div style=\"position:fixed;inset:0;z-index:10000;background:rgba(0,0,0,0.5);display:flex;align-items:center;justify-content:center\" (click)=\"testCloseDialog()\">\n <div style=\"display:flex;flex-direction:column;background:var(--mj-bg-surface,#fff);border-radius:8px;box-shadow:0 20px 60px rgba(0,0,0,0.3);overflow:hidden;width:640px;max-width:90vw;max-height:90vh\" (click)=\"$event.stopPropagation()\">\n <!-- Title bar -->\n <div style=\"display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--mj-border-default,#e0e0e0);flex-shrink:0\">\n <h2 style=\"margin:0;font-size:1.125rem;font-weight:600;color:var(--mj-text-primary,#333)\">\n Test MCP Tool\n @if (TestStep !== 'select') {\n <span style=\"font-size:0.875rem;font-weight:400;color:var(--mj-text-muted,#888);margin-left:8px\">\u2014 {{ TestSelectedTool?.ToolTitle || TestSelectedTool?.ToolName }}</span>\n }\n </h2>\n <button style=\"display:flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;background:none;cursor:pointer;color:var(--mj-text-muted,#888);border-radius:4px\" (click)=\"testCloseDialog()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <!-- Step indicator -->\n <div style=\"display:flex;gap:0;padding:10px 20px;background:var(--mj-bg-surface-card,#f9f9f9);border-bottom:1px solid var(--mj-border-default,#e0e0e0);flex-shrink:0\">\n <span style=\"font-size:0.8rem;font-weight:500;\" [style.color]=\"TestStep==='select' ? 'var(--mj-brand-primary,#264FAF)' : 'var(--mj-text-muted,#888)'\">1. Select</span>\n <span style=\"margin:0 8px;color:var(--mj-text-muted,#888)\">\u203A</span>\n <span style=\"font-size:0.8rem;font-weight:500;\" [style.color]=\"TestStep==='configure' ? 'var(--mj-brand-primary,#264FAF)' : 'var(--mj-text-muted,#888)'\">2. Configure</span>\n <span style=\"margin:0 8px;color:var(--mj-text-muted,#888)\">\u203A</span>\n <span style=\"font-size:0.8rem;font-weight:500;\" [style.color]=\"TestStep==='results' ? 'var(--mj-brand-primary,#264FAF)' : 'var(--mj-text-muted,#888)'\">3. Results</span>\n </div>\n <!-- Body -->\n <div style=\"flex:1;overflow-y:auto;padding:20px;color:var(--mj-text-primary,#333)\">\n @if (TestStep === 'select') {\n <div style=\"margin-bottom:16px\">\n <label style=\"display:block;font-size:0.875rem;font-weight:500;color:var(--mj-text-primary,#333);margin-bottom:4px\">Server <span style=\"color:var(--mj-status-error,#e53e3e)\">*</span></label>\n <select #tSrv class=\"mj-input\" style=\"width:100%;box-sizing:border-box\" (change)=\"onTestServerChange(tSrv.value)\">\n <option value=\"\">\u2014 select server \u2014</option>\n @for (s of servers; track s.ID) {\n <option [value]=\"s.ID\" [selected]=\"TestToolServerID === s.ID\">{{ s.Name }}</option>\n }\n </select>\n </div>\n <div style=\"margin-bottom:16px\">\n <label style=\"display:block;font-size:0.875rem;font-weight:500;color:var(--mj-text-primary,#333);margin-bottom:4px\">Connection <span style=\"color:var(--mj-status-error,#e53e3e)\">*</span></label>\n <select #tConn class=\"mj-input\" style=\"width:100%;box-sizing:border-box\" [attr.disabled]=\"!TestToolServerID ? true : null\" (change)=\"onTestConnectionChange(tConn.value)\">\n <option value=\"\">\u2014 select connection \u2014</option>\n @for (c of TestFilteredConnections; track c.ID) {\n <option [value]=\"c.ID\" [selected]=\"TestToolConnectionID === c.ID\">{{ c.Name }}</option>\n }\n </select>\n </div>\n <div style=\"margin-bottom:16px\">\n <label style=\"display:block;font-size:0.875rem;font-weight:500;color:var(--mj-text-primary,#333);margin-bottom:4px\">Tool <span style=\"color:var(--mj-status-error,#e53e3e)\">*</span></label>\n <input #tSearch type=\"text\" class=\"mj-input\" style=\"width:100%;box-sizing:border-box;margin-bottom:6px\" placeholder=\"Search tools\u2026 (Recently used appear first)\" [value]=\"TestToolSearch\" (input)=\"onTestToolSearchChange(tSearch.value)\" [attr.disabled]=\"!TestToolServerID ? true : null\" />\n <div style=\"max-height:220px;overflow-y:auto;border:1px solid var(--mj-border-default,#e0e0e0);border-radius:4px;background:var(--mj-bg-surface,#fff)\">\n @if (TestComboboxTools.length === 0) {\n <div style=\"padding:12px;text-align:center;font-size:0.8rem;color:var(--mj-text-muted,#888)\">No tools match.</div>\n }\n @for (t of TestComboboxTools; track t.ID) {\n <div (click)=\"pickTestTool(t.ID)\" style=\"padding:8px 12px;cursor:pointer;display:flex;align-items:center;gap:8px;border-bottom:1px solid var(--mj-border-subtle,#eee)\" [style.background]=\"TestToolID === t.ID ? 'color-mix(in srgb, var(--mj-brand-primary,#264FAF) 12%, var(--mj-bg-surface,#fff))' : null\">\n @if (isRecentTestTool(t.ID)) {\n <span style=\"font-size:0.65rem;background:var(--mj-brand-primary,#264FAF);color:#fff;padding:1px 6px;border-radius:8px;font-weight:600\">Recent</span>\n }\n <div style=\"flex:1;min-width:0\">\n <div style=\"font-size:0.85rem;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap\">{{ t.ToolTitle || t.ToolName }}</div>\n @if (t.ToolTitle && t.ToolName !== t.ToolTitle) {\n <div style=\"font-size:0.7rem;color:var(--mj-text-muted,#888);overflow:hidden;text-overflow:ellipsis;white-space:nowrap\">{{ t.ToolName }}</div>\n }\n </div>\n @if (TestToolID === t.ID) {\n <i class=\"fa-solid fa-check\" style=\"color:var(--mj-brand-primary,#264FAF)\"></i>\n }\n </div>\n }\n </div>\n </div>\n } @else if (TestStep === 'configure') {\n @if (TestParamConfigs.length === 0) {\n <div style=\"text-align:center;padding:24px;color:var(--mj-text-muted,#888)\">\n <i class=\"fa-solid fa-check-circle\" style=\"font-size:2rem;margin-bottom:8px;display:block\"></i>\n <p>This tool requires no parameters.</p>\n </div>\n } @else {\n @for (p of TestParamConfigs; track p.name) {\n <div style=\"margin-bottom:16px\">\n <label style=\"display:block;font-size:0.875rem;font-weight:500;color:var(--mj-text-primary,#333);margin-bottom:4px\">\n {{ p.name }} @if (p.required) { <span style=\"color:var(--mj-status-error,#e53e3e)\">*</span> }\n </label>\n @if (p.description) {\n <p style=\"font-size:0.75rem;color:var(--mj-text-muted,#888);margin:0 0 4px 0\">{{ p.description }}</p>\n }\n @if (p.enumValues.length > 0) {\n <select #enumEl class=\"mj-input\" style=\"width:100%;box-sizing:border-box\" (change)=\"testSetParam(p.name, enumEl.value)\">\n <option value=\"\">\u2014 select \u2014</option>\n @for (v of p.enumValues; track $index) { <option [value]=\"$any(v)\">{{ $any(v) }}</option> }\n </select>\n } @else if (p.type === 'boolean') {\n <select #boolEl class=\"mj-input\" style=\"width:100%;box-sizing:border-box\" (change)=\"testSetParam(p.name, boolEl.value)\">\n <option value=\"false\">false</option>\n <option value=\"true\">true</option>\n </select>\n } @else if (p.type === 'array' || p.type === 'object') {\n <textarea #jsonEl class=\"mj-textarea\" rows=\"3\" style=\"width:100%;box-sizing:border-box;font-family:monospace;font-size:0.8rem\" (input)=\"testSetParam(p.name, jsonEl.value)\" [placeholder]=\"'Enter JSON ' + p.type + '...'\"></textarea>\n } @else {\n <input #strEl class=\"mj-input\" style=\"width:100%;box-sizing:border-box\" (input)=\"testSetParam(p.name, strEl.value)\" [placeholder]=\"p.description || 'Enter value...'\" />\n }\n </div>\n }\n }\n } @else {\n @if (TestExecutionResult?.Success) {\n <div style=\"background:var(--mj-status-success-bg,#f0fff4);border:1px solid var(--mj-status-success-border,#9ae6b4);border-radius:6px;padding:12px 16px;margin-bottom:16px;color:var(--mj-status-success-text,#276749)\">\n <i class=\"fa-solid fa-check-circle\"></i> Execution Successful\n @if (TestExecutionResult?.DurationMs) { <span style=\"float:right;font-size:0.75rem\">{{ TestExecutionResult?.DurationMs }}ms</span> }\n </div>\n } @else {\n <div style=\"background:var(--mj-status-error-bg,#fff5f5);border:1px solid var(--mj-status-error-border,#feb2b2);border-radius:6px;padding:12px 16px;margin-bottom:16px;color:var(--mj-status-error-text,#c53030)\">\n <i class=\"fa-solid fa-times-circle\"></i> Execution Failed\n </div>\n }\n @if (TestExecutionResult?.ErrorMessage) {\n <div style=\"margin-bottom:16px\">\n <label style=\"display:block;font-size:0.875rem;font-weight:500;margin-bottom:4px\">Error</label>\n <pre style=\"background:var(--mj-bg-surface-sunken,#f0f0f0);border-radius:4px;padding:12px;font-size:0.8rem;white-space:pre-wrap;word-break:break-all;margin:0\">{{ TestExecutionResult?.ErrorMessage }}</pre>\n </div>\n }\n @if (TestExecutionResult?.Result) {\n <div>\n <label style=\"display:block;font-size:0.875rem;font-weight:500;margin-bottom:4px\">Result</label>\n <pre style=\"background:var(--mj-bg-surface-sunken,#f0f0f0);border-radius:4px;padding:12px;font-size:0.8rem;white-space:pre-wrap;word-break:break-all;overflow-y:auto;max-height:300px;margin:0\">{{ formatTestResult(TestExecutionResult?.Result) }}</pre>\n </div>\n }\n }\n </div>\n <!-- Actions -->\n <div style=\"display:flex;align-items:center;gap:8px;padding:16px 20px;border-top:1px solid var(--mj-border-default,#e0e0e0);flex-shrink:0\">\n @if (TestStep === 'select') {\n <button mjButton variant=\"primary\" (click)=\"testProceedToConfig()\" [disabled]=\"!TestCanProceed\">Next <i class=\"fa-solid fa-arrow-right\"></i></button>\n <button mjButton (click)=\"testCloseDialog()\">Cancel</button>\n } @else if (TestStep === 'configure') {\n <button mjButton variant=\"primary\" (click)=\"testExecuteTool()\" [disabled]=\"!TestIsValid || TestIsExecuting\">\n @if (TestIsExecuting) { <i class=\"fa-solid fa-spinner fa-spin\"></i> Executing... } @else { <i class=\"fa-solid fa-play\"></i> Execute }\n </button>\n <button mjButton (click)=\"testGoBack()\"><i class=\"fa-solid fa-arrow-left\"></i> Back</button>\n } @else {\n <button mjButton variant=\"primary\" (click)=\"testRunAgain()\"><i class=\"fa-solid fa-redo\"></i> Run Again</button>\n <button mjButton (click)=\"testGoBack()\">Edit Params</button>\n <button mjButton (click)=\"testCloseDialog()\">Close</button>\n }\n </div>\n </div>\n </div>\n}\n\n<!-- Log Detail Panel (inlined) -->\n@if (ShowLogDetailPanel && SelectedLog) {\n <div style=\"position:fixed;inset:0;z-index:10000;pointer-events:none\">\n <div style=\"position:absolute;inset:0;background:rgba(0,0,0,0.35);pointer-events:auto\" (click)=\"onLogDetailClose()\"></div>\n <div style=\"position:absolute;top:0;right:0;height:100%;width:560px;max-width:95vw;background:var(--mj-bg-surface,#fff);box-shadow:-4px 0 20px rgba(0,0,0,0.15);display:flex;flex-direction:column;pointer-events:auto\">\n <div style=\"padding:16px 20px;border-bottom:1px solid var(--mj-border-default,#e0e0e0);display:flex;align-items:center;justify-content:space-between\">\n <div>\n <h3 style=\"margin:0;font-size:1rem;font-weight:600\">{{ SelectedLog.ToolName }}</h3>\n <div style=\"font-size:0.75rem;color:var(--mj-text-muted,#888);margin-top:4px\">\n <span [class]=\"SelectedLog.Status === 'Success' ? 'status-success' : SelectedLog.Status === 'Error' ? 'status-error' : 'status-running'\" style=\"font-weight:600\">{{ SelectedLog.Status }}</span>\n <span style=\"margin:0 8px\">\u00B7</span>\n <span>{{ formatDate(SelectedLog.StartedAt) }}</span>\n @if (SelectedLog.DurationMs != null) {\n <span style=\"margin:0 8px\">\u00B7</span>\n <span>{{ formatDuration(SelectedLog.DurationMs) }}</span>\n }\n </div>\n </div>\n <button mjButton (click)=\"onLogDetailClose()\" aria-label=\"Close\"><i class=\"fa-solid fa-xmark\"></i></button>\n </div>\n <div style=\"flex:1;overflow-y:auto;padding:16px 20px\">\n <div style=\"margin-bottom:16px\">\n <div style=\"font-size:0.75rem;color:var(--mj-text-muted,#888);margin-bottom:4px\">Connection</div>\n <div style=\"font-size:0.875rem\">{{ SelectedLog.ConnectionName || SelectedLog.ConnectionID }}</div>\n @if (SelectedLog.ServerName) {\n <div style=\"font-size:0.75rem;color:var(--mj-text-muted,#888);margin-top:2px\">{{ SelectedLog.ServerName }}</div>\n }\n </div>\n @if (SelectedLog.InputArgs) {\n <div style=\"margin-bottom:16px\">\n <label style=\"display:block;font-size:0.875rem;font-weight:500;margin-bottom:6px\">Input Arguments</label>\n <pre style=\"background:var(--mj-bg-surface-sunken,#f0f0f0);border-radius:4px;padding:12px;font-size:0.75rem;white-space:pre-wrap;word-break:break-all;overflow-y:auto;max-height:240px;margin:0\">{{ formatLogJson(SelectedLog.InputArgs) }}</pre>\n </div>\n }\n @if (SelectedLog.Result) {\n <div style=\"margin-bottom:16px\">\n <label style=\"display:block;font-size:0.875rem;font-weight:500;margin-bottom:6px\">Result</label>\n <pre style=\"background:var(--mj-bg-surface-sunken,#f0f0f0);border-radius:4px;padding:12px;font-size:0.75rem;white-space:pre-wrap;word-break:break-all;overflow-y:auto;max-height:360px;margin:0\">{{ formatLogJson(SelectedLog.Result) }}</pre>\n </div>\n }\n @if (SelectedLog.ErrorMessage) {\n <div style=\"margin-bottom:16px\">\n <label style=\"display:block;font-size:0.875rem;font-weight:500;margin-bottom:6px;color:var(--mj-status-error-text,#c53030)\">Error</label>\n <pre style=\"background:var(--mj-status-error-bg,#fff5f5);border:1px solid var(--mj-status-error-border,#feb2b2);border-radius:4px;padding:12px;font-size:0.75rem;white-space:pre-wrap;word-break:break-all;margin:0;color:var(--mj-status-error-text,#c53030)\">{{ SelectedLog.ErrorMessage }}</pre>\n </div>\n }\n </div>\n <div style=\"padding:12px 20px;border-top:1px solid var(--mj-border-default,#e0e0e0);display:flex;gap:8px;justify-content:flex-start\">\n @if (SelectedLog.ToolID) {\n <button mjButton variant=\"primary\" (click)=\"onRunAgainFromLog({ toolId: SelectedLog.ToolID!, connectionId: SelectedLog.ConnectionID })\"><i class=\"fa-solid fa-redo\"></i> Run Again</button>\n }\n <button mjButton (click)=\"onLogDetailClose()\">Close</button>\n </div>\n </div>\n </div>\n}\n", styles: ["/* MCP Dashboard - Header + Filter Panel Layout */\n.mcp-dashboard {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--mj-bg-page);\n overflow: hidden;\n}\n\n/* ========================================\n Dashboard Header\n ======================================== */\n.dashboard-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 20px;\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n gap: 16px;\n}\n\n.header-info {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.dashboard-title {\n display: flex;\n align-items: center;\n gap: 10px;\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.dashboard-title i {\n color: var(--mj-brand-primary);\n font-size: 20px;\n}\n\n.filter-toggle-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n cursor: pointer;\n font-size: 13px;\n color: var(--mj-text-secondary);\n transition: all 0.2s ease;\n}\n\n.filter-toggle-btn:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-primary);\n}\n\n.filter-toggle-btn i {\n font-size: 12px;\n}\n\n.item-count {\n font-size: 13px;\n color: var(--mj-text-secondary);\n padding: 4px 10px;\n background: var(--mj-bg-surface-card);\n border-radius: 4px;\n}\n\n.header-controls {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n/* Tab Navigation */\n.tab-nav {\n display: flex;\n gap: 4px;\n background: var(--mj-bg-surface-card);\n padding: 4px;\n border-radius: 8px;\n}\n\n.tab-btn {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 14px;\n background: transparent;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n transition: all 0.2s ease;\n}\n\n.tab-btn:hover {\n background: color-mix(in srgb, var(--mj-bg-surface) 70%, transparent);\n color: var(--mj-text-primary);\n}\n\n.tab-btn.active {\n background: var(--mj-bg-surface);\n color: var(--mj-brand-primary);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n}\n\n.tab-btn i {\n font-size: 14px;\n}\n\n.tab-label {\n font-weight: 500;\n}\n\n.tab-badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 22px;\n height: 18px;\n padding: 0 6px;\n background: var(--mj-border-default);\n border-radius: 9px;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-muted);\n}\n\n.tab-btn.active .tab-badge {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n color: var(--mj-brand-primary);\n}\n\n.tab-badge.has-errors {\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n}\n\n/* ========================================\n Main Content Area (with Filter Panel)\n ======================================== */\n.main-content {\n display: flex;\n flex-direction: row;\n flex: 1;\n overflow: hidden;\n min-width: 0;\n}\n\n/* Filter Panel Container */\n.filter-panel-container {\n display: flex;\n flex-shrink: 0;\n width: 280px;\n min-width: 200px;\n max-width: 400px;\n background: var(--mj-bg-surface);\n border-right: 1px solid var(--mj-border-default);\n position: relative;\n transition: width 0.2s ease, margin 0.2s ease;\n}\n\n.filter-panel-container.hidden {\n width: 0;\n min-width: 0;\n margin-left: -1px;\n overflow: hidden;\n}\n\n/* Resize Handle */\n.resize-handle {\n position: absolute;\n top: 0;\n right: 0;\n width: 4px;\n height: 100%;\n cursor: col-resize;\n background: transparent;\n transition: background 0.2s ease;\n z-index: 10;\n}\n\n.resize-handle:hover,\n.resize-handle:active {\n background: var(--mj-brand-primary);\n}\n\n/* Content Area */\n.content-area {\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow: hidden;\n min-width: 0;\n}\n\n/* Content Body */\n.content-body {\n flex: 1;\n padding: 20px 24px;\n overflow: auto;\n}\n\n/* Error Banner */\n.error-banner {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 16px;\n margin: 16px 24px 0 24px;\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n border: 1px solid var(--mj-status-error);\n border-radius: 8px;\n color: var(--mj-status-error);\n}\n\n.error-banner .close-btn {\n margin-left: auto;\n background: none;\n border: none;\n cursor: pointer;\n color: var(--mj-status-error);\n padding: 4px;\n}\n\n/* ========================================\n Data Display Components\n ======================================== */\n\n/* Data Grid (Cards) */\n.data-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(350px, 1fr));\n gap: 16px;\n}\n\n.data-card {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n background: var(--mj-bg-surface);\n transition: box-shadow 0.2s ease;\n}\n\n.data-card:hover {\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n}\n\n.card-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 16px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.card-title {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.card-title i {\n color: var(--mj-brand-primary);\n}\n\n.card-title .name {\n font-weight: 600;\n font-size: 15px;\n}\n\n.card-actions {\n display: flex;\n gap: 4px;\n}\n\n.card-actions button {\n padding: 4px 8px;\n}\n\n.card-body {\n padding: 16px;\n}\n\n.card-body .description {\n margin: 0 0 12px 0;\n color: var(--mj-text-secondary);\n font-size: 13px;\n}\n\n.details-grid {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 12px;\n}\n\n.detail {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.detail.full-width {\n grid-column: 1 / -1;\n}\n\n.detail.error .value {\n color: var(--mj-status-error);\n}\n\n.detail .label {\n font-size: 11px;\n text-transform: uppercase;\n color: var(--mj-text-disabled);\n font-weight: 500;\n}\n\n.detail .value {\n font-size: 13px;\n color: var(--mj-text-primary);\n}\n\n.detail .value.url,\n.detail .value.command {\n font-family: monospace;\n font-size: 12px;\n background: var(--mj-bg-surface-card);\n padding: 4px 8px;\n border-radius: 4px;\n word-break: break-all;\n}\n\n/* Status Badges */\n.status-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 8px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.status-active {\n background: color-mix(in srgb, var(--mj-status-success) 10%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.status-inactive {\n background: color-mix(in srgb, var(--mj-text-disabled) 10%, var(--mj-bg-surface));\n color: var(--mj-text-disabled);\n}\n\n.status-error {\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.status-deprecated {\n background: color-mix(in srgb, var(--mj-status-warning) 10%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.status-unknown {\n background: color-mix(in srgb, var(--mj-text-disabled) 10%, var(--mj-bg-surface));\n color: var(--mj-text-disabled);\n}\n\n/* Sync Progress & Result Banners */\n.sync-progress-banner {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 16px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-bottom: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n color: var(--mj-brand-primary);\n font-size: 13px;\n}\n\n.sync-progress-banner i {\n color: var(--mj-brand-primary);\n}\n\n.sync-progress-banner .sync-message {\n flex: 1;\n}\n\n.sync-result-banner {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n font-size: 12px;\n border-bottom: 1px solid;\n}\n\n.sync-result-banner.success {\n background: color-mix(in srgb, var(--mj-status-success) 8%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-success) 20%, transparent);\n color: var(--mj-color-success-700);\n}\n\n.sync-result-banner.success i {\n color: var(--mj-status-success);\n}\n\n.sync-result-banner.error {\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-error) 20%, transparent);\n color: var(--mj-status-error);\n}\n\n.sync-result-banner.error i {\n color: var(--mj-status-error);\n}\n\n/* Data Table */\n.data-table {\n overflow: auto;\n background: var(--mj-bg-surface);\n border-radius: 8px;\n border: 1px solid var(--mj-border-default);\n}\n\n.data-table table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.data-table th,\n.data-table td {\n padding: 12px 16px;\n text-align: left;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.data-table th {\n font-size: 11px;\n text-transform: uppercase;\n color: var(--mj-text-disabled);\n font-weight: 600;\n background: var(--mj-bg-surface-card);\n position: sticky;\n top: 0;\n}\n\n.data-table tbody tr {\n cursor: pointer;\n transition: background 0.2s ease;\n}\n\n.data-table tbody tr:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.data-table tbody tr:last-child td {\n border-bottom: none;\n}\n\n.data-table tbody tr.error-row {\n background: color-mix(in srgb, var(--mj-status-error) 5%, var(--mj-bg-surface));\n}\n\n.data-table .tool-name {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n}\n\n.data-table .tool-name i {\n color: var(--mj-brand-primary);\n}\n\n.data-table .error-message {\n max-width: 200px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--mj-status-error);\n font-size: 12px;\n}\n\n.data-table .server-name {\n color: var(--mj-text-secondary);\n font-size: 13px;\n}\n\n/* Sortable Column Headers */\n.data-table th.sortable {\n cursor: pointer;\n user-select: none;\n transition: background 0.15s ease;\n}\n\n.data-table th.sortable:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.data-table th.sortable .sort-icon {\n margin-left: 6px;\n font-size: 10px;\n color: var(--mj-border-strong);\n transition: color 0.15s ease;\n}\n\n.data-table th.sortable:hover .sort-icon {\n color: var(--mj-text-disabled);\n}\n\n.data-table th.sorted-asc .sort-icon,\n.data-table th.sorted-desc .sort-icon {\n color: var(--mj-brand-primary);\n}\n\n/* Status badge icons */\n.status-badge i {\n font-size: 12px;\n}\n\n/* Empty State */\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 20px;\n text-align: center;\n background: var(--mj-bg-surface);\n border-radius: 8px;\n border: 1px solid var(--mj-border-default);\n}\n\n.empty-state i {\n font-size: 48px;\n color: var(--mj-border-default);\n margin-bottom: 16px;\n}\n\n.empty-state p {\n margin: 0 0 8px 0;\n font-size: 16px;\n color: var(--mj-text-primary);\n}\n\n.empty-state .hint {\n font-size: 13px;\n color: var(--mj-text-secondary);\n margin-bottom: 16px;\n}\n\n/* ========================================\n View Mode Toggle\n ======================================== */\n.view-toggle {\n display: flex;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.view-toggle button {\n border-radius: 0;\n border: none;\n padding: 6px 10px;\n}\n\n.view-toggle button.active {\n background: var(--mj-brand-primary);\n color: var(--mj-color-neutral-0);\n}\n\n/* ========================================\n Tools Tab - Server Groups\n ======================================== */\n.tools-container {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.server-group {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n}\n\n.server-group-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 16px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n cursor: pointer;\n transition: background 0.2s ease;\n}\n\n.server-group-header:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.server-group.collapsed .server-group-header {\n border-bottom: none;\n}\n\n.server-info {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.expand-icon {\n font-size: 12px;\n color: var(--mj-text-disabled);\n transition: transform 0.2s ease;\n}\n\n.expand-icon.expanded {\n transform: rotate(90deg);\n}\n\n.server-name {\n font-weight: 600;\n font-size: 15px;\n color: var(--mj-text-primary);\n}\n\n.tool-count {\n font-size: 12px;\n color: var(--mj-text-secondary);\n background: rgba(0, 0, 0, 0.05);\n padding: 2px 8px;\n border-radius: 10px;\n}\n\n.status-badge.small {\n padding: 2px 6px;\n font-size: 10px;\n}\n\n.server-actions {\n display: flex;\n gap: 4px;\n}\n\n/* ========================================\n Tools Grid (Card View)\n ======================================== */\n.tools-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 12px;\n padding: 16px;\n}\n\n.tool-card {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n transition: all 0.2s ease;\n overflow: hidden;\n}\n\n.tool-card:hover {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.tool-card.expanded {\n border-color: var(--mj-brand-primary);\n}\n\n.tool-card-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n padding: 12px 14px;\n cursor: pointer;\n}\n\n.tool-title {\n display: flex;\n align-items: center;\n gap: 8px;\n flex: 1;\n}\n\n.tool-title i {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.tool-title .name {\n font-weight: 600;\n font-size: 14px;\n color: var(--mj-text-primary);\n}\n\n.tool-meta {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.param-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 8px;\n background: var(--mj-bg-surface-card);\n border-radius: 10px;\n font-size: 11px;\n color: var(--mj-text-secondary);\n}\n\n.param-badge i {\n font-size: 10px;\n}\n\n.tool-description {\n margin: 0;\n padding: 0 14px 8px 14px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n line-height: 1.4;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n.tool-card-actions {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n padding: 8px 14px;\n border-top: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n}\n\n/* Tool Details (Expanded) */\n.tool-details {\n padding: 12px 14px;\n background: var(--mj-bg-surface-card);\n border-top: 1px solid var(--mj-border-default);\n}\n\n.tool-details .detail-row {\n display: flex;\n padding: 6px 0;\n font-size: 12px;\n}\n\n.tool-details .detail-row.full {\n flex-direction: column;\n gap: 6px;\n}\n\n.tool-details .detail-label {\n min-width: 100px;\n color: var(--mj-text-secondary);\n font-weight: 500;\n}\n\n.tool-details .detail-value {\n color: var(--mj-text-primary);\n}\n\n.tool-details .detail-value.mono {\n font-family: 'Consolas', 'Monaco', monospace;\n background: var(--mj-bg-surface);\n padding: 2px 6px;\n border-radius: 3px;\n border: 1px solid var(--mj-border-default);\n}\n\n.schema-preview {\n margin: 0;\n padding: 10px 12px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n font-family: 'Consolas', 'Monaco', monospace;\n font-size: 11px;\n line-height: 1.4;\n max-height: 200px;\n overflow: auto;\n white-space: pre-wrap;\n word-break: break-word;\n}\n\n/* ========================================\n Tools List View\n ======================================== */\n.tools-list {\n overflow: auto;\n}\n\n.tools-list table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.tools-list th,\n.tools-list td {\n padding: 10px 14px;\n text-align: left;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.tools-list th {\n font-size: 11px;\n text-transform: uppercase;\n color: var(--mj-text-disabled);\n font-weight: 600;\n background: var(--mj-bg-surface-card);\n position: sticky;\n top: 0;\n}\n\n.tools-list tbody tr {\n transition: background 0.15s ease;\n}\n\n.tools-list tbody tr:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.tools-list tbody tr.expanded {\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n}\n\n.tool-name-cell {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n}\n\n.tool-name-cell i {\n color: var(--mj-brand-primary);\n margin-top: 2px;\n}\n\n.tool-name-info {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.tool-name-info .tool-title {\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.tool-name-info .tool-code {\n font-size: 11px;\n font-family: monospace;\n color: var(--mj-text-secondary);\n}\n\n.description-cell {\n max-width: 300px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.param-count {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 24px;\n height: 24px;\n background: var(--mj-bg-surface-card);\n border-radius: 12px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n}\n\n.actions-cell {\n white-space: nowrap;\n}\n\n/* Expanded Detail Row in List View */\n.detail-row-expanded td {\n padding: 0;\n background: var(--mj-bg-surface-card);\n}\n\n.inline-details {\n display: flex;\n flex-wrap: wrap;\n gap: 16px;\n padding: 14px;\n border-top: 1px dashed var(--mj-border-default);\n}\n\n.inline-details .detail-section {\n display: flex;\n gap: 8px;\n font-size: 12px;\n}\n\n.inline-details .detail-section.full {\n flex-basis: 100%;\n flex-direction: column;\n gap: 6px;\n}\n\n.inline-details .detail-label {\n color: var(--mj-text-secondary);\n font-weight: 500;\n}\n\n.inline-details .detail-value {\n color: var(--mj-text-primary);\n}\n\n.inline-details .detail-value.mono {\n font-family: monospace;\n}\n\n/* ========================================\n Responsive Styles\n ======================================== */\n@media (max-width: 900px) {\n .mcp-dashboard {\n flex-direction: column;\n }\n\n .sidebar {\n width: 100%;\n min-width: 100%;\n flex-direction: row;\n height: auto;\n border-right: none;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .sidebar-header {\n padding: 12px 16px;\n border-bottom: none;\n border-right: 1px solid var(--mj-border-default);\n }\n\n .sidebar-nav {\n flex-direction: row;\n padding: 8px;\n overflow-x: auto;\n flex: 1;\n }\n\n .nav-item {\n padding: 8px 12px;\n margin-bottom: 0;\n margin-right: 4px;\n white-space: nowrap;\n }\n\n .sidebar-stats {\n display: none;\n }\n\n .sidebar-footer {\n border-top: none;\n border-left: 1px solid var(--mj-border-default);\n padding: 8px;\n }\n\n .data-grid {\n grid-template-columns: 1fr;\n }\n\n .header-actions {\n flex-wrap: wrap;\n }\n\n .search-box {\n min-width: 100%;\n order: 1;\n }\n}\n\n@media (max-width: 600px) {\n .content-header {\n flex-direction: column;\n align-items: flex-start;\n gap: 12px;\n }\n\n .header-actions {\n width: 100%;\n }\n\n .search-box {\n width: 100%;\n }\n}\n\n/* ========================================\n Clickable Log Rows\n ======================================== */\n.clickable-row {\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.clickable-row:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 5%, transparent) !important;\n}\n\n.clickable-row .action-cell {\n color: var(--mj-border-strong);\n transition: color 0.15s ease;\n}\n\n.clickable-row:hover .action-cell {\n color: var(--mj-brand-primary);\n}\n\n.action-cell {\n width: 40px;\n text-align: center;\n}\n\n/* ========================================\n Expandable Card Styles\n ======================================== */\n.card-header.clickable {\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.card-header.clickable:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.expand-arrow {\n font-size: 12px;\n color: var(--mj-text-disabled);\n transition: transform 0.2s ease;\n margin-right: 4px;\n}\n\n.expand-arrow.rotated {\n transform: rotate(90deg);\n}\n\n.data-card.expanded {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n/* ========================================\n Expanded Tools Section (Server/Connection Cards)\n ======================================== */\n.expanded-tools-section {\n border-top: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n}\n\n.tools-section-header {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 16px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-brand-primary);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.tools-section-header i {\n font-size: 14px;\n}\n\n.no-tools-message {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 16px;\n color: var(--mj-text-secondary);\n font-size: 13px;\n}\n\n.no-tools-message i {\n color: var(--mj-text-disabled);\n}\n\n/* Tools Mini List */\n.tools-mini-list {\n padding: 8px;\n display: flex;\n flex-direction: column;\n gap: 4px;\n max-height: 300px;\n overflow-y: auto;\n}\n\n.tool-mini-card {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 12px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n transition: all 0.15s ease;\n}\n\n.tool-mini-card:hover {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 2%, transparent);\n}\n\n.tool-mini-info {\n display: flex;\n flex-direction: column;\n gap: 2px;\n flex: 1;\n min-width: 0;\n}\n\n.tool-mini-name {\n font-weight: 500;\n font-size: 13px;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.tool-mini-params {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 11px;\n color: var(--mj-text-secondary);\n}\n\n.tool-mini-params i {\n font-size: 10px;\n}\n\n.tool-mini-card button {\n flex-shrink: 0;\n margin-left: 8px;\n}\n\n/* Search Highlight */\n:host ::ng-deep .search-highlight,\n.search-highlight {\n background-color: color-mix(in srgb, var(--mj-status-warning) 40%, var(--mj-bg-surface));\n padding: 1px 2px;\n border-radius: 2px;\n font-weight: inherit;\n}\n"] }]
4354
+ args: [{ standalone: false, selector: 'mj-mcp-dashboard', template: "<mj-page-layout>\n <!-- Header -->\n <mj-page-header\n Title=\"MCP Dashboard\"\n Icon=\"fa-solid fa-plug-circle-bolt\">\n <div meta>\n <mj-stat-badge [Count]=\"CurrentFilteredCount\" [Total]=\"CurrentTotalCount\" Label=\"items\"></mj-stat-badge>\n </div>\n <div actions>\n <mj-filter-popover\n [ActiveCount]=\"ActiveFilterCount\"\n [ShowClearAll]=\"ActiveFilterCount > 0\"\n (ClearAllRequested)=\"resetPopoverFilters()\">\n <mj-filter-panel\n [Fields]=\"mcpFilterFields\"\n [Values]=\"mcpFilterValues\"\n (ValuesChange)=\"onFilterValuesChange($event)\"\n (Reset)=\"resetPopoverFilters()\">\n </mj-filter-panel>\n </mj-filter-popover>\n\n <!-- Tab Navigation -->\n <mj-tab-nav\n [Tabs]=\"mcpTabs\"\n [ActiveKey]=\"ActiveTab\"\n (TabChange)=\"setActiveTab($any($event))\">\n </mj-tab-nav>\n\n <!-- Action Buttons based on tab -->\n @switch (ActiveTab) {\n @case ('servers') {\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"createServer()\">\n <i class=\"fa-solid fa-plus\"></i>\n Add Server\n </button>\n }\n @case ('connections') {\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"createConnection()\">\n <i class=\"fa-solid fa-plus\"></i>\n Add Connection\n </button>\n }\n @case ('tools') {\n <mj-view-toggle\n [Options]=\"toolsViewOptions\"\n [ActiveKey]=\"ToolsViewMode\"\n (KeyChange)=\"setToolsViewMode($any($event))\">\n </mj-view-toggle>\n <button mjButton variant=\"secondary\" size=\"sm\"\n (click)=\"toggleScalableMode(!useScalablePagination)\"\n [title]=\"useScalablePagination ? 'Scale mode on: virtual scroll, paginated' : 'Enable scale mode for large tool sets'\">\n <i class=\"fa-solid\" [class.fa-bolt]=\"useScalablePagination\" [class.fa-bolt-lightning]=\"!useScalablePagination\"></i>\n Scale: {{ useScalablePagination ? 'ON' : 'OFF' }}\n </button>\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"openTestToolDialog()\">\n <i class=\"fa-solid fa-play\"></i>\n Test Tool\n </button>\n }\n @case ('logs') {\n <mj-refresh-button [Loading]=\"IsLoading\" (Clicked)=\"loadAllData()\"></mj-refresh-button>\n }\n }\n </div>\n <div toolbar>\n <mj-page-search\n Placeholder=\"Search\u2026\"\n [Value]=\"CurrentFilters.searchTerm\"\n (ValueChange)=\"onSearchTermChange($event)\">\n </mj-page-search>\n </div>\n </mj-page-header>\n\n <!-- Main Content -->\n <mj-page-body [Flex]=\"true\">\n <!-- Error Message -->\n @if (ErrorMessage) {\n <div class=\"error-banner\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n {{ ErrorMessage }}\n <button class=\"close-btn\" (click)=\"ErrorMessage = null\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n }\n\n @if (IsLoading) {\n <mj-loading text=\"Loading MCP data...\"></mj-loading>\n } @else {\n @switch (ActiveTab) {\n <!-- Servers Tab -->\n @case ('servers') {\n <div class=\"data-grid servers-grid\">\n @if (filteredServers.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-server\"></i>\n <p>No MCP servers configured</p>\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"createServer()\">\n Add Your First Server\n </button>\n </div>\n } @else {\n @for (server of filteredServers; track server.ID) {\n <div class=\"data-card\" [class.expanded]=\"isServerExpanded(server)\">\n <div class=\"card-header clickable\" (click)=\"toggleServerExpand(server)\">\n <div class=\"card-title\">\n <i class=\"fa-solid fa-chevron-right expand-arrow\" [class.rotated]=\"isServerExpanded(server)\"></i>\n <i [class]=\"getTransportIcon(server.TransportType)\"></i>\n <span class=\"name\">{{ server.Name }}</span>\n <span class=\"status-badge\" [ngClass]=\"getStatusClass(server.Status)\">\n {{ server.Status }}\n </span>\n </div>\n <div class=\"card-actions\" (click)=\"$event.stopPropagation()\">\n <button mjButton variant=\"flat\" (click)=\"editServer(server)\" title=\"Edit\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n <button mjButton variant=\"flat\" (click)=\"deleteServer(server)\" title=\"Delete\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n </div>\n </div>\n <div class=\"card-body\">\n @if (server.Description) {\n <p class=\"description\">{{ server.Description }}</p>\n }\n <div class=\"details-grid\">\n <div class=\"detail\">\n <span class=\"label\">Transport</span>\n <span class=\"value\">{{ server.TransportType }}</span>\n </div>\n <div class=\"detail\">\n <span class=\"label\">Auth</span>\n <span class=\"value\">{{ server.DefaultAuthType }}</span>\n </div>\n <div class=\"detail\">\n <span class=\"label\">Connections</span>\n <span class=\"value\">{{ server.ConnectionCount }}</span>\n </div>\n <div class=\"detail\">\n <span class=\"label\">Tools</span>\n <span class=\"value\">{{ server.ToolCount }}</span>\n </div>\n @if (server.ServerURL) {\n <div class=\"detail full-width\">\n <span class=\"label\">URL</span>\n <span class=\"value url\">{{ server.ServerURL }}</span>\n </div>\n }\n @if (server.Command) {\n <div class=\"detail full-width\">\n <span class=\"label\">Command</span>\n <span class=\"value command\">{{ server.Command }}</span>\n </div>\n }\n <div class=\"detail\">\n <span class=\"label\">Last Sync</span>\n <span class=\"value\">{{ formatDate(server.LastSyncAt) }}</span>\n </div>\n </div>\n </div>\n <!-- Expanded Tools Section -->\n @if (isServerExpanded(server)) {\n <div class=\"expanded-tools-section\">\n <div class=\"tools-section-header\">\n <i class=\"fa-solid fa-wrench\"></i>\n <span>Available Tools ({{ getToolsForServer(server.ID).length }})</span>\n </div>\n @if (getToolsForServer(server.ID).length === 0) {\n <div class=\"no-tools-message\">\n <i class=\"fa-solid fa-info-circle\"></i>\n No tools discovered yet. Sync a connection to discover tools.\n </div>\n } @else {\n <div class=\"tools-mini-list\">\n @for (tool of getToolsForServer(server.ID); track tool.ID) {\n <div class=\"tool-mini-card\">\n <div class=\"tool-mini-info\">\n <span class=\"tool-mini-name\">{{ tool.ToolTitle || tool.ToolName }}</span>\n <span class=\"tool-mini-params\">\n <i class=\"fa-solid fa-sliders\"></i>\n {{ getParamCount(tool) }} params\n </span>\n </div>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"runToolFromCard(tool); $event.stopPropagation()\"\n title=\"Test this tool\">\n <i class=\"fa-solid fa-play\"></i>\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n }\n </div>\n }\n\n <!-- Connections Tab -->\n @case ('connections') {\n <div class=\"data-grid connections-grid\">\n @if (filteredConnections.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-link\"></i>\n <p>No connections configured</p>\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"createConnection()\">\n Add Your First Connection\n </button>\n </div>\n } @else {\n @for (conn of filteredConnections; track conn.ID) {\n <div class=\"data-card\" [class.expanded]=\"isConnectionExpanded(conn)\">\n <div class=\"card-header clickable\" (click)=\"toggleConnectionExpand(conn)\">\n <div class=\"card-title\">\n <i class=\"fa-solid fa-chevron-right expand-arrow\" [class.rotated]=\"isConnectionExpanded(conn)\"></i>\n <i class=\"fa-solid fa-link\"></i>\n <span class=\"name\">{{ conn.Name }}</span>\n <span class=\"status-badge\" [ngClass]=\"getStatusClass(conn.Status)\">\n {{ conn.Status }}\n </span>\n </div>\n <div class=\"card-actions\" (click)=\"$event.stopPropagation()\">\n <button mjButton\n variant=\"flat\"\n (click)=\"syncConnectionTools(conn)\"\n [disabled]=\"isSyncing(conn.ID)\"\n title=\"Sync Tools\">\n @if (isSyncing(conn.ID)) {\n <i class=\"fa-solid fa-sync fa-spin\"></i>\n } @else {\n <i class=\"fa-solid fa-sync\"></i>\n }\n </button>\n <button mjButton variant=\"flat\" (click)=\"editConnection(conn)\" title=\"Edit\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n <button mjButton variant=\"flat\" (click)=\"deleteConnection(conn)\" title=\"Delete\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n </div>\n </div>\n <!-- Sync Progress Banner -->\n @if (isSyncing(conn.ID)) {\n <div class=\"sync-progress-banner\">\n <i class=\"fa-solid fa-circle-notch fa-spin\"></i>\n <span class=\"sync-message\">{{ getSyncProgressMessage(conn.ID) || 'Syncing...' }}</span>\n </div>\n }\n <!-- Sync Result Banner -->\n @if (getSyncState(conn.ID)?.lastResult && !isSyncing(conn.ID)) {\n <div class=\"sync-result-banner\"\n [class.success]=\"getSyncState(conn.ID)?.lastResult?.Success\"\n [class.error]=\"!getSyncState(conn.ID)?.lastResult?.Success\">\n @if (getSyncState(conn.ID)?.lastResult?.Success) {\n <i class=\"fa-solid fa-check-circle\"></i>\n <span>Synced: {{ getSyncState(conn.ID)?.lastResult?.Added }} added,\n {{ getSyncState(conn.ID)?.lastResult?.Updated }} updated,\n {{ getSyncState(conn.ID)?.lastResult?.Deprecated }} deprecated\n </span>\n } @else {\n <i class=\"fa-solid fa-exclamation-circle\"></i>\n <span>{{ getSyncState(conn.ID)?.lastResult?.ErrorMessage }}</span>\n }\n </div>\n }\n <div class=\"card-body\">\n @if (conn.Description) {\n <p class=\"description\">{{ conn.Description }}</p>\n }\n <div class=\"details-grid\">\n <div class=\"detail\">\n <span class=\"label\">Server</span>\n <span class=\"value\">{{ conn.ServerName }}</span>\n </div>\n <div class=\"detail\">\n <span class=\"label\">Auto Sync</span>\n <span class=\"value\">{{ conn.AutoSyncTools ? 'Yes' : 'No' }}</span>\n </div>\n <div class=\"detail\">\n <span class=\"label\">Logging</span>\n <span class=\"value\">{{ conn.LogToolCalls ? 'Enabled' : 'Disabled' }}</span>\n </div>\n <div class=\"detail\">\n <span class=\"label\">Last Connected</span>\n <span class=\"value\">{{ formatDate(conn.LastConnectedAt) }}</span>\n </div>\n @if (conn.LastErrorMessage) {\n <div class=\"detail full-width error\">\n <span class=\"label\">Last Error</span>\n <span class=\"value\">{{ conn.LastErrorMessage }}</span>\n </div>\n }\n </div>\n </div>\n <!-- Expanded Tools Section -->\n @if (isConnectionExpanded(conn)) {\n <div class=\"expanded-tools-section\">\n <div class=\"tools-section-header\">\n <i class=\"fa-solid fa-wrench\"></i>\n <span>Available Tools ({{ getToolsForConnection(conn.ID).length }})</span>\n </div>\n @if (getToolsForConnection(conn.ID).length === 0) {\n <div class=\"no-tools-message\">\n <i class=\"fa-solid fa-info-circle\"></i>\n No tools discovered yet. Click the sync button to discover tools.\n </div>\n } @else {\n <div class=\"tools-mini-list\">\n @for (tool of getToolsForConnection(conn.ID); track tool.ID) {\n <div class=\"tool-mini-card\">\n <div class=\"tool-mini-info\">\n <span class=\"tool-mini-name\">{{ tool.ToolTitle || tool.ToolName }}</span>\n <span class=\"tool-mini-params\">\n <i class=\"fa-solid fa-sliders\"></i>\n {{ getParamCount(tool) }} params\n </span>\n </div>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"runToolFromCard(tool, conn); $event.stopPropagation()\"\n title=\"Test this tool with this connection\">\n <i class=\"fa-solid fa-play\"></i>\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n }\n </div>\n }\n\n <!-- Tools Tab -->\n @case ('tools') {\n @if (useScalablePagination) {\n <div style=\"padding:8px 12px;font-size:0.8rem;color:var(--mj-text-secondary,#475569);background:var(--mj-bg-surface-card,#f8f9fa);border-radius:4px;margin-bottom:6px\">\n Showing <strong>{{ visiblePagedTools.length }}</strong> of <strong>{{ scaleDenominator() }}</strong> tools\n </div>\n <div style=\"height:calc(100vh - 260px);width:100%;overflow-y:auto;border:1px solid var(--mj-border-subtle,#eee);border-radius:4px\" (scroll)=\"onToolsScrollNative($event)\">\n @for (tool of visiblePagedTools; track tool.ID) {\n <div style=\"display:flex;align-items:center;gap:12px;padding:12px 14px;border-bottom:1px solid var(--mj-border-subtle,#eee);height:72px;box-sizing:border-box\">\n <i class=\"fa-solid fa-wrench\" style=\"color:var(--mj-brand-primary,#264FAF)\"></i>\n <div style=\"flex:1;min-width:0\">\n <div style=\"font-weight:500;font-size:0.875rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap\">{{ tool.ToolTitle || tool.ToolName }}</div>\n <div style=\"font-size:0.75rem;color:var(--mj-text-muted,#888);overflow:hidden;text-overflow:ellipsis;white-space:nowrap\">{{ tool.ServerName }} \u00B7 {{ tool.ToolName }}</div>\n </div>\n <button type=\"button\" (click)=\"toggleFavorite(tool.ID, $event)\" [title]=\"isFavorited(tool.ID) ? 'Unfavorite' : 'Favorite'\" style=\"background:transparent;border:none;cursor:pointer;padding:4px;font-size:1rem\" [style.color]=\"isFavorited(tool.ID) ? 'var(--mj-status-warning, #f59e0b)' : 'var(--mj-text-muted, #bbb)'\">\n <i [class]=\"isFavorited(tool.ID) ? 'fa-solid fa-star' : 'fa-regular fa-star'\"></i>\n </button>\n <span class=\"status-badge small\" [ngClass]=\"getStatusClass(tool.Status)\">{{ tool.Status }}</span>\n </div>\n }\n @if (toolsLoading) {\n <div style=\"padding:12px;text-align:center;font-size:0.8rem;color:var(--mj-text-muted,#888)\">Loading more\u2026</div>\n }\n </div>\n } @else if (ServerGroups.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-wrench\"></i>\n <p>No tools discovered yet</p>\n <span class=\"hint\">Tools are discovered when connections sync with MCP servers</span>\n </div>\n } @else {\n <div class=\"tools-container\">\n <!-- Server Groups -->\n @for (group of ServerGroups; track group.server.ID) {\n <div class=\"server-group\" [class.collapsed]=\"!group.expanded\">\n <!-- Server Group Header -->\n <div class=\"server-group-header\" (click)=\"toggleServerGroup(group)\">\n <div class=\"server-info\">\n <i class=\"fa-solid fa-chevron-right expand-icon\" [class.expanded]=\"group.expanded\"></i>\n <i [class]=\"getTransportIcon(group.server.TransportType)\"></i>\n <span class=\"server-name\">{{ group.server.Name }}</span>\n <span class=\"tool-count\">{{ getServerToolCount(group.server.ID) }} tools</span>\n <span class=\"status-badge small\" [ngClass]=\"getStatusClass(group.server.Status)\">\n {{ group.server.Status }}\n </span>\n </div>\n <div class=\"server-actions\" (click)=\"$event.stopPropagation()\">\n <button mjButton variant=\"flat\" (click)=\"openTestToolDialog(undefined, undefined)\" title=\"Test a tool\">\n <i class=\"fa-solid fa-play\"></i>\n </button>\n </div>\n </div>\n\n <!-- Tools Content -->\n @if (group.expanded) {\n <!-- Card View -->\n @if (ToolsViewMode === 'card') {\n <div class=\"tools-grid\">\n @for (tool of group.tools; track tool.ID) {\n <div class=\"tool-card\" [class.expanded]=\"isToolExpanded(tool)\">\n <div class=\"tool-card-header\" (click)=\"toggleToolExpand(tool)\">\n <div class=\"tool-title\">\n <i class=\"fa-solid fa-wrench\"></i>\n <span class=\"name\">{{ tool.ToolTitle || tool.ToolName }}</span>\n </div>\n <div class=\"tool-meta\">\n <span class=\"param-badge\" title=\"Parameters\">\n <i class=\"fa-solid fa-sliders\"></i>\n {{ getParamCount(tool) }}\n </span>\n <span class=\"status-badge small\" [ngClass]=\"getStatusClass(tool.Status)\">\n {{ tool.Status }}\n </span>\n </div>\n </div>\n @if (tool.ToolDescription) {\n <p class=\"tool-description\">{{ tool.ToolDescription }}</p>\n }\n <div class=\"tool-card-actions\">\n <button type=\"button\" (click)=\"toggleFavorite(tool.ID, $event)\" [title]=\"isFavorited(tool.ID) ? 'Unfavorite' : 'Favorite'\" style=\"background:transparent;border:none;cursor:pointer;padding:4px;font-size:1rem\" [style.color]=\"isFavorited(tool.ID) ? 'var(--mj-status-warning, #f59e0b)' : 'var(--mj-text-muted, #bbb)'\">\n <i [class]=\"isFavorited(tool.ID) ? 'fa-solid fa-star' : 'fa-regular fa-star'\"></i>\n </button>\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"openTestToolDialog(tool)\" title=\"Test this tool\">\n <i class=\"fa-solid fa-play\"></i>\n Test\n </button>\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"toggleToolExpand(tool)\" title=\"View details\">\n <i class=\"fa-solid\" [class.fa-chevron-down]=\"!isToolExpanded(tool)\" [class.fa-chevron-up]=\"isToolExpanded(tool)\"></i>\n {{ isToolExpanded(tool) ? 'Less' : 'More' }}\n </button>\n </div>\n <!-- Expanded Details -->\n @if (isToolExpanded(tool)) {\n <div class=\"tool-details\">\n <div class=\"detail-row\">\n <span class=\"detail-label\">Tool Name:</span>\n <span class=\"detail-value mono\">{{ tool.ToolName }}</span>\n </div>\n <div class=\"detail-row\">\n <span class=\"detail-label\">Parameters:</span>\n <span class=\"detail-value\">\n {{ getParamCount(tool) }} total, {{ getRequiredParamCount(tool) }} required\n </span>\n </div>\n <div class=\"detail-row\">\n <span class=\"detail-label\">Discovered:</span>\n <span class=\"detail-value\">{{ formatDate(tool.DiscoveredAt) }}</span>\n </div>\n <div class=\"detail-row\">\n <span class=\"detail-label\">Last Seen:</span>\n <span class=\"detail-value\">{{ formatDate(tool.LastSeenAt) }}</span>\n </div>\n @if (tool.InputSchema) {\n <div class=\"detail-row full\">\n <span class=\"detail-label\">Input Schema:</span>\n <pre class=\"schema-preview\">{{ getFormattedInputSchema(tool) }}</pre>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n } @else {\n <!-- List View -->\n <div class=\"tools-list\">\n <table>\n <thead>\n <tr>\n <th>Tool</th>\n <th>Description</th>\n <th>Params</th>\n <th>Status</th>\n <th>Last Seen</th>\n <th>Actions</th>\n </tr>\n </thead>\n <tbody>\n @for (tool of group.tools; track tool.ID) {\n <tr [class.expanded]=\"isToolExpanded(tool)\">\n <td class=\"tool-name-cell\">\n <i class=\"fa-solid fa-wrench\"></i>\n <div class=\"tool-name-info\">\n <span class=\"tool-title\">{{ tool.ToolTitle || tool.ToolName }}</span>\n @if (tool.ToolTitle) {\n <span class=\"tool-code\">{{ tool.ToolName }}</span>\n }\n </div>\n </td>\n <td class=\"description-cell\">{{ tool.ToolDescription || '-' }}</td>\n <td>\n <span class=\"param-count\">{{ getParamCount(tool) }}</span>\n </td>\n <td>\n <span class=\"status-badge small\" [ngClass]=\"getStatusClass(tool.Status)\">\n {{ tool.Status }}\n </span>\n </td>\n <td>{{ formatDate(tool.LastSeenAt) }}</td>\n <td class=\"actions-cell\">\n <button type=\"button\" (click)=\"toggleFavorite(tool.ID, $event)\" [title]=\"isFavorited(tool.ID) ? 'Unfavorite' : 'Favorite'\" style=\"background:transparent;border:none;cursor:pointer;padding:4px;font-size:0.95rem;margin-right:4px\" [style.color]=\"isFavorited(tool.ID) ? 'var(--mj-status-warning, #f59e0b)' : 'var(--mj-text-muted, #bbb)'\">\n <i [class]=\"isFavorited(tool.ID) ? 'fa-solid fa-star' : 'fa-regular fa-star'\"></i>\n </button>\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"openTestToolDialog(tool)\" title=\"Test\">\n <i class=\"fa-solid fa-play\"></i>\n </button>\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"toggleToolExpand(tool)\" title=\"Details\">\n <i class=\"fa-solid\" [class.fa-chevron-down]=\"!isToolExpanded(tool)\" [class.fa-chevron-up]=\"isToolExpanded(tool)\"></i>\n </button>\n </td>\n </tr>\n @if (isToolExpanded(tool)) {\n <tr class=\"detail-row-expanded\">\n <td colspan=\"6\">\n <div class=\"inline-details\">\n <div class=\"detail-section\">\n <span class=\"detail-label\">Tool Name:</span>\n <span class=\"detail-value mono\">{{ tool.ToolName }}</span>\n </div>\n <div class=\"detail-section\">\n <span class=\"detail-label\">Discovered:</span>\n <span class=\"detail-value\">{{ formatDate(tool.DiscoveredAt) }}</span>\n </div>\n <div class=\"detail-section\">\n <span class=\"detail-label\">Required Params:</span>\n <span class=\"detail-value\">{{ getRequiredParamCount(tool) }}</span>\n </div>\n @if (tool.InputSchema) {\n <div class=\"detail-section full\">\n <span class=\"detail-label\">Input Schema:</span>\n <pre class=\"schema-preview\">{{ getFormattedInputSchema(tool) }}</pre>\n </div>\n }\n </div>\n </td>\n </tr>\n }\n }\n </tbody>\n </table>\n </div>\n }\n }\n </div>\n }\n </div>\n }\n }\n\n <!-- Logs Tab -->\n @case ('logs') {\n <div class=\"data-table\">\n @if (filteredLogs.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-list-check\"></i>\n <p>No recent execution logs</p>\n <span class=\"hint\">Logs appear when tools are executed via MCP connections</span>\n </div>\n } @else {\n <table>\n <thead>\n <tr>\n <th class=\"sortable\" [ngClass]=\"getLogSortClass('status')\" (click)=\"onLogSortColumn('status')\">\n Status\n <i class=\"sort-icon fa-solid\" [class.fa-sort-up]=\"LogsSortColumn === 'status' && LogsSortAscending\" [class.fa-sort-down]=\"LogsSortColumn === 'status' && !LogsSortAscending\" [class.fa-sort]=\"LogsSortColumn !== 'status'\"></i>\n </th>\n <th class=\"sortable\" [ngClass]=\"getLogSortClass('server')\" (click)=\"onLogSortColumn('server')\">\n Server\n <i class=\"sort-icon fa-solid\" [class.fa-sort-up]=\"LogsSortColumn === 'server' && LogsSortAscending\" [class.fa-sort-down]=\"LogsSortColumn === 'server' && !LogsSortAscending\" [class.fa-sort]=\"LogsSortColumn !== 'server'\"></i>\n </th>\n <th class=\"sortable\" [ngClass]=\"getLogSortClass('tool')\" (click)=\"onLogSortColumn('tool')\">\n Tool\n <i class=\"sort-icon fa-solid\" [class.fa-sort-up]=\"LogsSortColumn === 'tool' && LogsSortAscending\" [class.fa-sort-down]=\"LogsSortColumn === 'tool' && !LogsSortAscending\" [class.fa-sort]=\"LogsSortColumn !== 'tool'\"></i>\n </th>\n <th class=\"sortable\" [ngClass]=\"getLogSortClass('connection')\" (click)=\"onLogSortColumn('connection')\">\n Connection\n <i class=\"sort-icon fa-solid\" [class.fa-sort-up]=\"LogsSortColumn === 'connection' && LogsSortAscending\" [class.fa-sort-down]=\"LogsSortColumn === 'connection' && !LogsSortAscending\" [class.fa-sort]=\"LogsSortColumn !== 'connection'\"></i>\n </th>\n <th class=\"sortable\" [ngClass]=\"getLogSortClass('started')\" (click)=\"onLogSortColumn('started')\">\n Started\n <i class=\"sort-icon fa-solid\" [class.fa-sort-up]=\"LogsSortColumn === 'started' && LogsSortAscending\" [class.fa-sort-down]=\"LogsSortColumn === 'started' && !LogsSortAscending\" [class.fa-sort]=\"LogsSortColumn !== 'started'\"></i>\n </th>\n <th class=\"sortable\" [ngClass]=\"getLogSortClass('duration')\" (click)=\"onLogSortColumn('duration')\">\n Duration\n <i class=\"sort-icon fa-solid\" [class.fa-sort-up]=\"LogsSortColumn === 'duration' && LogsSortAscending\" [class.fa-sort-down]=\"LogsSortColumn === 'duration' && !LogsSortAscending\" [class.fa-sort]=\"LogsSortColumn !== 'duration'\"></i>\n </th>\n <th class=\"sortable\" [ngClass]=\"getLogSortClass('error')\" (click)=\"onLogSortColumn('error')\">\n Error\n <i class=\"sort-icon fa-solid\" [class.fa-sort-up]=\"LogsSortColumn === 'error' && LogsSortAscending\" [class.fa-sort-down]=\"LogsSortColumn === 'error' && !LogsSortAscending\" [class.fa-sort]=\"LogsSortColumn !== 'error'\"></i>\n </th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n @for (log of filteredLogs; track log.ID) {\n <tr [class.error-row]=\"log.Status === 'Error'\"\n class=\"clickable-row\"\n (click)=\"onLogClick(log)\"\n title=\"Click for details\">\n <td>\n <span class=\"status-badge\" [ngClass]=\"getStatusClass(log.Status)\">\n @switch (log.Status) {\n @case ('Success') {\n <i class=\"fa-solid fa-check-circle\"></i>\n }\n @case ('Error') {\n <i class=\"fa-solid fa-times-circle\"></i>\n }\n @case ('Running') {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n }\n @default {\n <i class=\"fa-solid fa-question-circle\"></i>\n }\n }\n {{ log.Status || 'Unknown' }}\n </span>\n </td>\n <td class=\"server-name\">{{ log.ServerName }}</td>\n <td class=\"tool-name\">{{ log.ToolName }}</td>\n <td>{{ log.ConnectionName }}</td>\n <td>{{ formatDate(log.StartedAt) }}</td>\n <td>{{ formatDuration(log.DurationMs) }}</td>\n <td class=\"error-message\" [title]=\"log.ErrorMessage || ''\">\n {{ log.ErrorMessage || '-' }}\n </td>\n <td class=\"action-cell\">\n <i class=\"fa-solid fa-chevron-right\"></i>\n </td>\n </tr>\n }\n </tbody>\n </table>\n }\n </div>\n }\n }\n }\n </mj-page-body>\n</mj-page-layout>\n\n<!-- Server Dialog (inline \u2014 avoids sub-component DI issues) -->\n@if (ShowServerDialog) {\n <div style=\"position:fixed;inset:0;z-index:10000;background:rgba(0,0,0,0.5);display:flex;align-items:center;justify-content:center\" (click)=\"cancelServerForm()\">\n <div style=\"display:flex;flex-direction:column;background:var(--mj-bg-surface,#fff);border-radius:8px;box-shadow:0 20px 60px rgba(0,0,0,0.3);overflow:hidden;width:600px;max-width:90vw;max-height:90vh\" (click)=\"$event.stopPropagation()\">\n <!-- Title bar -->\n <div style=\"display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--mj-border-default,#e0e0e0);flex-shrink:0\">\n <h2 style=\"margin:0;font-size:1.125rem;font-weight:600;color:var(--mj-text-primary,#333)\">{{ EditingServer ? 'Edit MCP Server' : 'Add MCP Server' }}</h2>\n <button style=\"display:flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;background:none;cursor:pointer;color:var(--mj-text-muted,#888);border-radius:4px\" (click)=\"cancelServerForm()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <!-- Body -->\n <div style=\"flex:1;overflow-y:auto;padding:20px;color:var(--mj-text-primary,#333)\">\n @if (ServerFormError) {\n <div style=\"background:var(--mj-status-error-bg,#fff5f5);border:1px solid var(--mj-status-error-border,#feb2b2);border-radius:6px;padding:10px 14px;margin-bottom:16px;color:var(--mj-status-error-text,#c53030);font-size:0.875rem\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i> {{ ServerFormError }}\n </div>\n }\n <!-- Name -->\n <div style=\"margin-bottom:16px\">\n <label style=\"display:block;font-size:0.875rem;font-weight:500;color:var(--mj-text-primary,#333);margin-bottom:4px\">Name <span style=\"color:var(--mj-status-error,#e53e3e)\">*</span></label>\n <input #sfName class=\"mj-input\" placeholder=\"e.g., GitHub MCP Server\" [value]=\"ServerForm.Name\" (input)=\"ServerForm.Name = sfName.value\" style=\"width:100%;box-sizing:border-box\" />\n </div>\n <!-- Description -->\n <div style=\"margin-bottom:16px\">\n <label style=\"display:block;font-size:0.875rem;font-weight:500;color:var(--mj-text-primary,#333);margin-bottom:4px\">Description</label>\n <textarea #sfDesc class=\"mj-textarea\" placeholder=\"Optional description\" [value]=\"ServerForm.Description\" (input)=\"ServerForm.Description = sfDesc.value\" rows=\"3\" style=\"width:100%;box-sizing:border-box\"></textarea>\n </div>\n <!-- Transport Type -->\n <div style=\"margin-bottom:16px\">\n <label style=\"display:block;font-size:0.875rem;font-weight:500;color:var(--mj-text-primary,#333);margin-bottom:4px\">Transport Type <span style=\"color:var(--mj-status-error,#e53e3e)\">*</span></label>\n <select #sfTransport class=\"mj-input\" [value]=\"ServerForm.TransportType\" (change)=\"ServerForm.TransportType = sfTransport.value\" style=\"width:100%;box-sizing:border-box\">\n @for (t of TransportTypes; track t.value) {\n <option [value]=\"t.value\">{{ t.label }}</option>\n }\n </select>\n </div>\n <!-- Server URL (for HTTP-based transports) -->\n @if (ServerForm.TransportType === 'StreamableHTTP' || ServerForm.TransportType === 'SSE' || ServerForm.TransportType === 'WebSocket') {\n <div style=\"margin-bottom:16px\">\n <label style=\"display:block;font-size:0.875rem;font-weight:500;color:var(--mj-text-primary,#333);margin-bottom:4px\">Server URL <span style=\"color:var(--mj-status-error,#e53e3e)\">*</span></label>\n <input #sfUrl class=\"mj-input\" placeholder=\"https://api.example.com/mcp\" [value]=\"ServerForm.ServerURL\" (input)=\"ServerForm.ServerURL = sfUrl.value\" style=\"width:100%;box-sizing:border-box\" />\n </div>\n }\n <!-- Command (for Stdio) -->\n @if (ServerForm.TransportType === 'Stdio') {\n <div style=\"margin-bottom:16px\">\n <label style=\"display:block;font-size:0.875rem;font-weight:500;color:var(--mj-text-primary,#333);margin-bottom:4px\">Command <span style=\"color:var(--mj-status-error,#e53e3e)\">*</span></label>\n <input #sfCmd class=\"mj-input\" placeholder=\"e.g., npx\" [value]=\"ServerForm.Command\" (input)=\"ServerForm.Command = sfCmd.value\" style=\"width:100%;box-sizing:border-box\" />\n </div>\n }\n <!-- Auth Type -->\n <div style=\"margin-bottom:16px\">\n <label style=\"display:block;font-size:0.875rem;font-weight:500;color:var(--mj-text-primary,#333);margin-bottom:4px\">Default Auth Type</label>\n <select #sfAuth class=\"mj-input\" [value]=\"ServerForm.DefaultAuthType\" (change)=\"ServerForm.DefaultAuthType = sfAuth.value\" style=\"width:100%;box-sizing:border-box\">\n @for (a of AuthTypes; track a.value) {\n <option [value]=\"a.value\">{{ a.label }}</option>\n }\n </select>\n </div>\n <!-- Status -->\n <div style=\"margin-bottom:16px\">\n <label style=\"display:block;font-size:0.875rem;font-weight:500;color:var(--mj-text-primary,#333);margin-bottom:4px\">Status</label>\n <select #sfStatus class=\"mj-input\" [value]=\"ServerForm.Status\" (change)=\"ServerForm.Status = sfStatus.value\" style=\"width:100%;box-sizing:border-box\">\n <option value=\"Active\">Active</option>\n <option value=\"Inactive\">Inactive</option>\n </select>\n </div>\n </div>\n <!-- Actions -->\n <div style=\"display:flex;align-items:center;gap:8px;padding:16px 20px;border-top:1px solid var(--mj-border-default,#e0e0e0);flex-shrink:0\">\n <button mjButton variant=\"primary\" (click)=\"saveServerForm()\" [disabled]=\"ServerFormSaving\">\n @if (ServerFormSaving) { <i class=\"fa-solid fa-spinner fa-spin\"></i> }\n {{ EditingServer ? 'Update' : 'Create' }}\n </button>\n <button mjButton (click)=\"cancelServerForm()\">Cancel</button>\n </div>\n </div>\n </div>\n}\n\n<!-- Connection Dialog (inline) -->\n@if (ShowConnectionDialog) {\n <div style=\"position:fixed;inset:0;z-index:10000;background:rgba(0,0,0,0.5);display:flex;align-items:center;justify-content:center\" (click)=\"cancelConnectionForm()\">\n <div style=\"display:flex;flex-direction:column;background:var(--mj-bg-surface,#fff);border-radius:8px;box-shadow:0 20px 60px rgba(0,0,0,0.3);overflow:hidden;width:560px;max-width:90vw;max-height:90vh\" (click)=\"$event.stopPropagation()\">\n <div style=\"display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--mj-border-default,#e0e0e0);flex-shrink:0\">\n <h2 style=\"margin:0;font-size:1.125rem;font-weight:600;color:var(--mj-text-primary,#333)\">Add Connection</h2>\n <button style=\"display:flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;background:none;cursor:pointer;color:var(--mj-text-muted,#888);border-radius:4px\" (click)=\"cancelConnectionForm()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <div style=\"flex:1;overflow-y:auto;padding:20px;color:var(--mj-text-primary,#333)\">\n @if (ConnectionFormError) {\n <div style=\"background:var(--mj-status-error-bg,#fff5f5);border:1px solid var(--mj-status-error-border,#feb2b2);border-radius:6px;padding:10px 14px;margin-bottom:16px;color:var(--mj-status-error-text,#c53030);font-size:0.875rem\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i> {{ ConnectionFormError }}\n </div>\n }\n <div style=\"margin-bottom:16px\">\n <label style=\"display:block;font-size:0.875rem;font-weight:500;color:var(--mj-text-primary,#333);margin-bottom:4px\">Server <span style=\"color:var(--mj-status-error,#e53e3e)\">*</span></label>\n <select #cfServer class=\"mj-input\" [value]=\"ConnectionForm.MCPServerID\" (change)=\"ConnectionForm.MCPServerID = cfServer.value\" style=\"width:100%;box-sizing:border-box\">\n <option value=\"\">\u2014 select server \u2014</option>\n @for (s of servers; track s.ID) {\n <option [value]=\"s.ID\">{{ s.Name }}</option>\n }\n </select>\n </div>\n <div style=\"margin-bottom:16px\">\n <label style=\"display:block;font-size:0.875rem;font-weight:500;color:var(--mj-text-primary,#333);margin-bottom:4px\">Name <span style=\"color:var(--mj-status-error,#e53e3e)\">*</span></label>\n <input #cfName class=\"mj-input\" placeholder=\"e.g., Zapier Connection\" [value]=\"ConnectionForm.Name\" (input)=\"ConnectionForm.Name = cfName.value\" style=\"width:100%;box-sizing:border-box\" />\n </div>\n <div style=\"margin-bottom:16px\">\n <label style=\"display:block;font-size:0.875rem;font-weight:500;color:var(--mj-text-primary,#333);margin-bottom:4px\">Bearer Token</label>\n <input #cfToken class=\"mj-input\" placeholder=\"Paste bearer token here\" [value]=\"ConnectionForm.BearerToken\" (input)=\"ConnectionForm.BearerToken = cfToken.value\" style=\"width:100%;box-sizing:border-box;font-family:monospace;font-size:0.8rem\" />\n <span style=\"font-size:0.75rem;color:var(--mj-text-muted,#888)\">Will be stored as a Credential and linked to this connection</span>\n </div>\n <div style=\"margin-bottom:16px\">\n <label style=\"display:block;font-size:0.875rem;font-weight:500;color:var(--mj-text-primary,#333);margin-bottom:4px\">Status</label>\n <select #cfStatus class=\"mj-input\" [value]=\"ConnectionForm.Status\" (change)=\"ConnectionForm.Status = cfStatus.value\" style=\"width:100%;box-sizing:border-box\">\n <option value=\"Active\">Active</option>\n <option value=\"Inactive\">Inactive</option>\n </select>\n </div>\n </div>\n <div style=\"display:flex;align-items:center;gap:8px;padding:16px 20px;border-top:1px solid var(--mj-border-default,#e0e0e0);flex-shrink:0\">\n <button mjButton variant=\"primary\" (click)=\"saveConnectionForm()\" [disabled]=\"ConnectionFormSaving\">\n @if (ConnectionFormSaving) { <i class=\"fa-solid fa-spinner fa-spin\"></i> }\n Create\n </button>\n <button mjButton (click)=\"cancelConnectionForm()\">Cancel</button>\n </div>\n </div>\n </div>\n}\n\n<!-- Test Tool Dialog (inline) -->\n@if (ShowTestToolDialog) {\n <div style=\"position:fixed;inset:0;z-index:10000;background:rgba(0,0,0,0.5);display:flex;align-items:center;justify-content:center\" (click)=\"testCloseDialog()\">\n <div style=\"display:flex;flex-direction:column;background:var(--mj-bg-surface,#fff);border-radius:8px;box-shadow:0 20px 60px rgba(0,0,0,0.3);overflow:hidden;width:640px;max-width:90vw;max-height:90vh\" (click)=\"$event.stopPropagation()\">\n <!-- Title bar -->\n <div style=\"display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--mj-border-default,#e0e0e0);flex-shrink:0\">\n <h2 style=\"margin:0;font-size:1.125rem;font-weight:600;color:var(--mj-text-primary,#333)\">\n Test MCP Tool\n @if (TestStep !== 'select') {\n <span style=\"font-size:0.875rem;font-weight:400;color:var(--mj-text-muted,#888);margin-left:8px\">\u2014 {{ TestSelectedTool?.ToolTitle || TestSelectedTool?.ToolName }}</span>\n }\n </h2>\n <button style=\"display:flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;background:none;cursor:pointer;color:var(--mj-text-muted,#888);border-radius:4px\" (click)=\"testCloseDialog()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <!-- Step indicator -->\n <div style=\"display:flex;gap:0;padding:10px 20px;background:var(--mj-bg-surface-card,#f9f9f9);border-bottom:1px solid var(--mj-border-default,#e0e0e0);flex-shrink:0\">\n <span style=\"font-size:0.8rem;font-weight:500;\" [style.color]=\"TestStep==='select' ? 'var(--mj-brand-primary,#264FAF)' : 'var(--mj-text-muted,#888)'\">1. Select</span>\n <span style=\"margin:0 8px;color:var(--mj-text-muted,#888)\">\u203A</span>\n <span style=\"font-size:0.8rem;font-weight:500;\" [style.color]=\"TestStep==='configure' ? 'var(--mj-brand-primary,#264FAF)' : 'var(--mj-text-muted,#888)'\">2. Configure</span>\n <span style=\"margin:0 8px;color:var(--mj-text-muted,#888)\">\u203A</span>\n <span style=\"font-size:0.8rem;font-weight:500;\" [style.color]=\"TestStep==='results' ? 'var(--mj-brand-primary,#264FAF)' : 'var(--mj-text-muted,#888)'\">3. Results</span>\n </div>\n <!-- Body -->\n <div style=\"flex:1;overflow-y:auto;padding:20px;color:var(--mj-text-primary,#333)\">\n @if (TestStep === 'select') {\n <div style=\"margin-bottom:16px\">\n <label style=\"display:block;font-size:0.875rem;font-weight:500;color:var(--mj-text-primary,#333);margin-bottom:4px\">Server <span style=\"color:var(--mj-status-error,#e53e3e)\">*</span></label>\n <select #tSrv class=\"mj-input\" style=\"width:100%;box-sizing:border-box\" (change)=\"onTestServerChange(tSrv.value)\">\n <option value=\"\">\u2014 select server \u2014</option>\n @for (s of servers; track s.ID) {\n <option [value]=\"s.ID\" [selected]=\"TestToolServerID === s.ID\">{{ s.Name }}</option>\n }\n </select>\n </div>\n <div style=\"margin-bottom:16px\">\n <label style=\"display:block;font-size:0.875rem;font-weight:500;color:var(--mj-text-primary,#333);margin-bottom:4px\">Connection <span style=\"color:var(--mj-status-error,#e53e3e)\">*</span></label>\n <select #tConn class=\"mj-input\" style=\"width:100%;box-sizing:border-box\" [attr.disabled]=\"!TestToolServerID ? true : null\" (change)=\"onTestConnectionChange(tConn.value)\">\n <option value=\"\">\u2014 select connection \u2014</option>\n @for (c of TestFilteredConnections; track c.ID) {\n <option [value]=\"c.ID\" [selected]=\"TestToolConnectionID === c.ID\">{{ c.Name }}</option>\n }\n </select>\n </div>\n <div style=\"margin-bottom:16px\">\n <label style=\"display:block;font-size:0.875rem;font-weight:500;color:var(--mj-text-primary,#333);margin-bottom:4px\">Tool <span style=\"color:var(--mj-status-error,#e53e3e)\">*</span></label>\n <input #tSearch type=\"text\" class=\"mj-input\" style=\"width:100%;box-sizing:border-box;margin-bottom:6px\" placeholder=\"Search tools\u2026 (Recently used appear first)\" [value]=\"TestToolSearch\" (input)=\"onTestToolSearchChange(tSearch.value)\" [attr.disabled]=\"!TestToolServerID ? true : null\" />\n <div style=\"max-height:220px;overflow-y:auto;border:1px solid var(--mj-border-default,#e0e0e0);border-radius:4px;background:var(--mj-bg-surface,#fff)\">\n @if (TestComboboxTools.length === 0) {\n <div style=\"padding:12px;text-align:center;font-size:0.8rem;color:var(--mj-text-muted,#888)\">No tools match.</div>\n }\n @for (t of TestComboboxTools; track t.ID) {\n <div (click)=\"pickTestTool(t.ID)\" style=\"padding:8px 12px;cursor:pointer;display:flex;align-items:center;gap:8px;border-bottom:1px solid var(--mj-border-subtle,#eee)\" [style.background]=\"TestToolID === t.ID ? 'color-mix(in srgb, var(--mj-brand-primary,#264FAF) 12%, var(--mj-bg-surface,#fff))' : null\">\n @if (isRecentTestTool(t.ID)) {\n <span style=\"font-size:0.65rem;background:var(--mj-brand-primary,#264FAF);color:#fff;padding:1px 6px;border-radius:8px;font-weight:600\">Recent</span>\n }\n <div style=\"flex:1;min-width:0\">\n <div style=\"font-size:0.85rem;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap\">{{ t.ToolTitle || t.ToolName }}</div>\n @if (t.ToolTitle && t.ToolName !== t.ToolTitle) {\n <div style=\"font-size:0.7rem;color:var(--mj-text-muted,#888);overflow:hidden;text-overflow:ellipsis;white-space:nowrap\">{{ t.ToolName }}</div>\n }\n </div>\n @if (TestToolID === t.ID) {\n <i class=\"fa-solid fa-check\" style=\"color:var(--mj-brand-primary,#264FAF)\"></i>\n }\n </div>\n }\n </div>\n </div>\n } @else if (TestStep === 'configure') {\n @if (TestParamConfigs.length === 0) {\n <div style=\"text-align:center;padding:24px;color:var(--mj-text-muted,#888)\">\n <i class=\"fa-solid fa-check-circle\" style=\"font-size:2rem;margin-bottom:8px;display:block\"></i>\n <p>This tool requires no parameters.</p>\n </div>\n } @else {\n @for (p of TestParamConfigs; track p.name) {\n <div style=\"margin-bottom:16px\">\n <label style=\"display:block;font-size:0.875rem;font-weight:500;color:var(--mj-text-primary,#333);margin-bottom:4px\">\n {{ p.name }} @if (p.required) { <span style=\"color:var(--mj-status-error,#e53e3e)\">*</span> }\n </label>\n @if (p.description) {\n <p style=\"font-size:0.75rem;color:var(--mj-text-muted,#888);margin:0 0 4px 0\">{{ p.description }}</p>\n }\n @if (p.enumValues.length > 0) {\n <select #enumEl class=\"mj-input\" style=\"width:100%;box-sizing:border-box\" (change)=\"testSetParam(p.name, enumEl.value)\">\n <option value=\"\">\u2014 select \u2014</option>\n @for (v of p.enumValues; track $index) { <option [value]=\"$any(v)\">{{ $any(v) }}</option> }\n </select>\n } @else if (p.type === 'boolean') {\n <select #boolEl class=\"mj-input\" style=\"width:100%;box-sizing:border-box\" (change)=\"testSetParam(p.name, boolEl.value)\">\n <option value=\"false\">false</option>\n <option value=\"true\">true</option>\n </select>\n } @else if (p.type === 'array' || p.type === 'object') {\n <textarea #jsonEl class=\"mj-textarea\" rows=\"3\" style=\"width:100%;box-sizing:border-box;font-family:monospace;font-size:0.8rem\" (input)=\"testSetParam(p.name, jsonEl.value)\" [placeholder]=\"'Enter JSON ' + p.type + '...'\"></textarea>\n } @else {\n <input #strEl class=\"mj-input\" style=\"width:100%;box-sizing:border-box\" (input)=\"testSetParam(p.name, strEl.value)\" [placeholder]=\"p.description || 'Enter value...'\" />\n }\n </div>\n }\n }\n } @else {\n @if (TestExecutionResult?.Success) {\n <div style=\"background:var(--mj-status-success-bg,#f0fff4);border:1px solid var(--mj-status-success-border,#9ae6b4);border-radius:6px;padding:12px 16px;margin-bottom:16px;color:var(--mj-status-success-text,#276749)\">\n <i class=\"fa-solid fa-check-circle\"></i> Execution Successful\n @if (TestExecutionResult?.DurationMs) { <span style=\"float:right;font-size:0.75rem\">{{ TestExecutionResult?.DurationMs }}ms</span> }\n </div>\n } @else {\n <div style=\"background:var(--mj-status-error-bg,#fff5f5);border:1px solid var(--mj-status-error-border,#feb2b2);border-radius:6px;padding:12px 16px;margin-bottom:16px;color:var(--mj-status-error-text,#c53030)\">\n <i class=\"fa-solid fa-times-circle\"></i> Execution Failed\n </div>\n }\n @if (TestExecutionResult?.ErrorMessage) {\n <div style=\"margin-bottom:16px\">\n <label style=\"display:block;font-size:0.875rem;font-weight:500;margin-bottom:4px\">Error</label>\n <pre style=\"background:var(--mj-bg-surface-sunken,#f0f0f0);border-radius:4px;padding:12px;font-size:0.8rem;white-space:pre-wrap;word-break:break-all;margin:0\">{{ TestExecutionResult?.ErrorMessage }}</pre>\n </div>\n }\n @if (TestExecutionResult?.Result) {\n <div>\n <label style=\"display:block;font-size:0.875rem;font-weight:500;margin-bottom:4px\">Result</label>\n <pre style=\"background:var(--mj-bg-surface-sunken,#f0f0f0);border-radius:4px;padding:12px;font-size:0.8rem;white-space:pre-wrap;word-break:break-all;overflow-y:auto;max-height:300px;margin:0\">{{ formatTestResult(TestExecutionResult?.Result) }}</pre>\n </div>\n }\n }\n </div>\n <!-- Actions -->\n <div style=\"display:flex;align-items:center;gap:8px;padding:16px 20px;border-top:1px solid var(--mj-border-default,#e0e0e0);flex-shrink:0\">\n @if (TestStep === 'select') {\n <button mjButton variant=\"primary\" (click)=\"testProceedToConfig()\" [disabled]=\"!TestCanProceed\">Next <i class=\"fa-solid fa-arrow-right\"></i></button>\n <button mjButton (click)=\"testCloseDialog()\">Cancel</button>\n } @else if (TestStep === 'configure') {\n <button mjButton variant=\"primary\" (click)=\"testExecuteTool()\" [disabled]=\"!TestIsValid || TestIsExecuting\">\n @if (TestIsExecuting) { <i class=\"fa-solid fa-spinner fa-spin\"></i> Executing... } @else { <i class=\"fa-solid fa-play\"></i> Execute }\n </button>\n <button mjButton (click)=\"testGoBack()\"><i class=\"fa-solid fa-arrow-left\"></i> Back</button>\n } @else {\n <button mjButton variant=\"primary\" (click)=\"testRunAgain()\"><i class=\"fa-solid fa-redo\"></i> Run Again</button>\n <button mjButton (click)=\"testGoBack()\">Edit Params</button>\n <button mjButton (click)=\"testCloseDialog()\">Close</button>\n }\n </div>\n </div>\n </div>\n}\n\n<!-- Log Detail Panel (inlined) -->\n@if (ShowLogDetailPanel && SelectedLog) {\n <div style=\"position:fixed;inset:0;z-index:10000;pointer-events:none\">\n <div style=\"position:absolute;inset:0;background:rgba(0,0,0,0.35);pointer-events:auto\" (click)=\"onLogDetailClose()\"></div>\n <div style=\"position:absolute;top:0;right:0;height:100%;width:560px;max-width:95vw;background:var(--mj-bg-surface,#fff);box-shadow:-4px 0 20px rgba(0,0,0,0.15);display:flex;flex-direction:column;pointer-events:auto\">\n <div style=\"padding:16px 20px;border-bottom:1px solid var(--mj-border-default,#e0e0e0);display:flex;align-items:center;justify-content:space-between\">\n <div>\n <h3 style=\"margin:0;font-size:1rem;font-weight:600\">{{ SelectedLog.ToolName }}</h3>\n <div style=\"font-size:0.75rem;color:var(--mj-text-muted,#888);margin-top:4px\">\n <span [class]=\"SelectedLog.Status === 'Success' ? 'status-success' : SelectedLog.Status === 'Error' ? 'status-error' : 'status-running'\" style=\"font-weight:600\">{{ SelectedLog.Status }}</span>\n <span style=\"margin:0 8px\">\u00B7</span>\n <span>{{ formatDate(SelectedLog.StartedAt) }}</span>\n @if (SelectedLog.DurationMs != null) {\n <span style=\"margin:0 8px\">\u00B7</span>\n <span>{{ formatDuration(SelectedLog.DurationMs) }}</span>\n }\n </div>\n </div>\n <button mjButton (click)=\"onLogDetailClose()\" aria-label=\"Close\"><i class=\"fa-solid fa-xmark\"></i></button>\n </div>\n <div style=\"flex:1;overflow-y:auto;padding:16px 20px\">\n <div style=\"margin-bottom:16px\">\n <div style=\"font-size:0.75rem;color:var(--mj-text-muted,#888);margin-bottom:4px\">Connection</div>\n <div style=\"font-size:0.875rem\">{{ SelectedLog.ConnectionName || SelectedLog.ConnectionID }}</div>\n @if (SelectedLog.ServerName) {\n <div style=\"font-size:0.75rem;color:var(--mj-text-muted,#888);margin-top:2px\">{{ SelectedLog.ServerName }}</div>\n }\n </div>\n @if (SelectedLog.InputArgs) {\n <div style=\"margin-bottom:16px\">\n <label style=\"display:block;font-size:0.875rem;font-weight:500;margin-bottom:6px\">Input Arguments</label>\n <pre style=\"background:var(--mj-bg-surface-sunken,#f0f0f0);border-radius:4px;padding:12px;font-size:0.75rem;white-space:pre-wrap;word-break:break-all;overflow-y:auto;max-height:240px;margin:0\">{{ formatLogJson(SelectedLog.InputArgs) }}</pre>\n </div>\n }\n @if (SelectedLog.Result) {\n <div style=\"margin-bottom:16px\">\n <label style=\"display:block;font-size:0.875rem;font-weight:500;margin-bottom:6px\">Result</label>\n <pre style=\"background:var(--mj-bg-surface-sunken,#f0f0f0);border-radius:4px;padding:12px;font-size:0.75rem;white-space:pre-wrap;word-break:break-all;overflow-y:auto;max-height:360px;margin:0\">{{ formatLogJson(SelectedLog.Result) }}</pre>\n </div>\n }\n @if (SelectedLog.ErrorMessage) {\n <div style=\"margin-bottom:16px\">\n <label style=\"display:block;font-size:0.875rem;font-weight:500;margin-bottom:6px;color:var(--mj-status-error-text,#c53030)\">Error</label>\n <pre style=\"background:var(--mj-status-error-bg,#fff5f5);border:1px solid var(--mj-status-error-border,#feb2b2);border-radius:4px;padding:12px;font-size:0.75rem;white-space:pre-wrap;word-break:break-all;margin:0;color:var(--mj-status-error-text,#c53030)\">{{ SelectedLog.ErrorMessage }}</pre>\n </div>\n }\n </div>\n <div style=\"padding:12px 20px;border-top:1px solid var(--mj-border-default,#e0e0e0);display:flex;gap:8px;justify-content:flex-start\">\n @if (SelectedLog.ToolID) {\n <button mjButton variant=\"primary\" (click)=\"onRunAgainFromLog({ toolId: SelectedLog.ToolID!, connectionId: SelectedLog.ConnectionID })\"><i class=\"fa-solid fa-redo\"></i> Run Again</button>\n }\n <button mjButton (click)=\"onLogDetailClose()\">Close</button>\n </div>\n </div>\n </div>\n}\n", styles: ["/* MCP Dashboard - Header + Filter Panel Layout (outer shell now provided by <mj-page-layout>) */\n\n/* Tab navigation now provided by <mj-tab-nav>. */\n\n/* ========================================\n Main Content Area\n ======================================== */\n/* Error Banner */\n.error-banner {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 16px;\n margin: 0 0 16px 0;\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n border: 1px solid var(--mj-status-error);\n border-radius: 8px;\n color: var(--mj-status-error);\n}\n\n.error-banner .close-btn {\n margin-left: auto;\n background: none;\n border: none;\n cursor: pointer;\n color: var(--mj-status-error);\n padding: 4px;\n}\n\n/* ========================================\n Data Display Components\n ======================================== */\n\n/* Data Grid (Cards) */\n.data-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(350px, 1fr));\n gap: 16px;\n}\n\n.data-card {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n background: var(--mj-bg-surface);\n transition: box-shadow 0.2s ease;\n}\n\n.data-card:hover {\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n}\n\n.card-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 16px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.card-title {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.card-title i {\n color: var(--mj-brand-primary);\n}\n\n.card-title .name {\n font-weight: 600;\n font-size: 15px;\n}\n\n.card-actions {\n display: flex;\n gap: 4px;\n}\n\n.card-actions button {\n padding: 4px 8px;\n}\n\n.card-body {\n padding: 16px;\n}\n\n.card-body .description {\n margin: 0 0 12px 0;\n color: var(--mj-text-secondary);\n font-size: 13px;\n}\n\n.details-grid {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 12px;\n}\n\n.detail {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.detail.full-width {\n grid-column: 1 / -1;\n}\n\n.detail.error .value {\n color: var(--mj-status-error);\n}\n\n.detail .label {\n font-size: 11px;\n text-transform: uppercase;\n color: var(--mj-text-disabled);\n font-weight: 500;\n}\n\n.detail .value {\n font-size: 13px;\n color: var(--mj-text-primary);\n}\n\n.detail .value.url,\n.detail .value.command {\n font-family: monospace;\n font-size: 12px;\n background: var(--mj-bg-surface-card);\n padding: 4px 8px;\n border-radius: 4px;\n word-break: break-all;\n}\n\n/* Status Badges */\n.status-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 8px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.status-active {\n background: color-mix(in srgb, var(--mj-status-success) 10%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.status-inactive {\n background: color-mix(in srgb, var(--mj-text-disabled) 10%, var(--mj-bg-surface));\n color: var(--mj-text-disabled);\n}\n\n.status-error {\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.status-deprecated {\n background: color-mix(in srgb, var(--mj-status-warning) 10%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.status-unknown {\n background: color-mix(in srgb, var(--mj-text-disabled) 10%, var(--mj-bg-surface));\n color: var(--mj-text-disabled);\n}\n\n/* Sync Progress & Result Banners */\n.sync-progress-banner {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 16px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-bottom: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n color: var(--mj-brand-primary);\n font-size: 13px;\n}\n\n.sync-progress-banner i {\n color: var(--mj-brand-primary);\n}\n\n.sync-progress-banner .sync-message {\n flex: 1;\n}\n\n.sync-result-banner {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n font-size: 12px;\n border-bottom: 1px solid;\n}\n\n.sync-result-banner.success {\n background: color-mix(in srgb, var(--mj-status-success) 8%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-success) 20%, transparent);\n color: var(--mj-color-success-700);\n}\n\n.sync-result-banner.success i {\n color: var(--mj-status-success);\n}\n\n.sync-result-banner.error {\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-status-error) 20%, transparent);\n color: var(--mj-status-error);\n}\n\n.sync-result-banner.error i {\n color: var(--mj-status-error);\n}\n\n/* Data Table */\n.data-table {\n overflow: auto;\n background: var(--mj-bg-surface);\n border-radius: 8px;\n border: 1px solid var(--mj-border-default);\n}\n\n.data-table table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.data-table th,\n.data-table td {\n padding: 12px 16px;\n text-align: left;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.data-table th {\n font-size: 11px;\n text-transform: uppercase;\n color: var(--mj-text-disabled);\n font-weight: 600;\n background: var(--mj-bg-surface-card);\n position: sticky;\n top: 0;\n}\n\n.data-table tbody tr {\n cursor: pointer;\n transition: background 0.2s ease;\n}\n\n.data-table tbody tr:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.data-table tbody tr:last-child td {\n border-bottom: none;\n}\n\n.data-table tbody tr.error-row {\n background: color-mix(in srgb, var(--mj-status-error) 5%, var(--mj-bg-surface));\n}\n\n.data-table .tool-name {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n}\n\n.data-table .tool-name i {\n color: var(--mj-brand-primary);\n}\n\n.data-table .error-message {\n max-width: 200px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--mj-status-error);\n font-size: 12px;\n}\n\n.data-table .server-name {\n color: var(--mj-text-secondary);\n font-size: 13px;\n}\n\n/* Sortable Column Headers */\n.data-table th.sortable {\n cursor: pointer;\n user-select: none;\n transition: background 0.15s ease;\n}\n\n.data-table th.sortable:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.data-table th.sortable .sort-icon {\n margin-left: 6px;\n font-size: 10px;\n color: var(--mj-border-strong);\n transition: color 0.15s ease;\n}\n\n.data-table th.sortable:hover .sort-icon {\n color: var(--mj-text-disabled);\n}\n\n.data-table th.sorted-asc .sort-icon,\n.data-table th.sorted-desc .sort-icon {\n color: var(--mj-brand-primary);\n}\n\n/* Status badge icons */\n.status-badge i {\n font-size: 12px;\n}\n\n/* Empty State */\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 20px;\n text-align: center;\n background: var(--mj-bg-surface);\n border-radius: 8px;\n border: 1px solid var(--mj-border-default);\n}\n\n.empty-state i {\n font-size: 48px;\n color: var(--mj-border-default);\n margin-bottom: 16px;\n}\n\n.empty-state p {\n margin: 0 0 8px 0;\n font-size: 16px;\n color: var(--mj-text-primary);\n}\n\n.empty-state .hint {\n font-size: 13px;\n color: var(--mj-text-secondary);\n margin-bottom: 16px;\n}\n\n/* ========================================\n View mode toggle now provided by <mj-view-toggle>.\n ======================================== */\n\n/* ========================================\n Tools Tab - Server Groups\n ======================================== */\n.tools-container {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.server-group {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n}\n\n.server-group-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 16px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n cursor: pointer;\n transition: background 0.2s ease;\n}\n\n.server-group-header:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.server-group.collapsed .server-group-header {\n border-bottom: none;\n}\n\n.server-info {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.expand-icon {\n font-size: 12px;\n color: var(--mj-text-disabled);\n transition: transform 0.2s ease;\n}\n\n.expand-icon.expanded {\n transform: rotate(90deg);\n}\n\n.server-name {\n font-weight: 600;\n font-size: 15px;\n color: var(--mj-text-primary);\n}\n\n.tool-count {\n font-size: 12px;\n color: var(--mj-text-secondary);\n background: rgba(0, 0, 0, 0.05);\n padding: 2px 8px;\n border-radius: 10px;\n}\n\n.status-badge.small {\n padding: 2px 6px;\n font-size: 10px;\n}\n\n.server-actions {\n display: flex;\n gap: 4px;\n}\n\n/* ========================================\n Tools Grid (Card View)\n ======================================== */\n.tools-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 12px;\n padding: 16px;\n}\n\n.tool-card {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n transition: all 0.2s ease;\n overflow: hidden;\n}\n\n.tool-card:hover {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.tool-card.expanded {\n border-color: var(--mj-brand-primary);\n}\n\n.tool-card-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n padding: 12px 14px;\n cursor: pointer;\n}\n\n.tool-title {\n display: flex;\n align-items: center;\n gap: 8px;\n flex: 1;\n}\n\n.tool-title i {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.tool-title .name {\n font-weight: 600;\n font-size: 14px;\n color: var(--mj-text-primary);\n}\n\n.tool-meta {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.param-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 8px;\n background: var(--mj-bg-surface-card);\n border-radius: 10px;\n font-size: 11px;\n color: var(--mj-text-secondary);\n}\n\n.param-badge i {\n font-size: 10px;\n}\n\n.tool-description {\n margin: 0;\n padding: 0 14px 8px 14px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n line-height: 1.4;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n.tool-card-actions {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n padding: 8px 14px;\n border-top: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n}\n\n/* Tool Details (Expanded) */\n.tool-details {\n padding: 12px 14px;\n background: var(--mj-bg-surface-card);\n border-top: 1px solid var(--mj-border-default);\n}\n\n.tool-details .detail-row {\n display: flex;\n padding: 6px 0;\n font-size: 12px;\n}\n\n.tool-details .detail-row.full {\n flex-direction: column;\n gap: 6px;\n}\n\n.tool-details .detail-label {\n min-width: 100px;\n color: var(--mj-text-secondary);\n font-weight: 500;\n}\n\n.tool-details .detail-value {\n color: var(--mj-text-primary);\n}\n\n.tool-details .detail-value.mono {\n font-family: 'Consolas', 'Monaco', monospace;\n background: var(--mj-bg-surface);\n padding: 2px 6px;\n border-radius: 3px;\n border: 1px solid var(--mj-border-default);\n}\n\n.schema-preview {\n margin: 0;\n padding: 10px 12px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n font-family: 'Consolas', 'Monaco', monospace;\n font-size: 11px;\n line-height: 1.4;\n max-height: 200px;\n overflow: auto;\n white-space: pre-wrap;\n word-break: break-word;\n}\n\n/* ========================================\n Tools List View\n ======================================== */\n.tools-list {\n overflow: auto;\n}\n\n.tools-list table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.tools-list th,\n.tools-list td {\n padding: 10px 14px;\n text-align: left;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.tools-list th {\n font-size: 11px;\n text-transform: uppercase;\n color: var(--mj-text-disabled);\n font-weight: 600;\n background: var(--mj-bg-surface-card);\n position: sticky;\n top: 0;\n}\n\n.tools-list tbody tr {\n transition: background 0.15s ease;\n}\n\n.tools-list tbody tr:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.tools-list tbody tr.expanded {\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n}\n\n.tool-name-cell {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n}\n\n.tool-name-cell i {\n color: var(--mj-brand-primary);\n margin-top: 2px;\n}\n\n.tool-name-info {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.tool-name-info .tool-title {\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.tool-name-info .tool-code {\n font-size: 11px;\n font-family: monospace;\n color: var(--mj-text-secondary);\n}\n\n.description-cell {\n max-width: 300px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.param-count {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 24px;\n height: 24px;\n background: var(--mj-bg-surface-card);\n border-radius: 12px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n}\n\n.actions-cell {\n white-space: nowrap;\n}\n\n/* Expanded Detail Row in List View */\n.detail-row-expanded td {\n padding: 0;\n background: var(--mj-bg-surface-card);\n}\n\n.inline-details {\n display: flex;\n flex-wrap: wrap;\n gap: 16px;\n padding: 14px;\n border-top: 1px dashed var(--mj-border-default);\n}\n\n.inline-details .detail-section {\n display: flex;\n gap: 8px;\n font-size: 12px;\n}\n\n.inline-details .detail-section.full {\n flex-basis: 100%;\n flex-direction: column;\n gap: 6px;\n}\n\n.inline-details .detail-label {\n color: var(--mj-text-secondary);\n font-weight: 500;\n}\n\n.inline-details .detail-value {\n color: var(--mj-text-primary);\n}\n\n.inline-details .detail-value.mono {\n font-family: monospace;\n}\n\n/* ========================================\n Responsive Styles\n ======================================== */\n@media (max-width: 900px) {\n .mcp-dashboard {\n flex-direction: column;\n }\n\n .sidebar {\n width: 100%;\n min-width: 100%;\n flex-direction: row;\n height: auto;\n border-right: none;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .sidebar-header {\n padding: 12px 16px;\n border-bottom: none;\n border-right: 1px solid var(--mj-border-default);\n }\n\n .sidebar-nav {\n flex-direction: row;\n padding: 8px;\n overflow-x: auto;\n flex: 1;\n }\n\n .nav-item {\n padding: 8px 12px;\n margin-bottom: 0;\n margin-right: 4px;\n white-space: nowrap;\n }\n\n .sidebar-stats {\n display: none;\n }\n\n .sidebar-footer {\n border-top: none;\n border-left: 1px solid var(--mj-border-default);\n padding: 8px;\n }\n\n .data-grid {\n grid-template-columns: 1fr;\n }\n\n .header-actions {\n flex-wrap: wrap;\n }\n\n .search-box {\n min-width: 100%;\n order: 1;\n }\n}\n\n@media (max-width: 600px) {\n .content-header {\n flex-direction: column;\n align-items: flex-start;\n gap: 12px;\n }\n\n .header-actions {\n width: 100%;\n }\n\n .search-box {\n width: 100%;\n }\n}\n\n/* ========================================\n Clickable Log Rows\n ======================================== */\n.clickable-row {\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.clickable-row:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 5%, transparent) !important;\n}\n\n.clickable-row .action-cell {\n color: var(--mj-border-strong);\n transition: color 0.15s ease;\n}\n\n.clickable-row:hover .action-cell {\n color: var(--mj-brand-primary);\n}\n\n.action-cell {\n width: 40px;\n text-align: center;\n}\n\n/* ========================================\n Expandable Card Styles\n ======================================== */\n.card-header.clickable {\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.card-header.clickable:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.expand-arrow {\n font-size: 12px;\n color: var(--mj-text-disabled);\n transition: transform 0.2s ease;\n margin-right: 4px;\n}\n\n.expand-arrow.rotated {\n transform: rotate(90deg);\n}\n\n.data-card.expanded {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n/* ========================================\n Expanded Tools Section (Server/Connection Cards)\n ======================================== */\n.expanded-tools-section {\n border-top: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n}\n\n.tools-section-header {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 16px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-brand-primary);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.tools-section-header i {\n font-size: 14px;\n}\n\n.no-tools-message {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 16px;\n color: var(--mj-text-secondary);\n font-size: 13px;\n}\n\n.no-tools-message i {\n color: var(--mj-text-disabled);\n}\n\n/* Tools Mini List */\n.tools-mini-list {\n padding: 8px;\n display: flex;\n flex-direction: column;\n gap: 4px;\n max-height: 300px;\n overflow-y: auto;\n}\n\n.tool-mini-card {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 12px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n transition: all 0.15s ease;\n}\n\n.tool-mini-card:hover {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 2%, transparent);\n}\n\n.tool-mini-info {\n display: flex;\n flex-direction: column;\n gap: 2px;\n flex: 1;\n min-width: 0;\n}\n\n.tool-mini-name {\n font-weight: 500;\n font-size: 13px;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.tool-mini-params {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 11px;\n color: var(--mj-text-secondary);\n}\n\n.tool-mini-params i {\n font-size: 10px;\n}\n\n.tool-mini-card button {\n flex-shrink: 0;\n margin-left: 8px;\n}\n\n/* Search Highlight */\n:host ::ng-deep .search-highlight,\n.search-highlight {\n background-color: color-mix(in srgb, var(--mj-status-warning) 40%, var(--mj-bg-surface));\n padding: 1px 2px;\n border-radius: 2px;\n font-weight: inherit;\n}\n"] }]
4445
4355
  }], () => [{ type: i0.ChangeDetectorRef }, { type: i1.MCPToolsService }], null); })();
4446
4356
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MCPDashboardComponent, { className: "MCPDashboardComponent", filePath: "src/MCP/mcp-dashboard.component.ts", lineNumber: 230 }); })();
4447
4357
  //# sourceMappingURL=mcp-dashboard.component.js.map