@memberjunction/ng-dashboards 5.4.0 → 5.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/dist/AI/components/agents/agent-configuration.component.js +4 -4
  2. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  3. package/dist/AI/components/agents/agent-editor.component.d.ts.map +1 -1
  4. package/dist/AI/components/agents/agent-editor.component.js +5 -4
  5. package/dist/AI/components/agents/agent-editor.component.js.map +1 -1
  6. package/dist/AI/components/models/model-management.component.js +3 -3
  7. package/dist/AI/components/models/model-management.component.js.map +1 -1
  8. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts.map +1 -1
  9. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +8 -7
  10. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
  11. package/dist/AI/components/prompts/prompt-management.component.js +3 -3
  12. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  13. package/dist/AI/components/system/system-configuration.component.js +4 -4
  14. package/dist/AI/components/system/system-configuration.component.js.map +1 -1
  15. package/dist/APIKeys/api-applications-panel.component.d.ts.map +1 -1
  16. package/dist/APIKeys/api-applications-panel.component.js +3 -2
  17. package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
  18. package/dist/APIKeys/api-keys-resource.component.js +2 -2
  19. package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
  20. package/dist/APIKeys/api-scopes-panel.component.d.ts.map +1 -1
  21. package/dist/APIKeys/api-scopes-panel.component.js +4 -3
  22. package/dist/APIKeys/api-scopes-panel.component.js.map +1 -1
  23. package/dist/Actions/components/actions-overview.component.js +3 -3
  24. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  25. package/dist/Actions/components/categories-list-view.component.d.ts.map +1 -1
  26. package/dist/Actions/components/categories-list-view.component.js +3 -2
  27. package/dist/Actions/components/categories-list-view.component.js.map +1 -1
  28. package/dist/Actions/components/execution-monitoring.component.js +2 -2
  29. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  30. package/dist/Actions/components/explorer/action-explorer.component.js +2 -2
  31. package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
  32. package/dist/Actions/components/explorer/new-action-panel.component.d.ts.map +1 -1
  33. package/dist/Actions/components/explorer/new-action-panel.component.js +3 -2
  34. package/dist/Actions/components/explorer/new-action-panel.component.js.map +1 -1
  35. package/dist/Actions/components/explorer/new-category-panel.component.d.ts.map +1 -1
  36. package/dist/Actions/components/explorer/new-category-panel.component.js +3 -2
  37. package/dist/Actions/components/explorer/new-category-panel.component.js.map +1 -1
  38. package/dist/Communication/communication-templates-resource.component.js +2 -2
  39. package/dist/Communication/communication-templates-resource.component.js.map +1 -1
  40. package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts +6 -0
  41. package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts.map +1 -1
  42. package/dist/ComponentStudio/components/artifact-load-dialog.component.js +19 -6
  43. package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
  44. package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts +4 -0
  45. package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
  46. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +13 -4
  47. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
  48. package/dist/Credentials/components/credentials-categories-resource.component.d.ts +2 -0
  49. package/dist/Credentials/components/credentials-categories-resource.component.d.ts.map +1 -1
  50. package/dist/Credentials/components/credentials-categories-resource.component.js +13 -9
  51. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  52. package/dist/Credentials/components/credentials-list-resource.component.js +11 -11
  53. package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
  54. package/dist/Credentials/components/credentials-overview-resource.component.js +3 -3
  55. package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
  56. package/dist/Credentials/components/credentials-types-resource.component.d.ts +2 -0
  57. package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
  58. package/dist/Credentials/components/credentials-types-resource.component.js +13 -9
  59. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  60. package/dist/DashboardBrowser/dashboard-browser-resource.component.js +11 -11
  61. package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
  62. package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts.map +1 -1
  63. package/dist/DashboardBrowser/dashboard-share-dialog.component.js +4 -3
  64. package/dist/DashboardBrowser/dashboard-share-dialog.component.js.map +1 -1
  65. package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts.map +1 -1
  66. package/dist/DataExplorer/components/view-selector/view-selector.component.js +4 -3
  67. package/dist/DataExplorer/components/view-selector/view-selector.component.js.map +1 -1
  68. package/dist/DataExplorer/data-explorer-dashboard.component.js +6 -6
  69. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  70. package/dist/DataExplorer/data-explorer-resource.component.d.ts.map +1 -1
  71. package/dist/DataExplorer/data-explorer-resource.component.js +4 -1
  72. package/dist/DataExplorer/data-explorer-resource.component.js.map +1 -1
  73. package/dist/DataExplorer/services/explorer-state.service.d.ts.map +1 -1
  74. package/dist/DataExplorer/services/explorer-state.service.js +9 -8
  75. package/dist/DataExplorer/services/explorer-state.service.js.map +1 -1
  76. package/dist/EntityAdmin/entity-admin-dashboard.component.js +2 -2
  77. package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
  78. package/dist/Home/home-application.js +2 -2
  79. package/dist/Home/home-application.js.map +1 -1
  80. package/dist/Lists/components/lists-browse-resource.component.js +3 -3
  81. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  82. package/dist/Lists/components/lists-categories-resource.component.d.ts +1 -0
  83. package/dist/Lists/components/lists-categories-resource.component.d.ts.map +1 -1
  84. package/dist/Lists/components/lists-categories-resource.component.js +17 -14
  85. package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
  86. package/dist/Lists/components/lists-my-lists-resource.component.js +2 -2
  87. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  88. package/dist/Lists/components/lists-operations-resource.component.d.ts +1 -0
  89. package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
  90. package/dist/Lists/components/lists-operations-resource.component.js +15 -12
  91. package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
  92. package/dist/MCP/components/mcp-connection-dialog.component.d.ts.map +1 -1
  93. package/dist/MCP/components/mcp-connection-dialog.component.js +3 -2
  94. package/dist/MCP/components/mcp-connection-dialog.component.js.map +1 -1
  95. package/dist/MCP/components/mcp-test-tool-dialog.component.d.ts.map +1 -1
  96. package/dist/MCP/components/mcp-test-tool-dialog.component.js +8 -7
  97. package/dist/MCP/components/mcp-test-tool-dialog.component.js.map +1 -1
  98. package/dist/MCP/mcp-dashboard.component.js +22 -22
  99. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  100. package/dist/QueryBrowser/query-browser-resource.component.d.ts +2 -0
  101. package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
  102. package/dist/QueryBrowser/query-browser-resource.component.js +14 -10
  103. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  104. package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts.map +1 -1
  105. package/dist/Scheduling/services/scheduling-instrumentation.service.js +2 -1
  106. package/dist/Scheduling/services/scheduling-instrumentation.service.js.map +1 -1
  107. package/dist/Testing/components/testing-explorer.component.d.ts +1 -0
  108. package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
  109. package/dist/Testing/components/testing-explorer.component.js +22 -18
  110. package/dist/Testing/components/testing-explorer.component.js.map +1 -1
  111. package/dist/Testing/components/testing-review.component.d.ts +1 -0
  112. package/dist/Testing/components/testing-review.component.d.ts.map +1 -1
  113. package/dist/Testing/components/testing-review.component.js +14 -10
  114. package/dist/Testing/components/testing-review.component.js.map +1 -1
  115. package/dist/VersionHistory/components/diff-resource.component.js +6 -6
  116. package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
  117. package/dist/VersionHistory/components/graph-resource.component.js +2 -2
  118. package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
  119. package/dist/VersionHistory/components/labels-resource.component.js +3 -3
  120. package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
  121. package/package.json +38 -38
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-connection-dialog.component.js","sourceRoot":"","sources":["../../../src/MCP/components/mcp-connection-dialog.component.ts","../../../src/MCP/components/mcp-connection-dialog.component.html"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview MCP Connection Dialog Component\n *\n * Dialog for creating and editing MCP server connections.\n */\n\nimport { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges, ChangeDetectorRef, ViewChild } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { Metadata, RunView, CompositeKey } from '@memberjunction/core';\nimport { MJMCPServerConnectionEntity, MJCredentialTypeEntity } from '@memberjunction/core-entities';\nimport { MCPConnectionData, MCPServerData } from '../mcp-dashboard.component';\nimport { CredentialDialogComponent, CredentialDialogResult } from '@memberjunction/ng-credentials';\n\n/**\n * Dialog result interface\n */\nexport interface ConnectionDialogResult {\n saved: boolean;\n connection?: MCPConnectionData;\n}\n\n/**\n * MCP Connection Dialog Component\n */\n@Component({\n standalone: false,\n selector: 'mj-mcp-connection-dialog',\n templateUrl: './mcp-connection-dialog.component.html',\n styleUrls: ['./mcp-connection-dialog.component.css']\n})\nexport class MCPConnectionDialogComponent implements OnInit, OnChanges {\n\n @ViewChild('credentialDialog') credentialDialog!: CredentialDialogComponent;\n\n @Input() connection: MCPConnectionData | null = null;\n @Input() servers: MCPServerData[] = [];\n @Input() visible = false;\n @Output() close = new EventEmitter<ConnectionDialogResult>();\n\n public connectionForm: FormGroup;\n public credentials: Array<{ ID: string; Name: string }> = [];\n public companies: Array<{ ID: string; Name: string }> = [];\n public credentialTypes: MJCredentialTypeEntity[] = [];\n public IsSaving = false;\n public IsLoadingDropdowns = false;\n public ErrorMessage: string | null = null;\n public ShowCredentialDialog = false;\n\n public get IsEditMode(): boolean {\n return !!this.connection?.ID;\n }\n\n public get DialogTitle(): string {\n return this.IsEditMode ? 'Edit Connection' : 'Add Connection';\n }\n\n public get ActiveServers(): MCPServerData[] {\n return this.servers.filter(s => s.Status === 'Active');\n }\n\n constructor(\n private fb: FormBuilder,\n private cdr: ChangeDetectorRef\n ) {\n this.connectionForm = this.createForm();\n }\n\n ngOnInit(): void {\n this.loadDropdownData();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['connection'] || changes['visible']) {\n if (this.visible) {\n this.initializeForm();\n }\n }\n }\n\n private createForm(): FormGroup {\n return this.fb.group({\n MCPServerID: ['', Validators.required],\n Name: ['', [Validators.required, Validators.maxLength(200)]],\n Description: ['', Validators.maxLength(2000)],\n CompanyID: [''],\n CredentialID: [''],\n AutoSyncTools: [true],\n LogToolCalls: [true],\n LogInputParameters: [true],\n LogOutputContent: [true],\n MaxOutputLogSize: [102400, [Validators.min(0), Validators.max(10485760)]],\n CustomHeaderName: [''],\n EnvironmentVars: [''],\n Status: ['Active']\n });\n }\n\n private initializeForm(): void {\n if (this.connection) {\n this.connectionForm.patchValue({\n MCPServerID: this.connection.MCPServerID,\n Name: this.connection.Name,\n Description: this.connection.Description ?? '',\n CompanyID: this.connection.CompanyID ?? '',\n CredentialID: '', // Would need to load from entity\n AutoSyncTools: this.connection.AutoSyncTools,\n LogToolCalls: this.connection.LogToolCalls,\n LogInputParameters: true,\n LogOutputContent: true,\n MaxOutputLogSize: 102400,\n CustomHeaderName: '',\n EnvironmentVars: '',\n Status: this.connection.Status\n });\n } else {\n this.connectionForm.reset({\n MCPServerID: '',\n Name: '',\n Description: '',\n CompanyID: '',\n CredentialID: '',\n AutoSyncTools: true,\n LogToolCalls: true,\n LogInputParameters: true,\n LogOutputContent: true,\n MaxOutputLogSize: 102400,\n CustomHeaderName: '',\n EnvironmentVars: '',\n Status: 'Active'\n });\n }\n this.ErrorMessage = null;\n this.cdr.detectChanges();\n }\n\n private async loadDropdownData(): Promise<void> {\n this.IsLoadingDropdowns = true;\n try {\n const rv = new RunView();\n // Load credentials, credential types, and companies in parallel\n const [credResult, typeResult, companyResult] = await rv.RunViews([\n {\n EntityName: 'MJ: Credentials',\n Fields: ['ID', 'Name'],\n OrderBy: 'Name',\n ResultType: 'simple'\n },\n {\n EntityName: 'MJ: Credential Types',\n OrderBy: 'Category, Name',\n ResultType: 'entity_object'\n },\n {\n EntityName: 'MJ: Companies',\n Fields: ['ID', 'Name'],\n OrderBy: 'Name',\n ResultType: 'simple'\n }\n ]);\n\n if (credResult.Success) {\n this.credentials = credResult.Results as Array<{ ID: string; Name: string }> || [];\n }\n if (typeResult.Success) {\n this.credentialTypes = typeResult.Results as MJCredentialTypeEntity[] || [];\n }\n if (companyResult.Success) {\n this.companies = companyResult.Results as Array<{ ID: string; Name: string }> || [];\n }\n } catch (error) {\n console.error('Failed to load dropdown data:', error);\n } finally {\n this.IsLoadingDropdowns = false;\n this.cdr.detectChanges();\n }\n }\n\n /**\n * Opens the credential creation dialog\n */\n public openCredentialDialog(): void {\n this.ShowCredentialDialog = true;\n this.cdr.detectChanges();\n }\n\n /**\n * Handles the credential dialog close event\n */\n public onCredentialDialogClose(result: CredentialDialogResult): void {\n this.ShowCredentialDialog = false;\n\n if (result.success && result.credential) {\n // Add the new credential to the list and select it\n this.credentials.push({\n ID: result.credential.ID,\n Name: result.credential.Name\n });\n // Sort credentials by name\n this.credentials.sort((a, b) => a.Name.localeCompare(b.Name));\n // Select the new credential\n this.connectionForm.patchValue({\n CredentialID: result.credential.ID\n });\n }\n\n this.cdr.detectChanges();\n }\n\n public onServerChange(): void {\n const serverId = this.connectionForm.get('MCPServerID')?.value;\n const server = this.servers.find(s => s.ID === serverId);\n if (server && !this.connectionForm.get('Name')?.value) {\n // Auto-fill name based on server\n this.connectionForm.patchValue({\n Name: `${server.Name} Connection`\n });\n }\n }\n\n public async save(): Promise<void> {\n if (this.connectionForm.invalid) {\n this.connectionForm.markAllAsTouched();\n return;\n }\n\n this.IsSaving = true;\n this.ErrorMessage = null;\n this.cdr.detectChanges();\n\n try {\n const md = new Metadata();\n const entity = await md.GetEntityObject<MJMCPServerConnectionEntity>('MJ: MCP Server Connections');\n\n if (this.IsEditMode && this.connection) {\n await entity.InnerLoad(new CompositeKey([{ FieldName: 'ID', Value: this.connection.ID }]));\n } else {\n entity.NewRecord();\n }\n\n // Apply form values\n const formValue = this.connectionForm.value;\n entity.MCPServerID = formValue.MCPServerID;\n entity.Name = formValue.Name;\n entity.Description = formValue.Description || null;\n entity.CompanyID = formValue.CompanyID || null;\n entity.CredentialID = formValue.CredentialID || null;\n entity.AutoSyncTools = formValue.AutoSyncTools;\n entity.LogToolCalls = formValue.LogToolCalls;\n entity.LogInputParameters = formValue.LogInputParameters;\n entity.LogOutputContent = formValue.LogOutputContent;\n entity.MaxOutputLogSize = formValue.MaxOutputLogSize || 102400;\n entity.CustomHeaderName = formValue.CustomHeaderName || null;\n entity.EnvironmentVars = formValue.EnvironmentVars || null;\n entity.Status = formValue.Status;\n\n const saved = await entity.Save();\n if (!saved) {\n // Use CompleteMessage for full error details, fall back to Message\n const errorMessage = entity.LatestResult?.CompleteMessage || entity.LatestResult?.Message || 'Unknown error';\n console.error('MCP Connection save failed:', errorMessage, entity.LatestResult);\n throw new Error(errorMessage);\n }\n\n this.close.emit({ saved: true });\n\n } catch (error) {\n const errorMsg = error instanceof Error ? error.message : String(error);\n this.ErrorMessage = `Failed to save: ${errorMsg}`;\n console.error('MCP Connection save error:', errorMsg);\n this.cdr.detectChanges();\n } finally {\n this.IsSaving = false;\n this.cdr.detectChanges();\n }\n }\n\n public cancel(): void {\n this.close.emit({ saved: false });\n }\n\n public hasError(controlName: string, errorType: string): boolean {\n const control = this.connectionForm.get(controlName);\n return control?.hasError(errorType) && control?.touched || false;\n }\n}\n","@if (visible) {\n <kendo-dialog\n [title]=\"DialogTitle\"\n (close)=\"cancel()\"\n [width]=\"600\"\n [minWidth]=\"400\">\n <form [formGroup]=\"connectionForm\" class=\"connection-form\">\n <!-- Error Message -->\n @if (ErrorMessage) {\n <div class=\"error-banner\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n {{ ErrorMessage }}\n </div>\n }\n <!-- Basic Info Section -->\n <div class=\"form-section\">\n <h3><i class=\"fa-solid fa-info-circle\"></i> Basic Information</h3>\n <div class=\"form-group\">\n <label for=\"server\">MCP Server <span class=\"required\">*</span></label>\n <kendo-dropdownlist\n id=\"server\"\n formControlName=\"MCPServerID\"\n [data]=\"ActiveServers\"\n textField=\"Name\"\n valueField=\"ID\"\n [valuePrimitive]=\"true\"\n [defaultItem]=\"{ Name: 'Select a server...', ID: '' }\"\n (valueChange)=\"onServerChange()\">\n <ng-template kendoDropDownListItemTemplate let-dataItem>\n <div class=\"server-option\">\n <span class=\"server-name\">{{ dataItem.Name }}</span>\n @if (dataItem.TransportType) {\n <span class=\"server-transport\">{{ dataItem.TransportType }}</span>\n }\n </div>\n </ng-template>\n </kendo-dropdownlist>\n @if (hasError('MCPServerID', 'required')) {\n <span class=\"error-text\">Server selection is required</span>\n }\n </div>\n <div class=\"form-group\">\n <label for=\"name\">Connection Name <span class=\"required\">*</span></label>\n <input kendoTextBox\n id=\"name\"\n formControlName=\"Name\"\n placeholder=\"e.g., Production GitHub Connection\" />\n @if (hasError('Name', 'required')) {\n <span class=\"error-text\">Name is required</span>\n }\n </div>\n <div class=\"form-group\">\n <label for=\"description\">Description</label>\n <textarea kendoTextArea\n id=\"description\"\n formControlName=\"Description\"\n placeholder=\"Optional description of this connection\"\n [rows]=\"3\"></textarea>\n </div>\n <div class=\"form-group\">\n <label for=\"status\">Status</label>\n <kendo-dropdownlist\n id=\"status\"\n formControlName=\"Status\"\n [data]=\"['Active', 'Inactive']\"\n [valuePrimitive]=\"true\">\n </kendo-dropdownlist>\n </div>\n <div class=\"form-group\">\n <label for=\"company\">Company</label>\n <kendo-dropdownlist\n id=\"company\"\n formControlName=\"CompanyID\"\n [data]=\"companies\"\n textField=\"Name\"\n valueField=\"ID\"\n [valuePrimitive]=\"true\"\n [defaultItem]=\"{ Name: 'Global (all companies)', ID: '' }\">\n </kendo-dropdownlist>\n <span class=\"hint\">Leave as Global to make this connection available to all companies</span>\n </div>\n </div>\n <!-- Authentication Section -->\n <div class=\"form-section\">\n <h3><i class=\"fa-solid fa-key\"></i> Authentication</h3>\n <div class=\"form-group\">\n <label for=\"credential\">Credential</label>\n @if (IsLoadingDropdowns) {\n <div class=\"loading-credentials\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Loading credentials...\n </div>\n } @else {\n <div class=\"credential-row\">\n <kendo-dropdownlist\n id=\"credential\"\n formControlName=\"CredentialID\"\n [data]=\"credentials\"\n textField=\"Name\"\n valueField=\"ID\"\n [valuePrimitive]=\"true\"\n [defaultItem]=\"{ Name: 'No credential (anonymous)', ID: '' }\">\n </kendo-dropdownlist>\n <button kendoButton\n type=\"button\"\n fillMode=\"outline\"\n (click)=\"openCredentialDialog()\"\n title=\"Create New Credential\">\n <i class=\"fa-solid fa-plus\"></i>\n New\n </button>\n </div>\n <span class=\"hint\">Select an existing credential or create a new one</span>\n }\n </div>\n <div class=\"form-group\">\n <label for=\"customHeader\">Custom Header Name</label>\n <input kendoTextBox\n id=\"customHeader\"\n formControlName=\"CustomHeaderName\"\n placeholder=\"e.g., X-Custom-API-Key\" />\n <span class=\"hint\">Override the default header name for API key authentication</span>\n </div>\n </div>\n <!-- Behavior Section -->\n <div class=\"form-section\">\n <h3><i class=\"fa-solid fa-sliders\"></i> Behavior</h3>\n <div class=\"checkbox-group\">\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" kendoCheckBox formControlName=\"AutoSyncTools\" />\n <span>Auto-sync tools on connect</span>\n </label>\n <span class=\"hint\">Automatically discover and sync available tools when connecting</span>\n </div>\n </div>\n <!-- Logging Section -->\n <div class=\"form-section\">\n <h3><i class=\"fa-solid fa-file-lines\"></i> Logging</h3>\n <div class=\"checkbox-group\">\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" kendoCheckBox formControlName=\"LogToolCalls\" />\n <span>Enable tool call logging</span>\n </label>\n <span class=\"hint\">Log all tool executions to the database</span>\n </div>\n <div class=\"logging-options\" [class.disabled]=\"!connectionForm.get('LogToolCalls')?.value\">\n <div class=\"checkbox-group\">\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" kendoCheckBox formControlName=\"LogInputParameters\" />\n <span>Log input parameters</span>\n </label>\n </div>\n <div class=\"checkbox-group\">\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" kendoCheckBox formControlName=\"LogOutputContent\" />\n <span>Log output content</span>\n </label>\n </div>\n <div class=\"form-group\">\n <label for=\"maxOutputSize\">Max Output Log Size (bytes)</label>\n <kendo-numerictextbox\n id=\"maxOutputSize\"\n formControlName=\"MaxOutputLogSize\"\n [min]=\"0\"\n [max]=\"10485760\"\n [step]=\"10240\"\n [format]=\"'n0'\">\n </kendo-numerictextbox>\n <span class=\"hint\">Maximum size of output content to log (0 = unlimited, max 10MB)</span>\n </div>\n </div>\n </div>\n <!-- Advanced Section -->\n <div class=\"form-section\">\n <h3><i class=\"fa-solid fa-gear\"></i> Advanced</h3>\n <div class=\"form-group\">\n <label for=\"envVars\">Environment Variables (JSON)</label>\n <textarea kendoTextArea\n id=\"envVars\"\n formControlName=\"EnvironmentVars\"\n placeholder='{\"VAR_NAME\": \"value\"}'\n [rows]=\"3\"></textarea>\n <span class=\"hint\">Additional environment variables for Stdio transport (JSON object)</span>\n </div>\n </div>\n </form>\n <kendo-dialog-actions>\n <button kendoButton (click)=\"save()\" themeColor=\"primary\" [disabled]=\"IsSaving\">\n @if (IsSaving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n }\n {{ IsEditMode ? 'Update' : 'Create' }}\n </button>\n <button kendoButton (click)=\"cancel()\">Cancel</button>\n </kendo-dialog-actions>\n </kendo-dialog>\n}\n\n<!-- Credential Creation Dialog -->\n@if (ShowCredentialDialog) {\n <mj-credential-dialog\n #credentialDialog\n [Visible]=\"ShowCredentialDialog\"\n (close)=\"onCredentialDialogClose($event)\">\n </mj-credential-dialog>\n}\n"]}
1
+ {"version":3,"file":"mcp-connection-dialog.component.js","sourceRoot":"","sources":["../../../src/MCP/components/mcp-connection-dialog.component.ts","../../../src/MCP/components/mcp-connection-dialog.component.html"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview MCP Connection Dialog Component\n *\n * Dialog for creating and editing MCP server connections.\n */\n\nimport { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges, ChangeDetectorRef, ViewChild } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { Metadata, RunView, CompositeKey } from '@memberjunction/core';\nimport { MJMCPServerConnectionEntity, MJCredentialTypeEntity } from '@memberjunction/core-entities';\nimport { MCPConnectionData, MCPServerData } from '../mcp-dashboard.component';\nimport { CredentialDialogComponent, CredentialDialogResult } from '@memberjunction/ng-credentials';\nimport { UUIDsEqual } from '@memberjunction/global';\n\n/**\n * Dialog result interface\n */\nexport interface ConnectionDialogResult {\n saved: boolean;\n connection?: MCPConnectionData;\n}\n\n/**\n * MCP Connection Dialog Component\n */\n@Component({\n standalone: false,\n selector: 'mj-mcp-connection-dialog',\n templateUrl: './mcp-connection-dialog.component.html',\n styleUrls: ['./mcp-connection-dialog.component.css']\n})\nexport class MCPConnectionDialogComponent implements OnInit, OnChanges {\n\n @ViewChild('credentialDialog') credentialDialog!: CredentialDialogComponent;\n\n @Input() connection: MCPConnectionData | null = null;\n @Input() servers: MCPServerData[] = [];\n @Input() visible = false;\n @Output() close = new EventEmitter<ConnectionDialogResult>();\n\n public connectionForm: FormGroup;\n public credentials: Array<{ ID: string; Name: string }> = [];\n public companies: Array<{ ID: string; Name: string }> = [];\n public credentialTypes: MJCredentialTypeEntity[] = [];\n public IsSaving = false;\n public IsLoadingDropdowns = false;\n public ErrorMessage: string | null = null;\n public ShowCredentialDialog = false;\n\n public get IsEditMode(): boolean {\n return !!this.connection?.ID;\n }\n\n public get DialogTitle(): string {\n return this.IsEditMode ? 'Edit Connection' : 'Add Connection';\n }\n\n public get ActiveServers(): MCPServerData[] {\n return this.servers.filter(s => s.Status === 'Active');\n }\n\n constructor(\n private fb: FormBuilder,\n private cdr: ChangeDetectorRef\n ) {\n this.connectionForm = this.createForm();\n }\n\n ngOnInit(): void {\n this.loadDropdownData();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['connection'] || changes['visible']) {\n if (this.visible) {\n this.initializeForm();\n }\n }\n }\n\n private createForm(): FormGroup {\n return this.fb.group({\n MCPServerID: ['', Validators.required],\n Name: ['', [Validators.required, Validators.maxLength(200)]],\n Description: ['', Validators.maxLength(2000)],\n CompanyID: [''],\n CredentialID: [''],\n AutoSyncTools: [true],\n LogToolCalls: [true],\n LogInputParameters: [true],\n LogOutputContent: [true],\n MaxOutputLogSize: [102400, [Validators.min(0), Validators.max(10485760)]],\n CustomHeaderName: [''],\n EnvironmentVars: [''],\n Status: ['Active']\n });\n }\n\n private initializeForm(): void {\n if (this.connection) {\n this.connectionForm.patchValue({\n MCPServerID: this.connection.MCPServerID,\n Name: this.connection.Name,\n Description: this.connection.Description ?? '',\n CompanyID: this.connection.CompanyID ?? '',\n CredentialID: '', // Would need to load from entity\n AutoSyncTools: this.connection.AutoSyncTools,\n LogToolCalls: this.connection.LogToolCalls,\n LogInputParameters: true,\n LogOutputContent: true,\n MaxOutputLogSize: 102400,\n CustomHeaderName: '',\n EnvironmentVars: '',\n Status: this.connection.Status\n });\n } else {\n this.connectionForm.reset({\n MCPServerID: '',\n Name: '',\n Description: '',\n CompanyID: '',\n CredentialID: '',\n AutoSyncTools: true,\n LogToolCalls: true,\n LogInputParameters: true,\n LogOutputContent: true,\n MaxOutputLogSize: 102400,\n CustomHeaderName: '',\n EnvironmentVars: '',\n Status: 'Active'\n });\n }\n this.ErrorMessage = null;\n this.cdr.detectChanges();\n }\n\n private async loadDropdownData(): Promise<void> {\n this.IsLoadingDropdowns = true;\n try {\n const rv = new RunView();\n // Load credentials, credential types, and companies in parallel\n const [credResult, typeResult, companyResult] = await rv.RunViews([\n {\n EntityName: 'MJ: Credentials',\n Fields: ['ID', 'Name'],\n OrderBy: 'Name',\n ResultType: 'simple'\n },\n {\n EntityName: 'MJ: Credential Types',\n OrderBy: 'Category, Name',\n ResultType: 'entity_object'\n },\n {\n EntityName: 'MJ: Companies',\n Fields: ['ID', 'Name'],\n OrderBy: 'Name',\n ResultType: 'simple'\n }\n ]);\n\n if (credResult.Success) {\n this.credentials = credResult.Results as Array<{ ID: string; Name: string }> || [];\n }\n if (typeResult.Success) {\n this.credentialTypes = typeResult.Results as MJCredentialTypeEntity[] || [];\n }\n if (companyResult.Success) {\n this.companies = companyResult.Results as Array<{ ID: string; Name: string }> || [];\n }\n } catch (error) {\n console.error('Failed to load dropdown data:', error);\n } finally {\n this.IsLoadingDropdowns = false;\n this.cdr.detectChanges();\n }\n }\n\n /**\n * Opens the credential creation dialog\n */\n public openCredentialDialog(): void {\n this.ShowCredentialDialog = true;\n this.cdr.detectChanges();\n }\n\n /**\n * Handles the credential dialog close event\n */\n public onCredentialDialogClose(result: CredentialDialogResult): void {\n this.ShowCredentialDialog = false;\n\n if (result.success && result.credential) {\n // Add the new credential to the list and select it\n this.credentials.push({\n ID: result.credential.ID,\n Name: result.credential.Name\n });\n // Sort credentials by name\n this.credentials.sort((a, b) => a.Name.localeCompare(b.Name));\n // Select the new credential\n this.connectionForm.patchValue({\n CredentialID: result.credential.ID\n });\n }\n\n this.cdr.detectChanges();\n }\n\n public onServerChange(): void {\n const serverId = this.connectionForm.get('MCPServerID')?.value;\n const server = this.servers.find(s => UUIDsEqual(s.ID, serverId));\n if (server && !this.connectionForm.get('Name')?.value) {\n // Auto-fill name based on server\n this.connectionForm.patchValue({\n Name: `${server.Name} Connection`\n });\n }\n }\n\n public async save(): Promise<void> {\n if (this.connectionForm.invalid) {\n this.connectionForm.markAllAsTouched();\n return;\n }\n\n this.IsSaving = true;\n this.ErrorMessage = null;\n this.cdr.detectChanges();\n\n try {\n const md = new Metadata();\n const entity = await md.GetEntityObject<MJMCPServerConnectionEntity>('MJ: MCP Server Connections');\n\n if (this.IsEditMode && this.connection) {\n await entity.InnerLoad(new CompositeKey([{ FieldName: 'ID', Value: this.connection.ID }]));\n } else {\n entity.NewRecord();\n }\n\n // Apply form values\n const formValue = this.connectionForm.value;\n entity.MCPServerID = formValue.MCPServerID;\n entity.Name = formValue.Name;\n entity.Description = formValue.Description || null;\n entity.CompanyID = formValue.CompanyID || null;\n entity.CredentialID = formValue.CredentialID || null;\n entity.AutoSyncTools = formValue.AutoSyncTools;\n entity.LogToolCalls = formValue.LogToolCalls;\n entity.LogInputParameters = formValue.LogInputParameters;\n entity.LogOutputContent = formValue.LogOutputContent;\n entity.MaxOutputLogSize = formValue.MaxOutputLogSize || 102400;\n entity.CustomHeaderName = formValue.CustomHeaderName || null;\n entity.EnvironmentVars = formValue.EnvironmentVars || null;\n entity.Status = formValue.Status;\n\n const saved = await entity.Save();\n if (!saved) {\n // Use CompleteMessage for full error details, fall back to Message\n const errorMessage = entity.LatestResult?.CompleteMessage || entity.LatestResult?.Message || 'Unknown error';\n console.error('MCP Connection save failed:', errorMessage, entity.LatestResult);\n throw new Error(errorMessage);\n }\n\n this.close.emit({ saved: true });\n\n } catch (error) {\n const errorMsg = error instanceof Error ? error.message : String(error);\n this.ErrorMessage = `Failed to save: ${errorMsg}`;\n console.error('MCP Connection save error:', errorMsg);\n this.cdr.detectChanges();\n } finally {\n this.IsSaving = false;\n this.cdr.detectChanges();\n }\n }\n\n public cancel(): void {\n this.close.emit({ saved: false });\n }\n\n public hasError(controlName: string, errorType: string): boolean {\n const control = this.connectionForm.get(controlName);\n return control?.hasError(errorType) && control?.touched || false;\n }\n}\n","@if (visible) {\n <kendo-dialog\n [title]=\"DialogTitle\"\n (close)=\"cancel()\"\n [width]=\"600\"\n [minWidth]=\"400\">\n <form [formGroup]=\"connectionForm\" class=\"connection-form\">\n <!-- Error Message -->\n @if (ErrorMessage) {\n <div class=\"error-banner\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n {{ ErrorMessage }}\n </div>\n }\n <!-- Basic Info Section -->\n <div class=\"form-section\">\n <h3><i class=\"fa-solid fa-info-circle\"></i> Basic Information</h3>\n <div class=\"form-group\">\n <label for=\"server\">MCP Server <span class=\"required\">*</span></label>\n <kendo-dropdownlist\n id=\"server\"\n formControlName=\"MCPServerID\"\n [data]=\"ActiveServers\"\n textField=\"Name\"\n valueField=\"ID\"\n [valuePrimitive]=\"true\"\n [defaultItem]=\"{ Name: 'Select a server...', ID: '' }\"\n (valueChange)=\"onServerChange()\">\n <ng-template kendoDropDownListItemTemplate let-dataItem>\n <div class=\"server-option\">\n <span class=\"server-name\">{{ dataItem.Name }}</span>\n @if (dataItem.TransportType) {\n <span class=\"server-transport\">{{ dataItem.TransportType }}</span>\n }\n </div>\n </ng-template>\n </kendo-dropdownlist>\n @if (hasError('MCPServerID', 'required')) {\n <span class=\"error-text\">Server selection is required</span>\n }\n </div>\n <div class=\"form-group\">\n <label for=\"name\">Connection Name <span class=\"required\">*</span></label>\n <input kendoTextBox\n id=\"name\"\n formControlName=\"Name\"\n placeholder=\"e.g., Production GitHub Connection\" />\n @if (hasError('Name', 'required')) {\n <span class=\"error-text\">Name is required</span>\n }\n </div>\n <div class=\"form-group\">\n <label for=\"description\">Description</label>\n <textarea kendoTextArea\n id=\"description\"\n formControlName=\"Description\"\n placeholder=\"Optional description of this connection\"\n [rows]=\"3\"></textarea>\n </div>\n <div class=\"form-group\">\n <label for=\"status\">Status</label>\n <kendo-dropdownlist\n id=\"status\"\n formControlName=\"Status\"\n [data]=\"['Active', 'Inactive']\"\n [valuePrimitive]=\"true\">\n </kendo-dropdownlist>\n </div>\n <div class=\"form-group\">\n <label for=\"company\">Company</label>\n <kendo-dropdownlist\n id=\"company\"\n formControlName=\"CompanyID\"\n [data]=\"companies\"\n textField=\"Name\"\n valueField=\"ID\"\n [valuePrimitive]=\"true\"\n [defaultItem]=\"{ Name: 'Global (all companies)', ID: '' }\">\n </kendo-dropdownlist>\n <span class=\"hint\">Leave as Global to make this connection available to all companies</span>\n </div>\n </div>\n <!-- Authentication Section -->\n <div class=\"form-section\">\n <h3><i class=\"fa-solid fa-key\"></i> Authentication</h3>\n <div class=\"form-group\">\n <label for=\"credential\">Credential</label>\n @if (IsLoadingDropdowns) {\n <div class=\"loading-credentials\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Loading credentials...\n </div>\n } @else {\n <div class=\"credential-row\">\n <kendo-dropdownlist\n id=\"credential\"\n formControlName=\"CredentialID\"\n [data]=\"credentials\"\n textField=\"Name\"\n valueField=\"ID\"\n [valuePrimitive]=\"true\"\n [defaultItem]=\"{ Name: 'No credential (anonymous)', ID: '' }\">\n </kendo-dropdownlist>\n <button kendoButton\n type=\"button\"\n fillMode=\"outline\"\n (click)=\"openCredentialDialog()\"\n title=\"Create New Credential\">\n <i class=\"fa-solid fa-plus\"></i>\n New\n </button>\n </div>\n <span class=\"hint\">Select an existing credential or create a new one</span>\n }\n </div>\n <div class=\"form-group\">\n <label for=\"customHeader\">Custom Header Name</label>\n <input kendoTextBox\n id=\"customHeader\"\n formControlName=\"CustomHeaderName\"\n placeholder=\"e.g., X-Custom-API-Key\" />\n <span class=\"hint\">Override the default header name for API key authentication</span>\n </div>\n </div>\n <!-- Behavior Section -->\n <div class=\"form-section\">\n <h3><i class=\"fa-solid fa-sliders\"></i> Behavior</h3>\n <div class=\"checkbox-group\">\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" kendoCheckBox formControlName=\"AutoSyncTools\" />\n <span>Auto-sync tools on connect</span>\n </label>\n <span class=\"hint\">Automatically discover and sync available tools when connecting</span>\n </div>\n </div>\n <!-- Logging Section -->\n <div class=\"form-section\">\n <h3><i class=\"fa-solid fa-file-lines\"></i> Logging</h3>\n <div class=\"checkbox-group\">\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" kendoCheckBox formControlName=\"LogToolCalls\" />\n <span>Enable tool call logging</span>\n </label>\n <span class=\"hint\">Log all tool executions to the database</span>\n </div>\n <div class=\"logging-options\" [class.disabled]=\"!connectionForm.get('LogToolCalls')?.value\">\n <div class=\"checkbox-group\">\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" kendoCheckBox formControlName=\"LogInputParameters\" />\n <span>Log input parameters</span>\n </label>\n </div>\n <div class=\"checkbox-group\">\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" kendoCheckBox formControlName=\"LogOutputContent\" />\n <span>Log output content</span>\n </label>\n </div>\n <div class=\"form-group\">\n <label for=\"maxOutputSize\">Max Output Log Size (bytes)</label>\n <kendo-numerictextbox\n id=\"maxOutputSize\"\n formControlName=\"MaxOutputLogSize\"\n [min]=\"0\"\n [max]=\"10485760\"\n [step]=\"10240\"\n [format]=\"'n0'\">\n </kendo-numerictextbox>\n <span class=\"hint\">Maximum size of output content to log (0 = unlimited, max 10MB)</span>\n </div>\n </div>\n </div>\n <!-- Advanced Section -->\n <div class=\"form-section\">\n <h3><i class=\"fa-solid fa-gear\"></i> Advanced</h3>\n <div class=\"form-group\">\n <label for=\"envVars\">Environment Variables (JSON)</label>\n <textarea kendoTextArea\n id=\"envVars\"\n formControlName=\"EnvironmentVars\"\n placeholder='{\"VAR_NAME\": \"value\"}'\n [rows]=\"3\"></textarea>\n <span class=\"hint\">Additional environment variables for Stdio transport (JSON object)</span>\n </div>\n </div>\n </form>\n <kendo-dialog-actions>\n <button kendoButton (click)=\"save()\" themeColor=\"primary\" [disabled]=\"IsSaving\">\n @if (IsSaving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n }\n {{ IsEditMode ? 'Update' : 'Create' }}\n </button>\n <button kendoButton (click)=\"cancel()\">Cancel</button>\n </kendo-dialog-actions>\n </kendo-dialog>\n}\n\n<!-- Credential Creation Dialog -->\n@if (ShowCredentialDialog) {\n <mj-credential-dialog\n #credentialDialog\n [Visible]=\"ShowCredentialDialog\"\n (close)=\"onCredentialDialogClose($event)\">\n </mj-credential-dialog>\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-test-tool-dialog.component.d.ts","sourceRoot":"","sources":["../../../src/MCP/components/mcp-test-tool-dialog.component.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAgB,UAAU,EAAE,MAAM,eAAe,CAAC;;AAmCvI;;GAEG;AACH,UAAU,eAAe;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,OAAO,EAAE,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,UAAU,mBAAmB;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAClB;AAgBD,qBAiBa,0BAA2B,YAAW,MAAM,EAAE,SAAS;IA8F5D,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,UAAU;IAzFb,OAAO,UAAS;IAChB,OAAO,EAAE,kBAAkB,EAAE,CAAM;IACnC,WAAW,EAAE,sBAAsB,EAAE,CAAM;IAC3C,KAAK,EAAE,YAAY,EAAE,CAAM;IAEpC,6BAA6B;IACpB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEhD,iCAAiC;IACxB,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEpD,2BAA2B;IAClB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAQ;IAMpC,KAAK,qBAA4B;IAM3C,uDAAuD;IACvD,WAAW,EAAE,QAAQ,GAAG,WAAW,GAAG,SAAS,CAAY;IAE3D,mBAAmB;IACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC/B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAQ;IACnC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE7B,wCAAwC;IACxC,mBAAmB,EAAE,sBAAsB,EAAE,CAAM;IACnD,aAAa,EAAE,YAAY,EAAE,CAAM;IAEnC,uDAAuD;IACvD,cAAc,EAAE,kBAAkB,EAAE,CAAM;IAC1C,kBAAkB,EAAE,sBAAsB,EAAE,CAAM;IAClD,YAAY,EAAE,YAAY,EAAE,CAAM;IAElC,6BAA6B;IAC7B,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE3C,4BAA4B;IAC5B,YAAY,EAAE,YAAY,GAAG,IAAI,CAAQ;IACzC,gBAAgB,EAAE,eAAe,EAAE,CAAM;IACzC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;IAE9C,sBAAsB;IACtB,WAAW,UAAS;IACpB,eAAe,EAAE,mBAAmB,GAAG,IAAI,CAAQ;IACnD,cAAc,EAAE,MAAM,GAAG,IAAI,CAAQ;IAErC,+BAA+B;IAC/B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAoB;IAMpD,+BAA+B;IAC/B,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAA+B;IAEvE,8BAA8B;IAC9B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAO;IACvC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAO;IACvC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAO;IAC3C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAO;IAEzC,oCAAoC;IACpC,UAAU,EAAE,MAAM,CAA4B;IAE9C,yCAAyC;IACzC,UAAU,UAAS;IAEnB,uDAAuD;IACvD,IAAI,YAAY,IAAI,OAAO,CAE1B;IAED,8CAA8C;IAC9C,OAAO,CAAC,mBAAmB,CAAyB;IAEpD,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,WAAW,CAAgC;gBAGvC,GAAG,EAAE,iBAAiB,EACtB,UAAU,EAAE,UAAU;IAWlC,QAAQ,IAAI,IAAI;IAqBhB,WAAW,IAAI,IAAI;IASnB,cAAc,IAAI,IAAI;IA6CtB,kBAAkB,IAAI,IAAI;IAK1B,YAAY,IAAI,IAAI;IAQpB;;OAEG;IACH,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAQ1C;;OAEG;IACH,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAQ9C;;OAEG;IACH,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IASxC;;OAEG;IACH,IAAI,kBAAkB,IAAI,OAAO,CAEhC;IAED;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBtC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA+CxB;;OAEG;IACH,OAAO,CAAC,aAAa;IAUrB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAYzB;;OAEG;YACW,oBAAoB;IAkBlC;;OAEG;YACW,oBAAoB;IAalC;;OAEG;IACH,OAAO,CAAC,aAAa;IAQrB;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM;IAiB7C;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO;IAK5C;;OAEG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAIrD;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAOtC;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI;IAiB5E;;OAEG;IACH,IAAI,OAAO,IAAI,OAAO,CAUrB;IAED;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAoDlC;;OAEG;IACH,IAAI,eAAe,IAAI,MAAM,CAa5B;IAED;;OAEG;IACH,IAAI,YAAY,IAAI,OAAO,CAU1B;IAED;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAcjC;;OAEG;IACH,MAAM,IAAI,IAAI;IASd;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAO/B;;OAEG;IACH,WAAW,IAAI,IAAI;IAQnB;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAStC;;OAEG;IAEH,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAepC;;OAEG;IAEH,SAAS,IAAI,IAAI;IAWjB;;OAEG;IAEH,cAAc,IAAI,IAAI;IAatB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAoB3B;;OAEG;YACW,iBAAiB;IAQ/B;;OAEG;IACH,IAAI,kBAAkB,IAAI,MAAM,CAG/B;IAED;;OAEG;IACH,IAAI,sBAAsB,IAAI,MAAM,CAGnC;IAED;;OAEG;IACH,IAAI,gBAAgB,IAAI,MAAM,CAE7B;yCA5sBQ,0BAA0B;2CAA1B,0BAA0B;CA6sBtC"}
1
+ {"version":3,"file":"mcp-test-tool-dialog.component.d.ts","sourceRoot":"","sources":["../../../src/MCP/components/mcp-test-tool-dialog.component.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,7 @@ import { debounceTime, takeUntil } from 'rxjs/operators';
14
14
  import { trigger, transition, style, animate } from '@angular/animations';
15
15
  import { GraphQLDataProvider, gql } from '@memberjunction/graphql-dataprovider';
16
16
  import { UserInfoEngine } from '@memberjunction/core-entities';
17
+ import { UUIDsEqual } from '@memberjunction/global';
17
18
  import * as i0 from "@angular/core";
18
19
  import * as i1 from "@angular/forms";
19
20
  import * as i2 from "@progress/kendo-angular-buttons";
@@ -709,11 +710,11 @@ export class MCPTestToolDialogComponent {
709
710
  this.NoConnectionsWarning = null;
710
711
  // Filter connections by selected server
711
712
  if (this.ServerID) {
712
- this.FilteredConnections = this.Connections.filter(c => c.MCPServerID === this.ServerID && c.Status === 'Active');
713
+ this.FilteredConnections = this.Connections.filter(c => UUIDsEqual(c.MCPServerID, this.ServerID) && c.Status === 'Active');
713
714
  // Filter tools by selected server
714
- this.FilteredTools = this.Tools.filter(t => t.MCPServerID === this.ServerID && t.Status === 'Active');
715
+ this.FilteredTools = this.Tools.filter(t => UUIDsEqual(t.MCPServerID, this.ServerID) && t.Status === 'Active');
715
716
  // Check if server requires authentication
716
- const server = this.Servers.find(s => s.ID === this.ServerID);
717
+ const server = this.Servers.find(s => UUIDsEqual(s.ID, this.ServerID));
717
718
  const serverRequiresAuth = server?.Status === 'Active'; // All servers currently need connections
718
719
  // Auto-select connection logic
719
720
  if (this.FilteredConnections.length === 0) {
@@ -790,7 +791,7 @@ export class MCPTestToolDialogComponent {
790
791
  async proceedToConfig() {
791
792
  if (!this.CanProceedToConfig)
792
793
  return;
793
- this.SelectedTool = this.Tools.find(t => t.ID === this.ToolID) || null;
794
+ this.SelectedTool = this.Tools.find(t => UUIDsEqual(t.ID, this.ToolID)) || null;
794
795
  if (!this.SelectedTool)
795
796
  return;
796
797
  // Parse input schema and create parameter configs
@@ -1219,14 +1220,14 @@ export class MCPTestToolDialogComponent {
1219
1220
  * Get display name for selected server
1220
1221
  */
1221
1222
  get SelectedServerName() {
1222
- const server = this.Servers.find(s => s.ID === this.ServerID);
1223
+ const server = this.Servers.find(s => UUIDsEqual(s.ID, this.ServerID));
1223
1224
  return server?.Name || '';
1224
1225
  }
1225
1226
  /**
1226
1227
  * Get display name for selected connection
1227
1228
  */
1228
1229
  get SelectedConnectionName() {
1229
- const connection = this.Connections.find(c => c.ID === this.ConnectionID);
1230
+ const connection = this.Connections.find(c => UUIDsEqual(c.ID, this.ConnectionID));
1230
1231
  return connection?.Name || '';
1231
1232
  }
1232
1233
  /**
@@ -1296,5 +1297,5 @@ export class MCPTestToolDialogComponent {
1296
1297
  type: HostListener,
1297
1298
  args: ['window:resize']
1298
1299
  }] }); })();
1299
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MCPTestToolDialogComponent, { className: "MCPTestToolDialogComponent", filePath: "src/MCP/components/mcp-test-tool-dialog.component.ts", lineNumber: 139 }); })();
1300
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MCPTestToolDialogComponent, { className: "MCPTestToolDialogComponent", filePath: "src/MCP/components/mcp-test-tool-dialog.component.ts", lineNumber: 140 }); })();
1300
1301
  //# sourceMappingURL=mcp-test-tool-dialog.component.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-test-tool-dialog.component.js","sourceRoot":"","sources":["../../../src/MCP/components/mcp-test-tool-dialog.component.ts","../../../src/MCP/components/mcp-test-tool-dialog.component.html"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAwC,YAAY,EAAc,MAAM,eAAe,CAAC;AACvI,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,GAAG,EAAE,MAAM,sCAAsC,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;;;;;;;;;;ICd7D,8BAAoD;IAAxB,2LAAS,oBAAa,KAAC;IAAC,iBAAM;;;;IAYtD,+BAGyB;IAFvB,wNAAa,4BAAqB,KAAC;IAGnC,0BAA+B;IACjC,iBAAM;;;IAHJ,2CAA2B;;;IAyDf,AADF,+BAA2B,eACD;IAAA,YAAmB;IAAA,iBAAO;IAClD,gCAA8E;IAC5E,YACF;IACF,AADE,iBAAO,EACH;;;IAJoB,eAAmB;IAAnB,sCAAmB;IACjB,cAAmD;IAAnD,2DAAmD;IAC3E,cACF;IADE,mDACF;;;IA2BE,gCAA+B;IAAA,YAA0B;IAAA,iBAAO;;;IAAjC,cAA0B;IAA1B,6CAA0B;;;IAF3D,AADF,+BAA2B,eACD;IAAA,YAAmB;IAAA,iBAAO;IAClD,0IAA4B;IAG9B,iBAAM;;;IAJoB,eAAmB;IAAnB,sCAAmB;IAC3C,cAEC;IAFD,kDAEC;;;IAKL,gCAAyB;IAAA,qCAAqB;IAAA,iBAAO;;;IAGrD,gCAA0B;IACxB,wBAAgD;IAChD,YACF;IAAA,iBAAO;;;IADL,eACF;IADE,4DACF;;;IAGA,gCAAuC;IACrC,wBAAiC;IACjC,2DACF;IAAA,iBAAO;;;IAsBL,YACF;;;IADE,kKACF;;;IAKM,gCAA+B;IAAA,YAA8B;IAAA,iBAAO;;;IAArC,cAA8B;IAA9B,iDAA8B;;;IAF/D,AADF,+BAAqC,eACX;IAAA,YAA6C;IAAA,iBAAO;IAC5E,0IAAgC;IAGlC,iBAAM;;;IAJoB,eAA6C;IAA7C,mEAA6C;IACrE,cAEC;IAFD,sDAEC;;;IAKL,gCAAyB;IAAA,qCAAqB;IAAA,iBAAO;;;;IAnGvD,AADF,AAFF,AADF,+BAA0B,cACI,cAEF,gBACI;IACxB,wBAAkC;IAClC,wBACA;IAAA,gCAAuB;IAAA,iBAAC;IAC1B,AAD0B,iBAAO,EACzB;IACR,8CASmC;IAJjC,+UAAsB;IAGtB,AAFA,sOAAe,uBAAgB,KAAC,iOAEhB,mCAA4B,KAAC;IAE7C,yHAAwD;IAS5D,AADE,iBAAqB,EACjB;IAGJ,AADF,gCAAwB,iBACI;IACxB,yBAAgC;IAChC,6BACA;IAAA,iCAAuB;IAAA,kBAAC;IAC1B,AAD0B,iBAAO,EACzB;IACR,+CAUuC;IALrC,wVAA0B;IAI1B,AAHA,uOAAe,2BAAoB,KAAC,kOAGpB,uCAAgC,KAAC;IAEjD,2HAAwD;IAQ1D,iBAAqB;IACrB,6HAAiB;IAGjB,6HAA4B;IAM5B,6HAAwD;IAM1D,iBAAM;IAGJ,AADF,gCAAwB,iBACI;IACxB,yBAAkC;IAClC,uBACA;IAAA,iCAAuB;IAAA,kBAAC;IAC1B,AAD0B,iBAAO,EACzB;IACR,+CAUiC;IAL/B,4UAAoB;IAIpB,AAHA,uOAAe,qBAAc,KAAC,kOAGd,iCAA0B,KAAC;IAK3C,AAHA,2HAAyD,8GAGD;IAQ1D,iBAAqB;IACrB,6HAAiB;IAKvB,AADE,AADE,iBAAM,EACF,EACF;;;IAjGE,eAAuB;IAGvB,AADA,AADA,AADA,4CAAuB,qBACH,oBACD,wBACI;IACvB,+CAAsB;IAEtB,iCAAmB;IAqBnB,eAA2B;IAG3B,AADA,AADA,AADA,gDAA2B,qBACP,oBACD,wBACI;IACvB,mDAA0B;IAG1B,AADA,mFAAuD,oBACpC;IAYrB,eAEC;IAFD,4CAEC;IACD,cAKC;IALD,uDAKC;IACD,cAKC;IALD,0FAKC;IAUC,eAAqB;IAGrB,AADA,AADA,AADA,0CAAqB,0BACI,oBACN,wBACI;IACvB,6CAAoB;IAGpB,AADA,2CAAsB,oBACH;IAerB,eAEC;IAFD,4CAEC;;;IAeC,6BAA4B;IAAA,YAAmC;IAAA,iBAAI;;;IAAvC,cAAmC;IAAnC,8FAAmC;;;IAenE,+BAAuB;IACrB,wBAAwC;IACxC,yBAAG;IAAA,iDAAiC;IACtC,AADsC,iBAAI,EACpC;;;IASI,gCAAuB;IAAA,iBAAC;IAAA,iBAAO;;;IAIjC,6BAA6B;IAAA,YAAwB;IAAA,iBAAI;;;IAA5B,cAAwB;IAAxB,4CAAwB;;;;IAIrD,8CAIyD;IADvD,odAA0C;IAC1C,iUAAe,iDAAsC,KAAC;IACxD,iBAAqB;;;;IAHnB,AADA,4CAA0B,wBACH;IACvB,uEAA0C;;;;IAO5C,AADF,+BAA8B,gBAI6C;IAAvE,0SAAU,gEAA2D,KAAC;IAHxE,iBAGyE;IACzE,iCAAsC;IAAA,uBAAO;IAC/C,AAD+C,iBAAQ,EACjD;;;;IAJF,cAA6B;IAC7B,AADA,+CAA6B,oDACW;IAEnC,cAA8B;IAA9B,gDAA8B;;;;IAKzC,gDAIyD;IADvD,sdAA0C;IAC1C,mUAAe,iDAAsC,KAAC;IACxD,iBAAuB;;;;IAHrB,AADA,mEAAiD,iDACL;IAC5C,uEAA0C;;;;IAM9C,oCAI8C;IAD5C,2SAAS,yEAAgE,KAAC;IAC9B,iBAAW;IACzD,gCAAyB;IAAA,gCAAgB;IAAA,iBAAO;;;;IADhD,6BAAA,wDAA6C,CAAA,mDAFJ;;;;IAQzC,oCAIuD;IAFrD,ydAA0C;IAC1C,0TAAS,8DAAyD,KAAC;IACd,iBAAW;;;;IAFhE,uEAA0C;IAE5C,wEAAsD;;;;IAEtD,yCAGyD;IAFvD,8dAA0C;IAC1C,2UAAe,iDAAsC,KAAC;IAExD,iBAAgB;;;;IAHd,uEAA0C;IAE1C,wEAAsD;;;IAJxD,AANF,kKAA0B,iJAMjB;;;;IANT,uDAYC;;;IA5DK,AADF,+BAA4D,gBAC/B;IACzB,YACA;IAAA,gJAAuB;IAGzB,iBAAQ;IACR,6IAA0B;IAyChC,AATE,AATE,AAVE,AATA,8JAAoC,yHASE,0IAU0B,8GASJ,8GAS3D;IAeX,iBAAM;;;IA/D2B,+CAAkC;IAEvD,eACA;IADA,gDACA;IAAA,cAEC;IAFD,8CAEC;IAEH,cAEC;IAFD,iDAEC;IAED,cAmDP;IAnDO,oOAmDP;;;IAhEG,AADF,+BAA6B,aACF;IAAA,0BAAU;IAAA,iBAAK;IACxC,2IAiEP;IACH,iBAAM;;;IAlEI,eAiEP;IAjEO,sCAiEP;;;IA5FO,AADF,AADF,AADF,+BAA0B,cACC,cACA,aACC;IACpB,wBAAkC;IAClC,YACF;IAAA,iBAAK;IACL,wHAAqC;IAGvC,iBAAM;IAEJ,AADF,+BAA0B,eACG;IACzB,wBAAkC;IAClC,aACF;IAAA,iBAAO;IACP,iCAA2B;IACzB,yBAAgC;IAChC,aACF;IAEJ,AADE,AADE,iBAAO,EACH,EACF;IAMJ,AALF,4HAAqC,sGAK5B;IAuEnB,iBAAM;;;IA7FU,eACF;IADE,4KACF;IACA,cAEC;IAFD,qGAEC;IAKC,eACF;IADE,0DACF;IAGE,eACF;IADE,8DACF;IAGJ,cA2EP;IA3EO,gEA2EP;;;IAUO,wBAAwC;IACxC,gCAA4B;IAAA,oCAAoB;IAAA,iBAAO;;;IAEvD,wBAAwC;IACxC,gCAA4B;IAAA,gCAAgB;IAAA,iBAAO;;;IAGnD,gCAAuB;IAAA,YAAmC;IAAA,iBAAO;;;IAA1C,cAAmC;IAAnC,0GAAmC;;;IAqB1D,AADF,+BAAyB,SACnB;IAAA,wBAAgD;IAAC,sBAAK;IAAA,iBAAK;IAC/D,+BAA2B;IAAA,YAAmC;IAChE,AADgE,iBAAM,EAChE;;;IADuB,eAAmC;IAAnC,iGAAmC;;;;IAO5D,AADF,AADF,+BAAqC,cACF,SAC3B;IAAA,wBAAgC;IAAC,uBAAM;IAAA,iBAAK;IAChD,kCAAqF;IAAjD,8NAAS,mBAAY,KAAC;IACxD,wBAAgC;IAEpC,AADE,iBAAS,EACL;IACN,+BAAmC;IACjC,qCAIiB;IAErB,AADE,iBAAM,EACF;;;IALA,eAA2B;IAE3B,AADA,AADA,gDAA2B,oBACR,kBACF;;;IA/CzB,AAFF,AADF,+BAAuC,cACN,cAEmF;IAI5G,AAHF,+GAAgC,yFAGvB;IAIT,2HAAmC;IAGrC,iBAAM;IAIF,AADF,AADF,+BAA4B,cACJ,eACK;IAAA,qBAAK;IAAA,iBAAO;IACrC,iCAAyB;IAAA,aAAsB;IACjD,AADiD,iBAAO,EAClD;IAEJ,AADF,gCAAsB,gBACK;IAAA,wBAAO;IAAA,iBAAO;IACvC,iCAAyB;IAAA,aAAwB;IACnD,AADmD,iBAAO,EACpD;IAEJ,AADF,gCAAsB,gBACK;IAAA,4BAAW;IAAA,iBAAO;IAC3C,iCAAyB;IAAA,aAA4B;IAEzD,AADE,AADuD,iBAAO,EACxD,EACF;IAEN,4HAAqC;IAOrC,4HAA+B;IAkBnC,AADE,iBAAM,EACF;;;IArDyB,eAA0C;IAAC,AAA3C,iGAA0C,oFAA0C;IAC7G,cAMC;IAND,kGAMC;IACD,eAEC;IAFD,sGAEC;IAM0B,eAAsB;IAAtB,6CAAsB;IAItB,eAAwB;IAAxB,+CAAwB;IAIxB,eAA4B;IAA5B,mDAA4B;IAIzD,cAKC;IALD,yGAKC;IAED,cAgBC;IAhBD,mGAgBC;;;;IASD,kCAAsG;IAA7D,wMAAS,wBAAiB,KAAC;IAClE,wBAAuC;IACvC,sBACF;IAAA,iBAAS;IACT,kCAA4D;IAAxB,wMAAS,oBAAa,KAAC;IAAC,sBAAM;IAAA,iBAAS;;;IAJN,qDAAgC;;;IASjG,wBAA2C;IAC3C,8BACF;;;IACE,wBAAgC;IAChC,8BACF;;;;IAPF,kCAAsG;IAA7D,wMAAS,oBAAa,KAAC;IAI5D,AAHF,wGAAmB,kFAGV;IAIX,iBAAS;IACT,kCAAuD;IAAnB,wMAAS,eAAQ,KAAC;IACpD,wBAAsC;IACtC,sBACF;IAAA,iBAAS;;;IAZwD,gEAAoC;IACnG,cAMC;IAND,4CAMC;;;;IAQH,kCAA8D;IAArB,wMAAS,iBAAU,KAAC;IAC3D,wBAAgC;IAChC,2BACF;IAAA,iBAAS;IACT,kCAAuD;IAAnB,wMAAS,eAAQ,KAAC;IACpD,wBAAsC;IACtC,iCACF;IAAA,iBAAS;IACT,kCAA4D;IAAxB,wMAAS,oBAAa,KAAC;IAAC,qBAAK;IAAA,iBAAS;;;;IA/V9E,8BAIgC;IAE9B,0GAAqB;IAUnB,AADF,8BAA0B,YACA;IACtB,uBAAiC;IACjC,+BACF;IAAA,iBAAK;IACL,iCAAgE;IAAtC,8LAAS,oBAAa,KAAC;IAC/C,uBAAiC;IAErC,AADE,iBAAS,EACL;IAIF,AADF,AADF,+BAA4B,cAC+E,gBAC7E;IAAA,kBAAC;IAAA,iBAAO;IAClC,iCAAyB;IAAA,4BAAW;IACtC,AADsC,iBAAO,EACvC;IACN,2BAA+E;IAE7E,AADF,gCAA6G,gBACjF;IAAA,kBAAC;IAAA,iBAAO;IAClC,iCAAyB;IAAA,0BAAS;IACpC,AADoC,iBAAO,EACrC;IACN,2BAAgF;IAE9E,AADF,gCAA6D,gBACjC;IAAA,kBAAC;IAAA,iBAAO;IAClC,iCAAyB;IAAA,wBAAO;IAEpC,AADE,AADkC,iBAAO,EACnC,EACF;IAEN,gCAA2B;IAEzB,+GAAgC;IA+GhC,8GAAmC;IAsGzC,+GAAiC;IA2DjC,iBAAM;IAEN,gCAA2B;IAwBvB,AAfA,AAPA,2FAAkB,qEAOG,qEAeF;IAavB,AADA,iBAAM,EACA;;;;IAjWF,6EAAmD;IAEnD,AADA,6CAA6B,+BACA;IAH7B,oCAAQ;IAKR,cAOC;IAPD,+CAOC;IAamB,eAAyC;IAAC,AAA1C,yDAAyC,8CAA6C;IAI5E,eAA4C;IAA5C,4DAA4C;IACtD,cAA4C;IAAC,AAA7C,4DAA4C,+CAA8C;IAIhF,eAA6C;IAA7C,6DAA6C;IACvD,cAA0C;IAA1C,0DAA0C;IAQ5D,eA6GC;IA7GD,2DA6GC;IAED,cAoGL;IApGK,8DAoGL;IAED,cA0DC;IA1DD,4DA0DC;IAIC,eAkCC;IAlCD,qDAAA,QAAQ,qBAAR,WAAW,qBAAX,SAAS,WAkCR;;AD7PH;;GAEG;AACH,MAAM,sBAAsB,GAAG,GAAG,CAAA;;;;;;;;;CASjC,CAAC;AAmBF,MAAM,OAAO,0BAA0B;IA8FvB;IACA;IA7FZ,2CAA2C;IAC3C,SAAS;IACT,2CAA2C;IAElC,OAAO,GAAG,KAAK,CAAC;IAChB,OAAO,GAAyB,EAAE,CAAC;IACnC,WAAW,GAA6B,EAAE,CAAC;IAC3C,KAAK,GAAmB,EAAE,CAAC;IAEpC,6BAA6B;IACpB,gBAAgB,GAAkB,IAAI,CAAC;IAEhD,iCAAiC;IACxB,oBAAoB,GAAkB,IAAI,CAAC;IAEpD,2BAA2B;IAClB,cAAc,GAAkB,IAAI,CAAC;IAE9C,2CAA2C;IAC3C,UAAU;IACV,2CAA2C;IAEjC,KAAK,GAAG,IAAI,YAAY,EAAQ,CAAC;IAE3C,2CAA2C;IAC3C,QAAQ;IACR,2CAA2C;IAE3C,uDAAuD;IACvD,WAAW,GAAuC,QAAQ,CAAC;IAE3D,mBAAmB;IACnB,QAAQ,GAAkB,IAAI,CAAC;IAC/B,YAAY,GAAkB,IAAI,CAAC;IACnC,MAAM,GAAkB,IAAI,CAAC;IAE7B,wCAAwC;IACxC,mBAAmB,GAA6B,EAAE,CAAC;IACnD,aAAa,GAAmB,EAAE,CAAC;IAEnC,uDAAuD;IACvD,cAAc,GAAyB,EAAE,CAAC;IAC1C,kBAAkB,GAA6B,EAAE,CAAC;IAClD,YAAY,GAAmB,EAAE,CAAC;IAElC,6BAA6B;IAC7B,oBAAoB,GAAkB,IAAI,CAAC;IAE3C,4BAA4B;IAC5B,YAAY,GAAwB,IAAI,CAAC;IACzC,gBAAgB,GAAsB,EAAE,CAAC;IACzC,eAAe,GAA4B,EAAE,CAAC;IAE9C,sBAAsB;IACtB,WAAW,GAAG,KAAK,CAAC;IACpB,eAAe,GAA+B,IAAI,CAAC;IACnD,cAAc,GAAkB,IAAI,CAAC;IAErC,+BAA+B;IACd,eAAe,GAAG,gBAAgB,CAAC;IAEpD,2CAA2C;IAC3C,6BAA6B;IAC7B,2CAA2C;IAE3C,+BAA+B;IACd,uBAAuB,GAAG,2BAA2B,CAAC;IAEvE,8BAA8B;IACb,eAAe,GAAG,GAAG,CAAC;IACtB,eAAe,GAAG,GAAG,CAAC;IACtB,mBAAmB,GAAG,GAAG,CAAC;IAC1B,iBAAiB,GAAG,GAAG,CAAC;IAEzC,oCAAoC;IACpC,UAAU,GAAW,IAAI,CAAC,mBAAmB,CAAC;IAE9C,yCAAyC;IACzC,UAAU,GAAG,KAAK,CAAC;IAEnB,uDAAuD;IACvD,IAAI,YAAY;QACZ,OAAO,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,iBAAiB,CAAC;IACxF,CAAC;IAED,8CAA8C;IACtC,mBAAmB,GAAG,IAAI,OAAO,EAAU,CAAC;IAE5C,QAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;IAC/B,WAAW,GAAG,mBAAmB,CAAC,QAAQ,CAAC;IAEnD,YACY,GAAsB,EACtB,UAAsB;QADtB,QAAG,GAAH,GAAG,CAAmB;QACtB,eAAU,GAAV,UAAU,CAAY;QAE9B,uDAAuD;QACvD,IAAI,CAAC,mBAAmB,CAAC,IAAI,CACzB,YAAY,CAAC,GAAG,CAAC,EACjB,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAC3B,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;YAChB,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IACP,CAAC;IAED,QAAQ;QACJ,yBAAyB;QACzB,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAE3B,4BAA4B;QAC5B,IAAI,CAAC,cAAc,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QAExC,4BAA4B;QAC5B,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC;YACtC,IAAI,CAAC,cAAc,EAAE,CAAC;QAC1B,CAAC;QACD,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC;YAC9C,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC9B,CAAC;QACD,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC;QACtC,CAAC;IACL,CAAC;IAED,WAAW;QACP,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAC7B,CAAC;IAED,2CAA2C;IAC3C,qBAAqB;IACrB,2CAA2C;IAE3C,cAAc;QACV,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QAEjC,wCAAwC;QACxC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAC9C,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ,CAChE,CAAC;YACF,kCAAkC;YAClC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAClC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ,CAChE,CAAC;YAEF,0CAA0C;YAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC9D,MAAM,kBAAkB,GAAG,MAAM,EAAE,MAAM,KAAK,QAAQ,CAAC,CAAC,yCAAyC;YAEjG,+BAA+B;YAC/B,IAAI,IAAI,CAAC,mBAAmB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;gBACzB,IAAI,kBAAkB,EAAE,CAAC;oBACrB,IAAI,CAAC,oBAAoB,GAAG,oFAAoF,CAAC;gBACrH,CAAC;YACL,CAAC;iBAAM,IAAI,IAAI,CAAC,mBAAmB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC/C,kCAAkC;gBAClC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,CAAC;iBAAM,CAAC;gBACJ,yCAAyC;gBACzC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;YAC9B,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;YACxB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC7B,CAAC;QAED,sCAAsC;QACtC,IAAI,CAAC,kBAAkB,GAAG,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACxD,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;QAE5C,uBAAuB;QACvB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAED,kBAAkB;QACd,oEAAoE;QACpE,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAED,YAAY;QACR,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAED,2CAA2C;IAC3C,2BAA2B;IAC3B,2CAA2C;IAE3C;;OAEG;IACH,oBAAoB,CAAC,MAAc;QAC/B,MAAM,WAAW,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QACjD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAC1C,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;YAC1C,CAAC,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,CAChE,CAAC;IACN,CAAC;IAED;;OAEG;IACH,wBAAwB,CAAC,MAAc;QACnC,MAAM,WAAW,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QACjD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAC1D,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;YAC1C,CAAC,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,CAChE,CAAC;IACN,CAAC;IAED;;OAEG;IACH,kBAAkB,CAAC,MAAc;QAC7B,MAAM,WAAW,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QACjD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAC9C,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;YAC9C,CAAC,CAAC,CAAC,SAAS,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC;YAC3D,CAAC,CAAC,CAAC,eAAe,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,CACpE,CAAC;IACN,CAAC;IAED;;OAEG;IACH,IAAI,kBAAkB;QAClB,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC;IACrF,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe;QACjB,IAAI,CAAC,IAAI,CAAC,kBAAkB;YAAE,OAAO;QAErC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;QACvE,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,OAAO;QAE/B,kDAAkD;QAClD,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,+BAA+B;QAC/B,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAElC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACK,gBAAgB;QACpB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC;YAClC,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;YAC3B,OAAO;QACX,CAAC;QAED,IAAI,CAAC;YACD,MAAM,MAAM,GAAe,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;YACrE,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC;YAC3C,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;YAEvC,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;gBACpE,MAAM,OAAO,GAAG,IAA0B,CAAC;gBAC3C,OAAO;oBACH,IAAI;oBACJ,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC;oBACtC,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,EAAE;oBACtC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACjC,YAAY,EAAE,OAAO,CAAC,OAAO;oBAC7B,UAAU,EAAE,OAAO,CAAC,IAAI,IAAI,EAAE;oBAC9B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI;oBAC9B,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,OAAO,EAAE,OAAO,CAAC,OAAO;iBAC3B,CAAC;YACN,CAAC,CAAC,CAAC;YAEH,4CAA4C;YAC5C,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBAChC,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ;oBAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1D,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACxC,CAAC,CAAC,CAAC;YAEH,4CAA4C;YAC5C,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;YAC1B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACzC,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;oBACpC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC;gBAC5D,CAAC;qBAAM,CAAC;oBACJ,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC5E,CAAC;YACL,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;YACtD,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAC/B,CAAC;IACL,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,IAAmC;QACrD,IAAI,CAAC,IAAI;YAAE,OAAO,QAAQ,CAAC;QAC3B,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,wCAAwC;YACxC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC;YAC/C,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QACtD,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,IAAY;QAClC,QAAQ,IAAI,EAAE,CAAC;YACX,KAAK,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC;YACzB,KAAK,QAAQ,CAAC;YACd,KAAK,SAAS,CAAC,CAAC,OAAO,IAAI,CAAC;YAC5B,KAAK,SAAS,CAAC,CAAC,OAAO,KAAK,CAAC;YAC7B,KAAK,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;YACxB,KAAK,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC;YACzB,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;QACvB,CAAC;IACL,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,oBAAoB;QAC9B,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,OAAO;QAE/B,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC;QACvC,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAElD,IAAI,WAAW,EAAE,CAAC;YACd,IAAI,CAAC;gBACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBACvC,8DAA8D;gBAC9D,IAAI,CAAC,eAAe,GAAG,EAAE,GAAG,IAAI,CAAC,eAAe,EAAE,GAAG,MAAM,EAAE,CAAC;YAClE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,OAAO,CAAC,IAAI,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC;YAC9D,CAAC;QACL,CAAC;IACL,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,oBAAoB;QAC9B,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,OAAO;QAE/B,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC;QAEvC,IAAI,CAAC;YACD,MAAM,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;QAC9E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;QAC7D,CAAC;IACL,CAAC;IAED;;OAEG;IACK,aAAa;QACjB,OAAO,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;IACpE,CAAC;IAED,2CAA2C;IAC3C,0BAA0B;IAC1B,2CAA2C;IAE3C;;OAEG;IACH,YAAY,CAAC,MAAuB;QAChC,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,QAAQ,CAAC;QAClD,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM;YAAE,OAAO,MAAM,CAAC;QAC5C,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW;YAAE,OAAO,gBAAgB,CAAC;QAC3D,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO;YAAE,OAAO,OAAO,CAAC;QAC9C,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK;YAAE,OAAO,KAAK,CAAC;QAErE,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,SAAS,CAAC,CAAC,OAAO,UAAU,CAAC;YAClC,KAAK,SAAS,CAAC;YACf,KAAK,QAAQ,CAAC,CAAC,OAAO,QAAQ,CAAC;YAC/B,KAAK,OAAO,CAAC;YACb,KAAK,QAAQ,CAAC,CAAC,OAAO,UAAU,CAAC;YACjC,OAAO,CAAC,CAAC,OAAO,MAAM,CAAC;QAC3B,CAAC;IACL,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,MAAuB;QAC9B,OAAO,MAAM,CAAC,IAAI,KAAK,OAAO,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ;YACnD,CAAC,MAAM,CAAC,WAAW,IAAI,IAAI,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;IAC3E,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,IAAY,EAAE,KAAc;QAC1C,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,IAAY;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,EAAE,CAAC;QACrD,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACrE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,IAAY,EAAE,KAAa,EAAE,MAAuB;QACjE,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtD,IAAI,CAAC;gBACD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAC9F,CAAC;YAAC,MAAM,CAAC;gBACL,mCAAmC;gBACnC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;YACvC,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QACvC,CAAC;IACL,CAAC;IAED,2CAA2C;IAC3C,YAAY;IACZ,2CAA2C;IAE3C;;OAEG;IACH,IAAI,OAAO;QACP,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACzC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAClB,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAChD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;oBACxD,OAAO,KAAK,CAAC;gBACjB,CAAC;YACL,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW;QACb,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QAEhE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAEzB,mCAAmC;QACnC,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAElC,6DAA6D;QAC7D,MAAM,SAAS,GAA4B,EAAE,CAAC;QAC9C,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAChD,IAAI,MAAM,CAAC,QAAQ,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,CAAC,EAAE,CAAC;gBAC7E,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;YACnC,CAAC;QACL,CAAC;QAED,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,sBAAsB,EAAE;gBACrE,KAAK,EAAE;oBACH,YAAY,EAAE,IAAI,CAAC,YAAY;oBAC/B,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ;oBACrC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;iBACvC;aACJ,CAAC,CAAC;YAEH,IAAI,CAAC,eAAe,GAAG,MAAM,EAAE,cAAc,IAAI;gBAC7C,OAAO,EAAE,KAAK;gBACd,YAAY,EAAE,gCAAgC;aACjD,CAAC;YAEF,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;QACjC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,cAAc,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC7E,IAAI,CAAC,eAAe,GAAG;gBACnB,OAAO,EAAE,KAAK;gBACd,YAAY,EAAE,IAAI,CAAC,cAAc;aACpC,CAAC;YACF,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;QACjC,CAAC;gBAAS,CAAC;YACP,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YACzB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC7B,CAAC;IACL,CAAC;IAED,2CAA2C;IAC3C,kBAAkB;IAClB,2CAA2C;IAE3C;;OAEG;IACH,IAAI,eAAe;QACf,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM;YAAE,OAAO,EAAE,CAAC;QAE7C,IAAI,CAAC;YACD,IAAI,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAClD,2CAA2C;gBAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;gBACvD,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAC3C,CAAC;YACD,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAChE,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAC/C,CAAC;IACL,CAAC;IAED;;OAEG;IACH,IAAI,YAAY;QACZ,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM;YAAE,OAAO,KAAK,CAAC;QAChD,IAAI,CAAC;YACD,IAAI,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAClD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;YAC5C,CAAC;YACD,OAAO,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,KAAK,QAAQ,CAAC;QAC3D,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACZ,IAAI,CAAC,IAAI,CAAC,eAAe;YAAE,OAAO;QAElC,IAAI,CAAC;YACD,MAAM,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC9D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;QACzD,CAAC;IACL,CAAC;IAED,2CAA2C;IAC3C,aAAa;IACb,2CAA2C;IAE3C;;OAEG;IACH,MAAM;QACF,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QACnC,CAAC;aAAM,IAAI,IAAI,CAAC,WAAW,KAAK,WAAW,EAAE,CAAC;YAC1C,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC;QAChC,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QACV,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,WAAW;QACP,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IACtB,CAAC;IAED,2CAA2C;IAC3C,wBAAwB;IACxB,2CAA2C;IAE3C;;OAEG;IACH,aAAa,CAAC,KAAiB;QAC3B,IAAI,IAAI,CAAC,YAAY;YAAE,OAAO,CAAC,sBAAsB;QAErD,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,WAAW,CAAC;QACzC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC;IAC5C,CAAC;IAED;;OAEG;IAEH,WAAW,CAAC,KAAiB;QACzB,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO;QAE7B,wDAAwD;QACxD,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC;QAEnD,kBAAkB;QAClB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CACtB,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,EACxC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC,oBAAoB;SAC9E,CAAC;QAEF,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IAEH,SAAS;QACL,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YACxB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC;YAChC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE,CAAC;YAEpC,kCAAkC;YAClC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACnD,CAAC;IACL,CAAC;IAED;;OAEG;IAEH,cAAc;QACV,wCAAwC;QACxC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACxC,CAAC;aAAM,CAAC;YACJ,uCAAuC;YACvC,IAAI,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,GAAG,EAAE,EAAE,CAAC;gBAC3C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC;YAC7E,CAAC;QACL,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACK,mBAAmB;QACvB,wCAAwC;QACxC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;YACpC,OAAO;QACX,CAAC;QAED,IAAI,CAAC;YACD,MAAM,UAAU,GAAG,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACpF,IAAI,UAAU,EAAE,CAAC;gBACb,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;gBACvC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,eAAe,IAAI,KAAK,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;oBAClF,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;gBAC5B,CAAC;YACL,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,sDAAsD,EAAE,KAAK,CAAC,CAAC;QAChF,CAAC;IACL,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,iBAAiB,CAAC,KAAa;QACzC,IAAI,CAAC;YACD,MAAM,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,uBAAuB,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,mDAAmD,EAAE,KAAK,CAAC,CAAC;QAC7E,CAAC;IACL,CAAC;IAED;;OAEG;IACH,IAAI,kBAAkB;QAClB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9D,OAAO,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,IAAI,sBAAsB;QACtB,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC;QAC1E,OAAO,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,IAAI,gBAAgB;QAChB,OAAO,IAAI,CAAC,YAAY,EAAE,SAAS,IAAI,IAAI,CAAC,YAAY,EAAE,QAAQ,IAAI,EAAE,CAAC;IAC7E,CAAC;oHA5sBQ,0BAA0B;6DAA1B,0BAA0B;YAA1B,6GAAA,uBAAmB,0BAAO,sFAA1B,eAAW,0BAAe,oFAA1B,oBAAgB,wBAAU;;YCzIvC,4FAAe;YAKf,8FAAe;;YALf,sCAEC;YAGD,cAqWC;YArWD,sCAqWC;ygfD7Oe;gBACR,OAAO,CAAC,SAAS,EAAE;oBACf,UAAU,CAAC,QAAQ,EAAE;wBACjB,KAAK,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;wBACpD,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;qBAC/E,CAAC;oBACF,UAAU,CAAC,QAAQ,EAAE;wBACjB,OAAO,CAAC,eAAe,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;qBACjF,CAAC;iBACL,CAAC;aACL;;iFAEQ,0BAA0B;cAjBtC,SAAS;6BACI,KAAK,YACL,yBAAyB,cAGvB;oBACR,OAAO,CAAC,SAAS,EAAE;wBACf,UAAU,CAAC,QAAQ,EAAE;4BACjB,KAAK,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;4BACpD,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;yBAC/E,CAAC;wBACF,UAAU,CAAC,QAAQ,EAAE;4BACjB,OAAO,CAAC,eAAe,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;yBACjF,CAAC;qBACL,CAAC;iBACL;;kBAQA,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBAGL,KAAK;;kBAGL,KAAK;;kBAGL,KAAK;;kBAML,MAAM;;kBA6kBN,YAAY;mBAAC,oBAAoB,EAAE,CAAC,QAAQ,CAAC;;kBAmB7C,YAAY;mBAAC,kBAAkB;;kBAe/B,YAAY;mBAAC,eAAe;;kFAvoBpB,0BAA0B","sourcesContent":["/**\n * @fileoverview MCP Test Tool Slide-Out Panel Component\n *\n * Provides a beautiful UX for testing MCP tools with:\n * - Server/Connection/Tool selection\n * - Dynamic parameter input UI based on JSON Schema\n * - Tool execution with results display\n * - User settings caching via UserInfoEngine\n * - Resizable slide-out panel with width persistence\n */\n\nimport { Component, Input, Output, EventEmitter, OnInit, OnDestroy, ChangeDetectorRef, HostListener, ElementRef } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { debounceTime, takeUntil } from 'rxjs/operators';\nimport { trigger, transition, style, animate } from '@angular/animations';\nimport { GraphQLDataProvider, gql } from '@memberjunction/graphql-dataprovider';\nimport { UserInfoEngine } from '@memberjunction/core-entities';\n\n/**\n * Interface for JSON Schema property definition\n */\ninterface JsonSchemaProperty {\n type?: string | string[];\n description?: string;\n default?: unknown;\n enum?: unknown[];\n required?: boolean;\n items?: JsonSchemaProperty;\n properties?: Record<string, JsonSchemaProperty>;\n format?: string;\n minimum?: number;\n maximum?: number;\n minLength?: number;\n maxLength?: number;\n}\n\n/**\n * Interface for JSON Schema\n */\ninterface JsonSchema {\n type?: string;\n properties?: Record<string, JsonSchemaProperty>;\n required?: string[];\n description?: string;\n}\n\n/**\n * Parameter input configuration derived from schema\n */\ninterface ParameterConfig {\n name: string;\n type: string;\n description: string;\n required: boolean;\n defaultValue: unknown;\n enumValues: unknown[];\n format: string | null;\n minimum?: number;\n maximum?: number;\n}\n\n/**\n * Tool execution result\n */\ninterface ToolExecutionResult {\n Success: boolean;\n ErrorMessage?: string;\n Result?: unknown;\n DurationMs?: number;\n}\n\n/**\n * Server data for selection\n */\nexport interface TestToolServerData {\n ID: string;\n Name: string;\n Description: string | null;\n Status: string;\n}\n\n/**\n * Connection data for selection\n */\nexport interface TestToolConnectionData {\n ID: string;\n MCPServerID: string;\n ServerName?: string;\n Name: string;\n Description: string | null;\n Status: string;\n}\n\n/**\n * Tool data for selection\n */\nexport interface TestToolData {\n ID: string;\n MCPServerID: string;\n ServerName?: string;\n ToolName: string;\n ToolTitle: string | null;\n ToolDescription: string | null;\n InputSchema: string;\n Status: string;\n}\n\n/**\n * GraphQL mutation for executing MCP tool\n */\nconst ExecuteMCPToolMutation = gql`\n mutation ExecuteMCPTool($input: ExecuteMCPToolInput!) {\n ExecuteMCPTool(input: $input) {\n Success\n ErrorMessage\n Result\n DurationMs\n }\n }\n`;\n\n@Component({\n standalone: false,\n selector: 'mj-mcp-test-tool-dialog',\n templateUrl: './mcp-test-tool-dialog.component.html',\n styleUrls: ['./mcp-test-tool-dialog.component.css'],\n animations: [\n trigger('slideIn', [\n transition(':enter', [\n style({ transform: 'translateX(100%)', opacity: 0 }),\n animate('250ms ease-out', style({ transform: 'translateX(0)', opacity: 1 }))\n ]),\n transition(':leave', [\n animate('200ms ease-in', style({ transform: 'translateX(100%)', opacity: 0 }))\n ])\n ])\n ]\n})\nexport class MCPTestToolDialogComponent implements OnInit, OnDestroy {\n\n // ========================================\n // Inputs\n // ========================================\n\n @Input() Visible = false;\n @Input() Servers: TestToolServerData[] = [];\n @Input() Connections: TestToolConnectionData[] = [];\n @Input() Tools: TestToolData[] = [];\n\n /** Pre-selected server ID */\n @Input() SelectedServerID: string | null = null;\n\n /** Pre-selected connection ID */\n @Input() SelectedConnectionID: string | null = null;\n\n /** Pre-selected tool ID */\n @Input() SelectedToolID: string | null = null;\n\n // ========================================\n // Outputs\n // ========================================\n\n @Output() Close = new EventEmitter<void>();\n\n // ========================================\n // State\n // ========================================\n\n /** Current step: 'select' | 'configure' | 'results' */\n CurrentStep: 'select' | 'configure' | 'results' = 'select';\n\n /** Selected IDs */\n ServerID: string | null = null;\n ConnectionID: string | null = null;\n ToolID: string | null = null;\n\n /** Filtered lists based on selection */\n FilteredConnections: TestToolConnectionData[] = [];\n FilteredTools: TestToolData[] = [];\n\n /** Display lists for dropdowns (filtered by search) */\n DisplayServers: TestToolServerData[] = [];\n DisplayConnections: TestToolConnectionData[] = [];\n DisplayTools: TestToolData[] = [];\n\n /** No connections warning */\n NoConnectionsWarning: string | null = null;\n\n /** Selected tool details */\n SelectedTool: TestToolData | null = null;\n ParameterConfigs: ParameterConfig[] = [];\n ParameterValues: Record<string, unknown> = {};\n\n /** Execution state */\n IsExecuting = false;\n ExecutionResult: ToolExecutionResult | null = null;\n ExecutionError: string | null = null;\n\n /** User settings key prefix */\n private readonly SETTINGS_PREFIX = 'mcp-tool-test/';\n\n // ========================================\n // Panel Width / Resize State\n // ========================================\n\n /** Panel width settings key */\n private readonly PANEL_WIDTH_SETTING_KEY = 'mcp-test-tool-panel/width';\n\n /** Panel width constraints */\n private readonly MIN_PANEL_WIDTH = 320;\n private readonly MAX_PANEL_WIDTH = 900;\n private readonly DEFAULT_PANEL_WIDTH = 700;\n private readonly MOBILE_BREAKPOINT = 768;\n\n /** Current panel width in pixels */\n PanelWidth: number = this.DEFAULT_PANEL_WIDTH;\n\n /** Whether user is currently resizing */\n IsResizing = false;\n\n /** Whether panel should be full-width (mobile mode) */\n get IsMobileMode(): boolean {\n return typeof window !== 'undefined' && window.innerWidth <= this.MOBILE_BREAKPOINT;\n }\n\n /** Subject for debounced width persistence */\n private widthPersistSubject = new Subject<number>();\n\n private destroy$ = new Subject<void>();\n private gqlProvider = GraphQLDataProvider.Instance;\n\n constructor(\n private cdr: ChangeDetectorRef,\n private elementRef: ElementRef\n ) {\n // Debounce width persistence to avoid excessive writes\n this.widthPersistSubject.pipe(\n debounceTime(500),\n takeUntil(this.destroy$)\n ).subscribe(width => {\n this.persistPanelWidth(width);\n });\n }\n\n ngOnInit(): void {\n // Load saved panel width\n this.loadSavedPanelWidth();\n\n // Initialize display arrays\n this.DisplayServers = [...this.Servers];\n\n // Apply pre-selected values\n if (this.SelectedServerID) {\n this.ServerID = this.SelectedServerID;\n this.onServerChange();\n }\n if (this.SelectedConnectionID) {\n this.ConnectionID = this.SelectedConnectionID;\n this.onConnectionChange();\n }\n if (this.SelectedToolID) {\n this.ToolID = this.SelectedToolID;\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n // ========================================\n // Selection Handlers\n // ========================================\n\n onServerChange(): void {\n this.NoConnectionsWarning = null;\n\n // Filter connections by selected server\n if (this.ServerID) {\n this.FilteredConnections = this.Connections.filter(\n c => c.MCPServerID === this.ServerID && c.Status === 'Active'\n );\n // Filter tools by selected server\n this.FilteredTools = this.Tools.filter(\n t => t.MCPServerID === this.ServerID && t.Status === 'Active'\n );\n\n // Check if server requires authentication\n const server = this.Servers.find(s => s.ID === this.ServerID);\n const serverRequiresAuth = server?.Status === 'Active'; // All servers currently need connections\n\n // Auto-select connection logic\n if (this.FilteredConnections.length === 0) {\n this.ConnectionID = null;\n if (serverRequiresAuth) {\n this.NoConnectionsWarning = 'No active connections available for this server. Please create a connection first.';\n }\n } else if (this.FilteredConnections.length === 1) {\n // Auto-select the only connection\n this.ConnectionID = this.FilteredConnections[0].ID;\n } else {\n // Select the first connection by default\n this.ConnectionID = this.FilteredConnections[0].ID;\n }\n } else {\n this.FilteredConnections = [];\n this.FilteredTools = [];\n this.ConnectionID = null;\n }\n\n // Update display arrays for filtering\n this.DisplayConnections = [...this.FilteredConnections];\n this.DisplayTools = [...this.FilteredTools];\n\n // Reset tool selection\n this.ToolID = null;\n this.cdr.detectChanges();\n }\n\n onConnectionChange(): void {\n // Connection changed - tools are filtered by server, not connection\n this.cdr.detectChanges();\n }\n\n onToolChange(): void {\n this.cdr.detectChanges();\n }\n\n // ========================================\n // Dropdown Filter Handlers\n // ========================================\n\n /**\n * Handle server dropdown filter change\n */\n onServerFilterChange(filter: string): void {\n const filterLower = (filter || '').toLowerCase();\n this.DisplayServers = this.Servers.filter(s =>\n s.Name.toLowerCase().includes(filterLower) ||\n (s.Description?.toLowerCase().includes(filterLower) ?? false)\n );\n }\n\n /**\n * Handle connection dropdown filter change\n */\n onConnectionFilterChange(filter: string): void {\n const filterLower = (filter || '').toLowerCase();\n this.DisplayConnections = this.FilteredConnections.filter(c =>\n c.Name.toLowerCase().includes(filterLower) ||\n (c.Description?.toLowerCase().includes(filterLower) ?? false)\n );\n }\n\n /**\n * Handle tool dropdown filter change\n */\n onToolFilterChange(filter: string): void {\n const filterLower = (filter || '').toLowerCase();\n this.DisplayTools = this.FilteredTools.filter(t =>\n t.ToolName.toLowerCase().includes(filterLower) ||\n (t.ToolTitle?.toLowerCase().includes(filterLower) ?? false) ||\n (t.ToolDescription?.toLowerCase().includes(filterLower) ?? false)\n );\n }\n\n /**\n * Can proceed to configuration step\n */\n get CanProceedToConfig(): boolean {\n return this.ServerID != null && this.ConnectionID != null && this.ToolID != null;\n }\n\n /**\n * Proceed to configuration step\n */\n async proceedToConfig(): Promise<void> {\n if (!this.CanProceedToConfig) return;\n\n this.SelectedTool = this.Tools.find(t => t.ID === this.ToolID) || null;\n if (!this.SelectedTool) return;\n\n // Parse input schema and create parameter configs\n this.parseInputSchema();\n\n // Load cached parameter values\n await this.loadCachedParameters();\n\n this.CurrentStep = 'configure';\n this.cdr.detectChanges();\n }\n\n /**\n * Parse the tool's input schema to create parameter configurations\n */\n private parseInputSchema(): void {\n if (!this.SelectedTool?.InputSchema) {\n this.ParameterConfigs = [];\n return;\n }\n\n try {\n const schema: JsonSchema = JSON.parse(this.SelectedTool.InputSchema);\n const properties = schema.properties || {};\n const required = schema.required || [];\n\n this.ParameterConfigs = Object.entries(properties).map(([name, prop]) => {\n const propDef = prop as JsonSchemaProperty;\n return {\n name,\n type: this.normalizeType(propDef.type),\n description: propDef.description || '',\n required: required.includes(name),\n defaultValue: propDef.default,\n enumValues: propDef.enum || [],\n format: propDef.format || null,\n minimum: propDef.minimum,\n maximum: propDef.maximum\n };\n });\n\n // Sort: required first, then alphabetically\n this.ParameterConfigs.sort((a, b) => {\n if (a.required !== b.required) return a.required ? -1 : 1;\n return a.name.localeCompare(b.name);\n });\n\n // Initialize parameter values with defaults\n this.ParameterValues = {};\n for (const config of this.ParameterConfigs) {\n if (config.defaultValue !== undefined) {\n this.ParameterValues[config.name] = config.defaultValue;\n } else {\n this.ParameterValues[config.name] = this.getDefaultForType(config.type);\n }\n }\n } catch (error) {\n console.error('Failed to parse input schema:', error);\n this.ParameterConfigs = [];\n }\n }\n\n /**\n * Normalize JSON Schema type to string\n */\n private normalizeType(type: string | string[] | undefined): string {\n if (!type) return 'string';\n if (Array.isArray(type)) {\n // Filter out 'null' and take first type\n const nonNull = type.filter(t => t !== 'null');\n return nonNull.length > 0 ? nonNull[0] : 'string';\n }\n return type;\n }\n\n /**\n * Get default value for a type\n */\n private getDefaultForType(type: string): unknown {\n switch (type) {\n case 'string': return '';\n case 'number':\n case 'integer': return null;\n case 'boolean': return false;\n case 'array': return [];\n case 'object': return {};\n default: return '';\n }\n }\n\n /**\n * Load cached parameter values from UserInfoEngine\n */\n private async loadCachedParameters(): Promise<void> {\n if (!this.SelectedTool) return;\n\n const settingKey = this.getSettingKey();\n const engine = UserInfoEngine.Instance;\n const cachedValue = engine.GetSetting(settingKey);\n\n if (cachedValue) {\n try {\n const cached = JSON.parse(cachedValue);\n // Merge cached values with defaults (cached takes precedence)\n this.ParameterValues = { ...this.ParameterValues, ...cached };\n } catch (error) {\n console.warn('Failed to parse cached parameters:', error);\n }\n }\n }\n\n /**\n * Save current parameter values to cache\n */\n private async saveCachedParameters(): Promise<void> {\n if (!this.SelectedTool) return;\n\n const settingKey = this.getSettingKey();\n const engine = UserInfoEngine.Instance;\n\n try {\n await engine.SetSetting(settingKey, JSON.stringify(this.ParameterValues));\n } catch (error) {\n console.warn('Failed to save cached parameters:', error);\n }\n }\n\n /**\n * Get the setting key for caching parameters\n */\n private getSettingKey(): string {\n return `${this.SETTINGS_PREFIX}${this.ServerID}/${this.ToolID}`;\n }\n\n // ========================================\n // Parameter Input Helpers\n // ========================================\n\n /**\n * Get input type for a parameter\n */\n getInputType(config: ParameterConfig): string {\n if (config.enumValues.length > 0) return 'select';\n if (config.format === 'date') return 'date';\n if (config.format === 'date-time') return 'datetime-local';\n if (config.format === 'email') return 'email';\n if (config.format === 'uri' || config.format === 'url') return 'url';\n\n switch (config.type) {\n case 'boolean': return 'checkbox';\n case 'integer':\n case 'number': return 'number';\n case 'array':\n case 'object': return 'textarea';\n default: return 'text';\n }\n }\n\n /**\n * Check if parameter should use textarea\n */\n isTextarea(config: ParameterConfig): boolean {\n return config.type === 'array' || config.type === 'object' ||\n (config.description != null && config.description.length > 100);\n }\n\n /**\n * Handle parameter value change\n */\n onParameterChange(name: string, value: unknown): void {\n this.ParameterValues[name] = value;\n }\n\n /**\n * Get parameter value as string for textarea display\n */\n getTextareaValue(name: string): string {\n const value = this.ParameterValues[name];\n if (value === null || value === undefined) return '';\n if (typeof value === 'object') return JSON.stringify(value, null, 2);\n return String(value);\n }\n\n /**\n * Handle textarea change - parse JSON if needed\n */\n onTextareaChange(name: string, value: string, config: ParameterConfig): void {\n if (config.type === 'array' || config.type === 'object') {\n try {\n this.ParameterValues[name] = JSON.parse(value || (config.type === 'array' ? '[]' : '{}'));\n } catch {\n // Keep as string if not valid JSON\n this.ParameterValues[name] = value;\n }\n } else {\n this.ParameterValues[name] = value;\n }\n }\n\n // ========================================\n // Execution\n // ========================================\n\n /**\n * Validate that all required parameters have values\n */\n get IsValid(): boolean {\n for (const config of this.ParameterConfigs) {\n if (config.required) {\n const value = this.ParameterValues[config.name];\n if (value === null || value === undefined || value === '') {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * Execute the tool\n */\n async executeTool(): Promise<void> {\n if (!this.IsValid || !this.ConnectionID || !this.ToolID) return;\n\n this.IsExecuting = true;\n this.ExecutionError = null;\n this.cdr.detectChanges();\n\n // Save parameters before execution\n await this.saveCachedParameters();\n\n // Build input arguments, filtering out empty optional values\n const inputArgs: Record<string, unknown> = {};\n for (const config of this.ParameterConfigs) {\n const value = this.ParameterValues[config.name];\n if (config.required || (value !== null && value !== undefined && value !== '')) {\n inputArgs[config.name] = value;\n }\n }\n\n try {\n const result = await this.gqlProvider.ExecuteGQL(ExecuteMCPToolMutation, {\n input: {\n ConnectionID: this.ConnectionID,\n ToolID: this.ToolID,\n ToolName: this.SelectedTool?.ToolName,\n InputArgs: JSON.stringify(inputArgs)\n }\n });\n\n this.ExecutionResult = result?.ExecuteMCPTool || {\n Success: false,\n ErrorMessage: 'No result returned from server'\n };\n\n this.CurrentStep = 'results';\n } catch (error) {\n this.ExecutionError = error instanceof Error ? error.message : String(error);\n this.ExecutionResult = {\n Success: false,\n ErrorMessage: this.ExecutionError\n };\n this.CurrentStep = 'results';\n } finally {\n this.IsExecuting = false;\n this.cdr.detectChanges();\n }\n }\n\n // ========================================\n // Results Helpers\n // ========================================\n\n /**\n * Format the result for display\n */\n get FormattedResult(): string {\n if (!this.ExecutionResult?.Result) return '';\n\n try {\n if (typeof this.ExecutionResult.Result === 'string') {\n // Try to parse as JSON for pretty printing\n const parsed = JSON.parse(this.ExecutionResult.Result);\n return JSON.stringify(parsed, null, 2);\n }\n return JSON.stringify(this.ExecutionResult.Result, null, 2);\n } catch {\n return String(this.ExecutionResult.Result);\n }\n }\n\n /**\n * Check if result is JSON\n */\n get IsResultJson(): boolean {\n if (!this.ExecutionResult?.Result) return false;\n try {\n if (typeof this.ExecutionResult.Result === 'string') {\n JSON.parse(this.ExecutionResult.Result);\n }\n return typeof this.ExecutionResult.Result === 'object';\n } catch {\n return false;\n }\n }\n\n /**\n * Copy result to clipboard\n */\n async copyResult(): Promise<void> {\n if (!this.FormattedResult) return;\n\n try {\n await navigator.clipboard.writeText(this.FormattedResult);\n } catch (error) {\n console.error('Failed to copy to clipboard:', error);\n }\n }\n\n // ========================================\n // Navigation\n // ========================================\n\n /**\n * Go back to previous step\n */\n goBack(): void {\n if (this.CurrentStep === 'results') {\n this.CurrentStep = 'configure';\n } else if (this.CurrentStep === 'configure') {\n this.CurrentStep = 'select';\n }\n this.cdr.detectChanges();\n }\n\n /**\n * Run the tool again with same parameters\n */\n async runAgain(): Promise<void> {\n this.CurrentStep = 'configure';\n this.ExecutionResult = null;\n this.ExecutionError = null;\n this.cdr.detectChanges();\n }\n\n /**\n * Close the dialog\n */\n closeDialog(): void {\n this.Close.emit();\n }\n\n // ========================================\n // Panel Resize Handlers\n // ========================================\n\n /**\n * Start resize operation\n */\n onResizeStart(event: MouseEvent): void {\n if (this.IsMobileMode) return; // No resize on mobile\n\n event.preventDefault();\n this.IsResizing = true;\n document.body.style.cursor = 'ew-resize';\n document.body.style.userSelect = 'none';\n }\n\n /**\n * Handle mouse move during resize\n */\n @HostListener('document:mousemove', ['$event'])\n onMouseMove(event: MouseEvent): void {\n if (!this.IsResizing) return;\n\n // Calculate width from right edge of viewport to cursor\n const newWidth = window.innerWidth - event.clientX;\n\n // Clamp to bounds\n this.PanelWidth = Math.min(\n Math.max(newWidth, this.MIN_PANEL_WIDTH),\n Math.min(this.MAX_PANEL_WIDTH, window.innerWidth - 50) // Leave 50px margin\n );\n\n this.cdr.detectChanges();\n }\n\n /**\n * End resize operation\n */\n @HostListener('document:mouseup')\n onMouseUp(): void {\n if (this.IsResizing) {\n this.IsResizing = false;\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n\n // Persist panel width (debounced)\n this.widthPersistSubject.next(this.PanelWidth);\n }\n }\n\n /**\n * Handle window resize for mobile mode\n */\n @HostListener('window:resize')\n onWindowResize(): void {\n // In mobile mode, always use full width\n if (this.IsMobileMode) {\n this.PanelWidth = window.innerWidth;\n } else {\n // Ensure panel doesn't exceed viewport\n if (this.PanelWidth > window.innerWidth - 50) {\n this.PanelWidth = Math.max(this.MIN_PANEL_WIDTH, window.innerWidth - 50);\n }\n }\n this.cdr.detectChanges();\n }\n\n /**\n * Load saved panel width from user settings\n */\n private loadSavedPanelWidth(): void {\n // In mobile mode, always use full width\n if (this.IsMobileMode) {\n this.PanelWidth = window.innerWidth;\n return;\n }\n\n try {\n const savedWidth = UserInfoEngine.Instance.GetSetting(this.PANEL_WIDTH_SETTING_KEY);\n if (savedWidth) {\n const width = parseInt(savedWidth, 10);\n if (!isNaN(width) && width >= this.MIN_PANEL_WIDTH && width <= this.MAX_PANEL_WIDTH) {\n this.PanelWidth = width;\n }\n }\n } catch (error) {\n console.warn('[MCPTestToolPanel] Failed to load saved panel width:', error);\n }\n }\n\n /**\n * Persist panel width to user settings\n */\n private async persistPanelWidth(width: number): Promise<void> {\n try {\n await UserInfoEngine.Instance.SetSetting(this.PANEL_WIDTH_SETTING_KEY, String(width));\n } catch (error) {\n console.warn('[MCPTestToolPanel] Failed to persist panel width:', error);\n }\n }\n\n /**\n * Get display name for selected server\n */\n get SelectedServerName(): string {\n const server = this.Servers.find(s => s.ID === this.ServerID);\n return server?.Name || '';\n }\n\n /**\n * Get display name for selected connection\n */\n get SelectedConnectionName(): string {\n const connection = this.Connections.find(c => c.ID === this.ConnectionID);\n return connection?.Name || '';\n }\n\n /**\n * Get display name for selected tool\n */\n get SelectedToolName(): string {\n return this.SelectedTool?.ToolTitle || this.SelectedTool?.ToolName || '';\n }\n}\n","<!-- Backdrop -->\n@if (Visible) {\n <div class=\"panel-backdrop\" (click)=\"closeDialog()\"></div>\n}\n\n<!-- Slide-out Panel -->\n@if (Visible) {\n <div class=\"slide-out-panel\"\n @slideIn\n [style.width.px]=\"IsMobileMode ? null : PanelWidth\"\n [class.mobile]=\"IsMobileMode\"\n [class.resizing]=\"IsResizing\">\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 <!-- 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 <!-- 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 <!-- Panel Content -->\n <div class=\"panel-content\">\n <!-- Step 1: Select Server, Connection, Tool -->\n @if (CurrentStep === 'select') {\n <div class=\"step-content\">\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 <!-- 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 <!-- 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 @if (CurrentStep === 'configure') {\n <div class=\"step-content\">\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 @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 <!-- 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@if (CurrentStep === 'results') {\n <div class=\"step-content results-step\">\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 <!-- 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 <!-- 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 <!-- 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}\n</div>\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}\n"]}
1
+ {"version":3,"file":"mcp-test-tool-dialog.component.js","sourceRoot":"","sources":["../../../src/MCP/components/mcp-test-tool-dialog.component.ts","../../../src/MCP/components/mcp-test-tool-dialog.component.html"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview MCP Test Tool Slide-Out Panel Component\n *\n * Provides a beautiful UX for testing MCP tools with:\n * - Server/Connection/Tool selection\n * - Dynamic parameter input UI based on JSON Schema\n * - Tool execution with results display\n * - User settings caching via UserInfoEngine\n * - Resizable slide-out panel with width persistence\n */\n\nimport { Component, Input, Output, EventEmitter, OnInit, OnDestroy, ChangeDetectorRef, HostListener, ElementRef } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { debounceTime, takeUntil } from 'rxjs/operators';\nimport { trigger, transition, style, animate } from '@angular/animations';\nimport { GraphQLDataProvider, gql } from '@memberjunction/graphql-dataprovider';\nimport { UserInfoEngine } from '@memberjunction/core-entities';\nimport { UUIDsEqual } from '@memberjunction/global';\n\n/**\n * Interface for JSON Schema property definition\n */\ninterface JsonSchemaProperty {\n type?: string | string[];\n description?: string;\n default?: unknown;\n enum?: unknown[];\n required?: boolean;\n items?: JsonSchemaProperty;\n properties?: Record<string, JsonSchemaProperty>;\n format?: string;\n minimum?: number;\n maximum?: number;\n minLength?: number;\n maxLength?: number;\n}\n\n/**\n * Interface for JSON Schema\n */\ninterface JsonSchema {\n type?: string;\n properties?: Record<string, JsonSchemaProperty>;\n required?: string[];\n description?: string;\n}\n\n/**\n * Parameter input configuration derived from schema\n */\ninterface ParameterConfig {\n name: string;\n type: string;\n description: string;\n required: boolean;\n defaultValue: unknown;\n enumValues: unknown[];\n format: string | null;\n minimum?: number;\n maximum?: number;\n}\n\n/**\n * Tool execution result\n */\ninterface ToolExecutionResult {\n Success: boolean;\n ErrorMessage?: string;\n Result?: unknown;\n DurationMs?: number;\n}\n\n/**\n * Server data for selection\n */\nexport interface TestToolServerData {\n ID: string;\n Name: string;\n Description: string | null;\n Status: string;\n}\n\n/**\n * Connection data for selection\n */\nexport interface TestToolConnectionData {\n ID: string;\n MCPServerID: string;\n ServerName?: string;\n Name: string;\n Description: string | null;\n Status: string;\n}\n\n/**\n * Tool data for selection\n */\nexport interface TestToolData {\n ID: string;\n MCPServerID: string;\n ServerName?: string;\n ToolName: string;\n ToolTitle: string | null;\n ToolDescription: string | null;\n InputSchema: string;\n Status: string;\n}\n\n/**\n * GraphQL mutation for executing MCP tool\n */\nconst ExecuteMCPToolMutation = gql`\n mutation ExecuteMCPTool($input: ExecuteMCPToolInput!) {\n ExecuteMCPTool(input: $input) {\n Success\n ErrorMessage\n Result\n DurationMs\n }\n }\n`;\n\n@Component({\n standalone: false,\n selector: 'mj-mcp-test-tool-dialog',\n templateUrl: './mcp-test-tool-dialog.component.html',\n styleUrls: ['./mcp-test-tool-dialog.component.css'],\n animations: [\n trigger('slideIn', [\n transition(':enter', [\n style({ transform: 'translateX(100%)', opacity: 0 }),\n animate('250ms ease-out', style({ transform: 'translateX(0)', opacity: 1 }))\n ]),\n transition(':leave', [\n animate('200ms ease-in', style({ transform: 'translateX(100%)', opacity: 0 }))\n ])\n ])\n ]\n})\nexport class MCPTestToolDialogComponent implements OnInit, OnDestroy {\n\n // ========================================\n // Inputs\n // ========================================\n\n @Input() Visible = false;\n @Input() Servers: TestToolServerData[] = [];\n @Input() Connections: TestToolConnectionData[] = [];\n @Input() Tools: TestToolData[] = [];\n\n /** Pre-selected server ID */\n @Input() SelectedServerID: string | null = null;\n\n /** Pre-selected connection ID */\n @Input() SelectedConnectionID: string | null = null;\n\n /** Pre-selected tool ID */\n @Input() SelectedToolID: string | null = null;\n\n // ========================================\n // Outputs\n // ========================================\n\n @Output() Close = new EventEmitter<void>();\n\n // ========================================\n // State\n // ========================================\n\n /** Current step: 'select' | 'configure' | 'results' */\n CurrentStep: 'select' | 'configure' | 'results' = 'select';\n\n /** Selected IDs */\n ServerID: string | null = null;\n ConnectionID: string | null = null;\n ToolID: string | null = null;\n\n /** Filtered lists based on selection */\n FilteredConnections: TestToolConnectionData[] = [];\n FilteredTools: TestToolData[] = [];\n\n /** Display lists for dropdowns (filtered by search) */\n DisplayServers: TestToolServerData[] = [];\n DisplayConnections: TestToolConnectionData[] = [];\n DisplayTools: TestToolData[] = [];\n\n /** No connections warning */\n NoConnectionsWarning: string | null = null;\n\n /** Selected tool details */\n SelectedTool: TestToolData | null = null;\n ParameterConfigs: ParameterConfig[] = [];\n ParameterValues: Record<string, unknown> = {};\n\n /** Execution state */\n IsExecuting = false;\n ExecutionResult: ToolExecutionResult | null = null;\n ExecutionError: string | null = null;\n\n /** User settings key prefix */\n private readonly SETTINGS_PREFIX = 'mcp-tool-test/';\n\n // ========================================\n // Panel Width / Resize State\n // ========================================\n\n /** Panel width settings key */\n private readonly PANEL_WIDTH_SETTING_KEY = 'mcp-test-tool-panel/width';\n\n /** Panel width constraints */\n private readonly MIN_PANEL_WIDTH = 320;\n private readonly MAX_PANEL_WIDTH = 900;\n private readonly DEFAULT_PANEL_WIDTH = 700;\n private readonly MOBILE_BREAKPOINT = 768;\n\n /** Current panel width in pixels */\n PanelWidth: number = this.DEFAULT_PANEL_WIDTH;\n\n /** Whether user is currently resizing */\n IsResizing = false;\n\n /** Whether panel should be full-width (mobile mode) */\n get IsMobileMode(): boolean {\n return typeof window !== 'undefined' && window.innerWidth <= this.MOBILE_BREAKPOINT;\n }\n\n /** Subject for debounced width persistence */\n private widthPersistSubject = new Subject<number>();\n\n private destroy$ = new Subject<void>();\n private gqlProvider = GraphQLDataProvider.Instance;\n\n constructor(\n private cdr: ChangeDetectorRef,\n private elementRef: ElementRef\n ) {\n // Debounce width persistence to avoid excessive writes\n this.widthPersistSubject.pipe(\n debounceTime(500),\n takeUntil(this.destroy$)\n ).subscribe(width => {\n this.persistPanelWidth(width);\n });\n }\n\n ngOnInit(): void {\n // Load saved panel width\n this.loadSavedPanelWidth();\n\n // Initialize display arrays\n this.DisplayServers = [...this.Servers];\n\n // Apply pre-selected values\n if (this.SelectedServerID) {\n this.ServerID = this.SelectedServerID;\n this.onServerChange();\n }\n if (this.SelectedConnectionID) {\n this.ConnectionID = this.SelectedConnectionID;\n this.onConnectionChange();\n }\n if (this.SelectedToolID) {\n this.ToolID = this.SelectedToolID;\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n // ========================================\n // Selection Handlers\n // ========================================\n\n onServerChange(): void {\n this.NoConnectionsWarning = null;\n\n // Filter connections by selected server\n if (this.ServerID) {\n this.FilteredConnections = this.Connections.filter(\n c => UUIDsEqual(c.MCPServerID, this.ServerID) && c.Status === 'Active'\n );\n // Filter tools by selected server\n this.FilteredTools = this.Tools.filter(\n t => UUIDsEqual(t.MCPServerID, this.ServerID) && t.Status === 'Active'\n );\n\n // Check if server requires authentication\n const server = this.Servers.find(s => UUIDsEqual(s.ID, this.ServerID));\n const serverRequiresAuth = server?.Status === 'Active'; // All servers currently need connections\n\n // Auto-select connection logic\n if (this.FilteredConnections.length === 0) {\n this.ConnectionID = null;\n if (serverRequiresAuth) {\n this.NoConnectionsWarning = 'No active connections available for this server. Please create a connection first.';\n }\n } else if (this.FilteredConnections.length === 1) {\n // Auto-select the only connection\n this.ConnectionID = this.FilteredConnections[0].ID;\n } else {\n // Select the first connection by default\n this.ConnectionID = this.FilteredConnections[0].ID;\n }\n } else {\n this.FilteredConnections = [];\n this.FilteredTools = [];\n this.ConnectionID = null;\n }\n\n // Update display arrays for filtering\n this.DisplayConnections = [...this.FilteredConnections];\n this.DisplayTools = [...this.FilteredTools];\n\n // Reset tool selection\n this.ToolID = null;\n this.cdr.detectChanges();\n }\n\n onConnectionChange(): void {\n // Connection changed - tools are filtered by server, not connection\n this.cdr.detectChanges();\n }\n\n onToolChange(): void {\n this.cdr.detectChanges();\n }\n\n // ========================================\n // Dropdown Filter Handlers\n // ========================================\n\n /**\n * Handle server dropdown filter change\n */\n onServerFilterChange(filter: string): void {\n const filterLower = (filter || '').toLowerCase();\n this.DisplayServers = this.Servers.filter(s =>\n s.Name.toLowerCase().includes(filterLower) ||\n (s.Description?.toLowerCase().includes(filterLower) ?? false)\n );\n }\n\n /**\n * Handle connection dropdown filter change\n */\n onConnectionFilterChange(filter: string): void {\n const filterLower = (filter || '').toLowerCase();\n this.DisplayConnections = this.FilteredConnections.filter(c =>\n c.Name.toLowerCase().includes(filterLower) ||\n (c.Description?.toLowerCase().includes(filterLower) ?? false)\n );\n }\n\n /**\n * Handle tool dropdown filter change\n */\n onToolFilterChange(filter: string): void {\n const filterLower = (filter || '').toLowerCase();\n this.DisplayTools = this.FilteredTools.filter(t =>\n t.ToolName.toLowerCase().includes(filterLower) ||\n (t.ToolTitle?.toLowerCase().includes(filterLower) ?? false) ||\n (t.ToolDescription?.toLowerCase().includes(filterLower) ?? false)\n );\n }\n\n /**\n * Can proceed to configuration step\n */\n get CanProceedToConfig(): boolean {\n return this.ServerID != null && this.ConnectionID != null && this.ToolID != null;\n }\n\n /**\n * Proceed to configuration step\n */\n async proceedToConfig(): Promise<void> {\n if (!this.CanProceedToConfig) return;\n\n this.SelectedTool = this.Tools.find(t => UUIDsEqual(t.ID, this.ToolID)) || null;\n if (!this.SelectedTool) return;\n\n // Parse input schema and create parameter configs\n this.parseInputSchema();\n\n // Load cached parameter values\n await this.loadCachedParameters();\n\n this.CurrentStep = 'configure';\n this.cdr.detectChanges();\n }\n\n /**\n * Parse the tool's input schema to create parameter configurations\n */\n private parseInputSchema(): void {\n if (!this.SelectedTool?.InputSchema) {\n this.ParameterConfigs = [];\n return;\n }\n\n try {\n const schema: JsonSchema = JSON.parse(this.SelectedTool.InputSchema);\n const properties = schema.properties || {};\n const required = schema.required || [];\n\n this.ParameterConfigs = Object.entries(properties).map(([name, prop]) => {\n const propDef = prop as JsonSchemaProperty;\n return {\n name,\n type: this.normalizeType(propDef.type),\n description: propDef.description || '',\n required: required.includes(name),\n defaultValue: propDef.default,\n enumValues: propDef.enum || [],\n format: propDef.format || null,\n minimum: propDef.minimum,\n maximum: propDef.maximum\n };\n });\n\n // Sort: required first, then alphabetically\n this.ParameterConfigs.sort((a, b) => {\n if (a.required !== b.required) return a.required ? -1 : 1;\n return a.name.localeCompare(b.name);\n });\n\n // Initialize parameter values with defaults\n this.ParameterValues = {};\n for (const config of this.ParameterConfigs) {\n if (config.defaultValue !== undefined) {\n this.ParameterValues[config.name] = config.defaultValue;\n } else {\n this.ParameterValues[config.name] = this.getDefaultForType(config.type);\n }\n }\n } catch (error) {\n console.error('Failed to parse input schema:', error);\n this.ParameterConfigs = [];\n }\n }\n\n /**\n * Normalize JSON Schema type to string\n */\n private normalizeType(type: string | string[] | undefined): string {\n if (!type) return 'string';\n if (Array.isArray(type)) {\n // Filter out 'null' and take first type\n const nonNull = type.filter(t => t !== 'null');\n return nonNull.length > 0 ? nonNull[0] : 'string';\n }\n return type;\n }\n\n /**\n * Get default value for a type\n */\n private getDefaultForType(type: string): unknown {\n switch (type) {\n case 'string': return '';\n case 'number':\n case 'integer': return null;\n case 'boolean': return false;\n case 'array': return [];\n case 'object': return {};\n default: return '';\n }\n }\n\n /**\n * Load cached parameter values from UserInfoEngine\n */\n private async loadCachedParameters(): Promise<void> {\n if (!this.SelectedTool) return;\n\n const settingKey = this.getSettingKey();\n const engine = UserInfoEngine.Instance;\n const cachedValue = engine.GetSetting(settingKey);\n\n if (cachedValue) {\n try {\n const cached = JSON.parse(cachedValue);\n // Merge cached values with defaults (cached takes precedence)\n this.ParameterValues = { ...this.ParameterValues, ...cached };\n } catch (error) {\n console.warn('Failed to parse cached parameters:', error);\n }\n }\n }\n\n /**\n * Save current parameter values to cache\n */\n private async saveCachedParameters(): Promise<void> {\n if (!this.SelectedTool) return;\n\n const settingKey = this.getSettingKey();\n const engine = UserInfoEngine.Instance;\n\n try {\n await engine.SetSetting(settingKey, JSON.stringify(this.ParameterValues));\n } catch (error) {\n console.warn('Failed to save cached parameters:', error);\n }\n }\n\n /**\n * Get the setting key for caching parameters\n */\n private getSettingKey(): string {\n return `${this.SETTINGS_PREFIX}${this.ServerID}/${this.ToolID}`;\n }\n\n // ========================================\n // Parameter Input Helpers\n // ========================================\n\n /**\n * Get input type for a parameter\n */\n getInputType(config: ParameterConfig): string {\n if (config.enumValues.length > 0) return 'select';\n if (config.format === 'date') return 'date';\n if (config.format === 'date-time') return 'datetime-local';\n if (config.format === 'email') return 'email';\n if (config.format === 'uri' || config.format === 'url') return 'url';\n\n switch (config.type) {\n case 'boolean': return 'checkbox';\n case 'integer':\n case 'number': return 'number';\n case 'array':\n case 'object': return 'textarea';\n default: return 'text';\n }\n }\n\n /**\n * Check if parameter should use textarea\n */\n isTextarea(config: ParameterConfig): boolean {\n return config.type === 'array' || config.type === 'object' ||\n (config.description != null && config.description.length > 100);\n }\n\n /**\n * Handle parameter value change\n */\n onParameterChange(name: string, value: unknown): void {\n this.ParameterValues[name] = value;\n }\n\n /**\n * Get parameter value as string for textarea display\n */\n getTextareaValue(name: string): string {\n const value = this.ParameterValues[name];\n if (value === null || value === undefined) return '';\n if (typeof value === 'object') return JSON.stringify(value, null, 2);\n return String(value);\n }\n\n /**\n * Handle textarea change - parse JSON if needed\n */\n onTextareaChange(name: string, value: string, config: ParameterConfig): void {\n if (config.type === 'array' || config.type === 'object') {\n try {\n this.ParameterValues[name] = JSON.parse(value || (config.type === 'array' ? '[]' : '{}'));\n } catch {\n // Keep as string if not valid JSON\n this.ParameterValues[name] = value;\n }\n } else {\n this.ParameterValues[name] = value;\n }\n }\n\n // ========================================\n // Execution\n // ========================================\n\n /**\n * Validate that all required parameters have values\n */\n get IsValid(): boolean {\n for (const config of this.ParameterConfigs) {\n if (config.required) {\n const value = this.ParameterValues[config.name];\n if (value === null || value === undefined || value === '') {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * Execute the tool\n */\n async executeTool(): Promise<void> {\n if (!this.IsValid || !this.ConnectionID || !this.ToolID) return;\n\n this.IsExecuting = true;\n this.ExecutionError = null;\n this.cdr.detectChanges();\n\n // Save parameters before execution\n await this.saveCachedParameters();\n\n // Build input arguments, filtering out empty optional values\n const inputArgs: Record<string, unknown> = {};\n for (const config of this.ParameterConfigs) {\n const value = this.ParameterValues[config.name];\n if (config.required || (value !== null && value !== undefined && value !== '')) {\n inputArgs[config.name] = value;\n }\n }\n\n try {\n const result = await this.gqlProvider.ExecuteGQL(ExecuteMCPToolMutation, {\n input: {\n ConnectionID: this.ConnectionID,\n ToolID: this.ToolID,\n ToolName: this.SelectedTool?.ToolName,\n InputArgs: JSON.stringify(inputArgs)\n }\n });\n\n this.ExecutionResult = result?.ExecuteMCPTool || {\n Success: false,\n ErrorMessage: 'No result returned from server'\n };\n\n this.CurrentStep = 'results';\n } catch (error) {\n this.ExecutionError = error instanceof Error ? error.message : String(error);\n this.ExecutionResult = {\n Success: false,\n ErrorMessage: this.ExecutionError\n };\n this.CurrentStep = 'results';\n } finally {\n this.IsExecuting = false;\n this.cdr.detectChanges();\n }\n }\n\n // ========================================\n // Results Helpers\n // ========================================\n\n /**\n * Format the result for display\n */\n get FormattedResult(): string {\n if (!this.ExecutionResult?.Result) return '';\n\n try {\n if (typeof this.ExecutionResult.Result === 'string') {\n // Try to parse as JSON for pretty printing\n const parsed = JSON.parse(this.ExecutionResult.Result);\n return JSON.stringify(parsed, null, 2);\n }\n return JSON.stringify(this.ExecutionResult.Result, null, 2);\n } catch {\n return String(this.ExecutionResult.Result);\n }\n }\n\n /**\n * Check if result is JSON\n */\n get IsResultJson(): boolean {\n if (!this.ExecutionResult?.Result) return false;\n try {\n if (typeof this.ExecutionResult.Result === 'string') {\n JSON.parse(this.ExecutionResult.Result);\n }\n return typeof this.ExecutionResult.Result === 'object';\n } catch {\n return false;\n }\n }\n\n /**\n * Copy result to clipboard\n */\n async copyResult(): Promise<void> {\n if (!this.FormattedResult) return;\n\n try {\n await navigator.clipboard.writeText(this.FormattedResult);\n } catch (error) {\n console.error('Failed to copy to clipboard:', error);\n }\n }\n\n // ========================================\n // Navigation\n // ========================================\n\n /**\n * Go back to previous step\n */\n goBack(): void {\n if (this.CurrentStep === 'results') {\n this.CurrentStep = 'configure';\n } else if (this.CurrentStep === 'configure') {\n this.CurrentStep = 'select';\n }\n this.cdr.detectChanges();\n }\n\n /**\n * Run the tool again with same parameters\n */\n async runAgain(): Promise<void> {\n this.CurrentStep = 'configure';\n this.ExecutionResult = null;\n this.ExecutionError = null;\n this.cdr.detectChanges();\n }\n\n /**\n * Close the dialog\n */\n closeDialog(): void {\n this.Close.emit();\n }\n\n // ========================================\n // Panel Resize Handlers\n // ========================================\n\n /**\n * Start resize operation\n */\n onResizeStart(event: MouseEvent): void {\n if (this.IsMobileMode) return; // No resize on mobile\n\n event.preventDefault();\n this.IsResizing = true;\n document.body.style.cursor = 'ew-resize';\n document.body.style.userSelect = 'none';\n }\n\n /**\n * Handle mouse move during resize\n */\n @HostListener('document:mousemove', ['$event'])\n onMouseMove(event: MouseEvent): void {\n if (!this.IsResizing) return;\n\n // Calculate width from right edge of viewport to cursor\n const newWidth = window.innerWidth - event.clientX;\n\n // Clamp to bounds\n this.PanelWidth = Math.min(\n Math.max(newWidth, this.MIN_PANEL_WIDTH),\n Math.min(this.MAX_PANEL_WIDTH, window.innerWidth - 50) // Leave 50px margin\n );\n\n this.cdr.detectChanges();\n }\n\n /**\n * End resize operation\n */\n @HostListener('document:mouseup')\n onMouseUp(): void {\n if (this.IsResizing) {\n this.IsResizing = false;\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n\n // Persist panel width (debounced)\n this.widthPersistSubject.next(this.PanelWidth);\n }\n }\n\n /**\n * Handle window resize for mobile mode\n */\n @HostListener('window:resize')\n onWindowResize(): void {\n // In mobile mode, always use full width\n if (this.IsMobileMode) {\n this.PanelWidth = window.innerWidth;\n } else {\n // Ensure panel doesn't exceed viewport\n if (this.PanelWidth > window.innerWidth - 50) {\n this.PanelWidth = Math.max(this.MIN_PANEL_WIDTH, window.innerWidth - 50);\n }\n }\n this.cdr.detectChanges();\n }\n\n /**\n * Load saved panel width from user settings\n */\n private loadSavedPanelWidth(): void {\n // In mobile mode, always use full width\n if (this.IsMobileMode) {\n this.PanelWidth = window.innerWidth;\n return;\n }\n\n try {\n const savedWidth = UserInfoEngine.Instance.GetSetting(this.PANEL_WIDTH_SETTING_KEY);\n if (savedWidth) {\n const width = parseInt(savedWidth, 10);\n if (!isNaN(width) && width >= this.MIN_PANEL_WIDTH && width <= this.MAX_PANEL_WIDTH) {\n this.PanelWidth = width;\n }\n }\n } catch (error) {\n console.warn('[MCPTestToolPanel] Failed to load saved panel width:', error);\n }\n }\n\n /**\n * Persist panel width to user settings\n */\n private async persistPanelWidth(width: number): Promise<void> {\n try {\n await UserInfoEngine.Instance.SetSetting(this.PANEL_WIDTH_SETTING_KEY, String(width));\n } catch (error) {\n console.warn('[MCPTestToolPanel] Failed to persist panel width:', error);\n }\n }\n\n /**\n * Get display name for selected server\n */\n get SelectedServerName(): string {\n const server = this.Servers.find(s => UUIDsEqual(s.ID, this.ServerID));\n return server?.Name || '';\n }\n\n /**\n * Get display name for selected connection\n */\n get SelectedConnectionName(): string {\n const connection = this.Connections.find(c => UUIDsEqual(c.ID, this.ConnectionID));\n return connection?.Name || '';\n }\n\n /**\n * Get display name for selected tool\n */\n get SelectedToolName(): string {\n return this.SelectedTool?.ToolTitle || this.SelectedTool?.ToolName || '';\n }\n}\n","<!-- Backdrop -->\n@if (Visible) {\n <div class=\"panel-backdrop\" (click)=\"closeDialog()\"></div>\n}\n\n<!-- Slide-out Panel -->\n@if (Visible) {\n <div class=\"slide-out-panel\"\n @slideIn\n [style.width.px]=\"IsMobileMode ? null : PanelWidth\"\n [class.mobile]=\"IsMobileMode\"\n [class.resizing]=\"IsResizing\">\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 <!-- 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 <!-- 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 <!-- Panel Content -->\n <div class=\"panel-content\">\n <!-- Step 1: Select Server, Connection, Tool -->\n @if (CurrentStep === 'select') {\n <div class=\"step-content\">\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 <!-- 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 <!-- 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 @if (CurrentStep === 'configure') {\n <div class=\"step-content\">\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 @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 <!-- 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@if (CurrentStep === 'results') {\n <div class=\"step-content results-step\">\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 <!-- 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 <!-- 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 <!-- 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}\n</div>\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}\n"]}