@memberjunction/ng-dashboards 5.34.1 → 5.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AI/components/agents/agent-configuration.component.d.ts +51 -0
- package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-configuration.component.js +399 -292
- package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts +8 -2
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js +87 -85
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts +75 -0
- package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/ai-analytics-resource.component.js +400 -89
- package/dist/AI/components/analytics/ai-analytics-resource.component.js.map +1 -1
- package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts +5 -0
- package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/analytics-filter-bar.component.js +184 -135
- package/dist/AI/components/analytics/analytics-filter-bar.component.js.map +1 -1
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts +8 -2
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.js +104 -103
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.js.map +1 -1
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts +8 -2
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.js +76 -74
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.js +67 -87
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.js.map +1 -1
- package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts +12 -19
- package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/model-performance/model-performance.component.js +96 -203
- package/dist/AI/components/analytics/model-performance/model-performance.component.js.map +1 -1
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js +110 -126
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js +61 -77
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +990 -992
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +6 -3
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +493 -490
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
- package/dist/AI/components/models/model-management.component.d.ts +17 -0
- package/dist/AI/components/models/model-management.component.d.ts.map +1 -1
- package/dist/AI/components/models/model-management.component.js +370 -425
- package/dist/AI/components/models/model-management.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.d.ts +17 -0
- package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.js +317 -357
- package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
- package/dist/AI/components/requests/agent-requests-resource.component.d.ts +11 -0
- package/dist/AI/components/requests/agent-requests-resource.component.d.ts.map +1 -1
- package/dist/AI/components/requests/agent-requests-resource.component.js +170 -175
- package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
- package/dist/AI/components/system/system-configuration.component.d.ts +19 -0
- package/dist/AI/components/system/system-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/system/system-configuration.component.js +403 -362
- package/dist/AI/components/system/system-configuration.component.js.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.js +781 -783
- package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts +8 -3
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.js +547 -521
- package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
- package/dist/Actions/components/actions-overview.component.d.ts +6 -0
- package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +79 -30
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.d.ts +9 -3
- package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.js +196 -142
- package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.d.ts +41 -1
- package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.js +388 -94
- package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
- package/dist/Actions/components/explorer/index.d.ts +0 -1
- package/dist/Actions/components/explorer/index.d.ts.map +1 -1
- package/dist/Actions/components/explorer/index.js +0 -1
- package/dist/Actions/components/explorer/index.js.map +1 -1
- package/dist/Admin/admin-data-schema.component.js +32 -40
- package/dist/Admin/admin-data-schema.component.js.map +1 -1
- package/dist/Admin/admin-dev-tools-resource.component.js +32 -40
- package/dist/Admin/admin-dev-tools-resource.component.js.map +1 -1
- package/dist/Admin/admin-identity-access.component.js +32 -40
- package/dist/Admin/admin-identity-access.component.js.map +1 -1
- package/dist/Admin/admin-monitoring.component.js +32 -40
- package/dist/Admin/admin-monitoring.component.js.map +1 -1
- package/dist/ApplicationRoles/application-roles-resource.component.js +76 -82
- package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
- package/dist/Archiving/components/archive-config-resource.component.d.ts.map +1 -1
- package/dist/Archiving/components/archive-config-resource.component.js +24 -5
- package/dist/Archiving/components/archive-config-resource.component.js.map +1 -1
- package/dist/Archiving/components/archive-runs-resource.component.d.ts.map +1 -1
- package/dist/Archiving/components/archive-runs-resource.component.js +24 -5
- package/dist/Archiving/components/archive-runs-resource.component.js.map +1 -1
- package/dist/Communication/communication-logs-resource.component.d.ts +1 -1
- package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-logs-resource.component.js +80 -99
- package/dist/Communication/communication-logs-resource.component.js.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.js +127 -106
- package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
- package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-providers-resource.component.js +44 -45
- package/dist/Communication/communication-providers-resource.component.js.map +1 -1
- package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-runs-resource.component.js +60 -58
- package/dist/Communication/communication-runs-resource.component.js.map +1 -1
- package/dist/Communication/communication-templates-resource.component.d.ts +1 -1
- package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-templates-resource.component.js +139 -162
- package/dist/Communication/communication-templates-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.d.ts +7 -0
- package/dist/Credentials/components/credentials-audit-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.js +310 -297
- package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.js +245 -266
- package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.d.ts +7 -0
- package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.js +381 -399
- package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-overview-resource.component.js +222 -228
- package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.d.ts +6 -0
- package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.js +294 -305
- package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts +8 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts.map +1 -1
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +21 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js.map +1 -1
- package/dist/DatabaseDesigner/components/entity-list.component.js +147 -160
- package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js +19 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.js +20 -16
- package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
- package/dist/Home/home-dashboard.component.d.ts +6 -0
- package/dist/Home/home-dashboard.component.d.ts.map +1 -1
- package/dist/Home/home-dashboard.component.js +521 -485
- package/dist/Home/home-dashboard.component.js.map +1 -1
- package/dist/Integration/components/activity/activity.component.d.ts +8 -0
- package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
- package/dist/Integration/components/activity/activity.component.js +309 -318
- package/dist/Integration/components/activity/activity.component.js.map +1 -1
- package/dist/Integration/components/connections/connections.component.js +866 -847
- package/dist/Integration/components/connections/connections.component.js.map +1 -1
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +234 -233
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
- package/dist/Integration/components/overview/overview.component.js +182 -163
- package/dist/Integration/components/overview/overview.component.js.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.d.ts +2 -0
- package/dist/Integration/components/pipelines/pipelines.component.d.ts.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.js +610 -606
- package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
- package/dist/Integration/components/schedules/schedules.component.js +241 -241
- package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
- package/dist/Integration/integration.module.d.ts +1 -1
- package/dist/Integration/integration.module.d.ts.map +1 -1
- package/dist/Integration/integration.module.js +28 -1
- package/dist/Integration/integration.module.js.map +1 -1
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +673 -674
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +54 -51
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +745 -703
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts +12 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +191 -120
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts +18 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +486 -532
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.js +152 -160
- package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.js +302 -319
- package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.js +234 -246
- package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
- package/dist/MCP/mcp-dashboard.component.d.ts +20 -0
- package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
- package/dist/MCP/mcp-dashboard.component.js +1248 -1338
- package/dist/MCP/mcp-dashboard.component.js.map +1 -1
- package/dist/MCP/mcp.module.d.ts +1 -1
- package/dist/MCP/mcp.module.d.ts.map +1 -1
- package/dist/MCP/mcp.module.js +34 -1
- package/dist/MCP/mcp.module.js.map +1 -1
- package/dist/Permissions/audit-log-resource.component.js +76 -85
- package/dist/Permissions/audit-log-resource.component.js.map +1 -1
- package/dist/Permissions/resource-access-resource.component.js +64 -69
- package/dist/Permissions/resource-access-resource.component.js.map +1 -1
- package/dist/Permissions/user-access-resource.component.js +63 -74
- package/dist/Permissions/user-access-resource.component.js.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js +2 -2
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts +2 -1
- package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-activity-resource.component.js +11 -12
- package/dist/Scheduling/components/scheduling-activity-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-activity.component.d.ts +9 -1
- package/dist/Scheduling/components/scheduling-activity.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-activity.component.js +250 -197
- package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts +2 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.js +11 -12
- package/dist/Scheduling/components/scheduling-jobs-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs.component.d.ts +9 -1
- package/dist/Scheduling/components/scheduling-jobs.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs.component.js +203 -147
- package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts +2 -1
- package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-overview-resource.component.js +11 -12
- package/dist/Scheduling/components/scheduling-overview-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-overview.component.d.ts +3 -1
- package/dist/Scheduling/components/scheduling-overview.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-overview.component.js +224 -190
- package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.d.ts +19 -6
- package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.js +262 -104
- package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.js +773 -783
- package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
- package/dist/Testing/components/testing-analytics-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-analytics-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-analytics-resource.component.js +7 -14
- package/dist/Testing/components/testing-analytics-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-analytics.component.d.ts +3 -1
- package/dist/Testing/components/testing-analytics.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-analytics.component.js +420 -393
- package/dist/Testing/components/testing-analytics.component.js.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.js +16 -19
- package/dist/Testing/components/testing-dashboard-tab-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab.component.d.ts +3 -1
- package/dist/Testing/components/testing-dashboard-tab.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab.component.js +157 -122
- package/dist/Testing/components/testing-dashboard-tab.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-explorer-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer-resource.component.js +7 -12
- package/dist/Testing/components/testing-explorer-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer.component.d.ts +8 -1
- package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer.component.js +587 -608
- package/dist/Testing/components/testing-explorer.component.js.map +1 -1
- package/dist/Testing/components/testing-review-resource.component.d.ts +4 -1
- package/dist/Testing/components/testing-review-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-review-resource.component.js +9 -12
- package/dist/Testing/components/testing-review-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-review.component.d.ts +3 -1
- package/dist/Testing/components/testing-review.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-review.component.js +310 -274
- package/dist/Testing/components/testing-review.component.js.map +1 -1
- package/dist/Testing/components/testing-runs-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-runs-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-runs-resource.component.js +16 -19
- package/dist/Testing/components/testing-runs-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-runs.component.d.ts +3 -1
- package/dist/Testing/components/testing-runs.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-runs.component.js +307 -273
- package/dist/Testing/components/testing-runs.component.js.map +1 -1
- package/dist/Testing/testing-dashboard.component.d.ts +2 -0
- package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
- package/dist/Testing/testing-dashboard.component.js +107 -93
- package/dist/Testing/testing-dashboard.component.js.map +1 -1
- package/dist/VersionHistory/components/diff-resource.component.js +185 -188
- package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/graph-resource.component.js +154 -184
- package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/labels-resource.component.d.ts +7 -0
- package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -1
- package/dist/VersionHistory/components/labels-resource.component.js +350 -354
- package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/restore-resource.component.js +163 -169
- package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
- package/dist/actions-dashboards.module.d.ts +15 -16
- package/dist/actions-dashboards.module.d.ts.map +1 -1
- package/dist/actions-dashboards.module.js +34 -11
- package/dist/actions-dashboards.module.js.map +1 -1
- package/dist/ai-dashboards.module.d.ts +45 -48
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +36 -10
- package/dist/ai-dashboards.module.js.map +1 -1
- package/dist/archiving-dashboards.module.d.ts +2 -1
- package/dist/archiving-dashboards.module.d.ts.map +1 -1
- package/dist/archiving-dashboards.module.js +12 -2
- package/dist/archiving-dashboards.module.js.map +1 -1
- package/dist/communication-dashboards.module.d.ts +2 -1
- package/dist/communication-dashboards.module.d.ts.map +1 -1
- package/dist/communication-dashboards.module.js +24 -3
- package/dist/communication-dashboards.module.js.map +1 -1
- package/dist/core-dashboards.module.d.ts +1 -1
- package/dist/core-dashboards.module.d.ts.map +1 -1
- package/dist/core-dashboards.module.js +31 -1
- package/dist/core-dashboards.module.js.map +1 -1
- package/dist/credentials-dashboards.module.d.ts +1 -1
- package/dist/credentials-dashboards.module.d.ts.map +1 -1
- package/dist/credentials-dashboards.module.js +28 -1
- package/dist/credentials-dashboards.module.js.map +1 -1
- package/dist/lists-dashboards.module.d.ts +1 -1
- package/dist/lists-dashboards.module.d.ts.map +1 -1
- package/dist/lists-dashboards.module.js +28 -1
- package/dist/lists-dashboards.module.js.map +1 -1
- package/dist/public-api.d.ts +2 -2
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +3 -3
- package/dist/public-api.js.map +1 -1
- package/dist/scheduling-dashboards.module.d.ts +1 -1
- package/dist/scheduling-dashboards.module.d.ts.map +1 -1
- package/dist/scheduling-dashboards.module.js +31 -1
- package/dist/scheduling-dashboards.module.js.map +1 -1
- package/dist/testing-dashboards.module.d.ts +8 -7
- package/dist/testing-dashboards.module.d.ts.map +1 -1
- package/dist/testing-dashboards.module.js +30 -0
- package/dist/testing-dashboards.module.js.map +1 -1
- package/package.json +52 -52
- package/dist/AI/components/agents/agent-filter-panel.component.d.ts +0 -56
- package/dist/AI/components/agents/agent-filter-panel.component.d.ts.map +0 -1
- package/dist/AI/components/agents/agent-filter-panel.component.js +0 -285
- package/dist/AI/components/agents/agent-filter-panel.component.js.map +0 -1
- package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts +0 -49
- package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts.map +0 -1
- package/dist/AI/components/prompts/prompt-filter-panel.component.js +0 -184
- package/dist/AI/components/prompts/prompt-filter-panel.component.js.map +0 -1
- package/dist/AI/components/system/system-config-filter-panel.component.d.ts +0 -33
- package/dist/AI/components/system/system-config-filter-panel.component.d.ts.map +0 -1
- package/dist/AI/components/system/system-config-filter-panel.component.js +0 -144
- package/dist/AI/components/system/system-config-filter-panel.component.js.map +0 -1
- package/dist/Actions/components/explorer/action-toolbar.component.d.ts +0 -63
- package/dist/Actions/components/explorer/action-toolbar.component.d.ts.map +0 -1
- package/dist/Actions/components/explorer/action-toolbar.component.js +0 -463
- package/dist/Actions/components/explorer/action-toolbar.component.js.map +0 -1
|
@@ -24,36 +24,53 @@ const _forTrack0 = ($index, $item) => $item.Integration.ID;
|
|
|
24
24
|
const _forTrack1 = ($index, $item) => $item.Name;
|
|
25
25
|
const _forTrack2 = ($index, $item) => $item.ID;
|
|
26
26
|
const _forTrack3 = ($index, $item) => $item.Number;
|
|
27
|
-
function
|
|
28
|
-
i0.ɵɵelementStart(0, "div",
|
|
29
|
-
i0.ɵɵelement(1, "mj-
|
|
27
|
+
function ConnectionsComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
28
|
+
i0.ɵɵelementStart(0, "div", 2);
|
|
29
|
+
i0.ɵɵelement(1, "mj-stat-badge", 13);
|
|
30
|
+
i0.ɵɵelementEnd();
|
|
31
|
+
} if (rf & 2) {
|
|
32
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
33
|
+
i0.ɵɵadvance();
|
|
34
|
+
i0.ɵɵproperty("Count", ctx_r0.Connections.length)("Label", ctx_r0.Connections.length === 1 ? "integration" : "integrations");
|
|
35
|
+
} }
|
|
36
|
+
function ConnectionsComponent_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
37
|
+
const _r2 = i0.ɵɵgetCurrentView();
|
|
38
|
+
i0.ɵɵelementStart(0, "button", 14);
|
|
39
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_5_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.OpenWizard()); });
|
|
40
|
+
i0.ɵɵelement(1, "i", 15);
|
|
41
|
+
i0.ɵɵtext(2, " Add Integration ");
|
|
42
|
+
i0.ɵɵelementEnd();
|
|
43
|
+
} }
|
|
44
|
+
function ConnectionsComponent_Conditional_8_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
45
|
+
i0.ɵɵelementStart(0, "div", 16);
|
|
46
|
+
i0.ɵɵelement(1, "mj-loading", 19);
|
|
30
47
|
i0.ɵɵelementEnd();
|
|
31
48
|
} }
|
|
32
|
-
function
|
|
49
|
+
function ConnectionsComponent_Conditional_8_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
33
50
|
const _r3 = i0.ɵɵgetCurrentView();
|
|
34
|
-
i0.ɵɵelementStart(0, "div",
|
|
35
|
-
i0.ɵɵelement(1, "i",
|
|
51
|
+
i0.ɵɵelementStart(0, "div", 17);
|
|
52
|
+
i0.ɵɵelement(1, "i", 20);
|
|
36
53
|
i0.ɵɵelementStart(2, "h3");
|
|
37
54
|
i0.ɵɵtext(3, "No integrations yet");
|
|
38
55
|
i0.ɵɵelementEnd();
|
|
39
56
|
i0.ɵɵelementStart(4, "p");
|
|
40
57
|
i0.ɵɵtext(5, "Connect your first external system to start syncing data.");
|
|
41
58
|
i0.ɵɵelementEnd();
|
|
42
|
-
i0.ɵɵelementStart(6, "button",
|
|
43
|
-
i0.ɵɵlistener("click", function
|
|
44
|
-
i0.ɵɵelement(7, "i",
|
|
59
|
+
i0.ɵɵelementStart(6, "button", 21);
|
|
60
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_1_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.OpenWizard()); });
|
|
61
|
+
i0.ɵɵelement(7, "i", 15);
|
|
45
62
|
i0.ɵɵtext(8, " Add Your First Integration ");
|
|
46
63
|
i0.ɵɵelementEnd()();
|
|
47
64
|
} }
|
|
48
|
-
function
|
|
49
|
-
i0.ɵɵelement(0, "i",
|
|
65
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_For_2_Conditional_22_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
66
|
+
i0.ɵɵelement(0, "i", 50);
|
|
50
67
|
} }
|
|
51
|
-
function
|
|
52
|
-
i0.ɵɵelement(0, "i",
|
|
68
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_For_2_Conditional_22_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
69
|
+
i0.ɵɵelement(0, "i", 51);
|
|
53
70
|
} }
|
|
54
|
-
function
|
|
55
|
-
i0.ɵɵelementStart(0, "div",
|
|
56
|
-
i0.ɵɵconditionalCreate(1,
|
|
71
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_For_2_Conditional_22_Template(rf, ctx) { if (rf & 1) {
|
|
72
|
+
i0.ɵɵelementStart(0, "div", 49);
|
|
73
|
+
i0.ɵɵconditionalCreate(1, ConnectionsComponent_Conditional_8_Conditional_2_For_2_Conditional_22_Conditional_1_Template, 1, 0, "i", 50)(2, ConnectionsComponent_Conditional_8_Conditional_2_For_2_Conditional_22_Conditional_2_Template, 1, 0, "i", 51);
|
|
57
74
|
i0.ɵɵelementStart(3, "span");
|
|
58
75
|
i0.ɵɵtext(4);
|
|
59
76
|
i0.ɵɵelementEnd()();
|
|
@@ -65,351 +82,336 @@ function ConnectionsComponent_Conditional_1_Conditional_11_For_2_Conditional_22_
|
|
|
65
82
|
i0.ɵɵadvance(3);
|
|
66
83
|
i0.ɵɵtextInterpolate(testResult_r7.Message);
|
|
67
84
|
} }
|
|
68
|
-
function
|
|
69
|
-
i0.ɵɵelement(0, "i",
|
|
85
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_For_2_Conditional_23_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
86
|
+
i0.ɵɵelement(0, "i", 44);
|
|
70
87
|
i0.ɵɵtext(1, " Deleting... ");
|
|
71
88
|
} }
|
|
72
|
-
function
|
|
89
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_For_2_Conditional_23_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
73
90
|
i0.ɵɵtext(0, " Delete ");
|
|
74
91
|
} }
|
|
75
|
-
function
|
|
92
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_For_2_Conditional_23_Template(rf, ctx) { if (rf & 1) {
|
|
76
93
|
const _r8 = i0.ɵɵgetCurrentView();
|
|
77
|
-
i0.ɵɵelementStart(0, "div",
|
|
78
|
-
i0.ɵɵelement(2, "i",
|
|
79
|
-
i0.ɵɵelementStart(3, "span",
|
|
94
|
+
i0.ɵɵelementStart(0, "div", 41)(1, "div", 52);
|
|
95
|
+
i0.ɵɵelement(2, "i", 53);
|
|
96
|
+
i0.ɵɵelementStart(3, "span", 54);
|
|
80
97
|
i0.ɵɵtext(4, "Delete this integration and all its entity maps?");
|
|
81
98
|
i0.ɵɵelementEnd();
|
|
82
|
-
i0.ɵɵelementStart(5, "div",
|
|
83
|
-
i0.ɵɵlistener("click", function
|
|
84
|
-
i0.ɵɵconditionalCreate(7,
|
|
99
|
+
i0.ɵɵelementStart(5, "div", 55)(6, "button", 56);
|
|
100
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_For_2_Conditional_23_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r8); const summary_r6 = i0.ɵɵnextContext().$implicit; const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.ConfirmDelete(summary_r6.Integration.ID)); });
|
|
101
|
+
i0.ɵɵconditionalCreate(7, ConnectionsComponent_Conditional_8_Conditional_2_For_2_Conditional_23_Conditional_7_Template, 2, 0)(8, ConnectionsComponent_Conditional_8_Conditional_2_For_2_Conditional_23_Conditional_8_Template, 1, 0);
|
|
85
102
|
i0.ɵɵelementEnd();
|
|
86
|
-
i0.ɵɵelementStart(9, "button",
|
|
87
|
-
i0.ɵɵlistener("click", function
|
|
103
|
+
i0.ɵɵelementStart(9, "button", 45);
|
|
104
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_For_2_Conditional_23_Template_button_click_9_listener() { i0.ɵɵrestoreView(_r8); const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.CancelDelete()); });
|
|
88
105
|
i0.ɵɵtext(10, " Cancel ");
|
|
89
106
|
i0.ɵɵelementEnd()()()();
|
|
90
107
|
} if (rf & 2) {
|
|
91
|
-
const
|
|
108
|
+
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
92
109
|
i0.ɵɵadvance(6);
|
|
93
|
-
i0.ɵɵproperty("disabled",
|
|
110
|
+
i0.ɵɵproperty("disabled", ctx_r0.IsDeleting);
|
|
94
111
|
i0.ɵɵadvance();
|
|
95
|
-
i0.ɵɵconditional(
|
|
112
|
+
i0.ɵɵconditional(ctx_r0.IsDeleting ? 7 : 8);
|
|
96
113
|
} }
|
|
97
|
-
function
|
|
98
|
-
i0.ɵɵelement(0, "i",
|
|
114
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_For_2_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
115
|
+
i0.ɵɵelement(0, "i", 44);
|
|
99
116
|
} }
|
|
100
|
-
function
|
|
117
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_For_2_Conditional_27_Template(rf, ctx) { if (rf & 1) {
|
|
101
118
|
i0.ɵɵtext(0, " Test ");
|
|
102
119
|
} }
|
|
103
|
-
function
|
|
104
|
-
i0.ɵɵelement(0, "i",
|
|
120
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_For_2_Conditional_30_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
121
|
+
i0.ɵɵelement(0, "i", 44);
|
|
105
122
|
i0.ɵɵtext(1, " Syncing... ");
|
|
106
123
|
} }
|
|
107
|
-
function
|
|
108
|
-
i0.ɵɵelement(0, "i",
|
|
124
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_For_2_Conditional_30_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
125
|
+
i0.ɵɵelement(0, "i", 39);
|
|
109
126
|
i0.ɵɵtext(1, " Sync ");
|
|
110
|
-
i0.ɵɵelement(2, "i",
|
|
127
|
+
i0.ɵɵelement(2, "i", 59);
|
|
111
128
|
} }
|
|
112
|
-
function
|
|
129
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_For_2_Conditional_30_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
113
130
|
const _r10 = i0.ɵɵgetCurrentView();
|
|
114
|
-
i0.ɵɵelementStart(0, "div",
|
|
131
|
+
i0.ɵɵelementStart(0, "div", 58)(1, "div", 60)(2, "span", 61);
|
|
115
132
|
i0.ɵɵtext(3, "Pull (External \u2192 MJ)");
|
|
116
133
|
i0.ɵɵelementEnd();
|
|
117
|
-
i0.ɵɵelementStart(4, "button",
|
|
118
|
-
i0.ɵɵlistener("click", function
|
|
119
|
-
i0.ɵɵelement(5, "i",
|
|
134
|
+
i0.ɵɵelementStart(4, "button", 62);
|
|
135
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_For_2_Conditional_30_Conditional_4_Template_button_click_4_listener($event) { i0.ɵɵrestoreView(_r10); const summary_r6 = i0.ɵɵnextContext(2).$implicit; const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.RunSyncWithDirection(summary_r6.Integration.ID, false, "Pull", $event)); });
|
|
136
|
+
i0.ɵɵelement(5, "i", 63);
|
|
120
137
|
i0.ɵɵtext(6, " Incremental Pull ");
|
|
121
138
|
i0.ɵɵelementEnd();
|
|
122
|
-
i0.ɵɵelementStart(7, "button",
|
|
123
|
-
i0.ɵɵlistener("click", function
|
|
124
|
-
i0.ɵɵelement(8, "i",
|
|
139
|
+
i0.ɵɵelementStart(7, "button", 62);
|
|
140
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_For_2_Conditional_30_Conditional_4_Template_button_click_7_listener($event) { i0.ɵɵrestoreView(_r10); const summary_r6 = i0.ɵɵnextContext(2).$implicit; const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.RunSyncWithDirection(summary_r6.Integration.ID, true, "Pull", $event)); });
|
|
141
|
+
i0.ɵɵelement(8, "i", 64);
|
|
125
142
|
i0.ɵɵtext(9, " Full Pull ");
|
|
126
143
|
i0.ɵɵelementEnd()();
|
|
127
|
-
i0.ɵɵelementStart(10, "div",
|
|
144
|
+
i0.ɵɵelementStart(10, "div", 60)(11, "span", 61);
|
|
128
145
|
i0.ɵɵtext(12, "Push (MJ \u2192 External)");
|
|
129
146
|
i0.ɵɵelementEnd();
|
|
130
|
-
i0.ɵɵelementStart(13, "button",
|
|
131
|
-
i0.ɵɵlistener("click", function
|
|
132
|
-
i0.ɵɵelement(14, "i",
|
|
147
|
+
i0.ɵɵelementStart(13, "button", 62);
|
|
148
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_For_2_Conditional_30_Conditional_4_Template_button_click_13_listener($event) { i0.ɵɵrestoreView(_r10); const summary_r6 = i0.ɵɵnextContext(2).$implicit; const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.RunSyncWithDirection(summary_r6.Integration.ID, false, "Push", $event)); });
|
|
149
|
+
i0.ɵɵelement(14, "i", 65);
|
|
133
150
|
i0.ɵɵtext(15, " Incremental Push ");
|
|
134
151
|
i0.ɵɵelementEnd();
|
|
135
|
-
i0.ɵɵelementStart(16, "button",
|
|
136
|
-
i0.ɵɵlistener("click", function
|
|
137
|
-
i0.ɵɵelement(17, "i",
|
|
152
|
+
i0.ɵɵelementStart(16, "button", 62);
|
|
153
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_For_2_Conditional_30_Conditional_4_Template_button_click_16_listener($event) { i0.ɵɵrestoreView(_r10); const summary_r6 = i0.ɵɵnextContext(2).$implicit; const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.RunSyncWithDirection(summary_r6.Integration.ID, true, "Push", $event)); });
|
|
154
|
+
i0.ɵɵelement(17, "i", 64);
|
|
138
155
|
i0.ɵɵtext(18, " Full Push ");
|
|
139
156
|
i0.ɵɵelementEnd()();
|
|
140
|
-
i0.ɵɵelementStart(19, "div",
|
|
157
|
+
i0.ɵɵelementStart(19, "div", 60)(20, "span", 61);
|
|
141
158
|
i0.ɵɵtext(21, "Bidirectional");
|
|
142
159
|
i0.ɵɵelementEnd();
|
|
143
|
-
i0.ɵɵelementStart(22, "button",
|
|
144
|
-
i0.ɵɵlistener("click", function
|
|
145
|
-
i0.ɵɵelement(23, "i",
|
|
160
|
+
i0.ɵɵelementStart(22, "button", 62);
|
|
161
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_For_2_Conditional_30_Conditional_4_Template_button_click_22_listener($event) { i0.ɵɵrestoreView(_r10); const summary_r6 = i0.ɵɵnextContext(2).$implicit; const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.RunSyncWithDirection(summary_r6.Integration.ID, false, "Bidirectional", $event)); });
|
|
162
|
+
i0.ɵɵelement(23, "i", 39);
|
|
146
163
|
i0.ɵɵtext(24, " Incremental Both ");
|
|
147
164
|
i0.ɵɵelementEnd();
|
|
148
|
-
i0.ɵɵelementStart(25, "button",
|
|
149
|
-
i0.ɵɵlistener("click", function
|
|
150
|
-
i0.ɵɵelement(26, "i",
|
|
165
|
+
i0.ɵɵelementStart(25, "button", 62);
|
|
166
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_For_2_Conditional_30_Conditional_4_Template_button_click_25_listener($event) { i0.ɵɵrestoreView(_r10); const summary_r6 = i0.ɵɵnextContext(2).$implicit; const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.RunSyncWithDirection(summary_r6.Integration.ID, true, "Bidirectional", $event)); });
|
|
167
|
+
i0.ɵɵelement(26, "i", 64);
|
|
151
168
|
i0.ɵɵtext(27, " Full Both ");
|
|
152
169
|
i0.ɵɵelementEnd()()();
|
|
153
170
|
} }
|
|
154
|
-
function
|
|
171
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_For_2_Conditional_30_Template(rf, ctx) { if (rf & 1) {
|
|
155
172
|
const _r9 = i0.ɵɵgetCurrentView();
|
|
156
|
-
i0.ɵɵelementStart(0, "div",
|
|
157
|
-
i0.ɵɵlistener("click", function
|
|
158
|
-
i0.ɵɵconditionalCreate(2,
|
|
173
|
+
i0.ɵɵelementStart(0, "div", 46)(1, "button", 57);
|
|
174
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_For_2_Conditional_30_Template_button_click_1_listener($event) { i0.ɵɵrestoreView(_r9); const summary_r6 = i0.ɵɵnextContext().$implicit; const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.ToggleSyncMenu(summary_r6.Integration.ID, $event)); });
|
|
175
|
+
i0.ɵɵconditionalCreate(2, ConnectionsComponent_Conditional_8_Conditional_2_For_2_Conditional_30_Conditional_2_Template, 2, 0)(3, ConnectionsComponent_Conditional_8_Conditional_2_For_2_Conditional_30_Conditional_3_Template, 3, 0);
|
|
159
176
|
i0.ɵɵelementEnd();
|
|
160
|
-
i0.ɵɵconditionalCreate(4,
|
|
177
|
+
i0.ɵɵconditionalCreate(4, ConnectionsComponent_Conditional_8_Conditional_2_For_2_Conditional_30_Conditional_4_Template, 28, 0, "div", 58);
|
|
161
178
|
i0.ɵɵelementEnd();
|
|
162
179
|
} if (rf & 2) {
|
|
163
180
|
const summary_r6 = i0.ɵɵnextContext().$implicit;
|
|
164
|
-
const
|
|
181
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
165
182
|
i0.ɵɵadvance();
|
|
166
|
-
i0.ɵɵproperty("disabled", !!
|
|
183
|
+
i0.ɵɵproperty("disabled", !!ctx_r0.SyncingIntegrationID);
|
|
167
184
|
i0.ɵɵadvance();
|
|
168
|
-
i0.ɵɵconditional(
|
|
185
|
+
i0.ɵɵconditional(ctx_r0.IsSyncing(summary_r6.Integration.ID) ? 2 : 3);
|
|
169
186
|
i0.ɵɵadvance(2);
|
|
170
|
-
i0.ɵɵconditional(
|
|
187
|
+
i0.ɵɵconditional(ctx_r0.SyncMenuIntegrationID === summary_r6.Integration.ID ? 4 : -1);
|
|
171
188
|
} }
|
|
172
|
-
function
|
|
189
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
173
190
|
const _r5 = i0.ɵɵgetCurrentView();
|
|
174
|
-
i0.ɵɵelementStart(0, "div",
|
|
175
|
-
i0.ɵɵlistener("click", function
|
|
176
|
-
i0.ɵɵelementStart(2, "div",
|
|
177
|
-
i0.ɵɵelement(4, "i",
|
|
191
|
+
i0.ɵɵelementStart(0, "div", 22)(1, "div", 27);
|
|
192
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_For_2_Template_div_click_1_listener() { const summary_r6 = i0.ɵɵrestoreView(_r5).$implicit; const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.SelectIntegrationCard(summary_r6)); });
|
|
193
|
+
i0.ɵɵelementStart(2, "div", 28)(3, "div", 29);
|
|
194
|
+
i0.ɵɵelement(4, "i", 30);
|
|
178
195
|
i0.ɵɵelementEnd();
|
|
179
196
|
i0.ɵɵelementStart(5, "span");
|
|
180
197
|
i0.ɵɵtext(6);
|
|
181
198
|
i0.ɵɵelementEnd()();
|
|
182
|
-
i0.ɵɵelementStart(7, "div",
|
|
199
|
+
i0.ɵɵelementStart(7, "div", 31)(8, "div", 32);
|
|
183
200
|
i0.ɵɵtext(9);
|
|
184
201
|
i0.ɵɵelementEnd();
|
|
185
|
-
i0.ɵɵelementStart(10, "div",
|
|
202
|
+
i0.ɵɵelementStart(10, "div", 33);
|
|
186
203
|
i0.ɵɵtext(11);
|
|
187
204
|
i0.ɵɵelementEnd();
|
|
188
|
-
i0.ɵɵelementStart(12, "div",
|
|
205
|
+
i0.ɵɵelementStart(12, "div", 34)(13, "span", 35);
|
|
189
206
|
i0.ɵɵtext(14);
|
|
190
207
|
i0.ɵɵelementEnd();
|
|
191
|
-
i0.ɵɵelementStart(15, "span",
|
|
208
|
+
i0.ɵɵelementStart(15, "span", 36);
|
|
192
209
|
i0.ɵɵtext(16, "\u00B7");
|
|
193
210
|
i0.ɵɵelementEnd();
|
|
194
|
-
i0.ɵɵelementStart(17, "span",
|
|
211
|
+
i0.ɵɵelementStart(17, "span", 37);
|
|
195
212
|
i0.ɵɵtext(18);
|
|
196
213
|
i0.ɵɵelementEnd()();
|
|
197
|
-
i0.ɵɵelementStart(19, "div",
|
|
198
|
-
i0.ɵɵelement(20, "i",
|
|
214
|
+
i0.ɵɵelementStart(19, "div", 38);
|
|
215
|
+
i0.ɵɵelement(20, "i", 39);
|
|
199
216
|
i0.ɵɵtext(21);
|
|
200
217
|
i0.ɵɵelementEnd();
|
|
201
|
-
i0.ɵɵconditionalCreate(22,
|
|
218
|
+
i0.ɵɵconditionalCreate(22, ConnectionsComponent_Conditional_8_Conditional_2_For_2_Conditional_22_Template, 5, 6, "div", 40);
|
|
202
219
|
i0.ɵɵelementEnd()();
|
|
203
|
-
i0.ɵɵconditionalCreate(23,
|
|
204
|
-
i0.ɵɵelementStart(24, "div",
|
|
205
|
-
i0.ɵɵlistener("click", function
|
|
206
|
-
i0.ɵɵconditionalCreate(26,
|
|
220
|
+
i0.ɵɵconditionalCreate(23, ConnectionsComponent_Conditional_8_Conditional_2_For_2_Conditional_23_Template, 11, 2, "div", 41);
|
|
221
|
+
i0.ɵɵelementStart(24, "div", 42)(25, "button", 43);
|
|
222
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_For_2_Template_button_click_25_listener() { const summary_r6 = i0.ɵɵrestoreView(_r5).$implicit; const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.TestExistingConnection(summary_r6.Integration.ID)); });
|
|
223
|
+
i0.ɵɵconditionalCreate(26, ConnectionsComponent_Conditional_8_Conditional_2_For_2_Conditional_26_Template, 1, 0, "i", 44)(27, ConnectionsComponent_Conditional_8_Conditional_2_For_2_Conditional_27_Template, 1, 0);
|
|
207
224
|
i0.ɵɵelementEnd();
|
|
208
|
-
i0.ɵɵelementStart(28, "button",
|
|
209
|
-
i0.ɵɵlistener("click", function
|
|
225
|
+
i0.ɵɵelementStart(28, "button", 45);
|
|
226
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_For_2_Template_button_click_28_listener() { const summary_r6 = i0.ɵɵrestoreView(_r5).$implicit; const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.OnMenuAction("edit", summary_r6)); });
|
|
210
227
|
i0.ɵɵtext(29, " Configure ");
|
|
211
228
|
i0.ɵɵelementEnd();
|
|
212
|
-
i0.ɵɵconditionalCreate(30,
|
|
213
|
-
i0.ɵɵelementStart(31, "button",
|
|
214
|
-
i0.ɵɵlistener("click", function
|
|
215
|
-
i0.ɵɵelement(32, "i",
|
|
229
|
+
i0.ɵɵconditionalCreate(30, ConnectionsComponent_Conditional_8_Conditional_2_For_2_Conditional_30_Template, 5, 3, "div", 46);
|
|
230
|
+
i0.ɵɵelementStart(31, "button", 47);
|
|
231
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_For_2_Template_button_click_31_listener() { const summary_r6 = i0.ɵɵrestoreView(_r5).$implicit; const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.OnMenuAction("delete", summary_r6)); });
|
|
232
|
+
i0.ɵɵelement(32, "i", 48);
|
|
216
233
|
i0.ɵɵelementEnd()()();
|
|
217
234
|
} if (rf & 2) {
|
|
218
235
|
let tmp_21_0;
|
|
219
236
|
const summary_r6 = ctx.$implicit;
|
|
220
|
-
const
|
|
237
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
221
238
|
i0.ɵɵadvance(3);
|
|
222
|
-
i0.ɵɵstyleProp("background-color",
|
|
239
|
+
i0.ɵɵstyleProp("background-color", ctx_r0.GetIconBrandColor(summary_r6.Integration.Integration));
|
|
223
240
|
i0.ɵɵadvance();
|
|
224
|
-
i0.ɵɵclassMap(
|
|
241
|
+
i0.ɵɵclassMap(ctx_r0.GetIntegrationIcon(summary_r6.Integration.Integration, summary_r6.Icon));
|
|
225
242
|
i0.ɵɵadvance();
|
|
226
|
-
i0.ɵɵclassMap(
|
|
243
|
+
i0.ɵɵclassMap(ctx_r0.GetStatusBadgeClass(summary_r6));
|
|
227
244
|
i0.ɵɵadvance();
|
|
228
|
-
i0.ɵɵtextInterpolate(
|
|
245
|
+
i0.ɵɵtextInterpolate(ctx_r0.GetStatusBadge(summary_r6));
|
|
229
246
|
i0.ɵɵadvance(3);
|
|
230
247
|
i0.ɵɵtextInterpolate(summary_r6.Integration.Name);
|
|
231
248
|
i0.ɵɵadvance(2);
|
|
232
249
|
i0.ɵɵtextInterpolate(summary_r6.Integration.Company);
|
|
233
250
|
i0.ɵɵadvance(3);
|
|
234
|
-
i0.ɵɵtextInterpolate(
|
|
251
|
+
i0.ɵɵtextInterpolate(ctx_r0.GetSourceTypeLabel(summary_r6));
|
|
235
252
|
i0.ɵɵadvance(4);
|
|
236
|
-
i0.ɵɵtextInterpolate(
|
|
253
|
+
i0.ɵɵtextInterpolate(ctx_r0.GetCredentialHint(summary_r6));
|
|
237
254
|
i0.ɵɵadvance(3);
|
|
238
|
-
i0.ɵɵtextInterpolate1(" Syncing ",
|
|
255
|
+
i0.ɵɵtextInterpolate1(" Syncing ", ctx_r0.GetEntityMapCount(summary_r6.Integration.ID), " entities ");
|
|
239
256
|
i0.ɵɵadvance();
|
|
240
|
-
i0.ɵɵconditional((tmp_21_0 =
|
|
257
|
+
i0.ɵɵconditional((tmp_21_0 = ctx_r0.GetCardTestResult(summary_r6.Integration.ID)) ? 22 : -1, tmp_21_0);
|
|
241
258
|
i0.ɵɵadvance();
|
|
242
|
-
i0.ɵɵconditional(
|
|
259
|
+
i0.ɵɵconditional(ctx_r0.IsDeleteConfirming(summary_r6.Integration.ID) ? 23 : -1);
|
|
243
260
|
i0.ɵɵadvance(2);
|
|
244
|
-
i0.ɵɵproperty("disabled", !!
|
|
261
|
+
i0.ɵɵproperty("disabled", !!ctx_r0.TestingCardID);
|
|
245
262
|
i0.ɵɵadvance();
|
|
246
|
-
i0.ɵɵconditional(
|
|
263
|
+
i0.ɵɵconditional(ctx_r0.IsTestingCard(summary_r6.Integration.ID) ? 26 : 27);
|
|
247
264
|
i0.ɵɵadvance(4);
|
|
248
|
-
i0.ɵɵconditional(
|
|
265
|
+
i0.ɵɵconditional(ctx_r0.IsConnectionActive(summary_r6) ? 30 : -1);
|
|
249
266
|
} }
|
|
250
|
-
function
|
|
267
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
251
268
|
const _r4 = i0.ɵɵgetCurrentView();
|
|
252
|
-
i0.ɵɵelementStart(0, "div",
|
|
253
|
-
i0.ɵɵrepeaterCreate(1,
|
|
254
|
-
i0.ɵɵelementStart(3, "div",
|
|
255
|
-
i0.ɵɵlistener("click", function
|
|
256
|
-
i0.ɵɵelementStart(4, "div",
|
|
257
|
-
i0.ɵɵelement(6, "i",
|
|
258
|
-
i0.ɵɵelementEnd();
|
|
259
|
-
i0.ɵɵelementStart(7, "span",
|
|
269
|
+
i0.ɵɵelementStart(0, "div", 18);
|
|
270
|
+
i0.ɵɵrepeaterCreate(1, ConnectionsComponent_Conditional_8_Conditional_2_For_2_Template, 33, 17, "div", 22, _forTrack0);
|
|
271
|
+
i0.ɵɵelementStart(3, "div", 23);
|
|
272
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.OpenWizard()); });
|
|
273
|
+
i0.ɵɵelementStart(4, "div", 24)(5, "div", 25);
|
|
274
|
+
i0.ɵɵelement(6, "i", 15);
|
|
275
|
+
i0.ɵɵelementEnd();
|
|
276
|
+
i0.ɵɵelementStart(7, "span", 26);
|
|
260
277
|
i0.ɵɵtext(8, "Add Integration");
|
|
261
278
|
i0.ɵɵelementEnd()()()();
|
|
262
279
|
} if (rf & 2) {
|
|
263
|
-
const
|
|
280
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
264
281
|
i0.ɵɵadvance();
|
|
265
|
-
i0.ɵɵrepeater(
|
|
282
|
+
i0.ɵɵrepeater(ctx_r0.Connections);
|
|
266
283
|
} }
|
|
267
|
-
function
|
|
268
|
-
|
|
269
|
-
i0.ɵɵ
|
|
270
|
-
i0.ɵɵ
|
|
271
|
-
i0.ɵɵelementEnd();
|
|
272
|
-
i0.ɵɵelementStart(4, "span", 10);
|
|
273
|
-
i0.ɵɵtext(5);
|
|
274
|
-
i0.ɵɵelementEnd()();
|
|
275
|
-
i0.ɵɵelementStart(6, "button", 11);
|
|
276
|
-
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_1_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OpenWizard()); });
|
|
277
|
-
i0.ɵɵelement(7, "i", 12);
|
|
278
|
-
i0.ɵɵtext(8, " Add Integration ");
|
|
279
|
-
i0.ɵɵelementEnd()();
|
|
280
|
-
i0.ɵɵconditionalCreate(9, ConnectionsComponent_Conditional_1_Conditional_9_Template, 2, 0, "div", 13);
|
|
281
|
-
i0.ɵɵconditionalCreate(10, ConnectionsComponent_Conditional_1_Conditional_10_Template, 9, 0, "div", 14);
|
|
282
|
-
i0.ɵɵconditionalCreate(11, ConnectionsComponent_Conditional_1_Conditional_11_Template, 9, 0, "div", 15);
|
|
284
|
+
function ConnectionsComponent_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
285
|
+
i0.ɵɵconditionalCreate(0, ConnectionsComponent_Conditional_8_Conditional_0_Template, 2, 0, "div", 16);
|
|
286
|
+
i0.ɵɵconditionalCreate(1, ConnectionsComponent_Conditional_8_Conditional_1_Template, 9, 0, "div", 17);
|
|
287
|
+
i0.ɵɵconditionalCreate(2, ConnectionsComponent_Conditional_8_Conditional_2_Template, 9, 0, "div", 18);
|
|
283
288
|
} if (rf & 2) {
|
|
284
|
-
const
|
|
285
|
-
i0.ɵɵ
|
|
286
|
-
i0.ɵɵtextInterpolate2("", ctx_r1.Connections.length, " integration", ctx_r1.Connections.length !== 1 ? "s" : "");
|
|
287
|
-
i0.ɵɵadvance(4);
|
|
288
|
-
i0.ɵɵconditional(ctx_r1.IsLoading ? 9 : -1);
|
|
289
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
290
|
+
i0.ɵɵconditional(ctx_r0.IsLoading ? 0 : -1);
|
|
289
291
|
i0.ɵɵadvance();
|
|
290
|
-
i0.ɵɵconditional(!
|
|
292
|
+
i0.ɵɵconditional(!ctx_r0.IsLoading && ctx_r0.Connections.length === 0 ? 1 : -1);
|
|
291
293
|
i0.ɵɵadvance();
|
|
292
|
-
i0.ɵɵconditional(!
|
|
294
|
+
i0.ɵɵconditional(!ctx_r0.IsLoading && ctx_r0.Connections.length > 0 ? 2 : -1);
|
|
293
295
|
} }
|
|
294
|
-
function
|
|
296
|
+
function ConnectionsComponent_Conditional_9_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
295
297
|
const _r11 = i0.ɵɵgetCurrentView();
|
|
296
|
-
i0.ɵɵelementStart(0, "app-visual-field-editor",
|
|
297
|
-
i0.ɵɵlistener("Close", function
|
|
298
|
+
i0.ɵɵelementStart(0, "app-visual-field-editor", 67);
|
|
299
|
+
i0.ɵɵlistener("Close", function ConnectionsComponent_Conditional_9_Conditional_1_Template_app_visual_field_editor_Close_0_listener() { i0.ɵɵrestoreView(_r11); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.CloseEntityMapEditor()); });
|
|
298
300
|
i0.ɵɵelementEnd();
|
|
299
301
|
} if (rf & 2) {
|
|
300
|
-
const
|
|
301
|
-
i0.ɵɵproperty("EntityMap",
|
|
302
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
303
|
+
i0.ɵɵproperty("EntityMap", ctx_r0.EditorEntityMap)("CompanyIntegrationID", ctx_r0.SelectedSummary.Integration.ID)("RunViewProvider", ctx_r0.RunViewToUse);
|
|
302
304
|
} }
|
|
303
|
-
function
|
|
304
|
-
i0.ɵɵelement(0, "i",
|
|
305
|
+
function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_21_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
306
|
+
i0.ɵɵelement(0, "i", 44);
|
|
305
307
|
i0.ɵɵtext(1, " Syncing... ");
|
|
306
308
|
} }
|
|
307
|
-
function
|
|
308
|
-
i0.ɵɵelement(0, "i",
|
|
309
|
+
function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_21_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
310
|
+
i0.ɵɵelement(0, "i", 39);
|
|
309
311
|
i0.ɵɵtext(1, " Sync ");
|
|
310
|
-
i0.ɵɵelement(2, "i",
|
|
312
|
+
i0.ɵɵelement(2, "i", 59);
|
|
311
313
|
} }
|
|
312
|
-
function
|
|
314
|
+
function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_21_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
313
315
|
const _r14 = i0.ɵɵgetCurrentView();
|
|
314
|
-
i0.ɵɵelementStart(0, "div",
|
|
316
|
+
i0.ɵɵelementStart(0, "div", 99)(1, "div", 60)(2, "span", 61);
|
|
315
317
|
i0.ɵɵtext(3, "Pull (External \u2192 MJ)");
|
|
316
318
|
i0.ɵɵelementEnd();
|
|
317
|
-
i0.ɵɵelementStart(4, "button",
|
|
318
|
-
i0.ɵɵlistener("click", function
|
|
319
|
-
i0.ɵɵelement(5, "i",
|
|
319
|
+
i0.ɵɵelementStart(4, "button", 62);
|
|
320
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_21_Conditional_4_Template_button_click_4_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.RunSyncWithDirection(ctx_r0.SelectedSummary.Integration.ID, false, "Pull", $event)); });
|
|
321
|
+
i0.ɵɵelement(5, "i", 63);
|
|
320
322
|
i0.ɵɵtext(6, " Incremental Pull ");
|
|
321
323
|
i0.ɵɵelementEnd();
|
|
322
|
-
i0.ɵɵelementStart(7, "button",
|
|
323
|
-
i0.ɵɵlistener("click", function
|
|
324
|
-
i0.ɵɵelement(8, "i",
|
|
324
|
+
i0.ɵɵelementStart(7, "button", 62);
|
|
325
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_21_Conditional_4_Template_button_click_7_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.RunSyncWithDirection(ctx_r0.SelectedSummary.Integration.ID, true, "Pull", $event)); });
|
|
326
|
+
i0.ɵɵelement(8, "i", 64);
|
|
325
327
|
i0.ɵɵtext(9, " Full Pull ");
|
|
326
328
|
i0.ɵɵelementEnd()();
|
|
327
|
-
i0.ɵɵelementStart(10, "div",
|
|
329
|
+
i0.ɵɵelementStart(10, "div", 60)(11, "span", 61);
|
|
328
330
|
i0.ɵɵtext(12, "Push (MJ \u2192 External)");
|
|
329
331
|
i0.ɵɵelementEnd();
|
|
330
|
-
i0.ɵɵelementStart(13, "button",
|
|
331
|
-
i0.ɵɵlistener("click", function
|
|
332
|
-
i0.ɵɵelement(14, "i",
|
|
332
|
+
i0.ɵɵelementStart(13, "button", 62);
|
|
333
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_21_Conditional_4_Template_button_click_13_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.RunSyncWithDirection(ctx_r0.SelectedSummary.Integration.ID, false, "Push", $event)); });
|
|
334
|
+
i0.ɵɵelement(14, "i", 65);
|
|
333
335
|
i0.ɵɵtext(15, " Incremental Push ");
|
|
334
336
|
i0.ɵɵelementEnd();
|
|
335
|
-
i0.ɵɵelementStart(16, "button",
|
|
336
|
-
i0.ɵɵlistener("click", function
|
|
337
|
-
i0.ɵɵelement(17, "i",
|
|
337
|
+
i0.ɵɵelementStart(16, "button", 62);
|
|
338
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_21_Conditional_4_Template_button_click_16_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.RunSyncWithDirection(ctx_r0.SelectedSummary.Integration.ID, true, "Push", $event)); });
|
|
339
|
+
i0.ɵɵelement(17, "i", 64);
|
|
338
340
|
i0.ɵɵtext(18, " Full Push ");
|
|
339
341
|
i0.ɵɵelementEnd()();
|
|
340
|
-
i0.ɵɵelementStart(19, "div",
|
|
342
|
+
i0.ɵɵelementStart(19, "div", 60)(20, "span", 61);
|
|
341
343
|
i0.ɵɵtext(21, "Bidirectional");
|
|
342
344
|
i0.ɵɵelementEnd();
|
|
343
|
-
i0.ɵɵelementStart(22, "button",
|
|
344
|
-
i0.ɵɵlistener("click", function
|
|
345
|
-
i0.ɵɵelement(23, "i",
|
|
345
|
+
i0.ɵɵelementStart(22, "button", 62);
|
|
346
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_21_Conditional_4_Template_button_click_22_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.RunSyncWithDirection(ctx_r0.SelectedSummary.Integration.ID, false, "Bidirectional", $event)); });
|
|
347
|
+
i0.ɵɵelement(23, "i", 39);
|
|
346
348
|
i0.ɵɵtext(24, " Incremental Both ");
|
|
347
349
|
i0.ɵɵelementEnd();
|
|
348
|
-
i0.ɵɵelementStart(25, "button",
|
|
349
|
-
i0.ɵɵlistener("click", function
|
|
350
|
-
i0.ɵɵelement(26, "i",
|
|
350
|
+
i0.ɵɵelementStart(25, "button", 62);
|
|
351
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_21_Conditional_4_Template_button_click_25_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.RunSyncWithDirection(ctx_r0.SelectedSummary.Integration.ID, true, "Bidirectional", $event)); });
|
|
352
|
+
i0.ɵɵelement(26, "i", 64);
|
|
351
353
|
i0.ɵɵtext(27, " Full Both ");
|
|
352
354
|
i0.ɵɵelementEnd()()();
|
|
353
355
|
} }
|
|
354
|
-
function
|
|
356
|
+
function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_21_Template(rf, ctx) { if (rf & 1) {
|
|
355
357
|
const _r13 = i0.ɵɵgetCurrentView();
|
|
356
|
-
i0.ɵɵelementStart(0, "div",
|
|
357
|
-
i0.ɵɵlistener("click", function
|
|
358
|
-
i0.ɵɵconditionalCreate(2,
|
|
358
|
+
i0.ɵɵelementStart(0, "div", 46)(1, "button", 57);
|
|
359
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_21_Template_button_click_1_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.ToggleSyncMenu(ctx_r0.SelectedSummary.Integration.ID, $event)); });
|
|
360
|
+
i0.ɵɵconditionalCreate(2, ConnectionsComponent_Conditional_9_Conditional_2_Conditional_21_Conditional_2_Template, 2, 0)(3, ConnectionsComponent_Conditional_9_Conditional_2_Conditional_21_Conditional_3_Template, 3, 0);
|
|
359
361
|
i0.ɵɵelementEnd();
|
|
360
|
-
i0.ɵɵconditionalCreate(4,
|
|
362
|
+
i0.ɵɵconditionalCreate(4, ConnectionsComponent_Conditional_9_Conditional_2_Conditional_21_Conditional_4_Template, 28, 0, "div", 99);
|
|
361
363
|
i0.ɵɵelementEnd();
|
|
362
364
|
} if (rf & 2) {
|
|
363
|
-
const
|
|
365
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
364
366
|
i0.ɵɵadvance();
|
|
365
|
-
i0.ɵɵproperty("disabled", !!
|
|
367
|
+
i0.ɵɵproperty("disabled", !!ctx_r0.SyncingIntegrationID);
|
|
366
368
|
i0.ɵɵadvance();
|
|
367
|
-
i0.ɵɵconditional(
|
|
369
|
+
i0.ɵɵconditional(ctx_r0.IsSyncing(ctx_r0.SelectedSummary.Integration.ID) ? 2 : 3);
|
|
368
370
|
i0.ɵɵadvance(2);
|
|
369
|
-
i0.ɵɵconditional(
|
|
371
|
+
i0.ɵɵconditional(ctx_r0.SyncMenuIntegrationID === ctx_r0.SelectedSummary.Integration.ID ? 4 : -1);
|
|
370
372
|
} }
|
|
371
|
-
function
|
|
373
|
+
function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_28_Template(rf, ctx) { if (rf & 1) {
|
|
372
374
|
const _r15 = i0.ɵɵgetCurrentView();
|
|
373
|
-
i0.ɵɵelementStart(0, "mj-scheduled-job-summary",
|
|
374
|
-
i0.ɵɵlistener("EditRequested", function
|
|
375
|
+
i0.ɵɵelementStart(0, "mj-scheduled-job-summary", 100);
|
|
376
|
+
i0.ɵɵlistener("EditRequested", function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_28_Template_mj_scheduled_job_summary_EditRequested_0_listener() { i0.ɵɵrestoreView(_r15); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.OpenSchedulePanel()); });
|
|
375
377
|
i0.ɵɵelementEnd();
|
|
376
378
|
} if (rf & 2) {
|
|
377
|
-
const
|
|
378
|
-
i0.ɵɵproperty("ScheduledJobID",
|
|
379
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
380
|
+
i0.ɵɵproperty("ScheduledJobID", ctx_r0.ScheduledJobID);
|
|
379
381
|
} }
|
|
380
|
-
function
|
|
382
|
+
function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_29_Template(rf, ctx) { if (rf & 1) {
|
|
381
383
|
const _r16 = i0.ɵɵgetCurrentView();
|
|
382
|
-
i0.ɵɵelementStart(0, "div",
|
|
384
|
+
i0.ɵɵelementStart(0, "div", 83)(1, "span", 101);
|
|
383
385
|
i0.ɵɵtext(2, "No sync schedule configured");
|
|
384
386
|
i0.ɵɵelementEnd();
|
|
385
|
-
i0.ɵɵelementStart(3, "button",
|
|
386
|
-
i0.ɵɵlistener("click", function
|
|
387
|
-
i0.ɵɵelement(4, "i",
|
|
387
|
+
i0.ɵɵelementStart(3, "button", 102);
|
|
388
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_29_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r16); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.OpenSchedulePanel()); });
|
|
389
|
+
i0.ɵɵelement(4, "i", 15);
|
|
388
390
|
i0.ɵɵtext(5, " Schedule Sync ");
|
|
389
391
|
i0.ɵɵelementEnd()();
|
|
390
392
|
} }
|
|
391
|
-
function
|
|
392
|
-
i0.ɵɵelement(0, "i",
|
|
393
|
+
function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_51_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
394
|
+
i0.ɵɵelement(0, "i", 50);
|
|
393
395
|
} }
|
|
394
|
-
function
|
|
395
|
-
i0.ɵɵelement(0, "i",
|
|
396
|
+
function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_51_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
397
|
+
i0.ɵɵelement(0, "i", 51);
|
|
396
398
|
} }
|
|
397
|
-
function
|
|
398
|
-
i0.ɵɵelementStart(0, "div",
|
|
399
|
-
i0.ɵɵconditionalCreate(1,
|
|
399
|
+
function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_51_Template(rf, ctx) { if (rf & 1) {
|
|
400
|
+
i0.ɵɵelementStart(0, "div", 103);
|
|
401
|
+
i0.ɵɵconditionalCreate(1, ConnectionsComponent_Conditional_9_Conditional_2_Conditional_51_Conditional_1_Template, 1, 0, "i", 50)(2, ConnectionsComponent_Conditional_9_Conditional_2_Conditional_51_Conditional_2_Template, 1, 0, "i", 51);
|
|
400
402
|
i0.ɵɵelementStart(3, "span");
|
|
401
403
|
i0.ɵɵtext(4);
|
|
402
404
|
i0.ɵɵelementEnd()();
|
|
403
405
|
} if (rf & 2) {
|
|
404
|
-
const
|
|
405
|
-
i0.ɵɵclassProp("sync-success",
|
|
406
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
407
|
+
i0.ɵɵclassProp("sync-success", ctx_r0.SyncResult.Success)("sync-failure", !ctx_r0.SyncResult.Success);
|
|
406
408
|
i0.ɵɵadvance();
|
|
407
|
-
i0.ɵɵconditional(
|
|
409
|
+
i0.ɵɵconditional(ctx_r0.SyncResult.Success ? 1 : 2);
|
|
408
410
|
i0.ɵɵadvance(3);
|
|
409
|
-
i0.ɵɵtextInterpolate(
|
|
411
|
+
i0.ɵɵtextInterpolate(ctx_r0.SyncResult.Message || (ctx_r0.SyncResult.Success ? "Sync completed successfully" : "Sync failed"));
|
|
410
412
|
} }
|
|
411
|
-
function
|
|
412
|
-
i0.ɵɵelementStart(0, "option",
|
|
413
|
+
function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_52_For_13_Template(rf, ctx) { if (rf & 1) {
|
|
414
|
+
i0.ɵɵelementStart(0, "option", 110);
|
|
413
415
|
i0.ɵɵtext(1);
|
|
414
416
|
i0.ɵɵelementEnd();
|
|
415
417
|
} if (rf & 2) {
|
|
@@ -418,33 +420,33 @@ function ConnectionsComponent_Conditional_2_Conditional_2_Conditional_52_For_13_
|
|
|
418
420
|
i0.ɵɵadvance();
|
|
419
421
|
i0.ɵɵtextInterpolate(schema_r18);
|
|
420
422
|
} }
|
|
421
|
-
function
|
|
422
|
-
i0.ɵɵelement(0, "i",
|
|
423
|
+
function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_52_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
424
|
+
i0.ɵɵelement(0, "i", 44);
|
|
423
425
|
i0.ɵɵtext(1, " Mapping... ");
|
|
424
426
|
} }
|
|
425
|
-
function
|
|
426
|
-
i0.ɵɵelement(0, "i",
|
|
427
|
+
function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_52_Conditional_27_Template(rf, ctx) { if (rf & 1) {
|
|
428
|
+
i0.ɵɵelement(0, "i", 95);
|
|
427
429
|
i0.ɵɵtext(1, " Auto-Map ");
|
|
428
430
|
} }
|
|
429
|
-
function
|
|
430
|
-
i0.ɵɵelementStart(0, "div",
|
|
431
|
-
i0.ɵɵelement(1, "i",
|
|
431
|
+
function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_52_Conditional_30_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
432
|
+
i0.ɵɵelementStart(0, "div", 124);
|
|
433
|
+
i0.ɵɵelement(1, "i", 50);
|
|
432
434
|
i0.ɵɵtext(2);
|
|
433
435
|
i0.ɵɵelementEnd();
|
|
434
436
|
} if (rf & 2) {
|
|
435
|
-
const
|
|
437
|
+
const ctx_r0 = i0.ɵɵnextContext(5);
|
|
436
438
|
i0.ɵɵadvance(2);
|
|
437
|
-
i0.ɵɵtextInterpolate4(" Created ",
|
|
439
|
+
i0.ɵɵtextInterpolate4(" Created ", ctx_r0.AutoMapResult.EntityMapsCreated, " entity map", ctx_r0.AutoMapResult.EntityMapsCreated !== 1 ? "s" : "", " with ", ctx_r0.AutoMapResult.FieldMapsCreated, " field map", ctx_r0.AutoMapResult.FieldMapsCreated !== 1 ? "s" : "", " ");
|
|
438
440
|
} }
|
|
439
|
-
function
|
|
440
|
-
i0.ɵɵelementStart(0, "div",
|
|
441
|
-
i0.ɵɵelement(1, "i",
|
|
441
|
+
function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_52_Conditional_30_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
442
|
+
i0.ɵɵelementStart(0, "div", 124);
|
|
443
|
+
i0.ɵɵelement(1, "i", 126);
|
|
442
444
|
i0.ɵɵtext(2, " All entities in this schema are already mapped. ");
|
|
443
445
|
i0.ɵɵelementEnd();
|
|
444
446
|
} }
|
|
445
|
-
function
|
|
446
|
-
i0.ɵɵelementStart(0, "div",
|
|
447
|
-
i0.ɵɵelement(1, "i",
|
|
447
|
+
function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_52_Conditional_30_Conditional_3_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
448
|
+
i0.ɵɵelementStart(0, "div", 127);
|
|
449
|
+
i0.ɵɵelement(1, "i", 128);
|
|
448
450
|
i0.ɵɵtext(2);
|
|
449
451
|
i0.ɵɵelementEnd();
|
|
450
452
|
} if (rf & 2) {
|
|
@@ -452,114 +454,114 @@ function ConnectionsComponent_Conditional_2_Conditional_2_Conditional_52_Conditi
|
|
|
452
454
|
i0.ɵɵadvance(2);
|
|
453
455
|
i0.ɵɵtextInterpolate1(" ", err_r19);
|
|
454
456
|
} }
|
|
455
|
-
function
|
|
456
|
-
i0.ɵɵelementStart(0, "div",
|
|
457
|
-
i0.ɵɵrepeaterCreate(1,
|
|
457
|
+
function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_52_Conditional_30_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
458
|
+
i0.ɵɵelementStart(0, "div", 125);
|
|
459
|
+
i0.ɵɵrepeaterCreate(1, ConnectionsComponent_Conditional_9_Conditional_2_Conditional_52_Conditional_30_Conditional_3_For_2_Template, 3, 1, "div", 127, i0.ɵɵrepeaterTrackByIdentity);
|
|
458
460
|
i0.ɵɵelementEnd();
|
|
459
461
|
} if (rf & 2) {
|
|
460
|
-
const
|
|
462
|
+
const ctx_r0 = i0.ɵɵnextContext(5);
|
|
461
463
|
i0.ɵɵadvance();
|
|
462
|
-
i0.ɵɵrepeater(
|
|
464
|
+
i0.ɵɵrepeater(ctx_r0.AutoMapResult.Errors);
|
|
463
465
|
} }
|
|
464
|
-
function
|
|
465
|
-
i0.ɵɵelementStart(0, "div",
|
|
466
|
-
i0.ɵɵconditionalCreate(1,
|
|
467
|
-
i0.ɵɵconditionalCreate(3,
|
|
466
|
+
function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_52_Conditional_30_Template(rf, ctx) { if (rf & 1) {
|
|
467
|
+
i0.ɵɵelementStart(0, "div", 123);
|
|
468
|
+
i0.ɵɵconditionalCreate(1, ConnectionsComponent_Conditional_9_Conditional_2_Conditional_52_Conditional_30_Conditional_1_Template, 3, 4, "div", 124)(2, ConnectionsComponent_Conditional_9_Conditional_2_Conditional_52_Conditional_30_Conditional_2_Template, 3, 0, "div", 124);
|
|
469
|
+
i0.ɵɵconditionalCreate(3, ConnectionsComponent_Conditional_9_Conditional_2_Conditional_52_Conditional_30_Conditional_3_Template, 3, 0, "div", 125);
|
|
468
470
|
i0.ɵɵelementEnd();
|
|
469
471
|
} if (rf & 2) {
|
|
470
|
-
const
|
|
471
|
-
i0.ɵɵclassProp("auto-map-success",
|
|
472
|
+
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
473
|
+
i0.ɵɵclassProp("auto-map-success", ctx_r0.AutoMapResult.Errors.length === 0)("auto-map-partial", ctx_r0.AutoMapResult.Errors.length > 0 && ctx_r0.AutoMapResult.EntityMapsCreated > 0)("auto-map-failure", ctx_r0.AutoMapResult.EntityMapsCreated === 0 && ctx_r0.AutoMapResult.Errors.length > 0);
|
|
472
474
|
i0.ɵɵadvance();
|
|
473
|
-
i0.ɵɵconditional(
|
|
475
|
+
i0.ɵɵconditional(ctx_r0.AutoMapResult.EntityMapsCreated > 0 ? 1 : ctx_r0.AutoMapResult.Errors.length === 0 ? 2 : -1);
|
|
474
476
|
i0.ɵɵadvance(2);
|
|
475
|
-
i0.ɵɵconditional(
|
|
477
|
+
i0.ɵɵconditional(ctx_r0.AutoMapResult.Errors.length > 0 ? 3 : -1);
|
|
476
478
|
} }
|
|
477
|
-
function
|
|
479
|
+
function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_52_Template(rf, ctx) { if (rf & 1) {
|
|
478
480
|
const _r17 = i0.ɵɵgetCurrentView();
|
|
479
|
-
i0.ɵɵelementStart(0, "div",
|
|
480
|
-
i0.ɵɵelement(2, "i",
|
|
481
|
+
i0.ɵɵelementStart(0, "div", 97)(1, "div", 104);
|
|
482
|
+
i0.ɵɵelement(2, "i", 95);
|
|
481
483
|
i0.ɵɵelementStart(3, "span");
|
|
482
484
|
i0.ɵɵtext(4, "Auto-map all entities in a schema to this integration with 1:1 field mappings");
|
|
483
485
|
i0.ɵɵelementEnd()();
|
|
484
|
-
i0.ɵɵelementStart(5, "div",
|
|
486
|
+
i0.ɵɵelementStart(5, "div", 105)(6, "div", 106)(7, "label", 107);
|
|
485
487
|
i0.ɵɵtext(8, "Target Schema");
|
|
486
488
|
i0.ɵɵelementEnd();
|
|
487
|
-
i0.ɵɵelementStart(9, "select",
|
|
488
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
489
|
-
i0.ɵɵelementStart(10, "option",
|
|
489
|
+
i0.ɵɵelementStart(9, "select", 108);
|
|
490
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_52_Template_select_ngModelChange_9_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r0 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r0.AutoMapSelectedSchema, $event) || (ctx_r0.AutoMapSelectedSchema = $event); return i0.ɵɵresetView($event); });
|
|
491
|
+
i0.ɵɵelementStart(10, "option", 109);
|
|
490
492
|
i0.ɵɵtext(11, "Select schema...");
|
|
491
493
|
i0.ɵɵelementEnd();
|
|
492
|
-
i0.ɵɵrepeaterCreate(12,
|
|
494
|
+
i0.ɵɵrepeaterCreate(12, ConnectionsComponent_Conditional_9_Conditional_2_Conditional_52_For_13_Template, 2, 2, "option", 110, i0.ɵɵrepeaterTrackByIdentity);
|
|
493
495
|
i0.ɵɵelementEnd()();
|
|
494
|
-
i0.ɵɵelementStart(14, "div",
|
|
496
|
+
i0.ɵɵelementStart(14, "div", 111)(15, "label", 107);
|
|
495
497
|
i0.ɵɵtext(16, "Direction");
|
|
496
498
|
i0.ɵɵelementEnd();
|
|
497
|
-
i0.ɵɵelementStart(17, "div",
|
|
498
|
-
i0.ɵɵlistener("click", function
|
|
499
|
-
i0.ɵɵelement(19, "i",
|
|
499
|
+
i0.ɵɵelementStart(17, "div", 112)(18, "button", 113);
|
|
500
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_52_Template_button_click_18_listener() { i0.ɵɵrestoreView(_r17); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.AutoMapDirection = "Pull"); });
|
|
501
|
+
i0.ɵɵelement(19, "i", 114);
|
|
500
502
|
i0.ɵɵelementEnd();
|
|
501
|
-
i0.ɵɵelementStart(20, "button",
|
|
502
|
-
i0.ɵɵlistener("click", function
|
|
503
|
-
i0.ɵɵelement(21, "i",
|
|
503
|
+
i0.ɵɵelementStart(20, "button", 115);
|
|
504
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_52_Template_button_click_20_listener() { i0.ɵɵrestoreView(_r17); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.AutoMapDirection = "Bidirectional"); });
|
|
505
|
+
i0.ɵɵelement(21, "i", 116);
|
|
504
506
|
i0.ɵɵelementEnd();
|
|
505
|
-
i0.ɵɵelementStart(22, "button",
|
|
506
|
-
i0.ɵɵlistener("click", function
|
|
507
|
-
i0.ɵɵelement(23, "i",
|
|
507
|
+
i0.ɵɵelementStart(22, "button", 117);
|
|
508
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_52_Template_button_click_22_listener() { i0.ɵɵrestoreView(_r17); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.AutoMapDirection = "Push"); });
|
|
509
|
+
i0.ɵɵelement(23, "i", 70);
|
|
508
510
|
i0.ɵɵelementEnd()()();
|
|
509
|
-
i0.ɵɵelementStart(24, "div",
|
|
510
|
-
i0.ɵɵlistener("click", function
|
|
511
|
-
i0.ɵɵconditionalCreate(26,
|
|
511
|
+
i0.ɵɵelementStart(24, "div", 118)(25, "button", 119);
|
|
512
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_52_Template_button_click_25_listener() { i0.ɵɵrestoreView(_r17); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.RunAutoMap()); });
|
|
513
|
+
i0.ɵɵconditionalCreate(26, ConnectionsComponent_Conditional_9_Conditional_2_Conditional_52_Conditional_26_Template, 2, 0)(27, ConnectionsComponent_Conditional_9_Conditional_2_Conditional_52_Conditional_27_Template, 2, 0);
|
|
512
514
|
i0.ɵɵelementEnd();
|
|
513
|
-
i0.ɵɵelementStart(28, "button",
|
|
514
|
-
i0.ɵɵlistener("click", function
|
|
515
|
-
i0.ɵɵelement(29, "i",
|
|
515
|
+
i0.ɵɵelementStart(28, "button", 120);
|
|
516
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_52_Template_button_click_28_listener() { i0.ɵɵrestoreView(_r17); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.CloseAutoMapPanel()); });
|
|
517
|
+
i0.ɵɵelement(29, "i", 121);
|
|
516
518
|
i0.ɵɵelementEnd()()();
|
|
517
|
-
i0.ɵɵconditionalCreate(30,
|
|
519
|
+
i0.ɵɵconditionalCreate(30, ConnectionsComponent_Conditional_9_Conditional_2_Conditional_52_Conditional_30_Template, 4, 8, "div", 122);
|
|
518
520
|
i0.ɵɵelementEnd();
|
|
519
521
|
} if (rf & 2) {
|
|
520
|
-
const
|
|
522
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
521
523
|
i0.ɵɵadvance(9);
|
|
522
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
524
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r0.AutoMapSelectedSchema);
|
|
523
525
|
i0.ɵɵadvance();
|
|
524
526
|
i0.ɵɵproperty("ngValue", "");
|
|
525
527
|
i0.ɵɵadvance(2);
|
|
526
|
-
i0.ɵɵrepeater(
|
|
528
|
+
i0.ɵɵrepeater(ctx_r0.AutoMapSchemas);
|
|
527
529
|
i0.ɵɵadvance(6);
|
|
528
|
-
i0.ɵɵclassProp("active",
|
|
530
|
+
i0.ɵɵclassProp("active", ctx_r0.AutoMapDirection === "Pull");
|
|
529
531
|
i0.ɵɵadvance(2);
|
|
530
|
-
i0.ɵɵclassProp("active",
|
|
532
|
+
i0.ɵɵclassProp("active", ctx_r0.AutoMapDirection === "Bidirectional");
|
|
531
533
|
i0.ɵɵadvance(2);
|
|
532
|
-
i0.ɵɵclassProp("active",
|
|
534
|
+
i0.ɵɵclassProp("active", ctx_r0.AutoMapDirection === "Push");
|
|
533
535
|
i0.ɵɵadvance(3);
|
|
534
|
-
i0.ɵɵproperty("disabled", !
|
|
536
|
+
i0.ɵɵproperty("disabled", !ctx_r0.CanAutoMap);
|
|
535
537
|
i0.ɵɵadvance();
|
|
536
|
-
i0.ɵɵconditional(
|
|
538
|
+
i0.ɵɵconditional(ctx_r0.IsAutoMapping ? 26 : 27);
|
|
537
539
|
i0.ɵɵadvance(4);
|
|
538
|
-
i0.ɵɵconditional(
|
|
540
|
+
i0.ɵɵconditional(ctx_r0.AutoMapResult ? 30 : -1);
|
|
539
541
|
} }
|
|
540
|
-
function
|
|
541
|
-
i0.ɵɵelement(0, "i",
|
|
542
|
+
function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_53_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
543
|
+
i0.ɵɵelement(0, "i", 44);
|
|
542
544
|
i0.ɵɵtext(1, " Creating... ");
|
|
543
545
|
} }
|
|
544
|
-
function
|
|
545
|
-
i0.ɵɵelement(0, "i",
|
|
546
|
+
function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_53_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
547
|
+
i0.ɵɵelement(0, "i", 93);
|
|
546
548
|
i0.ɵɵtext(1);
|
|
547
549
|
} if (rf & 2) {
|
|
548
|
-
const
|
|
550
|
+
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
549
551
|
i0.ɵɵadvance();
|
|
550
|
-
i0.ɵɵtextInterpolate2(" Create ",
|
|
552
|
+
i0.ɵɵtextInterpolate2(" Create ", ctx_r0.CreateTablesSelectedCount, " Table", ctx_r0.CreateTablesSelectedCount !== 1 ? "s" : "", " ");
|
|
551
553
|
} }
|
|
552
|
-
function
|
|
553
|
-
i0.ɵɵelement(0, "mj-loading",
|
|
554
|
+
function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_53_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
555
|
+
i0.ɵɵelement(0, "mj-loading", 129);
|
|
554
556
|
} }
|
|
555
|
-
function
|
|
556
|
-
i0.ɵɵelementStart(0, "div",
|
|
557
|
-
i0.ɵɵelement(1, "i",
|
|
557
|
+
function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_53_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
558
|
+
i0.ɵɵelementStart(0, "div", 130);
|
|
559
|
+
i0.ɵɵelement(1, "i", 126);
|
|
558
560
|
i0.ɵɵtext(2, " No source objects available from this connector. ");
|
|
559
561
|
i0.ɵɵelementEnd();
|
|
560
562
|
} }
|
|
561
|
-
function
|
|
562
|
-
i0.ɵɵelementStart(0, "span",
|
|
563
|
+
function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_53_Conditional_14_For_9_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
564
|
+
i0.ɵɵelementStart(0, "span", 139);
|
|
563
565
|
i0.ɵɵtext(1);
|
|
564
566
|
i0.ɵɵelementEnd();
|
|
565
567
|
} if (rf & 2) {
|
|
@@ -567,27 +569,27 @@ function ConnectionsComponent_Conditional_2_Conditional_2_Conditional_53_Conditi
|
|
|
567
569
|
i0.ɵɵadvance();
|
|
568
570
|
i0.ɵɵtextInterpolate(obj_r23.Name);
|
|
569
571
|
} }
|
|
570
|
-
function
|
|
571
|
-
i0.ɵɵelementStart(0, "span",
|
|
572
|
+
function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_53_Conditional_14_For_9_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
573
|
+
i0.ɵɵelementStart(0, "span", 140);
|
|
572
574
|
i0.ɵɵtext(1, "Custom");
|
|
573
575
|
i0.ɵɵelementEnd();
|
|
574
576
|
} }
|
|
575
|
-
function
|
|
576
|
-
i0.ɵɵelementStart(0, "span",
|
|
577
|
+
function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_53_Conditional_14_For_9_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
578
|
+
i0.ɵɵelementStart(0, "span", 141);
|
|
577
579
|
i0.ɵɵtext(1, "Registered");
|
|
578
580
|
i0.ɵɵelementEnd();
|
|
579
581
|
} }
|
|
580
|
-
function
|
|
582
|
+
function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_53_Conditional_14_For_9_Template(rf, ctx) { if (rf & 1) {
|
|
581
583
|
const _r22 = i0.ɵɵgetCurrentView();
|
|
582
|
-
i0.ɵɵelementStart(0, "label",
|
|
583
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
584
|
+
i0.ɵɵelementStart(0, "label", 136)(1, "input", 138);
|
|
585
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_53_Conditional_14_For_9_Template_input_ngModelChange_1_listener($event) { const obj_r23 = i0.ɵɵrestoreView(_r22).$implicit; i0.ɵɵtwoWayBindingSet(obj_r23.Selected, $event) || (obj_r23.Selected = $event); return i0.ɵɵresetView($event); });
|
|
584
586
|
i0.ɵɵelementEnd();
|
|
585
587
|
i0.ɵɵelementStart(2, "span");
|
|
586
588
|
i0.ɵɵtext(3);
|
|
587
589
|
i0.ɵɵelementEnd();
|
|
588
|
-
i0.ɵɵconditionalCreate(4,
|
|
589
|
-
i0.ɵɵconditionalCreate(5,
|
|
590
|
-
i0.ɵɵconditionalCreate(6,
|
|
590
|
+
i0.ɵɵconditionalCreate(4, ConnectionsComponent_Conditional_9_Conditional_2_Conditional_53_Conditional_14_For_9_Conditional_4_Template, 2, 1, "span", 139);
|
|
591
|
+
i0.ɵɵconditionalCreate(5, ConnectionsComponent_Conditional_9_Conditional_2_Conditional_53_Conditional_14_For_9_Conditional_5_Template, 2, 0, "span", 140);
|
|
592
|
+
i0.ɵɵconditionalCreate(6, ConnectionsComponent_Conditional_9_Conditional_2_Conditional_53_Conditional_14_For_9_Conditional_6_Template, 2, 0, "span", 141);
|
|
591
593
|
i0.ɵɵelementEnd();
|
|
592
594
|
} if (rf & 2) {
|
|
593
595
|
const obj_r23 = ctx.$implicit;
|
|
@@ -602,92 +604,92 @@ function ConnectionsComponent_Conditional_2_Conditional_2_Conditional_53_Conditi
|
|
|
602
604
|
i0.ɵɵadvance();
|
|
603
605
|
i0.ɵɵconditional(obj_r23.AlreadyPersisted ? 6 : -1);
|
|
604
606
|
} }
|
|
605
|
-
function
|
|
607
|
+
function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_53_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
606
608
|
const _r21 = i0.ɵɵgetCurrentView();
|
|
607
|
-
i0.ɵɵelementStart(0, "div",
|
|
608
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
609
|
+
i0.ɵɵelementStart(0, "div", 132)(1, "input", 133);
|
|
610
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_53_Conditional_14_Template_input_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r21); const ctx_r0 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r0.CreateTablesSearch, $event) || (ctx_r0.CreateTablesSearch = $event); return i0.ɵɵresetView($event); });
|
|
609
611
|
i0.ɵɵelementEnd()();
|
|
610
|
-
i0.ɵɵelementStart(2, "div",
|
|
611
|
-
i0.ɵɵlistener("change", function
|
|
612
|
+
i0.ɵɵelementStart(2, "div", 134)(3, "div", 135)(4, "label", 136)(5, "input", 137);
|
|
613
|
+
i0.ɵɵlistener("change", function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_53_Conditional_14_Template_input_change_5_listener($event) { i0.ɵɵrestoreView(_r21); const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.ToggleAllCreateTablesObjects($event.target.checked)); });
|
|
612
614
|
i0.ɵɵelementEnd();
|
|
613
615
|
i0.ɵɵelementStart(6, "span");
|
|
614
616
|
i0.ɵɵtext(7);
|
|
615
617
|
i0.ɵɵelementEnd()()();
|
|
616
|
-
i0.ɵɵrepeaterCreate(8,
|
|
618
|
+
i0.ɵɵrepeaterCreate(8, ConnectionsComponent_Conditional_9_Conditional_2_Conditional_53_Conditional_14_For_9_Template, 7, 5, "label", 136, _forTrack1);
|
|
617
619
|
i0.ɵɵelementEnd();
|
|
618
620
|
} if (rf & 2) {
|
|
619
|
-
const
|
|
621
|
+
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
620
622
|
i0.ɵɵadvance();
|
|
621
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
623
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r0.CreateTablesSearch);
|
|
622
624
|
i0.ɵɵadvance(4);
|
|
623
|
-
i0.ɵɵproperty("checked",
|
|
625
|
+
i0.ɵɵproperty("checked", ctx_r0.FilteredCreateTablesObjects.length > 0 && ctx_r0.CreateTablesSelectedCount === ctx_r0.FilteredCreateTablesObjects.length);
|
|
624
626
|
i0.ɵɵadvance(2);
|
|
625
|
-
i0.ɵɵtextInterpolate2("Select All (",
|
|
627
|
+
i0.ɵɵtextInterpolate2("Select All (", ctx_r0.FilteredCreateTablesObjects.length, " of ", ctx_r0.CreateTablesObjects.length, ")");
|
|
626
628
|
i0.ɵɵadvance();
|
|
627
|
-
i0.ɵɵrepeater(
|
|
629
|
+
i0.ɵɵrepeater(ctx_r0.FilteredCreateTablesObjects);
|
|
628
630
|
} }
|
|
629
|
-
function
|
|
630
|
-
i0.ɵɵelement(0, "i",
|
|
631
|
+
function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_53_Conditional_15_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
632
|
+
i0.ɵɵelement(0, "i", 50);
|
|
631
633
|
} }
|
|
632
|
-
function
|
|
633
|
-
i0.ɵɵelement(0, "i",
|
|
634
|
+
function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_53_Conditional_15_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
635
|
+
i0.ɵɵelement(0, "i", 51);
|
|
634
636
|
} }
|
|
635
|
-
function
|
|
636
|
-
i0.ɵɵelementStart(0, "div",
|
|
637
|
-
i0.ɵɵconditionalCreate(1,
|
|
637
|
+
function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_53_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
638
|
+
i0.ɵɵelementStart(0, "div", 123);
|
|
639
|
+
i0.ɵɵconditionalCreate(1, ConnectionsComponent_Conditional_9_Conditional_2_Conditional_53_Conditional_15_Conditional_1_Template, 1, 0, "i", 50)(2, ConnectionsComponent_Conditional_9_Conditional_2_Conditional_53_Conditional_15_Conditional_2_Template, 1, 0, "i", 51);
|
|
638
640
|
i0.ɵɵelementStart(3, "span");
|
|
639
641
|
i0.ɵɵtext(4);
|
|
640
642
|
i0.ɵɵelementEnd()();
|
|
641
643
|
} if (rf & 2) {
|
|
642
|
-
const
|
|
643
|
-
i0.ɵɵclassProp("auto-map-success",
|
|
644
|
+
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
645
|
+
i0.ɵɵclassProp("auto-map-success", ctx_r0.CreateTablesResult.Success)("auto-map-failure", !ctx_r0.CreateTablesResult.Success);
|
|
644
646
|
i0.ɵɵadvance();
|
|
645
|
-
i0.ɵɵconditional(
|
|
647
|
+
i0.ɵɵconditional(ctx_r0.CreateTablesResult.Success ? 1 : 2);
|
|
646
648
|
i0.ɵɵadvance(3);
|
|
647
|
-
i0.ɵɵtextInterpolate(
|
|
649
|
+
i0.ɵɵtextInterpolate(ctx_r0.CreateTablesResult.Message);
|
|
648
650
|
} }
|
|
649
|
-
function
|
|
651
|
+
function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_53_Template(rf, ctx) { if (rf & 1) {
|
|
650
652
|
const _r20 = i0.ɵɵgetCurrentView();
|
|
651
|
-
i0.ɵɵelementStart(0, "div",
|
|
652
|
-
i0.ɵɵelement(2, "i",
|
|
653
|
+
i0.ɵɵelementStart(0, "div", 97)(1, "div", 104);
|
|
654
|
+
i0.ɵɵelement(2, "i", 93);
|
|
653
655
|
i0.ɵɵelementStart(3, "span");
|
|
654
656
|
i0.ɵɵtext(4, "Select source objects to create as entity tables in your database");
|
|
655
657
|
i0.ɵɵelementEnd()();
|
|
656
|
-
i0.ɵɵelementStart(5, "div",
|
|
657
|
-
i0.ɵɵlistener("click", function
|
|
658
|
-
i0.ɵɵconditionalCreate(8,
|
|
658
|
+
i0.ɵɵelementStart(5, "div", 105)(6, "div", 118)(7, "button", 119);
|
|
659
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_53_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r20); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.RunCreateTables()); });
|
|
660
|
+
i0.ɵɵconditionalCreate(8, ConnectionsComponent_Conditional_9_Conditional_2_Conditional_53_Conditional_8_Template, 2, 0)(9, ConnectionsComponent_Conditional_9_Conditional_2_Conditional_53_Conditional_9_Template, 2, 2);
|
|
659
661
|
i0.ɵɵelementEnd();
|
|
660
|
-
i0.ɵɵelementStart(10, "button",
|
|
661
|
-
i0.ɵɵlistener("click", function
|
|
662
|
-
i0.ɵɵelement(11, "i",
|
|
662
|
+
i0.ɵɵelementStart(10, "button", 120);
|
|
663
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_53_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r20); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.CloseCreateTablesPanel()); });
|
|
664
|
+
i0.ɵɵelement(11, "i", 121);
|
|
663
665
|
i0.ɵɵelementEnd()()();
|
|
664
|
-
i0.ɵɵconditionalCreate(12,
|
|
665
|
-
i0.ɵɵconditionalCreate(15,
|
|
666
|
+
i0.ɵɵconditionalCreate(12, ConnectionsComponent_Conditional_9_Conditional_2_Conditional_53_Conditional_12_Template, 1, 0, "mj-loading", 129)(13, ConnectionsComponent_Conditional_9_Conditional_2_Conditional_53_Conditional_13_Template, 3, 0, "div", 130)(14, ConnectionsComponent_Conditional_9_Conditional_2_Conditional_53_Conditional_14_Template, 10, 4);
|
|
667
|
+
i0.ɵɵconditionalCreate(15, ConnectionsComponent_Conditional_9_Conditional_2_Conditional_53_Conditional_15_Template, 5, 6, "div", 131);
|
|
666
668
|
i0.ɵɵelementEnd();
|
|
667
669
|
} if (rf & 2) {
|
|
668
|
-
const
|
|
670
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
669
671
|
i0.ɵɵadvance(7);
|
|
670
|
-
i0.ɵɵproperty("disabled", !
|
|
672
|
+
i0.ɵɵproperty("disabled", !ctx_r0.CanCreateTables);
|
|
671
673
|
i0.ɵɵadvance();
|
|
672
|
-
i0.ɵɵconditional(
|
|
674
|
+
i0.ɵɵconditional(ctx_r0.IsCreatingTables ? 8 : 9);
|
|
673
675
|
i0.ɵɵadvance(4);
|
|
674
|
-
i0.ɵɵconditional(
|
|
676
|
+
i0.ɵɵconditional(ctx_r0.IsLoadingCreateTablesObjects ? 12 : ctx_r0.CreateTablesObjects.length === 0 ? 13 : 14);
|
|
675
677
|
i0.ɵɵadvance(3);
|
|
676
|
-
i0.ɵɵconditional(
|
|
678
|
+
i0.ɵɵconditional(ctx_r0.CreateTablesResult ? 15 : -1);
|
|
677
679
|
} }
|
|
678
|
-
function
|
|
679
|
-
i0.ɵɵelementStart(0, "div",
|
|
680
|
-
i0.ɵɵelement(1, "i",
|
|
680
|
+
function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_54_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
681
|
+
i0.ɵɵelementStart(0, "div", 142);
|
|
682
|
+
i0.ɵɵelement(1, "i", 44);
|
|
681
683
|
i0.ɵɵtext(2, " Loading...");
|
|
682
684
|
i0.ɵɵelementEnd();
|
|
683
685
|
} }
|
|
684
|
-
function
|
|
685
|
-
i0.ɵɵelementStart(0, "div",
|
|
686
|
+
function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_54_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
687
|
+
i0.ɵɵelementStart(0, "div", 143);
|
|
686
688
|
i0.ɵɵtext(1, "No source objects found in metadata");
|
|
687
689
|
i0.ɵɵelementEnd();
|
|
688
690
|
} }
|
|
689
|
-
function
|
|
690
|
-
i0.ɵɵelementStart(0, "option",
|
|
691
|
+
function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_54_Conditional_7_For_4_Template(rf, ctx) { if (rf & 1) {
|
|
692
|
+
i0.ɵɵelementStart(0, "option", 110);
|
|
691
693
|
i0.ɵɵtext(1);
|
|
692
694
|
i0.ɵɵelementEnd();
|
|
693
695
|
} if (rf & 2) {
|
|
@@ -696,148 +698,148 @@ function ConnectionsComponent_Conditional_2_Conditional_2_Conditional_54_Conditi
|
|
|
696
698
|
i0.ɵɵadvance();
|
|
697
699
|
i0.ɵɵtextInterpolate(obj_r26.Label || obj_r26.Name);
|
|
698
700
|
} }
|
|
699
|
-
function
|
|
701
|
+
function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_54_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
700
702
|
const _r25 = i0.ɵɵgetCurrentView();
|
|
701
|
-
i0.ɵɵelementStart(0, "select",
|
|
702
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
703
|
-
i0.ɵɵelementStart(1, "option",
|
|
703
|
+
i0.ɵɵelementStart(0, "select", 108);
|
|
704
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_54_Conditional_7_Template_select_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r25); const ctx_r0 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r0.AddMapSourceObjectName, $event) || (ctx_r0.AddMapSourceObjectName = $event); return i0.ɵɵresetView($event); });
|
|
705
|
+
i0.ɵɵelementStart(1, "option", 109);
|
|
704
706
|
i0.ɵɵtext(2, "Select source object...");
|
|
705
707
|
i0.ɵɵelementEnd();
|
|
706
|
-
i0.ɵɵrepeaterCreate(3,
|
|
708
|
+
i0.ɵɵrepeaterCreate(3, ConnectionsComponent_Conditional_9_Conditional_2_Conditional_54_Conditional_7_For_4_Template, 2, 2, "option", 110, _forTrack1);
|
|
707
709
|
i0.ɵɵelementEnd();
|
|
708
710
|
} if (rf & 2) {
|
|
709
|
-
const
|
|
710
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
711
|
+
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
712
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r0.AddMapSourceObjectName);
|
|
711
713
|
i0.ɵɵadvance();
|
|
712
714
|
i0.ɵɵproperty("ngValue", "");
|
|
713
715
|
i0.ɵɵadvance(2);
|
|
714
|
-
i0.ɵɵrepeater(
|
|
716
|
+
i0.ɵɵrepeater(ctx_r0.AvailableSourceObjects);
|
|
715
717
|
} }
|
|
716
|
-
function
|
|
717
|
-
i0.ɵɵelement(0, "i",
|
|
718
|
+
function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_54_Conditional_29_Template(rf, ctx) { if (rf & 1) {
|
|
719
|
+
i0.ɵɵelement(0, "i", 44);
|
|
718
720
|
} }
|
|
719
|
-
function
|
|
720
|
-
i0.ɵɵelement(0, "i",
|
|
721
|
+
function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_54_Conditional_30_Template(rf, ctx) { if (rf & 1) {
|
|
722
|
+
i0.ɵɵelement(0, "i", 149);
|
|
721
723
|
i0.ɵɵtext(1, " Add ");
|
|
722
724
|
} }
|
|
723
|
-
function
|
|
725
|
+
function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_54_Template(rf, ctx) { if (rf & 1) {
|
|
724
726
|
const _r24 = i0.ɵɵgetCurrentView();
|
|
725
|
-
i0.ɵɵelementStart(0, "div",
|
|
727
|
+
i0.ɵɵelementStart(0, "div", 97)(1, "div", 105)(2, "div", 106)(3, "label", 107);
|
|
726
728
|
i0.ɵɵtext(4, "Source Object");
|
|
727
729
|
i0.ɵɵelementEnd();
|
|
728
|
-
i0.ɵɵconditionalCreate(5,
|
|
730
|
+
i0.ɵɵconditionalCreate(5, ConnectionsComponent_Conditional_9_Conditional_2_Conditional_54_Conditional_5_Template, 3, 0, "div", 142)(6, ConnectionsComponent_Conditional_9_Conditional_2_Conditional_54_Conditional_6_Template, 2, 0, "div", 143)(7, ConnectionsComponent_Conditional_9_Conditional_2_Conditional_54_Conditional_7_Template, 5, 2, "select", 144);
|
|
729
731
|
i0.ɵɵelementEnd();
|
|
730
|
-
i0.ɵɵelementStart(8, "div",
|
|
732
|
+
i0.ɵɵelementStart(8, "div", 111)(9, "label", 107);
|
|
731
733
|
i0.ɵɵtext(10, "Direction");
|
|
732
734
|
i0.ɵɵelementEnd();
|
|
733
|
-
i0.ɵɵelementStart(11, "div",
|
|
734
|
-
i0.ɵɵlistener("click", function
|
|
735
|
-
i0.ɵɵelement(13, "i",
|
|
735
|
+
i0.ɵɵelementStart(11, "div", 112)(12, "button", 113);
|
|
736
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_54_Template_button_click_12_listener() { i0.ɵɵrestoreView(_r24); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.AddMapDirection = "Pull"); });
|
|
737
|
+
i0.ɵɵelement(13, "i", 114);
|
|
736
738
|
i0.ɵɵelementEnd();
|
|
737
|
-
i0.ɵɵelementStart(14, "button",
|
|
738
|
-
i0.ɵɵlistener("click", function
|
|
739
|
-
i0.ɵɵelement(15, "i",
|
|
739
|
+
i0.ɵɵelementStart(14, "button", 115);
|
|
740
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_54_Template_button_click_14_listener() { i0.ɵɵrestoreView(_r24); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.AddMapDirection = "Bidirectional"); });
|
|
741
|
+
i0.ɵɵelement(15, "i", 116);
|
|
740
742
|
i0.ɵɵelementEnd();
|
|
741
|
-
i0.ɵɵelementStart(16, "button",
|
|
742
|
-
i0.ɵɵlistener("click", function
|
|
743
|
-
i0.ɵɵelement(17, "i",
|
|
743
|
+
i0.ɵɵelementStart(16, "button", 117);
|
|
744
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_54_Template_button_click_16_listener() { i0.ɵɵrestoreView(_r24); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.AddMapDirection = "Push"); });
|
|
745
|
+
i0.ɵɵelement(17, "i", 70);
|
|
744
746
|
i0.ɵɵelementEnd()()();
|
|
745
|
-
i0.ɵɵelementStart(18, "div",
|
|
747
|
+
i0.ɵɵelementStart(18, "div", 145)(19, "label", 107);
|
|
746
748
|
i0.ɵɵtext(20, "MJ Entity");
|
|
747
749
|
i0.ɵɵelementEnd();
|
|
748
|
-
i0.ɵɵelementStart(21, "div",
|
|
749
|
-
i0.ɵɵlistener("SelectionChange", function
|
|
750
|
+
i0.ɵɵelementStart(21, "div", 146)(22, "mj-tree-dropdown", 147, 0);
|
|
751
|
+
i0.ɵɵlistener("SelectionChange", function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_54_Template_mj_tree_dropdown_SelectionChange_22_listener($event) { i0.ɵɵrestoreView(_r24); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.OnEntityTreeSelection($event)); });
|
|
750
752
|
i0.ɵɵelementEnd();
|
|
751
|
-
i0.ɵɵelementStart(24, "button",
|
|
752
|
-
i0.ɵɵlistener("click", function
|
|
753
|
-
i0.ɵɵelement(25, "i",
|
|
753
|
+
i0.ɵɵelementStart(24, "button", 148);
|
|
754
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_54_Template_button_click_24_listener() { i0.ɵɵrestoreView(_r24); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.OpenNewEntityDialog()); });
|
|
755
|
+
i0.ɵɵelement(25, "i", 15);
|
|
754
756
|
i0.ɵɵtext(26, " New ");
|
|
755
757
|
i0.ɵɵelementEnd()()();
|
|
756
|
-
i0.ɵɵelementStart(27, "div",
|
|
757
|
-
i0.ɵɵlistener("click", function
|
|
758
|
-
i0.ɵɵconditionalCreate(29,
|
|
758
|
+
i0.ɵɵelementStart(27, "div", 118)(28, "button", 119);
|
|
759
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_54_Template_button_click_28_listener() { i0.ɵɵrestoreView(_r24); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.SaveAddMap()); });
|
|
760
|
+
i0.ɵɵconditionalCreate(29, ConnectionsComponent_Conditional_9_Conditional_2_Conditional_54_Conditional_29_Template, 1, 0, "i", 44)(30, ConnectionsComponent_Conditional_9_Conditional_2_Conditional_54_Conditional_30_Template, 2, 0);
|
|
759
761
|
i0.ɵɵelementEnd();
|
|
760
|
-
i0.ɵɵelementStart(31, "button",
|
|
761
|
-
i0.ɵɵlistener("click", function
|
|
762
|
-
i0.ɵɵelement(32, "i",
|
|
762
|
+
i0.ɵɵelementStart(31, "button", 120);
|
|
763
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_54_Template_button_click_31_listener() { i0.ɵɵrestoreView(_r24); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.CloseAddMapPanel()); });
|
|
764
|
+
i0.ɵɵelement(32, "i", 121);
|
|
763
765
|
i0.ɵɵelementEnd()()()();
|
|
764
766
|
} if (rf & 2) {
|
|
765
|
-
const
|
|
767
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
766
768
|
i0.ɵɵadvance(5);
|
|
767
|
-
i0.ɵɵconditional(
|
|
769
|
+
i0.ɵɵconditional(ctx_r0.IsLoadingSourceObjects ? 5 : ctx_r0.AvailableSourceObjects.length === 0 ? 6 : 7);
|
|
768
770
|
i0.ɵɵadvance(7);
|
|
769
|
-
i0.ɵɵclassProp("active",
|
|
771
|
+
i0.ɵɵclassProp("active", ctx_r0.AddMapDirection === "Pull");
|
|
770
772
|
i0.ɵɵadvance(2);
|
|
771
|
-
i0.ɵɵclassProp("active",
|
|
773
|
+
i0.ɵɵclassProp("active", ctx_r0.AddMapDirection === "Bidirectional");
|
|
772
774
|
i0.ɵɵadvance(2);
|
|
773
|
-
i0.ɵɵclassProp("active",
|
|
775
|
+
i0.ɵɵclassProp("active", ctx_r0.AddMapDirection === "Push");
|
|
774
776
|
i0.ɵɵadvance(6);
|
|
775
|
-
i0.ɵɵproperty("BranchConfig",
|
|
777
|
+
i0.ɵɵproperty("BranchConfig", ctx_r0.EntityBranchConfig)("LeafConfig", ctx_r0.EntityLeafConfig)("Value", ctx_r0.AddMapEntityIDAsKey)("SelectableTypes", "leaf")("SelectionMode", "single")("Placeholder", "Search entities by schema...")("EnableSearch", true);
|
|
776
778
|
i0.ɵɵadvance(6);
|
|
777
|
-
i0.ɵɵproperty("disabled", !
|
|
779
|
+
i0.ɵɵproperty("disabled", !ctx_r0.CanSaveAddMap || ctx_r0.IsSavingAddMap);
|
|
778
780
|
i0.ɵɵadvance();
|
|
779
|
-
i0.ɵɵconditional(
|
|
781
|
+
i0.ɵɵconditional(ctx_r0.IsSavingAddMap ? 29 : 30);
|
|
780
782
|
} }
|
|
781
|
-
function
|
|
782
|
-
i0.ɵɵelementStart(0, "div",
|
|
783
|
-
i0.ɵɵelement(1, "mj-loading",
|
|
783
|
+
function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_55_Template(rf, ctx) { if (rf & 1) {
|
|
784
|
+
i0.ɵɵelementStart(0, "div", 16);
|
|
785
|
+
i0.ɵɵelement(1, "mj-loading", 150);
|
|
784
786
|
i0.ɵɵelementEnd();
|
|
785
787
|
} }
|
|
786
|
-
function
|
|
788
|
+
function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_56_Template(rf, ctx) { if (rf & 1) {
|
|
787
789
|
const _r27 = i0.ɵɵgetCurrentView();
|
|
788
|
-
i0.ɵɵelementStart(0, "div",
|
|
789
|
-
i0.ɵɵelement(1, "i",
|
|
790
|
+
i0.ɵɵelementStart(0, "div", 98);
|
|
791
|
+
i0.ɵɵelement(1, "i", 151);
|
|
790
792
|
i0.ɵɵelementStart(2, "h3");
|
|
791
793
|
i0.ɵɵtext(3, "No entity maps configured");
|
|
792
794
|
i0.ɵɵelementEnd();
|
|
793
795
|
i0.ɵɵelementStart(4, "p");
|
|
794
796
|
i0.ɵɵtext(5, "Entity maps define how external objects sync to MJ entities.");
|
|
795
797
|
i0.ɵɵelementEnd();
|
|
796
|
-
i0.ɵɵelementStart(6, "button",
|
|
797
|
-
i0.ɵɵlistener("click", function
|
|
798
|
-
i0.ɵɵelement(7, "i",
|
|
798
|
+
i0.ɵɵelementStart(6, "button", 152);
|
|
799
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_56_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r27); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.ToggleAddMapPanel()); });
|
|
800
|
+
i0.ɵɵelement(7, "i", 15);
|
|
799
801
|
i0.ɵɵtext(8, " Add Your First Entity Map ");
|
|
800
802
|
i0.ɵɵelementEnd()();
|
|
801
803
|
} }
|
|
802
|
-
function
|
|
803
|
-
i0.ɵɵelementStart(0, "span",
|
|
804
|
-
i0.ɵɵelement(1, "i",
|
|
804
|
+
function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_57_For_12_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
805
|
+
i0.ɵɵelementStart(0, "span", 170);
|
|
806
|
+
i0.ɵɵelement(1, "i", 174);
|
|
805
807
|
i0.ɵɵelementEnd();
|
|
806
808
|
} }
|
|
807
|
-
function
|
|
809
|
+
function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_57_For_12_Template(rf, ctx) { if (rf & 1) {
|
|
808
810
|
const _r28 = i0.ɵɵgetCurrentView();
|
|
809
|
-
i0.ɵɵelementStart(0, "div",
|
|
810
|
-
i0.ɵɵlistener("click", function
|
|
811
|
-
i0.ɵɵelementStart(1, "span",
|
|
812
|
-
i0.ɵɵlistener("click", function
|
|
813
|
-
i0.ɵɵelementStart(2, "label",
|
|
814
|
-
i0.ɵɵlistener("change", function
|
|
815
|
-
i0.ɵɵelementEnd();
|
|
816
|
-
i0.ɵɵelement(4, "span",
|
|
811
|
+
i0.ɵɵelementStart(0, "div", 162);
|
|
812
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_57_For_12_Template_div_click_0_listener() { const em_r29 = i0.ɵɵrestoreView(_r28).$implicit; const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.OnEntityMapClick(em_r29)); });
|
|
813
|
+
i0.ɵɵelementStart(1, "span", 163);
|
|
814
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_57_For_12_Template_span_click_1_listener($event) { i0.ɵɵrestoreView(_r28); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
815
|
+
i0.ɵɵelementStart(2, "label", 164)(3, "input", 137);
|
|
816
|
+
i0.ɵɵlistener("change", function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_57_For_12_Template_input_change_3_listener($event) { const em_r29 = i0.ɵɵrestoreView(_r28).$implicit; const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.OnToggleMapEnabled(em_r29, $event)); });
|
|
817
|
+
i0.ɵɵelementEnd();
|
|
818
|
+
i0.ɵɵelement(4, "span", 165);
|
|
817
819
|
i0.ɵɵelementEnd()();
|
|
818
|
-
i0.ɵɵelementStart(5, "span",
|
|
820
|
+
i0.ɵɵelementStart(5, "span", 166);
|
|
819
821
|
i0.ɵɵtext(6);
|
|
820
822
|
i0.ɵɵelementEnd();
|
|
821
|
-
i0.ɵɵelementStart(7, "span",
|
|
822
|
-
i0.ɵɵlistener("click", function
|
|
823
|
-
i0.ɵɵelementStart(8, "button",
|
|
824
|
-
i0.ɵɵlistener("click", function
|
|
823
|
+
i0.ɵɵelementStart(7, "span", 167);
|
|
824
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_57_For_12_Template_span_click_7_listener($event) { i0.ɵɵrestoreView(_r28); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
825
|
+
i0.ɵɵelementStart(8, "button", 168);
|
|
826
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_57_For_12_Template_button_click_8_listener() { const em_r29 = i0.ɵɵrestoreView(_r28).$implicit; const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.CycleSyncDirection(em_r29)); });
|
|
825
827
|
i0.ɵɵtext(9);
|
|
826
828
|
i0.ɵɵelementEnd()();
|
|
827
|
-
i0.ɵɵelementStart(10, "span",
|
|
829
|
+
i0.ɵɵelementStart(10, "span", 169);
|
|
828
830
|
i0.ɵɵtext(11);
|
|
829
831
|
i0.ɵɵelementEnd();
|
|
830
|
-
i0.ɵɵelementStart(12, "span",
|
|
831
|
-
i0.ɵɵconditionalCreate(13,
|
|
832
|
-
i0.ɵɵelementStart(14, "span",
|
|
833
|
-
i0.ɵɵelement(15, "i",
|
|
832
|
+
i0.ɵɵelementStart(12, "span", 158);
|
|
833
|
+
i0.ɵɵconditionalCreate(13, ConnectionsComponent_Conditional_9_Conditional_2_Conditional_57_For_12_Conditional_13_Template, 2, 0, "span", 170);
|
|
834
|
+
i0.ɵɵelementStart(14, "span", 171);
|
|
835
|
+
i0.ɵɵelement(15, "i", 39);
|
|
834
836
|
i0.ɵɵelementEnd();
|
|
835
|
-
i0.ɵɵelementStart(16, "span",
|
|
836
|
-
i0.ɵɵelement(17, "i",
|
|
837
|
+
i0.ɵɵelementStart(16, "span", 172);
|
|
838
|
+
i0.ɵɵelement(17, "i", 173);
|
|
837
839
|
i0.ɵɵelementEnd()()();
|
|
838
840
|
} if (rf & 2) {
|
|
839
841
|
const em_r29 = ctx.$implicit;
|
|
840
|
-
const
|
|
842
|
+
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
841
843
|
i0.ɵɵclassProp("sync-disabled", !em_r29.SyncEnabled);
|
|
842
844
|
i0.ɵɵadvance(2);
|
|
843
845
|
i0.ɵɵproperty("title", em_r29.SyncEnabled ? "Sync enabled" : "Sync disabled");
|
|
@@ -848,10 +850,10 @@ function ConnectionsComponent_Conditional_2_Conditional_2_Conditional_57_For_12_
|
|
|
848
850
|
i0.ɵɵadvance();
|
|
849
851
|
i0.ɵɵtextInterpolate1(" ", em_r29.ExternalObjectLabel ?? em_r29.ExternalObjectName, " ");
|
|
850
852
|
i0.ɵɵadvance(2);
|
|
851
|
-
i0.ɵɵclassMap(
|
|
853
|
+
i0.ɵɵclassMap(ctx_r0.DirectionBadgeClass(em_r29.SyncDirection));
|
|
852
854
|
i0.ɵɵproperty("title", "Click to change sync direction (currently: " + em_r29.SyncDirection + ")");
|
|
853
855
|
i0.ɵɵadvance();
|
|
854
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
856
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r0.DirectionText(em_r29.SyncDirection), " ");
|
|
855
857
|
i0.ɵɵadvance();
|
|
856
858
|
i0.ɵɵproperty("title", em_r29.Entity);
|
|
857
859
|
i0.ɵɵadvance();
|
|
@@ -861,213 +863,213 @@ function ConnectionsComponent_Conditional_2_Conditional_2_Conditional_57_For_12_
|
|
|
861
863
|
i0.ɵɵadvance();
|
|
862
864
|
i0.ɵɵproperty("title", "Conflict: " + em_r29.ConflictResolution);
|
|
863
865
|
} }
|
|
864
|
-
function
|
|
865
|
-
i0.ɵɵelementStart(0, "div",
|
|
866
|
+
function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_57_ForEmpty_13_Template(rf, ctx) { if (rf & 1) {
|
|
867
|
+
i0.ɵɵelementStart(0, "div", 161);
|
|
866
868
|
i0.ɵɵtext(1, " No entity maps match your filter. ");
|
|
867
869
|
i0.ɵɵelementEnd();
|
|
868
870
|
} }
|
|
869
|
-
function
|
|
870
|
-
i0.ɵɵelementStart(0, "div",
|
|
871
|
+
function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_57_Template(rf, ctx) { if (rf & 1) {
|
|
872
|
+
i0.ɵɵelementStart(0, "div", 153)(1, "span", 154);
|
|
871
873
|
i0.ɵɵtext(2, "Sync");
|
|
872
874
|
i0.ɵɵelementEnd();
|
|
873
|
-
i0.ɵɵelementStart(3, "span",
|
|
875
|
+
i0.ɵɵelementStart(3, "span", 155);
|
|
874
876
|
i0.ɵɵtext(4, "External Object");
|
|
875
877
|
i0.ɵɵelementEnd();
|
|
876
|
-
i0.ɵɵelement(5, "span",
|
|
877
|
-
i0.ɵɵelementStart(6, "span",
|
|
878
|
+
i0.ɵɵelement(5, "span", 156);
|
|
879
|
+
i0.ɵɵelementStart(6, "span", 157);
|
|
878
880
|
i0.ɵɵtext(7, "MJ Entity");
|
|
879
881
|
i0.ɵɵelementEnd();
|
|
880
|
-
i0.ɵɵelementStart(8, "span",
|
|
882
|
+
i0.ɵɵelementStart(8, "span", 158);
|
|
881
883
|
i0.ɵɵtext(9, "Config");
|
|
882
884
|
i0.ɵɵelementEnd()();
|
|
883
|
-
i0.ɵɵelementStart(10, "div",
|
|
884
|
-
i0.ɵɵrepeaterCreate(11,
|
|
885
|
+
i0.ɵɵelementStart(10, "div", 159);
|
|
886
|
+
i0.ɵɵrepeaterCreate(11, ConnectionsComponent_Conditional_9_Conditional_2_Conditional_57_For_12_Template, 18, 14, "div", 160, _forTrack2, false, ConnectionsComponent_Conditional_9_Conditional_2_Conditional_57_ForEmpty_13_Template, 2, 0, "div", 161);
|
|
885
887
|
i0.ɵɵelementEnd();
|
|
886
888
|
} if (rf & 2) {
|
|
887
|
-
const
|
|
889
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
888
890
|
i0.ɵɵadvance(11);
|
|
889
|
-
i0.ɵɵrepeater(
|
|
891
|
+
i0.ɵɵrepeater(ctx_r0.DetailFilteredMaps);
|
|
890
892
|
} }
|
|
891
|
-
function
|
|
893
|
+
function ConnectionsComponent_Conditional_9_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
892
894
|
const _r12 = i0.ɵɵgetCurrentView();
|
|
893
|
-
i0.ɵɵelementStart(0, "div",
|
|
894
|
-
i0.ɵɵlistener("click", function
|
|
895
|
-
i0.ɵɵelement(2, "i",
|
|
895
|
+
i0.ɵɵelementStart(0, "div", 68)(1, "button", 69);
|
|
896
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Conditional_2_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r12); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.CloseDetailView()); });
|
|
897
|
+
i0.ɵɵelement(2, "i", 70);
|
|
896
898
|
i0.ɵɵelementEnd();
|
|
897
|
-
i0.ɵɵelementStart(3, "div",
|
|
898
|
-
i0.ɵɵelement(5, "i",
|
|
899
|
+
i0.ɵɵelementStart(3, "div", 71)(4, "div", 29);
|
|
900
|
+
i0.ɵɵelement(5, "i", 30);
|
|
899
901
|
i0.ɵɵelementEnd();
|
|
900
|
-
i0.ɵɵelementStart(6, "div",
|
|
902
|
+
i0.ɵɵelementStart(6, "div", 72)(7, "h2", 73);
|
|
901
903
|
i0.ɵɵtext(8);
|
|
902
904
|
i0.ɵɵelementEnd();
|
|
903
|
-
i0.ɵɵelementStart(9, "span",
|
|
905
|
+
i0.ɵɵelementStart(9, "span", 74);
|
|
904
906
|
i0.ɵɵtext(10);
|
|
905
|
-
i0.ɵɵelementStart(11, "span",
|
|
907
|
+
i0.ɵɵelementStart(11, "span", 36);
|
|
906
908
|
i0.ɵɵtext(12, "\u00B7");
|
|
907
909
|
i0.ɵɵelementEnd();
|
|
908
910
|
i0.ɵɵtext(13);
|
|
909
|
-
i0.ɵɵelementStart(14, "span",
|
|
911
|
+
i0.ɵɵelementStart(14, "span", 36);
|
|
910
912
|
i0.ɵɵtext(15, "\u00B7");
|
|
911
913
|
i0.ɵɵelementEnd();
|
|
912
914
|
i0.ɵɵelementStart(16, "span");
|
|
913
915
|
i0.ɵɵtext(17);
|
|
914
916
|
i0.ɵɵelementEnd()()()();
|
|
915
|
-
i0.ɵɵelementStart(18, "div",
|
|
916
|
-
i0.ɵɵlistener("click", function
|
|
917
|
-
i0.ɵɵelement(20, "i",
|
|
917
|
+
i0.ɵɵelementStart(18, "div", 75)(19, "button", 76);
|
|
918
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Conditional_2_Template_button_click_19_listener() { i0.ɵɵrestoreView(_r12); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.OpenEditPanel(ctx_r0.SelectedSummary)); });
|
|
919
|
+
i0.ɵɵelement(20, "i", 77);
|
|
918
920
|
i0.ɵɵelementEnd();
|
|
919
|
-
i0.ɵɵconditionalCreate(21,
|
|
921
|
+
i0.ɵɵconditionalCreate(21, ConnectionsComponent_Conditional_9_Conditional_2_Conditional_21_Template, 5, 3, "div", 46);
|
|
920
922
|
i0.ɵɵelementEnd()();
|
|
921
|
-
i0.ɵɵelementStart(22, "div",
|
|
922
|
-
i0.ɵɵelement(25, "i",
|
|
923
|
+
i0.ɵɵelementStart(22, "div", 78)(23, "div", 79)(24, "div", 80);
|
|
924
|
+
i0.ɵɵelement(25, "i", 81);
|
|
923
925
|
i0.ɵɵelementStart(26, "span");
|
|
924
926
|
i0.ɵɵtext(27, "Sync Schedule");
|
|
925
927
|
i0.ɵɵelementEnd()()();
|
|
926
|
-
i0.ɵɵconditionalCreate(28,
|
|
928
|
+
i0.ɵɵconditionalCreate(28, ConnectionsComponent_Conditional_9_Conditional_2_Conditional_28_Template, 1, 1, "mj-scheduled-job-summary", 82)(29, ConnectionsComponent_Conditional_9_Conditional_2_Conditional_29_Template, 6, 0, "div", 83);
|
|
927
929
|
i0.ɵɵelementEnd();
|
|
928
|
-
i0.ɵɵelementStart(30, "mj-scheduled-job-slide-panel",
|
|
929
|
-
i0.ɵɵlistener("Close", function
|
|
930
|
+
i0.ɵɵelementStart(30, "mj-scheduled-job-slide-panel", 84);
|
|
931
|
+
i0.ɵɵlistener("Close", function ConnectionsComponent_Conditional_9_Conditional_2_Template_mj_scheduled_job_slide_panel_Close_30_listener() { i0.ɵɵrestoreView(_r12); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.CloseSchedulePanel()); })("Saved", function ConnectionsComponent_Conditional_9_Conditional_2_Template_mj_scheduled_job_slide_panel_Saved_30_listener() { i0.ɵɵrestoreView(_r12); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.OnScheduleSaved()); })("Deleted", function ConnectionsComponent_Conditional_9_Conditional_2_Template_mj_scheduled_job_slide_panel_Deleted_30_listener() { i0.ɵɵrestoreView(_r12); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.OnScheduleDeleted()); });
|
|
930
932
|
i0.ɵɵelementEnd();
|
|
931
|
-
i0.ɵɵelementStart(31, "div",
|
|
933
|
+
i0.ɵɵelementStart(31, "div", 85)(32, "div", 86)(33, "span", 87);
|
|
932
934
|
i0.ɵɵtext(34);
|
|
933
|
-
i0.ɵɵelementStart(35, "span",
|
|
935
|
+
i0.ɵɵelementStart(35, "span", 36);
|
|
934
936
|
i0.ɵɵtext(36, "\u00B7");
|
|
935
937
|
i0.ɵɵelementEnd();
|
|
936
938
|
i0.ɵɵtext(37);
|
|
937
939
|
i0.ɵɵelementEnd()();
|
|
938
|
-
i0.ɵɵelementStart(38, "div",
|
|
939
|
-
i0.ɵɵelement(40, "i",
|
|
940
|
-
i0.ɵɵelementStart(41, "input",
|
|
941
|
-
i0.ɵɵlistener("input", function
|
|
940
|
+
i0.ɵɵelementStart(38, "div", 88)(39, "div", 89);
|
|
941
|
+
i0.ɵɵelement(40, "i", 90);
|
|
942
|
+
i0.ɵɵelementStart(41, "input", 91);
|
|
943
|
+
i0.ɵɵlistener("input", function ConnectionsComponent_Conditional_9_Conditional_2_Template_input_input_41_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.OnDetailSearch($event)); });
|
|
942
944
|
i0.ɵɵelementEnd()();
|
|
943
|
-
i0.ɵɵelementStart(42, "button",
|
|
944
|
-
i0.ɵɵlistener("click", function
|
|
945
|
-
i0.ɵɵelement(43, "i",
|
|
945
|
+
i0.ɵɵelementStart(42, "button", 92);
|
|
946
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Conditional_2_Template_button_click_42_listener() { i0.ɵɵrestoreView(_r12); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.ToggleCreateTablesPanel()); });
|
|
947
|
+
i0.ɵɵelement(43, "i", 93);
|
|
946
948
|
i0.ɵɵtext(44, " Create Tables ");
|
|
947
949
|
i0.ɵɵelementEnd();
|
|
948
|
-
i0.ɵɵelementStart(45, "button",
|
|
949
|
-
i0.ɵɵlistener("click", function
|
|
950
|
-
i0.ɵɵelement(46, "i",
|
|
950
|
+
i0.ɵɵelementStart(45, "button", 94);
|
|
951
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Conditional_2_Template_button_click_45_listener() { i0.ɵɵrestoreView(_r12); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.ToggleAutoMapPanel()); });
|
|
952
|
+
i0.ɵɵelement(46, "i", 95);
|
|
951
953
|
i0.ɵɵtext(47, " Auto-Map Schema ");
|
|
952
954
|
i0.ɵɵelementEnd();
|
|
953
|
-
i0.ɵɵelementStart(48, "button",
|
|
954
|
-
i0.ɵɵlistener("click", function
|
|
955
|
-
i0.ɵɵelement(49, "i",
|
|
955
|
+
i0.ɵɵelementStart(48, "button", 94);
|
|
956
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Conditional_2_Template_button_click_48_listener() { i0.ɵɵrestoreView(_r12); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.ToggleAddMapPanel()); });
|
|
957
|
+
i0.ɵɵelement(49, "i", 15);
|
|
956
958
|
i0.ɵɵtext(50, " Add Map ");
|
|
957
959
|
i0.ɵɵelementEnd()()();
|
|
958
|
-
i0.ɵɵconditionalCreate(51,
|
|
959
|
-
i0.ɵɵconditionalCreate(52,
|
|
960
|
-
i0.ɵɵconditionalCreate(53,
|
|
961
|
-
i0.ɵɵconditionalCreate(54,
|
|
962
|
-
i0.ɵɵconditionalCreate(55,
|
|
960
|
+
i0.ɵɵconditionalCreate(51, ConnectionsComponent_Conditional_9_Conditional_2_Conditional_51_Template, 5, 6, "div", 96);
|
|
961
|
+
i0.ɵɵconditionalCreate(52, ConnectionsComponent_Conditional_9_Conditional_2_Conditional_52_Template, 31, 11, "div", 97);
|
|
962
|
+
i0.ɵɵconditionalCreate(53, ConnectionsComponent_Conditional_9_Conditional_2_Conditional_53_Template, 16, 4, "div", 97);
|
|
963
|
+
i0.ɵɵconditionalCreate(54, ConnectionsComponent_Conditional_9_Conditional_2_Conditional_54_Template, 33, 16, "div", 97);
|
|
964
|
+
i0.ɵɵconditionalCreate(55, ConnectionsComponent_Conditional_9_Conditional_2_Conditional_55_Template, 2, 0, "div", 16)(56, ConnectionsComponent_Conditional_9_Conditional_2_Conditional_56_Template, 9, 0, "div", 98)(57, ConnectionsComponent_Conditional_9_Conditional_2_Conditional_57_Template, 14, 1);
|
|
963
965
|
} if (rf & 2) {
|
|
964
|
-
const
|
|
966
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
965
967
|
i0.ɵɵadvance(4);
|
|
966
|
-
i0.ɵɵstyleProp("background-color",
|
|
968
|
+
i0.ɵɵstyleProp("background-color", ctx_r0.GetIconBrandColor(ctx_r0.SelectedSummary.Integration.Integration));
|
|
967
969
|
i0.ɵɵadvance();
|
|
968
|
-
i0.ɵɵclassMap(
|
|
970
|
+
i0.ɵɵclassMap(ctx_r0.GetIntegrationIcon(ctx_r0.SelectedSummary.Integration.Integration));
|
|
969
971
|
i0.ɵɵadvance(3);
|
|
970
|
-
i0.ɵɵtextInterpolate(
|
|
972
|
+
i0.ɵɵtextInterpolate(ctx_r0.SelectedSummary.Integration.Name);
|
|
971
973
|
i0.ɵɵadvance(2);
|
|
972
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
974
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r0.SelectedSummary.Integration.Company, " ");
|
|
973
975
|
i0.ɵɵadvance(3);
|
|
974
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
976
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r0.GetSourceTypeLabel(ctx_r0.SelectedSummary), " ");
|
|
975
977
|
i0.ɵɵadvance(3);
|
|
976
|
-
i0.ɵɵclassMap(
|
|
978
|
+
i0.ɵɵclassMap(ctx_r0.GetStatusBadgeClass(ctx_r0.SelectedSummary));
|
|
977
979
|
i0.ɵɵadvance();
|
|
978
|
-
i0.ɵɵtextInterpolate(
|
|
980
|
+
i0.ɵɵtextInterpolate(ctx_r0.GetStatusBadge(ctx_r0.SelectedSummary));
|
|
979
981
|
i0.ɵɵadvance(4);
|
|
980
|
-
i0.ɵɵconditional(
|
|
982
|
+
i0.ɵɵconditional(ctx_r0.IsConnectionActive(ctx_r0.SelectedSummary) ? 21 : -1);
|
|
981
983
|
i0.ɵɵadvance(7);
|
|
982
|
-
i0.ɵɵconditional(
|
|
984
|
+
i0.ɵɵconditional(ctx_r0.ScheduledJobID ? 28 : 29);
|
|
983
985
|
i0.ɵɵadvance(2);
|
|
984
|
-
i0.ɵɵproperty("IsOpen",
|
|
986
|
+
i0.ɵɵproperty("IsOpen", ctx_r0.ShowScheduleSlidePanel)("ScheduledJobID", ctx_r0.ScheduledJobID)("JobTypeID", ctx_r0.IntegrationSyncJobTypeID)("DefaultConfiguration", ctx_r0.ScheduleDefaultConfiguration)("HideJobType", true);
|
|
985
987
|
i0.ɵɵadvance(4);
|
|
986
|
-
i0.ɵɵtextInterpolate2(" ",
|
|
988
|
+
i0.ɵɵtextInterpolate2(" ", ctx_r0.DetailEntityMaps.length, " entity map", ctx_r0.DetailEntityMaps.length !== 1 ? "s" : "", " ");
|
|
987
989
|
i0.ɵɵadvance(3);
|
|
988
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
990
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r0.DetailActiveMapCount, " active ");
|
|
989
991
|
i0.ɵɵadvance(4);
|
|
990
|
-
i0.ɵɵproperty("value",
|
|
992
|
+
i0.ɵɵproperty("value", ctx_r0.DetailSearchTerm);
|
|
991
993
|
i0.ɵɵadvance();
|
|
992
|
-
i0.ɵɵclassProp("active",
|
|
994
|
+
i0.ɵɵclassProp("active", ctx_r0.ShowCreateTablesPanel);
|
|
993
995
|
i0.ɵɵadvance(3);
|
|
994
|
-
i0.ɵɵclassProp("active",
|
|
996
|
+
i0.ɵɵclassProp("active", ctx_r0.ShowAutoMapPanel);
|
|
995
997
|
i0.ɵɵadvance(3);
|
|
996
|
-
i0.ɵɵclassProp("active",
|
|
998
|
+
i0.ɵɵclassProp("active", ctx_r0.ShowAddMapPanel);
|
|
997
999
|
i0.ɵɵadvance(3);
|
|
998
|
-
i0.ɵɵconditional(
|
|
1000
|
+
i0.ɵɵconditional(ctx_r0.SyncResult ? 51 : -1);
|
|
999
1001
|
i0.ɵɵadvance();
|
|
1000
|
-
i0.ɵɵconditional(
|
|
1002
|
+
i0.ɵɵconditional(ctx_r0.ShowAutoMapPanel ? 52 : -1);
|
|
1001
1003
|
i0.ɵɵadvance();
|
|
1002
|
-
i0.ɵɵconditional(
|
|
1004
|
+
i0.ɵɵconditional(ctx_r0.ShowCreateTablesPanel ? 53 : -1);
|
|
1003
1005
|
i0.ɵɵadvance();
|
|
1004
|
-
i0.ɵɵconditional(
|
|
1006
|
+
i0.ɵɵconditional(ctx_r0.ShowAddMapPanel ? 54 : -1);
|
|
1005
1007
|
i0.ɵɵadvance();
|
|
1006
|
-
i0.ɵɵconditional(
|
|
1008
|
+
i0.ɵɵconditional(ctx_r0.IsDetailLoading ? 55 : ctx_r0.DetailEntityMaps.length === 0 && !ctx_r0.ShowAddMapPanel ? 56 : ctx_r0.DetailEntityMaps.length > 0 ? 57 : -1);
|
|
1007
1009
|
} }
|
|
1008
|
-
function
|
|
1009
|
-
i0.ɵɵelementStart(0, "div",
|
|
1010
|
-
i0.ɵɵconditionalCreate(1,
|
|
1010
|
+
function ConnectionsComponent_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
1011
|
+
i0.ɵɵelementStart(0, "div", 8);
|
|
1012
|
+
i0.ɵɵconditionalCreate(1, ConnectionsComponent_Conditional_9_Conditional_1_Template, 1, 3, "app-visual-field-editor", 66)(2, ConnectionsComponent_Conditional_9_Conditional_2_Template, 58, 32);
|
|
1011
1013
|
i0.ɵɵelementEnd();
|
|
1012
1014
|
} if (rf & 2) {
|
|
1013
|
-
const
|
|
1015
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
1014
1016
|
i0.ɵɵadvance();
|
|
1015
|
-
i0.ɵɵconditional(
|
|
1017
|
+
i0.ɵɵconditional(ctx_r0.EditorEntityMap ? 1 : 2);
|
|
1016
1018
|
} }
|
|
1017
|
-
function
|
|
1018
|
-
i0.ɵɵelement(0, "i",
|
|
1019
|
+
function ConnectionsComponent_Conditional_10_For_9_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
1020
|
+
i0.ɵɵelement(0, "i", 149);
|
|
1019
1021
|
} }
|
|
1020
|
-
function
|
|
1022
|
+
function ConnectionsComponent_Conditional_10_For_9_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1021
1023
|
i0.ɵɵtext(0);
|
|
1022
1024
|
} if (rf & 2) {
|
|
1023
1025
|
const step_r31 = i0.ɵɵnextContext().$implicit;
|
|
1024
1026
|
i0.ɵɵtextInterpolate1(" ", step_r31.Number, " ");
|
|
1025
1027
|
} }
|
|
1026
|
-
function
|
|
1027
|
-
i0.ɵɵelement(0, "div",
|
|
1028
|
+
function ConnectionsComponent_Conditional_10_For_9_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
1029
|
+
i0.ɵɵelement(0, "div", 190);
|
|
1028
1030
|
} if (rf & 2) {
|
|
1029
1031
|
const step_r31 = i0.ɵɵnextContext().$implicit;
|
|
1030
|
-
const
|
|
1031
|
-
i0.ɵɵclassProp("step-line-active",
|
|
1032
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
1033
|
+
i0.ɵɵclassProp("step-line-active", ctx_r0.IsStepCompleted(step_r31.Number));
|
|
1032
1034
|
} }
|
|
1033
|
-
function
|
|
1034
|
-
i0.ɵɵelementStart(0, "div",
|
|
1035
|
-
i0.ɵɵconditionalCreate(2,
|
|
1035
|
+
function ConnectionsComponent_Conditional_10_For_9_Template(rf, ctx) { if (rf & 1) {
|
|
1036
|
+
i0.ɵɵelementStart(0, "div", 186)(1, "div", 187);
|
|
1037
|
+
i0.ɵɵconditionalCreate(2, ConnectionsComponent_Conditional_10_For_9_Conditional_2_Template, 1, 0, "i", 149)(3, ConnectionsComponent_Conditional_10_For_9_Conditional_3_Template, 1, 1);
|
|
1036
1038
|
i0.ɵɵelementEnd();
|
|
1037
|
-
i0.ɵɵelementStart(4, "span",
|
|
1039
|
+
i0.ɵɵelementStart(4, "span", 188);
|
|
1038
1040
|
i0.ɵɵtext(5);
|
|
1039
1041
|
i0.ɵɵelementEnd()();
|
|
1040
|
-
i0.ɵɵconditionalCreate(6,
|
|
1042
|
+
i0.ɵɵconditionalCreate(6, ConnectionsComponent_Conditional_10_For_9_Conditional_6_Template, 1, 2, "div", 189);
|
|
1041
1043
|
} if (rf & 2) {
|
|
1042
1044
|
const step_r31 = ctx.$implicit;
|
|
1043
|
-
const
|
|
1044
|
-
i0.ɵɵclassProp("step-active",
|
|
1045
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
1046
|
+
i0.ɵɵclassProp("step-active", ctx_r0.IsStepActive(step_r31.Number))("step-completed", ctx_r0.IsStepCompleted(step_r31.Number));
|
|
1045
1047
|
i0.ɵɵadvance(2);
|
|
1046
|
-
i0.ɵɵconditional(
|
|
1048
|
+
i0.ɵɵconditional(ctx_r0.IsStepCompleted(step_r31.Number) ? 2 : 3);
|
|
1047
1049
|
i0.ɵɵadvance(3);
|
|
1048
1050
|
i0.ɵɵtextInterpolate(step_r31.Label);
|
|
1049
1051
|
i0.ɵɵadvance();
|
|
1050
|
-
i0.ɵɵconditional(step_r31.Number <
|
|
1052
|
+
i0.ɵɵconditional(step_r31.Number < ctx_r0.WizardSteps.length ? 6 : -1);
|
|
1051
1053
|
} }
|
|
1052
|
-
function
|
|
1053
|
-
i0.ɵɵelementStart(0, "div",
|
|
1054
|
-
i0.ɵɵelement(1, "i",
|
|
1054
|
+
function ConnectionsComponent_Conditional_10_Conditional_11_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
1055
|
+
i0.ɵɵelementStart(0, "div", 195);
|
|
1056
|
+
i0.ɵɵelement(1, "i", 197);
|
|
1055
1057
|
i0.ɵɵelementStart(2, "p");
|
|
1056
1058
|
i0.ɵɵtext(3, "No integrations configured");
|
|
1057
1059
|
i0.ɵɵelementEnd();
|
|
1058
|
-
i0.ɵɵelementStart(4, "span",
|
|
1060
|
+
i0.ɵɵelementStart(4, "span", 198);
|
|
1059
1061
|
i0.ɵɵtext(5, "Configure integration definitions in the admin area first.");
|
|
1060
1062
|
i0.ɵɵelementEnd()();
|
|
1061
1063
|
} }
|
|
1062
|
-
function
|
|
1063
|
-
i0.ɵɵelementStart(0, "div",
|
|
1064
|
-
i0.ɵɵelement(1, "i",
|
|
1064
|
+
function ConnectionsComponent_Conditional_10_Conditional_11_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
1065
|
+
i0.ɵɵelementStart(0, "div", 195);
|
|
1066
|
+
i0.ɵɵelement(1, "i", 199);
|
|
1065
1067
|
i0.ɵɵelementStart(2, "p");
|
|
1066
1068
|
i0.ɵɵtext(3, "No matching integrations");
|
|
1067
1069
|
i0.ɵɵelementEnd()();
|
|
1068
1070
|
} }
|
|
1069
|
-
function
|
|
1070
|
-
i0.ɵɵelementStart(0, "div",
|
|
1071
|
+
function ConnectionsComponent_Conditional_10_Conditional_11_Conditional_8_For_2_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
1072
|
+
i0.ɵɵelementStart(0, "div", 204);
|
|
1071
1073
|
i0.ɵɵtext(1);
|
|
1072
1074
|
i0.ɵɵelementEnd();
|
|
1073
1075
|
} if (rf & 2) {
|
|
@@ -1075,61 +1077,61 @@ function ConnectionsComponent_Conditional_3_Conditional_11_Conditional_8_For_2_C
|
|
|
1075
1077
|
i0.ɵɵadvance();
|
|
1076
1078
|
i0.ɵɵtextInterpolate(def_r34.Description);
|
|
1077
1079
|
} }
|
|
1078
|
-
function
|
|
1080
|
+
function ConnectionsComponent_Conditional_10_Conditional_11_Conditional_8_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
1079
1081
|
const _r33 = i0.ɵɵgetCurrentView();
|
|
1080
|
-
i0.ɵɵelementStart(0, "div",
|
|
1081
|
-
i0.ɵɵlistener("click", function
|
|
1082
|
-
i0.ɵɵelementStart(1, "div",
|
|
1082
|
+
i0.ɵɵelementStart(0, "div", 201);
|
|
1083
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_10_Conditional_11_Conditional_8_For_2_Template_div_click_0_listener() { const def_r34 = i0.ɵɵrestoreView(_r33).$implicit; const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.SelectIntegration(def_r34)); });
|
|
1084
|
+
i0.ɵɵelementStart(1, "div", 202);
|
|
1083
1085
|
i0.ɵɵelement(2, "i");
|
|
1084
1086
|
i0.ɵɵelementEnd();
|
|
1085
|
-
i0.ɵɵelementStart(3, "div",
|
|
1087
|
+
i0.ɵɵelementStart(3, "div", 203);
|
|
1086
1088
|
i0.ɵɵtext(4);
|
|
1087
1089
|
i0.ɵɵelementEnd();
|
|
1088
|
-
i0.ɵɵconditionalCreate(5,
|
|
1090
|
+
i0.ɵɵconditionalCreate(5, ConnectionsComponent_Conditional_10_Conditional_11_Conditional_8_For_2_Conditional_5_Template, 2, 1, "div", 204);
|
|
1089
1091
|
i0.ɵɵelementEnd();
|
|
1090
1092
|
} if (rf & 2) {
|
|
1091
1093
|
const def_r34 = ctx.$implicit;
|
|
1092
|
-
const
|
|
1093
|
-
i0.ɵɵclassProp("picker-selected",
|
|
1094
|
+
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
1095
|
+
i0.ɵɵclassProp("picker-selected", ctx_r0.IsSelectedIntegration(def_r34));
|
|
1094
1096
|
i0.ɵɵadvance();
|
|
1095
|
-
i0.ɵɵstyleProp("background-color",
|
|
1097
|
+
i0.ɵɵstyleProp("background-color", ctx_r0.GetIconBrandColor(def_r34.Name));
|
|
1096
1098
|
i0.ɵɵadvance();
|
|
1097
|
-
i0.ɵɵclassMap(
|
|
1099
|
+
i0.ɵɵclassMap(ctx_r0.GetIntegrationIcon(def_r34.Name, def_r34.Get("Icon")));
|
|
1098
1100
|
i0.ɵɵadvance(2);
|
|
1099
1101
|
i0.ɵɵtextInterpolate(def_r34.Name);
|
|
1100
1102
|
i0.ɵɵadvance();
|
|
1101
1103
|
i0.ɵɵconditional(def_r34.Description ? 5 : -1);
|
|
1102
1104
|
} }
|
|
1103
|
-
function
|
|
1104
|
-
i0.ɵɵelementStart(0, "div",
|
|
1105
|
-
i0.ɵɵrepeaterCreate(1,
|
|
1105
|
+
function ConnectionsComponent_Conditional_10_Conditional_11_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
1106
|
+
i0.ɵɵelementStart(0, "div", 196);
|
|
1107
|
+
i0.ɵɵrepeaterCreate(1, ConnectionsComponent_Conditional_10_Conditional_11_Conditional_8_For_2_Template, 6, 8, "div", 200, _forTrack2);
|
|
1106
1108
|
i0.ɵɵelementEnd();
|
|
1107
1109
|
} if (rf & 2) {
|
|
1108
|
-
const
|
|
1110
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
1109
1111
|
i0.ɵɵadvance();
|
|
1110
|
-
i0.ɵɵrepeater(
|
|
1112
|
+
i0.ɵɵrepeater(ctx_r0.FilteredIntegrations);
|
|
1111
1113
|
} }
|
|
1112
|
-
function
|
|
1114
|
+
function ConnectionsComponent_Conditional_10_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
1113
1115
|
const _r32 = i0.ɵɵgetCurrentView();
|
|
1114
|
-
i0.ɵɵelementStart(0, "div",
|
|
1116
|
+
i0.ɵɵelementStart(0, "div", 180)(1, "h3", 191);
|
|
1115
1117
|
i0.ɵɵtext(2, "What system do you want to connect?");
|
|
1116
1118
|
i0.ɵɵelementEnd();
|
|
1117
|
-
i0.ɵɵelementStart(3, "div",
|
|
1118
|
-
i0.ɵɵelement(4, "i",
|
|
1119
|
-
i0.ɵɵelementStart(5, "input",
|
|
1120
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
1119
|
+
i0.ɵɵelementStart(3, "div", 192);
|
|
1120
|
+
i0.ɵɵelement(4, "i", 193);
|
|
1121
|
+
i0.ɵɵelementStart(5, "input", 194);
|
|
1122
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ConnectionsComponent_Conditional_10_Conditional_11_Template_input_ngModelChange_5_listener($event) { i0.ɵɵrestoreView(_r32); const ctx_r0 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r0.SearchQuery, $event) || (ctx_r0.SearchQuery = $event); return i0.ɵɵresetView($event); });
|
|
1121
1123
|
i0.ɵɵelementEnd()();
|
|
1122
|
-
i0.ɵɵconditionalCreate(6,
|
|
1124
|
+
i0.ɵɵconditionalCreate(6, ConnectionsComponent_Conditional_10_Conditional_11_Conditional_6_Template, 6, 0, "div", 195)(7, ConnectionsComponent_Conditional_10_Conditional_11_Conditional_7_Template, 4, 0, "div", 195)(8, ConnectionsComponent_Conditional_10_Conditional_11_Conditional_8_Template, 3, 0, "div", 196);
|
|
1123
1125
|
i0.ɵɵelementEnd();
|
|
1124
1126
|
} if (rf & 2) {
|
|
1125
|
-
const
|
|
1127
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
1126
1128
|
i0.ɵɵadvance(5);
|
|
1127
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
1129
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r0.SearchQuery);
|
|
1128
1130
|
i0.ɵɵadvance();
|
|
1129
|
-
i0.ɵɵconditional(
|
|
1131
|
+
i0.ɵɵconditional(ctx_r0.FilteredIntegrations.length === 0 && ctx_r0.AvailableIntegrations.length === 0 ? 6 : ctx_r0.FilteredIntegrations.length === 0 ? 7 : 8);
|
|
1130
1132
|
} }
|
|
1131
|
-
function
|
|
1132
|
-
i0.ɵɵelementStart(0, "option",
|
|
1133
|
+
function ConnectionsComponent_Conditional_10_Conditional_12_Conditional_10_For_4_Template(rf, ctx) { if (rf & 1) {
|
|
1134
|
+
i0.ɵɵelementStart(0, "option", 110);
|
|
1133
1135
|
i0.ɵɵtext(1);
|
|
1134
1136
|
i0.ɵɵelementEnd();
|
|
1135
1137
|
} if (rf & 2) {
|
|
@@ -1138,73 +1140,73 @@ function ConnectionsComponent_Conditional_3_Conditional_12_Conditional_10_For_4_
|
|
|
1138
1140
|
i0.ɵɵadvance();
|
|
1139
1141
|
i0.ɵɵtextInterpolate(company_r37.Name);
|
|
1140
1142
|
} }
|
|
1141
|
-
function
|
|
1143
|
+
function ConnectionsComponent_Conditional_10_Conditional_12_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
1142
1144
|
const _r36 = i0.ɵɵgetCurrentView();
|
|
1143
|
-
i0.ɵɵelementStart(0, "select",
|
|
1144
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
1145
|
-
i0.ɵɵelementStart(1, "option",
|
|
1145
|
+
i0.ɵɵelementStart(0, "select", 220);
|
|
1146
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ConnectionsComponent_Conditional_10_Conditional_12_Conditional_10_Template_select_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r36); const ctx_r0 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r0.SelectedCompanyID, $event) || (ctx_r0.SelectedCompanyID = $event); return i0.ɵɵresetView($event); });
|
|
1147
|
+
i0.ɵɵelementStart(1, "option", 109);
|
|
1146
1148
|
i0.ɵɵtext(2, "Select a company...");
|
|
1147
1149
|
i0.ɵɵelementEnd();
|
|
1148
|
-
i0.ɵɵrepeaterCreate(3,
|
|
1150
|
+
i0.ɵɵrepeaterCreate(3, ConnectionsComponent_Conditional_10_Conditional_12_Conditional_10_For_4_Template, 2, 2, "option", 110, _forTrack2);
|
|
1149
1151
|
i0.ɵɵelementEnd();
|
|
1150
1152
|
} if (rf & 2) {
|
|
1151
|
-
const
|
|
1152
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
1153
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
1154
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r0.SelectedCompanyID);
|
|
1153
1155
|
i0.ɵɵadvance();
|
|
1154
1156
|
i0.ɵɵproperty("ngValue", null);
|
|
1155
1157
|
i0.ɵɵadvance(2);
|
|
1156
|
-
i0.ɵɵrepeater(
|
|
1158
|
+
i0.ɵɵrepeater(ctx_r0.Companies);
|
|
1157
1159
|
} }
|
|
1158
|
-
function
|
|
1159
|
-
i0.ɵɵelement(0, "input",
|
|
1160
|
+
function ConnectionsComponent_Conditional_10_Conditional_12_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
1161
|
+
i0.ɵɵelement(0, "input", 210);
|
|
1160
1162
|
} if (rf & 2) {
|
|
1161
|
-
const
|
|
1162
|
-
i0.ɵɵproperty("value",
|
|
1163
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
1164
|
+
i0.ɵɵproperty("value", ctx_r0.Companies[0].Name);
|
|
1163
1165
|
} }
|
|
1164
|
-
function
|
|
1165
|
-
i0.ɵɵelementStart(0, "div",
|
|
1166
|
+
function ConnectionsComponent_Conditional_10_Conditional_12_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
1167
|
+
i0.ɵɵelementStart(0, "div", 211);
|
|
1166
1168
|
i0.ɵɵtext(1, "No companies available. Create one in the admin area.");
|
|
1167
1169
|
i0.ɵɵelementEnd();
|
|
1168
1170
|
} }
|
|
1169
|
-
function
|
|
1171
|
+
function ConnectionsComponent_Conditional_10_Conditional_12_Conditional_22_Template(rf, ctx) { if (rf & 1) {
|
|
1170
1172
|
const _r38 = i0.ɵɵgetCurrentView();
|
|
1171
|
-
i0.ɵɵelementStart(0, "div",
|
|
1172
|
-
i0.ɵɵelement(2, "i",
|
|
1173
|
+
i0.ɵɵelementStart(0, "div", 216)(1, "div", 221);
|
|
1174
|
+
i0.ɵɵelement(2, "i", 222);
|
|
1173
1175
|
i0.ɵɵelementStart(3, "span");
|
|
1174
1176
|
i0.ɵɵtext(4);
|
|
1175
1177
|
i0.ɵɵelementEnd()();
|
|
1176
|
-
i0.ɵɵelementStart(5, "button",
|
|
1177
|
-
i0.ɵɵlistener("click", function
|
|
1178
|
-
i0.ɵɵelement(6, "i",
|
|
1178
|
+
i0.ɵɵelementStart(5, "button", 223);
|
|
1179
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_10_Conditional_12_Conditional_22_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r38); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.ClearCredential()); });
|
|
1180
|
+
i0.ɵɵelement(6, "i", 121);
|
|
1179
1181
|
i0.ɵɵelementEnd()();
|
|
1180
1182
|
} if (rf & 2) {
|
|
1181
|
-
const
|
|
1183
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
1182
1184
|
i0.ɵɵadvance(4);
|
|
1183
|
-
i0.ɵɵtextInterpolate(
|
|
1185
|
+
i0.ɵɵtextInterpolate(ctx_r0.SelectedCredential.Name);
|
|
1184
1186
|
} }
|
|
1185
|
-
function
|
|
1187
|
+
function ConnectionsComponent_Conditional_10_Conditional_12_Conditional_23_Template(rf, ctx) { if (rf & 1) {
|
|
1186
1188
|
const _r39 = i0.ɵɵgetCurrentView();
|
|
1187
|
-
i0.ɵɵelementStart(0, "div",
|
|
1188
|
-
i0.ɵɵlistener("click", function
|
|
1189
|
-
i0.ɵɵelement(2, "i",
|
|
1189
|
+
i0.ɵɵelementStart(0, "div", 217)(1, "button", 45);
|
|
1190
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_10_Conditional_12_Conditional_23_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r39); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.ShowExistingCredentials()); });
|
|
1191
|
+
i0.ɵɵelement(2, "i", 222);
|
|
1190
1192
|
i0.ɵɵtext(3, " Choose Existing Credential ");
|
|
1191
1193
|
i0.ɵɵelementEnd();
|
|
1192
|
-
i0.ɵɵelementStart(4, "button",
|
|
1193
|
-
i0.ɵɵlistener("click", function
|
|
1194
|
-
i0.ɵɵelement(5, "i",
|
|
1194
|
+
i0.ɵɵelementStart(4, "button", 45);
|
|
1195
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_10_Conditional_12_Conditional_23_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r39); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.OpenCredentialDialog()); });
|
|
1196
|
+
i0.ɵɵelement(5, "i", 15);
|
|
1195
1197
|
i0.ɵɵtext(6, " Create New Credential ");
|
|
1196
1198
|
i0.ɵɵelementEnd()();
|
|
1197
1199
|
} }
|
|
1198
|
-
function
|
|
1199
|
-
i0.ɵɵelementStart(0, "div",
|
|
1200
|
-
i0.ɵɵelement(1, "mj-loading",
|
|
1200
|
+
function ConnectionsComponent_Conditional_10_Conditional_12_Conditional_24_Template(rf, ctx) { if (rf & 1) {
|
|
1201
|
+
i0.ɵɵelementStart(0, "div", 218);
|
|
1202
|
+
i0.ɵɵelement(1, "mj-loading", 224);
|
|
1201
1203
|
i0.ɵɵelementEnd();
|
|
1202
1204
|
} }
|
|
1203
|
-
function
|
|
1205
|
+
function ConnectionsComponent_Conditional_10_Conditional_12_Conditional_25_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
1204
1206
|
const _r40 = i0.ɵɵgetCurrentView();
|
|
1205
|
-
i0.ɵɵelementStart(0, "div",
|
|
1206
|
-
i0.ɵɵlistener("click", function
|
|
1207
|
-
i0.ɵɵelement(1, "i",
|
|
1207
|
+
i0.ɵɵelementStart(0, "div", 226);
|
|
1208
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_10_Conditional_12_Conditional_25_For_2_Template_div_click_0_listener() { const cred_r41 = i0.ɵɵrestoreView(_r40).$implicit; const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.SelectExistingCredential(cred_r41)); });
|
|
1209
|
+
i0.ɵɵelement(1, "i", 222);
|
|
1208
1210
|
i0.ɵɵelementStart(2, "span");
|
|
1209
1211
|
i0.ɵɵtext(3);
|
|
1210
1212
|
i0.ɵɵelementEnd()();
|
|
@@ -1213,228 +1215,228 @@ function ConnectionsComponent_Conditional_3_Conditional_12_Conditional_25_For_2_
|
|
|
1213
1215
|
i0.ɵɵadvance(3);
|
|
1214
1216
|
i0.ɵɵtextInterpolate(cred_r41.Name);
|
|
1215
1217
|
} }
|
|
1216
|
-
function
|
|
1217
|
-
i0.ɵɵelementStart(0, "div",
|
|
1218
|
-
i0.ɵɵrepeaterCreate(1,
|
|
1218
|
+
function ConnectionsComponent_Conditional_10_Conditional_12_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
1219
|
+
i0.ɵɵelementStart(0, "div", 219);
|
|
1220
|
+
i0.ɵɵrepeaterCreate(1, ConnectionsComponent_Conditional_10_Conditional_12_Conditional_25_For_2_Template, 4, 1, "div", 225, _forTrack2);
|
|
1219
1221
|
i0.ɵɵelementEnd();
|
|
1220
1222
|
} if (rf & 2) {
|
|
1221
|
-
const
|
|
1223
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
1222
1224
|
i0.ɵɵadvance();
|
|
1223
|
-
i0.ɵɵrepeater(
|
|
1225
|
+
i0.ɵɵrepeater(ctx_r0.ExistingCredentials);
|
|
1224
1226
|
} }
|
|
1225
|
-
function
|
|
1227
|
+
function ConnectionsComponent_Conditional_10_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
1226
1228
|
const _r35 = i0.ɵɵgetCurrentView();
|
|
1227
|
-
i0.ɵɵelementStart(0, "div",
|
|
1229
|
+
i0.ɵɵelementStart(0, "div", 180)(1, "h3", 191);
|
|
1228
1230
|
i0.ɵɵtext(2, "Set up your connection");
|
|
1229
1231
|
i0.ɵɵelementEnd();
|
|
1230
|
-
i0.ɵɵelementStart(3, "div",
|
|
1232
|
+
i0.ɵɵelementStart(3, "div", 205)(4, "label", 206);
|
|
1231
1233
|
i0.ɵɵtext(5, "Connection Name");
|
|
1232
1234
|
i0.ɵɵelementEnd();
|
|
1233
|
-
i0.ɵɵelementStart(6, "input",
|
|
1234
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
1235
|
+
i0.ɵɵelementStart(6, "input", 207);
|
|
1236
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ConnectionsComponent_Conditional_10_Conditional_12_Template_input_ngModelChange_6_listener($event) { i0.ɵɵrestoreView(_r35); const ctx_r0 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r0.ConnectionName, $event) || (ctx_r0.ConnectionName = $event); return i0.ɵɵresetView($event); });
|
|
1235
1237
|
i0.ɵɵelementEnd()();
|
|
1236
|
-
i0.ɵɵelementStart(7, "div",
|
|
1238
|
+
i0.ɵɵelementStart(7, "div", 205)(8, "label", 208);
|
|
1237
1239
|
i0.ɵɵtext(9, "Company");
|
|
1238
1240
|
i0.ɵɵelementEnd();
|
|
1239
|
-
i0.ɵɵconditionalCreate(10,
|
|
1241
|
+
i0.ɵɵconditionalCreate(10, ConnectionsComponent_Conditional_10_Conditional_12_Conditional_10_Template, 5, 2, "select", 209)(11, ConnectionsComponent_Conditional_10_Conditional_12_Conditional_11_Template, 1, 1, "input", 210)(12, ConnectionsComponent_Conditional_10_Conditional_12_Conditional_12_Template, 2, 0, "div", 211);
|
|
1240
1242
|
i0.ɵɵelementEnd();
|
|
1241
|
-
i0.ɵɵelementStart(13, "div",
|
|
1243
|
+
i0.ɵɵelementStart(13, "div", 205)(14, "label", 212);
|
|
1242
1244
|
i0.ɵɵtext(15, "Description ");
|
|
1243
|
-
i0.ɵɵelementStart(16, "span",
|
|
1245
|
+
i0.ɵɵelementStart(16, "span", 213);
|
|
1244
1246
|
i0.ɵɵtext(17, "(optional)");
|
|
1245
1247
|
i0.ɵɵelementEnd()();
|
|
1246
|
-
i0.ɵɵelementStart(18, "textarea",
|
|
1247
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
1248
|
+
i0.ɵɵelementStart(18, "textarea", 214);
|
|
1249
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ConnectionsComponent_Conditional_10_Conditional_12_Template_textarea_ngModelChange_18_listener($event) { i0.ɵɵrestoreView(_r35); const ctx_r0 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r0.ConnectionDescription, $event) || (ctx_r0.ConnectionDescription = $event); return i0.ɵɵresetView($event); });
|
|
1248
1250
|
i0.ɵɵelementEnd()();
|
|
1249
|
-
i0.ɵɵelementStart(19, "div",
|
|
1251
|
+
i0.ɵɵelementStart(19, "div", 205)(20, "label", 215);
|
|
1250
1252
|
i0.ɵɵtext(21, "Credential");
|
|
1251
1253
|
i0.ɵɵelementEnd();
|
|
1252
|
-
i0.ɵɵconditionalCreate(22,
|
|
1253
|
-
i0.ɵɵconditionalCreate(24,
|
|
1254
|
-
i0.ɵɵconditionalCreate(25,
|
|
1254
|
+
i0.ɵɵconditionalCreate(22, ConnectionsComponent_Conditional_10_Conditional_12_Conditional_22_Template, 7, 1, "div", 216)(23, ConnectionsComponent_Conditional_10_Conditional_12_Conditional_23_Template, 7, 0, "div", 217);
|
|
1255
|
+
i0.ɵɵconditionalCreate(24, ConnectionsComponent_Conditional_10_Conditional_12_Conditional_24_Template, 2, 0, "div", 218);
|
|
1256
|
+
i0.ɵɵconditionalCreate(25, ConnectionsComponent_Conditional_10_Conditional_12_Conditional_25_Template, 3, 0, "div", 219);
|
|
1255
1257
|
i0.ɵɵelementEnd()();
|
|
1256
1258
|
} if (rf & 2) {
|
|
1257
|
-
const
|
|
1259
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
1258
1260
|
i0.ɵɵadvance(6);
|
|
1259
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
1261
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r0.ConnectionName);
|
|
1260
1262
|
i0.ɵɵadvance(4);
|
|
1261
|
-
i0.ɵɵconditional(
|
|
1263
|
+
i0.ɵɵconditional(ctx_r0.NeedsCompanyPicker ? 10 : ctx_r0.Companies.length === 1 ? 11 : 12);
|
|
1262
1264
|
i0.ɵɵadvance(8);
|
|
1263
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
1265
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r0.ConnectionDescription);
|
|
1264
1266
|
i0.ɵɵadvance(4);
|
|
1265
|
-
i0.ɵɵconditional(
|
|
1267
|
+
i0.ɵɵconditional(ctx_r0.SelectedCredential ? 22 : 23);
|
|
1266
1268
|
i0.ɵɵadvance(2);
|
|
1267
|
-
i0.ɵɵconditional(
|
|
1269
|
+
i0.ɵɵconditional(ctx_r0.IsLoadingCredentials ? 24 : -1);
|
|
1268
1270
|
i0.ɵɵadvance();
|
|
1269
|
-
i0.ɵɵconditional(!
|
|
1271
|
+
i0.ɵɵconditional(!ctx_r0.IsLoadingCredentials && ctx_r0.ExistingCredentials.length > 0 && !ctx_r0.SelectedCredential ? 25 : -1);
|
|
1270
1272
|
} }
|
|
1271
|
-
function
|
|
1273
|
+
function ConnectionsComponent_Conditional_10_Conditional_13_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1272
1274
|
const _r42 = i0.ɵɵgetCurrentView();
|
|
1273
|
-
i0.ɵɵelementStart(0, "div",
|
|
1274
|
-
i0.ɵɵlistener("click", function
|
|
1275
|
-
i0.ɵɵelement(2, "i",
|
|
1275
|
+
i0.ɵɵelementStart(0, "div", 227)(1, "button", 230);
|
|
1276
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_10_Conditional_13_Conditional_3_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r42); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.TestNewConnection()); });
|
|
1277
|
+
i0.ɵɵelement(2, "i", 231);
|
|
1276
1278
|
i0.ɵɵtext(3, " Test Connection ");
|
|
1277
1279
|
i0.ɵɵelementEnd();
|
|
1278
|
-
i0.ɵɵelementStart(4, "p",
|
|
1280
|
+
i0.ɵɵelementStart(4, "p", 232);
|
|
1279
1281
|
i0.ɵɵtext(5, "We'll verify we can reach your system and authenticate.");
|
|
1280
1282
|
i0.ɵɵelementEnd()();
|
|
1281
1283
|
} }
|
|
1282
|
-
function
|
|
1283
|
-
i0.ɵɵelementStart(0, "div",
|
|
1284
|
-
i0.ɵɵelement(2, "i",
|
|
1284
|
+
function ConnectionsComponent_Conditional_10_Conditional_13_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
1285
|
+
i0.ɵɵelementStart(0, "div", 228)(1, "div", 233);
|
|
1286
|
+
i0.ɵɵelement(2, "i", 234);
|
|
1285
1287
|
i0.ɵɵelementEnd();
|
|
1286
1288
|
i0.ɵɵelementStart(3, "p");
|
|
1287
1289
|
i0.ɵɵtext(4, "Testing connection...");
|
|
1288
1290
|
i0.ɵɵelementEnd()();
|
|
1289
1291
|
} }
|
|
1290
|
-
function
|
|
1291
|
-
i0.ɵɵelement(0, "i",
|
|
1292
|
+
function ConnectionsComponent_Conditional_10_Conditional_13_Conditional_5_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
1293
|
+
i0.ɵɵelement(0, "i", 50);
|
|
1292
1294
|
} }
|
|
1293
|
-
function
|
|
1294
|
-
i0.ɵɵelement(0, "i",
|
|
1295
|
+
function ConnectionsComponent_Conditional_10_Conditional_13_Conditional_5_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1296
|
+
i0.ɵɵelement(0, "i", 51);
|
|
1295
1297
|
} }
|
|
1296
|
-
function
|
|
1297
|
-
i0.ɵɵelementStart(0, "div",
|
|
1298
|
+
function ConnectionsComponent_Conditional_10_Conditional_13_Conditional_5_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
1299
|
+
i0.ɵɵelementStart(0, "div", 238);
|
|
1298
1300
|
i0.ɵɵtext(1);
|
|
1299
1301
|
i0.ɵɵelementEnd();
|
|
1300
1302
|
} if (rf & 2) {
|
|
1301
|
-
const
|
|
1303
|
+
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
1302
1304
|
i0.ɵɵadvance();
|
|
1303
|
-
i0.ɵɵtextInterpolate1(" Server version: ",
|
|
1305
|
+
i0.ɵɵtextInterpolate1(" Server version: ", ctx_r0.TestResult.ServerVersion, " ");
|
|
1304
1306
|
} }
|
|
1305
|
-
function
|
|
1307
|
+
function ConnectionsComponent_Conditional_10_Conditional_13_Conditional_5_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
1306
1308
|
const _r43 = i0.ɵɵgetCurrentView();
|
|
1307
|
-
i0.ɵɵelementStart(0, "button",
|
|
1308
|
-
i0.ɵɵlistener("click", function
|
|
1309
|
-
i0.ɵɵelement(1, "i",
|
|
1309
|
+
i0.ɵɵelementStart(0, "button", 240);
|
|
1310
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_10_Conditional_13_Conditional_5_Conditional_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r43); const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.TestNewConnection()); });
|
|
1311
|
+
i0.ɵɵelement(1, "i", 241);
|
|
1310
1312
|
i0.ɵɵtext(2, " Retry ");
|
|
1311
1313
|
i0.ɵɵelementEnd();
|
|
1312
1314
|
} }
|
|
1313
|
-
function
|
|
1314
|
-
i0.ɵɵelementStart(0, "div",
|
|
1315
|
-
i0.ɵɵconditionalCreate(2,
|
|
1315
|
+
function ConnectionsComponent_Conditional_10_Conditional_13_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
1316
|
+
i0.ɵɵelementStart(0, "div", 235)(1, "div", 236);
|
|
1317
|
+
i0.ɵɵconditionalCreate(2, ConnectionsComponent_Conditional_10_Conditional_13_Conditional_5_Conditional_2_Template, 1, 0, "i", 50)(3, ConnectionsComponent_Conditional_10_Conditional_13_Conditional_5_Conditional_3_Template, 1, 0, "i", 51);
|
|
1316
1318
|
i0.ɵɵelementEnd();
|
|
1317
|
-
i0.ɵɵelementStart(4, "div",
|
|
1319
|
+
i0.ɵɵelementStart(4, "div", 237);
|
|
1318
1320
|
i0.ɵɵtext(5);
|
|
1319
1321
|
i0.ɵɵelementEnd();
|
|
1320
|
-
i0.ɵɵconditionalCreate(6,
|
|
1321
|
-
i0.ɵɵconditionalCreate(7,
|
|
1322
|
+
i0.ɵɵconditionalCreate(6, ConnectionsComponent_Conditional_10_Conditional_13_Conditional_5_Conditional_6_Template, 2, 1, "div", 238);
|
|
1323
|
+
i0.ɵɵconditionalCreate(7, ConnectionsComponent_Conditional_10_Conditional_13_Conditional_5_Conditional_7_Template, 3, 0, "button", 239);
|
|
1322
1324
|
i0.ɵɵelementEnd();
|
|
1323
1325
|
} if (rf & 2) {
|
|
1324
|
-
const
|
|
1325
|
-
i0.ɵɵclassProp("test-result-success",
|
|
1326
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
1327
|
+
i0.ɵɵclassProp("test-result-success", ctx_r0.TestResult.Success)("test-result-failure", !ctx_r0.TestResult.Success);
|
|
1326
1328
|
i0.ɵɵadvance(2);
|
|
1327
|
-
i0.ɵɵconditional(
|
|
1329
|
+
i0.ɵɵconditional(ctx_r0.TestResult.Success ? 2 : 3);
|
|
1328
1330
|
i0.ɵɵadvance(3);
|
|
1329
|
-
i0.ɵɵtextInterpolate(
|
|
1331
|
+
i0.ɵɵtextInterpolate(ctx_r0.TestResult.Message);
|
|
1330
1332
|
i0.ɵɵadvance();
|
|
1331
|
-
i0.ɵɵconditional(
|
|
1333
|
+
i0.ɵɵconditional(ctx_r0.TestResult.Success && ctx_r0.TestResult.ServerVersion ? 6 : -1);
|
|
1332
1334
|
i0.ɵɵadvance();
|
|
1333
|
-
i0.ɵɵconditional(!
|
|
1335
|
+
i0.ɵɵconditional(!ctx_r0.TestResult.Success ? 7 : -1);
|
|
1334
1336
|
} }
|
|
1335
|
-
function
|
|
1336
|
-
i0.ɵɵelementStart(0, "div",
|
|
1337
|
+
function ConnectionsComponent_Conditional_10_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
1338
|
+
i0.ɵɵelementStart(0, "div", 181)(1, "h3", 191);
|
|
1337
1339
|
i0.ɵɵtext(2, "Let's verify everything works");
|
|
1338
1340
|
i0.ɵɵelementEnd();
|
|
1339
|
-
i0.ɵɵconditionalCreate(3,
|
|
1340
|
-
i0.ɵɵconditionalCreate(4,
|
|
1341
|
-
i0.ɵɵconditionalCreate(5,
|
|
1341
|
+
i0.ɵɵconditionalCreate(3, ConnectionsComponent_Conditional_10_Conditional_13_Conditional_3_Template, 6, 0, "div", 227);
|
|
1342
|
+
i0.ɵɵconditionalCreate(4, ConnectionsComponent_Conditional_10_Conditional_13_Conditional_4_Template, 5, 0, "div", 228);
|
|
1343
|
+
i0.ɵɵconditionalCreate(5, ConnectionsComponent_Conditional_10_Conditional_13_Conditional_5_Template, 8, 8, "div", 229);
|
|
1342
1344
|
i0.ɵɵelementEnd();
|
|
1343
1345
|
} if (rf & 2) {
|
|
1344
|
-
const
|
|
1346
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
1345
1347
|
i0.ɵɵadvance(3);
|
|
1346
|
-
i0.ɵɵconditional(!
|
|
1348
|
+
i0.ɵɵconditional(!ctx_r0.TestResult && !ctx_r0.IsTesting ? 3 : -1);
|
|
1347
1349
|
i0.ɵɵadvance();
|
|
1348
|
-
i0.ɵɵconditional(
|
|
1350
|
+
i0.ɵɵconditional(ctx_r0.IsTesting ? 4 : -1);
|
|
1349
1351
|
i0.ɵɵadvance();
|
|
1350
|
-
i0.ɵɵconditional(
|
|
1352
|
+
i0.ɵɵconditional(ctx_r0.TestResult ? 5 : -1);
|
|
1351
1353
|
} }
|
|
1352
|
-
function
|
|
1354
|
+
function ConnectionsComponent_Conditional_10_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
1353
1355
|
const _r44 = i0.ɵɵgetCurrentView();
|
|
1354
|
-
i0.ɵɵelementStart(0, "button",
|
|
1355
|
-
i0.ɵɵlistener("click", function
|
|
1356
|
+
i0.ɵɵelementStart(0, "button", 45);
|
|
1357
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_10_Conditional_17_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r44); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.PreviousStep()); });
|
|
1356
1358
|
i0.ɵɵtext(1, " Back ");
|
|
1357
1359
|
i0.ɵɵelementEnd();
|
|
1358
1360
|
} }
|
|
1359
|
-
function
|
|
1360
|
-
i0.ɵɵelement(0, "i",
|
|
1361
|
+
function ConnectionsComponent_Conditional_10_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
1362
|
+
i0.ɵɵelement(0, "i", 44);
|
|
1361
1363
|
i0.ɵɵtext(1, " Saving... ");
|
|
1362
1364
|
} }
|
|
1363
|
-
function
|
|
1365
|
+
function ConnectionsComponent_Conditional_10_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
1364
1366
|
i0.ɵɵtext(0);
|
|
1365
1367
|
} if (rf & 2) {
|
|
1366
|
-
const
|
|
1367
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1368
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
1369
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r0.NextButtonLabel, " ");
|
|
1368
1370
|
} }
|
|
1369
|
-
function
|
|
1371
|
+
function ConnectionsComponent_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
1370
1372
|
const _r30 = i0.ɵɵgetCurrentView();
|
|
1371
|
-
i0.ɵɵelementStart(0, "div",
|
|
1372
|
-
i0.ɵɵlistener("click", function
|
|
1373
|
-
i0.ɵɵelement(3, "i",
|
|
1373
|
+
i0.ɵɵelementStart(0, "div", 9)(1, "div", 175)(2, "button", 176);
|
|
1374
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_10_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r30); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.CloseWizard()); });
|
|
1375
|
+
i0.ɵɵelement(3, "i", 70);
|
|
1374
1376
|
i0.ɵɵtext(4, " Back to Integrations ");
|
|
1375
1377
|
i0.ɵɵelementEnd();
|
|
1376
|
-
i0.ɵɵelementStart(5, "h2",
|
|
1378
|
+
i0.ɵɵelementStart(5, "h2", 177);
|
|
1377
1379
|
i0.ɵɵtext(6, "New Integration");
|
|
1378
1380
|
i0.ɵɵelementEnd()();
|
|
1379
|
-
i0.ɵɵelementStart(7, "div",
|
|
1380
|
-
i0.ɵɵrepeaterCreate(8,
|
|
1381
|
-
i0.ɵɵelementEnd();
|
|
1382
|
-
i0.ɵɵelementStart(10, "div",
|
|
1383
|
-
i0.ɵɵconditionalCreate(11,
|
|
1384
|
-
i0.ɵɵconditionalCreate(12,
|
|
1385
|
-
i0.ɵɵconditionalCreate(13,
|
|
1386
|
-
i0.ɵɵelementEnd();
|
|
1387
|
-
i0.ɵɵelementStart(14, "div",
|
|
1388
|
-
i0.ɵɵelement(15, "div",
|
|
1389
|
-
i0.ɵɵelementStart(16, "div",
|
|
1390
|
-
i0.ɵɵconditionalCreate(17,
|
|
1391
|
-
i0.ɵɵelementStart(18, "button",
|
|
1392
|
-
i0.ɵɵlistener("click", function
|
|
1393
|
-
i0.ɵɵconditionalCreate(19,
|
|
1381
|
+
i0.ɵɵelementStart(7, "div", 178);
|
|
1382
|
+
i0.ɵɵrepeaterCreate(8, ConnectionsComponent_Conditional_10_For_9_Template, 7, 7, null, null, _forTrack3);
|
|
1383
|
+
i0.ɵɵelementEnd();
|
|
1384
|
+
i0.ɵɵelementStart(10, "div", 179);
|
|
1385
|
+
i0.ɵɵconditionalCreate(11, ConnectionsComponent_Conditional_10_Conditional_11_Template, 9, 2, "div", 180);
|
|
1386
|
+
i0.ɵɵconditionalCreate(12, ConnectionsComponent_Conditional_10_Conditional_12_Template, 26, 6, "div", 180);
|
|
1387
|
+
i0.ɵɵconditionalCreate(13, ConnectionsComponent_Conditional_10_Conditional_13_Template, 6, 3, "div", 181);
|
|
1388
|
+
i0.ɵɵelementEnd();
|
|
1389
|
+
i0.ɵɵelementStart(14, "div", 182);
|
|
1390
|
+
i0.ɵɵelement(15, "div", 183);
|
|
1391
|
+
i0.ɵɵelementStart(16, "div", 184);
|
|
1392
|
+
i0.ɵɵconditionalCreate(17, ConnectionsComponent_Conditional_10_Conditional_17_Template, 2, 0, "button", 185);
|
|
1393
|
+
i0.ɵɵelementStart(18, "button", 57);
|
|
1394
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_10_Template_button_click_18_listener() { i0.ɵɵrestoreView(_r30); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.FinishWizard()); });
|
|
1395
|
+
i0.ɵɵconditionalCreate(19, ConnectionsComponent_Conditional_10_Conditional_19_Template, 2, 0)(20, ConnectionsComponent_Conditional_10_Conditional_20_Template, 1, 1);
|
|
1394
1396
|
i0.ɵɵelementEnd()()()();
|
|
1395
1397
|
} if (rf & 2) {
|
|
1396
|
-
const
|
|
1398
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
1397
1399
|
i0.ɵɵadvance(8);
|
|
1398
|
-
i0.ɵɵrepeater(
|
|
1400
|
+
i0.ɵɵrepeater(ctx_r0.WizardSteps);
|
|
1399
1401
|
i0.ɵɵadvance(3);
|
|
1400
|
-
i0.ɵɵconditional(
|
|
1402
|
+
i0.ɵɵconditional(ctx_r0.WizardStep === 1 ? 11 : -1);
|
|
1401
1403
|
i0.ɵɵadvance();
|
|
1402
|
-
i0.ɵɵconditional(
|
|
1404
|
+
i0.ɵɵconditional(ctx_r0.WizardStep === 2 ? 12 : -1);
|
|
1403
1405
|
i0.ɵɵadvance();
|
|
1404
|
-
i0.ɵɵconditional(
|
|
1406
|
+
i0.ɵɵconditional(ctx_r0.WizardStep === 3 ? 13 : -1);
|
|
1405
1407
|
i0.ɵɵadvance(4);
|
|
1406
|
-
i0.ɵɵconditional(
|
|
1408
|
+
i0.ɵɵconditional(ctx_r0.WizardStep > 1 ? 17 : -1);
|
|
1407
1409
|
i0.ɵɵadvance();
|
|
1408
|
-
i0.ɵɵproperty("disabled",
|
|
1410
|
+
i0.ɵɵproperty("disabled", ctx_r0.IsNextDisabled || ctx_r0.IsSaving);
|
|
1409
1411
|
i0.ɵɵadvance();
|
|
1410
|
-
i0.ɵɵconditional(
|
|
1412
|
+
i0.ɵɵconditional(ctx_r0.IsSaving ? 19 : 20);
|
|
1411
1413
|
} }
|
|
1412
|
-
function
|
|
1413
|
-
i0.ɵɵelementStart(0, "div",
|
|
1414
|
-
i0.ɵɵelement(1, "mj-loading",
|
|
1414
|
+
function ConnectionsComponent_Conditional_13_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
1415
|
+
i0.ɵɵelementStart(0, "div", 246);
|
|
1416
|
+
i0.ɵɵelement(1, "mj-loading", 247);
|
|
1415
1417
|
i0.ɵɵelementEnd();
|
|
1416
1418
|
} }
|
|
1417
|
-
function
|
|
1419
|
+
function ConnectionsComponent_Conditional_13_Conditional_9_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
1418
1420
|
const _r47 = i0.ɵɵgetCurrentView();
|
|
1419
|
-
i0.ɵɵelementStart(0, "div",
|
|
1420
|
-
i0.ɵɵelement(2, "i",
|
|
1421
|
+
i0.ɵɵelementStart(0, "div", 255)(1, "div", 258);
|
|
1422
|
+
i0.ɵɵelement(2, "i", 222);
|
|
1421
1423
|
i0.ɵɵelementStart(3, "span");
|
|
1422
1424
|
i0.ɵɵtext(4);
|
|
1423
1425
|
i0.ɵɵelementEnd()();
|
|
1424
|
-
i0.ɵɵelementStart(5, "button",
|
|
1425
|
-
i0.ɵɵlistener("click", function
|
|
1426
|
-
i0.ɵɵelement(6, "i",
|
|
1426
|
+
i0.ɵɵelementStart(5, "button", 259);
|
|
1427
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_13_Conditional_9_Conditional_17_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r47); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.ClearEditCredential()); });
|
|
1428
|
+
i0.ɵɵelement(6, "i", 121);
|
|
1427
1429
|
i0.ɵɵelementEnd()();
|
|
1428
1430
|
} if (rf & 2) {
|
|
1429
|
-
const
|
|
1431
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
1430
1432
|
i0.ɵɵadvance(4);
|
|
1431
|
-
i0.ɵɵtextInterpolate(
|
|
1433
|
+
i0.ɵɵtextInterpolate(ctx_r0.EditCredential.Name);
|
|
1432
1434
|
} }
|
|
1433
|
-
function
|
|
1435
|
+
function ConnectionsComponent_Conditional_13_Conditional_9_Conditional_18_Conditional_4_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
1434
1436
|
const _r49 = i0.ɵɵgetCurrentView();
|
|
1435
|
-
i0.ɵɵelementStart(0, "div",
|
|
1436
|
-
i0.ɵɵlistener("click", function
|
|
1437
|
-
i0.ɵɵelement(1, "i",
|
|
1437
|
+
i0.ɵɵelementStart(0, "div", 264);
|
|
1438
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_13_Conditional_9_Conditional_18_Conditional_4_For_2_Template_div_click_0_listener() { const cred_r50 = i0.ɵɵrestoreView(_r49).$implicit; const ctx_r0 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r0.SelectEditCredential(cred_r50)); });
|
|
1439
|
+
i0.ɵɵelement(1, "i", 222);
|
|
1438
1440
|
i0.ɵɵelementStart(2, "span");
|
|
1439
1441
|
i0.ɵɵtext(3);
|
|
1440
1442
|
i0.ɵɵelementEnd()();
|
|
@@ -1443,145 +1445,145 @@ function ConnectionsComponent_Conditional_6_Conditional_9_Conditional_18_Conditi
|
|
|
1443
1445
|
i0.ɵɵadvance(3);
|
|
1444
1446
|
i0.ɵɵtextInterpolate(cred_r50.Name);
|
|
1445
1447
|
} }
|
|
1446
|
-
function
|
|
1447
|
-
i0.ɵɵelementStart(0, "div",
|
|
1448
|
-
i0.ɵɵrepeaterCreate(1,
|
|
1448
|
+
function ConnectionsComponent_Conditional_13_Conditional_9_Conditional_18_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
1449
|
+
i0.ɵɵelementStart(0, "div", 262);
|
|
1450
|
+
i0.ɵɵrepeaterCreate(1, ConnectionsComponent_Conditional_13_Conditional_9_Conditional_18_Conditional_4_For_2_Template, 4, 1, "div", 263, _forTrack2);
|
|
1449
1451
|
i0.ɵɵelementEnd();
|
|
1450
1452
|
} if (rf & 2) {
|
|
1451
|
-
const
|
|
1453
|
+
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
1452
1454
|
i0.ɵɵadvance();
|
|
1453
|
-
i0.ɵɵrepeater(
|
|
1455
|
+
i0.ɵɵrepeater(ctx_r0.EditCredentials);
|
|
1454
1456
|
} }
|
|
1455
|
-
function
|
|
1457
|
+
function ConnectionsComponent_Conditional_13_Conditional_9_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
1456
1458
|
const _r48 = i0.ɵɵgetCurrentView();
|
|
1457
|
-
i0.ɵɵelementStart(0, "div",
|
|
1458
|
-
i0.ɵɵlistener("click", function
|
|
1459
|
-
i0.ɵɵelement(2, "i",
|
|
1459
|
+
i0.ɵɵelementStart(0, "div", 260)(1, "button", 261);
|
|
1460
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_13_Conditional_9_Conditional_18_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r48); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.OpenEditCredentialDialog()); });
|
|
1461
|
+
i0.ɵɵelement(2, "i", 15);
|
|
1460
1462
|
i0.ɵɵtext(3, " New Credential ");
|
|
1461
1463
|
i0.ɵɵelementEnd()();
|
|
1462
|
-
i0.ɵɵconditionalCreate(4,
|
|
1464
|
+
i0.ɵɵconditionalCreate(4, ConnectionsComponent_Conditional_13_Conditional_9_Conditional_18_Conditional_4_Template, 3, 0, "div", 262);
|
|
1463
1465
|
} if (rf & 2) {
|
|
1464
|
-
const
|
|
1466
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
1465
1467
|
i0.ɵɵadvance(4);
|
|
1466
|
-
i0.ɵɵconditional(
|
|
1468
|
+
i0.ɵɵconditional(ctx_r0.EditCredentials.length > 0 ? 4 : -1);
|
|
1467
1469
|
} }
|
|
1468
|
-
function
|
|
1469
|
-
i0.ɵɵelement(0, "i",
|
|
1470
|
+
function ConnectionsComponent_Conditional_13_Conditional_9_Conditional_31_Template(rf, ctx) { if (rf & 1) {
|
|
1471
|
+
i0.ɵɵelement(0, "i", 44);
|
|
1470
1472
|
i0.ɵɵtext(1, " Saving... ");
|
|
1471
1473
|
} }
|
|
1472
|
-
function
|
|
1474
|
+
function ConnectionsComponent_Conditional_13_Conditional_9_Conditional_32_Template(rf, ctx) { if (rf & 1) {
|
|
1473
1475
|
i0.ɵɵtext(0, " Save Changes ");
|
|
1474
1476
|
} }
|
|
1475
|
-
function
|
|
1477
|
+
function ConnectionsComponent_Conditional_13_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
1476
1478
|
const _r46 = i0.ɵɵgetCurrentView();
|
|
1477
|
-
i0.ɵɵelementStart(0, "div",
|
|
1479
|
+
i0.ɵɵelementStart(0, "div", 248)(1, "div", 249)(2, "label", 250);
|
|
1478
1480
|
i0.ɵɵtext(3, "Connection Name");
|
|
1479
1481
|
i0.ɵɵelementEnd();
|
|
1480
|
-
i0.ɵɵelementStart(4, "input",
|
|
1481
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
1482
|
+
i0.ɵɵelementStart(4, "input", 251);
|
|
1483
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ConnectionsComponent_Conditional_13_Conditional_9_Template_input_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r46); const ctx_r0 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r0.EditName, $event) || (ctx_r0.EditName = $event); return i0.ɵɵresetView($event); });
|
|
1482
1484
|
i0.ɵɵelementEnd()();
|
|
1483
|
-
i0.ɵɵelementStart(5, "div",
|
|
1485
|
+
i0.ɵɵelementStart(5, "div", 249)(6, "label", 250);
|
|
1484
1486
|
i0.ɵɵtext(7, "Status");
|
|
1485
1487
|
i0.ɵɵelementEnd();
|
|
1486
|
-
i0.ɵɵelementStart(8, "div",
|
|
1487
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
1488
|
+
i0.ɵɵelementStart(8, "div", 252)(9, "label", 253)(10, "input", 138);
|
|
1489
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ConnectionsComponent_Conditional_13_Conditional_9_Template_input_ngModelChange_10_listener($event) { i0.ɵɵrestoreView(_r46); const ctx_r0 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r0.EditIsActive, $event) || (ctx_r0.EditIsActive = $event); return i0.ɵɵresetView($event); });
|
|
1488
1490
|
i0.ɵɵelementEnd();
|
|
1489
|
-
i0.ɵɵelement(11, "span",
|
|
1491
|
+
i0.ɵɵelement(11, "span", 165);
|
|
1490
1492
|
i0.ɵɵelementEnd();
|
|
1491
|
-
i0.ɵɵelementStart(12, "span",
|
|
1493
|
+
i0.ɵɵelementStart(12, "span", 254);
|
|
1492
1494
|
i0.ɵɵtext(13);
|
|
1493
1495
|
i0.ɵɵelementEnd()()();
|
|
1494
|
-
i0.ɵɵelementStart(14, "div",
|
|
1496
|
+
i0.ɵɵelementStart(14, "div", 249)(15, "label", 250);
|
|
1495
1497
|
i0.ɵɵtext(16, "Credential");
|
|
1496
1498
|
i0.ɵɵelementEnd();
|
|
1497
|
-
i0.ɵɵconditionalCreate(17,
|
|
1499
|
+
i0.ɵɵconditionalCreate(17, ConnectionsComponent_Conditional_13_Conditional_9_Conditional_17_Template, 7, 1, "div", 255)(18, ConnectionsComponent_Conditional_13_Conditional_9_Conditional_18_Template, 5, 1);
|
|
1498
1500
|
i0.ɵɵelementEnd();
|
|
1499
|
-
i0.ɵɵelementStart(19, "div",
|
|
1501
|
+
i0.ɵɵelementStart(19, "div", 249)(20, "label", 250);
|
|
1500
1502
|
i0.ɵɵtext(21, "Integration");
|
|
1501
1503
|
i0.ɵɵelementEnd();
|
|
1502
|
-
i0.ɵɵelementStart(22, "div",
|
|
1504
|
+
i0.ɵɵelementStart(22, "div", 256);
|
|
1503
1505
|
i0.ɵɵtext(23);
|
|
1504
1506
|
i0.ɵɵelementEnd()();
|
|
1505
|
-
i0.ɵɵelementStart(24, "div",
|
|
1507
|
+
i0.ɵɵelementStart(24, "div", 249)(25, "label", 250);
|
|
1506
1508
|
i0.ɵɵtext(26, "Company");
|
|
1507
1509
|
i0.ɵɵelementEnd();
|
|
1508
|
-
i0.ɵɵelementStart(27, "div",
|
|
1510
|
+
i0.ɵɵelementStart(27, "div", 256);
|
|
1509
1511
|
i0.ɵɵtext(28);
|
|
1510
1512
|
i0.ɵɵelementEnd()()();
|
|
1511
|
-
i0.ɵɵelementStart(29, "div",
|
|
1512
|
-
i0.ɵɵlistener("click", function
|
|
1513
|
-
i0.ɵɵconditionalCreate(31,
|
|
1513
|
+
i0.ɵɵelementStart(29, "div", 257)(30, "button", 57);
|
|
1514
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_13_Conditional_9_Template_button_click_30_listener() { i0.ɵɵrestoreView(_r46); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.SaveEditChanges()); });
|
|
1515
|
+
i0.ɵɵconditionalCreate(31, ConnectionsComponent_Conditional_13_Conditional_9_Conditional_31_Template, 2, 0)(32, ConnectionsComponent_Conditional_13_Conditional_9_Conditional_32_Template, 1, 0);
|
|
1514
1516
|
i0.ɵɵelementEnd();
|
|
1515
|
-
i0.ɵɵelementStart(33, "button",
|
|
1516
|
-
i0.ɵɵlistener("click", function
|
|
1517
|
+
i0.ɵɵelementStart(33, "button", 45);
|
|
1518
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_13_Conditional_9_Template_button_click_33_listener() { i0.ɵɵrestoreView(_r46); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.CloseEditPanel()); });
|
|
1517
1519
|
i0.ɵɵtext(34, " Cancel ");
|
|
1518
1520
|
i0.ɵɵelementEnd()();
|
|
1519
1521
|
} if (rf & 2) {
|
|
1520
|
-
const
|
|
1522
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
1521
1523
|
i0.ɵɵadvance(4);
|
|
1522
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
1524
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r0.EditName);
|
|
1523
1525
|
i0.ɵɵadvance(6);
|
|
1524
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
1526
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r0.EditIsActive);
|
|
1525
1527
|
i0.ɵɵadvance(2);
|
|
1526
|
-
i0.ɵɵclassProp("active",
|
|
1528
|
+
i0.ɵɵclassProp("active", ctx_r0.EditIsActive);
|
|
1527
1529
|
i0.ɵɵadvance();
|
|
1528
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1530
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r0.EditIsActive ? "Active" : "Inactive", " ");
|
|
1529
1531
|
i0.ɵɵadvance(4);
|
|
1530
|
-
i0.ɵɵconditional(
|
|
1532
|
+
i0.ɵɵconditional(ctx_r0.EditCredential ? 17 : 18);
|
|
1531
1533
|
i0.ɵɵadvance(6);
|
|
1532
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1534
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r0.EditingSummary.Integration.Integration, " ");
|
|
1533
1535
|
i0.ɵɵadvance(5);
|
|
1534
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1536
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r0.EditingSummary.Integration.Company, " ");
|
|
1535
1537
|
i0.ɵɵadvance(2);
|
|
1536
|
-
i0.ɵɵproperty("disabled",
|
|
1538
|
+
i0.ɵɵproperty("disabled", ctx_r0.IsEditSaving || !ctx_r0.EditName.trim());
|
|
1537
1539
|
i0.ɵɵadvance();
|
|
1538
|
-
i0.ɵɵconditional(
|
|
1540
|
+
i0.ɵɵconditional(ctx_r0.IsEditSaving ? 31 : 32);
|
|
1539
1541
|
} }
|
|
1540
|
-
function
|
|
1542
|
+
function ConnectionsComponent_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
1541
1543
|
const _r45 = i0.ɵɵgetCurrentView();
|
|
1542
|
-
i0.ɵɵelementStart(0, "div",
|
|
1544
|
+
i0.ɵɵelementStart(0, "div", 242)(1, "div", 243)(2, "div", 244);
|
|
1543
1545
|
i0.ɵɵelement(3, "i");
|
|
1544
1546
|
i0.ɵɵelementEnd();
|
|
1545
1547
|
i0.ɵɵelementStart(4, "span");
|
|
1546
1548
|
i0.ɵɵtext(5, "Configure Integration");
|
|
1547
1549
|
i0.ɵɵelementEnd()();
|
|
1548
|
-
i0.ɵɵelementStart(6, "button",
|
|
1549
|
-
i0.ɵɵlistener("click", function
|
|
1550
|
-
i0.ɵɵelement(7, "i",
|
|
1550
|
+
i0.ɵɵelementStart(6, "button", 245);
|
|
1551
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_13_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r45); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.CloseEditPanel()); });
|
|
1552
|
+
i0.ɵɵelement(7, "i", 121);
|
|
1551
1553
|
i0.ɵɵelementEnd()();
|
|
1552
|
-
i0.ɵɵconditionalCreate(8,
|
|
1554
|
+
i0.ɵɵconditionalCreate(8, ConnectionsComponent_Conditional_13_Conditional_8_Template, 2, 0, "div", 246)(9, ConnectionsComponent_Conditional_13_Conditional_9_Template, 35, 10);
|
|
1553
1555
|
} if (rf & 2) {
|
|
1554
|
-
const
|
|
1556
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
1555
1557
|
i0.ɵɵadvance(2);
|
|
1556
|
-
i0.ɵɵstyleProp("background-color",
|
|
1558
|
+
i0.ɵɵstyleProp("background-color", ctx_r0.GetIconBrandColor(ctx_r0.EditingSummary.Integration.Integration));
|
|
1557
1559
|
i0.ɵɵadvance();
|
|
1558
|
-
i0.ɵɵclassMap(
|
|
1560
|
+
i0.ɵɵclassMap(ctx_r0.GetIntegrationIcon(ctx_r0.EditingSummary.Integration.Integration, ctx_r0.EditingSummary.Icon));
|
|
1559
1561
|
i0.ɵɵadvance(5);
|
|
1560
|
-
i0.ɵɵconditional(
|
|
1562
|
+
i0.ɵɵconditional(ctx_r0.IsEditLoading ? 8 : 9);
|
|
1561
1563
|
} }
|
|
1562
|
-
function
|
|
1564
|
+
function ConnectionsComponent_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
1563
1565
|
const _r51 = i0.ɵɵgetCurrentView();
|
|
1564
|
-
i0.ɵɵelementStart(0, "mj-credential-dialog",
|
|
1565
|
-
i0.ɵɵlistener("close", function
|
|
1566
|
+
i0.ɵɵelementStart(0, "mj-credential-dialog", 265);
|
|
1567
|
+
i0.ɵɵlistener("close", function ConnectionsComponent_Conditional_14_Template_mj_credential_dialog_close_0_listener($event) { i0.ɵɵrestoreView(_r51); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.EditPanelOpen ? ctx_r0.OnEditCredentialDialogClose($event) : ctx_r0.OnCredentialDialogClose($event)); });
|
|
1566
1568
|
i0.ɵɵelementEnd();
|
|
1567
1569
|
} if (rf & 2) {
|
|
1568
|
-
const
|
|
1569
|
-
i0.ɵɵproperty("Visible", true)("PreselectedTypeId",
|
|
1570
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
1571
|
+
i0.ɵɵproperty("Visible", true)("PreselectedTypeId", ctx_r0.PreselectedCredentialTypeId);
|
|
1570
1572
|
} }
|
|
1571
|
-
function
|
|
1573
|
+
function ConnectionsComponent_Conditional_15_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
1572
1574
|
i0.ɵɵtext(0);
|
|
1573
1575
|
} if (rf & 2) {
|
|
1574
|
-
const
|
|
1575
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1576
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
1577
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r0.AddMapSourceObjectName, " ");
|
|
1576
1578
|
} }
|
|
1577
|
-
function
|
|
1578
|
-
i0.ɵɵelementStart(0, "span",
|
|
1579
|
+
function ConnectionsComponent_Conditional_15_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
1580
|
+
i0.ɵɵelementStart(0, "span", 277);
|
|
1579
1581
|
i0.ɵɵtext(1, "Select a source object in the Add Map form first");
|
|
1580
1582
|
i0.ɵɵelementEnd();
|
|
1581
1583
|
} }
|
|
1582
|
-
function
|
|
1583
|
-
i0.ɵɵelementStart(0, "div",
|
|
1584
|
-
i0.ɵɵelement(1, "i",
|
|
1584
|
+
function ConnectionsComponent_Conditional_15_Conditional_29_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
1585
|
+
i0.ɵɵelementStart(0, "div", 288);
|
|
1586
|
+
i0.ɵɵelement(1, "i", 128);
|
|
1585
1587
|
i0.ɵɵtext(2);
|
|
1586
1588
|
i0.ɵɵelementEnd();
|
|
1587
1589
|
} if (rf & 2) {
|
|
@@ -1589,45 +1591,45 @@ function ConnectionsComponent_Conditional_8_Conditional_29_For_2_Template(rf, ct
|
|
|
1589
1591
|
i0.ɵɵadvance(2);
|
|
1590
1592
|
i0.ɵɵtextInterpolate1(" ", warn_r53);
|
|
1591
1593
|
} }
|
|
1592
|
-
function
|
|
1593
|
-
i0.ɵɵelementStart(0, "div",
|
|
1594
|
-
i0.ɵɵrepeaterCreate(1,
|
|
1594
|
+
function ConnectionsComponent_Conditional_15_Conditional_29_Template(rf, ctx) { if (rf & 1) {
|
|
1595
|
+
i0.ɵɵelementStart(0, "div", 282);
|
|
1596
|
+
i0.ɵɵrepeaterCreate(1, ConnectionsComponent_Conditional_15_Conditional_29_For_2_Template, 3, 1, "div", 288, i0.ɵɵrepeaterTrackByIdentity);
|
|
1595
1597
|
i0.ɵɵelementEnd();
|
|
1596
1598
|
} if (rf & 2) {
|
|
1597
|
-
const
|
|
1599
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
1598
1600
|
i0.ɵɵadvance();
|
|
1599
|
-
i0.ɵɵrepeater(
|
|
1601
|
+
i0.ɵɵrepeater(ctx_r0.DDLPreviewWarnings);
|
|
1600
1602
|
} }
|
|
1601
|
-
function
|
|
1602
|
-
i0.ɵɵelement(0, "i",
|
|
1603
|
+
function ConnectionsComponent_Conditional_15_Conditional_30_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
1604
|
+
i0.ɵɵelement(0, "i", 149);
|
|
1603
1605
|
i0.ɵɵtext(1, " Copied ");
|
|
1604
1606
|
} }
|
|
1605
|
-
function
|
|
1606
|
-
i0.ɵɵelement(0, "i",
|
|
1607
|
+
function ConnectionsComponent_Conditional_15_Conditional_30_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
1608
|
+
i0.ɵɵelement(0, "i", 292);
|
|
1607
1609
|
i0.ɵɵtext(1, " Copy ");
|
|
1608
1610
|
} }
|
|
1609
|
-
function
|
|
1611
|
+
function ConnectionsComponent_Conditional_15_Conditional_30_Template(rf, ctx) { if (rf & 1) {
|
|
1610
1612
|
const _r54 = i0.ɵɵgetCurrentView();
|
|
1611
|
-
i0.ɵɵelementStart(0, "div",
|
|
1613
|
+
i0.ɵɵelementStart(0, "div", 283)(1, "div", 289)(2, "span");
|
|
1612
1614
|
i0.ɵɵtext(3, "SQL Preview");
|
|
1613
1615
|
i0.ɵɵelementEnd();
|
|
1614
|
-
i0.ɵɵelementStart(4, "button",
|
|
1615
|
-
i0.ɵɵlistener("click", function
|
|
1616
|
-
i0.ɵɵconditionalCreate(5,
|
|
1616
|
+
i0.ɵɵelementStart(4, "button", 290);
|
|
1617
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_15_Conditional_30_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r54); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.CopyDDLToClipboard()); });
|
|
1618
|
+
i0.ɵɵconditionalCreate(5, ConnectionsComponent_Conditional_15_Conditional_30_Conditional_5_Template, 2, 0)(6, ConnectionsComponent_Conditional_15_Conditional_30_Conditional_6_Template, 2, 0);
|
|
1617
1619
|
i0.ɵɵelementEnd()();
|
|
1618
|
-
i0.ɵɵelementStart(7, "pre",
|
|
1620
|
+
i0.ɵɵelementStart(7, "pre", 291);
|
|
1619
1621
|
i0.ɵɵtext(8);
|
|
1620
1622
|
i0.ɵɵelementEnd()();
|
|
1621
1623
|
} if (rf & 2) {
|
|
1622
|
-
const
|
|
1624
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
1623
1625
|
i0.ɵɵadvance(5);
|
|
1624
|
-
i0.ɵɵconditional(
|
|
1626
|
+
i0.ɵɵconditional(ctx_r0.DDLCopied ? 5 : 6);
|
|
1625
1627
|
i0.ɵɵadvance(3);
|
|
1626
|
-
i0.ɵɵtextInterpolate(
|
|
1628
|
+
i0.ɵɵtextInterpolate(ctx_r0.DDLPreview);
|
|
1627
1629
|
} }
|
|
1628
|
-
function
|
|
1629
|
-
i0.ɵɵelementStart(0, "div",
|
|
1630
|
-
i0.ɵɵelement(2, "i",
|
|
1630
|
+
function ConnectionsComponent_Conditional_15_Conditional_31_Template(rf, ctx) { if (rf & 1) {
|
|
1631
|
+
i0.ɵɵelementStart(0, "div", 284)(1, "h4");
|
|
1632
|
+
i0.ɵɵelement(2, "i", 293);
|
|
1631
1633
|
i0.ɵɵtext(3, " Next Steps");
|
|
1632
1634
|
i0.ɵɵelementEnd();
|
|
1633
1635
|
i0.ɵɵelementStart(4, "ol")(5, "li");
|
|
@@ -1643,80 +1645,80 @@ function ConnectionsComponent_Conditional_8_Conditional_31_Template(rf, ctx) { i
|
|
|
1643
1645
|
i0.ɵɵtext(12, "Refresh the page \u2014 the new entity will appear in the entity picker");
|
|
1644
1646
|
i0.ɵɵelementEnd()()();
|
|
1645
1647
|
} }
|
|
1646
|
-
function
|
|
1647
|
-
i0.ɵɵelement(0, "i",
|
|
1648
|
+
function ConnectionsComponent_Conditional_15_Conditional_34_Template(rf, ctx) { if (rf & 1) {
|
|
1649
|
+
i0.ɵɵelement(0, "i", 44);
|
|
1648
1650
|
i0.ɵɵtext(1, " Generating... ");
|
|
1649
1651
|
} }
|
|
1650
|
-
function
|
|
1651
|
-
i0.ɵɵelement(0, "i",
|
|
1652
|
+
function ConnectionsComponent_Conditional_15_Conditional_35_Template(rf, ctx) { if (rf & 1) {
|
|
1653
|
+
i0.ɵɵelement(0, "i", 294);
|
|
1652
1654
|
i0.ɵɵtext(1, " Generate SQL ");
|
|
1653
1655
|
} }
|
|
1654
|
-
function
|
|
1656
|
+
function ConnectionsComponent_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
1655
1657
|
const _r52 = i0.ɵɵgetCurrentView();
|
|
1656
|
-
i0.ɵɵelementStart(0, "div",
|
|
1657
|
-
i0.ɵɵlistener("click", function
|
|
1658
|
+
i0.ɵɵelementStart(0, "div", 266);
|
|
1659
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_15_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r52); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.CloseNewEntityDialog()); });
|
|
1658
1660
|
i0.ɵɵelementEnd();
|
|
1659
|
-
i0.ɵɵelementStart(1, "div",
|
|
1661
|
+
i0.ɵɵelementStart(1, "div", 267)(2, "div", 268)(3, "h3");
|
|
1660
1662
|
i0.ɵɵtext(4, "Create New Entity Table");
|
|
1661
1663
|
i0.ɵɵelementEnd();
|
|
1662
|
-
i0.ɵɵelementStart(5, "button",
|
|
1663
|
-
i0.ɵɵlistener("click", function
|
|
1664
|
-
i0.ɵɵelement(6, "i",
|
|
1664
|
+
i0.ɵɵelementStart(5, "button", 269);
|
|
1665
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_15_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r52); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.CloseNewEntityDialog()); });
|
|
1666
|
+
i0.ɵɵelement(6, "i", 121);
|
|
1665
1667
|
i0.ɵɵelementEnd()();
|
|
1666
|
-
i0.ɵɵelementStart(7, "div",
|
|
1668
|
+
i0.ɵɵelementStart(7, "div", 270)(8, "p", 271);
|
|
1667
1669
|
i0.ɵɵtext(9, " Generate a SQL migration to create a new database table for this integration's data. After running the migration and CodeGen, the new entity will appear in the entity picker. ");
|
|
1668
1670
|
i0.ɵɵelementEnd();
|
|
1669
|
-
i0.ɵɵelementStart(10, "div",
|
|
1671
|
+
i0.ɵɵelementStart(10, "div", 272)(11, "div", 273)(12, "div", 274)(13, "label", 275);
|
|
1670
1672
|
i0.ɵɵtext(14, "Source Object");
|
|
1671
1673
|
i0.ɵɵelementEnd();
|
|
1672
|
-
i0.ɵɵelementStart(15, "div",
|
|
1673
|
-
i0.ɵɵconditionalCreate(16,
|
|
1674
|
+
i0.ɵɵelementStart(15, "div", 276);
|
|
1675
|
+
i0.ɵɵconditionalCreate(16, ConnectionsComponent_Conditional_15_Conditional_16_Template, 1, 1)(17, ConnectionsComponent_Conditional_15_Conditional_17_Template, 2, 0, "span", 277);
|
|
1674
1676
|
i0.ɵɵelementEnd()()();
|
|
1675
|
-
i0.ɵɵelementStart(18, "div",
|
|
1677
|
+
i0.ɵɵelementStart(18, "div", 273)(19, "div", 274)(20, "label", 275);
|
|
1676
1678
|
i0.ɵɵtext(21, "Schema");
|
|
1677
1679
|
i0.ɵɵelementEnd();
|
|
1678
|
-
i0.ɵɵelementStart(22, "input",
|
|
1679
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
1680
|
+
i0.ɵɵelementStart(22, "input", 278);
|
|
1681
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ConnectionsComponent_Conditional_15_Template_input_ngModelChange_22_listener($event) { i0.ɵɵrestoreView(_r52); const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r0.NewEntitySchema, $event) || (ctx_r0.NewEntitySchema = $event); return i0.ɵɵresetView($event); });
|
|
1680
1682
|
i0.ɵɵelementEnd()();
|
|
1681
|
-
i0.ɵɵelementStart(23, "span",
|
|
1683
|
+
i0.ɵɵelementStart(23, "span", 279);
|
|
1682
1684
|
i0.ɵɵtext(24, ".");
|
|
1683
1685
|
i0.ɵɵelementEnd();
|
|
1684
|
-
i0.ɵɵelementStart(25, "div",
|
|
1686
|
+
i0.ɵɵelementStart(25, "div", 280)(26, "label", 275);
|
|
1685
1687
|
i0.ɵɵtext(27, "Table Name");
|
|
1686
1688
|
i0.ɵɵelementEnd();
|
|
1687
|
-
i0.ɵɵelementStart(28, "input",
|
|
1688
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
1689
|
+
i0.ɵɵelementStart(28, "input", 281);
|
|
1690
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ConnectionsComponent_Conditional_15_Template_input_ngModelChange_28_listener($event) { i0.ɵɵrestoreView(_r52); const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r0.NewEntityTable, $event) || (ctx_r0.NewEntityTable = $event); return i0.ɵɵresetView($event); });
|
|
1689
1691
|
i0.ɵɵelementEnd()()()();
|
|
1690
|
-
i0.ɵɵconditionalCreate(29,
|
|
1691
|
-
i0.ɵɵconditionalCreate(30,
|
|
1692
|
-
i0.ɵɵconditionalCreate(31,
|
|
1692
|
+
i0.ɵɵconditionalCreate(29, ConnectionsComponent_Conditional_15_Conditional_29_Template, 3, 0, "div", 282);
|
|
1693
|
+
i0.ɵɵconditionalCreate(30, ConnectionsComponent_Conditional_15_Conditional_30_Template, 9, 2, "div", 283);
|
|
1694
|
+
i0.ɵɵconditionalCreate(31, ConnectionsComponent_Conditional_15_Conditional_31_Template, 13, 0, "div", 284);
|
|
1693
1695
|
i0.ɵɵelementEnd();
|
|
1694
|
-
i0.ɵɵelementStart(32, "div",
|
|
1695
|
-
i0.ɵɵlistener("click", function
|
|
1696
|
-
i0.ɵɵconditionalCreate(34,
|
|
1696
|
+
i0.ɵɵelementStart(32, "div", 285)(33, "button", 286);
|
|
1697
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_15_Template_button_click_33_listener() { i0.ɵɵrestoreView(_r52); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.PreviewDDL()); });
|
|
1698
|
+
i0.ɵɵconditionalCreate(34, ConnectionsComponent_Conditional_15_Conditional_34_Template, 2, 0)(35, ConnectionsComponent_Conditional_15_Conditional_35_Template, 2, 0);
|
|
1697
1699
|
i0.ɵɵelementEnd();
|
|
1698
|
-
i0.ɵɵelementStart(36, "button",
|
|
1699
|
-
i0.ɵɵlistener("click", function
|
|
1700
|
+
i0.ɵɵelementStart(36, "button", 287);
|
|
1701
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_15_Template_button_click_36_listener() { i0.ɵɵrestoreView(_r52); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.CloseNewEntityDialog()); });
|
|
1700
1702
|
i0.ɵɵtext(37, " Done ");
|
|
1701
1703
|
i0.ɵɵelementEnd()()();
|
|
1702
1704
|
} if (rf & 2) {
|
|
1703
|
-
const
|
|
1705
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
1704
1706
|
i0.ɵɵadvance(16);
|
|
1705
|
-
i0.ɵɵconditional(
|
|
1707
|
+
i0.ɵɵconditional(ctx_r0.AddMapSourceObjectName ? 16 : 17);
|
|
1706
1708
|
i0.ɵɵadvance(6);
|
|
1707
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
1709
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r0.NewEntitySchema);
|
|
1708
1710
|
i0.ɵɵadvance(6);
|
|
1709
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
1711
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r0.NewEntityTable);
|
|
1710
1712
|
i0.ɵɵadvance();
|
|
1711
|
-
i0.ɵɵconditional(
|
|
1713
|
+
i0.ɵɵconditional(ctx_r0.DDLPreviewWarnings.length > 0 ? 29 : -1);
|
|
1712
1714
|
i0.ɵɵadvance();
|
|
1713
|
-
i0.ɵɵconditional(
|
|
1715
|
+
i0.ɵɵconditional(ctx_r0.DDLPreview ? 30 : -1);
|
|
1714
1716
|
i0.ɵɵadvance();
|
|
1715
|
-
i0.ɵɵconditional(
|
|
1717
|
+
i0.ɵɵconditional(ctx_r0.DDLPreview ? 31 : -1);
|
|
1716
1718
|
i0.ɵɵadvance(2);
|
|
1717
|
-
i0.ɵɵproperty("disabled", !
|
|
1719
|
+
i0.ɵɵproperty("disabled", !ctx_r0.CanGenerateSQL || ctx_r0.IsGeneratingDDL);
|
|
1718
1720
|
i0.ɵɵadvance();
|
|
1719
|
-
i0.ɵɵconditional(
|
|
1721
|
+
i0.ɵɵconditional(ctx_r0.IsGeneratingDDL ? 34 : 35);
|
|
1720
1722
|
} }
|
|
1721
1723
|
/** Brand color mapping for known integration names */
|
|
1722
1724
|
const BRAND_COLOR_MAP = [
|
|
@@ -3086,39 +3088,56 @@ let ConnectionsComponent = class ConnectionsComponent extends BaseResourceCompon
|
|
|
3086
3088
|
} if (rf & 2) {
|
|
3087
3089
|
let _t;
|
|
3088
3090
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.entityTreeDropdown = _t.first);
|
|
3089
|
-
} }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 9, vars: 14, consts: [["entityTreeDropdown", ""], [1, "connections-container"], [1, "detail-view"], [1, "wizard-inline"], [1, "edit-panel-backdrop", 3, "click"], [1, "edit-panel"], [3, "Visible", "PreselectedTypeId"], [1, "connections-header"], [1, "header-left"], [1, "header-title"], [1, "header-count"], ["mjButton", "", "variant", "primary", 1, "add-connection-btn", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "loading-container"], [1, "empty-state"], [1, "card-grid"], ["text", "Loading integrations..."], [1, "fa-solid", "fa-plug", "empty-icon"], ["mjButton", "", "variant", "primary", 3, "click"], [1, "connection-card"], [1, "connection-card", "new-connection-card", 3, "click"], [1, "new-card-content"], [1, "new-card-icon"], [1, "new-card-label"], [1, "card-clickable", 3, "click"], [1, "card-header"], [1, "icon-circle"], [1, "icon-large"], [1, "card-body"], [1, "card-name"], [1, "card-company"], [1, "card-meta"], [1, "meta-label"], [1, "meta-separator"], [1, "meta-value"], [1, "card-sync-info"], [1, "fa-solid", "fa-arrows-rotate"], [1, "card-test-result", 3, "test-success", "test-failure"], [1, "delete-confirm-overlay"], [1, "card-footer"], ["mjButton", "", "variant", "outline", 3, "click", "disabled"], [1, "fa-solid", "fa-spinner", "fa-spin"], ["mjButton", "", "variant", "outline", 3, "click"], [1, "sync-menu-wrapper"], ["title", "Delete integration", 1, "card-delete-btn", 3, "click"], [1, "fa-solid", "fa-trash-can"], [1, "card-test-result"], [1, "fa-solid", "fa-circle-check"], [1, "fa-solid", "fa-circle-xmark"], [1, "delete-confirm-content"], [1, "fa-solid", "fa-triangle-exclamation", "delete-warn-icon"], [1, "delete-confirm-text"], [1, "delete-confirm-actions"], ["mjButton", "", "variant", "danger", 3, "click", "disabled"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], [1, "sync-dropdown"], [1, "fa-solid", "fa-chevron-down", "sync-caret"], [1, "sync-dropdown-group"], [1, "sync-dropdown-label"], [1, "sync-dropdown-item", 3, "click"], [1, "fa-solid", "fa-arrow-down-to-line"], [1, "fa-solid", "fa-rotate"], [1, "fa-solid", "fa-arrow-up-from-line"], [3, "EntityMap", "CompanyIntegrationID", "RunViewProvider"], [3, "Close", "EntityMap", "CompanyIntegrationID", "RunViewProvider"], [1, "detail-header"], ["title", "Back to Integrations", 1, "detail-back-btn", 3, "click"], [1, "fa-solid", "fa-arrow-left"], [1, "detail-header-info"], [1, "detail-header-text"], [1, "detail-title"], [1, "detail-subtitle"], [1, "detail-header-actions"], ["title", "Configure", 1, "detail-edit-btn", 3, "click"], [1, "fa-solid", "fa-pen-to-square"], [1, "schedule-section"], [1, "schedule-section-header"], [1, "schedule-section-title"], [1, "fa-solid", "fa-calendar-check"], [3, "ScheduledJobID"], [1, "schedule-empty"], [3, "Close", "Saved", "Deleted", "IsOpen", "ScheduledJobID", "JobTypeID", "DefaultConfiguration", "HideJobType"], [1, "detail-toolbar"], [1, "detail-toolbar-left"], [1, "detail-map-count"], [1, "detail-toolbar-right"], [1, "detail-search"], [1, "fa-solid", "fa-filter"], ["type", "text", "placeholder", "Filter entity maps...", 3, "input", "value"], ["title", "Select source objects and create entity tables", 1, "add-map-btn", 3, "click"], [1, "fa-solid", "fa-table"], [1, "add-map-btn", 3, "click"], [1, "fa-solid", "fa-wand-magic-sparkles"], [1, "sync-result-banner", 3, "sync-success", "sync-failure"], [1, "add-map-panel"], [1, "detail-empty"], [1, "sync-dropdown", "sync-dropdown-left"], [3, "EditRequested", "ScheduledJobID"], [1, "schedule-empty-text"], [1, "schedule-create-btn", 3, "click"], [1, "sync-result-banner"], [1, "auto-map-header"], [1, "add-map-row"], [1, "add-map-field"], [1, "add-map-label"], [1, "add-map-select", 3, "ngModelChange", "ngModel"], ["disabled", "", 3, "ngValue"], [3, "value"], [1, "add-map-direction-col"], [1, "add-map-direction-btns"], ["title", "Pull from source", 3, "click"], [1, "fa-solid", "fa-arrow-right"], ["title", "Bidirectional sync", 3, "click"], [1, "fa-solid", "fa-right-left"], ["title", "Push to source", 3, "click"], [1, "add-map-actions"], [1, "add-map-save-btn", 3, "click", "disabled"], [1, "add-map-cancel-btn", 3, "click"], [1, "fa-solid", "fa-xmark"], [1, "auto-map-result", 3, "auto-map-success", "auto-map-partial", "auto-map-failure"], [1, "auto-map-result"], [1, "auto-map-result-summary"], [1, "auto-map-errors"], [1, "fa-solid", "fa-circle-info"], [1, "auto-map-error"], [1, "fa-solid", "fa-triangle-exclamation"], ["text", "Loading source objects...", "size", "small"], [1, "auto-map-result", "auto-map-success"], [1, "auto-map-result", 3, "auto-map-success", "auto-map-failure"], [1, "create-tables-filters"], ["type", "text", "placeholder", "Search by name or label...", 1, "create-tables-search", "mj-input", 3, "ngModelChange", "ngModel"], [1, "create-tables-list"], [1, "create-tables-select-all"], [1, "create-tables-checkbox"], ["type", "checkbox", 3, "change", "checked"], ["type", "checkbox", 3, "ngModelChange", "ngModel"], [1, "create-tables-name-hint"], [1, "create-tables-badge", "create-tables-badge-custom"], [1, "create-tables-badge", "create-tables-badge-registered"], [1, "add-map-loading"], [1, "add-map-hint"], [1, "add-map-select", 3, "ngModel"], [1, "add-map-field", "add-map-entity-field"], [1, "entity-picker-row"], [3, "SelectionChange", "BranchConfig", "LeafConfig", "Value", "SelectableTypes", "SelectionMode", "Placeholder", "EnableSearch"], ["title", "Create new entity table", 1, "new-entity-btn", 3, "click"], [1, "fa-solid", "fa-check"], ["text", "Loading entity maps..."], [1, "fa-solid", "fa-cube"], [1, "add-map-btn", "add-map-btn-lg", 3, "click"], [1, "detail-table-head"], [1, "dt-col-toggle"], [1, "dt-col-source"], [1, "dt-col-direction"], [1, "dt-col-dest"], [1, "dt-col-meta"], [1, "detail-table-body"], [1, "detail-map-row", 3, "sync-disabled"], [1, "detail-table-empty"], [1, "detail-map-row", 3, "click"], [1, "dt-col-toggle", 3, "click"], [1, "toggle-switch", 3, "title"], [1, "toggle-slider"], [1, "dt-col-source", 3, "title"], [1, "dt-col-direction", 3, "click"], [1, "direction-toggle", 3, "click", "title"], [1, "dt-col-dest", 3, "title"], ["title", "Match strategy configured", 1, "detail-config-badge"], [1, "detail-config-badge", 3, "title"], [1, "map-edit-hint"], [1, "fa-solid", "fa-chevron-right"], [1, "fa-solid", "fa-link"], [1, "wizard-header"], [1, "wizard-back-btn", 3, "click"], [1, "wizard-title"], [1, "step-indicator"], [1, "wizard-body"], [1, "step-content"], [1, "step-content", "step-content-centered"], [1, "wizard-footer"], [1, "footer-left"], [1, "footer-right"], ["mjButton", "", "variant", "outline"], [1, "step-item"], [1, "step-circle"], [1, "step-label"], [1, "step-line", 3, "step-line-active"], [1, "step-line"], [1, "step-title"], [1, "search-bar"], [1, "fa-solid", "fa-search", "search-icon"], ["type", "text", "placeholder", "Search integrations...", 1, "search-input", 3, "ngModelChange", "ngModel"], [1, "no-integrations"], [1, "integration-picker-grid"], [1, "fa-solid", "fa-puzzle-piece"], [1, "no-integrations-hint"], [1, "fa-solid", "fa-search"], [1, "integration-picker-card", 3, "picker-selected"], [1, "integration-picker-card", 3, "click"], [1, "picker-icon-circle"], [1, "picker-name"], [1, "picker-description"], [1, "form-group"], ["for", "connectionName", 1, "form-label"], ["id", "connectionName", "type", "text", "placeholder", "e.g. Production HubSpot", 1, "form-input", 3, "ngModelChange", "ngModel"], ["for", "companySelect", 1, "form-label"], ["id", "companySelect", 1, "form-input", 3, "ngModel"], ["type", "text", "disabled", "", 1, "form-input", 3, "value"], [1, "form-hint"], ["for", "connectionDescription", 1, "form-label"], [1, "optional-label"], ["id", "connectionDescription", "placeholder", "Notes about this connection...", "rows", "3", 1, "form-input", "form-textarea", 3, "ngModelChange", "ngModel"], [1, "form-label"], [1, "credential-selected"], [1, "credential-actions"], [1, "credential-loading"], [1, "credential-list"], ["id", "companySelect", 1, "form-input", 3, "ngModelChange", "ngModel"], [1, "credential-info"], [1, "fa-solid", "fa-key"], [1, "credential-clear", 3, "click"], ["text", "Loading credentials...", "size", "small"], [1, "credential-list-item"], [1, "credential-list-item", 3, "click"], [1, "test-prompt"], [1, "test-running"], [1, "test-result", 3, "test-result-success", "test-result-failure"], ["mjButton", "", "variant", "primary", "size", "lg", 3, "click"], [1, "fa-solid", "fa-vial"], [1, "test-hint"], [1, "test-spinner"], [1, "fa-solid", "fa-spinner", "fa-spin", "fa-3x"], [1, "test-result"], [1, "test-result-icon"], [1, "test-result-message"], [1, "test-result-detail"], ["mjButton", "", "variant", "outline", 1, "test-retry-btn"], ["mjButton", "", "variant", "outline", 1, "test-retry-btn", 3, "click"], [1, "fa-solid", "fa-rotate-right"], [1, "edit-panel-header"], [1, "edit-panel-title"], [1, "edit-icon-circle"], [1, "edit-close-btn", 3, "click"], [1, "edit-panel-loading"], ["text", "Loading...", "size", "small"], [1, "edit-panel-body"], [1, "edit-form-group"], [1, "edit-form-label"], ["type", "text", "placeholder", "Connection name...", 1, "edit-form-input", 3, "ngModelChange", "ngModel"], [1, "edit-toggle-row"], [1, "toggle-switch"], [1, "edit-toggle-label"], [1, "edit-credential-selected"], [1, "edit-readonly-field"], [1, "edit-panel-footer"], [1, "edit-credential-info"], [1, "edit-credential-clear", 3, "click"], [1, "edit-credential-actions"], ["mjButton", "", "variant", "outline", "size", "sm", 3, "click"], [1, "edit-credential-list"], [1, "edit-credential-item"], [1, "edit-credential-item", 3, "click"], [3, "close", "Visible", "PreselectedTypeId"], [1, "new-entity-backdrop", 3, "click"], [1, "new-entity-dialog"], [1, "new-entity-dialog-header"], [1, "new-entity-dialog-close", 3, "click"], [1, "new-entity-dialog-body"], [1, "new-entity-dialog-desc"], [1, "new-entity-dialog-form"], [1, "new-entity-dialog-row"], [1, "new-entity-dialog-field"], [1, "new-entity-dialog-label"], [1, "new-entity-dialog-value"], [1, "new-entity-dialog-hint"], ["type", "text", "placeholder", "e.g. hubspot", 1, "new-entity-dialog-input", 3, "ngModelChange", "ngModel"], [1, "new-entity-dialog-dot"], [1, "new-entity-dialog-field", "new-entity-dialog-field-wide"], ["type", "text", "placeholder", "e.g. Contact", 1, "new-entity-dialog-input", 3, "ngModelChange", "ngModel"], [1, "ddl-warnings"], [1, "ddl-preview-block"], [1, "new-entity-next-steps"], [1, "new-entity-dialog-footer"], [1, "new-entity-preview-btn", 3, "click", "disabled"], [1, "new-entity-dialog-done-btn", 3, "click"], [1, "ddl-warning"], [1, "ddl-preview-header"], ["title", "Copy to clipboard", 1, "ddl-copy-btn", 3, "click"], [1, "ddl-preview-code"], [1, "fa-regular", "fa-copy"], [1, "fa-solid", "fa-list-check"], [1, "fa-solid", "fa-code"]], template: function ConnectionsComponent_Template(rf, ctx) { if (rf & 1) {
|
|
3090
|
-
i0.ɵɵelementStart(0, "
|
|
3091
|
-
i0.ɵɵconditionalCreate(
|
|
3092
|
-
i0.ɵɵ
|
|
3093
|
-
i0.ɵɵ
|
|
3091
|
+
} }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 16, vars: 19, consts: [["entityTreeDropdown", ""], ["Title", "Integrations", "Icon", "fa-solid fa-plug", "Subtitle", "Connected systems and data sources"], ["meta", ""], ["actions", ""], [3, "Clicked", "Loading"], ["mjButton", "", "variant", "primary", "size", "sm"], [3, "Flex", "Padding"], [1, "connections-container"], [1, "detail-view"], [1, "wizard-inline"], [1, "edit-panel-backdrop", 3, "click"], [1, "edit-panel"], [3, "Visible", "PreselectedTypeId"], [3, "Count", "Label"], ["mjButton", "", "variant", "primary", "size", "sm", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "loading-container"], [1, "empty-state"], [1, "card-grid"], ["text", "Loading integrations..."], [1, "fa-solid", "fa-plug", "empty-icon"], ["mjButton", "", "variant", "primary", 3, "click"], [1, "connection-card"], [1, "connection-card", "new-connection-card", 3, "click"], [1, "new-card-content"], [1, "new-card-icon"], [1, "new-card-label"], [1, "card-clickable", 3, "click"], [1, "card-header"], [1, "icon-circle"], [1, "icon-large"], [1, "card-body"], [1, "card-name"], [1, "card-company"], [1, "card-meta"], [1, "meta-label"], [1, "meta-separator"], [1, "meta-value"], [1, "card-sync-info"], [1, "fa-solid", "fa-arrows-rotate"], [1, "card-test-result", 3, "test-success", "test-failure"], [1, "delete-confirm-overlay"], [1, "card-footer"], ["mjButton", "", "variant", "outline", 3, "click", "disabled"], [1, "fa-solid", "fa-spinner", "fa-spin"], ["mjButton", "", "variant", "outline", 3, "click"], [1, "sync-menu-wrapper"], ["title", "Delete integration", 1, "card-delete-btn", 3, "click"], [1, "fa-solid", "fa-trash-can"], [1, "card-test-result"], [1, "fa-solid", "fa-circle-check"], [1, "fa-solid", "fa-circle-xmark"], [1, "delete-confirm-content"], [1, "fa-solid", "fa-triangle-exclamation", "delete-warn-icon"], [1, "delete-confirm-text"], [1, "delete-confirm-actions"], ["mjButton", "", "variant", "danger", 3, "click", "disabled"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], [1, "sync-dropdown"], [1, "fa-solid", "fa-chevron-down", "sync-caret"], [1, "sync-dropdown-group"], [1, "sync-dropdown-label"], [1, "sync-dropdown-item", 3, "click"], [1, "fa-solid", "fa-arrow-down-to-line"], [1, "fa-solid", "fa-rotate"], [1, "fa-solid", "fa-arrow-up-from-line"], [3, "EntityMap", "CompanyIntegrationID", "RunViewProvider"], [3, "Close", "EntityMap", "CompanyIntegrationID", "RunViewProvider"], [1, "detail-header"], ["title", "Back to Integrations", 1, "detail-back-btn", 3, "click"], [1, "fa-solid", "fa-arrow-left"], [1, "detail-header-info"], [1, "detail-header-text"], [1, "detail-title"], [1, "detail-subtitle"], [1, "detail-header-actions"], ["title", "Configure", 1, "detail-edit-btn", 3, "click"], [1, "fa-solid", "fa-pen-to-square"], [1, "schedule-section"], [1, "schedule-section-header"], [1, "schedule-section-title"], [1, "fa-solid", "fa-calendar-check"], [3, "ScheduledJobID"], [1, "schedule-empty"], [3, "Close", "Saved", "Deleted", "IsOpen", "ScheduledJobID", "JobTypeID", "DefaultConfiguration", "HideJobType"], [1, "detail-toolbar"], [1, "detail-toolbar-left"], [1, "detail-map-count"], [1, "detail-toolbar-right"], [1, "detail-search"], [1, "fa-solid", "fa-filter"], ["type", "text", "placeholder", "Filter entity maps...", 3, "input", "value"], ["title", "Select source objects and create entity tables", 1, "add-map-btn", 3, "click"], [1, "fa-solid", "fa-table"], [1, "add-map-btn", 3, "click"], [1, "fa-solid", "fa-wand-magic-sparkles"], [1, "sync-result-banner", 3, "sync-success", "sync-failure"], [1, "add-map-panel"], [1, "detail-empty"], [1, "sync-dropdown", "sync-dropdown-left"], [3, "EditRequested", "ScheduledJobID"], [1, "schedule-empty-text"], [1, "schedule-create-btn", 3, "click"], [1, "sync-result-banner"], [1, "auto-map-header"], [1, "add-map-row"], [1, "add-map-field"], [1, "add-map-label"], [1, "add-map-select", 3, "ngModelChange", "ngModel"], ["disabled", "", 3, "ngValue"], [3, "value"], [1, "add-map-direction-col"], [1, "add-map-direction-btns"], ["title", "Pull from source", 3, "click"], [1, "fa-solid", "fa-arrow-right"], ["title", "Bidirectional sync", 3, "click"], [1, "fa-solid", "fa-right-left"], ["title", "Push to source", 3, "click"], [1, "add-map-actions"], [1, "add-map-save-btn", 3, "click", "disabled"], [1, "add-map-cancel-btn", 3, "click"], [1, "fa-solid", "fa-xmark"], [1, "auto-map-result", 3, "auto-map-success", "auto-map-partial", "auto-map-failure"], [1, "auto-map-result"], [1, "auto-map-result-summary"], [1, "auto-map-errors"], [1, "fa-solid", "fa-circle-info"], [1, "auto-map-error"], [1, "fa-solid", "fa-triangle-exclamation"], ["text", "Loading source objects...", "size", "small"], [1, "auto-map-result", "auto-map-success"], [1, "auto-map-result", 3, "auto-map-success", "auto-map-failure"], [1, "create-tables-filters"], ["type", "text", "placeholder", "Search by name or label...", 1, "create-tables-search", "mj-input", 3, "ngModelChange", "ngModel"], [1, "create-tables-list"], [1, "create-tables-select-all"], [1, "create-tables-checkbox"], ["type", "checkbox", 3, "change", "checked"], ["type", "checkbox", 3, "ngModelChange", "ngModel"], [1, "create-tables-name-hint"], [1, "create-tables-badge", "create-tables-badge-custom"], [1, "create-tables-badge", "create-tables-badge-registered"], [1, "add-map-loading"], [1, "add-map-hint"], [1, "add-map-select", 3, "ngModel"], [1, "add-map-field", "add-map-entity-field"], [1, "entity-picker-row"], [3, "SelectionChange", "BranchConfig", "LeafConfig", "Value", "SelectableTypes", "SelectionMode", "Placeholder", "EnableSearch"], ["title", "Create new entity table", 1, "new-entity-btn", 3, "click"], [1, "fa-solid", "fa-check"], ["text", "Loading entity maps..."], [1, "fa-solid", "fa-cube"], [1, "add-map-btn", "add-map-btn-lg", 3, "click"], [1, "detail-table-head"], [1, "dt-col-toggle"], [1, "dt-col-source"], [1, "dt-col-direction"], [1, "dt-col-dest"], [1, "dt-col-meta"], [1, "detail-table-body"], [1, "detail-map-row", 3, "sync-disabled"], [1, "detail-table-empty"], [1, "detail-map-row", 3, "click"], [1, "dt-col-toggle", 3, "click"], [1, "toggle-switch", 3, "title"], [1, "toggle-slider"], [1, "dt-col-source", 3, "title"], [1, "dt-col-direction", 3, "click"], [1, "direction-toggle", 3, "click", "title"], [1, "dt-col-dest", 3, "title"], ["title", "Match strategy configured", 1, "detail-config-badge"], [1, "detail-config-badge", 3, "title"], [1, "map-edit-hint"], [1, "fa-solid", "fa-chevron-right"], [1, "fa-solid", "fa-link"], [1, "wizard-header"], [1, "wizard-back-btn", 3, "click"], [1, "wizard-title"], [1, "step-indicator"], [1, "wizard-body"], [1, "step-content"], [1, "step-content", "step-content-centered"], [1, "wizard-footer"], [1, "footer-left"], [1, "footer-right"], ["mjButton", "", "variant", "outline"], [1, "step-item"], [1, "step-circle"], [1, "step-label"], [1, "step-line", 3, "step-line-active"], [1, "step-line"], [1, "step-title"], [1, "search-bar"], [1, "fa-solid", "fa-search", "search-icon"], ["type", "text", "placeholder", "Search integrations...", 1, "search-input", 3, "ngModelChange", "ngModel"], [1, "no-integrations"], [1, "integration-picker-grid"], [1, "fa-solid", "fa-puzzle-piece"], [1, "no-integrations-hint"], [1, "fa-solid", "fa-search"], [1, "integration-picker-card", 3, "picker-selected"], [1, "integration-picker-card", 3, "click"], [1, "picker-icon-circle"], [1, "picker-name"], [1, "picker-description"], [1, "form-group"], ["for", "connectionName", 1, "form-label"], ["id", "connectionName", "type", "text", "placeholder", "e.g. Production HubSpot", 1, "form-input", 3, "ngModelChange", "ngModel"], ["for", "companySelect", 1, "form-label"], ["id", "companySelect", 1, "form-input", 3, "ngModel"], ["type", "text", "disabled", "", 1, "form-input", 3, "value"], [1, "form-hint"], ["for", "connectionDescription", 1, "form-label"], [1, "optional-label"], ["id", "connectionDescription", "placeholder", "Notes about this connection...", "rows", "3", 1, "form-input", "form-textarea", 3, "ngModelChange", "ngModel"], [1, "form-label"], [1, "credential-selected"], [1, "credential-actions"], [1, "credential-loading"], [1, "credential-list"], ["id", "companySelect", 1, "form-input", 3, "ngModelChange", "ngModel"], [1, "credential-info"], [1, "fa-solid", "fa-key"], [1, "credential-clear", 3, "click"], ["text", "Loading credentials...", "size", "small"], [1, "credential-list-item"], [1, "credential-list-item", 3, "click"], [1, "test-prompt"], [1, "test-running"], [1, "test-result", 3, "test-result-success", "test-result-failure"], ["mjButton", "", "variant", "primary", "size", "lg", 3, "click"], [1, "fa-solid", "fa-vial"], [1, "test-hint"], [1, "test-spinner"], [1, "fa-solid", "fa-spinner", "fa-spin", "fa-3x"], [1, "test-result"], [1, "test-result-icon"], [1, "test-result-message"], [1, "test-result-detail"], ["mjButton", "", "variant", "outline", 1, "test-retry-btn"], ["mjButton", "", "variant", "outline", 1, "test-retry-btn", 3, "click"], [1, "fa-solid", "fa-rotate-right"], [1, "edit-panel-header"], [1, "edit-panel-title"], [1, "edit-icon-circle"], [1, "edit-close-btn", 3, "click"], [1, "edit-panel-loading"], ["text", "Loading...", "size", "small"], [1, "edit-panel-body"], [1, "edit-form-group"], [1, "edit-form-label"], ["type", "text", "placeholder", "Connection name...", 1, "edit-form-input", 3, "ngModelChange", "ngModel"], [1, "edit-toggle-row"], [1, "toggle-switch"], [1, "edit-toggle-label"], [1, "edit-credential-selected"], [1, "edit-readonly-field"], [1, "edit-panel-footer"], [1, "edit-credential-info"], [1, "edit-credential-clear", 3, "click"], [1, "edit-credential-actions"], ["mjButton", "", "variant", "outline", "size", "sm", 3, "click"], [1, "edit-credential-list"], [1, "edit-credential-item"], [1, "edit-credential-item", 3, "click"], [3, "close", "Visible", "PreselectedTypeId"], [1, "new-entity-backdrop", 3, "click"], [1, "new-entity-dialog"], [1, "new-entity-dialog-header"], [1, "new-entity-dialog-close", 3, "click"], [1, "new-entity-dialog-body"], [1, "new-entity-dialog-desc"], [1, "new-entity-dialog-form"], [1, "new-entity-dialog-row"], [1, "new-entity-dialog-field"], [1, "new-entity-dialog-label"], [1, "new-entity-dialog-value"], [1, "new-entity-dialog-hint"], ["type", "text", "placeholder", "e.g. hubspot", 1, "new-entity-dialog-input", 3, "ngModelChange", "ngModel"], [1, "new-entity-dialog-dot"], [1, "new-entity-dialog-field", "new-entity-dialog-field-wide"], ["type", "text", "placeholder", "e.g. Contact", 1, "new-entity-dialog-input", 3, "ngModelChange", "ngModel"], [1, "ddl-warnings"], [1, "ddl-preview-block"], [1, "new-entity-next-steps"], [1, "new-entity-dialog-footer"], [1, "new-entity-preview-btn", 3, "click", "disabled"], [1, "new-entity-dialog-done-btn", 3, "click"], [1, "ddl-warning"], [1, "ddl-preview-header"], ["title", "Copy to clipboard", 1, "ddl-copy-btn", 3, "click"], [1, "ddl-preview-code"], [1, "fa-regular", "fa-copy"], [1, "fa-solid", "fa-list-check"], [1, "fa-solid", "fa-code"]], template: function ConnectionsComponent_Template(rf, ctx) { if (rf & 1) {
|
|
3092
|
+
i0.ɵɵelementStart(0, "mj-page-layout")(1, "mj-page-header", 1);
|
|
3093
|
+
i0.ɵɵconditionalCreate(2, ConnectionsComponent_Conditional_2_Template, 2, 2, "div", 2);
|
|
3094
|
+
i0.ɵɵelementStart(3, "div", 3)(4, "mj-refresh-button", 4);
|
|
3095
|
+
i0.ɵɵlistener("Clicked", function ConnectionsComponent_Template_mj_refresh_button_Clicked_4_listener() { return ctx.LoadData(); });
|
|
3096
|
+
i0.ɵɵelementEnd();
|
|
3097
|
+
i0.ɵɵconditionalCreate(5, ConnectionsComponent_Conditional_5_Template, 3, 0, "button", 5);
|
|
3098
|
+
i0.ɵɵelementEnd()();
|
|
3099
|
+
i0.ɵɵelementStart(6, "mj-page-body", 6)(7, "div", 7);
|
|
3100
|
+
i0.ɵɵconditionalCreate(8, ConnectionsComponent_Conditional_8_Template, 3, 3);
|
|
3101
|
+
i0.ɵɵconditionalCreate(9, ConnectionsComponent_Conditional_9_Template, 3, 1, "div", 8);
|
|
3102
|
+
i0.ɵɵconditionalCreate(10, ConnectionsComponent_Conditional_10_Template, 21, 6, "div", 9);
|
|
3094
3103
|
i0.ɵɵelementEnd();
|
|
3095
|
-
i0.ɵɵelementStart(
|
|
3096
|
-
i0.ɵɵlistener("click", function
|
|
3104
|
+
i0.ɵɵelementStart(11, "div", 10);
|
|
3105
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Template_div_click_11_listener() { return ctx.CloseEditPanel(); });
|
|
3097
3106
|
i0.ɵɵelementEnd();
|
|
3098
|
-
i0.ɵɵelementStart(
|
|
3099
|
-
i0.ɵɵconditionalCreate(
|
|
3107
|
+
i0.ɵɵelementStart(12, "div", 11);
|
|
3108
|
+
i0.ɵɵconditionalCreate(13, ConnectionsComponent_Conditional_13_Template, 10, 5);
|
|
3100
3109
|
i0.ɵɵelementEnd();
|
|
3101
|
-
i0.ɵɵconditionalCreate(
|
|
3102
|
-
i0.ɵɵconditionalCreate(
|
|
3110
|
+
i0.ɵɵconditionalCreate(14, ConnectionsComponent_Conditional_14_Template, 1, 2, "mj-credential-dialog", 12);
|
|
3111
|
+
i0.ɵɵconditionalCreate(15, ConnectionsComponent_Conditional_15_Template, 38, 8);
|
|
3112
|
+
i0.ɵɵelementEnd()();
|
|
3103
3113
|
} if (rf & 2) {
|
|
3114
|
+
i0.ɵɵadvance(2);
|
|
3115
|
+
i0.ɵɵconditional(!ctx.WizardOpen && !ctx.SelectedSummary && ctx.Connections.length > 0 ? 2 : -1);
|
|
3116
|
+
i0.ɵɵadvance(2);
|
|
3117
|
+
i0.ɵɵproperty("Loading", ctx.IsLoading);
|
|
3118
|
+
i0.ɵɵadvance();
|
|
3119
|
+
i0.ɵɵconditional(!ctx.WizardOpen && !ctx.SelectedSummary ? 5 : -1);
|
|
3120
|
+
i0.ɵɵadvance();
|
|
3121
|
+
i0.ɵɵproperty("Flex", true)("Padding", false);
|
|
3122
|
+
i0.ɵɵadvance();
|
|
3104
3123
|
i0.ɵɵclassProp("detail-active", !!ctx.SelectedSummary)("editor-active", !!ctx.EditorEntityMap);
|
|
3105
3124
|
i0.ɵɵadvance();
|
|
3106
|
-
i0.ɵɵconditional(!ctx.WizardOpen && !ctx.SelectedSummary ?
|
|
3125
|
+
i0.ɵɵconditional(!ctx.WizardOpen && !ctx.SelectedSummary ? 8 : -1);
|
|
3107
3126
|
i0.ɵɵadvance();
|
|
3108
|
-
i0.ɵɵconditional(!ctx.WizardOpen && ctx.SelectedSummary ?
|
|
3127
|
+
i0.ɵɵconditional(!ctx.WizardOpen && ctx.SelectedSummary ? 9 : -1);
|
|
3109
3128
|
i0.ɵɵadvance();
|
|
3110
|
-
i0.ɵɵconditional(ctx.WizardOpen ?
|
|
3129
|
+
i0.ɵɵconditional(ctx.WizardOpen ? 10 : -1);
|
|
3111
3130
|
i0.ɵɵadvance();
|
|
3112
3131
|
i0.ɵɵclassProp("open", ctx.EditPanelOpen);
|
|
3113
3132
|
i0.ɵɵadvance();
|
|
3114
3133
|
i0.ɵɵclassProp("open", ctx.EditPanelOpen);
|
|
3115
3134
|
i0.ɵɵadvance();
|
|
3116
|
-
i0.ɵɵconditional(ctx.EditingSummary ?
|
|
3135
|
+
i0.ɵɵconditional(ctx.EditingSummary ? 13 : -1);
|
|
3117
3136
|
i0.ɵɵadvance();
|
|
3118
|
-
i0.ɵɵconditional(ctx.ShowCredentialDialog ?
|
|
3137
|
+
i0.ɵɵconditional(ctx.ShowCredentialDialog ? 14 : -1);
|
|
3119
3138
|
i0.ɵɵadvance();
|
|
3120
|
-
i0.ɵɵconditional(ctx.ShowCreateEntity ?
|
|
3121
|
-
} }, dependencies: [i1.NgSelectOption, i1.ɵNgSelectMultipleOption, i1.DefaultValueAccessor, i1.CheckboxControlValueAccessor, i1.SelectControlValueAccessor, i1.NgControlStatus, i1.NgModel, i2.MJButtonDirective, i3.LoadingComponent, i4.CredentialDialogComponent, i5.TreeDropdownComponent, i6.ScheduledJobSummaryComponent, i6.ScheduledJobSlidePanelComponent, i7.VisualFieldEditorComponent], styles: ["\n\n\n\n\n[_nghost-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n.connections-container[_ngcontent-%COMP%] {\n padding: 24px;\n max-width: 1400px;\n width: 100%;\n margin: 0 auto;\n flex: 1;\n display: flex;\n flex-direction: column;\n min-height: 0;\n overflow-y: auto;\n box-sizing: border-box;\n}\n\n\n\n\n.connections-container.detail-active[_ngcontent-%COMP%], \n.connections-container.editor-active[_ngcontent-%COMP%] {\n overflow: hidden;\n}\n\n.connections-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 24px;\n}\n\n.header-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: baseline;\n gap: 12px;\n}\n\n.header-title[_ngcontent-%COMP%] {\n font-size: 24px;\n font-weight: 700;\n margin: 0;\n color: var(--mj-text-primary);\n}\n\n.header-count[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-disabled);\n}\n\n.add-connection-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 6px;\n}\n\n\n\n\n\n\n.loading-container[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 300px;\n}\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n min-height: 400px;\n text-align: center;\n color: var(--mj-text-muted);\n}\n\n.empty-icon[_ngcontent-%COMP%] {\n font-size: 48px;\n color: var(--mj-text-disabled);\n margin-bottom: 16px;\n}\n\n.empty-state[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin: 0 0 8px;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 14px;\n margin: 0 0 24px;\n}\n\n\n\n\n\n\n.card-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));\n gap: 20px;\n}\n\n\n\n\n\n\n.connection-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);\n transition: box-shadow 0.2s ease, transform 0.2s ease;\n display: flex;\n flex-direction: column;\n position: relative;\n overflow: hidden;\n}\n\n.connection-card[_ngcontent-%COMP%]:hover {\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n transform: translateY(-2px);\n}\n\n\n\n.card-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 16px 0;\n}\n\n.icon-circle[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n flex-shrink: 0;\n}\n\n.icon-large[_ngcontent-%COMP%] {\n font-size: 22px;\n}\n\n\n\n.status-badge[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 600;\n padding: 4px 10px;\n border-radius: 20px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.status-badge-connected[_ngcontent-%COMP%] {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success);\n}\n\n.status-badge-error[_ngcontent-%COMP%] {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error);\n}\n\n.status-badge-inactive[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-muted);\n}\n\n.status-badge-syncing[_ngcontent-%COMP%] {\n background: var(--mj-status-info-bg);\n color: var(--mj-brand-primary);\n}\n\n\n\n.card-body[_ngcontent-%COMP%] {\n padding: 12px 16px;\n flex: 1;\n}\n\n.card-name[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin-bottom: 2px;\n}\n\n.card-company[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-disabled);\n margin-bottom: 10px;\n}\n\n.card-meta[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-bottom: 6px;\n}\n\n.meta-separator[_ngcontent-%COMP%] {\n margin: 0 6px;\n}\n\n.meta-label[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n\n.card-sync-info[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-bottom: 8px;\n}\n\n.card-sync-info[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 4px;\n color: var(--mj-text-disabled);\n}\n\n\n\n.card-test-result[_ngcontent-%COMP%] {\n font-size: 12px;\n padding: 6px 10px;\n border-radius: 6px;\n display: flex;\n align-items: center;\n gap: 6px;\n margin-top: 8px;\n}\n\n.card-test-result.test-success[_ngcontent-%COMP%] {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success);\n}\n\n.card-test-result.test-failure[_ngcontent-%COMP%] {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error);\n}\n\n.card-test-result[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n\n\n.card-footer[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 16px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n.card-footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n font-size: 13px;\n}\n\n\n\n.sync-menu-wrapper[_ngcontent-%COMP%] {\n position: relative;\n display: inline-flex;\n}\n\n.sync-caret[_ngcontent-%COMP%] {\n font-size: 10px;\n margin-left: 4px;\n opacity: 0.8;\n}\n\n.sync-dropdown[_ngcontent-%COMP%] {\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n z-index: 1000;\n background: var(--mj-bg-surface-elevated);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n box-shadow: 0 8px 24px rgba(0,0,0,0.12);\n min-width: 220px;\n overflow: hidden;\n}\n\n.sync-dropdown-left[_ngcontent-%COMP%] {\n left: auto;\n right: 0;\n}\n\n.sync-dropdown-group[_ngcontent-%COMP%] {\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.sync-dropdown-group[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.sync-dropdown-label[_ngcontent-%COMP%] {\n display: block;\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--mj-text-muted);\n padding: 0 12px 4px;\n}\n\n.sync-dropdown-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 7px 12px;\n background: none;\n border: none;\n cursor: pointer;\n font-size: 13px;\n color: var(--mj-text-primary);\n text-align: left;\n transition: background 0.12s;\n}\n\n.sync-dropdown-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.sync-dropdown-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n width: 16px;\n text-align: center;\n color: var(--mj-text-secondary);\n flex-shrink: 0;\n}\n\n\n\n.card-delete-btn[_ngcontent-%COMP%] {\n margin-left: auto;\n background: none;\n border: 1px solid transparent;\n cursor: pointer;\n padding: 4px 8px;\n border-radius: 6px;\n color: var(--mj-text-disabled);\n font-size: 14px;\n transition: all 0.15s;\n}\n\n.card-delete-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-status-error-bg);\n border-color: var(--mj-status-error-border);\n color: var(--mj-status-error);\n}\n\n.menu-trigger[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-secondary);\n}\n\n.card-menu-dropdown[_ngcontent-%COMP%] {\n position: absolute;\n right: 0;\n top: 100%;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);\n min-width: 160px;\n z-index: 50;\n padding: 4px;\n}\n\n.menu-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 8px 12px;\n border: none;\n background: none;\n cursor: pointer;\n font-size: 13px;\n color: var(--mj-text-secondary);\n border-radius: 6px;\n transition: background 0.15s;\n text-align: left;\n}\n\n.menu-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.menu-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n width: 16px;\n text-align: center;\n color: var(--mj-text-muted);\n}\n\n.menu-item-danger[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.menu-item-danger[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.menu-item-danger[_ngcontent-%COMP%]:hover {\n background: var(--mj-status-error-bg);\n}\n\n\n\n\n\n\n.new-connection-card[_ngcontent-%COMP%] {\n border: 2px dashed var(--mj-border-strong);\n background: var(--mj-bg-page);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 200px;\n transition: background 0.2s, border-color 0.2s;\n}\n\n.new-connection-card[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-brand-primary);\n box-shadow: none;\n transform: none;\n}\n\n.new-card-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n}\n\n.new-card-icon[_ngcontent-%COMP%] {\n width: 56px;\n height: 56px;\n border-radius: 50%;\n background: var(--mj-bg-surface-active);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 24px;\n color: var(--mj-text-muted);\n transition: background 0.2s, color 0.2s;\n}\n\n.new-connection-card[_ngcontent-%COMP%]:hover .new-card-icon[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.new-card-label[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-muted);\n}\n\n.new-connection-card[_ngcontent-%COMP%]:hover .new-card-label[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n\n\n\n\n\n.wizard-inline[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n max-width: 720px;\n margin: 0 auto;\n}\n\n\n\n.wizard-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n padding: 0 0 20px;\n}\n\n.wizard-back-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n background: none;\n border: none;\n cursor: pointer;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-muted);\n padding: 6px 10px;\n border-radius: 6px;\n transition: background 0.15s, color 0.15s;\n}\n\n.wizard-back-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.wizard-title[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0;\n}\n\n\n\n\n\n\n.step-indicator[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 20px 32px;\n gap: 0;\n}\n\n.step-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 6px;\n position: relative;\n}\n\n.step-circle[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 13px;\n font-weight: 600;\n background: var(--mj-bg-surface-active);\n color: var(--mj-text-disabled);\n border: 2px solid var(--mj-border-default);\n transition: all 0.2s;\n}\n\n.step-active[_ngcontent-%COMP%] .step-circle[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n\n.step-completed[_ngcontent-%COMP%] .step-circle[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n border-color: var(--mj-status-success);\n}\n\n.step-label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 500;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n}\n\n.step-active[_ngcontent-%COMP%] .step-label[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n.step-completed[_ngcontent-%COMP%] .step-label[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.step-line[_ngcontent-%COMP%] {\n width: 48px;\n height: 2px;\n background: var(--mj-border-default);\n margin: 0 8px;\n margin-bottom: 20px;\n transition: background 0.2s;\n}\n\n.step-line-active[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n}\n\n\n\n\n\n\n.wizard-body[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 0 24px 24px;\n}\n\n.step-content[_ngcontent-%COMP%] {\n min-height: 300px;\n}\n\n.step-content-centered[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n}\n\n.step-title[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 20px;\n}\n\n.step-content-centered[_ngcontent-%COMP%] .step-title[_ngcontent-%COMP%] {\n margin-bottom: 32px;\n}\n\n\n\n.search-bar[_ngcontent-%COMP%] {\n position: relative;\n margin-bottom: 20px;\n}\n\n.search-icon[_ngcontent-%COMP%] {\n position: absolute;\n left: 14px;\n top: 50%;\n transform: translateY(-50%);\n color: var(--mj-text-disabled);\n font-size: 14px;\n}\n\n.search-input[_ngcontent-%COMP%] {\n width: 100%;\n padding: 10px 14px 10px 40px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n font-size: 14px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n transition: border-color 0.2s, box-shadow 0.2s;\n box-sizing: border-box;\n}\n\n.search-input[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);\n}\n\n.search-input[_ngcontent-%COMP%]::placeholder {\n color: var(--mj-text-disabled);\n}\n\n\n\n.no-integrations[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 48px 24px;\n color: var(--mj-text-disabled);\n text-align: center;\n}\n\n.no-integrations[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 36px;\n margin-bottom: 12px;\n}\n\n.no-integrations[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 16px;\n font-weight: 500;\n color: var(--mj-text-muted);\n margin: 0 0 4px;\n}\n\n.no-integrations-hint[_ngcontent-%COMP%] {\n font-size: 13px;\n}\n\n\n\n.integration-picker-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 12px;\n}\n\n.integration-picker-card[_ngcontent-%COMP%] {\n border: 2px solid var(--mj-border-default);\n border-radius: 10px;\n padding: 16px;\n cursor: pointer;\n text-align: center;\n transition: border-color 0.2s, background 0.15s;\n}\n\n.integration-picker-card[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-brand-primary);\n background: var(--mj-bg-page);\n}\n\n.integration-picker-card.picker-selected[_ngcontent-%COMP%] {\n border-color: var(--mj-brand-primary);\n background: var(--mj-status-info-bg);\n}\n\n.picker-icon-circle[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n margin: 0 auto 10px;\n font-size: 18px;\n}\n\n.picker-name[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n}\n\n.picker-description[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-disabled);\n line-height: 1.3;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n\n\n\n\n\n\n.form-group[_ngcontent-%COMP%] {\n margin-bottom: 20px;\n}\n\n.form-label[_ngcontent-%COMP%] {\n display: block;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 6px;\n}\n\n.optional-label[_ngcontent-%COMP%] {\n font-weight: 400;\n color: var(--mj-text-disabled);\n}\n\n.form-input[_ngcontent-%COMP%] {\n width: 100%;\n padding: 10px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n font-size: 14px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n transition: border-color 0.2s, box-shadow 0.2s;\n box-sizing: border-box;\n}\n\n.form-input[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);\n}\n\n.form-input[_ngcontent-%COMP%]::placeholder {\n color: var(--mj-text-disabled);\n}\n\n.form-input[_ngcontent-%COMP%]:disabled {\n background: var(--mj-bg-page);\n color: var(--mj-text-muted);\n}\n\n.form-textarea[_ngcontent-%COMP%] {\n resize: vertical;\n min-height: 72px;\n}\n\n.form-hint[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-disabled);\n padding: 8px 0;\n}\n\n\n\n.credential-selected[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 14px;\n background: var(--mj-status-success-bg);\n border: 1px solid var(--mj-status-success-border);\n border-radius: 8px;\n}\n\n.credential-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-status-success-text);\n font-size: 14px;\n font-weight: 500;\n}\n\n.credential-info[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.credential-clear[_ngcontent-%COMP%] {\n background: none;\n border: none;\n cursor: pointer;\n color: var(--mj-text-disabled);\n font-size: 14px;\n padding: 4px;\n border-radius: 4px;\n transition: color 0.15s;\n}\n\n.credential-clear[_ngcontent-%COMP%]:hover {\n color: var(--mj-status-error);\n}\n\n.credential-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n.credential-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n font-size: 13px;\n}\n\n.credential-loading[_ngcontent-%COMP%] {\n padding: 16px 0;\n}\n\n.credential-list[_ngcontent-%COMP%] {\n margin-top: 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n}\n\n.credential-list-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n cursor: pointer;\n font-size: 14px;\n color: var(--mj-text-secondary);\n border-bottom: 1px solid var(--mj-border-subtle);\n transition: background 0.15s;\n}\n\n.credential-list-item[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.credential-list-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-page);\n}\n\n.credential-list-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n}\n\n\n\n\n\n\n.test-prompt[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 16px;\n}\n\n.test-hint[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-disabled);\n margin: 0;\n}\n\n.test-running[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 16px;\n color: var(--mj-brand-primary);\n}\n\n.test-spinner[_ngcontent-%COMP%] {\n width: 64px;\n height: 64px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.test-running[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 15px;\n font-weight: 500;\n margin: 0;\n}\n\n\n\n.test-result[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n padding: 24px;\n border-radius: 12px;\n max-width: 400px;\n}\n\n.test-result-success[_ngcontent-%COMP%] {\n background: var(--mj-status-success-bg);\n}\n\n.test-result-failure[_ngcontent-%COMP%] {\n background: var(--mj-status-error-bg);\n}\n\n.test-result-icon[_ngcontent-%COMP%] {\n font-size: 48px;\n animation: _ngcontent-%COMP%_scaleIn 0.3s ease-out;\n}\n\n.test-result-success[_ngcontent-%COMP%] .test-result-icon[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.test-result-failure[_ngcontent-%COMP%] .test-result-icon[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n@keyframes _ngcontent-%COMP%_scaleIn {\n from {\n transform: scale(0.5);\n opacity: 0;\n }\n to {\n transform: scale(1);\n opacity: 1;\n }\n}\n\n.test-result-message[_ngcontent-%COMP%] {\n font-size: 15px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n text-align: center;\n}\n\n.test-result-detail[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.test-retry-btn[_ngcontent-%COMP%] {\n margin-top: 4px;\n}\n\n\n\n.toggle-switch[_ngcontent-%COMP%] {\n position: relative;\n display: inline-block;\n width: 44px;\n height: 24px;\n flex-shrink: 0;\n}\n\n.toggle-switch[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n opacity: 0;\n width: 0;\n height: 0;\n}\n\n.toggle-slider[_ngcontent-%COMP%] {\n position: absolute;\n cursor: pointer;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--mj-border-strong);\n border-radius: 24px;\n transition: background 0.2s;\n}\n\n.toggle-slider[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n height: 18px;\n width: 18px;\n left: 3px;\n bottom: 3px;\n background: var(--mj-bg-surface);\n border-radius: 50%;\n transition: transform 0.2s;\n}\n\n.toggle-switch[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:checked + .toggle-slider[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n}\n\n.toggle-switch[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:checked + .toggle-slider[_ngcontent-%COMP%]::before {\n transform: translateX(20px);\n}\n\n\n\n\n\n\n.wizard-footer[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 24px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n.footer-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n}\n\n.footer-right[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n\n\n\n\n\n@media (max-width: 768px) {\n .connections-container[_ngcontent-%COMP%] {\n padding: 16px;\n }\n\n .card-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .integration-picker-grid[_ngcontent-%COMP%] {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .step-indicator[_ngcontent-%COMP%] {\n padding: 16px;\n overflow-x: auto;\n }\n\n .step-line[_ngcontent-%COMP%] {\n width: 24px;\n }\n\n .credential-actions[_ngcontent-%COMP%] {\n flex-direction: column;\n }\n}\n\n@media (max-width: 480px) {\n .integration-picker-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .card-footer[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n }\n}\n\n\n\n\n\n\n.delete-confirm-overlay[_ngcontent-%COMP%] {\n position: absolute;\n inset: 0;\n background: rgba(255, 255, 255, 0.95);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 5;\n border-radius: 12px;\n animation: _ngcontent-%COMP%_fadeIn 150ms ease;\n}\n\n@keyframes _ngcontent-%COMP%_fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n.delete-confirm-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 10px;\n padding: 20px;\n text-align: center;\n}\n\n.delete-warn-icon[_ngcontent-%COMP%] {\n font-size: 28px;\n color: var(--mj-status-error);\n}\n\n.delete-confirm-text[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n max-width: 220px;\n}\n\n.delete-confirm-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n margin-top: 4px;\n}\n\n\n\n\n\n\n.edit-panel-backdrop[_ngcontent-%COMP%] {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.1);\n z-index: 99;\n opacity: 0;\n pointer-events: none;\n transition: opacity 300ms ease;\n}\n\n.edit-panel-backdrop.open[_ngcontent-%COMP%] {\n opacity: 1;\n pointer-events: auto;\n}\n\n.edit-panel[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n width: 400px;\n max-width: 100%;\n background: var(--mj-bg-surface);\n border-left: 1px solid var(--mj-border-default);\n box-shadow: -8px 0 24px rgba(0, 0, 0, 0.08);\n z-index: 100;\n transform: translateX(100%);\n transition: transform 300ms cubic-bezier(0.4, 0, 0.2, 1);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.edit-panel.open[_ngcontent-%COMP%] {\n transform: translateX(0);\n}\n\n.edit-panel-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.edit-panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.edit-icon-circle[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n font-size: 14px;\n}\n\n.edit-close-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n border: none;\n border-radius: 6px;\n background: transparent;\n color: var(--mj-text-disabled);\n cursor: pointer;\n font-size: 14px;\n transition: all 150ms ease;\n}\n\n.edit-close-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-secondary);\n}\n\n.edit-panel-loading[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 48px 20px;\n}\n\n.edit-panel-body[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n\n.edit-form-group[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.edit-form-label[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.edit-form-input[_ngcontent-%COMP%] {\n height: 36px;\n padding: 0 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 14px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n outline: none;\n transition: border-color 150ms ease;\n}\n\n.edit-form-input[_ngcontent-%COMP%]:focus {\n border-color: var(--mj-brand-primary);\n}\n\n.edit-readonly-field[_ngcontent-%COMP%] {\n padding: 8px 12px;\n background: var(--mj-bg-page);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.edit-toggle-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.edit-toggle-label[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-disabled);\n}\n\n.edit-toggle-label.active[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.edit-credential-selected[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-page);\n}\n\n.edit-credential-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.edit-credential-info[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.edit-credential-clear[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n border: none;\n border-radius: 4px;\n background: transparent;\n color: var(--mj-text-disabled);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n transition: all 150ms ease;\n}\n\n.edit-credential-clear[_ngcontent-%COMP%]:hover {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error);\n}\n\n.edit-credential-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n.edit-credential-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n margin-top: 6px;\n max-height: 180px;\n overflow-y: auto;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n}\n\n.edit-credential-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: background 150ms ease;\n}\n\n.edit-credential-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.edit-credential-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n font-size: 12px;\n}\n\n.edit-panel-footer[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n padding: 16px 20px;\n border-top: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n\n\n\n\n\n.card-clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n\n\n\n\n\n.detail-view[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n.detail-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n padding-bottom: 20px;\n border-bottom: 1px solid var(--mj-border-subtle);\n margin-bottom: 16px;\n flex-wrap: wrap;\n}\n\n.detail-header-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n min-width: 0;\n}\n\n.detail-header-text[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n}\n\n.detail-title[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.detail-subtitle[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 4px;\n flex-wrap: wrap;\n}\n\n.detail-header-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n flex-shrink: 0;\n}\n\n\n\n.schedule-section[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n padding: 16px 20px;\n margin-bottom: 16px;\n}\n\n.schedule-section-header[_ngcontent-%COMP%] {\n margin-bottom: 12px;\n}\n\n.schedule-section-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 0.8rem;\n font-weight: 700;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n\n.schedule-section-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.schedule-empty[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 0;\n}\n\n.schedule-empty-text[_ngcontent-%COMP%] {\n font-size: 0.85rem;\n color: var(--mj-text-disabled);\n}\n\n.schedule-create-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n background: linear-gradient(135deg, var(--mj-brand-primary) 0%, var(--mj-brand-primary-active) 100%);\n color: white;\n border: none;\n border-radius: 8px;\n cursor: pointer;\n font-size: 0.8rem;\n font-weight: 600;\n transition: all 0.2s ease;\n}\n\n.schedule-create-btn[_ngcontent-%COMP%]:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n}\n\n\n\n.detail-toolbar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 12px;\n}\n\n.detail-toolbar-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.detail-map-count[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n.detail-search[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n}\n\n.detail-search[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n font-size: 12px;\n}\n\n.detail-search[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n border: none;\n outline: none;\n background: transparent;\n font-size: 13px;\n color: var(--mj-text-primary);\n width: 200px;\n}\n\n.detail-search[_ngcontent-%COMP%] input[_ngcontent-%COMP%]::placeholder {\n color: var(--mj-text-disabled);\n}\n\n\n\n.add-map-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface-card);\n color: var(--mj-brand-primary-hover);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 150ms ease;\n white-space: nowrap;\n}\n\n.add-map-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-border-strong);\n}\n\n.add-map-btn.active[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-bg-surface);\n border-color: var(--mj-brand-primary);\n}\n\n.apply-all-btn[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n\n.apply-all-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary-hover);\n border-color: var(--mj-brand-primary-hover);\n}\n\n.apply-all-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.add-map-btn-lg[_ngcontent-%COMP%] {\n margin-top: 16px;\n padding: 10px 20px;\n font-size: 14px;\n}\n\n\n\n.add-map-panel[_ngcontent-%COMP%] {\n padding: 16px;\n margin-bottom: 12px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n animation: _ngcontent-%COMP%_fadeIn 200ms ease;\n}\n\n.add-map-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n gap: 12px;\n}\n\n.add-map-field[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.add-map-label[_ngcontent-%COMP%] {\n display: block;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n margin-bottom: 6px;\n}\n\n.add-map-select[_ngcontent-%COMP%] {\n width: 100%;\n height: 34px;\n padding: 0 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n outline: none;\n cursor: pointer;\n}\n\n.add-map-select[_ngcontent-%COMP%]:focus {\n border-color: var(--mj-brand-primary);\n}\n\n.add-map-direction-col[_ngcontent-%COMP%] {\n flex-shrink: 0;\n}\n\n.add-map-direction-btns[_ngcontent-%COMP%] {\n display: flex;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.add-map-direction-btns[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n padding: 7px 12px;\n border: none;\n background: var(--mj-bg-surface);\n color: var(--mj-text-muted);\n font-size: 13px;\n cursor: pointer;\n transition: all 150ms ease;\n border-right: 1px solid var(--mj-border-default);\n}\n\n.add-map-direction-btns[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:last-child {\n border-right: none;\n}\n\n.add-map-direction-btns[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.add-map-direction-btns[_ngcontent-%COMP%] button.active[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-bg-surface);\n}\n\n.add-map-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n}\n\n.add-map-save-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 7px 16px;\n border: none;\n border-radius: 6px;\n background: var(--mj-brand-primary);\n color: var(--mj-bg-surface);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 150ms ease;\n white-space: nowrap;\n}\n\n.add-map-save-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary-hover);\n}\n\n.add-map-save-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: default;\n}\n\n.add-map-cancel-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 34px;\n height: 34px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-muted);\n cursor: pointer;\n font-size: 13px;\n transition: all 150ms ease;\n}\n\n.add-map-cancel-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.add-map-loading[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-disabled);\n padding: 8px 0;\n}\n\n.add-map-loading[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n margin-right: 4px;\n}\n\n.add-map-hint[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-disabled);\n padding: 8px 0;\n font-style: italic;\n}\n\n\n\n.add-map-entity-field[_ngcontent-%COMP%] {\n flex: 2;\n min-width: 280px;\n}\n\n\n\n.entity-picker-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n}\n\n.entity-picker-row[_ngcontent-%COMP%] mj-tree-dropdown[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.new-entity-btn[_ngcontent-%COMP%] {\n flex-shrink: 0;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 7px 12px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-brand-primary);\n background: var(--mj-brand-primary-subtle);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-radius: 6px;\n cursor: pointer;\n white-space: nowrap;\n transition: all 0.15s ease;\n}\n\n.new-entity-btn[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n\n\n\n\n\n.sync-result-banner[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n margin-bottom: 12px;\n animation: _ngcontent-%COMP%_fadeIn 200ms ease;\n}\n\n.sync-result-banner.sync-success[_ngcontent-%COMP%] {\n background: var(--mj-status-success-bg);\n border: 1px solid var(--mj-status-success-border);\n color: var(--mj-status-success-text);\n}\n\n.sync-result-banner.sync-failure[_ngcontent-%COMP%] {\n background: var(--mj-status-error-bg);\n border: 1px solid var(--mj-status-error-border);\n color: var(--mj-status-error-text);\n}\n\n\n\n\n\n\n.auto-map-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 12px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.auto-map-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.auto-map-result[_ngcontent-%COMP%] {\n margin-top: 12px;\n padding: 10px 14px;\n border-radius: 6px;\n font-size: 13px;\n}\n\n.auto-map-result.auto-map-success[_ngcontent-%COMP%] {\n background: var(--mj-status-success-bg);\n border: 1px solid var(--mj-status-success-border);\n color: var(--mj-status-success-text);\n}\n\n.auto-map-result.auto-map-partial[_ngcontent-%COMP%] {\n background: var(--mj-status-warning-bg);\n border: 1px solid var(--mj-status-warning-border);\n color: var(--mj-status-warning-text);\n}\n\n.auto-map-result.auto-map-failure[_ngcontent-%COMP%] {\n background: var(--mj-status-error-bg);\n border: 1px solid var(--mj-status-error-border);\n color: var(--mj-status-error-text);\n}\n\n.auto-map-result-summary[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n}\n\n.auto-map-errors[_ngcontent-%COMP%] {\n margin-top: 6px;\n font-size: 12px;\n}\n\n.auto-map-error[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 2px 0;\n}\n\n\n\n\n\n\n.new-entity-backdrop[_ngcontent-%COMP%] {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.4);\n z-index: 1000;\n animation: _ngcontent-%COMP%_fadeIn 0.15s ease;\n}\n\n.new-entity-dialog[_ngcontent-%COMP%] {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 640px;\n max-width: 90vw;\n max-height: 85vh;\n background: var(--mj-bg-surface);\n border-radius: var(--mj-radius-lg);\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.2);\n z-index: 1001;\n display: flex;\n flex-direction: column;\n animation: _ngcontent-%COMP%_fadeIn 0.2s ease;\n}\n\n.new-entity-dialog-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.new-entity-dialog-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: var(--mj-text-base);\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.new-entity-dialog-close[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n padding: 0;\n font-size: var(--mj-text-sm);\n color: var(--mj-text-secondary);\n background: transparent;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.new-entity-dialog-close[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-primary);\n}\n\n.new-entity-dialog-body[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.new-entity-dialog-desc[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 13px;\n color: var(--mj-text-secondary);\n line-height: 1.5;\n}\n\n.new-entity-dialog-form[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.new-entity-dialog-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n gap: 8px;\n}\n\n.new-entity-dialog-field[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 120px;\n}\n\n.new-entity-dialog-field-wide[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.new-entity-dialog-label[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.new-entity-dialog-input[_ngcontent-%COMP%] {\n padding: 8px 12px;\n font-size: var(--mj-text-sm);\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-md);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n transition: border-color 0.15s ease;\n}\n\n.new-entity-dialog-input[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 2px rgba(99, 102, 241, 0.1);\n}\n\n.new-entity-dialog-dot[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-secondary);\n padding-bottom: 6px;\n user-select: none;\n}\n\n.new-entity-dialog-value[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-primary);\n padding: 8px 0 4px;\n}\n\n.new-entity-dialog-hint[_ngcontent-%COMP%] {\n font-style: italic;\n color: var(--mj-text-disabled);\n font-weight: 400;\n}\n\n.new-entity-dialog-footer[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 8px;\n padding: 12px 20px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n.new-entity-preview-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 8px 16px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n background: var(--mj-brand-primary);\n border: none;\n border-radius: 6px;\n cursor: pointer;\n white-space: nowrap;\n transition: background 0.15s ease;\n}\n\n.new-entity-preview-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n}\n\n.new-entity-preview-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.new-entity-dialog-done-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 8px 16px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n background: transparent;\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-md);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.new-entity-dialog-done-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-text-disabled);\n}\n\n\n\n.new-entity-next-steps[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary-subtle);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-radius: var(--mj-radius-md);\n padding: 14px 16px;\n}\n\n.new-entity-next-steps[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 8px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-brand-primary-hover);\n}\n\n.new-entity-next-steps[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 6px;\n}\n\n.new-entity-next-steps[_ngcontent-%COMP%] ol[_ngcontent-%COMP%] {\n margin: 0;\n padding-left: 20px;\n font-size: 13px;\n color: var(--mj-brand-primary-hover);\n line-height: 1.7;\n}\n\n\n\n.ddl-copy-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n background: transparent;\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-sm);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.ddl-copy-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-text-disabled);\n}\n\n\n\n.ddl-warnings[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.ddl-warning[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-status-warning);\n background: var(--mj-status-warning-subtle);\n padding: 6px 10px;\n border-radius: var(--mj-radius-sm);\n border-left: 3px solid var(--mj-status-warning);\n}\n\n.ddl-warning[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 4px;\n}\n\n.ddl-preview-block[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n overflow: hidden;\n max-height: 300px;\n display: flex;\n flex-direction: column;\n}\n\n.ddl-preview-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n font-size: var(--mj-text-xs);\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.ddl-preview-code[_ngcontent-%COMP%] {\n margin: 0;\n padding: 12px 16px;\n font-size: 12px;\n font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', monospace;\n line-height: 1.6;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n overflow: auto;\n white-space: pre-wrap;\n word-break: break-word;\n flex: 1;\n}\n\n@keyframes _ngcontent-%COMP%_fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n\n\n.detail-empty[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 64px 24px;\n text-align: center;\n color: var(--mj-text-disabled);\n}\n\n.detail-empty[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 36px;\n margin-bottom: 12px;\n color: var(--mj-text-disabled);\n}\n\n.detail-empty[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin: 0 0 6px;\n}\n\n.detail-empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 13px;\n margin: 0;\n max-width: 400px;\n}\n\n\n\n.detail-table-head[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 8px 16px;\n background: var(--mj-bg-page);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px 8px 0 0;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-text-secondary);\n}\n\n.detail-table-body[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-top: none;\n border-radius: 0 0 8px 8px;\n overflow-y: auto;\n flex: 1;\n min-height: 0;\n}\n\n.detail-map-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 10px 16px;\n border-bottom: 1px solid var(--mj-border-subtle);\n transition: background 0.15s;\n font-size: 13px;\n}\n\n.detail-map-row[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.detail-map-row[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-page);\n cursor: pointer;\n}\n\n.detail-map-row.sync-disabled[_ngcontent-%COMP%] {\n opacity: 0.5;\n}\n\n\n\n.dt-col-toggle[_ngcontent-%COMP%] {\n width: 60px;\n flex-shrink: 0;\n}\n\n.dt-col-source[_ngcontent-%COMP%] {\n flex: 2;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.dt-col-direction[_ngcontent-%COMP%] {\n width: 80px;\n flex-shrink: 0;\n text-align: center;\n}\n\n.dt-col-dest[_ngcontent-%COMP%] {\n flex: 2;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--mj-text-primary);\n}\n\n.dt-col-meta[_ngcontent-%COMP%] {\n width: 80px;\n flex-shrink: 0;\n display: flex;\n align-items: center;\n gap: 6px;\n justify-content: flex-end;\n}\n\n\n\n.direction-badge[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n padding: 2px 8px;\n border-radius: 4px;\n white-space: nowrap;\n}\n\n\n\nbutton.direction-toggle[_ngcontent-%COMP%] {\n border: 1px solid transparent;\n cursor: pointer;\n transition: border-color 0.15s, box-shadow 0.15s;\n}\nbutton.direction-toggle[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-border-strong);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n}\n\n.direction-badge.pull[_ngcontent-%COMP%] {\n background: var(--mj-status-info-bg);\n color: var(--mj-brand-primary);\n}\n\n.direction-badge.push[_ngcontent-%COMP%] {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success);\n}\n\n.direction-badge.bidirectional[_ngcontent-%COMP%] {\n background: var(--mj-status-warning-subtle);\n color: var(--mj-status-warning);\n}\n\n\n\n.create-tables-list[_ngcontent-%COMP%] {\n max-height: 300px;\n overflow-y: auto;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n margin-top: 8px;\n background: var(--mj-bg-surface);\n}\n.create-tables-select-all[_ngcontent-%COMP%] {\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n font-weight: 600;\n}\n.create-tables-checkbox[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 12px;\n cursor: pointer;\n font-size: 13px;\n color: var(--mj-text-primary);\n}\n.create-tables-checkbox[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n.create-tables-checkbox[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n width: 16px;\n height: 16px;\n cursor: pointer;\n}\n.create-tables-name-hint[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 11px;\n margin-left: 8px;\n}\n.create-tables-filters[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 8px 0;\n flex-wrap: wrap;\n}\n.create-tables-search[_ngcontent-%COMP%] {\n flex: 1 1 240px;\n min-width: 200px;\n}\n.create-tables-toggle[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n}\n.create-tables-toggle[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n margin: 0;\n}\n.create-tables-badge[_ngcontent-%COMP%] {\n display: inline-block;\n margin-left: 6px;\n padding: 1px 6px;\n font-size: 10px;\n font-weight: 600;\n border-radius: 10px;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n line-height: 1.4;\n}\n.create-tables-badge-custom[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n.create-tables-badge-registered[_ngcontent-%COMP%] {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success-text);\n}\n.add-map-input[_ngcontent-%COMP%] {\n width: 100%;\n padding: 6px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n font-size: 13px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n}\n.add-map-input[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n\n\n.detail-config-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n border-radius: 4px;\n background: var(--mj-bg-surface-active);\n color: var(--mj-text-disabled);\n font-size: 11px;\n}\n\n\n\n.detail-back-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n font-size: 16px;\n transition: background 0.15s, color 0.15s, border-color 0.15s;\n flex-shrink: 0;\n}\n\n.detail-back-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-strong);\n}\n\n\n\n.detail-edit-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n font-size: 14px;\n transition: background 0.15s, color 0.15s, border-color 0.15s;\n flex-shrink: 0;\n}\n\n.detail-edit-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-strong);\n}\n\n\n\n.map-edit-hint[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n font-size: 11px;\n transition: color 0.15s;\n}\n\n.detail-map-row[_ngcontent-%COMP%]:hover .map-edit-hint[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n\n\n.ve-header-title-inline[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 16px;\n font-weight: 600;\n}\n\n.ve-source-label[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.ve-direction-icon[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n font-size: 14px;\n}\n\n.ve-dest-label[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.ve-stat-inline[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.ve-stat-inline[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n font-weight: 600;\n}\n\n.detail-table-empty[_ngcontent-%COMP%] {\n padding: 24px;\n text-align: center;\n color: var(--mj-text-disabled);\n font-size: 13px;\n}\n\n\n\n\n\n\n.discovered-objects-section[_ngcontent-%COMP%] {\n margin: 12px 0;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n overflow: hidden;\n}\n\n.discovered-objects-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 14px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.discovered-objects-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.discovered-objects-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.discovered-count[_ngcontent-%COMP%] {\n font-weight: 400;\n color: var(--mj-text-muted);\n font-size: 12px;\n}\n\n.discovered-objects-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n.discovered-action-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n background: none;\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n padding: 3px 10px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: background 0.15s, color 0.15s;\n}\n\n.discovered-action-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.discovered-action-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.discovered-loading[_ngcontent-%COMP%], \n.discovered-empty[_ngcontent-%COMP%] {\n padding: 16px;\n text-align: center;\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.discovered-loading[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 6px;\n}\n\n.discovered-objects-list[_ngcontent-%COMP%] {\n max-height: 280px;\n overflow-y: auto;\n}\n\n.discovered-object-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 7px 14px;\n cursor: pointer;\n transition: background 0.1s;\n border-bottom: 1px solid var(--mj-border-subtle);\n font-size: 13px;\n}\n\n.discovered-object-row[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.discovered-object-row[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.discovered-object-row.selected[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n}\n\n.discovered-object-row[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n flex-shrink: 0;\n width: 16px;\n height: 16px;\n accent-color: var(--mj-brand-primary);\n cursor: pointer;\n}\n\n.discovered-object-name[_ngcontent-%COMP%] {\n flex: 1;\n color: var(--mj-text-primary);\n font-weight: 500;\n}\n\n.discovered-object-api-name[_ngcontent-%COMP%] {\n flex: 1;\n color: var(--mj-text-muted);\n font-size: 12px;\n font-family: monospace;\n}\n\n.discovered-object-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n}\n\n.discovered-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n border-radius: 4px;\n font-size: 10px;\n}\n\n.discovered-badge.incremental[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n background: var(--mj-status-success-bg);\n}\n\n.discovered-badge.writable[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n}"] });
|
|
3139
|
+
i0.ɵɵconditional(ctx.ShowCreateEntity ? 15 : -1);
|
|
3140
|
+
} }, dependencies: [i1.NgSelectOption, i1.ɵNgSelectMultipleOption, i1.DefaultValueAccessor, i1.CheckboxControlValueAccessor, i1.SelectControlValueAccessor, i1.NgControlStatus, i1.NgModel, i2.MJButtonDirective, i2.MJPageLayoutComponent, i2.MJPageHeaderComponent, i2.MJPageBodyComponent, i2.MJStatBadgeComponent, i2.MJRefreshButtonComponent, i3.LoadingComponent, i4.CredentialDialogComponent, i5.TreeDropdownComponent, i6.ScheduledJobSummaryComponent, i6.ScheduledJobSlidePanelComponent, i7.VisualFieldEditorComponent], styles: ["\n\n\n\n\n[_nghost-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n\n\n\n.connections-container[_ngcontent-%COMP%] {\n padding: 24px;\n max-width: 1400px;\n width: 100%;\n margin: 0 auto;\n flex: 1;\n display: flex;\n flex-direction: column;\n min-height: 0;\n overflow-y: auto;\n box-sizing: border-box;\n}\n\n\n\n\n.connections-container.detail-active[_ngcontent-%COMP%], \n.connections-container.editor-active[_ngcontent-%COMP%] {\n overflow: hidden;\n}\n\n\n\n\n\n\n.loading-container[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 300px;\n}\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n min-height: 400px;\n text-align: center;\n color: var(--mj-text-muted);\n}\n\n.empty-icon[_ngcontent-%COMP%] {\n font-size: 48px;\n color: var(--mj-text-disabled);\n margin-bottom: 16px;\n}\n\n.empty-state[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin: 0 0 8px;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 14px;\n margin: 0 0 24px;\n}\n\n\n\n\n\n\n.card-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));\n gap: 20px;\n}\n\n\n\n\n\n\n.connection-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);\n transition: box-shadow 0.2s ease, transform 0.2s ease;\n display: flex;\n flex-direction: column;\n position: relative;\n overflow: hidden;\n}\n\n.connection-card[_ngcontent-%COMP%]:hover {\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n transform: translateY(-2px);\n}\n\n\n\n.card-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 16px 0;\n}\n\n.icon-circle[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n flex-shrink: 0;\n}\n\n.icon-large[_ngcontent-%COMP%] {\n font-size: 22px;\n}\n\n\n\n.status-badge[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 600;\n padding: 4px 10px;\n border-radius: 20px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.status-badge-connected[_ngcontent-%COMP%] {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success);\n}\n\n.status-badge-error[_ngcontent-%COMP%] {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error);\n}\n\n.status-badge-inactive[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-muted);\n}\n\n.status-badge-syncing[_ngcontent-%COMP%] {\n background: var(--mj-status-info-bg);\n color: var(--mj-brand-primary);\n}\n\n\n\n.card-body[_ngcontent-%COMP%] {\n padding: 12px 16px;\n flex: 1;\n}\n\n.card-name[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin-bottom: 2px;\n}\n\n.card-company[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-disabled);\n margin-bottom: 10px;\n}\n\n.card-meta[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-bottom: 6px;\n}\n\n.meta-separator[_ngcontent-%COMP%] {\n margin: 0 6px;\n}\n\n.meta-label[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n\n.card-sync-info[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-bottom: 8px;\n}\n\n.card-sync-info[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 4px;\n color: var(--mj-text-disabled);\n}\n\n\n\n.card-test-result[_ngcontent-%COMP%] {\n font-size: 12px;\n padding: 6px 10px;\n border-radius: 6px;\n display: flex;\n align-items: center;\n gap: 6px;\n margin-top: 8px;\n}\n\n.card-test-result.test-success[_ngcontent-%COMP%] {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success);\n}\n\n.card-test-result.test-failure[_ngcontent-%COMP%] {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error);\n}\n\n.card-test-result[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n\n\n.card-footer[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 16px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n.card-footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n font-size: 13px;\n}\n\n\n\n.sync-menu-wrapper[_ngcontent-%COMP%] {\n position: relative;\n display: inline-flex;\n}\n\n.sync-caret[_ngcontent-%COMP%] {\n font-size: 10px;\n margin-left: 4px;\n opacity: 0.8;\n}\n\n.sync-dropdown[_ngcontent-%COMP%] {\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n z-index: 1000;\n background: var(--mj-bg-surface-elevated);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n box-shadow: 0 8px 24px rgba(0,0,0,0.12);\n min-width: 220px;\n overflow: hidden;\n}\n\n.sync-dropdown-left[_ngcontent-%COMP%] {\n left: auto;\n right: 0;\n}\n\n.sync-dropdown-group[_ngcontent-%COMP%] {\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.sync-dropdown-group[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.sync-dropdown-label[_ngcontent-%COMP%] {\n display: block;\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--mj-text-muted);\n padding: 0 12px 4px;\n}\n\n.sync-dropdown-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 7px 12px;\n background: none;\n border: none;\n cursor: pointer;\n font-size: 13px;\n color: var(--mj-text-primary);\n text-align: left;\n transition: background 0.12s;\n}\n\n.sync-dropdown-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.sync-dropdown-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n width: 16px;\n text-align: center;\n color: var(--mj-text-secondary);\n flex-shrink: 0;\n}\n\n\n\n.card-delete-btn[_ngcontent-%COMP%] {\n margin-left: auto;\n background: none;\n border: 1px solid transparent;\n cursor: pointer;\n padding: 4px 8px;\n border-radius: 6px;\n color: var(--mj-text-disabled);\n font-size: 14px;\n transition: all 0.15s;\n}\n\n.card-delete-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-status-error-bg);\n border-color: var(--mj-status-error-border);\n color: var(--mj-status-error);\n}\n\n.menu-trigger[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-secondary);\n}\n\n.card-menu-dropdown[_ngcontent-%COMP%] {\n position: absolute;\n right: 0;\n top: 100%;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);\n min-width: 160px;\n z-index: 50;\n padding: 4px;\n}\n\n.menu-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 8px 12px;\n border: none;\n background: none;\n cursor: pointer;\n font-size: 13px;\n color: var(--mj-text-secondary);\n border-radius: 6px;\n transition: background 0.15s;\n text-align: left;\n}\n\n.menu-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.menu-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n width: 16px;\n text-align: center;\n color: var(--mj-text-muted);\n}\n\n.menu-item-danger[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.menu-item-danger[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.menu-item-danger[_ngcontent-%COMP%]:hover {\n background: var(--mj-status-error-bg);\n}\n\n\n\n\n\n\n.new-connection-card[_ngcontent-%COMP%] {\n border: 2px dashed var(--mj-border-strong);\n background: var(--mj-bg-page);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 200px;\n transition: background 0.2s, border-color 0.2s;\n}\n\n.new-connection-card[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-brand-primary);\n box-shadow: none;\n transform: none;\n}\n\n.new-card-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n}\n\n.new-card-icon[_ngcontent-%COMP%] {\n width: 56px;\n height: 56px;\n border-radius: 50%;\n background: var(--mj-bg-surface-active);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 24px;\n color: var(--mj-text-muted);\n transition: background 0.2s, color 0.2s;\n}\n\n.new-connection-card[_ngcontent-%COMP%]:hover .new-card-icon[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.new-card-label[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-muted);\n}\n\n.new-connection-card[_ngcontent-%COMP%]:hover .new-card-label[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n\n\n\n\n\n.wizard-inline[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n max-width: 720px;\n margin: 0 auto;\n}\n\n\n\n.wizard-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n padding: 0 0 20px;\n}\n\n.wizard-back-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n background: none;\n border: none;\n cursor: pointer;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-muted);\n padding: 6px 10px;\n border-radius: 6px;\n transition: background 0.15s, color 0.15s;\n}\n\n.wizard-back-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.wizard-title[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0;\n}\n\n\n\n\n\n\n.step-indicator[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 20px 32px;\n gap: 0;\n}\n\n.step-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 6px;\n position: relative;\n}\n\n.step-circle[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 13px;\n font-weight: 600;\n background: var(--mj-bg-surface-active);\n color: var(--mj-text-disabled);\n border: 2px solid var(--mj-border-default);\n transition: all 0.2s;\n}\n\n.step-active[_ngcontent-%COMP%] .step-circle[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n\n.step-completed[_ngcontent-%COMP%] .step-circle[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n border-color: var(--mj-status-success);\n}\n\n.step-label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 500;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n}\n\n.step-active[_ngcontent-%COMP%] .step-label[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n.step-completed[_ngcontent-%COMP%] .step-label[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.step-line[_ngcontent-%COMP%] {\n width: 48px;\n height: 2px;\n background: var(--mj-border-default);\n margin: 0 8px;\n margin-bottom: 20px;\n transition: background 0.2s;\n}\n\n.step-line-active[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n}\n\n\n\n\n\n\n.wizard-body[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 0 24px 24px;\n}\n\n.step-content[_ngcontent-%COMP%] {\n min-height: 300px;\n}\n\n.step-content-centered[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n}\n\n.step-title[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 20px;\n}\n\n.step-content-centered[_ngcontent-%COMP%] .step-title[_ngcontent-%COMP%] {\n margin-bottom: 32px;\n}\n\n\n\n.search-bar[_ngcontent-%COMP%] {\n position: relative;\n margin-bottom: 20px;\n}\n\n.search-icon[_ngcontent-%COMP%] {\n position: absolute;\n left: 14px;\n top: 50%;\n transform: translateY(-50%);\n color: var(--mj-text-disabled);\n font-size: 14px;\n}\n\n.search-input[_ngcontent-%COMP%] {\n width: 100%;\n padding: 10px 14px 10px 40px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n font-size: 14px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n transition: border-color 0.2s, box-shadow 0.2s;\n box-sizing: border-box;\n}\n\n.search-input[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);\n}\n\n.search-input[_ngcontent-%COMP%]::placeholder {\n color: var(--mj-text-disabled);\n}\n\n\n\n.no-integrations[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 48px 24px;\n color: var(--mj-text-disabled);\n text-align: center;\n}\n\n.no-integrations[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 36px;\n margin-bottom: 12px;\n}\n\n.no-integrations[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 16px;\n font-weight: 500;\n color: var(--mj-text-muted);\n margin: 0 0 4px;\n}\n\n.no-integrations-hint[_ngcontent-%COMP%] {\n font-size: 13px;\n}\n\n\n\n.integration-picker-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 12px;\n}\n\n.integration-picker-card[_ngcontent-%COMP%] {\n border: 2px solid var(--mj-border-default);\n border-radius: 10px;\n padding: 16px;\n cursor: pointer;\n text-align: center;\n transition: border-color 0.2s, background 0.15s;\n}\n\n.integration-picker-card[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-brand-primary);\n background: var(--mj-bg-page);\n}\n\n.integration-picker-card.picker-selected[_ngcontent-%COMP%] {\n border-color: var(--mj-brand-primary);\n background: var(--mj-status-info-bg);\n}\n\n.picker-icon-circle[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n margin: 0 auto 10px;\n font-size: 18px;\n}\n\n.picker-name[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n}\n\n.picker-description[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-disabled);\n line-height: 1.3;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n\n\n\n\n\n\n.form-group[_ngcontent-%COMP%] {\n margin-bottom: 20px;\n}\n\n.form-label[_ngcontent-%COMP%] {\n display: block;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 6px;\n}\n\n.optional-label[_ngcontent-%COMP%] {\n font-weight: 400;\n color: var(--mj-text-disabled);\n}\n\n.form-input[_ngcontent-%COMP%] {\n width: 100%;\n padding: 10px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n font-size: 14px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n transition: border-color 0.2s, box-shadow 0.2s;\n box-sizing: border-box;\n}\n\n.form-input[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);\n}\n\n.form-input[_ngcontent-%COMP%]::placeholder {\n color: var(--mj-text-disabled);\n}\n\n.form-input[_ngcontent-%COMP%]:disabled {\n background: var(--mj-bg-page);\n color: var(--mj-text-muted);\n}\n\n.form-textarea[_ngcontent-%COMP%] {\n resize: vertical;\n min-height: 72px;\n}\n\n.form-hint[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-disabled);\n padding: 8px 0;\n}\n\n\n\n.credential-selected[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 14px;\n background: var(--mj-status-success-bg);\n border: 1px solid var(--mj-status-success-border);\n border-radius: 8px;\n}\n\n.credential-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-status-success-text);\n font-size: 14px;\n font-weight: 500;\n}\n\n.credential-info[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.credential-clear[_ngcontent-%COMP%] {\n background: none;\n border: none;\n cursor: pointer;\n color: var(--mj-text-disabled);\n font-size: 14px;\n padding: 4px;\n border-radius: 4px;\n transition: color 0.15s;\n}\n\n.credential-clear[_ngcontent-%COMP%]:hover {\n color: var(--mj-status-error);\n}\n\n.credential-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n.credential-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n font-size: 13px;\n}\n\n.credential-loading[_ngcontent-%COMP%] {\n padding: 16px 0;\n}\n\n.credential-list[_ngcontent-%COMP%] {\n margin-top: 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n}\n\n.credential-list-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n cursor: pointer;\n font-size: 14px;\n color: var(--mj-text-secondary);\n border-bottom: 1px solid var(--mj-border-subtle);\n transition: background 0.15s;\n}\n\n.credential-list-item[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.credential-list-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-page);\n}\n\n.credential-list-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n}\n\n\n\n\n\n\n.test-prompt[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 16px;\n}\n\n.test-hint[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-disabled);\n margin: 0;\n}\n\n.test-running[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 16px;\n color: var(--mj-brand-primary);\n}\n\n.test-spinner[_ngcontent-%COMP%] {\n width: 64px;\n height: 64px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.test-running[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 15px;\n font-weight: 500;\n margin: 0;\n}\n\n\n\n.test-result[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n padding: 24px;\n border-radius: 12px;\n max-width: 400px;\n}\n\n.test-result-success[_ngcontent-%COMP%] {\n background: var(--mj-status-success-bg);\n}\n\n.test-result-failure[_ngcontent-%COMP%] {\n background: var(--mj-status-error-bg);\n}\n\n.test-result-icon[_ngcontent-%COMP%] {\n font-size: 48px;\n animation: _ngcontent-%COMP%_scaleIn 0.3s ease-out;\n}\n\n.test-result-success[_ngcontent-%COMP%] .test-result-icon[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.test-result-failure[_ngcontent-%COMP%] .test-result-icon[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n@keyframes _ngcontent-%COMP%_scaleIn {\n from {\n transform: scale(0.5);\n opacity: 0;\n }\n to {\n transform: scale(1);\n opacity: 1;\n }\n}\n\n.test-result-message[_ngcontent-%COMP%] {\n font-size: 15px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n text-align: center;\n}\n\n.test-result-detail[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.test-retry-btn[_ngcontent-%COMP%] {\n margin-top: 4px;\n}\n\n\n\n.toggle-switch[_ngcontent-%COMP%] {\n position: relative;\n display: inline-block;\n width: 44px;\n height: 24px;\n flex-shrink: 0;\n}\n\n.toggle-switch[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n opacity: 0;\n width: 0;\n height: 0;\n}\n\n.toggle-slider[_ngcontent-%COMP%] {\n position: absolute;\n cursor: pointer;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--mj-border-strong);\n border-radius: 24px;\n transition: background 0.2s;\n}\n\n.toggle-slider[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n height: 18px;\n width: 18px;\n left: 3px;\n bottom: 3px;\n background: var(--mj-bg-surface);\n border-radius: 50%;\n transition: transform 0.2s;\n}\n\n.toggle-switch[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:checked + .toggle-slider[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n}\n\n.toggle-switch[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:checked + .toggle-slider[_ngcontent-%COMP%]::before {\n transform: translateX(20px);\n}\n\n\n\n\n\n\n.wizard-footer[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 24px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n.footer-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n}\n\n.footer-right[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n\n\n\n\n\n@media (max-width: 768px) {\n .connections-container[_ngcontent-%COMP%] {\n padding: 16px;\n }\n\n .card-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .integration-picker-grid[_ngcontent-%COMP%] {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .step-indicator[_ngcontent-%COMP%] {\n padding: 16px;\n overflow-x: auto;\n }\n\n .step-line[_ngcontent-%COMP%] {\n width: 24px;\n }\n\n .credential-actions[_ngcontent-%COMP%] {\n flex-direction: column;\n }\n}\n\n@media (max-width: 480px) {\n .integration-picker-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .card-footer[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n }\n}\n\n\n\n\n\n\n.delete-confirm-overlay[_ngcontent-%COMP%] {\n position: absolute;\n inset: 0;\n background: rgba(255, 255, 255, 0.95);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 5;\n border-radius: 12px;\n animation: _ngcontent-%COMP%_fadeIn 150ms ease;\n}\n\n@keyframes _ngcontent-%COMP%_fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n.delete-confirm-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 10px;\n padding: 20px;\n text-align: center;\n}\n\n.delete-warn-icon[_ngcontent-%COMP%] {\n font-size: 28px;\n color: var(--mj-status-error);\n}\n\n.delete-confirm-text[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n max-width: 220px;\n}\n\n.delete-confirm-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n margin-top: 4px;\n}\n\n\n\n\n\n\n.edit-panel-backdrop[_ngcontent-%COMP%] {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.1);\n z-index: 99;\n opacity: 0;\n pointer-events: none;\n transition: opacity 300ms ease;\n}\n\n.edit-panel-backdrop.open[_ngcontent-%COMP%] {\n opacity: 1;\n pointer-events: auto;\n}\n\n.edit-panel[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n width: 400px;\n max-width: 100%;\n background: var(--mj-bg-surface);\n border-left: 1px solid var(--mj-border-default);\n box-shadow: -8px 0 24px rgba(0, 0, 0, 0.08);\n z-index: 100;\n transform: translateX(100%);\n transition: transform 300ms cubic-bezier(0.4, 0, 0.2, 1);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.edit-panel.open[_ngcontent-%COMP%] {\n transform: translateX(0);\n}\n\n.edit-panel-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.edit-panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.edit-icon-circle[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n font-size: 14px;\n}\n\n.edit-close-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n border: none;\n border-radius: 6px;\n background: transparent;\n color: var(--mj-text-disabled);\n cursor: pointer;\n font-size: 14px;\n transition: all 150ms ease;\n}\n\n.edit-close-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-secondary);\n}\n\n.edit-panel-loading[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 48px 20px;\n}\n\n.edit-panel-body[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n\n.edit-form-group[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.edit-form-label[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.edit-form-input[_ngcontent-%COMP%] {\n height: 36px;\n padding: 0 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 14px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n outline: none;\n transition: border-color 150ms ease;\n}\n\n.edit-form-input[_ngcontent-%COMP%]:focus {\n border-color: var(--mj-brand-primary);\n}\n\n.edit-readonly-field[_ngcontent-%COMP%] {\n padding: 8px 12px;\n background: var(--mj-bg-page);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.edit-toggle-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.edit-toggle-label[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-disabled);\n}\n\n.edit-toggle-label.active[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.edit-credential-selected[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-page);\n}\n\n.edit-credential-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.edit-credential-info[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.edit-credential-clear[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n border: none;\n border-radius: 4px;\n background: transparent;\n color: var(--mj-text-disabled);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n transition: all 150ms ease;\n}\n\n.edit-credential-clear[_ngcontent-%COMP%]:hover {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error);\n}\n\n.edit-credential-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n.edit-credential-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n margin-top: 6px;\n max-height: 180px;\n overflow-y: auto;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n}\n\n.edit-credential-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: background 150ms ease;\n}\n\n.edit-credential-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.edit-credential-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n font-size: 12px;\n}\n\n.edit-panel-footer[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n padding: 16px 20px;\n border-top: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n\n\n\n\n\n.card-clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n\n\n\n\n\n.detail-view[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n.detail-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n padding-bottom: 20px;\n border-bottom: 1px solid var(--mj-border-subtle);\n margin-bottom: 16px;\n flex-wrap: wrap;\n}\n\n.detail-header-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n min-width: 0;\n}\n\n.detail-header-text[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n}\n\n.detail-title[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.detail-subtitle[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 4px;\n flex-wrap: wrap;\n}\n\n.detail-header-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n flex-shrink: 0;\n}\n\n\n\n.schedule-section[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n padding: 16px 20px;\n margin-bottom: 16px;\n}\n\n.schedule-section-header[_ngcontent-%COMP%] {\n margin-bottom: 12px;\n}\n\n.schedule-section-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 0.8rem;\n font-weight: 700;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n\n.schedule-section-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.schedule-empty[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 0;\n}\n\n.schedule-empty-text[_ngcontent-%COMP%] {\n font-size: 0.85rem;\n color: var(--mj-text-disabled);\n}\n\n.schedule-create-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n background: linear-gradient(135deg, var(--mj-brand-primary) 0%, var(--mj-brand-primary-active) 100%);\n color: white;\n border: none;\n border-radius: 8px;\n cursor: pointer;\n font-size: 0.8rem;\n font-weight: 600;\n transition: all 0.2s ease;\n}\n\n.schedule-create-btn[_ngcontent-%COMP%]:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n}\n\n\n\n.detail-toolbar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 12px;\n}\n\n.detail-toolbar-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.detail-map-count[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n.detail-search[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n}\n\n.detail-search[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n font-size: 12px;\n}\n\n.detail-search[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n border: none;\n outline: none;\n background: transparent;\n font-size: 13px;\n color: var(--mj-text-primary);\n width: 200px;\n}\n\n.detail-search[_ngcontent-%COMP%] input[_ngcontent-%COMP%]::placeholder {\n color: var(--mj-text-disabled);\n}\n\n\n\n.add-map-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface-card);\n color: var(--mj-brand-primary-hover);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 150ms ease;\n white-space: nowrap;\n}\n\n.add-map-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-border-strong);\n}\n\n.add-map-btn.active[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-bg-surface);\n border-color: var(--mj-brand-primary);\n}\n\n.apply-all-btn[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n\n.apply-all-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary-hover);\n border-color: var(--mj-brand-primary-hover);\n}\n\n.apply-all-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.add-map-btn-lg[_ngcontent-%COMP%] {\n margin-top: 16px;\n padding: 10px 20px;\n font-size: 14px;\n}\n\n\n\n.add-map-panel[_ngcontent-%COMP%] {\n padding: 16px;\n margin-bottom: 12px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n animation: _ngcontent-%COMP%_fadeIn 200ms ease;\n}\n\n.add-map-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n gap: 12px;\n}\n\n.add-map-field[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.add-map-label[_ngcontent-%COMP%] {\n display: block;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n margin-bottom: 6px;\n}\n\n.add-map-select[_ngcontent-%COMP%] {\n width: 100%;\n height: 34px;\n padding: 0 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n outline: none;\n cursor: pointer;\n}\n\n.add-map-select[_ngcontent-%COMP%]:focus {\n border-color: var(--mj-brand-primary);\n}\n\n.add-map-direction-col[_ngcontent-%COMP%] {\n flex-shrink: 0;\n}\n\n.add-map-direction-btns[_ngcontent-%COMP%] {\n display: flex;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.add-map-direction-btns[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n padding: 7px 12px;\n border: none;\n background: var(--mj-bg-surface);\n color: var(--mj-text-muted);\n font-size: 13px;\n cursor: pointer;\n transition: all 150ms ease;\n border-right: 1px solid var(--mj-border-default);\n}\n\n.add-map-direction-btns[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:last-child {\n border-right: none;\n}\n\n.add-map-direction-btns[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.add-map-direction-btns[_ngcontent-%COMP%] button.active[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-bg-surface);\n}\n\n.add-map-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n}\n\n.add-map-save-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 7px 16px;\n border: none;\n border-radius: 6px;\n background: var(--mj-brand-primary);\n color: var(--mj-bg-surface);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 150ms ease;\n white-space: nowrap;\n}\n\n.add-map-save-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary-hover);\n}\n\n.add-map-save-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: default;\n}\n\n.add-map-cancel-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 34px;\n height: 34px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-muted);\n cursor: pointer;\n font-size: 13px;\n transition: all 150ms ease;\n}\n\n.add-map-cancel-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.add-map-loading[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-disabled);\n padding: 8px 0;\n}\n\n.add-map-loading[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n margin-right: 4px;\n}\n\n.add-map-hint[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-disabled);\n padding: 8px 0;\n font-style: italic;\n}\n\n\n\n.add-map-entity-field[_ngcontent-%COMP%] {\n flex: 2;\n min-width: 280px;\n}\n\n\n\n.entity-picker-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n}\n\n.entity-picker-row[_ngcontent-%COMP%] mj-tree-dropdown[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.new-entity-btn[_ngcontent-%COMP%] {\n flex-shrink: 0;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 7px 12px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-brand-primary);\n background: var(--mj-brand-primary-subtle);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-radius: 6px;\n cursor: pointer;\n white-space: nowrap;\n transition: all 0.15s ease;\n}\n\n.new-entity-btn[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n\n\n\n\n\n.sync-result-banner[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n margin-bottom: 12px;\n animation: _ngcontent-%COMP%_fadeIn 200ms ease;\n}\n\n.sync-result-banner.sync-success[_ngcontent-%COMP%] {\n background: var(--mj-status-success-bg);\n border: 1px solid var(--mj-status-success-border);\n color: var(--mj-status-success-text);\n}\n\n.sync-result-banner.sync-failure[_ngcontent-%COMP%] {\n background: var(--mj-status-error-bg);\n border: 1px solid var(--mj-status-error-border);\n color: var(--mj-status-error-text);\n}\n\n\n\n\n\n\n.auto-map-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 12px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.auto-map-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.auto-map-result[_ngcontent-%COMP%] {\n margin-top: 12px;\n padding: 10px 14px;\n border-radius: 6px;\n font-size: 13px;\n}\n\n.auto-map-result.auto-map-success[_ngcontent-%COMP%] {\n background: var(--mj-status-success-bg);\n border: 1px solid var(--mj-status-success-border);\n color: var(--mj-status-success-text);\n}\n\n.auto-map-result.auto-map-partial[_ngcontent-%COMP%] {\n background: var(--mj-status-warning-bg);\n border: 1px solid var(--mj-status-warning-border);\n color: var(--mj-status-warning-text);\n}\n\n.auto-map-result.auto-map-failure[_ngcontent-%COMP%] {\n background: var(--mj-status-error-bg);\n border: 1px solid var(--mj-status-error-border);\n color: var(--mj-status-error-text);\n}\n\n.auto-map-result-summary[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n}\n\n.auto-map-errors[_ngcontent-%COMP%] {\n margin-top: 6px;\n font-size: 12px;\n}\n\n.auto-map-error[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 2px 0;\n}\n\n\n\n\n\n\n.new-entity-backdrop[_ngcontent-%COMP%] {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.4);\n z-index: 1000;\n animation: _ngcontent-%COMP%_fadeIn 0.15s ease;\n}\n\n.new-entity-dialog[_ngcontent-%COMP%] {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 640px;\n max-width: 90vw;\n max-height: 85vh;\n background: var(--mj-bg-surface);\n border-radius: var(--mj-radius-lg);\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.2);\n z-index: 1001;\n display: flex;\n flex-direction: column;\n animation: _ngcontent-%COMP%_fadeIn 0.2s ease;\n}\n\n.new-entity-dialog-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.new-entity-dialog-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: var(--mj-text-base);\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.new-entity-dialog-close[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n padding: 0;\n font-size: var(--mj-text-sm);\n color: var(--mj-text-secondary);\n background: transparent;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.new-entity-dialog-close[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-primary);\n}\n\n.new-entity-dialog-body[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.new-entity-dialog-desc[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 13px;\n color: var(--mj-text-secondary);\n line-height: 1.5;\n}\n\n.new-entity-dialog-form[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.new-entity-dialog-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n gap: 8px;\n}\n\n.new-entity-dialog-field[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 120px;\n}\n\n.new-entity-dialog-field-wide[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.new-entity-dialog-label[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.new-entity-dialog-input[_ngcontent-%COMP%] {\n padding: 8px 12px;\n font-size: var(--mj-text-sm);\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-md);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n transition: border-color 0.15s ease;\n}\n\n.new-entity-dialog-input[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 2px rgba(99, 102, 241, 0.1);\n}\n\n.new-entity-dialog-dot[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-secondary);\n padding-bottom: 6px;\n user-select: none;\n}\n\n.new-entity-dialog-value[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-primary);\n padding: 8px 0 4px;\n}\n\n.new-entity-dialog-hint[_ngcontent-%COMP%] {\n font-style: italic;\n color: var(--mj-text-disabled);\n font-weight: 400;\n}\n\n.new-entity-dialog-footer[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 8px;\n padding: 12px 20px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n.new-entity-preview-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 8px 16px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n background: var(--mj-brand-primary);\n border: none;\n border-radius: 6px;\n cursor: pointer;\n white-space: nowrap;\n transition: background 0.15s ease;\n}\n\n.new-entity-preview-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n}\n\n.new-entity-preview-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.new-entity-dialog-done-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 8px 16px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n background: transparent;\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-md);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.new-entity-dialog-done-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-text-disabled);\n}\n\n\n\n.new-entity-next-steps[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary-subtle);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-radius: var(--mj-radius-md);\n padding: 14px 16px;\n}\n\n.new-entity-next-steps[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 8px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-brand-primary-hover);\n}\n\n.new-entity-next-steps[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 6px;\n}\n\n.new-entity-next-steps[_ngcontent-%COMP%] ol[_ngcontent-%COMP%] {\n margin: 0;\n padding-left: 20px;\n font-size: 13px;\n color: var(--mj-brand-primary-hover);\n line-height: 1.7;\n}\n\n\n\n.ddl-copy-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n background: transparent;\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-sm);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.ddl-copy-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-text-disabled);\n}\n\n\n\n.ddl-warnings[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.ddl-warning[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-status-warning);\n background: var(--mj-status-warning-subtle);\n padding: 6px 10px;\n border-radius: var(--mj-radius-sm);\n border-left: 3px solid var(--mj-status-warning);\n}\n\n.ddl-warning[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 4px;\n}\n\n.ddl-preview-block[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n overflow: hidden;\n max-height: 300px;\n display: flex;\n flex-direction: column;\n}\n\n.ddl-preview-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n font-size: var(--mj-text-xs);\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.ddl-preview-code[_ngcontent-%COMP%] {\n margin: 0;\n padding: 12px 16px;\n font-size: 12px;\n font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', monospace;\n line-height: 1.6;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n overflow: auto;\n white-space: pre-wrap;\n word-break: break-word;\n flex: 1;\n}\n\n@keyframes _ngcontent-%COMP%_fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n\n\n.detail-empty[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 64px 24px;\n text-align: center;\n color: var(--mj-text-disabled);\n}\n\n.detail-empty[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 36px;\n margin-bottom: 12px;\n color: var(--mj-text-disabled);\n}\n\n.detail-empty[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin: 0 0 6px;\n}\n\n.detail-empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 13px;\n margin: 0;\n max-width: 400px;\n}\n\n\n\n.detail-table-head[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 8px 16px;\n background: var(--mj-bg-page);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px 8px 0 0;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-text-secondary);\n}\n\n.detail-table-body[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-top: none;\n border-radius: 0 0 8px 8px;\n overflow-y: auto;\n flex: 1;\n min-height: 0;\n}\n\n.detail-map-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 10px 16px;\n border-bottom: 1px solid var(--mj-border-subtle);\n transition: background 0.15s;\n font-size: 13px;\n}\n\n.detail-map-row[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.detail-map-row[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-page);\n cursor: pointer;\n}\n\n.detail-map-row.sync-disabled[_ngcontent-%COMP%] {\n opacity: 0.5;\n}\n\n\n\n.dt-col-toggle[_ngcontent-%COMP%] {\n width: 60px;\n flex-shrink: 0;\n}\n\n.dt-col-source[_ngcontent-%COMP%] {\n flex: 2;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.dt-col-direction[_ngcontent-%COMP%] {\n width: 80px;\n flex-shrink: 0;\n text-align: center;\n}\n\n.dt-col-dest[_ngcontent-%COMP%] {\n flex: 2;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--mj-text-primary);\n}\n\n.dt-col-meta[_ngcontent-%COMP%] {\n width: 80px;\n flex-shrink: 0;\n display: flex;\n align-items: center;\n gap: 6px;\n justify-content: flex-end;\n}\n\n\n\n.direction-badge[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n padding: 2px 8px;\n border-radius: 4px;\n white-space: nowrap;\n}\n\n\n\nbutton.direction-toggle[_ngcontent-%COMP%] {\n border: 1px solid transparent;\n cursor: pointer;\n transition: border-color 0.15s, box-shadow 0.15s;\n}\nbutton.direction-toggle[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-border-strong);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n}\n\n.direction-badge.pull[_ngcontent-%COMP%] {\n background: var(--mj-status-info-bg);\n color: var(--mj-brand-primary);\n}\n\n.direction-badge.push[_ngcontent-%COMP%] {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success);\n}\n\n.direction-badge.bidirectional[_ngcontent-%COMP%] {\n background: var(--mj-status-warning-subtle);\n color: var(--mj-status-warning);\n}\n\n\n\n.create-tables-list[_ngcontent-%COMP%] {\n max-height: 300px;\n overflow-y: auto;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n margin-top: 8px;\n background: var(--mj-bg-surface);\n}\n.create-tables-select-all[_ngcontent-%COMP%] {\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n font-weight: 600;\n}\n.create-tables-checkbox[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 12px;\n cursor: pointer;\n font-size: 13px;\n color: var(--mj-text-primary);\n}\n.create-tables-checkbox[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n.create-tables-checkbox[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n width: 16px;\n height: 16px;\n cursor: pointer;\n}\n.create-tables-name-hint[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 11px;\n margin-left: 8px;\n}\n.create-tables-filters[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 8px 0;\n flex-wrap: wrap;\n}\n.create-tables-search[_ngcontent-%COMP%] {\n flex: 1 1 240px;\n min-width: 200px;\n}\n.create-tables-toggle[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n}\n.create-tables-toggle[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n margin: 0;\n}\n.create-tables-badge[_ngcontent-%COMP%] {\n display: inline-block;\n margin-left: 6px;\n padding: 1px 6px;\n font-size: 10px;\n font-weight: 600;\n border-radius: 10px;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n line-height: 1.4;\n}\n.create-tables-badge-custom[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n.create-tables-badge-registered[_ngcontent-%COMP%] {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success-text);\n}\n.add-map-input[_ngcontent-%COMP%] {\n width: 100%;\n padding: 6px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n font-size: 13px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n}\n.add-map-input[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n\n\n.detail-config-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n border-radius: 4px;\n background: var(--mj-bg-surface-active);\n color: var(--mj-text-disabled);\n font-size: 11px;\n}\n\n\n\n.detail-back-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n font-size: 16px;\n transition: background 0.15s, color 0.15s, border-color 0.15s;\n flex-shrink: 0;\n}\n\n.detail-back-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-strong);\n}\n\n\n\n.detail-edit-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n font-size: 14px;\n transition: background 0.15s, color 0.15s, border-color 0.15s;\n flex-shrink: 0;\n}\n\n.detail-edit-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-strong);\n}\n\n\n\n.map-edit-hint[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n font-size: 11px;\n transition: color 0.15s;\n}\n\n.detail-map-row[_ngcontent-%COMP%]:hover .map-edit-hint[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n\n\n.ve-header-title-inline[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 16px;\n font-weight: 600;\n}\n\n.ve-source-label[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.ve-direction-icon[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n font-size: 14px;\n}\n\n.ve-dest-label[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.ve-stat-inline[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.ve-stat-inline[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n font-weight: 600;\n}\n\n.detail-table-empty[_ngcontent-%COMP%] {\n padding: 24px;\n text-align: center;\n color: var(--mj-text-disabled);\n font-size: 13px;\n}\n\n\n\n\n\n\n.discovered-objects-section[_ngcontent-%COMP%] {\n margin: 12px 0;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n overflow: hidden;\n}\n\n.discovered-objects-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 14px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.discovered-objects-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.discovered-objects-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.discovered-count[_ngcontent-%COMP%] {\n font-weight: 400;\n color: var(--mj-text-muted);\n font-size: 12px;\n}\n\n.discovered-objects-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n.discovered-action-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n background: none;\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n padding: 3px 10px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: background 0.15s, color 0.15s;\n}\n\n.discovered-action-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.discovered-action-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.discovered-loading[_ngcontent-%COMP%], \n.discovered-empty[_ngcontent-%COMP%] {\n padding: 16px;\n text-align: center;\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.discovered-loading[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 6px;\n}\n\n.discovered-objects-list[_ngcontent-%COMP%] {\n max-height: 280px;\n overflow-y: auto;\n}\n\n.discovered-object-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 7px 14px;\n cursor: pointer;\n transition: background 0.1s;\n border-bottom: 1px solid var(--mj-border-subtle);\n font-size: 13px;\n}\n\n.discovered-object-row[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.discovered-object-row[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.discovered-object-row.selected[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n}\n\n.discovered-object-row[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n flex-shrink: 0;\n width: 16px;\n height: 16px;\n accent-color: var(--mj-brand-primary);\n cursor: pointer;\n}\n\n.discovered-object-name[_ngcontent-%COMP%] {\n flex: 1;\n color: var(--mj-text-primary);\n font-weight: 500;\n}\n\n.discovered-object-api-name[_ngcontent-%COMP%] {\n flex: 1;\n color: var(--mj-text-muted);\n font-size: 12px;\n font-family: monospace;\n}\n\n.discovered-object-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n}\n\n.discovered-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n border-radius: 4px;\n font-size: 10px;\n}\n\n.discovered-badge.incremental[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n background: var(--mj-status-success-bg);\n}\n\n.discovered-badge.writable[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n}"] });
|
|
3122
3141
|
};
|
|
3123
3142
|
ConnectionsComponent = ConnectionsComponent_1 = __decorate([
|
|
3124
3143
|
RegisterClass(BaseResourceComponent, 'IntegrationConnections')
|
|
@@ -3126,7 +3145,7 @@ ConnectionsComponent = ConnectionsComponent_1 = __decorate([
|
|
|
3126
3145
|
export { ConnectionsComponent };
|
|
3127
3146
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ConnectionsComponent, [{
|
|
3128
3147
|
type: Component,
|
|
3129
|
-
args: [{ standalone: false, selector: 'app-integration-connections', template: "<!-- Main container -->\n<div class=\"connections-container\" [class.detail-active]=\"!!SelectedSummary\"\n [class.editor-active]=\"!!EditorEntityMap\">\n\n <!-- ======================================================================\n CARD GRID VIEW (shown when no wizard and no detail selected)\n ====================================================================== -->\n @if (!WizardOpen && !SelectedSummary) {\n <!-- Header -->\n <div class=\"connections-header\">\n <div class=\"header-left\">\n <h2 class=\"header-title\">Integrations</h2>\n <span class=\"header-count\">{{ Connections.length }} integration{{ Connections.length !== 1 ? 's' : '' }}</span>\n </div>\n <button mjButton variant=\"primary\" (click)=\"OpenWizard()\" class=\"add-connection-btn\">\n <i class=\"fa-solid fa-plus\"></i>\n Add Integration\n </button>\n </div>\n\n <!-- Loading state -->\n @if (IsLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading integrations...\"></mj-loading>\n </div>\n }\n\n <!-- Empty state -->\n @if (!IsLoading && Connections.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-plug empty-icon\"></i>\n <h3>No integrations yet</h3>\n <p>Connect your first external system to start syncing data.</p>\n <button mjButton variant=\"primary\" (click)=\"OpenWizard()\">\n <i class=\"fa-solid fa-plus\"></i>\n Add Your First Integration\n </button>\n </div>\n }\n\n <!-- Card grid -->\n @if (!IsLoading && Connections.length > 0) {\n <div class=\"card-grid\">\n @for (summary of Connections; track summary.Integration.ID) {\n <div class=\"connection-card\">\n <!-- Card header + body: clickable to open detail view -->\n <div class=\"card-clickable\" (click)=\"SelectIntegrationCard(summary)\">\n <div class=\"card-header\">\n <div class=\"icon-circle\" [style.background-color]=\"GetIconBrandColor(summary.Integration.Integration)\">\n <i [class]=\"GetIntegrationIcon(summary.Integration.Integration, summary.Icon)\" class=\"icon-large\"></i>\n </div>\n <span [class]=\"GetStatusBadgeClass(summary)\">{{ GetStatusBadge(summary) }}</span>\n </div>\n\n <!-- Card body -->\n <div class=\"card-body\">\n <div class=\"card-name\">{{ summary.Integration.Name }}</div>\n <div class=\"card-company\">{{ summary.Integration.Company }}</div>\n <div class=\"card-meta\">\n <span class=\"meta-label\">{{ GetSourceTypeLabel(summary) }}</span>\n <span class=\"meta-separator\">·</span>\n <span class=\"meta-value\">{{ GetCredentialHint(summary) }}</span>\n </div>\n <div class=\"card-sync-info\">\n <i class=\"fa-solid fa-arrows-rotate\"></i>\n Syncing {{ GetEntityMapCount(summary.Integration.ID) }} entities\n </div>\n\n <!-- Inline test result -->\n @if (GetCardTestResult(summary.Integration.ID); as testResult) {\n <div class=\"card-test-result\" [class.test-success]=\"testResult.Success\" [class.test-failure]=\"!testResult.Success\">\n @if (testResult.Success) {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else {\n <i class=\"fa-solid fa-circle-xmark\"></i>\n }\n <span>{{ testResult.Message }}</span>\n </div>\n }\n </div>\n </div><!-- /card-clickable -->\n\n <!-- Delete confirmation overlay -->\n @if (IsDeleteConfirming(summary.Integration.ID)) {\n <div class=\"delete-confirm-overlay\">\n <div class=\"delete-confirm-content\">\n <i class=\"fa-solid fa-triangle-exclamation delete-warn-icon\"></i>\n <span class=\"delete-confirm-text\">Delete this integration and all its entity maps?</span>\n <div class=\"delete-confirm-actions\">\n <button mjButton\n variant=\"danger\"\n [disabled]=\"IsDeleting\"\n (click)=\"ConfirmDelete(summary.Integration.ID)\">\n @if (IsDeleting) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Deleting...\n } @else {\n Delete\n }\n </button>\n <button mjButton variant=\"outline\" (click)=\"CancelDelete()\">\n Cancel\n </button>\n </div>\n </div>\n </div>\n }\n\n <!-- Card footer -->\n <div class=\"card-footer\">\n <button mjButton\n variant=\"outline\"\n [disabled]=\"!!TestingCardID\"\n (click)=\"TestExistingConnection(summary.Integration.ID)\">\n @if (IsTestingCard(summary.Integration.ID)) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else {\n Test\n }\n </button>\n <button mjButton variant=\"outline\" (click)=\"OnMenuAction('edit', summary)\">\n Configure\n </button>\n @if (IsConnectionActive(summary)) {\n <div class=\"sync-menu-wrapper\">\n <button mjButton variant=\"primary\"\n [disabled]=\"!!SyncingIntegrationID\"\n (click)=\"ToggleSyncMenu(summary.Integration.ID, $event)\">\n @if (IsSyncing(summary.Integration.ID)) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Syncing...\n } @else {\n <i class=\"fa-solid fa-arrows-rotate\"></i> Sync\n <i class=\"fa-solid fa-chevron-down sync-caret\"></i>\n }\n </button>\n @if (SyncMenuIntegrationID === summary.Integration.ID) {\n <div class=\"sync-dropdown\">\n <div class=\"sync-dropdown-group\">\n <span class=\"sync-dropdown-label\">Pull (External \u2192 MJ)</span>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(summary.Integration.ID, false, 'Pull', $event)\">\n <i class=\"fa-solid fa-arrow-down-to-line\"></i> Incremental Pull\n </button>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(summary.Integration.ID, true, 'Pull', $event)\">\n <i class=\"fa-solid fa-rotate\"></i> Full Pull\n </button>\n </div>\n <div class=\"sync-dropdown-group\">\n <span class=\"sync-dropdown-label\">Push (MJ \u2192 External)</span>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(summary.Integration.ID, false, 'Push', $event)\">\n <i class=\"fa-solid fa-arrow-up-from-line\"></i> Incremental Push\n </button>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(summary.Integration.ID, true, 'Push', $event)\">\n <i class=\"fa-solid fa-rotate\"></i> Full Push\n </button>\n </div>\n <div class=\"sync-dropdown-group\">\n <span class=\"sync-dropdown-label\">Bidirectional</span>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(summary.Integration.ID, false, 'Bidirectional', $event)\">\n <i class=\"fa-solid fa-arrows-rotate\"></i> Incremental Both\n </button>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(summary.Integration.ID, true, 'Bidirectional', $event)\">\n <i class=\"fa-solid fa-rotate\"></i> Full Both\n </button>\n </div>\n </div>\n }\n </div>\n }\n <button class=\"card-delete-btn\" (click)=\"OnMenuAction('delete', summary)\" title=\"Delete integration\">\n <i class=\"fa-solid fa-trash-can\"></i>\n </button>\n </div>\n </div>\n }\n\n <!-- New connection card -->\n <div class=\"connection-card new-connection-card\" (click)=\"OpenWizard()\">\n <div class=\"new-card-content\">\n <div class=\"new-card-icon\">\n <i class=\"fa-solid fa-plus\"></i>\n </div>\n <span class=\"new-card-label\">Add Integration</span>\n </div>\n </div>\n </div>\n }\n }\n\n <!-- ======================================================================\n DETAIL VIEW (entity maps for selected integration)\n ====================================================================== -->\n @if (!WizardOpen && SelectedSummary) {\n <div class=\"detail-view\">\n\n <!-- ================================================================\n ENTITY MAP EDITOR (field mapping detail for a selected map)\n ================================================================ -->\n @if (EditorEntityMap) {\n <app-visual-field-editor\n [EntityMap]=\"EditorEntityMap\"\n [CompanyIntegrationID]=\"SelectedSummary!.Integration.ID\"\n [RunViewProvider]=\"RunViewToUse\"\n (Close)=\"CloseEntityMapEditor()\">\n </app-visual-field-editor>\n\n <!-- ================================================================\n ENTITY MAPS LIST (shown when no editor map is selected)\n ================================================================ -->\n } @else {\n <!-- Detail header -->\n <div class=\"detail-header\">\n <button class=\"detail-back-btn\" (click)=\"CloseDetailView()\" title=\"Back to Integrations\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n </button>\n <div class=\"detail-header-info\">\n <div class=\"icon-circle\" [style.background-color]=\"GetIconBrandColor(SelectedSummary.Integration.Integration)\">\n <i [class]=\"GetIntegrationIcon(SelectedSummary.Integration.Integration)\" class=\"icon-large\"></i>\n </div>\n <div class=\"detail-header-text\">\n <h2 class=\"detail-title\">{{ SelectedSummary.Integration.Name }}</h2>\n <span class=\"detail-subtitle\">\n {{ SelectedSummary.Integration.Company }}\n <span class=\"meta-separator\">·</span>\n {{ GetSourceTypeLabel(SelectedSummary) }}\n <span class=\"meta-separator\">·</span>\n <span [class]=\"GetStatusBadgeClass(SelectedSummary)\">{{ GetStatusBadge(SelectedSummary) }}</span>\n </span>\n </div>\n </div>\n <div class=\"detail-header-actions\">\n <button class=\"detail-edit-btn\" (click)=\"OpenEditPanel(SelectedSummary)\" title=\"Configure\">\n <i class=\"fa-solid fa-pen-to-square\"></i>\n </button>\n @if (IsConnectionActive(SelectedSummary)) {\n <div class=\"sync-menu-wrapper\">\n <button mjButton variant=\"primary\"\n [disabled]=\"!!SyncingIntegrationID\"\n (click)=\"ToggleSyncMenu(SelectedSummary.Integration.ID, $event)\">\n @if (IsSyncing(SelectedSummary.Integration.ID)) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Syncing...\n } @else {\n <i class=\"fa-solid fa-arrows-rotate\"></i> Sync\n <i class=\"fa-solid fa-chevron-down sync-caret\"></i>\n }\n </button>\n @if (SyncMenuIntegrationID === SelectedSummary.Integration.ID) {\n <div class=\"sync-dropdown sync-dropdown-left\">\n <div class=\"sync-dropdown-group\">\n <span class=\"sync-dropdown-label\">Pull (External \u2192 MJ)</span>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(SelectedSummary.Integration.ID, false, 'Pull', $event)\">\n <i class=\"fa-solid fa-arrow-down-to-line\"></i> Incremental Pull\n </button>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(SelectedSummary.Integration.ID, true, 'Pull', $event)\">\n <i class=\"fa-solid fa-rotate\"></i> Full Pull\n </button>\n </div>\n <div class=\"sync-dropdown-group\">\n <span class=\"sync-dropdown-label\">Push (MJ \u2192 External)</span>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(SelectedSummary.Integration.ID, false, 'Push', $event)\">\n <i class=\"fa-solid fa-arrow-up-from-line\"></i> Incremental Push\n </button>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(SelectedSummary.Integration.ID, true, 'Push', $event)\">\n <i class=\"fa-solid fa-rotate\"></i> Full Push\n </button>\n </div>\n <div class=\"sync-dropdown-group\">\n <span class=\"sync-dropdown-label\">Bidirectional</span>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(SelectedSummary.Integration.ID, false, 'Bidirectional', $event)\">\n <i class=\"fa-solid fa-arrows-rotate\"></i> Incremental Both\n </button>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(SelectedSummary.Integration.ID, true, 'Bidirectional', $event)\">\n <i class=\"fa-solid fa-rotate\"></i> Full Both\n </button>\n </div>\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Schedule section -->\n <div class=\"schedule-section\">\n <div class=\"schedule-section-header\">\n <div class=\"schedule-section-title\">\n <i class=\"fa-solid fa-calendar-check\"></i>\n <span>Sync Schedule</span>\n </div>\n </div>\n @if (ScheduledJobID) {\n <mj-scheduled-job-summary\n [ScheduledJobID]=\"ScheduledJobID\"\n (EditRequested)=\"OpenSchedulePanel()\">\n </mj-scheduled-job-summary>\n } @else {\n <div class=\"schedule-empty\">\n <span class=\"schedule-empty-text\">No sync schedule configured</span>\n <button class=\"schedule-create-btn\" (click)=\"OpenSchedulePanel()\">\n <i class=\"fa-solid fa-plus\"></i>\n Schedule Sync\n </button>\n </div>\n }\n </div>\n\n <!-- Schedule slide panel -->\n <mj-scheduled-job-slide-panel\n [IsOpen]=\"ShowScheduleSlidePanel\"\n [ScheduledJobID]=\"ScheduledJobID\"\n [JobTypeID]=\"IntegrationSyncJobTypeID\"\n [DefaultConfiguration]=\"ScheduleDefaultConfiguration\"\n [HideJobType]=\"true\"\n (Close)=\"CloseSchedulePanel()\"\n (Saved)=\"OnScheduleSaved()\"\n (Deleted)=\"OnScheduleDeleted()\">\n </mj-scheduled-job-slide-panel>\n\n <!-- Entity maps toolbar -->\n <div class=\"detail-toolbar\">\n <div class=\"detail-toolbar-left\">\n <span class=\"detail-map-count\">\n {{ DetailEntityMaps.length }} entity map{{ DetailEntityMaps.length !== 1 ? 's' : '' }}\n <span class=\"meta-separator\">·</span>\n {{ DetailActiveMapCount }} active\n </span>\n </div>\n <div class=\"detail-toolbar-right\">\n <div class=\"detail-search\">\n <i class=\"fa-solid fa-filter\"></i>\n <input type=\"text\"\n placeholder=\"Filter entity maps...\"\n [value]=\"DetailSearchTerm\"\n (input)=\"OnDetailSearch($event)\" />\n </div>\n <button class=\"add-map-btn\" (click)=\"ToggleCreateTablesPanel()\" [class.active]=\"ShowCreateTablesPanel\"\n title=\"Select source objects and create entity tables\">\n <i class=\"fa-solid fa-table\"></i> Create Tables\n </button>\n <button class=\"add-map-btn\" (click)=\"ToggleAutoMapPanel()\" [class.active]=\"ShowAutoMapPanel\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i> Auto-Map Schema\n </button>\n <button class=\"add-map-btn\" (click)=\"ToggleAddMapPanel()\" [class.active]=\"ShowAddMapPanel\">\n <i class=\"fa-solid fa-plus\"></i> Add Map\n </button>\n </div>\n </div>\n\n <!-- Sync result banner -->\n @if (SyncResult) {\n <div class=\"sync-result-banner\" [class.sync-success]=\"SyncResult.Success\" [class.sync-failure]=\"!SyncResult.Success\">\n @if (SyncResult.Success) {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else {\n <i class=\"fa-solid fa-circle-xmark\"></i>\n }\n <span>{{ SyncResult.Message || (SyncResult.Success ? 'Sync completed successfully' : 'Sync failed') }}</span>\n </div>\n }\n\n <!-- Auto-Map Schema panel -->\n @if (ShowAutoMapPanel) {\n <div class=\"add-map-panel\">\n <div class=\"auto-map-header\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i>\n <span>Auto-map all entities in a schema to this integration with 1:1 field mappings</span>\n </div>\n <div class=\"add-map-row\">\n <div class=\"add-map-field\">\n <label class=\"add-map-label\">Target Schema</label>\n <select class=\"add-map-select\" [(ngModel)]=\"AutoMapSelectedSchema\">\n <option [ngValue]=\"''\" disabled>Select schema...</option>\n @for (schema of AutoMapSchemas; track schema) {\n <option [value]=\"schema\">{{ schema }}</option>\n }\n </select>\n </div>\n\n <div class=\"add-map-direction-col\">\n <label class=\"add-map-label\">Direction</label>\n <div class=\"add-map-direction-btns\">\n <button [class.active]=\"AutoMapDirection === 'Pull'\" (click)=\"AutoMapDirection = 'Pull'\" title=\"Pull from source\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </button>\n <button [class.active]=\"AutoMapDirection === 'Bidirectional'\" (click)=\"AutoMapDirection = 'Bidirectional'\" title=\"Bidirectional sync\">\n <i class=\"fa-solid fa-right-left\"></i>\n </button>\n <button [class.active]=\"AutoMapDirection === 'Push'\" (click)=\"AutoMapDirection = 'Push'\" title=\"Push to source\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n </button>\n </div>\n </div>\n\n <div class=\"add-map-actions\">\n <button class=\"add-map-save-btn\"\n [disabled]=\"!CanAutoMap\"\n (click)=\"RunAutoMap()\">\n @if (IsAutoMapping) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Mapping...\n } @else {\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i> Auto-Map\n }\n </button>\n <button class=\"add-map-cancel-btn\" (click)=\"CloseAutoMapPanel()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n </div>\n\n @if (AutoMapResult) {\n <div class=\"auto-map-result\" [class.auto-map-success]=\"AutoMapResult.Errors.length === 0\"\n [class.auto-map-partial]=\"AutoMapResult.Errors.length > 0 && AutoMapResult.EntityMapsCreated > 0\"\n [class.auto-map-failure]=\"AutoMapResult.EntityMapsCreated === 0 && AutoMapResult.Errors.length > 0\">\n @if (AutoMapResult.EntityMapsCreated > 0) {\n <div class=\"auto-map-result-summary\">\n <i class=\"fa-solid fa-circle-check\"></i>\n Created {{ AutoMapResult.EntityMapsCreated }} entity map{{ AutoMapResult.EntityMapsCreated !== 1 ? 's' : '' }}\n with {{ AutoMapResult.FieldMapsCreated }} field map{{ AutoMapResult.FieldMapsCreated !== 1 ? 's' : '' }}\n </div>\n } @else if (AutoMapResult.Errors.length === 0) {\n <div class=\"auto-map-result-summary\">\n <i class=\"fa-solid fa-circle-info\"></i>\n All entities in this schema are already mapped.\n </div>\n }\n @if (AutoMapResult.Errors.length > 0) {\n <div class=\"auto-map-errors\">\n @for (err of AutoMapResult.Errors; track err) {\n <div class=\"auto-map-error\"><i class=\"fa-solid fa-triangle-exclamation\"></i> {{ err }}</div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Create Tables panel (select source objects \u2192 create entity tables) -->\n @if (ShowCreateTablesPanel) {\n <div class=\"add-map-panel\">\n <div class=\"auto-map-header\">\n <i class=\"fa-solid fa-table\"></i>\n <span>Select source objects to create as entity tables in your database</span>\n </div>\n\n <div class=\"add-map-row\">\n <div class=\"add-map-actions\">\n <button class=\"add-map-save-btn\"\n [disabled]=\"!CanCreateTables\"\n (click)=\"RunCreateTables()\">\n @if (IsCreatingTables) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Creating...\n } @else {\n <i class=\"fa-solid fa-table\"></i> Create {{ CreateTablesSelectedCount }} Table{{ CreateTablesSelectedCount !== 1 ? 's' : '' }}\n }\n </button>\n <button class=\"add-map-cancel-btn\" (click)=\"CloseCreateTablesPanel()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n </div>\n\n @if (IsLoadingCreateTablesObjects) {\n <mj-loading text=\"Loading source objects...\" size=\"small\"></mj-loading>\n } @else if (CreateTablesObjects.length === 0) {\n <div class=\"auto-map-result auto-map-success\">\n <i class=\"fa-solid fa-circle-info\"></i>\n No source objects available from this connector.\n </div>\n } @else {\n <div class=\"create-tables-filters\">\n <input type=\"text\"\n class=\"create-tables-search mj-input\"\n placeholder=\"Search by name or label...\"\n [(ngModel)]=\"CreateTablesSearch\" />\n </div>\n <div class=\"create-tables-list\">\n <div class=\"create-tables-select-all\">\n <label class=\"create-tables-checkbox\">\n <input type=\"checkbox\"\n [checked]=\"FilteredCreateTablesObjects.length > 0 && CreateTablesSelectedCount === FilteredCreateTablesObjects.length\"\n (change)=\"ToggleAllCreateTablesObjects($any($event.target).checked)\" />\n <span>Select All ({{ FilteredCreateTablesObjects.length }} of {{ CreateTablesObjects.length }})</span>\n </label>\n </div>\n @for (obj of FilteredCreateTablesObjects; track obj.Name) {\n <label class=\"create-tables-checkbox\">\n <input type=\"checkbox\" [(ngModel)]=\"obj.Selected\" />\n <span>{{ obj.Label }}</span>\n @if (obj.Label !== obj.Name) {\n <span class=\"create-tables-name-hint\">{{ obj.Name }}</span>\n }\n @if (obj.IsCustom) {\n <span class=\"create-tables-badge create-tables-badge-custom\">Custom</span>\n }\n @if (obj.AlreadyPersisted) {\n <span class=\"create-tables-badge create-tables-badge-registered\">Registered</span>\n }\n </label>\n }\n </div>\n }\n\n @if (CreateTablesResult) {\n <div class=\"auto-map-result\"\n [class.auto-map-success]=\"CreateTablesResult.Success\"\n [class.auto-map-failure]=\"!CreateTablesResult.Success\">\n @if (CreateTablesResult.Success) {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else {\n <i class=\"fa-solid fa-circle-xmark\"></i>\n }\n <span>{{ CreateTablesResult.Message }}</span>\n </div>\n }\n </div>\n }\n\n <!-- Add Entity Map inline form -->\n @if (ShowAddMapPanel) {\n <div class=\"add-map-panel\">\n <div class=\"add-map-row\">\n <div class=\"add-map-field\">\n <label class=\"add-map-label\">Source Object</label>\n @if (IsLoadingSourceObjects) {\n <div class=\"add-map-loading\"><i class=\"fa-solid fa-spinner fa-spin\"></i> Loading...</div>\n } @else if (AvailableSourceObjects.length === 0) {\n <div class=\"add-map-hint\">No source objects found in metadata</div>\n } @else {\n <select class=\"add-map-select\" [(ngModel)]=\"AddMapSourceObjectName\">\n <option [ngValue]=\"''\" disabled>Select source object...</option>\n @for (obj of AvailableSourceObjects; track obj.Name) {\n <option [value]=\"obj.Name\">{{ obj.Label || obj.Name }}</option>\n }\n </select>\n }\n </div>\n\n <div class=\"add-map-direction-col\">\n <label class=\"add-map-label\">Direction</label>\n <div class=\"add-map-direction-btns\">\n <button [class.active]=\"AddMapDirection === 'Pull'\" (click)=\"AddMapDirection = 'Pull'\" title=\"Pull from source\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </button>\n <button [class.active]=\"AddMapDirection === 'Bidirectional'\" (click)=\"AddMapDirection = 'Bidirectional'\" title=\"Bidirectional sync\">\n <i class=\"fa-solid fa-right-left\"></i>\n </button>\n <button [class.active]=\"AddMapDirection === 'Push'\" (click)=\"AddMapDirection = 'Push'\" title=\"Push to source\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n </button>\n </div>\n </div>\n\n <div class=\"add-map-field add-map-entity-field\">\n <label class=\"add-map-label\">MJ Entity</label>\n <div class=\"entity-picker-row\">\n <mj-tree-dropdown\n #entityTreeDropdown\n [BranchConfig]=\"EntityBranchConfig\"\n [LeafConfig]=\"EntityLeafConfig\"\n [Value]=\"AddMapEntityIDAsKey\"\n [SelectableTypes]=\"'leaf'\"\n [SelectionMode]=\"'single'\"\n [Placeholder]=\"'Search entities by schema...'\"\n [EnableSearch]=\"true\"\n (SelectionChange)=\"OnEntityTreeSelection($event)\">\n </mj-tree-dropdown>\n <button class=\"new-entity-btn\" (click)=\"OpenNewEntityDialog()\" title=\"Create new entity table\">\n <i class=\"fa-solid fa-plus\"></i> New\n </button>\n </div>\n </div>\n\n <div class=\"add-map-actions\">\n <button class=\"add-map-save-btn\"\n [disabled]=\"!CanSaveAddMap || IsSavingAddMap\"\n (click)=\"SaveAddMap()\">\n @if (IsSavingAddMap) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else {\n <i class=\"fa-solid fa-check\"></i> Add\n }\n </button>\n <button class=\"add-map-cancel-btn\" (click)=\"CloseAddMapPanel()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n </div>\n </div>\n }\n\n <!-- Entity maps table -->\n @if (IsDetailLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading entity maps...\"></mj-loading>\n </div>\n } @else if (DetailEntityMaps.length === 0 && !ShowAddMapPanel) {\n <div class=\"detail-empty\">\n <i class=\"fa-solid fa-cube\"></i>\n <h3>No entity maps configured</h3>\n <p>Entity maps define how external objects sync to MJ entities.</p>\n <button class=\"add-map-btn add-map-btn-lg\" (click)=\"ToggleAddMapPanel()\">\n <i class=\"fa-solid fa-plus\"></i> Add Your First Entity Map\n </button>\n </div>\n } @else if (DetailEntityMaps.length > 0) {\n <!-- Table header -->\n <div class=\"detail-table-head\">\n <span class=\"dt-col-toggle\">Sync</span>\n <span class=\"dt-col-source\">External Object</span>\n <span class=\"dt-col-direction\"></span>\n <span class=\"dt-col-dest\">MJ Entity</span>\n <span class=\"dt-col-meta\">Config</span>\n </div>\n\n <!-- Table body -->\n <div class=\"detail-table-body\">\n @for (em of DetailFilteredMaps; track em.ID) {\n <div class=\"detail-map-row\" [class.sync-disabled]=\"!em.SyncEnabled\" (click)=\"OnEntityMapClick(em)\">\n <span class=\"dt-col-toggle\" (click)=\"$event.stopPropagation()\">\n <label class=\"toggle-switch\" [title]=\"em.SyncEnabled ? 'Sync enabled' : 'Sync disabled'\">\n <input type=\"checkbox\"\n [checked]=\"em.SyncEnabled\"\n (change)=\"OnToggleMapEnabled(em, $event)\" />\n <span class=\"toggle-slider\"></span>\n </label>\n </span>\n <span class=\"dt-col-source\" [title]=\"em.ExternalObjectName\">\n {{ em.ExternalObjectLabel ?? em.ExternalObjectName }}\n </span>\n <span class=\"dt-col-direction\" (click)=\"$event.stopPropagation()\">\n <button class=\"direction-toggle\" [class]=\"DirectionBadgeClass(em.SyncDirection)\"\n (click)=\"CycleSyncDirection(em)\"\n [title]=\"'Click to change sync direction (currently: ' + em.SyncDirection + ')'\">\n {{ DirectionText(em.SyncDirection) }}\n </button>\n </span>\n <span class=\"dt-col-dest\" [title]=\"em.Entity\">\n {{ em.Entity }}\n </span>\n <span class=\"dt-col-meta\">\n @if (em.MatchStrategy) {\n <span class=\"detail-config-badge\" title=\"Match strategy configured\">\n <i class=\"fa-solid fa-link\"></i>\n </span>\n }\n <span class=\"detail-config-badge\" [title]=\"'Conflict: ' + em.ConflictResolution\">\n <i class=\"fa-solid fa-arrows-rotate\"></i>\n </span>\n <span class=\"map-edit-hint\">\n <i class=\"fa-solid fa-chevron-right\"></i>\n </span>\n </span>\n </div>\n } @empty {\n <div class=\"detail-table-empty\">\n No entity maps match your filter.\n </div>\n }\n </div>\n }\n }\n\n </div>\n }\n\n <!-- ======================================================================\n WIZARD (inline, replaces card grid when open)\n ====================================================================== -->\n @if (WizardOpen) {\n <div class=\"wizard-inline\">\n <!-- Wizard header -->\n <div class=\"wizard-header\">\n <button class=\"wizard-back-btn\" (click)=\"CloseWizard()\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n Back to Integrations\n </button>\n <h2 class=\"wizard-title\">New Integration</h2>\n </div>\n\n <!-- Step indicator -->\n <div class=\"step-indicator\">\n @for (step of WizardSteps; track step.Number) {\n <div class=\"step-item\" [class.step-active]=\"IsStepActive(step.Number)\" [class.step-completed]=\"IsStepCompleted(step.Number)\">\n <div class=\"step-circle\">\n @if (IsStepCompleted(step.Number)) {\n <i class=\"fa-solid fa-check\"></i>\n } @else {\n {{ step.Number }}\n }\n </div>\n <span class=\"step-label\">{{ step.Label }}</span>\n </div>\n @if (step.Number < WizardSteps.length) {\n <div class=\"step-line\" [class.step-line-active]=\"IsStepCompleted(step.Number)\"></div>\n }\n }\n </div>\n\n <!-- Step content -->\n <div class=\"wizard-body\">\n\n <!-- Step 1: Choose Integration -->\n @if (WizardStep === 1) {\n <div class=\"step-content\">\n <h3 class=\"step-title\">What system do you want to connect?</h3>\n <div class=\"search-bar\">\n <i class=\"fa-solid fa-search search-icon\"></i>\n <input type=\"text\"\n class=\"search-input\"\n placeholder=\"Search integrations...\"\n [(ngModel)]=\"SearchQuery\" />\n </div>\n\n @if (FilteredIntegrations.length === 0 && AvailableIntegrations.length === 0) {\n <div class=\"no-integrations\">\n <i class=\"fa-solid fa-puzzle-piece\"></i>\n <p>No integrations configured</p>\n <span class=\"no-integrations-hint\">Configure integration definitions in the admin area first.</span>\n </div>\n } @else if (FilteredIntegrations.length === 0) {\n <div class=\"no-integrations\">\n <i class=\"fa-solid fa-search\"></i>\n <p>No matching integrations</p>\n </div>\n } @else {\n <div class=\"integration-picker-grid\">\n @for (def of FilteredIntegrations; track def.ID) {\n <div class=\"integration-picker-card\"\n [class.picker-selected]=\"IsSelectedIntegration(def)\"\n (click)=\"SelectIntegration(def)\">\n <div class=\"picker-icon-circle\" [style.background-color]=\"GetIconBrandColor(def.Name)\">\n <i [class]=\"GetIntegrationIcon(def.Name, def.Get('Icon'))\"></i>\n </div>\n <div class=\"picker-name\">{{ def.Name }}</div>\n @if (def.Description) {\n <div class=\"picker-description\">{{ def.Description }}</div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Step 2: Configure Connection -->\n @if (WizardStep === 2) {\n <div class=\"step-content\">\n <h3 class=\"step-title\">Set up your connection</h3>\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"connectionName\">Connection Name</label>\n <input id=\"connectionName\"\n type=\"text\"\n class=\"form-input\"\n placeholder=\"e.g. Production HubSpot\"\n [(ngModel)]=\"ConnectionName\" />\n </div>\n\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"companySelect\">Company</label>\n @if (NeedsCompanyPicker) {\n <select id=\"companySelect\" class=\"form-input\" [(ngModel)]=\"SelectedCompanyID\">\n <option [ngValue]=\"null\" disabled>Select a company...</option>\n @for (company of Companies; track company.ID) {\n <option [value]=\"company.ID\">{{ company.Name }}</option>\n }\n </select>\n } @else if (Companies.length === 1) {\n <input type=\"text\" class=\"form-input\" [value]=\"Companies[0].Name\" disabled />\n } @else {\n <div class=\"form-hint\">No companies available. Create one in the admin area.</div>\n }\n </div>\n\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"connectionDescription\">Description <span class=\"optional-label\">(optional)</span></label>\n <textarea id=\"connectionDescription\"\n class=\"form-input form-textarea\"\n placeholder=\"Notes about this connection...\"\n [(ngModel)]=\"ConnectionDescription\"\n rows=\"3\"></textarea>\n </div>\n\n <!-- Credential section -->\n <div class=\"form-group\">\n <label class=\"form-label\">Credential</label>\n @if (SelectedCredential) {\n <div class=\"credential-selected\">\n <div class=\"credential-info\">\n <i class=\"fa-solid fa-key\"></i>\n <span>{{ SelectedCredential.Name }}</span>\n </div>\n <button class=\"credential-clear\" (click)=\"ClearCredential()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n } @else {\n <div class=\"credential-actions\">\n <button mjButton variant=\"outline\" (click)=\"ShowExistingCredentials()\">\n <i class=\"fa-solid fa-key\"></i>\n Choose Existing Credential\n </button>\n <button mjButton variant=\"outline\" (click)=\"OpenCredentialDialog()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create New Credential\n </button>\n </div>\n }\n\n @if (IsLoadingCredentials) {\n <div class=\"credential-loading\">\n <mj-loading text=\"Loading credentials...\" size=\"small\"></mj-loading>\n </div>\n }\n\n @if (!IsLoadingCredentials && ExistingCredentials.length > 0 && !SelectedCredential) {\n <div class=\"credential-list\">\n @for (cred of ExistingCredentials; track cred.ID) {\n <div class=\"credential-list-item\" (click)=\"SelectExistingCredential(cred)\">\n <i class=\"fa-solid fa-key\"></i>\n <span>{{ cred.Name }}</span>\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Step 3: Test Connection -->\n @if (WizardStep === 3) {\n <div class=\"step-content step-content-centered\">\n <h3 class=\"step-title\">Let's verify everything works</h3>\n\n @if (!TestResult && !IsTesting) {\n <div class=\"test-prompt\">\n <button mjButton\n variant=\"primary\"\n size=\"lg\"\n (click)=\"TestNewConnection()\">\n <i class=\"fa-solid fa-vial\"></i>\n Test Connection\n </button>\n <p class=\"test-hint\">We'll verify we can reach your system and authenticate.</p>\n </div>\n }\n\n @if (IsTesting) {\n <div class=\"test-running\">\n <div class=\"test-spinner\">\n <i class=\"fa-solid fa-spinner fa-spin fa-3x\"></i>\n </div>\n <p>Testing connection...</p>\n </div>\n }\n\n @if (TestResult) {\n <div class=\"test-result\" [class.test-result-success]=\"TestResult.Success\" [class.test-result-failure]=\"!TestResult.Success\">\n <div class=\"test-result-icon\">\n @if (TestResult.Success) {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else {\n <i class=\"fa-solid fa-circle-xmark\"></i>\n }\n </div>\n <div class=\"test-result-message\">{{ TestResult.Message }}</div>\n @if (TestResult.Success && TestResult.ServerVersion) {\n <div class=\"test-result-detail\">\n Server version: {{ TestResult.ServerVersion }}\n </div>\n }\n @if (!TestResult.Success) {\n <button mjButton variant=\"outline\" (click)=\"TestNewConnection()\" class=\"test-retry-btn\">\n <i class=\"fa-solid fa-rotate-right\"></i>\n Retry\n </button>\n }\n </div>\n }\n </div>\n }\n\n </div>\n\n <!-- Wizard footer -->\n <div class=\"wizard-footer\">\n <div class=\"footer-left\"></div>\n <div class=\"footer-right\">\n @if (WizardStep > 1) {\n <button mjButton variant=\"outline\" (click)=\"PreviousStep()\">\n Back\n </button>\n }\n <button mjButton\n variant=\"primary\"\n [disabled]=\"IsNextDisabled || IsSaving\"\n (click)=\"FinishWizard()\">\n @if (IsSaving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Saving...\n } @else {\n {{ NextButtonLabel }}\n }\n </button>\n </div>\n </div>\n </div>\n }\n\n</div>\n\n<!-- Edit panel (slide-in) -->\n<div class=\"edit-panel-backdrop\"\n [class.open]=\"EditPanelOpen\"\n (click)=\"CloseEditPanel()\"></div>\n<div class=\"edit-panel\" [class.open]=\"EditPanelOpen\">\n @if (EditingSummary) {\n <!-- Header -->\n <div class=\"edit-panel-header\">\n <div class=\"edit-panel-title\">\n <div class=\"edit-icon-circle\"\n [style.background-color]=\"GetIconBrandColor(EditingSummary.Integration.Integration)\">\n <i [class]=\"GetIntegrationIcon(EditingSummary.Integration.Integration, EditingSummary.Icon)\"></i>\n </div>\n <span>Configure Integration</span>\n </div>\n <button class=\"edit-close-btn\" (click)=\"CloseEditPanel()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n\n @if (IsEditLoading) {\n <div class=\"edit-panel-loading\">\n <mj-loading text=\"Loading...\" size=\"small\"></mj-loading>\n </div>\n } @else {\n <!-- Edit form -->\n <div class=\"edit-panel-body\">\n <div class=\"edit-form-group\">\n <label class=\"edit-form-label\">Connection Name</label>\n <input type=\"text\"\n class=\"edit-form-input\"\n [(ngModel)]=\"EditName\"\n placeholder=\"Connection name...\" />\n </div>\n\n <div class=\"edit-form-group\">\n <label class=\"edit-form-label\">Status</label>\n <div class=\"edit-toggle-row\">\n <label class=\"toggle-switch\">\n <input type=\"checkbox\" [(ngModel)]=\"EditIsActive\" />\n <span class=\"toggle-slider\"></span>\n </label>\n <span class=\"edit-toggle-label\" [class.active]=\"EditIsActive\">\n {{ EditIsActive ? 'Active' : 'Inactive' }}\n </span>\n </div>\n </div>\n\n <div class=\"edit-form-group\">\n <label class=\"edit-form-label\">Credential</label>\n @if (EditCredential) {\n <div class=\"edit-credential-selected\">\n <div class=\"edit-credential-info\">\n <i class=\"fa-solid fa-key\"></i>\n <span>{{ EditCredential.Name }}</span>\n </div>\n <button class=\"edit-credential-clear\" (click)=\"ClearEditCredential()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n } @else {\n <div class=\"edit-credential-actions\">\n <button mjButton variant=\"outline\" size=\"sm\" (click)=\"OpenEditCredentialDialog()\">\n <i class=\"fa-solid fa-plus\"></i> New Credential\n </button>\n </div>\n @if (EditCredentials.length > 0) {\n <div class=\"edit-credential-list\">\n @for (cred of EditCredentials; track cred.ID) {\n <div class=\"edit-credential-item\" (click)=\"SelectEditCredential(cred)\">\n <i class=\"fa-solid fa-key\"></i>\n <span>{{ cred.Name }}</span>\n </div>\n }\n </div>\n }\n }\n </div>\n\n <div class=\"edit-form-group\">\n <label class=\"edit-form-label\">Integration</label>\n <div class=\"edit-readonly-field\">\n {{ EditingSummary.Integration.Integration }}\n </div>\n </div>\n\n <div class=\"edit-form-group\">\n <label class=\"edit-form-label\">Company</label>\n <div class=\"edit-readonly-field\">\n {{ EditingSummary.Integration.Company }}\n </div>\n </div>\n </div>\n\n <!-- Footer -->\n <div class=\"edit-panel-footer\">\n <button mjButton\n variant=\"primary\"\n [disabled]=\"IsEditSaving || !EditName.trim()\"\n (click)=\"SaveEditChanges()\">\n @if (IsEditSaving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Saving...\n } @else {\n Save Changes\n }\n </button>\n <button mjButton variant=\"outline\" (click)=\"CloseEditPanel()\">\n Cancel\n </button>\n </div>\n }\n }\n</div>\n\n<!-- Credential dialog (shared between wizard and edit panel) -->\n@if (ShowCredentialDialog) {\n <mj-credential-dialog\n [Visible]=\"true\"\n [PreselectedTypeId]=\"PreselectedCredentialTypeId\"\n (close)=\"EditPanelOpen ? OnEditCredentialDialogClose($event) : OnCredentialDialogClose($event)\">\n </mj-credential-dialog>\n}\n\n<!-- New Entity dialog -->\n@if (ShowCreateEntity) {\n <div class=\"new-entity-backdrop\" (click)=\"CloseNewEntityDialog()\"></div>\n <div class=\"new-entity-dialog\">\n <div class=\"new-entity-dialog-header\">\n <h3>Create New Entity Table</h3>\n <button class=\"new-entity-dialog-close\" (click)=\"CloseNewEntityDialog()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n <div class=\"new-entity-dialog-body\">\n <p class=\"new-entity-dialog-desc\">\n Generate a SQL migration to create a new database table for this integration's data.\n After running the migration and CodeGen, the new entity will appear in the entity picker.\n </p>\n\n <div class=\"new-entity-dialog-form\">\n <div class=\"new-entity-dialog-row\">\n <div class=\"new-entity-dialog-field\">\n <label class=\"new-entity-dialog-label\">Source Object</label>\n <div class=\"new-entity-dialog-value\">\n @if (AddMapSourceObjectName) {\n {{ AddMapSourceObjectName }}\n } @else {\n <span class=\"new-entity-dialog-hint\">Select a source object in the Add Map form first</span>\n }\n </div>\n </div>\n </div>\n <div class=\"new-entity-dialog-row\">\n <div class=\"new-entity-dialog-field\">\n <label class=\"new-entity-dialog-label\">Schema</label>\n <input type=\"text\"\n class=\"new-entity-dialog-input\"\n placeholder=\"e.g. hubspot\"\n [(ngModel)]=\"NewEntitySchema\" />\n </div>\n <span class=\"new-entity-dialog-dot\">.</span>\n <div class=\"new-entity-dialog-field new-entity-dialog-field-wide\">\n <label class=\"new-entity-dialog-label\">Table Name</label>\n <input type=\"text\"\n class=\"new-entity-dialog-input\"\n placeholder=\"e.g. Contact\"\n [(ngModel)]=\"NewEntityTable\" />\n </div>\n </div>\n </div>\n\n @if (DDLPreviewWarnings.length > 0) {\n <div class=\"ddl-warnings\">\n @for (warn of DDLPreviewWarnings; track warn) {\n <div class=\"ddl-warning\"><i class=\"fa-solid fa-triangle-exclamation\"></i> {{ warn }}</div>\n }\n </div>\n }\n\n @if (DDLPreview) {\n <div class=\"ddl-preview-block\">\n <div class=\"ddl-preview-header\">\n <span>SQL Preview</span>\n <button class=\"ddl-copy-btn\" (click)=\"CopyDDLToClipboard()\" title=\"Copy to clipboard\">\n @if (DDLCopied) {\n <i class=\"fa-solid fa-check\"></i> Copied\n } @else {\n <i class=\"fa-regular fa-copy\"></i> Copy\n }\n </button>\n </div>\n <pre class=\"ddl-preview-code\">{{ DDLPreview }}</pre>\n </div>\n }\n\n @if (DDLPreview) {\n <div class=\"new-entity-next-steps\">\n <h4><i class=\"fa-solid fa-list-check\"></i> Next Steps</h4>\n <ol>\n <li>Copy the SQL above and save it as a migration file</li>\n <li>Run the migration against your database</li>\n <li>Run CodeGen to register the new entity in MemberJunction</li>\n <li>Refresh the page — the new entity will appear in the entity picker</li>\n </ol>\n </div>\n }\n </div>\n <div class=\"new-entity-dialog-footer\">\n <button class=\"new-entity-preview-btn\"\n [disabled]=\"!CanGenerateSQL || IsGeneratingDDL\"\n (click)=\"PreviewDDL()\">\n @if (IsGeneratingDDL) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Generating...\n } @else {\n <i class=\"fa-solid fa-code\"></i> Generate SQL\n }\n </button>\n <button class=\"new-entity-dialog-done-btn\" (click)=\"CloseNewEntityDialog()\">\n Done\n </button>\n </div>\n </div>\n}\n", styles: ["/* ---------------------------------------------------------------------------\n Host & Container \u2014 flex chain for scrollable detail view\n --------------------------------------------------------------------------- */\n\n:host {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n.connections-container {\n padding: 24px;\n max-width: 1400px;\n width: 100%;\n margin: 0 auto;\n flex: 1;\n display: flex;\n flex-direction: column;\n min-height: 0;\n overflow-y: auto;\n box-sizing: border-box;\n}\n\n/* When detail or editor view is active, prevent container scrolling\n so the inner .detail-table-body handles its own scroll */\n.connections-container.detail-active,\n.connections-container.editor-active {\n overflow: hidden;\n}\n\n.connections-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 24px;\n}\n\n.header-left {\n display: flex;\n align-items: baseline;\n gap: 12px;\n}\n\n.header-title {\n font-size: 24px;\n font-weight: 700;\n margin: 0;\n color: var(--mj-text-primary);\n}\n\n.header-count {\n font-size: 14px;\n color: var(--mj-text-disabled);\n}\n\n.add-connection-btn i {\n margin-right: 6px;\n}\n\n/* ---------------------------------------------------------------------------\n Loading & Empty States\n --------------------------------------------------------------------------- */\n\n.loading-container {\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 300px;\n}\n\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n min-height: 400px;\n text-align: center;\n color: var(--mj-text-muted);\n}\n\n.empty-icon {\n font-size: 48px;\n color: var(--mj-text-disabled);\n margin-bottom: 16px;\n}\n\n.empty-state h3 {\n font-size: 20px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin: 0 0 8px;\n}\n\n.empty-state p {\n font-size: 14px;\n margin: 0 0 24px;\n}\n\n/* ---------------------------------------------------------------------------\n Card Grid\n --------------------------------------------------------------------------- */\n\n.card-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));\n gap: 20px;\n}\n\n/* ---------------------------------------------------------------------------\n Connection Card\n --------------------------------------------------------------------------- */\n\n.connection-card {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);\n transition: box-shadow 0.2s ease, transform 0.2s ease;\n display: flex;\n flex-direction: column;\n position: relative;\n overflow: hidden;\n}\n\n.connection-card:hover {\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n transform: translateY(-2px);\n}\n\n/* Card Header */\n.card-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 16px 0;\n}\n\n.icon-circle {\n width: 48px;\n height: 48px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n flex-shrink: 0;\n}\n\n.icon-large {\n font-size: 22px;\n}\n\n/* Status Badge */\n.status-badge {\n font-size: 12px;\n font-weight: 600;\n padding: 4px 10px;\n border-radius: 20px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.status-badge-connected {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success);\n}\n\n.status-badge-error {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error);\n}\n\n.status-badge-inactive {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-muted);\n}\n\n.status-badge-syncing {\n background: var(--mj-status-info-bg);\n color: var(--mj-brand-primary);\n}\n\n/* Card Body */\n.card-body {\n padding: 12px 16px;\n flex: 1;\n}\n\n.card-name {\n font-size: 18px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin-bottom: 2px;\n}\n\n.card-company {\n font-size: 14px;\n color: var(--mj-text-disabled);\n margin-bottom: 10px;\n}\n\n.card-meta {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-bottom: 6px;\n}\n\n.meta-separator {\n margin: 0 6px;\n}\n\n.meta-label {\n font-weight: 500;\n}\n\n.card-sync-info {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-bottom: 8px;\n}\n\n.card-sync-info i {\n margin-right: 4px;\n color: var(--mj-text-disabled);\n}\n\n/* Card inline test result */\n.card-test-result {\n font-size: 12px;\n padding: 6px 10px;\n border-radius: 6px;\n display: flex;\n align-items: center;\n gap: 6px;\n margin-top: 8px;\n}\n\n.card-test-result.test-success {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success);\n}\n\n.card-test-result.test-failure {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error);\n}\n\n.card-test-result span {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n/* Card Footer */\n.card-footer {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 16px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n.card-footer button {\n font-size: 13px;\n}\n\n/* Sync dropdown menu */\n.sync-menu-wrapper {\n position: relative;\n display: inline-flex;\n}\n\n.sync-caret {\n font-size: 10px;\n margin-left: 4px;\n opacity: 0.8;\n}\n\n.sync-dropdown {\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n z-index: 1000;\n background: var(--mj-bg-surface-elevated);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n box-shadow: 0 8px 24px rgba(0,0,0,0.12);\n min-width: 220px;\n overflow: hidden;\n}\n\n.sync-dropdown-left {\n left: auto;\n right: 0;\n}\n\n.sync-dropdown-group {\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.sync-dropdown-group:last-child {\n border-bottom: none;\n}\n\n.sync-dropdown-label {\n display: block;\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--mj-text-muted);\n padding: 0 12px 4px;\n}\n\n.sync-dropdown-item {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 7px 12px;\n background: none;\n border: none;\n cursor: pointer;\n font-size: 13px;\n color: var(--mj-text-primary);\n text-align: left;\n transition: background 0.12s;\n}\n\n.sync-dropdown-item:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.sync-dropdown-item i {\n width: 16px;\n text-align: center;\n color: var(--mj-text-secondary);\n flex-shrink: 0;\n}\n\n/* Card Delete Button */\n.card-delete-btn {\n margin-left: auto;\n background: none;\n border: 1px solid transparent;\n cursor: pointer;\n padding: 4px 8px;\n border-radius: 6px;\n color: var(--mj-text-disabled);\n font-size: 14px;\n transition: all 0.15s;\n}\n\n.card-delete-btn:hover {\n background: var(--mj-status-error-bg);\n border-color: var(--mj-status-error-border);\n color: var(--mj-status-error);\n}\n\n.menu-trigger:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-secondary);\n}\n\n.card-menu-dropdown {\n position: absolute;\n right: 0;\n top: 100%;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);\n min-width: 160px;\n z-index: 50;\n padding: 4px;\n}\n\n.menu-item {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 8px 12px;\n border: none;\n background: none;\n cursor: pointer;\n font-size: 13px;\n color: var(--mj-text-secondary);\n border-radius: 6px;\n transition: background 0.15s;\n text-align: left;\n}\n\n.menu-item:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.menu-item i {\n width: 16px;\n text-align: center;\n color: var(--mj-text-muted);\n}\n\n.menu-item-danger {\n color: var(--mj-status-error);\n}\n\n.menu-item-danger i {\n color: var(--mj-status-error);\n}\n\n.menu-item-danger:hover {\n background: var(--mj-status-error-bg);\n}\n\n/* ---------------------------------------------------------------------------\n New Connection Card\n --------------------------------------------------------------------------- */\n\n.new-connection-card {\n border: 2px dashed var(--mj-border-strong);\n background: var(--mj-bg-page);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 200px;\n transition: background 0.2s, border-color 0.2s;\n}\n\n.new-connection-card:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-brand-primary);\n box-shadow: none;\n transform: none;\n}\n\n.new-card-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n}\n\n.new-card-icon {\n width: 56px;\n height: 56px;\n border-radius: 50%;\n background: var(--mj-bg-surface-active);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 24px;\n color: var(--mj-text-muted);\n transition: background 0.2s, color 0.2s;\n}\n\n.new-connection-card:hover .new-card-icon {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.new-card-label {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-muted);\n}\n\n.new-connection-card:hover .new-card-label {\n color: var(--mj-brand-primary);\n}\n\n/* ---------------------------------------------------------------------------\n Wizard (inline, replaces card grid)\n --------------------------------------------------------------------------- */\n\n.wizard-inline {\n display: flex;\n flex-direction: column;\n height: 100%;\n max-width: 720px;\n margin: 0 auto;\n}\n\n/* Wizard Header */\n.wizard-header {\n display: flex;\n align-items: center;\n gap: 16px;\n padding: 0 0 20px;\n}\n\n.wizard-back-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n background: none;\n border: none;\n cursor: pointer;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-muted);\n padding: 6px 10px;\n border-radius: 6px;\n transition: background 0.15s, color 0.15s;\n}\n\n.wizard-back-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.wizard-title {\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0;\n}\n\n/* ---------------------------------------------------------------------------\n Step Indicator\n --------------------------------------------------------------------------- */\n\n.step-indicator {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 20px 32px;\n gap: 0;\n}\n\n.step-item {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 6px;\n position: relative;\n}\n\n.step-circle {\n width: 32px;\n height: 32px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 13px;\n font-weight: 600;\n background: var(--mj-bg-surface-active);\n color: var(--mj-text-disabled);\n border: 2px solid var(--mj-border-default);\n transition: all 0.2s;\n}\n\n.step-active .step-circle {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n\n.step-completed .step-circle {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n border-color: var(--mj-status-success);\n}\n\n.step-label {\n font-size: 11px;\n font-weight: 500;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n}\n\n.step-active .step-label {\n color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n.step-completed .step-label {\n color: var(--mj-status-success);\n}\n\n.step-line {\n width: 48px;\n height: 2px;\n background: var(--mj-border-default);\n margin: 0 8px;\n margin-bottom: 20px;\n transition: background 0.2s;\n}\n\n.step-line-active {\n background: var(--mj-status-success);\n}\n\n/* ---------------------------------------------------------------------------\n Wizard Body\n --------------------------------------------------------------------------- */\n\n.wizard-body {\n flex: 1;\n overflow-y: auto;\n padding: 0 24px 24px;\n}\n\n.step-content {\n min-height: 300px;\n}\n\n.step-content-centered {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n}\n\n.step-title {\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 20px;\n}\n\n.step-content-centered .step-title {\n margin-bottom: 32px;\n}\n\n/* Search bar */\n.search-bar {\n position: relative;\n margin-bottom: 20px;\n}\n\n.search-icon {\n position: absolute;\n left: 14px;\n top: 50%;\n transform: translateY(-50%);\n color: var(--mj-text-disabled);\n font-size: 14px;\n}\n\n.search-input {\n width: 100%;\n padding: 10px 14px 10px 40px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n font-size: 14px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n transition: border-color 0.2s, box-shadow 0.2s;\n box-sizing: border-box;\n}\n\n.search-input:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);\n}\n\n.search-input::placeholder {\n color: var(--mj-text-disabled);\n}\n\n/* No integrations */\n.no-integrations {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 48px 24px;\n color: var(--mj-text-disabled);\n text-align: center;\n}\n\n.no-integrations i {\n font-size: 36px;\n margin-bottom: 12px;\n}\n\n.no-integrations p {\n font-size: 16px;\n font-weight: 500;\n color: var(--mj-text-muted);\n margin: 0 0 4px;\n}\n\n.no-integrations-hint {\n font-size: 13px;\n}\n\n/* Integration picker grid */\n.integration-picker-grid {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 12px;\n}\n\n.integration-picker-card {\n border: 2px solid var(--mj-border-default);\n border-radius: 10px;\n padding: 16px;\n cursor: pointer;\n text-align: center;\n transition: border-color 0.2s, background 0.15s;\n}\n\n.integration-picker-card:hover {\n border-color: var(--mj-brand-primary);\n background: var(--mj-bg-page);\n}\n\n.integration-picker-card.picker-selected {\n border-color: var(--mj-brand-primary);\n background: var(--mj-status-info-bg);\n}\n\n.picker-icon-circle {\n width: 40px;\n height: 40px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n margin: 0 auto 10px;\n font-size: 18px;\n}\n\n.picker-name {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n}\n\n.picker-description {\n font-size: 12px;\n color: var(--mj-text-disabled);\n line-height: 1.3;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n\n/* ---------------------------------------------------------------------------\n Form Controls (Step 2)\n --------------------------------------------------------------------------- */\n\n.form-group {\n margin-bottom: 20px;\n}\n\n.form-label {\n display: block;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 6px;\n}\n\n.optional-label {\n font-weight: 400;\n color: var(--mj-text-disabled);\n}\n\n.form-input {\n width: 100%;\n padding: 10px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n font-size: 14px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n transition: border-color 0.2s, box-shadow 0.2s;\n box-sizing: border-box;\n}\n\n.form-input:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);\n}\n\n.form-input::placeholder {\n color: var(--mj-text-disabled);\n}\n\n.form-input:disabled {\n background: var(--mj-bg-page);\n color: var(--mj-text-muted);\n}\n\n.form-textarea {\n resize: vertical;\n min-height: 72px;\n}\n\n.form-hint {\n font-size: 13px;\n color: var(--mj-text-disabled);\n padding: 8px 0;\n}\n\n/* Credential section */\n.credential-selected {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 14px;\n background: var(--mj-status-success-bg);\n border: 1px solid var(--mj-status-success-border);\n border-radius: 8px;\n}\n\n.credential-info {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-status-success-text);\n font-size: 14px;\n font-weight: 500;\n}\n\n.credential-info i {\n color: var(--mj-status-success);\n}\n\n.credential-clear {\n background: none;\n border: none;\n cursor: pointer;\n color: var(--mj-text-disabled);\n font-size: 14px;\n padding: 4px;\n border-radius: 4px;\n transition: color 0.15s;\n}\n\n.credential-clear:hover {\n color: var(--mj-status-error);\n}\n\n.credential-actions {\n display: flex;\n gap: 8px;\n}\n\n.credential-actions button {\n font-size: 13px;\n}\n\n.credential-loading {\n padding: 16px 0;\n}\n\n.credential-list {\n margin-top: 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n}\n\n.credential-list-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n cursor: pointer;\n font-size: 14px;\n color: var(--mj-text-secondary);\n border-bottom: 1px solid var(--mj-border-subtle);\n transition: background 0.15s;\n}\n\n.credential-list-item:last-child {\n border-bottom: none;\n}\n\n.credential-list-item:hover {\n background: var(--mj-bg-page);\n}\n\n.credential-list-item i {\n color: var(--mj-text-disabled);\n}\n\n/* ---------------------------------------------------------------------------\n Test Connection (Step 3)\n --------------------------------------------------------------------------- */\n\n.test-prompt {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 16px;\n}\n\n.test-hint {\n font-size: 14px;\n color: var(--mj-text-disabled);\n margin: 0;\n}\n\n.test-running {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 16px;\n color: var(--mj-brand-primary);\n}\n\n.test-spinner {\n width: 64px;\n height: 64px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.test-running p {\n font-size: 15px;\n font-weight: 500;\n margin: 0;\n}\n\n/* Test result */\n.test-result {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n padding: 24px;\n border-radius: 12px;\n max-width: 400px;\n}\n\n.test-result-success {\n background: var(--mj-status-success-bg);\n}\n\n.test-result-failure {\n background: var(--mj-status-error-bg);\n}\n\n.test-result-icon {\n font-size: 48px;\n animation: scaleIn 0.3s ease-out;\n}\n\n.test-result-success .test-result-icon {\n color: var(--mj-status-success);\n}\n\n.test-result-failure .test-result-icon {\n color: var(--mj-status-error);\n}\n\n@keyframes scaleIn {\n from {\n transform: scale(0.5);\n opacity: 0;\n }\n to {\n transform: scale(1);\n opacity: 1;\n }\n}\n\n.test-result-message {\n font-size: 15px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n text-align: center;\n}\n\n.test-result-detail {\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.test-retry-btn {\n margin-top: 4px;\n}\n\n/* Toggle switch */\n.toggle-switch {\n position: relative;\n display: inline-block;\n width: 44px;\n height: 24px;\n flex-shrink: 0;\n}\n\n.toggle-switch input {\n opacity: 0;\n width: 0;\n height: 0;\n}\n\n.toggle-slider {\n position: absolute;\n cursor: pointer;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--mj-border-strong);\n border-radius: 24px;\n transition: background 0.2s;\n}\n\n.toggle-slider::before {\n content: '';\n position: absolute;\n height: 18px;\n width: 18px;\n left: 3px;\n bottom: 3px;\n background: var(--mj-bg-surface);\n border-radius: 50%;\n transition: transform 0.2s;\n}\n\n.toggle-switch input:checked + .toggle-slider {\n background: var(--mj-brand-primary);\n}\n\n.toggle-switch input:checked + .toggle-slider::before {\n transform: translateX(20px);\n}\n\n/* ---------------------------------------------------------------------------\n Wizard Footer\n --------------------------------------------------------------------------- */\n\n.wizard-footer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 24px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n.footer-left {\n display: flex;\n align-items: center;\n}\n\n.footer-right {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n/* ---------------------------------------------------------------------------\n Responsive\n --------------------------------------------------------------------------- */\n\n@media (max-width: 768px) {\n .connections-container {\n padding: 16px;\n }\n\n .card-grid {\n grid-template-columns: 1fr;\n }\n\n .integration-picker-grid {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .step-indicator {\n padding: 16px;\n overflow-x: auto;\n }\n\n .step-line {\n width: 24px;\n }\n\n .credential-actions {\n flex-direction: column;\n }\n}\n\n@media (max-width: 480px) {\n .integration-picker-grid {\n grid-template-columns: 1fr;\n }\n\n .card-footer {\n flex-wrap: wrap;\n }\n}\n\n/* ---------------------------------------------------------------------------\n Delete confirmation overlay\n --------------------------------------------------------------------------- */\n\n.delete-confirm-overlay {\n position: absolute;\n inset: 0;\n background: rgba(255, 255, 255, 0.95);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 5;\n border-radius: 12px;\n animation: fadeIn 150ms ease;\n}\n\n@keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n.delete-confirm-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 10px;\n padding: 20px;\n text-align: center;\n}\n\n.delete-warn-icon {\n font-size: 28px;\n color: var(--mj-status-error);\n}\n\n.delete-confirm-text {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n max-width: 220px;\n}\n\n.delete-confirm-actions {\n display: flex;\n gap: 8px;\n margin-top: 4px;\n}\n\n/* ---------------------------------------------------------------------------\n Edit panel (slide-in)\n --------------------------------------------------------------------------- */\n\n.edit-panel-backdrop {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.1);\n z-index: 99;\n opacity: 0;\n pointer-events: none;\n transition: opacity 300ms ease;\n}\n\n.edit-panel-backdrop.open {\n opacity: 1;\n pointer-events: auto;\n}\n\n.edit-panel {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n width: 400px;\n max-width: 100%;\n background: var(--mj-bg-surface);\n border-left: 1px solid var(--mj-border-default);\n box-shadow: -8px 0 24px rgba(0, 0, 0, 0.08);\n z-index: 100;\n transform: translateX(100%);\n transition: transform 300ms cubic-bezier(0.4, 0, 0.2, 1);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.edit-panel.open {\n transform: translateX(0);\n}\n\n.edit-panel-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.edit-panel-title {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.edit-icon-circle {\n width: 32px;\n height: 32px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n font-size: 14px;\n}\n\n.edit-close-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n border: none;\n border-radius: 6px;\n background: transparent;\n color: var(--mj-text-disabled);\n cursor: pointer;\n font-size: 14px;\n transition: all 150ms ease;\n}\n\n.edit-close-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-secondary);\n}\n\n.edit-panel-loading {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 48px 20px;\n}\n\n.edit-panel-body {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n\n.edit-form-group {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.edit-form-label {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.edit-form-input {\n height: 36px;\n padding: 0 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 14px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n outline: none;\n transition: border-color 150ms ease;\n}\n\n.edit-form-input:focus {\n border-color: var(--mj-brand-primary);\n}\n\n.edit-readonly-field {\n padding: 8px 12px;\n background: var(--mj-bg-page);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.edit-toggle-row {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.edit-toggle-label {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-disabled);\n}\n\n.edit-toggle-label.active {\n color: var(--mj-status-success);\n}\n\n.edit-credential-selected {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-page);\n}\n\n.edit-credential-info {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.edit-credential-info i {\n color: var(--mj-brand-primary);\n}\n\n.edit-credential-clear {\n width: 24px;\n height: 24px;\n border: none;\n border-radius: 4px;\n background: transparent;\n color: var(--mj-text-disabled);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n transition: all 150ms ease;\n}\n\n.edit-credential-clear:hover {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error);\n}\n\n.edit-credential-actions {\n display: flex;\n gap: 8px;\n}\n\n.edit-credential-list {\n display: flex;\n flex-direction: column;\n gap: 2px;\n margin-top: 6px;\n max-height: 180px;\n overflow-y: auto;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n}\n\n.edit-credential-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: background 150ms ease;\n}\n\n.edit-credential-item:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.edit-credential-item i {\n color: var(--mj-text-disabled);\n font-size: 12px;\n}\n\n.edit-panel-footer {\n display: flex;\n gap: 8px;\n padding: 16px 20px;\n border-top: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n/* ---------------------------------------------------------------------------\n Card clickable area\n --------------------------------------------------------------------------- */\n\n.card-clickable {\n cursor: pointer;\n}\n\n/* ---------------------------------------------------------------------------\n Detail View (entity maps for a selected integration)\n --------------------------------------------------------------------------- */\n\n.detail-view {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n.detail-header {\n display: flex;\n align-items: center;\n gap: 16px;\n padding-bottom: 20px;\n border-bottom: 1px solid var(--mj-border-subtle);\n margin-bottom: 16px;\n flex-wrap: wrap;\n}\n\n.detail-header-info {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n min-width: 0;\n}\n\n.detail-header-text {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n}\n\n.detail-title {\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.detail-subtitle {\n font-size: 13px;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 4px;\n flex-wrap: wrap;\n}\n\n.detail-header-actions {\n display: flex;\n gap: 8px;\n flex-shrink: 0;\n}\n\n/* Schedule section */\n.schedule-section {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n padding: 16px 20px;\n margin-bottom: 16px;\n}\n\n.schedule-section-header {\n margin-bottom: 12px;\n}\n\n.schedule-section-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 0.8rem;\n font-weight: 700;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n\n.schedule-section-title i {\n color: var(--mj-brand-primary);\n}\n\n.schedule-empty {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 0;\n}\n\n.schedule-empty-text {\n font-size: 0.85rem;\n color: var(--mj-text-disabled);\n}\n\n.schedule-create-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n background: linear-gradient(135deg, var(--mj-brand-primary) 0%, var(--mj-brand-primary-active) 100%);\n color: white;\n border: none;\n border-radius: 8px;\n cursor: pointer;\n font-size: 0.8rem;\n font-weight: 600;\n transition: all 0.2s ease;\n}\n\n.schedule-create-btn:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n}\n\n/* Detail toolbar */\n.detail-toolbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 12px;\n}\n\n.detail-toolbar-left {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.detail-map-count {\n font-size: 13px;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n.detail-search {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n}\n\n.detail-search i {\n color: var(--mj-text-disabled);\n font-size: 12px;\n}\n\n.detail-search input {\n border: none;\n outline: none;\n background: transparent;\n font-size: 13px;\n color: var(--mj-text-primary);\n width: 200px;\n}\n\n.detail-search input::placeholder {\n color: var(--mj-text-disabled);\n}\n\n/* Add Map button */\n.add-map-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface-card);\n color: var(--mj-brand-primary-hover);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 150ms ease;\n white-space: nowrap;\n}\n\n.add-map-btn:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-border-strong);\n}\n\n.add-map-btn.active {\n background: var(--mj-brand-primary);\n color: var(--mj-bg-surface);\n border-color: var(--mj-brand-primary);\n}\n\n.apply-all-btn {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n\n.apply-all-btn:hover {\n background: var(--mj-brand-primary-hover);\n border-color: var(--mj-brand-primary-hover);\n}\n\n.apply-all-btn:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.add-map-btn-lg {\n margin-top: 16px;\n padding: 10px 20px;\n font-size: 14px;\n}\n\n/* Add map inline panel */\n.add-map-panel {\n padding: 16px;\n margin-bottom: 12px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n animation: fadeIn 200ms ease;\n}\n\n.add-map-row {\n display: flex;\n align-items: flex-end;\n gap: 12px;\n}\n\n.add-map-field {\n flex: 1;\n min-width: 0;\n}\n\n.add-map-label {\n display: block;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n margin-bottom: 6px;\n}\n\n.add-map-select {\n width: 100%;\n height: 34px;\n padding: 0 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n outline: none;\n cursor: pointer;\n}\n\n.add-map-select:focus {\n border-color: var(--mj-brand-primary);\n}\n\n.add-map-direction-col {\n flex-shrink: 0;\n}\n\n.add-map-direction-btns {\n display: flex;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.add-map-direction-btns button {\n padding: 7px 12px;\n border: none;\n background: var(--mj-bg-surface);\n color: var(--mj-text-muted);\n font-size: 13px;\n cursor: pointer;\n transition: all 150ms ease;\n border-right: 1px solid var(--mj-border-default);\n}\n\n.add-map-direction-btns button:last-child {\n border-right: none;\n}\n\n.add-map-direction-btns button:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.add-map-direction-btns button.active {\n background: var(--mj-brand-primary);\n color: var(--mj-bg-surface);\n}\n\n.add-map-actions {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n}\n\n.add-map-save-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 7px 16px;\n border: none;\n border-radius: 6px;\n background: var(--mj-brand-primary);\n color: var(--mj-bg-surface);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 150ms ease;\n white-space: nowrap;\n}\n\n.add-map-save-btn:hover {\n background: var(--mj-brand-primary-hover);\n}\n\n.add-map-save-btn:disabled {\n opacity: 0.5;\n cursor: default;\n}\n\n.add-map-cancel-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 34px;\n height: 34px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-muted);\n cursor: pointer;\n font-size: 13px;\n transition: all 150ms ease;\n}\n\n.add-map-cancel-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.add-map-loading {\n font-size: 12px;\n color: var(--mj-text-disabled);\n padding: 8px 0;\n}\n\n.add-map-loading i {\n color: var(--mj-brand-primary);\n margin-right: 4px;\n}\n\n.add-map-hint {\n font-size: 12px;\n color: var(--mj-text-disabled);\n padding: 8px 0;\n font-style: italic;\n}\n\n/* Entity field needs more room for tree dropdown */\n.add-map-entity-field {\n flex: 2;\n min-width: 280px;\n}\n\n/* Entity picker row: tree dropdown + New button side by side */\n.entity-picker-row {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n}\n\n.entity-picker-row mj-tree-dropdown {\n flex: 1;\n min-width: 0;\n}\n\n.new-entity-btn {\n flex-shrink: 0;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 7px 12px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-brand-primary);\n background: var(--mj-brand-primary-subtle);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-radius: 6px;\n cursor: pointer;\n white-space: nowrap;\n transition: all 0.15s ease;\n}\n\n.new-entity-btn:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n/* ---------------------------------------------------------------------------\n Sync Result Banner\n --------------------------------------------------------------------------- */\n\n.sync-result-banner {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n margin-bottom: 12px;\n animation: fadeIn 200ms ease;\n}\n\n.sync-result-banner.sync-success {\n background: var(--mj-status-success-bg);\n border: 1px solid var(--mj-status-success-border);\n color: var(--mj-status-success-text);\n}\n\n.sync-result-banner.sync-failure {\n background: var(--mj-status-error-bg);\n border: 1px solid var(--mj-status-error-border);\n color: var(--mj-status-error-text);\n}\n\n/* ---------------------------------------------------------------------------\n Auto-Map Schema Panel\n --------------------------------------------------------------------------- */\n\n.auto-map-header {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 12px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.auto-map-header i {\n color: var(--mj-brand-primary);\n}\n\n.auto-map-result {\n margin-top: 12px;\n padding: 10px 14px;\n border-radius: 6px;\n font-size: 13px;\n}\n\n.auto-map-result.auto-map-success {\n background: var(--mj-status-success-bg);\n border: 1px solid var(--mj-status-success-border);\n color: var(--mj-status-success-text);\n}\n\n.auto-map-result.auto-map-partial {\n background: var(--mj-status-warning-bg);\n border: 1px solid var(--mj-status-warning-border);\n color: var(--mj-status-warning-text);\n}\n\n.auto-map-result.auto-map-failure {\n background: var(--mj-status-error-bg);\n border: 1px solid var(--mj-status-error-border);\n color: var(--mj-status-error-text);\n}\n\n.auto-map-result-summary {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n}\n\n.auto-map-errors {\n margin-top: 6px;\n font-size: 12px;\n}\n\n.auto-map-error {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 2px 0;\n}\n\n/* ---------------------------------------------------------------------------\n New Entity Dialog\n --------------------------------------------------------------------------- */\n\n.new-entity-backdrop {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.4);\n z-index: 1000;\n animation: fadeIn 0.15s ease;\n}\n\n.new-entity-dialog {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 640px;\n max-width: 90vw;\n max-height: 85vh;\n background: var(--mj-bg-surface);\n border-radius: var(--mj-radius-lg);\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.2);\n z-index: 1001;\n display: flex;\n flex-direction: column;\n animation: fadeIn 0.2s ease;\n}\n\n.new-entity-dialog-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.new-entity-dialog-header h3 {\n margin: 0;\n font-size: var(--mj-text-base);\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.new-entity-dialog-close {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n padding: 0;\n font-size: var(--mj-text-sm);\n color: var(--mj-text-secondary);\n background: transparent;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.new-entity-dialog-close:hover {\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-primary);\n}\n\n.new-entity-dialog-body {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.new-entity-dialog-desc {\n margin: 0;\n font-size: 13px;\n color: var(--mj-text-secondary);\n line-height: 1.5;\n}\n\n.new-entity-dialog-form {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.new-entity-dialog-row {\n display: flex;\n align-items: flex-end;\n gap: 8px;\n}\n\n.new-entity-dialog-field {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 120px;\n}\n\n.new-entity-dialog-field-wide {\n flex: 1;\n}\n\n.new-entity-dialog-label {\n font-size: var(--mj-text-xs);\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.new-entity-dialog-input {\n padding: 8px 12px;\n font-size: var(--mj-text-sm);\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-md);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n transition: border-color 0.15s ease;\n}\n\n.new-entity-dialog-input:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 2px rgba(99, 102, 241, 0.1);\n}\n\n.new-entity-dialog-dot {\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-secondary);\n padding-bottom: 6px;\n user-select: none;\n}\n\n.new-entity-dialog-value {\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-primary);\n padding: 8px 0 4px;\n}\n\n.new-entity-dialog-hint {\n font-style: italic;\n color: var(--mj-text-disabled);\n font-weight: 400;\n}\n\n.new-entity-dialog-footer {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 8px;\n padding: 12px 20px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n.new-entity-preview-btn {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 8px 16px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n background: var(--mj-brand-primary);\n border: none;\n border-radius: 6px;\n cursor: pointer;\n white-space: nowrap;\n transition: background 0.15s ease;\n}\n\n.new-entity-preview-btn:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n}\n\n.new-entity-preview-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.new-entity-dialog-done-btn {\n display: inline-flex;\n align-items: center;\n padding: 8px 16px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n background: transparent;\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-md);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.new-entity-dialog-done-btn:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-text-disabled);\n}\n\n/* Next steps callout inside dialog */\n.new-entity-next-steps {\n background: var(--mj-brand-primary-subtle);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-radius: var(--mj-radius-md);\n padding: 14px 16px;\n}\n\n.new-entity-next-steps h4 {\n margin: 0 0 8px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-brand-primary-hover);\n}\n\n.new-entity-next-steps h4 i {\n margin-right: 6px;\n}\n\n.new-entity-next-steps ol {\n margin: 0;\n padding-left: 20px;\n font-size: 13px;\n color: var(--mj-brand-primary-hover);\n line-height: 1.7;\n}\n\n/* DDL copy button */\n.ddl-copy-btn {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n background: transparent;\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-sm);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.ddl-copy-btn:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-text-disabled);\n}\n\n/* DDL Preview */\n.ddl-warnings {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.ddl-warning {\n font-size: 12px;\n color: var(--mj-status-warning);\n background: var(--mj-status-warning-subtle);\n padding: 6px 10px;\n border-radius: var(--mj-radius-sm);\n border-left: 3px solid var(--mj-status-warning);\n}\n\n.ddl-warning i {\n margin-right: 4px;\n}\n\n.ddl-preview-block {\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n overflow: hidden;\n max-height: 300px;\n display: flex;\n flex-direction: column;\n}\n\n.ddl-preview-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n font-size: var(--mj-text-xs);\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.ddl-preview-code {\n margin: 0;\n padding: 12px 16px;\n font-size: 12px;\n font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', monospace;\n line-height: 1.6;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n overflow: auto;\n white-space: pre-wrap;\n word-break: break-word;\n flex: 1;\n}\n\n@keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n/* Detail empty state */\n.detail-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 64px 24px;\n text-align: center;\n color: var(--mj-text-disabled);\n}\n\n.detail-empty i {\n font-size: 36px;\n margin-bottom: 12px;\n color: var(--mj-text-disabled);\n}\n\n.detail-empty h3 {\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin: 0 0 6px;\n}\n\n.detail-empty p {\n font-size: 13px;\n margin: 0;\n max-width: 400px;\n}\n\n/* Detail table */\n.detail-table-head {\n display: flex;\n align-items: center;\n padding: 8px 16px;\n background: var(--mj-bg-page);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px 8px 0 0;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-text-secondary);\n}\n\n.detail-table-body {\n border: 1px solid var(--mj-border-default);\n border-top: none;\n border-radius: 0 0 8px 8px;\n overflow-y: auto;\n flex: 1;\n min-height: 0;\n}\n\n.detail-map-row {\n display: flex;\n align-items: center;\n padding: 10px 16px;\n border-bottom: 1px solid var(--mj-border-subtle);\n transition: background 0.15s;\n font-size: 13px;\n}\n\n.detail-map-row:last-child {\n border-bottom: none;\n}\n\n.detail-map-row:hover {\n background: var(--mj-bg-page);\n cursor: pointer;\n}\n\n.detail-map-row.sync-disabled {\n opacity: 0.5;\n}\n\n/* Column widths (shared between head and body) */\n.dt-col-toggle {\n width: 60px;\n flex-shrink: 0;\n}\n\n.dt-col-source {\n flex: 2;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.dt-col-direction {\n width: 80px;\n flex-shrink: 0;\n text-align: center;\n}\n\n.dt-col-dest {\n flex: 2;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--mj-text-primary);\n}\n\n.dt-col-meta {\n width: 80px;\n flex-shrink: 0;\n display: flex;\n align-items: center;\n gap: 6px;\n justify-content: flex-end;\n}\n\n/* Direction badge */\n.direction-badge {\n font-size: 11px;\n font-weight: 600;\n padding: 2px 8px;\n border-radius: 4px;\n white-space: nowrap;\n}\n\n/* Clickable direction toggle button */\nbutton.direction-toggle {\n border: 1px solid transparent;\n cursor: pointer;\n transition: border-color 0.15s, box-shadow 0.15s;\n}\nbutton.direction-toggle:hover {\n border-color: var(--mj-border-strong);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n}\n\n.direction-badge.pull {\n background: var(--mj-status-info-bg);\n color: var(--mj-brand-primary);\n}\n\n.direction-badge.push {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success);\n}\n\n.direction-badge.bidirectional {\n background: var(--mj-status-warning-subtle);\n color: var(--mj-status-warning);\n}\n\n/* Create Tables list */\n.create-tables-list {\n max-height: 300px;\n overflow-y: auto;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n margin-top: 8px;\n background: var(--mj-bg-surface);\n}\n.create-tables-select-all {\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n font-weight: 600;\n}\n.create-tables-checkbox {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 12px;\n cursor: pointer;\n font-size: 13px;\n color: var(--mj-text-primary);\n}\n.create-tables-checkbox:hover {\n background: var(--mj-bg-surface-hover);\n}\n.create-tables-checkbox input[type=\"checkbox\"] {\n width: 16px;\n height: 16px;\n cursor: pointer;\n}\n.create-tables-name-hint {\n color: var(--mj-text-muted);\n font-size: 11px;\n margin-left: 8px;\n}\n.create-tables-filters {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 8px 0;\n flex-wrap: wrap;\n}\n.create-tables-search {\n flex: 1 1 240px;\n min-width: 200px;\n}\n.create-tables-toggle {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n}\n.create-tables-toggle input[type=\"checkbox\"] {\n margin: 0;\n}\n.create-tables-badge {\n display: inline-block;\n margin-left: 6px;\n padding: 1px 6px;\n font-size: 10px;\n font-weight: 600;\n border-radius: 10px;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n line-height: 1.4;\n}\n.create-tables-badge-custom {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n.create-tables-badge-registered {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success-text);\n}\n.add-map-input {\n width: 100%;\n padding: 6px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n font-size: 13px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n}\n.add-map-input:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n/* Config badges */\n.detail-config-badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n border-radius: 4px;\n background: var(--mj-bg-surface-active);\n color: var(--mj-text-disabled);\n font-size: 11px;\n}\n\n/* Detail back button (icon-only) */\n.detail-back-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n font-size: 16px;\n transition: background 0.15s, color 0.15s, border-color 0.15s;\n flex-shrink: 0;\n}\n\n.detail-back-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-strong);\n}\n\n/* Detail edit button (icon-only) */\n.detail-edit-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n font-size: 14px;\n transition: background 0.15s, color 0.15s, border-color 0.15s;\n flex-shrink: 0;\n}\n\n.detail-edit-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-strong);\n}\n\n/* Chevron hint on entity map rows */\n.map-edit-hint {\n color: var(--mj-text-disabled);\n font-size: 11px;\n transition: color 0.15s;\n}\n\n.detail-map-row:hover .map-edit-hint {\n color: var(--mj-brand-primary);\n}\n\n/* Entity map editor header */\n.ve-header-title-inline {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 16px;\n font-weight: 600;\n}\n\n.ve-source-label {\n color: var(--mj-brand-primary);\n}\n\n.ve-direction-icon {\n color: var(--mj-text-disabled);\n font-size: 14px;\n}\n\n.ve-dest-label {\n color: var(--mj-status-success);\n}\n\n.ve-stat-inline {\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.ve-stat-inline strong {\n color: var(--mj-text-primary);\n font-weight: 600;\n}\n\n.detail-table-empty {\n padding: 24px;\n text-align: center;\n color: var(--mj-text-disabled);\n font-size: 13px;\n}\n\n/* ---------------------------------------------------------------------------\n Discovered Source Objects Section\n --------------------------------------------------------------------------- */\n\n.discovered-objects-section {\n margin: 12px 0;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n overflow: hidden;\n}\n\n.discovered-objects-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 14px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.discovered-objects-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.discovered-objects-title i {\n color: var(--mj-brand-primary);\n}\n\n.discovered-count {\n font-weight: 400;\n color: var(--mj-text-muted);\n font-size: 12px;\n}\n\n.discovered-objects-actions {\n display: flex;\n gap: 8px;\n}\n\n.discovered-action-btn {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n background: none;\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n padding: 3px 10px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: background 0.15s, color 0.15s;\n}\n\n.discovered-action-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.discovered-action-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.discovered-loading,\n.discovered-empty {\n padding: 16px;\n text-align: center;\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.discovered-loading i {\n margin-right: 6px;\n}\n\n.discovered-objects-list {\n max-height: 280px;\n overflow-y: auto;\n}\n\n.discovered-object-row {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 7px 14px;\n cursor: pointer;\n transition: background 0.1s;\n border-bottom: 1px solid var(--mj-border-subtle);\n font-size: 13px;\n}\n\n.discovered-object-row:last-child {\n border-bottom: none;\n}\n\n.discovered-object-row:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.discovered-object-row.selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n}\n\n.discovered-object-row input[type=\"checkbox\"] {\n flex-shrink: 0;\n width: 16px;\n height: 16px;\n accent-color: var(--mj-brand-primary);\n cursor: pointer;\n}\n\n.discovered-object-name {\n flex: 1;\n color: var(--mj-text-primary);\n font-weight: 500;\n}\n\n.discovered-object-api-name {\n flex: 1;\n color: var(--mj-text-muted);\n font-size: 12px;\n font-family: monospace;\n}\n\n.discovered-object-badges {\n display: flex;\n gap: 4px;\n}\n\n.discovered-badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n border-radius: 4px;\n font-size: 10px;\n}\n\n.discovered-badge.incremental {\n color: var(--mj-status-success);\n background: var(--mj-status-success-bg);\n}\n\n.discovered-badge.writable {\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n}\n"] }]
|
|
3148
|
+
args: [{ standalone: false, selector: 'app-integration-connections', template: "<mj-page-layout>\n <mj-page-header\n Title=\"Integrations\"\n Icon=\"fa-solid fa-plug\"\n Subtitle=\"Connected systems and data sources\">\n @if (!WizardOpen && !SelectedSummary && Connections.length > 0) {\n <div meta>\n <mj-stat-badge\n [Count]=\"Connections.length\"\n [Label]=\"Connections.length === 1 ? 'integration' : 'integrations'\">\n </mj-stat-badge>\n </div>\n }\n <div actions>\n <mj-refresh-button [Loading]=\"IsLoading\" (Clicked)=\"LoadData()\"></mj-refresh-button>\n @if (!WizardOpen && !SelectedSummary) {\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"OpenWizard()\">\n <i class=\"fa-solid fa-plus\"></i> Add Integration\n </button>\n }\n </div>\n </mj-page-header>\n\n <mj-page-body [Flex]=\"true\" [Padding]=\"false\">\n<!-- Main container -->\n<div class=\"connections-container\" [class.detail-active]=\"!!SelectedSummary\"\n [class.editor-active]=\"!!EditorEntityMap\">\n\n <!-- ======================================================================\n CARD GRID VIEW (shown when no wizard and no detail selected)\n ====================================================================== -->\n @if (!WizardOpen && !SelectedSummary) {\n <!-- Loading state -->\n @if (IsLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading integrations...\"></mj-loading>\n </div>\n }\n\n <!-- Empty state -->\n @if (!IsLoading && Connections.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-plug empty-icon\"></i>\n <h3>No integrations yet</h3>\n <p>Connect your first external system to start syncing data.</p>\n <button mjButton variant=\"primary\" (click)=\"OpenWizard()\">\n <i class=\"fa-solid fa-plus\"></i>\n Add Your First Integration\n </button>\n </div>\n }\n\n <!-- Card grid -->\n @if (!IsLoading && Connections.length > 0) {\n <div class=\"card-grid\">\n @for (summary of Connections; track summary.Integration.ID) {\n <div class=\"connection-card\">\n <!-- Card header + body: clickable to open detail view -->\n <div class=\"card-clickable\" (click)=\"SelectIntegrationCard(summary)\">\n <div class=\"card-header\">\n <div class=\"icon-circle\" [style.background-color]=\"GetIconBrandColor(summary.Integration.Integration)\">\n <i [class]=\"GetIntegrationIcon(summary.Integration.Integration, summary.Icon)\" class=\"icon-large\"></i>\n </div>\n <span [class]=\"GetStatusBadgeClass(summary)\">{{ GetStatusBadge(summary) }}</span>\n </div>\n\n <!-- Card body -->\n <div class=\"card-body\">\n <div class=\"card-name\">{{ summary.Integration.Name }}</div>\n <div class=\"card-company\">{{ summary.Integration.Company }}</div>\n <div class=\"card-meta\">\n <span class=\"meta-label\">{{ GetSourceTypeLabel(summary) }}</span>\n <span class=\"meta-separator\">·</span>\n <span class=\"meta-value\">{{ GetCredentialHint(summary) }}</span>\n </div>\n <div class=\"card-sync-info\">\n <i class=\"fa-solid fa-arrows-rotate\"></i>\n Syncing {{ GetEntityMapCount(summary.Integration.ID) }} entities\n </div>\n\n <!-- Inline test result -->\n @if (GetCardTestResult(summary.Integration.ID); as testResult) {\n <div class=\"card-test-result\" [class.test-success]=\"testResult.Success\" [class.test-failure]=\"!testResult.Success\">\n @if (testResult.Success) {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else {\n <i class=\"fa-solid fa-circle-xmark\"></i>\n }\n <span>{{ testResult.Message }}</span>\n </div>\n }\n </div>\n </div><!-- /card-clickable -->\n\n <!-- Delete confirmation overlay -->\n @if (IsDeleteConfirming(summary.Integration.ID)) {\n <div class=\"delete-confirm-overlay\">\n <div class=\"delete-confirm-content\">\n <i class=\"fa-solid fa-triangle-exclamation delete-warn-icon\"></i>\n <span class=\"delete-confirm-text\">Delete this integration and all its entity maps?</span>\n <div class=\"delete-confirm-actions\">\n <button mjButton\n variant=\"danger\"\n [disabled]=\"IsDeleting\"\n (click)=\"ConfirmDelete(summary.Integration.ID)\">\n @if (IsDeleting) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Deleting...\n } @else {\n Delete\n }\n </button>\n <button mjButton variant=\"outline\" (click)=\"CancelDelete()\">\n Cancel\n </button>\n </div>\n </div>\n </div>\n }\n\n <!-- Card footer -->\n <div class=\"card-footer\">\n <button mjButton\n variant=\"outline\"\n [disabled]=\"!!TestingCardID\"\n (click)=\"TestExistingConnection(summary.Integration.ID)\">\n @if (IsTestingCard(summary.Integration.ID)) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else {\n Test\n }\n </button>\n <button mjButton variant=\"outline\" (click)=\"OnMenuAction('edit', summary)\">\n Configure\n </button>\n @if (IsConnectionActive(summary)) {\n <div class=\"sync-menu-wrapper\">\n <button mjButton variant=\"primary\"\n [disabled]=\"!!SyncingIntegrationID\"\n (click)=\"ToggleSyncMenu(summary.Integration.ID, $event)\">\n @if (IsSyncing(summary.Integration.ID)) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Syncing...\n } @else {\n <i class=\"fa-solid fa-arrows-rotate\"></i> Sync\n <i class=\"fa-solid fa-chevron-down sync-caret\"></i>\n }\n </button>\n @if (SyncMenuIntegrationID === summary.Integration.ID) {\n <div class=\"sync-dropdown\">\n <div class=\"sync-dropdown-group\">\n <span class=\"sync-dropdown-label\">Pull (External \u2192 MJ)</span>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(summary.Integration.ID, false, 'Pull', $event)\">\n <i class=\"fa-solid fa-arrow-down-to-line\"></i> Incremental Pull\n </button>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(summary.Integration.ID, true, 'Pull', $event)\">\n <i class=\"fa-solid fa-rotate\"></i> Full Pull\n </button>\n </div>\n <div class=\"sync-dropdown-group\">\n <span class=\"sync-dropdown-label\">Push (MJ \u2192 External)</span>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(summary.Integration.ID, false, 'Push', $event)\">\n <i class=\"fa-solid fa-arrow-up-from-line\"></i> Incremental Push\n </button>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(summary.Integration.ID, true, 'Push', $event)\">\n <i class=\"fa-solid fa-rotate\"></i> Full Push\n </button>\n </div>\n <div class=\"sync-dropdown-group\">\n <span class=\"sync-dropdown-label\">Bidirectional</span>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(summary.Integration.ID, false, 'Bidirectional', $event)\">\n <i class=\"fa-solid fa-arrows-rotate\"></i> Incremental Both\n </button>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(summary.Integration.ID, true, 'Bidirectional', $event)\">\n <i class=\"fa-solid fa-rotate\"></i> Full Both\n </button>\n </div>\n </div>\n }\n </div>\n }\n <button class=\"card-delete-btn\" (click)=\"OnMenuAction('delete', summary)\" title=\"Delete integration\">\n <i class=\"fa-solid fa-trash-can\"></i>\n </button>\n </div>\n </div>\n }\n\n <!-- New connection card -->\n <div class=\"connection-card new-connection-card\" (click)=\"OpenWizard()\">\n <div class=\"new-card-content\">\n <div class=\"new-card-icon\">\n <i class=\"fa-solid fa-plus\"></i>\n </div>\n <span class=\"new-card-label\">Add Integration</span>\n </div>\n </div>\n </div>\n }\n }\n\n <!-- ======================================================================\n DETAIL VIEW (entity maps for selected integration)\n ====================================================================== -->\n @if (!WizardOpen && SelectedSummary) {\n <div class=\"detail-view\">\n\n <!-- ================================================================\n ENTITY MAP EDITOR (field mapping detail for a selected map)\n ================================================================ -->\n @if (EditorEntityMap) {\n <app-visual-field-editor\n [EntityMap]=\"EditorEntityMap\"\n [CompanyIntegrationID]=\"SelectedSummary!.Integration.ID\"\n [RunViewProvider]=\"RunViewToUse\"\n (Close)=\"CloseEntityMapEditor()\">\n </app-visual-field-editor>\n\n <!-- ================================================================\n ENTITY MAPS LIST (shown when no editor map is selected)\n ================================================================ -->\n } @else {\n <!-- Detail header -->\n <div class=\"detail-header\">\n <button class=\"detail-back-btn\" (click)=\"CloseDetailView()\" title=\"Back to Integrations\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n </button>\n <div class=\"detail-header-info\">\n <div class=\"icon-circle\" [style.background-color]=\"GetIconBrandColor(SelectedSummary.Integration.Integration)\">\n <i [class]=\"GetIntegrationIcon(SelectedSummary.Integration.Integration)\" class=\"icon-large\"></i>\n </div>\n <div class=\"detail-header-text\">\n <h2 class=\"detail-title\">{{ SelectedSummary.Integration.Name }}</h2>\n <span class=\"detail-subtitle\">\n {{ SelectedSummary.Integration.Company }}\n <span class=\"meta-separator\">·</span>\n {{ GetSourceTypeLabel(SelectedSummary) }}\n <span class=\"meta-separator\">·</span>\n <span [class]=\"GetStatusBadgeClass(SelectedSummary)\">{{ GetStatusBadge(SelectedSummary) }}</span>\n </span>\n </div>\n </div>\n <div class=\"detail-header-actions\">\n <button class=\"detail-edit-btn\" (click)=\"OpenEditPanel(SelectedSummary)\" title=\"Configure\">\n <i class=\"fa-solid fa-pen-to-square\"></i>\n </button>\n @if (IsConnectionActive(SelectedSummary)) {\n <div class=\"sync-menu-wrapper\">\n <button mjButton variant=\"primary\"\n [disabled]=\"!!SyncingIntegrationID\"\n (click)=\"ToggleSyncMenu(SelectedSummary.Integration.ID, $event)\">\n @if (IsSyncing(SelectedSummary.Integration.ID)) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Syncing...\n } @else {\n <i class=\"fa-solid fa-arrows-rotate\"></i> Sync\n <i class=\"fa-solid fa-chevron-down sync-caret\"></i>\n }\n </button>\n @if (SyncMenuIntegrationID === SelectedSummary.Integration.ID) {\n <div class=\"sync-dropdown sync-dropdown-left\">\n <div class=\"sync-dropdown-group\">\n <span class=\"sync-dropdown-label\">Pull (External \u2192 MJ)</span>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(SelectedSummary.Integration.ID, false, 'Pull', $event)\">\n <i class=\"fa-solid fa-arrow-down-to-line\"></i> Incremental Pull\n </button>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(SelectedSummary.Integration.ID, true, 'Pull', $event)\">\n <i class=\"fa-solid fa-rotate\"></i> Full Pull\n </button>\n </div>\n <div class=\"sync-dropdown-group\">\n <span class=\"sync-dropdown-label\">Push (MJ \u2192 External)</span>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(SelectedSummary.Integration.ID, false, 'Push', $event)\">\n <i class=\"fa-solid fa-arrow-up-from-line\"></i> Incremental Push\n </button>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(SelectedSummary.Integration.ID, true, 'Push', $event)\">\n <i class=\"fa-solid fa-rotate\"></i> Full Push\n </button>\n </div>\n <div class=\"sync-dropdown-group\">\n <span class=\"sync-dropdown-label\">Bidirectional</span>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(SelectedSummary.Integration.ID, false, 'Bidirectional', $event)\">\n <i class=\"fa-solid fa-arrows-rotate\"></i> Incremental Both\n </button>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(SelectedSummary.Integration.ID, true, 'Bidirectional', $event)\">\n <i class=\"fa-solid fa-rotate\"></i> Full Both\n </button>\n </div>\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Schedule section -->\n <div class=\"schedule-section\">\n <div class=\"schedule-section-header\">\n <div class=\"schedule-section-title\">\n <i class=\"fa-solid fa-calendar-check\"></i>\n <span>Sync Schedule</span>\n </div>\n </div>\n @if (ScheduledJobID) {\n <mj-scheduled-job-summary\n [ScheduledJobID]=\"ScheduledJobID\"\n (EditRequested)=\"OpenSchedulePanel()\">\n </mj-scheduled-job-summary>\n } @else {\n <div class=\"schedule-empty\">\n <span class=\"schedule-empty-text\">No sync schedule configured</span>\n <button class=\"schedule-create-btn\" (click)=\"OpenSchedulePanel()\">\n <i class=\"fa-solid fa-plus\"></i>\n Schedule Sync\n </button>\n </div>\n }\n </div>\n\n <!-- Schedule slide panel -->\n <mj-scheduled-job-slide-panel\n [IsOpen]=\"ShowScheduleSlidePanel\"\n [ScheduledJobID]=\"ScheduledJobID\"\n [JobTypeID]=\"IntegrationSyncJobTypeID\"\n [DefaultConfiguration]=\"ScheduleDefaultConfiguration\"\n [HideJobType]=\"true\"\n (Close)=\"CloseSchedulePanel()\"\n (Saved)=\"OnScheduleSaved()\"\n (Deleted)=\"OnScheduleDeleted()\">\n </mj-scheduled-job-slide-panel>\n\n <!-- Entity maps toolbar -->\n <div class=\"detail-toolbar\">\n <div class=\"detail-toolbar-left\">\n <span class=\"detail-map-count\">\n {{ DetailEntityMaps.length }} entity map{{ DetailEntityMaps.length !== 1 ? 's' : '' }}\n <span class=\"meta-separator\">·</span>\n {{ DetailActiveMapCount }} active\n </span>\n </div>\n <div class=\"detail-toolbar-right\">\n <div class=\"detail-search\">\n <i class=\"fa-solid fa-filter\"></i>\n <input type=\"text\"\n placeholder=\"Filter entity maps...\"\n [value]=\"DetailSearchTerm\"\n (input)=\"OnDetailSearch($event)\" />\n </div>\n <button class=\"add-map-btn\" (click)=\"ToggleCreateTablesPanel()\" [class.active]=\"ShowCreateTablesPanel\"\n title=\"Select source objects and create entity tables\">\n <i class=\"fa-solid fa-table\"></i> Create Tables\n </button>\n <button class=\"add-map-btn\" (click)=\"ToggleAutoMapPanel()\" [class.active]=\"ShowAutoMapPanel\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i> Auto-Map Schema\n </button>\n <button class=\"add-map-btn\" (click)=\"ToggleAddMapPanel()\" [class.active]=\"ShowAddMapPanel\">\n <i class=\"fa-solid fa-plus\"></i> Add Map\n </button>\n </div>\n </div>\n\n <!-- Sync result banner -->\n @if (SyncResult) {\n <div class=\"sync-result-banner\" [class.sync-success]=\"SyncResult.Success\" [class.sync-failure]=\"!SyncResult.Success\">\n @if (SyncResult.Success) {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else {\n <i class=\"fa-solid fa-circle-xmark\"></i>\n }\n <span>{{ SyncResult.Message || (SyncResult.Success ? 'Sync completed successfully' : 'Sync failed') }}</span>\n </div>\n }\n\n <!-- Auto-Map Schema panel -->\n @if (ShowAutoMapPanel) {\n <div class=\"add-map-panel\">\n <div class=\"auto-map-header\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i>\n <span>Auto-map all entities in a schema to this integration with 1:1 field mappings</span>\n </div>\n <div class=\"add-map-row\">\n <div class=\"add-map-field\">\n <label class=\"add-map-label\">Target Schema</label>\n <select class=\"add-map-select\" [(ngModel)]=\"AutoMapSelectedSchema\">\n <option [ngValue]=\"''\" disabled>Select schema...</option>\n @for (schema of AutoMapSchemas; track schema) {\n <option [value]=\"schema\">{{ schema }}</option>\n }\n </select>\n </div>\n\n <div class=\"add-map-direction-col\">\n <label class=\"add-map-label\">Direction</label>\n <div class=\"add-map-direction-btns\">\n <button [class.active]=\"AutoMapDirection === 'Pull'\" (click)=\"AutoMapDirection = 'Pull'\" title=\"Pull from source\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </button>\n <button [class.active]=\"AutoMapDirection === 'Bidirectional'\" (click)=\"AutoMapDirection = 'Bidirectional'\" title=\"Bidirectional sync\">\n <i class=\"fa-solid fa-right-left\"></i>\n </button>\n <button [class.active]=\"AutoMapDirection === 'Push'\" (click)=\"AutoMapDirection = 'Push'\" title=\"Push to source\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n </button>\n </div>\n </div>\n\n <div class=\"add-map-actions\">\n <button class=\"add-map-save-btn\"\n [disabled]=\"!CanAutoMap\"\n (click)=\"RunAutoMap()\">\n @if (IsAutoMapping) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Mapping...\n } @else {\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i> Auto-Map\n }\n </button>\n <button class=\"add-map-cancel-btn\" (click)=\"CloseAutoMapPanel()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n </div>\n\n @if (AutoMapResult) {\n <div class=\"auto-map-result\" [class.auto-map-success]=\"AutoMapResult.Errors.length === 0\"\n [class.auto-map-partial]=\"AutoMapResult.Errors.length > 0 && AutoMapResult.EntityMapsCreated > 0\"\n [class.auto-map-failure]=\"AutoMapResult.EntityMapsCreated === 0 && AutoMapResult.Errors.length > 0\">\n @if (AutoMapResult.EntityMapsCreated > 0) {\n <div class=\"auto-map-result-summary\">\n <i class=\"fa-solid fa-circle-check\"></i>\n Created {{ AutoMapResult.EntityMapsCreated }} entity map{{ AutoMapResult.EntityMapsCreated !== 1 ? 's' : '' }}\n with {{ AutoMapResult.FieldMapsCreated }} field map{{ AutoMapResult.FieldMapsCreated !== 1 ? 's' : '' }}\n </div>\n } @else if (AutoMapResult.Errors.length === 0) {\n <div class=\"auto-map-result-summary\">\n <i class=\"fa-solid fa-circle-info\"></i>\n All entities in this schema are already mapped.\n </div>\n }\n @if (AutoMapResult.Errors.length > 0) {\n <div class=\"auto-map-errors\">\n @for (err of AutoMapResult.Errors; track err) {\n <div class=\"auto-map-error\"><i class=\"fa-solid fa-triangle-exclamation\"></i> {{ err }}</div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Create Tables panel (select source objects \u2192 create entity tables) -->\n @if (ShowCreateTablesPanel) {\n <div class=\"add-map-panel\">\n <div class=\"auto-map-header\">\n <i class=\"fa-solid fa-table\"></i>\n <span>Select source objects to create as entity tables in your database</span>\n </div>\n\n <div class=\"add-map-row\">\n <div class=\"add-map-actions\">\n <button class=\"add-map-save-btn\"\n [disabled]=\"!CanCreateTables\"\n (click)=\"RunCreateTables()\">\n @if (IsCreatingTables) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Creating...\n } @else {\n <i class=\"fa-solid fa-table\"></i> Create {{ CreateTablesSelectedCount }} Table{{ CreateTablesSelectedCount !== 1 ? 's' : '' }}\n }\n </button>\n <button class=\"add-map-cancel-btn\" (click)=\"CloseCreateTablesPanel()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n </div>\n\n @if (IsLoadingCreateTablesObjects) {\n <mj-loading text=\"Loading source objects...\" size=\"small\"></mj-loading>\n } @else if (CreateTablesObjects.length === 0) {\n <div class=\"auto-map-result auto-map-success\">\n <i class=\"fa-solid fa-circle-info\"></i>\n No source objects available from this connector.\n </div>\n } @else {\n <div class=\"create-tables-filters\">\n <input type=\"text\"\n class=\"create-tables-search mj-input\"\n placeholder=\"Search by name or label...\"\n [(ngModel)]=\"CreateTablesSearch\" />\n </div>\n <div class=\"create-tables-list\">\n <div class=\"create-tables-select-all\">\n <label class=\"create-tables-checkbox\">\n <input type=\"checkbox\"\n [checked]=\"FilteredCreateTablesObjects.length > 0 && CreateTablesSelectedCount === FilteredCreateTablesObjects.length\"\n (change)=\"ToggleAllCreateTablesObjects($any($event.target).checked)\" />\n <span>Select All ({{ FilteredCreateTablesObjects.length }} of {{ CreateTablesObjects.length }})</span>\n </label>\n </div>\n @for (obj of FilteredCreateTablesObjects; track obj.Name) {\n <label class=\"create-tables-checkbox\">\n <input type=\"checkbox\" [(ngModel)]=\"obj.Selected\" />\n <span>{{ obj.Label }}</span>\n @if (obj.Label !== obj.Name) {\n <span class=\"create-tables-name-hint\">{{ obj.Name }}</span>\n }\n @if (obj.IsCustom) {\n <span class=\"create-tables-badge create-tables-badge-custom\">Custom</span>\n }\n @if (obj.AlreadyPersisted) {\n <span class=\"create-tables-badge create-tables-badge-registered\">Registered</span>\n }\n </label>\n }\n </div>\n }\n\n @if (CreateTablesResult) {\n <div class=\"auto-map-result\"\n [class.auto-map-success]=\"CreateTablesResult.Success\"\n [class.auto-map-failure]=\"!CreateTablesResult.Success\">\n @if (CreateTablesResult.Success) {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else {\n <i class=\"fa-solid fa-circle-xmark\"></i>\n }\n <span>{{ CreateTablesResult.Message }}</span>\n </div>\n }\n </div>\n }\n\n <!-- Add Entity Map inline form -->\n @if (ShowAddMapPanel) {\n <div class=\"add-map-panel\">\n <div class=\"add-map-row\">\n <div class=\"add-map-field\">\n <label class=\"add-map-label\">Source Object</label>\n @if (IsLoadingSourceObjects) {\n <div class=\"add-map-loading\"><i class=\"fa-solid fa-spinner fa-spin\"></i> Loading...</div>\n } @else if (AvailableSourceObjects.length === 0) {\n <div class=\"add-map-hint\">No source objects found in metadata</div>\n } @else {\n <select class=\"add-map-select\" [(ngModel)]=\"AddMapSourceObjectName\">\n <option [ngValue]=\"''\" disabled>Select source object...</option>\n @for (obj of AvailableSourceObjects; track obj.Name) {\n <option [value]=\"obj.Name\">{{ obj.Label || obj.Name }}</option>\n }\n </select>\n }\n </div>\n\n <div class=\"add-map-direction-col\">\n <label class=\"add-map-label\">Direction</label>\n <div class=\"add-map-direction-btns\">\n <button [class.active]=\"AddMapDirection === 'Pull'\" (click)=\"AddMapDirection = 'Pull'\" title=\"Pull from source\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </button>\n <button [class.active]=\"AddMapDirection === 'Bidirectional'\" (click)=\"AddMapDirection = 'Bidirectional'\" title=\"Bidirectional sync\">\n <i class=\"fa-solid fa-right-left\"></i>\n </button>\n <button [class.active]=\"AddMapDirection === 'Push'\" (click)=\"AddMapDirection = 'Push'\" title=\"Push to source\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n </button>\n </div>\n </div>\n\n <div class=\"add-map-field add-map-entity-field\">\n <label class=\"add-map-label\">MJ Entity</label>\n <div class=\"entity-picker-row\">\n <mj-tree-dropdown\n #entityTreeDropdown\n [BranchConfig]=\"EntityBranchConfig\"\n [LeafConfig]=\"EntityLeafConfig\"\n [Value]=\"AddMapEntityIDAsKey\"\n [SelectableTypes]=\"'leaf'\"\n [SelectionMode]=\"'single'\"\n [Placeholder]=\"'Search entities by schema...'\"\n [EnableSearch]=\"true\"\n (SelectionChange)=\"OnEntityTreeSelection($event)\">\n </mj-tree-dropdown>\n <button class=\"new-entity-btn\" (click)=\"OpenNewEntityDialog()\" title=\"Create new entity table\">\n <i class=\"fa-solid fa-plus\"></i> New\n </button>\n </div>\n </div>\n\n <div class=\"add-map-actions\">\n <button class=\"add-map-save-btn\"\n [disabled]=\"!CanSaveAddMap || IsSavingAddMap\"\n (click)=\"SaveAddMap()\">\n @if (IsSavingAddMap) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else {\n <i class=\"fa-solid fa-check\"></i> Add\n }\n </button>\n <button class=\"add-map-cancel-btn\" (click)=\"CloseAddMapPanel()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n </div>\n </div>\n }\n\n <!-- Entity maps table -->\n @if (IsDetailLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading entity maps...\"></mj-loading>\n </div>\n } @else if (DetailEntityMaps.length === 0 && !ShowAddMapPanel) {\n <div class=\"detail-empty\">\n <i class=\"fa-solid fa-cube\"></i>\n <h3>No entity maps configured</h3>\n <p>Entity maps define how external objects sync to MJ entities.</p>\n <button class=\"add-map-btn add-map-btn-lg\" (click)=\"ToggleAddMapPanel()\">\n <i class=\"fa-solid fa-plus\"></i> Add Your First Entity Map\n </button>\n </div>\n } @else if (DetailEntityMaps.length > 0) {\n <!-- Table header -->\n <div class=\"detail-table-head\">\n <span class=\"dt-col-toggle\">Sync</span>\n <span class=\"dt-col-source\">External Object</span>\n <span class=\"dt-col-direction\"></span>\n <span class=\"dt-col-dest\">MJ Entity</span>\n <span class=\"dt-col-meta\">Config</span>\n </div>\n\n <!-- Table body -->\n <div class=\"detail-table-body\">\n @for (em of DetailFilteredMaps; track em.ID) {\n <div class=\"detail-map-row\" [class.sync-disabled]=\"!em.SyncEnabled\" (click)=\"OnEntityMapClick(em)\">\n <span class=\"dt-col-toggle\" (click)=\"$event.stopPropagation()\">\n <label class=\"toggle-switch\" [title]=\"em.SyncEnabled ? 'Sync enabled' : 'Sync disabled'\">\n <input type=\"checkbox\"\n [checked]=\"em.SyncEnabled\"\n (change)=\"OnToggleMapEnabled(em, $event)\" />\n <span class=\"toggle-slider\"></span>\n </label>\n </span>\n <span class=\"dt-col-source\" [title]=\"em.ExternalObjectName\">\n {{ em.ExternalObjectLabel ?? em.ExternalObjectName }}\n </span>\n <span class=\"dt-col-direction\" (click)=\"$event.stopPropagation()\">\n <button class=\"direction-toggle\" [class]=\"DirectionBadgeClass(em.SyncDirection)\"\n (click)=\"CycleSyncDirection(em)\"\n [title]=\"'Click to change sync direction (currently: ' + em.SyncDirection + ')'\">\n {{ DirectionText(em.SyncDirection) }}\n </button>\n </span>\n <span class=\"dt-col-dest\" [title]=\"em.Entity\">\n {{ em.Entity }}\n </span>\n <span class=\"dt-col-meta\">\n @if (em.MatchStrategy) {\n <span class=\"detail-config-badge\" title=\"Match strategy configured\">\n <i class=\"fa-solid fa-link\"></i>\n </span>\n }\n <span class=\"detail-config-badge\" [title]=\"'Conflict: ' + em.ConflictResolution\">\n <i class=\"fa-solid fa-arrows-rotate\"></i>\n </span>\n <span class=\"map-edit-hint\">\n <i class=\"fa-solid fa-chevron-right\"></i>\n </span>\n </span>\n </div>\n } @empty {\n <div class=\"detail-table-empty\">\n No entity maps match your filter.\n </div>\n }\n </div>\n }\n }\n\n </div>\n }\n\n <!-- ======================================================================\n WIZARD (inline, replaces card grid when open)\n ====================================================================== -->\n @if (WizardOpen) {\n <div class=\"wizard-inline\">\n <!-- Wizard header -->\n <div class=\"wizard-header\">\n <button class=\"wizard-back-btn\" (click)=\"CloseWizard()\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n Back to Integrations\n </button>\n <h2 class=\"wizard-title\">New Integration</h2>\n </div>\n\n <!-- Step indicator -->\n <div class=\"step-indicator\">\n @for (step of WizardSteps; track step.Number) {\n <div class=\"step-item\" [class.step-active]=\"IsStepActive(step.Number)\" [class.step-completed]=\"IsStepCompleted(step.Number)\">\n <div class=\"step-circle\">\n @if (IsStepCompleted(step.Number)) {\n <i class=\"fa-solid fa-check\"></i>\n } @else {\n {{ step.Number }}\n }\n </div>\n <span class=\"step-label\">{{ step.Label }}</span>\n </div>\n @if (step.Number < WizardSteps.length) {\n <div class=\"step-line\" [class.step-line-active]=\"IsStepCompleted(step.Number)\"></div>\n }\n }\n </div>\n\n <!-- Step content -->\n <div class=\"wizard-body\">\n\n <!-- Step 1: Choose Integration -->\n @if (WizardStep === 1) {\n <div class=\"step-content\">\n <h3 class=\"step-title\">What system do you want to connect?</h3>\n <div class=\"search-bar\">\n <i class=\"fa-solid fa-search search-icon\"></i>\n <input type=\"text\"\n class=\"search-input\"\n placeholder=\"Search integrations...\"\n [(ngModel)]=\"SearchQuery\" />\n </div>\n\n @if (FilteredIntegrations.length === 0 && AvailableIntegrations.length === 0) {\n <div class=\"no-integrations\">\n <i class=\"fa-solid fa-puzzle-piece\"></i>\n <p>No integrations configured</p>\n <span class=\"no-integrations-hint\">Configure integration definitions in the admin area first.</span>\n </div>\n } @else if (FilteredIntegrations.length === 0) {\n <div class=\"no-integrations\">\n <i class=\"fa-solid fa-search\"></i>\n <p>No matching integrations</p>\n </div>\n } @else {\n <div class=\"integration-picker-grid\">\n @for (def of FilteredIntegrations; track def.ID) {\n <div class=\"integration-picker-card\"\n [class.picker-selected]=\"IsSelectedIntegration(def)\"\n (click)=\"SelectIntegration(def)\">\n <div class=\"picker-icon-circle\" [style.background-color]=\"GetIconBrandColor(def.Name)\">\n <i [class]=\"GetIntegrationIcon(def.Name, def.Get('Icon'))\"></i>\n </div>\n <div class=\"picker-name\">{{ def.Name }}</div>\n @if (def.Description) {\n <div class=\"picker-description\">{{ def.Description }}</div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Step 2: Configure Connection -->\n @if (WizardStep === 2) {\n <div class=\"step-content\">\n <h3 class=\"step-title\">Set up your connection</h3>\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"connectionName\">Connection Name</label>\n <input id=\"connectionName\"\n type=\"text\"\n class=\"form-input\"\n placeholder=\"e.g. Production HubSpot\"\n [(ngModel)]=\"ConnectionName\" />\n </div>\n\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"companySelect\">Company</label>\n @if (NeedsCompanyPicker) {\n <select id=\"companySelect\" class=\"form-input\" [(ngModel)]=\"SelectedCompanyID\">\n <option [ngValue]=\"null\" disabled>Select a company...</option>\n @for (company of Companies; track company.ID) {\n <option [value]=\"company.ID\">{{ company.Name }}</option>\n }\n </select>\n } @else if (Companies.length === 1) {\n <input type=\"text\" class=\"form-input\" [value]=\"Companies[0].Name\" disabled />\n } @else {\n <div class=\"form-hint\">No companies available. Create one in the admin area.</div>\n }\n </div>\n\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"connectionDescription\">Description <span class=\"optional-label\">(optional)</span></label>\n <textarea id=\"connectionDescription\"\n class=\"form-input form-textarea\"\n placeholder=\"Notes about this connection...\"\n [(ngModel)]=\"ConnectionDescription\"\n rows=\"3\"></textarea>\n </div>\n\n <!-- Credential section -->\n <div class=\"form-group\">\n <label class=\"form-label\">Credential</label>\n @if (SelectedCredential) {\n <div class=\"credential-selected\">\n <div class=\"credential-info\">\n <i class=\"fa-solid fa-key\"></i>\n <span>{{ SelectedCredential.Name }}</span>\n </div>\n <button class=\"credential-clear\" (click)=\"ClearCredential()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n } @else {\n <div class=\"credential-actions\">\n <button mjButton variant=\"outline\" (click)=\"ShowExistingCredentials()\">\n <i class=\"fa-solid fa-key\"></i>\n Choose Existing Credential\n </button>\n <button mjButton variant=\"outline\" (click)=\"OpenCredentialDialog()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create New Credential\n </button>\n </div>\n }\n\n @if (IsLoadingCredentials) {\n <div class=\"credential-loading\">\n <mj-loading text=\"Loading credentials...\" size=\"small\"></mj-loading>\n </div>\n }\n\n @if (!IsLoadingCredentials && ExistingCredentials.length > 0 && !SelectedCredential) {\n <div class=\"credential-list\">\n @for (cred of ExistingCredentials; track cred.ID) {\n <div class=\"credential-list-item\" (click)=\"SelectExistingCredential(cred)\">\n <i class=\"fa-solid fa-key\"></i>\n <span>{{ cred.Name }}</span>\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Step 3: Test Connection -->\n @if (WizardStep === 3) {\n <div class=\"step-content step-content-centered\">\n <h3 class=\"step-title\">Let's verify everything works</h3>\n\n @if (!TestResult && !IsTesting) {\n <div class=\"test-prompt\">\n <button mjButton\n variant=\"primary\"\n size=\"lg\"\n (click)=\"TestNewConnection()\">\n <i class=\"fa-solid fa-vial\"></i>\n Test Connection\n </button>\n <p class=\"test-hint\">We'll verify we can reach your system and authenticate.</p>\n </div>\n }\n\n @if (IsTesting) {\n <div class=\"test-running\">\n <div class=\"test-spinner\">\n <i class=\"fa-solid fa-spinner fa-spin fa-3x\"></i>\n </div>\n <p>Testing connection...</p>\n </div>\n }\n\n @if (TestResult) {\n <div class=\"test-result\" [class.test-result-success]=\"TestResult.Success\" [class.test-result-failure]=\"!TestResult.Success\">\n <div class=\"test-result-icon\">\n @if (TestResult.Success) {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else {\n <i class=\"fa-solid fa-circle-xmark\"></i>\n }\n </div>\n <div class=\"test-result-message\">{{ TestResult.Message }}</div>\n @if (TestResult.Success && TestResult.ServerVersion) {\n <div class=\"test-result-detail\">\n Server version: {{ TestResult.ServerVersion }}\n </div>\n }\n @if (!TestResult.Success) {\n <button mjButton variant=\"outline\" (click)=\"TestNewConnection()\" class=\"test-retry-btn\">\n <i class=\"fa-solid fa-rotate-right\"></i>\n Retry\n </button>\n }\n </div>\n }\n </div>\n }\n\n </div>\n\n <!-- Wizard footer -->\n <div class=\"wizard-footer\">\n <div class=\"footer-left\"></div>\n <div class=\"footer-right\">\n @if (WizardStep > 1) {\n <button mjButton variant=\"outline\" (click)=\"PreviousStep()\">\n Back\n </button>\n }\n <button mjButton\n variant=\"primary\"\n [disabled]=\"IsNextDisabled || IsSaving\"\n (click)=\"FinishWizard()\">\n @if (IsSaving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Saving...\n } @else {\n {{ NextButtonLabel }}\n }\n </button>\n </div>\n </div>\n </div>\n }\n\n</div>\n\n<!-- Edit panel (slide-in) -->\n<div class=\"edit-panel-backdrop\"\n [class.open]=\"EditPanelOpen\"\n (click)=\"CloseEditPanel()\"></div>\n<div class=\"edit-panel\" [class.open]=\"EditPanelOpen\">\n @if (EditingSummary) {\n <!-- Header -->\n <div class=\"edit-panel-header\">\n <div class=\"edit-panel-title\">\n <div class=\"edit-icon-circle\"\n [style.background-color]=\"GetIconBrandColor(EditingSummary.Integration.Integration)\">\n <i [class]=\"GetIntegrationIcon(EditingSummary.Integration.Integration, EditingSummary.Icon)\"></i>\n </div>\n <span>Configure Integration</span>\n </div>\n <button class=\"edit-close-btn\" (click)=\"CloseEditPanel()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n\n @if (IsEditLoading) {\n <div class=\"edit-panel-loading\">\n <mj-loading text=\"Loading...\" size=\"small\"></mj-loading>\n </div>\n } @else {\n <!-- Edit form -->\n <div class=\"edit-panel-body\">\n <div class=\"edit-form-group\">\n <label class=\"edit-form-label\">Connection Name</label>\n <input type=\"text\"\n class=\"edit-form-input\"\n [(ngModel)]=\"EditName\"\n placeholder=\"Connection name...\" />\n </div>\n\n <div class=\"edit-form-group\">\n <label class=\"edit-form-label\">Status</label>\n <div class=\"edit-toggle-row\">\n <label class=\"toggle-switch\">\n <input type=\"checkbox\" [(ngModel)]=\"EditIsActive\" />\n <span class=\"toggle-slider\"></span>\n </label>\n <span class=\"edit-toggle-label\" [class.active]=\"EditIsActive\">\n {{ EditIsActive ? 'Active' : 'Inactive' }}\n </span>\n </div>\n </div>\n\n <div class=\"edit-form-group\">\n <label class=\"edit-form-label\">Credential</label>\n @if (EditCredential) {\n <div class=\"edit-credential-selected\">\n <div class=\"edit-credential-info\">\n <i class=\"fa-solid fa-key\"></i>\n <span>{{ EditCredential.Name }}</span>\n </div>\n <button class=\"edit-credential-clear\" (click)=\"ClearEditCredential()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n } @else {\n <div class=\"edit-credential-actions\">\n <button mjButton variant=\"outline\" size=\"sm\" (click)=\"OpenEditCredentialDialog()\">\n <i class=\"fa-solid fa-plus\"></i> New Credential\n </button>\n </div>\n @if (EditCredentials.length > 0) {\n <div class=\"edit-credential-list\">\n @for (cred of EditCredentials; track cred.ID) {\n <div class=\"edit-credential-item\" (click)=\"SelectEditCredential(cred)\">\n <i class=\"fa-solid fa-key\"></i>\n <span>{{ cred.Name }}</span>\n </div>\n }\n </div>\n }\n }\n </div>\n\n <div class=\"edit-form-group\">\n <label class=\"edit-form-label\">Integration</label>\n <div class=\"edit-readonly-field\">\n {{ EditingSummary.Integration.Integration }}\n </div>\n </div>\n\n <div class=\"edit-form-group\">\n <label class=\"edit-form-label\">Company</label>\n <div class=\"edit-readonly-field\">\n {{ EditingSummary.Integration.Company }}\n </div>\n </div>\n </div>\n\n <!-- Footer -->\n <div class=\"edit-panel-footer\">\n <button mjButton\n variant=\"primary\"\n [disabled]=\"IsEditSaving || !EditName.trim()\"\n (click)=\"SaveEditChanges()\">\n @if (IsEditSaving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Saving...\n } @else {\n Save Changes\n }\n </button>\n <button mjButton variant=\"outline\" (click)=\"CloseEditPanel()\">\n Cancel\n </button>\n </div>\n }\n }\n</div>\n\n<!-- Credential dialog (shared between wizard and edit panel) -->\n@if (ShowCredentialDialog) {\n <mj-credential-dialog\n [Visible]=\"true\"\n [PreselectedTypeId]=\"PreselectedCredentialTypeId\"\n (close)=\"EditPanelOpen ? OnEditCredentialDialogClose($event) : OnCredentialDialogClose($event)\">\n </mj-credential-dialog>\n}\n\n<!-- New Entity dialog -->\n@if (ShowCreateEntity) {\n <div class=\"new-entity-backdrop\" (click)=\"CloseNewEntityDialog()\"></div>\n <div class=\"new-entity-dialog\">\n <div class=\"new-entity-dialog-header\">\n <h3>Create New Entity Table</h3>\n <button class=\"new-entity-dialog-close\" (click)=\"CloseNewEntityDialog()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n <div class=\"new-entity-dialog-body\">\n <p class=\"new-entity-dialog-desc\">\n Generate a SQL migration to create a new database table for this integration's data.\n After running the migration and CodeGen, the new entity will appear in the entity picker.\n </p>\n\n <div class=\"new-entity-dialog-form\">\n <div class=\"new-entity-dialog-row\">\n <div class=\"new-entity-dialog-field\">\n <label class=\"new-entity-dialog-label\">Source Object</label>\n <div class=\"new-entity-dialog-value\">\n @if (AddMapSourceObjectName) {\n {{ AddMapSourceObjectName }}\n } @else {\n <span class=\"new-entity-dialog-hint\">Select a source object in the Add Map form first</span>\n }\n </div>\n </div>\n </div>\n <div class=\"new-entity-dialog-row\">\n <div class=\"new-entity-dialog-field\">\n <label class=\"new-entity-dialog-label\">Schema</label>\n <input type=\"text\"\n class=\"new-entity-dialog-input\"\n placeholder=\"e.g. hubspot\"\n [(ngModel)]=\"NewEntitySchema\" />\n </div>\n <span class=\"new-entity-dialog-dot\">.</span>\n <div class=\"new-entity-dialog-field new-entity-dialog-field-wide\">\n <label class=\"new-entity-dialog-label\">Table Name</label>\n <input type=\"text\"\n class=\"new-entity-dialog-input\"\n placeholder=\"e.g. Contact\"\n [(ngModel)]=\"NewEntityTable\" />\n </div>\n </div>\n </div>\n\n @if (DDLPreviewWarnings.length > 0) {\n <div class=\"ddl-warnings\">\n @for (warn of DDLPreviewWarnings; track warn) {\n <div class=\"ddl-warning\"><i class=\"fa-solid fa-triangle-exclamation\"></i> {{ warn }}</div>\n }\n </div>\n }\n\n @if (DDLPreview) {\n <div class=\"ddl-preview-block\">\n <div class=\"ddl-preview-header\">\n <span>SQL Preview</span>\n <button class=\"ddl-copy-btn\" (click)=\"CopyDDLToClipboard()\" title=\"Copy to clipboard\">\n @if (DDLCopied) {\n <i class=\"fa-solid fa-check\"></i> Copied\n } @else {\n <i class=\"fa-regular fa-copy\"></i> Copy\n }\n </button>\n </div>\n <pre class=\"ddl-preview-code\">{{ DDLPreview }}</pre>\n </div>\n }\n\n @if (DDLPreview) {\n <div class=\"new-entity-next-steps\">\n <h4><i class=\"fa-solid fa-list-check\"></i> Next Steps</h4>\n <ol>\n <li>Copy the SQL above and save it as a migration file</li>\n <li>Run the migration against your database</li>\n <li>Run CodeGen to register the new entity in MemberJunction</li>\n <li>Refresh the page — the new entity will appear in the entity picker</li>\n </ol>\n </div>\n }\n </div>\n <div class=\"new-entity-dialog-footer\">\n <button class=\"new-entity-preview-btn\"\n [disabled]=\"!CanGenerateSQL || IsGeneratingDDL\"\n (click)=\"PreviewDDL()\">\n @if (IsGeneratingDDL) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Generating...\n } @else {\n <i class=\"fa-solid fa-code\"></i> Generate SQL\n }\n </button>\n <button class=\"new-entity-dialog-done-btn\" (click)=\"CloseNewEntityDialog()\">\n Done\n </button>\n </div>\n </div>\n}\n </mj-page-body>\n</mj-page-layout>\n", styles: ["/* ---------------------------------------------------------------------------\n Host & Container \u2014 flex chain for scrollable detail view\n --------------------------------------------------------------------------- */\n\n:host {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n/* Slot passthrough now in <mj-page-header>; stat badges now via <mj-stat-badge>. */\n\n.connections-container {\n padding: 24px;\n max-width: 1400px;\n width: 100%;\n margin: 0 auto;\n flex: 1;\n display: flex;\n flex-direction: column;\n min-height: 0;\n overflow-y: auto;\n box-sizing: border-box;\n}\n\n/* When detail or editor view is active, prevent container scrolling\n so the inner .detail-table-body handles its own scroll */\n.connections-container.detail-active,\n.connections-container.editor-active {\n overflow: hidden;\n}\n\n/* ---------------------------------------------------------------------------\n Loading & Empty States\n --------------------------------------------------------------------------- */\n\n.loading-container {\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 300px;\n}\n\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n min-height: 400px;\n text-align: center;\n color: var(--mj-text-muted);\n}\n\n.empty-icon {\n font-size: 48px;\n color: var(--mj-text-disabled);\n margin-bottom: 16px;\n}\n\n.empty-state h3 {\n font-size: 20px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin: 0 0 8px;\n}\n\n.empty-state p {\n font-size: 14px;\n margin: 0 0 24px;\n}\n\n/* ---------------------------------------------------------------------------\n Card Grid\n --------------------------------------------------------------------------- */\n\n.card-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));\n gap: 20px;\n}\n\n/* ---------------------------------------------------------------------------\n Connection Card\n --------------------------------------------------------------------------- */\n\n.connection-card {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);\n transition: box-shadow 0.2s ease, transform 0.2s ease;\n display: flex;\n flex-direction: column;\n position: relative;\n overflow: hidden;\n}\n\n.connection-card:hover {\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n transform: translateY(-2px);\n}\n\n/* Card Header */\n.card-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 16px 0;\n}\n\n.icon-circle {\n width: 48px;\n height: 48px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n flex-shrink: 0;\n}\n\n.icon-large {\n font-size: 22px;\n}\n\n/* Status Badge */\n.status-badge {\n font-size: 12px;\n font-weight: 600;\n padding: 4px 10px;\n border-radius: 20px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.status-badge-connected {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success);\n}\n\n.status-badge-error {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error);\n}\n\n.status-badge-inactive {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-muted);\n}\n\n.status-badge-syncing {\n background: var(--mj-status-info-bg);\n color: var(--mj-brand-primary);\n}\n\n/* Card Body */\n.card-body {\n padding: 12px 16px;\n flex: 1;\n}\n\n.card-name {\n font-size: 18px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin-bottom: 2px;\n}\n\n.card-company {\n font-size: 14px;\n color: var(--mj-text-disabled);\n margin-bottom: 10px;\n}\n\n.card-meta {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-bottom: 6px;\n}\n\n.meta-separator {\n margin: 0 6px;\n}\n\n.meta-label {\n font-weight: 500;\n}\n\n.card-sync-info {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-bottom: 8px;\n}\n\n.card-sync-info i {\n margin-right: 4px;\n color: var(--mj-text-disabled);\n}\n\n/* Card inline test result */\n.card-test-result {\n font-size: 12px;\n padding: 6px 10px;\n border-radius: 6px;\n display: flex;\n align-items: center;\n gap: 6px;\n margin-top: 8px;\n}\n\n.card-test-result.test-success {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success);\n}\n\n.card-test-result.test-failure {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error);\n}\n\n.card-test-result span {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n/* Card Footer */\n.card-footer {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 16px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n.card-footer button {\n font-size: 13px;\n}\n\n/* Sync dropdown menu */\n.sync-menu-wrapper {\n position: relative;\n display: inline-flex;\n}\n\n.sync-caret {\n font-size: 10px;\n margin-left: 4px;\n opacity: 0.8;\n}\n\n.sync-dropdown {\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n z-index: 1000;\n background: var(--mj-bg-surface-elevated);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n box-shadow: 0 8px 24px rgba(0,0,0,0.12);\n min-width: 220px;\n overflow: hidden;\n}\n\n.sync-dropdown-left {\n left: auto;\n right: 0;\n}\n\n.sync-dropdown-group {\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.sync-dropdown-group:last-child {\n border-bottom: none;\n}\n\n.sync-dropdown-label {\n display: block;\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--mj-text-muted);\n padding: 0 12px 4px;\n}\n\n.sync-dropdown-item {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 7px 12px;\n background: none;\n border: none;\n cursor: pointer;\n font-size: 13px;\n color: var(--mj-text-primary);\n text-align: left;\n transition: background 0.12s;\n}\n\n.sync-dropdown-item:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.sync-dropdown-item i {\n width: 16px;\n text-align: center;\n color: var(--mj-text-secondary);\n flex-shrink: 0;\n}\n\n/* Card Delete Button */\n.card-delete-btn {\n margin-left: auto;\n background: none;\n border: 1px solid transparent;\n cursor: pointer;\n padding: 4px 8px;\n border-radius: 6px;\n color: var(--mj-text-disabled);\n font-size: 14px;\n transition: all 0.15s;\n}\n\n.card-delete-btn:hover {\n background: var(--mj-status-error-bg);\n border-color: var(--mj-status-error-border);\n color: var(--mj-status-error);\n}\n\n.menu-trigger:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-secondary);\n}\n\n.card-menu-dropdown {\n position: absolute;\n right: 0;\n top: 100%;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);\n min-width: 160px;\n z-index: 50;\n padding: 4px;\n}\n\n.menu-item {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 8px 12px;\n border: none;\n background: none;\n cursor: pointer;\n font-size: 13px;\n color: var(--mj-text-secondary);\n border-radius: 6px;\n transition: background 0.15s;\n text-align: left;\n}\n\n.menu-item:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.menu-item i {\n width: 16px;\n text-align: center;\n color: var(--mj-text-muted);\n}\n\n.menu-item-danger {\n color: var(--mj-status-error);\n}\n\n.menu-item-danger i {\n color: var(--mj-status-error);\n}\n\n.menu-item-danger:hover {\n background: var(--mj-status-error-bg);\n}\n\n/* ---------------------------------------------------------------------------\n New Connection Card\n --------------------------------------------------------------------------- */\n\n.new-connection-card {\n border: 2px dashed var(--mj-border-strong);\n background: var(--mj-bg-page);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 200px;\n transition: background 0.2s, border-color 0.2s;\n}\n\n.new-connection-card:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-brand-primary);\n box-shadow: none;\n transform: none;\n}\n\n.new-card-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n}\n\n.new-card-icon {\n width: 56px;\n height: 56px;\n border-radius: 50%;\n background: var(--mj-bg-surface-active);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 24px;\n color: var(--mj-text-muted);\n transition: background 0.2s, color 0.2s;\n}\n\n.new-connection-card:hover .new-card-icon {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.new-card-label {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-muted);\n}\n\n.new-connection-card:hover .new-card-label {\n color: var(--mj-brand-primary);\n}\n\n/* ---------------------------------------------------------------------------\n Wizard (inline, replaces card grid)\n --------------------------------------------------------------------------- */\n\n.wizard-inline {\n display: flex;\n flex-direction: column;\n height: 100%;\n max-width: 720px;\n margin: 0 auto;\n}\n\n/* Wizard Header */\n.wizard-header {\n display: flex;\n align-items: center;\n gap: 16px;\n padding: 0 0 20px;\n}\n\n.wizard-back-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n background: none;\n border: none;\n cursor: pointer;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-muted);\n padding: 6px 10px;\n border-radius: 6px;\n transition: background 0.15s, color 0.15s;\n}\n\n.wizard-back-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.wizard-title {\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0;\n}\n\n/* ---------------------------------------------------------------------------\n Step Indicator\n --------------------------------------------------------------------------- */\n\n.step-indicator {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 20px 32px;\n gap: 0;\n}\n\n.step-item {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 6px;\n position: relative;\n}\n\n.step-circle {\n width: 32px;\n height: 32px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 13px;\n font-weight: 600;\n background: var(--mj-bg-surface-active);\n color: var(--mj-text-disabled);\n border: 2px solid var(--mj-border-default);\n transition: all 0.2s;\n}\n\n.step-active .step-circle {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n\n.step-completed .step-circle {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n border-color: var(--mj-status-success);\n}\n\n.step-label {\n font-size: 11px;\n font-weight: 500;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n}\n\n.step-active .step-label {\n color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n.step-completed .step-label {\n color: var(--mj-status-success);\n}\n\n.step-line {\n width: 48px;\n height: 2px;\n background: var(--mj-border-default);\n margin: 0 8px;\n margin-bottom: 20px;\n transition: background 0.2s;\n}\n\n.step-line-active {\n background: var(--mj-status-success);\n}\n\n/* ---------------------------------------------------------------------------\n Wizard Body\n --------------------------------------------------------------------------- */\n\n.wizard-body {\n flex: 1;\n overflow-y: auto;\n padding: 0 24px 24px;\n}\n\n.step-content {\n min-height: 300px;\n}\n\n.step-content-centered {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n}\n\n.step-title {\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 20px;\n}\n\n.step-content-centered .step-title {\n margin-bottom: 32px;\n}\n\n/* Search bar */\n.search-bar {\n position: relative;\n margin-bottom: 20px;\n}\n\n.search-icon {\n position: absolute;\n left: 14px;\n top: 50%;\n transform: translateY(-50%);\n color: var(--mj-text-disabled);\n font-size: 14px;\n}\n\n.search-input {\n width: 100%;\n padding: 10px 14px 10px 40px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n font-size: 14px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n transition: border-color 0.2s, box-shadow 0.2s;\n box-sizing: border-box;\n}\n\n.search-input:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);\n}\n\n.search-input::placeholder {\n color: var(--mj-text-disabled);\n}\n\n/* No integrations */\n.no-integrations {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 48px 24px;\n color: var(--mj-text-disabled);\n text-align: center;\n}\n\n.no-integrations i {\n font-size: 36px;\n margin-bottom: 12px;\n}\n\n.no-integrations p {\n font-size: 16px;\n font-weight: 500;\n color: var(--mj-text-muted);\n margin: 0 0 4px;\n}\n\n.no-integrations-hint {\n font-size: 13px;\n}\n\n/* Integration picker grid */\n.integration-picker-grid {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 12px;\n}\n\n.integration-picker-card {\n border: 2px solid var(--mj-border-default);\n border-radius: 10px;\n padding: 16px;\n cursor: pointer;\n text-align: center;\n transition: border-color 0.2s, background 0.15s;\n}\n\n.integration-picker-card:hover {\n border-color: var(--mj-brand-primary);\n background: var(--mj-bg-page);\n}\n\n.integration-picker-card.picker-selected {\n border-color: var(--mj-brand-primary);\n background: var(--mj-status-info-bg);\n}\n\n.picker-icon-circle {\n width: 40px;\n height: 40px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n margin: 0 auto 10px;\n font-size: 18px;\n}\n\n.picker-name {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n}\n\n.picker-description {\n font-size: 12px;\n color: var(--mj-text-disabled);\n line-height: 1.3;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n\n/* ---------------------------------------------------------------------------\n Form Controls (Step 2)\n --------------------------------------------------------------------------- */\n\n.form-group {\n margin-bottom: 20px;\n}\n\n.form-label {\n display: block;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 6px;\n}\n\n.optional-label {\n font-weight: 400;\n color: var(--mj-text-disabled);\n}\n\n.form-input {\n width: 100%;\n padding: 10px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n font-size: 14px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n transition: border-color 0.2s, box-shadow 0.2s;\n box-sizing: border-box;\n}\n\n.form-input:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);\n}\n\n.form-input::placeholder {\n color: var(--mj-text-disabled);\n}\n\n.form-input:disabled {\n background: var(--mj-bg-page);\n color: var(--mj-text-muted);\n}\n\n.form-textarea {\n resize: vertical;\n min-height: 72px;\n}\n\n.form-hint {\n font-size: 13px;\n color: var(--mj-text-disabled);\n padding: 8px 0;\n}\n\n/* Credential section */\n.credential-selected {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 14px;\n background: var(--mj-status-success-bg);\n border: 1px solid var(--mj-status-success-border);\n border-radius: 8px;\n}\n\n.credential-info {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-status-success-text);\n font-size: 14px;\n font-weight: 500;\n}\n\n.credential-info i {\n color: var(--mj-status-success);\n}\n\n.credential-clear {\n background: none;\n border: none;\n cursor: pointer;\n color: var(--mj-text-disabled);\n font-size: 14px;\n padding: 4px;\n border-radius: 4px;\n transition: color 0.15s;\n}\n\n.credential-clear:hover {\n color: var(--mj-status-error);\n}\n\n.credential-actions {\n display: flex;\n gap: 8px;\n}\n\n.credential-actions button {\n font-size: 13px;\n}\n\n.credential-loading {\n padding: 16px 0;\n}\n\n.credential-list {\n margin-top: 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n}\n\n.credential-list-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n cursor: pointer;\n font-size: 14px;\n color: var(--mj-text-secondary);\n border-bottom: 1px solid var(--mj-border-subtle);\n transition: background 0.15s;\n}\n\n.credential-list-item:last-child {\n border-bottom: none;\n}\n\n.credential-list-item:hover {\n background: var(--mj-bg-page);\n}\n\n.credential-list-item i {\n color: var(--mj-text-disabled);\n}\n\n/* ---------------------------------------------------------------------------\n Test Connection (Step 3)\n --------------------------------------------------------------------------- */\n\n.test-prompt {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 16px;\n}\n\n.test-hint {\n font-size: 14px;\n color: var(--mj-text-disabled);\n margin: 0;\n}\n\n.test-running {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 16px;\n color: var(--mj-brand-primary);\n}\n\n.test-spinner {\n width: 64px;\n height: 64px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.test-running p {\n font-size: 15px;\n font-weight: 500;\n margin: 0;\n}\n\n/* Test result */\n.test-result {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n padding: 24px;\n border-radius: 12px;\n max-width: 400px;\n}\n\n.test-result-success {\n background: var(--mj-status-success-bg);\n}\n\n.test-result-failure {\n background: var(--mj-status-error-bg);\n}\n\n.test-result-icon {\n font-size: 48px;\n animation: scaleIn 0.3s ease-out;\n}\n\n.test-result-success .test-result-icon {\n color: var(--mj-status-success);\n}\n\n.test-result-failure .test-result-icon {\n color: var(--mj-status-error);\n}\n\n@keyframes scaleIn {\n from {\n transform: scale(0.5);\n opacity: 0;\n }\n to {\n transform: scale(1);\n opacity: 1;\n }\n}\n\n.test-result-message {\n font-size: 15px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n text-align: center;\n}\n\n.test-result-detail {\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.test-retry-btn {\n margin-top: 4px;\n}\n\n/* Toggle switch */\n.toggle-switch {\n position: relative;\n display: inline-block;\n width: 44px;\n height: 24px;\n flex-shrink: 0;\n}\n\n.toggle-switch input {\n opacity: 0;\n width: 0;\n height: 0;\n}\n\n.toggle-slider {\n position: absolute;\n cursor: pointer;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--mj-border-strong);\n border-radius: 24px;\n transition: background 0.2s;\n}\n\n.toggle-slider::before {\n content: '';\n position: absolute;\n height: 18px;\n width: 18px;\n left: 3px;\n bottom: 3px;\n background: var(--mj-bg-surface);\n border-radius: 50%;\n transition: transform 0.2s;\n}\n\n.toggle-switch input:checked + .toggle-slider {\n background: var(--mj-brand-primary);\n}\n\n.toggle-switch input:checked + .toggle-slider::before {\n transform: translateX(20px);\n}\n\n/* ---------------------------------------------------------------------------\n Wizard Footer\n --------------------------------------------------------------------------- */\n\n.wizard-footer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 24px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n.footer-left {\n display: flex;\n align-items: center;\n}\n\n.footer-right {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n/* ---------------------------------------------------------------------------\n Responsive\n --------------------------------------------------------------------------- */\n\n@media (max-width: 768px) {\n .connections-container {\n padding: 16px;\n }\n\n .card-grid {\n grid-template-columns: 1fr;\n }\n\n .integration-picker-grid {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .step-indicator {\n padding: 16px;\n overflow-x: auto;\n }\n\n .step-line {\n width: 24px;\n }\n\n .credential-actions {\n flex-direction: column;\n }\n}\n\n@media (max-width: 480px) {\n .integration-picker-grid {\n grid-template-columns: 1fr;\n }\n\n .card-footer {\n flex-wrap: wrap;\n }\n}\n\n/* ---------------------------------------------------------------------------\n Delete confirmation overlay\n --------------------------------------------------------------------------- */\n\n.delete-confirm-overlay {\n position: absolute;\n inset: 0;\n background: rgba(255, 255, 255, 0.95);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 5;\n border-radius: 12px;\n animation: fadeIn 150ms ease;\n}\n\n@keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n.delete-confirm-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 10px;\n padding: 20px;\n text-align: center;\n}\n\n.delete-warn-icon {\n font-size: 28px;\n color: var(--mj-status-error);\n}\n\n.delete-confirm-text {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n max-width: 220px;\n}\n\n.delete-confirm-actions {\n display: flex;\n gap: 8px;\n margin-top: 4px;\n}\n\n/* ---------------------------------------------------------------------------\n Edit panel (slide-in)\n --------------------------------------------------------------------------- */\n\n.edit-panel-backdrop {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.1);\n z-index: 99;\n opacity: 0;\n pointer-events: none;\n transition: opacity 300ms ease;\n}\n\n.edit-panel-backdrop.open {\n opacity: 1;\n pointer-events: auto;\n}\n\n.edit-panel {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n width: 400px;\n max-width: 100%;\n background: var(--mj-bg-surface);\n border-left: 1px solid var(--mj-border-default);\n box-shadow: -8px 0 24px rgba(0, 0, 0, 0.08);\n z-index: 100;\n transform: translateX(100%);\n transition: transform 300ms cubic-bezier(0.4, 0, 0.2, 1);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.edit-panel.open {\n transform: translateX(0);\n}\n\n.edit-panel-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.edit-panel-title {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.edit-icon-circle {\n width: 32px;\n height: 32px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n font-size: 14px;\n}\n\n.edit-close-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n border: none;\n border-radius: 6px;\n background: transparent;\n color: var(--mj-text-disabled);\n cursor: pointer;\n font-size: 14px;\n transition: all 150ms ease;\n}\n\n.edit-close-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-secondary);\n}\n\n.edit-panel-loading {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 48px 20px;\n}\n\n.edit-panel-body {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n\n.edit-form-group {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.edit-form-label {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.edit-form-input {\n height: 36px;\n padding: 0 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 14px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n outline: none;\n transition: border-color 150ms ease;\n}\n\n.edit-form-input:focus {\n border-color: var(--mj-brand-primary);\n}\n\n.edit-readonly-field {\n padding: 8px 12px;\n background: var(--mj-bg-page);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.edit-toggle-row {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.edit-toggle-label {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-disabled);\n}\n\n.edit-toggle-label.active {\n color: var(--mj-status-success);\n}\n\n.edit-credential-selected {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-page);\n}\n\n.edit-credential-info {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.edit-credential-info i {\n color: var(--mj-brand-primary);\n}\n\n.edit-credential-clear {\n width: 24px;\n height: 24px;\n border: none;\n border-radius: 4px;\n background: transparent;\n color: var(--mj-text-disabled);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n transition: all 150ms ease;\n}\n\n.edit-credential-clear:hover {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error);\n}\n\n.edit-credential-actions {\n display: flex;\n gap: 8px;\n}\n\n.edit-credential-list {\n display: flex;\n flex-direction: column;\n gap: 2px;\n margin-top: 6px;\n max-height: 180px;\n overflow-y: auto;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n}\n\n.edit-credential-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: background 150ms ease;\n}\n\n.edit-credential-item:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.edit-credential-item i {\n color: var(--mj-text-disabled);\n font-size: 12px;\n}\n\n.edit-panel-footer {\n display: flex;\n gap: 8px;\n padding: 16px 20px;\n border-top: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n/* ---------------------------------------------------------------------------\n Card clickable area\n --------------------------------------------------------------------------- */\n\n.card-clickable {\n cursor: pointer;\n}\n\n/* ---------------------------------------------------------------------------\n Detail View (entity maps for a selected integration)\n --------------------------------------------------------------------------- */\n\n.detail-view {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n.detail-header {\n display: flex;\n align-items: center;\n gap: 16px;\n padding-bottom: 20px;\n border-bottom: 1px solid var(--mj-border-subtle);\n margin-bottom: 16px;\n flex-wrap: wrap;\n}\n\n.detail-header-info {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n min-width: 0;\n}\n\n.detail-header-text {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n}\n\n.detail-title {\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.detail-subtitle {\n font-size: 13px;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 4px;\n flex-wrap: wrap;\n}\n\n.detail-header-actions {\n display: flex;\n gap: 8px;\n flex-shrink: 0;\n}\n\n/* Schedule section */\n.schedule-section {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n padding: 16px 20px;\n margin-bottom: 16px;\n}\n\n.schedule-section-header {\n margin-bottom: 12px;\n}\n\n.schedule-section-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 0.8rem;\n font-weight: 700;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n\n.schedule-section-title i {\n color: var(--mj-brand-primary);\n}\n\n.schedule-empty {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 0;\n}\n\n.schedule-empty-text {\n font-size: 0.85rem;\n color: var(--mj-text-disabled);\n}\n\n.schedule-create-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n background: linear-gradient(135deg, var(--mj-brand-primary) 0%, var(--mj-brand-primary-active) 100%);\n color: white;\n border: none;\n border-radius: 8px;\n cursor: pointer;\n font-size: 0.8rem;\n font-weight: 600;\n transition: all 0.2s ease;\n}\n\n.schedule-create-btn:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n}\n\n/* Detail toolbar */\n.detail-toolbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 12px;\n}\n\n.detail-toolbar-left {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.detail-map-count {\n font-size: 13px;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n.detail-search {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n}\n\n.detail-search i {\n color: var(--mj-text-disabled);\n font-size: 12px;\n}\n\n.detail-search input {\n border: none;\n outline: none;\n background: transparent;\n font-size: 13px;\n color: var(--mj-text-primary);\n width: 200px;\n}\n\n.detail-search input::placeholder {\n color: var(--mj-text-disabled);\n}\n\n/* Add Map button */\n.add-map-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface-card);\n color: var(--mj-brand-primary-hover);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 150ms ease;\n white-space: nowrap;\n}\n\n.add-map-btn:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-border-strong);\n}\n\n.add-map-btn.active {\n background: var(--mj-brand-primary);\n color: var(--mj-bg-surface);\n border-color: var(--mj-brand-primary);\n}\n\n.apply-all-btn {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n\n.apply-all-btn:hover {\n background: var(--mj-brand-primary-hover);\n border-color: var(--mj-brand-primary-hover);\n}\n\n.apply-all-btn:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.add-map-btn-lg {\n margin-top: 16px;\n padding: 10px 20px;\n font-size: 14px;\n}\n\n/* Add map inline panel */\n.add-map-panel {\n padding: 16px;\n margin-bottom: 12px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n animation: fadeIn 200ms ease;\n}\n\n.add-map-row {\n display: flex;\n align-items: flex-end;\n gap: 12px;\n}\n\n.add-map-field {\n flex: 1;\n min-width: 0;\n}\n\n.add-map-label {\n display: block;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n margin-bottom: 6px;\n}\n\n.add-map-select {\n width: 100%;\n height: 34px;\n padding: 0 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n outline: none;\n cursor: pointer;\n}\n\n.add-map-select:focus {\n border-color: var(--mj-brand-primary);\n}\n\n.add-map-direction-col {\n flex-shrink: 0;\n}\n\n.add-map-direction-btns {\n display: flex;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.add-map-direction-btns button {\n padding: 7px 12px;\n border: none;\n background: var(--mj-bg-surface);\n color: var(--mj-text-muted);\n font-size: 13px;\n cursor: pointer;\n transition: all 150ms ease;\n border-right: 1px solid var(--mj-border-default);\n}\n\n.add-map-direction-btns button:last-child {\n border-right: none;\n}\n\n.add-map-direction-btns button:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.add-map-direction-btns button.active {\n background: var(--mj-brand-primary);\n color: var(--mj-bg-surface);\n}\n\n.add-map-actions {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n}\n\n.add-map-save-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 7px 16px;\n border: none;\n border-radius: 6px;\n background: var(--mj-brand-primary);\n color: var(--mj-bg-surface);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 150ms ease;\n white-space: nowrap;\n}\n\n.add-map-save-btn:hover {\n background: var(--mj-brand-primary-hover);\n}\n\n.add-map-save-btn:disabled {\n opacity: 0.5;\n cursor: default;\n}\n\n.add-map-cancel-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 34px;\n height: 34px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-muted);\n cursor: pointer;\n font-size: 13px;\n transition: all 150ms ease;\n}\n\n.add-map-cancel-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.add-map-loading {\n font-size: 12px;\n color: var(--mj-text-disabled);\n padding: 8px 0;\n}\n\n.add-map-loading i {\n color: var(--mj-brand-primary);\n margin-right: 4px;\n}\n\n.add-map-hint {\n font-size: 12px;\n color: var(--mj-text-disabled);\n padding: 8px 0;\n font-style: italic;\n}\n\n/* Entity field needs more room for tree dropdown */\n.add-map-entity-field {\n flex: 2;\n min-width: 280px;\n}\n\n/* Entity picker row: tree dropdown + New button side by side */\n.entity-picker-row {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n}\n\n.entity-picker-row mj-tree-dropdown {\n flex: 1;\n min-width: 0;\n}\n\n.new-entity-btn {\n flex-shrink: 0;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 7px 12px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-brand-primary);\n background: var(--mj-brand-primary-subtle);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-radius: 6px;\n cursor: pointer;\n white-space: nowrap;\n transition: all 0.15s ease;\n}\n\n.new-entity-btn:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n/* ---------------------------------------------------------------------------\n Sync Result Banner\n --------------------------------------------------------------------------- */\n\n.sync-result-banner {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n margin-bottom: 12px;\n animation: fadeIn 200ms ease;\n}\n\n.sync-result-banner.sync-success {\n background: var(--mj-status-success-bg);\n border: 1px solid var(--mj-status-success-border);\n color: var(--mj-status-success-text);\n}\n\n.sync-result-banner.sync-failure {\n background: var(--mj-status-error-bg);\n border: 1px solid var(--mj-status-error-border);\n color: var(--mj-status-error-text);\n}\n\n/* ---------------------------------------------------------------------------\n Auto-Map Schema Panel\n --------------------------------------------------------------------------- */\n\n.auto-map-header {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 12px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.auto-map-header i {\n color: var(--mj-brand-primary);\n}\n\n.auto-map-result {\n margin-top: 12px;\n padding: 10px 14px;\n border-radius: 6px;\n font-size: 13px;\n}\n\n.auto-map-result.auto-map-success {\n background: var(--mj-status-success-bg);\n border: 1px solid var(--mj-status-success-border);\n color: var(--mj-status-success-text);\n}\n\n.auto-map-result.auto-map-partial {\n background: var(--mj-status-warning-bg);\n border: 1px solid var(--mj-status-warning-border);\n color: var(--mj-status-warning-text);\n}\n\n.auto-map-result.auto-map-failure {\n background: var(--mj-status-error-bg);\n border: 1px solid var(--mj-status-error-border);\n color: var(--mj-status-error-text);\n}\n\n.auto-map-result-summary {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n}\n\n.auto-map-errors {\n margin-top: 6px;\n font-size: 12px;\n}\n\n.auto-map-error {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 2px 0;\n}\n\n/* ---------------------------------------------------------------------------\n New Entity Dialog\n --------------------------------------------------------------------------- */\n\n.new-entity-backdrop {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.4);\n z-index: 1000;\n animation: fadeIn 0.15s ease;\n}\n\n.new-entity-dialog {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 640px;\n max-width: 90vw;\n max-height: 85vh;\n background: var(--mj-bg-surface);\n border-radius: var(--mj-radius-lg);\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.2);\n z-index: 1001;\n display: flex;\n flex-direction: column;\n animation: fadeIn 0.2s ease;\n}\n\n.new-entity-dialog-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.new-entity-dialog-header h3 {\n margin: 0;\n font-size: var(--mj-text-base);\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.new-entity-dialog-close {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n padding: 0;\n font-size: var(--mj-text-sm);\n color: var(--mj-text-secondary);\n background: transparent;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.new-entity-dialog-close:hover {\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-primary);\n}\n\n.new-entity-dialog-body {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.new-entity-dialog-desc {\n margin: 0;\n font-size: 13px;\n color: var(--mj-text-secondary);\n line-height: 1.5;\n}\n\n.new-entity-dialog-form {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.new-entity-dialog-row {\n display: flex;\n align-items: flex-end;\n gap: 8px;\n}\n\n.new-entity-dialog-field {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 120px;\n}\n\n.new-entity-dialog-field-wide {\n flex: 1;\n}\n\n.new-entity-dialog-label {\n font-size: var(--mj-text-xs);\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.new-entity-dialog-input {\n padding: 8px 12px;\n font-size: var(--mj-text-sm);\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-md);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n transition: border-color 0.15s ease;\n}\n\n.new-entity-dialog-input:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 2px rgba(99, 102, 241, 0.1);\n}\n\n.new-entity-dialog-dot {\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-secondary);\n padding-bottom: 6px;\n user-select: none;\n}\n\n.new-entity-dialog-value {\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-primary);\n padding: 8px 0 4px;\n}\n\n.new-entity-dialog-hint {\n font-style: italic;\n color: var(--mj-text-disabled);\n font-weight: 400;\n}\n\n.new-entity-dialog-footer {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 8px;\n padding: 12px 20px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n.new-entity-preview-btn {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 8px 16px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n background: var(--mj-brand-primary);\n border: none;\n border-radius: 6px;\n cursor: pointer;\n white-space: nowrap;\n transition: background 0.15s ease;\n}\n\n.new-entity-preview-btn:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n}\n\n.new-entity-preview-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.new-entity-dialog-done-btn {\n display: inline-flex;\n align-items: center;\n padding: 8px 16px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n background: transparent;\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-md);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.new-entity-dialog-done-btn:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-text-disabled);\n}\n\n/* Next steps callout inside dialog */\n.new-entity-next-steps {\n background: var(--mj-brand-primary-subtle);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-radius: var(--mj-radius-md);\n padding: 14px 16px;\n}\n\n.new-entity-next-steps h4 {\n margin: 0 0 8px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-brand-primary-hover);\n}\n\n.new-entity-next-steps h4 i {\n margin-right: 6px;\n}\n\n.new-entity-next-steps ol {\n margin: 0;\n padding-left: 20px;\n font-size: 13px;\n color: var(--mj-brand-primary-hover);\n line-height: 1.7;\n}\n\n/* DDL copy button */\n.ddl-copy-btn {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n background: transparent;\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-sm);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.ddl-copy-btn:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-text-disabled);\n}\n\n/* DDL Preview */\n.ddl-warnings {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.ddl-warning {\n font-size: 12px;\n color: var(--mj-status-warning);\n background: var(--mj-status-warning-subtle);\n padding: 6px 10px;\n border-radius: var(--mj-radius-sm);\n border-left: 3px solid var(--mj-status-warning);\n}\n\n.ddl-warning i {\n margin-right: 4px;\n}\n\n.ddl-preview-block {\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n overflow: hidden;\n max-height: 300px;\n display: flex;\n flex-direction: column;\n}\n\n.ddl-preview-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n font-size: var(--mj-text-xs);\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.ddl-preview-code {\n margin: 0;\n padding: 12px 16px;\n font-size: 12px;\n font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', monospace;\n line-height: 1.6;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n overflow: auto;\n white-space: pre-wrap;\n word-break: break-word;\n flex: 1;\n}\n\n@keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n/* Detail empty state */\n.detail-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 64px 24px;\n text-align: center;\n color: var(--mj-text-disabled);\n}\n\n.detail-empty i {\n font-size: 36px;\n margin-bottom: 12px;\n color: var(--mj-text-disabled);\n}\n\n.detail-empty h3 {\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin: 0 0 6px;\n}\n\n.detail-empty p {\n font-size: 13px;\n margin: 0;\n max-width: 400px;\n}\n\n/* Detail table */\n.detail-table-head {\n display: flex;\n align-items: center;\n padding: 8px 16px;\n background: var(--mj-bg-page);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px 8px 0 0;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-text-secondary);\n}\n\n.detail-table-body {\n border: 1px solid var(--mj-border-default);\n border-top: none;\n border-radius: 0 0 8px 8px;\n overflow-y: auto;\n flex: 1;\n min-height: 0;\n}\n\n.detail-map-row {\n display: flex;\n align-items: center;\n padding: 10px 16px;\n border-bottom: 1px solid var(--mj-border-subtle);\n transition: background 0.15s;\n font-size: 13px;\n}\n\n.detail-map-row:last-child {\n border-bottom: none;\n}\n\n.detail-map-row:hover {\n background: var(--mj-bg-page);\n cursor: pointer;\n}\n\n.detail-map-row.sync-disabled {\n opacity: 0.5;\n}\n\n/* Column widths (shared between head and body) */\n.dt-col-toggle {\n width: 60px;\n flex-shrink: 0;\n}\n\n.dt-col-source {\n flex: 2;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.dt-col-direction {\n width: 80px;\n flex-shrink: 0;\n text-align: center;\n}\n\n.dt-col-dest {\n flex: 2;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--mj-text-primary);\n}\n\n.dt-col-meta {\n width: 80px;\n flex-shrink: 0;\n display: flex;\n align-items: center;\n gap: 6px;\n justify-content: flex-end;\n}\n\n/* Direction badge */\n.direction-badge {\n font-size: 11px;\n font-weight: 600;\n padding: 2px 8px;\n border-radius: 4px;\n white-space: nowrap;\n}\n\n/* Clickable direction toggle button */\nbutton.direction-toggle {\n border: 1px solid transparent;\n cursor: pointer;\n transition: border-color 0.15s, box-shadow 0.15s;\n}\nbutton.direction-toggle:hover {\n border-color: var(--mj-border-strong);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n}\n\n.direction-badge.pull {\n background: var(--mj-status-info-bg);\n color: var(--mj-brand-primary);\n}\n\n.direction-badge.push {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success);\n}\n\n.direction-badge.bidirectional {\n background: var(--mj-status-warning-subtle);\n color: var(--mj-status-warning);\n}\n\n/* Create Tables list */\n.create-tables-list {\n max-height: 300px;\n overflow-y: auto;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n margin-top: 8px;\n background: var(--mj-bg-surface);\n}\n.create-tables-select-all {\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n font-weight: 600;\n}\n.create-tables-checkbox {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 12px;\n cursor: pointer;\n font-size: 13px;\n color: var(--mj-text-primary);\n}\n.create-tables-checkbox:hover {\n background: var(--mj-bg-surface-hover);\n}\n.create-tables-checkbox input[type=\"checkbox\"] {\n width: 16px;\n height: 16px;\n cursor: pointer;\n}\n.create-tables-name-hint {\n color: var(--mj-text-muted);\n font-size: 11px;\n margin-left: 8px;\n}\n.create-tables-filters {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 8px 0;\n flex-wrap: wrap;\n}\n.create-tables-search {\n flex: 1 1 240px;\n min-width: 200px;\n}\n.create-tables-toggle {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n}\n.create-tables-toggle input[type=\"checkbox\"] {\n margin: 0;\n}\n.create-tables-badge {\n display: inline-block;\n margin-left: 6px;\n padding: 1px 6px;\n font-size: 10px;\n font-weight: 600;\n border-radius: 10px;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n line-height: 1.4;\n}\n.create-tables-badge-custom {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n.create-tables-badge-registered {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success-text);\n}\n.add-map-input {\n width: 100%;\n padding: 6px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n font-size: 13px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n}\n.add-map-input:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n/* Config badges */\n.detail-config-badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n border-radius: 4px;\n background: var(--mj-bg-surface-active);\n color: var(--mj-text-disabled);\n font-size: 11px;\n}\n\n/* Detail back button (icon-only) */\n.detail-back-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n font-size: 16px;\n transition: background 0.15s, color 0.15s, border-color 0.15s;\n flex-shrink: 0;\n}\n\n.detail-back-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-strong);\n}\n\n/* Detail edit button (icon-only) */\n.detail-edit-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n font-size: 14px;\n transition: background 0.15s, color 0.15s, border-color 0.15s;\n flex-shrink: 0;\n}\n\n.detail-edit-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-strong);\n}\n\n/* Chevron hint on entity map rows */\n.map-edit-hint {\n color: var(--mj-text-disabled);\n font-size: 11px;\n transition: color 0.15s;\n}\n\n.detail-map-row:hover .map-edit-hint {\n color: var(--mj-brand-primary);\n}\n\n/* Entity map editor header */\n.ve-header-title-inline {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 16px;\n font-weight: 600;\n}\n\n.ve-source-label {\n color: var(--mj-brand-primary);\n}\n\n.ve-direction-icon {\n color: var(--mj-text-disabled);\n font-size: 14px;\n}\n\n.ve-dest-label {\n color: var(--mj-status-success);\n}\n\n.ve-stat-inline {\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.ve-stat-inline strong {\n color: var(--mj-text-primary);\n font-weight: 600;\n}\n\n.detail-table-empty {\n padding: 24px;\n text-align: center;\n color: var(--mj-text-disabled);\n font-size: 13px;\n}\n\n/* ---------------------------------------------------------------------------\n Discovered Source Objects Section\n --------------------------------------------------------------------------- */\n\n.discovered-objects-section {\n margin: 12px 0;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n overflow: hidden;\n}\n\n.discovered-objects-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 14px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.discovered-objects-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.discovered-objects-title i {\n color: var(--mj-brand-primary);\n}\n\n.discovered-count {\n font-weight: 400;\n color: var(--mj-text-muted);\n font-size: 12px;\n}\n\n.discovered-objects-actions {\n display: flex;\n gap: 8px;\n}\n\n.discovered-action-btn {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n background: none;\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n padding: 3px 10px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: background 0.15s, color 0.15s;\n}\n\n.discovered-action-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.discovered-action-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.discovered-loading,\n.discovered-empty {\n padding: 16px;\n text-align: center;\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.discovered-loading i {\n margin-right: 6px;\n}\n\n.discovered-objects-list {\n max-height: 280px;\n overflow-y: auto;\n}\n\n.discovered-object-row {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 7px 14px;\n cursor: pointer;\n transition: background 0.1s;\n border-bottom: 1px solid var(--mj-border-subtle);\n font-size: 13px;\n}\n\n.discovered-object-row:last-child {\n border-bottom: none;\n}\n\n.discovered-object-row:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.discovered-object-row.selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n}\n\n.discovered-object-row input[type=\"checkbox\"] {\n flex-shrink: 0;\n width: 16px;\n height: 16px;\n accent-color: var(--mj-brand-primary);\n cursor: pointer;\n}\n\n.discovered-object-name {\n flex: 1;\n color: var(--mj-text-primary);\n font-weight: 500;\n}\n\n.discovered-object-api-name {\n flex: 1;\n color: var(--mj-text-muted);\n font-size: 12px;\n font-family: monospace;\n}\n\n.discovered-object-badges {\n display: flex;\n gap: 4px;\n}\n\n.discovered-badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n border-radius: 4px;\n font-size: 10px;\n}\n\n.discovered-badge.incremental {\n color: var(--mj-status-success);\n background: var(--mj-status-success-bg);\n}\n\n.discovered-badge.writable {\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n}\n"] }]
|
|
3130
3149
|
}], null, { entityTreeDropdown: [{
|
|
3131
3150
|
type: ViewChild,
|
|
3132
3151
|
args: ['entityTreeDropdown']
|