@memberjunction/ng-dashboards 5.38.0 → 5.40.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/README.md +14 -7
- package/dist/AI/components/agents/agent-configuration.component.js +199 -198
- package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
- package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/ai-analytics-resource.component.js +20 -17
- package/dist/AI/components/analytics/ai-analytics-resource.component.js.map +1 -1
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts +15 -0
- 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 +166 -58
- package/dist/AI/components/analytics/cost-budget/cost-budget.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 +2 -1
- 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 +1 -0
- 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 +55 -36
- 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 +9 -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 +158 -117
- 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 +1 -0
- 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 +22 -8
- 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 +217 -860
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +1717 -7802
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
- package/dist/AI/components/autotagging/components/classify-item-drilldown.component.d.ts +56 -0
- package/dist/AI/components/autotagging/components/classify-item-drilldown.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/components/classify-item-drilldown.component.js +423 -0
- package/dist/AI/components/autotagging/components/classify-item-drilldown.component.js.map +1 -0
- package/dist/AI/components/autotagging/components/classify-item-grid.component.d.ts +70 -0
- package/dist/AI/components/autotagging/components/classify-item-grid.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/components/classify-item-grid.component.js +308 -0
- package/dist/AI/components/autotagging/components/classify-item-grid.component.js.map +1 -0
- package/dist/AI/components/autotagging/components/classify-org-context-editor.component.d.ts +29 -0
- package/dist/AI/components/autotagging/components/classify-org-context-editor.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/components/classify-org-context-editor.component.js +186 -0
- package/dist/AI/components/autotagging/components/classify-org-context-editor.component.js.map +1 -0
- package/dist/AI/components/autotagging/components/classify-overview-analytics.component.d.ts +69 -0
- package/dist/AI/components/autotagging/components/classify-overview-analytics.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/components/classify-overview-analytics.component.js +278 -0
- package/dist/AI/components/autotagging/components/classify-overview-analytics.component.js.map +1 -0
- package/dist/AI/components/autotagging/components/classify-seed-taxonomy.component.d.ts +73 -0
- package/dist/AI/components/autotagging/components/classify-seed-taxonomy.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/components/classify-seed-taxonomy.component.js +393 -0
- package/dist/AI/components/autotagging/components/classify-seed-taxonomy.component.js.map +1 -0
- package/dist/AI/components/autotagging/dialogs/classify-setup-wizard.component.d.ts +122 -0
- package/dist/AI/components/autotagging/dialogs/classify-setup-wizard.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/dialogs/classify-setup-wizard.component.js +908 -0
- package/dist/AI/components/autotagging/dialogs/classify-setup-wizard.component.js.map +1 -0
- package/dist/AI/components/autotagging/dialogs/dry-run-preview.dialog.component.d.ts +87 -0
- package/dist/AI/components/autotagging/dialogs/dry-run-preview.dialog.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/dialogs/dry-run-preview.dialog.component.js +475 -0
- package/dist/AI/components/autotagging/dialogs/dry-run-preview.dialog.component.js.map +1 -0
- package/dist/AI/components/autotagging/dialogs/item-detail.dialog.component.d.ts +29 -0
- package/dist/AI/components/autotagging/dialogs/item-detail.dialog.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/dialogs/item-detail.dialog.component.js +208 -0
- package/dist/AI/components/autotagging/dialogs/item-detail.dialog.component.js.map +1 -0
- package/dist/AI/components/autotagging/dialogs/no-content-type-warning.dialog.component.d.ts +21 -0
- package/dist/AI/components/autotagging/dialogs/no-content-type-warning.dialog.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/dialogs/no-content-type-warning.dialog.component.js +70 -0
- package/dist/AI/components/autotagging/dialogs/no-content-type-warning.dialog.component.js.map +1 -0
- package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.d.ts +333 -0
- package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js +2125 -0
- package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js.map +1 -0
- package/dist/AI/components/autotagging/shared/classify.dryrun.d.ts +61 -0
- package/dist/AI/components/autotagging/shared/classify.dryrun.d.ts.map +1 -0
- package/dist/AI/components/autotagging/shared/classify.dryrun.js +78 -0
- package/dist/AI/components/autotagging/shared/classify.dryrun.js.map +1 -0
- package/dist/AI/components/autotagging/shared/classify.format.d.ts +58 -0
- package/dist/AI/components/autotagging/shared/classify.format.d.ts.map +1 -0
- package/dist/AI/components/autotagging/shared/classify.format.js +260 -0
- package/dist/AI/components/autotagging/shared/classify.format.js.map +1 -0
- package/dist/AI/components/autotagging/shared/classify.types.d.ts +319 -0
- package/dist/AI/components/autotagging/shared/classify.types.d.ts.map +1 -0
- package/dist/AI/components/autotagging/shared/classify.types.js +6 -0
- package/dist/AI/components/autotagging/shared/classify.types.js.map +1 -0
- package/dist/AI/components/autotagging/tabs/health-tab.component.d.ts +103 -0
- package/dist/AI/components/autotagging/tabs/health-tab.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/tabs/health-tab.component.js +571 -0
- package/dist/AI/components/autotagging/tabs/health-tab.component.js.map +1 -0
- package/dist/AI/components/autotagging/tabs/history-tab.component.d.ts +77 -0
- package/dist/AI/components/autotagging/tabs/history-tab.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/tabs/history-tab.component.js +519 -0
- package/dist/AI/components/autotagging/tabs/history-tab.component.js.map +1 -0
- package/dist/AI/components/autotagging/tabs/inbox-tab.component.d.ts +107 -0
- package/dist/AI/components/autotagging/tabs/inbox-tab.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/tabs/inbox-tab.component.js +719 -0
- package/dist/AI/components/autotagging/tabs/inbox-tab.component.js.map +1 -0
- package/dist/AI/components/autotagging/tabs/pipeline-tab.component.d.ts +131 -0
- package/dist/AI/components/autotagging/tabs/pipeline-tab.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/tabs/pipeline-tab.component.js +813 -0
- package/dist/AI/components/autotagging/tabs/pipeline-tab.component.js.map +1 -0
- package/dist/AI/components/autotagging/tabs/sources-tab.component.d.ts +177 -0
- package/dist/AI/components/autotagging/tabs/sources-tab.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/tabs/sources-tab.component.js +1465 -0
- package/dist/AI/components/autotagging/tabs/sources-tab.component.js.map +1 -0
- package/dist/AI/components/autotagging/tabs/tags-tab.component.d.ts +78 -0
- package/dist/AI/components/autotagging/tabs/tags-tab.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/tabs/tags-tab.component.js +492 -0
- package/dist/AI/components/autotagging/tabs/tags-tab.component.js.map +1 -0
- package/dist/AI/components/autotagging/tabs/taxonomy-tab.component.d.ts +397 -0
- package/dist/AI/components/autotagging/tabs/taxonomy-tab.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/tabs/taxonomy-tab.component.js +3490 -0
- package/dist/AI/components/autotagging/tabs/taxonomy-tab.component.js.map +1 -0
- package/dist/AI/components/autotagging/tabs/types-tab.component.d.ts +56 -0
- package/dist/AI/components/autotagging/tabs/types-tab.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/tabs/types-tab.component.js +271 -0
- package/dist/AI/components/autotagging/tabs/types-tab.component.js.map +1 -0
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +3 -0
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +306 -290
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
- package/dist/AI/components/execution-monitoring.component.js +1 -1
- package/dist/AI/components/execution-monitoring.component.js.map +1 -1
- package/dist/AI/components/models/model-management.component.js +209 -208
- package/dist/AI/components/models/model-management.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.js +130 -128
- package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
- package/dist/AI/components/requests/agent-requests-resource.component.js +61 -61
- package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
- package/dist/AI/components/system/system-configuration.component.js +17 -17
- package/dist/AI/components/system/system-configuration.component.js.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.d.ts +1 -0
- package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.js +578 -538
- package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts +3 -0
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.js +331 -303
- package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
- package/dist/AI/services/ai-instrumentation.service.d.ts +5 -0
- package/dist/AI/services/ai-instrumentation.service.d.ts.map +1 -1
- package/dist/AI/services/ai-instrumentation.service.js +14 -2
- package/dist/AI/services/ai-instrumentation.service.js.map +1 -1
- package/dist/AI/services/cache-metrics.d.ts +50 -0
- package/dist/AI/services/cache-metrics.d.ts.map +1 -0
- package/dist/AI/services/cache-metrics.js +43 -0
- package/dist/AI/services/cache-metrics.js.map +1 -0
- package/dist/APIKeys/api-applications-panel.component.js +2 -2
- package/dist/APIKeys/api-key-create-dialog.component.js +2 -2
- package/dist/APIKeys/api-key-edit-panel.component.js +2 -2
- package/dist/APIKeys/api-keys-resource.component.js +132 -131
- package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +141 -141
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.js +15 -15
- package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.d.ts +0 -5
- package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.js +139 -212
- package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
- package/dist/Admin/admin-data-schema.component.js +2 -2
- package/dist/Admin/admin-data-schema.component.js.map +1 -1
- package/dist/Admin/admin-dev-tools-resource.component.js +2 -2
- package/dist/Admin/admin-dev-tools-resource.component.js.map +1 -1
- package/dist/Admin/admin-identity-access.component.js +2 -2
- package/dist/Admin/admin-identity-access.component.js.map +1 -1
- package/dist/Admin/admin-monitoring.component.js +2 -2
- package/dist/Admin/admin-monitoring.component.js.map +1 -1
- package/dist/ApplicationRoles/application-roles-resource.component.js +54 -49
- package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
- package/dist/Communication/communication-logs-resource.component.d.ts +6 -0
- package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-logs-resource.component.js +72 -50
- package/dist/Communication/communication-logs-resource.component.js.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.js +103 -102
- package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
- package/dist/Communication/communication-providers-resource.component.js +52 -51
- package/dist/Communication/communication-providers-resource.component.js.map +1 -1
- package/dist/Communication/communication-runs-resource.component.js +39 -38
- package/dist/Communication/communication-runs-resource.component.js.map +1 -1
- package/dist/Communication/communication-templates-resource.component.d.ts +6 -0
- package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-templates-resource.component.js +92 -89
- package/dist/Communication/communication-templates-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.js +136 -135
- package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.js +155 -152
- package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.js +119 -118
- package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-overview-resource.component.js +129 -128
- package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.js +107 -106
- package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +31 -340
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.js +468 -1958
- package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
- package/dist/DataExplorer/data-explorer-resource.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-resource.component.js +10 -0
- package/dist/DataExplorer/data-explorer-resource.component.js.map +1 -1
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +1 -1
- package/dist/DatabaseDesigner/components/entity-list.component.js +115 -114
- package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +5 -6
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js +4 -5
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -1
- package/dist/DevTools/app-state-inspector.component.js +18 -17
- package/dist/DevTools/app-state-inspector.component.js.map +1 -1
- package/dist/DevTools/class-registry.component.js +88 -85
- package/dist/DevTools/class-registry.component.js.map +1 -1
- package/dist/DevTools/event-monitor.component.js +155 -150
- package/dist/DevTools/event-monitor.component.js.map +1 -1
- package/dist/DevTools/graphql-console.component.js +245 -243
- package/dist/DevTools/graphql-console.component.js.map +1 -1
- package/dist/DevTools/layout-inspector.component.js +18 -17
- package/dist/DevTools/layout-inspector.component.js.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.js +20 -19
- package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
- package/dist/Home/home-dashboard.component.js +2 -2
- package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
- package/dist/Integration/components/activity/activity.component.js +236 -229
- package/dist/Integration/components/activity/activity.component.js.map +1 -1
- package/dist/Integration/components/connections/connections.component.js +390 -389
- package/dist/Integration/components/connections/connections.component.js.map +1 -1
- package/dist/Integration/components/overview/overview.component.js +2 -2
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +14 -11
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts +27 -2
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +244 -119
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +293 -291
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +62 -61
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/visualize/record-drilldown/record-drilldown.component.d.ts +65 -0
- package/dist/KnowledgeHub/components/visualize/record-drilldown/record-drilldown.component.d.ts.map +1 -0
- package/dist/KnowledgeHub/components/visualize/record-drilldown/record-drilldown.component.js +176 -0
- package/dist/KnowledgeHub/components/visualize/record-drilldown/record-drilldown.component.js.map +1 -0
- package/dist/KnowledgeHub/components/visualize/tag-cloud/tag-cloud.component.d.ts +81 -0
- package/dist/KnowledgeHub/components/visualize/tag-cloud/tag-cloud.component.d.ts.map +1 -0
- package/dist/KnowledgeHub/components/visualize/tag-cloud/tag-cloud.component.js +308 -0
- package/dist/KnowledgeHub/components/visualize/tag-cloud/tag-cloud.component.js.map +1 -0
- package/dist/KnowledgeHub/components/visualize/visualize-resource.component.d.ts +85 -0
- package/dist/KnowledgeHub/components/visualize/visualize-resource.component.d.ts.map +1 -0
- package/dist/KnowledgeHub/components/visualize/visualize-resource.component.js +362 -0
- package/dist/KnowledgeHub/components/visualize/visualize-resource.component.js.map +1 -0
- package/dist/KnowledgeHub/index.d.ts +3 -0
- package/dist/KnowledgeHub/index.d.ts.map +1 -1
- package/dist/KnowledgeHub/index.js +3 -0
- package/dist/KnowledgeHub/index.js.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts +6 -2
- package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +525 -566
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.js +135 -134
- package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.js +199 -198
- package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
- package/dist/MCP/components/mcp-server-dialog.component.js +2 -2
- package/dist/MCP/mcp-dashboard.component.js +443 -438
- package/dist/MCP/mcp-dashboard.component.js.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-activity.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-activity.component.js +146 -147
- package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs.component.js +76 -75
- package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-overview.component.js +97 -96
- package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.js +24 -22
- package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
- package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts +2 -0
- package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts.map +1 -1
- package/dist/Scheduling/services/scheduling-instrumentation.service.js +1 -0
- package/dist/Scheduling/services/scheduling-instrumentation.service.js.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.js +1 -1
- package/dist/Testing/components/testing-explorer.component.d.ts +14 -4
- package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer.component.js +436 -427
- package/dist/Testing/components/testing-explorer.component.js.map +1 -1
- package/dist/Testing/components/testing-runs-resource.component.js +1 -1
- package/dist/Testing/components/testing-runs.component.js +116 -115
- package/dist/Testing/components/testing-runs.component.js.map +1 -1
- package/dist/Testing/testing-dashboard.component.js +6 -7
- package/dist/Testing/testing-dashboard.component.js.map +1 -1
- package/dist/VersionHistory/components/labels-resource.component.js +173 -172
- package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/restore-resource.component.d.ts +6 -0
- package/dist/VersionHistory/components/restore-resource.component.d.ts.map +1 -1
- package/dist/VersionHistory/components/restore-resource.component.js +116 -92
- package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
- package/dist/ai-dashboards.module.d.ts +57 -35
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +80 -1
- package/dist/ai-dashboards.module.js.map +1 -1
- package/dist/communication-dashboards.module.d.ts +1 -1
- package/dist/communication-dashboards.module.d.ts.map +1 -1
- package/dist/communication-dashboards.module.js +7 -1
- package/dist/communication-dashboards.module.js.map +1 -1
- package/dist/data-explorer-dashboards.module.d.ts +12 -14
- package/dist/data-explorer-dashboards.module.d.ts.map +1 -1
- package/dist/data-explorer-dashboards.module.js +5 -14
- package/dist/data-explorer-dashboards.module.js.map +1 -1
- package/dist/public-api.d.ts +3 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +3 -0
- package/dist/public-api.js.map +1 -1
- package/dist/testing-dashboards.module.d.ts +4 -5
- package/dist/testing-dashboards.module.d.ts.map +1 -1
- package/dist/testing-dashboards.module.js +7 -5
- package/dist/testing-dashboards.module.js.map +1 -1
- package/package.json +57 -54
- package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.d.ts +0 -79
- package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.d.ts.map +0 -1
- package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js +0 -195
- package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js.map +0 -1
- package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts +0 -226
- package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts.map +0 -1
- package/dist/DataExplorer/components/view-selector/view-selector.component.js +0 -861
- package/dist/DataExplorer/components/view-selector/view-selector.component.js.map +0 -1
|
@@ -33,37 +33,41 @@ const _forTrack0 = ($index, $item) => $item.ID;
|
|
|
33
33
|
const _forTrack1 = ($index, $item) => $item.server.ID;
|
|
34
34
|
const _forTrack2 = ($index, $item) => $item.value;
|
|
35
35
|
const _forTrack3 = ($index, $item) => $item.name;
|
|
36
|
-
function
|
|
36
|
+
function MCPDashboardComponent_Case_5_Template(rf, ctx) { if (rf & 1) {
|
|
37
37
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
38
38
|
i0.ɵɵelementStart(0, "button", 34);
|
|
39
|
-
i0.ɵɵlistener("click", function
|
|
39
|
+
i0.ɵɵlistener("click", function MCPDashboardComponent_Case_5_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.createServer()); });
|
|
40
40
|
i0.ɵɵelement(1, "i", 35);
|
|
41
|
-
i0.ɵɵ
|
|
42
|
-
i0.ɵɵ
|
|
41
|
+
i0.ɵɵelementStart(2, "span", 36);
|
|
42
|
+
i0.ɵɵtext(3, "Add Server");
|
|
43
|
+
i0.ɵɵelementEnd()();
|
|
43
44
|
} }
|
|
44
|
-
function
|
|
45
|
+
function MCPDashboardComponent_Case_6_Template(rf, ctx) { if (rf & 1) {
|
|
45
46
|
const _r3 = i0.ɵɵgetCurrentView();
|
|
46
47
|
i0.ɵɵelementStart(0, "button", 34);
|
|
47
|
-
i0.ɵɵlistener("click", function
|
|
48
|
+
i0.ɵɵlistener("click", function MCPDashboardComponent_Case_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.createConnection()); });
|
|
48
49
|
i0.ɵɵelement(1, "i", 35);
|
|
49
|
-
i0.ɵɵ
|
|
50
|
-
i0.ɵɵ
|
|
50
|
+
i0.ɵɵelementStart(2, "span", 36);
|
|
51
|
+
i0.ɵɵtext(3, "Add Connection");
|
|
52
|
+
i0.ɵɵelementEnd()();
|
|
51
53
|
} }
|
|
52
|
-
function
|
|
54
|
+
function MCPDashboardComponent_Case_7_Template(rf, ctx) { if (rf & 1) {
|
|
53
55
|
const _r4 = i0.ɵɵgetCurrentView();
|
|
54
|
-
i0.ɵɵelementStart(0, "mj-view-toggle",
|
|
55
|
-
i0.ɵɵlistener("KeyChange", function
|
|
56
|
-
i0.ɵɵelementEnd();
|
|
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);
|
|
61
|
-
i0.ɵɵelementEnd();
|
|
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 ");
|
|
56
|
+
i0.ɵɵelementStart(0, "mj-view-toggle", 37);
|
|
57
|
+
i0.ɵɵlistener("KeyChange", function MCPDashboardComponent_Case_7_Template_mj_view_toggle_KeyChange_0_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.setToolsViewMode($event)); });
|
|
66
58
|
i0.ɵɵelementEnd();
|
|
59
|
+
i0.ɵɵelementStart(1, "button", 38);
|
|
60
|
+
i0.ɵɵlistener("click", function MCPDashboardComponent_Case_7_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleScalableMode(!ctx_r1.useScalablePagination)); });
|
|
61
|
+
i0.ɵɵelement(2, "i", 39);
|
|
62
|
+
i0.ɵɵelementStart(3, "span", 36);
|
|
63
|
+
i0.ɵɵtext(4);
|
|
64
|
+
i0.ɵɵelementEnd()();
|
|
65
|
+
i0.ɵɵelementStart(5, "button", 34);
|
|
66
|
+
i0.ɵɵlistener("click", function MCPDashboardComponent_Case_7_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.openTestToolDialog()); });
|
|
67
|
+
i0.ɵɵelement(6, "i", 40);
|
|
68
|
+
i0.ɵɵelementStart(7, "span", 36);
|
|
69
|
+
i0.ɵɵtext(8, "Test Tool");
|
|
70
|
+
i0.ɵɵelementEnd()();
|
|
67
71
|
} if (rf & 2) {
|
|
68
72
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
69
73
|
i0.ɵɵproperty("Options", ctx_r1.toolsViewOptions)("ActiveKey", ctx_r1.ToolsViewMode);
|
|
@@ -71,13 +75,13 @@ function MCPDashboardComponent_Case_9_Template(rf, ctx) { if (rf & 1) {
|
|
|
71
75
|
i0.ɵɵproperty("title", ctx_r1.useScalablePagination ? "Scale mode on: virtual scroll, paginated" : "Enable scale mode for large tool sets");
|
|
72
76
|
i0.ɵɵadvance();
|
|
73
77
|
i0.ɵɵclassProp("fa-bolt", ctx_r1.useScalablePagination)("fa-bolt-lightning", !ctx_r1.useScalablePagination);
|
|
74
|
-
i0.ɵɵadvance();
|
|
75
|
-
i0.ɵɵtextInterpolate1("
|
|
78
|
+
i0.ɵɵadvance(2);
|
|
79
|
+
i0.ɵɵtextInterpolate1("Scale: ", ctx_r1.useScalablePagination ? "ON" : "OFF");
|
|
76
80
|
} }
|
|
77
|
-
function
|
|
81
|
+
function MCPDashboardComponent_Case_8_Template(rf, ctx) { if (rf & 1) {
|
|
78
82
|
const _r5 = i0.ɵɵgetCurrentView();
|
|
79
|
-
i0.ɵɵelementStart(0, "mj-refresh-button",
|
|
80
|
-
i0.ɵɵlistener("Clicked", function
|
|
83
|
+
i0.ɵɵelementStart(0, "mj-refresh-button", 41);
|
|
84
|
+
i0.ɵɵlistener("Clicked", function MCPDashboardComponent_Case_8_Template_mj_refresh_button_Clicked_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.loadAllData()); });
|
|
81
85
|
i0.ɵɵelementEnd();
|
|
82
86
|
} if (rf & 2) {
|
|
83
87
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
@@ -86,11 +90,11 @@ function MCPDashboardComponent_Case_10_Template(rf, ctx) { if (rf & 1) {
|
|
|
86
90
|
function MCPDashboardComponent_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
87
91
|
const _r6 = i0.ɵɵgetCurrentView();
|
|
88
92
|
i0.ɵɵelementStart(0, "div", 30);
|
|
89
|
-
i0.ɵɵelement(1, "i",
|
|
93
|
+
i0.ɵɵelement(1, "i", 42);
|
|
90
94
|
i0.ɵɵtext(2);
|
|
91
|
-
i0.ɵɵelementStart(3, "button",
|
|
95
|
+
i0.ɵɵelementStart(3, "button", 43);
|
|
92
96
|
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",
|
|
97
|
+
i0.ɵɵelement(4, "i", 44);
|
|
94
98
|
i0.ɵɵelementEnd()();
|
|
95
99
|
} if (rf & 2) {
|
|
96
100
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
@@ -102,8 +106,8 @@ function MCPDashboardComponent_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
|
102
106
|
} }
|
|
103
107
|
function MCPDashboardComponent_Conditional_17_Case_0_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
104
108
|
const _r7 = i0.ɵɵgetCurrentView();
|
|
105
|
-
i0.ɵɵelementStart(0, "div",
|
|
106
|
-
i0.ɵɵelement(1, "i",
|
|
109
|
+
i0.ɵɵelementStart(0, "div", 48);
|
|
110
|
+
i0.ɵɵelement(1, "i", 49);
|
|
107
111
|
i0.ɵɵelementStart(2, "p");
|
|
108
112
|
i0.ɵɵtext(3, "No MCP servers configured");
|
|
109
113
|
i0.ɵɵelementEnd();
|
|
@@ -113,7 +117,7 @@ function MCPDashboardComponent_Conditional_17_Case_0_Conditional_1_Template(rf,
|
|
|
113
117
|
i0.ɵɵelementEnd()();
|
|
114
118
|
} }
|
|
115
119
|
function MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_For_1_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
116
|
-
i0.ɵɵelementStart(0, "p",
|
|
120
|
+
i0.ɵɵelementStart(0, "p", 63);
|
|
117
121
|
i0.ɵɵtext(1);
|
|
118
122
|
i0.ɵɵelementEnd();
|
|
119
123
|
} if (rf & 2) {
|
|
@@ -122,10 +126,10 @@ function MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_For_1_Conditi
|
|
|
122
126
|
i0.ɵɵtextInterpolate(server_r9.Description);
|
|
123
127
|
} }
|
|
124
128
|
function MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_For_1_Conditional_37_Template(rf, ctx) { if (rf & 1) {
|
|
125
|
-
i0.ɵɵelementStart(0, "div",
|
|
129
|
+
i0.ɵɵelementStart(0, "div", 68)(1, "span", 66);
|
|
126
130
|
i0.ɵɵtext(2, "URL");
|
|
127
131
|
i0.ɵɵelementEnd();
|
|
128
|
-
i0.ɵɵelementStart(3, "span",
|
|
132
|
+
i0.ɵɵelementStart(3, "span", 70);
|
|
129
133
|
i0.ɵɵtext(4);
|
|
130
134
|
i0.ɵɵelementEnd()();
|
|
131
135
|
} if (rf & 2) {
|
|
@@ -134,10 +138,10 @@ function MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_For_1_Conditi
|
|
|
134
138
|
i0.ɵɵtextInterpolate(server_r9.ServerURL);
|
|
135
139
|
} }
|
|
136
140
|
function MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_For_1_Conditional_38_Template(rf, ctx) { if (rf & 1) {
|
|
137
|
-
i0.ɵɵelementStart(0, "div",
|
|
141
|
+
i0.ɵɵelementStart(0, "div", 68)(1, "span", 66);
|
|
138
142
|
i0.ɵɵtext(2, "Command");
|
|
139
143
|
i0.ɵɵelementEnd();
|
|
140
|
-
i0.ɵɵelementStart(3, "span",
|
|
144
|
+
i0.ɵɵelementStart(3, "span", 71);
|
|
141
145
|
i0.ɵɵtext(4);
|
|
142
146
|
i0.ɵɵelementEnd()();
|
|
143
147
|
} if (rf & 2) {
|
|
@@ -146,23 +150,23 @@ function MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_For_1_Conditi
|
|
|
146
150
|
i0.ɵɵtextInterpolate(server_r9.Command);
|
|
147
151
|
} }
|
|
148
152
|
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",
|
|
150
|
-
i0.ɵɵelement(1, "i",
|
|
153
|
+
i0.ɵɵelementStart(0, "div", 74);
|
|
154
|
+
i0.ɵɵelement(1, "i", 76);
|
|
151
155
|
i0.ɵɵtext(2, " No tools discovered yet. Sync a connection to discover tools. ");
|
|
152
156
|
i0.ɵɵelementEnd();
|
|
153
157
|
} }
|
|
154
158
|
function MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_For_1_Conditional_44_Conditional_6_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
155
159
|
const _r10 = i0.ɵɵgetCurrentView();
|
|
156
|
-
i0.ɵɵelementStart(0, "div",
|
|
160
|
+
i0.ɵɵelementStart(0, "div", 77)(1, "div", 78)(2, "span", 79);
|
|
157
161
|
i0.ɵɵtext(3);
|
|
158
162
|
i0.ɵɵelementEnd();
|
|
159
|
-
i0.ɵɵelementStart(4, "span",
|
|
160
|
-
i0.ɵɵelement(5, "i",
|
|
163
|
+
i0.ɵɵelementStart(4, "span", 80);
|
|
164
|
+
i0.ɵɵelement(5, "i", 81);
|
|
161
165
|
i0.ɵɵtext(6);
|
|
162
166
|
i0.ɵɵelementEnd()();
|
|
163
|
-
i0.ɵɵelementStart(7, "button",
|
|
167
|
+
i0.ɵɵelementStart(7, "button", 82);
|
|
164
168
|
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",
|
|
169
|
+
i0.ɵɵelement(8, "i", 40);
|
|
166
170
|
i0.ɵɵelementEnd()();
|
|
167
171
|
} if (rf & 2) {
|
|
168
172
|
const tool_r11 = ctx.$implicit;
|
|
@@ -173,8 +177,8 @@ function MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_For_1_Conditi
|
|
|
173
177
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.getParamCount(tool_r11), " params ");
|
|
174
178
|
} }
|
|
175
179
|
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",
|
|
177
|
-
i0.ɵɵrepeaterCreate(1, MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_For_1_Conditional_44_Conditional_6_For_2_Template, 9, 2, "div",
|
|
180
|
+
i0.ɵɵelementStart(0, "div", 75);
|
|
181
|
+
i0.ɵɵrepeaterCreate(1, MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_For_1_Conditional_44_Conditional_6_For_2_Template, 9, 2, "div", 77, _forTrack0);
|
|
178
182
|
i0.ɵɵelementEnd();
|
|
179
183
|
} if (rf & 2) {
|
|
180
184
|
const server_r9 = i0.ɵɵnextContext(2).$implicit;
|
|
@@ -183,12 +187,12 @@ function MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_For_1_Conditi
|
|
|
183
187
|
i0.ɵɵrepeater(ctx_r1.getToolsForServer(server_r9.ID));
|
|
184
188
|
} }
|
|
185
189
|
function MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_For_1_Conditional_44_Template(rf, ctx) { if (rf & 1) {
|
|
186
|
-
i0.ɵɵelementStart(0, "div",
|
|
187
|
-
i0.ɵɵelement(2, "i",
|
|
190
|
+
i0.ɵɵelementStart(0, "div", 69)(1, "div", 72);
|
|
191
|
+
i0.ɵɵelement(2, "i", 73);
|
|
188
192
|
i0.ɵɵelementStart(3, "span");
|
|
189
193
|
i0.ɵɵtext(4);
|
|
190
194
|
i0.ɵɵelementEnd()();
|
|
191
|
-
i0.ɵɵconditionalCreate(5, MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_For_1_Conditional_44_Conditional_5_Template, 3, 0, "div",
|
|
195
|
+
i0.ɵɵconditionalCreate(5, MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_For_1_Conditional_44_Conditional_5_Template, 3, 0, "div", 74)(6, MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_For_1_Conditional_44_Conditional_6_Template, 3, 0, "div", 75);
|
|
192
196
|
i0.ɵɵelementEnd();
|
|
193
197
|
} if (rf & 2) {
|
|
194
198
|
const server_r9 = i0.ɵɵnextContext().$implicit;
|
|
@@ -200,61 +204,61 @@ function MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_For_1_Conditi
|
|
|
200
204
|
} }
|
|
201
205
|
function MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_For_1_Template(rf, ctx) { if (rf & 1) {
|
|
202
206
|
const _r8 = i0.ɵɵgetCurrentView();
|
|
203
|
-
i0.ɵɵelementStart(0, "div",
|
|
207
|
+
i0.ɵɵelementStart(0, "div", 51)(1, "div", 52);
|
|
204
208
|
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",
|
|
206
|
-
i0.ɵɵelement(3, "i",
|
|
207
|
-
i0.ɵɵelementStart(5, "span",
|
|
209
|
+
i0.ɵɵelementStart(2, "div", 53);
|
|
210
|
+
i0.ɵɵelement(3, "i", 54)(4, "i");
|
|
211
|
+
i0.ɵɵelementStart(5, "span", 55);
|
|
208
212
|
i0.ɵɵtext(6);
|
|
209
213
|
i0.ɵɵelementEnd();
|
|
210
|
-
i0.ɵɵelementStart(7, "span",
|
|
214
|
+
i0.ɵɵelementStart(7, "span", 56);
|
|
211
215
|
i0.ɵɵtext(8);
|
|
212
216
|
i0.ɵɵelementEnd()();
|
|
213
|
-
i0.ɵɵelementStart(9, "div",
|
|
217
|
+
i0.ɵɵelementStart(9, "div", 57);
|
|
214
218
|
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",
|
|
219
|
+
i0.ɵɵelementStart(10, "button", 58);
|
|
216
220
|
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",
|
|
221
|
+
i0.ɵɵelement(11, "i", 59);
|
|
218
222
|
i0.ɵɵelementEnd();
|
|
219
|
-
i0.ɵɵelementStart(12, "button",
|
|
223
|
+
i0.ɵɵelementStart(12, "button", 60);
|
|
220
224
|
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",
|
|
225
|
+
i0.ɵɵelement(13, "i", 61);
|
|
222
226
|
i0.ɵɵelementEnd()()();
|
|
223
|
-
i0.ɵɵelementStart(14, "div",
|
|
224
|
-
i0.ɵɵconditionalCreate(15, MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_For_1_Conditional_15_Template, 2, 1, "p",
|
|
225
|
-
i0.ɵɵelementStart(16, "div",
|
|
227
|
+
i0.ɵɵelementStart(14, "div", 62);
|
|
228
|
+
i0.ɵɵconditionalCreate(15, MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_For_1_Conditional_15_Template, 2, 1, "p", 63);
|
|
229
|
+
i0.ɵɵelementStart(16, "div", 64)(17, "div", 65)(18, "span", 66);
|
|
226
230
|
i0.ɵɵtext(19, "Transport");
|
|
227
231
|
i0.ɵɵelementEnd();
|
|
228
|
-
i0.ɵɵelementStart(20, "span",
|
|
232
|
+
i0.ɵɵelementStart(20, "span", 67);
|
|
229
233
|
i0.ɵɵtext(21);
|
|
230
234
|
i0.ɵɵelementEnd()();
|
|
231
|
-
i0.ɵɵelementStart(22, "div",
|
|
235
|
+
i0.ɵɵelementStart(22, "div", 65)(23, "span", 66);
|
|
232
236
|
i0.ɵɵtext(24, "Auth");
|
|
233
237
|
i0.ɵɵelementEnd();
|
|
234
|
-
i0.ɵɵelementStart(25, "span",
|
|
238
|
+
i0.ɵɵelementStart(25, "span", 67);
|
|
235
239
|
i0.ɵɵtext(26);
|
|
236
240
|
i0.ɵɵelementEnd()();
|
|
237
|
-
i0.ɵɵelementStart(27, "div",
|
|
241
|
+
i0.ɵɵelementStart(27, "div", 65)(28, "span", 66);
|
|
238
242
|
i0.ɵɵtext(29, "Connections");
|
|
239
243
|
i0.ɵɵelementEnd();
|
|
240
|
-
i0.ɵɵelementStart(30, "span",
|
|
244
|
+
i0.ɵɵelementStart(30, "span", 67);
|
|
241
245
|
i0.ɵɵtext(31);
|
|
242
246
|
i0.ɵɵelementEnd()();
|
|
243
|
-
i0.ɵɵelementStart(32, "div",
|
|
247
|
+
i0.ɵɵelementStart(32, "div", 65)(33, "span", 66);
|
|
244
248
|
i0.ɵɵtext(34, "Tools");
|
|
245
249
|
i0.ɵɵelementEnd();
|
|
246
|
-
i0.ɵɵelementStart(35, "span",
|
|
250
|
+
i0.ɵɵelementStart(35, "span", 67);
|
|
247
251
|
i0.ɵɵtext(36);
|
|
248
252
|
i0.ɵɵelementEnd()();
|
|
249
|
-
i0.ɵɵconditionalCreate(37, MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_For_1_Conditional_37_Template, 5, 1, "div",
|
|
250
|
-
i0.ɵɵconditionalCreate(38, MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_For_1_Conditional_38_Template, 5, 1, "div",
|
|
251
|
-
i0.ɵɵelementStart(39, "div",
|
|
253
|
+
i0.ɵɵconditionalCreate(37, MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_For_1_Conditional_37_Template, 5, 1, "div", 68);
|
|
254
|
+
i0.ɵɵconditionalCreate(38, MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_For_1_Conditional_38_Template, 5, 1, "div", 68);
|
|
255
|
+
i0.ɵɵelementStart(39, "div", 65)(40, "span", 66);
|
|
252
256
|
i0.ɵɵtext(41, "Last Sync");
|
|
253
257
|
i0.ɵɵelementEnd();
|
|
254
|
-
i0.ɵɵelementStart(42, "span",
|
|
258
|
+
i0.ɵɵelementStart(42, "span", 67);
|
|
255
259
|
i0.ɵɵtext(43);
|
|
256
260
|
i0.ɵɵelementEnd()()()();
|
|
257
|
-
i0.ɵɵconditionalCreate(44, MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_For_1_Conditional_44_Template, 7, 2, "div",
|
|
261
|
+
i0.ɵɵconditionalCreate(44, MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_For_1_Conditional_44_Template, 7, 2, "div", 69);
|
|
258
262
|
i0.ɵɵelementEnd();
|
|
259
263
|
} if (rf & 2) {
|
|
260
264
|
const server_r9 = ctx.$implicit;
|
|
@@ -290,14 +294,14 @@ function MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_For_1_Templat
|
|
|
290
294
|
i0.ɵɵconditional(ctx_r1.isServerExpanded(server_r9) ? 44 : -1);
|
|
291
295
|
} }
|
|
292
296
|
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",
|
|
297
|
+
i0.ɵɵrepeaterCreate(0, MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_For_1_Template, 45, 18, "div", 50, _forTrack0);
|
|
294
298
|
} if (rf & 2) {
|
|
295
299
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
296
300
|
i0.ɵɵrepeater(ctx_r1.filteredServers);
|
|
297
301
|
} }
|
|
298
302
|
function MCPDashboardComponent_Conditional_17_Case_0_Template(rf, ctx) { if (rf & 1) {
|
|
299
|
-
i0.ɵɵelementStart(0, "div",
|
|
300
|
-
i0.ɵɵconditionalCreate(1, MCPDashboardComponent_Conditional_17_Case_0_Conditional_1_Template, 6, 0, "div",
|
|
303
|
+
i0.ɵɵelementStart(0, "div", 45);
|
|
304
|
+
i0.ɵɵconditionalCreate(1, MCPDashboardComponent_Conditional_17_Case_0_Conditional_1_Template, 6, 0, "div", 48)(2, MCPDashboardComponent_Conditional_17_Case_0_Conditional_2_Template, 2, 0);
|
|
301
305
|
i0.ɵɵelementEnd();
|
|
302
306
|
} if (rf & 2) {
|
|
303
307
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -306,8 +310,8 @@ function MCPDashboardComponent_Conditional_17_Case_0_Template(rf, ctx) { if (rf
|
|
|
306
310
|
} }
|
|
307
311
|
function MCPDashboardComponent_Conditional_17_Case_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
308
312
|
const _r12 = i0.ɵɵgetCurrentView();
|
|
309
|
-
i0.ɵɵelementStart(0, "div",
|
|
310
|
-
i0.ɵɵelement(1, "i",
|
|
313
|
+
i0.ɵɵelementStart(0, "div", 48);
|
|
314
|
+
i0.ɵɵelement(1, "i", 83);
|
|
311
315
|
i0.ɵɵelementStart(2, "p");
|
|
312
316
|
i0.ɵɵtext(3, "No connections configured");
|
|
313
317
|
i0.ɵɵelementEnd();
|
|
@@ -317,15 +321,15 @@ function MCPDashboardComponent_Conditional_17_Case_1_Conditional_1_Template(rf,
|
|
|
317
321
|
i0.ɵɵelementEnd()();
|
|
318
322
|
} }
|
|
319
323
|
function MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
320
|
-
i0.ɵɵelement(0, "i",
|
|
324
|
+
i0.ɵɵelement(0, "i", 85);
|
|
321
325
|
} }
|
|
322
326
|
function MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
323
|
-
i0.ɵɵelement(0, "i",
|
|
327
|
+
i0.ɵɵelement(0, "i", 86);
|
|
324
328
|
} }
|
|
325
329
|
function MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
326
|
-
i0.ɵɵelementStart(0, "div",
|
|
327
|
-
i0.ɵɵelement(1, "i",
|
|
328
|
-
i0.ɵɵelementStart(2, "span",
|
|
330
|
+
i0.ɵɵelementStart(0, "div", 87);
|
|
331
|
+
i0.ɵɵelement(1, "i", 90);
|
|
332
|
+
i0.ɵɵelementStart(2, "span", 91);
|
|
329
333
|
i0.ɵɵtext(3);
|
|
330
334
|
i0.ɵɵelementEnd()();
|
|
331
335
|
} if (rf & 2) {
|
|
@@ -335,7 +339,7 @@ function MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditi
|
|
|
335
339
|
i0.ɵɵtextInterpolate(ctx_r1.getSyncProgressMessage(conn_r14.ID) || "Syncing...");
|
|
336
340
|
} }
|
|
337
341
|
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",
|
|
342
|
+
i0.ɵɵelement(0, "i", 93);
|
|
339
343
|
i0.ɵɵelementStart(1, "span");
|
|
340
344
|
i0.ɵɵtext(2);
|
|
341
345
|
i0.ɵɵelementEnd();
|
|
@@ -347,7 +351,7 @@ function MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditi
|
|
|
347
351
|
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 ");
|
|
348
352
|
} }
|
|
349
353
|
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",
|
|
354
|
+
i0.ɵɵelement(0, "i", 94);
|
|
351
355
|
i0.ɵɵelementStart(1, "span");
|
|
352
356
|
i0.ɵɵtext(2);
|
|
353
357
|
i0.ɵɵelementEnd();
|
|
@@ -359,7 +363,7 @@ function MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditi
|
|
|
359
363
|
i0.ɵɵtextInterpolate((tmp_15_0 = ctx_r1.getSyncState(conn_r14.ID)) == null ? null : tmp_15_0.lastResult == null ? null : tmp_15_0.lastResult.ErrorMessage);
|
|
360
364
|
} }
|
|
361
365
|
function MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
362
|
-
i0.ɵɵelementStart(0, "div",
|
|
366
|
+
i0.ɵɵelementStart(0, "div", 92);
|
|
363
367
|
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);
|
|
364
368
|
i0.ɵɵelementEnd();
|
|
365
369
|
} if (rf & 2) {
|
|
@@ -373,7 +377,7 @@ function MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditi
|
|
|
373
377
|
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);
|
|
374
378
|
} }
|
|
375
379
|
function MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
376
|
-
i0.ɵɵelementStart(0, "p",
|
|
380
|
+
i0.ɵɵelementStart(0, "p", 63);
|
|
377
381
|
i0.ɵɵtext(1);
|
|
378
382
|
i0.ɵɵelementEnd();
|
|
379
383
|
} if (rf & 2) {
|
|
@@ -382,10 +386,10 @@ function MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditi
|
|
|
382
386
|
i0.ɵɵtextInterpolate(conn_r14.Description);
|
|
383
387
|
} }
|
|
384
388
|
function MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_42_Template(rf, ctx) { if (rf & 1) {
|
|
385
|
-
i0.ɵɵelementStart(0, "div",
|
|
389
|
+
i0.ɵɵelementStart(0, "div", 89)(1, "span", 66);
|
|
386
390
|
i0.ɵɵtext(2, "Last Error");
|
|
387
391
|
i0.ɵɵelementEnd();
|
|
388
|
-
i0.ɵɵelementStart(3, "span",
|
|
392
|
+
i0.ɵɵelementStart(3, "span", 67);
|
|
389
393
|
i0.ɵɵtext(4);
|
|
390
394
|
i0.ɵɵelementEnd()();
|
|
391
395
|
} if (rf & 2) {
|
|
@@ -394,23 +398,23 @@ function MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditi
|
|
|
394
398
|
i0.ɵɵtextInterpolate(conn_r14.LastErrorMessage);
|
|
395
399
|
} }
|
|
396
400
|
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",
|
|
398
|
-
i0.ɵɵelement(1, "i",
|
|
401
|
+
i0.ɵɵelementStart(0, "div", 74);
|
|
402
|
+
i0.ɵɵelement(1, "i", 76);
|
|
399
403
|
i0.ɵɵtext(2, " No tools discovered yet. Click the sync button to discover tools. ");
|
|
400
404
|
i0.ɵɵelementEnd();
|
|
401
405
|
} }
|
|
402
406
|
function MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_43_Conditional_6_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
403
407
|
const _r15 = i0.ɵɵgetCurrentView();
|
|
404
|
-
i0.ɵɵelementStart(0, "div",
|
|
408
|
+
i0.ɵɵelementStart(0, "div", 77)(1, "div", 78)(2, "span", 79);
|
|
405
409
|
i0.ɵɵtext(3);
|
|
406
410
|
i0.ɵɵelementEnd();
|
|
407
|
-
i0.ɵɵelementStart(4, "span",
|
|
408
|
-
i0.ɵɵelement(5, "i",
|
|
411
|
+
i0.ɵɵelementStart(4, "span", 80);
|
|
412
|
+
i0.ɵɵelement(5, "i", 81);
|
|
409
413
|
i0.ɵɵtext(6);
|
|
410
414
|
i0.ɵɵelementEnd()();
|
|
411
|
-
i0.ɵɵelementStart(7, "button",
|
|
415
|
+
i0.ɵɵelementStart(7, "button", 95);
|
|
412
416
|
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",
|
|
417
|
+
i0.ɵɵelement(8, "i", 40);
|
|
414
418
|
i0.ɵɵelementEnd()();
|
|
415
419
|
} if (rf & 2) {
|
|
416
420
|
const tool_r16 = ctx.$implicit;
|
|
@@ -421,8 +425,8 @@ function MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditi
|
|
|
421
425
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.getParamCount(tool_r16), " params ");
|
|
422
426
|
} }
|
|
423
427
|
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",
|
|
425
|
-
i0.ɵɵrepeaterCreate(1, MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_43_Conditional_6_For_2_Template, 9, 2, "div",
|
|
428
|
+
i0.ɵɵelementStart(0, "div", 75);
|
|
429
|
+
i0.ɵɵrepeaterCreate(1, MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_43_Conditional_6_For_2_Template, 9, 2, "div", 77, _forTrack0);
|
|
426
430
|
i0.ɵɵelementEnd();
|
|
427
431
|
} if (rf & 2) {
|
|
428
432
|
const conn_r14 = i0.ɵɵnextContext(2).$implicit;
|
|
@@ -431,12 +435,12 @@ function MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditi
|
|
|
431
435
|
i0.ɵɵrepeater(ctx_r1.getToolsForConnection(conn_r14.ID));
|
|
432
436
|
} }
|
|
433
437
|
function MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_43_Template(rf, ctx) { if (rf & 1) {
|
|
434
|
-
i0.ɵɵelementStart(0, "div",
|
|
435
|
-
i0.ɵɵelement(2, "i",
|
|
438
|
+
i0.ɵɵelementStart(0, "div", 69)(1, "div", 72);
|
|
439
|
+
i0.ɵɵelement(2, "i", 73);
|
|
436
440
|
i0.ɵɵelementStart(3, "span");
|
|
437
441
|
i0.ɵɵtext(4);
|
|
438
442
|
i0.ɵɵelementEnd()();
|
|
439
|
-
i0.ɵɵconditionalCreate(5, MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_43_Conditional_5_Template, 3, 0, "div",
|
|
443
|
+
i0.ɵɵconditionalCreate(5, MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_43_Conditional_5_Template, 3, 0, "div", 74)(6, MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_43_Conditional_6_Template, 3, 0, "div", 75);
|
|
440
444
|
i0.ɵɵelementEnd();
|
|
441
445
|
} if (rf & 2) {
|
|
442
446
|
const conn_r14 = i0.ɵɵnextContext().$implicit;
|
|
@@ -448,61 +452,61 @@ function MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditi
|
|
|
448
452
|
} }
|
|
449
453
|
function MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Template(rf, ctx) { if (rf & 1) {
|
|
450
454
|
const _r13 = i0.ɵɵgetCurrentView();
|
|
451
|
-
i0.ɵɵelementStart(0, "div",
|
|
455
|
+
i0.ɵɵelementStart(0, "div", 51)(1, "div", 52);
|
|
452
456
|
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",
|
|
454
|
-
i0.ɵɵelement(3, "i",
|
|
455
|
-
i0.ɵɵelementStart(5, "span",
|
|
457
|
+
i0.ɵɵelementStart(2, "div", 53);
|
|
458
|
+
i0.ɵɵelement(3, "i", 54)(4, "i", 83);
|
|
459
|
+
i0.ɵɵelementStart(5, "span", 55);
|
|
456
460
|
i0.ɵɵtext(6);
|
|
457
461
|
i0.ɵɵelementEnd();
|
|
458
|
-
i0.ɵɵelementStart(7, "span",
|
|
462
|
+
i0.ɵɵelementStart(7, "span", 56);
|
|
459
463
|
i0.ɵɵtext(8);
|
|
460
464
|
i0.ɵɵelementEnd()();
|
|
461
|
-
i0.ɵɵelementStart(9, "div",
|
|
465
|
+
i0.ɵɵelementStart(9, "div", 57);
|
|
462
466
|
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",
|
|
467
|
+
i0.ɵɵelementStart(10, "button", 84);
|
|
464
468
|
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",
|
|
469
|
+
i0.ɵɵconditionalCreate(11, MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_11_Template, 1, 0, "i", 85)(12, MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_12_Template, 1, 0, "i", 86);
|
|
466
470
|
i0.ɵɵelementEnd();
|
|
467
|
-
i0.ɵɵelementStart(13, "button",
|
|
471
|
+
i0.ɵɵelementStart(13, "button", 58);
|
|
468
472
|
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",
|
|
473
|
+
i0.ɵɵelement(14, "i", 59);
|
|
470
474
|
i0.ɵɵelementEnd();
|
|
471
|
-
i0.ɵɵelementStart(15, "button",
|
|
475
|
+
i0.ɵɵelementStart(15, "button", 60);
|
|
472
476
|
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",
|
|
477
|
+
i0.ɵɵelement(16, "i", 61);
|
|
474
478
|
i0.ɵɵelementEnd()()();
|
|
475
|
-
i0.ɵɵconditionalCreate(17, MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_17_Template, 4, 1, "div",
|
|
476
|
-
i0.ɵɵconditionalCreate(18, MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_18_Template, 3, 5, "div",
|
|
477
|
-
i0.ɵɵelementStart(19, "div",
|
|
478
|
-
i0.ɵɵconditionalCreate(20, MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_20_Template, 2, 1, "p",
|
|
479
|
-
i0.ɵɵelementStart(21, "div",
|
|
479
|
+
i0.ɵɵconditionalCreate(17, MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_17_Template, 4, 1, "div", 87);
|
|
480
|
+
i0.ɵɵconditionalCreate(18, MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_18_Template, 3, 5, "div", 88);
|
|
481
|
+
i0.ɵɵelementStart(19, "div", 62);
|
|
482
|
+
i0.ɵɵconditionalCreate(20, MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_20_Template, 2, 1, "p", 63);
|
|
483
|
+
i0.ɵɵelementStart(21, "div", 64)(22, "div", 65)(23, "span", 66);
|
|
480
484
|
i0.ɵɵtext(24, "Server");
|
|
481
485
|
i0.ɵɵelementEnd();
|
|
482
|
-
i0.ɵɵelementStart(25, "span",
|
|
486
|
+
i0.ɵɵelementStart(25, "span", 67);
|
|
483
487
|
i0.ɵɵtext(26);
|
|
484
488
|
i0.ɵɵelementEnd()();
|
|
485
|
-
i0.ɵɵelementStart(27, "div",
|
|
489
|
+
i0.ɵɵelementStart(27, "div", 65)(28, "span", 66);
|
|
486
490
|
i0.ɵɵtext(29, "Auto Sync");
|
|
487
491
|
i0.ɵɵelementEnd();
|
|
488
|
-
i0.ɵɵelementStart(30, "span",
|
|
492
|
+
i0.ɵɵelementStart(30, "span", 67);
|
|
489
493
|
i0.ɵɵtext(31);
|
|
490
494
|
i0.ɵɵelementEnd()();
|
|
491
|
-
i0.ɵɵelementStart(32, "div",
|
|
495
|
+
i0.ɵɵelementStart(32, "div", 65)(33, "span", 66);
|
|
492
496
|
i0.ɵɵtext(34, "Logging");
|
|
493
497
|
i0.ɵɵelementEnd();
|
|
494
|
-
i0.ɵɵelementStart(35, "span",
|
|
498
|
+
i0.ɵɵelementStart(35, "span", 67);
|
|
495
499
|
i0.ɵɵtext(36);
|
|
496
500
|
i0.ɵɵelementEnd()();
|
|
497
|
-
i0.ɵɵelementStart(37, "div",
|
|
501
|
+
i0.ɵɵelementStart(37, "div", 65)(38, "span", 66);
|
|
498
502
|
i0.ɵɵtext(39, "Last Connected");
|
|
499
503
|
i0.ɵɵelementEnd();
|
|
500
|
-
i0.ɵɵelementStart(40, "span",
|
|
504
|
+
i0.ɵɵelementStart(40, "span", 67);
|
|
501
505
|
i0.ɵɵtext(41);
|
|
502
506
|
i0.ɵɵelementEnd()();
|
|
503
|
-
i0.ɵɵconditionalCreate(42, MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_42_Template, 5, 1, "div",
|
|
507
|
+
i0.ɵɵconditionalCreate(42, MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_42_Template, 5, 1, "div", 89);
|
|
504
508
|
i0.ɵɵelementEnd()();
|
|
505
|
-
i0.ɵɵconditionalCreate(43, MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_43_Template, 7, 2, "div",
|
|
509
|
+
i0.ɵɵconditionalCreate(43, MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Conditional_43_Template, 7, 2, "div", 69);
|
|
506
510
|
i0.ɵɵelementEnd();
|
|
507
511
|
} if (rf & 2) {
|
|
508
512
|
let tmp_21_0;
|
|
@@ -541,14 +545,14 @@ function MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Templat
|
|
|
541
545
|
i0.ɵɵconditional(ctx_r1.isConnectionExpanded(conn_r14) ? 43 : -1);
|
|
542
546
|
} }
|
|
543
547
|
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",
|
|
548
|
+
i0.ɵɵrepeaterCreate(0, MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_For_1_Template, 44, 18, "div", 50, _forTrack0);
|
|
545
549
|
} if (rf & 2) {
|
|
546
550
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
547
551
|
i0.ɵɵrepeater(ctx_r1.filteredConnections);
|
|
548
552
|
} }
|
|
549
553
|
function MCPDashboardComponent_Conditional_17_Case_1_Template(rf, ctx) { if (rf & 1) {
|
|
550
|
-
i0.ɵɵelementStart(0, "div",
|
|
551
|
-
i0.ɵɵconditionalCreate(1, MCPDashboardComponent_Conditional_17_Case_1_Conditional_1_Template, 6, 0, "div",
|
|
554
|
+
i0.ɵɵelementStart(0, "div", 46);
|
|
555
|
+
i0.ɵɵconditionalCreate(1, MCPDashboardComponent_Conditional_17_Case_1_Conditional_1_Template, 6, 0, "div", 48)(2, MCPDashboardComponent_Conditional_17_Case_1_Conditional_2_Template, 2, 0);
|
|
552
556
|
i0.ɵɵelementEnd();
|
|
553
557
|
} if (rf & 2) {
|
|
554
558
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -557,19 +561,19 @@ function MCPDashboardComponent_Conditional_17_Case_1_Template(rf, ctx) { if (rf
|
|
|
557
561
|
} }
|
|
558
562
|
function MCPDashboardComponent_Conditional_17_Case_2_Conditional_0_For_10_Template(rf, ctx) { if (rf & 1) {
|
|
559
563
|
const _r18 = i0.ɵɵgetCurrentView();
|
|
560
|
-
i0.ɵɵelementStart(0, "div",
|
|
561
|
-
i0.ɵɵelement(1, "i",
|
|
562
|
-
i0.ɵɵelementStart(2, "div",
|
|
564
|
+
i0.ɵɵelementStart(0, "div", 99);
|
|
565
|
+
i0.ɵɵelement(1, "i", 101);
|
|
566
|
+
i0.ɵɵelementStart(2, "div", 102)(3, "div", 103);
|
|
563
567
|
i0.ɵɵtext(4);
|
|
564
568
|
i0.ɵɵelementEnd();
|
|
565
|
-
i0.ɵɵelementStart(5, "div",
|
|
569
|
+
i0.ɵɵelementStart(5, "div", 104);
|
|
566
570
|
i0.ɵɵtext(6);
|
|
567
571
|
i0.ɵɵelementEnd()();
|
|
568
|
-
i0.ɵɵelementStart(7, "button",
|
|
572
|
+
i0.ɵɵelementStart(7, "button", 105);
|
|
569
573
|
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)); });
|
|
570
574
|
i0.ɵɵelement(8, "i");
|
|
571
575
|
i0.ɵɵelementEnd();
|
|
572
|
-
i0.ɵɵelementStart(9, "span",
|
|
576
|
+
i0.ɵɵelementStart(9, "span", 106);
|
|
573
577
|
i0.ɵɵtext(10);
|
|
574
578
|
i0.ɵɵelementEnd()();
|
|
575
579
|
} if (rf & 2) {
|
|
@@ -590,13 +594,13 @@ function MCPDashboardComponent_Conditional_17_Case_2_Conditional_0_For_10_Templa
|
|
|
590
594
|
i0.ɵɵtextInterpolate(tool_r19.Status);
|
|
591
595
|
} }
|
|
592
596
|
function MCPDashboardComponent_Conditional_17_Case_2_Conditional_0_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
593
|
-
i0.ɵɵelementStart(0, "div",
|
|
597
|
+
i0.ɵɵelementStart(0, "div", 100);
|
|
594
598
|
i0.ɵɵtext(1, "Loading more\u2026");
|
|
595
599
|
i0.ɵɵelementEnd();
|
|
596
600
|
} }
|
|
597
601
|
function MCPDashboardComponent_Conditional_17_Case_2_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
598
602
|
const _r17 = i0.ɵɵgetCurrentView();
|
|
599
|
-
i0.ɵɵelementStart(0, "div",
|
|
603
|
+
i0.ɵɵelementStart(0, "div", 97);
|
|
600
604
|
i0.ɵɵtext(1, " Showing ");
|
|
601
605
|
i0.ɵɵelementStart(2, "strong");
|
|
602
606
|
i0.ɵɵtext(3);
|
|
@@ -607,10 +611,10 @@ function MCPDashboardComponent_Conditional_17_Case_2_Conditional_0_Template(rf,
|
|
|
607
611
|
i0.ɵɵelementEnd();
|
|
608
612
|
i0.ɵɵtext(7, " tools ");
|
|
609
613
|
i0.ɵɵelementEnd();
|
|
610
|
-
i0.ɵɵelementStart(8, "div",
|
|
614
|
+
i0.ɵɵelementStart(8, "div", 98);
|
|
611
615
|
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",
|
|
613
|
-
i0.ɵɵconditionalCreate(11, MCPDashboardComponent_Conditional_17_Case_2_Conditional_0_Conditional_11_Template, 2, 0, "div",
|
|
616
|
+
i0.ɵɵrepeaterCreate(9, MCPDashboardComponent_Conditional_17_Case_2_Conditional_0_For_10_Template, 11, 10, "div", 99, _forTrack0);
|
|
617
|
+
i0.ɵɵconditionalCreate(11, MCPDashboardComponent_Conditional_17_Case_2_Conditional_0_Conditional_11_Template, 2, 0, "div", 100);
|
|
614
618
|
i0.ɵɵelementEnd();
|
|
615
619
|
} if (rf & 2) {
|
|
616
620
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -624,17 +628,17 @@ function MCPDashboardComponent_Conditional_17_Case_2_Conditional_0_Template(rf,
|
|
|
624
628
|
i0.ɵɵconditional(ctx_r1.toolsLoading ? 11 : -1);
|
|
625
629
|
} }
|
|
626
630
|
function MCPDashboardComponent_Conditional_17_Case_2_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
627
|
-
i0.ɵɵelementStart(0, "div",
|
|
628
|
-
i0.ɵɵelement(1, "i",
|
|
631
|
+
i0.ɵɵelementStart(0, "div", 48);
|
|
632
|
+
i0.ɵɵelement(1, "i", 73);
|
|
629
633
|
i0.ɵɵelementStart(2, "p");
|
|
630
634
|
i0.ɵɵtext(3, "No tools discovered yet");
|
|
631
635
|
i0.ɵɵelementEnd();
|
|
632
|
-
i0.ɵɵelementStart(4, "span",
|
|
636
|
+
i0.ɵɵelementStart(4, "span", 107);
|
|
633
637
|
i0.ɵɵtext(5, "Tools are discovered when connections sync with MCP servers");
|
|
634
638
|
i0.ɵɵelementEnd()();
|
|
635
639
|
} }
|
|
636
640
|
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",
|
|
641
|
+
i0.ɵɵelementStart(0, "p", 125);
|
|
638
642
|
i0.ɵɵtext(1);
|
|
639
643
|
i0.ɵɵelementEnd();
|
|
640
644
|
} if (rf & 2) {
|
|
@@ -643,10 +647,10 @@ function MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditi
|
|
|
643
647
|
i0.ɵɵtextInterpolate(tool_r23.ToolDescription);
|
|
644
648
|
} }
|
|
645
649
|
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",
|
|
650
|
+
i0.ɵɵelementStart(0, "div", 133)(1, "span", 130);
|
|
647
651
|
i0.ɵɵtext(2, "Input Schema:");
|
|
648
652
|
i0.ɵɵelementEnd();
|
|
649
|
-
i0.ɵɵelementStart(3, "pre",
|
|
653
|
+
i0.ɵɵelementStart(3, "pre", 134);
|
|
650
654
|
i0.ɵɵtext(4);
|
|
651
655
|
i0.ɵɵelementEnd()();
|
|
652
656
|
} if (rf & 2) {
|
|
@@ -656,31 +660,31 @@ function MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditi
|
|
|
656
660
|
i0.ɵɵtextInterpolate(ctx_r1.getFormattedInputSchema(tool_r23));
|
|
657
661
|
} }
|
|
658
662
|
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",
|
|
663
|
+
i0.ɵɵelementStart(0, "div", 128)(1, "div", 129)(2, "span", 130);
|
|
660
664
|
i0.ɵɵtext(3, "Tool Name:");
|
|
661
665
|
i0.ɵɵelementEnd();
|
|
662
|
-
i0.ɵɵelementStart(4, "span",
|
|
666
|
+
i0.ɵɵelementStart(4, "span", 131);
|
|
663
667
|
i0.ɵɵtext(5);
|
|
664
668
|
i0.ɵɵelementEnd()();
|
|
665
|
-
i0.ɵɵelementStart(6, "div",
|
|
669
|
+
i0.ɵɵelementStart(6, "div", 129)(7, "span", 130);
|
|
666
670
|
i0.ɵɵtext(8, "Parameters:");
|
|
667
671
|
i0.ɵɵelementEnd();
|
|
668
|
-
i0.ɵɵelementStart(9, "span",
|
|
672
|
+
i0.ɵɵelementStart(9, "span", 132);
|
|
669
673
|
i0.ɵɵtext(10);
|
|
670
674
|
i0.ɵɵelementEnd()();
|
|
671
|
-
i0.ɵɵelementStart(11, "div",
|
|
675
|
+
i0.ɵɵelementStart(11, "div", 129)(12, "span", 130);
|
|
672
676
|
i0.ɵɵtext(13, "Discovered:");
|
|
673
677
|
i0.ɵɵelementEnd();
|
|
674
|
-
i0.ɵɵelementStart(14, "span",
|
|
678
|
+
i0.ɵɵelementStart(14, "span", 132);
|
|
675
679
|
i0.ɵɵtext(15);
|
|
676
680
|
i0.ɵɵelementEnd()();
|
|
677
|
-
i0.ɵɵelementStart(16, "div",
|
|
681
|
+
i0.ɵɵelementStart(16, "div", 129)(17, "span", 130);
|
|
678
682
|
i0.ɵɵtext(18, "Last Seen:");
|
|
679
683
|
i0.ɵɵelementEnd();
|
|
680
|
-
i0.ɵɵelementStart(19, "span",
|
|
684
|
+
i0.ɵɵelementStart(19, "span", 132);
|
|
681
685
|
i0.ɵɵtext(20);
|
|
682
686
|
i0.ɵɵelementEnd()();
|
|
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",
|
|
687
|
+
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", 133);
|
|
684
688
|
i0.ɵɵelementEnd();
|
|
685
689
|
} if (rf & 2) {
|
|
686
690
|
const tool_r23 = i0.ɵɵnextContext().$implicit;
|
|
@@ -698,36 +702,36 @@ function MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditi
|
|
|
698
702
|
} }
|
|
699
703
|
function MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditional_14_Conditional_0_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
700
704
|
const _r22 = i0.ɵɵgetCurrentView();
|
|
701
|
-
i0.ɵɵelementStart(0, "div",
|
|
705
|
+
i0.ɵɵelementStart(0, "div", 120)(1, "div", 121);
|
|
702
706
|
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",
|
|
704
|
-
i0.ɵɵelement(3, "i",
|
|
705
|
-
i0.ɵɵelementStart(4, "span",
|
|
707
|
+
i0.ɵɵelementStart(2, "div", 122);
|
|
708
|
+
i0.ɵɵelement(3, "i", 73);
|
|
709
|
+
i0.ɵɵelementStart(4, "span", 55);
|
|
706
710
|
i0.ɵɵtext(5);
|
|
707
711
|
i0.ɵɵelementEnd()();
|
|
708
|
-
i0.ɵɵelementStart(6, "div",
|
|
709
|
-
i0.ɵɵelement(8, "i",
|
|
712
|
+
i0.ɵɵelementStart(6, "div", 123)(7, "span", 124);
|
|
713
|
+
i0.ɵɵelement(8, "i", 81);
|
|
710
714
|
i0.ɵɵtext(9);
|
|
711
715
|
i0.ɵɵelementEnd();
|
|
712
|
-
i0.ɵɵelementStart(10, "span",
|
|
716
|
+
i0.ɵɵelementStart(10, "span", 106);
|
|
713
717
|
i0.ɵɵtext(11);
|
|
714
718
|
i0.ɵɵelementEnd()()();
|
|
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",
|
|
716
|
-
i0.ɵɵelementStart(13, "div",
|
|
719
|
+
i0.ɵɵconditionalCreate(12, MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditional_14_Conditional_0_For_2_Conditional_12_Template, 2, 1, "p", 125);
|
|
720
|
+
i0.ɵɵelementStart(13, "div", 126)(14, "button", 105);
|
|
717
721
|
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)); });
|
|
718
722
|
i0.ɵɵelement(15, "i");
|
|
719
723
|
i0.ɵɵelementEnd();
|
|
720
|
-
i0.ɵɵelementStart(16, "button",
|
|
724
|
+
i0.ɵɵelementStart(16, "button", 82);
|
|
721
725
|
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",
|
|
726
|
+
i0.ɵɵelement(17, "i", 40);
|
|
723
727
|
i0.ɵɵtext(18, " Test ");
|
|
724
728
|
i0.ɵɵelementEnd();
|
|
725
|
-
i0.ɵɵelementStart(19, "button",
|
|
729
|
+
i0.ɵɵelementStart(19, "button", 127);
|
|
726
730
|
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",
|
|
731
|
+
i0.ɵɵelement(20, "i", 39);
|
|
728
732
|
i0.ɵɵtext(21);
|
|
729
733
|
i0.ɵɵelementEnd()();
|
|
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",
|
|
734
|
+
i0.ɵɵconditionalCreate(22, MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditional_14_Conditional_0_For_2_Conditional_22_Template, 22, 6, "div", 128);
|
|
731
735
|
i0.ɵɵelementEnd();
|
|
732
736
|
} if (rf & 2) {
|
|
733
737
|
const tool_r23 = ctx.$implicit;
|
|
@@ -756,8 +760,8 @@ function MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditi
|
|
|
756
760
|
i0.ɵɵconditional(ctx_r1.isToolExpanded(tool_r23) ? 22 : -1);
|
|
757
761
|
} }
|
|
758
762
|
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",
|
|
760
|
-
i0.ɵɵrepeaterCreate(1, MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditional_14_Conditional_0_For_2_Template, 23, 18, "div",
|
|
763
|
+
i0.ɵɵelementStart(0, "div", 117);
|
|
764
|
+
i0.ɵɵrepeaterCreate(1, MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditional_14_Conditional_0_For_2_Template, 23, 18, "div", 119, _forTrack0);
|
|
761
765
|
i0.ɵɵelementEnd();
|
|
762
766
|
} if (rf & 2) {
|
|
763
767
|
const group_r21 = i0.ɵɵnextContext(2).$implicit;
|
|
@@ -765,7 +769,7 @@ function MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditi
|
|
|
765
769
|
i0.ɵɵrepeater(group_r21.tools);
|
|
766
770
|
} }
|
|
767
771
|
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",
|
|
772
|
+
i0.ɵɵelementStart(0, "span", 137);
|
|
769
773
|
i0.ɵɵtext(1);
|
|
770
774
|
i0.ɵɵelementEnd();
|
|
771
775
|
} if (rf & 2) {
|
|
@@ -774,10 +778,10 @@ function MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditi
|
|
|
774
778
|
i0.ɵɵtextInterpolate(tool_r25.ToolName);
|
|
775
779
|
} }
|
|
776
780
|
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",
|
|
781
|
+
i0.ɵɵelementStart(0, "div", 148)(1, "span", 130);
|
|
778
782
|
i0.ɵɵtext(2, "Input Schema:");
|
|
779
783
|
i0.ɵɵelementEnd();
|
|
780
|
-
i0.ɵɵelementStart(3, "pre",
|
|
784
|
+
i0.ɵɵelementStart(3, "pre", 134);
|
|
781
785
|
i0.ɵɵtext(4);
|
|
782
786
|
i0.ɵɵelementEnd()();
|
|
783
787
|
} if (rf & 2) {
|
|
@@ -787,25 +791,25 @@ function MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditi
|
|
|
787
791
|
i0.ɵɵtextInterpolate(ctx_r1.getFormattedInputSchema(tool_r25));
|
|
788
792
|
} }
|
|
789
793
|
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",
|
|
794
|
+
i0.ɵɵelementStart(0, "tr", 144)(1, "td", 145)(2, "div", 146)(3, "div", 147)(4, "span", 130);
|
|
791
795
|
i0.ɵɵtext(5, "Tool Name:");
|
|
792
796
|
i0.ɵɵelementEnd();
|
|
793
|
-
i0.ɵɵelementStart(6, "span",
|
|
797
|
+
i0.ɵɵelementStart(6, "span", 131);
|
|
794
798
|
i0.ɵɵtext(7);
|
|
795
799
|
i0.ɵɵelementEnd()();
|
|
796
|
-
i0.ɵɵelementStart(8, "div",
|
|
800
|
+
i0.ɵɵelementStart(8, "div", 147)(9, "span", 130);
|
|
797
801
|
i0.ɵɵtext(10, "Discovered:");
|
|
798
802
|
i0.ɵɵelementEnd();
|
|
799
|
-
i0.ɵɵelementStart(11, "span",
|
|
803
|
+
i0.ɵɵelementStart(11, "span", 132);
|
|
800
804
|
i0.ɵɵtext(12);
|
|
801
805
|
i0.ɵɵelementEnd()();
|
|
802
|
-
i0.ɵɵelementStart(13, "div",
|
|
806
|
+
i0.ɵɵelementStart(13, "div", 147)(14, "span", 130);
|
|
803
807
|
i0.ɵɵtext(15, "Required Params:");
|
|
804
808
|
i0.ɵɵelementEnd();
|
|
805
|
-
i0.ɵɵelementStart(16, "span",
|
|
809
|
+
i0.ɵɵelementStart(16, "span", 132);
|
|
806
810
|
i0.ɵɵtext(17);
|
|
807
811
|
i0.ɵɵelementEnd()();
|
|
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",
|
|
812
|
+
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", 148);
|
|
809
813
|
i0.ɵɵelementEnd()()();
|
|
810
814
|
} if (rf & 2) {
|
|
811
815
|
const tool_r25 = i0.ɵɵnextContext().$implicit;
|
|
@@ -821,38 +825,38 @@ function MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditi
|
|
|
821
825
|
} }
|
|
822
826
|
function MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditional_14_Conditional_1_For_18_Template(rf, ctx) { if (rf & 1) {
|
|
823
827
|
const _r24 = i0.ɵɵgetCurrentView();
|
|
824
|
-
i0.ɵɵelementStart(0, "tr")(1, "td",
|
|
825
|
-
i0.ɵɵelement(2, "i",
|
|
826
|
-
i0.ɵɵelementStart(3, "div",
|
|
828
|
+
i0.ɵɵelementStart(0, "tr")(1, "td", 135);
|
|
829
|
+
i0.ɵɵelement(2, "i", 73);
|
|
830
|
+
i0.ɵɵelementStart(3, "div", 136)(4, "span", 122);
|
|
827
831
|
i0.ɵɵtext(5);
|
|
828
832
|
i0.ɵɵelementEnd();
|
|
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",
|
|
833
|
+
i0.ɵɵconditionalCreate(6, MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditional_14_Conditional_1_For_18_Conditional_6_Template, 2, 1, "span", 137);
|
|
830
834
|
i0.ɵɵelementEnd()();
|
|
831
|
-
i0.ɵɵelementStart(7, "td",
|
|
835
|
+
i0.ɵɵelementStart(7, "td", 138);
|
|
832
836
|
i0.ɵɵtext(8);
|
|
833
837
|
i0.ɵɵelementEnd();
|
|
834
|
-
i0.ɵɵelementStart(9, "td")(10, "span",
|
|
838
|
+
i0.ɵɵelementStart(9, "td")(10, "span", 139);
|
|
835
839
|
i0.ɵɵtext(11);
|
|
836
840
|
i0.ɵɵelementEnd()();
|
|
837
|
-
i0.ɵɵelementStart(12, "td")(13, "span",
|
|
841
|
+
i0.ɵɵelementStart(12, "td")(13, "span", 106);
|
|
838
842
|
i0.ɵɵtext(14);
|
|
839
843
|
i0.ɵɵelementEnd()();
|
|
840
844
|
i0.ɵɵelementStart(15, "td");
|
|
841
845
|
i0.ɵɵtext(16);
|
|
842
846
|
i0.ɵɵelementEnd();
|
|
843
|
-
i0.ɵɵelementStart(17, "td",
|
|
847
|
+
i0.ɵɵelementStart(17, "td", 140)(18, "button", 141);
|
|
844
848
|
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)); });
|
|
845
849
|
i0.ɵɵelement(19, "i");
|
|
846
850
|
i0.ɵɵelementEnd();
|
|
847
|
-
i0.ɵɵelementStart(20, "button",
|
|
851
|
+
i0.ɵɵelementStart(20, "button", 142);
|
|
848
852
|
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",
|
|
853
|
+
i0.ɵɵelement(21, "i", 40);
|
|
850
854
|
i0.ɵɵelementEnd();
|
|
851
|
-
i0.ɵɵelementStart(22, "button",
|
|
855
|
+
i0.ɵɵelementStart(22, "button", 143);
|
|
852
856
|
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",
|
|
857
|
+
i0.ɵɵelement(23, "i", 39);
|
|
854
858
|
i0.ɵɵelementEnd()()();
|
|
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",
|
|
859
|
+
i0.ɵɵconditionalCreate(24, MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditional_14_Conditional_1_For_18_Conditional_24_Template, 19, 4, "tr", 144);
|
|
856
860
|
} if (rf & 2) {
|
|
857
861
|
const tool_r25 = ctx.$implicit;
|
|
858
862
|
const ctx_r1 = i0.ɵɵnextContext(7);
|
|
@@ -882,7 +886,7 @@ function MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditi
|
|
|
882
886
|
i0.ɵɵconditional(ctx_r1.isToolExpanded(tool_r25) ? 24 : -1);
|
|
883
887
|
} }
|
|
884
888
|
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",
|
|
889
|
+
i0.ɵɵelementStart(0, "div", 118)(1, "table")(2, "thead")(3, "tr")(4, "th");
|
|
886
890
|
i0.ɵɵtext(5, "Tool");
|
|
887
891
|
i0.ɵɵelementEnd();
|
|
888
892
|
i0.ɵɵelementStart(6, "th");
|
|
@@ -909,31 +913,31 @@ function MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditi
|
|
|
909
913
|
i0.ɵɵrepeater(group_r21.tools);
|
|
910
914
|
} }
|
|
911
915
|
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",
|
|
916
|
+
i0.ɵɵconditionalCreate(0, MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditional_14_Conditional_0_Template, 3, 0, "div", 117)(1, MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditional_14_Conditional_1_Template, 19, 0, "div", 118);
|
|
913
917
|
} if (rf & 2) {
|
|
914
918
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
915
919
|
i0.ɵɵconditional(ctx_r1.ToolsViewMode === "card" ? 0 : 1);
|
|
916
920
|
} }
|
|
917
921
|
function MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
918
922
|
const _r20 = i0.ɵɵgetCurrentView();
|
|
919
|
-
i0.ɵɵelementStart(0, "div",
|
|
923
|
+
i0.ɵɵelementStart(0, "div", 109)(1, "div", 110);
|
|
920
924
|
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",
|
|
922
|
-
i0.ɵɵelement(3, "i",
|
|
923
|
-
i0.ɵɵelementStart(5, "span",
|
|
925
|
+
i0.ɵɵelementStart(2, "div", 111);
|
|
926
|
+
i0.ɵɵelement(3, "i", 112)(4, "i");
|
|
927
|
+
i0.ɵɵelementStart(5, "span", 113);
|
|
924
928
|
i0.ɵɵtext(6);
|
|
925
929
|
i0.ɵɵelementEnd();
|
|
926
|
-
i0.ɵɵelementStart(7, "span",
|
|
930
|
+
i0.ɵɵelementStart(7, "span", 114);
|
|
927
931
|
i0.ɵɵtext(8);
|
|
928
932
|
i0.ɵɵelementEnd();
|
|
929
|
-
i0.ɵɵelementStart(9, "span",
|
|
933
|
+
i0.ɵɵelementStart(9, "span", 106);
|
|
930
934
|
i0.ɵɵtext(10);
|
|
931
935
|
i0.ɵɵelementEnd()();
|
|
932
|
-
i0.ɵɵelementStart(11, "div",
|
|
936
|
+
i0.ɵɵelementStart(11, "div", 115);
|
|
933
937
|
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",
|
|
938
|
+
i0.ɵɵelementStart(12, "button", 116);
|
|
935
939
|
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",
|
|
940
|
+
i0.ɵɵelement(13, "i", 40);
|
|
937
941
|
i0.ɵɵelementEnd()()();
|
|
938
942
|
i0.ɵɵconditionalCreate(14, MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Conditional_14_Template, 2, 1);
|
|
939
943
|
i0.ɵɵelementEnd();
|
|
@@ -957,8 +961,8 @@ function MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Templat
|
|
|
957
961
|
i0.ɵɵconditional(group_r21.expanded ? 14 : -1);
|
|
958
962
|
} }
|
|
959
963
|
function MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
960
|
-
i0.ɵɵelementStart(0, "div",
|
|
961
|
-
i0.ɵɵrepeaterCreate(1, MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Template, 15, 11, "div",
|
|
964
|
+
i0.ɵɵelementStart(0, "div", 96);
|
|
965
|
+
i0.ɵɵrepeaterCreate(1, MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_For_2_Template, 15, 11, "div", 108, _forTrack1);
|
|
962
966
|
i0.ɵɵelementEnd();
|
|
963
967
|
} if (rf & 2) {
|
|
964
968
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -966,45 +970,45 @@ function MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_Template(rf,
|
|
|
966
970
|
i0.ɵɵrepeater(ctx_r1.ServerGroups);
|
|
967
971
|
} }
|
|
968
972
|
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",
|
|
973
|
+
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", 48)(2, MCPDashboardComponent_Conditional_17_Case_2_Conditional_2_Template, 3, 0, "div", 96);
|
|
970
974
|
} if (rf & 2) {
|
|
971
975
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
972
976
|
i0.ɵɵconditional(ctx_r1.useScalablePagination ? 0 : ctx_r1.ServerGroups.length === 0 ? 1 : 2);
|
|
973
977
|
} }
|
|
974
978
|
function MCPDashboardComponent_Conditional_17_Case_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
975
|
-
i0.ɵɵelementStart(0, "div",
|
|
976
|
-
i0.ɵɵelement(1, "i",
|
|
979
|
+
i0.ɵɵelementStart(0, "div", 48);
|
|
980
|
+
i0.ɵɵelement(1, "i", 149);
|
|
977
981
|
i0.ɵɵelementStart(2, "p");
|
|
978
982
|
i0.ɵɵtext(3, "No recent execution logs");
|
|
979
983
|
i0.ɵɵelementEnd();
|
|
980
|
-
i0.ɵɵelementStart(4, "span",
|
|
984
|
+
i0.ɵɵelementStart(4, "span", 107);
|
|
981
985
|
i0.ɵɵtext(5, "Logs appear when tools are executed via MCP connections");
|
|
982
986
|
i0.ɵɵelementEnd()();
|
|
983
987
|
} }
|
|
984
988
|
function MCPDashboardComponent_Conditional_17_Case_3_Conditional_2_For_27_Case_3_Template(rf, ctx) { if (rf & 1) {
|
|
985
|
-
i0.ɵɵelement(0, "i",
|
|
989
|
+
i0.ɵɵelement(0, "i", 93);
|
|
986
990
|
} }
|
|
987
991
|
function MCPDashboardComponent_Conditional_17_Case_3_Conditional_2_For_27_Case_4_Template(rf, ctx) { if (rf & 1) {
|
|
988
|
-
i0.ɵɵelement(0, "i",
|
|
992
|
+
i0.ɵɵelement(0, "i", 154);
|
|
989
993
|
} }
|
|
990
994
|
function MCPDashboardComponent_Conditional_17_Case_3_Conditional_2_For_27_Case_5_Template(rf, ctx) { if (rf & 1) {
|
|
991
|
-
i0.ɵɵelement(0, "i",
|
|
995
|
+
i0.ɵɵelement(0, "i", 155);
|
|
992
996
|
} }
|
|
993
997
|
function MCPDashboardComponent_Conditional_17_Case_3_Conditional_2_For_27_Case_6_Template(rf, ctx) { if (rf & 1) {
|
|
994
|
-
i0.ɵɵelement(0, "i",
|
|
998
|
+
i0.ɵɵelement(0, "i", 156);
|
|
995
999
|
} }
|
|
996
1000
|
function MCPDashboardComponent_Conditional_17_Case_3_Conditional_2_For_27_Template(rf, ctx) { if (rf & 1) {
|
|
997
1001
|
const _r27 = i0.ɵɵgetCurrentView();
|
|
998
|
-
i0.ɵɵelementStart(0, "tr",
|
|
1002
|
+
i0.ɵɵelementStart(0, "tr", 153);
|
|
999
1003
|
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",
|
|
1001
|
-
i0.ɵɵconditionalCreate(3, MCPDashboardComponent_Conditional_17_Case_3_Conditional_2_For_27_Case_3_Template, 1, 0, "i",
|
|
1004
|
+
i0.ɵɵelementStart(1, "td")(2, "span", 56);
|
|
1005
|
+
i0.ɵɵconditionalCreate(3, MCPDashboardComponent_Conditional_17_Case_3_Conditional_2_For_27_Case_3_Template, 1, 0, "i", 93)(4, MCPDashboardComponent_Conditional_17_Case_3_Conditional_2_For_27_Case_4_Template, 1, 0, "i", 154)(5, MCPDashboardComponent_Conditional_17_Case_3_Conditional_2_For_27_Case_5_Template, 1, 0, "i", 155)(6, MCPDashboardComponent_Conditional_17_Case_3_Conditional_2_For_27_Case_6_Template, 1, 0, "i", 156);
|
|
1002
1006
|
i0.ɵɵtext(7);
|
|
1003
1007
|
i0.ɵɵelementEnd()();
|
|
1004
|
-
i0.ɵɵelementStart(8, "td",
|
|
1008
|
+
i0.ɵɵelementStart(8, "td", 113);
|
|
1005
1009
|
i0.ɵɵtext(9);
|
|
1006
1010
|
i0.ɵɵelementEnd();
|
|
1007
|
-
i0.ɵɵelementStart(10, "td",
|
|
1011
|
+
i0.ɵɵelementStart(10, "td", 157);
|
|
1008
1012
|
i0.ɵɵtext(11);
|
|
1009
1013
|
i0.ɵɵelementEnd();
|
|
1010
1014
|
i0.ɵɵelementStart(12, "td");
|
|
@@ -1016,11 +1020,11 @@ function MCPDashboardComponent_Conditional_17_Case_3_Conditional_2_For_27_Templa
|
|
|
1016
1020
|
i0.ɵɵelementStart(16, "td");
|
|
1017
1021
|
i0.ɵɵtext(17);
|
|
1018
1022
|
i0.ɵɵelementEnd();
|
|
1019
|
-
i0.ɵɵelementStart(18, "td",
|
|
1023
|
+
i0.ɵɵelementStart(18, "td", 158);
|
|
1020
1024
|
i0.ɵɵtext(19);
|
|
1021
1025
|
i0.ɵɵelementEnd();
|
|
1022
|
-
i0.ɵɵelementStart(20, "td",
|
|
1023
|
-
i0.ɵɵelement(21, "i",
|
|
1026
|
+
i0.ɵɵelementStart(20, "td", 159);
|
|
1027
|
+
i0.ɵɵelement(21, "i", 160);
|
|
1024
1028
|
i0.ɵɵelementEnd()();
|
|
1025
1029
|
} if (rf & 2) {
|
|
1026
1030
|
let tmp_15_0;
|
|
@@ -1050,45 +1054,45 @@ function MCPDashboardComponent_Conditional_17_Case_3_Conditional_2_For_27_Templa
|
|
|
1050
1054
|
} }
|
|
1051
1055
|
function MCPDashboardComponent_Conditional_17_Case_3_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
1052
1056
|
const _r26 = i0.ɵɵgetCurrentView();
|
|
1053
|
-
i0.ɵɵelementStart(0, "table")(1, "thead")(2, "tr")(3, "th",
|
|
1057
|
+
i0.ɵɵelementStart(0, "table")(1, "thead")(2, "tr")(3, "th", 150);
|
|
1054
1058
|
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")); });
|
|
1055
1059
|
i0.ɵɵtext(4, " Status ");
|
|
1056
|
-
i0.ɵɵelement(5, "i",
|
|
1060
|
+
i0.ɵɵelement(5, "i", 151);
|
|
1057
1061
|
i0.ɵɵelementEnd();
|
|
1058
|
-
i0.ɵɵelementStart(6, "th",
|
|
1062
|
+
i0.ɵɵelementStart(6, "th", 150);
|
|
1059
1063
|
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")); });
|
|
1060
1064
|
i0.ɵɵtext(7, " Server ");
|
|
1061
|
-
i0.ɵɵelement(8, "i",
|
|
1065
|
+
i0.ɵɵelement(8, "i", 151);
|
|
1062
1066
|
i0.ɵɵelementEnd();
|
|
1063
|
-
i0.ɵɵelementStart(9, "th",
|
|
1067
|
+
i0.ɵɵelementStart(9, "th", 150);
|
|
1064
1068
|
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")); });
|
|
1065
1069
|
i0.ɵɵtext(10, " Tool ");
|
|
1066
|
-
i0.ɵɵelement(11, "i",
|
|
1070
|
+
i0.ɵɵelement(11, "i", 151);
|
|
1067
1071
|
i0.ɵɵelementEnd();
|
|
1068
|
-
i0.ɵɵelementStart(12, "th",
|
|
1072
|
+
i0.ɵɵelementStart(12, "th", 150);
|
|
1069
1073
|
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")); });
|
|
1070
1074
|
i0.ɵɵtext(13, " Connection ");
|
|
1071
|
-
i0.ɵɵelement(14, "i",
|
|
1075
|
+
i0.ɵɵelement(14, "i", 151);
|
|
1072
1076
|
i0.ɵɵelementEnd();
|
|
1073
|
-
i0.ɵɵelementStart(15, "th",
|
|
1077
|
+
i0.ɵɵelementStart(15, "th", 150);
|
|
1074
1078
|
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")); });
|
|
1075
1079
|
i0.ɵɵtext(16, " Started ");
|
|
1076
|
-
i0.ɵɵelement(17, "i",
|
|
1080
|
+
i0.ɵɵelement(17, "i", 151);
|
|
1077
1081
|
i0.ɵɵelementEnd();
|
|
1078
|
-
i0.ɵɵelementStart(18, "th",
|
|
1082
|
+
i0.ɵɵelementStart(18, "th", 150);
|
|
1079
1083
|
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")); });
|
|
1080
1084
|
i0.ɵɵtext(19, " Duration ");
|
|
1081
|
-
i0.ɵɵelement(20, "i",
|
|
1085
|
+
i0.ɵɵelement(20, "i", 151);
|
|
1082
1086
|
i0.ɵɵelementEnd();
|
|
1083
|
-
i0.ɵɵelementStart(21, "th",
|
|
1087
|
+
i0.ɵɵelementStart(21, "th", 150);
|
|
1084
1088
|
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")); });
|
|
1085
1089
|
i0.ɵɵtext(22, " Error ");
|
|
1086
|
-
i0.ɵɵelement(23, "i",
|
|
1090
|
+
i0.ɵɵelement(23, "i", 151);
|
|
1087
1091
|
i0.ɵɵelementEnd();
|
|
1088
1092
|
i0.ɵɵelement(24, "th");
|
|
1089
1093
|
i0.ɵɵelementEnd()();
|
|
1090
1094
|
i0.ɵɵelementStart(25, "tbody");
|
|
1091
|
-
i0.ɵɵrepeaterCreate(26, MCPDashboardComponent_Conditional_17_Case_3_Conditional_2_For_27_Template, 22, 12, "tr",
|
|
1095
|
+
i0.ɵɵrepeaterCreate(26, MCPDashboardComponent_Conditional_17_Case_3_Conditional_2_For_27_Template, 22, 12, "tr", 152, _forTrack0);
|
|
1092
1096
|
i0.ɵɵelementEnd()();
|
|
1093
1097
|
} if (rf & 2) {
|
|
1094
1098
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -1124,8 +1128,8 @@ function MCPDashboardComponent_Conditional_17_Case_3_Conditional_2_Template(rf,
|
|
|
1124
1128
|
i0.ɵɵrepeater(ctx_r1.filteredLogs);
|
|
1125
1129
|
} }
|
|
1126
1130
|
function MCPDashboardComponent_Conditional_17_Case_3_Template(rf, ctx) { if (rf & 1) {
|
|
1127
|
-
i0.ɵɵelementStart(0, "div",
|
|
1128
|
-
i0.ɵɵconditionalCreate(1, MCPDashboardComponent_Conditional_17_Case_3_Conditional_1_Template, 6, 0, "div",
|
|
1131
|
+
i0.ɵɵelementStart(0, "div", 47);
|
|
1132
|
+
i0.ɵɵconditionalCreate(1, MCPDashboardComponent_Conditional_17_Case_3_Conditional_1_Template, 6, 0, "div", 48)(2, MCPDashboardComponent_Conditional_17_Case_3_Conditional_2_Template, 28, 49, "table");
|
|
1129
1133
|
i0.ɵɵelementEnd();
|
|
1130
1134
|
} if (rf & 2) {
|
|
1131
1135
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -1133,15 +1137,15 @@ function MCPDashboardComponent_Conditional_17_Case_3_Template(rf, ctx) { if (rf
|
|
|
1133
1137
|
i0.ɵɵconditional(ctx_r1.filteredLogs.length === 0 ? 1 : 2);
|
|
1134
1138
|
} }
|
|
1135
1139
|
function MCPDashboardComponent_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
1136
|
-
i0.ɵɵconditionalCreate(0, MCPDashboardComponent_Conditional_17_Case_0_Template, 3, 1, "div",
|
|
1140
|
+
i0.ɵɵconditionalCreate(0, MCPDashboardComponent_Conditional_17_Case_0_Template, 3, 1, "div", 45)(1, MCPDashboardComponent_Conditional_17_Case_1_Template, 3, 1, "div", 46)(2, MCPDashboardComponent_Conditional_17_Case_2_Template, 3, 1)(3, MCPDashboardComponent_Conditional_17_Case_3_Template, 3, 1, "div", 47);
|
|
1137
1141
|
} if (rf & 2) {
|
|
1138
1142
|
let tmp_1_0;
|
|
1139
1143
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
1140
1144
|
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);
|
|
1141
1145
|
} }
|
|
1142
1146
|
function MCPDashboardComponent_Conditional_18_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
1143
|
-
i0.ɵɵelementStart(0, "div",
|
|
1144
|
-
i0.ɵɵelement(1, "i",
|
|
1147
|
+
i0.ɵɵelementStart(0, "div", 167);
|
|
1148
|
+
i0.ɵɵelement(1, "i", 42);
|
|
1145
1149
|
i0.ɵɵtext(2);
|
|
1146
1150
|
i0.ɵɵelementEnd();
|
|
1147
1151
|
} if (rf & 2) {
|
|
@@ -1150,7 +1154,7 @@ function MCPDashboardComponent_Conditional_18_Conditional_8_Template(rf, ctx) {
|
|
|
1150
1154
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.ServerFormError, " ");
|
|
1151
1155
|
} }
|
|
1152
1156
|
function MCPDashboardComponent_Conditional_18_For_29_Template(rf, ctx) { if (rf & 1) {
|
|
1153
|
-
i0.ɵɵelementStart(0, "option",
|
|
1157
|
+
i0.ɵɵelementStart(0, "option", 174);
|
|
1154
1158
|
i0.ɵɵtext(1);
|
|
1155
1159
|
i0.ɵɵelementEnd();
|
|
1156
1160
|
} if (rf & 2) {
|
|
@@ -1161,12 +1165,12 @@ function MCPDashboardComponent_Conditional_18_For_29_Template(rf, ctx) { if (rf
|
|
|
1161
1165
|
} }
|
|
1162
1166
|
function MCPDashboardComponent_Conditional_18_Conditional_30_Template(rf, ctx) { if (rf & 1) {
|
|
1163
1167
|
const _r34 = i0.ɵɵgetCurrentView();
|
|
1164
|
-
i0.ɵɵelementStart(0, "div",
|
|
1168
|
+
i0.ɵɵelementStart(0, "div", 168)(1, "label", 169);
|
|
1165
1169
|
i0.ɵɵtext(2, "Server URL ");
|
|
1166
|
-
i0.ɵɵelementStart(3, "span",
|
|
1170
|
+
i0.ɵɵelementStart(3, "span", 170);
|
|
1167
1171
|
i0.ɵɵtext(4, "*");
|
|
1168
1172
|
i0.ɵɵelementEnd()();
|
|
1169
|
-
i0.ɵɵelementStart(5, "input",
|
|
1173
|
+
i0.ɵɵelementStart(5, "input", 180, 5);
|
|
1170
1174
|
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); });
|
|
1171
1175
|
i0.ɵɵelementEnd()();
|
|
1172
1176
|
} if (rf & 2) {
|
|
@@ -1176,12 +1180,12 @@ function MCPDashboardComponent_Conditional_18_Conditional_30_Template(rf, ctx) {
|
|
|
1176
1180
|
} }
|
|
1177
1181
|
function MCPDashboardComponent_Conditional_18_Conditional_31_Template(rf, ctx) { if (rf & 1) {
|
|
1178
1182
|
const _r36 = i0.ɵɵgetCurrentView();
|
|
1179
|
-
i0.ɵɵelementStart(0, "div",
|
|
1183
|
+
i0.ɵɵelementStart(0, "div", 168)(1, "label", 169);
|
|
1180
1184
|
i0.ɵɵtext(2, "Command ");
|
|
1181
|
-
i0.ɵɵelementStart(3, "span",
|
|
1185
|
+
i0.ɵɵelementStart(3, "span", 170);
|
|
1182
1186
|
i0.ɵɵtext(4, "*");
|
|
1183
1187
|
i0.ɵɵelementEnd()();
|
|
1184
|
-
i0.ɵɵelementStart(5, "input",
|
|
1188
|
+
i0.ɵɵelementStart(5, "input", 181, 6);
|
|
1185
1189
|
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); });
|
|
1186
1190
|
i0.ɵɵelementEnd()();
|
|
1187
1191
|
} if (rf & 2) {
|
|
@@ -1190,7 +1194,7 @@ function MCPDashboardComponent_Conditional_18_Conditional_31_Template(rf, ctx) {
|
|
|
1190
1194
|
i0.ɵɵproperty("value", ctx_r1.ServerForm.Command);
|
|
1191
1195
|
} }
|
|
1192
1196
|
function MCPDashboardComponent_Conditional_18_For_38_Template(rf, ctx) { if (rf & 1) {
|
|
1193
|
-
i0.ɵɵelementStart(0, "option",
|
|
1197
|
+
i0.ɵɵelementStart(0, "option", 174);
|
|
1194
1198
|
i0.ɵɵtext(1);
|
|
1195
1199
|
i0.ɵɵelementEnd();
|
|
1196
1200
|
} if (rf & 2) {
|
|
@@ -1200,72 +1204,72 @@ function MCPDashboardComponent_Conditional_18_For_38_Template(rf, ctx) { if (rf
|
|
|
1200
1204
|
i0.ɵɵtextInterpolate(a_r39.label);
|
|
1201
1205
|
} }
|
|
1202
1206
|
function MCPDashboardComponent_Conditional_18_Conditional_50_Template(rf, ctx) { if (rf & 1) {
|
|
1203
|
-
i0.ɵɵelement(0, "i",
|
|
1207
|
+
i0.ɵɵelement(0, "i", 155);
|
|
1204
1208
|
} }
|
|
1205
1209
|
function MCPDashboardComponent_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
1206
1210
|
const _r29 = i0.ɵɵgetCurrentView();
|
|
1207
|
-
i0.ɵɵelementStart(0, "div",
|
|
1211
|
+
i0.ɵɵelementStart(0, "div", 161);
|
|
1208
1212
|
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",
|
|
1213
|
+
i0.ɵɵelementStart(1, "div", 162);
|
|
1210
1214
|
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",
|
|
1215
|
+
i0.ɵɵelementStart(2, "div", 163)(3, "h2", 164);
|
|
1212
1216
|
i0.ɵɵtext(4);
|
|
1213
1217
|
i0.ɵɵelementEnd();
|
|
1214
|
-
i0.ɵɵelementStart(5, "button",
|
|
1218
|
+
i0.ɵɵelementStart(5, "button", 165);
|
|
1215
1219
|
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",
|
|
1220
|
+
i0.ɵɵelement(6, "i", 44);
|
|
1217
1221
|
i0.ɵɵelementEnd()();
|
|
1218
|
-
i0.ɵɵelementStart(7, "div",
|
|
1219
|
-
i0.ɵɵconditionalCreate(8, MCPDashboardComponent_Conditional_18_Conditional_8_Template, 3, 1, "div",
|
|
1220
|
-
i0.ɵɵelementStart(9, "div",
|
|
1222
|
+
i0.ɵɵelementStart(7, "div", 166);
|
|
1223
|
+
i0.ɵɵconditionalCreate(8, MCPDashboardComponent_Conditional_18_Conditional_8_Template, 3, 1, "div", 167);
|
|
1224
|
+
i0.ɵɵelementStart(9, "div", 168)(10, "label", 169);
|
|
1221
1225
|
i0.ɵɵtext(11, "Name ");
|
|
1222
|
-
i0.ɵɵelementStart(12, "span",
|
|
1226
|
+
i0.ɵɵelementStart(12, "span", 170);
|
|
1223
1227
|
i0.ɵɵtext(13, "*");
|
|
1224
1228
|
i0.ɵɵelementEnd()();
|
|
1225
|
-
i0.ɵɵelementStart(14, "input",
|
|
1229
|
+
i0.ɵɵelementStart(14, "input", 171, 0);
|
|
1226
1230
|
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); });
|
|
1227
1231
|
i0.ɵɵelementEnd()();
|
|
1228
|
-
i0.ɵɵelementStart(16, "div",
|
|
1232
|
+
i0.ɵɵelementStart(16, "div", 168)(17, "label", 169);
|
|
1229
1233
|
i0.ɵɵtext(18, "Description");
|
|
1230
1234
|
i0.ɵɵelementEnd();
|
|
1231
|
-
i0.ɵɵelementStart(19, "textarea",
|
|
1235
|
+
i0.ɵɵelementStart(19, "textarea", 172, 1);
|
|
1232
1236
|
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); });
|
|
1233
1237
|
i0.ɵɵelementEnd()();
|
|
1234
|
-
i0.ɵɵelementStart(21, "div",
|
|
1238
|
+
i0.ɵɵelementStart(21, "div", 168)(22, "label", 169);
|
|
1235
1239
|
i0.ɵɵtext(23, "Transport Type ");
|
|
1236
|
-
i0.ɵɵelementStart(24, "span",
|
|
1240
|
+
i0.ɵɵelementStart(24, "span", 170);
|
|
1237
1241
|
i0.ɵɵtext(25, "*");
|
|
1238
1242
|
i0.ɵɵelementEnd()();
|
|
1239
|
-
i0.ɵɵelementStart(26, "select",
|
|
1243
|
+
i0.ɵɵelementStart(26, "select", 173, 2);
|
|
1240
1244
|
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",
|
|
1245
|
+
i0.ɵɵrepeaterCreate(28, MCPDashboardComponent_Conditional_18_For_29_Template, 2, 2, "option", 174, _forTrack2);
|
|
1242
1246
|
i0.ɵɵelementEnd()();
|
|
1243
|
-
i0.ɵɵconditionalCreate(30, MCPDashboardComponent_Conditional_18_Conditional_30_Template, 7, 1, "div",
|
|
1244
|
-
i0.ɵɵconditionalCreate(31, MCPDashboardComponent_Conditional_18_Conditional_31_Template, 7, 1, "div",
|
|
1245
|
-
i0.ɵɵelementStart(32, "div",
|
|
1247
|
+
i0.ɵɵconditionalCreate(30, MCPDashboardComponent_Conditional_18_Conditional_30_Template, 7, 1, "div", 168);
|
|
1248
|
+
i0.ɵɵconditionalCreate(31, MCPDashboardComponent_Conditional_18_Conditional_31_Template, 7, 1, "div", 168);
|
|
1249
|
+
i0.ɵɵelementStart(32, "div", 168)(33, "label", 169);
|
|
1246
1250
|
i0.ɵɵtext(34, "Default Auth Type");
|
|
1247
1251
|
i0.ɵɵelementEnd();
|
|
1248
|
-
i0.ɵɵelementStart(35, "select",
|
|
1252
|
+
i0.ɵɵelementStart(35, "select", 173, 3);
|
|
1249
1253
|
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",
|
|
1254
|
+
i0.ɵɵrepeaterCreate(37, MCPDashboardComponent_Conditional_18_For_38_Template, 2, 2, "option", 174, _forTrack2);
|
|
1251
1255
|
i0.ɵɵelementEnd()();
|
|
1252
|
-
i0.ɵɵelementStart(39, "div",
|
|
1256
|
+
i0.ɵɵelementStart(39, "div", 168)(40, "label", 169);
|
|
1253
1257
|
i0.ɵɵtext(41, "Status");
|
|
1254
1258
|
i0.ɵɵelementEnd();
|
|
1255
|
-
i0.ɵɵelementStart(42, "select",
|
|
1259
|
+
i0.ɵɵelementStart(42, "select", 173, 4);
|
|
1256
1260
|
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",
|
|
1261
|
+
i0.ɵɵelementStart(44, "option", 175);
|
|
1258
1262
|
i0.ɵɵtext(45, "Active");
|
|
1259
1263
|
i0.ɵɵelementEnd();
|
|
1260
|
-
i0.ɵɵelementStart(46, "option",
|
|
1264
|
+
i0.ɵɵelementStart(46, "option", 176);
|
|
1261
1265
|
i0.ɵɵtext(47, "Inactive");
|
|
1262
1266
|
i0.ɵɵelementEnd()()()();
|
|
1263
|
-
i0.ɵɵelementStart(48, "div",
|
|
1267
|
+
i0.ɵɵelementStart(48, "div", 177)(49, "button", 178);
|
|
1264
1268
|
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",
|
|
1269
|
+
i0.ɵɵconditionalCreate(50, MCPDashboardComponent_Conditional_18_Conditional_50_Template, 1, 0, "i", 155);
|
|
1266
1270
|
i0.ɵɵtext(51);
|
|
1267
1271
|
i0.ɵɵelementEnd();
|
|
1268
|
-
i0.ɵɵelementStart(52, "button",
|
|
1272
|
+
i0.ɵɵelementStart(52, "button", 179);
|
|
1269
1273
|
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()); });
|
|
1270
1274
|
i0.ɵɵtext(53, "Cancel");
|
|
1271
1275
|
i0.ɵɵelementEnd()()()();
|
|
@@ -1301,8 +1305,8 @@ function MCPDashboardComponent_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
|
1301
1305
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.EditingServer ? "Update" : "Create", " ");
|
|
1302
1306
|
} }
|
|
1303
1307
|
function MCPDashboardComponent_Conditional_19_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
1304
|
-
i0.ɵɵelementStart(0, "div",
|
|
1305
|
-
i0.ɵɵelement(1, "i",
|
|
1308
|
+
i0.ɵɵelementStart(0, "div", 167);
|
|
1309
|
+
i0.ɵɵelement(1, "i", 42);
|
|
1306
1310
|
i0.ɵɵtext(2);
|
|
1307
1311
|
i0.ɵɵelementEnd();
|
|
1308
1312
|
} if (rf & 2) {
|
|
@@ -1311,7 +1315,7 @@ function MCPDashboardComponent_Conditional_19_Conditional_8_Template(rf, ctx) {
|
|
|
1311
1315
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.ConnectionFormError, " ");
|
|
1312
1316
|
} }
|
|
1313
1317
|
function MCPDashboardComponent_Conditional_19_For_19_Template(rf, ctx) { if (rf & 1) {
|
|
1314
|
-
i0.ɵɵelementStart(0, "option",
|
|
1318
|
+
i0.ɵɵelementStart(0, "option", 174);
|
|
1315
1319
|
i0.ɵɵtext(1);
|
|
1316
1320
|
i0.ɵɵelementEnd();
|
|
1317
1321
|
} if (rf & 2) {
|
|
@@ -1321,69 +1325,69 @@ function MCPDashboardComponent_Conditional_19_For_19_Template(rf, ctx) { if (rf
|
|
|
1321
1325
|
i0.ɵɵtextInterpolate(s_r43.Name);
|
|
1322
1326
|
} }
|
|
1323
1327
|
function MCPDashboardComponent_Conditional_19_Conditional_45_Template(rf, ctx) { if (rf & 1) {
|
|
1324
|
-
i0.ɵɵelement(0, "i",
|
|
1328
|
+
i0.ɵɵelement(0, "i", 155);
|
|
1325
1329
|
} }
|
|
1326
1330
|
function MCPDashboardComponent_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
1327
1331
|
const _r41 = i0.ɵɵgetCurrentView();
|
|
1328
|
-
i0.ɵɵelementStart(0, "div",
|
|
1332
|
+
i0.ɵɵelementStart(0, "div", 161);
|
|
1329
1333
|
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",
|
|
1334
|
+
i0.ɵɵelementStart(1, "div", 182);
|
|
1331
1335
|
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",
|
|
1336
|
+
i0.ɵɵelementStart(2, "div", 163)(3, "h2", 164);
|
|
1333
1337
|
i0.ɵɵtext(4, "Add Connection");
|
|
1334
1338
|
i0.ɵɵelementEnd();
|
|
1335
|
-
i0.ɵɵelementStart(5, "button",
|
|
1339
|
+
i0.ɵɵelementStart(5, "button", 165);
|
|
1336
1340
|
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",
|
|
1341
|
+
i0.ɵɵelement(6, "i", 44);
|
|
1338
1342
|
i0.ɵɵelementEnd()();
|
|
1339
|
-
i0.ɵɵelementStart(7, "div",
|
|
1340
|
-
i0.ɵɵconditionalCreate(8, MCPDashboardComponent_Conditional_19_Conditional_8_Template, 3, 1, "div",
|
|
1341
|
-
i0.ɵɵelementStart(9, "div",
|
|
1343
|
+
i0.ɵɵelementStart(7, "div", 166);
|
|
1344
|
+
i0.ɵɵconditionalCreate(8, MCPDashboardComponent_Conditional_19_Conditional_8_Template, 3, 1, "div", 167);
|
|
1345
|
+
i0.ɵɵelementStart(9, "div", 168)(10, "label", 169);
|
|
1342
1346
|
i0.ɵɵtext(11, "Server ");
|
|
1343
|
-
i0.ɵɵelementStart(12, "span",
|
|
1347
|
+
i0.ɵɵelementStart(12, "span", 170);
|
|
1344
1348
|
i0.ɵɵtext(13, "*");
|
|
1345
1349
|
i0.ɵɵelementEnd()();
|
|
1346
|
-
i0.ɵɵelementStart(14, "select",
|
|
1350
|
+
i0.ɵɵelementStart(14, "select", 173, 7);
|
|
1347
1351
|
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",
|
|
1352
|
+
i0.ɵɵelementStart(16, "option", 183);
|
|
1349
1353
|
i0.ɵɵtext(17, "\u2014 select server \u2014");
|
|
1350
1354
|
i0.ɵɵelementEnd();
|
|
1351
|
-
i0.ɵɵrepeaterCreate(18, MCPDashboardComponent_Conditional_19_For_19_Template, 2, 2, "option",
|
|
1355
|
+
i0.ɵɵrepeaterCreate(18, MCPDashboardComponent_Conditional_19_For_19_Template, 2, 2, "option", 174, _forTrack0);
|
|
1352
1356
|
i0.ɵɵelementEnd()();
|
|
1353
|
-
i0.ɵɵelementStart(20, "div",
|
|
1357
|
+
i0.ɵɵelementStart(20, "div", 168)(21, "label", 169);
|
|
1354
1358
|
i0.ɵɵtext(22, "Name ");
|
|
1355
|
-
i0.ɵɵelementStart(23, "span",
|
|
1359
|
+
i0.ɵɵelementStart(23, "span", 170);
|
|
1356
1360
|
i0.ɵɵtext(24, "*");
|
|
1357
1361
|
i0.ɵɵelementEnd()();
|
|
1358
|
-
i0.ɵɵelementStart(25, "input",
|
|
1362
|
+
i0.ɵɵelementStart(25, "input", 184, 8);
|
|
1359
1363
|
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); });
|
|
1360
1364
|
i0.ɵɵelementEnd()();
|
|
1361
|
-
i0.ɵɵelementStart(27, "div",
|
|
1365
|
+
i0.ɵɵelementStart(27, "div", 168)(28, "label", 169);
|
|
1362
1366
|
i0.ɵɵtext(29, "Bearer Token");
|
|
1363
1367
|
i0.ɵɵelementEnd();
|
|
1364
|
-
i0.ɵɵelementStart(30, "input",
|
|
1368
|
+
i0.ɵɵelementStart(30, "input", 185, 9);
|
|
1365
1369
|
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); });
|
|
1366
1370
|
i0.ɵɵelementEnd();
|
|
1367
|
-
i0.ɵɵelementStart(32, "span",
|
|
1371
|
+
i0.ɵɵelementStart(32, "span", 186);
|
|
1368
1372
|
i0.ɵɵtext(33, "Will be stored as a Credential and linked to this connection");
|
|
1369
1373
|
i0.ɵɵelementEnd()();
|
|
1370
|
-
i0.ɵɵelementStart(34, "div",
|
|
1374
|
+
i0.ɵɵelementStart(34, "div", 168)(35, "label", 169);
|
|
1371
1375
|
i0.ɵɵtext(36, "Status");
|
|
1372
1376
|
i0.ɵɵelementEnd();
|
|
1373
|
-
i0.ɵɵelementStart(37, "select",
|
|
1377
|
+
i0.ɵɵelementStart(37, "select", 173, 10);
|
|
1374
1378
|
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",
|
|
1379
|
+
i0.ɵɵelementStart(39, "option", 175);
|
|
1376
1380
|
i0.ɵɵtext(40, "Active");
|
|
1377
1381
|
i0.ɵɵelementEnd();
|
|
1378
|
-
i0.ɵɵelementStart(41, "option",
|
|
1382
|
+
i0.ɵɵelementStart(41, "option", 176);
|
|
1379
1383
|
i0.ɵɵtext(42, "Inactive");
|
|
1380
1384
|
i0.ɵɵelementEnd()()()();
|
|
1381
|
-
i0.ɵɵelementStart(43, "div",
|
|
1385
|
+
i0.ɵɵelementStart(43, "div", 177)(44, "button", 178);
|
|
1382
1386
|
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",
|
|
1387
|
+
i0.ɵɵconditionalCreate(45, MCPDashboardComponent_Conditional_19_Conditional_45_Template, 1, 0, "i", 155);
|
|
1384
1388
|
i0.ɵɵtext(46, " Create ");
|
|
1385
1389
|
i0.ɵɵelementEnd();
|
|
1386
|
-
i0.ɵɵelementStart(47, "button",
|
|
1390
|
+
i0.ɵɵelementStart(47, "button", 179);
|
|
1387
1391
|
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()); });
|
|
1388
1392
|
i0.ɵɵtext(48, "Cancel");
|
|
1389
1393
|
i0.ɵɵelementEnd()()()();
|
|
@@ -1407,7 +1411,7 @@ function MCPDashboardComponent_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
|
1407
1411
|
i0.ɵɵconditional(ctx_r1.ConnectionFormSaving ? 45 : -1);
|
|
1408
1412
|
} }
|
|
1409
1413
|
function MCPDashboardComponent_Conditional_20_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
1410
|
-
i0.ɵɵelementStart(0, "span",
|
|
1414
|
+
i0.ɵɵelementStart(0, "span", 188);
|
|
1411
1415
|
i0.ɵɵtext(1);
|
|
1412
1416
|
i0.ɵɵelementEnd();
|
|
1413
1417
|
} if (rf & 2) {
|
|
@@ -1416,7 +1420,7 @@ function MCPDashboardComponent_Conditional_20_Conditional_5_Template(rf, ctx) {
|
|
|
1416
1420
|
i0.ɵɵtextInterpolate1("\u2014 ", (ctx_r1.TestSelectedTool == null ? null : ctx_r1.TestSelectedTool.ToolTitle) || (ctx_r1.TestSelectedTool == null ? null : ctx_r1.TestSelectedTool.ToolName));
|
|
1417
1421
|
} }
|
|
1418
1422
|
function MCPDashboardComponent_Conditional_20_Conditional_20_For_10_Template(rf, ctx) { if (rf & 1) {
|
|
1419
|
-
i0.ɵɵelementStart(0, "option",
|
|
1423
|
+
i0.ɵɵelementStart(0, "option", 193);
|
|
1420
1424
|
i0.ɵɵtext(1);
|
|
1421
1425
|
i0.ɵɵelementEnd();
|
|
1422
1426
|
} if (rf & 2) {
|
|
@@ -1427,7 +1431,7 @@ function MCPDashboardComponent_Conditional_20_Conditional_20_For_10_Template(rf,
|
|
|
1427
1431
|
i0.ɵɵtextInterpolate(s_r50.Name);
|
|
1428
1432
|
} }
|
|
1429
1433
|
function MCPDashboardComponent_Conditional_20_Conditional_20_For_21_Template(rf, ctx) { if (rf & 1) {
|
|
1430
|
-
i0.ɵɵelementStart(0, "option",
|
|
1434
|
+
i0.ɵɵelementStart(0, "option", 193);
|
|
1431
1435
|
i0.ɵɵtext(1);
|
|
1432
1436
|
i0.ɵɵelementEnd();
|
|
1433
1437
|
} if (rf & 2) {
|
|
@@ -1438,17 +1442,17 @@ function MCPDashboardComponent_Conditional_20_Conditional_20_For_21_Template(rf,
|
|
|
1438
1442
|
i0.ɵɵtextInterpolate(c_r52.Name);
|
|
1439
1443
|
} }
|
|
1440
1444
|
function MCPDashboardComponent_Conditional_20_Conditional_20_Conditional_30_Template(rf, ctx) { if (rf & 1) {
|
|
1441
|
-
i0.ɵɵelementStart(0, "div",
|
|
1445
|
+
i0.ɵɵelementStart(0, "div", 100);
|
|
1442
1446
|
i0.ɵɵtext(1, "No tools match.");
|
|
1443
1447
|
i0.ɵɵelementEnd();
|
|
1444
1448
|
} }
|
|
1445
1449
|
function MCPDashboardComponent_Conditional_20_Conditional_20_For_32_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
1446
|
-
i0.ɵɵelementStart(0, "span",
|
|
1450
|
+
i0.ɵɵelementStart(0, "span", 198);
|
|
1447
1451
|
i0.ɵɵtext(1, "Recent");
|
|
1448
1452
|
i0.ɵɵelementEnd();
|
|
1449
1453
|
} }
|
|
1450
1454
|
function MCPDashboardComponent_Conditional_20_Conditional_20_For_32_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
1451
|
-
i0.ɵɵelementStart(0, "div",
|
|
1455
|
+
i0.ɵɵelementStart(0, "div", 200);
|
|
1452
1456
|
i0.ɵɵtext(1);
|
|
1453
1457
|
i0.ɵɵelementEnd();
|
|
1454
1458
|
} if (rf & 2) {
|
|
@@ -1457,19 +1461,19 @@ function MCPDashboardComponent_Conditional_20_Conditional_20_For_32_Conditional_
|
|
|
1457
1461
|
i0.ɵɵtextInterpolate(t_r55.ToolName);
|
|
1458
1462
|
} }
|
|
1459
1463
|
function MCPDashboardComponent_Conditional_20_Conditional_20_For_32_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
1460
|
-
i0.ɵɵelement(0, "i",
|
|
1464
|
+
i0.ɵɵelement(0, "i", 201);
|
|
1461
1465
|
} }
|
|
1462
1466
|
function MCPDashboardComponent_Conditional_20_Conditional_20_For_32_Template(rf, ctx) { if (rf & 1) {
|
|
1463
1467
|
const _r54 = i0.ɵɵgetCurrentView();
|
|
1464
|
-
i0.ɵɵelementStart(0, "div",
|
|
1468
|
+
i0.ɵɵelementStart(0, "div", 197);
|
|
1465
1469
|
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",
|
|
1467
|
-
i0.ɵɵelementStart(2, "div",
|
|
1470
|
+
i0.ɵɵconditionalCreate(1, MCPDashboardComponent_Conditional_20_Conditional_20_For_32_Conditional_1_Template, 2, 0, "span", 198);
|
|
1471
|
+
i0.ɵɵelementStart(2, "div", 102)(3, "div", 199);
|
|
1468
1472
|
i0.ɵɵtext(4);
|
|
1469
1473
|
i0.ɵɵelementEnd();
|
|
1470
|
-
i0.ɵɵconditionalCreate(5, MCPDashboardComponent_Conditional_20_Conditional_20_For_32_Conditional_5_Template, 2, 1, "div",
|
|
1474
|
+
i0.ɵɵconditionalCreate(5, MCPDashboardComponent_Conditional_20_Conditional_20_For_32_Conditional_5_Template, 2, 1, "div", 200);
|
|
1471
1475
|
i0.ɵɵelementEnd();
|
|
1472
|
-
i0.ɵɵconditionalCreate(6, MCPDashboardComponent_Conditional_20_Conditional_20_For_32_Conditional_6_Template, 1, 0, "i",
|
|
1476
|
+
i0.ɵɵconditionalCreate(6, MCPDashboardComponent_Conditional_20_Conditional_20_For_32_Conditional_6_Template, 1, 0, "i", 201);
|
|
1473
1477
|
i0.ɵɵelementEnd();
|
|
1474
1478
|
} if (rf & 2) {
|
|
1475
1479
|
const t_r55 = ctx.$implicit;
|
|
@@ -1486,41 +1490,41 @@ function MCPDashboardComponent_Conditional_20_Conditional_20_For_32_Template(rf,
|
|
|
1486
1490
|
} }
|
|
1487
1491
|
function MCPDashboardComponent_Conditional_20_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
1488
1492
|
const _r48 = i0.ɵɵgetCurrentView();
|
|
1489
|
-
i0.ɵɵelementStart(0, "div",
|
|
1493
|
+
i0.ɵɵelementStart(0, "div", 168)(1, "label", 169);
|
|
1490
1494
|
i0.ɵɵtext(2, "Server ");
|
|
1491
|
-
i0.ɵɵelementStart(3, "span",
|
|
1495
|
+
i0.ɵɵelementStart(3, "span", 170);
|
|
1492
1496
|
i0.ɵɵtext(4, "*");
|
|
1493
1497
|
i0.ɵɵelementEnd()();
|
|
1494
|
-
i0.ɵɵelementStart(5, "select",
|
|
1498
|
+
i0.ɵɵelementStart(5, "select", 192, 11);
|
|
1495
1499
|
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",
|
|
1500
|
+
i0.ɵɵelementStart(7, "option", 183);
|
|
1497
1501
|
i0.ɵɵtext(8, "\u2014 select server \u2014");
|
|
1498
1502
|
i0.ɵɵelementEnd();
|
|
1499
|
-
i0.ɵɵrepeaterCreate(9, MCPDashboardComponent_Conditional_20_Conditional_20_For_10_Template, 2, 3, "option",
|
|
1503
|
+
i0.ɵɵrepeaterCreate(9, MCPDashboardComponent_Conditional_20_Conditional_20_For_10_Template, 2, 3, "option", 193, _forTrack0);
|
|
1500
1504
|
i0.ɵɵelementEnd()();
|
|
1501
|
-
i0.ɵɵelementStart(11, "div",
|
|
1505
|
+
i0.ɵɵelementStart(11, "div", 168)(12, "label", 169);
|
|
1502
1506
|
i0.ɵɵtext(13, "Connection ");
|
|
1503
|
-
i0.ɵɵelementStart(14, "span",
|
|
1507
|
+
i0.ɵɵelementStart(14, "span", 170);
|
|
1504
1508
|
i0.ɵɵtext(15, "*");
|
|
1505
1509
|
i0.ɵɵelementEnd()();
|
|
1506
|
-
i0.ɵɵelementStart(16, "select",
|
|
1510
|
+
i0.ɵɵelementStart(16, "select", 192, 12);
|
|
1507
1511
|
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",
|
|
1512
|
+
i0.ɵɵelementStart(18, "option", 183);
|
|
1509
1513
|
i0.ɵɵtext(19, "\u2014 select connection \u2014");
|
|
1510
1514
|
i0.ɵɵelementEnd();
|
|
1511
|
-
i0.ɵɵrepeaterCreate(20, MCPDashboardComponent_Conditional_20_Conditional_20_For_21_Template, 2, 3, "option",
|
|
1515
|
+
i0.ɵɵrepeaterCreate(20, MCPDashboardComponent_Conditional_20_Conditional_20_For_21_Template, 2, 3, "option", 193, _forTrack0);
|
|
1512
1516
|
i0.ɵɵelementEnd()();
|
|
1513
|
-
i0.ɵɵelementStart(22, "div",
|
|
1517
|
+
i0.ɵɵelementStart(22, "div", 168)(23, "label", 169);
|
|
1514
1518
|
i0.ɵɵtext(24, "Tool ");
|
|
1515
|
-
i0.ɵɵelementStart(25, "span",
|
|
1519
|
+
i0.ɵɵelementStart(25, "span", 170);
|
|
1516
1520
|
i0.ɵɵtext(26, "*");
|
|
1517
1521
|
i0.ɵɵelementEnd()();
|
|
1518
|
-
i0.ɵɵelementStart(27, "input",
|
|
1522
|
+
i0.ɵɵelementStart(27, "input", 194, 13);
|
|
1519
1523
|
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)); });
|
|
1520
1524
|
i0.ɵɵelementEnd();
|
|
1521
|
-
i0.ɵɵelementStart(29, "div",
|
|
1522
|
-
i0.ɵɵconditionalCreate(30, MCPDashboardComponent_Conditional_20_Conditional_20_Conditional_30_Template, 2, 0, "div",
|
|
1523
|
-
i0.ɵɵrepeaterCreate(31, MCPDashboardComponent_Conditional_20_Conditional_20_For_32_Template, 7, 6, "div",
|
|
1525
|
+
i0.ɵɵelementStart(29, "div", 195);
|
|
1526
|
+
i0.ɵɵconditionalCreate(30, MCPDashboardComponent_Conditional_20_Conditional_20_Conditional_30_Template, 2, 0, "div", 100);
|
|
1527
|
+
i0.ɵɵrepeaterCreate(31, MCPDashboardComponent_Conditional_20_Conditional_20_For_32_Template, 7, 6, "div", 196, _forTrack0);
|
|
1524
1528
|
i0.ɵɵelementEnd()();
|
|
1525
1529
|
} if (rf & 2) {
|
|
1526
1530
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -1539,19 +1543,19 @@ function MCPDashboardComponent_Conditional_20_Conditional_20_Template(rf, ctx) {
|
|
|
1539
1543
|
i0.ɵɵrepeater(ctx_r1.TestComboboxTools);
|
|
1540
1544
|
} }
|
|
1541
1545
|
function MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
1542
|
-
i0.ɵɵelementStart(0, "div",
|
|
1543
|
-
i0.ɵɵelement(1, "i",
|
|
1546
|
+
i0.ɵɵelementStart(0, "div", 202);
|
|
1547
|
+
i0.ɵɵelement(1, "i", 203);
|
|
1544
1548
|
i0.ɵɵelementStart(2, "p");
|
|
1545
1549
|
i0.ɵɵtext(3, "This tool requires no parameters.");
|
|
1546
1550
|
i0.ɵɵelementEnd()();
|
|
1547
1551
|
} }
|
|
1548
1552
|
function MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_1_For_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1549
|
-
i0.ɵɵelementStart(0, "span",
|
|
1553
|
+
i0.ɵɵelementStart(0, "span", 170);
|
|
1550
1554
|
i0.ɵɵtext(1, "*");
|
|
1551
1555
|
i0.ɵɵelementEnd();
|
|
1552
1556
|
} }
|
|
1553
1557
|
function MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_1_For_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
1554
|
-
i0.ɵɵelementStart(0, "p",
|
|
1558
|
+
i0.ɵɵelementStart(0, "p", 204);
|
|
1555
1559
|
i0.ɵɵtext(1);
|
|
1556
1560
|
i0.ɵɵelementEnd();
|
|
1557
1561
|
} if (rf & 2) {
|
|
@@ -1560,7 +1564,7 @@ function MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_1_For_1
|
|
|
1560
1564
|
i0.ɵɵtextInterpolate(p_r56.description);
|
|
1561
1565
|
} }
|
|
1562
1566
|
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",
|
|
1567
|
+
i0.ɵɵelementStart(0, "option", 174);
|
|
1564
1568
|
i0.ɵɵtext(1);
|
|
1565
1569
|
i0.ɵɵelementEnd();
|
|
1566
1570
|
} if (rf & 2) {
|
|
@@ -1571,12 +1575,12 @@ function MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_1_For_1
|
|
|
1571
1575
|
} }
|
|
1572
1576
|
function MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_1_For_1_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
1573
1577
|
const _r57 = i0.ɵɵgetCurrentView();
|
|
1574
|
-
i0.ɵɵelementStart(0, "select",
|
|
1578
|
+
i0.ɵɵelementStart(0, "select", 192, 14);
|
|
1575
1579
|
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",
|
|
1580
|
+
i0.ɵɵelementStart(2, "option", 183);
|
|
1577
1581
|
i0.ɵɵtext(3, "\u2014 select \u2014");
|
|
1578
1582
|
i0.ɵɵelementEnd();
|
|
1579
|
-
i0.ɵɵrepeaterCreate(4, MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_1_For_1_Conditional_5_For_5_Template, 2, 2, "option",
|
|
1583
|
+
i0.ɵɵrepeaterCreate(4, MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_1_For_1_Conditional_5_For_5_Template, 2, 2, "option", 174, i0.ɵɵrepeaterTrackByIndex);
|
|
1580
1584
|
i0.ɵɵelementEnd();
|
|
1581
1585
|
} if (rf & 2) {
|
|
1582
1586
|
const p_r56 = i0.ɵɵnextContext().$implicit;
|
|
@@ -1585,18 +1589,18 @@ function MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_1_For_1
|
|
|
1585
1589
|
} }
|
|
1586
1590
|
function MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_1_For_1_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
1587
1591
|
const _r60 = i0.ɵɵgetCurrentView();
|
|
1588
|
-
i0.ɵɵelementStart(0, "select",
|
|
1592
|
+
i0.ɵɵelementStart(0, "select", 192, 15);
|
|
1589
1593
|
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",
|
|
1594
|
+
i0.ɵɵelementStart(2, "option", 208);
|
|
1591
1595
|
i0.ɵɵtext(3, "false");
|
|
1592
1596
|
i0.ɵɵelementEnd();
|
|
1593
|
-
i0.ɵɵelementStart(4, "option",
|
|
1597
|
+
i0.ɵɵelementStart(4, "option", 209);
|
|
1594
1598
|
i0.ɵɵtext(5, "true");
|
|
1595
1599
|
i0.ɵɵelementEnd()();
|
|
1596
1600
|
} }
|
|
1597
1601
|
function MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_1_For_1_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
1598
1602
|
const _r62 = i0.ɵɵgetCurrentView();
|
|
1599
|
-
i0.ɵɵelementStart(0, "textarea",
|
|
1603
|
+
i0.ɵɵelementStart(0, "textarea", 210, 16);
|
|
1600
1604
|
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)); });
|
|
1601
1605
|
i0.ɵɵelementEnd();
|
|
1602
1606
|
} if (rf & 2) {
|
|
@@ -1605,7 +1609,7 @@ function MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_1_For_1
|
|
|
1605
1609
|
} }
|
|
1606
1610
|
function MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_1_For_1_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
1607
1611
|
const _r64 = i0.ɵɵgetCurrentView();
|
|
1608
|
-
i0.ɵɵelementStart(0, "input",
|
|
1612
|
+
i0.ɵɵelementStart(0, "input", 211, 17);
|
|
1609
1613
|
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)); });
|
|
1610
1614
|
i0.ɵɵelementEnd();
|
|
1611
1615
|
} if (rf & 2) {
|
|
@@ -1613,12 +1617,12 @@ function MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_1_For_1
|
|
|
1613
1617
|
i0.ɵɵproperty("placeholder", p_r56.description || "Enter value...");
|
|
1614
1618
|
} }
|
|
1615
1619
|
function MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_1_For_1_Template(rf, ctx) { if (rf & 1) {
|
|
1616
|
-
i0.ɵɵelementStart(0, "div",
|
|
1620
|
+
i0.ɵɵelementStart(0, "div", 168)(1, "label", 169);
|
|
1617
1621
|
i0.ɵɵtext(2);
|
|
1618
|
-
i0.ɵɵconditionalCreate(3, MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_1_For_1_Conditional_3_Template, 2, 0, "span",
|
|
1622
|
+
i0.ɵɵconditionalCreate(3, MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_1_For_1_Conditional_3_Template, 2, 0, "span", 170);
|
|
1619
1623
|
i0.ɵɵelementEnd();
|
|
1620
|
-
i0.ɵɵconditionalCreate(4, MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_1_For_1_Conditional_4_Template, 2, 1, "p",
|
|
1621
|
-
i0.ɵɵconditionalCreate(5, MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_1_For_1_Conditional_5_Template, 6, 0, "select",
|
|
1624
|
+
i0.ɵɵconditionalCreate(4, MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_1_For_1_Conditional_4_Template, 2, 1, "p", 204);
|
|
1625
|
+
i0.ɵɵconditionalCreate(5, MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_1_For_1_Conditional_5_Template, 6, 0, "select", 205)(6, MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_1_For_1_Conditional_6_Template, 6, 0, "select", 205)(7, MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_1_For_1_Conditional_7_Template, 2, 1, "textarea", 206)(8, MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_1_For_1_Conditional_8_Template, 2, 1, "input", 207);
|
|
1622
1626
|
i0.ɵɵelementEnd();
|
|
1623
1627
|
} if (rf & 2) {
|
|
1624
1628
|
const p_r56 = ctx.$implicit;
|
|
@@ -1632,19 +1636,19 @@ function MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_1_For_1
|
|
|
1632
1636
|
i0.ɵɵconditional(p_r56.enumValues.length > 0 ? 5 : p_r56.type === "boolean" ? 6 : p_r56.type === "array" || p_r56.type === "object" ? 7 : 8);
|
|
1633
1637
|
} }
|
|
1634
1638
|
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",
|
|
1639
|
+
i0.ɵɵrepeaterCreate(0, MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_1_For_1_Template, 9, 4, "div", 168, _forTrack3);
|
|
1636
1640
|
} if (rf & 2) {
|
|
1637
1641
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1638
1642
|
i0.ɵɵrepeater(ctx_r1.TestParamConfigs);
|
|
1639
1643
|
} }
|
|
1640
1644
|
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",
|
|
1645
|
+
i0.ɵɵconditionalCreate(0, MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_0_Template, 4, 0, "div", 202)(1, MCPDashboardComponent_Conditional_20_Conditional_21_Conditional_1_Template, 2, 0);
|
|
1642
1646
|
} if (rf & 2) {
|
|
1643
1647
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
1644
1648
|
i0.ɵɵconditional(ctx_r1.TestParamConfigs.length === 0 ? 0 : 1);
|
|
1645
1649
|
} }
|
|
1646
1650
|
function MCPDashboardComponent_Conditional_20_Conditional_22_Conditional_0_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1647
|
-
i0.ɵɵelementStart(0, "span",
|
|
1651
|
+
i0.ɵɵelementStart(0, "span", 214);
|
|
1648
1652
|
i0.ɵɵtext(1);
|
|
1649
1653
|
i0.ɵɵelementEnd();
|
|
1650
1654
|
} if (rf & 2) {
|
|
@@ -1653,10 +1657,10 @@ function MCPDashboardComponent_Conditional_20_Conditional_22_Conditional_0_Condi
|
|
|
1653
1657
|
i0.ɵɵtextInterpolate1("", ctx_r1.TestExecutionResult == null ? null : ctx_r1.TestExecutionResult.DurationMs, "ms");
|
|
1654
1658
|
} }
|
|
1655
1659
|
function MCPDashboardComponent_Conditional_20_Conditional_22_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
1656
|
-
i0.ɵɵelementStart(0, "div",
|
|
1657
|
-
i0.ɵɵelement(1, "i",
|
|
1660
|
+
i0.ɵɵelementStart(0, "div", 212);
|
|
1661
|
+
i0.ɵɵelement(1, "i", 93);
|
|
1658
1662
|
i0.ɵɵtext(2, " Execution Successful ");
|
|
1659
|
-
i0.ɵɵconditionalCreate(3, MCPDashboardComponent_Conditional_20_Conditional_22_Conditional_0_Conditional_3_Template, 2, 1, "span",
|
|
1663
|
+
i0.ɵɵconditionalCreate(3, MCPDashboardComponent_Conditional_20_Conditional_22_Conditional_0_Conditional_3_Template, 2, 1, "span", 214);
|
|
1660
1664
|
i0.ɵɵelementEnd();
|
|
1661
1665
|
} if (rf & 2) {
|
|
1662
1666
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -1664,16 +1668,16 @@ function MCPDashboardComponent_Conditional_20_Conditional_22_Conditional_0_Templ
|
|
|
1664
1668
|
i0.ɵɵconditional((ctx_r1.TestExecutionResult == null ? null : ctx_r1.TestExecutionResult.DurationMs) ? 3 : -1);
|
|
1665
1669
|
} }
|
|
1666
1670
|
function MCPDashboardComponent_Conditional_20_Conditional_22_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
1667
|
-
i0.ɵɵelementStart(0, "div",
|
|
1668
|
-
i0.ɵɵelement(1, "i",
|
|
1671
|
+
i0.ɵɵelementStart(0, "div", 213);
|
|
1672
|
+
i0.ɵɵelement(1, "i", 154);
|
|
1669
1673
|
i0.ɵɵtext(2, " Execution Failed ");
|
|
1670
1674
|
i0.ɵɵelementEnd();
|
|
1671
1675
|
} }
|
|
1672
1676
|
function MCPDashboardComponent_Conditional_20_Conditional_22_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
1673
|
-
i0.ɵɵelementStart(0, "div",
|
|
1677
|
+
i0.ɵɵelementStart(0, "div", 168)(1, "label", 215);
|
|
1674
1678
|
i0.ɵɵtext(2, "Error");
|
|
1675
1679
|
i0.ɵɵelementEnd();
|
|
1676
|
-
i0.ɵɵelementStart(3, "pre",
|
|
1680
|
+
i0.ɵɵelementStart(3, "pre", 216);
|
|
1677
1681
|
i0.ɵɵtext(4);
|
|
1678
1682
|
i0.ɵɵelementEnd()();
|
|
1679
1683
|
} if (rf & 2) {
|
|
@@ -1682,10 +1686,10 @@ function MCPDashboardComponent_Conditional_20_Conditional_22_Conditional_2_Templ
|
|
|
1682
1686
|
i0.ɵɵtextInterpolate(ctx_r1.TestExecutionResult == null ? null : ctx_r1.TestExecutionResult.ErrorMessage);
|
|
1683
1687
|
} }
|
|
1684
1688
|
function MCPDashboardComponent_Conditional_20_Conditional_22_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1685
|
-
i0.ɵɵelementStart(0, "div")(1, "label",
|
|
1689
|
+
i0.ɵɵelementStart(0, "div")(1, "label", 215);
|
|
1686
1690
|
i0.ɵɵtext(2, "Result");
|
|
1687
1691
|
i0.ɵɵelementEnd();
|
|
1688
|
-
i0.ɵɵelementStart(3, "pre",
|
|
1692
|
+
i0.ɵɵelementStart(3, "pre", 217);
|
|
1689
1693
|
i0.ɵɵtext(4);
|
|
1690
1694
|
i0.ɵɵelementEnd()();
|
|
1691
1695
|
} if (rf & 2) {
|
|
@@ -1694,8 +1698,8 @@ function MCPDashboardComponent_Conditional_20_Conditional_22_Conditional_3_Templ
|
|
|
1694
1698
|
i0.ɵɵtextInterpolate(ctx_r1.formatTestResult(ctx_r1.TestExecutionResult == null ? null : ctx_r1.TestExecutionResult.Result));
|
|
1695
1699
|
} }
|
|
1696
1700
|
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",
|
|
1698
|
-
i0.ɵɵconditionalCreate(2, MCPDashboardComponent_Conditional_20_Conditional_22_Conditional_2_Template, 5, 1, "div",
|
|
1701
|
+
i0.ɵɵconditionalCreate(0, MCPDashboardComponent_Conditional_20_Conditional_22_Conditional_0_Template, 4, 1, "div", 212)(1, MCPDashboardComponent_Conditional_20_Conditional_22_Conditional_1_Template, 3, 0, "div", 213);
|
|
1702
|
+
i0.ɵɵconditionalCreate(2, MCPDashboardComponent_Conditional_20_Conditional_22_Conditional_2_Template, 5, 1, "div", 168);
|
|
1699
1703
|
i0.ɵɵconditionalCreate(3, MCPDashboardComponent_Conditional_20_Conditional_22_Conditional_3_Template, 5, 1, "div");
|
|
1700
1704
|
} if (rf & 2) {
|
|
1701
1705
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -1707,12 +1711,12 @@ function MCPDashboardComponent_Conditional_20_Conditional_22_Template(rf, ctx) {
|
|
|
1707
1711
|
} }
|
|
1708
1712
|
function MCPDashboardComponent_Conditional_20_Conditional_24_Template(rf, ctx) { if (rf & 1) {
|
|
1709
1713
|
const _r66 = i0.ɵɵgetCurrentView();
|
|
1710
|
-
i0.ɵɵelementStart(0, "button",
|
|
1714
|
+
i0.ɵɵelementStart(0, "button", 178);
|
|
1711
1715
|
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()); });
|
|
1712
1716
|
i0.ɵɵtext(1, "Next ");
|
|
1713
|
-
i0.ɵɵelement(2, "i",
|
|
1717
|
+
i0.ɵɵelement(2, "i", 218);
|
|
1714
1718
|
i0.ɵɵelementEnd();
|
|
1715
|
-
i0.ɵɵelementStart(3, "button",
|
|
1719
|
+
i0.ɵɵelementStart(3, "button", 179);
|
|
1716
1720
|
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()); });
|
|
1717
1721
|
i0.ɵɵtext(4, "Cancel");
|
|
1718
1722
|
i0.ɵɵelementEnd();
|
|
@@ -1721,22 +1725,22 @@ function MCPDashboardComponent_Conditional_20_Conditional_24_Template(rf, ctx) {
|
|
|
1721
1725
|
i0.ɵɵproperty("disabled", !ctx_r1.TestCanProceed);
|
|
1722
1726
|
} }
|
|
1723
1727
|
function MCPDashboardComponent_Conditional_20_Conditional_25_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
1724
|
-
i0.ɵɵelement(0, "i",
|
|
1728
|
+
i0.ɵɵelement(0, "i", 155);
|
|
1725
1729
|
i0.ɵɵtext(1, " Executing... ");
|
|
1726
1730
|
} }
|
|
1727
1731
|
function MCPDashboardComponent_Conditional_20_Conditional_25_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
1728
|
-
i0.ɵɵelement(0, "i",
|
|
1732
|
+
i0.ɵɵelement(0, "i", 40);
|
|
1729
1733
|
i0.ɵɵtext(1, " Execute ");
|
|
1730
1734
|
} }
|
|
1731
1735
|
function MCPDashboardComponent_Conditional_20_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
1732
1736
|
const _r67 = i0.ɵɵgetCurrentView();
|
|
1733
|
-
i0.ɵɵelementStart(0, "button",
|
|
1737
|
+
i0.ɵɵelementStart(0, "button", 178);
|
|
1734
1738
|
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
1739
|
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
1740
|
i0.ɵɵelementEnd();
|
|
1737
|
-
i0.ɵɵelementStart(3, "button",
|
|
1741
|
+
i0.ɵɵelementStart(3, "button", 179);
|
|
1738
1742
|
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",
|
|
1743
|
+
i0.ɵɵelement(4, "i", 219);
|
|
1740
1744
|
i0.ɵɵtext(5, " Back");
|
|
1741
1745
|
i0.ɵɵelementEnd();
|
|
1742
1746
|
} if (rf & 2) {
|
|
@@ -1747,53 +1751,53 @@ function MCPDashboardComponent_Conditional_20_Conditional_25_Template(rf, ctx) {
|
|
|
1747
1751
|
} }
|
|
1748
1752
|
function MCPDashboardComponent_Conditional_20_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
1749
1753
|
const _r68 = i0.ɵɵgetCurrentView();
|
|
1750
|
-
i0.ɵɵelementStart(0, "button",
|
|
1754
|
+
i0.ɵɵelementStart(0, "button", 220);
|
|
1751
1755
|
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",
|
|
1756
|
+
i0.ɵɵelement(1, "i", 221);
|
|
1753
1757
|
i0.ɵɵtext(2, " Run Again");
|
|
1754
1758
|
i0.ɵɵelementEnd();
|
|
1755
|
-
i0.ɵɵelementStart(3, "button",
|
|
1759
|
+
i0.ɵɵelementStart(3, "button", 179);
|
|
1756
1760
|
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()); });
|
|
1757
1761
|
i0.ɵɵtext(4, "Edit Params");
|
|
1758
1762
|
i0.ɵɵelementEnd();
|
|
1759
|
-
i0.ɵɵelementStart(5, "button",
|
|
1763
|
+
i0.ɵɵelementStart(5, "button", 179);
|
|
1760
1764
|
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()); });
|
|
1761
1765
|
i0.ɵɵtext(6, "Close");
|
|
1762
1766
|
i0.ɵɵelementEnd();
|
|
1763
1767
|
} }
|
|
1764
1768
|
function MCPDashboardComponent_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
1765
1769
|
const _r47 = i0.ɵɵgetCurrentView();
|
|
1766
|
-
i0.ɵɵelementStart(0, "div",
|
|
1770
|
+
i0.ɵɵelementStart(0, "div", 161);
|
|
1767
1771
|
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",
|
|
1772
|
+
i0.ɵɵelementStart(1, "div", 187);
|
|
1769
1773
|
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",
|
|
1774
|
+
i0.ɵɵelementStart(2, "div", 163)(3, "h2", 164);
|
|
1771
1775
|
i0.ɵɵtext(4, " Test MCP Tool ");
|
|
1772
|
-
i0.ɵɵconditionalCreate(5, MCPDashboardComponent_Conditional_20_Conditional_5_Template, 2, 1, "span",
|
|
1776
|
+
i0.ɵɵconditionalCreate(5, MCPDashboardComponent_Conditional_20_Conditional_5_Template, 2, 1, "span", 188);
|
|
1773
1777
|
i0.ɵɵelementEnd();
|
|
1774
|
-
i0.ɵɵelementStart(6, "button",
|
|
1778
|
+
i0.ɵɵelementStart(6, "button", 165);
|
|
1775
1779
|
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",
|
|
1780
|
+
i0.ɵɵelement(7, "i", 44);
|
|
1777
1781
|
i0.ɵɵelementEnd()();
|
|
1778
|
-
i0.ɵɵelementStart(8, "div",
|
|
1782
|
+
i0.ɵɵelementStart(8, "div", 189)(9, "span", 190);
|
|
1779
1783
|
i0.ɵɵtext(10, "1. Select");
|
|
1780
1784
|
i0.ɵɵelementEnd();
|
|
1781
|
-
i0.ɵɵelementStart(11, "span",
|
|
1785
|
+
i0.ɵɵelementStart(11, "span", 191);
|
|
1782
1786
|
i0.ɵɵtext(12, "\u203A");
|
|
1783
1787
|
i0.ɵɵelementEnd();
|
|
1784
|
-
i0.ɵɵelementStart(13, "span",
|
|
1788
|
+
i0.ɵɵelementStart(13, "span", 190);
|
|
1785
1789
|
i0.ɵɵtext(14, "2. Configure");
|
|
1786
1790
|
i0.ɵɵelementEnd();
|
|
1787
|
-
i0.ɵɵelementStart(15, "span",
|
|
1791
|
+
i0.ɵɵelementStart(15, "span", 191);
|
|
1788
1792
|
i0.ɵɵtext(16, "\u203A");
|
|
1789
1793
|
i0.ɵɵelementEnd();
|
|
1790
|
-
i0.ɵɵelementStart(17, "span",
|
|
1794
|
+
i0.ɵɵelementStart(17, "span", 190);
|
|
1791
1795
|
i0.ɵɵtext(18, "3. Results");
|
|
1792
1796
|
i0.ɵɵelementEnd()();
|
|
1793
|
-
i0.ɵɵelementStart(19, "div",
|
|
1797
|
+
i0.ɵɵelementStart(19, "div", 166);
|
|
1794
1798
|
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);
|
|
1795
1799
|
i0.ɵɵelementEnd();
|
|
1796
|
-
i0.ɵɵelementStart(23, "div",
|
|
1800
|
+
i0.ɵɵelementStart(23, "div", 177);
|
|
1797
1801
|
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);
|
|
1798
1802
|
i0.ɵɵelementEnd()()();
|
|
1799
1803
|
} if (rf & 2) {
|
|
@@ -1812,7 +1816,7 @@ function MCPDashboardComponent_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
|
1812
1816
|
i0.ɵɵconditional(ctx_r1.TestStep === "select" ? 24 : ctx_r1.TestStep === "configure" ? 25 : 26);
|
|
1813
1817
|
} }
|
|
1814
1818
|
function MCPDashboardComponent_Conditional_21_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
1815
|
-
i0.ɵɵelementStart(0, "span",
|
|
1819
|
+
i0.ɵɵelementStart(0, "span", 228);
|
|
1816
1820
|
i0.ɵɵtext(1, "\u00B7");
|
|
1817
1821
|
i0.ɵɵelementEnd();
|
|
1818
1822
|
i0.ɵɵelementStart(2, "span");
|
|
@@ -1824,7 +1828,7 @@ function MCPDashboardComponent_Conditional_21_Conditional_14_Template(rf, ctx) {
|
|
|
1824
1828
|
i0.ɵɵtextInterpolate(ctx_r1.formatDuration(ctx_r1.SelectedLog.DurationMs));
|
|
1825
1829
|
} }
|
|
1826
1830
|
function MCPDashboardComponent_Conditional_21_Conditional_23_Template(rf, ctx) { if (rf & 1) {
|
|
1827
|
-
i0.ɵɵelementStart(0, "div",
|
|
1831
|
+
i0.ɵɵelementStart(0, "div", 234);
|
|
1828
1832
|
i0.ɵɵtext(1);
|
|
1829
1833
|
i0.ɵɵelementEnd();
|
|
1830
1834
|
} if (rf & 2) {
|
|
@@ -1833,10 +1837,10 @@ function MCPDashboardComponent_Conditional_21_Conditional_23_Template(rf, ctx) {
|
|
|
1833
1837
|
i0.ɵɵtextInterpolate(ctx_r1.SelectedLog.ServerName);
|
|
1834
1838
|
} }
|
|
1835
1839
|
function MCPDashboardComponent_Conditional_21_Conditional_24_Template(rf, ctx) { if (rf & 1) {
|
|
1836
|
-
i0.ɵɵelementStart(0, "div",
|
|
1840
|
+
i0.ɵɵelementStart(0, "div", 168)(1, "label", 237);
|
|
1837
1841
|
i0.ɵɵtext(2, "Input Arguments");
|
|
1838
1842
|
i0.ɵɵelementEnd();
|
|
1839
|
-
i0.ɵɵelementStart(3, "pre",
|
|
1843
|
+
i0.ɵɵelementStart(3, "pre", 238);
|
|
1840
1844
|
i0.ɵɵtext(4);
|
|
1841
1845
|
i0.ɵɵelementEnd()();
|
|
1842
1846
|
} if (rf & 2) {
|
|
@@ -1845,10 +1849,10 @@ function MCPDashboardComponent_Conditional_21_Conditional_24_Template(rf, ctx) {
|
|
|
1845
1849
|
i0.ɵɵtextInterpolate(ctx_r1.formatLogJson(ctx_r1.SelectedLog.InputArgs));
|
|
1846
1850
|
} }
|
|
1847
1851
|
function MCPDashboardComponent_Conditional_21_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
1848
|
-
i0.ɵɵelementStart(0, "div",
|
|
1852
|
+
i0.ɵɵelementStart(0, "div", 168)(1, "label", 237);
|
|
1849
1853
|
i0.ɵɵtext(2, "Result");
|
|
1850
1854
|
i0.ɵɵelementEnd();
|
|
1851
|
-
i0.ɵɵelementStart(3, "pre",
|
|
1855
|
+
i0.ɵɵelementStart(3, "pre", 239);
|
|
1852
1856
|
i0.ɵɵtext(4);
|
|
1853
1857
|
i0.ɵɵelementEnd()();
|
|
1854
1858
|
} if (rf & 2) {
|
|
@@ -1857,10 +1861,10 @@ function MCPDashboardComponent_Conditional_21_Conditional_25_Template(rf, ctx) {
|
|
|
1857
1861
|
i0.ɵɵtextInterpolate(ctx_r1.formatLogJson(ctx_r1.SelectedLog.Result));
|
|
1858
1862
|
} }
|
|
1859
1863
|
function MCPDashboardComponent_Conditional_21_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
1860
|
-
i0.ɵɵelementStart(0, "div",
|
|
1864
|
+
i0.ɵɵelementStart(0, "div", 168)(1, "label", 240);
|
|
1861
1865
|
i0.ɵɵtext(2, "Error");
|
|
1862
1866
|
i0.ɵɵelementEnd();
|
|
1863
|
-
i0.ɵɵelementStart(3, "pre",
|
|
1867
|
+
i0.ɵɵelementStart(3, "pre", 241);
|
|
1864
1868
|
i0.ɵɵtext(4);
|
|
1865
1869
|
i0.ɵɵelementEnd()();
|
|
1866
1870
|
} if (rf & 2) {
|
|
@@ -1870,24 +1874,24 @@ function MCPDashboardComponent_Conditional_21_Conditional_26_Template(rf, ctx) {
|
|
|
1870
1874
|
} }
|
|
1871
1875
|
function MCPDashboardComponent_Conditional_21_Conditional_28_Template(rf, ctx) { if (rf & 1) {
|
|
1872
1876
|
const _r70 = i0.ɵɵgetCurrentView();
|
|
1873
|
-
i0.ɵɵelementStart(0, "button",
|
|
1877
|
+
i0.ɵɵelementStart(0, "button", 220);
|
|
1874
1878
|
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",
|
|
1879
|
+
i0.ɵɵelement(1, "i", 221);
|
|
1876
1880
|
i0.ɵɵtext(2, " Run Again");
|
|
1877
1881
|
i0.ɵɵelementEnd();
|
|
1878
1882
|
} }
|
|
1879
1883
|
function MCPDashboardComponent_Conditional_21_Template(rf, ctx) { if (rf & 1) {
|
|
1880
1884
|
const _r69 = i0.ɵɵgetCurrentView();
|
|
1881
|
-
i0.ɵɵelementStart(0, "div", 33)(1, "div",
|
|
1885
|
+
i0.ɵɵelementStart(0, "div", 33)(1, "div", 222);
|
|
1882
1886
|
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()); });
|
|
1883
1887
|
i0.ɵɵelementEnd();
|
|
1884
|
-
i0.ɵɵelementStart(2, "div",
|
|
1888
|
+
i0.ɵɵelementStart(2, "div", 223)(3, "div", 224)(4, "div")(5, "h3", 225);
|
|
1885
1889
|
i0.ɵɵtext(6);
|
|
1886
1890
|
i0.ɵɵelementEnd();
|
|
1887
|
-
i0.ɵɵelementStart(7, "div",
|
|
1891
|
+
i0.ɵɵelementStart(7, "div", 226)(8, "span", 227);
|
|
1888
1892
|
i0.ɵɵtext(9);
|
|
1889
1893
|
i0.ɵɵelementEnd();
|
|
1890
|
-
i0.ɵɵelementStart(10, "span",
|
|
1894
|
+
i0.ɵɵelementStart(10, "span", 228);
|
|
1891
1895
|
i0.ɵɵtext(11, "\u00B7");
|
|
1892
1896
|
i0.ɵɵelementEnd();
|
|
1893
1897
|
i0.ɵɵelementStart(12, "span");
|
|
@@ -1895,25 +1899,25 @@ function MCPDashboardComponent_Conditional_21_Template(rf, ctx) { if (rf & 1) {
|
|
|
1895
1899
|
i0.ɵɵelementEnd();
|
|
1896
1900
|
i0.ɵɵconditionalCreate(14, MCPDashboardComponent_Conditional_21_Conditional_14_Template, 4, 1);
|
|
1897
1901
|
i0.ɵɵelementEnd()();
|
|
1898
|
-
i0.ɵɵelementStart(15, "button",
|
|
1902
|
+
i0.ɵɵelementStart(15, "button", 229);
|
|
1899
1903
|
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",
|
|
1904
|
+
i0.ɵɵelement(16, "i", 230);
|
|
1901
1905
|
i0.ɵɵelementEnd()();
|
|
1902
|
-
i0.ɵɵelementStart(17, "div",
|
|
1906
|
+
i0.ɵɵelementStart(17, "div", 231)(18, "div", 168)(19, "div", 232);
|
|
1903
1907
|
i0.ɵɵtext(20, "Connection");
|
|
1904
1908
|
i0.ɵɵelementEnd();
|
|
1905
|
-
i0.ɵɵelementStart(21, "div",
|
|
1909
|
+
i0.ɵɵelementStart(21, "div", 233);
|
|
1906
1910
|
i0.ɵɵtext(22);
|
|
1907
1911
|
i0.ɵɵelementEnd();
|
|
1908
|
-
i0.ɵɵconditionalCreate(23, MCPDashboardComponent_Conditional_21_Conditional_23_Template, 2, 1, "div",
|
|
1912
|
+
i0.ɵɵconditionalCreate(23, MCPDashboardComponent_Conditional_21_Conditional_23_Template, 2, 1, "div", 234);
|
|
1909
1913
|
i0.ɵɵelementEnd();
|
|
1910
|
-
i0.ɵɵconditionalCreate(24, MCPDashboardComponent_Conditional_21_Conditional_24_Template, 5, 1, "div",
|
|
1911
|
-
i0.ɵɵconditionalCreate(25, MCPDashboardComponent_Conditional_21_Conditional_25_Template, 5, 1, "div",
|
|
1912
|
-
i0.ɵɵconditionalCreate(26, MCPDashboardComponent_Conditional_21_Conditional_26_Template, 5, 1, "div",
|
|
1914
|
+
i0.ɵɵconditionalCreate(24, MCPDashboardComponent_Conditional_21_Conditional_24_Template, 5, 1, "div", 168);
|
|
1915
|
+
i0.ɵɵconditionalCreate(25, MCPDashboardComponent_Conditional_21_Conditional_25_Template, 5, 1, "div", 168);
|
|
1916
|
+
i0.ɵɵconditionalCreate(26, MCPDashboardComponent_Conditional_21_Conditional_26_Template, 5, 1, "div", 168);
|
|
1913
1917
|
i0.ɵɵelementEnd();
|
|
1914
|
-
i0.ɵɵelementStart(27, "div",
|
|
1915
|
-
i0.ɵɵconditionalCreate(28, MCPDashboardComponent_Conditional_21_Conditional_28_Template, 3, 0, "button",
|
|
1916
|
-
i0.ɵɵelementStart(29, "button",
|
|
1918
|
+
i0.ɵɵelementStart(27, "div", 235);
|
|
1919
|
+
i0.ɵɵconditionalCreate(28, MCPDashboardComponent_Conditional_21_Conditional_28_Template, 3, 0, "button", 236);
|
|
1920
|
+
i0.ɵɵelementStart(29, "button", 179);
|
|
1917
1921
|
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()); });
|
|
1918
1922
|
i0.ɵɵtext(30, "Close");
|
|
1919
1923
|
i0.ɵɵelementEnd()()()();
|
|
@@ -4290,23 +4294,24 @@ let MCPDashboardComponent = class MCPDashboardComponent extends BaseDashboard {
|
|
|
4290
4294
|
this.cdr.detectChanges();
|
|
4291
4295
|
}
|
|
4292
4296
|
static ɵfac = function MCPDashboardComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || MCPDashboardComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i1.MCPToolsService)); };
|
|
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) {
|
|
4297
|
+
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", ""], ["mjButton", "", "variant", "primary", "size", "sm"], [3, "Loading"], ["toolbar", ""], [3, "TabChange", "Tabs", "ActiveKey"], ["Placeholder", "Search\u2026", 3, "ValueChange", "Value"], [3, "ClearAllRequested", "ActiveCount", "ShowClearAll"], [3, "ValuesChange", "Reset", "Fields", "Values"], [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"], [1, "action-btn-label"], [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
4298
|
i0.ɵɵelementStart(0, "mj-page-layout")(1, "mj-page-header", 18)(2, "div", 19);
|
|
4295
4299
|
i0.ɵɵelement(3, "mj-stat-badge", 20);
|
|
4296
4300
|
i0.ɵɵelementEnd();
|
|
4297
|
-
i0.ɵɵelementStart(4, "div", 21)
|
|
4298
|
-
i0.ɵɵ
|
|
4299
|
-
i0.ɵɵ
|
|
4300
|
-
i0.ɵɵ
|
|
4301
|
-
i0.ɵɵ
|
|
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);
|
|
4301
|
+
i0.ɵɵelementStart(4, "div", 21);
|
|
4302
|
+
i0.ɵɵconditionalCreate(5, MCPDashboardComponent_Case_5_Template, 4, 0, "button", 22)(6, MCPDashboardComponent_Case_6_Template, 4, 0, "button", 22)(7, MCPDashboardComponent_Case_7_Template, 9, 8)(8, MCPDashboardComponent_Case_8_Template, 1, 1, "mj-refresh-button", 23);
|
|
4303
|
+
i0.ɵɵelementEnd();
|
|
4304
|
+
i0.ɵɵelementStart(9, "div", 24)(10, "mj-tab-nav", 25);
|
|
4305
|
+
i0.ɵɵlistener("TabChange", function MCPDashboardComponent_Template_mj_tab_nav_TabChange_10_listener($event) { return ctx.setActiveTab($event); });
|
|
4303
4306
|
i0.ɵɵelementEnd();
|
|
4304
|
-
i0.ɵɵelementStart(11, "
|
|
4305
|
-
i0.ɵɵlistener("
|
|
4307
|
+
i0.ɵɵelementStart(11, "mj-page-search", 26);
|
|
4308
|
+
i0.ɵɵlistener("ValueChange", function MCPDashboardComponent_Template_mj_page_search_ValueChange_11_listener($event) { return ctx.onSearchTermChange($event); });
|
|
4306
4309
|
i0.ɵɵelementEnd();
|
|
4307
|
-
i0.ɵɵelementStart(
|
|
4308
|
-
i0.ɵɵlistener("
|
|
4309
|
-
i0.ɵɵ
|
|
4310
|
+
i0.ɵɵelementStart(12, "mj-filter-popover", 27);
|
|
4311
|
+
i0.ɵɵlistener("ClearAllRequested", function MCPDashboardComponent_Template_mj_filter_popover_ClearAllRequested_12_listener() { return ctx.resetPopoverFilters(); });
|
|
4312
|
+
i0.ɵɵelementStart(13, "mj-filter-panel", 28);
|
|
4313
|
+
i0.ɵɵlistener("ValuesChange", function MCPDashboardComponent_Template_mj_filter_panel_ValuesChange_13_listener($event) { return ctx.onFilterValuesChange($event); })("Reset", function MCPDashboardComponent_Template_mj_filter_panel_Reset_13_listener() { return ctx.resetPopoverFilters(); });
|
|
4314
|
+
i0.ɵɵelementEnd()()()();
|
|
4310
4315
|
i0.ɵɵelementStart(14, "mj-page-body", 29);
|
|
4311
4316
|
i0.ɵɵconditionalCreate(15, MCPDashboardComponent_Conditional_15_Template, 5, 1, "div", 30);
|
|
4312
4317
|
i0.ɵɵconditionalCreate(16, MCPDashboardComponent_Conditional_16_Template, 1, 0, "mj-loading", 31)(17, MCPDashboardComponent_Conditional_17_Template, 4, 1);
|
|
@@ -4316,20 +4321,20 @@ let MCPDashboardComponent = class MCPDashboardComponent extends BaseDashboard {
|
|
|
4316
4321
|
i0.ɵɵconditionalCreate(20, MCPDashboardComponent_Conditional_20_Template, 27, 9, "div", 32);
|
|
4317
4322
|
i0.ɵɵconditionalCreate(21, MCPDashboardComponent_Conditional_21_Template, 31, 12, "div", 33);
|
|
4318
4323
|
} if (rf & 2) {
|
|
4319
|
-
let
|
|
4324
|
+
let tmp_2_0;
|
|
4320
4325
|
i0.ɵɵadvance(3);
|
|
4321
4326
|
i0.ɵɵproperty("Count", ctx.CurrentFilteredCount)("Total", ctx.CurrentTotalCount);
|
|
4322
4327
|
i0.ɵɵadvance(2);
|
|
4323
|
-
i0.ɵɵ
|
|
4324
|
-
i0.ɵɵadvance();
|
|
4325
|
-
i0.ɵɵproperty("Fields", ctx.mcpFilterFields)("Values", ctx.mcpFilterValues);
|
|
4326
|
-
i0.ɵɵadvance();
|
|
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);
|
|
4328
|
+
i0.ɵɵconditional((tmp_2_0 = ctx.ActiveTab) === "servers" ? 5 : tmp_2_0 === "connections" ? 6 : tmp_2_0 === "tools" ? 7 : tmp_2_0 === "logs" ? 8 : -1);
|
|
4328
4329
|
i0.ɵɵadvance(5);
|
|
4329
4330
|
i0.ɵɵproperty("Tabs", ctx.mcpTabs)("ActiveKey", ctx.ActiveTab);
|
|
4330
4331
|
i0.ɵɵadvance();
|
|
4331
4332
|
i0.ɵɵproperty("Value", ctx.CurrentFilters.searchTerm);
|
|
4332
4333
|
i0.ɵɵadvance();
|
|
4334
|
+
i0.ɵɵproperty("ActiveCount", ctx.ActiveFilterCount)("ShowClearAll", ctx.ActiveFilterCount > 0);
|
|
4335
|
+
i0.ɵɵadvance();
|
|
4336
|
+
i0.ɵɵproperty("Fields", ctx.mcpFilterFields)("Values", ctx.mcpFilterValues);
|
|
4337
|
+
i0.ɵɵadvance();
|
|
4333
4338
|
i0.ɵɵproperty("Flex", true);
|
|
4334
4339
|
i0.ɵɵadvance();
|
|
4335
4340
|
i0.ɵɵconditional(ctx.ErrorMessage ? 15 : -1);
|
|
@@ -4351,7 +4356,7 @@ MCPDashboardComponent = __decorate([
|
|
|
4351
4356
|
export { MCPDashboardComponent };
|
|
4352
4357
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MCPDashboardComponent, [{
|
|
4353
4358
|
type: Component,
|
|
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"] }]
|
|
4359
|
+
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 <!-- 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 <span class=\"action-btn-label\">Add Server</span>\n </button>\n }\n @case ('connections') {\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"createConnection()\">\n <i class=\"fa-solid fa-plus\"></i>\n <span class=\"action-btn-label\">Add Connection</span>\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 <span class=\"action-btn-label\">Scale: {{ useScalablePagination ? 'ON' : 'OFF' }}</span>\n </button>\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"openTestToolDialog()\">\n <i class=\"fa-solid fa-play\"></i>\n <span class=\"action-btn-label\">Test Tool</span>\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 <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 </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"] }]
|
|
4355
4360
|
}], () => [{ type: i0.ChangeDetectorRef }, { type: i1.MCPToolsService }], null); })();
|
|
4356
4361
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MCPDashboardComponent, { className: "MCPDashboardComponent", filePath: "src/MCP/mcp-dashboard.component.ts", lineNumber: 230 }); })();
|
|
4357
4362
|
//# sourceMappingURL=mcp-dashboard.component.js.map
|