@memberjunction/ng-dashboards 3.3.0 → 3.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AI/components/agents/agent-configuration.component.d.ts +24 -0
- package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-configuration.component.js +198 -111
- package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
- package/dist/AI/components/models/model-management.component.d.ts +23 -0
- package/dist/AI/components/models/model-management.component.d.ts.map +1 -1
- package/dist/AI/components/models/model-management.component.js +189 -83
- package/dist/AI/components/models/model-management.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.d.ts +23 -0
- package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.js +135 -30
- package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
- package/dist/APIKeys/api-applications-panel.component.d.ts +5 -3
- package/dist/APIKeys/api-applications-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-applications-panel.component.js +50 -51
- package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
- package/dist/APIKeys/api-key-create-dialog.component.d.ts +4 -3
- package/dist/APIKeys/api-key-create-dialog.component.d.ts.map +1 -1
- package/dist/APIKeys/api-key-create-dialog.component.js +119 -94
- package/dist/APIKeys/api-key-create-dialog.component.js.map +1 -1
- package/dist/APIKeys/api-key-edit-panel.component.d.ts +1 -1
- package/dist/APIKeys/api-key-edit-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-key-edit-panel.component.js +100 -87
- package/dist/APIKeys/api-key-edit-panel.component.js.map +1 -1
- package/dist/APIKeys/api-key-list.component.d.ts +2 -1
- package/dist/APIKeys/api-key-list.component.d.ts.map +1 -1
- package/dist/APIKeys/api-key-list.component.js +24 -20
- package/dist/APIKeys/api-key-list.component.js.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.d.ts +6 -4
- package/dist/APIKeys/api-keys-resource.component.d.ts.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.js +42 -57
- package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-breadcrumb.component.d.ts +22 -0
- package/dist/Actions/components/explorer/action-breadcrumb.component.d.ts.map +1 -0
- package/dist/Actions/components/explorer/action-breadcrumb.component.js +139 -0
- package/dist/Actions/components/explorer/action-breadcrumb.component.js.map +1 -0
- package/dist/Actions/components/explorer/action-card.component.d.ts +39 -0
- package/dist/Actions/components/explorer/action-card.component.d.ts.map +1 -0
- package/dist/Actions/components/explorer/action-card.component.js +410 -0
- package/dist/Actions/components/explorer/action-card.component.js.map +1 -0
- package/dist/Actions/components/explorer/action-explorer.component.d.ts +62 -0
- package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -0
- package/dist/Actions/components/explorer/action-explorer.component.js +527 -0
- package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -0
- package/dist/Actions/components/explorer/action-list-item.component.d.ts +24 -0
- package/dist/Actions/components/explorer/action-list-item.component.d.ts.map +1 -0
- package/dist/Actions/components/explorer/action-list-item.component.js +210 -0
- package/dist/Actions/components/explorer/action-list-item.component.js.map +1 -0
- package/dist/Actions/components/explorer/action-toolbar.component.d.ts +63 -0
- package/dist/Actions/components/explorer/action-toolbar.component.d.ts.map +1 -0
- package/dist/Actions/components/explorer/action-toolbar.component.js +483 -0
- package/dist/Actions/components/explorer/action-toolbar.component.js.map +1 -0
- package/dist/Actions/components/explorer/action-tree-panel.component.d.ts +57 -0
- package/dist/Actions/components/explorer/action-tree-panel.component.d.ts.map +1 -0
- package/dist/Actions/components/explorer/action-tree-panel.component.js +454 -0
- package/dist/Actions/components/explorer/action-tree-panel.component.js.map +1 -0
- package/dist/Actions/components/explorer/index.d.ts +10 -0
- package/dist/Actions/components/explorer/index.d.ts.map +1 -0
- package/dist/Actions/components/explorer/index.js +14 -0
- package/dist/Actions/components/explorer/index.js.map +1 -0
- package/dist/Actions/components/explorer/new-action-panel.component.d.ts +49 -0
- package/dist/Actions/components/explorer/new-action-panel.component.d.ts.map +1 -0
- package/dist/Actions/components/explorer/new-action-panel.component.js +359 -0
- package/dist/Actions/components/explorer/new-action-panel.component.js.map +1 -0
- package/dist/Actions/components/explorer/new-category-panel.component.d.ts +37 -0
- package/dist/Actions/components/explorer/new-category-panel.component.d.ts.map +1 -0
- package/dist/Actions/components/explorer/new-category-panel.component.js +282 -0
- package/dist/Actions/components/explorer/new-category-panel.component.js.map +1 -0
- package/dist/Actions/index.d.ts +3 -0
- package/dist/Actions/index.d.ts.map +1 -1
- package/dist/Actions/index.js +5 -0
- package/dist/Actions/index.js.map +1 -1
- package/dist/Actions/services/action-explorer-state.service.d.ts +104 -0
- package/dist/Actions/services/action-explorer-state.service.d.ts.map +1 -0
- package/dist/Actions/services/action-explorer-state.service.js +352 -0
- package/dist/Actions/services/action-explorer-state.service.js.map +1 -0
- package/dist/Communication/communication-dashboard.component.d.ts +2 -6
- package/dist/Communication/communication-dashboard.component.d.ts.map +1 -1
- package/dist/Communication/communication-dashboard.component.js +142 -93
- package/dist/Communication/communication-dashboard.component.js.map +1 -1
- package/dist/Communication/communication-logs-resource.component.d.ts +10 -4
- package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-logs-resource.component.js +253 -121
- package/dist/Communication/communication-logs-resource.component.js.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.d.ts +38 -3
- package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.js +431 -157
- package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
- package/dist/Communication/communication-providers-resource.component.d.ts +16 -5
- package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-providers-resource.component.js +229 -118
- package/dist/Communication/communication-providers-resource.component.js.map +1 -1
- package/dist/Communication/communication-runs-resource.component.d.ts +4 -2
- package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-runs-resource.component.js +155 -149
- package/dist/Communication/communication-runs-resource.component.js.map +1 -1
- package/dist/Communication/communication-templates-resource.component.d.ts +43 -0
- package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -0
- package/dist/Communication/communication-templates-resource.component.js +371 -0
- package/dist/Communication/communication-templates-resource.component.js.map +1 -0
- package/dist/ComponentStudio/component-studio-dashboard.component.d.ts +69 -267
- package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.js +698 -1802
- package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts +68 -0
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts.map +1 -0
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js +401 -0
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js.map +1 -0
- package/dist/ComponentStudio/components/browser/component-browser.component.d.ts +44 -0
- package/dist/ComponentStudio/components/browser/component-browser.component.d.ts.map +1 -0
- package/dist/ComponentStudio/components/browser/component-browser.component.js +636 -0
- package/dist/ComponentStudio/components/browser/component-browser.component.js.map +1 -0
- package/dist/ComponentStudio/components/editors/code-editor-panel.component.d.ts +35 -0
- package/dist/ComponentStudio/components/editors/code-editor-panel.component.d.ts.map +1 -0
- package/dist/ComponentStudio/components/editors/code-editor-panel.component.js +380 -0
- package/dist/ComponentStudio/components/editors/code-editor-panel.component.js.map +1 -0
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.d.ts +24 -0
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.d.ts.map +1 -0
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js +221 -0
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js.map +1 -0
- package/dist/ComponentStudio/components/editors/requirements-editor.component.d.ts +28 -0
- package/dist/ComponentStudio/components/editors/requirements-editor.component.d.ts.map +1 -0
- package/dist/ComponentStudio/components/editors/requirements-editor.component.js +263 -0
- package/dist/ComponentStudio/components/editors/requirements-editor.component.js.map +1 -0
- package/dist/ComponentStudio/components/editors/spec-editor.component.d.ts +34 -0
- package/dist/ComponentStudio/components/editors/spec-editor.component.d.ts.map +1 -0
- package/dist/ComponentStudio/components/editors/spec-editor.component.js +307 -0
- package/dist/ComponentStudio/components/editors/spec-editor.component.js.map +1 -0
- package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.d.ts +29 -0
- package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.d.ts.map +1 -0
- package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js +159 -0
- package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js.map +1 -0
- package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.d.ts +20 -0
- package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.d.ts.map +1 -0
- package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js +192 -0
- package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js.map +1 -0
- package/dist/ComponentStudio/components/workspace/component-preview.component.d.ts +57 -0
- package/dist/ComponentStudio/components/workspace/component-preview.component.d.ts.map +1 -0
- package/dist/ComponentStudio/components/workspace/component-preview.component.js +342 -0
- package/dist/ComponentStudio/components/workspace/component-preview.component.js.map +1 -0
- package/dist/ComponentStudio/components/workspace/editor-tabs.component.d.ts +15 -0
- package/dist/ComponentStudio/components/workspace/editor-tabs.component.d.ts.map +1 -0
- package/dist/ComponentStudio/components/workspace/editor-tabs.component.js +144 -0
- package/dist/ComponentStudio/components/workspace/editor-tabs.component.js.map +1 -0
- package/dist/ComponentStudio/services/component-studio-state.service.d.ts +203 -0
- package/dist/ComponentStudio/services/component-studio-state.service.d.ts.map +1 -0
- package/dist/ComponentStudio/services/component-studio-state.service.js +651 -0
- package/dist/ComponentStudio/services/component-studio-state.service.js.map +1 -0
- package/dist/ComponentStudio/services/component-version.service.d.ts +120 -0
- package/dist/ComponentStudio/services/component-version.service.d.ts.map +1 -0
- package/dist/ComponentStudio/services/component-version.service.js +394 -0
- package/dist/ComponentStudio/services/component-version.service.js.map +1 -0
- package/dist/Credentials/components/credentials-categories-resource.component.d.ts +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.js +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.d.ts +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.js +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.d.ts +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.js +1 -1
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts +2 -2
- package/dist/MCP/components/mcp-connection-dialog.component.d.ts +72 -0
- package/dist/MCP/components/mcp-connection-dialog.component.d.ts.map +1 -0
- package/dist/MCP/components/mcp-connection-dialog.component.js +529 -0
- package/dist/MCP/components/mcp-connection-dialog.component.js.map +1 -0
- package/dist/MCP/components/mcp-log-detail-panel.component.d.ts +77 -0
- package/dist/MCP/components/mcp-log-detail-panel.component.d.ts.map +1 -0
- package/dist/MCP/components/mcp-log-detail-panel.component.js +535 -0
- package/dist/MCP/components/mcp-log-detail-panel.component.js.map +1 -0
- package/dist/MCP/components/mcp-server-dialog.component.d.ts +77 -0
- package/dist/MCP/components/mcp-server-dialog.component.d.ts.map +1 -0
- package/dist/MCP/components/mcp-server-dialog.component.js +437 -0
- package/dist/MCP/components/mcp-server-dialog.component.js.map +1 -0
- package/dist/MCP/components/mcp-test-tool-dialog.component.d.ts +271 -0
- package/dist/MCP/components/mcp-test-tool-dialog.component.d.ts.map +1 -0
- package/dist/MCP/components/mcp-test-tool-dialog.component.js +1300 -0
- package/dist/MCP/components/mcp-test-tool-dialog.component.js.map +1 -0
- package/dist/MCP/index.d.ts +11 -0
- package/dist/MCP/index.d.ts.map +1 -0
- package/dist/MCP/index.js +15 -0
- package/dist/MCP/index.js.map +1 -0
- package/dist/MCP/mcp-dashboard.component.d.ts +409 -0
- package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -0
- package/dist/MCP/mcp-dashboard.component.js +2486 -0
- package/dist/MCP/mcp-dashboard.component.js.map +1 -0
- package/dist/MCP/mcp-resource.component.d.ts +20 -0
- package/dist/MCP/mcp-resource.component.d.ts.map +1 -0
- package/dist/MCP/mcp-resource.component.js +55 -0
- package/dist/MCP/mcp-resource.component.js.map +1 -0
- package/dist/MCP/mcp.module.d.ts +27 -0
- package/dist/MCP/mcp.module.d.ts.map +1 -0
- package/dist/MCP/mcp.module.js +122 -0
- package/dist/MCP/mcp.module.js.map +1 -0
- package/dist/MCP/services/mcp-tools.service.d.ts +109 -0
- package/dist/MCP/services/mcp-tools.service.d.ts.map +1 -0
- package/dist/MCP/services/mcp-tools.service.js +222 -0
- package/dist/MCP/services/mcp-tools.service.js.map +1 -0
- package/dist/Scheduling/components/index.d.ts +5 -8
- package/dist/Scheduling/components/index.d.ts.map +1 -1
- package/dist/Scheduling/components/index.js +6 -9
- package/dist/Scheduling/components/index.js.map +1 -1
- package/dist/Scheduling/components/job-slideout.component.d.ts +45 -0
- package/dist/Scheduling/components/job-slideout.component.d.ts.map +1 -0
- package/dist/Scheduling/components/job-slideout.component.js +458 -0
- package/dist/Scheduling/components/job-slideout.component.js.map +1 -0
- package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts +19 -0
- package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts.map +1 -0
- package/dist/Scheduling/components/scheduling-activity-resource.component.js +51 -0
- package/dist/Scheduling/components/scheduling-activity-resource.component.js.map +1 -0
- package/dist/Scheduling/components/scheduling-activity.component.d.ts +71 -0
- package/dist/Scheduling/components/scheduling-activity.component.d.ts.map +1 -0
- package/dist/Scheduling/components/scheduling-activity.component.js +714 -0
- package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -0
- package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts +3 -4
- package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.js +3 -7
- package/dist/Scheduling/components/scheduling-jobs-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs.component.d.ts +52 -34
- package/dist/Scheduling/components/scheduling-jobs.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs.component.js +446 -261
- package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts +19 -0
- package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts.map +1 -0
- package/dist/Scheduling/components/scheduling-overview-resource.component.js +51 -0
- package/dist/Scheduling/components/scheduling-overview-resource.component.js.map +1 -0
- package/dist/Scheduling/components/scheduling-overview.component.d.ts +43 -0
- package/dist/Scheduling/components/scheduling-overview.component.d.ts.map +1 -0
- package/dist/Scheduling/components/scheduling-overview.component.js +595 -0
- package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -0
- package/dist/Scheduling/scheduling-dashboard.component.d.ts +22 -32
- package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.js +175 -169
- package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
- package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts +49 -6
- package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts.map +1 -1
- package/dist/Scheduling/services/scheduling-instrumentation.service.js +218 -149
- package/dist/Scheduling/services/scheduling-instrumentation.service.js.map +1 -1
- package/dist/Testing/components/index.d.ts +7 -8
- package/dist/Testing/components/index.d.ts.map +1 -1
- package/dist/Testing/components/index.js +8 -9
- package/dist/Testing/components/index.js.map +1 -1
- package/dist/Testing/components/testing-analytics-resource.component.d.ts +0 -4
- package/dist/Testing/components/testing-analytics-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-analytics-resource.component.js +1 -7
- package/dist/Testing/components/testing-analytics-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-analytics.component.d.ts +52 -37
- package/dist/Testing/components/testing-analytics.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-analytics.component.js +1023 -569
- package/dist/Testing/components/testing-analytics.component.js.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts +16 -0
- package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts.map +1 -0
- package/dist/Testing/components/testing-dashboard-tab-resource.component.js +47 -0
- package/dist/Testing/components/testing-dashboard-tab-resource.component.js.map +1 -0
- package/dist/Testing/components/testing-dashboard-tab.component.d.ts +57 -0
- package/dist/Testing/components/testing-dashboard-tab.component.d.ts.map +1 -0
- package/dist/Testing/components/testing-dashboard-tab.component.js +649 -0
- package/dist/Testing/components/testing-dashboard-tab.component.js.map +1 -0
- package/dist/{Scheduling/components/scheduling-types-resource.component.d.ts → Testing/components/testing-explorer-resource.component.d.ts} +5 -9
- package/dist/Testing/components/testing-explorer-resource.component.d.ts.map +1 -0
- package/dist/Testing/components/testing-explorer-resource.component.js +47 -0
- package/dist/Testing/components/testing-explorer-resource.component.js.map +1 -0
- package/dist/Testing/components/testing-explorer.component.d.ts +193 -0
- package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -0
- package/dist/Testing/components/testing-explorer.component.js +2212 -0
- package/dist/Testing/components/testing-explorer.component.js.map +1 -0
- package/dist/Testing/components/testing-review-resource.component.d.ts +16 -0
- package/dist/Testing/components/testing-review-resource.component.d.ts.map +1 -0
- package/dist/Testing/components/testing-review-resource.component.js +47 -0
- package/dist/Testing/components/testing-review-resource.component.js.map +1 -0
- package/dist/Testing/components/testing-review.component.d.ts +60 -0
- package/dist/Testing/components/testing-review.component.d.ts.map +1 -0
- package/dist/Testing/components/testing-review.component.js +985 -0
- package/dist/Testing/components/testing-review.component.js.map +1 -0
- package/dist/Testing/components/testing-runs-resource.component.d.ts +16 -0
- package/dist/Testing/components/testing-runs-resource.component.d.ts.map +1 -0
- package/dist/Testing/components/testing-runs-resource.component.js +47 -0
- package/dist/Testing/components/testing-runs-resource.component.js.map +1 -0
- package/dist/Testing/components/testing-runs.component.d.ts +82 -0
- package/dist/Testing/components/testing-runs.component.d.ts.map +1 -0
- package/dist/Testing/components/testing-runs.component.js +1067 -0
- package/dist/Testing/components/testing-runs.component.js.map +1 -0
- package/dist/Testing/testing-dashboard.component.d.ts +12 -15
- package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
- package/dist/Testing/testing-dashboard.component.js +46 -68
- package/dist/Testing/testing-dashboard.component.js.map +1 -1
- package/dist/module.d.ts +121 -104
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +185 -93
- package/dist/module.js.map +1 -1
- package/dist/public-api.d.ts +5 -3
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +23 -16
- package/dist/public-api.js.map +1 -1
- package/dist/shared/pipes/highlight-search.pipe.d.ts +17 -0
- package/dist/shared/pipes/highlight-search.pipe.d.ts.map +1 -0
- package/dist/shared/pipes/highlight-search.pipe.js +40 -0
- package/dist/shared/pipes/highlight-search.pipe.js.map +1 -0
- package/dist/shared/pipes/index.d.ts +2 -0
- package/dist/shared/pipes/index.d.ts.map +1 -0
- package/dist/shared/pipes/index.js +2 -0
- package/dist/shared/pipes/index.js.map +1 -0
- package/dist/shared/shared-pipes.module.d.ts +11 -0
- package/dist/shared/shared-pipes.module.d.ts.map +1 -0
- package/dist/shared/shared-pipes.module.js +24 -0
- package/dist/shared/shared-pipes.module.js.map +1 -0
- package/package.json +39 -32
- package/dist/Credentials/components/credential-category-edit-panel.component.d.ts +0 -44
- package/dist/Credentials/components/credential-category-edit-panel.component.d.ts.map +0 -1
- package/dist/Credentials/components/credential-category-edit-panel.component.js +0 -456
- package/dist/Credentials/components/credential-category-edit-panel.component.js.map +0 -1
- package/dist/Credentials/components/credential-edit-panel.component.d.ts +0 -70
- package/dist/Credentials/components/credential-edit-panel.component.d.ts.map +0 -1
- package/dist/Credentials/components/credential-edit-panel.component.js +0 -694
- package/dist/Credentials/components/credential-edit-panel.component.js.map +0 -1
- package/dist/Credentials/components/credential-type-edit-panel.component.d.ts +0 -56
- package/dist/Credentials/components/credential-type-edit-panel.component.d.ts.map +0 -1
- package/dist/Credentials/components/credential-type-edit-panel.component.js +0 -563
- package/dist/Credentials/components/credential-type-edit-panel.component.js.map +0 -1
- package/dist/Scheduling/components/scheduling-health-resource.component.d.ts +0 -20
- package/dist/Scheduling/components/scheduling-health-resource.component.d.ts.map +0 -1
- package/dist/Scheduling/components/scheduling-health-resource.component.js +0 -55
- package/dist/Scheduling/components/scheduling-health-resource.component.js.map +0 -1
- package/dist/Scheduling/components/scheduling-health.component.d.ts +0 -30
- package/dist/Scheduling/components/scheduling-health.component.d.ts.map +0 -1
- package/dist/Scheduling/components/scheduling-health.component.js +0 -315
- package/dist/Scheduling/components/scheduling-health.component.js.map +0 -1
- package/dist/Scheduling/components/scheduling-history-resource.component.d.ts +0 -20
- package/dist/Scheduling/components/scheduling-history-resource.component.d.ts.map +0 -1
- package/dist/Scheduling/components/scheduling-history-resource.component.js +0 -55
- package/dist/Scheduling/components/scheduling-history-resource.component.js.map +0 -1
- package/dist/Scheduling/components/scheduling-history.component.d.ts +0 -48
- package/dist/Scheduling/components/scheduling-history.component.d.ts.map +0 -1
- package/dist/Scheduling/components/scheduling-history.component.js +0 -377
- package/dist/Scheduling/components/scheduling-history.component.js.map +0 -1
- package/dist/Scheduling/components/scheduling-monitor-resource.component.d.ts +0 -20
- package/dist/Scheduling/components/scheduling-monitor-resource.component.d.ts.map +0 -1
- package/dist/Scheduling/components/scheduling-monitor-resource.component.js +0 -55
- package/dist/Scheduling/components/scheduling-monitor-resource.component.js.map +0 -1
- package/dist/Scheduling/components/scheduling-monitoring.component.d.ts +0 -37
- package/dist/Scheduling/components/scheduling-monitoring.component.d.ts.map +0 -1
- package/dist/Scheduling/components/scheduling-monitoring.component.js +0 -488
- package/dist/Scheduling/components/scheduling-monitoring.component.js.map +0 -1
- package/dist/Scheduling/components/scheduling-types-resource.component.d.ts.map +0 -1
- package/dist/Scheduling/components/scheduling-types-resource.component.js +0 -55
- package/dist/Scheduling/components/scheduling-types-resource.component.js.map +0 -1
- package/dist/Scheduling/components/scheduling-types.component.d.ts +0 -22
- package/dist/Scheduling/components/scheduling-types.component.d.ts.map +0 -1
- package/dist/Scheduling/components/scheduling-types.component.js +0 -165
- package/dist/Scheduling/components/scheduling-types.component.js.map +0 -1
- package/dist/Testing/components/testing-execution-resource.component.d.ts +0 -20
- package/dist/Testing/components/testing-execution-resource.component.d.ts.map +0 -1
- package/dist/Testing/components/testing-execution-resource.component.js +0 -55
- package/dist/Testing/components/testing-execution-resource.component.js.map +0 -1
- package/dist/Testing/components/testing-execution.component.d.ts +0 -71
- package/dist/Testing/components/testing-execution.component.d.ts.map +0 -1
- package/dist/Testing/components/testing-execution.component.js +0 -845
- package/dist/Testing/components/testing-execution.component.js.map +0 -1
- package/dist/Testing/components/testing-feedback-resource.component.d.ts +0 -20
- package/dist/Testing/components/testing-feedback-resource.component.d.ts.map +0 -1
- package/dist/Testing/components/testing-feedback-resource.component.js +0 -55
- package/dist/Testing/components/testing-feedback-resource.component.js.map +0 -1
- package/dist/Testing/components/testing-feedback.component.d.ts +0 -111
- package/dist/Testing/components/testing-feedback.component.d.ts.map +0 -1
- package/dist/Testing/components/testing-feedback.component.js +0 -1486
- package/dist/Testing/components/testing-feedback.component.js.map +0 -1
- package/dist/Testing/components/testing-overview-resource.component.d.ts +0 -20
- package/dist/Testing/components/testing-overview-resource.component.d.ts.map +0 -1
- package/dist/Testing/components/testing-overview-resource.component.js +0 -55
- package/dist/Testing/components/testing-overview-resource.component.js.map +0 -1
- package/dist/Testing/components/testing-overview.component.d.ts +0 -30
- package/dist/Testing/components/testing-overview.component.d.ts.map +0 -1
- package/dist/Testing/components/testing-overview.component.js +0 -361
- package/dist/Testing/components/testing-overview.component.js.map +0 -1
- package/dist/Testing/components/testing-version-comparison.component.d.ts +0 -62
- package/dist/Testing/components/testing-version-comparison.component.d.ts.map +0 -1
- package/dist/Testing/components/testing-version-comparison.component.js +0 -815
- package/dist/Testing/components/testing-version-comparison.component.js.map +0 -1
- package/dist/Testing/components/testing-version-resource.component.d.ts +0 -20
- package/dist/Testing/components/testing-version-resource.component.d.ts.map +0 -1
- package/dist/Testing/components/testing-version-resource.component.js +0 -55
- package/dist/Testing/components/testing-version-resource.component.js.map +0 -1
|
@@ -0,0 +1,1300 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview MCP Test Tool Slide-Out Panel Component
|
|
3
|
+
*
|
|
4
|
+
* Provides a beautiful UX for testing MCP tools with:
|
|
5
|
+
* - Server/Connection/Tool selection
|
|
6
|
+
* - Dynamic parameter input UI based on JSON Schema
|
|
7
|
+
* - Tool execution with results display
|
|
8
|
+
* - User settings caching via UserInfoEngine
|
|
9
|
+
* - Resizable slide-out panel with width persistence
|
|
10
|
+
*/
|
|
11
|
+
import { Component, Input, Output, EventEmitter, HostListener } from '@angular/core';
|
|
12
|
+
import { Subject } from 'rxjs';
|
|
13
|
+
import { debounceTime, takeUntil } from 'rxjs/operators';
|
|
14
|
+
import { trigger, transition, style, animate } from '@angular/animations';
|
|
15
|
+
import { GraphQLDataProvider, gql } from '@memberjunction/graphql-dataprovider';
|
|
16
|
+
import { UserInfoEngine } from '@memberjunction/core-entities';
|
|
17
|
+
import * as i0 from "@angular/core";
|
|
18
|
+
import * as i1 from "@angular/common";
|
|
19
|
+
import * as i2 from "@angular/forms";
|
|
20
|
+
import * as i3 from "@progress/kendo-angular-buttons";
|
|
21
|
+
import * as i4 from "@progress/kendo-angular-dropdowns";
|
|
22
|
+
import * as i5 from "@progress/kendo-angular-inputs";
|
|
23
|
+
import * as i6 from "@memberjunction/ng-code-editor";
|
|
24
|
+
const _forTrack0 = ($index, $item) => $item.name;
|
|
25
|
+
function MCPTestToolDialogComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
26
|
+
const _r1 = i0.ɵɵgetCurrentView();
|
|
27
|
+
i0.ɵɵelementStart(0, "div", 2);
|
|
28
|
+
i0.ɵɵlistener("click", function MCPTestToolDialogComponent_Conditional_0_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.closeDialog()); });
|
|
29
|
+
i0.ɵɵelementEnd();
|
|
30
|
+
} }
|
|
31
|
+
function MCPTestToolDialogComponent_div_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
32
|
+
const _r4 = i0.ɵɵgetCurrentView();
|
|
33
|
+
i0.ɵɵelementStart(0, "div", 19);
|
|
34
|
+
i0.ɵɵlistener("mousedown", function MCPTestToolDialogComponent_div_1_Conditional_1_Template_div_mousedown_0_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onResizeStart($event)); });
|
|
35
|
+
i0.ɵɵelement(1, "div", 20);
|
|
36
|
+
i0.ɵɵelementEnd();
|
|
37
|
+
} if (rf & 2) {
|
|
38
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
39
|
+
i0.ɵɵclassProp("active", ctx_r1.IsResizing);
|
|
40
|
+
} }
|
|
41
|
+
function MCPTestToolDialogComponent_div_1_div_27_ng_template_9_Template(rf, ctx) { if (rf & 1) {
|
|
42
|
+
i0.ɵɵelementStart(0, "div", 37)(1, "span", 38);
|
|
43
|
+
i0.ɵɵtext(2);
|
|
44
|
+
i0.ɵɵelementEnd();
|
|
45
|
+
i0.ɵɵelementStart(3, "span", 39);
|
|
46
|
+
i0.ɵɵtext(4);
|
|
47
|
+
i0.ɵɵelementEnd()();
|
|
48
|
+
} if (rf & 2) {
|
|
49
|
+
const dataItem_r6 = ctx.$implicit;
|
|
50
|
+
i0.ɵɵadvance(2);
|
|
51
|
+
i0.ɵɵtextInterpolate(dataItem_r6.Name);
|
|
52
|
+
i0.ɵɵadvance();
|
|
53
|
+
i0.ɵɵclassMap("status-" + dataItem_r6.Status.toLowerCase());
|
|
54
|
+
i0.ɵɵadvance();
|
|
55
|
+
i0.ɵɵtextInterpolate1(" ", dataItem_r6.Status, " ");
|
|
56
|
+
} }
|
|
57
|
+
function MCPTestToolDialogComponent_div_1_div_27_ng_template_17_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
58
|
+
i0.ɵɵelementStart(0, "span", 40);
|
|
59
|
+
i0.ɵɵtext(1);
|
|
60
|
+
i0.ɵɵelementEnd();
|
|
61
|
+
} if (rf & 2) {
|
|
62
|
+
const dataItem_r7 = i0.ɵɵnextContext().$implicit;
|
|
63
|
+
i0.ɵɵadvance();
|
|
64
|
+
i0.ɵɵtextInterpolate(dataItem_r7.Description);
|
|
65
|
+
} }
|
|
66
|
+
function MCPTestToolDialogComponent_div_1_div_27_ng_template_17_Template(rf, ctx) { if (rf & 1) {
|
|
67
|
+
i0.ɵɵelementStart(0, "div", 37)(1, "span", 38);
|
|
68
|
+
i0.ɵɵtext(2);
|
|
69
|
+
i0.ɵɵelementEnd();
|
|
70
|
+
i0.ɵɵtemplate(3, MCPTestToolDialogComponent_div_1_div_27_ng_template_17_Conditional_3_Template, 2, 1, "span", 40);
|
|
71
|
+
i0.ɵɵelementEnd();
|
|
72
|
+
} if (rf & 2) {
|
|
73
|
+
const dataItem_r7 = ctx.$implicit;
|
|
74
|
+
i0.ɵɵadvance(2);
|
|
75
|
+
i0.ɵɵtextInterpolate(dataItem_r7.Name);
|
|
76
|
+
i0.ɵɵadvance();
|
|
77
|
+
i0.ɵɵconditional(dataItem_r7.Description ? 3 : -1);
|
|
78
|
+
} }
|
|
79
|
+
function MCPTestToolDialogComponent_div_1_div_27_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
80
|
+
i0.ɵɵelementStart(0, "span", 31);
|
|
81
|
+
i0.ɵɵtext(1, "Select a server first");
|
|
82
|
+
i0.ɵɵelementEnd();
|
|
83
|
+
} }
|
|
84
|
+
function MCPTestToolDialogComponent_div_1_div_27_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
85
|
+
i0.ɵɵelementStart(0, "span", 32);
|
|
86
|
+
i0.ɵɵelement(1, "i", 41);
|
|
87
|
+
i0.ɵɵtext(2);
|
|
88
|
+
i0.ɵɵelementEnd();
|
|
89
|
+
} if (rf & 2) {
|
|
90
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
91
|
+
i0.ɵɵadvance(2);
|
|
92
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.NoConnectionsWarning, " ");
|
|
93
|
+
} }
|
|
94
|
+
function MCPTestToolDialogComponent_div_1_div_27_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
95
|
+
i0.ɵɵelementStart(0, "span", 33);
|
|
96
|
+
i0.ɵɵelement(1, "i", 42);
|
|
97
|
+
i0.ɵɵtext(2, " Auto-selected (only connection available) ");
|
|
98
|
+
i0.ɵɵelementEnd();
|
|
99
|
+
} }
|
|
100
|
+
function MCPTestToolDialogComponent_div_1_div_27_ng_template_28_Template(rf, ctx) { if (rf & 1) {
|
|
101
|
+
i0.ɵɵtext(0);
|
|
102
|
+
} if (rf & 2) {
|
|
103
|
+
const dataItem_r8 = ctx.$implicit;
|
|
104
|
+
i0.ɵɵtextInterpolate1(" ", (dataItem_r8 == null ? null : dataItem_r8.ToolTitle) || (dataItem_r8 == null ? null : dataItem_r8.ToolName) || "Select a tool...", " ");
|
|
105
|
+
} }
|
|
106
|
+
function MCPTestToolDialogComponent_div_1_div_27_ng_template_29_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
107
|
+
i0.ɵɵelementStart(0, "span", 40);
|
|
108
|
+
i0.ɵɵtext(1);
|
|
109
|
+
i0.ɵɵelementEnd();
|
|
110
|
+
} if (rf & 2) {
|
|
111
|
+
const dataItem_r9 = i0.ɵɵnextContext().$implicit;
|
|
112
|
+
i0.ɵɵadvance();
|
|
113
|
+
i0.ɵɵtextInterpolate(dataItem_r9.ToolDescription);
|
|
114
|
+
} }
|
|
115
|
+
function MCPTestToolDialogComponent_div_1_div_27_ng_template_29_Template(rf, ctx) { if (rf & 1) {
|
|
116
|
+
i0.ɵɵelementStart(0, "div", 43)(1, "span", 38);
|
|
117
|
+
i0.ɵɵtext(2);
|
|
118
|
+
i0.ɵɵelementEnd();
|
|
119
|
+
i0.ɵɵtemplate(3, MCPTestToolDialogComponent_div_1_div_27_ng_template_29_Conditional_3_Template, 2, 1, "span", 40);
|
|
120
|
+
i0.ɵɵelementEnd();
|
|
121
|
+
} if (rf & 2) {
|
|
122
|
+
const dataItem_r9 = ctx.$implicit;
|
|
123
|
+
i0.ɵɵadvance(2);
|
|
124
|
+
i0.ɵɵtextInterpolate(dataItem_r9.ToolTitle || dataItem_r9.ToolName);
|
|
125
|
+
i0.ɵɵadvance();
|
|
126
|
+
i0.ɵɵconditional(dataItem_r9.ToolDescription ? 3 : -1);
|
|
127
|
+
} }
|
|
128
|
+
function MCPTestToolDialogComponent_div_1_div_27_Conditional_30_Template(rf, ctx) { if (rf & 1) {
|
|
129
|
+
i0.ɵɵelementStart(0, "span", 31);
|
|
130
|
+
i0.ɵɵtext(1, "Select a server first");
|
|
131
|
+
i0.ɵɵelementEnd();
|
|
132
|
+
} }
|
|
133
|
+
function MCPTestToolDialogComponent_div_1_div_27_Template(rf, ctx) { if (rf & 1) {
|
|
134
|
+
const _r5 = i0.ɵɵgetCurrentView();
|
|
135
|
+
i0.ɵɵelementStart(0, "div", 21)(1, "div", 22)(2, "div", 23)(3, "label", 24);
|
|
136
|
+
i0.ɵɵelement(4, "i", 25);
|
|
137
|
+
i0.ɵɵtext(5, " Server ");
|
|
138
|
+
i0.ɵɵelementStart(6, "span", 26);
|
|
139
|
+
i0.ɵɵtext(7, "*");
|
|
140
|
+
i0.ɵɵelementEnd()();
|
|
141
|
+
i0.ɵɵelementStart(8, "kendo-dropdownlist", 27);
|
|
142
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MCPTestToolDialogComponent_div_1_div_27_Template_kendo_dropdownlist_ngModelChange_8_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.ServerID, $event) || (ctx_r1.ServerID = $event); return i0.ɵɵresetView($event); });
|
|
143
|
+
i0.ɵɵlistener("valueChange", function MCPTestToolDialogComponent_div_1_div_27_Template_kendo_dropdownlist_valueChange_8_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onServerChange()); })("filterChange", function MCPTestToolDialogComponent_div_1_div_27_Template_kendo_dropdownlist_filterChange_8_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onServerFilterChange($event)); });
|
|
144
|
+
i0.ɵɵtemplate(9, MCPTestToolDialogComponent_div_1_div_27_ng_template_9_Template, 5, 4, "ng-template", 28);
|
|
145
|
+
i0.ɵɵelementEnd()();
|
|
146
|
+
i0.ɵɵelementStart(10, "div", 23)(11, "label", 24);
|
|
147
|
+
i0.ɵɵelement(12, "i", 29);
|
|
148
|
+
i0.ɵɵtext(13, " Connection ");
|
|
149
|
+
i0.ɵɵelementStart(14, "span", 26);
|
|
150
|
+
i0.ɵɵtext(15, "*");
|
|
151
|
+
i0.ɵɵelementEnd()();
|
|
152
|
+
i0.ɵɵelementStart(16, "kendo-dropdownlist", 30);
|
|
153
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MCPTestToolDialogComponent_div_1_div_27_Template_kendo_dropdownlist_ngModelChange_16_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.ConnectionID, $event) || (ctx_r1.ConnectionID = $event); return i0.ɵɵresetView($event); });
|
|
154
|
+
i0.ɵɵlistener("valueChange", function MCPTestToolDialogComponent_div_1_div_27_Template_kendo_dropdownlist_valueChange_16_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onConnectionChange()); })("filterChange", function MCPTestToolDialogComponent_div_1_div_27_Template_kendo_dropdownlist_filterChange_16_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onConnectionFilterChange($event)); });
|
|
155
|
+
i0.ɵɵtemplate(17, MCPTestToolDialogComponent_div_1_div_27_ng_template_17_Template, 4, 2, "ng-template", 28);
|
|
156
|
+
i0.ɵɵelementEnd();
|
|
157
|
+
i0.ɵɵtemplate(18, MCPTestToolDialogComponent_div_1_div_27_Conditional_18_Template, 2, 0, "span", 31)(19, MCPTestToolDialogComponent_div_1_div_27_Conditional_19_Template, 3, 1, "span", 32)(20, MCPTestToolDialogComponent_div_1_div_27_Conditional_20_Template, 3, 0, "span", 33);
|
|
158
|
+
i0.ɵɵelementEnd();
|
|
159
|
+
i0.ɵɵelementStart(21, "div", 23)(22, "label", 24);
|
|
160
|
+
i0.ɵɵelement(23, "i", 34);
|
|
161
|
+
i0.ɵɵtext(24, " Tool ");
|
|
162
|
+
i0.ɵɵelementStart(25, "span", 26);
|
|
163
|
+
i0.ɵɵtext(26, "*");
|
|
164
|
+
i0.ɵɵelementEnd()();
|
|
165
|
+
i0.ɵɵelementStart(27, "kendo-dropdownlist", 35);
|
|
166
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MCPTestToolDialogComponent_div_1_div_27_Template_kendo_dropdownlist_ngModelChange_27_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.ToolID, $event) || (ctx_r1.ToolID = $event); return i0.ɵɵresetView($event); });
|
|
167
|
+
i0.ɵɵlistener("valueChange", function MCPTestToolDialogComponent_div_1_div_27_Template_kendo_dropdownlist_valueChange_27_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onToolChange()); })("filterChange", function MCPTestToolDialogComponent_div_1_div_27_Template_kendo_dropdownlist_filterChange_27_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onToolFilterChange($event)); });
|
|
168
|
+
i0.ɵɵtemplate(28, MCPTestToolDialogComponent_div_1_div_27_ng_template_28_Template, 1, 1, "ng-template", 36)(29, MCPTestToolDialogComponent_div_1_div_27_ng_template_29_Template, 4, 2, "ng-template", 28);
|
|
169
|
+
i0.ɵɵelementEnd();
|
|
170
|
+
i0.ɵɵtemplate(30, MCPTestToolDialogComponent_div_1_div_27_Conditional_30_Template, 2, 0, "span", 31);
|
|
171
|
+
i0.ɵɵelementEnd()()();
|
|
172
|
+
} if (rf & 2) {
|
|
173
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
174
|
+
i0.ɵɵadvance(8);
|
|
175
|
+
i0.ɵɵproperty("data", ctx_r1.DisplayServers)("textField", "Name")("valueField", "ID")("valuePrimitive", true);
|
|
176
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.ServerID);
|
|
177
|
+
i0.ɵɵproperty("filterable", true);
|
|
178
|
+
i0.ɵɵadvance(8);
|
|
179
|
+
i0.ɵɵproperty("data", ctx_r1.DisplayConnections)("textField", "Name")("valueField", "ID")("valuePrimitive", true);
|
|
180
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.ConnectionID);
|
|
181
|
+
i0.ɵɵproperty("disabled", !ctx_r1.ServerID || ctx_r1.NoConnectionsWarning !== null)("filterable", true);
|
|
182
|
+
i0.ɵɵadvance(2);
|
|
183
|
+
i0.ɵɵconditional(!ctx_r1.ServerID ? 18 : -1);
|
|
184
|
+
i0.ɵɵadvance();
|
|
185
|
+
i0.ɵɵconditional(ctx_r1.NoConnectionsWarning ? 19 : -1);
|
|
186
|
+
i0.ɵɵadvance();
|
|
187
|
+
i0.ɵɵconditional(ctx_r1.FilteredConnections.length === 1 && ctx_r1.ConnectionID ? 20 : -1);
|
|
188
|
+
i0.ɵɵadvance(7);
|
|
189
|
+
i0.ɵɵproperty("data", ctx_r1.DisplayTools)("textField", "ToolTitle")("valueField", "ID")("valuePrimitive", true);
|
|
190
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.ToolID);
|
|
191
|
+
i0.ɵɵproperty("disabled", !ctx_r1.ServerID)("filterable", true);
|
|
192
|
+
i0.ɵɵadvance(3);
|
|
193
|
+
i0.ɵɵconditional(!ctx_r1.ServerID ? 30 : -1);
|
|
194
|
+
} }
|
|
195
|
+
function MCPTestToolDialogComponent_div_1_div_28_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
196
|
+
i0.ɵɵelementStart(0, "p", 47);
|
|
197
|
+
i0.ɵɵtext(1);
|
|
198
|
+
i0.ɵɵelementEnd();
|
|
199
|
+
} if (rf & 2) {
|
|
200
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
201
|
+
i0.ɵɵadvance();
|
|
202
|
+
i0.ɵɵtextInterpolate(ctx_r1.SelectedTool == null ? null : ctx_r1.SelectedTool.ToolDescription);
|
|
203
|
+
} }
|
|
204
|
+
function MCPTestToolDialogComponent_div_1_div_28_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
205
|
+
i0.ɵɵelementStart(0, "div", 50);
|
|
206
|
+
i0.ɵɵelement(1, "i", 52);
|
|
207
|
+
i0.ɵɵelementStart(2, "p");
|
|
208
|
+
i0.ɵɵtext(3, "This tool requires no parameters.");
|
|
209
|
+
i0.ɵɵelementEnd()();
|
|
210
|
+
} }
|
|
211
|
+
function MCPTestToolDialogComponent_div_1_div_28_Conditional_15_For_4_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
212
|
+
i0.ɵɵelementStart(0, "span", 26);
|
|
213
|
+
i0.ɵɵtext(1, "*");
|
|
214
|
+
i0.ɵɵelementEnd();
|
|
215
|
+
} }
|
|
216
|
+
function MCPTestToolDialogComponent_div_1_div_28_Conditional_15_For_4_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
217
|
+
i0.ɵɵelementStart(0, "p", 57);
|
|
218
|
+
i0.ɵɵtext(1);
|
|
219
|
+
i0.ɵɵelementEnd();
|
|
220
|
+
} if (rf & 2) {
|
|
221
|
+
const config_r10 = i0.ɵɵnextContext().$implicit;
|
|
222
|
+
i0.ɵɵadvance();
|
|
223
|
+
i0.ɵɵtextInterpolate(config_r10.description);
|
|
224
|
+
} }
|
|
225
|
+
function MCPTestToolDialogComponent_div_1_div_28_Conditional_15_For_4_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
226
|
+
const _r11 = i0.ɵɵgetCurrentView();
|
|
227
|
+
i0.ɵɵelementStart(0, "kendo-dropdownlist", 61);
|
|
228
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MCPTestToolDialogComponent_div_1_div_28_Conditional_15_For_4_Conditional_5_Template_kendo_dropdownlist_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r11); const config_r10 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r1.ParameterValues[config_r10.name], $event) || (ctx_r1.ParameterValues[config_r10.name] = $event); return i0.ɵɵresetView($event); });
|
|
229
|
+
i0.ɵɵlistener("valueChange", function MCPTestToolDialogComponent_div_1_div_28_Conditional_15_For_4_Conditional_5_Template_kendo_dropdownlist_valueChange_0_listener($event) { i0.ɵɵrestoreView(_r11); const config_r10 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.onParameterChange(config_r10.name, $event)); });
|
|
230
|
+
i0.ɵɵelementEnd();
|
|
231
|
+
} if (rf & 2) {
|
|
232
|
+
const config_r10 = i0.ɵɵnextContext().$implicit;
|
|
233
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
234
|
+
i0.ɵɵproperty("data", config_r10.enumValues)("valuePrimitive", true);
|
|
235
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.ParameterValues[config_r10.name]);
|
|
236
|
+
} }
|
|
237
|
+
function MCPTestToolDialogComponent_div_1_div_28_Conditional_15_For_4_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
238
|
+
const _r12 = i0.ɵɵgetCurrentView();
|
|
239
|
+
i0.ɵɵelementStart(0, "div", 59)(1, "input", 62);
|
|
240
|
+
i0.ɵɵlistener("change", function MCPTestToolDialogComponent_div_1_div_28_Conditional_15_For_4_Conditional_6_Template_input_change_1_listener($event) { i0.ɵɵrestoreView(_r12); const config_r10 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.onParameterChange(config_r10.name, $event.target.checked)); });
|
|
241
|
+
i0.ɵɵelementEnd();
|
|
242
|
+
i0.ɵɵelementStart(2, "label", 63);
|
|
243
|
+
i0.ɵɵtext(3, "Enabled");
|
|
244
|
+
i0.ɵɵelementEnd()();
|
|
245
|
+
} if (rf & 2) {
|
|
246
|
+
const config_r10 = i0.ɵɵnextContext().$implicit;
|
|
247
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
248
|
+
i0.ɵɵadvance();
|
|
249
|
+
i0.ɵɵproperty("id", "param-" + config_r10.name)("checked", ctx_r1.ParameterValues[config_r10.name]);
|
|
250
|
+
i0.ɵɵadvance();
|
|
251
|
+
i0.ɵɵproperty("for", "param-" + config_r10.name);
|
|
252
|
+
} }
|
|
253
|
+
function MCPTestToolDialogComponent_div_1_div_28_Conditional_15_For_4_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
254
|
+
const _r13 = i0.ɵɵgetCurrentView();
|
|
255
|
+
i0.ɵɵelementStart(0, "kendo-numerictextbox", 64);
|
|
256
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MCPTestToolDialogComponent_div_1_div_28_Conditional_15_For_4_Conditional_7_Template_kendo_numerictextbox_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r13); const config_r10 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r1.ParameterValues[config_r10.name], $event) || (ctx_r1.ParameterValues[config_r10.name] = $event); return i0.ɵɵresetView($event); });
|
|
257
|
+
i0.ɵɵlistener("valueChange", function MCPTestToolDialogComponent_div_1_div_28_Conditional_15_For_4_Conditional_7_Template_kendo_numerictextbox_valueChange_0_listener($event) { i0.ɵɵrestoreView(_r13); const config_r10 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.onParameterChange(config_r10.name, $event)); });
|
|
258
|
+
i0.ɵɵelementEnd();
|
|
259
|
+
} if (rf & 2) {
|
|
260
|
+
const config_r10 = i0.ɵɵnextContext().$implicit;
|
|
261
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
262
|
+
i0.ɵɵproperty("format", config_r10.type === "integer" ? "n0" : "n")("step", config_r10.type === "integer" ? 1 : 0.1);
|
|
263
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.ParameterValues[config_r10.name]);
|
|
264
|
+
} }
|
|
265
|
+
function MCPTestToolDialogComponent_div_1_div_28_Conditional_15_For_4_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
266
|
+
const _r14 = i0.ɵɵgetCurrentView();
|
|
267
|
+
i0.ɵɵelementStart(0, "textarea", 65);
|
|
268
|
+
i0.ɵɵlistener("input", function MCPTestToolDialogComponent_div_1_div_28_Conditional_15_For_4_Conditional_8_Template_textarea_input_0_listener($event) { i0.ɵɵrestoreView(_r14); const config_r10 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.onTextareaChange(config_r10.name, $event.target.value, config_r10)); });
|
|
269
|
+
i0.ɵɵelementEnd();
|
|
270
|
+
i0.ɵɵelementStart(1, "span", 31);
|
|
271
|
+
i0.ɵɵtext(2, "Enter valid JSON");
|
|
272
|
+
i0.ɵɵelementEnd();
|
|
273
|
+
} if (rf & 2) {
|
|
274
|
+
const config_r10 = i0.ɵɵnextContext().$implicit;
|
|
275
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
276
|
+
i0.ɵɵpropertyInterpolate1("placeholder", "Enter JSON ", config_r10.type, "...");
|
|
277
|
+
i0.ɵɵproperty("value", ctx_r1.getTextareaValue(config_r10.name));
|
|
278
|
+
} }
|
|
279
|
+
function MCPTestToolDialogComponent_div_1_div_28_Conditional_15_For_4_Conditional_9_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
280
|
+
const _r15 = i0.ɵɵgetCurrentView();
|
|
281
|
+
i0.ɵɵelementStart(0, "textarea", 68);
|
|
282
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MCPTestToolDialogComponent_div_1_div_28_Conditional_15_For_4_Conditional_9_Conditional_0_Template_textarea_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r15); const config_r10 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r1.ParameterValues[config_r10.name], $event) || (ctx_r1.ParameterValues[config_r10.name] = $event); return i0.ɵɵresetView($event); });
|
|
283
|
+
i0.ɵɵlistener("input", function MCPTestToolDialogComponent_div_1_div_28_Conditional_15_For_4_Conditional_9_Conditional_0_Template_textarea_input_0_listener($event) { i0.ɵɵrestoreView(_r15); const config_r10 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.onParameterChange(config_r10.name, $event.target.value)); });
|
|
284
|
+
i0.ɵɵelementEnd();
|
|
285
|
+
} if (rf & 2) {
|
|
286
|
+
const config_r10 = i0.ɵɵnextContext(2).$implicit;
|
|
287
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
288
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.ParameterValues[config_r10.name]);
|
|
289
|
+
i0.ɵɵproperty("placeholder", config_r10.description || "Enter value...");
|
|
290
|
+
} }
|
|
291
|
+
function MCPTestToolDialogComponent_div_1_div_28_Conditional_15_For_4_Conditional_9_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
292
|
+
const _r16 = i0.ɵɵgetCurrentView();
|
|
293
|
+
i0.ɵɵelementStart(0, "kendo-textbox", 69);
|
|
294
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MCPTestToolDialogComponent_div_1_div_28_Conditional_15_For_4_Conditional_9_Conditional_1_Template_kendo_textbox_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r16); const config_r10 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r1.ParameterValues[config_r10.name], $event) || (ctx_r1.ParameterValues[config_r10.name] = $event); return i0.ɵɵresetView($event); });
|
|
295
|
+
i0.ɵɵlistener("valueChange", function MCPTestToolDialogComponent_div_1_div_28_Conditional_15_For_4_Conditional_9_Conditional_1_Template_kendo_textbox_valueChange_0_listener($event) { i0.ɵɵrestoreView(_r16); const config_r10 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.onParameterChange(config_r10.name, $event)); });
|
|
296
|
+
i0.ɵɵelementEnd();
|
|
297
|
+
} if (rf & 2) {
|
|
298
|
+
const config_r10 = i0.ɵɵnextContext(2).$implicit;
|
|
299
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
300
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.ParameterValues[config_r10.name]);
|
|
301
|
+
i0.ɵɵproperty("placeholder", config_r10.description || "Enter value...");
|
|
302
|
+
} }
|
|
303
|
+
function MCPTestToolDialogComponent_div_1_div_28_Conditional_15_For_4_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
304
|
+
i0.ɵɵtemplate(0, MCPTestToolDialogComponent_div_1_div_28_Conditional_15_For_4_Conditional_9_Conditional_0_Template, 1, 2, "textarea", 66)(1, MCPTestToolDialogComponent_div_1_div_28_Conditional_15_For_4_Conditional_9_Conditional_1_Template, 1, 2, "kendo-textbox", 67);
|
|
305
|
+
} if (rf & 2) {
|
|
306
|
+
const config_r10 = i0.ɵɵnextContext().$implicit;
|
|
307
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
308
|
+
i0.ɵɵconditional(ctx_r1.isTextarea(config_r10) ? 0 : 1);
|
|
309
|
+
} }
|
|
310
|
+
function MCPTestToolDialogComponent_div_1_div_28_Conditional_15_For_4_Template(rf, ctx) { if (rf & 1) {
|
|
311
|
+
i0.ɵɵelementStart(0, "div", 55)(1, "label", 56);
|
|
312
|
+
i0.ɵɵtext(2);
|
|
313
|
+
i0.ɵɵtemplate(3, MCPTestToolDialogComponent_div_1_div_28_Conditional_15_For_4_Conditional_3_Template, 2, 0, "span", 26);
|
|
314
|
+
i0.ɵɵelementEnd();
|
|
315
|
+
i0.ɵɵtemplate(4, MCPTestToolDialogComponent_div_1_div_28_Conditional_15_For_4_Conditional_4_Template, 2, 1, "p", 57)(5, MCPTestToolDialogComponent_div_1_div_28_Conditional_15_For_4_Conditional_5_Template, 1, 3, "kendo-dropdownlist", 58)(6, MCPTestToolDialogComponent_div_1_div_28_Conditional_15_For_4_Conditional_6_Template, 4, 3, "div", 59)(7, MCPTestToolDialogComponent_div_1_div_28_Conditional_15_For_4_Conditional_7_Template, 1, 3, "kendo-numerictextbox", 60)(8, MCPTestToolDialogComponent_div_1_div_28_Conditional_15_For_4_Conditional_8_Template, 3, 3)(9, MCPTestToolDialogComponent_div_1_div_28_Conditional_15_For_4_Conditional_9_Template, 2, 1);
|
|
316
|
+
i0.ɵɵelementEnd();
|
|
317
|
+
} if (rf & 2) {
|
|
318
|
+
const config_r10 = ctx.$implicit;
|
|
319
|
+
i0.ɵɵclassProp("required", config_r10.required);
|
|
320
|
+
i0.ɵɵadvance(2);
|
|
321
|
+
i0.ɵɵtextInterpolate1(" ", config_r10.name, " ");
|
|
322
|
+
i0.ɵɵadvance();
|
|
323
|
+
i0.ɵɵconditional(config_r10.required ? 3 : -1);
|
|
324
|
+
i0.ɵɵadvance();
|
|
325
|
+
i0.ɵɵconditional(config_r10.description ? 4 : -1);
|
|
326
|
+
i0.ɵɵadvance();
|
|
327
|
+
i0.ɵɵconditional(config_r10.enumValues.length > 0 ? 5 : config_r10.type === "boolean" ? 6 : config_r10.type === "number" || config_r10.type === "integer" ? 7 : config_r10.type === "array" || config_r10.type === "object" ? 8 : 9);
|
|
328
|
+
} }
|
|
329
|
+
function MCPTestToolDialogComponent_div_1_div_28_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
330
|
+
i0.ɵɵelementStart(0, "div", 51)(1, "h4", 53);
|
|
331
|
+
i0.ɵɵtext(2, "Parameters");
|
|
332
|
+
i0.ɵɵelementEnd();
|
|
333
|
+
i0.ɵɵrepeaterCreate(3, MCPTestToolDialogComponent_div_1_div_28_Conditional_15_For_4_Template, 10, 6, "div", 54, _forTrack0);
|
|
334
|
+
i0.ɵɵelementEnd();
|
|
335
|
+
} if (rf & 2) {
|
|
336
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
337
|
+
i0.ɵɵadvance(3);
|
|
338
|
+
i0.ɵɵrepeater(ctx_r1.ParameterConfigs);
|
|
339
|
+
} }
|
|
340
|
+
function MCPTestToolDialogComponent_div_1_div_28_Template(rf, ctx) { if (rf & 1) {
|
|
341
|
+
i0.ɵɵelementStart(0, "div", 21)(1, "div", 44)(2, "div", 45)(3, "h3", 46);
|
|
342
|
+
i0.ɵɵelement(4, "i", 34);
|
|
343
|
+
i0.ɵɵtext(5);
|
|
344
|
+
i0.ɵɵelementEnd();
|
|
345
|
+
i0.ɵɵtemplate(6, MCPTestToolDialogComponent_div_1_div_28_Conditional_6_Template, 2, 1, "p", 47);
|
|
346
|
+
i0.ɵɵelementEnd();
|
|
347
|
+
i0.ɵɵelementStart(7, "div", 48)(8, "span", 49);
|
|
348
|
+
i0.ɵɵelement(9, "i", 25);
|
|
349
|
+
i0.ɵɵtext(10);
|
|
350
|
+
i0.ɵɵelementEnd();
|
|
351
|
+
i0.ɵɵelementStart(11, "span", 49);
|
|
352
|
+
i0.ɵɵelement(12, "i", 29);
|
|
353
|
+
i0.ɵɵtext(13);
|
|
354
|
+
i0.ɵɵelementEnd()()();
|
|
355
|
+
i0.ɵɵtemplate(14, MCPTestToolDialogComponent_div_1_div_28_Conditional_14_Template, 4, 0, "div", 50)(15, MCPTestToolDialogComponent_div_1_div_28_Conditional_15_Template, 5, 0, "div", 51);
|
|
356
|
+
i0.ɵɵelementEnd();
|
|
357
|
+
} if (rf & 2) {
|
|
358
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
359
|
+
i0.ɵɵadvance(5);
|
|
360
|
+
i0.ɵɵtextInterpolate1(" ", (ctx_r1.SelectedTool == null ? null : ctx_r1.SelectedTool.ToolTitle) || (ctx_r1.SelectedTool == null ? null : ctx_r1.SelectedTool.ToolName), " ");
|
|
361
|
+
i0.ɵɵadvance();
|
|
362
|
+
i0.ɵɵconditional((ctx_r1.SelectedTool == null ? null : ctx_r1.SelectedTool.ToolDescription) ? 6 : -1);
|
|
363
|
+
i0.ɵɵadvance(4);
|
|
364
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.SelectedServerName, " ");
|
|
365
|
+
i0.ɵɵadvance(3);
|
|
366
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.SelectedConnectionName, " ");
|
|
367
|
+
i0.ɵɵadvance();
|
|
368
|
+
i0.ɵɵconditional(ctx_r1.ParameterConfigs.length === 0 ? 14 : 15);
|
|
369
|
+
} }
|
|
370
|
+
function MCPTestToolDialogComponent_div_1_div_29_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
371
|
+
i0.ɵɵelement(0, "i", 52);
|
|
372
|
+
i0.ɵɵelementStart(1, "span", 80);
|
|
373
|
+
i0.ɵɵtext(2, "Execution Successful");
|
|
374
|
+
i0.ɵɵelementEnd();
|
|
375
|
+
} }
|
|
376
|
+
function MCPTestToolDialogComponent_div_1_div_29_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
377
|
+
i0.ɵɵelement(0, "i", 81);
|
|
378
|
+
i0.ɵɵelementStart(1, "span", 80);
|
|
379
|
+
i0.ɵɵtext(2, "Execution Failed");
|
|
380
|
+
i0.ɵɵelementEnd();
|
|
381
|
+
} }
|
|
382
|
+
function MCPTestToolDialogComponent_div_1_div_29_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
383
|
+
i0.ɵɵelementStart(0, "span", 73);
|
|
384
|
+
i0.ɵɵtext(1);
|
|
385
|
+
i0.ɵɵelementEnd();
|
|
386
|
+
} if (rf & 2) {
|
|
387
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
388
|
+
i0.ɵɵadvance();
|
|
389
|
+
i0.ɵɵtextInterpolate1("", ctx_r1.ExecutionResult == null ? null : ctx_r1.ExecutionResult.DurationMs, "ms");
|
|
390
|
+
} }
|
|
391
|
+
function MCPTestToolDialogComponent_div_1_div_29_Conditional_22_Template(rf, ctx) { if (rf & 1) {
|
|
392
|
+
i0.ɵɵelementStart(0, "div", 78)(1, "h4");
|
|
393
|
+
i0.ɵɵelement(2, "i", 41);
|
|
394
|
+
i0.ɵɵtext(3, " Error");
|
|
395
|
+
i0.ɵɵelementEnd();
|
|
396
|
+
i0.ɵɵelementStart(4, "pre", 82);
|
|
397
|
+
i0.ɵɵtext(5);
|
|
398
|
+
i0.ɵɵelementEnd()();
|
|
399
|
+
} if (rf & 2) {
|
|
400
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
401
|
+
i0.ɵɵadvance(5);
|
|
402
|
+
i0.ɵɵtextInterpolate(ctx_r1.ExecutionResult == null ? null : ctx_r1.ExecutionResult.ErrorMessage);
|
|
403
|
+
} }
|
|
404
|
+
function MCPTestToolDialogComponent_div_1_div_29_Conditional_23_Template(rf, ctx) { if (rf & 1) {
|
|
405
|
+
const _r17 = i0.ɵɵgetCurrentView();
|
|
406
|
+
i0.ɵɵelementStart(0, "div", 79)(1, "div", 83)(2, "h4");
|
|
407
|
+
i0.ɵɵelement(3, "i", 84);
|
|
408
|
+
i0.ɵɵtext(4, " Result");
|
|
409
|
+
i0.ɵɵelementEnd();
|
|
410
|
+
i0.ɵɵelementStart(5, "button", 85);
|
|
411
|
+
i0.ɵɵlistener("click", function MCPTestToolDialogComponent_div_1_div_29_Conditional_23_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.copyResult()); });
|
|
412
|
+
i0.ɵɵelement(6, "i", 86);
|
|
413
|
+
i0.ɵɵelementEnd()();
|
|
414
|
+
i0.ɵɵelementStart(7, "div", 87);
|
|
415
|
+
i0.ɵɵelement(8, "mj-code-editor", 88);
|
|
416
|
+
i0.ɵɵelementEnd()();
|
|
417
|
+
} if (rf & 2) {
|
|
418
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
419
|
+
i0.ɵɵadvance(8);
|
|
420
|
+
i0.ɵɵproperty("ngModel", ctx_r1.FormattedResult)("language", "json")("readonly", true);
|
|
421
|
+
} }
|
|
422
|
+
function MCPTestToolDialogComponent_div_1_div_29_Template(rf, ctx) { if (rf & 1) {
|
|
423
|
+
i0.ɵɵelementStart(0, "div", 70)(1, "div", 71)(2, "div", 72);
|
|
424
|
+
i0.ɵɵtemplate(3, MCPTestToolDialogComponent_div_1_div_29_Conditional_3_Template, 3, 0)(4, MCPTestToolDialogComponent_div_1_div_29_Conditional_4_Template, 3, 0)(5, MCPTestToolDialogComponent_div_1_div_29_Conditional_5_Template, 2, 1, "span", 73);
|
|
425
|
+
i0.ɵɵelementEnd();
|
|
426
|
+
i0.ɵɵelementStart(6, "div", 74)(7, "div", 75)(8, "span", 76);
|
|
427
|
+
i0.ɵɵtext(9, "Tool:");
|
|
428
|
+
i0.ɵɵelementEnd();
|
|
429
|
+
i0.ɵɵelementStart(10, "span", 77);
|
|
430
|
+
i0.ɵɵtext(11);
|
|
431
|
+
i0.ɵɵelementEnd()();
|
|
432
|
+
i0.ɵɵelementStart(12, "div", 75)(13, "span", 76);
|
|
433
|
+
i0.ɵɵtext(14, "Server:");
|
|
434
|
+
i0.ɵɵelementEnd();
|
|
435
|
+
i0.ɵɵelementStart(15, "span", 77);
|
|
436
|
+
i0.ɵɵtext(16);
|
|
437
|
+
i0.ɵɵelementEnd()();
|
|
438
|
+
i0.ɵɵelementStart(17, "div", 75)(18, "span", 76);
|
|
439
|
+
i0.ɵɵtext(19, "Connection:");
|
|
440
|
+
i0.ɵɵelementEnd();
|
|
441
|
+
i0.ɵɵelementStart(20, "span", 77);
|
|
442
|
+
i0.ɵɵtext(21);
|
|
443
|
+
i0.ɵɵelementEnd()()();
|
|
444
|
+
i0.ɵɵtemplate(22, MCPTestToolDialogComponent_div_1_div_29_Conditional_22_Template, 6, 1, "div", 78)(23, MCPTestToolDialogComponent_div_1_div_29_Conditional_23_Template, 9, 3, "div", 79);
|
|
445
|
+
i0.ɵɵelementEnd()();
|
|
446
|
+
} if (rf & 2) {
|
|
447
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
448
|
+
i0.ɵɵadvance(2);
|
|
449
|
+
i0.ɵɵclassProp("success", ctx_r1.ExecutionResult == null ? null : ctx_r1.ExecutionResult.Success)("error", !(ctx_r1.ExecutionResult == null ? null : ctx_r1.ExecutionResult.Success));
|
|
450
|
+
i0.ɵɵadvance();
|
|
451
|
+
i0.ɵɵconditional((ctx_r1.ExecutionResult == null ? null : ctx_r1.ExecutionResult.Success) ? 3 : 4);
|
|
452
|
+
i0.ɵɵadvance(2);
|
|
453
|
+
i0.ɵɵconditional((ctx_r1.ExecutionResult == null ? null : ctx_r1.ExecutionResult.DurationMs) ? 5 : -1);
|
|
454
|
+
i0.ɵɵadvance(6);
|
|
455
|
+
i0.ɵɵtextInterpolate(ctx_r1.SelectedToolName);
|
|
456
|
+
i0.ɵɵadvance(5);
|
|
457
|
+
i0.ɵɵtextInterpolate(ctx_r1.SelectedServerName);
|
|
458
|
+
i0.ɵɵadvance(5);
|
|
459
|
+
i0.ɵɵtextInterpolate(ctx_r1.SelectedConnectionName);
|
|
460
|
+
i0.ɵɵadvance();
|
|
461
|
+
i0.ɵɵconditional((ctx_r1.ExecutionResult == null ? null : ctx_r1.ExecutionResult.ErrorMessage) ? 22 : -1);
|
|
462
|
+
i0.ɵɵadvance();
|
|
463
|
+
i0.ɵɵconditional((ctx_r1.ExecutionResult == null ? null : ctx_r1.ExecutionResult.Result) ? 23 : -1);
|
|
464
|
+
} }
|
|
465
|
+
function MCPTestToolDialogComponent_div_1_Case_31_Template(rf, ctx) { if (rf & 1) {
|
|
466
|
+
const _r18 = i0.ɵɵgetCurrentView();
|
|
467
|
+
i0.ɵɵelementStart(0, "button", 89);
|
|
468
|
+
i0.ɵɵlistener("click", function MCPTestToolDialogComponent_div_1_Case_31_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r18); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.proceedToConfig()); });
|
|
469
|
+
i0.ɵɵelement(1, "i", 90);
|
|
470
|
+
i0.ɵɵtext(2, " Next ");
|
|
471
|
+
i0.ɵɵelementEnd();
|
|
472
|
+
i0.ɵɵelementStart(3, "button", 91);
|
|
473
|
+
i0.ɵɵlistener("click", function MCPTestToolDialogComponent_div_1_Case_31_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r18); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.closeDialog()); });
|
|
474
|
+
i0.ɵɵtext(4, "Cancel");
|
|
475
|
+
i0.ɵɵelementEnd();
|
|
476
|
+
} if (rf & 2) {
|
|
477
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
478
|
+
i0.ɵɵproperty("disabled", !ctx_r1.CanProceedToConfig);
|
|
479
|
+
} }
|
|
480
|
+
function MCPTestToolDialogComponent_div_1_Case_32_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
481
|
+
i0.ɵɵelement(0, "i", 93);
|
|
482
|
+
i0.ɵɵtext(1, " Executing... ");
|
|
483
|
+
} }
|
|
484
|
+
function MCPTestToolDialogComponent_div_1_Case_32_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
485
|
+
i0.ɵɵelement(0, "i", 94);
|
|
486
|
+
i0.ɵɵtext(1, " Execute Tool ");
|
|
487
|
+
} }
|
|
488
|
+
function MCPTestToolDialogComponent_div_1_Case_32_Template(rf, ctx) { if (rf & 1) {
|
|
489
|
+
const _r19 = i0.ɵɵgetCurrentView();
|
|
490
|
+
i0.ɵɵelementStart(0, "button", 89);
|
|
491
|
+
i0.ɵɵlistener("click", function MCPTestToolDialogComponent_div_1_Case_32_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.executeTool()); });
|
|
492
|
+
i0.ɵɵtemplate(1, MCPTestToolDialogComponent_div_1_Case_32_Conditional_1_Template, 2, 0)(2, MCPTestToolDialogComponent_div_1_Case_32_Conditional_2_Template, 2, 0);
|
|
493
|
+
i0.ɵɵelementEnd();
|
|
494
|
+
i0.ɵɵelementStart(3, "button", 91);
|
|
495
|
+
i0.ɵɵlistener("click", function MCPTestToolDialogComponent_div_1_Case_32_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.goBack()); });
|
|
496
|
+
i0.ɵɵelement(4, "i", 92);
|
|
497
|
+
i0.ɵɵtext(5, " Back ");
|
|
498
|
+
i0.ɵɵelementEnd();
|
|
499
|
+
} if (rf & 2) {
|
|
500
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
501
|
+
i0.ɵɵproperty("disabled", !ctx_r1.IsValid || ctx_r1.IsExecuting);
|
|
502
|
+
i0.ɵɵadvance();
|
|
503
|
+
i0.ɵɵconditional(ctx_r1.IsExecuting ? 1 : 2);
|
|
504
|
+
} }
|
|
505
|
+
function MCPTestToolDialogComponent_div_1_Case_33_Template(rf, ctx) { if (rf & 1) {
|
|
506
|
+
const _r20 = i0.ɵɵgetCurrentView();
|
|
507
|
+
i0.ɵɵelementStart(0, "button", 95);
|
|
508
|
+
i0.ɵɵlistener("click", function MCPTestToolDialogComponent_div_1_Case_33_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.runAgain()); });
|
|
509
|
+
i0.ɵɵelement(1, "i", 96);
|
|
510
|
+
i0.ɵɵtext(2, " Run Again ");
|
|
511
|
+
i0.ɵɵelementEnd();
|
|
512
|
+
i0.ɵɵelementStart(3, "button", 91);
|
|
513
|
+
i0.ɵɵlistener("click", function MCPTestToolDialogComponent_div_1_Case_33_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.goBack()); });
|
|
514
|
+
i0.ɵɵelement(4, "i", 92);
|
|
515
|
+
i0.ɵɵtext(5, " Edit Parameters ");
|
|
516
|
+
i0.ɵɵelementEnd();
|
|
517
|
+
i0.ɵɵelementStart(6, "button", 91);
|
|
518
|
+
i0.ɵɵlistener("click", function MCPTestToolDialogComponent_div_1_Case_33_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.closeDialog()); });
|
|
519
|
+
i0.ɵɵtext(7, "Close");
|
|
520
|
+
i0.ɵɵelementEnd();
|
|
521
|
+
} }
|
|
522
|
+
function MCPTestToolDialogComponent_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
523
|
+
const _r3 = i0.ɵɵgetCurrentView();
|
|
524
|
+
i0.ɵɵelementStart(0, "div", 3);
|
|
525
|
+
i0.ɵɵtemplate(1, MCPTestToolDialogComponent_div_1_Conditional_1_Template, 2, 2, "div", 4);
|
|
526
|
+
i0.ɵɵelementStart(2, "div", 5)(3, "h2", 6);
|
|
527
|
+
i0.ɵɵelement(4, "i", 7);
|
|
528
|
+
i0.ɵɵtext(5, " Test MCP Tool ");
|
|
529
|
+
i0.ɵɵelementEnd();
|
|
530
|
+
i0.ɵɵelementStart(6, "button", 8);
|
|
531
|
+
i0.ɵɵlistener("click", function MCPTestToolDialogComponent_div_1_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.closeDialog()); });
|
|
532
|
+
i0.ɵɵelement(7, "i", 9);
|
|
533
|
+
i0.ɵɵelementEnd()();
|
|
534
|
+
i0.ɵɵelementStart(8, "div", 10)(9, "div", 11)(10, "span", 12);
|
|
535
|
+
i0.ɵɵtext(11, "1");
|
|
536
|
+
i0.ɵɵelementEnd();
|
|
537
|
+
i0.ɵɵelementStart(12, "span", 13);
|
|
538
|
+
i0.ɵɵtext(13, "Select Tool");
|
|
539
|
+
i0.ɵɵelementEnd()();
|
|
540
|
+
i0.ɵɵelement(14, "div", 14);
|
|
541
|
+
i0.ɵɵelementStart(15, "div", 11)(16, "span", 12);
|
|
542
|
+
i0.ɵɵtext(17, "2");
|
|
543
|
+
i0.ɵɵelementEnd();
|
|
544
|
+
i0.ɵɵelementStart(18, "span", 13);
|
|
545
|
+
i0.ɵɵtext(19, "Configure");
|
|
546
|
+
i0.ɵɵelementEnd()();
|
|
547
|
+
i0.ɵɵelement(20, "div", 14);
|
|
548
|
+
i0.ɵɵelementStart(21, "div", 11)(22, "span", 12);
|
|
549
|
+
i0.ɵɵtext(23, "3");
|
|
550
|
+
i0.ɵɵelementEnd();
|
|
551
|
+
i0.ɵɵelementStart(24, "span", 13);
|
|
552
|
+
i0.ɵɵtext(25, "Results");
|
|
553
|
+
i0.ɵɵelementEnd()()();
|
|
554
|
+
i0.ɵɵelementStart(26, "div", 15);
|
|
555
|
+
i0.ɵɵtemplate(27, MCPTestToolDialogComponent_div_1_div_27_Template, 31, 24, "div", 16)(28, MCPTestToolDialogComponent_div_1_div_28_Template, 16, 5, "div", 16)(29, MCPTestToolDialogComponent_div_1_div_29_Template, 24, 11, "div", 17);
|
|
556
|
+
i0.ɵɵelementEnd();
|
|
557
|
+
i0.ɵɵelementStart(30, "div", 18);
|
|
558
|
+
i0.ɵɵtemplate(31, MCPTestToolDialogComponent_div_1_Case_31_Template, 5, 1)(32, MCPTestToolDialogComponent_div_1_Case_32_Template, 6, 2)(33, MCPTestToolDialogComponent_div_1_Case_33_Template, 8, 0);
|
|
559
|
+
i0.ɵɵelementEnd()();
|
|
560
|
+
} if (rf & 2) {
|
|
561
|
+
let tmp_16_0;
|
|
562
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
563
|
+
i0.ɵɵstyleProp("width", ctx_r1.IsMobileMode ? null : ctx_r1.PanelWidth, "px");
|
|
564
|
+
i0.ɵɵclassProp("mobile", ctx_r1.IsMobileMode)("resizing", ctx_r1.IsResizing);
|
|
565
|
+
i0.ɵɵproperty("@slideIn", undefined);
|
|
566
|
+
i0.ɵɵadvance();
|
|
567
|
+
i0.ɵɵconditional(!ctx_r1.IsMobileMode ? 1 : -1);
|
|
568
|
+
i0.ɵɵadvance(8);
|
|
569
|
+
i0.ɵɵclassProp("active", ctx_r1.CurrentStep === "select")("completed", ctx_r1.CurrentStep !== "select");
|
|
570
|
+
i0.ɵɵadvance(5);
|
|
571
|
+
i0.ɵɵclassProp("completed", ctx_r1.CurrentStep !== "select");
|
|
572
|
+
i0.ɵɵadvance();
|
|
573
|
+
i0.ɵɵclassProp("active", ctx_r1.CurrentStep === "configure")("completed", ctx_r1.CurrentStep === "results");
|
|
574
|
+
i0.ɵɵadvance(5);
|
|
575
|
+
i0.ɵɵclassProp("completed", ctx_r1.CurrentStep === "results");
|
|
576
|
+
i0.ɵɵadvance();
|
|
577
|
+
i0.ɵɵclassProp("active", ctx_r1.CurrentStep === "results");
|
|
578
|
+
i0.ɵɵadvance(6);
|
|
579
|
+
i0.ɵɵproperty("ngIf", ctx_r1.CurrentStep === "select");
|
|
580
|
+
i0.ɵɵadvance();
|
|
581
|
+
i0.ɵɵproperty("ngIf", ctx_r1.CurrentStep === "configure");
|
|
582
|
+
i0.ɵɵadvance();
|
|
583
|
+
i0.ɵɵproperty("ngIf", ctx_r1.CurrentStep === "results");
|
|
584
|
+
i0.ɵɵadvance(2);
|
|
585
|
+
i0.ɵɵconditional((tmp_16_0 = ctx_r1.CurrentStep) === "select" ? 31 : tmp_16_0 === "configure" ? 32 : tmp_16_0 === "results" ? 33 : -1);
|
|
586
|
+
} }
|
|
587
|
+
/**
|
|
588
|
+
* GraphQL mutation for executing MCP tool
|
|
589
|
+
*/
|
|
590
|
+
const ExecuteMCPToolMutation = gql `
|
|
591
|
+
mutation ExecuteMCPTool($input: ExecuteMCPToolInput!) {
|
|
592
|
+
ExecuteMCPTool(input: $input) {
|
|
593
|
+
Success
|
|
594
|
+
ErrorMessage
|
|
595
|
+
Result
|
|
596
|
+
DurationMs
|
|
597
|
+
}
|
|
598
|
+
}
|
|
599
|
+
`;
|
|
600
|
+
export class MCPTestToolDialogComponent {
|
|
601
|
+
cdr;
|
|
602
|
+
elementRef;
|
|
603
|
+
// ========================================
|
|
604
|
+
// Inputs
|
|
605
|
+
// ========================================
|
|
606
|
+
Visible = false;
|
|
607
|
+
Servers = [];
|
|
608
|
+
Connections = [];
|
|
609
|
+
Tools = [];
|
|
610
|
+
/** Pre-selected server ID */
|
|
611
|
+
SelectedServerID = null;
|
|
612
|
+
/** Pre-selected connection ID */
|
|
613
|
+
SelectedConnectionID = null;
|
|
614
|
+
/** Pre-selected tool ID */
|
|
615
|
+
SelectedToolID = null;
|
|
616
|
+
// ========================================
|
|
617
|
+
// Outputs
|
|
618
|
+
// ========================================
|
|
619
|
+
Close = new EventEmitter();
|
|
620
|
+
// ========================================
|
|
621
|
+
// State
|
|
622
|
+
// ========================================
|
|
623
|
+
/** Current step: 'select' | 'configure' | 'results' */
|
|
624
|
+
CurrentStep = 'select';
|
|
625
|
+
/** Selected IDs */
|
|
626
|
+
ServerID = null;
|
|
627
|
+
ConnectionID = null;
|
|
628
|
+
ToolID = null;
|
|
629
|
+
/** Filtered lists based on selection */
|
|
630
|
+
FilteredConnections = [];
|
|
631
|
+
FilteredTools = [];
|
|
632
|
+
/** Display lists for dropdowns (filtered by search) */
|
|
633
|
+
DisplayServers = [];
|
|
634
|
+
DisplayConnections = [];
|
|
635
|
+
DisplayTools = [];
|
|
636
|
+
/** No connections warning */
|
|
637
|
+
NoConnectionsWarning = null;
|
|
638
|
+
/** Selected tool details */
|
|
639
|
+
SelectedTool = null;
|
|
640
|
+
ParameterConfigs = [];
|
|
641
|
+
ParameterValues = {};
|
|
642
|
+
/** Execution state */
|
|
643
|
+
IsExecuting = false;
|
|
644
|
+
ExecutionResult = null;
|
|
645
|
+
ExecutionError = null;
|
|
646
|
+
/** User settings key prefix */
|
|
647
|
+
SETTINGS_PREFIX = 'mcp-tool-test/';
|
|
648
|
+
// ========================================
|
|
649
|
+
// Panel Width / Resize State
|
|
650
|
+
// ========================================
|
|
651
|
+
/** Panel width settings key */
|
|
652
|
+
PANEL_WIDTH_SETTING_KEY = 'mcp-test-tool-panel/width';
|
|
653
|
+
/** Panel width constraints */
|
|
654
|
+
MIN_PANEL_WIDTH = 320;
|
|
655
|
+
MAX_PANEL_WIDTH = 900;
|
|
656
|
+
DEFAULT_PANEL_WIDTH = 700;
|
|
657
|
+
MOBILE_BREAKPOINT = 768;
|
|
658
|
+
/** Current panel width in pixels */
|
|
659
|
+
PanelWidth = this.DEFAULT_PANEL_WIDTH;
|
|
660
|
+
/** Whether user is currently resizing */
|
|
661
|
+
IsResizing = false;
|
|
662
|
+
/** Whether panel should be full-width (mobile mode) */
|
|
663
|
+
get IsMobileMode() {
|
|
664
|
+
return typeof window !== 'undefined' && window.innerWidth <= this.MOBILE_BREAKPOINT;
|
|
665
|
+
}
|
|
666
|
+
/** Subject for debounced width persistence */
|
|
667
|
+
widthPersistSubject = new Subject();
|
|
668
|
+
destroy$ = new Subject();
|
|
669
|
+
gqlProvider = GraphQLDataProvider.Instance;
|
|
670
|
+
constructor(cdr, elementRef) {
|
|
671
|
+
this.cdr = cdr;
|
|
672
|
+
this.elementRef = elementRef;
|
|
673
|
+
// Debounce width persistence to avoid excessive writes
|
|
674
|
+
this.widthPersistSubject.pipe(debounceTime(500), takeUntil(this.destroy$)).subscribe(width => {
|
|
675
|
+
this.persistPanelWidth(width);
|
|
676
|
+
});
|
|
677
|
+
}
|
|
678
|
+
ngOnInit() {
|
|
679
|
+
// Load saved panel width
|
|
680
|
+
this.loadSavedPanelWidth();
|
|
681
|
+
// Initialize display arrays
|
|
682
|
+
this.DisplayServers = [...this.Servers];
|
|
683
|
+
// Apply pre-selected values
|
|
684
|
+
if (this.SelectedServerID) {
|
|
685
|
+
this.ServerID = this.SelectedServerID;
|
|
686
|
+
this.onServerChange();
|
|
687
|
+
}
|
|
688
|
+
if (this.SelectedConnectionID) {
|
|
689
|
+
this.ConnectionID = this.SelectedConnectionID;
|
|
690
|
+
this.onConnectionChange();
|
|
691
|
+
}
|
|
692
|
+
if (this.SelectedToolID) {
|
|
693
|
+
this.ToolID = this.SelectedToolID;
|
|
694
|
+
}
|
|
695
|
+
}
|
|
696
|
+
ngOnDestroy() {
|
|
697
|
+
this.destroy$.next();
|
|
698
|
+
this.destroy$.complete();
|
|
699
|
+
}
|
|
700
|
+
// ========================================
|
|
701
|
+
// Selection Handlers
|
|
702
|
+
// ========================================
|
|
703
|
+
onServerChange() {
|
|
704
|
+
this.NoConnectionsWarning = null;
|
|
705
|
+
// Filter connections by selected server
|
|
706
|
+
if (this.ServerID) {
|
|
707
|
+
this.FilteredConnections = this.Connections.filter(c => c.MCPServerID === this.ServerID && c.Status === 'Active');
|
|
708
|
+
// Filter tools by selected server
|
|
709
|
+
this.FilteredTools = this.Tools.filter(t => t.MCPServerID === this.ServerID && t.Status === 'Active');
|
|
710
|
+
// Check if server requires authentication
|
|
711
|
+
const server = this.Servers.find(s => s.ID === this.ServerID);
|
|
712
|
+
const serverRequiresAuth = server?.Status === 'Active'; // All servers currently need connections
|
|
713
|
+
// Auto-select connection logic
|
|
714
|
+
if (this.FilteredConnections.length === 0) {
|
|
715
|
+
this.ConnectionID = null;
|
|
716
|
+
if (serverRequiresAuth) {
|
|
717
|
+
this.NoConnectionsWarning = 'No active connections available for this server. Please create a connection first.';
|
|
718
|
+
}
|
|
719
|
+
}
|
|
720
|
+
else if (this.FilteredConnections.length === 1) {
|
|
721
|
+
// Auto-select the only connection
|
|
722
|
+
this.ConnectionID = this.FilteredConnections[0].ID;
|
|
723
|
+
}
|
|
724
|
+
else {
|
|
725
|
+
// Select the first connection by default
|
|
726
|
+
this.ConnectionID = this.FilteredConnections[0].ID;
|
|
727
|
+
}
|
|
728
|
+
}
|
|
729
|
+
else {
|
|
730
|
+
this.FilteredConnections = [];
|
|
731
|
+
this.FilteredTools = [];
|
|
732
|
+
this.ConnectionID = null;
|
|
733
|
+
}
|
|
734
|
+
// Update display arrays for filtering
|
|
735
|
+
this.DisplayConnections = [...this.FilteredConnections];
|
|
736
|
+
this.DisplayTools = [...this.FilteredTools];
|
|
737
|
+
// Reset tool selection
|
|
738
|
+
this.ToolID = null;
|
|
739
|
+
this.cdr.detectChanges();
|
|
740
|
+
}
|
|
741
|
+
onConnectionChange() {
|
|
742
|
+
// Connection changed - tools are filtered by server, not connection
|
|
743
|
+
this.cdr.detectChanges();
|
|
744
|
+
}
|
|
745
|
+
onToolChange() {
|
|
746
|
+
this.cdr.detectChanges();
|
|
747
|
+
}
|
|
748
|
+
// ========================================
|
|
749
|
+
// Dropdown Filter Handlers
|
|
750
|
+
// ========================================
|
|
751
|
+
/**
|
|
752
|
+
* Handle server dropdown filter change
|
|
753
|
+
*/
|
|
754
|
+
onServerFilterChange(filter) {
|
|
755
|
+
const filterLower = (filter || '').toLowerCase();
|
|
756
|
+
this.DisplayServers = this.Servers.filter(s => s.Name.toLowerCase().includes(filterLower) ||
|
|
757
|
+
(s.Description?.toLowerCase().includes(filterLower) ?? false));
|
|
758
|
+
}
|
|
759
|
+
/**
|
|
760
|
+
* Handle connection dropdown filter change
|
|
761
|
+
*/
|
|
762
|
+
onConnectionFilterChange(filter) {
|
|
763
|
+
const filterLower = (filter || '').toLowerCase();
|
|
764
|
+
this.DisplayConnections = this.FilteredConnections.filter(c => c.Name.toLowerCase().includes(filterLower) ||
|
|
765
|
+
(c.Description?.toLowerCase().includes(filterLower) ?? false));
|
|
766
|
+
}
|
|
767
|
+
/**
|
|
768
|
+
* Handle tool dropdown filter change
|
|
769
|
+
*/
|
|
770
|
+
onToolFilterChange(filter) {
|
|
771
|
+
const filterLower = (filter || '').toLowerCase();
|
|
772
|
+
this.DisplayTools = this.FilteredTools.filter(t => t.ToolName.toLowerCase().includes(filterLower) ||
|
|
773
|
+
(t.ToolTitle?.toLowerCase().includes(filterLower) ?? false) ||
|
|
774
|
+
(t.ToolDescription?.toLowerCase().includes(filterLower) ?? false));
|
|
775
|
+
}
|
|
776
|
+
/**
|
|
777
|
+
* Can proceed to configuration step
|
|
778
|
+
*/
|
|
779
|
+
get CanProceedToConfig() {
|
|
780
|
+
return this.ServerID != null && this.ConnectionID != null && this.ToolID != null;
|
|
781
|
+
}
|
|
782
|
+
/**
|
|
783
|
+
* Proceed to configuration step
|
|
784
|
+
*/
|
|
785
|
+
async proceedToConfig() {
|
|
786
|
+
if (!this.CanProceedToConfig)
|
|
787
|
+
return;
|
|
788
|
+
this.SelectedTool = this.Tools.find(t => t.ID === this.ToolID) || null;
|
|
789
|
+
if (!this.SelectedTool)
|
|
790
|
+
return;
|
|
791
|
+
// Parse input schema and create parameter configs
|
|
792
|
+
this.parseInputSchema();
|
|
793
|
+
// Load cached parameter values
|
|
794
|
+
await this.loadCachedParameters();
|
|
795
|
+
this.CurrentStep = 'configure';
|
|
796
|
+
this.cdr.detectChanges();
|
|
797
|
+
}
|
|
798
|
+
/**
|
|
799
|
+
* Parse the tool's input schema to create parameter configurations
|
|
800
|
+
*/
|
|
801
|
+
parseInputSchema() {
|
|
802
|
+
if (!this.SelectedTool?.InputSchema) {
|
|
803
|
+
this.ParameterConfigs = [];
|
|
804
|
+
return;
|
|
805
|
+
}
|
|
806
|
+
try {
|
|
807
|
+
const schema = JSON.parse(this.SelectedTool.InputSchema);
|
|
808
|
+
const properties = schema.properties || {};
|
|
809
|
+
const required = schema.required || [];
|
|
810
|
+
this.ParameterConfigs = Object.entries(properties).map(([name, prop]) => {
|
|
811
|
+
const propDef = prop;
|
|
812
|
+
return {
|
|
813
|
+
name,
|
|
814
|
+
type: this.normalizeType(propDef.type),
|
|
815
|
+
description: propDef.description || '',
|
|
816
|
+
required: required.includes(name),
|
|
817
|
+
defaultValue: propDef.default,
|
|
818
|
+
enumValues: propDef.enum || [],
|
|
819
|
+
format: propDef.format || null,
|
|
820
|
+
minimum: propDef.minimum,
|
|
821
|
+
maximum: propDef.maximum
|
|
822
|
+
};
|
|
823
|
+
});
|
|
824
|
+
// Sort: required first, then alphabetically
|
|
825
|
+
this.ParameterConfigs.sort((a, b) => {
|
|
826
|
+
if (a.required !== b.required)
|
|
827
|
+
return a.required ? -1 : 1;
|
|
828
|
+
return a.name.localeCompare(b.name);
|
|
829
|
+
});
|
|
830
|
+
// Initialize parameter values with defaults
|
|
831
|
+
this.ParameterValues = {};
|
|
832
|
+
for (const config of this.ParameterConfigs) {
|
|
833
|
+
if (config.defaultValue !== undefined) {
|
|
834
|
+
this.ParameterValues[config.name] = config.defaultValue;
|
|
835
|
+
}
|
|
836
|
+
else {
|
|
837
|
+
this.ParameterValues[config.name] = this.getDefaultForType(config.type);
|
|
838
|
+
}
|
|
839
|
+
}
|
|
840
|
+
}
|
|
841
|
+
catch (error) {
|
|
842
|
+
console.error('Failed to parse input schema:', error);
|
|
843
|
+
this.ParameterConfigs = [];
|
|
844
|
+
}
|
|
845
|
+
}
|
|
846
|
+
/**
|
|
847
|
+
* Normalize JSON Schema type to string
|
|
848
|
+
*/
|
|
849
|
+
normalizeType(type) {
|
|
850
|
+
if (!type)
|
|
851
|
+
return 'string';
|
|
852
|
+
if (Array.isArray(type)) {
|
|
853
|
+
// Filter out 'null' and take first type
|
|
854
|
+
const nonNull = type.filter(t => t !== 'null');
|
|
855
|
+
return nonNull.length > 0 ? nonNull[0] : 'string';
|
|
856
|
+
}
|
|
857
|
+
return type;
|
|
858
|
+
}
|
|
859
|
+
/**
|
|
860
|
+
* Get default value for a type
|
|
861
|
+
*/
|
|
862
|
+
getDefaultForType(type) {
|
|
863
|
+
switch (type) {
|
|
864
|
+
case 'string': return '';
|
|
865
|
+
case 'number':
|
|
866
|
+
case 'integer': return null;
|
|
867
|
+
case 'boolean': return false;
|
|
868
|
+
case 'array': return [];
|
|
869
|
+
case 'object': return {};
|
|
870
|
+
default: return '';
|
|
871
|
+
}
|
|
872
|
+
}
|
|
873
|
+
/**
|
|
874
|
+
* Load cached parameter values from UserInfoEngine
|
|
875
|
+
*/
|
|
876
|
+
async loadCachedParameters() {
|
|
877
|
+
if (!this.SelectedTool)
|
|
878
|
+
return;
|
|
879
|
+
const settingKey = this.getSettingKey();
|
|
880
|
+
const engine = UserInfoEngine.Instance;
|
|
881
|
+
const cachedValue = engine.GetSetting(settingKey);
|
|
882
|
+
if (cachedValue) {
|
|
883
|
+
try {
|
|
884
|
+
const cached = JSON.parse(cachedValue);
|
|
885
|
+
// Merge cached values with defaults (cached takes precedence)
|
|
886
|
+
this.ParameterValues = { ...this.ParameterValues, ...cached };
|
|
887
|
+
}
|
|
888
|
+
catch (error) {
|
|
889
|
+
console.warn('Failed to parse cached parameters:', error);
|
|
890
|
+
}
|
|
891
|
+
}
|
|
892
|
+
}
|
|
893
|
+
/**
|
|
894
|
+
* Save current parameter values to cache
|
|
895
|
+
*/
|
|
896
|
+
async saveCachedParameters() {
|
|
897
|
+
if (!this.SelectedTool)
|
|
898
|
+
return;
|
|
899
|
+
const settingKey = this.getSettingKey();
|
|
900
|
+
const engine = UserInfoEngine.Instance;
|
|
901
|
+
try {
|
|
902
|
+
await engine.SetSetting(settingKey, JSON.stringify(this.ParameterValues));
|
|
903
|
+
}
|
|
904
|
+
catch (error) {
|
|
905
|
+
console.warn('Failed to save cached parameters:', error);
|
|
906
|
+
}
|
|
907
|
+
}
|
|
908
|
+
/**
|
|
909
|
+
* Get the setting key for caching parameters
|
|
910
|
+
*/
|
|
911
|
+
getSettingKey() {
|
|
912
|
+
return `${this.SETTINGS_PREFIX}${this.ServerID}/${this.ToolID}`;
|
|
913
|
+
}
|
|
914
|
+
// ========================================
|
|
915
|
+
// Parameter Input Helpers
|
|
916
|
+
// ========================================
|
|
917
|
+
/**
|
|
918
|
+
* Get input type for a parameter
|
|
919
|
+
*/
|
|
920
|
+
getInputType(config) {
|
|
921
|
+
if (config.enumValues.length > 0)
|
|
922
|
+
return 'select';
|
|
923
|
+
if (config.format === 'date')
|
|
924
|
+
return 'date';
|
|
925
|
+
if (config.format === 'date-time')
|
|
926
|
+
return 'datetime-local';
|
|
927
|
+
if (config.format === 'email')
|
|
928
|
+
return 'email';
|
|
929
|
+
if (config.format === 'uri' || config.format === 'url')
|
|
930
|
+
return 'url';
|
|
931
|
+
switch (config.type) {
|
|
932
|
+
case 'boolean': return 'checkbox';
|
|
933
|
+
case 'integer':
|
|
934
|
+
case 'number': return 'number';
|
|
935
|
+
case 'array':
|
|
936
|
+
case 'object': return 'textarea';
|
|
937
|
+
default: return 'text';
|
|
938
|
+
}
|
|
939
|
+
}
|
|
940
|
+
/**
|
|
941
|
+
* Check if parameter should use textarea
|
|
942
|
+
*/
|
|
943
|
+
isTextarea(config) {
|
|
944
|
+
return config.type === 'array' || config.type === 'object' ||
|
|
945
|
+
(config.description != null && config.description.length > 100);
|
|
946
|
+
}
|
|
947
|
+
/**
|
|
948
|
+
* Handle parameter value change
|
|
949
|
+
*/
|
|
950
|
+
onParameterChange(name, value) {
|
|
951
|
+
this.ParameterValues[name] = value;
|
|
952
|
+
}
|
|
953
|
+
/**
|
|
954
|
+
* Get parameter value as string for textarea display
|
|
955
|
+
*/
|
|
956
|
+
getTextareaValue(name) {
|
|
957
|
+
const value = this.ParameterValues[name];
|
|
958
|
+
if (value === null || value === undefined)
|
|
959
|
+
return '';
|
|
960
|
+
if (typeof value === 'object')
|
|
961
|
+
return JSON.stringify(value, null, 2);
|
|
962
|
+
return String(value);
|
|
963
|
+
}
|
|
964
|
+
/**
|
|
965
|
+
* Handle textarea change - parse JSON if needed
|
|
966
|
+
*/
|
|
967
|
+
onTextareaChange(name, value, config) {
|
|
968
|
+
if (config.type === 'array' || config.type === 'object') {
|
|
969
|
+
try {
|
|
970
|
+
this.ParameterValues[name] = JSON.parse(value || (config.type === 'array' ? '[]' : '{}'));
|
|
971
|
+
}
|
|
972
|
+
catch {
|
|
973
|
+
// Keep as string if not valid JSON
|
|
974
|
+
this.ParameterValues[name] = value;
|
|
975
|
+
}
|
|
976
|
+
}
|
|
977
|
+
else {
|
|
978
|
+
this.ParameterValues[name] = value;
|
|
979
|
+
}
|
|
980
|
+
}
|
|
981
|
+
// ========================================
|
|
982
|
+
// Execution
|
|
983
|
+
// ========================================
|
|
984
|
+
/**
|
|
985
|
+
* Validate that all required parameters have values
|
|
986
|
+
*/
|
|
987
|
+
get IsValid() {
|
|
988
|
+
for (const config of this.ParameterConfigs) {
|
|
989
|
+
if (config.required) {
|
|
990
|
+
const value = this.ParameterValues[config.name];
|
|
991
|
+
if (value === null || value === undefined || value === '') {
|
|
992
|
+
return false;
|
|
993
|
+
}
|
|
994
|
+
}
|
|
995
|
+
}
|
|
996
|
+
return true;
|
|
997
|
+
}
|
|
998
|
+
/**
|
|
999
|
+
* Execute the tool
|
|
1000
|
+
*/
|
|
1001
|
+
async executeTool() {
|
|
1002
|
+
if (!this.IsValid || !this.ConnectionID || !this.ToolID)
|
|
1003
|
+
return;
|
|
1004
|
+
this.IsExecuting = true;
|
|
1005
|
+
this.ExecutionError = null;
|
|
1006
|
+
this.cdr.detectChanges();
|
|
1007
|
+
// Save parameters before execution
|
|
1008
|
+
await this.saveCachedParameters();
|
|
1009
|
+
// Build input arguments, filtering out empty optional values
|
|
1010
|
+
const inputArgs = {};
|
|
1011
|
+
for (const config of this.ParameterConfigs) {
|
|
1012
|
+
const value = this.ParameterValues[config.name];
|
|
1013
|
+
if (config.required || (value !== null && value !== undefined && value !== '')) {
|
|
1014
|
+
inputArgs[config.name] = value;
|
|
1015
|
+
}
|
|
1016
|
+
}
|
|
1017
|
+
try {
|
|
1018
|
+
const result = await this.gqlProvider.ExecuteGQL(ExecuteMCPToolMutation, {
|
|
1019
|
+
input: {
|
|
1020
|
+
ConnectionID: this.ConnectionID,
|
|
1021
|
+
ToolID: this.ToolID,
|
|
1022
|
+
ToolName: this.SelectedTool?.ToolName,
|
|
1023
|
+
InputArgs: JSON.stringify(inputArgs)
|
|
1024
|
+
}
|
|
1025
|
+
});
|
|
1026
|
+
this.ExecutionResult = result?.ExecuteMCPTool || {
|
|
1027
|
+
Success: false,
|
|
1028
|
+
ErrorMessage: 'No result returned from server'
|
|
1029
|
+
};
|
|
1030
|
+
this.CurrentStep = 'results';
|
|
1031
|
+
}
|
|
1032
|
+
catch (error) {
|
|
1033
|
+
this.ExecutionError = error instanceof Error ? error.message : String(error);
|
|
1034
|
+
this.ExecutionResult = {
|
|
1035
|
+
Success: false,
|
|
1036
|
+
ErrorMessage: this.ExecutionError
|
|
1037
|
+
};
|
|
1038
|
+
this.CurrentStep = 'results';
|
|
1039
|
+
}
|
|
1040
|
+
finally {
|
|
1041
|
+
this.IsExecuting = false;
|
|
1042
|
+
this.cdr.detectChanges();
|
|
1043
|
+
}
|
|
1044
|
+
}
|
|
1045
|
+
// ========================================
|
|
1046
|
+
// Results Helpers
|
|
1047
|
+
// ========================================
|
|
1048
|
+
/**
|
|
1049
|
+
* Format the result for display
|
|
1050
|
+
*/
|
|
1051
|
+
get FormattedResult() {
|
|
1052
|
+
if (!this.ExecutionResult?.Result)
|
|
1053
|
+
return '';
|
|
1054
|
+
try {
|
|
1055
|
+
if (typeof this.ExecutionResult.Result === 'string') {
|
|
1056
|
+
// Try to parse as JSON for pretty printing
|
|
1057
|
+
const parsed = JSON.parse(this.ExecutionResult.Result);
|
|
1058
|
+
return JSON.stringify(parsed, null, 2);
|
|
1059
|
+
}
|
|
1060
|
+
return JSON.stringify(this.ExecutionResult.Result, null, 2);
|
|
1061
|
+
}
|
|
1062
|
+
catch {
|
|
1063
|
+
return String(this.ExecutionResult.Result);
|
|
1064
|
+
}
|
|
1065
|
+
}
|
|
1066
|
+
/**
|
|
1067
|
+
* Check if result is JSON
|
|
1068
|
+
*/
|
|
1069
|
+
get IsResultJson() {
|
|
1070
|
+
if (!this.ExecutionResult?.Result)
|
|
1071
|
+
return false;
|
|
1072
|
+
try {
|
|
1073
|
+
if (typeof this.ExecutionResult.Result === 'string') {
|
|
1074
|
+
JSON.parse(this.ExecutionResult.Result);
|
|
1075
|
+
}
|
|
1076
|
+
return typeof this.ExecutionResult.Result === 'object';
|
|
1077
|
+
}
|
|
1078
|
+
catch {
|
|
1079
|
+
return false;
|
|
1080
|
+
}
|
|
1081
|
+
}
|
|
1082
|
+
/**
|
|
1083
|
+
* Copy result to clipboard
|
|
1084
|
+
*/
|
|
1085
|
+
async copyResult() {
|
|
1086
|
+
if (!this.FormattedResult)
|
|
1087
|
+
return;
|
|
1088
|
+
try {
|
|
1089
|
+
await navigator.clipboard.writeText(this.FormattedResult);
|
|
1090
|
+
}
|
|
1091
|
+
catch (error) {
|
|
1092
|
+
console.error('Failed to copy to clipboard:', error);
|
|
1093
|
+
}
|
|
1094
|
+
}
|
|
1095
|
+
// ========================================
|
|
1096
|
+
// Navigation
|
|
1097
|
+
// ========================================
|
|
1098
|
+
/**
|
|
1099
|
+
* Go back to previous step
|
|
1100
|
+
*/
|
|
1101
|
+
goBack() {
|
|
1102
|
+
if (this.CurrentStep === 'results') {
|
|
1103
|
+
this.CurrentStep = 'configure';
|
|
1104
|
+
}
|
|
1105
|
+
else if (this.CurrentStep === 'configure') {
|
|
1106
|
+
this.CurrentStep = 'select';
|
|
1107
|
+
}
|
|
1108
|
+
this.cdr.detectChanges();
|
|
1109
|
+
}
|
|
1110
|
+
/**
|
|
1111
|
+
* Run the tool again with same parameters
|
|
1112
|
+
*/
|
|
1113
|
+
async runAgain() {
|
|
1114
|
+
this.CurrentStep = 'configure';
|
|
1115
|
+
this.ExecutionResult = null;
|
|
1116
|
+
this.ExecutionError = null;
|
|
1117
|
+
this.cdr.detectChanges();
|
|
1118
|
+
}
|
|
1119
|
+
/**
|
|
1120
|
+
* Close the dialog
|
|
1121
|
+
*/
|
|
1122
|
+
closeDialog() {
|
|
1123
|
+
this.Close.emit();
|
|
1124
|
+
}
|
|
1125
|
+
// ========================================
|
|
1126
|
+
// Panel Resize Handlers
|
|
1127
|
+
// ========================================
|
|
1128
|
+
/**
|
|
1129
|
+
* Start resize operation
|
|
1130
|
+
*/
|
|
1131
|
+
onResizeStart(event) {
|
|
1132
|
+
if (this.IsMobileMode)
|
|
1133
|
+
return; // No resize on mobile
|
|
1134
|
+
event.preventDefault();
|
|
1135
|
+
this.IsResizing = true;
|
|
1136
|
+
document.body.style.cursor = 'ew-resize';
|
|
1137
|
+
document.body.style.userSelect = 'none';
|
|
1138
|
+
}
|
|
1139
|
+
/**
|
|
1140
|
+
* Handle mouse move during resize
|
|
1141
|
+
*/
|
|
1142
|
+
onMouseMove(event) {
|
|
1143
|
+
if (!this.IsResizing)
|
|
1144
|
+
return;
|
|
1145
|
+
// Calculate width from right edge of viewport to cursor
|
|
1146
|
+
const newWidth = window.innerWidth - event.clientX;
|
|
1147
|
+
// Clamp to bounds
|
|
1148
|
+
this.PanelWidth = Math.min(Math.max(newWidth, this.MIN_PANEL_WIDTH), Math.min(this.MAX_PANEL_WIDTH, window.innerWidth - 50) // Leave 50px margin
|
|
1149
|
+
);
|
|
1150
|
+
this.cdr.detectChanges();
|
|
1151
|
+
}
|
|
1152
|
+
/**
|
|
1153
|
+
* End resize operation
|
|
1154
|
+
*/
|
|
1155
|
+
onMouseUp() {
|
|
1156
|
+
if (this.IsResizing) {
|
|
1157
|
+
this.IsResizing = false;
|
|
1158
|
+
document.body.style.cursor = '';
|
|
1159
|
+
document.body.style.userSelect = '';
|
|
1160
|
+
// Persist panel width (debounced)
|
|
1161
|
+
this.widthPersistSubject.next(this.PanelWidth);
|
|
1162
|
+
}
|
|
1163
|
+
}
|
|
1164
|
+
/**
|
|
1165
|
+
* Handle window resize for mobile mode
|
|
1166
|
+
*/
|
|
1167
|
+
onWindowResize() {
|
|
1168
|
+
// In mobile mode, always use full width
|
|
1169
|
+
if (this.IsMobileMode) {
|
|
1170
|
+
this.PanelWidth = window.innerWidth;
|
|
1171
|
+
}
|
|
1172
|
+
else {
|
|
1173
|
+
// Ensure panel doesn't exceed viewport
|
|
1174
|
+
if (this.PanelWidth > window.innerWidth - 50) {
|
|
1175
|
+
this.PanelWidth = Math.max(this.MIN_PANEL_WIDTH, window.innerWidth - 50);
|
|
1176
|
+
}
|
|
1177
|
+
}
|
|
1178
|
+
this.cdr.detectChanges();
|
|
1179
|
+
}
|
|
1180
|
+
/**
|
|
1181
|
+
* Load saved panel width from user settings
|
|
1182
|
+
*/
|
|
1183
|
+
loadSavedPanelWidth() {
|
|
1184
|
+
// In mobile mode, always use full width
|
|
1185
|
+
if (this.IsMobileMode) {
|
|
1186
|
+
this.PanelWidth = window.innerWidth;
|
|
1187
|
+
return;
|
|
1188
|
+
}
|
|
1189
|
+
try {
|
|
1190
|
+
const savedWidth = UserInfoEngine.Instance.GetSetting(this.PANEL_WIDTH_SETTING_KEY);
|
|
1191
|
+
if (savedWidth) {
|
|
1192
|
+
const width = parseInt(savedWidth, 10);
|
|
1193
|
+
if (!isNaN(width) && width >= this.MIN_PANEL_WIDTH && width <= this.MAX_PANEL_WIDTH) {
|
|
1194
|
+
this.PanelWidth = width;
|
|
1195
|
+
}
|
|
1196
|
+
}
|
|
1197
|
+
}
|
|
1198
|
+
catch (error) {
|
|
1199
|
+
console.warn('[MCPTestToolPanel] Failed to load saved panel width:', error);
|
|
1200
|
+
}
|
|
1201
|
+
}
|
|
1202
|
+
/**
|
|
1203
|
+
* Persist panel width to user settings
|
|
1204
|
+
*/
|
|
1205
|
+
async persistPanelWidth(width) {
|
|
1206
|
+
try {
|
|
1207
|
+
await UserInfoEngine.Instance.SetSetting(this.PANEL_WIDTH_SETTING_KEY, String(width));
|
|
1208
|
+
}
|
|
1209
|
+
catch (error) {
|
|
1210
|
+
console.warn('[MCPTestToolPanel] Failed to persist panel width:', error);
|
|
1211
|
+
}
|
|
1212
|
+
}
|
|
1213
|
+
/**
|
|
1214
|
+
* Get display name for selected server
|
|
1215
|
+
*/
|
|
1216
|
+
get SelectedServerName() {
|
|
1217
|
+
const server = this.Servers.find(s => s.ID === this.ServerID);
|
|
1218
|
+
return server?.Name || '';
|
|
1219
|
+
}
|
|
1220
|
+
/**
|
|
1221
|
+
* Get display name for selected connection
|
|
1222
|
+
*/
|
|
1223
|
+
get SelectedConnectionName() {
|
|
1224
|
+
const connection = this.Connections.find(c => c.ID === this.ConnectionID);
|
|
1225
|
+
return connection?.Name || '';
|
|
1226
|
+
}
|
|
1227
|
+
/**
|
|
1228
|
+
* Get display name for selected tool
|
|
1229
|
+
*/
|
|
1230
|
+
get SelectedToolName() {
|
|
1231
|
+
return this.SelectedTool?.ToolTitle || this.SelectedTool?.ToolName || '';
|
|
1232
|
+
}
|
|
1233
|
+
static ɵfac = function MCPTestToolDialogComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || MCPTestToolDialogComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i0.ElementRef)); };
|
|
1234
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MCPTestToolDialogComponent, selectors: [["mj-mcp-test-tool-dialog"]], hostBindings: function MCPTestToolDialogComponent_HostBindings(rf, ctx) { if (rf & 1) {
|
|
1235
|
+
i0.ɵɵlistener("mousemove", function MCPTestToolDialogComponent_mousemove_HostBindingHandler($event) { return ctx.onMouseMove($event); }, false, i0.ɵɵresolveDocument)("mouseup", function MCPTestToolDialogComponent_mouseup_HostBindingHandler() { return ctx.onMouseUp(); }, false, i0.ɵɵresolveDocument)("resize", function MCPTestToolDialogComponent_resize_HostBindingHandler() { return ctx.onWindowResize(); }, false, i0.ɵɵresolveWindow);
|
|
1236
|
+
} }, inputs: { Visible: "Visible", Servers: "Servers", Connections: "Connections", Tools: "Tools", SelectedServerID: "SelectedServerID", SelectedConnectionID: "SelectedConnectionID", SelectedToolID: "SelectedToolID" }, outputs: { Close: "Close" }, decls: 2, vars: 2, consts: [[1, "panel-backdrop"], ["class", "slide-out-panel", 3, "width", "mobile", "resizing", 4, "ngIf"], [1, "panel-backdrop", 3, "click"], [1, "slide-out-panel"], ["title", "Drag to resize", 1, "resize-handle", 3, "active"], [1, "panel-header"], [1, "panel-title"], [1, "fa-solid", "fa-flask"], ["title", "Close", 1, "close-btn", 3, "click"], [1, "fa-solid", "fa-times"], [1, "step-indicator"], [1, "step"], [1, "step-number"], [1, "step-label"], [1, "step-connector"], [1, "panel-content"], ["class", "step-content", 4, "ngIf"], ["class", "step-content results-step", 4, "ngIf"], [1, "panel-actions"], ["title", "Drag to resize", 1, "resize-handle", 3, "mousedown"], [1, "resize-grip"], [1, "step-content"], [1, "selection-form"], [1, "form-group"], [1, "form-label"], [1, "fa-solid", "fa-server"], [1, "required"], ["placeholder", "Select a server...", 3, "ngModelChange", "valueChange", "filterChange", "data", "textField", "valueField", "valuePrimitive", "ngModel", "filterable"], ["kendoDropDownListItemTemplate", ""], [1, "fa-solid", "fa-link"], ["placeholder", "Select a connection...", 3, "ngModelChange", "valueChange", "filterChange", "data", "textField", "valueField", "valuePrimitive", "ngModel", "disabled", "filterable"], [1, "field-hint"], [1, "field-error"], [1, "field-hint", "auto-selected"], [1, "fa-solid", "fa-wrench"], ["placeholder", "Select a tool...", 3, "ngModelChange", "valueChange", "filterChange", "data", "textField", "valueField", "valuePrimitive", "ngModel", "disabled", "filterable"], ["kendoDropDownListValueTemplate", ""], [1, "dropdown-item"], [1, "item-name"], [1, "item-status"], [1, "item-description"], [1, "fa-solid", "fa-exclamation-triangle"], [1, "fa-solid", "fa-check"], [1, "dropdown-item", "tool-item"], [1, "tool-header"], [1, "tool-info"], [1, "tool-name"], [1, "tool-description"], [1, "tool-context"], [1, "context-item"], [1, "no-params"], [1, "parameters-form"], [1, "fa-solid", "fa-check-circle"], [1, "params-title"], [1, "param-group", 3, "required"], [1, "param-group"], [1, "param-label"], [1, "param-description"], [3, "data", "valuePrimitive", "ngModel"], [1, "checkbox-wrapper"], [3, "format", "step", "ngModel"], [3, "ngModelChange", "valueChange", "data", "valuePrimitive", "ngModel"], ["type", "checkbox", 3, "change", "id", "checked"], [3, "for"], [3, "ngModelChange", "valueChange", "format", "step", "ngModel"], ["rows", "4", 1, "json-input", 3, "input", "value", "placeholder"], ["rows", "3", 1, "text-input", 3, "ngModel", "placeholder"], [3, "ngModel", "placeholder"], ["rows", "3", 1, "text-input", 3, "ngModelChange", "input", "ngModel", "placeholder"], [3, "ngModelChange", "valueChange", "ngModel", "placeholder"], [1, "step-content", "results-step"], [1, "results-container"], [1, "result-header"], [1, "duration"], [1, "execution-info"], [1, "info-row"], [1, "info-label"], [1, "info-value"], [1, "error-panel"], [1, "result-panel", "fill-space"], [1, "result-status"], [1, "fa-solid", "fa-times-circle"], [1, "error-message"], [1, "result-panel-header"], [1, "fa-solid", "fa-code"], ["kendoButton", "", "fillMode", "flat", "title", "Copy to clipboard", 3, "click"], [1, "fa-solid", "fa-copy"], [1, "code-editor-container"], [3, "ngModel", "language", "readonly"], ["kendoButton", "", "themeColor", "primary", 3, "click", "disabled"], [1, "fa-solid", "fa-arrow-right"], ["kendoButton", "", "fillMode", "flat", 3, "click"], [1, "fa-solid", "fa-arrow-left"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-play"], ["kendoButton", "", "themeColor", "primary", 3, "click"], [1, "fa-solid", "fa-redo"]], template: function MCPTestToolDialogComponent_Template(rf, ctx) { if (rf & 1) {
|
|
1237
|
+
i0.ɵɵtemplate(0, MCPTestToolDialogComponent_Conditional_0_Template, 1, 0, "div", 0)(1, MCPTestToolDialogComponent_div_1_Template, 34, 26, "div", 1);
|
|
1238
|
+
} if (rf & 2) {
|
|
1239
|
+
i0.ɵɵconditional(ctx.Visible ? 0 : -1);
|
|
1240
|
+
i0.ɵɵadvance();
|
|
1241
|
+
i0.ɵɵproperty("ngIf", ctx.Visible);
|
|
1242
|
+
} }, dependencies: [i1.NgIf, i2.DefaultValueAccessor, i2.NgControlStatus, i2.NgModel, i3.ButtonComponent, i4.ItemTemplateDirective, i4.ValueTemplateDirective, i4.DropDownListComponent, i5.TextBoxComponent, i5.NumericTextBoxComponent, i6.CodeEditorComponent], styles: ["\n\n\n\n\n\n\n.panel-backdrop[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.4);\n z-index: 1000;\n animation: _ngcontent-%COMP%_fadeIn 0.2s ease-out;\n}\n\n@keyframes _ngcontent-%COMP%_fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n\n\n\n\n.slide-out-panel[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n background: white;\n box-shadow: -4px 0 20px rgba(0, 0, 0, 0.15);\n z-index: 1001;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.slide-out-panel.mobile[_ngcontent-%COMP%] {\n width: 100% !important;\n left: 0;\n}\n\n.slide-out-panel.resizing[_ngcontent-%COMP%] {\n user-select: none;\n transition: none;\n}\n\n\n\n\n\n.resize-handle[_ngcontent-%COMP%] {\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n width: 6px;\n cursor: ew-resize;\n background: transparent;\n z-index: 10;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background 0.15s ease;\n}\n\n.resize-handle[_ngcontent-%COMP%]:hover, \n.resize-handle.active[_ngcontent-%COMP%] {\n background: rgba(33, 150, 243, 0.1);\n}\n\n.resize-grip[_ngcontent-%COMP%] {\n width: 3px;\n height: 40px;\n background: #ccc;\n border-radius: 2px;\n opacity: 0;\n transition: opacity 0.15s ease;\n}\n\n.resize-handle[_ngcontent-%COMP%]:hover .resize-grip[_ngcontent-%COMP%], \n.resize-handle.active[_ngcontent-%COMP%] .resize-grip[_ngcontent-%COMP%] {\n opacity: 1;\n background: var(--mj-primary-color, #2196f3);\n}\n\n\n\n\n\n.panel-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n background: white;\n border-bottom: 1px solid #e0e0e0;\n flex-shrink: 0;\n}\n\n.panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-color, #333);\n}\n\n.panel-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-primary-color, #2196f3);\n}\n\n.close-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n border: none;\n background: transparent;\n border-radius: 50%;\n cursor: pointer;\n color: #666;\n transition: all 0.15s ease;\n}\n\n.close-btn[_ngcontent-%COMP%]:hover {\n background: #f5f5f5;\n color: #333;\n}\n\n.close-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 18px;\n}\n\n\n\n\n\n.step-indicator[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 16px 20px;\n background: #fafafa;\n border-bottom: 1px solid #e0e0e0;\n flex-shrink: 0;\n}\n\n.step[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n opacity: 0.5;\n transition: opacity 0.2s ease;\n}\n\n.step.active[_ngcontent-%COMP%], \n.step.completed[_ngcontent-%COMP%] {\n opacity: 1;\n}\n\n.step-number[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n border-radius: 50%;\n background: #e0e0e0;\n color: #666;\n font-weight: 600;\n font-size: 13px;\n transition: all 0.2s ease;\n}\n\n.step.active[_ngcontent-%COMP%] .step-number[_ngcontent-%COMP%] {\n background: var(--mj-primary-color, #2196f3);\n color: white;\n}\n\n.step.completed[_ngcontent-%COMP%] .step-number[_ngcontent-%COMP%] {\n background: #4caf50;\n color: white;\n}\n\n.step-label[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-color, #333);\n}\n\n.step-connector[_ngcontent-%COMP%] {\n width: 40px;\n height: 2px;\n background: #e0e0e0;\n margin: 0 10px;\n transition: background 0.2s ease;\n}\n\n.step-connector.completed[_ngcontent-%COMP%] {\n background: #4caf50;\n}\n\n\n\n\n\n.panel-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n display: flex;\n flex-direction: column;\n min-height: 0;\n}\n\n.step-content[_ngcontent-%COMP%] {\n min-height: 100%;\n}\n\n.step-content.results-step[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n}\n\n\n\n\n\n.selection-form[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n\n.form-group[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.form-label[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-color, #333);\n}\n\n.form-label[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-primary-color, #2196f3);\n font-size: 14px;\n}\n\n.required[_ngcontent-%COMP%] {\n color: #f44336;\n font-weight: 600;\n}\n\n.field-hint[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--mj-text-secondary-color, #666);\n font-style: italic;\n margin-top: 4px;\n}\n\n.field-hint.auto-selected[_ngcontent-%COMP%] {\n color: #4caf50;\n font-style: normal;\n}\n\n.field-hint.auto-selected[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n}\n\n.field-error[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: #f44336;\n margin-top: 4px;\n padding: 8px 10px;\n background: rgba(244, 67, 54, 0.08);\n border-radius: 4px;\n border: 1px solid rgba(244, 67, 54, 0.2);\n}\n\n.field-error[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 13px;\n}\n\n\n\n.dropdown-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n padding: 4px 0;\n}\n\n.dropdown-item.tool-item[_ngcontent-%COMP%] {\n max-width: 100%;\n}\n\n.item-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-color, #333);\n}\n\n.item-description[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary-color, #666);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 100%;\n}\n\n.item-status[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.item-status.status-active[_ngcontent-%COMP%] {\n color: #4caf50;\n}\n\n.item-status.status-inactive[_ngcontent-%COMP%] {\n color: #9e9e9e;\n}\n\n\n\n\n\n.tool-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n padding: 16px;\n background: linear-gradient(135deg, rgba(33, 150, 243, 0.08), rgba(33, 150, 243, 0.02));\n border-radius: 8px;\n margin-bottom: 20px;\n border: 1px solid rgba(33, 150, 243, 0.15);\n}\n\n.tool-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.tool-name[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n margin: 0 0 8px 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-color, #333);\n}\n\n.tool-name[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-primary-color, #2196f3);\n}\n\n.tool-description[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 13px;\n color: var(--mj-text-secondary-color, #666);\n line-height: 1.5;\n}\n\n.tool-context[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n align-items: flex-end;\n flex-shrink: 0;\n}\n\n.context-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--mj-text-secondary-color, #666);\n}\n\n.context-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n color: #999;\n}\n\n\n\n\n\n.no-params[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px 20px;\n text-align: center;\n color: var(--mj-text-secondary-color, #666);\n}\n\n.no-params[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 48px;\n color: #4caf50;\n margin-bottom: 16px;\n}\n\n.no-params[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 15px;\n}\n\n.params-title[_ngcontent-%COMP%] {\n margin: 0 0 16px 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-secondary-color, #666);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.parameters-form[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.param-group[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding: 12px;\n background: #fafafa;\n border-radius: 6px;\n border: 1px solid #e8e8e8;\n}\n\n.param-group.required[_ngcontent-%COMP%] {\n border-left: 3px solid var(--mj-primary-color, #2196f3);\n}\n\n.param-label[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-color, #333);\n}\n\n.param-description[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 12px;\n color: var(--mj-text-secondary-color, #666);\n line-height: 1.4;\n}\n\n.checkbox-wrapper[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 4px 0;\n}\n\n.checkbox-wrapper[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n width: 18px;\n height: 18px;\n cursor: pointer;\n}\n\n.checkbox-wrapper[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-color, #333);\n cursor: pointer;\n}\n\n.json-input[_ngcontent-%COMP%], \n.text-input[_ngcontent-%COMP%] {\n width: 100%;\n padding: 10px 12px;\n font-family: 'Consolas', 'Monaco', monospace;\n font-size: 13px;\n line-height: 1.5;\n border: 1px solid #ddd;\n border-radius: 4px;\n background: white;\n resize: vertical;\n box-sizing: border-box;\n}\n\n.json-input[_ngcontent-%COMP%]:focus, \n.text-input[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-primary-color, #2196f3);\n box-shadow: 0 0 0 2px rgba(33, 150, 243, 0.1);\n}\n\n\n\n\n\n.results-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n flex: 1;\n min-height: 0;\n}\n\n.result-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 16px;\n border-radius: 8px;\n font-weight: 600;\n}\n\n.result-header.success[_ngcontent-%COMP%] {\n background: rgba(76, 175, 80, 0.1);\n color: #388e3c;\n}\n\n.result-header.success[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n color: #4caf50;\n}\n\n.result-header.error[_ngcontent-%COMP%] {\n background: rgba(244, 67, 54, 0.1);\n color: #c62828;\n}\n\n.result-header.error[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n color: #f44336;\n}\n\n.result-status[_ngcontent-%COMP%] {\n flex: 1;\n font-size: 16px;\n}\n\n.duration[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: normal;\n color: var(--mj-text-secondary-color, #666);\n background: rgba(0, 0, 0, 0.05);\n padding: 4px 8px;\n border-radius: 4px;\n}\n\n.error-panel[_ngcontent-%COMP%] {\n background: #fff5f5;\n border: 1px solid rgba(244, 67, 54, 0.2);\n border-radius: 8px;\n padding: 16px;\n}\n\n.error-panel[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 0 0 12px 0;\n font-size: 14px;\n color: #c62828;\n}\n\n.error-message[_ngcontent-%COMP%] {\n margin: 0;\n padding: 12px;\n background: white;\n border-radius: 4px;\n font-family: monospace;\n font-size: 13px;\n line-height: 1.5;\n color: #c62828;\n white-space: pre-wrap;\n word-break: break-word;\n}\n\n.result-panel[_ngcontent-%COMP%] {\n background: white;\n border: 1px solid #e0e0e0;\n border-radius: 8px;\n overflow: hidden;\n}\n\n.result-panel.fill-space[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n min-height: 200px;\n}\n\n.result-panel-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 16px;\n background: #fafafa;\n border-bottom: 1px solid #e0e0e0;\n}\n\n.result-panel-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 0;\n font-size: 14px;\n color: var(--mj-text-color, #333);\n}\n\n.code-editor-container[_ngcontent-%COMP%] {\n height: 300px;\n min-height: 200px;\n max-height: 400px;\n overflow: hidden;\n}\n\n.result-panel.fill-space[_ngcontent-%COMP%] .code-editor-container[_ngcontent-%COMP%] {\n flex: 1;\n height: auto;\n max-height: none;\n}\n\n.code-editor-container[_ngcontent-%COMP%] mj-code-editor[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n}\n\n.execution-info[_ngcontent-%COMP%] {\n padding: 16px;\n background: #fafafa;\n border-radius: 8px;\n border: 1px solid #e8e8e8;\n}\n\n.info-row[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n padding: 6px 0;\n font-size: 13px;\n}\n\n.info-row[_ngcontent-%COMP%]:not(:last-child) {\n border-bottom: 1px solid #e8e8e8;\n}\n\n.info-label[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary-color, #666);\n}\n\n.info-value[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-color, #333);\n}\n\n\n\n\n\n.panel-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n padding: 16px 20px;\n background: white;\n border-top: 1px solid #e0e0e0;\n flex-shrink: 0;\n}\n\n.panel-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n min-width: 100px;\n}\n\n.panel-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 6px;\n}\n\n\n\n\n\n@media (max-width: 768px) {\n .slide-out-panel[_ngcontent-%COMP%] {\n width: 100% !important;\n left: 0;\n }\n\n .resize-handle[_ngcontent-%COMP%] {\n display: none;\n }\n\n .step-indicator[_ngcontent-%COMP%] {\n padding: 12px 16px;\n }\n\n .step-connector[_ngcontent-%COMP%] {\n width: 20px;\n margin: 0 6px;\n }\n\n .step-label[_ngcontent-%COMP%] {\n display: none;\n }\n\n .panel-content[_ngcontent-%COMP%] {\n padding: 16px;\n }\n\n .tool-header[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 12px;\n }\n\n .tool-context[_ngcontent-%COMP%] {\n align-items: flex-start;\n flex-direction: row;\n flex-wrap: wrap;\n gap: 12px;\n }\n\n .panel-actions[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n }\n\n .panel-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 80px;\n }\n}\n\n@media (max-width: 480px) {\n .panel-header[_ngcontent-%COMP%] {\n padding: 12px 16px;\n }\n\n .panel-title[_ngcontent-%COMP%] {\n font-size: 16px;\n }\n\n .step-number[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n font-size: 12px;\n }\n\n .tool-name[_ngcontent-%COMP%] {\n font-size: 16px;\n }\n}"], data: { animation: [
|
|
1243
|
+
trigger('slideIn', [
|
|
1244
|
+
transition(':enter', [
|
|
1245
|
+
style({ transform: 'translateX(100%)', opacity: 0 }),
|
|
1246
|
+
animate('250ms ease-out', style({ transform: 'translateX(0)', opacity: 1 }))
|
|
1247
|
+
]),
|
|
1248
|
+
transition(':leave', [
|
|
1249
|
+
animate('200ms ease-in', style({ transform: 'translateX(100%)', opacity: 0 }))
|
|
1250
|
+
])
|
|
1251
|
+
])
|
|
1252
|
+
] } });
|
|
1253
|
+
}
|
|
1254
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MCPTestToolDialogComponent, [{
|
|
1255
|
+
type: Component,
|
|
1256
|
+
args: [{ selector: 'mj-mcp-test-tool-dialog', animations: [
|
|
1257
|
+
trigger('slideIn', [
|
|
1258
|
+
transition(':enter', [
|
|
1259
|
+
style({ transform: 'translateX(100%)', opacity: 0 }),
|
|
1260
|
+
animate('250ms ease-out', style({ transform: 'translateX(0)', opacity: 1 }))
|
|
1261
|
+
]),
|
|
1262
|
+
transition(':leave', [
|
|
1263
|
+
animate('200ms ease-in', style({ transform: 'translateX(100%)', opacity: 0 }))
|
|
1264
|
+
])
|
|
1265
|
+
])
|
|
1266
|
+
], template: "<!-- Backdrop -->\n@if (Visible) {\n <div class=\"panel-backdrop\" (click)=\"closeDialog()\"></div>\n}\n\n<!-- Slide-out Panel -->\n<div class=\"slide-out-panel\"\n *ngIf=\"Visible\"\n @slideIn\n [style.width.px]=\"IsMobileMode ? null : PanelWidth\"\n [class.mobile]=\"IsMobileMode\"\n [class.resizing]=\"IsResizing\">\n\n <!-- Resize Handle (left edge) -->\n @if (!IsMobileMode) {\n <div class=\"resize-handle\"\n (mousedown)=\"onResizeStart($event)\"\n [class.active]=\"IsResizing\"\n title=\"Drag to resize\">\n <div class=\"resize-grip\"></div>\n </div>\n }\n\n <!-- Panel Header -->\n <div class=\"panel-header\">\n <h2 class=\"panel-title\">\n <i class=\"fa-solid fa-flask\"></i>\n Test MCP Tool\n </h2>\n <button class=\"close-btn\" (click)=\"closeDialog()\" title=\"Close\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n\n <!-- Step Indicator -->\n <div class=\"step-indicator\">\n <div class=\"step\" [class.active]=\"CurrentStep === 'select'\" [class.completed]=\"CurrentStep !== 'select'\">\n <span class=\"step-number\">1</span>\n <span class=\"step-label\">Select Tool</span>\n </div>\n <div class=\"step-connector\" [class.completed]=\"CurrentStep !== 'select'\"></div>\n <div class=\"step\" [class.active]=\"CurrentStep === 'configure'\" [class.completed]=\"CurrentStep === 'results'\">\n <span class=\"step-number\">2</span>\n <span class=\"step-label\">Configure</span>\n </div>\n <div class=\"step-connector\" [class.completed]=\"CurrentStep === 'results'\"></div>\n <div class=\"step\" [class.active]=\"CurrentStep === 'results'\">\n <span class=\"step-number\">3</span>\n <span class=\"step-label\">Results</span>\n </div>\n </div>\n\n <!-- Panel Content -->\n <div class=\"panel-content\">\n <!-- Step 1: Select Server, Connection, Tool -->\n <div class=\"step-content\" *ngIf=\"CurrentStep === 'select'\">\n <div class=\"selection-form\">\n <!-- Server Selection -->\n <div class=\"form-group\">\n <label class=\"form-label\">\n <i class=\"fa-solid fa-server\"></i>\n Server\n <span class=\"required\">*</span>\n </label>\n <kendo-dropdownlist\n [data]=\"DisplayServers\"\n [textField]=\"'Name'\"\n [valueField]=\"'ID'\"\n [valuePrimitive]=\"true\"\n [(ngModel)]=\"ServerID\"\n (valueChange)=\"onServerChange()\"\n [filterable]=\"true\"\n (filterChange)=\"onServerFilterChange($event)\"\n placeholder=\"Select a server...\">\n <ng-template kendoDropDownListItemTemplate let-dataItem>\n <div class=\"dropdown-item\">\n <span class=\"item-name\">{{ dataItem.Name }}</span>\n <span class=\"item-status\" [class]=\"'status-' + dataItem.Status.toLowerCase()\">\n {{ dataItem.Status }}\n </span>\n </div>\n </ng-template>\n </kendo-dropdownlist>\n </div>\n\n <!-- Connection Selection -->\n <div class=\"form-group\">\n <label class=\"form-label\">\n <i class=\"fa-solid fa-link\"></i>\n Connection\n <span class=\"required\">*</span>\n </label>\n <kendo-dropdownlist\n [data]=\"DisplayConnections\"\n [textField]=\"'Name'\"\n [valueField]=\"'ID'\"\n [valuePrimitive]=\"true\"\n [(ngModel)]=\"ConnectionID\"\n (valueChange)=\"onConnectionChange()\"\n [disabled]=\"!ServerID || NoConnectionsWarning !== null\"\n [filterable]=\"true\"\n (filterChange)=\"onConnectionFilterChange($event)\"\n placeholder=\"Select a connection...\">\n <ng-template kendoDropDownListItemTemplate let-dataItem>\n <div class=\"dropdown-item\">\n <span class=\"item-name\">{{ dataItem.Name }}</span>\n @if (dataItem.Description) {\n <span class=\"item-description\">{{ dataItem.Description }}</span>\n }\n </div>\n </ng-template>\n </kendo-dropdownlist>\n @if (!ServerID) {\n <span class=\"field-hint\">Select a server first</span>\n }\n @if (NoConnectionsWarning) {\n <span class=\"field-error\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n {{ NoConnectionsWarning }}\n </span>\n }\n @if (FilteredConnections.length === 1 && ConnectionID) {\n <span class=\"field-hint auto-selected\">\n <i class=\"fa-solid fa-check\"></i>\n Auto-selected (only connection available)\n </span>\n }\n </div>\n\n <!-- Tool Selection -->\n <div class=\"form-group\">\n <label class=\"form-label\">\n <i class=\"fa-solid fa-wrench\"></i>\n Tool\n <span class=\"required\">*</span>\n </label>\n <kendo-dropdownlist\n [data]=\"DisplayTools\"\n [textField]=\"'ToolTitle'\"\n [valueField]=\"'ID'\"\n [valuePrimitive]=\"true\"\n [(ngModel)]=\"ToolID\"\n (valueChange)=\"onToolChange()\"\n [disabled]=\"!ServerID\"\n [filterable]=\"true\"\n (filterChange)=\"onToolFilterChange($event)\"\n placeholder=\"Select a tool...\">\n <ng-template kendoDropDownListValueTemplate let-dataItem>\n {{ dataItem?.ToolTitle || dataItem?.ToolName || 'Select a tool...' }}\n </ng-template>\n <ng-template kendoDropDownListItemTemplate let-dataItem>\n <div class=\"dropdown-item tool-item\">\n <span class=\"item-name\">{{ dataItem.ToolTitle || dataItem.ToolName }}</span>\n @if (dataItem.ToolDescription) {\n <span class=\"item-description\">{{ dataItem.ToolDescription }}</span>\n }\n </div>\n </ng-template>\n </kendo-dropdownlist>\n @if (!ServerID) {\n <span class=\"field-hint\">Select a server first</span>\n }\n </div>\n </div>\n </div>\n\n <!-- Step 2: Configure Parameters -->\n <div class=\"step-content\" *ngIf=\"CurrentStep === 'configure'\">\n <div class=\"tool-header\">\n <div class=\"tool-info\">\n <h3 class=\"tool-name\">\n <i class=\"fa-solid fa-wrench\"></i>\n {{ SelectedTool?.ToolTitle || SelectedTool?.ToolName }}\n </h3>\n @if (SelectedTool?.ToolDescription) {\n <p class=\"tool-description\">{{ SelectedTool?.ToolDescription }}</p>\n }\n </div>\n <div class=\"tool-context\">\n <span class=\"context-item\">\n <i class=\"fa-solid fa-server\"></i>\n {{ SelectedServerName }}\n </span>\n <span class=\"context-item\">\n <i class=\"fa-solid fa-link\"></i>\n {{ SelectedConnectionName }}\n </span>\n </div>\n </div>\n\n @if (ParameterConfigs.length === 0) {\n <div class=\"no-params\">\n <i class=\"fa-solid fa-check-circle\"></i>\n <p>This tool requires no parameters.</p>\n </div>\n } @else {\n <div class=\"parameters-form\">\n <h4 class=\"params-title\">Parameters</h4>\n @for (config of ParameterConfigs; track config.name) {\n <div class=\"param-group\" [class.required]=\"config.required\">\n <label class=\"param-label\">\n {{ config.name }}\n @if (config.required) {\n <span class=\"required\">*</span>\n }\n </label>\n @if (config.description) {\n <p class=\"param-description\">{{ config.description }}</p>\n }\n\n <!-- Enum/Select -->\n @if (config.enumValues.length > 0) {\n <kendo-dropdownlist\n [data]=\"config.enumValues\"\n [valuePrimitive]=\"true\"\n [(ngModel)]=\"ParameterValues[config.name]\"\n (valueChange)=\"onParameterChange(config.name, $event)\">\n </kendo-dropdownlist>\n }\n <!-- Boolean -->\n @else if (config.type === 'boolean') {\n <div class=\"checkbox-wrapper\">\n <input type=\"checkbox\"\n [id]=\"'param-' + config.name\"\n [checked]=\"ParameterValues[config.name]\"\n (change)=\"onParameterChange(config.name, $any($event.target).checked)\">\n <label [for]=\"'param-' + config.name\">Enabled</label>\n </div>\n }\n <!-- Number/Integer -->\n @else if (config.type === 'number' || config.type === 'integer') {\n <kendo-numerictextbox\n [format]=\"config.type === 'integer' ? 'n0' : 'n'\"\n [step]=\"config.type === 'integer' ? 1 : 0.1\"\n [(ngModel)]=\"ParameterValues[config.name]\"\n (valueChange)=\"onParameterChange(config.name, $event)\">\n </kendo-numerictextbox>\n }\n <!-- Array/Object (Textarea with JSON) -->\n @else if (config.type === 'array' || config.type === 'object') {\n <textarea class=\"json-input\"\n rows=\"4\"\n [value]=\"getTextareaValue(config.name)\"\n (input)=\"onTextareaChange(config.name, $any($event.target).value, config)\"\n placeholder=\"Enter JSON {{ config.type }}...\"></textarea>\n <span class=\"field-hint\">Enter valid JSON</span>\n }\n <!-- String (default) -->\n @else {\n @if (isTextarea(config)) {\n <textarea class=\"text-input\"\n rows=\"3\"\n [(ngModel)]=\"ParameterValues[config.name]\"\n (input)=\"onParameterChange(config.name, $any($event.target).value)\"\n [placeholder]=\"config.description || 'Enter value...'\"></textarea>\n } @else {\n <kendo-textbox\n [(ngModel)]=\"ParameterValues[config.name]\"\n (valueChange)=\"onParameterChange(config.name, $event)\"\n [placeholder]=\"config.description || 'Enter value...'\">\n </kendo-textbox>\n }\n }\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Step 3: Results -->\n <div class=\"step-content results-step\" *ngIf=\"CurrentStep === 'results'\">\n <div class=\"results-container\">\n <!-- Success/Error Header -->\n <div class=\"result-header\" [class.success]=\"ExecutionResult?.Success\" [class.error]=\"!ExecutionResult?.Success\">\n @if (ExecutionResult?.Success) {\n <i class=\"fa-solid fa-check-circle\"></i>\n <span class=\"result-status\">Execution Successful</span>\n } @else {\n <i class=\"fa-solid fa-times-circle\"></i>\n <span class=\"result-status\">Execution Failed</span>\n }\n @if (ExecutionResult?.DurationMs) {\n <span class=\"duration\">{{ ExecutionResult?.DurationMs }}ms</span>\n }\n </div>\n\n <!-- Executed Tool Info (moved to top) -->\n <div class=\"execution-info\">\n <div class=\"info-row\">\n <span class=\"info-label\">Tool:</span>\n <span class=\"info-value\">{{ SelectedToolName }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Server:</span>\n <span class=\"info-value\">{{ SelectedServerName }}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Connection:</span>\n <span class=\"info-value\">{{ SelectedConnectionName }}</span>\n </div>\n </div>\n\n <!-- Error Message -->\n @if (ExecutionResult?.ErrorMessage) {\n <div class=\"error-panel\">\n <h4><i class=\"fa-solid fa-exclamation-triangle\"></i> Error</h4>\n <pre class=\"error-message\">{{ ExecutionResult?.ErrorMessage }}</pre>\n </div>\n }\n\n <!-- Result Data (fills remaining space) -->\n @if (ExecutionResult?.Result) {\n <div class=\"result-panel fill-space\">\n <div class=\"result-panel-header\">\n <h4><i class=\"fa-solid fa-code\"></i> Result</h4>\n <button kendoButton fillMode=\"flat\" (click)=\"copyResult()\" title=\"Copy to clipboard\">\n <i class=\"fa-solid fa-copy\"></i>\n </button>\n </div>\n <div class=\"code-editor-container\">\n <mj-code-editor\n [ngModel]=\"FormattedResult\"\n [language]=\"'json'\"\n [readonly]=\"true\">\n </mj-code-editor>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n\n <!-- Panel Actions -->\n <div class=\"panel-actions\">\n @switch (CurrentStep) {\n @case ('select') {\n <button kendoButton themeColor=\"primary\" (click)=\"proceedToConfig()\" [disabled]=\"!CanProceedToConfig\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n Next\n </button>\n <button kendoButton fillMode=\"flat\" (click)=\"closeDialog()\">Cancel</button>\n }\n @case ('configure') {\n <button kendoButton themeColor=\"primary\" (click)=\"executeTool()\" [disabled]=\"!IsValid || IsExecuting\">\n @if (IsExecuting) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Executing...\n } @else {\n <i class=\"fa-solid fa-play\"></i>\n Execute Tool\n }\n </button>\n <button kendoButton fillMode=\"flat\" (click)=\"goBack()\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n Back\n </button>\n }\n @case ('results') {\n <button kendoButton themeColor=\"primary\" (click)=\"runAgain()\">\n <i class=\"fa-solid fa-redo\"></i>\n Run Again\n </button>\n <button kendoButton fillMode=\"flat\" (click)=\"goBack()\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n Edit Parameters\n </button>\n <button kendoButton fillMode=\"flat\" (click)=\"closeDialog()\">Close</button>\n }\n }\n </div>\n</div>\n", styles: ["/* MCP Test Tool Slide-Out Panel Styles */\n\n/* ========================================\n Backdrop\n ======================================== */\n.panel-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.4);\n z-index: 1000;\n animation: fadeIn 0.2s ease-out;\n}\n\n@keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n/* ========================================\n Slide-Out Panel\n ======================================== */\n.slide-out-panel {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n background: white;\n box-shadow: -4px 0 20px rgba(0, 0, 0, 0.15);\n z-index: 1001;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.slide-out-panel.mobile {\n width: 100% !important;\n left: 0;\n}\n\n.slide-out-panel.resizing {\n user-select: none;\n transition: none;\n}\n\n/* ========================================\n Resize Handle\n ======================================== */\n.resize-handle {\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n width: 6px;\n cursor: ew-resize;\n background: transparent;\n z-index: 10;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background 0.15s ease;\n}\n\n.resize-handle:hover,\n.resize-handle.active {\n background: rgba(33, 150, 243, 0.1);\n}\n\n.resize-grip {\n width: 3px;\n height: 40px;\n background: #ccc;\n border-radius: 2px;\n opacity: 0;\n transition: opacity 0.15s ease;\n}\n\n.resize-handle:hover .resize-grip,\n.resize-handle.active .resize-grip {\n opacity: 1;\n background: var(--mj-primary-color, #2196f3);\n}\n\n/* ========================================\n Panel Header\n ======================================== */\n.panel-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n background: white;\n border-bottom: 1px solid #e0e0e0;\n flex-shrink: 0;\n}\n\n.panel-title {\n display: flex;\n align-items: center;\n gap: 10px;\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-color, #333);\n}\n\n.panel-title i {\n color: var(--mj-primary-color, #2196f3);\n}\n\n.close-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n border: none;\n background: transparent;\n border-radius: 50%;\n cursor: pointer;\n color: #666;\n transition: all 0.15s ease;\n}\n\n.close-btn:hover {\n background: #f5f5f5;\n color: #333;\n}\n\n.close-btn i {\n font-size: 18px;\n}\n\n/* ========================================\n Step Indicator\n ======================================== */\n.step-indicator {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 16px 20px;\n background: #fafafa;\n border-bottom: 1px solid #e0e0e0;\n flex-shrink: 0;\n}\n\n.step {\n display: flex;\n align-items: center;\n gap: 8px;\n opacity: 0.5;\n transition: opacity 0.2s ease;\n}\n\n.step.active,\n.step.completed {\n opacity: 1;\n}\n\n.step-number {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n border-radius: 50%;\n background: #e0e0e0;\n color: #666;\n font-weight: 600;\n font-size: 13px;\n transition: all 0.2s ease;\n}\n\n.step.active .step-number {\n background: var(--mj-primary-color, #2196f3);\n color: white;\n}\n\n.step.completed .step-number {\n background: #4caf50;\n color: white;\n}\n\n.step-label {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-color, #333);\n}\n\n.step-connector {\n width: 40px;\n height: 2px;\n background: #e0e0e0;\n margin: 0 10px;\n transition: background 0.2s ease;\n}\n\n.step-connector.completed {\n background: #4caf50;\n}\n\n/* ========================================\n Panel Content\n ======================================== */\n.panel-content {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n display: flex;\n flex-direction: column;\n min-height: 0;\n}\n\n.step-content {\n min-height: 100%;\n}\n\n.step-content.results-step {\n display: flex;\n flex-direction: column;\n height: 100%;\n}\n\n/* ========================================\n Selection Form (Step 1)\n ======================================== */\n.selection-form {\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n\n.form-group {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.form-label {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-color, #333);\n}\n\n.form-label i {\n color: var(--mj-primary-color, #2196f3);\n font-size: 14px;\n}\n\n.required {\n color: #f44336;\n font-weight: 600;\n}\n\n.field-hint {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--mj-text-secondary-color, #666);\n font-style: italic;\n margin-top: 4px;\n}\n\n.field-hint.auto-selected {\n color: #4caf50;\n font-style: normal;\n}\n\n.field-hint.auto-selected i {\n font-size: 11px;\n}\n\n.field-error {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: #f44336;\n margin-top: 4px;\n padding: 8px 10px;\n background: rgba(244, 67, 54, 0.08);\n border-radius: 4px;\n border: 1px solid rgba(244, 67, 54, 0.2);\n}\n\n.field-error i {\n font-size: 13px;\n}\n\n/* Dropdown Item Styling */\n.dropdown-item {\n display: flex;\n flex-direction: column;\n gap: 2px;\n padding: 4px 0;\n}\n\n.dropdown-item.tool-item {\n max-width: 100%;\n}\n\n.item-name {\n font-weight: 500;\n color: var(--mj-text-color, #333);\n}\n\n.item-description {\n font-size: 12px;\n color: var(--mj-text-secondary-color, #666);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 100%;\n}\n\n.item-status {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.item-status.status-active {\n color: #4caf50;\n}\n\n.item-status.status-inactive {\n color: #9e9e9e;\n}\n\n/* ========================================\n Tool Header (Step 2)\n ======================================== */\n.tool-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n padding: 16px;\n background: linear-gradient(135deg, rgba(33, 150, 243, 0.08), rgba(33, 150, 243, 0.02));\n border-radius: 8px;\n margin-bottom: 20px;\n border: 1px solid rgba(33, 150, 243, 0.15);\n}\n\n.tool-info {\n flex: 1;\n min-width: 0;\n}\n\n.tool-name {\n display: flex;\n align-items: center;\n gap: 10px;\n margin: 0 0 8px 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-color, #333);\n}\n\n.tool-name i {\n color: var(--mj-primary-color, #2196f3);\n}\n\n.tool-description {\n margin: 0;\n font-size: 13px;\n color: var(--mj-text-secondary-color, #666);\n line-height: 1.5;\n}\n\n.tool-context {\n display: flex;\n flex-direction: column;\n gap: 6px;\n align-items: flex-end;\n flex-shrink: 0;\n}\n\n.context-item {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--mj-text-secondary-color, #666);\n}\n\n.context-item i {\n font-size: 11px;\n color: #999;\n}\n\n/* ========================================\n Parameters Form (Step 2)\n ======================================== */\n.no-params {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px 20px;\n text-align: center;\n color: var(--mj-text-secondary-color, #666);\n}\n\n.no-params i {\n font-size: 48px;\n color: #4caf50;\n margin-bottom: 16px;\n}\n\n.no-params p {\n margin: 0;\n font-size: 15px;\n}\n\n.params-title {\n margin: 0 0 16px 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-secondary-color, #666);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.parameters-form {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.param-group {\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding: 12px;\n background: #fafafa;\n border-radius: 6px;\n border: 1px solid #e8e8e8;\n}\n\n.param-group.required {\n border-left: 3px solid var(--mj-primary-color, #2196f3);\n}\n\n.param-label {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-color, #333);\n}\n\n.param-description {\n margin: 0;\n font-size: 12px;\n color: var(--mj-text-secondary-color, #666);\n line-height: 1.4;\n}\n\n.checkbox-wrapper {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 4px 0;\n}\n\n.checkbox-wrapper input[type=\"checkbox\"] {\n width: 18px;\n height: 18px;\n cursor: pointer;\n}\n\n.checkbox-wrapper label {\n font-size: 14px;\n color: var(--mj-text-color, #333);\n cursor: pointer;\n}\n\n.json-input,\n.text-input {\n width: 100%;\n padding: 10px 12px;\n font-family: 'Consolas', 'Monaco', monospace;\n font-size: 13px;\n line-height: 1.5;\n border: 1px solid #ddd;\n border-radius: 4px;\n background: white;\n resize: vertical;\n box-sizing: border-box;\n}\n\n.json-input:focus,\n.text-input:focus {\n outline: none;\n border-color: var(--mj-primary-color, #2196f3);\n box-shadow: 0 0 0 2px rgba(33, 150, 243, 0.1);\n}\n\n/* ========================================\n Results (Step 3)\n ======================================== */\n.results-container {\n display: flex;\n flex-direction: column;\n gap: 16px;\n flex: 1;\n min-height: 0;\n}\n\n.result-header {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 16px;\n border-radius: 8px;\n font-weight: 600;\n}\n\n.result-header.success {\n background: rgba(76, 175, 80, 0.1);\n color: #388e3c;\n}\n\n.result-header.success i {\n font-size: 24px;\n color: #4caf50;\n}\n\n.result-header.error {\n background: rgba(244, 67, 54, 0.1);\n color: #c62828;\n}\n\n.result-header.error i {\n font-size: 24px;\n color: #f44336;\n}\n\n.result-status {\n flex: 1;\n font-size: 16px;\n}\n\n.duration {\n font-size: 13px;\n font-weight: normal;\n color: var(--mj-text-secondary-color, #666);\n background: rgba(0, 0, 0, 0.05);\n padding: 4px 8px;\n border-radius: 4px;\n}\n\n.error-panel {\n background: #fff5f5;\n border: 1px solid rgba(244, 67, 54, 0.2);\n border-radius: 8px;\n padding: 16px;\n}\n\n.error-panel h4 {\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 0 0 12px 0;\n font-size: 14px;\n color: #c62828;\n}\n\n.error-message {\n margin: 0;\n padding: 12px;\n background: white;\n border-radius: 4px;\n font-family: monospace;\n font-size: 13px;\n line-height: 1.5;\n color: #c62828;\n white-space: pre-wrap;\n word-break: break-word;\n}\n\n.result-panel {\n background: white;\n border: 1px solid #e0e0e0;\n border-radius: 8px;\n overflow: hidden;\n}\n\n.result-panel.fill-space {\n flex: 1;\n display: flex;\n flex-direction: column;\n min-height: 200px;\n}\n\n.result-panel-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 16px;\n background: #fafafa;\n border-bottom: 1px solid #e0e0e0;\n}\n\n.result-panel-header h4 {\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 0;\n font-size: 14px;\n color: var(--mj-text-color, #333);\n}\n\n.code-editor-container {\n height: 300px;\n min-height: 200px;\n max-height: 400px;\n overflow: hidden;\n}\n\n.result-panel.fill-space .code-editor-container {\n flex: 1;\n height: auto;\n max-height: none;\n}\n\n.code-editor-container mj-code-editor {\n width: 100%;\n height: 100%;\n}\n\n.execution-info {\n padding: 16px;\n background: #fafafa;\n border-radius: 8px;\n border: 1px solid #e8e8e8;\n}\n\n.info-row {\n display: flex;\n justify-content: space-between;\n padding: 6px 0;\n font-size: 13px;\n}\n\n.info-row:not(:last-child) {\n border-bottom: 1px solid #e8e8e8;\n}\n\n.info-label {\n color: var(--mj-text-secondary-color, #666);\n}\n\n.info-value {\n font-weight: 500;\n color: var(--mj-text-color, #333);\n}\n\n/* ========================================\n Panel Actions\n ======================================== */\n.panel-actions {\n display: flex;\n gap: 8px;\n padding: 16px 20px;\n background: white;\n border-top: 1px solid #e0e0e0;\n flex-shrink: 0;\n}\n\n.panel-actions button {\n min-width: 100px;\n}\n\n.panel-actions button i {\n margin-right: 6px;\n}\n\n/* ========================================\n Responsive / Mobile\n ======================================== */\n@media (max-width: 768px) {\n .slide-out-panel {\n width: 100% !important;\n left: 0;\n }\n\n .resize-handle {\n display: none;\n }\n\n .step-indicator {\n padding: 12px 16px;\n }\n\n .step-connector {\n width: 20px;\n margin: 0 6px;\n }\n\n .step-label {\n display: none;\n }\n\n .panel-content {\n padding: 16px;\n }\n\n .tool-header {\n flex-direction: column;\n gap: 12px;\n }\n\n .tool-context {\n align-items: flex-start;\n flex-direction: row;\n flex-wrap: wrap;\n gap: 12px;\n }\n\n .panel-actions {\n flex-wrap: wrap;\n }\n\n .panel-actions button {\n flex: 1;\n min-width: 80px;\n }\n}\n\n@media (max-width: 480px) {\n .panel-header {\n padding: 12px 16px;\n }\n\n .panel-title {\n font-size: 16px;\n }\n\n .step-number {\n width: 24px;\n height: 24px;\n font-size: 12px;\n }\n\n .tool-name {\n font-size: 16px;\n }\n}\n"] }]
|
|
1267
|
+
}], () => [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }], { Visible: [{
|
|
1268
|
+
type: Input
|
|
1269
|
+
}], Servers: [{
|
|
1270
|
+
type: Input
|
|
1271
|
+
}], Connections: [{
|
|
1272
|
+
type: Input
|
|
1273
|
+
}], Tools: [{
|
|
1274
|
+
type: Input
|
|
1275
|
+
}], SelectedServerID: [{
|
|
1276
|
+
type: Input
|
|
1277
|
+
}], SelectedConnectionID: [{
|
|
1278
|
+
type: Input
|
|
1279
|
+
}], SelectedToolID: [{
|
|
1280
|
+
type: Input
|
|
1281
|
+
}], Close: [{
|
|
1282
|
+
type: Output
|
|
1283
|
+
}], onMouseMove: [{
|
|
1284
|
+
type: HostListener,
|
|
1285
|
+
args: ['document:mousemove', ['$event']]
|
|
1286
|
+
}], onMouseUp: [{
|
|
1287
|
+
type: HostListener,
|
|
1288
|
+
args: ['document:mouseup']
|
|
1289
|
+
}], onWindowResize: [{
|
|
1290
|
+
type: HostListener,
|
|
1291
|
+
args: ['window:resize']
|
|
1292
|
+
}] }); })();
|
|
1293
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MCPTestToolDialogComponent, { className: "MCPTestToolDialogComponent", filePath: "src/MCP/components/mcp-test-tool-dialog.component.ts", lineNumber: 138 }); })();
|
|
1294
|
+
/**
|
|
1295
|
+
* Tree-shaking prevention function
|
|
1296
|
+
*/
|
|
1297
|
+
export function LoadMCPTestToolDialog() {
|
|
1298
|
+
// Ensures the component is not tree-shaken
|
|
1299
|
+
}
|
|
1300
|
+
//# sourceMappingURL=mcp-test-tool-dialog.component.js.map
|