@memberjunction/ng-dashboards 5.30.1 → 5.31.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-configuration.component.js +4 -4
- package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
- package/dist/AI/components/agents/agent-editor.component.d.ts +2 -1
- package/dist/AI/components/agents/agent-editor.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-editor.component.js +8 -6
- package/dist/AI/components/agents/agent-editor.component.js.map +1 -1
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts +2 -1
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js +6 -5
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts +2 -1
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.js +6 -5
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.js.map +1 -1
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts +2 -1
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.js +6 -5
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts +2 -1
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.js +7 -4
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.js.map +1 -1
- package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts +3 -2
- package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/model-performance/model-performance.component.js +10 -6
- package/dist/AI/components/analytics/model-performance/model-performance.component.js.map +1 -1
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts +2 -1
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js +6 -5
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts +2 -1
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js +6 -5
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +55 -52
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +15 -15
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
- package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
- package/dist/AI/components/execution-monitoring.component.js +4 -3
- package/dist/AI/components/execution-monitoring.component.js.map +1 -1
- package/dist/AI/components/models/model-management.component.js +2 -2
- package/dist/AI/components/models/model-management.component.js.map +1 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts +2 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +10 -8
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.js +2 -2
- package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-version-control.component.d.ts +2 -1
- package/dist/AI/components/prompts/prompt-version-control.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/prompt-version-control.component.js +13 -10
- package/dist/AI/components/prompts/prompt-version-control.component.js.map +1 -1
- package/dist/AI/components/requests/agent-requests-resource.component.js +1 -1
- package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.d.ts +1181 -0
- package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -0
- package/dist/AI/components/tags/tags-resource.component.js +7487 -0
- package/dist/AI/components/tags/tags-resource.component.js.map +1 -0
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.js +25 -21
- package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
- package/dist/AI/index.d.ts +1 -0
- package/dist/AI/index.d.ts.map +1 -1
- package/dist/AI/index.js +5 -0
- package/dist/AI/index.js.map +1 -1
- package/dist/AI/services/ai-instrumentation.service.d.ts +5 -0
- package/dist/AI/services/ai-instrumentation.service.d.ts.map +1 -1
- package/dist/AI/services/ai-instrumentation.service.js +12 -4
- package/dist/AI/services/ai-instrumentation.service.js.map +1 -1
- package/dist/APIKeys/api-applications-panel.component.d.ts +3 -2
- package/dist/APIKeys/api-applications-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-applications-panel.component.js +5 -4
- package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
- package/dist/APIKeys/api-key-create-dialog.component.d.ts +2 -1
- package/dist/APIKeys/api-key-create-dialog.component.d.ts.map +1 -1
- package/dist/APIKeys/api-key-create-dialog.component.js +5 -5
- package/dist/APIKeys/api-key-create-dialog.component.js.map +1 -1
- package/dist/APIKeys/api-key-edit-panel.component.d.ts +3 -2
- package/dist/APIKeys/api-key-edit-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-key-edit-panel.component.js +11 -10
- package/dist/APIKeys/api-key-edit-panel.component.js.map +1 -1
- package/dist/APIKeys/api-key-list.component.d.ts +2 -1
- package/dist/APIKeys/api-key-list.component.d.ts.map +1 -1
- package/dist/APIKeys/api-key-list.component.js +6 -5
- package/dist/APIKeys/api-key-list.component.js.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.d.ts.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.js +4 -4
- package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
- package/dist/APIKeys/api-scopes-panel.component.d.ts +3 -2
- package/dist/APIKeys/api-scopes-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-scopes-panel.component.js +8 -6
- package/dist/APIKeys/api-scopes-panel.component.js.map +1 -1
- package/dist/APIKeys/api-usage-panel.component.d.ts +3 -2
- package/dist/APIKeys/api-usage-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-usage-panel.component.js +10 -8
- package/dist/APIKeys/api-usage-panel.component.js.map +1 -1
- package/dist/Actions/components/actions-list-view.component.d.ts +2 -1
- package/dist/Actions/components/actions-list-view.component.d.ts.map +1 -1
- package/dist/Actions/components/actions-list-view.component.js +6 -5
- package/dist/Actions/components/actions-list-view.component.js.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +2 -2
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/categories-list-view.component.d.ts +2 -1
- package/dist/Actions/components/categories-list-view.component.d.ts.map +1 -1
- package/dist/Actions/components/categories-list-view.component.js +6 -5
- package/dist/Actions/components/categories-list-view.component.js.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.js +1 -1
- package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-card.component.d.ts +2 -1
- package/dist/Actions/components/explorer/action-card.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/action-card.component.js +6 -4
- package/dist/Actions/components/explorer/action-card.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.js +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
- package/dist/Actions/components/explorer/new-action-panel.component.d.ts +2 -1
- package/dist/Actions/components/explorer/new-action-panel.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/new-action-panel.component.js +7 -5
- package/dist/Actions/components/explorer/new-action-panel.component.js.map +1 -1
- package/dist/Actions/components/explorer/new-category-panel.component.d.ts +2 -1
- package/dist/Actions/components/explorer/new-category-panel.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/new-category-panel.component.js +7 -5
- package/dist/Actions/components/explorer/new-category-panel.component.js.map +1 -1
- package/dist/ApplicationRoles/application-roles-resource.component.js +4 -4
- package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
- package/dist/Communication/communication-logs-resource.component.js +1 -1
- package/dist/Communication/communication-logs-resource.component.js.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.js +1 -1
- package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
- package/dist/Communication/communication-providers-resource.component.js +3 -3
- package/dist/Communication/communication-providers-resource.component.js.map +1 -1
- package/dist/Communication/communication-runs-resource.component.js +1 -1
- package/dist/Communication/communication-runs-resource.component.js.map +1 -1
- package/dist/Communication/communication-templates-resource.component.js +3 -3
- package/dist/Communication/communication-templates-resource.component.js.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.d.ts +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.js +5 -4
- package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts +2 -1
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js +6 -4
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts +11 -2
- package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/artifact-load-dialog.component.js +61 -27
- package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts +4 -2
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +19 -11
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.d.ts +4 -2
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js +11 -3
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js.map +1 -1
- package/dist/ComponentStudio/components/workspace/component-preview.component.d.ts +10 -1
- package/dist/ComponentStudio/components/workspace/component-preview.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/workspace/component-preview.component.js +18 -9
- package/dist/ComponentStudio/components/workspace/component-preview.component.js.map +1 -1
- package/dist/ComponentStudio/services/component-studio-state.service.d.ts +11 -1
- package/dist/ComponentStudio/services/component-studio-state.service.d.ts.map +1 -1
- package/dist/ComponentStudio/services/component-studio-state.service.js +23 -3
- package/dist/ComponentStudio/services/component-studio-state.service.js.map +1 -1
- package/dist/ComponentStudio/services/component-version.service.d.ts +6 -1
- package/dist/ComponentStudio/services/component-version.service.d.ts.map +1 -1
- package/dist/ComponentStudio/services/component-version.service.js +16 -6
- package/dist/ComponentStudio/services/component-version.service.js.map +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.js +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.js +3 -3
- package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.js +3 -3
- package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-overview-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-overview-resource.component.js +3 -3
- package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.js +3 -3
- package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
- package/dist/Credentials/credentials-dashboard.component.js +1 -1
- package/dist/Credentials/credentials-dashboard.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js +13 -13
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-adapter.d.ts +4 -0
- package/dist/DashboardBrowser/dashboard-share-adapter.d.ts.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-adapter.js +5 -2
- package/dist/DashboardBrowser/dashboard-share-adapter.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts +3 -1
- package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-dialog.component.js +9 -4
- package/dist/DashboardBrowser/dashboard-share-dialog.component.js.map +1 -1
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts +3 -2
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts.map +1 -1
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js +7 -6
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js.map +1 -1
- package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts +3 -2
- package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts.map +1 -1
- package/dist/DataExplorer/components/view-selector/view-selector.component.js +6 -5
- package/dist/DataExplorer/components/view-selector/view-selector.component.js.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.js +10 -9
- package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
- package/dist/DataExplorer/services/explorer-state.service.d.ts +6 -1
- package/dist/DataExplorer/services/explorer-state.service.d.ts.map +1 -1
- package/dist/DataExplorer/services/explorer-state.service.js +15 -5
- package/dist/DataExplorer/services/explorer-state.service.js.map +1 -1
- package/dist/DatabaseDesigner/components/create-wizard/database-create-wizard.component.d.ts +64 -0
- package/dist/DatabaseDesigner/components/create-wizard/database-create-wizard.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/database-create-wizard.component.js +400 -0
- package/dist/DatabaseDesigner/components/create-wizard/database-create-wizard.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-basics.component.d.ts +42 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-basics.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-basics.component.js +232 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-basics.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-fields.component.d.ts +14 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-fields.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-fields.component.js +38 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-fields.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-pipeline.component.d.ts +24 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-pipeline.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-pipeline.component.js +77 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-pipeline.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-relationships.component.d.ts +88 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-relationships.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-relationships.component.js +404 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-relationships.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-review.component.d.ts +12 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-review.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-review.component.js +116 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-review.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts +55 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +204 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/entity-list.component.d.ts +61 -0
- package/dist/DatabaseDesigner/components/entity-list.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/entity-list.component.js +485 -0
- package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/modify/database-modify.component.d.ts +52 -0
- package/dist/DatabaseDesigner/components/modify/database-modify.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/modify/database-modify.component.js +320 -0
- package/dist/DatabaseDesigner/components/modify/database-modify.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/shared/database-preview-pane.component.d.ts +79 -0
- package/dist/DatabaseDesigner/components/shared/database-preview-pane.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/shared/database-preview-pane.component.js +378 -0
- package/dist/DatabaseDesigner/components/shared/database-preview-pane.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/shared/entity-fields-grid.component.d.ts +85 -0
- package/dist/DatabaseDesigner/components/shared/entity-fields-grid.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/shared/entity-fields-grid.component.js +429 -0
- package/dist/DatabaseDesigner/components/shared/entity-fields-grid.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/shared/entity-pipeline-panel.component.d.ts +58 -0
- package/dist/DatabaseDesigner/components/shared/entity-pipeline-panel.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/shared/entity-pipeline-panel.component.js +333 -0
- package/dist/DatabaseDesigner/components/shared/entity-pipeline-panel.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/shared/entity-review-panel.component.d.ts +36 -0
- package/dist/DatabaseDesigner/components/shared/entity-review-panel.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/shared/entity-review-panel.component.js +345 -0
- package/dist/DatabaseDesigner/components/shared/entity-review-panel.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/shared/wizard-step-indicator.component.d.ts +13 -0
- package/dist/DatabaseDesigner/components/shared/wizard-step-indicator.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/shared/wizard-step-indicator.component.js +81 -0
- package/dist/DatabaseDesigner/components/shared/wizard-step-indicator.component.js.map +1 -0
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +30 -0
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -0
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js +131 -0
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -0
- package/dist/DatabaseDesigner/database-designer-erd.d.ts +19 -0
- package/dist/DatabaseDesigner/database-designer-erd.d.ts.map +1 -0
- package/dist/DatabaseDesigner/database-designer-erd.js +84 -0
- package/dist/DatabaseDesigner/database-designer-erd.js.map +1 -0
- package/dist/DatabaseDesigner/database-designer.types.d.ts +167 -0
- package/dist/DatabaseDesigner/database-designer.types.d.ts.map +1 -0
- package/dist/DatabaseDesigner/database-designer.types.js +26 -0
- package/dist/DatabaseDesigner/database-designer.types.js.map +1 -0
- package/dist/DatabaseDesigner/services/database-designer.engine.d.ts +94 -0
- package/dist/DatabaseDesigner/services/database-designer.engine.d.ts.map +1 -0
- package/dist/DatabaseDesigner/services/database-designer.engine.js +392 -0
- package/dist/DatabaseDesigner/services/database-designer.engine.js.map +1 -0
- package/dist/DatabaseDesigner/services/database-designer.service.d.ts +78 -0
- package/dist/DatabaseDesigner/services/database-designer.service.d.ts.map +1 -0
- package/dist/DatabaseDesigner/services/database-designer.service.js +273 -0
- package/dist/DatabaseDesigner/services/database-designer.service.js.map +1 -0
- package/dist/DatabaseDesigner/services/entity-wizard-state.service.d.ts +79 -0
- package/dist/DatabaseDesigner/services/entity-wizard-state.service.d.ts.map +1 -0
- package/dist/DatabaseDesigner/services/entity-wizard-state.service.js +204 -0
- package/dist/DatabaseDesigner/services/entity-wizard-state.service.js.map +1 -0
- package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.js +2 -2
- package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
- package/dist/Home/action-pin-config-dialog.component.d.ts +2 -1
- package/dist/Home/action-pin-config-dialog.component.d.ts.map +1 -1
- package/dist/Home/action-pin-config-dialog.component.js +6 -4
- package/dist/Home/action-pin-config-dialog.component.js.map +1 -1
- package/dist/Home/action-pin-runner-dialog.component.d.ts +2 -1
- package/dist/Home/action-pin-runner-dialog.component.d.ts.map +1 -1
- package/dist/Home/action-pin-runner-dialog.component.js +5 -4
- package/dist/Home/action-pin-runner-dialog.component.js.map +1 -1
- package/dist/Home/home-application.d.ts.map +1 -1
- package/dist/Home/home-application.js +10 -12
- package/dist/Home/home-application.js.map +1 -1
- package/dist/Home/home-dashboard.component.d.ts.map +1 -1
- package/dist/Home/home-dashboard.component.js +3 -3
- package/dist/Home/home-dashboard.component.js.map +1 -1
- package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
- package/dist/Integration/components/activity/activity.component.js +1 -0
- package/dist/Integration/components/activity/activity.component.js.map +1 -1
- package/dist/Integration/components/connections/connections.component.d.ts.map +1 -1
- package/dist/Integration/components/connections/connections.component.js +11 -10
- package/dist/Integration/components/connections/connections.component.js.map +1 -1
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.d.ts.map +1 -1
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +2 -2
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
- package/dist/Integration/components/overview/overview.component.d.ts.map +1 -1
- package/dist/Integration/components/overview/overview.component.js +1 -0
- package/dist/Integration/components/overview/overview.component.js.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.d.ts.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.js +1 -0
- package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
- package/dist/Integration/components/schedules/schedules.component.d.ts.map +1 -1
- package/dist/Integration/components/schedules/schedules.component.js +5 -4
- package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
- package/dist/Integration/services/integration-data.service.d.ts +5 -1
- package/dist/Integration/services/integration-data.service.d.ts.map +1 -1
- package/dist/Integration/services/integration-data.service.js +27 -19
- package/dist/Integration/services/integration-data.service.js.map +1 -1
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +6 -6
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +8 -6
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +6 -6
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +3 -3
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +6 -6
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.js +4 -4
- package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.js +6 -6
- package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.js +11 -10
- package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
- package/dist/Lists/services/list-set-operations.service.d.ts +5 -0
- package/dist/Lists/services/list-set-operations.service.d.ts.map +1 -1
- package/dist/Lists/services/list-set-operations.service.js +11 -3
- package/dist/Lists/services/list-set-operations.service.js.map +1 -1
- package/dist/MCP/components/mcp-connection-dialog.component.d.ts +2 -1
- package/dist/MCP/components/mcp-connection-dialog.component.d.ts.map +1 -1
- package/dist/MCP/components/mcp-connection-dialog.component.js +8 -6
- package/dist/MCP/components/mcp-connection-dialog.component.js.map +1 -1
- package/dist/MCP/components/mcp-server-dialog.component.d.ts +2 -1
- package/dist/MCP/components/mcp-server-dialog.component.d.ts.map +1 -1
- package/dist/MCP/components/mcp-server-dialog.component.js +7 -5
- package/dist/MCP/components/mcp-server-dialog.component.js.map +1 -1
- package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
- package/dist/MCP/mcp-dashboard.component.js +12 -12
- package/dist/MCP/mcp-dashboard.component.js.map +1 -1
- package/dist/Permissions/permissions-shared.d.ts +3 -3
- package/dist/Permissions/permissions-shared.d.ts.map +1 -1
- package/dist/Permissions/permissions-shared.js +5 -5
- package/dist/Permissions/permissions-shared.js.map +1 -1
- package/dist/Permissions/resource-access-resource.component.js +1 -1
- package/dist/Permissions/resource-access-resource.component.js.map +1 -1
- package/dist/Permissions/user-access-resource.component.js +1 -2
- package/dist/Permissions/user-access-resource.component.js.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js +2 -2
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.js +1 -0
- package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
- package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts +5 -0
- package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts.map +1 -1
- package/dist/Scheduling/services/scheduling-instrumentation.service.js +21 -13
- package/dist/Scheduling/services/scheduling-instrumentation.service.js.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.js +2 -2
- package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer.component.d.ts +2 -1
- package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer.component.js +9 -7
- package/dist/Testing/components/testing-explorer.component.js.map +1 -1
- package/dist/Testing/services/testing-instrumentation.service.d.ts +6 -1
- package/dist/Testing/services/testing-instrumentation.service.d.ts.map +1 -1
- package/dist/Testing/services/testing-instrumentation.service.js +21 -11
- package/dist/Testing/services/testing-instrumentation.service.js.map +1 -1
- package/dist/Testing/testing-dashboard.component.d.ts +3 -1
- package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
- package/dist/Testing/testing-dashboard.component.js +15 -11
- package/dist/Testing/testing-dashboard.component.js.map +1 -1
- package/dist/VersionHistory/components/diff-resource.component.d.ts.map +1 -1
- package/dist/VersionHistory/components/diff-resource.component.js +5 -5
- package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/graph-resource.component.d.ts.map +1 -1
- package/dist/VersionHistory/components/graph-resource.component.js +1 -2
- package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -1
- package/dist/VersionHistory/components/labels-resource.component.js +3 -3
- package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/restore-resource.component.js +1 -1
- package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
- package/dist/ai-dashboards.module.d.ts +35 -34
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +6 -0
- package/dist/ai-dashboards.module.js.map +1 -1
- package/dist/module.d.ts +13 -12
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +7 -0
- package/dist/module.js.map +1 -1
- package/dist/public-api.d.ts +3 -1
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +3 -1
- package/dist/public-api.js.map +1 -1
- package/dist/shared/entity-field-display.d.ts +4 -3
- package/dist/shared/entity-field-display.d.ts.map +1 -1
- package/dist/shared/entity-field-display.js +9 -9
- package/dist/shared/entity-field-display.js.map +1 -1
- package/package.json +52 -51
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-set-operations.service.js","sourceRoot":"","sources":["../../../src/Lists/services/list-set-operations.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable } from '@angular/core';\nimport { RunView } from '@memberjunction/core';\nimport { MJListEntity, MJListDetailEntity } from '@memberjunction/core-entities';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n/**\n * Represents a set (list) in the Venn diagram\n */\nexport interface VennSet {\n listId: string;\n listName: string;\n color: string;\n recordIds: Set<string>;\n size: number;\n}\n\n/**\n * Represents an intersection region in the Venn diagram\n */\nexport interface VennIntersection {\n /**\n * IDs of lists that participate in this intersection\n */\n setIds: string[];\n\n /**\n * Labels of lists that participate in this intersection\n */\n setLabels: string[];\n\n /**\n * Number of records in this intersection\n */\n size: number;\n\n /**\n * Actual record IDs in this intersection\n */\n recordIds: string[];\n\n /**\n * Display label for this region\n */\n label: string;\n\n /**\n * Whether this region is currently selected\n */\n isSelected: boolean;\n}\n\n/**\n * Complete Venn data for visualization\n */\nexport interface VennData {\n sets: VennSet[];\n intersections: VennIntersection[];\n entityId?: string;\n entityName?: string;\n}\n\n/**\n * Set operation types\n */\nexport type SetOperation = 'union' | 'intersection' | 'difference' | 'symmetric_difference' | 'complement';\n\n/**\n * Result of a set operation\n */\nexport interface SetOperationResult {\n operation: SetOperation;\n inputSetIds: string[];\n resultRecordIds: string[];\n resultCount: number;\n}\n\n// Predefined color palette for Venn sets\nconst VENN_COLORS = [\n '#2196F3', // Blue\n '#4CAF50', // Green\n '#FF9800', // Orange\n '#E91E63', // Pink\n '#9C27B0', // Purple\n '#00BCD4', // Cyan\n '#F44336', // Red\n '#8BC34A' // Light Green\n];\n\n/**\n * Service for performing set operations on lists and preparing data for Venn visualization.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ListSetOperationsService {\n private loadingSubject = new BehaviorSubject<boolean>(false);\n public loading$: Observable<boolean> = this.loadingSubject.asObservable();\n\n // Cache for list details\n private listDetailsCache = new Map<string, Set<string>>();\n\n constructor() {}\n\n /**\n * Load list data and calculate all intersections for Venn visualization\n */\n async calculateVennData(lists: MJListEntity[]): Promise<VennData> {\n if (lists.length === 0) {\n return { sets: [], intersections: [] };\n }\n\n this.loadingSubject.next(true);\n\n try {\n // Load all list details in a single query\n const listIds = lists.map(l => l.ID);\n const listIdFilter = listIds.map(id => `'${id}'`).join(',');\n\n const rv = new RunView();\n const result = await rv.RunView<{ ListID: string; RecordID: string }>({\n EntityName: 'MJ: List Details',\n ExtraFilter: `ListID IN (${listIdFilter})`,\n Fields: ['ListID', 'RecordID'],\n ResultType: 'simple'\n });\n\n // Build sets per list\n const setsMap = new Map<string, Set<string>>();\n for (const listId of listIds) {\n setsMap.set(listId, new Set());\n }\n\n if (result.Success && result.Results) {\n for (const detail of result.Results) {\n const set = setsMap.get(detail.ListID);\n if (set) {\n set.add(detail.RecordID);\n }\n }\n }\n\n // Update cache\n for (const [listId, records] of setsMap) {\n this.listDetailsCache.set(listId, records);\n }\n\n // Build VennSet objects\n const sets: VennSet[] = lists.map((list, index) => ({\n listId: list.ID,\n listName: list.Name,\n color: VENN_COLORS[index % VENN_COLORS.length],\n recordIds: setsMap.get(list.ID) || new Set(),\n size: setsMap.get(list.ID)?.size || 0\n }));\n\n // Calculate all possible intersections\n const intersections = this.calculateAllIntersections(sets);\n\n // Get entity info from the first list (assuming all lists are same entity)\n const entityId = lists[0]?.EntityID;\n const entityName = lists[0]?.Entity;\n\n return { sets, intersections, entityId, entityName };\n } finally {\n this.loadingSubject.next(false);\n }\n }\n\n /**\n * Calculate all possible intersections between the given sets\n */\n private calculateAllIntersections(sets: VennSet[]): VennIntersection[] {\n const intersections: VennIntersection[] = [];\n const n = sets.length;\n\n // Generate all non-empty subsets of sets\n for (let mask = 1; mask < (1 << n); mask++) {\n const subset: VennSet[] = [];\n for (let i = 0; i < n; i++) {\n if (mask & (1 << i)) {\n subset.push(sets[i]);\n }\n }\n\n // Calculate exclusive intersection (records in exactly these sets)\n const recordIds = this.calculateExclusiveIntersection(subset, sets);\n\n if (recordIds.length > 0 || subset.length === 1) {\n const setIds = subset.map(s => s.listId);\n const setLabels = subset.map(s => s.listName);\n\n intersections.push({\n setIds,\n setLabels,\n size: recordIds.length,\n recordIds,\n label: this.buildIntersectionLabel(setLabels),\n isSelected: false\n });\n }\n }\n\n // Sort by number of sets (single sets first, then pairs, etc.)\n intersections.sort((a, b) => a.setIds.length - b.setIds.length);\n\n return intersections;\n }\n\n /**\n * Calculate records that are in ALL of the specified sets but NONE of the other sets\n */\n private calculateExclusiveIntersection(includedSets: VennSet[], allSets: VennSet[]): string[] {\n if (includedSets.length === 0) return [];\n\n // Start with records in the first included set\n let result = new Set(includedSets[0].recordIds);\n\n // Intersect with all other included sets\n for (let i = 1; i < includedSets.length; i++) {\n result = this.intersect(result, includedSets[i].recordIds);\n }\n\n // Remove records that are in excluded sets\n const excludedSets = allSets.filter(s => !includedSets.includes(s));\n for (const excluded of excludedSets) {\n result = this.difference(result, excluded.recordIds);\n }\n\n return Array.from(result);\n }\n\n /**\n * Build a display label for an intersection\n */\n private buildIntersectionLabel(setLabels: string[]): string {\n if (setLabels.length === 1) {\n return `Only in ${setLabels[0]}`;\n }\n return setLabels.join(' ∩ ');\n }\n\n /**\n * Perform a set operation on multiple lists\n */\n async performOperation(\n operation: SetOperation,\n listIds: string[],\n allListIds?: string[]\n ): Promise<SetOperationResult> {\n this.loadingSubject.next(true);\n\n try {\n // Ensure we have the list details loaded\n await this.ensureListsLoaded(listIds);\n\n const sets = listIds.map(id => this.listDetailsCache.get(id) || new Set<string>());\n let resultSet: Set<string>;\n\n switch (operation) {\n case 'union':\n resultSet = this.unionAll(sets);\n break;\n\n case 'intersection':\n resultSet = this.intersectAll(sets);\n break;\n\n case 'difference':\n // A - B - C - ... (first set minus all others)\n if (sets.length < 2) {\n resultSet = sets[0] || new Set();\n } else {\n resultSet = new Set(sets[0]);\n for (let i = 1; i < sets.length; i++) {\n resultSet = this.difference(resultSet, sets[i]);\n }\n }\n break;\n\n case 'symmetric_difference':\n // Records that are in exactly one of the sets\n resultSet = this.symmetricDifferenceAll(sets);\n break;\n\n case 'complement':\n // Records NOT in any of the selected sets (requires allListIds)\n if (allListIds) {\n await this.ensureListsLoaded(allListIds);\n const allSets = allListIds.map(id => this.listDetailsCache.get(id) || new Set<string>());\n const allRecords = this.unionAll(allSets);\n const selectedRecords = this.unionAll(sets);\n resultSet = this.difference(allRecords, selectedRecords);\n } else {\n resultSet = new Set();\n }\n break;\n\n default:\n resultSet = new Set();\n }\n\n return {\n operation,\n inputSetIds: listIds,\n resultRecordIds: Array.from(resultSet),\n resultCount: resultSet.size\n };\n } finally {\n this.loadingSubject.next(false);\n }\n }\n\n /**\n * Ensure list details are loaded for the given list IDs\n */\n private async ensureListsLoaded(listIds: string[]): Promise<void> {\n const missingIds = listIds.filter(id => !this.listDetailsCache.has(id));\n\n if (missingIds.length === 0) return;\n\n const listIdFilter = missingIds.map(id => `'${id}'`).join(',');\n const rv = new RunView();\n\n const result = await rv.RunView<{ ListID: string; RecordID: string }>({\n EntityName: 'MJ: List Details',\n ExtraFilter: `ListID IN (${listIdFilter})`,\n Fields: ['ListID', 'RecordID'],\n ResultType: 'simple'\n });\n\n // Initialize sets for missing lists\n for (const id of missingIds) {\n this.listDetailsCache.set(id, new Set());\n }\n\n if (result.Success && result.Results) {\n for (const detail of result.Results) {\n const set = this.listDetailsCache.get(detail.ListID);\n if (set) {\n set.add(detail.RecordID);\n }\n }\n }\n }\n\n /**\n * Set intersection of two sets\n */\n private intersect(a: Set<string>, b: Set<string>): Set<string> {\n const result = new Set<string>();\n for (const item of a) {\n if (b.has(item)) {\n result.add(item);\n }\n }\n return result;\n }\n\n /**\n * Set difference (a - b)\n */\n private difference(a: Set<string>, b: Set<string>): Set<string> {\n const result = new Set<string>();\n for (const item of a) {\n if (!b.has(item)) {\n result.add(item);\n }\n }\n return result;\n }\n\n /**\n * Union of multiple sets\n */\n private unionAll(sets: Set<string>[]): Set<string> {\n const result = new Set<string>();\n for (const set of sets) {\n for (const item of set) {\n result.add(item);\n }\n }\n return result;\n }\n\n /**\n * Intersection of multiple sets\n */\n private intersectAll(sets: Set<string>[]): Set<string> {\n if (sets.length === 0) return new Set();\n if (sets.length === 1) return new Set(sets[0]);\n\n let result = new Set(sets[0]);\n for (let i = 1; i < sets.length; i++) {\n result = this.intersect(result, sets[i]);\n }\n return result;\n }\n\n /**\n * Symmetric difference of multiple sets (items in exactly one set)\n */\n private symmetricDifferenceAll(sets: Set<string>[]): Set<string> {\n if (sets.length === 0) return new Set();\n\n // Count occurrences of each item\n const counts = new Map<string, number>();\n for (const set of sets) {\n for (const item of set) {\n counts.set(item, (counts.get(item) || 0) + 1);\n }\n }\n\n // Keep only items that appear exactly once\n const result = new Set<string>();\n for (const [item, count] of counts) {\n if (count === 1) {\n result.add(item);\n }\n }\n return result;\n }\n\n /**\n * Get the color for a list by its index\n */\n getColorForIndex(index: number): string {\n return VENN_COLORS[index % VENN_COLORS.length];\n }\n\n /**\n * Clear the cache\n */\n clearCache(): void {\n this.listDetailsCache.clear();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"list-set-operations.service.js","sourceRoot":"","sources":["../../../src/Lists/services/list-set-operations.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable } from '@angular/core';\nimport { RunView, Metadata, IMetadataProvider } from '@memberjunction/core';\nimport { MJListEntity, MJListDetailEntity } from '@memberjunction/core-entities';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n/**\n * Represents a set (list) in the Venn diagram\n */\nexport interface VennSet {\n listId: string;\n listName: string;\n color: string;\n recordIds: Set<string>;\n size: number;\n}\n\n/**\n * Represents an intersection region in the Venn diagram\n */\nexport interface VennIntersection {\n /**\n * IDs of lists that participate in this intersection\n */\n setIds: string[];\n\n /**\n * Labels of lists that participate in this intersection\n */\n setLabels: string[];\n\n /**\n * Number of records in this intersection\n */\n size: number;\n\n /**\n * Actual record IDs in this intersection\n */\n recordIds: string[];\n\n /**\n * Display label for this region\n */\n label: string;\n\n /**\n * Whether this region is currently selected\n */\n isSelected: boolean;\n}\n\n/**\n * Complete Venn data for visualization\n */\nexport interface VennData {\n sets: VennSet[];\n intersections: VennIntersection[];\n entityId?: string;\n entityName?: string;\n}\n\n/**\n * Set operation types\n */\nexport type SetOperation = 'union' | 'intersection' | 'difference' | 'symmetric_difference' | 'complement';\n\n/**\n * Result of a set operation\n */\nexport interface SetOperationResult {\n operation: SetOperation;\n inputSetIds: string[];\n resultRecordIds: string[];\n resultCount: number;\n}\n\n// Predefined color palette for Venn sets\nconst VENN_COLORS = [\n '#2196F3', // Blue\n '#4CAF50', // Green\n '#FF9800', // Orange\n '#E91E63', // Pink\n '#9C27B0', // Purple\n '#00BCD4', // Cyan\n '#F44336', // Red\n '#8BC34A' // Light Green\n];\n\n/**\n * Service for performing set operations on lists and preparing data for Venn visualization.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ListSetOperationsService {\n private _provider: IMetadataProvider | null = null;\n /** Set the metadata provider this service should use. Components should call this after injection. */\n public set Provider(value: IMetadataProvider | null) {\n this._provider = value;\n }\n public get Provider(): IMetadataProvider {\n return this._provider ?? Metadata.Provider;\n }\n private loadingSubject = new BehaviorSubject<boolean>(false);\n public loading$: Observable<boolean> = this.loadingSubject.asObservable();\n\n // Cache for list details\n private listDetailsCache = new Map<string, Set<string>>();\n\n constructor() {}\n\n /**\n * Load list data and calculate all intersections for Venn visualization\n */\n async calculateVennData(lists: MJListEntity[]): Promise<VennData> {\n if (lists.length === 0) {\n return { sets: [], intersections: [] };\n }\n\n this.loadingSubject.next(true);\n\n try {\n // Load all list details in a single query\n const listIds = lists.map(l => l.ID);\n const listIdFilter = listIds.map(id => `'${id}'`).join(',');\n\n const rv = RunView.FromMetadataProvider(this.Provider);\n const result = await rv.RunView<{ ListID: string; RecordID: string }>({\n EntityName: 'MJ: List Details',\n ExtraFilter: `ListID IN (${listIdFilter})`,\n Fields: ['ListID', 'RecordID'],\n ResultType: 'simple'\n });\n\n // Build sets per list\n const setsMap = new Map<string, Set<string>>();\n for (const listId of listIds) {\n setsMap.set(listId, new Set());\n }\n\n if (result.Success && result.Results) {\n for (const detail of result.Results) {\n const set = setsMap.get(detail.ListID);\n if (set) {\n set.add(detail.RecordID);\n }\n }\n }\n\n // Update cache\n for (const [listId, records] of setsMap) {\n this.listDetailsCache.set(listId, records);\n }\n\n // Build VennSet objects\n const sets: VennSet[] = lists.map((list, index) => ({\n listId: list.ID,\n listName: list.Name,\n color: VENN_COLORS[index % VENN_COLORS.length],\n recordIds: setsMap.get(list.ID) || new Set(),\n size: setsMap.get(list.ID)?.size || 0\n }));\n\n // Calculate all possible intersections\n const intersections = this.calculateAllIntersections(sets);\n\n // Get entity info from the first list (assuming all lists are same entity)\n const entityId = lists[0]?.EntityID;\n const entityName = lists[0]?.Entity;\n\n return { sets, intersections, entityId, entityName };\n } finally {\n this.loadingSubject.next(false);\n }\n }\n\n /**\n * Calculate all possible intersections between the given sets\n */\n private calculateAllIntersections(sets: VennSet[]): VennIntersection[] {\n const intersections: VennIntersection[] = [];\n const n = sets.length;\n\n // Generate all non-empty subsets of sets\n for (let mask = 1; mask < (1 << n); mask++) {\n const subset: VennSet[] = [];\n for (let i = 0; i < n; i++) {\n if (mask & (1 << i)) {\n subset.push(sets[i]);\n }\n }\n\n // Calculate exclusive intersection (records in exactly these sets)\n const recordIds = this.calculateExclusiveIntersection(subset, sets);\n\n if (recordIds.length > 0 || subset.length === 1) {\n const setIds = subset.map(s => s.listId);\n const setLabels = subset.map(s => s.listName);\n\n intersections.push({\n setIds,\n setLabels,\n size: recordIds.length,\n recordIds,\n label: this.buildIntersectionLabel(setLabels),\n isSelected: false\n });\n }\n }\n\n // Sort by number of sets (single sets first, then pairs, etc.)\n intersections.sort((a, b) => a.setIds.length - b.setIds.length);\n\n return intersections;\n }\n\n /**\n * Calculate records that are in ALL of the specified sets but NONE of the other sets\n */\n private calculateExclusiveIntersection(includedSets: VennSet[], allSets: VennSet[]): string[] {\n if (includedSets.length === 0) return [];\n\n // Start with records in the first included set\n let result = new Set(includedSets[0].recordIds);\n\n // Intersect with all other included sets\n for (let i = 1; i < includedSets.length; i++) {\n result = this.intersect(result, includedSets[i].recordIds);\n }\n\n // Remove records that are in excluded sets\n const excludedSets = allSets.filter(s => !includedSets.includes(s));\n for (const excluded of excludedSets) {\n result = this.difference(result, excluded.recordIds);\n }\n\n return Array.from(result);\n }\n\n /**\n * Build a display label for an intersection\n */\n private buildIntersectionLabel(setLabels: string[]): string {\n if (setLabels.length === 1) {\n return `Only in ${setLabels[0]}`;\n }\n return setLabels.join(' ∩ ');\n }\n\n /**\n * Perform a set operation on multiple lists\n */\n async performOperation(\n operation: SetOperation,\n listIds: string[],\n allListIds?: string[]\n ): Promise<SetOperationResult> {\n this.loadingSubject.next(true);\n\n try {\n // Ensure we have the list details loaded\n await this.ensureListsLoaded(listIds);\n\n const sets = listIds.map(id => this.listDetailsCache.get(id) || new Set<string>());\n let resultSet: Set<string>;\n\n switch (operation) {\n case 'union':\n resultSet = this.unionAll(sets);\n break;\n\n case 'intersection':\n resultSet = this.intersectAll(sets);\n break;\n\n case 'difference':\n // A - B - C - ... (first set minus all others)\n if (sets.length < 2) {\n resultSet = sets[0] || new Set();\n } else {\n resultSet = new Set(sets[0]);\n for (let i = 1; i < sets.length; i++) {\n resultSet = this.difference(resultSet, sets[i]);\n }\n }\n break;\n\n case 'symmetric_difference':\n // Records that are in exactly one of the sets\n resultSet = this.symmetricDifferenceAll(sets);\n break;\n\n case 'complement':\n // Records NOT in any of the selected sets (requires allListIds)\n if (allListIds) {\n await this.ensureListsLoaded(allListIds);\n const allSets = allListIds.map(id => this.listDetailsCache.get(id) || new Set<string>());\n const allRecords = this.unionAll(allSets);\n const selectedRecords = this.unionAll(sets);\n resultSet = this.difference(allRecords, selectedRecords);\n } else {\n resultSet = new Set();\n }\n break;\n\n default:\n resultSet = new Set();\n }\n\n return {\n operation,\n inputSetIds: listIds,\n resultRecordIds: Array.from(resultSet),\n resultCount: resultSet.size\n };\n } finally {\n this.loadingSubject.next(false);\n }\n }\n\n /**\n * Ensure list details are loaded for the given list IDs\n */\n private async ensureListsLoaded(listIds: string[]): Promise<void> {\n const missingIds = listIds.filter(id => !this.listDetailsCache.has(id));\n\n if (missingIds.length === 0) return;\n\n const listIdFilter = missingIds.map(id => `'${id}'`).join(',');\n const rv = RunView.FromMetadataProvider(this.Provider);\n\n const result = await rv.RunView<{ ListID: string; RecordID: string }>({\n EntityName: 'MJ: List Details',\n ExtraFilter: `ListID IN (${listIdFilter})`,\n Fields: ['ListID', 'RecordID'],\n ResultType: 'simple'\n });\n\n // Initialize sets for missing lists\n for (const id of missingIds) {\n this.listDetailsCache.set(id, new Set());\n }\n\n if (result.Success && result.Results) {\n for (const detail of result.Results) {\n const set = this.listDetailsCache.get(detail.ListID);\n if (set) {\n set.add(detail.RecordID);\n }\n }\n }\n }\n\n /**\n * Set intersection of two sets\n */\n private intersect(a: Set<string>, b: Set<string>): Set<string> {\n const result = new Set<string>();\n for (const item of a) {\n if (b.has(item)) {\n result.add(item);\n }\n }\n return result;\n }\n\n /**\n * Set difference (a - b)\n */\n private difference(a: Set<string>, b: Set<string>): Set<string> {\n const result = new Set<string>();\n for (const item of a) {\n if (!b.has(item)) {\n result.add(item);\n }\n }\n return result;\n }\n\n /**\n * Union of multiple sets\n */\n private unionAll(sets: Set<string>[]): Set<string> {\n const result = new Set<string>();\n for (const set of sets) {\n for (const item of set) {\n result.add(item);\n }\n }\n return result;\n }\n\n /**\n * Intersection of multiple sets\n */\n private intersectAll(sets: Set<string>[]): Set<string> {\n if (sets.length === 0) return new Set();\n if (sets.length === 1) return new Set(sets[0]);\n\n let result = new Set(sets[0]);\n for (let i = 1; i < sets.length; i++) {\n result = this.intersect(result, sets[i]);\n }\n return result;\n }\n\n /**\n * Symmetric difference of multiple sets (items in exactly one set)\n */\n private symmetricDifferenceAll(sets: Set<string>[]): Set<string> {\n if (sets.length === 0) return new Set();\n\n // Count occurrences of each item\n const counts = new Map<string, number>();\n for (const set of sets) {\n for (const item of set) {\n counts.set(item, (counts.get(item) || 0) + 1);\n }\n }\n\n // Keep only items that appear exactly once\n const result = new Set<string>();\n for (const [item, count] of counts) {\n if (count === 1) {\n result.add(item);\n }\n }\n return result;\n }\n\n /**\n * Get the color for a list by its index\n */\n getColorForIndex(index: number): string {\n return VENN_COLORS[index % VENN_COLORS.length];\n }\n\n /**\n * Clear the cache\n */\n clearCache(): void {\n this.listDetailsCache.clear();\n }\n}\n"]}
|
|
@@ -8,6 +8,7 @@ import { FormBuilder, FormGroup } from '@angular/forms';
|
|
|
8
8
|
import { MJCredentialTypeEntity } from '@memberjunction/core-entities';
|
|
9
9
|
import { MCPConnectionData, MCPServerData } from '../mcp-dashboard.component';
|
|
10
10
|
import { CredentialDialogComponent, CredentialDialogResult } from '@memberjunction/ng-credentials';
|
|
11
|
+
import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
11
12
|
import * as i0 from "@angular/core";
|
|
12
13
|
/**
|
|
13
14
|
* Dialog result interface
|
|
@@ -19,7 +20,7 @@ export interface ConnectionDialogResult {
|
|
|
19
20
|
/**
|
|
20
21
|
* MCP Connection Dialog Component
|
|
21
22
|
*/
|
|
22
|
-
export declare class MCPConnectionDialogComponent implements OnInit, OnChanges {
|
|
23
|
+
export declare class MCPConnectionDialogComponent extends BaseAngularComponent implements OnInit, OnChanges {
|
|
23
24
|
private fb;
|
|
24
25
|
private cdr;
|
|
25
26
|
credentialDialog: CredentialDialogComponent;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-connection-dialog.component.d.ts","sourceRoot":"","sources":["../../../src/MCP/components/mcp-connection-dialog.component.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAa,MAAM,eAAe,CAAC;AACvI,OAAO,EAAE,WAAW,EAAE,SAAS,EAAc,MAAM,gBAAgB,CAAC;AAEpE,OAAO,EAA+B,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACpG,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;;
|
|
1
|
+
{"version":3,"file":"mcp-connection-dialog.component.d.ts","sourceRoot":"","sources":["../../../src/MCP/components/mcp-connection-dialog.component.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAa,MAAM,eAAe,CAAC;AACvI,OAAO,EAAE,WAAW,EAAE,SAAS,EAAc,MAAM,gBAAgB,CAAC;AAEpE,OAAO,EAA+B,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACpG,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAEnG,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;;AAErE;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACnC,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAClC;AAED;;GAEG;AACH,qBAMa,4BAA6B,SAAQ,oBAAqB,YAAW,MAAM,EAAE,SAAS;IA+B3F,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,GAAG;IA9BgB,gBAAgB,EAAG,yBAAyB,CAAC;IAEnE,UAAU,EAAE,iBAAiB,GAAG,IAAI,CAAQ;IAC5C,OAAO,EAAE,aAAa,EAAE,CAAM;IAC9B,OAAO,UAAS;IACf,KAAK,uCAA8C;IAEtD,cAAc,EAAE,SAAS,CAAC;IAC1B,WAAW,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAM;IACtD,SAAS,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAM;IACpD,eAAe,EAAE,sBAAsB,EAAE,CAAM;IAC/C,QAAQ,UAAS;IACjB,kBAAkB,UAAS;IAC3B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAQ;IACnC,oBAAoB,UAAS;IAEpC,IAAW,UAAU,IAAI,OAAO,CAE/B;IAED,IAAW,WAAW,IAAI,MAAM,CAE/B;IAED,IAAW,aAAa,IAAI,aAAa,EAAE,CAE1C;gBAGW,EAAE,EAAE,WAAW,EACf,GAAG,EAAE,iBAAiB;IAMlC,QAAQ,IAAI,IAAI;IAIhB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAQzC,OAAO,CAAC,UAAU;IAkBlB,OAAO,CAAC,cAAc;YAsCR,gBAAgB;IA0C9B;;OAEG;IACI,oBAAoB,IAAI,IAAI;IAKnC;;OAEG;IACI,uBAAuB,CAAC,MAAM,EAAE,sBAAsB,GAAG,IAAI;IAoB7D,cAAc,IAAI,IAAI;IAWhB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAyD3B,MAAM,IAAI,IAAI;IAId,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;yCA3PvD,4BAA4B;2CAA5B,4BAA4B;CA+PxC"}
|
|
@@ -5,8 +5,9 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { Component, Input, Output, EventEmitter, ViewChild } from '@angular/core';
|
|
7
7
|
import { Validators } from '@angular/forms';
|
|
8
|
-
import {
|
|
8
|
+
import { RunView, CompositeKey } from '@memberjunction/core';
|
|
9
9
|
import { UUIDsEqual } from '@memberjunction/global';
|
|
10
|
+
import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
10
11
|
import * as i0 from "@angular/core";
|
|
11
12
|
import * as i1 from "@angular/forms";
|
|
12
13
|
import * as i2 from "@memberjunction/ng-ui-components";
|
|
@@ -266,7 +267,7 @@ function MCPConnectionDialogComponent_Conditional_1_Template(rf, ctx) { if (rf &
|
|
|
266
267
|
/**
|
|
267
268
|
* MCP Connection Dialog Component
|
|
268
269
|
*/
|
|
269
|
-
export class MCPConnectionDialogComponent {
|
|
270
|
+
export class MCPConnectionDialogComponent extends BaseAngularComponent {
|
|
270
271
|
fb;
|
|
271
272
|
cdr;
|
|
272
273
|
credentialDialog;
|
|
@@ -292,6 +293,7 @@ export class MCPConnectionDialogComponent {
|
|
|
292
293
|
return this.servers.filter(s => s.Status === 'Active');
|
|
293
294
|
}
|
|
294
295
|
constructor(fb, cdr) {
|
|
296
|
+
super();
|
|
295
297
|
this.fb = fb;
|
|
296
298
|
this.cdr = cdr;
|
|
297
299
|
this.connectionForm = this.createForm();
|
|
@@ -364,7 +366,7 @@ export class MCPConnectionDialogComponent {
|
|
|
364
366
|
async loadDropdownData() {
|
|
365
367
|
this.IsLoadingDropdowns = true;
|
|
366
368
|
try {
|
|
367
|
-
const rv =
|
|
369
|
+
const rv = RunView.FromMetadataProvider(this.ProviderToUse);
|
|
368
370
|
// Load credentials, credential types, and companies in parallel
|
|
369
371
|
const [credResult, typeResult, companyResult] = await rv.RunViews([
|
|
370
372
|
{
|
|
@@ -449,7 +451,7 @@ export class MCPConnectionDialogComponent {
|
|
|
449
451
|
this.ErrorMessage = null;
|
|
450
452
|
this.cdr.detectChanges();
|
|
451
453
|
try {
|
|
452
|
-
const md =
|
|
454
|
+
const md = this.ProviderToUse;
|
|
453
455
|
const entity = await md.GetEntityObject('MJ: MCP Server Connections');
|
|
454
456
|
if (this.IsEditMode && this.connection) {
|
|
455
457
|
await entity.InnerLoad(new CompositeKey([{ FieldName: 'ID', Value: this.connection.ID }]));
|
|
@@ -505,7 +507,7 @@ export class MCPConnectionDialogComponent {
|
|
|
505
507
|
} if (rf & 2) {
|
|
506
508
|
let _t;
|
|
507
509
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.credentialDialog = _t.first);
|
|
508
|
-
} }, inputs: { connection: "connection", servers: "servers", visible: "visible" }, outputs: { close: "close" }, standalone: false, features: [i0.ɵɵNgOnChangesFeature], decls: 2, vars: 2, consts: [["mjDropdownItem", ""], ["credentialDialog", ""], [3, "Visible", "Title", "Width"], [3, "Visible"], [3, "Close", "Visible", "Title", "Width"], [1, "connection-form", 3, "formGroup"], [1, "error-banner"], [1, "form-section"], [1, "fa-solid", "fa-info-circle"], [1, "form-group"], ["for", "server"], [1, "required"], ["TextField", "Name", "ValueField", "ID", 3, "ValueChange", "Data", "ValuePrimitive", "DefaultItem", "ngModelOptions", "ngModel"], [1, "error-text"], ["for", "name"], ["id", "name", "formControlName", "Name", "placeholder", "e.g., Production GitHub Connection", 1, "mj-input"], ["for", "description"], ["id", "description", "formControlName", "Description", "placeholder", "Optional description of this connection", 1, "mj-textarea", 3, "rows"], ["for", "status"], [3, "ValueChange", "Data", "ngModelOptions", "ngModel"], ["for", "company"], [1, "hint"], [1, "fa-solid", "fa-key"], ["for", "credential"], [1, "loading-credentials"], ["for", "customHeader"], ["id", "customHeader", "formControlName", "CustomHeaderName", "placeholder", "e.g., X-Custom-API-Key", 1, "mj-input"], [1, "fa-solid", "fa-sliders"], [1, "checkbox-group"], [1, "checkbox-label"], ["type", "checkbox", "formControlName", "AutoSyncTools", 1, "mj-checkbox"], [1, "fa-solid", "fa-file-lines"], ["type", "checkbox", "formControlName", "LogToolCalls", 1, "mj-checkbox"], [1, "logging-options"], ["type", "checkbox", "formControlName", "LogInputParameters", 1, "mj-checkbox"], ["type", "checkbox", "formControlName", "LogOutputContent", 1, "mj-checkbox"], ["for", "maxOutputSize"], [3, "ngModelChange", "Min", "Max", "Step", "ngModelOptions", "ngModel"], [1, "fa-solid", "fa-gear"], ["for", "envVars"], ["id", "envVars", "formControlName", "EnvironmentVars", "placeholder", "{\"VAR_NAME\": \"value\"}", 1, "mj-textarea", 3, "rows"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], [1, "fa-solid", "fa-spinner", "fa-spin"], ["mjButton", "", 3, "click"], [1, "fa-solid", "fa-exclamation-triangle"], [1, "server-option"], [1, "server-name"], [1, "server-transport"], [1, "credential-row"], ["mjButton", "", "type", "button", "variant", "outline", "title", "Create New Credential", 3, "click"], [1, "fa-solid", "fa-plus"], [3, "close", "Visible"]], template: function MCPConnectionDialogComponent_Template(rf, ctx) { if (rf & 1) {
|
|
510
|
+
} }, inputs: { connection: "connection", servers: "servers", visible: "visible" }, outputs: { close: "close" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 2, vars: 2, consts: [["mjDropdownItem", ""], ["credentialDialog", ""], [3, "Visible", "Title", "Width"], [3, "Visible"], [3, "Close", "Visible", "Title", "Width"], [1, "connection-form", 3, "formGroup"], [1, "error-banner"], [1, "form-section"], [1, "fa-solid", "fa-info-circle"], [1, "form-group"], ["for", "server"], [1, "required"], ["TextField", "Name", "ValueField", "ID", 3, "ValueChange", "Data", "ValuePrimitive", "DefaultItem", "ngModelOptions", "ngModel"], [1, "error-text"], ["for", "name"], ["id", "name", "formControlName", "Name", "placeholder", "e.g., Production GitHub Connection", 1, "mj-input"], ["for", "description"], ["id", "description", "formControlName", "Description", "placeholder", "Optional description of this connection", 1, "mj-textarea", 3, "rows"], ["for", "status"], [3, "ValueChange", "Data", "ngModelOptions", "ngModel"], ["for", "company"], [1, "hint"], [1, "fa-solid", "fa-key"], ["for", "credential"], [1, "loading-credentials"], ["for", "customHeader"], ["id", "customHeader", "formControlName", "CustomHeaderName", "placeholder", "e.g., X-Custom-API-Key", 1, "mj-input"], [1, "fa-solid", "fa-sliders"], [1, "checkbox-group"], [1, "checkbox-label"], ["type", "checkbox", "formControlName", "AutoSyncTools", 1, "mj-checkbox"], [1, "fa-solid", "fa-file-lines"], ["type", "checkbox", "formControlName", "LogToolCalls", 1, "mj-checkbox"], [1, "logging-options"], ["type", "checkbox", "formControlName", "LogInputParameters", 1, "mj-checkbox"], ["type", "checkbox", "formControlName", "LogOutputContent", 1, "mj-checkbox"], ["for", "maxOutputSize"], [3, "ngModelChange", "Min", "Max", "Step", "ngModelOptions", "ngModel"], [1, "fa-solid", "fa-gear"], ["for", "envVars"], ["id", "envVars", "formControlName", "EnvironmentVars", "placeholder", "{\"VAR_NAME\": \"value\"}", 1, "mj-textarea", 3, "rows"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], [1, "fa-solid", "fa-spinner", "fa-spin"], ["mjButton", "", 3, "click"], [1, "fa-solid", "fa-exclamation-triangle"], [1, "server-option"], [1, "server-name"], [1, "server-transport"], [1, "credential-row"], ["mjButton", "", "type", "button", "variant", "outline", "title", "Create New Credential", 3, "click"], [1, "fa-solid", "fa-plus"], [3, "close", "Visible"]], template: function MCPConnectionDialogComponent_Template(rf, ctx) { if (rf & 1) {
|
|
509
511
|
i0.ɵɵconditionalCreate(0, MCPConnectionDialogComponent_Conditional_0_Template, 107, 40, "mj-dialog", 2);
|
|
510
512
|
i0.ɵɵconditionalCreate(1, MCPConnectionDialogComponent_Conditional_1_Template, 2, 1, "mj-credential-dialog", 3);
|
|
511
513
|
} if (rf & 2) {
|
|
@@ -529,5 +531,5 @@ export class MCPConnectionDialogComponent {
|
|
|
529
531
|
}], close: [{
|
|
530
532
|
type: Output
|
|
531
533
|
}] }); })();
|
|
532
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MCPConnectionDialogComponent, { className: "MCPConnectionDialogComponent", filePath: "src/MCP/components/mcp-connection-dialog.component.ts", lineNumber:
|
|
534
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MCPConnectionDialogComponent, { className: "MCPConnectionDialogComponent", filePath: "src/MCP/components/mcp-connection-dialog.component.ts", lineNumber: 33 }); })();
|
|
533
535
|
//# sourceMappingURL=mcp-connection-dialog.component.js.map
|
|
@@ -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';\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: this.connection.CredentialID ?? '',\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 <mj-dialog\n [Visible]=\"true\"\n [Title]=\"DialogTitle\"\n (Close)=\"cancel()\"\n [Width]=\"600\">\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 <mj-dropdown\n [Data]=\"ActiveServers\"\n TextField=\"Name\"\n ValueField=\"ID\"\n [ValuePrimitive]=\"true\"\n [DefaultItem]=\"{ Name: 'Select a server...', ID: '' }\"\n [ngModelOptions]=\"{standalone: true}\" [ngModel]=\"connectionForm.get('MCPServerID')?.value\"\n (ValueChange)=\"connectionForm.get('MCPServerID')?.setValue($any($event)); onServerChange()\">\n <ng-template #mjDropdownItem 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 </mj-dropdown>\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 class=\"mj-input\"\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 class=\"mj-textarea\"\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 <mj-dropdown\n [Data]=\"['Active', 'Inactive']\"\n [ngModelOptions]=\"{standalone: true}\" [ngModel]=\"connectionForm.get('Status')?.value\"\n (ValueChange)=\"connectionForm.get('Status')?.setValue($any($event))\">\n </mj-dropdown>\n </div>\n <div class=\"form-group\">\n <label for=\"company\">Company</label>\n <mj-dropdown\n [Data]=\"companies\"\n TextField=\"Name\"\n ValueField=\"ID\"\n [ValuePrimitive]=\"true\"\n [DefaultItem]=\"{ Name: 'Global (all companies)', ID: '' }\"\n [ngModelOptions]=\"{standalone: true}\" [ngModel]=\"connectionForm.get('CompanyID')?.value\"\n (ValueChange)=\"connectionForm.get('CompanyID')?.setValue($any($event))\">\n </mj-dropdown>\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 <mj-dropdown\n [Data]=\"credentials\"\n TextField=\"Name\"\n ValueField=\"ID\"\n [ValuePrimitive]=\"true\"\n [DefaultItem]=\"{ Name: 'No credential (anonymous)', ID: '' }\"\n [ngModelOptions]=\"{standalone: true}\" [ngModel]=\"connectionForm.get('CredentialID')?.value\"\n (ValueChange)=\"connectionForm.get('CredentialID')?.setValue($any($event))\">\n </mj-dropdown>\n <button mjButton\n type=\"button\"\n variant=\"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 class=\"mj-input\"\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\" class=\"mj-checkbox\" 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\" class=\"mj-checkbox\" 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\" class=\"mj-checkbox\" 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\" class=\"mj-checkbox\" 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 <mj-numeric-input\n [Min]=\"0\"\n [Max]=\"10485760\"\n [Step]=\"10240\"\n [ngModelOptions]=\"{standalone: true}\" [ngModel]=\"connectionForm.get('MaxOutputLogSize')?.value\"\n (ngModelChange)=\"connectionForm.get('MaxOutputLogSize')?.setValue($event)\">\n </mj-numeric-input>\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 class=\"mj-textarea\"\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 <mj-dialog-actions>\n <button mjButton variant=\"primary\" (click)=\"save()\" [disabled]=\"IsSaving\">\n @if (IsSaving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n }\n {{ IsEditMode ? 'Update' : 'Create' }}\n </button>\n <button mjButton (click)=\"cancel()\">Cancel</button>\n </mj-dialog-actions>\n </mj-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 { 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';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\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 extends BaseAngularComponent 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 super();\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: this.connection.CredentialID ?? '',\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 = RunView.FromMetadataProvider(this.ProviderToUse);\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 = this.ProviderToUse;\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 <mj-dialog\n [Visible]=\"true\"\n [Title]=\"DialogTitle\"\n (Close)=\"cancel()\"\n [Width]=\"600\">\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 <mj-dropdown\n [Data]=\"ActiveServers\"\n TextField=\"Name\"\n ValueField=\"ID\"\n [ValuePrimitive]=\"true\"\n [DefaultItem]=\"{ Name: 'Select a server...', ID: '' }\"\n [ngModelOptions]=\"{standalone: true}\" [ngModel]=\"connectionForm.get('MCPServerID')?.value\"\n (ValueChange)=\"connectionForm.get('MCPServerID')?.setValue($any($event)); onServerChange()\">\n <ng-template #mjDropdownItem 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 </mj-dropdown>\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 class=\"mj-input\"\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 class=\"mj-textarea\"\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 <mj-dropdown\n [Data]=\"['Active', 'Inactive']\"\n [ngModelOptions]=\"{standalone: true}\" [ngModel]=\"connectionForm.get('Status')?.value\"\n (ValueChange)=\"connectionForm.get('Status')?.setValue($any($event))\">\n </mj-dropdown>\n </div>\n <div class=\"form-group\">\n <label for=\"company\">Company</label>\n <mj-dropdown\n [Data]=\"companies\"\n TextField=\"Name\"\n ValueField=\"ID\"\n [ValuePrimitive]=\"true\"\n [DefaultItem]=\"{ Name: 'Global (all companies)', ID: '' }\"\n [ngModelOptions]=\"{standalone: true}\" [ngModel]=\"connectionForm.get('CompanyID')?.value\"\n (ValueChange)=\"connectionForm.get('CompanyID')?.setValue($any($event))\">\n </mj-dropdown>\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 <mj-dropdown\n [Data]=\"credentials\"\n TextField=\"Name\"\n ValueField=\"ID\"\n [ValuePrimitive]=\"true\"\n [DefaultItem]=\"{ Name: 'No credential (anonymous)', ID: '' }\"\n [ngModelOptions]=\"{standalone: true}\" [ngModel]=\"connectionForm.get('CredentialID')?.value\"\n (ValueChange)=\"connectionForm.get('CredentialID')?.setValue($any($event))\">\n </mj-dropdown>\n <button mjButton\n type=\"button\"\n variant=\"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 class=\"mj-input\"\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\" class=\"mj-checkbox\" 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\" class=\"mj-checkbox\" 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\" class=\"mj-checkbox\" 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\" class=\"mj-checkbox\" 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 <mj-numeric-input\n [Min]=\"0\"\n [Max]=\"10485760\"\n [Step]=\"10240\"\n [ngModelOptions]=\"{standalone: true}\" [ngModel]=\"connectionForm.get('MaxOutputLogSize')?.value\"\n (ngModelChange)=\"connectionForm.get('MaxOutputLogSize')?.setValue($event)\">\n </mj-numeric-input>\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 class=\"mj-textarea\"\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 <mj-dialog-actions>\n <button mjButton variant=\"primary\" (click)=\"save()\" [disabled]=\"IsSaving\">\n @if (IsSaving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n }\n {{ IsEditMode ? 'Update' : 'Create' }}\n </button>\n <button mjButton (click)=\"cancel()\">Cancel</button>\n </mj-dialog-actions>\n </mj-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"]}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import { EventEmitter, OnInit, OnChanges, SimpleChanges, ChangeDetectorRef } from '@angular/core';
|
|
7
7
|
import { FormBuilder, FormGroup } from '@angular/forms';
|
|
8
8
|
import { MCPServerData } from '../mcp-dashboard.component';
|
|
9
|
+
import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
9
10
|
import * as i0 from "@angular/core";
|
|
10
11
|
/**
|
|
11
12
|
* Transport type options
|
|
@@ -33,7 +34,7 @@ export interface ServerDialogResult {
|
|
|
33
34
|
/**
|
|
34
35
|
* MCP Server Dialog Component
|
|
35
36
|
*/
|
|
36
|
-
export declare class MCPServerDialogComponent implements OnInit, OnChanges {
|
|
37
|
+
export declare class MCPServerDialogComponent extends BaseAngularComponent implements OnInit, OnChanges {
|
|
37
38
|
private fb;
|
|
38
39
|
private cdr;
|
|
39
40
|
server: MCPServerData | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server-dialog.component.d.ts","sourceRoot":"","sources":["../../../src/MCP/components/mcp-server-dialog.component.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC5H,OAAO,EAAE,WAAW,EAAE,SAAS,EAAc,MAAM,gBAAgB,CAAC;AAGpE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;;
|
|
1
|
+
{"version":3,"file":"mcp-server-dialog.component.d.ts","sourceRoot":"","sources":["../../../src/MCP/components/mcp-server-dialog.component.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC5H,OAAO,EAAE,WAAW,EAAE,SAAS,EAAc,MAAM,gBAAgB,CAAC;AAGpE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;;AAErE;;GAEG;AACH,eAAO,MAAM,eAAe;;;;GAK3B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU;;;;GAOtB,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,aAAa,CAAC;CAC1B;AAED;;GAEG;AACH,qBAMa,wBAAyB,SAAQ,oBAAqB,YAAW,MAAM,EAAE,SAAS;IA0CvF,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,GAAG;IAzCN,MAAM,EAAE,aAAa,GAAG,IAAI,CAAQ;IACpC,OAAO,UAAS;IACf,KAAK,mCAA0C;IAElD,UAAU,EAAE,SAAS,CAAC;IACtB,cAAc;;;;QAAmB;IACjC,SAAS;;;;QAAc;IACvB,QAAQ,UAAS;IACjB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE1C,IAAW,UAAU,IAAI,OAAO,CAE/B;IAED,IAAW,WAAW,IAAI,MAAM,CAE/B;IAED,IAAW,qBAAqB,IAAI,MAAM,CAEzC;IAED,IAAW,WAAW,IAAI,OAAO,CAGhC;IAED,IAAW,eAAe,IAAI,OAAO,CAEpC;IAED,IAAW,gBAAgB,IAAI,MAAM,CAEpC;IAED,IAAW,QAAQ,IAAI,OAAO,CAE7B;gBAGW,EAAE,EAAE,WAAW,EACf,GAAG,EAAE,iBAAiB;IAMlC,QAAQ,IAAI,IAAI;IAIhB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAQzC,OAAO,CAAC,UAAU;IAsBlB,OAAO,CAAC,cAAc;IA+CtB,OAAO,CAAC,gBAAgB;IA4BjB,qBAAqB,IAAI,IAAI;IAI7B,gBAAgB,IAAI,IAAI;IAIlB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAkE3B,MAAM,IAAI,IAAI;IAId,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;yCA5OvD,wBAAwB;2CAAxB,wBAAwB;CAgPpC"}
|
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
7
7
|
import { Validators } from '@angular/forms';
|
|
8
|
-
import {
|
|
8
|
+
import { CompositeKey } from '@memberjunction/core';
|
|
9
|
+
import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
9
10
|
import * as i0 from "@angular/core";
|
|
10
11
|
import * as i1 from "@angular/forms";
|
|
11
12
|
import * as i2 from "@memberjunction/ng-ui-components";
|
|
@@ -321,7 +322,7 @@ export const AUTH_TYPES = [
|
|
|
321
322
|
/**
|
|
322
323
|
* MCP Server Dialog Component
|
|
323
324
|
*/
|
|
324
|
-
export class MCPServerDialogComponent {
|
|
325
|
+
export class MCPServerDialogComponent extends BaseAngularComponent {
|
|
325
326
|
fb;
|
|
326
327
|
cdr;
|
|
327
328
|
server = null;
|
|
@@ -355,6 +356,7 @@ export class MCPServerDialogComponent {
|
|
|
355
356
|
return this.SelectedAuthType === 'OAuth2';
|
|
356
357
|
}
|
|
357
358
|
constructor(fb, cdr) {
|
|
359
|
+
super();
|
|
358
360
|
this.fb = fb;
|
|
359
361
|
this.cdr = cdr;
|
|
360
362
|
this.serverForm = this.createForm();
|
|
@@ -479,7 +481,7 @@ export class MCPServerDialogComponent {
|
|
|
479
481
|
this.ErrorMessage = null;
|
|
480
482
|
this.cdr.detectChanges();
|
|
481
483
|
try {
|
|
482
|
-
const md =
|
|
484
|
+
const md = this.ProviderToUse;
|
|
483
485
|
const entity = await md.GetEntityObject('MJ: MCP Servers');
|
|
484
486
|
if (this.IsEditMode && this.server) {
|
|
485
487
|
await entity.InnerLoad(new CompositeKey([{ FieldName: 'ID', Value: this.server.ID }]));
|
|
@@ -539,7 +541,7 @@ export class MCPServerDialogComponent {
|
|
|
539
541
|
return control?.hasError(errorType) && control?.touched || false;
|
|
540
542
|
}
|
|
541
543
|
static ɵfac = function MCPServerDialogComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || MCPServerDialogComponent)(i0.ɵɵdirectiveInject(i1.FormBuilder), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
|
|
542
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MCPServerDialogComponent, selectors: [["mj-mcp-server-dialog"]], inputs: { server: "server", visible: "visible" }, outputs: { close: "close" }, standalone: false, features: [i0.ɵɵNgOnChangesFeature], decls: 1, vars: 1, consts: [["mjDropdownItem", ""], [3, "Visible", "Title", "Width"], [3, "Close", "Visible", "Title", "Width"], [1, "server-form", 3, "formGroup"], [1, "error-banner"], [1, "form-section"], [1, "fa-solid", "fa-info-circle"], [1, "form-group"], ["for", "name"], [1, "required"], ["id", "name", "formControlName", "Name", "placeholder", "e.g., GitHub MCP Server", 1, "mj-input"], [1, "error-text"], ["for", "description"], ["id", "description", "formControlName", "Description", "placeholder", "Optional description of this server", 1, "mj-textarea", 3, "rows"], ["for", "status"], [3, "ValueChange", "Data", "ngModelOptions", "ngModel"], [1, "fa-solid", "fa-network-wired"], ["for", "transportType"], ["TextField", "label", "ValueField", "value", 3, "ValueChange", "Data", "ValuePrimitive", "ngModelOptions", "ngModel"], [1, "fa-solid", "fa-shield-halved"], ["for", "authType"], [1, "form-section", "oauth-section"], [1, "fa-solid", "fa-gauge-high"], [1, "form-row"], [1, "form-group", "half"], ["for", "rateLimitMinute"], ["Placeholder", "No limit", 3, "ngModelChange", "Min", "ngModelOptions", "ngModel"], ["for", "rateLimitHour"], ["for", "requestTimeout"], [3, "ngModelChange", "Min", "Max", "Step", "ngModelOptions", "ngModel"], [1, "hint"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], [1, "fa-solid", "fa-spinner", "fa-spin"], ["mjButton", "", 3, "click"], [1, "fa-solid", "fa-exclamation-triangle"], [1, "transport-option"], [1, "transport-label"], [1, "transport-desc"], ["for", "serverUrl"], ["id", "serverUrl", "formControlName", "ServerURL", "placeholder", "https://api.example.com/mcp", 1, "mj-input"], ["for", "command"], ["id", "command", "formControlName", "Command", "placeholder", "e.g., npx or /usr/local/bin/mcp-server", 1, "mj-input"], ["for", "commandArgs"], ["id", "commandArgs", "formControlName", "CommandArgs", "placeholder", "[\"arg1\", \"arg2\"]", 1, "mj-input"], [1, "auth-option"], [1, "auth-label"], [1, "auth-desc"], [1, "fa-solid", "fa-key"], ["for", "oauthIssuerUrl"], ["id", "oauthIssuerUrl", "formControlName", "OAuthIssuerURL", "placeholder", "https://auth.example.com", 1, "mj-input"], ["for", "oauthScopes"], ["id", "oauthScopes", "formControlName", "OAuthScopes", "placeholder", "openid profile email", 1, "mj-input"], ["for", "oauthCacheTtl"], ["Placeholder", "1440", 3, "ngModelChange", "Min", "ngModelOptions", "ngModel"], [1, "oauth-client-section"], [1, "section-hint"], ["for", "oauthClientId"], ["id", "oauthClientId", "formControlName", "OAuthClientID", "placeholder", "your-client-id", 1, "mj-input"], ["for", "oauthClientSecret"], ["id", "oauthClientSecret", "formControlName", "OAuthClientSecretEncrypted", "type", "password", "placeholder", "your-client-secret", 1, "mj-input"]], template: function MCPServerDialogComponent_Template(rf, ctx) { if (rf & 1) {
|
|
544
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MCPServerDialogComponent, selectors: [["mj-mcp-server-dialog"]], inputs: { server: "server", visible: "visible" }, outputs: { close: "close" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 1, vars: 1, consts: [["mjDropdownItem", ""], [3, "Visible", "Title", "Width"], [3, "Close", "Visible", "Title", "Width"], [1, "server-form", 3, "formGroup"], [1, "error-banner"], [1, "form-section"], [1, "fa-solid", "fa-info-circle"], [1, "form-group"], ["for", "name"], [1, "required"], ["id", "name", "formControlName", "Name", "placeholder", "e.g., GitHub MCP Server", 1, "mj-input"], [1, "error-text"], ["for", "description"], ["id", "description", "formControlName", "Description", "placeholder", "Optional description of this server", 1, "mj-textarea", 3, "rows"], ["for", "status"], [3, "ValueChange", "Data", "ngModelOptions", "ngModel"], [1, "fa-solid", "fa-network-wired"], ["for", "transportType"], ["TextField", "label", "ValueField", "value", 3, "ValueChange", "Data", "ValuePrimitive", "ngModelOptions", "ngModel"], [1, "fa-solid", "fa-shield-halved"], ["for", "authType"], [1, "form-section", "oauth-section"], [1, "fa-solid", "fa-gauge-high"], [1, "form-row"], [1, "form-group", "half"], ["for", "rateLimitMinute"], ["Placeholder", "No limit", 3, "ngModelChange", "Min", "ngModelOptions", "ngModel"], ["for", "rateLimitHour"], ["for", "requestTimeout"], [3, "ngModelChange", "Min", "Max", "Step", "ngModelOptions", "ngModel"], [1, "hint"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], [1, "fa-solid", "fa-spinner", "fa-spin"], ["mjButton", "", 3, "click"], [1, "fa-solid", "fa-exclamation-triangle"], [1, "transport-option"], [1, "transport-label"], [1, "transport-desc"], ["for", "serverUrl"], ["id", "serverUrl", "formControlName", "ServerURL", "placeholder", "https://api.example.com/mcp", 1, "mj-input"], ["for", "command"], ["id", "command", "formControlName", "Command", "placeholder", "e.g., npx or /usr/local/bin/mcp-server", 1, "mj-input"], ["for", "commandArgs"], ["id", "commandArgs", "formControlName", "CommandArgs", "placeholder", "[\"arg1\", \"arg2\"]", 1, "mj-input"], [1, "auth-option"], [1, "auth-label"], [1, "auth-desc"], [1, "fa-solid", "fa-key"], ["for", "oauthIssuerUrl"], ["id", "oauthIssuerUrl", "formControlName", "OAuthIssuerURL", "placeholder", "https://auth.example.com", 1, "mj-input"], ["for", "oauthScopes"], ["id", "oauthScopes", "formControlName", "OAuthScopes", "placeholder", "openid profile email", 1, "mj-input"], ["for", "oauthCacheTtl"], ["Placeholder", "1440", 3, "ngModelChange", "Min", "ngModelOptions", "ngModel"], [1, "oauth-client-section"], [1, "section-hint"], ["for", "oauthClientId"], ["id", "oauthClientId", "formControlName", "OAuthClientID", "placeholder", "your-client-id", 1, "mj-input"], ["for", "oauthClientSecret"], ["id", "oauthClientSecret", "formControlName", "OAuthClientSecretEncrypted", "type", "password", "placeholder", "your-client-secret", 1, "mj-input"]], template: function MCPServerDialogComponent_Template(rf, ctx) { if (rf & 1) {
|
|
543
545
|
i0.ɵɵconditionalCreate(0, MCPServerDialogComponent_Conditional_0_Template, 72, 42, "mj-dialog", 1);
|
|
544
546
|
} if (rf & 2) {
|
|
545
547
|
i0.ɵɵconditional(ctx.visible ? 0 : -1);
|
|
@@ -555,5 +557,5 @@ export class MCPServerDialogComponent {
|
|
|
555
557
|
}], close: [{
|
|
556
558
|
type: Output
|
|
557
559
|
}] }); })();
|
|
558
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MCPServerDialogComponent, { className: "MCPServerDialogComponent", filePath: "src/MCP/components/mcp-server-dialog.component.ts", lineNumber:
|
|
560
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MCPServerDialogComponent, { className: "MCPServerDialogComponent", filePath: "src/MCP/components/mcp-server-dialog.component.ts", lineNumber: 53 }); })();
|
|
559
561
|
//# sourceMappingURL=mcp-server-dialog.component.js.map
|