@memberjunction/ng-dashboards 5.34.1 → 5.36.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.
- package/dist/AI/components/agents/agent-configuration.component.d.ts +51 -0
- package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-configuration.component.js +399 -292
- package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts +8 -2
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js +87 -85
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts +96 -0
- package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/ai-analytics-resource.component.js +453 -122
- package/dist/AI/components/analytics/ai-analytics-resource.component.js.map +1 -1
- package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts +5 -0
- package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/analytics-filter-bar.component.js +184 -135
- package/dist/AI/components/analytics/analytics-filter-bar.component.js.map +1 -1
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts +8 -2
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.js +104 -103
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.js.map +1 -1
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts +8 -2
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.js +76 -74
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.js +67 -87
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.js.map +1 -1
- package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts +12 -19
- package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/model-performance/model-performance.component.js +96 -203
- package/dist/AI/components/analytics/model-performance/model-performance.component.js.map +1 -1
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js +110 -126
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js +61 -77
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +28 -0
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +2084 -2079
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +6 -3
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +493 -490
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
- package/dist/AI/components/models/model-management.component.d.ts +17 -0
- package/dist/AI/components/models/model-management.component.d.ts.map +1 -1
- package/dist/AI/components/models/model-management.component.js +370 -425
- package/dist/AI/components/models/model-management.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.d.ts +17 -0
- package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.js +317 -357
- package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
- package/dist/AI/components/requests/agent-requests-resource.component.d.ts +11 -0
- package/dist/AI/components/requests/agent-requests-resource.component.d.ts.map +1 -1
- package/dist/AI/components/requests/agent-requests-resource.component.js +170 -175
- package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
- package/dist/AI/components/system/system-configuration.component.d.ts +19 -0
- package/dist/AI/components/system/system-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/system/system-configuration.component.js +403 -362
- package/dist/AI/components/system/system-configuration.component.js.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.d.ts +15 -0
- package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.js +1423 -1438
- package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts +8 -3
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.js +547 -521
- package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.d.ts +12 -8
- package/dist/APIKeys/api-keys-resource.component.d.ts.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.js +329 -371
- package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
- package/dist/Actions/components/actions-overview.component.d.ts +6 -0
- package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +202 -158
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.d.ts +9 -3
- package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.js +191 -142
- package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.d.ts +41 -1
- package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.js +388 -94
- package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
- package/dist/Actions/components/explorer/index.d.ts +0 -1
- package/dist/Actions/components/explorer/index.d.ts.map +1 -1
- package/dist/Actions/components/explorer/index.js +0 -1
- package/dist/Actions/components/explorer/index.js.map +1 -1
- package/dist/Admin/admin-data-schema.component.js +19 -79
- package/dist/Admin/admin-data-schema.component.js.map +1 -1
- package/dist/Admin/admin-dev-tools-resource.component.js +19 -79
- package/dist/Admin/admin-dev-tools-resource.component.js.map +1 -1
- package/dist/Admin/admin-identity-access.component.js +19 -79
- package/dist/Admin/admin-identity-access.component.js.map +1 -1
- package/dist/Admin/admin-monitoring.component.js +19 -79
- package/dist/Admin/admin-monitoring.component.js.map +1 -1
- package/dist/Admin/base-admin-container.component.d.ts +9 -7
- package/dist/Admin/base-admin-container.component.d.ts.map +1 -1
- package/dist/Admin/base-admin-container.component.js +26 -17
- package/dist/Admin/base-admin-container.component.js.map +1 -1
- package/dist/ApplicationRoles/application-roles-resource.component.js +92 -91
- package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
- package/dist/Archiving/components/archive-config-resource.component.d.ts.map +1 -1
- package/dist/Archiving/components/archive-config-resource.component.js +24 -5
- package/dist/Archiving/components/archive-config-resource.component.js.map +1 -1
- package/dist/Archiving/components/archive-runs-resource.component.d.ts.map +1 -1
- package/dist/Archiving/components/archive-runs-resource.component.js +24 -5
- package/dist/Archiving/components/archive-runs-resource.component.js.map +1 -1
- package/dist/Communication/communication-logs-resource.component.d.ts +1 -1
- package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-logs-resource.component.js +80 -99
- package/dist/Communication/communication-logs-resource.component.js.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.js +127 -106
- package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
- package/dist/Communication/communication-new-message-resource.component.d.ts +93 -0
- package/dist/Communication/communication-new-message-resource.component.d.ts.map +1 -0
- package/dist/Communication/communication-new-message-resource.component.js +661 -0
- package/dist/Communication/communication-new-message-resource.component.js.map +1 -0
- package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-providers-resource.component.js +44 -45
- package/dist/Communication/communication-providers-resource.component.js.map +1 -1
- package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-runs-resource.component.js +60 -58
- package/dist/Communication/communication-runs-resource.component.js.map +1 -1
- package/dist/Communication/communication-templates-resource.component.d.ts +1 -1
- package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-templates-resource.component.js +139 -162
- package/dist/Communication/communication-templates-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.d.ts +7 -0
- package/dist/Credentials/components/credentials-audit-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.js +310 -297
- package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.js +238 -266
- package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.d.ts +7 -0
- package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.js +381 -399
- package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-overview-resource.component.js +222 -228
- package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.d.ts +6 -0
- package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.js +290 -305
- package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts +8 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts.map +1 -1
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +41 -21
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js.map +1 -1
- package/dist/DatabaseDesigner/components/entity-list.component.d.ts +2 -0
- package/dist/DatabaseDesigner/components/entity-list.component.d.ts.map +1 -1
- package/dist/DatabaseDesigner/components/entity-list.component.js +148 -155
- package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js +25 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -1
- package/dist/DevTools/app-state-inspector.component.d.ts +5 -0
- package/dist/DevTools/app-state-inspector.component.d.ts.map +1 -1
- package/dist/DevTools/app-state-inspector.component.js +46 -72
- package/dist/DevTools/app-state-inspector.component.js.map +1 -1
- package/dist/DevTools/class-registry.component.js +88 -100
- package/dist/DevTools/class-registry.component.js.map +1 -1
- package/dist/DevTools/event-monitor.component.js +158 -168
- package/dist/DevTools/event-monitor.component.js.map +1 -1
- package/dist/DevTools/graphql-console.component.js +257 -264
- package/dist/DevTools/graphql-console.component.js.map +1 -1
- package/dist/DevTools/layout-inspector.component.d.ts +5 -0
- package/dist/DevTools/layout-inspector.component.d.ts.map +1 -1
- package/dist/DevTools/layout-inspector.component.js +46 -64
- package/dist/DevTools/layout-inspector.component.js.map +1 -1
- package/dist/DevTools/lazy-module-status.component.js +75 -84
- package/dist/DevTools/lazy-module-status.component.js.map +1 -1
- package/dist/DevTools/settings-explorer.component.js +76 -85
- package/dist/DevTools/settings-explorer.component.js.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts +2 -0
- package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.js +24 -16
- package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
- package/dist/Home/home-dashboard.component.d.ts +6 -0
- package/dist/Home/home-dashboard.component.d.ts.map +1 -1
- package/dist/Home/home-dashboard.component.js +521 -485
- package/dist/Home/home-dashboard.component.js.map +1 -1
- package/dist/Integration/components/activity/activity.component.d.ts +8 -0
- package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
- package/dist/Integration/components/activity/activity.component.js +307 -318
- package/dist/Integration/components/activity/activity.component.js.map +1 -1
- package/dist/Integration/components/connections/connections.component.js +654 -648
- package/dist/Integration/components/connections/connections.component.js.map +1 -1
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +234 -233
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
- package/dist/Integration/components/overview/overview.component.js +182 -163
- package/dist/Integration/components/overview/overview.component.js.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.d.ts +2 -0
- package/dist/Integration/components/pipelines/pipelines.component.d.ts.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.js +595 -606
- package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
- package/dist/Integration/components/schedules/schedules.component.js +230 -241
- package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
- package/dist/Integration/integration.module.d.ts +1 -1
- package/dist/Integration/integration.module.d.ts.map +1 -1
- package/dist/Integration/integration.module.js +28 -1
- package/dist/Integration/integration.module.js.map +1 -1
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts +5 -0
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +1138 -1147
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +54 -51
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts +11 -0
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +684 -697
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts +12 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +191 -120
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts +120 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +1239 -610
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.js +152 -160
- package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.js +302 -319
- package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.d.ts +133 -3
- package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.js +1460 -272
- package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-shared-with-me-resource.component.d.ts +29 -0
- package/dist/Lists/components/lists-shared-with-me-resource.component.d.ts.map +1 -0
- package/dist/Lists/components/lists-shared-with-me-resource.component.js +77 -0
- package/dist/Lists/components/lists-shared-with-me-resource.component.js.map +1 -0
- package/dist/Lists/components/venn-diagram/venn-diagram.component.d.ts +6 -0
- package/dist/Lists/components/venn-diagram/venn-diagram.component.d.ts.map +1 -1
- package/dist/Lists/components/venn-diagram/venn-diagram.component.js +35 -7
- package/dist/Lists/components/venn-diagram/venn-diagram.component.js.map +1 -1
- package/dist/Lists/index.d.ts +1 -0
- package/dist/Lists/index.d.ts.map +1 -1
- package/dist/Lists/index.js +1 -0
- package/dist/Lists/index.js.map +1 -1
- package/dist/Lists/services/list-set-operations.service.d.ts +93 -2
- package/dist/Lists/services/list-set-operations.service.d.ts.map +1 -1
- package/dist/Lists/services/list-set-operations.service.js +236 -10
- package/dist/Lists/services/list-set-operations.service.js.map +1 -1
- package/dist/MCP/mcp-dashboard.component.d.ts +20 -0
- package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
- package/dist/MCP/mcp-dashboard.component.js +1248 -1338
- package/dist/MCP/mcp-dashboard.component.js.map +1 -1
- package/dist/MCP/mcp.module.d.ts +1 -1
- package/dist/MCP/mcp.module.d.ts.map +1 -1
- package/dist/MCP/mcp.module.js +34 -1
- package/dist/MCP/mcp.module.js.map +1 -1
- package/dist/Permissions/audit-log-resource.component.js +76 -85
- package/dist/Permissions/audit-log-resource.component.js.map +1 -1
- package/dist/Permissions/resource-access-resource.component.js +64 -69
- package/dist/Permissions/resource-access-resource.component.js.map +1 -1
- package/dist/Permissions/user-access-resource.component.js +63 -74
- package/dist/Permissions/user-access-resource.component.js.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js +2 -2
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts +2 -1
- package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-activity-resource.component.js +11 -12
- package/dist/Scheduling/components/scheduling-activity-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-activity.component.d.ts +9 -1
- package/dist/Scheduling/components/scheduling-activity.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-activity.component.js +250 -197
- package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts +2 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.js +11 -12
- package/dist/Scheduling/components/scheduling-jobs-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs.component.d.ts +9 -1
- package/dist/Scheduling/components/scheduling-jobs.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs.component.js +203 -147
- package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts +2 -1
- package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-overview-resource.component.js +11 -12
- package/dist/Scheduling/components/scheduling-overview-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-overview.component.d.ts +3 -1
- package/dist/Scheduling/components/scheduling-overview.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-overview.component.js +224 -190
- package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.d.ts +19 -6
- package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.js +259 -103
- package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts +13 -3
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.js +1009 -1264
- package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
- package/dist/Testing/components/testing-analytics-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-analytics-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-analytics-resource.component.js +7 -14
- package/dist/Testing/components/testing-analytics-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-analytics.component.d.ts +3 -1
- package/dist/Testing/components/testing-analytics.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-analytics.component.js +420 -393
- package/dist/Testing/components/testing-analytics.component.js.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.js +16 -19
- package/dist/Testing/components/testing-dashboard-tab-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab.component.d.ts +3 -1
- package/dist/Testing/components/testing-dashboard-tab.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab.component.js +157 -122
- package/dist/Testing/components/testing-dashboard-tab.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-explorer-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer-resource.component.js +7 -12
- package/dist/Testing/components/testing-explorer-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer.component.d.ts +38 -6
- package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer.component.js +679 -786
- package/dist/Testing/components/testing-explorer.component.js.map +1 -1
- package/dist/Testing/components/testing-review-resource.component.d.ts +4 -1
- package/dist/Testing/components/testing-review-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-review-resource.component.js +9 -12
- package/dist/Testing/components/testing-review-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-review.component.d.ts +3 -1
- package/dist/Testing/components/testing-review.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-review.component.js +310 -274
- package/dist/Testing/components/testing-review.component.js.map +1 -1
- package/dist/Testing/components/testing-runs-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-runs-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-runs-resource.component.js +16 -19
- package/dist/Testing/components/testing-runs-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-runs.component.d.ts +3 -1
- package/dist/Testing/components/testing-runs.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-runs.component.js +307 -273
- package/dist/Testing/components/testing-runs.component.js.map +1 -1
- package/dist/Testing/testing-dashboard.component.d.ts +2 -0
- package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
- package/dist/Testing/testing-dashboard.component.js +114 -99
- package/dist/Testing/testing-dashboard.component.js.map +1 -1
- package/dist/VersionHistory/components/diff-resource.component.js +185 -188
- package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/graph-resource.component.js +154 -184
- package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/labels-resource.component.d.ts +7 -0
- package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -1
- package/dist/VersionHistory/components/labels-resource.component.js +350 -354
- package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/restore-resource.component.js +163 -169
- package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
- package/dist/actions-dashboards.module.d.ts +15 -16
- package/dist/actions-dashboards.module.d.ts.map +1 -1
- package/dist/actions-dashboards.module.js +34 -11
- package/dist/actions-dashboards.module.js.map +1 -1
- package/dist/ai-dashboards.module.d.ts +45 -48
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +51 -10
- package/dist/ai-dashboards.module.js.map +1 -1
- package/dist/archiving-dashboards.module.d.ts +2 -1
- package/dist/archiving-dashboards.module.d.ts.map +1 -1
- package/dist/archiving-dashboards.module.js +12 -2
- package/dist/archiving-dashboards.module.js.map +1 -1
- package/dist/communication-dashboards.module.d.ts +9 -6
- package/dist/communication-dashboards.module.d.ts.map +1 -1
- package/dist/communication-dashboards.module.js +37 -7
- package/dist/communication-dashboards.module.js.map +1 -1
- package/dist/core-dashboards.module.d.ts +1 -1
- package/dist/core-dashboards.module.d.ts.map +1 -1
- package/dist/core-dashboards.module.js +46 -1
- package/dist/core-dashboards.module.js.map +1 -1
- package/dist/credentials-dashboards.module.d.ts +1 -1
- package/dist/credentials-dashboards.module.d.ts.map +1 -1
- package/dist/credentials-dashboards.module.js +28 -1
- package/dist/credentials-dashboards.module.js.map +1 -1
- package/dist/lists-dashboards.module.d.ts +10 -9
- package/dist/lists-dashboards.module.d.ts.map +1 -1
- package/dist/lists-dashboards.module.js +40 -2
- package/dist/lists-dashboards.module.js.map +1 -1
- package/dist/public-api.d.ts +3 -2
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +4 -3
- package/dist/public-api.js.map +1 -1
- package/dist/scheduling-dashboards.module.d.ts +1 -1
- package/dist/scheduling-dashboards.module.d.ts.map +1 -1
- package/dist/scheduling-dashboards.module.js +31 -1
- package/dist/scheduling-dashboards.module.js.map +1 -1
- package/dist/testing-dashboards.module.d.ts +8 -7
- package/dist/testing-dashboards.module.d.ts.map +1 -1
- package/dist/testing-dashboards.module.js +42 -0
- package/dist/testing-dashboards.module.js.map +1 -1
- package/package.json +53 -52
- package/dist/AI/components/agents/agent-filter-panel.component.d.ts +0 -56
- package/dist/AI/components/agents/agent-filter-panel.component.d.ts.map +0 -1
- package/dist/AI/components/agents/agent-filter-panel.component.js +0 -285
- package/dist/AI/components/agents/agent-filter-panel.component.js.map +0 -1
- package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts +0 -49
- package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts.map +0 -1
- package/dist/AI/components/prompts/prompt-filter-panel.component.js +0 -184
- package/dist/AI/components/prompts/prompt-filter-panel.component.js.map +0 -1
- package/dist/AI/components/system/system-config-filter-panel.component.d.ts +0 -33
- package/dist/AI/components/system/system-config-filter-panel.component.d.ts.map +0 -1
- package/dist/AI/components/system/system-config-filter-panel.component.js +0 -144
- package/dist/AI/components/system/system-config-filter-panel.component.js.map +0 -1
- package/dist/Actions/components/explorer/action-toolbar.component.d.ts +0 -63
- package/dist/Actions/components/explorer/action-toolbar.component.d.ts.map +0 -1
- package/dist/Actions/components/explorer/action-toolbar.component.js +0 -463
- 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.
|
|
34
|
-
const _forTrack2 = ($index, $item) => $item.
|
|
35
|
-
const _forTrack3 = ($index, $item) => $item.
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
i0.ɵɵ
|
|
39
|
-
|
|
40
|
-
|
|
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_7_Template(rf, ctx) { if (rf & 1) {
|
|
37
|
+
const _r1 = i0.ɵɵgetCurrentView();
|
|
38
|
+
i0.ɵɵelementStart(0, "button", 34);
|
|
39
|
+
i0.ɵɵlistener("click", function MCPDashboardComponent_Case_7_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
|
|
52
|
-
const
|
|
53
|
-
i0.ɵɵelementStart(0, "button",
|
|
54
|
-
i0.ɵɵlistener("click", function
|
|
55
|
-
i0.ɵɵelement(1, "i",
|
|
44
|
+
function MCPDashboardComponent_Case_8_Template(rf, ctx) { if (rf & 1) {
|
|
45
|
+
const _r3 = i0.ɵɵgetCurrentView();
|
|
46
|
+
i0.ɵɵelementStart(0, "button", 34);
|
|
47
|
+
i0.ɵɵlistener("click", function MCPDashboardComponent_Case_8_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
|
|
60
|
-
const
|
|
61
|
-
i0.ɵɵelementStart(0, "
|
|
62
|
-
i0.ɵɵlistener("
|
|
63
|
-
i0.ɵɵelement(2, "i", 72);
|
|
52
|
+
function MCPDashboardComponent_Case_9_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_9_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(
|
|
66
|
-
i0.ɵɵlistener("click", function
|
|
67
|
-
i0.ɵɵelement(
|
|
68
|
-
i0.ɵɵ
|
|
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_9_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
|
-
|
|
75
|
-
const
|
|
76
|
-
i0.ɵɵ
|
|
77
|
-
i0.ɵɵ
|
|
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_9_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
|
|
90
|
-
i0.ɵɵproperty("
|
|
68
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
69
|
+
i0.ɵɵproperty("Options", ctx_r1.toolsViewOptions)("ActiveKey", ctx_r1.ToolsViewMode);
|
|
91
70
|
i0.ɵɵadvance();
|
|
92
|
-
i0.ɵɵ
|
|
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.ɵɵ
|
|
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.ɵɵ
|
|
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
|
|
197
|
-
const
|
|
198
|
-
i0.ɵɵelementStart(0, "
|
|
199
|
-
i0.ɵɵ
|
|
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_10_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_10_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
|
|
240
|
-
i0.ɵɵ
|
|
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
|
|
244
|
-
const
|
|
245
|
-
i0.ɵɵelementStart(0, "div",
|
|
246
|
-
i0.ɵɵelement(
|
|
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",
|
|
274
|
-
i0.ɵɵlistener("click", function
|
|
275
|
-
i0.ɵɵelement(4, "i",
|
|
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
|
|
96
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
279
97
|
i0.ɵɵadvance(2);
|
|
280
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
98
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.ErrorMessage, " ");
|
|
281
99
|
} }
|
|
282
|
-
function
|
|
283
|
-
i0.ɵɵelement(0, "mj-loading",
|
|
100
|
+
function MCPDashboardComponent_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
101
|
+
i0.ɵɵelement(0, "mj-loading", 31);
|
|
284
102
|
} }
|
|
285
|
-
function
|
|
286
|
-
const
|
|
287
|
-
i0.ɵɵelementStart(0, "div",
|
|
288
|
-
i0.ɵɵelement(1, "i",
|
|
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",
|
|
293
|
-
i0.ɵɵlistener("click", function
|
|
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
|
|
298
|
-
i0.ɵɵelementStart(0, "p",
|
|
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
|
|
120
|
+
const server_r9 = i0.ɵɵnextContext().$implicit;
|
|
303
121
|
i0.ɵɵadvance();
|
|
304
|
-
i0.ɵɵtextInterpolate(
|
|
122
|
+
i0.ɵɵtextInterpolate(server_r9.Description);
|
|
305
123
|
} }
|
|
306
|
-
function
|
|
307
|
-
i0.ɵɵelementStart(0, "div",
|
|
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",
|
|
128
|
+
i0.ɵɵelementStart(3, "span", 69);
|
|
311
129
|
i0.ɵɵtext(4);
|
|
312
130
|
i0.ɵɵelementEnd()();
|
|
313
131
|
} if (rf & 2) {
|
|
314
|
-
const
|
|
132
|
+
const server_r9 = i0.ɵɵnextContext().$implicit;
|
|
315
133
|
i0.ɵɵadvance(4);
|
|
316
|
-
i0.ɵɵtextInterpolate(
|
|
134
|
+
i0.ɵɵtextInterpolate(server_r9.ServerURL);
|
|
317
135
|
} }
|
|
318
|
-
function
|
|
319
|
-
i0.ɵɵelementStart(0, "div",
|
|
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",
|
|
140
|
+
i0.ɵɵelementStart(3, "span", 70);
|
|
323
141
|
i0.ɵɵtext(4);
|
|
324
142
|
i0.ɵɵelementEnd()();
|
|
325
143
|
} if (rf & 2) {
|
|
326
|
-
const
|
|
144
|
+
const server_r9 = i0.ɵɵnextContext().$implicit;
|
|
327
145
|
i0.ɵɵadvance(4);
|
|
328
|
-
i0.ɵɵtextInterpolate(
|
|
146
|
+
i0.ɵɵtextInterpolate(server_r9.Command);
|
|
329
147
|
} }
|
|
330
|
-
function
|
|
331
|
-
i0.ɵɵelementStart(0, "div",
|
|
332
|
-
i0.ɵɵelement(1, "i",
|
|
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
|
|
337
|
-
const
|
|
338
|
-
i0.ɵɵelementStart(0, "div",
|
|
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",
|
|
342
|
-
i0.ɵɵelement(5, "i",
|
|
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",
|
|
346
|
-
i0.ɵɵlistener("click", function
|
|
347
|
-
i0.ɵɵelement(8, "i",
|
|
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
|
|
351
|
-
const
|
|
168
|
+
const tool_r11 = ctx.$implicit;
|
|
169
|
+
const ctx_r1 = i0.ɵɵnextContext(7);
|
|
352
170
|
i0.ɵɵadvance(3);
|
|
353
|
-
i0.ɵɵtextInterpolate(
|
|
171
|
+
i0.ɵɵtextInterpolate(tool_r11.ToolTitle || tool_r11.ToolName);
|
|
354
172
|
i0.ɵɵadvance(3);
|
|
355
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
173
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.getParamCount(tool_r11), " params ");
|
|
356
174
|
} }
|
|
357
|
-
function
|
|
358
|
-
i0.ɵɵelementStart(0, "div",
|
|
359
|
-
i0.ɵɵrepeaterCreate(1,
|
|
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
|
|
363
|
-
const
|
|
180
|
+
const server_r9 = i0.ɵɵnextContext(2).$implicit;
|
|
181
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
364
182
|
i0.ɵɵadvance();
|
|
365
|
-
i0.ɵɵrepeater(
|
|
183
|
+
i0.ɵɵrepeater(ctx_r1.getToolsForServer(server_r9.ID));
|
|
366
184
|
} }
|
|
367
|
-
function
|
|
368
|
-
i0.ɵɵelementStart(0, "div",
|
|
369
|
-
i0.ɵɵelement(2, "i",
|
|
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,
|
|
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
|
|
377
|
-
const
|
|
194
|
+
const server_r9 = i0.ɵɵnextContext().$implicit;
|
|
195
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
378
196
|
i0.ɵɵadvance(4);
|
|
379
|
-
i0.ɵɵtextInterpolate1("Available Tools (",
|
|
197
|
+
i0.ɵɵtextInterpolate1("Available Tools (", ctx_r1.getToolsForServer(server_r9.ID).length, ")");
|
|
380
198
|
i0.ɵɵadvance();
|
|
381
|
-
i0.ɵɵconditional(
|
|
199
|
+
i0.ɵɵconditional(ctx_r1.getToolsForServer(server_r9.ID).length === 0 ? 5 : 6);
|
|
382
200
|
} }
|
|
383
|
-
function
|
|
384
|
-
const
|
|
385
|
-
i0.ɵɵelementStart(0, "div",
|
|
386
|
-
i0.ɵɵlistener("click", function
|
|
387
|
-
i0.ɵɵelementStart(2, "div",
|
|
388
|
-
i0.ɵɵelement(3, "i",
|
|
389
|
-
i0.ɵɵelementStart(5, "span",
|
|
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",
|
|
210
|
+
i0.ɵɵelementStart(7, "span", 55);
|
|
393
211
|
i0.ɵɵtext(8);
|
|
394
212
|
i0.ɵɵelementEnd()();
|
|
395
|
-
i0.ɵɵelementStart(9, "div",
|
|
396
|
-
i0.ɵɵlistener("click", function
|
|
397
|
-
i0.ɵɵelementStart(10, "button",
|
|
398
|
-
i0.ɵɵlistener("click", function
|
|
399
|
-
i0.ɵɵelement(11, "i",
|
|
400
|
-
i0.ɵɵelementEnd();
|
|
401
|
-
i0.ɵɵelementStart(12, "button",
|
|
402
|
-
i0.ɵɵlistener("click", function
|
|
403
|
-
i0.ɵɵelement(13, "i",
|
|
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",
|
|
406
|
-
i0.ɵɵconditionalCreate(15,
|
|
407
|
-
i0.ɵɵelementStart(16, "div",
|
|
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",
|
|
228
|
+
i0.ɵɵelementStart(20, "span", 66);
|
|
411
229
|
i0.ɵɵtext(21);
|
|
412
230
|
i0.ɵɵelementEnd()();
|
|
413
|
-
i0.ɵɵelementStart(22, "div",
|
|
231
|
+
i0.ɵɵelementStart(22, "div", 64)(23, "span", 65);
|
|
414
232
|
i0.ɵɵtext(24, "Auth");
|
|
415
233
|
i0.ɵɵelementEnd();
|
|
416
|
-
i0.ɵɵelementStart(25, "span",
|
|
234
|
+
i0.ɵɵelementStart(25, "span", 66);
|
|
417
235
|
i0.ɵɵtext(26);
|
|
418
236
|
i0.ɵɵelementEnd()();
|
|
419
|
-
i0.ɵɵelementStart(27, "div",
|
|
237
|
+
i0.ɵɵelementStart(27, "div", 64)(28, "span", 65);
|
|
420
238
|
i0.ɵɵtext(29, "Connections");
|
|
421
239
|
i0.ɵɵelementEnd();
|
|
422
|
-
i0.ɵɵelementStart(30, "span",
|
|
240
|
+
i0.ɵɵelementStart(30, "span", 66);
|
|
423
241
|
i0.ɵɵtext(31);
|
|
424
242
|
i0.ɵɵelementEnd()();
|
|
425
|
-
i0.ɵɵelementStart(32, "div",
|
|
243
|
+
i0.ɵɵelementStart(32, "div", 64)(33, "span", 65);
|
|
426
244
|
i0.ɵɵtext(34, "Tools");
|
|
427
245
|
i0.ɵɵelementEnd();
|
|
428
|
-
i0.ɵɵelementStart(35, "span",
|
|
246
|
+
i0.ɵɵelementStart(35, "span", 66);
|
|
429
247
|
i0.ɵɵtext(36);
|
|
430
248
|
i0.ɵɵelementEnd()();
|
|
431
|
-
i0.ɵɵconditionalCreate(37,
|
|
432
|
-
i0.ɵɵconditionalCreate(38,
|
|
433
|
-
i0.ɵɵelementStart(39, "div",
|
|
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",
|
|
254
|
+
i0.ɵɵelementStart(42, "span", 66);
|
|
437
255
|
i0.ɵɵtext(43);
|
|
438
256
|
i0.ɵɵelementEnd()()()();
|
|
439
|
-
i0.ɵɵconditionalCreate(44,
|
|
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
|
|
443
|
-
const
|
|
444
|
-
i0.ɵɵclassProp("expanded",
|
|
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",
|
|
264
|
+
i0.ɵɵclassProp("rotated", ctx_r1.isServerExpanded(server_r9));
|
|
447
265
|
i0.ɵɵadvance();
|
|
448
|
-
i0.ɵɵclassMap(
|
|
266
|
+
i0.ɵɵclassMap(ctx_r1.getTransportIcon(server_r9.TransportType));
|
|
449
267
|
i0.ɵɵadvance(2);
|
|
450
|
-
i0.ɵɵtextInterpolate(
|
|
268
|
+
i0.ɵɵtextInterpolate(server_r9.Name);
|
|
451
269
|
i0.ɵɵadvance();
|
|
452
|
-
i0.ɵɵproperty("ngClass",
|
|
270
|
+
i0.ɵɵproperty("ngClass", ctx_r1.getStatusClass(server_r9.Status));
|
|
453
271
|
i0.ɵɵadvance();
|
|
454
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
272
|
+
i0.ɵɵtextInterpolate1(" ", server_r9.Status, " ");
|
|
455
273
|
i0.ɵɵadvance(7);
|
|
456
|
-
i0.ɵɵconditional(
|
|
274
|
+
i0.ɵɵconditional(server_r9.Description ? 15 : -1);
|
|
457
275
|
i0.ɵɵadvance(6);
|
|
458
|
-
i0.ɵɵtextInterpolate(
|
|
276
|
+
i0.ɵɵtextInterpolate(server_r9.TransportType);
|
|
459
277
|
i0.ɵɵadvance(5);
|
|
460
|
-
i0.ɵɵtextInterpolate(
|
|
278
|
+
i0.ɵɵtextInterpolate(server_r9.DefaultAuthType);
|
|
461
279
|
i0.ɵɵadvance(5);
|
|
462
|
-
i0.ɵɵtextInterpolate(
|
|
280
|
+
i0.ɵɵtextInterpolate(server_r9.ConnectionCount);
|
|
463
281
|
i0.ɵɵadvance(5);
|
|
464
|
-
i0.ɵɵtextInterpolate(
|
|
282
|
+
i0.ɵɵtextInterpolate(server_r9.ToolCount);
|
|
465
283
|
i0.ɵɵadvance();
|
|
466
|
-
i0.ɵɵconditional(
|
|
284
|
+
i0.ɵɵconditional(server_r9.ServerURL ? 37 : -1);
|
|
467
285
|
i0.ɵɵadvance();
|
|
468
|
-
i0.ɵɵconditional(
|
|
286
|
+
i0.ɵɵconditional(server_r9.Command ? 38 : -1);
|
|
469
287
|
i0.ɵɵadvance(5);
|
|
470
|
-
i0.ɵɵtextInterpolate(
|
|
288
|
+
i0.ɵɵtextInterpolate(ctx_r1.formatDate(server_r9.LastSyncAt));
|
|
471
289
|
i0.ɵɵadvance();
|
|
472
|
-
i0.ɵɵconditional(
|
|
290
|
+
i0.ɵɵconditional(ctx_r1.isServerExpanded(server_r9) ? 44 : -1);
|
|
473
291
|
} }
|
|
474
|
-
function
|
|
475
|
-
i0.ɵɵrepeaterCreate(0,
|
|
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
|
|
478
|
-
i0.ɵɵrepeater(
|
|
295
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
296
|
+
i0.ɵɵrepeater(ctx_r1.filteredServers);
|
|
479
297
|
} }
|
|
480
|
-
function
|
|
481
|
-
i0.ɵɵelementStart(0, "div",
|
|
482
|
-
i0.ɵɵconditionalCreate(1,
|
|
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
|
|
303
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
486
304
|
i0.ɵɵadvance();
|
|
487
|
-
i0.ɵɵconditional(
|
|
305
|
+
i0.ɵɵconditional(ctx_r1.filteredServers.length === 0 ? 1 : 2);
|
|
488
306
|
} }
|
|
489
|
-
function
|
|
490
|
-
const
|
|
491
|
-
i0.ɵɵelementStart(0, "div",
|
|
492
|
-
i0.ɵɵelement(1, "i",
|
|
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",
|
|
497
|
-
i0.ɵɵlistener("click", function
|
|
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
|
|
502
|
-
i0.ɵɵelement(0, "i",
|
|
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
|
|
505
|
-
i0.ɵɵelement(0, "i",
|
|
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
|
|
508
|
-
i0.ɵɵelementStart(0, "div",
|
|
509
|
-
i0.ɵɵelement(1, "i",
|
|
510
|
-
i0.ɵɵelementStart(2, "span",
|
|
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
|
|
515
|
-
const
|
|
332
|
+
const conn_r14 = i0.ɵɵnextContext().$implicit;
|
|
333
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
516
334
|
i0.ɵɵadvance(3);
|
|
517
|
-
i0.ɵɵtextInterpolate(
|
|
335
|
+
i0.ɵɵtextInterpolate(ctx_r1.getSyncProgressMessage(conn_r14.ID) || "Syncing...");
|
|
518
336
|
} }
|
|
519
|
-
function
|
|
520
|
-
i0.ɵɵelement(0, "i",
|
|
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
|
|
526
|
-
const
|
|
527
|
-
const
|
|
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: ", (
|
|
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
|
|
532
|
-
i0.ɵɵelement(0, "i",
|
|
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
|
|
538
|
-
const
|
|
539
|
-
const
|
|
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((
|
|
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
|
|
544
|
-
i0.ɵɵelementStart(0, "div",
|
|
545
|
-
i0.ɵɵconditionalCreate(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
|
-
|
|
551
|
-
const
|
|
552
|
-
|
|
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(((
|
|
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
|
|
558
|
-
i0.ɵɵelementStart(0, "p",
|
|
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
|
|
380
|
+
const conn_r14 = i0.ɵɵnextContext().$implicit;
|
|
563
381
|
i0.ɵɵadvance();
|
|
564
|
-
i0.ɵɵtextInterpolate(
|
|
382
|
+
i0.ɵɵtextInterpolate(conn_r14.Description);
|
|
565
383
|
} }
|
|
566
|
-
function
|
|
567
|
-
i0.ɵɵelementStart(0, "div",
|
|
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",
|
|
388
|
+
i0.ɵɵelementStart(3, "span", 66);
|
|
571
389
|
i0.ɵɵtext(4);
|
|
572
390
|
i0.ɵɵelementEnd()();
|
|
573
391
|
} if (rf & 2) {
|
|
574
|
-
const
|
|
392
|
+
const conn_r14 = i0.ɵɵnextContext().$implicit;
|
|
575
393
|
i0.ɵɵadvance(4);
|
|
576
|
-
i0.ɵɵtextInterpolate(
|
|
394
|
+
i0.ɵɵtextInterpolate(conn_r14.LastErrorMessage);
|
|
577
395
|
} }
|
|
578
|
-
function
|
|
579
|
-
i0.ɵɵelementStart(0, "div",
|
|
580
|
-
i0.ɵɵelement(1, "i",
|
|
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
|
|
585
|
-
const
|
|
586
|
-
i0.ɵɵelementStart(0, "div",
|
|
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",
|
|
590
|
-
i0.ɵɵelement(5, "i",
|
|
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",
|
|
594
|
-
i0.ɵɵlistener("click", function
|
|
595
|
-
i0.ɵɵelement(8, "i",
|
|
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
|
|
599
|
-
const
|
|
416
|
+
const tool_r16 = ctx.$implicit;
|
|
417
|
+
const ctx_r1 = i0.ɵɵnextContext(7);
|
|
600
418
|
i0.ɵɵadvance(3);
|
|
601
|
-
i0.ɵɵtextInterpolate(
|
|
419
|
+
i0.ɵɵtextInterpolate(tool_r16.ToolTitle || tool_r16.ToolName);
|
|
602
420
|
i0.ɵɵadvance(3);
|
|
603
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
421
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.getParamCount(tool_r16), " params ");
|
|
604
422
|
} }
|
|
605
|
-
function
|
|
606
|
-
i0.ɵɵelementStart(0, "div",
|
|
607
|
-
i0.ɵɵrepeaterCreate(1,
|
|
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
|
|
611
|
-
const
|
|
428
|
+
const conn_r14 = i0.ɵɵnextContext(2).$implicit;
|
|
429
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
612
430
|
i0.ɵɵadvance();
|
|
613
|
-
i0.ɵɵrepeater(
|
|
431
|
+
i0.ɵɵrepeater(ctx_r1.getToolsForConnection(conn_r14.ID));
|
|
614
432
|
} }
|
|
615
|
-
function
|
|
616
|
-
i0.ɵɵelementStart(0, "div",
|
|
617
|
-
i0.ɵɵelement(2, "i",
|
|
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,
|
|
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
|
|
625
|
-
const
|
|
442
|
+
const conn_r14 = i0.ɵɵnextContext().$implicit;
|
|
443
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
626
444
|
i0.ɵɵadvance(4);
|
|
627
|
-
i0.ɵɵtextInterpolate1("Available Tools (",
|
|
445
|
+
i0.ɵɵtextInterpolate1("Available Tools (", ctx_r1.getToolsForConnection(conn_r14.ID).length, ")");
|
|
628
446
|
i0.ɵɵadvance();
|
|
629
|
-
i0.ɵɵconditional(
|
|
447
|
+
i0.ɵɵconditional(ctx_r1.getToolsForConnection(conn_r14.ID).length === 0 ? 5 : 6);
|
|
630
448
|
} }
|
|
631
|
-
function
|
|
632
|
-
const
|
|
633
|
-
i0.ɵɵelementStart(0, "div",
|
|
634
|
-
i0.ɵɵlistener("click", function
|
|
635
|
-
i0.ɵɵelementStart(2, "div",
|
|
636
|
-
i0.ɵɵelement(3, "i",
|
|
637
|
-
i0.ɵɵelementStart(5, "span",
|
|
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",
|
|
458
|
+
i0.ɵɵelementStart(7, "span", 55);
|
|
641
459
|
i0.ɵɵtext(8);
|
|
642
460
|
i0.ɵɵelementEnd()();
|
|
643
|
-
i0.ɵɵelementStart(9, "div",
|
|
644
|
-
i0.ɵɵlistener("click", function
|
|
645
|
-
i0.ɵɵelementStart(10, "button",
|
|
646
|
-
i0.ɵɵlistener("click", function
|
|
647
|
-
i0.ɵɵconditionalCreate(11,
|
|
648
|
-
i0.ɵɵelementEnd();
|
|
649
|
-
i0.ɵɵelementStart(13, "button",
|
|
650
|
-
i0.ɵɵlistener("click", function
|
|
651
|
-
i0.ɵɵelement(14, "i",
|
|
652
|
-
i0.ɵɵelementEnd();
|
|
653
|
-
i0.ɵɵelementStart(15, "button",
|
|
654
|
-
i0.ɵɵlistener("click", function
|
|
655
|
-
i0.ɵɵelement(16, "i",
|
|
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,
|
|
658
|
-
i0.ɵɵconditionalCreate(18,
|
|
659
|
-
i0.ɵɵelementStart(19, "div",
|
|
660
|
-
i0.ɵɵconditionalCreate(20,
|
|
661
|
-
i0.ɵɵelementStart(21, "div",
|
|
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",
|
|
482
|
+
i0.ɵɵelementStart(25, "span", 66);
|
|
665
483
|
i0.ɵɵtext(26);
|
|
666
484
|
i0.ɵɵelementEnd()();
|
|
667
|
-
i0.ɵɵelementStart(27, "div",
|
|
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",
|
|
488
|
+
i0.ɵɵelementStart(30, "span", 66);
|
|
671
489
|
i0.ɵɵtext(31);
|
|
672
490
|
i0.ɵɵelementEnd()();
|
|
673
|
-
i0.ɵɵelementStart(32, "div",
|
|
491
|
+
i0.ɵɵelementStart(32, "div", 64)(33, "span", 65);
|
|
674
492
|
i0.ɵɵtext(34, "Logging");
|
|
675
493
|
i0.ɵɵelementEnd();
|
|
676
|
-
i0.ɵɵelementStart(35, "span",
|
|
494
|
+
i0.ɵɵelementStart(35, "span", 66);
|
|
677
495
|
i0.ɵɵtext(36);
|
|
678
496
|
i0.ɵɵelementEnd()();
|
|
679
|
-
i0.ɵɵelementStart(37, "div",
|
|
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",
|
|
500
|
+
i0.ɵɵelementStart(40, "span", 66);
|
|
683
501
|
i0.ɵɵtext(41);
|
|
684
502
|
i0.ɵɵelementEnd()();
|
|
685
|
-
i0.ɵɵconditionalCreate(42,
|
|
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,
|
|
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
|
|
691
|
-
const
|
|
692
|
-
const
|
|
693
|
-
i0.ɵɵclassProp("expanded",
|
|
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",
|
|
513
|
+
i0.ɵɵclassProp("rotated", ctx_r1.isConnectionExpanded(conn_r14));
|
|
696
514
|
i0.ɵɵadvance(3);
|
|
697
|
-
i0.ɵɵtextInterpolate(
|
|
515
|
+
i0.ɵɵtextInterpolate(conn_r14.Name);
|
|
698
516
|
i0.ɵɵadvance();
|
|
699
|
-
i0.ɵɵproperty("ngClass",
|
|
517
|
+
i0.ɵɵproperty("ngClass", ctx_r1.getStatusClass(conn_r14.Status));
|
|
700
518
|
i0.ɵɵadvance();
|
|
701
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
519
|
+
i0.ɵɵtextInterpolate1(" ", conn_r14.Status, " ");
|
|
702
520
|
i0.ɵɵadvance(2);
|
|
703
|
-
i0.ɵɵproperty("disabled",
|
|
521
|
+
i0.ɵɵproperty("disabled", ctx_r1.isSyncing(conn_r14.ID));
|
|
704
522
|
i0.ɵɵadvance();
|
|
705
|
-
i0.ɵɵconditional(
|
|
523
|
+
i0.ɵɵconditional(ctx_r1.isSyncing(conn_r14.ID) ? 11 : 12);
|
|
706
524
|
i0.ɵɵadvance(6);
|
|
707
|
-
i0.ɵɵconditional(
|
|
525
|
+
i0.ɵɵconditional(ctx_r1.isSyncing(conn_r14.ID) ? 17 : -1);
|
|
708
526
|
i0.ɵɵadvance();
|
|
709
|
-
i0.ɵɵconditional(((
|
|
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(
|
|
529
|
+
i0.ɵɵconditional(conn_r14.Description ? 20 : -1);
|
|
712
530
|
i0.ɵɵadvance(6);
|
|
713
|
-
i0.ɵɵtextInterpolate(
|
|
531
|
+
i0.ɵɵtextInterpolate(conn_r14.ServerName);
|
|
714
532
|
i0.ɵɵadvance(5);
|
|
715
|
-
i0.ɵɵtextInterpolate(
|
|
533
|
+
i0.ɵɵtextInterpolate(conn_r14.AutoSyncTools ? "Yes" : "No");
|
|
716
534
|
i0.ɵɵadvance(5);
|
|
717
|
-
i0.ɵɵtextInterpolate(
|
|
535
|
+
i0.ɵɵtextInterpolate(conn_r14.LogToolCalls ? "Enabled" : "Disabled");
|
|
718
536
|
i0.ɵɵadvance(5);
|
|
719
|
-
i0.ɵɵtextInterpolate(
|
|
537
|
+
i0.ɵɵtextInterpolate(ctx_r1.formatDate(conn_r14.LastConnectedAt));
|
|
720
538
|
i0.ɵɵadvance();
|
|
721
|
-
i0.ɵɵconditional(
|
|
539
|
+
i0.ɵɵconditional(conn_r14.LastErrorMessage ? 42 : -1);
|
|
722
540
|
i0.ɵɵadvance();
|
|
723
|
-
i0.ɵɵconditional(
|
|
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
|
|
732
|
-
i0.ɵɵ
|
|
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
|
|
737
|
-
i0.ɵɵ
|
|
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
|
|
741
|
-
i0.ɵɵelementStart(0, "
|
|
742
|
-
i0.ɵɵ
|
|
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
|
|
554
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
746
555
|
i0.ɵɵadvance();
|
|
747
|
-
i0.ɵɵ
|
|
556
|
+
i0.ɵɵconditional(ctx_r1.filteredConnections.length === 0 ? 1 : 2);
|
|
748
557
|
} }
|
|
749
|
-
function
|
|
750
|
-
const
|
|
751
|
-
i0.ɵɵelementStart(0, "div",
|
|
752
|
-
i0.ɵɵelement(1, "i",
|
|
753
|
-
i0.ɵɵelementStart(2, "div",
|
|
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",
|
|
565
|
+
i0.ɵɵelementStart(5, "div", 103);
|
|
757
566
|
i0.ɵɵtext(6);
|
|
758
567
|
i0.ɵɵelementEnd()();
|
|
759
|
-
i0.ɵɵelementStart(7, "button",
|
|
760
|
-
i0.ɵɵlistener("click", function
|
|
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",
|
|
572
|
+
i0.ɵɵelementStart(9, "span", 105);
|
|
764
573
|
i0.ɵɵtext(10);
|
|
765
574
|
i0.ɵɵelementEnd()();
|
|
766
575
|
} if (rf & 2) {
|
|
767
|
-
const
|
|
768
|
-
const
|
|
576
|
+
const tool_r19 = ctx.$implicit;
|
|
577
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
769
578
|
i0.ɵɵadvance(4);
|
|
770
|
-
i0.ɵɵtextInterpolate(
|
|
579
|
+
i0.ɵɵtextInterpolate(tool_r19.ToolTitle || tool_r19.ToolName);
|
|
771
580
|
i0.ɵɵadvance(2);
|
|
772
|
-
i0.ɵɵtextInterpolate2("",
|
|
581
|
+
i0.ɵɵtextInterpolate2("", tool_r19.ServerName, " \u00B7 ", tool_r19.ToolName);
|
|
773
582
|
i0.ɵɵadvance();
|
|
774
|
-
i0.ɵɵstyleProp("color",
|
|
775
|
-
i0.ɵɵproperty("title",
|
|
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(
|
|
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",
|
|
588
|
+
i0.ɵɵproperty("ngClass", ctx_r1.getStatusClass(tool_r19.Status));
|
|
780
589
|
i0.ɵɵadvance();
|
|
781
|
-
i0.ɵɵtextInterpolate(
|
|
590
|
+
i0.ɵɵtextInterpolate(tool_r19.Status);
|
|
782
591
|
} }
|
|
783
|
-
function
|
|
784
|
-
i0.ɵɵelementStart(0, "div",
|
|
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
|
|
789
|
-
const
|
|
790
|
-
i0.ɵɵelementStart(0, "div",
|
|
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",
|
|
802
|
-
i0.ɵɵlistener("scroll", function
|
|
803
|
-
i0.ɵɵrepeaterCreate(9,
|
|
804
|
-
i0.ɵɵconditionalCreate(11,
|
|
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
|
|
616
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
808
617
|
i0.ɵɵadvance(3);
|
|
809
|
-
i0.ɵɵtextInterpolate(
|
|
618
|
+
i0.ɵɵtextInterpolate(ctx_r1.visiblePagedTools.length);
|
|
810
619
|
i0.ɵɵadvance(3);
|
|
811
|
-
i0.ɵɵtextInterpolate(
|
|
620
|
+
i0.ɵɵtextInterpolate(ctx_r1.scaleDenominator());
|
|
812
621
|
i0.ɵɵadvance(3);
|
|
813
|
-
i0.ɵɵrepeater(
|
|
622
|
+
i0.ɵɵrepeater(ctx_r1.visiblePagedTools);
|
|
814
623
|
i0.ɵɵadvance(2);
|
|
815
|
-
i0.ɵɵconditional(
|
|
624
|
+
i0.ɵɵconditional(ctx_r1.toolsLoading ? 11 : -1);
|
|
816
625
|
} }
|
|
817
|
-
function
|
|
818
|
-
i0.ɵɵelementStart(0, "div",
|
|
819
|
-
i0.ɵɵelement(1, "i",
|
|
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",
|
|
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
|
|
828
|
-
i0.ɵɵelementStart(0, "p",
|
|
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
|
|
641
|
+
const tool_r23 = i0.ɵɵnextContext().$implicit;
|
|
833
642
|
i0.ɵɵadvance();
|
|
834
|
-
i0.ɵɵtextInterpolate(
|
|
643
|
+
i0.ɵɵtextInterpolate(tool_r23.ToolDescription);
|
|
835
644
|
} }
|
|
836
|
-
function
|
|
837
|
-
i0.ɵɵelementStart(0, "div",
|
|
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",
|
|
649
|
+
i0.ɵɵelementStart(3, "pre", 133);
|
|
841
650
|
i0.ɵɵtext(4);
|
|
842
651
|
i0.ɵɵelementEnd()();
|
|
843
652
|
} if (rf & 2) {
|
|
844
|
-
const
|
|
845
|
-
const
|
|
653
|
+
const tool_r23 = i0.ɵɵnextContext(2).$implicit;
|
|
654
|
+
const ctx_r1 = i0.ɵɵnextContext(7);
|
|
846
655
|
i0.ɵɵadvance(4);
|
|
847
|
-
i0.ɵɵtextInterpolate(
|
|
656
|
+
i0.ɵɵtextInterpolate(ctx_r1.getFormattedInputSchema(tool_r23));
|
|
848
657
|
} }
|
|
849
|
-
function
|
|
850
|
-
i0.ɵɵelementStart(0, "div",
|
|
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",
|
|
662
|
+
i0.ɵɵelementStart(4, "span", 130);
|
|
854
663
|
i0.ɵɵtext(5);
|
|
855
664
|
i0.ɵɵelementEnd()();
|
|
856
|
-
i0.ɵɵelementStart(6, "div",
|
|
665
|
+
i0.ɵɵelementStart(6, "div", 128)(7, "span", 129);
|
|
857
666
|
i0.ɵɵtext(8, "Parameters:");
|
|
858
667
|
i0.ɵɵelementEnd();
|
|
859
|
-
i0.ɵɵelementStart(9, "span",
|
|
668
|
+
i0.ɵɵelementStart(9, "span", 131);
|
|
860
669
|
i0.ɵɵtext(10);
|
|
861
670
|
i0.ɵɵelementEnd()();
|
|
862
|
-
i0.ɵɵelementStart(11, "div",
|
|
671
|
+
i0.ɵɵelementStart(11, "div", 128)(12, "span", 129);
|
|
863
672
|
i0.ɵɵtext(13, "Discovered:");
|
|
864
673
|
i0.ɵɵelementEnd();
|
|
865
|
-
i0.ɵɵelementStart(14, "span",
|
|
674
|
+
i0.ɵɵelementStart(14, "span", 131);
|
|
866
675
|
i0.ɵɵtext(15);
|
|
867
676
|
i0.ɵɵelementEnd()();
|
|
868
|
-
i0.ɵɵelementStart(16, "div",
|
|
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",
|
|
680
|
+
i0.ɵɵelementStart(19, "span", 131);
|
|
872
681
|
i0.ɵɵtext(20);
|
|
873
682
|
i0.ɵɵelementEnd()();
|
|
874
|
-
i0.ɵɵconditionalCreate(21,
|
|
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
|
|
878
|
-
const
|
|
686
|
+
const tool_r23 = i0.ɵɵnextContext().$implicit;
|
|
687
|
+
const ctx_r1 = i0.ɵɵnextContext(7);
|
|
879
688
|
i0.ɵɵadvance(5);
|
|
880
|
-
i0.ɵɵtextInterpolate(
|
|
689
|
+
i0.ɵɵtextInterpolate(tool_r23.ToolName);
|
|
881
690
|
i0.ɵɵadvance(5);
|
|
882
|
-
i0.ɵɵtextInterpolate2(" ",
|
|
691
|
+
i0.ɵɵtextInterpolate2(" ", ctx_r1.getParamCount(tool_r23), " total, ", ctx_r1.getRequiredParamCount(tool_r23), " required ");
|
|
883
692
|
i0.ɵɵadvance(5);
|
|
884
|
-
i0.ɵɵtextInterpolate(
|
|
693
|
+
i0.ɵɵtextInterpolate(ctx_r1.formatDate(tool_r23.DiscoveredAt));
|
|
885
694
|
i0.ɵɵadvance(5);
|
|
886
|
-
i0.ɵɵtextInterpolate(
|
|
695
|
+
i0.ɵɵtextInterpolate(ctx_r1.formatDate(tool_r23.LastSeenAt));
|
|
887
696
|
i0.ɵɵadvance();
|
|
888
|
-
i0.ɵɵconditional(
|
|
697
|
+
i0.ɵɵconditional(tool_r23.InputSchema ? 21 : -1);
|
|
889
698
|
} }
|
|
890
|
-
function
|
|
891
|
-
const
|
|
892
|
-
i0.ɵɵelementStart(0, "div",
|
|
893
|
-
i0.ɵɵlistener("click", function
|
|
894
|
-
i0.ɵɵelementStart(2, "div",
|
|
895
|
-
i0.ɵɵelement(3, "i",
|
|
896
|
-
i0.ɵɵelementStart(4, "span",
|
|
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",
|
|
900
|
-
i0.ɵɵelement(8, "i",
|
|
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",
|
|
712
|
+
i0.ɵɵelementStart(10, "span", 105);
|
|
904
713
|
i0.ɵɵtext(11);
|
|
905
714
|
i0.ɵɵelementEnd()()();
|
|
906
|
-
i0.ɵɵconditionalCreate(12,
|
|
907
|
-
i0.ɵɵelementStart(13, "div",
|
|
908
|
-
i0.ɵɵlistener("click", function
|
|
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",
|
|
912
|
-
i0.ɵɵlistener("click", function
|
|
913
|
-
i0.ɵɵelement(17, "i",
|
|
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",
|
|
917
|
-
i0.ɵɵlistener("click", function
|
|
918
|
-
i0.ɵɵelement(20, "i",
|
|
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,
|
|
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
|
|
925
|
-
const
|
|
926
|
-
i0.ɵɵclassProp("expanded",
|
|
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(
|
|
737
|
+
i0.ɵɵtextInterpolate(tool_r23.ToolTitle || tool_r23.ToolName);
|
|
929
738
|
i0.ɵɵadvance(4);
|
|
930
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
739
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.getParamCount(tool_r23), " ");
|
|
931
740
|
i0.ɵɵadvance();
|
|
932
|
-
i0.ɵɵproperty("ngClass",
|
|
741
|
+
i0.ɵɵproperty("ngClass", ctx_r1.getStatusClass(tool_r23.Status));
|
|
933
742
|
i0.ɵɵadvance();
|
|
934
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
743
|
+
i0.ɵɵtextInterpolate1(" ", tool_r23.Status, " ");
|
|
935
744
|
i0.ɵɵadvance();
|
|
936
|
-
i0.ɵɵconditional(
|
|
745
|
+
i0.ɵɵconditional(tool_r23.ToolDescription ? 12 : -1);
|
|
937
746
|
i0.ɵɵadvance(2);
|
|
938
|
-
i0.ɵɵstyleProp("color",
|
|
939
|
-
i0.ɵɵproperty("title",
|
|
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(
|
|
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", !
|
|
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(" ",
|
|
754
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.isToolExpanded(tool_r23) ? "Less" : "More", " ");
|
|
946
755
|
i0.ɵɵadvance();
|
|
947
|
-
i0.ɵɵconditional(
|
|
756
|
+
i0.ɵɵconditional(ctx_r1.isToolExpanded(tool_r23) ? 22 : -1);
|
|
948
757
|
} }
|
|
949
|
-
function
|
|
950
|
-
i0.ɵɵelementStart(0, "div",
|
|
951
|
-
i0.ɵɵrepeaterCreate(1,
|
|
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
|
|
763
|
+
const group_r21 = i0.ɵɵnextContext(2).$implicit;
|
|
955
764
|
i0.ɵɵadvance();
|
|
956
|
-
i0.ɵɵrepeater(
|
|
765
|
+
i0.ɵɵrepeater(group_r21.tools);
|
|
957
766
|
} }
|
|
958
|
-
function
|
|
959
|
-
i0.ɵɵelementStart(0, "span",
|
|
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
|
|
772
|
+
const tool_r25 = i0.ɵɵnextContext().$implicit;
|
|
964
773
|
i0.ɵɵadvance();
|
|
965
|
-
i0.ɵɵtextInterpolate(
|
|
774
|
+
i0.ɵɵtextInterpolate(tool_r25.ToolName);
|
|
966
775
|
} }
|
|
967
|
-
function
|
|
968
|
-
i0.ɵɵelementStart(0, "div",
|
|
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",
|
|
780
|
+
i0.ɵɵelementStart(3, "pre", 133);
|
|
972
781
|
i0.ɵɵtext(4);
|
|
973
782
|
i0.ɵɵelementEnd()();
|
|
974
783
|
} if (rf & 2) {
|
|
975
|
-
const
|
|
976
|
-
const
|
|
784
|
+
const tool_r25 = i0.ɵɵnextContext(2).$implicit;
|
|
785
|
+
const ctx_r1 = i0.ɵɵnextContext(7);
|
|
977
786
|
i0.ɵɵadvance(4);
|
|
978
|
-
i0.ɵɵtextInterpolate(
|
|
787
|
+
i0.ɵɵtextInterpolate(ctx_r1.getFormattedInputSchema(tool_r25));
|
|
979
788
|
} }
|
|
980
|
-
function
|
|
981
|
-
i0.ɵɵelementStart(0, "tr",
|
|
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",
|
|
793
|
+
i0.ɵɵelementStart(6, "span", 130);
|
|
985
794
|
i0.ɵɵtext(7);
|
|
986
795
|
i0.ɵɵelementEnd()();
|
|
987
|
-
i0.ɵɵelementStart(8, "div",
|
|
796
|
+
i0.ɵɵelementStart(8, "div", 146)(9, "span", 129);
|
|
988
797
|
i0.ɵɵtext(10, "Discovered:");
|
|
989
798
|
i0.ɵɵelementEnd();
|
|
990
|
-
i0.ɵɵelementStart(11, "span",
|
|
799
|
+
i0.ɵɵelementStart(11, "span", 131);
|
|
991
800
|
i0.ɵɵtext(12);
|
|
992
801
|
i0.ɵɵelementEnd()();
|
|
993
|
-
i0.ɵɵelementStart(13, "div",
|
|
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",
|
|
805
|
+
i0.ɵɵelementStart(16, "span", 131);
|
|
997
806
|
i0.ɵɵtext(17);
|
|
998
807
|
i0.ɵɵelementEnd()();
|
|
999
|
-
i0.ɵɵconditionalCreate(18,
|
|
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
|
|
1003
|
-
const
|
|
811
|
+
const tool_r25 = i0.ɵɵnextContext().$implicit;
|
|
812
|
+
const ctx_r1 = i0.ɵɵnextContext(7);
|
|
1004
813
|
i0.ɵɵadvance(7);
|
|
1005
|
-
i0.ɵɵtextInterpolate(
|
|
814
|
+
i0.ɵɵtextInterpolate(tool_r25.ToolName);
|
|
1006
815
|
i0.ɵɵadvance(5);
|
|
1007
|
-
i0.ɵɵtextInterpolate(
|
|
816
|
+
i0.ɵɵtextInterpolate(ctx_r1.formatDate(tool_r25.DiscoveredAt));
|
|
1008
817
|
i0.ɵɵadvance(5);
|
|
1009
|
-
i0.ɵɵtextInterpolate(
|
|
818
|
+
i0.ɵɵtextInterpolate(ctx_r1.getRequiredParamCount(tool_r25));
|
|
1010
819
|
i0.ɵɵadvance();
|
|
1011
|
-
i0.ɵɵconditional(
|
|
820
|
+
i0.ɵɵconditional(tool_r25.InputSchema ? 18 : -1);
|
|
1012
821
|
} }
|
|
1013
|
-
function
|
|
1014
|
-
const
|
|
1015
|
-
i0.ɵɵelementStart(0, "tr")(1, "td",
|
|
1016
|
-
i0.ɵɵelement(2, "i",
|
|
1017
|
-
i0.ɵɵelementStart(3, "div",
|
|
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,
|
|
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",
|
|
831
|
+
i0.ɵɵelementStart(7, "td", 137);
|
|
1023
832
|
i0.ɵɵtext(8);
|
|
1024
833
|
i0.ɵɵelementEnd();
|
|
1025
|
-
i0.ɵɵelementStart(9, "td")(10, "span",
|
|
834
|
+
i0.ɵɵelementStart(9, "td")(10, "span", 138);
|
|
1026
835
|
i0.ɵɵtext(11);
|
|
1027
836
|
i0.ɵɵelementEnd()();
|
|
1028
|
-
i0.ɵɵelementStart(12, "td")(13, "span",
|
|
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",
|
|
1035
|
-
i0.ɵɵlistener("click", function
|
|
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",
|
|
1039
|
-
i0.ɵɵlistener("click", function
|
|
1040
|
-
i0.ɵɵelement(21, "i",
|
|
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",
|
|
1043
|
-
i0.ɵɵlistener("click", function
|
|
1044
|
-
i0.ɵɵelement(23, "i",
|
|
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,
|
|
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
|
|
1049
|
-
const
|
|
1050
|
-
i0.ɵɵclassProp("expanded",
|
|
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(
|
|
861
|
+
i0.ɵɵtextInterpolate(tool_r25.ToolTitle || tool_r25.ToolName);
|
|
1053
862
|
i0.ɵɵadvance();
|
|
1054
|
-
i0.ɵɵconditional(
|
|
863
|
+
i0.ɵɵconditional(tool_r25.ToolTitle ? 6 : -1);
|
|
1055
864
|
i0.ɵɵadvance(2);
|
|
1056
|
-
i0.ɵɵtextInterpolate(
|
|
865
|
+
i0.ɵɵtextInterpolate(tool_r25.ToolDescription || "-");
|
|
1057
866
|
i0.ɵɵadvance(3);
|
|
1058
|
-
i0.ɵɵtextInterpolate(
|
|
867
|
+
i0.ɵɵtextInterpolate(ctx_r1.getParamCount(tool_r25));
|
|
1059
868
|
i0.ɵɵadvance(2);
|
|
1060
|
-
i0.ɵɵproperty("ngClass",
|
|
869
|
+
i0.ɵɵproperty("ngClass", ctx_r1.getStatusClass(tool_r25.Status));
|
|
1061
870
|
i0.ɵɵadvance();
|
|
1062
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
871
|
+
i0.ɵɵtextInterpolate1(" ", tool_r25.Status, " ");
|
|
1063
872
|
i0.ɵɵadvance(2);
|
|
1064
|
-
i0.ɵɵtextInterpolate(
|
|
873
|
+
i0.ɵɵtextInterpolate(ctx_r1.formatDate(tool_r25.LastSeenAt));
|
|
1065
874
|
i0.ɵɵadvance(2);
|
|
1066
|
-
i0.ɵɵstyleProp("color",
|
|
1067
|
-
i0.ɵɵproperty("title",
|
|
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(
|
|
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", !
|
|
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(
|
|
882
|
+
i0.ɵɵconditional(ctx_r1.isToolExpanded(tool_r25) ? 24 : -1);
|
|
1074
883
|
} }
|
|
1075
|
-
function
|
|
1076
|
-
i0.ɵɵelementStart(0, "div",
|
|
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,
|
|
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
|
|
907
|
+
const group_r21 = i0.ɵɵnextContext(2).$implicit;
|
|
1099
908
|
i0.ɵɵadvance(17);
|
|
1100
|
-
i0.ɵɵrepeater(
|
|
909
|
+
i0.ɵɵrepeater(group_r21.tools);
|
|
1101
910
|
} }
|
|
1102
|
-
function
|
|
1103
|
-
i0.ɵɵconditionalCreate(0,
|
|
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
|
|
1106
|
-
i0.ɵɵconditional(
|
|
914
|
+
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
915
|
+
i0.ɵɵconditional(ctx_r1.ToolsViewMode === "card" ? 0 : 1);
|
|
1107
916
|
} }
|
|
1108
|
-
function
|
|
1109
|
-
const
|
|
1110
|
-
i0.ɵɵelementStart(0, "div",
|
|
1111
|
-
i0.ɵɵlistener("click", function
|
|
1112
|
-
i0.ɵɵelementStart(2, "div",
|
|
1113
|
-
i0.ɵɵelement(3, "i",
|
|
1114
|
-
i0.ɵɵelementStart(5, "span",
|
|
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",
|
|
926
|
+
i0.ɵɵelementStart(7, "span", 113);
|
|
1118
927
|
i0.ɵɵtext(8);
|
|
1119
928
|
i0.ɵɵelementEnd();
|
|
1120
|
-
i0.ɵɵelementStart(9, "span",
|
|
929
|
+
i0.ɵɵelementStart(9, "span", 105);
|
|
1121
930
|
i0.ɵɵtext(10);
|
|
1122
931
|
i0.ɵɵelementEnd()();
|
|
1123
|
-
i0.ɵɵelementStart(11, "div",
|
|
1124
|
-
i0.ɵɵlistener("click", function
|
|
1125
|
-
i0.ɵɵelementStart(12, "button",
|
|
1126
|
-
i0.ɵɵlistener("click", function
|
|
1127
|
-
i0.ɵɵelement(13, "i",
|
|
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,
|
|
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
|
|
1133
|
-
const
|
|
1134
|
-
i0.ɵɵclassProp("collapsed", !
|
|
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",
|
|
945
|
+
i0.ɵɵclassProp("expanded", group_r21.expanded);
|
|
1137
946
|
i0.ɵɵadvance();
|
|
1138
|
-
i0.ɵɵclassMap(
|
|
947
|
+
i0.ɵɵclassMap(ctx_r1.getTransportIcon(group_r21.server.TransportType));
|
|
1139
948
|
i0.ɵɵadvance(2);
|
|
1140
|
-
i0.ɵɵtextInterpolate(
|
|
949
|
+
i0.ɵɵtextInterpolate(group_r21.server.Name);
|
|
1141
950
|
i0.ɵɵadvance(2);
|
|
1142
|
-
i0.ɵɵtextInterpolate1("",
|
|
951
|
+
i0.ɵɵtextInterpolate1("", ctx_r1.getServerToolCount(group_r21.server.ID), " tools");
|
|
1143
952
|
i0.ɵɵadvance();
|
|
1144
|
-
i0.ɵɵproperty("ngClass",
|
|
953
|
+
i0.ɵɵproperty("ngClass", ctx_r1.getStatusClass(group_r21.server.Status));
|
|
1145
954
|
i0.ɵɵadvance();
|
|
1146
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
955
|
+
i0.ɵɵtextInterpolate1(" ", group_r21.server.Status, " ");
|
|
1147
956
|
i0.ɵɵadvance(4);
|
|
1148
|
-
i0.ɵɵconditional(
|
|
957
|
+
i0.ɵɵconditional(group_r21.expanded ? 14 : -1);
|
|
1149
958
|
} }
|
|
1150
|
-
function
|
|
1151
|
-
i0.ɵɵelementStart(0, "div",
|
|
1152
|
-
i0.ɵɵrepeaterCreate(1,
|
|
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
|
|
964
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1156
965
|
i0.ɵɵadvance();
|
|
1157
|
-
i0.ɵɵrepeater(
|
|
966
|
+
i0.ɵɵrepeater(ctx_r1.ServerGroups);
|
|
1158
967
|
} }
|
|
1159
|
-
function
|
|
1160
|
-
|
|
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
|
|
1171
|
-
i0.ɵɵ
|
|
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
|
|
1179
|
-
i0.ɵɵelementStart(0, "div",
|
|
1180
|
-
i0.ɵɵelement(1, "i",
|
|
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",
|
|
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
|
|
1189
|
-
i0.ɵɵelement(0, "i",
|
|
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
|
|
1192
|
-
i0.ɵɵelement(0, "i",
|
|
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
|
|
1195
|
-
i0.ɵɵelement(0, "i",
|
|
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
|
|
1198
|
-
i0.ɵɵelement(0, "i",
|
|
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
|
|
1201
|
-
const
|
|
1202
|
-
i0.ɵɵelementStart(0, "tr",
|
|
1203
|
-
i0.ɵɵlistener("click", function
|
|
1204
|
-
i0.ɵɵelementStart(1, "td")(2, "span",
|
|
1205
|
-
i0.ɵɵconditionalCreate(3,
|
|
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",
|
|
1004
|
+
i0.ɵɵelementStart(8, "td", 112);
|
|
1209
1005
|
i0.ɵɵtext(9);
|
|
1210
1006
|
i0.ɵɵelementEnd();
|
|
1211
|
-
i0.ɵɵelementStart(10, "td",
|
|
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",
|
|
1019
|
+
i0.ɵɵelementStart(18, "td", 157);
|
|
1224
1020
|
i0.ɵɵtext(19);
|
|
1225
1021
|
i0.ɵɵelementEnd();
|
|
1226
|
-
i0.ɵɵelementStart(20, "td",
|
|
1227
|
-
i0.ɵɵelement(21, "i",
|
|
1022
|
+
i0.ɵɵelementStart(20, "td", 158);
|
|
1023
|
+
i0.ɵɵelement(21, "i", 159);
|
|
1228
1024
|
i0.ɵɵelementEnd()();
|
|
1229
1025
|
} if (rf & 2) {
|
|
1230
|
-
let
|
|
1231
|
-
const
|
|
1232
|
-
const
|
|
1233
|
-
i0.ɵɵclassProp("error-row",
|
|
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",
|
|
1031
|
+
i0.ɵɵproperty("ngClass", ctx_r1.getStatusClass(log_r28.Status));
|
|
1236
1032
|
i0.ɵɵadvance();
|
|
1237
|
-
i0.ɵɵconditional((
|
|
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(" ",
|
|
1035
|
+
i0.ɵɵtextInterpolate1(" ", log_r28.Status || "Unknown", " ");
|
|
1240
1036
|
i0.ɵɵadvance(2);
|
|
1241
|
-
i0.ɵɵtextInterpolate(
|
|
1037
|
+
i0.ɵɵtextInterpolate(log_r28.ServerName);
|
|
1242
1038
|
i0.ɵɵadvance(2);
|
|
1243
|
-
i0.ɵɵtextInterpolate(
|
|
1039
|
+
i0.ɵɵtextInterpolate(log_r28.ToolName);
|
|
1244
1040
|
i0.ɵɵadvance(2);
|
|
1245
|
-
i0.ɵɵtextInterpolate(
|
|
1041
|
+
i0.ɵɵtextInterpolate(log_r28.ConnectionName);
|
|
1246
1042
|
i0.ɵɵadvance(2);
|
|
1247
|
-
i0.ɵɵtextInterpolate(
|
|
1043
|
+
i0.ɵɵtextInterpolate(ctx_r1.formatDate(log_r28.StartedAt));
|
|
1248
1044
|
i0.ɵɵadvance(2);
|
|
1249
|
-
i0.ɵɵtextInterpolate(
|
|
1045
|
+
i0.ɵɵtextInterpolate(ctx_r1.formatDuration(log_r28.DurationMs));
|
|
1250
1046
|
i0.ɵɵadvance();
|
|
1251
|
-
i0.ɵɵproperty("title",
|
|
1047
|
+
i0.ɵɵproperty("title", log_r28.ErrorMessage || "");
|
|
1252
1048
|
i0.ɵɵadvance();
|
|
1253
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1049
|
+
i0.ɵɵtextInterpolate1(" ", log_r28.ErrorMessage || "-", " ");
|
|
1254
1050
|
} }
|
|
1255
|
-
function
|
|
1256
|
-
const
|
|
1257
|
-
i0.ɵɵelementStart(0, "table")(1, "thead")(2, "tr")(3, "th",
|
|
1258
|
-
i0.ɵɵlistener("click", function
|
|
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",
|
|
1056
|
+
i0.ɵɵelement(5, "i", 150);
|
|
1261
1057
|
i0.ɵɵelementEnd();
|
|
1262
|
-
i0.ɵɵelementStart(6, "th",
|
|
1263
|
-
i0.ɵɵlistener("click", function
|
|
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",
|
|
1061
|
+
i0.ɵɵelement(8, "i", 150);
|
|
1266
1062
|
i0.ɵɵelementEnd();
|
|
1267
|
-
i0.ɵɵelementStart(9, "th",
|
|
1268
|
-
i0.ɵɵlistener("click", function
|
|
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",
|
|
1066
|
+
i0.ɵɵelement(11, "i", 150);
|
|
1271
1067
|
i0.ɵɵelementEnd();
|
|
1272
|
-
i0.ɵɵelementStart(12, "th",
|
|
1273
|
-
i0.ɵɵlistener("click", function
|
|
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",
|
|
1071
|
+
i0.ɵɵelement(14, "i", 150);
|
|
1276
1072
|
i0.ɵɵelementEnd();
|
|
1277
|
-
i0.ɵɵelementStart(15, "th",
|
|
1278
|
-
i0.ɵɵlistener("click", function
|
|
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",
|
|
1076
|
+
i0.ɵɵelement(17, "i", 150);
|
|
1281
1077
|
i0.ɵɵelementEnd();
|
|
1282
|
-
i0.ɵɵelementStart(18, "th",
|
|
1283
|
-
i0.ɵɵlistener("click", function
|
|
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",
|
|
1081
|
+
i0.ɵɵelement(20, "i", 150);
|
|
1286
1082
|
i0.ɵɵelementEnd();
|
|
1287
|
-
i0.ɵɵelementStart(21, "th",
|
|
1288
|
-
i0.ɵɵlistener("click", function
|
|
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",
|
|
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,
|
|
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
|
|
1094
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1299
1095
|
i0.ɵɵadvance(3);
|
|
1300
|
-
i0.ɵɵproperty("ngClass",
|
|
1096
|
+
i0.ɵɵproperty("ngClass", ctx_r1.getLogSortClass("status"));
|
|
1301
1097
|
i0.ɵɵadvance(2);
|
|
1302
|
-
i0.ɵɵclassProp("fa-sort-up",
|
|
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",
|
|
1100
|
+
i0.ɵɵproperty("ngClass", ctx_r1.getLogSortClass("server"));
|
|
1305
1101
|
i0.ɵɵadvance(2);
|
|
1306
|
-
i0.ɵɵclassProp("fa-sort-up",
|
|
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",
|
|
1104
|
+
i0.ɵɵproperty("ngClass", ctx_r1.getLogSortClass("tool"));
|
|
1309
1105
|
i0.ɵɵadvance(2);
|
|
1310
|
-
i0.ɵɵclassProp("fa-sort-up",
|
|
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",
|
|
1108
|
+
i0.ɵɵproperty("ngClass", ctx_r1.getLogSortClass("connection"));
|
|
1313
1109
|
i0.ɵɵadvance(2);
|
|
1314
|
-
i0.ɵɵclassProp("fa-sort-up",
|
|
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",
|
|
1112
|
+
i0.ɵɵproperty("ngClass", ctx_r1.getLogSortClass("started"));
|
|
1317
1113
|
i0.ɵɵadvance(2);
|
|
1318
|
-
i0.ɵɵclassProp("fa-sort-up",
|
|
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",
|
|
1116
|
+
i0.ɵɵproperty("ngClass", ctx_r1.getLogSortClass("duration"));
|
|
1321
1117
|
i0.ɵɵadvance(2);
|
|
1322
|
-
i0.ɵɵclassProp("fa-sort-up",
|
|
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",
|
|
1120
|
+
i0.ɵɵproperty("ngClass", ctx_r1.getLogSortClass("error"));
|
|
1325
1121
|
i0.ɵɵadvance(2);
|
|
1326
|
-
i0.ɵɵclassProp("fa-sort-up",
|
|
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(
|
|
1124
|
+
i0.ɵɵrepeater(ctx_r1.filteredLogs);
|
|
1329
1125
|
} }
|
|
1330
|
-
function
|
|
1331
|
-
i0.ɵɵelementStart(0, "div",
|
|
1332
|
-
i0.ɵɵconditionalCreate(1,
|
|
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
|
|
1131
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
1336
1132
|
i0.ɵɵadvance();
|
|
1337
|
-
i0.ɵɵconditional(
|
|
1133
|
+
i0.ɵɵconditional(ctx_r1.filteredLogs.length === 0 ? 1 : 2);
|
|
1338
1134
|
} }
|
|
1339
|
-
function
|
|
1340
|
-
i0.ɵɵconditionalCreate(0,
|
|
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
|
|
1343
|
-
const
|
|
1344
|
-
i0.ɵɵconditional((
|
|
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
|
|
1347
|
-
i0.ɵɵelementStart(0, "div",
|
|
1348
|
-
i0.ɵɵelement(1, "i",
|
|
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
|
|
1148
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
1353
1149
|
i0.ɵɵadvance(2);
|
|
1354
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1150
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.ServerFormError, " ");
|
|
1355
1151
|
} }
|
|
1356
|
-
function
|
|
1357
|
-
i0.ɵɵelementStart(0, "option",
|
|
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
|
|
1362
|
-
i0.ɵɵproperty("value",
|
|
1157
|
+
const t_r33 = ctx.$implicit;
|
|
1158
|
+
i0.ɵɵproperty("value", t_r33.value);
|
|
1363
1159
|
i0.ɵɵadvance();
|
|
1364
|
-
i0.ɵɵtextInterpolate(
|
|
1160
|
+
i0.ɵɵtextInterpolate(t_r33.label);
|
|
1365
1161
|
} }
|
|
1366
|
-
function
|
|
1367
|
-
const
|
|
1368
|
-
i0.ɵɵelementStart(0, "div",
|
|
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",
|
|
1166
|
+
i0.ɵɵelementStart(3, "span", 169);
|
|
1371
1167
|
i0.ɵɵtext(4, "*");
|
|
1372
1168
|
i0.ɵɵelementEnd()();
|
|
1373
|
-
i0.ɵɵelementStart(5, "input",
|
|
1374
|
-
i0.ɵɵlistener("input", function
|
|
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
|
|
1173
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
1378
1174
|
i0.ɵɵadvance(5);
|
|
1379
|
-
i0.ɵɵproperty("value",
|
|
1175
|
+
i0.ɵɵproperty("value", ctx_r1.ServerForm.ServerURL);
|
|
1380
1176
|
} }
|
|
1381
|
-
function
|
|
1382
|
-
const
|
|
1383
|
-
i0.ɵɵelementStart(0, "div",
|
|
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",
|
|
1181
|
+
i0.ɵɵelementStart(3, "span", 169);
|
|
1386
1182
|
i0.ɵɵtext(4, "*");
|
|
1387
1183
|
i0.ɵɵelementEnd()();
|
|
1388
|
-
i0.ɵɵelementStart(5, "input",
|
|
1389
|
-
i0.ɵɵlistener("input", function
|
|
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
|
|
1188
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
1393
1189
|
i0.ɵɵadvance(5);
|
|
1394
|
-
i0.ɵɵproperty("value",
|
|
1190
|
+
i0.ɵɵproperty("value", ctx_r1.ServerForm.Command);
|
|
1395
1191
|
} }
|
|
1396
|
-
function
|
|
1397
|
-
i0.ɵɵelementStart(0, "option",
|
|
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
|
|
1402
|
-
i0.ɵɵproperty("value",
|
|
1197
|
+
const a_r39 = ctx.$implicit;
|
|
1198
|
+
i0.ɵɵproperty("value", a_r39.value);
|
|
1403
1199
|
i0.ɵɵadvance();
|
|
1404
|
-
i0.ɵɵtextInterpolate(
|
|
1200
|
+
i0.ɵɵtextInterpolate(a_r39.label);
|
|
1405
1201
|
} }
|
|
1406
|
-
function
|
|
1407
|
-
i0.ɵɵelement(0, "i",
|
|
1202
|
+
function MCPDashboardComponent_Conditional_18_Conditional_50_Template(rf, ctx) { if (rf & 1) {
|
|
1203
|
+
i0.ɵɵelement(0, "i", 154);
|
|
1408
1204
|
} }
|
|
1409
|
-
function
|
|
1410
|
-
const
|
|
1411
|
-
i0.ɵɵelementStart(0, "div",
|
|
1412
|
-
i0.ɵɵlistener("click", function
|
|
1413
|
-
i0.ɵɵelementStart(1, "div",
|
|
1414
|
-
i0.ɵɵlistener("click", function
|
|
1415
|
-
i0.ɵɵelementStart(2, "div",
|
|
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",
|
|
1419
|
-
i0.ɵɵlistener("click", function
|
|
1420
|
-
i0.ɵɵelement(6, "i",
|
|
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",
|
|
1423
|
-
i0.ɵɵconditionalCreate(8,
|
|
1424
|
-
i0.ɵɵelementStart(9, "div",
|
|
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",
|
|
1222
|
+
i0.ɵɵelementStart(12, "span", 169);
|
|
1427
1223
|
i0.ɵɵtext(13, "*");
|
|
1428
1224
|
i0.ɵɵelementEnd()();
|
|
1429
|
-
i0.ɵɵelementStart(14, "input",
|
|
1430
|
-
i0.ɵɵlistener("input", function
|
|
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",
|
|
1228
|
+
i0.ɵɵelementStart(16, "div", 167)(17, "label", 168);
|
|
1433
1229
|
i0.ɵɵtext(18, "Description");
|
|
1434
1230
|
i0.ɵɵelementEnd();
|
|
1435
|
-
i0.ɵɵelementStart(19, "textarea",
|
|
1436
|
-
i0.ɵɵlistener("input", function
|
|
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",
|
|
1234
|
+
i0.ɵɵelementStart(21, "div", 167)(22, "label", 168);
|
|
1439
1235
|
i0.ɵɵtext(23, "Transport Type ");
|
|
1440
|
-
i0.ɵɵelementStart(24, "span",
|
|
1236
|
+
i0.ɵɵelementStart(24, "span", 169);
|
|
1441
1237
|
i0.ɵɵtext(25, "*");
|
|
1442
1238
|
i0.ɵɵelementEnd()();
|
|
1443
|
-
i0.ɵɵelementStart(26, "select",
|
|
1444
|
-
i0.ɵɵlistener("change", function
|
|
1445
|
-
i0.ɵɵrepeaterCreate(28,
|
|
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,
|
|
1448
|
-
i0.ɵɵconditionalCreate(31,
|
|
1449
|
-
i0.ɵɵelementStart(32, "div",
|
|
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",
|
|
1453
|
-
i0.ɵɵlistener("change", function
|
|
1454
|
-
i0.ɵɵrepeaterCreate(37,
|
|
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",
|
|
1252
|
+
i0.ɵɵelementStart(39, "div", 167)(40, "label", 168);
|
|
1457
1253
|
i0.ɵɵtext(41, "Status");
|
|
1458
1254
|
i0.ɵɵelementEnd();
|
|
1459
|
-
i0.ɵɵelementStart(42, "select",
|
|
1460
|
-
i0.ɵɵlistener("change", function
|
|
1461
|
-
i0.ɵɵelementStart(44, "option",
|
|
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",
|
|
1260
|
+
i0.ɵɵelementStart(46, "option", 175);
|
|
1465
1261
|
i0.ɵɵtext(47, "Inactive");
|
|
1466
1262
|
i0.ɵɵelementEnd()()()();
|
|
1467
|
-
i0.ɵɵelementStart(48, "div",
|
|
1468
|
-
i0.ɵɵlistener("click", function
|
|
1469
|
-
i0.ɵɵconditionalCreate(50,
|
|
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",
|
|
1473
|
-
i0.ɵɵlistener("click", function
|
|
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
|
|
1273
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
1478
1274
|
i0.ɵɵadvance(4);
|
|
1479
|
-
i0.ɵɵtextInterpolate(
|
|
1275
|
+
i0.ɵɵtextInterpolate(ctx_r1.EditingServer ? "Edit MCP Server" : "Add MCP Server");
|
|
1480
1276
|
i0.ɵɵadvance(4);
|
|
1481
|
-
i0.ɵɵconditional(
|
|
1277
|
+
i0.ɵɵconditional(ctx_r1.ServerFormError ? 8 : -1);
|
|
1482
1278
|
i0.ɵɵadvance(6);
|
|
1483
|
-
i0.ɵɵproperty("value",
|
|
1279
|
+
i0.ɵɵproperty("value", ctx_r1.ServerForm.Name);
|
|
1484
1280
|
i0.ɵɵadvance(5);
|
|
1485
|
-
i0.ɵɵproperty("value",
|
|
1281
|
+
i0.ɵɵproperty("value", ctx_r1.ServerForm.Description);
|
|
1486
1282
|
i0.ɵɵadvance(7);
|
|
1487
|
-
i0.ɵɵproperty("value",
|
|
1283
|
+
i0.ɵɵproperty("value", ctx_r1.ServerForm.TransportType);
|
|
1488
1284
|
i0.ɵɵadvance(2);
|
|
1489
|
-
i0.ɵɵrepeater(
|
|
1285
|
+
i0.ɵɵrepeater(ctx_r1.TransportTypes);
|
|
1490
1286
|
i0.ɵɵadvance(2);
|
|
1491
|
-
i0.ɵɵconditional(
|
|
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(
|
|
1289
|
+
i0.ɵɵconditional(ctx_r1.ServerForm.TransportType === "Stdio" ? 31 : -1);
|
|
1494
1290
|
i0.ɵɵadvance(4);
|
|
1495
|
-
i0.ɵɵproperty("value",
|
|
1291
|
+
i0.ɵɵproperty("value", ctx_r1.ServerForm.DefaultAuthType);
|
|
1496
1292
|
i0.ɵɵadvance(2);
|
|
1497
|
-
i0.ɵɵrepeater(
|
|
1293
|
+
i0.ɵɵrepeater(ctx_r1.AuthTypes);
|
|
1498
1294
|
i0.ɵɵadvance(5);
|
|
1499
|
-
i0.ɵɵproperty("value",
|
|
1295
|
+
i0.ɵɵproperty("value", ctx_r1.ServerForm.Status);
|
|
1500
1296
|
i0.ɵɵadvance(7);
|
|
1501
|
-
i0.ɵɵproperty("disabled",
|
|
1297
|
+
i0.ɵɵproperty("disabled", ctx_r1.ServerFormSaving);
|
|
1502
1298
|
i0.ɵɵadvance();
|
|
1503
|
-
i0.ɵɵconditional(
|
|
1299
|
+
i0.ɵɵconditional(ctx_r1.ServerFormSaving ? 50 : -1);
|
|
1504
1300
|
i0.ɵɵadvance();
|
|
1505
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1301
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.EditingServer ? "Update" : "Create", " ");
|
|
1506
1302
|
} }
|
|
1507
|
-
function
|
|
1508
|
-
i0.ɵɵelementStart(0, "div",
|
|
1509
|
-
i0.ɵɵelement(1, "i",
|
|
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
|
|
1309
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
1514
1310
|
i0.ɵɵadvance(2);
|
|
1515
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1311
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.ConnectionFormError, " ");
|
|
1516
1312
|
} }
|
|
1517
|
-
function
|
|
1518
|
-
i0.ɵɵelementStart(0, "option",
|
|
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
|
|
1523
|
-
i0.ɵɵproperty("value",
|
|
1318
|
+
const s_r43 = ctx.$implicit;
|
|
1319
|
+
i0.ɵɵproperty("value", s_r43.ID);
|
|
1524
1320
|
i0.ɵɵadvance();
|
|
1525
|
-
i0.ɵɵtextInterpolate(
|
|
1321
|
+
i0.ɵɵtextInterpolate(s_r43.Name);
|
|
1526
1322
|
} }
|
|
1527
|
-
function
|
|
1528
|
-
i0.ɵɵelement(0, "i",
|
|
1323
|
+
function MCPDashboardComponent_Conditional_19_Conditional_45_Template(rf, ctx) { if (rf & 1) {
|
|
1324
|
+
i0.ɵɵelement(0, "i", 154);
|
|
1529
1325
|
} }
|
|
1530
|
-
function
|
|
1531
|
-
const
|
|
1532
|
-
i0.ɵɵelementStart(0, "div",
|
|
1533
|
-
i0.ɵɵlistener("click", function
|
|
1534
|
-
i0.ɵɵelementStart(1, "div",
|
|
1535
|
-
i0.ɵɵlistener("click", function
|
|
1536
|
-
i0.ɵɵelementStart(2, "div",
|
|
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",
|
|
1540
|
-
i0.ɵɵlistener("click", function
|
|
1541
|
-
i0.ɵɵelement(6, "i",
|
|
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",
|
|
1544
|
-
i0.ɵɵconditionalCreate(8,
|
|
1545
|
-
i0.ɵɵelementStart(9, "div",
|
|
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",
|
|
1343
|
+
i0.ɵɵelementStart(12, "span", 169);
|
|
1548
1344
|
i0.ɵɵtext(13, "*");
|
|
1549
1345
|
i0.ɵɵelementEnd()();
|
|
1550
|
-
i0.ɵɵelementStart(14, "select",
|
|
1551
|
-
i0.ɵɵlistener("change", function
|
|
1552
|
-
i0.ɵɵelementStart(16, "option",
|
|
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,
|
|
1351
|
+
i0.ɵɵrepeaterCreate(18, MCPDashboardComponent_Conditional_19_For_19_Template, 2, 2, "option", 173, _forTrack0);
|
|
1556
1352
|
i0.ɵɵelementEnd()();
|
|
1557
|
-
i0.ɵɵelementStart(20, "div",
|
|
1353
|
+
i0.ɵɵelementStart(20, "div", 167)(21, "label", 168);
|
|
1558
1354
|
i0.ɵɵtext(22, "Name ");
|
|
1559
|
-
i0.ɵɵelementStart(23, "span",
|
|
1355
|
+
i0.ɵɵelementStart(23, "span", 169);
|
|
1560
1356
|
i0.ɵɵtext(24, "*");
|
|
1561
1357
|
i0.ɵɵelementEnd()();
|
|
1562
|
-
i0.ɵɵelementStart(25, "input",
|
|
1563
|
-
i0.ɵɵlistener("input", function
|
|
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",
|
|
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",
|
|
1569
|
-
i0.ɵɵlistener("input", function
|
|
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",
|
|
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",
|
|
1370
|
+
i0.ɵɵelementStart(34, "div", 167)(35, "label", 168);
|
|
1575
1371
|
i0.ɵɵtext(36, "Status");
|
|
1576
1372
|
i0.ɵɵelementEnd();
|
|
1577
|
-
i0.ɵɵelementStart(37, "select",
|
|
1578
|
-
i0.ɵɵlistener("change", function
|
|
1579
|
-
i0.ɵɵelementStart(39, "option",
|
|
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",
|
|
1378
|
+
i0.ɵɵelementStart(41, "option", 175);
|
|
1583
1379
|
i0.ɵɵtext(42, "Inactive");
|
|
1584
1380
|
i0.ɵɵelementEnd()()()();
|
|
1585
|
-
i0.ɵɵelementStart(43, "div",
|
|
1586
|
-
i0.ɵɵlistener("click", function
|
|
1587
|
-
i0.ɵɵconditionalCreate(45,
|
|
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",
|
|
1591
|
-
i0.ɵɵlistener("click", function
|
|
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
|
|
1391
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
1596
1392
|
i0.ɵɵadvance(8);
|
|
1597
|
-
i0.ɵɵconditional(
|
|
1393
|
+
i0.ɵɵconditional(ctx_r1.ConnectionFormError ? 8 : -1);
|
|
1598
1394
|
i0.ɵɵadvance(6);
|
|
1599
|
-
i0.ɵɵproperty("value",
|
|
1395
|
+
i0.ɵɵproperty("value", ctx_r1.ConnectionForm.MCPServerID);
|
|
1600
1396
|
i0.ɵɵadvance(4);
|
|
1601
|
-
i0.ɵɵrepeater(
|
|
1397
|
+
i0.ɵɵrepeater(ctx_r1.servers);
|
|
1602
1398
|
i0.ɵɵadvance(7);
|
|
1603
|
-
i0.ɵɵproperty("value",
|
|
1399
|
+
i0.ɵɵproperty("value", ctx_r1.ConnectionForm.Name);
|
|
1604
1400
|
i0.ɵɵadvance(5);
|
|
1605
|
-
i0.ɵɵproperty("value",
|
|
1401
|
+
i0.ɵɵproperty("value", ctx_r1.ConnectionForm.BearerToken);
|
|
1606
1402
|
i0.ɵɵadvance(7);
|
|
1607
|
-
i0.ɵɵproperty("value",
|
|
1403
|
+
i0.ɵɵproperty("value", ctx_r1.ConnectionForm.Status);
|
|
1608
1404
|
i0.ɵɵadvance(7);
|
|
1609
|
-
i0.ɵɵproperty("disabled",
|
|
1405
|
+
i0.ɵɵproperty("disabled", ctx_r1.ConnectionFormSaving);
|
|
1610
1406
|
i0.ɵɵadvance();
|
|
1611
|
-
i0.ɵɵconditional(
|
|
1407
|
+
i0.ɵɵconditional(ctx_r1.ConnectionFormSaving ? 45 : -1);
|
|
1612
1408
|
} }
|
|
1613
|
-
function
|
|
1614
|
-
i0.ɵɵelementStart(0, "span",
|
|
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
|
|
1414
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
1619
1415
|
i0.ɵɵadvance();
|
|
1620
|
-
i0.ɵɵtextInterpolate1("\u2014 ", (
|
|
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
|
|
1623
|
-
i0.ɵɵelementStart(0, "option",
|
|
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
|
|
1628
|
-
const
|
|
1629
|
-
i0.ɵɵproperty("value",
|
|
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(
|
|
1427
|
+
i0.ɵɵtextInterpolate(s_r50.Name);
|
|
1632
1428
|
} }
|
|
1633
|
-
function
|
|
1634
|
-
i0.ɵɵelementStart(0, "option",
|
|
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
|
|
1639
|
-
const
|
|
1640
|
-
i0.ɵɵproperty("value",
|
|
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(
|
|
1438
|
+
i0.ɵɵtextInterpolate(c_r52.Name);
|
|
1643
1439
|
} }
|
|
1644
|
-
function
|
|
1645
|
-
i0.ɵɵelementStart(0, "div",
|
|
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
|
|
1650
|
-
i0.ɵɵelementStart(0, "span",
|
|
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
|
|
1655
|
-
i0.ɵɵelementStart(0, "div",
|
|
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
|
|
1455
|
+
const t_r55 = i0.ɵɵnextContext().$implicit;
|
|
1660
1456
|
i0.ɵɵadvance();
|
|
1661
|
-
i0.ɵɵtextInterpolate(
|
|
1457
|
+
i0.ɵɵtextInterpolate(t_r55.ToolName);
|
|
1662
1458
|
} }
|
|
1663
|
-
function
|
|
1664
|
-
i0.ɵɵelement(0, "i",
|
|
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
|
|
1667
|
-
const
|
|
1668
|
-
i0.ɵɵelementStart(0, "div",
|
|
1669
|
-
i0.ɵɵlistener("click", function
|
|
1670
|
-
i0.ɵɵconditionalCreate(1,
|
|
1671
|
-
i0.ɵɵelementStart(2, "div",
|
|
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,
|
|
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,
|
|
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
|
|
1680
|
-
const
|
|
1681
|
-
i0.ɵɵstyleProp("background",
|
|
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(
|
|
1479
|
+
i0.ɵɵconditional(ctx_r1.isRecentTestTool(t_r55.ID) ? 1 : -1);
|
|
1684
1480
|
i0.ɵɵadvance(3);
|
|
1685
|
-
i0.ɵɵtextInterpolate(
|
|
1481
|
+
i0.ɵɵtextInterpolate(t_r55.ToolTitle || t_r55.ToolName);
|
|
1686
1482
|
i0.ɵɵadvance();
|
|
1687
|
-
i0.ɵɵconditional(
|
|
1483
|
+
i0.ɵɵconditional(t_r55.ToolTitle && t_r55.ToolName !== t_r55.ToolTitle ? 5 : -1);
|
|
1688
1484
|
i0.ɵɵadvance();
|
|
1689
|
-
i0.ɵɵconditional(
|
|
1485
|
+
i0.ɵɵconditional(ctx_r1.TestToolID === t_r55.ID ? 6 : -1);
|
|
1690
1486
|
} }
|
|
1691
|
-
function
|
|
1692
|
-
const
|
|
1693
|
-
i0.ɵɵelementStart(0, "div",
|
|
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",
|
|
1491
|
+
i0.ɵɵelementStart(3, "span", 169);
|
|
1696
1492
|
i0.ɵɵtext(4, "*");
|
|
1697
1493
|
i0.ɵɵelementEnd()();
|
|
1698
|
-
i0.ɵɵelementStart(5, "select",
|
|
1699
|
-
i0.ɵɵlistener("change", function
|
|
1700
|
-
i0.ɵɵelementStart(7, "option",
|
|
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,
|
|
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",
|
|
1501
|
+
i0.ɵɵelementStart(11, "div", 167)(12, "label", 168);
|
|
1706
1502
|
i0.ɵɵtext(13, "Connection ");
|
|
1707
|
-
i0.ɵɵelementStart(14, "span",
|
|
1503
|
+
i0.ɵɵelementStart(14, "span", 169);
|
|
1708
1504
|
i0.ɵɵtext(15, "*");
|
|
1709
1505
|
i0.ɵɵelementEnd()();
|
|
1710
|
-
i0.ɵɵelementStart(16, "select",
|
|
1711
|
-
i0.ɵɵlistener("change", function
|
|
1712
|
-
i0.ɵɵelementStart(18, "option",
|
|
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,
|
|
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",
|
|
1513
|
+
i0.ɵɵelementStart(22, "div", 167)(23, "label", 168);
|
|
1718
1514
|
i0.ɵɵtext(24, "Tool ");
|
|
1719
|
-
i0.ɵɵelementStart(25, "span",
|
|
1515
|
+
i0.ɵɵelementStart(25, "span", 169);
|
|
1720
1516
|
i0.ɵɵtext(26, "*");
|
|
1721
1517
|
i0.ɵɵelementEnd()();
|
|
1722
|
-
i0.ɵɵelementStart(27, "input",
|
|
1723
|
-
i0.ɵɵlistener("input", function
|
|
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",
|
|
1726
|
-
i0.ɵɵconditionalCreate(30,
|
|
1727
|
-
i0.ɵɵrepeaterCreate(31,
|
|
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
|
|
1526
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
1731
1527
|
i0.ɵɵadvance(9);
|
|
1732
|
-
i0.ɵɵrepeater(
|
|
1528
|
+
i0.ɵɵrepeater(ctx_r1.servers);
|
|
1733
1529
|
i0.ɵɵadvance(7);
|
|
1734
|
-
i0.ɵɵattribute("disabled", !
|
|
1530
|
+
i0.ɵɵattribute("disabled", !ctx_r1.TestToolServerID ? true : null);
|
|
1735
1531
|
i0.ɵɵadvance(4);
|
|
1736
|
-
i0.ɵɵrepeater(
|
|
1532
|
+
i0.ɵɵrepeater(ctx_r1.TestFilteredConnections);
|
|
1737
1533
|
i0.ɵɵadvance(7);
|
|
1738
|
-
i0.ɵɵproperty("value",
|
|
1739
|
-
i0.ɵɵattribute("disabled", !
|
|
1534
|
+
i0.ɵɵproperty("value", ctx_r1.TestToolSearch);
|
|
1535
|
+
i0.ɵɵattribute("disabled", !ctx_r1.TestToolServerID ? true : null);
|
|
1740
1536
|
i0.ɵɵadvance(3);
|
|
1741
|
-
i0.ɵɵconditional(
|
|
1537
|
+
i0.ɵɵconditional(ctx_r1.TestComboboxTools.length === 0 ? 30 : -1);
|
|
1742
1538
|
i0.ɵɵadvance();
|
|
1743
|
-
i0.ɵɵrepeater(
|
|
1539
|
+
i0.ɵɵrepeater(ctx_r1.TestComboboxTools);
|
|
1744
1540
|
} }
|
|
1745
|
-
function
|
|
1746
|
-
i0.ɵɵelementStart(0, "div",
|
|
1747
|
-
i0.ɵɵelement(1, "i",
|
|
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
|
|
1753
|
-
i0.ɵɵelementStart(0, "span",
|
|
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
|
|
1758
|
-
i0.ɵɵelementStart(0, "p",
|
|
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
|
|
1558
|
+
const p_r56 = i0.ɵɵnextContext().$implicit;
|
|
1763
1559
|
i0.ɵɵadvance();
|
|
1764
|
-
i0.ɵɵtextInterpolate(
|
|
1560
|
+
i0.ɵɵtextInterpolate(p_r56.description);
|
|
1765
1561
|
} }
|
|
1766
|
-
function
|
|
1767
|
-
i0.ɵɵelementStart(0, "option",
|
|
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
|
|
1772
|
-
i0.ɵɵproperty("value",
|
|
1567
|
+
const v_r59 = ctx.$implicit;
|
|
1568
|
+
i0.ɵɵproperty("value", v_r59);
|
|
1773
1569
|
i0.ɵɵadvance();
|
|
1774
|
-
i0.ɵɵtextInterpolate(
|
|
1570
|
+
i0.ɵɵtextInterpolate(v_r59);
|
|
1775
1571
|
} }
|
|
1776
|
-
function
|
|
1777
|
-
const
|
|
1778
|
-
i0.ɵɵelementStart(0, "select",
|
|
1779
|
-
i0.ɵɵlistener("change", function
|
|
1780
|
-
i0.ɵɵelementStart(2, "option",
|
|
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,
|
|
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
|
|
1582
|
+
const p_r56 = i0.ɵɵnextContext().$implicit;
|
|
1787
1583
|
i0.ɵɵadvance(4);
|
|
1788
|
-
i0.ɵɵrepeater(
|
|
1584
|
+
i0.ɵɵrepeater(p_r56.enumValues);
|
|
1789
1585
|
} }
|
|
1790
|
-
function
|
|
1791
|
-
const
|
|
1792
|
-
i0.ɵɵelementStart(0, "select",
|
|
1793
|
-
i0.ɵɵlistener("change", function
|
|
1794
|
-
i0.ɵɵelementStart(2, "option",
|
|
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",
|
|
1593
|
+
i0.ɵɵelementStart(4, "option", 208);
|
|
1798
1594
|
i0.ɵɵtext(5, "true");
|
|
1799
1595
|
i0.ɵɵelementEnd()();
|
|
1800
1596
|
} }
|
|
1801
|
-
function
|
|
1802
|
-
const
|
|
1803
|
-
i0.ɵɵelementStart(0, "textarea",
|
|
1804
|
-
i0.ɵɵlistener("input", function
|
|
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
|
|
1808
|
-
i0.ɵɵproperty("placeholder", "Enter JSON " +
|
|
1603
|
+
const p_r56 = i0.ɵɵnextContext().$implicit;
|
|
1604
|
+
i0.ɵɵproperty("placeholder", "Enter JSON " + p_r56.type + "...");
|
|
1809
1605
|
} }
|
|
1810
|
-
function
|
|
1811
|
-
const
|
|
1812
|
-
i0.ɵɵelementStart(0, "input",
|
|
1813
|
-
i0.ɵɵlistener("input", function
|
|
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
|
|
1817
|
-
i0.ɵɵproperty("placeholder",
|
|
1612
|
+
const p_r56 = i0.ɵɵnextContext().$implicit;
|
|
1613
|
+
i0.ɵɵproperty("placeholder", p_r56.description || "Enter value...");
|
|
1818
1614
|
} }
|
|
1819
|
-
function
|
|
1820
|
-
i0.ɵɵelementStart(0, "div",
|
|
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,
|
|
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,
|
|
1825
|
-
i0.ɵɵconditionalCreate(5,
|
|
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
|
|
1624
|
+
const p_r56 = ctx.$implicit;
|
|
1829
1625
|
i0.ɵɵadvance(2);
|
|
1830
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1626
|
+
i0.ɵɵtextInterpolate1(" ", p_r56.name, " ");
|
|
1831
1627
|
i0.ɵɵadvance();
|
|
1832
|
-
i0.ɵɵconditional(
|
|
1628
|
+
i0.ɵɵconditional(p_r56.required ? 3 : -1);
|
|
1833
1629
|
i0.ɵɵadvance();
|
|
1834
|
-
i0.ɵɵconditional(
|
|
1630
|
+
i0.ɵɵconditional(p_r56.description ? 4 : -1);
|
|
1835
1631
|
i0.ɵɵadvance();
|
|
1836
|
-
i0.ɵɵconditional(
|
|
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
|
|
1839
|
-
i0.ɵɵrepeaterCreate(0,
|
|
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
|
|
1842
|
-
i0.ɵɵrepeater(
|
|
1637
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1638
|
+
i0.ɵɵrepeater(ctx_r1.TestParamConfigs);
|
|
1843
1639
|
} }
|
|
1844
|
-
function
|
|
1845
|
-
i0.ɵɵconditionalCreate(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
|
|
1848
|
-
i0.ɵɵconditional(
|
|
1643
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
1644
|
+
i0.ɵɵconditional(ctx_r1.TestParamConfigs.length === 0 ? 0 : 1);
|
|
1849
1645
|
} }
|
|
1850
|
-
function
|
|
1851
|
-
i0.ɵɵelementStart(0, "span",
|
|
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
|
|
1651
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1856
1652
|
i0.ɵɵadvance();
|
|
1857
|
-
i0.ɵɵtextInterpolate1("",
|
|
1653
|
+
i0.ɵɵtextInterpolate1("", ctx_r1.TestExecutionResult == null ? null : ctx_r1.TestExecutionResult.DurationMs, "ms");
|
|
1858
1654
|
} }
|
|
1859
|
-
function
|
|
1860
|
-
i0.ɵɵelementStart(0, "div",
|
|
1861
|
-
i0.ɵɵelement(1, "i",
|
|
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,
|
|
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
|
|
1662
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1867
1663
|
i0.ɵɵadvance(3);
|
|
1868
|
-
i0.ɵɵconditional((
|
|
1664
|
+
i0.ɵɵconditional((ctx_r1.TestExecutionResult == null ? null : ctx_r1.TestExecutionResult.DurationMs) ? 3 : -1);
|
|
1869
1665
|
} }
|
|
1870
|
-
function
|
|
1871
|
-
i0.ɵɵelementStart(0, "div",
|
|
1872
|
-
i0.ɵɵelement(1, "i",
|
|
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
|
|
1877
|
-
i0.ɵɵelementStart(0, "div",
|
|
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",
|
|
1676
|
+
i0.ɵɵelementStart(3, "pre", 215);
|
|
1881
1677
|
i0.ɵɵtext(4);
|
|
1882
1678
|
i0.ɵɵelementEnd()();
|
|
1883
1679
|
} if (rf & 2) {
|
|
1884
|
-
const
|
|
1680
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1885
1681
|
i0.ɵɵadvance(4);
|
|
1886
|
-
i0.ɵɵtextInterpolate(
|
|
1682
|
+
i0.ɵɵtextInterpolate(ctx_r1.TestExecutionResult == null ? null : ctx_r1.TestExecutionResult.ErrorMessage);
|
|
1887
1683
|
} }
|
|
1888
|
-
function
|
|
1889
|
-
i0.ɵɵelementStart(0, "div")(1, "label",
|
|
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",
|
|
1688
|
+
i0.ɵɵelementStart(3, "pre", 216);
|
|
1893
1689
|
i0.ɵɵtext(4);
|
|
1894
1690
|
i0.ɵɵelementEnd()();
|
|
1895
1691
|
} if (rf & 2) {
|
|
1896
|
-
const
|
|
1692
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1897
1693
|
i0.ɵɵadvance(4);
|
|
1898
|
-
i0.ɵɵtextInterpolate(
|
|
1694
|
+
i0.ɵɵtextInterpolate(ctx_r1.formatTestResult(ctx_r1.TestExecutionResult == null ? null : ctx_r1.TestExecutionResult.Result));
|
|
1899
1695
|
} }
|
|
1900
|
-
function
|
|
1901
|
-
i0.ɵɵconditionalCreate(0,
|
|
1902
|
-
i0.ɵɵconditionalCreate(2,
|
|
1903
|
-
i0.ɵɵconditionalCreate(3,
|
|
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
|
|
1906
|
-
i0.ɵɵconditional((
|
|
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((
|
|
1704
|
+
i0.ɵɵconditional((ctx_r1.TestExecutionResult == null ? null : ctx_r1.TestExecutionResult.ErrorMessage) ? 2 : -1);
|
|
1909
1705
|
i0.ɵɵadvance();
|
|
1910
|
-
i0.ɵɵconditional((
|
|
1706
|
+
i0.ɵɵconditional((ctx_r1.TestExecutionResult == null ? null : ctx_r1.TestExecutionResult.Result) ? 3 : -1);
|
|
1911
1707
|
} }
|
|
1912
|
-
function
|
|
1913
|
-
const
|
|
1914
|
-
i0.ɵɵelementStart(0, "button",
|
|
1915
|
-
i0.ɵɵlistener("click", function
|
|
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",
|
|
1713
|
+
i0.ɵɵelement(2, "i", 217);
|
|
1918
1714
|
i0.ɵɵelementEnd();
|
|
1919
|
-
i0.ɵɵelementStart(3, "button",
|
|
1920
|
-
i0.ɵɵlistener("click", function
|
|
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
|
|
1925
|
-
i0.ɵɵproperty("disabled", !
|
|
1720
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
1721
|
+
i0.ɵɵproperty("disabled", !ctx_r1.TestCanProceed);
|
|
1926
1722
|
} }
|
|
1927
|
-
function
|
|
1928
|
-
i0.ɵɵelement(0, "i",
|
|
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
|
|
1932
|
-
i0.ɵɵelement(0, "i",
|
|
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
|
|
1936
|
-
const
|
|
1937
|
-
i0.ɵɵelementStart(0, "button",
|
|
1938
|
-
i0.ɵɵlistener("click", function
|
|
1939
|
-
i0.ɵɵconditionalCreate(1,
|
|
1940
|
-
i0.ɵɵelementEnd();
|
|
1941
|
-
i0.ɵɵelementStart(3, "button",
|
|
1942
|
-
i0.ɵɵlistener("click", function
|
|
1943
|
-
i0.ɵɵelement(4, "i",
|
|
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
|
|
1948
|
-
i0.ɵɵproperty("disabled", !
|
|
1743
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
1744
|
+
i0.ɵɵproperty("disabled", !ctx_r1.TestIsValid || ctx_r1.TestIsExecuting);
|
|
1949
1745
|
i0.ɵɵadvance();
|
|
1950
|
-
i0.ɵɵconditional(
|
|
1746
|
+
i0.ɵɵconditional(ctx_r1.TestIsExecuting ? 1 : 2);
|
|
1951
1747
|
} }
|
|
1952
|
-
function
|
|
1953
|
-
const
|
|
1954
|
-
i0.ɵɵelementStart(0, "button",
|
|
1955
|
-
i0.ɵɵlistener("click", function
|
|
1956
|
-
i0.ɵɵelement(1, "i",
|
|
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",
|
|
1960
|
-
i0.ɵɵlistener("click", function
|
|
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",
|
|
1964
|
-
i0.ɵɵlistener("click", function
|
|
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
|
|
1969
|
-
const
|
|
1970
|
-
i0.ɵɵelementStart(0, "div",
|
|
1971
|
-
i0.ɵɵlistener("click", function
|
|
1972
|
-
i0.ɵɵelementStart(1, "div",
|
|
1973
|
-
i0.ɵɵlistener("click", function
|
|
1974
|
-
i0.ɵɵelementStart(2, "div",
|
|
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,
|
|
1772
|
+
i0.ɵɵconditionalCreate(5, MCPDashboardComponent_Conditional_20_Conditional_5_Template, 2, 1, "span", 187);
|
|
1977
1773
|
i0.ɵɵelementEnd();
|
|
1978
|
-
i0.ɵɵelementStart(6, "button",
|
|
1979
|
-
i0.ɵɵlistener("click", function
|
|
1980
|
-
i0.ɵɵelement(7, "i",
|
|
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",
|
|
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",
|
|
1781
|
+
i0.ɵɵelementStart(11, "span", 190);
|
|
1986
1782
|
i0.ɵɵtext(12, "\u203A");
|
|
1987
1783
|
i0.ɵɵelementEnd();
|
|
1988
|
-
i0.ɵɵelementStart(13, "span",
|
|
1784
|
+
i0.ɵɵelementStart(13, "span", 189);
|
|
1989
1785
|
i0.ɵɵtext(14, "2. Configure");
|
|
1990
1786
|
i0.ɵɵelementEnd();
|
|
1991
|
-
i0.ɵɵelementStart(15, "span",
|
|
1787
|
+
i0.ɵɵelementStart(15, "span", 190);
|
|
1992
1788
|
i0.ɵɵtext(16, "\u203A");
|
|
1993
1789
|
i0.ɵɵelementEnd();
|
|
1994
|
-
i0.ɵɵelementStart(17, "span",
|
|
1790
|
+
i0.ɵɵelementStart(17, "span", 189);
|
|
1995
1791
|
i0.ɵɵtext(18, "3. Results");
|
|
1996
1792
|
i0.ɵɵelementEnd()();
|
|
1997
|
-
i0.ɵɵelementStart(19, "div",
|
|
1998
|
-
i0.ɵɵconditionalCreate(20,
|
|
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",
|
|
2001
|
-
i0.ɵɵconditionalCreate(24,
|
|
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
|
|
1800
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
2005
1801
|
i0.ɵɵadvance(5);
|
|
2006
|
-
i0.ɵɵconditional(
|
|
1802
|
+
i0.ɵɵconditional(ctx_r1.TestStep !== "select" ? 5 : -1);
|
|
2007
1803
|
i0.ɵɵadvance(4);
|
|
2008
|
-
i0.ɵɵstyleProp("color",
|
|
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",
|
|
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",
|
|
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(
|
|
1810
|
+
i0.ɵɵconditional(ctx_r1.TestStep === "select" ? 20 : ctx_r1.TestStep === "configure" ? 21 : 22);
|
|
2015
1811
|
i0.ɵɵadvance(4);
|
|
2016
|
-
i0.ɵɵconditional(
|
|
1812
|
+
i0.ɵɵconditional(ctx_r1.TestStep === "select" ? 24 : ctx_r1.TestStep === "configure" ? 25 : 26);
|
|
2017
1813
|
} }
|
|
2018
|
-
function
|
|
2019
|
-
i0.ɵɵelementStart(0, "span",
|
|
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
|
|
1822
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
2027
1823
|
i0.ɵɵadvance(3);
|
|
2028
|
-
i0.ɵɵtextInterpolate(
|
|
1824
|
+
i0.ɵɵtextInterpolate(ctx_r1.formatDuration(ctx_r1.SelectedLog.DurationMs));
|
|
2029
1825
|
} }
|
|
2030
|
-
function
|
|
2031
|
-
i0.ɵɵelementStart(0, "div",
|
|
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
|
|
1831
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
2036
1832
|
i0.ɵɵadvance();
|
|
2037
|
-
i0.ɵɵtextInterpolate(
|
|
1833
|
+
i0.ɵɵtextInterpolate(ctx_r1.SelectedLog.ServerName);
|
|
2038
1834
|
} }
|
|
2039
|
-
function
|
|
2040
|
-
i0.ɵɵelementStart(0, "div",
|
|
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",
|
|
1839
|
+
i0.ɵɵelementStart(3, "pre", 237);
|
|
2044
1840
|
i0.ɵɵtext(4);
|
|
2045
1841
|
i0.ɵɵelementEnd()();
|
|
2046
1842
|
} if (rf & 2) {
|
|
2047
|
-
const
|
|
1843
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
2048
1844
|
i0.ɵɵadvance(4);
|
|
2049
|
-
i0.ɵɵtextInterpolate(
|
|
1845
|
+
i0.ɵɵtextInterpolate(ctx_r1.formatLogJson(ctx_r1.SelectedLog.InputArgs));
|
|
2050
1846
|
} }
|
|
2051
|
-
function
|
|
2052
|
-
i0.ɵɵelementStart(0, "div",
|
|
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",
|
|
1851
|
+
i0.ɵɵelementStart(3, "pre", 238);
|
|
2056
1852
|
i0.ɵɵtext(4);
|
|
2057
1853
|
i0.ɵɵelementEnd()();
|
|
2058
1854
|
} if (rf & 2) {
|
|
2059
|
-
const
|
|
1855
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
2060
1856
|
i0.ɵɵadvance(4);
|
|
2061
|
-
i0.ɵɵtextInterpolate(
|
|
1857
|
+
i0.ɵɵtextInterpolate(ctx_r1.formatLogJson(ctx_r1.SelectedLog.Result));
|
|
2062
1858
|
} }
|
|
2063
|
-
function
|
|
2064
|
-
i0.ɵɵelementStart(0, "div",
|
|
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",
|
|
1863
|
+
i0.ɵɵelementStart(3, "pre", 240);
|
|
2068
1864
|
i0.ɵɵtext(4);
|
|
2069
1865
|
i0.ɵɵelementEnd()();
|
|
2070
1866
|
} if (rf & 2) {
|
|
2071
|
-
const
|
|
1867
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
2072
1868
|
i0.ɵɵadvance(4);
|
|
2073
|
-
i0.ɵɵtextInterpolate(
|
|
1869
|
+
i0.ɵɵtextInterpolate(ctx_r1.SelectedLog.ErrorMessage);
|
|
2074
1870
|
} }
|
|
2075
|
-
function
|
|
2076
|
-
const
|
|
2077
|
-
i0.ɵɵelementStart(0, "button",
|
|
2078
|
-
i0.ɵɵlistener("click", function
|
|
2079
|
-
i0.ɵɵelement(1, "i",
|
|
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
|
|
2084
|
-
const
|
|
2085
|
-
i0.ɵɵelementStart(0, "div",
|
|
2086
|
-
i0.ɵɵlistener("click", function
|
|
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",
|
|
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",
|
|
1887
|
+
i0.ɵɵelementStart(7, "div", 225)(8, "span", 226);
|
|
2092
1888
|
i0.ɵɵtext(9);
|
|
2093
1889
|
i0.ɵɵelementEnd();
|
|
2094
|
-
i0.ɵɵelementStart(10, "span",
|
|
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,
|
|
1896
|
+
i0.ɵɵconditionalCreate(14, MCPDashboardComponent_Conditional_21_Conditional_14_Template, 4, 1);
|
|
2101
1897
|
i0.ɵɵelementEnd()();
|
|
2102
|
-
i0.ɵɵelementStart(15, "button",
|
|
2103
|
-
i0.ɵɵlistener("click", function
|
|
2104
|
-
i0.ɵɵelement(16, "i",
|
|
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",
|
|
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",
|
|
1905
|
+
i0.ɵɵelementStart(21, "div", 232);
|
|
2110
1906
|
i0.ɵɵtext(22);
|
|
2111
1907
|
i0.ɵɵelementEnd();
|
|
2112
|
-
i0.ɵɵconditionalCreate(23,
|
|
1908
|
+
i0.ɵɵconditionalCreate(23, MCPDashboardComponent_Conditional_21_Conditional_23_Template, 2, 1, "div", 233);
|
|
2113
1909
|
i0.ɵɵelementEnd();
|
|
2114
|
-
i0.ɵɵconditionalCreate(24,
|
|
2115
|
-
i0.ɵɵconditionalCreate(25,
|
|
2116
|
-
i0.ɵɵconditionalCreate(26,
|
|
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",
|
|
2119
|
-
i0.ɵɵconditionalCreate(28,
|
|
2120
|
-
i0.ɵɵelementStart(29, "button",
|
|
2121
|
-
i0.ɵɵlistener("click", function
|
|
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
|
|
1921
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
2126
1922
|
i0.ɵɵadvance(6);
|
|
2127
|
-
i0.ɵɵtextInterpolate(
|
|
1923
|
+
i0.ɵɵtextInterpolate(ctx_r1.SelectedLog.ToolName);
|
|
2128
1924
|
i0.ɵɵadvance(2);
|
|
2129
|
-
i0.ɵɵclassMap(
|
|
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(
|
|
1927
|
+
i0.ɵɵtextInterpolate(ctx_r1.SelectedLog.Status);
|
|
2132
1928
|
i0.ɵɵadvance(4);
|
|
2133
|
-
i0.ɵɵtextInterpolate(
|
|
1929
|
+
i0.ɵɵtextInterpolate(ctx_r1.formatDate(ctx_r1.SelectedLog.StartedAt));
|
|
2134
1930
|
i0.ɵɵadvance();
|
|
2135
|
-
i0.ɵɵconditional(
|
|
1931
|
+
i0.ɵɵconditional(ctx_r1.SelectedLog.DurationMs != null ? 14 : -1);
|
|
2136
1932
|
i0.ɵɵadvance(8);
|
|
2137
|
-
i0.ɵɵtextInterpolate(
|
|
1933
|
+
i0.ɵɵtextInterpolate(ctx_r1.SelectedLog.ConnectionName || ctx_r1.SelectedLog.ConnectionID);
|
|
2138
1934
|
i0.ɵɵadvance();
|
|
2139
|
-
i0.ɵɵconditional(
|
|
1935
|
+
i0.ɵɵconditional(ctx_r1.SelectedLog.ServerName ? 23 : -1);
|
|
2140
1936
|
i0.ɵɵadvance();
|
|
2141
|
-
i0.ɵɵconditional(
|
|
1937
|
+
i0.ɵɵconditional(ctx_r1.SelectedLog.InputArgs ? 24 : -1);
|
|
2142
1938
|
i0.ɵɵadvance();
|
|
2143
|
-
i0.ɵɵconditional(
|
|
1939
|
+
i0.ɵɵconditional(ctx_r1.SelectedLog.Result ? 25 : -1);
|
|
2144
1940
|
i0.ɵɵadvance();
|
|
2145
|
-
i0.ɵɵconditional(
|
|
1941
|
+
i0.ɵɵconditional(ctx_r1.SelectedLog.ErrorMessage ? 26 : -1);
|
|
2146
1942
|
i0.ɵɵadvance(2);
|
|
2147
|
-
i0.ɵɵconditional(
|
|
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
|
-
|
|
4294
|
-
i0.ɵɵ
|
|
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"], ["mjButton", "", "variant", "primary", "size", "sm"], [3, "Loading"], ["toolbar", ""], [3, "TabChange", "Tabs", "ActiveKey"], ["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(
|
|
4322
|
-
i0.ɵɵ
|
|
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.ɵɵ
|
|
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.ɵɵconditionalCreate(7, MCPDashboardComponent_Case_7_Template, 3, 0, "button", 24)(8, MCPDashboardComponent_Case_8_Template, 3, 0, "button", 24)(9, MCPDashboardComponent_Case_9_Template, 7, 8)(10, MCPDashboardComponent_Case_10_Template, 1, 1, "mj-refresh-button", 25);
|
|
4329
4303
|
i0.ɵɵelementEnd();
|
|
4330
|
-
i0.ɵɵelementStart(
|
|
4331
|
-
i0.ɵɵ
|
|
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");
|
|
4304
|
+
i0.ɵɵelementStart(11, "div", 26)(12, "mj-tab-nav", 27);
|
|
4305
|
+
i0.ɵɵlistener("TabChange", function MCPDashboardComponent_Template_mj_tab_nav_TabChange_12_listener($event) { return ctx.setActiveTab($event); });
|
|
4338
4306
|
i0.ɵɵelementEnd();
|
|
4339
|
-
i0.ɵɵelementStart(
|
|
4340
|
-
i0.ɵɵ
|
|
4307
|
+
i0.ɵɵelementStart(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.ɵɵ
|
|
4343
|
-
i0.ɵɵ
|
|
4344
|
-
i0.ɵɵ
|
|
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(
|
|
4360
|
-
i0.ɵɵconditionalCreate(
|
|
4361
|
-
i0.ɵɵconditionalCreate(
|
|
4362
|
-
i0.ɵɵconditionalCreate(
|
|
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
|
|
4382
|
-
i0.ɵɵadvance(8);
|
|
4383
|
-
i0.ɵɵconditional(ctx.FilterPanelVisible ? 8 : 9);
|
|
4319
|
+
let tmp_6_0;
|
|
4384
4320
|
i0.ɵɵadvance(3);
|
|
4385
|
-
i0.ɵɵ
|
|
4386
|
-
i0.ɵɵadvance(
|
|
4387
|
-
i0.ɵɵ
|
|
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);
|
|
4398
|
-
i0.ɵɵadvance();
|
|
4399
|
-
i0.ɵɵclassProp("active", ctx.ActiveTab === "logs");
|
|
4400
|
-
i0.ɵɵadvance(4);
|
|
4401
|
-
i0.ɵɵclassProp("has-errors", ctx.stats.failedExecutions > 0);
|
|
4321
|
+
i0.ɵɵproperty("Count", ctx.CurrentFilteredCount)("Total", ctx.CurrentTotalCount);
|
|
4322
|
+
i0.ɵɵadvance(2);
|
|
4323
|
+
i0.ɵɵproperty("ActiveCount", ctx.ActiveFilterCount)("ShowClearAll", ctx.ActiveFilterCount > 0);
|
|
4402
4324
|
i0.ɵɵadvance();
|
|
4403
|
-
i0.ɵɵ
|
|
4325
|
+
i0.ɵɵproperty("Fields", ctx.mcpFilterFields)("Values", ctx.mcpFilterValues);
|
|
4404
4326
|
i0.ɵɵadvance();
|
|
4405
|
-
i0.ɵɵconditional((
|
|
4327
|
+
i0.ɵɵconditional((tmp_6_0 = ctx.ActiveTab) === "servers" ? 7 : tmp_6_0 === "connections" ? 8 : tmp_6_0 === "tools" ? 9 : tmp_6_0 === "logs" ? 10 : -1);
|
|
4406
4328
|
i0.ɵɵadvance(5);
|
|
4407
|
-
i0.ɵɵ
|
|
4408
|
-
i0.ɵɵadvance(6);
|
|
4409
|
-
i0.ɵɵconditional(ctx.activeFilterCount() > 0 ? 49 : -1);
|
|
4410
|
-
i0.ɵɵadvance(2);
|
|
4411
|
-
i0.ɵɵtextInterpolate2("", ctx.CurrentFilteredCount, " / ", ctx.CurrentTotalCount);
|
|
4412
|
-
i0.ɵɵadvance(5);
|
|
4413
|
-
i0.ɵɵproperty("value", ctx.CurrentFilters.searchTerm);
|
|
4414
|
-
i0.ɵɵadvance(2);
|
|
4415
|
-
i0.ɵɵconditional(ctx.ActiveTab === "tools" ? 58 : -1);
|
|
4329
|
+
i0.ɵɵproperty("Tabs", ctx.mcpTabs)("ActiveKey", ctx.ActiveTab);
|
|
4416
4330
|
i0.ɵɵadvance();
|
|
4417
|
-
i0.ɵɵ
|
|
4331
|
+
i0.ɵɵproperty("Value", ctx.CurrentFilters.searchTerm);
|
|
4418
4332
|
i0.ɵɵadvance();
|
|
4419
|
-
i0.ɵɵ
|
|
4333
|
+
i0.ɵɵproperty("Flex", true);
|
|
4420
4334
|
i0.ɵɵadvance();
|
|
4421
|
-
i0.ɵɵconditional(ctx.
|
|
4335
|
+
i0.ɵɵconditional(ctx.ErrorMessage ? 15 : -1);
|
|
4422
4336
|
i0.ɵɵadvance();
|
|
4423
|
-
i0.ɵɵconditional(ctx.
|
|
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 ?
|
|
4339
|
+
i0.ɵɵconditional(ctx.ShowServerDialog ? 18 : -1);
|
|
4430
4340
|
i0.ɵɵadvance();
|
|
4431
|
-
i0.ɵɵconditional(ctx.ShowConnectionDialog ?
|
|
4341
|
+
i0.ɵɵconditional(ctx.ShowConnectionDialog ? 19 : -1);
|
|
4432
4342
|
i0.ɵɵadvance();
|
|
4433
|
-
i0.ɵɵconditional(ctx.ShowTestToolDialog ?
|
|
4343
|
+
i0.ɵɵconditional(ctx.ShowTestToolDialog ? 20 : -1);
|
|
4434
4344
|
i0.ɵɵadvance();
|
|
4435
|
-
i0.ɵɵconditional(ctx.ShowLogDetailPanel && ctx.SelectedLog ?
|
|
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 <!-- 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 <!-- Tab Navigation -->\n <mj-tab-nav\n [Tabs]=\"mcpTabs\"\n [ActiveKey]=\"ActiveTab\"\n (TabChange)=\"setActiveTab($any($event))\">\n </mj-tab-nav>\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
|