@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
|
@@ -13,21 +13,33 @@ import { IntegrationDataService, ResolveIntegrationIcon } from '../../services/i
|
|
|
13
13
|
import * as i0 from "@angular/core";
|
|
14
14
|
import * as i1 from "@angular/common";
|
|
15
15
|
import * as i2 from "@angular/forms";
|
|
16
|
+
import * as i3 from "@memberjunction/ng-ui-components";
|
|
16
17
|
const _forTrack0 = ($index, $item) => $item.IntegrationID;
|
|
17
18
|
const _forTrack1 = ($index, $item) => $item.ID;
|
|
18
19
|
const _forTrack2 = ($index, $item) => $item.Name;
|
|
19
20
|
const _forTrack3 = ($index, $item) => $item.SourceFieldName + "-" + $item.DestFieldName;
|
|
20
21
|
const _forTrack4 = ($index, $item) => $item.Value;
|
|
21
|
-
function
|
|
22
|
-
i0.ɵɵelementStart(0, "div",
|
|
23
|
-
i0.ɵɵelement(1, "
|
|
22
|
+
function PipelinesComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
23
|
+
i0.ɵɵelementStart(0, "div", 1);
|
|
24
|
+
i0.ɵɵelement(1, "mj-stat-badge", 14)(2, "mj-stat-badge", 15);
|
|
25
|
+
i0.ɵɵelementEnd();
|
|
26
|
+
} if (rf & 2) {
|
|
27
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
28
|
+
i0.ɵɵadvance();
|
|
29
|
+
i0.ɵɵproperty("Count", ctx_r0.IntegrationCount);
|
|
30
|
+
i0.ɵɵadvance();
|
|
31
|
+
i0.ɵɵproperty("Count", ctx_r0.TotalMapCount);
|
|
32
|
+
} }
|
|
33
|
+
function PipelinesComponent_Conditional_13_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
34
|
+
i0.ɵɵelementStart(0, "div", 16);
|
|
35
|
+
i0.ɵɵelement(1, "i", 19);
|
|
24
36
|
i0.ɵɵelementStart(2, "span");
|
|
25
37
|
i0.ɵɵtext(3, "Loading pipelines...");
|
|
26
38
|
i0.ɵɵelementEnd()();
|
|
27
39
|
} }
|
|
28
|
-
function
|
|
29
|
-
i0.ɵɵelementStart(0, "div",
|
|
30
|
-
i0.ɵɵelement(1, "i",
|
|
40
|
+
function PipelinesComponent_Conditional_13_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
41
|
+
i0.ɵɵelementStart(0, "div", 17);
|
|
42
|
+
i0.ɵɵelement(1, "i", 20);
|
|
31
43
|
i0.ɵɵelementStart(2, "h3");
|
|
32
44
|
i0.ɵɵtext(3, "No Integration Pipelines");
|
|
33
45
|
i0.ɵɵelementEnd();
|
|
@@ -35,1099 +47,1062 @@ function PipelinesComponent_Conditional_1_Conditional_22_Template(rf, ctx) { if
|
|
|
35
47
|
i0.ɵɵtext(5, "Configure integrations to see data flow pipelines here.");
|
|
36
48
|
i0.ɵɵelementEnd()();
|
|
37
49
|
} }
|
|
38
|
-
function
|
|
39
|
-
i0.ɵɵelementStart(0, "span",
|
|
50
|
+
function PipelinesComponent_Conditional_13_Conditional_3_For_2_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
51
|
+
i0.ɵɵelementStart(0, "span", 32);
|
|
40
52
|
i0.ɵɵtext(1);
|
|
41
53
|
i0.ɵɵelementEnd();
|
|
42
54
|
} if (rf & 2) {
|
|
43
|
-
const
|
|
55
|
+
const card_r3 = i0.ɵɵnextContext().$implicit;
|
|
44
56
|
i0.ɵɵadvance();
|
|
45
|
-
i0.ɵɵtextInterpolate(
|
|
57
|
+
i0.ɵɵtextInterpolate(card_r3.LastSync);
|
|
46
58
|
} }
|
|
47
|
-
function
|
|
48
|
-
i0.ɵɵelementStart(0, "span",
|
|
49
|
-
i0.ɵɵelement(1, "i",
|
|
59
|
+
function PipelinesComponent_Conditional_13_Conditional_3_For_2_Conditional_28_For_18_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
60
|
+
i0.ɵɵelementStart(0, "span", 60);
|
|
61
|
+
i0.ɵɵelement(1, "i", 64);
|
|
50
62
|
i0.ɵɵelementEnd();
|
|
51
63
|
} if (rf & 2) {
|
|
52
|
-
const
|
|
53
|
-
i0.ɵɵproperty("title", "Match: " +
|
|
64
|
+
const em_r6 = i0.ɵɵnextContext().$implicit;
|
|
65
|
+
i0.ɵɵproperty("title", "Match: " + em_r6.MatchStrategy);
|
|
54
66
|
} }
|
|
55
|
-
function
|
|
56
|
-
const
|
|
57
|
-
i0.ɵɵelementStart(0, "div",
|
|
58
|
-
i0.ɵɵlistener("click", function
|
|
59
|
-
i0.ɵɵelementStart(1, "span",
|
|
60
|
-
i0.ɵɵlistener("click", function
|
|
61
|
-
i0.ɵɵelementStart(2, "label",
|
|
62
|
-
i0.ɵɵlistener("change", function
|
|
63
|
-
i0.ɵɵelementEnd();
|
|
64
|
-
i0.ɵɵelement(4, "span",
|
|
67
|
+
function PipelinesComponent_Conditional_13_Conditional_3_For_2_Conditional_28_For_18_Template(rf, ctx) { if (rf & 1) {
|
|
68
|
+
const _r5 = i0.ɵɵgetCurrentView();
|
|
69
|
+
i0.ɵɵelementStart(0, "div", 53);
|
|
70
|
+
i0.ɵɵlistener("click", function PipelinesComponent_Conditional_13_Conditional_3_For_2_Conditional_28_For_18_Template_div_click_0_listener() { const em_r6 = i0.ɵɵrestoreView(_r5).$implicit; const card_r3 = i0.ɵɵnextContext(2).$implicit; const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.OnMapRowClick(card_r3, em_r6)); });
|
|
71
|
+
i0.ɵɵelementStart(1, "span", 54);
|
|
72
|
+
i0.ɵɵlistener("click", function PipelinesComponent_Conditional_13_Conditional_3_For_2_Conditional_28_For_18_Template_span_click_1_listener($event) { i0.ɵɵrestoreView(_r5); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
73
|
+
i0.ɵɵelementStart(2, "label", 55)(3, "input", 56);
|
|
74
|
+
i0.ɵɵlistener("change", function PipelinesComponent_Conditional_13_Conditional_3_For_2_Conditional_28_For_18_Template_input_change_3_listener($event) { const em_r6 = i0.ɵɵrestoreView(_r5).$implicit; const card_r3 = i0.ɵɵnextContext(2).$implicit; const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.OnToggleSyncEnabled(card_r3, em_r6, $event)); });
|
|
75
|
+
i0.ɵɵelementEnd();
|
|
76
|
+
i0.ɵɵelement(4, "span", 57);
|
|
65
77
|
i0.ɵɵelementEnd()();
|
|
66
|
-
i0.ɵɵelementStart(5, "span",
|
|
78
|
+
i0.ɵɵelementStart(5, "span", 58);
|
|
67
79
|
i0.ɵɵtext(6);
|
|
68
80
|
i0.ɵɵelementEnd();
|
|
69
|
-
i0.ɵɵelementStart(7, "span",
|
|
81
|
+
i0.ɵɵelementStart(7, "span", 47)(8, "span");
|
|
70
82
|
i0.ɵɵtext(9);
|
|
71
83
|
i0.ɵɵelementEnd()();
|
|
72
|
-
i0.ɵɵelementStart(10, "span",
|
|
84
|
+
i0.ɵɵelementStart(10, "span", 59);
|
|
73
85
|
i0.ɵɵtext(11);
|
|
74
86
|
i0.ɵɵelementEnd();
|
|
75
|
-
i0.ɵɵelementStart(12, "span",
|
|
76
|
-
i0.ɵɵconditionalCreate(13,
|
|
77
|
-
i0.ɵɵelementStart(14, "span",
|
|
78
|
-
i0.ɵɵelement(15, "i",
|
|
87
|
+
i0.ɵɵelementStart(12, "span", 49);
|
|
88
|
+
i0.ɵɵconditionalCreate(13, PipelinesComponent_Conditional_13_Conditional_3_For_2_Conditional_28_For_18_Conditional_13_Template, 2, 1, "span", 60);
|
|
89
|
+
i0.ɵɵelementStart(14, "span", 60);
|
|
90
|
+
i0.ɵɵelement(15, "i", 61);
|
|
79
91
|
i0.ɵɵelementEnd();
|
|
80
|
-
i0.ɵɵelementStart(16, "span",
|
|
81
|
-
i0.ɵɵelement(17, "i",
|
|
92
|
+
i0.ɵɵelementStart(16, "span", 62);
|
|
93
|
+
i0.ɵɵelement(17, "i", 63);
|
|
82
94
|
i0.ɵɵelementEnd()()();
|
|
83
95
|
} if (rf & 2) {
|
|
84
|
-
const
|
|
85
|
-
const
|
|
86
|
-
i0.ɵɵclassProp("sync-disabled", !
|
|
96
|
+
const em_r6 = ctx.$implicit;
|
|
97
|
+
const ctx_r0 = i0.ɵɵnextContext(5);
|
|
98
|
+
i0.ɵɵclassProp("sync-disabled", !em_r6.SyncEnabled);
|
|
87
99
|
i0.ɵɵadvance(2);
|
|
88
|
-
i0.ɵɵproperty("title",
|
|
100
|
+
i0.ɵɵproperty("title", em_r6.SyncEnabled ? "Sync enabled \u2014 click to disable" : "Sync disabled \u2014 click to enable");
|
|
89
101
|
i0.ɵɵadvance();
|
|
90
|
-
i0.ɵɵproperty("checked",
|
|
102
|
+
i0.ɵɵproperty("checked", em_r6.SyncEnabled);
|
|
91
103
|
i0.ɵɵadvance(2);
|
|
92
|
-
i0.ɵɵproperty("title",
|
|
104
|
+
i0.ɵɵproperty("title", em_r6.ExternalObjectName);
|
|
93
105
|
i0.ɵɵadvance();
|
|
94
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
106
|
+
i0.ɵɵtextInterpolate1(" ", em_r6.ExternalObjectLabel ?? em_r6.ExternalObjectName, " ");
|
|
95
107
|
i0.ɵɵadvance(2);
|
|
96
|
-
i0.ɵɵclassMap(
|
|
108
|
+
i0.ɵɵclassMap(ctx_r0.DirectionBadgeClass(em_r6.SyncDirection));
|
|
97
109
|
i0.ɵɵadvance();
|
|
98
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
110
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r0.DirectionText(em_r6.SyncDirection), " ");
|
|
99
111
|
i0.ɵɵadvance();
|
|
100
|
-
i0.ɵɵproperty("title",
|
|
112
|
+
i0.ɵɵproperty("title", em_r6.Entity);
|
|
101
113
|
i0.ɵɵadvance();
|
|
102
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
114
|
+
i0.ɵɵtextInterpolate1(" ", em_r6.Entity, " ");
|
|
103
115
|
i0.ɵɵadvance(2);
|
|
104
|
-
i0.ɵɵconditional(
|
|
116
|
+
i0.ɵɵconditional(em_r6.MatchStrategy ? 13 : -1);
|
|
105
117
|
i0.ɵɵadvance();
|
|
106
|
-
i0.ɵɵproperty("title", "Conflict: " +
|
|
118
|
+
i0.ɵɵproperty("title", "Conflict: " + em_r6.ConflictResolution);
|
|
107
119
|
} }
|
|
108
|
-
function
|
|
109
|
-
i0.ɵɵelementStart(0, "div",
|
|
120
|
+
function PipelinesComponent_Conditional_13_Conditional_3_For_2_Conditional_28_ForEmpty_19_Template(rf, ctx) { if (rf & 1) {
|
|
121
|
+
i0.ɵɵelementStart(0, "div", 52);
|
|
110
122
|
i0.ɵɵtext(1, " No entity maps match your filter. ");
|
|
111
123
|
i0.ɵɵelementEnd();
|
|
112
124
|
} }
|
|
113
|
-
function
|
|
114
|
-
const
|
|
115
|
-
i0.ɵɵelementStart(0, "div",
|
|
116
|
-
i0.ɵɵelement(2, "i",
|
|
117
|
-
i0.ɵɵelementStart(3, "input",
|
|
118
|
-
i0.ɵɵlistener("input", function
|
|
119
|
-
i0.ɵɵelementEnd();
|
|
120
|
-
i0.ɵɵelementStart(4, "span",
|
|
125
|
+
function PipelinesComponent_Conditional_13_Conditional_3_For_2_Conditional_28_Template(rf, ctx) { if (rf & 1) {
|
|
126
|
+
const _r4 = i0.ɵɵgetCurrentView();
|
|
127
|
+
i0.ɵɵelementStart(0, "div", 39)(1, "div", 40);
|
|
128
|
+
i0.ɵɵelement(2, "i", 41);
|
|
129
|
+
i0.ɵɵelementStart(3, "input", 42);
|
|
130
|
+
i0.ɵɵlistener("input", function PipelinesComponent_Conditional_13_Conditional_3_For_2_Conditional_28_Template_input_input_3_listener($event) { i0.ɵɵrestoreView(_r4); const card_r3 = i0.ɵɵnextContext().$implicit; const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.OnCardSearch(card_r3, $event)); });
|
|
131
|
+
i0.ɵɵelementEnd();
|
|
132
|
+
i0.ɵɵelementStart(4, "span", 43);
|
|
121
133
|
i0.ɵɵtext(5);
|
|
122
134
|
i0.ɵɵelementEnd()();
|
|
123
|
-
i0.ɵɵelementStart(6, "div",
|
|
135
|
+
i0.ɵɵelementStart(6, "div", 44)(7, "span", 45);
|
|
124
136
|
i0.ɵɵtext(8, "Sync");
|
|
125
137
|
i0.ɵɵelementEnd();
|
|
126
|
-
i0.ɵɵelementStart(9, "span",
|
|
138
|
+
i0.ɵɵelementStart(9, "span", 46);
|
|
127
139
|
i0.ɵɵtext(10, "External Object");
|
|
128
140
|
i0.ɵɵelementEnd();
|
|
129
|
-
i0.ɵɵelement(11, "span",
|
|
130
|
-
i0.ɵɵelementStart(12, "span",
|
|
141
|
+
i0.ɵɵelement(11, "span", 47);
|
|
142
|
+
i0.ɵɵelementStart(12, "span", 48);
|
|
131
143
|
i0.ɵɵtext(13, "MJ Entity");
|
|
132
144
|
i0.ɵɵelementEnd();
|
|
133
|
-
i0.ɵɵelementStart(14, "span",
|
|
145
|
+
i0.ɵɵelementStart(14, "span", 49);
|
|
134
146
|
i0.ɵɵtext(15, "Config");
|
|
135
147
|
i0.ɵɵelementEnd()();
|
|
136
|
-
i0.ɵɵelementStart(16, "div",
|
|
137
|
-
i0.ɵɵrepeaterCreate(17,
|
|
148
|
+
i0.ɵɵelementStart(16, "div", 50);
|
|
149
|
+
i0.ɵɵrepeaterCreate(17, PipelinesComponent_Conditional_13_Conditional_3_For_2_Conditional_28_For_18_Template, 18, 13, "div", 51, _forTrack1, false, PipelinesComponent_Conditional_13_Conditional_3_For_2_Conditional_28_ForEmpty_19_Template, 2, 0, "div", 52);
|
|
138
150
|
i0.ɵɵelementEnd()();
|
|
139
151
|
} if (rf & 2) {
|
|
140
|
-
const
|
|
152
|
+
const card_r3 = i0.ɵɵnextContext().$implicit;
|
|
141
153
|
i0.ɵɵadvance(3);
|
|
142
|
-
i0.ɵɵproperty("value",
|
|
154
|
+
i0.ɵɵproperty("value", card_r3.SearchTerm);
|
|
143
155
|
i0.ɵɵadvance(2);
|
|
144
|
-
i0.ɵɵtextInterpolate2(" ",
|
|
156
|
+
i0.ɵɵtextInterpolate2(" ", card_r3.FilteredMaps.length, " of ", card_r3.EntityMapCount, " ");
|
|
145
157
|
i0.ɵɵadvance(12);
|
|
146
|
-
i0.ɵɵrepeater(
|
|
158
|
+
i0.ɵɵrepeater(card_r3.FilteredMaps);
|
|
147
159
|
} }
|
|
148
|
-
function
|
|
149
|
-
const
|
|
150
|
-
i0.ɵɵelementStart(0, "div",
|
|
151
|
-
i0.ɵɵlistener("click", function
|
|
152
|
-
i0.ɵɵelementStart(2, "div",
|
|
153
|
-
i0.ɵɵelement(3, "div",
|
|
154
|
-
i0.ɵɵelementStart(5, "div",
|
|
160
|
+
function PipelinesComponent_Conditional_13_Conditional_3_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
161
|
+
const _r2 = i0.ɵɵgetCurrentView();
|
|
162
|
+
i0.ɵɵelementStart(0, "div", 22)(1, "div", 23);
|
|
163
|
+
i0.ɵɵlistener("click", function PipelinesComponent_Conditional_13_Conditional_3_For_2_Template_div_click_1_listener() { const card_r3 = i0.ɵɵrestoreView(_r2).$implicit; const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.ToggleCard(card_r3)); });
|
|
164
|
+
i0.ɵɵelementStart(2, "div", 24);
|
|
165
|
+
i0.ɵɵelement(3, "div", 25)(4, "i");
|
|
166
|
+
i0.ɵɵelementStart(5, "div", 26)(6, "span", 27);
|
|
155
167
|
i0.ɵɵtext(7);
|
|
156
168
|
i0.ɵɵelementEnd();
|
|
157
|
-
i0.ɵɵelementStart(8, "span",
|
|
169
|
+
i0.ɵɵelementStart(8, "span", 28);
|
|
158
170
|
i0.ɵɵtext(9);
|
|
159
|
-
i0.ɵɵelementStart(10, "span",
|
|
171
|
+
i0.ɵɵelementStart(10, "span", 29);
|
|
160
172
|
i0.ɵɵtext(11, "\u00B7");
|
|
161
173
|
i0.ɵɵelementEnd();
|
|
162
174
|
i0.ɵɵtext(12);
|
|
163
|
-
i0.ɵɵelementStart(13, "span",
|
|
175
|
+
i0.ɵɵelementStart(13, "span", 29);
|
|
164
176
|
i0.ɵɵtext(14, "\u00B7");
|
|
165
177
|
i0.ɵɵelementEnd();
|
|
166
178
|
i0.ɵɵtext(15);
|
|
167
179
|
i0.ɵɵelementEnd()()();
|
|
168
|
-
i0.ɵɵelementStart(16, "div",
|
|
180
|
+
i0.ɵɵelementStart(16, "div", 30)(17, "span", 31);
|
|
169
181
|
i0.ɵɵtext(18);
|
|
170
182
|
i0.ɵɵelementEnd();
|
|
171
|
-
i0.ɵɵconditionalCreate(19,
|
|
172
|
-
i0.ɵɵelementStart(20, "div",
|
|
173
|
-
i0.ɵɵelement(21, "span",
|
|
174
|
-
i0.ɵɵelementStart(23, "span",
|
|
183
|
+
i0.ɵɵconditionalCreate(19, PipelinesComponent_Conditional_13_Conditional_3_For_2_Conditional_19_Template, 2, 1, "span", 32);
|
|
184
|
+
i0.ɵɵelementStart(20, "div", 33);
|
|
185
|
+
i0.ɵɵelement(21, "span", 34)(22, "span", 35);
|
|
186
|
+
i0.ɵɵelementStart(23, "span", 36);
|
|
175
187
|
i0.ɵɵtext(24);
|
|
176
188
|
i0.ɵɵelementEnd();
|
|
177
|
-
i0.ɵɵelement(25, "span",
|
|
189
|
+
i0.ɵɵelement(25, "span", 35)(26, "span", 37);
|
|
178
190
|
i0.ɵɵelementEnd();
|
|
179
|
-
i0.ɵɵelement(27, "i",
|
|
191
|
+
i0.ɵɵelement(27, "i", 38);
|
|
180
192
|
i0.ɵɵelementEnd()();
|
|
181
|
-
i0.ɵɵconditionalCreate(28,
|
|
193
|
+
i0.ɵɵconditionalCreate(28, PipelinesComponent_Conditional_13_Conditional_3_For_2_Conditional_28_Template, 20, 4, "div", 39);
|
|
182
194
|
i0.ɵɵelementEnd();
|
|
183
195
|
} if (rf & 2) {
|
|
184
|
-
const
|
|
185
|
-
i0.ɵɵclassProp("expanded",
|
|
196
|
+
const card_r3 = ctx.$implicit;
|
|
197
|
+
i0.ɵɵclassProp("expanded", card_r3.IsExpanded);
|
|
186
198
|
i0.ɵɵadvance(3);
|
|
187
|
-
i0.ɵɵstyleProp("background-color",
|
|
199
|
+
i0.ɵɵstyleProp("background-color", card_r3.StatusColor);
|
|
188
200
|
i0.ɵɵadvance();
|
|
189
|
-
i0.ɵɵclassMap(
|
|
201
|
+
i0.ɵɵclassMap(card_r3.Icon + " card-icon");
|
|
190
202
|
i0.ɵɵadvance(3);
|
|
191
|
-
i0.ɵɵtextInterpolate(
|
|
203
|
+
i0.ɵɵtextInterpolate(card_r3.IntegrationName);
|
|
192
204
|
i0.ɵɵadvance(2);
|
|
193
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
205
|
+
i0.ɵɵtextInterpolate1(" ", card_r3.EntityMapCount, " maps ");
|
|
194
206
|
i0.ɵɵadvance(3);
|
|
195
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
207
|
+
i0.ɵɵtextInterpolate1(" ", card_r3.ActiveMapCount, " active ");
|
|
196
208
|
i0.ɵɵadvance(3);
|
|
197
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
209
|
+
i0.ɵɵtextInterpolate1(" ", card_r3.UniqueEntityCount, " entities ");
|
|
198
210
|
i0.ɵɵadvance(2);
|
|
199
|
-
i0.ɵɵstyleProp("color",
|
|
211
|
+
i0.ɵɵstyleProp("color", card_r3.StatusColor);
|
|
200
212
|
i0.ɵɵadvance();
|
|
201
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
213
|
+
i0.ɵɵtextInterpolate1(" ", card_r3.StatusLabel, " ");
|
|
202
214
|
i0.ɵɵadvance();
|
|
203
|
-
i0.ɵɵconditional(
|
|
215
|
+
i0.ɵɵconditional(card_r3.LastSync ? 19 : -1);
|
|
204
216
|
i0.ɵɵadvance(5);
|
|
205
|
-
i0.ɵɵtextInterpolate(
|
|
217
|
+
i0.ɵɵtextInterpolate(card_r3.EntityMapCount);
|
|
206
218
|
i0.ɵɵadvance(3);
|
|
207
|
-
i0.ɵɵclassProp("fa-chevron-down", !
|
|
219
|
+
i0.ɵɵclassProp("fa-chevron-down", !card_r3.IsExpanded)("fa-chevron-up", card_r3.IsExpanded);
|
|
208
220
|
i0.ɵɵadvance();
|
|
209
|
-
i0.ɵɵconditional(
|
|
221
|
+
i0.ɵɵconditional(card_r3.IsExpanded ? 28 : -1);
|
|
210
222
|
} }
|
|
211
|
-
function
|
|
212
|
-
i0.ɵɵelementStart(0, "div",
|
|
213
|
-
i0.ɵɵrepeaterCreate(1,
|
|
223
|
+
function PipelinesComponent_Conditional_13_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
224
|
+
i0.ɵɵelementStart(0, "div", 18);
|
|
225
|
+
i0.ɵɵrepeaterCreate(1, PipelinesComponent_Conditional_13_Conditional_3_For_2_Template, 29, 20, "div", 21, _forTrack0);
|
|
214
226
|
i0.ɵɵelementEnd();
|
|
215
227
|
} if (rf & 2) {
|
|
216
|
-
const
|
|
228
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
217
229
|
i0.ɵɵadvance();
|
|
218
|
-
i0.ɵɵrepeater(
|
|
230
|
+
i0.ɵɵrepeater(ctx_r0.FilteredCards);
|
|
219
231
|
} }
|
|
220
|
-
function
|
|
221
|
-
|
|
222
|
-
i0.ɵɵ
|
|
223
|
-
i0.ɵɵelement(3, "i", 5);
|
|
224
|
-
i0.ɵɵtext(4, " Pipelines ");
|
|
225
|
-
i0.ɵɵelementEnd();
|
|
226
|
-
i0.ɵɵelementStart(5, "span", 6);
|
|
227
|
-
i0.ɵɵtext(6);
|
|
228
|
-
i0.ɵɵelementEnd();
|
|
229
|
-
i0.ɵɵelementStart(7, "span", 7);
|
|
230
|
-
i0.ɵɵtext(8);
|
|
231
|
-
i0.ɵɵelementEnd()();
|
|
232
|
-
i0.ɵɵelementStart(9, "div", 8)(10, "div", 9);
|
|
233
|
-
i0.ɵɵelement(11, "i", 10);
|
|
234
|
-
i0.ɵɵelementStart(12, "input", 11);
|
|
235
|
-
i0.ɵɵlistener("input", function PipelinesComponent_Conditional_1_Template_input_input_12_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnGlobalSearchChange($event)); });
|
|
236
|
-
i0.ɵɵelementEnd()();
|
|
237
|
-
i0.ɵɵelementStart(13, "button", 12);
|
|
238
|
-
i0.ɵɵlistener("click", function PipelinesComponent_Conditional_1_Template_button_click_13_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ExpandAll()); });
|
|
239
|
-
i0.ɵɵelement(14, "i", 13);
|
|
240
|
-
i0.ɵɵelementEnd();
|
|
241
|
-
i0.ɵɵelementStart(15, "button", 14);
|
|
242
|
-
i0.ɵɵlistener("click", function PipelinesComponent_Conditional_1_Template_button_click_15_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.CollapseAll()); });
|
|
243
|
-
i0.ɵɵelement(16, "i", 15);
|
|
244
|
-
i0.ɵɵelementEnd();
|
|
245
|
-
i0.ɵɵelement(17, "div", 16);
|
|
246
|
-
i0.ɵɵelementStart(18, "button", 17);
|
|
247
|
-
i0.ɵɵlistener("click", function PipelinesComponent_Conditional_1_Template_button_click_18_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.LoadData()); });
|
|
248
|
-
i0.ɵɵelement(19, "i", 18);
|
|
249
|
-
i0.ɵɵelementEnd()()();
|
|
250
|
-
i0.ɵɵelementStart(20, "div", 19);
|
|
251
|
-
i0.ɵɵconditionalCreate(21, PipelinesComponent_Conditional_1_Conditional_21_Template, 4, 0, "div", 20)(22, PipelinesComponent_Conditional_1_Conditional_22_Template, 6, 0, "div", 21)(23, PipelinesComponent_Conditional_1_Conditional_23_Template, 3, 0, "div", 22);
|
|
232
|
+
function PipelinesComponent_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
233
|
+
i0.ɵɵelementStart(0, "div", 12);
|
|
234
|
+
i0.ɵɵconditionalCreate(1, PipelinesComponent_Conditional_13_Conditional_1_Template, 4, 0, "div", 16)(2, PipelinesComponent_Conditional_13_Conditional_2_Template, 6, 0, "div", 17)(3, PipelinesComponent_Conditional_13_Conditional_3_Template, 3, 0, "div", 18);
|
|
252
235
|
i0.ɵɵelementEnd();
|
|
253
236
|
} if (rf & 2) {
|
|
254
|
-
const
|
|
255
|
-
i0.ɵɵadvance(
|
|
256
|
-
i0.ɵɵ
|
|
257
|
-
i0.ɵɵadvance(2);
|
|
258
|
-
i0.ɵɵtextInterpolate1("", ctx_r1.TotalMapCount, " entity maps");
|
|
259
|
-
i0.ɵɵadvance(4);
|
|
260
|
-
i0.ɵɵproperty("value", ctx_r1.GlobalSearch);
|
|
261
|
-
i0.ɵɵadvance(7);
|
|
262
|
-
i0.ɵɵclassProp("fa-spin", ctx_r1.IsLoading);
|
|
263
|
-
i0.ɵɵadvance(2);
|
|
264
|
-
i0.ɵɵconditional(ctx_r1.IsLoading && ctx_r1.PipelineCards.length === 0 ? 21 : ctx_r1.PipelineCards.length === 0 ? 22 : 23);
|
|
237
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
238
|
+
i0.ɵɵadvance();
|
|
239
|
+
i0.ɵɵconditional(ctx_r0.IsLoading && ctx_r0.PipelineCards.length === 0 ? 1 : ctx_r0.PipelineCards.length === 0 ? 2 : 3);
|
|
265
240
|
} }
|
|
266
|
-
function
|
|
267
|
-
const
|
|
268
|
-
i0.ɵɵelementStart(0, "label",
|
|
269
|
-
i0.ɵɵlistener("change", function
|
|
241
|
+
function PipelinesComponent_Conditional_14_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
242
|
+
const _r8 = i0.ɵɵgetCurrentView();
|
|
243
|
+
i0.ɵɵelementStart(0, "label", 93)(1, "input", 56);
|
|
244
|
+
i0.ɵɵlistener("change", function PipelinesComponent_Conditional_14_Conditional_12_Template_input_change_1_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.OnToggleEditorSyncEnabled($event)); });
|
|
270
245
|
i0.ɵɵelementEnd();
|
|
271
|
-
i0.ɵɵelement(2, "span",
|
|
246
|
+
i0.ɵɵelement(2, "span", 57);
|
|
272
247
|
i0.ɵɵelementEnd();
|
|
273
|
-
i0.ɵɵelementStart(3, "span",
|
|
248
|
+
i0.ɵɵelementStart(3, "span", 94);
|
|
274
249
|
i0.ɵɵtext(4);
|
|
275
250
|
i0.ɵɵelementEnd();
|
|
276
251
|
} if (rf & 2) {
|
|
277
|
-
const
|
|
278
|
-
i0.ɵɵproperty("title",
|
|
252
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
253
|
+
i0.ɵɵproperty("title", ctx_r0.EditorEntityMap.SyncEnabled ? "Sync enabled" : "Sync disabled");
|
|
279
254
|
i0.ɵɵadvance();
|
|
280
|
-
i0.ɵɵproperty("checked",
|
|
255
|
+
i0.ɵɵproperty("checked", ctx_r0.EditorEntityMap.SyncEnabled);
|
|
281
256
|
i0.ɵɵadvance(3);
|
|
282
|
-
i0.ɵɵtextInterpolate(
|
|
257
|
+
i0.ɵɵtextInterpolate(ctx_r0.EditorEntityMap.SyncEnabled ? "Sync On" : "Sync Off");
|
|
283
258
|
} }
|
|
284
|
-
function
|
|
285
|
-
i0.ɵɵelement(0, "i",
|
|
259
|
+
function PipelinesComponent_Conditional_14_Conditional_37_Template(rf, ctx) { if (rf & 1) {
|
|
260
|
+
i0.ɵɵelement(0, "i", 19);
|
|
286
261
|
i0.ɵɵtext(1, " Running Pipeline... ");
|
|
287
262
|
} }
|
|
288
|
-
function
|
|
289
|
-
i0.ɵɵelement(0, "i",
|
|
263
|
+
function PipelinesComponent_Conditional_14_Conditional_38_Template(rf, ctx) { if (rf & 1) {
|
|
264
|
+
i0.ɵɵelement(0, "i", 95);
|
|
290
265
|
i0.ɵɵtext(1, " Run Schema Pipeline ");
|
|
291
266
|
} }
|
|
292
|
-
function
|
|
267
|
+
function PipelinesComponent_Conditional_14_Conditional_39_Template(rf, ctx) { if (rf & 1) {
|
|
293
268
|
i0.ɵɵelementStart(0, "span");
|
|
294
269
|
i0.ɵɵelement(1, "i");
|
|
295
270
|
i0.ɵɵtext(2);
|
|
296
271
|
i0.ɵɵelementEnd();
|
|
297
272
|
} if (rf & 2) {
|
|
298
|
-
const
|
|
299
|
-
i0.ɵɵclassMap(
|
|
273
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
274
|
+
i0.ɵɵclassMap(ctx_r0.PipelineResultSuccess ? "ve-save-success" : "ve-error-msg");
|
|
300
275
|
i0.ɵɵadvance();
|
|
301
|
-
i0.ɵɵclassMap(
|
|
276
|
+
i0.ɵɵclassMap(ctx_r0.PipelineResultSuccess ? "fa-solid fa-circle-check" : "fa-solid fa-circle-xmark");
|
|
302
277
|
i0.ɵɵadvance();
|
|
303
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
278
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r0.PipelineResultMessage, " ");
|
|
304
279
|
} }
|
|
305
|
-
function
|
|
306
|
-
i0.ɵɵelement(0, "i",
|
|
280
|
+
function PipelinesComponent_Conditional_14_Conditional_45_Template(rf, ctx) { if (rf & 1) {
|
|
281
|
+
i0.ɵɵelement(0, "i", 19);
|
|
307
282
|
i0.ɵɵtext(1, " Saving... ");
|
|
308
283
|
} }
|
|
309
|
-
function
|
|
310
|
-
i0.ɵɵelement(0, "i",
|
|
284
|
+
function PipelinesComponent_Conditional_14_Conditional_46_Template(rf, ctx) { if (rf & 1) {
|
|
285
|
+
i0.ɵɵelement(0, "i", 96);
|
|
311
286
|
i0.ɵɵtext(1, " Save ");
|
|
312
287
|
} }
|
|
313
|
-
function
|
|
314
|
-
i0.ɵɵelementStart(0, "span",
|
|
315
|
-
i0.ɵɵelement(1, "i",
|
|
288
|
+
function PipelinesComponent_Conditional_14_Conditional_47_Template(rf, ctx) { if (rf & 1) {
|
|
289
|
+
i0.ɵɵelementStart(0, "span", 88);
|
|
290
|
+
i0.ɵɵelement(1, "i", 97);
|
|
316
291
|
i0.ɵɵtext(2, " Saved ");
|
|
317
292
|
i0.ɵɵelementEnd();
|
|
318
293
|
} }
|
|
319
|
-
function
|
|
320
|
-
i0.ɵɵelementStart(0, "div",
|
|
321
|
-
i0.ɵɵelement(1, "i",
|
|
294
|
+
function PipelinesComponent_Conditional_14_Conditional_48_Conditional_1_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
295
|
+
i0.ɵɵelementStart(0, "div", 102);
|
|
296
|
+
i0.ɵɵelement(1, "i", 19);
|
|
322
297
|
i0.ɵɵtext(2, " Loading... ");
|
|
323
298
|
i0.ɵɵelementEnd();
|
|
324
299
|
} }
|
|
325
|
-
function
|
|
326
|
-
i0.ɵɵelementStart(0, "div",
|
|
300
|
+
function PipelinesComponent_Conditional_14_Conditional_48_Conditional_1_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
301
|
+
i0.ɵɵelementStart(0, "div", 103);
|
|
327
302
|
i0.ɵɵtext(1, "No source data available");
|
|
328
303
|
i0.ɵɵelementEnd();
|
|
329
304
|
} }
|
|
330
|
-
function
|
|
305
|
+
function PipelinesComponent_Conditional_14_Conditional_48_Conditional_1_Conditional_9_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
331
306
|
i0.ɵɵelementStart(0, "th");
|
|
332
307
|
i0.ɵɵtext(1);
|
|
333
308
|
i0.ɵɵelementEnd();
|
|
334
309
|
} if (rf & 2) {
|
|
335
|
-
const
|
|
310
|
+
const col_r10 = ctx.$implicit;
|
|
336
311
|
i0.ɵɵadvance();
|
|
337
|
-
i0.ɵɵtextInterpolate(
|
|
312
|
+
i0.ɵɵtextInterpolate(col_r10);
|
|
338
313
|
} }
|
|
339
|
-
function
|
|
340
|
-
i0.ɵɵelementStart(0, "td",
|
|
314
|
+
function PipelinesComponent_Conditional_14_Conditional_48_Conditional_1_Conditional_9_For_8_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
315
|
+
i0.ɵɵelementStart(0, "td", 106);
|
|
341
316
|
i0.ɵɵtext(1);
|
|
342
317
|
i0.ɵɵelementEnd();
|
|
343
318
|
} if (rf & 2) {
|
|
344
|
-
const
|
|
345
|
-
const
|
|
346
|
-
i0.ɵɵproperty("title", (
|
|
319
|
+
const col_r11 = ctx.$implicit;
|
|
320
|
+
const row_r12 = i0.ɵɵnextContext().$implicit;
|
|
321
|
+
i0.ɵɵproperty("title", (row_r12[col_r11] == null ? null : row_r12[col_r11].toString()) ?? "");
|
|
347
322
|
i0.ɵɵadvance();
|
|
348
|
-
i0.ɵɵtextInterpolate(
|
|
323
|
+
i0.ɵɵtextInterpolate(row_r12[col_r11] ?? "");
|
|
349
324
|
} }
|
|
350
|
-
function
|
|
325
|
+
function PipelinesComponent_Conditional_14_Conditional_48_Conditional_1_Conditional_9_For_8_Template(rf, ctx) { if (rf & 1) {
|
|
351
326
|
i0.ɵɵelementStart(0, "tr");
|
|
352
|
-
i0.ɵɵrepeaterCreate(1,
|
|
327
|
+
i0.ɵɵrepeaterCreate(1, PipelinesComponent_Conditional_14_Conditional_48_Conditional_1_Conditional_9_For_8_For_2_Template, 2, 2, "td", 106, i0.ɵɵrepeaterTrackByIdentity);
|
|
353
328
|
i0.ɵɵelementEnd();
|
|
354
329
|
} if (rf & 2) {
|
|
355
|
-
const
|
|
330
|
+
const ctx_r0 = i0.ɵɵnextContext(5);
|
|
356
331
|
i0.ɵɵadvance();
|
|
357
|
-
i0.ɵɵrepeater(
|
|
332
|
+
i0.ɵɵrepeater(ctx_r0.PreviewSourceColumns);
|
|
358
333
|
} }
|
|
359
|
-
function
|
|
360
|
-
i0.ɵɵelementStart(0, "div",
|
|
361
|
-
i0.ɵɵrepeaterCreate(4,
|
|
334
|
+
function PipelinesComponent_Conditional_14_Conditional_48_Conditional_1_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
335
|
+
i0.ɵɵelementStart(0, "div", 104)(1, "table", 105)(2, "thead")(3, "tr");
|
|
336
|
+
i0.ɵɵrepeaterCreate(4, PipelinesComponent_Conditional_14_Conditional_48_Conditional_1_Conditional_9_For_5_Template, 2, 1, "th", null, i0.ɵɵrepeaterTrackByIdentity);
|
|
362
337
|
i0.ɵɵelementEnd()();
|
|
363
338
|
i0.ɵɵelementStart(6, "tbody");
|
|
364
|
-
i0.ɵɵrepeaterCreate(7,
|
|
339
|
+
i0.ɵɵrepeaterCreate(7, PipelinesComponent_Conditional_14_Conditional_48_Conditional_1_Conditional_9_For_8_Template, 3, 0, "tr", null, i0.ɵɵrepeaterTrackByIndex);
|
|
365
340
|
i0.ɵɵelementEnd()()();
|
|
366
341
|
} if (rf & 2) {
|
|
367
|
-
const
|
|
342
|
+
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
368
343
|
i0.ɵɵadvance(4);
|
|
369
|
-
i0.ɵɵrepeater(
|
|
344
|
+
i0.ɵɵrepeater(ctx_r0.PreviewSourceColumns);
|
|
370
345
|
i0.ɵɵadvance(3);
|
|
371
|
-
i0.ɵɵrepeater(
|
|
346
|
+
i0.ɵɵrepeater(ctx_r0.PreviewSourceRows);
|
|
372
347
|
} }
|
|
373
|
-
function
|
|
374
|
-
const
|
|
375
|
-
i0.ɵɵelementStart(0, "div",
|
|
376
|
-
i0.ɵɵelement(2, "i",
|
|
348
|
+
function PipelinesComponent_Conditional_14_Conditional_48_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
349
|
+
const _r9 = i0.ɵɵgetCurrentView();
|
|
350
|
+
i0.ɵɵelementStart(0, "div", 98)(1, "div", 99);
|
|
351
|
+
i0.ɵɵelement(2, "i", 79);
|
|
377
352
|
i0.ɵɵelementStart(3, "span");
|
|
378
353
|
i0.ɵɵtext(4);
|
|
379
354
|
i0.ɵɵelementEnd();
|
|
380
|
-
i0.ɵɵelementStart(5, "button",
|
|
381
|
-
i0.ɵɵlistener("click", function
|
|
382
|
-
i0.ɵɵelement(6, "i",
|
|
355
|
+
i0.ɵɵelementStart(5, "button", 100);
|
|
356
|
+
i0.ɵɵlistener("click", function PipelinesComponent_Conditional_14_Conditional_48_Conditional_1_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.ShowSourcePreview = false); });
|
|
357
|
+
i0.ɵɵelement(6, "i", 101);
|
|
383
358
|
i0.ɵɵelementEnd()();
|
|
384
|
-
i0.ɵɵconditionalCreate(7,
|
|
359
|
+
i0.ɵɵconditionalCreate(7, PipelinesComponent_Conditional_14_Conditional_48_Conditional_1_Conditional_7_Template, 3, 0, "div", 102)(8, PipelinesComponent_Conditional_14_Conditional_48_Conditional_1_Conditional_8_Template, 2, 0, "div", 103)(9, PipelinesComponent_Conditional_14_Conditional_48_Conditional_1_Conditional_9_Template, 9, 0, "div", 104);
|
|
385
360
|
i0.ɵɵelementEnd();
|
|
386
361
|
} if (rf & 2) {
|
|
387
|
-
const
|
|
362
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
388
363
|
i0.ɵɵadvance(4);
|
|
389
|
-
i0.ɵɵtextInterpolate1("Source Preview: ", (
|
|
364
|
+
i0.ɵɵtextInterpolate1("Source Preview: ", (ctx_r0.EditorEntityMap == null ? null : ctx_r0.EditorEntityMap.ExternalObjectLabel) ?? (ctx_r0.EditorEntityMap == null ? null : ctx_r0.EditorEntityMap.ExternalObjectName));
|
|
390
365
|
i0.ɵɵadvance(3);
|
|
391
|
-
i0.ɵɵconditional(
|
|
366
|
+
i0.ɵɵconditional(ctx_r0.PreviewSourceLoading ? 7 : ctx_r0.PreviewSourceRows.length === 0 ? 8 : 9);
|
|
392
367
|
} }
|
|
393
|
-
function
|
|
394
|
-
i0.ɵɵelementStart(0, "div",
|
|
395
|
-
i0.ɵɵelement(1, "i",
|
|
368
|
+
function PipelinesComponent_Conditional_14_Conditional_48_Conditional_2_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
369
|
+
i0.ɵɵelementStart(0, "div", 102);
|
|
370
|
+
i0.ɵɵelement(1, "i", 19);
|
|
396
371
|
i0.ɵɵtext(2, " Loading... ");
|
|
397
372
|
i0.ɵɵelementEnd();
|
|
398
373
|
} }
|
|
399
|
-
function
|
|
400
|
-
i0.ɵɵelementStart(0, "div",
|
|
374
|
+
function PipelinesComponent_Conditional_14_Conditional_48_Conditional_2_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
375
|
+
i0.ɵɵelementStart(0, "div", 103);
|
|
401
376
|
i0.ɵɵtext(1, "No destination data available");
|
|
402
377
|
i0.ɵɵelementEnd();
|
|
403
378
|
} }
|
|
404
|
-
function
|
|
379
|
+
function PipelinesComponent_Conditional_14_Conditional_48_Conditional_2_Conditional_9_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
405
380
|
i0.ɵɵelementStart(0, "th");
|
|
406
381
|
i0.ɵɵtext(1);
|
|
407
382
|
i0.ɵɵelementEnd();
|
|
408
383
|
} if (rf & 2) {
|
|
409
|
-
const
|
|
384
|
+
const col_r14 = ctx.$implicit;
|
|
410
385
|
i0.ɵɵadvance();
|
|
411
|
-
i0.ɵɵtextInterpolate(
|
|
386
|
+
i0.ɵɵtextInterpolate(col_r14);
|
|
412
387
|
} }
|
|
413
|
-
function
|
|
414
|
-
i0.ɵɵelementStart(0, "td",
|
|
388
|
+
function PipelinesComponent_Conditional_14_Conditional_48_Conditional_2_Conditional_9_For_8_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
389
|
+
i0.ɵɵelementStart(0, "td", 106);
|
|
415
390
|
i0.ɵɵtext(1);
|
|
416
391
|
i0.ɵɵelementEnd();
|
|
417
392
|
} if (rf & 2) {
|
|
418
|
-
const
|
|
419
|
-
const
|
|
420
|
-
i0.ɵɵproperty("title", (
|
|
393
|
+
const col_r15 = ctx.$implicit;
|
|
394
|
+
const row_r16 = i0.ɵɵnextContext().$implicit;
|
|
395
|
+
i0.ɵɵproperty("title", (row_r16[col_r15] == null ? null : row_r16[col_r15].toString()) ?? "");
|
|
421
396
|
i0.ɵɵadvance();
|
|
422
|
-
i0.ɵɵtextInterpolate(
|
|
397
|
+
i0.ɵɵtextInterpolate(row_r16[col_r15] ?? "");
|
|
423
398
|
} }
|
|
424
|
-
function
|
|
399
|
+
function PipelinesComponent_Conditional_14_Conditional_48_Conditional_2_Conditional_9_For_8_Template(rf, ctx) { if (rf & 1) {
|
|
425
400
|
i0.ɵɵelementStart(0, "tr");
|
|
426
|
-
i0.ɵɵrepeaterCreate(1,
|
|
401
|
+
i0.ɵɵrepeaterCreate(1, PipelinesComponent_Conditional_14_Conditional_48_Conditional_2_Conditional_9_For_8_For_2_Template, 2, 2, "td", 106, i0.ɵɵrepeaterTrackByIdentity);
|
|
427
402
|
i0.ɵɵelementEnd();
|
|
428
403
|
} if (rf & 2) {
|
|
429
|
-
const
|
|
404
|
+
const ctx_r0 = i0.ɵɵnextContext(5);
|
|
430
405
|
i0.ɵɵadvance();
|
|
431
|
-
i0.ɵɵrepeater(
|
|
406
|
+
i0.ɵɵrepeater(ctx_r0.PreviewDestColumns);
|
|
432
407
|
} }
|
|
433
|
-
function
|
|
434
|
-
i0.ɵɵelementStart(0, "div",
|
|
435
|
-
i0.ɵɵrepeaterCreate(4,
|
|
408
|
+
function PipelinesComponent_Conditional_14_Conditional_48_Conditional_2_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
409
|
+
i0.ɵɵelementStart(0, "div", 104)(1, "table", 105)(2, "thead")(3, "tr");
|
|
410
|
+
i0.ɵɵrepeaterCreate(4, PipelinesComponent_Conditional_14_Conditional_48_Conditional_2_Conditional_9_For_5_Template, 2, 1, "th", null, i0.ɵɵrepeaterTrackByIdentity);
|
|
436
411
|
i0.ɵɵelementEnd()();
|
|
437
412
|
i0.ɵɵelementStart(6, "tbody");
|
|
438
|
-
i0.ɵɵrepeaterCreate(7,
|
|
413
|
+
i0.ɵɵrepeaterCreate(7, PipelinesComponent_Conditional_14_Conditional_48_Conditional_2_Conditional_9_For_8_Template, 3, 0, "tr", null, i0.ɵɵrepeaterTrackByIndex);
|
|
439
414
|
i0.ɵɵelementEnd()()();
|
|
440
415
|
} if (rf & 2) {
|
|
441
|
-
const
|
|
416
|
+
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
442
417
|
i0.ɵɵadvance(4);
|
|
443
|
-
i0.ɵɵrepeater(
|
|
418
|
+
i0.ɵɵrepeater(ctx_r0.PreviewDestColumns);
|
|
444
419
|
i0.ɵɵadvance(3);
|
|
445
|
-
i0.ɵɵrepeater(
|
|
420
|
+
i0.ɵɵrepeater(ctx_r0.PreviewDestRows);
|
|
446
421
|
} }
|
|
447
|
-
function
|
|
448
|
-
const
|
|
449
|
-
i0.ɵɵelementStart(0, "div",
|
|
450
|
-
i0.ɵɵelement(2, "i",
|
|
422
|
+
function PipelinesComponent_Conditional_14_Conditional_48_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
423
|
+
const _r13 = i0.ɵɵgetCurrentView();
|
|
424
|
+
i0.ɵɵelementStart(0, "div", 98)(1, "div", 99);
|
|
425
|
+
i0.ɵɵelement(2, "i", 81);
|
|
451
426
|
i0.ɵɵelementStart(3, "span");
|
|
452
427
|
i0.ɵɵtext(4);
|
|
453
428
|
i0.ɵɵelementEnd();
|
|
454
|
-
i0.ɵɵelementStart(5, "button",
|
|
455
|
-
i0.ɵɵlistener("click", function
|
|
456
|
-
i0.ɵɵelement(6, "i",
|
|
429
|
+
i0.ɵɵelementStart(5, "button", 100);
|
|
430
|
+
i0.ɵɵlistener("click", function PipelinesComponent_Conditional_14_Conditional_48_Conditional_2_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r13); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.ShowDestPreview = false); });
|
|
431
|
+
i0.ɵɵelement(6, "i", 101);
|
|
457
432
|
i0.ɵɵelementEnd()();
|
|
458
|
-
i0.ɵɵconditionalCreate(7,
|
|
433
|
+
i0.ɵɵconditionalCreate(7, PipelinesComponent_Conditional_14_Conditional_48_Conditional_2_Conditional_7_Template, 3, 0, "div", 102)(8, PipelinesComponent_Conditional_14_Conditional_48_Conditional_2_Conditional_8_Template, 2, 0, "div", 103)(9, PipelinesComponent_Conditional_14_Conditional_48_Conditional_2_Conditional_9_Template, 9, 0, "div", 104);
|
|
459
434
|
i0.ɵɵelementEnd();
|
|
460
435
|
} if (rf & 2) {
|
|
461
|
-
const
|
|
436
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
462
437
|
i0.ɵɵadvance(4);
|
|
463
|
-
i0.ɵɵtextInterpolate1("Dest Preview: ",
|
|
438
|
+
i0.ɵɵtextInterpolate1("Dest Preview: ", ctx_r0.EditorEntityMap == null ? null : ctx_r0.EditorEntityMap.Entity);
|
|
464
439
|
i0.ɵɵadvance(3);
|
|
465
|
-
i0.ɵɵconditional(
|
|
440
|
+
i0.ɵɵconditional(ctx_r0.PreviewDestLoading ? 7 : ctx_r0.PreviewDestRows.length === 0 ? 8 : 9);
|
|
466
441
|
} }
|
|
467
|
-
function
|
|
468
|
-
i0.ɵɵelementStart(0, "div",
|
|
469
|
-
i0.ɵɵconditionalCreate(1,
|
|
470
|
-
i0.ɵɵconditionalCreate(2,
|
|
442
|
+
function PipelinesComponent_Conditional_14_Conditional_48_Template(rf, ctx) { if (rf & 1) {
|
|
443
|
+
i0.ɵɵelementStart(0, "div", 89);
|
|
444
|
+
i0.ɵɵconditionalCreate(1, PipelinesComponent_Conditional_14_Conditional_48_Conditional_1_Template, 10, 2, "div", 98);
|
|
445
|
+
i0.ɵɵconditionalCreate(2, PipelinesComponent_Conditional_14_Conditional_48_Conditional_2_Template, 10, 2, "div", 98);
|
|
471
446
|
i0.ɵɵelementEnd();
|
|
472
447
|
} if (rf & 2) {
|
|
473
|
-
const
|
|
448
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
474
449
|
i0.ɵɵadvance();
|
|
475
|
-
i0.ɵɵconditional(
|
|
450
|
+
i0.ɵɵconditional(ctx_r0.ShowSourcePreview ? 1 : -1);
|
|
476
451
|
i0.ɵɵadvance();
|
|
477
|
-
i0.ɵɵconditional(
|
|
452
|
+
i0.ɵɵconditional(ctx_r0.ShowDestPreview ? 2 : -1);
|
|
478
453
|
} }
|
|
479
|
-
function
|
|
480
|
-
const
|
|
481
|
-
i0.ɵɵelementStart(0, "div",
|
|
482
|
-
i0.ɵɵelement(1, "i",
|
|
454
|
+
function PipelinesComponent_Conditional_14_Conditional_49_Template(rf, ctx) { if (rf & 1) {
|
|
455
|
+
const _r17 = i0.ɵɵgetCurrentView();
|
|
456
|
+
i0.ɵɵelementStart(0, "div", 90);
|
|
457
|
+
i0.ɵɵelement(1, "i", 64);
|
|
483
458
|
i0.ɵɵtext(2, " Click a destination field to map from ");
|
|
484
459
|
i0.ɵɵelementStart(3, "strong");
|
|
485
460
|
i0.ɵɵtext(4);
|
|
486
461
|
i0.ɵɵelementEnd();
|
|
487
|
-
i0.ɵɵelementStart(5, "button",
|
|
488
|
-
i0.ɵɵlistener("click", function
|
|
462
|
+
i0.ɵɵelementStart(5, "button", 107);
|
|
463
|
+
i0.ɵɵlistener("click", function PipelinesComponent_Conditional_14_Conditional_49_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r17); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.CancelConnect()); });
|
|
489
464
|
i0.ɵɵtext(6, "Cancel");
|
|
490
465
|
i0.ɵɵelementEnd()();
|
|
491
466
|
} if (rf & 2) {
|
|
492
|
-
const
|
|
467
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
493
468
|
i0.ɵɵadvance(4);
|
|
494
|
-
i0.ɵɵtextInterpolate(
|
|
469
|
+
i0.ɵɵtextInterpolate(ctx_r0.ConnectingFromSource);
|
|
495
470
|
} }
|
|
496
|
-
function
|
|
497
|
-
i0.ɵɵelementStart(0, "div",
|
|
498
|
-
i0.ɵɵelement(1, "i",
|
|
471
|
+
function PipelinesComponent_Conditional_14_Conditional_51_Template(rf, ctx) { if (rf & 1) {
|
|
472
|
+
i0.ɵɵelementStart(0, "div", 92);
|
|
473
|
+
i0.ɵɵelement(1, "i", 19);
|
|
499
474
|
i0.ɵɵelementStart(2, "span");
|
|
500
475
|
i0.ɵɵtext(3, "Loading field mappings...");
|
|
501
476
|
i0.ɵɵelementEnd()();
|
|
502
477
|
} }
|
|
503
|
-
function
|
|
504
|
-
i0.ɵɵelementStart(0, "span",
|
|
478
|
+
function PipelinesComponent_Conditional_14_Conditional_52_Conditional_8_For_26_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
479
|
+
i0.ɵɵelementStart(0, "span", 141);
|
|
505
480
|
i0.ɵɵtext(1, "PK");
|
|
506
481
|
i0.ɵɵelementEnd();
|
|
507
482
|
} }
|
|
508
|
-
function
|
|
509
|
-
i0.ɵɵelementStart(0, "span",
|
|
483
|
+
function PipelinesComponent_Conditional_14_Conditional_52_Conditional_8_For_26_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
484
|
+
i0.ɵɵelementStart(0, "span", 142);
|
|
510
485
|
i0.ɵɵtext(1, "*");
|
|
511
486
|
i0.ɵɵelementEnd();
|
|
512
487
|
} }
|
|
513
|
-
function
|
|
514
|
-
const
|
|
515
|
-
i0.ɵɵelementStart(0, "div",
|
|
516
|
-
i0.ɵɵlistener("click", function
|
|
517
|
-
i0.ɵɵelementStart(1, "span",
|
|
488
|
+
function PipelinesComponent_Conditional_14_Conditional_52_Conditional_8_For_26_Template(rf, ctx) { if (rf & 1) {
|
|
489
|
+
const _r20 = i0.ɵɵgetCurrentView();
|
|
490
|
+
i0.ɵɵelementStart(0, "div", 137);
|
|
491
|
+
i0.ɵɵlistener("click", function PipelinesComponent_Conditional_14_Conditional_52_Conditional_8_For_26_Template_div_click_0_listener($event) { const sf_r21 = i0.ɵɵrestoreView(_r20).$implicit; const ctx_r0 = i0.ɵɵnextContext(4); ctx_r0.OnEditorSourceClick(sf_r21.Name); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
492
|
+
i0.ɵɵelementStart(1, "span", 138);
|
|
518
493
|
i0.ɵɵtext(2);
|
|
519
494
|
i0.ɵɵelementEnd();
|
|
520
|
-
i0.ɵɵelementStart(3, "span",
|
|
495
|
+
i0.ɵɵelementStart(3, "span", 139);
|
|
521
496
|
i0.ɵɵtext(4);
|
|
522
497
|
i0.ɵɵelementEnd();
|
|
523
|
-
i0.ɵɵelementStart(5, "span",
|
|
524
|
-
i0.ɵɵconditionalCreate(6,
|
|
525
|
-
i0.ɵɵconditionalCreate(7,
|
|
498
|
+
i0.ɵɵelementStart(5, "span", 140);
|
|
499
|
+
i0.ɵɵconditionalCreate(6, PipelinesComponent_Conditional_14_Conditional_52_Conditional_8_For_26_Conditional_6_Template, 2, 0, "span", 141);
|
|
500
|
+
i0.ɵɵconditionalCreate(7, PipelinesComponent_Conditional_14_Conditional_52_Conditional_8_For_26_Conditional_7_Template, 2, 0, "span", 142);
|
|
526
501
|
i0.ɵɵelementEnd()();
|
|
527
502
|
} if (rf & 2) {
|
|
528
|
-
const
|
|
529
|
-
const
|
|
530
|
-
i0.ɵɵstyleProp("height",
|
|
531
|
-
i0.ɵɵclassProp("mapped",
|
|
503
|
+
const sf_r21 = ctx.$implicit;
|
|
504
|
+
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
505
|
+
i0.ɵɵstyleProp("height", ctx_r0.FIELD_HEIGHT, "px");
|
|
506
|
+
i0.ɵɵclassProp("mapped", ctx_r0.IsSourceFieldMapped(sf_r21.Name))("unmapped", !ctx_r0.IsSourceFieldMapped(sf_r21.Name))("connecting", ctx_r0.ConnectingFromSource === sf_r21.Name);
|
|
532
507
|
i0.ɵɵadvance();
|
|
533
|
-
i0.ɵɵproperty("title",
|
|
508
|
+
i0.ɵɵproperty("title", sf_r21.Name);
|
|
534
509
|
i0.ɵɵadvance();
|
|
535
|
-
i0.ɵɵtextInterpolate(
|
|
510
|
+
i0.ɵɵtextInterpolate(sf_r21.Label || sf_r21.Name);
|
|
536
511
|
i0.ɵɵadvance(2);
|
|
537
|
-
i0.ɵɵtextInterpolate(
|
|
512
|
+
i0.ɵɵtextInterpolate(sf_r21.Type);
|
|
538
513
|
i0.ɵɵadvance(2);
|
|
539
|
-
i0.ɵɵconditional(
|
|
514
|
+
i0.ɵɵconditional(sf_r21.IsPrimaryKey ? 6 : -1);
|
|
540
515
|
i0.ɵɵadvance();
|
|
541
|
-
i0.ɵɵconditional(
|
|
516
|
+
i0.ɵɵconditional(sf_r21.IsRequired ? 7 : -1);
|
|
542
517
|
} }
|
|
543
|
-
function
|
|
544
|
-
i0.ɵɵelementStart(0, "div",
|
|
518
|
+
function PipelinesComponent_Conditional_14_Conditional_52_Conditional_8_Conditional_27_Template(rf, ctx) { if (rf & 1) {
|
|
519
|
+
i0.ɵɵelementStart(0, "div", 133);
|
|
545
520
|
i0.ɵɵtext(1, "No source fields found");
|
|
546
521
|
i0.ɵɵelementEnd();
|
|
547
522
|
} }
|
|
548
|
-
function
|
|
549
|
-
const
|
|
523
|
+
function PipelinesComponent_Conditional_14_Conditional_52_Conditional_8_For_30_Template(rf, ctx) { if (rf & 1) {
|
|
524
|
+
const _r22 = i0.ɵɵgetCurrentView();
|
|
550
525
|
i0.ɵɵnamespaceSVG();
|
|
551
|
-
i0.ɵɵelementStart(0, "path",
|
|
552
|
-
i0.ɵɵlistener("click", function
|
|
526
|
+
i0.ɵɵelementStart(0, "path", 143);
|
|
527
|
+
i0.ɵɵlistener("click", function PipelinesComponent_Conditional_14_Conditional_52_Conditional_8_For_30_Template_path_click_0_listener($event) { const ɵ$index_493_r23 = i0.ɵɵrestoreView(_r22).$index; const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.SelectConnection(ɵ$index_493_r23, $event)); });
|
|
553
528
|
i0.ɵɵelementEnd();
|
|
554
|
-
i0.ɵɵelementStart(1, "foreignObject",
|
|
529
|
+
i0.ɵɵelementStart(1, "foreignObject", 144);
|
|
555
530
|
i0.ɵɵnamespaceHTML();
|
|
556
|
-
i0.ɵɵelementStart(2, "div",
|
|
557
|
-
i0.ɵɵlistener("click", function
|
|
531
|
+
i0.ɵɵelementStart(2, "div", 145);
|
|
532
|
+
i0.ɵɵlistener("click", function PipelinesComponent_Conditional_14_Conditional_52_Conditional_8_For_30_Template_div_click_2_listener($event) { const ɵ$index_493_r23 = i0.ɵɵrestoreView(_r22).$index; const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.SelectConnection(ɵ$index_493_r23, $event)); });
|
|
558
533
|
i0.ɵɵelement(3, "i");
|
|
559
534
|
i0.ɵɵelementEnd()();
|
|
560
535
|
} if (rf & 2) {
|
|
561
|
-
const
|
|
562
|
-
const ɵ$
|
|
563
|
-
const
|
|
564
|
-
i0.ɵɵclassMap("ve-conn-line " +
|
|
565
|
-
i0.ɵɵclassProp("selected",
|
|
566
|
-
i0.ɵɵattribute("d",
|
|
536
|
+
const conn_r24 = ctx.$implicit;
|
|
537
|
+
const ɵ$index_493_r23 = ctx.$index;
|
|
538
|
+
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
539
|
+
i0.ɵɵclassMap("ve-conn-line " + ctx_r0.GetConnectionLineClass(conn_r24));
|
|
540
|
+
i0.ɵɵclassProp("selected", ctx_r0.SelectedConnectionIdx === ɵ$index_493_r23);
|
|
541
|
+
i0.ɵɵattribute("d", ctx_r0.GetConnectionPath(conn_r24));
|
|
567
542
|
i0.ɵɵadvance();
|
|
568
|
-
i0.ɵɵattribute("x",
|
|
543
|
+
i0.ɵɵattribute("x", ctx_r0.SVG_WIDTH / 2 - 14)("y", ctx_r0.GetConnectionMidY(conn_r24) - 14);
|
|
569
544
|
i0.ɵɵadvance();
|
|
570
|
-
i0.ɵɵclassMap("ve-conn-badge " +
|
|
571
|
-
i0.ɵɵclassProp("selected",
|
|
545
|
+
i0.ɵɵclassMap("ve-conn-badge " + ctx_r0.GetConnectionBadgeClass(conn_r24));
|
|
546
|
+
i0.ɵɵclassProp("selected", ctx_r0.SelectedConnectionIdx === ɵ$index_493_r23);
|
|
572
547
|
i0.ɵɵadvance();
|
|
573
|
-
i0.ɵɵclassMap(
|
|
548
|
+
i0.ɵɵclassMap(ctx_r0.GetConnectionDirectionIcon(conn_r24));
|
|
574
549
|
} }
|
|
575
|
-
function
|
|
576
|
-
i0.ɵɵelementStart(0, "span",
|
|
550
|
+
function PipelinesComponent_Conditional_14_Conditional_52_Conditional_8_For_33_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
551
|
+
i0.ɵɵelementStart(0, "span", 142);
|
|
577
552
|
i0.ɵɵtext(1, "*");
|
|
578
553
|
i0.ɵɵelementEnd();
|
|
579
554
|
} }
|
|
580
|
-
function
|
|
581
|
-
const
|
|
582
|
-
i0.ɵɵelementStart(0, "div",
|
|
583
|
-
i0.ɵɵlistener("click", function
|
|
584
|
-
i0.ɵɵelementStart(1, "span",
|
|
555
|
+
function PipelinesComponent_Conditional_14_Conditional_52_Conditional_8_For_33_Template(rf, ctx) { if (rf & 1) {
|
|
556
|
+
const _r25 = i0.ɵɵgetCurrentView();
|
|
557
|
+
i0.ɵɵelementStart(0, "div", 137);
|
|
558
|
+
i0.ɵɵlistener("click", function PipelinesComponent_Conditional_14_Conditional_52_Conditional_8_For_33_Template_div_click_0_listener($event) { const df_r26 = i0.ɵɵrestoreView(_r25).$implicit; const ctx_r0 = i0.ɵɵnextContext(4); ctx_r0.OnEditorDestClick(df_r26.Name); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
559
|
+
i0.ɵɵelementStart(1, "span", 138);
|
|
585
560
|
i0.ɵɵtext(2);
|
|
586
561
|
i0.ɵɵelementEnd();
|
|
587
|
-
i0.ɵɵelementStart(3, "span",
|
|
562
|
+
i0.ɵɵelementStart(3, "span", 139);
|
|
588
563
|
i0.ɵɵtext(4);
|
|
589
564
|
i0.ɵɵelementEnd();
|
|
590
|
-
i0.ɵɵelementStart(5, "span",
|
|
591
|
-
i0.ɵɵconditionalCreate(6,
|
|
565
|
+
i0.ɵɵelementStart(5, "span", 140);
|
|
566
|
+
i0.ɵɵconditionalCreate(6, PipelinesComponent_Conditional_14_Conditional_52_Conditional_8_For_33_Conditional_6_Template, 2, 0, "span", 142);
|
|
592
567
|
i0.ɵɵelementEnd()();
|
|
593
568
|
} if (rf & 2) {
|
|
594
|
-
const
|
|
595
|
-
const
|
|
596
|
-
i0.ɵɵstyleProp("height",
|
|
597
|
-
i0.ɵɵclassProp("mapped",
|
|
569
|
+
const df_r26 = ctx.$implicit;
|
|
570
|
+
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
571
|
+
i0.ɵɵstyleProp("height", ctx_r0.FIELD_HEIGHT, "px");
|
|
572
|
+
i0.ɵɵclassProp("mapped", ctx_r0.IsDestFieldMapped(df_r26.Name))("unmapped", !ctx_r0.IsDestFieldMapped(df_r26.Name))("connect-target", ctx_r0.ConnectingFromSource !== null);
|
|
598
573
|
i0.ɵɵadvance();
|
|
599
|
-
i0.ɵɵproperty("title",
|
|
574
|
+
i0.ɵɵproperty("title", df_r26.Name);
|
|
600
575
|
i0.ɵɵadvance();
|
|
601
|
-
i0.ɵɵtextInterpolate(
|
|
576
|
+
i0.ɵɵtextInterpolate(df_r26.Name);
|
|
602
577
|
i0.ɵɵadvance(2);
|
|
603
|
-
i0.ɵɵtextInterpolate(
|
|
578
|
+
i0.ɵɵtextInterpolate(df_r26.Type);
|
|
604
579
|
i0.ɵɵadvance(2);
|
|
605
|
-
i0.ɵɵconditional(
|
|
580
|
+
i0.ɵɵconditional(df_r26.IsRequired ? 6 : -1);
|
|
606
581
|
} }
|
|
607
|
-
function
|
|
608
|
-
i0.ɵɵelementStart(0, "div",
|
|
582
|
+
function PipelinesComponent_Conditional_14_Conditional_52_Conditional_8_Conditional_34_Template(rf, ctx) { if (rf & 1) {
|
|
583
|
+
i0.ɵɵelementStart(0, "div", 133);
|
|
609
584
|
i0.ɵɵtext(1, "No destination fields found");
|
|
610
585
|
i0.ɵɵelementEnd();
|
|
611
586
|
} }
|
|
612
|
-
function
|
|
613
|
-
const
|
|
614
|
-
i0.ɵɵelementStart(0, "div",
|
|
615
|
-
i0.ɵɵelement(4, "i",
|
|
587
|
+
function PipelinesComponent_Conditional_14_Conditional_52_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
588
|
+
const _r19 = i0.ɵɵgetCurrentView();
|
|
589
|
+
i0.ɵɵelementStart(0, "div", 114)(1, "div", 117)(2, "div", 118)(3, "div", 119);
|
|
590
|
+
i0.ɵɵelement(4, "i", 79);
|
|
616
591
|
i0.ɵɵtext(5, " Source Fields ");
|
|
617
|
-
i0.ɵɵelementStart(6, "span",
|
|
592
|
+
i0.ɵɵelementStart(6, "span", 120);
|
|
618
593
|
i0.ɵɵtext(7);
|
|
619
594
|
i0.ɵɵelementEnd()();
|
|
620
|
-
i0.ɵɵelement(8, "div",
|
|
621
|
-
i0.ɵɵelementStart(9, "div",
|
|
622
|
-
i0.ɵɵelement(10, "i",
|
|
595
|
+
i0.ɵɵelement(8, "div", 121);
|
|
596
|
+
i0.ɵɵelementStart(9, "div", 122);
|
|
597
|
+
i0.ɵɵelement(10, "i", 81);
|
|
623
598
|
i0.ɵɵtext(11, " MJ Entity Fields ");
|
|
624
|
-
i0.ɵɵelementStart(12, "span",
|
|
599
|
+
i0.ɵɵelementStart(12, "span", 120);
|
|
625
600
|
i0.ɵɵtext(13);
|
|
626
601
|
i0.ɵɵelementEnd()()();
|
|
627
|
-
i0.ɵɵelementStart(14, "div",
|
|
628
|
-
i0.ɵɵelement(16, "i",
|
|
629
|
-
i0.ɵɵelementStart(17, "input",
|
|
630
|
-
i0.ɵɵlistener("input", function
|
|
602
|
+
i0.ɵɵelementStart(14, "div", 123)(15, "div", 124);
|
|
603
|
+
i0.ɵɵelement(16, "i", 125);
|
|
604
|
+
i0.ɵɵelementStart(17, "input", 126);
|
|
605
|
+
i0.ɵɵlistener("input", function PipelinesComponent_Conditional_14_Conditional_52_Conditional_8_Template_input_input_17_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.EditorSearchSource = $event.target.value); });
|
|
631
606
|
i0.ɵɵelementEnd()();
|
|
632
|
-
i0.ɵɵelement(18, "div",
|
|
633
|
-
i0.ɵɵelementStart(19, "div",
|
|
634
|
-
i0.ɵɵelement(20, "i",
|
|
635
|
-
i0.ɵɵelementStart(21, "input",
|
|
636
|
-
i0.ɵɵlistener("input", function
|
|
607
|
+
i0.ɵɵelement(18, "div", 127);
|
|
608
|
+
i0.ɵɵelementStart(19, "div", 124);
|
|
609
|
+
i0.ɵɵelement(20, "i", 125);
|
|
610
|
+
i0.ɵɵelementStart(21, "input", 128);
|
|
611
|
+
i0.ɵɵlistener("input", function PipelinesComponent_Conditional_14_Conditional_52_Conditional_8_Template_input_input_21_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.EditorSearchDest = $event.target.value); });
|
|
637
612
|
i0.ɵɵelementEnd()()();
|
|
638
|
-
i0.ɵɵelementStart(22, "div",
|
|
639
|
-
i0.ɵɵlistener("click", function
|
|
640
|
-
i0.ɵɵelementStart(23, "div",
|
|
641
|
-
i0.ɵɵrepeaterCreate(25,
|
|
642
|
-
i0.ɵɵconditionalCreate(27,
|
|
613
|
+
i0.ɵɵelementStart(22, "div", 129);
|
|
614
|
+
i0.ɵɵlistener("click", function PipelinesComponent_Conditional_14_Conditional_52_Conditional_8_Template_div_click_22_listener() { i0.ɵɵrestoreView(_r19); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.DeselectConnection()); });
|
|
615
|
+
i0.ɵɵelementStart(23, "div", 130)(24, "div", 131);
|
|
616
|
+
i0.ɵɵrepeaterCreate(25, PipelinesComponent_Conditional_14_Conditional_52_Conditional_8_For_26_Template, 8, 13, "div", 132, _forTrack2);
|
|
617
|
+
i0.ɵɵconditionalCreate(27, PipelinesComponent_Conditional_14_Conditional_52_Conditional_8_Conditional_27_Template, 2, 0, "div", 133);
|
|
643
618
|
i0.ɵɵelementEnd();
|
|
644
619
|
i0.ɵɵnamespaceSVG();
|
|
645
|
-
i0.ɵɵelementStart(28, "svg",
|
|
646
|
-
i0.ɵɵlistener("click", function
|
|
647
|
-
i0.ɵɵrepeaterCreate(29,
|
|
620
|
+
i0.ɵɵelementStart(28, "svg", 134);
|
|
621
|
+
i0.ɵɵlistener("click", function PipelinesComponent_Conditional_14_Conditional_52_Conditional_8_Template_svg_click_28_listener($event) { i0.ɵɵrestoreView(_r19); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
622
|
+
i0.ɵɵrepeaterCreate(29, PipelinesComponent_Conditional_14_Conditional_52_Conditional_8_For_30_Template, 4, 13, null, null, _forTrack3);
|
|
648
623
|
i0.ɵɵelementEnd();
|
|
649
624
|
i0.ɵɵnamespaceHTML();
|
|
650
|
-
i0.ɵɵelementStart(31, "div",
|
|
651
|
-
i0.ɵɵrepeaterCreate(32,
|
|
652
|
-
i0.ɵɵconditionalCreate(34,
|
|
625
|
+
i0.ɵɵelementStart(31, "div", 135);
|
|
626
|
+
i0.ɵɵrepeaterCreate(32, PipelinesComponent_Conditional_14_Conditional_52_Conditional_8_For_33_Template, 7, 12, "div", 136, _forTrack2);
|
|
627
|
+
i0.ɵɵconditionalCreate(34, PipelinesComponent_Conditional_14_Conditional_52_Conditional_8_Conditional_34_Template, 2, 0, "div", 133);
|
|
653
628
|
i0.ɵɵelementEnd()()()()();
|
|
654
629
|
} if (rf & 2) {
|
|
655
|
-
const
|
|
630
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
656
631
|
i0.ɵɵadvance(7);
|
|
657
|
-
i0.ɵɵtextInterpolate(
|
|
632
|
+
i0.ɵɵtextInterpolate(ctx_r0.EditorSourceFields.length);
|
|
658
633
|
i0.ɵɵadvance(6);
|
|
659
|
-
i0.ɵɵtextInterpolate(
|
|
634
|
+
i0.ɵɵtextInterpolate(ctx_r0.EditorDestFields.length);
|
|
660
635
|
i0.ɵɵadvance(4);
|
|
661
|
-
i0.ɵɵproperty("value",
|
|
636
|
+
i0.ɵɵproperty("value", ctx_r0.EditorSearchSource);
|
|
662
637
|
i0.ɵɵadvance(4);
|
|
663
|
-
i0.ɵɵproperty("value",
|
|
638
|
+
i0.ɵɵproperty("value", ctx_r0.EditorSearchDest);
|
|
664
639
|
i0.ɵɵadvance(2);
|
|
665
|
-
i0.ɵɵstyleProp("min-height",
|
|
640
|
+
i0.ɵɵstyleProp("min-height", ctx_r0.EditorCanvasHeight, "px");
|
|
666
641
|
i0.ɵɵadvance(2);
|
|
667
|
-
i0.ɵɵrepeater(
|
|
642
|
+
i0.ɵɵrepeater(ctx_r0.FilteredEditorSourceFields);
|
|
668
643
|
i0.ɵɵadvance(2);
|
|
669
|
-
i0.ɵɵconditional(
|
|
644
|
+
i0.ɵɵconditional(ctx_r0.FilteredEditorSourceFields.length === 0 ? 27 : -1);
|
|
670
645
|
i0.ɵɵadvance();
|
|
671
|
-
i0.ɵɵattribute("width",
|
|
646
|
+
i0.ɵɵattribute("width", ctx_r0.SVG_WIDTH)("height", ctx_r0.EditorCanvasHeight)("viewBox", "0 0 " + ctx_r0.SVG_WIDTH + " " + ctx_r0.EditorCanvasHeight);
|
|
672
647
|
i0.ɵɵadvance();
|
|
673
|
-
i0.ɵɵrepeater(
|
|
648
|
+
i0.ɵɵrepeater(ctx_r0.VisibleConnections);
|
|
674
649
|
i0.ɵɵadvance(3);
|
|
675
|
-
i0.ɵɵrepeater(
|
|
650
|
+
i0.ɵɵrepeater(ctx_r0.FilteredEditorDestFields);
|
|
676
651
|
i0.ɵɵadvance(2);
|
|
677
|
-
i0.ɵɵconditional(
|
|
652
|
+
i0.ɵɵconditional(ctx_r0.FilteredEditorDestFields.length === 0 ? 34 : -1);
|
|
678
653
|
} }
|
|
679
|
-
function
|
|
680
|
-
i0.ɵɵelementStart(0, "div",
|
|
681
|
-
i0.ɵɵelement(1, "i",
|
|
654
|
+
function PipelinesComponent_Conditional_14_Conditional_52_Conditional_14_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
655
|
+
i0.ɵɵelementStart(0, "div", 146);
|
|
656
|
+
i0.ɵɵelement(1, "i", 19);
|
|
682
657
|
i0.ɵɵtext(2, " Loading stats... ");
|
|
683
658
|
i0.ɵɵelementEnd();
|
|
684
659
|
} }
|
|
685
|
-
function
|
|
686
|
-
i0.ɵɵelementStart(0, "div",
|
|
687
|
-
i0.ɵɵelement(2, "i",
|
|
660
|
+
function PipelinesComponent_Conditional_14_Conditional_52_Conditional_14_Conditional_2_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
661
|
+
i0.ɵɵelementStart(0, "div", 148)(1, "div", 159);
|
|
662
|
+
i0.ɵɵelement(2, "i", 111);
|
|
688
663
|
i0.ɵɵelementEnd();
|
|
689
|
-
i0.ɵɵelementStart(3, "div",
|
|
664
|
+
i0.ɵɵelementStart(3, "div", 150)(4, "span", 151);
|
|
690
665
|
i0.ɵɵtext(5);
|
|
691
666
|
i0.ɵɵelementEnd();
|
|
692
|
-
i0.ɵɵelementStart(6, "span",
|
|
667
|
+
i0.ɵɵelementStart(6, "span", 152);
|
|
693
668
|
i0.ɵɵtext(7);
|
|
694
669
|
i0.ɵɵelementEnd()()();
|
|
695
670
|
} if (rf & 2) {
|
|
696
|
-
const
|
|
671
|
+
const ctx_r0 = i0.ɵɵnextContext(5);
|
|
697
672
|
i0.ɵɵadvance();
|
|
698
|
-
i0.ɵɵproperty("ngClass",
|
|
673
|
+
i0.ɵɵproperty("ngClass", ctx_r0.SyncStatusClass(ctx_r0.InfoLastSync.Status));
|
|
699
674
|
i0.ɵɵadvance();
|
|
700
|
-
i0.ɵɵclassProp("fa-circle-check",
|
|
675
|
+
i0.ɵɵclassProp("fa-circle-check", ctx_r0.InfoLastSync.Status === "Success")("fa-circle-xmark", ctx_r0.InfoLastSync.Status === "Failed")("fa-spinner", ctx_r0.InfoLastSync.Status === "In Progress")("fa-clock", ctx_r0.InfoLastSync.Status === "Pending");
|
|
701
676
|
i0.ɵɵadvance(3);
|
|
702
|
-
i0.ɵɵtextInterpolate(
|
|
677
|
+
i0.ɵɵtextInterpolate(ctx_r0.InfoLastSync.Status);
|
|
703
678
|
i0.ɵɵadvance(2);
|
|
704
|
-
i0.ɵɵtextInterpolate1("",
|
|
679
|
+
i0.ɵɵtextInterpolate1("", ctx_r0.InfoLastSync.TotalRecords, " records processed");
|
|
705
680
|
} }
|
|
706
|
-
function
|
|
707
|
-
i0.ɵɵelementStart(0, "div",
|
|
681
|
+
function PipelinesComponent_Conditional_14_Conditional_52_Conditional_14_Conditional_2_Conditional_47_Template(rf, ctx) { if (rf & 1) {
|
|
682
|
+
i0.ɵɵelementStart(0, "div", 156)(1, "span", 157);
|
|
708
683
|
i0.ɵɵtext(2, "Match Strategy");
|
|
709
684
|
i0.ɵɵelementEnd();
|
|
710
|
-
i0.ɵɵelementStart(3, "span",
|
|
685
|
+
i0.ɵɵelementStart(3, "span", 158);
|
|
711
686
|
i0.ɵɵtext(4, "Configured");
|
|
712
687
|
i0.ɵɵelementEnd()();
|
|
713
688
|
} }
|
|
714
|
-
function
|
|
715
|
-
i0.ɵɵelementStart(0, "div",
|
|
716
|
-
i0.ɵɵelement(3, "i",
|
|
689
|
+
function PipelinesComponent_Conditional_14_Conditional_52_Conditional_14_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
690
|
+
i0.ɵɵelementStart(0, "div", 147)(1, "div", 148)(2, "div", 149);
|
|
691
|
+
i0.ɵɵelement(3, "i", 81);
|
|
717
692
|
i0.ɵɵelementEnd();
|
|
718
|
-
i0.ɵɵelementStart(4, "div",
|
|
693
|
+
i0.ɵɵelementStart(4, "div", 150)(5, "span", 151);
|
|
719
694
|
i0.ɵɵtext(6);
|
|
720
695
|
i0.ɵɵelementEnd();
|
|
721
|
-
i0.ɵɵelementStart(7, "span",
|
|
696
|
+
i0.ɵɵelementStart(7, "span", 152);
|
|
722
697
|
i0.ɵɵtext(8, "MJ Records");
|
|
723
698
|
i0.ɵɵelementEnd()()();
|
|
724
|
-
i0.ɵɵelementStart(9, "div",
|
|
725
|
-
i0.ɵɵelement(11, "i",
|
|
699
|
+
i0.ɵɵelementStart(9, "div", 148)(10, "div", 153);
|
|
700
|
+
i0.ɵɵelement(11, "i", 79);
|
|
726
701
|
i0.ɵɵelementEnd();
|
|
727
|
-
i0.ɵɵelementStart(12, "div",
|
|
702
|
+
i0.ɵɵelementStart(12, "div", 150)(13, "span", 151);
|
|
728
703
|
i0.ɵɵtext(14);
|
|
729
704
|
i0.ɵɵelementEnd();
|
|
730
|
-
i0.ɵɵelementStart(15, "span",
|
|
705
|
+
i0.ɵɵelementStart(15, "span", 152);
|
|
731
706
|
i0.ɵɵtext(16, "Source Fields");
|
|
732
707
|
i0.ɵɵelementEnd()()();
|
|
733
|
-
i0.ɵɵelementStart(17, "div",
|
|
734
|
-
i0.ɵɵelement(19, "i",
|
|
708
|
+
i0.ɵɵelementStart(17, "div", 148)(18, "div", 154);
|
|
709
|
+
i0.ɵɵelement(19, "i", 61);
|
|
735
710
|
i0.ɵɵelementEnd();
|
|
736
|
-
i0.ɵɵelementStart(20, "div",
|
|
711
|
+
i0.ɵɵelementStart(20, "div", 150)(21, "span", 151);
|
|
737
712
|
i0.ɵɵtext(22);
|
|
738
713
|
i0.ɵɵelementEnd();
|
|
739
|
-
i0.ɵɵelementStart(23, "span",
|
|
714
|
+
i0.ɵɵelementStart(23, "span", 152);
|
|
740
715
|
i0.ɵɵtext(24, "Last Sync");
|
|
741
716
|
i0.ɵɵelementEnd()()();
|
|
742
|
-
i0.ɵɵconditionalCreate(25,
|
|
717
|
+
i0.ɵɵconditionalCreate(25, PipelinesComponent_Conditional_14_Conditional_52_Conditional_14_Conditional_2_Conditional_25_Template, 8, 11, "div", 148);
|
|
743
718
|
i0.ɵɵelementEnd();
|
|
744
|
-
i0.ɵɵelementStart(26, "div",
|
|
719
|
+
i0.ɵɵelementStart(26, "div", 155)(27, "div", 156)(28, "span", 157);
|
|
745
720
|
i0.ɵɵtext(29, "Sync Direction");
|
|
746
721
|
i0.ɵɵelementEnd();
|
|
747
|
-
i0.ɵɵelementStart(30, "span",
|
|
722
|
+
i0.ɵɵelementStart(30, "span", 158);
|
|
748
723
|
i0.ɵɵtext(31);
|
|
749
724
|
i0.ɵɵelementEnd()();
|
|
750
|
-
i0.ɵɵelementStart(32, "div",
|
|
725
|
+
i0.ɵɵelementStart(32, "div", 156)(33, "span", 157);
|
|
751
726
|
i0.ɵɵtext(34, "Conflict Resolution");
|
|
752
727
|
i0.ɵɵelementEnd();
|
|
753
|
-
i0.ɵɵelementStart(35, "span",
|
|
728
|
+
i0.ɵɵelementStart(35, "span", 158);
|
|
754
729
|
i0.ɵɵtext(36);
|
|
755
730
|
i0.ɵɵelementEnd()();
|
|
756
|
-
i0.ɵɵelementStart(37, "div",
|
|
731
|
+
i0.ɵɵelementStart(37, "div", 156)(38, "span", 157);
|
|
757
732
|
i0.ɵɵtext(39, "Delete Behavior");
|
|
758
733
|
i0.ɵɵelementEnd();
|
|
759
|
-
i0.ɵɵelementStart(40, "span",
|
|
734
|
+
i0.ɵɵelementStart(40, "span", 158);
|
|
760
735
|
i0.ɵɵtext(41);
|
|
761
736
|
i0.ɵɵelementEnd()();
|
|
762
|
-
i0.ɵɵelementStart(42, "div",
|
|
737
|
+
i0.ɵɵelementStart(42, "div", 156)(43, "span", 157);
|
|
763
738
|
i0.ɵɵtext(44, "Priority");
|
|
764
739
|
i0.ɵɵelementEnd();
|
|
765
|
-
i0.ɵɵelementStart(45, "span",
|
|
740
|
+
i0.ɵɵelementStart(45, "span", 158);
|
|
766
741
|
i0.ɵɵtext(46);
|
|
767
742
|
i0.ɵɵelementEnd()();
|
|
768
|
-
i0.ɵɵconditionalCreate(47,
|
|
743
|
+
i0.ɵɵconditionalCreate(47, PipelinesComponent_Conditional_14_Conditional_52_Conditional_14_Conditional_2_Conditional_47_Template, 5, 0, "div", 156);
|
|
769
744
|
i0.ɵɵelementEnd();
|
|
770
745
|
} if (rf & 2) {
|
|
771
|
-
const
|
|
746
|
+
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
772
747
|
i0.ɵɵadvance(6);
|
|
773
|
-
i0.ɵɵtextInterpolate(
|
|
748
|
+
i0.ɵɵtextInterpolate(ctx_r0.InfoDestRecordCount ?? "-");
|
|
774
749
|
i0.ɵɵadvance(8);
|
|
775
|
-
i0.ɵɵtextInterpolate(
|
|
750
|
+
i0.ɵɵtextInterpolate(ctx_r0.EditorSourceFields.length);
|
|
776
751
|
i0.ɵɵadvance(8);
|
|
777
|
-
i0.ɵɵtextInterpolate(
|
|
752
|
+
i0.ɵɵtextInterpolate(ctx_r0.FormatSyncDate((ctx_r0.InfoLastSync == null ? null : ctx_r0.InfoLastSync.StartedAt) ?? null));
|
|
778
753
|
i0.ɵɵadvance(3);
|
|
779
|
-
i0.ɵɵconditional(
|
|
754
|
+
i0.ɵɵconditional(ctx_r0.InfoLastSync ? 25 : -1);
|
|
780
755
|
i0.ɵɵadvance(6);
|
|
781
|
-
i0.ɵɵtextInterpolate(
|
|
756
|
+
i0.ɵɵtextInterpolate(ctx_r0.EditorEntityMap == null ? null : ctx_r0.EditorEntityMap.SyncDirection);
|
|
782
757
|
i0.ɵɵadvance(5);
|
|
783
|
-
i0.ɵɵtextInterpolate(
|
|
758
|
+
i0.ɵɵtextInterpolate(ctx_r0.EditorEntityMap == null ? null : ctx_r0.EditorEntityMap.ConflictResolution);
|
|
784
759
|
i0.ɵɵadvance(5);
|
|
785
|
-
i0.ɵɵtextInterpolate(
|
|
760
|
+
i0.ɵɵtextInterpolate(ctx_r0.EditorEntityMap == null ? null : ctx_r0.EditorEntityMap.DeleteBehavior);
|
|
786
761
|
i0.ɵɵadvance(5);
|
|
787
|
-
i0.ɵɵtextInterpolate(
|
|
762
|
+
i0.ɵɵtextInterpolate(ctx_r0.EditorEntityMap == null ? null : ctx_r0.EditorEntityMap.Priority);
|
|
788
763
|
i0.ɵɵadvance();
|
|
789
|
-
i0.ɵɵconditional((
|
|
764
|
+
i0.ɵɵconditional((ctx_r0.EditorEntityMap == null ? null : ctx_r0.EditorEntityMap.MatchStrategy) ? 47 : -1);
|
|
790
765
|
} }
|
|
791
|
-
function
|
|
792
|
-
i0.ɵɵelementStart(0, "div",
|
|
793
|
-
i0.ɵɵconditionalCreate(1,
|
|
766
|
+
function PipelinesComponent_Conditional_14_Conditional_52_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
767
|
+
i0.ɵɵelementStart(0, "div", 115);
|
|
768
|
+
i0.ɵɵconditionalCreate(1, PipelinesComponent_Conditional_14_Conditional_52_Conditional_14_Conditional_1_Template, 3, 0, "div", 146)(2, PipelinesComponent_Conditional_14_Conditional_52_Conditional_14_Conditional_2_Template, 48, 9);
|
|
794
769
|
i0.ɵɵelementEnd();
|
|
795
770
|
} if (rf & 2) {
|
|
796
|
-
const
|
|
771
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
797
772
|
i0.ɵɵadvance();
|
|
798
|
-
i0.ɵɵconditional(
|
|
773
|
+
i0.ɵɵconditional(ctx_r0.InfoPanelLoading ? 1 : 2);
|
|
799
774
|
} }
|
|
800
|
-
function
|
|
801
|
-
i0.ɵɵelement(0, "i",
|
|
775
|
+
function PipelinesComponent_Conditional_14_Conditional_52_Conditional_15_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
776
|
+
i0.ɵɵelement(0, "i", 96);
|
|
802
777
|
} }
|
|
803
|
-
function
|
|
804
|
-
i0.ɵɵelement(0, "i",
|
|
778
|
+
function PipelinesComponent_Conditional_14_Conditional_52_Conditional_15_Conditional_21_Template(rf, ctx) { if (rf & 1) {
|
|
779
|
+
i0.ɵɵelement(0, "i", 96);
|
|
805
780
|
} }
|
|
806
|
-
function
|
|
807
|
-
i0.ɵɵelementStart(0, "option",
|
|
781
|
+
function PipelinesComponent_Conditional_14_Conditional_52_Conditional_15_For_42_For_6_Template(rf, ctx) { if (rf & 1) {
|
|
782
|
+
i0.ɵɵelementStart(0, "option", 187);
|
|
808
783
|
i0.ɵɵtext(1);
|
|
809
784
|
i0.ɵɵelementEnd();
|
|
810
785
|
} if (rf & 2) {
|
|
811
|
-
const
|
|
812
|
-
const
|
|
813
|
-
i0.ɵɵproperty("value",
|
|
786
|
+
const tt_r30 = ctx.$implicit;
|
|
787
|
+
const step_r31 = i0.ɵɵnextContext().$implicit;
|
|
788
|
+
i0.ɵɵproperty("value", tt_r30.Value)("selected", tt_r30.Value === step_r31.Type);
|
|
814
789
|
i0.ɵɵadvance();
|
|
815
|
-
i0.ɵɵtextInterpolate(
|
|
790
|
+
i0.ɵɵtextInterpolate(tt_r30.Label);
|
|
816
791
|
} }
|
|
817
|
-
function
|
|
818
|
-
const
|
|
819
|
-
i0.ɵɵelementStart(0, "div",
|
|
792
|
+
function PipelinesComponent_Conditional_14_Conditional_52_Conditional_15_For_42_Conditional_9_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
793
|
+
const _r32 = i0.ɵɵgetCurrentView();
|
|
794
|
+
i0.ɵɵelementStart(0, "div", 195)(1, "label");
|
|
820
795
|
i0.ɵɵtext(2);
|
|
821
796
|
i0.ɵɵelementEnd();
|
|
822
|
-
i0.ɵɵelementStart(3, "input",
|
|
823
|
-
i0.ɵɵlistener("input", function
|
|
797
|
+
i0.ɵɵelementStart(3, "input", 196);
|
|
798
|
+
i0.ɵɵlistener("input", function PipelinesComponent_Conditional_14_Conditional_52_Conditional_15_For_42_Conditional_9_For_2_Template_input_input_3_listener($event) { const key_r33 = i0.ɵɵrestoreView(_r32).$implicit; const ɵ$index_718_r29 = i0.ɵɵnextContext(2).$index; const conn_r34 = i0.ɵɵnextContext(); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.OnTransformConfigChange(conn_r34, ɵ$index_718_r29, key_r33, $event.target.value)); });
|
|
824
799
|
i0.ɵɵelementEnd()();
|
|
825
800
|
} if (rf & 2) {
|
|
826
|
-
const
|
|
827
|
-
const
|
|
828
|
-
const
|
|
801
|
+
const key_r33 = ctx.$implicit;
|
|
802
|
+
const step_r31 = i0.ɵɵnextContext(2).$implicit;
|
|
803
|
+
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
829
804
|
i0.ɵɵadvance(2);
|
|
830
|
-
i0.ɵɵtextInterpolate(
|
|
805
|
+
i0.ɵɵtextInterpolate(key_r33);
|
|
831
806
|
i0.ɵɵadvance();
|
|
832
|
-
i0.ɵɵproperty("placeholder", i0.ɵɵinterpolate(
|
|
807
|
+
i0.ɵɵproperty("placeholder", i0.ɵɵinterpolate(key_r33))("value", ctx_r0.GetConfigValue(step_r31, key_r33));
|
|
833
808
|
} }
|
|
834
|
-
function
|
|
835
|
-
i0.ɵɵelementStart(0, "div",
|
|
836
|
-
i0.ɵɵrepeaterCreate(1,
|
|
809
|
+
function PipelinesComponent_Conditional_14_Conditional_52_Conditional_15_For_42_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
810
|
+
i0.ɵɵelementStart(0, "div", 189);
|
|
811
|
+
i0.ɵɵrepeaterCreate(1, PipelinesComponent_Conditional_14_Conditional_52_Conditional_15_For_42_Conditional_9_For_2_Template, 4, 4, "div", 195, i0.ɵɵrepeaterTrackByIdentity);
|
|
837
812
|
i0.ɵɵelementEnd();
|
|
838
813
|
} if (rf & 2) {
|
|
839
|
-
const
|
|
840
|
-
const
|
|
814
|
+
const step_r31 = i0.ɵɵnextContext().$implicit;
|
|
815
|
+
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
841
816
|
i0.ɵɵadvance();
|
|
842
|
-
i0.ɵɵrepeater(
|
|
817
|
+
i0.ɵɵrepeater(ctx_r0.GetConfigKeys(step_r31));
|
|
843
818
|
} }
|
|
844
|
-
function
|
|
845
|
-
const
|
|
846
|
-
i0.ɵɵelementStart(0, "div",
|
|
819
|
+
function PipelinesComponent_Conditional_14_Conditional_52_Conditional_15_For_42_Template(rf, ctx) { if (rf & 1) {
|
|
820
|
+
const _r28 = i0.ɵɵgetCurrentView();
|
|
821
|
+
i0.ɵɵelementStart(0, "div", 179)(1, "div", 184)(2, "span", 185);
|
|
847
822
|
i0.ɵɵtext(3);
|
|
848
823
|
i0.ɵɵelementEnd();
|
|
849
|
-
i0.ɵɵelementStart(4, "select",
|
|
850
|
-
i0.ɵɵlistener("change", function
|
|
851
|
-
i0.ɵɵrepeaterCreate(5,
|
|
824
|
+
i0.ɵɵelementStart(4, "select", 186);
|
|
825
|
+
i0.ɵɵlistener("change", function PipelinesComponent_Conditional_14_Conditional_52_Conditional_15_For_42_Template_select_change_4_listener($event) { const ɵ$index_718_r29 = i0.ɵɵrestoreView(_r28).$index; const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.OnConnectionTransformChange(ɵ$index_718_r29, $event.target.value)); });
|
|
826
|
+
i0.ɵɵrepeaterCreate(5, PipelinesComponent_Conditional_14_Conditional_52_Conditional_15_For_42_For_6_Template, 2, 3, "option", 187, _forTrack4);
|
|
852
827
|
i0.ɵɵelementEnd();
|
|
853
|
-
i0.ɵɵelementStart(7, "button",
|
|
854
|
-
i0.ɵɵlistener("click", function
|
|
855
|
-
i0.ɵɵelement(8, "i",
|
|
828
|
+
i0.ɵɵelementStart(7, "button", 188);
|
|
829
|
+
i0.ɵɵlistener("click", function PipelinesComponent_Conditional_14_Conditional_52_Conditional_15_For_42_Template_button_click_7_listener() { const ɵ$index_718_r29 = i0.ɵɵrestoreView(_r28).$index; const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.RemoveTransformStep(ɵ$index_718_r29)); });
|
|
830
|
+
i0.ɵɵelement(8, "i", 183);
|
|
856
831
|
i0.ɵɵelementEnd()();
|
|
857
|
-
i0.ɵɵconditionalCreate(9,
|
|
858
|
-
i0.ɵɵelementStart(10, "div",
|
|
832
|
+
i0.ɵɵconditionalCreate(9, PipelinesComponent_Conditional_14_Conditional_52_Conditional_15_For_42_Conditional_9_Template, 3, 0, "div", 189);
|
|
833
|
+
i0.ɵɵelementStart(10, "div", 190)(11, "label");
|
|
859
834
|
i0.ɵɵtext(12, "On Error:");
|
|
860
835
|
i0.ɵɵelementEnd();
|
|
861
|
-
i0.ɵɵelementStart(13, "select",
|
|
862
|
-
i0.ɵɵlistener("change", function
|
|
863
|
-
i0.ɵɵelementStart(14, "option",
|
|
836
|
+
i0.ɵɵelementStart(13, "select", 191);
|
|
837
|
+
i0.ɵɵlistener("change", function PipelinesComponent_Conditional_14_Conditional_52_Conditional_15_For_42_Template_select_change_13_listener($event) { const step_r31 = i0.ɵɵrestoreView(_r28).$implicit; const conn_r34 = i0.ɵɵnextContext(); step_r31.OnError = $event.target.value; return i0.ɵɵresetView(conn_r34.IsDirty = true); });
|
|
838
|
+
i0.ɵɵelementStart(14, "option", 192);
|
|
864
839
|
i0.ɵɵtext(15, "Fail");
|
|
865
840
|
i0.ɵɵelementEnd();
|
|
866
|
-
i0.ɵɵelementStart(16, "option",
|
|
841
|
+
i0.ɵɵelementStart(16, "option", 193);
|
|
867
842
|
i0.ɵɵtext(17, "Skip");
|
|
868
843
|
i0.ɵɵelementEnd();
|
|
869
|
-
i0.ɵɵelementStart(18, "option",
|
|
844
|
+
i0.ɵɵelementStart(18, "option", 194);
|
|
870
845
|
i0.ɵɵtext(19, "Null");
|
|
871
846
|
i0.ɵɵelementEnd()()()();
|
|
872
847
|
} if (rf & 2) {
|
|
873
|
-
const
|
|
874
|
-
const ɵ$
|
|
875
|
-
const
|
|
848
|
+
const step_r31 = ctx.$implicit;
|
|
849
|
+
const ɵ$index_718_r29 = ctx.$index;
|
|
850
|
+
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
876
851
|
i0.ɵɵadvance(3);
|
|
877
|
-
i0.ɵɵtextInterpolate(ɵ$
|
|
852
|
+
i0.ɵɵtextInterpolate(ɵ$index_718_r29 + 1);
|
|
878
853
|
i0.ɵɵadvance();
|
|
879
|
-
i0.ɵɵproperty("value",
|
|
854
|
+
i0.ɵɵproperty("value", step_r31.Type);
|
|
880
855
|
i0.ɵɵadvance();
|
|
881
|
-
i0.ɵɵrepeater(
|
|
856
|
+
i0.ɵɵrepeater(ctx_r0.TRANSFORM_TYPES);
|
|
882
857
|
i0.ɵɵadvance(4);
|
|
883
|
-
i0.ɵɵconditional(
|
|
858
|
+
i0.ɵɵconditional(step_r31.Type !== "direct" ? 9 : -1);
|
|
884
859
|
i0.ɵɵadvance(4);
|
|
885
|
-
i0.ɵɵproperty("value",
|
|
860
|
+
i0.ɵɵproperty("value", step_r31.OnError);
|
|
886
861
|
} }
|
|
887
|
-
function
|
|
888
|
-
i0.ɵɵelementStart(0, "div",
|
|
862
|
+
function PipelinesComponent_Conditional_14_Conditional_52_Conditional_15_Conditional_43_Template(rf, ctx) { if (rf & 1) {
|
|
863
|
+
i0.ɵɵelementStart(0, "div", 180);
|
|
889
864
|
i0.ɵɵtext(1, " No transform steps. Data passes through as-is. ");
|
|
890
865
|
i0.ɵɵelementEnd();
|
|
891
866
|
} }
|
|
892
|
-
function
|
|
893
|
-
const
|
|
894
|
-
i0.ɵɵelementStart(0, "div",
|
|
895
|
-
i0.ɵɵlistener("click", function
|
|
896
|
-
i0.ɵɵelementStart(1, "div",
|
|
867
|
+
function PipelinesComponent_Conditional_14_Conditional_52_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
868
|
+
const _r27 = i0.ɵɵgetCurrentView();
|
|
869
|
+
i0.ɵɵelementStart(0, "div", 160);
|
|
870
|
+
i0.ɵɵlistener("click", function PipelinesComponent_Conditional_14_Conditional_52_Conditional_15_Template_div_click_0_listener($event) { i0.ɵɵrestoreView(_r27); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
871
|
+
i0.ɵɵelementStart(1, "div", 161)(2, "span", 162);
|
|
897
872
|
i0.ɵɵtext(3, "Mapping Details");
|
|
898
873
|
i0.ɵɵelementEnd();
|
|
899
|
-
i0.ɵɵelementStart(4, "button",
|
|
900
|
-
i0.ɵɵlistener("click", function
|
|
901
|
-
i0.ɵɵelement(5, "i",
|
|
874
|
+
i0.ɵɵelementStart(4, "button", 163);
|
|
875
|
+
i0.ɵɵlistener("click", function PipelinesComponent_Conditional_14_Conditional_52_Conditional_15_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r27); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.DeselectConnection()); });
|
|
876
|
+
i0.ɵɵelement(5, "i", 101);
|
|
902
877
|
i0.ɵɵelementEnd()();
|
|
903
|
-
i0.ɵɵelementStart(6, "div",
|
|
878
|
+
i0.ɵɵelementStart(6, "div", 164)(7, "div", 165)(8, "span", 166);
|
|
904
879
|
i0.ɵɵtext(9);
|
|
905
880
|
i0.ɵɵelementEnd();
|
|
906
|
-
i0.ɵɵelement(10, "i",
|
|
907
|
-
i0.ɵɵelementStart(11, "span",
|
|
881
|
+
i0.ɵɵelement(10, "i", 167);
|
|
882
|
+
i0.ɵɵelementStart(11, "span", 168);
|
|
908
883
|
i0.ɵɵtext(12);
|
|
909
884
|
i0.ɵɵelementEnd()()();
|
|
910
|
-
i0.ɵɵelementStart(13, "div",
|
|
911
|
-
i0.ɵɵlistener("click", function
|
|
912
|
-
i0.ɵɵelementStart(15, "span",
|
|
913
|
-
i0.ɵɵconditionalCreate(16,
|
|
885
|
+
i0.ɵɵelementStart(13, "div", 169)(14, "label", 170);
|
|
886
|
+
i0.ɵɵlistener("click", function PipelinesComponent_Conditional_14_Conditional_52_Conditional_15_Template_label_click_14_listener() { i0.ɵɵrestoreView(_r27); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.ToggleConnectionKey()); });
|
|
887
|
+
i0.ɵɵelementStart(15, "span", 171);
|
|
888
|
+
i0.ɵɵconditionalCreate(16, PipelinesComponent_Conditional_14_Conditional_52_Conditional_15_Conditional_16_Template, 1, 0, "i", 96);
|
|
914
889
|
i0.ɵɵelementEnd();
|
|
915
890
|
i0.ɵɵelementStart(17, "span");
|
|
916
891
|
i0.ɵɵtext(18, "Key Field");
|
|
917
892
|
i0.ɵɵelementEnd()();
|
|
918
|
-
i0.ɵɵelementStart(19, "label",
|
|
919
|
-
i0.ɵɵlistener("click", function
|
|
920
|
-
i0.ɵɵelementStart(20, "span",
|
|
921
|
-
i0.ɵɵconditionalCreate(21,
|
|
893
|
+
i0.ɵɵelementStart(19, "label", 170);
|
|
894
|
+
i0.ɵɵlistener("click", function PipelinesComponent_Conditional_14_Conditional_52_Conditional_15_Template_label_click_19_listener() { i0.ɵɵrestoreView(_r27); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.ToggleConnectionRequired()); });
|
|
895
|
+
i0.ɵɵelementStart(20, "span", 171);
|
|
896
|
+
i0.ɵɵconditionalCreate(21, PipelinesComponent_Conditional_14_Conditional_52_Conditional_15_Conditional_21_Template, 1, 0, "i", 96);
|
|
922
897
|
i0.ɵɵelementEnd();
|
|
923
898
|
i0.ɵɵelementStart(22, "span");
|
|
924
899
|
i0.ɵɵtext(23, "Required");
|
|
925
900
|
i0.ɵɵelementEnd()()();
|
|
926
|
-
i0.ɵɵelementStart(24, "div",
|
|
901
|
+
i0.ɵɵelementStart(24, "div", 172)(25, "label", 173);
|
|
927
902
|
i0.ɵɵtext(26, "Direction");
|
|
928
903
|
i0.ɵɵelementEnd();
|
|
929
|
-
i0.ɵɵelementStart(27, "div",
|
|
930
|
-
i0.ɵɵlistener("click", function
|
|
904
|
+
i0.ɵɵelementStart(27, "div", 174)(28, "button", 175);
|
|
905
|
+
i0.ɵɵlistener("click", function PipelinesComponent_Conditional_14_Conditional_52_Conditional_15_Template_button_click_28_listener() { i0.ɵɵrestoreView(_r27); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.OnConnectionDirectionChange("SourceToDest")); });
|
|
931
906
|
i0.ɵɵtext(29, " Source \u2192 Dest ");
|
|
932
907
|
i0.ɵɵelementEnd();
|
|
933
|
-
i0.ɵɵelementStart(30, "button",
|
|
934
|
-
i0.ɵɵlistener("click", function
|
|
908
|
+
i0.ɵɵelementStart(30, "button", 175);
|
|
909
|
+
i0.ɵɵlistener("click", function PipelinesComponent_Conditional_14_Conditional_52_Conditional_15_Template_button_click_30_listener() { i0.ɵɵrestoreView(_r27); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.OnConnectionDirectionChange("DestToSource")); });
|
|
935
910
|
i0.ɵɵtext(31, " Dest \u2192 Source ");
|
|
936
911
|
i0.ɵɵelementEnd();
|
|
937
|
-
i0.ɵɵelementStart(32, "button",
|
|
938
|
-
i0.ɵɵlistener("click", function
|
|
912
|
+
i0.ɵɵelementStart(32, "button", 175);
|
|
913
|
+
i0.ɵɵlistener("click", function PipelinesComponent_Conditional_14_Conditional_52_Conditional_15_Template_button_click_32_listener() { i0.ɵɵrestoreView(_r27); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.OnConnectionDirectionChange("Both")); });
|
|
939
914
|
i0.ɵɵtext(33, " Both ");
|
|
940
915
|
i0.ɵɵelementEnd()()();
|
|
941
|
-
i0.ɵɵelementStart(34, "div",
|
|
916
|
+
i0.ɵɵelementStart(34, "div", 172)(35, "div", 176)(36, "label", 173);
|
|
942
917
|
i0.ɵɵtext(37, "Transform Pipeline");
|
|
943
918
|
i0.ɵɵelementEnd();
|
|
944
|
-
i0.ɵɵelementStart(38, "button",
|
|
945
|
-
i0.ɵɵlistener("click", function
|
|
946
|
-
i0.ɵɵelement(39, "i",
|
|
919
|
+
i0.ɵɵelementStart(38, "button", 177);
|
|
920
|
+
i0.ɵɵlistener("click", function PipelinesComponent_Conditional_14_Conditional_52_Conditional_15_Template_button_click_38_listener() { i0.ɵɵrestoreView(_r27); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.AddTransformStep()); });
|
|
921
|
+
i0.ɵɵelement(39, "i", 178);
|
|
947
922
|
i0.ɵɵtext(40, " Add Step ");
|
|
948
923
|
i0.ɵɵelementEnd()();
|
|
949
|
-
i0.ɵɵrepeaterCreate(41,
|
|
950
|
-
i0.ɵɵconditionalCreate(43,
|
|
924
|
+
i0.ɵɵrepeaterCreate(41, PipelinesComponent_Conditional_14_Conditional_52_Conditional_15_For_42_Template, 20, 4, "div", 179, i0.ɵɵrepeaterTrackByIndex);
|
|
925
|
+
i0.ɵɵconditionalCreate(43, PipelinesComponent_Conditional_14_Conditional_52_Conditional_15_Conditional_43_Template, 2, 0, "div", 180);
|
|
951
926
|
i0.ɵɵelementEnd();
|
|
952
|
-
i0.ɵɵelementStart(44, "div",
|
|
953
|
-
i0.ɵɵlistener("click", function
|
|
954
|
-
i0.ɵɵelement(46, "i",
|
|
927
|
+
i0.ɵɵelementStart(44, "div", 181)(45, "button", 182);
|
|
928
|
+
i0.ɵɵlistener("click", function PipelinesComponent_Conditional_14_Conditional_52_Conditional_15_Template_button_click_45_listener() { i0.ɵɵrestoreView(_r27); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.RemoveSelectedConnection()); });
|
|
929
|
+
i0.ɵɵelement(46, "i", 183);
|
|
955
930
|
i0.ɵɵtext(47, " Remove Mapping ");
|
|
956
931
|
i0.ɵɵelementEnd()()();
|
|
957
932
|
} if (rf & 2) {
|
|
958
|
-
const
|
|
933
|
+
const conn_r34 = ctx;
|
|
959
934
|
i0.ɵɵadvance(9);
|
|
960
|
-
i0.ɵɵtextInterpolate(
|
|
935
|
+
i0.ɵɵtextInterpolate(conn_r34.SourceFieldName);
|
|
961
936
|
i0.ɵɵadvance();
|
|
962
|
-
i0.ɵɵclassProp("fa-arrow-right",
|
|
937
|
+
i0.ɵɵclassProp("fa-arrow-right", conn_r34.Direction === "SourceToDest")("fa-arrow-left", conn_r34.Direction === "DestToSource")("fa-right-left", conn_r34.Direction === "Both");
|
|
963
938
|
i0.ɵɵadvance(2);
|
|
964
|
-
i0.ɵɵtextInterpolate(
|
|
939
|
+
i0.ɵɵtextInterpolate(conn_r34.DestFieldName);
|
|
965
940
|
i0.ɵɵadvance(3);
|
|
966
|
-
i0.ɵɵclassProp("active",
|
|
941
|
+
i0.ɵɵclassProp("active", conn_r34.IsKeyField);
|
|
967
942
|
i0.ɵɵadvance();
|
|
968
|
-
i0.ɵɵconditional(
|
|
943
|
+
i0.ɵɵconditional(conn_r34.IsKeyField ? 16 : -1);
|
|
969
944
|
i0.ɵɵadvance(4);
|
|
970
|
-
i0.ɵɵclassProp("active",
|
|
945
|
+
i0.ɵɵclassProp("active", conn_r34.IsRequired);
|
|
971
946
|
i0.ɵɵadvance();
|
|
972
|
-
i0.ɵɵconditional(
|
|
947
|
+
i0.ɵɵconditional(conn_r34.IsRequired ? 21 : -1);
|
|
973
948
|
i0.ɵɵadvance(7);
|
|
974
|
-
i0.ɵɵclassProp("active",
|
|
949
|
+
i0.ɵɵclassProp("active", conn_r34.Direction === "SourceToDest");
|
|
975
950
|
i0.ɵɵadvance(2);
|
|
976
|
-
i0.ɵɵclassProp("active",
|
|
951
|
+
i0.ɵɵclassProp("active", conn_r34.Direction === "DestToSource");
|
|
977
952
|
i0.ɵɵadvance(2);
|
|
978
|
-
i0.ɵɵclassProp("active",
|
|
953
|
+
i0.ɵɵclassProp("active", conn_r34.Direction === "Both");
|
|
979
954
|
i0.ɵɵadvance(9);
|
|
980
|
-
i0.ɵɵrepeater(
|
|
955
|
+
i0.ɵɵrepeater(conn_r34.TransformSteps);
|
|
981
956
|
i0.ɵɵadvance(2);
|
|
982
|
-
i0.ɵɵconditional(
|
|
957
|
+
i0.ɵɵconditional(conn_r34.TransformSteps.length === 0 ? 43 : -1);
|
|
983
958
|
} }
|
|
984
|
-
function
|
|
985
|
-
const
|
|
986
|
-
i0.ɵɵelementStart(0, "div",
|
|
987
|
-
i0.ɵɵlistener("click", function
|
|
988
|
-
i0.ɵɵelement(3, "i",
|
|
989
|
-
i0.ɵɵelementStart(4, "span",
|
|
959
|
+
function PipelinesComponent_Conditional_14_Conditional_52_Template(rf, ctx) { if (rf & 1) {
|
|
960
|
+
const _r18 = i0.ɵɵgetCurrentView();
|
|
961
|
+
i0.ɵɵelementStart(0, "div", 108)(1, "div", 109)(2, "div", 110);
|
|
962
|
+
i0.ɵɵlistener("click", function PipelinesComponent_Conditional_14_Conditional_52_Template_div_click_2_listener() { i0.ɵɵrestoreView(_r18); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.ToggleFieldMaps()); });
|
|
963
|
+
i0.ɵɵelement(3, "i", 111);
|
|
964
|
+
i0.ɵɵelementStart(4, "span", 112);
|
|
990
965
|
i0.ɵɵtext(5, "Field Mappings");
|
|
991
966
|
i0.ɵɵelementEnd();
|
|
992
|
-
i0.ɵɵelementStart(6, "span",
|
|
967
|
+
i0.ɵɵelementStart(6, "span", 113);
|
|
993
968
|
i0.ɵɵtext(7);
|
|
994
969
|
i0.ɵɵelementEnd()();
|
|
995
|
-
i0.ɵɵconditionalCreate(8,
|
|
970
|
+
i0.ɵɵconditionalCreate(8, PipelinesComponent_Conditional_14_Conditional_52_Conditional_8_Template, 35, 11, "div", 114);
|
|
996
971
|
i0.ɵɵelementEnd();
|
|
997
|
-
i0.ɵɵelementStart(9, "div",
|
|
998
|
-
i0.ɵɵlistener("click", function
|
|
999
|
-
i0.ɵɵelement(11, "i",
|
|
1000
|
-
i0.ɵɵelementStart(12, "span",
|
|
972
|
+
i0.ɵɵelementStart(9, "div", 109)(10, "div", 110);
|
|
973
|
+
i0.ɵɵlistener("click", function PipelinesComponent_Conditional_14_Conditional_52_Template_div_click_10_listener() { i0.ɵɵrestoreView(_r18); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.ToggleInfoPanel()); });
|
|
974
|
+
i0.ɵɵelement(11, "i", 111);
|
|
975
|
+
i0.ɵɵelementStart(12, "span", 112);
|
|
1001
976
|
i0.ɵɵtext(13, "Sync Info");
|
|
1002
977
|
i0.ɵɵelementEnd()();
|
|
1003
|
-
i0.ɵɵconditionalCreate(14,
|
|
978
|
+
i0.ɵɵconditionalCreate(14, PipelinesComponent_Conditional_14_Conditional_52_Conditional_14_Template, 3, 1, "div", 115);
|
|
1004
979
|
i0.ɵɵelementEnd()();
|
|
1005
|
-
i0.ɵɵconditionalCreate(15,
|
|
980
|
+
i0.ɵɵconditionalCreate(15, PipelinesComponent_Conditional_14_Conditional_52_Conditional_15_Template, 48, 21, "div", 116);
|
|
1006
981
|
} if (rf & 2) {
|
|
1007
982
|
let tmp_11_0;
|
|
1008
|
-
const
|
|
983
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
1009
984
|
i0.ɵɵadvance();
|
|
1010
|
-
i0.ɵɵclassProp("collapsed", !
|
|
985
|
+
i0.ɵɵclassProp("collapsed", !ctx_r0.FieldMapsExpanded);
|
|
1011
986
|
i0.ɵɵadvance(2);
|
|
1012
|
-
i0.ɵɵclassProp("fa-chevron-down",
|
|
987
|
+
i0.ɵɵclassProp("fa-chevron-down", ctx_r0.FieldMapsExpanded)("fa-chevron-right", !ctx_r0.FieldMapsExpanded);
|
|
1013
988
|
i0.ɵɵadvance(4);
|
|
1014
|
-
i0.ɵɵtextInterpolate1("",
|
|
989
|
+
i0.ɵɵtextInterpolate1("", ctx_r0.EditorMappedCount, " mapped");
|
|
1015
990
|
i0.ɵɵadvance();
|
|
1016
|
-
i0.ɵɵconditional(
|
|
991
|
+
i0.ɵɵconditional(ctx_r0.FieldMapsExpanded ? 8 : -1);
|
|
1017
992
|
i0.ɵɵadvance();
|
|
1018
|
-
i0.ɵɵclassProp("collapsed", !
|
|
993
|
+
i0.ɵɵclassProp("collapsed", !ctx_r0.InfoPanelExpanded);
|
|
1019
994
|
i0.ɵɵadvance(2);
|
|
1020
|
-
i0.ɵɵclassProp("fa-chevron-down",
|
|
995
|
+
i0.ɵɵclassProp("fa-chevron-down", ctx_r0.InfoPanelExpanded)("fa-chevron-right", !ctx_r0.InfoPanelExpanded);
|
|
1021
996
|
i0.ɵɵadvance(3);
|
|
1022
|
-
i0.ɵɵconditional(
|
|
997
|
+
i0.ɵɵconditional(ctx_r0.InfoPanelExpanded ? 14 : -1);
|
|
1023
998
|
i0.ɵɵadvance();
|
|
1024
|
-
i0.ɵɵconditional((tmp_11_0 =
|
|
999
|
+
i0.ɵɵconditional((tmp_11_0 = ctx_r0.SelectedConnection) ? 15 : -1, tmp_11_0);
|
|
1025
1000
|
} }
|
|
1026
|
-
function
|
|
1027
|
-
const
|
|
1028
|
-
i0.ɵɵelementStart(0, "div",
|
|
1029
|
-
i0.ɵɵlistener("click", function
|
|
1030
|
-
i0.ɵɵelement(4, "i",
|
|
1001
|
+
function PipelinesComponent_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
1002
|
+
const _r7 = i0.ɵɵgetCurrentView();
|
|
1003
|
+
i0.ɵɵelementStart(0, "div", 13)(1, "div", 65)(2, "div", 66)(3, "button", 67);
|
|
1004
|
+
i0.ɵɵlistener("click", function PipelinesComponent_Conditional_14_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r7); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.CloseVisualEditor()); });
|
|
1005
|
+
i0.ɵɵelement(4, "i", 68);
|
|
1031
1006
|
i0.ɵɵelementEnd();
|
|
1032
|
-
i0.ɵɵelementStart(5, "div",
|
|
1007
|
+
i0.ɵɵelementStart(5, "div", 69)(6, "span", 70);
|
|
1033
1008
|
i0.ɵɵtext(7);
|
|
1034
1009
|
i0.ɵɵelementEnd();
|
|
1035
|
-
i0.ɵɵelementStart(8, "span",
|
|
1036
|
-
i0.ɵɵelement(9, "i",
|
|
1010
|
+
i0.ɵɵelementStart(8, "span", 71);
|
|
1011
|
+
i0.ɵɵelement(9, "i", 72);
|
|
1037
1012
|
i0.ɵɵelementEnd();
|
|
1038
|
-
i0.ɵɵelementStart(10, "span",
|
|
1013
|
+
i0.ɵɵelementStart(10, "span", 73);
|
|
1039
1014
|
i0.ɵɵtext(11);
|
|
1040
1015
|
i0.ɵɵelementEnd()();
|
|
1041
|
-
i0.ɵɵconditionalCreate(12,
|
|
1016
|
+
i0.ɵɵconditionalCreate(12, PipelinesComponent_Conditional_14_Conditional_12_Template, 5, 3);
|
|
1042
1017
|
i0.ɵɵelementEnd();
|
|
1043
|
-
i0.ɵɵelementStart(13, "div",
|
|
1018
|
+
i0.ɵɵelementStart(13, "div", 74)(14, "span", 75)(15, "strong");
|
|
1044
1019
|
i0.ɵɵtext(16);
|
|
1045
1020
|
i0.ɵɵelementEnd();
|
|
1046
1021
|
i0.ɵɵtext(17, " mapped ");
|
|
1047
1022
|
i0.ɵɵelementEnd();
|
|
1048
|
-
i0.ɵɵelement(18, "span",
|
|
1049
|
-
i0.ɵɵelementStart(19, "span",
|
|
1023
|
+
i0.ɵɵelement(18, "span", 76);
|
|
1024
|
+
i0.ɵɵelementStart(19, "span", 75)(20, "strong");
|
|
1050
1025
|
i0.ɵɵtext(21);
|
|
1051
1026
|
i0.ɵɵelementEnd();
|
|
1052
1027
|
i0.ɵɵtext(22, " key ");
|
|
1053
1028
|
i0.ɵɵelementEnd();
|
|
1054
|
-
i0.ɵɵelement(23, "span",
|
|
1055
|
-
i0.ɵɵelementStart(24, "span",
|
|
1029
|
+
i0.ɵɵelement(23, "span", 76);
|
|
1030
|
+
i0.ɵɵelementStart(24, "span", 75)(25, "strong");
|
|
1056
1031
|
i0.ɵɵtext(26);
|
|
1057
1032
|
i0.ɵɵelementEnd();
|
|
1058
1033
|
i0.ɵɵtext(27, " required ");
|
|
1059
1034
|
i0.ɵɵelementEnd()();
|
|
1060
|
-
i0.ɵɵelementStart(28, "div",
|
|
1061
|
-
i0.ɵɵlistener("click", function
|
|
1062
|
-
i0.ɵɵelement(30, "i",
|
|
1035
|
+
i0.ɵɵelementStart(28, "div", 77)(29, "button", 78);
|
|
1036
|
+
i0.ɵɵlistener("click", function PipelinesComponent_Conditional_14_Template_button_click_29_listener() { i0.ɵɵrestoreView(_r7); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.ToggleSourcePreview()); });
|
|
1037
|
+
i0.ɵɵelement(30, "i", 79);
|
|
1063
1038
|
i0.ɵɵtext(31, " Source Data ");
|
|
1064
1039
|
i0.ɵɵelementEnd();
|
|
1065
|
-
i0.ɵɵelementStart(32, "button",
|
|
1066
|
-
i0.ɵɵlistener("click", function
|
|
1067
|
-
i0.ɵɵelement(33, "i",
|
|
1040
|
+
i0.ɵɵelementStart(32, "button", 80);
|
|
1041
|
+
i0.ɵɵlistener("click", function PipelinesComponent_Conditional_14_Template_button_click_32_listener() { i0.ɵɵrestoreView(_r7); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.ToggleDestPreview()); });
|
|
1042
|
+
i0.ɵɵelement(33, "i", 81);
|
|
1068
1043
|
i0.ɵɵtext(34, " MJ Data ");
|
|
1069
1044
|
i0.ɵɵelementEnd();
|
|
1070
|
-
i0.ɵɵelement(35, "div",
|
|
1071
|
-
i0.ɵɵelementStart(36, "button",
|
|
1072
|
-
i0.ɵɵlistener("click", function
|
|
1073
|
-
i0.ɵɵconditionalCreate(37,
|
|
1045
|
+
i0.ɵɵelement(35, "div", 82);
|
|
1046
|
+
i0.ɵɵelementStart(36, "button", 83);
|
|
1047
|
+
i0.ɵɵlistener("click", function PipelinesComponent_Conditional_14_Template_button_click_36_listener() { i0.ɵɵrestoreView(_r7); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.RunSchemaPipeline()); });
|
|
1048
|
+
i0.ɵɵconditionalCreate(37, PipelinesComponent_Conditional_14_Conditional_37_Template, 2, 0)(38, PipelinesComponent_Conditional_14_Conditional_38_Template, 2, 0);
|
|
1074
1049
|
i0.ɵɵelementEnd();
|
|
1075
|
-
i0.ɵɵconditionalCreate(39,
|
|
1076
|
-
i0.ɵɵelement(40, "div",
|
|
1077
|
-
i0.ɵɵelementStart(41, "button",
|
|
1078
|
-
i0.ɵɵlistener("click", function
|
|
1079
|
-
i0.ɵɵelement(42, "i",
|
|
1050
|
+
i0.ɵɵconditionalCreate(39, PipelinesComponent_Conditional_14_Conditional_39_Template, 3, 5, "span", 84);
|
|
1051
|
+
i0.ɵɵelement(40, "div", 82);
|
|
1052
|
+
i0.ɵɵelementStart(41, "button", 85);
|
|
1053
|
+
i0.ɵɵlistener("click", function PipelinesComponent_Conditional_14_Template_button_click_41_listener() { i0.ɵɵrestoreView(_r7); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.AutoMapEditorFields()); });
|
|
1054
|
+
i0.ɵɵelement(42, "i", 86);
|
|
1080
1055
|
i0.ɵɵtext(43, " Auto-Map ");
|
|
1081
1056
|
i0.ɵɵelementEnd();
|
|
1082
|
-
i0.ɵɵelementStart(44, "button",
|
|
1083
|
-
i0.ɵɵlistener("click", function
|
|
1084
|
-
i0.ɵɵconditionalCreate(45,
|
|
1057
|
+
i0.ɵɵelementStart(44, "button", 87);
|
|
1058
|
+
i0.ɵɵlistener("click", function PipelinesComponent_Conditional_14_Template_button_click_44_listener() { i0.ɵɵrestoreView(_r7); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.SaveVisualEditor()); });
|
|
1059
|
+
i0.ɵɵconditionalCreate(45, PipelinesComponent_Conditional_14_Conditional_45_Template, 2, 0)(46, PipelinesComponent_Conditional_14_Conditional_46_Template, 2, 0);
|
|
1085
1060
|
i0.ɵɵelementEnd();
|
|
1086
|
-
i0.ɵɵconditionalCreate(47,
|
|
1061
|
+
i0.ɵɵconditionalCreate(47, PipelinesComponent_Conditional_14_Conditional_47_Template, 3, 0, "span", 88);
|
|
1087
1062
|
i0.ɵɵelementEnd()();
|
|
1088
|
-
i0.ɵɵconditionalCreate(48,
|
|
1089
|
-
i0.ɵɵconditionalCreate(49,
|
|
1090
|
-
i0.ɵɵelementStart(50, "div",
|
|
1091
|
-
i0.ɵɵconditionalCreate(51,
|
|
1063
|
+
i0.ɵɵconditionalCreate(48, PipelinesComponent_Conditional_14_Conditional_48_Template, 3, 2, "div", 89);
|
|
1064
|
+
i0.ɵɵconditionalCreate(49, PipelinesComponent_Conditional_14_Conditional_49_Template, 7, 1, "div", 90);
|
|
1065
|
+
i0.ɵɵelementStart(50, "div", 91);
|
|
1066
|
+
i0.ɵɵconditionalCreate(51, PipelinesComponent_Conditional_14_Conditional_51_Template, 4, 0, "div", 92)(52, PipelinesComponent_Conditional_14_Conditional_52_Template, 16, 16);
|
|
1092
1067
|
i0.ɵɵelementEnd()();
|
|
1093
1068
|
} if (rf & 2) {
|
|
1094
|
-
const
|
|
1069
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
1095
1070
|
i0.ɵɵadvance(7);
|
|
1096
|
-
i0.ɵɵtextInterpolate((
|
|
1071
|
+
i0.ɵɵtextInterpolate((ctx_r0.EditorEntityMap == null ? null : ctx_r0.EditorEntityMap.ExternalObjectLabel) ?? (ctx_r0.EditorEntityMap == null ? null : ctx_r0.EditorEntityMap.ExternalObjectName));
|
|
1097
1072
|
i0.ɵɵadvance(4);
|
|
1098
|
-
i0.ɵɵtextInterpolate(
|
|
1073
|
+
i0.ɵɵtextInterpolate(ctx_r0.EditorEntityMap == null ? null : ctx_r0.EditorEntityMap.Entity);
|
|
1099
1074
|
i0.ɵɵadvance();
|
|
1100
|
-
i0.ɵɵconditional(
|
|
1075
|
+
i0.ɵɵconditional(ctx_r0.EditorEntityMap ? 12 : -1);
|
|
1101
1076
|
i0.ɵɵadvance(4);
|
|
1102
|
-
i0.ɵɵtextInterpolate(
|
|
1077
|
+
i0.ɵɵtextInterpolate(ctx_r0.EditorMappedCount);
|
|
1103
1078
|
i0.ɵɵadvance(5);
|
|
1104
|
-
i0.ɵɵtextInterpolate(
|
|
1079
|
+
i0.ɵɵtextInterpolate(ctx_r0.EditorKeyFieldCount);
|
|
1105
1080
|
i0.ɵɵadvance(5);
|
|
1106
|
-
i0.ɵɵtextInterpolate(
|
|
1081
|
+
i0.ɵɵtextInterpolate(ctx_r0.EditorRequiredCount);
|
|
1107
1082
|
i0.ɵɵadvance(3);
|
|
1108
|
-
i0.ɵɵclassProp("active",
|
|
1083
|
+
i0.ɵɵclassProp("active", ctx_r0.ShowSourcePreview);
|
|
1109
1084
|
i0.ɵɵadvance(3);
|
|
1110
|
-
i0.ɵɵclassProp("active",
|
|
1085
|
+
i0.ɵɵclassProp("active", ctx_r0.ShowDestPreview);
|
|
1111
1086
|
i0.ɵɵadvance(4);
|
|
1112
|
-
i0.ɵɵproperty("disabled",
|
|
1087
|
+
i0.ɵɵproperty("disabled", ctx_r0.IsRunningPipeline);
|
|
1113
1088
|
i0.ɵɵadvance();
|
|
1114
|
-
i0.ɵɵconditional(
|
|
1089
|
+
i0.ɵɵconditional(ctx_r0.IsRunningPipeline ? 37 : 38);
|
|
1115
1090
|
i0.ɵɵadvance(2);
|
|
1116
|
-
i0.ɵɵconditional(
|
|
1091
|
+
i0.ɵɵconditional(ctx_r0.PipelineResultMessage ? 39 : -1);
|
|
1117
1092
|
i0.ɵɵadvance(5);
|
|
1118
|
-
i0.ɵɵproperty("disabled", !
|
|
1093
|
+
i0.ɵɵproperty("disabled", !ctx_r0.HasEditorChanges || ctx_r0.EditorSaving);
|
|
1119
1094
|
i0.ɵɵadvance();
|
|
1120
|
-
i0.ɵɵconditional(
|
|
1095
|
+
i0.ɵɵconditional(ctx_r0.EditorSaving ? 45 : 46);
|
|
1121
1096
|
i0.ɵɵadvance(2);
|
|
1122
|
-
i0.ɵɵconditional(
|
|
1097
|
+
i0.ɵɵconditional(ctx_r0.EditorSaveSuccess && !ctx_r0.HasEditorChanges ? 47 : -1);
|
|
1123
1098
|
i0.ɵɵadvance();
|
|
1124
|
-
i0.ɵɵconditional(
|
|
1099
|
+
i0.ɵɵconditional(ctx_r0.ShowSourcePreview || ctx_r0.ShowDestPreview ? 48 : -1);
|
|
1125
1100
|
i0.ɵɵadvance();
|
|
1126
|
-
i0.ɵɵconditional(
|
|
1101
|
+
i0.ɵɵconditional(ctx_r0.ConnectingFromSource ? 49 : -1);
|
|
1127
1102
|
i0.ɵɵadvance();
|
|
1128
|
-
i0.ɵɵclassProp("has-transform-panel",
|
|
1103
|
+
i0.ɵɵclassProp("has-transform-panel", ctx_r0.SelectedConnectionIdx !== null);
|
|
1129
1104
|
i0.ɵɵadvance();
|
|
1130
|
-
i0.ɵɵconditional(
|
|
1105
|
+
i0.ɵɵconditional(ctx_r0.EditorLoading ? 51 : 52);
|
|
1131
1106
|
} }
|
|
1132
1107
|
let PipelinesComponent = class PipelinesComponent extends BaseResourceComponent {
|
|
1133
1108
|
// ---------------------------------------------------------------------------
|
|
@@ -1298,6 +1273,11 @@ let PipelinesComponent = class PipelinesComponent extends BaseResourceComponent
|
|
|
1298
1273
|
this.GlobalSearch = input.value;
|
|
1299
1274
|
this.cdr.detectChanges();
|
|
1300
1275
|
}
|
|
1276
|
+
/** Bridge for <mj-page-search> which emits a plain string. */
|
|
1277
|
+
OnGlobalSearchValue(value) {
|
|
1278
|
+
this.GlobalSearch = value;
|
|
1279
|
+
this.cdr.detectChanges();
|
|
1280
|
+
}
|
|
1301
1281
|
get FilteredCards() {
|
|
1302
1282
|
if (!this.GlobalSearch.trim())
|
|
1303
1283
|
return this.PipelineCards;
|
|
@@ -2096,14 +2076,38 @@ let PipelinesComponent = class PipelinesComponent extends BaseResourceComponent
|
|
|
2096
2076
|
return 'Inactive';
|
|
2097
2077
|
}
|
|
2098
2078
|
static ɵfac = /*@__PURE__*/ (() => { let ɵPipelinesComponent_BaseFactory; return function PipelinesComponent_Factory(__ngFactoryType__) { return (ɵPipelinesComponent_BaseFactory || (ɵPipelinesComponent_BaseFactory = i0.ɵɵgetInheritedFactory(PipelinesComponent)))(__ngFactoryType__ || PipelinesComponent); }; })();
|
|
2099
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PipelinesComponent, selectors: [["app-integration-pipelines"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls:
|
|
2100
|
-
i0.ɵɵelementStart(0, "
|
|
2101
|
-
i0.ɵɵconditionalCreate(
|
|
2079
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PipelinesComponent, selectors: [["app-integration-pipelines"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 15, vars: 6, consts: [["Title", "Integration Pipelines", "Icon", "fa-solid fa-diagram-project", "Subtitle", "Data transformation and routing pipelines"], ["meta", ""], ["actions", ""], ["mjButton", "", "variant", "secondary", "size", "sm", "title", "Expand All", 3, "click"], [1, "fa-solid", "fa-angles-down"], ["mjButton", "", "variant", "secondary", "size", "sm", "title", "Collapse All", 3, "click"], [1, "fa-solid", "fa-angles-up"], [3, "Clicked", "Loading"], ["toolbar", ""], ["Placeholder", "Search integrations or entities...", 3, "ValueChange", "Value"], [3, "Flex", "Padding"], [1, "pipelines-container"], [1, "pipelines-content"], [1, "ve-container"], ["Label", "pipelines", 3, "Count"], ["Label", "entity maps", 3, "Count"], [1, "content-loading"], [1, "content-empty"], [1, "cards-list"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-diagram-project", "empty-icon"], [1, "pipeline-card", 3, "expanded"], [1, "pipeline-card"], [1, "card-header", 3, "click"], [1, "card-header-left"], [1, "card-status-dot"], [1, "card-info"], [1, "card-name"], [1, "card-meta"], [1, "meta-sep"], [1, "card-header-right"], [1, "card-status-label"], [1, "card-last-sync"], [1, "mini-flow"], [1, "mini-flow-dot", "source"], [1, "mini-flow-line"], [1, "mini-flow-count"], [1, "mini-flow-dot", "dest"], [1, "fa-solid", "card-chevron"], [1, "card-body"], [1, "card-search-bar"], [1, "fa-solid", "fa-filter", "card-search-icon"], ["type", "text", "placeholder", "Filter entity maps...", 1, "card-search-input", 3, "input", "value"], [1, "card-search-count"], [1, "map-table-head"], [1, "map-col-toggle"], [1, "map-col-source"], [1, "map-col-direction"], [1, "map-col-dest"], [1, "map-col-meta"], [1, "map-table-body"], [1, "map-row", 3, "sync-disabled"], [1, "map-table-empty"], [1, "map-row", 3, "click"], [1, "map-col-toggle", 3, "click"], [1, "sync-toggle", 3, "title"], ["type", "checkbox", 3, "change", "checked"], [1, "sync-toggle-track"], [1, "map-col-source", 3, "title"], [1, "map-col-dest", 3, "title"], [1, "map-config-badge", 3, "title"], [1, "fa-solid", "fa-arrows-rotate"], [1, "map-edit-hint"], [1, "fa-solid", "fa-chevron-right"], [1, "fa-solid", "fa-link"], [1, "ve-header"], [1, "ve-header-left"], ["title", "Back to Pipelines", 1, "ve-back-btn", 3, "click"], [1, "fa-solid", "fa-arrow-left"], [1, "ve-header-title"], [1, "ve-source-label"], [1, "ve-direction-arrow"], [1, "fa-solid", "fa-arrow-right-arrow-left"], [1, "ve-dest-label"], [1, "ve-header-stats"], [1, "ve-stat"], [1, "ve-stat-sep"], [1, "ve-header-actions"], ["title", "Preview source data", 1, "ve-btn", "ve-btn-ghost", 3, "click"], [1, "fa-solid", "fa-cloud"], ["title", "Preview MJ data", 1, "ve-btn", "ve-btn-ghost", 3, "click"], [1, "fa-solid", "fa-database"], [1, "ve-action-sep"], ["title", "Generate DDL, run CodeGen, and restart MJAPI for this mapping", 1, "ve-btn", "ve-btn-ghost", 3, "click", "disabled"], [3, "class"], ["title", "Auto-map fields by name", 1, "ve-btn", "ve-btn-ghost", 3, "click"], [1, "fa-solid", "fa-wand-magic-sparkles"], [1, "ve-btn", "ve-btn-primary", 3, "click", "disabled"], [1, "ve-save-success"], [1, "ve-preview-strip"], [1, "ve-connect-banner"], [1, "ve-body"], [1, "ve-loading"], [1, "sync-toggle", "ve-sync-toggle", 3, "title"], [1, "ve-sync-label"], [1, "fa-solid", "fa-gears"], [1, "fa-solid", "fa-check"], [1, "fa-solid", "fa-circle-check"], [1, "ve-preview-panel"], [1, "ve-preview-header"], [1, "ve-preview-close", 3, "click"], [1, "fa-solid", "fa-xmark"], [1, "ve-preview-loading"], [1, "ve-preview-empty"], [1, "ve-preview-table-wrap"], [1, "ve-preview-table"], [3, "title"], [1, "ve-connect-cancel", 3, "click"], [1, "ve-sections-wrapper"], [1, "ve-section"], [1, "ve-section-header", 3, "click"], [1, "fa-solid"], [1, "ve-section-title"], [1, "ve-section-badge"], [1, "ve-section-body"], [1, "ve-section-body", "ve-info-body"], [1, "ve-transform-panel"], [1, "ve-canvas-wrapper"], [1, "ve-col-headers"], [1, "ve-col-header", "source"], [1, "ve-col-count"], [1, "ve-col-header-spacer"], [1, "ve-col-header", "dest"], [1, "ve-col-searches"], [1, "ve-col-search"], [1, "fa-solid", "fa-search"], ["type", "text", "placeholder", "Filter source fields...", 3, "input", "value"], [1, "ve-col-search-spacer"], ["type", "text", "placeholder", "Filter destination fields...", 3, "input", "value"], [1, "ve-canvas-scroll", 3, "click"], [1, "ve-canvas-grid"], [1, "ve-field-col", "source"], [1, "ve-field-item", 3, "mapped", "unmapped", "connecting", "height"], [1, "ve-field-empty"], [1, "ve-svg", 3, "click"], [1, "ve-field-col", "dest"], [1, "ve-field-item", 3, "mapped", "unmapped", "connect-target", "height"], [1, "ve-field-item", 3, "click"], [1, "ve-field-name", 3, "title"], [1, "ve-field-type"], [1, "ve-field-badges"], ["title", "Primary Key", 1, "ve-fbadge", "pk"], ["title", "Required", 1, "ve-fbadge", "req"], [1, "ve-conn-line", 3, "click"], ["width", "28", "height", "28", 1, "ve-badge-fo"], ["xmlns", "http://www.w3.org/1999/xhtml", 1, "ve-conn-badge", 3, "click"], [1, "ve-info-loading"], [1, "ve-info-grid"], [1, "ve-info-card"], [1, "ve-info-card-icon"], [1, "ve-info-card-content"], [1, "ve-info-card-value"], [1, "ve-info-card-label"], [1, "ve-info-card-icon", "source"], [1, "ve-info-card-icon", "sync"], [1, "ve-info-details"], [1, "ve-info-detail-row"], [1, "ve-info-detail-label"], [1, "ve-info-detail-value"], [1, "ve-info-card-icon", 3, "ngClass"], [1, "ve-transform-panel", 3, "click"], [1, "ve-tp-header"], [1, "ve-tp-title"], [1, "ve-tp-close", 3, "click"], [1, "ve-tp-mapping-info"], [1, "ve-tp-field-pair"], [1, "ve-tp-field", "source"], [1, "fa-solid", "ve-tp-arrow"], [1, "ve-tp-field", "dest"], [1, "ve-tp-toggles"], [1, "ve-tp-toggle", 3, "click"], [1, "ve-tp-toggle-box"], [1, "ve-tp-section"], [1, "ve-tp-section-label"], [1, "ve-tp-direction-btns"], [3, "click"], [1, "ve-tp-section-header"], [1, "ve-tp-add-step", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "ve-tp-step"], [1, "ve-tp-no-steps"], [1, "ve-tp-footer"], [1, "ve-btn", "ve-btn-danger", 3, "click"], [1, "fa-solid", "fa-trash-can"], [1, "ve-tp-step-header"], [1, "ve-tp-step-num"], [1, "ve-tp-type-select", 3, "change", "value"], [3, "value", "selected"], ["title", "Remove step", 1, "ve-tp-remove-step", 3, "click"], [1, "ve-tp-step-config"], [1, "ve-tp-step-onerror"], [3, "change", "value"], ["value", "Fail"], ["value", "Skip"], ["value", "Null"], [1, "ve-tp-config-row"], ["type", "text", 3, "input", "value", "placeholder"]], template: function PipelinesComponent_Template(rf, ctx) { if (rf & 1) {
|
|
2080
|
+
i0.ɵɵelementStart(0, "mj-page-layout")(1, "mj-page-header", 0);
|
|
2081
|
+
i0.ɵɵconditionalCreate(2, PipelinesComponent_Conditional_2_Template, 3, 2, "div", 1);
|
|
2082
|
+
i0.ɵɵelementStart(3, "div", 2)(4, "button", 3);
|
|
2083
|
+
i0.ɵɵlistener("click", function PipelinesComponent_Template_button_click_4_listener() { return ctx.ExpandAll(); });
|
|
2084
|
+
i0.ɵɵelement(5, "i", 4);
|
|
2085
|
+
i0.ɵɵelementEnd();
|
|
2086
|
+
i0.ɵɵelementStart(6, "button", 5);
|
|
2087
|
+
i0.ɵɵlistener("click", function PipelinesComponent_Template_button_click_6_listener() { return ctx.CollapseAll(); });
|
|
2088
|
+
i0.ɵɵelement(7, "i", 6);
|
|
2102
2089
|
i0.ɵɵelementEnd();
|
|
2090
|
+
i0.ɵɵelementStart(8, "mj-refresh-button", 7);
|
|
2091
|
+
i0.ɵɵlistener("Clicked", function PipelinesComponent_Template_mj_refresh_button_Clicked_8_listener() { return ctx.LoadData(); });
|
|
2092
|
+
i0.ɵɵelementEnd()();
|
|
2093
|
+
i0.ɵɵelementStart(9, "div", 8)(10, "mj-page-search", 9);
|
|
2094
|
+
i0.ɵɵlistener("ValueChange", function PipelinesComponent_Template_mj_page_search_ValueChange_10_listener($event) { return ctx.OnGlobalSearchValue($event); });
|
|
2095
|
+
i0.ɵɵelementEnd()()();
|
|
2096
|
+
i0.ɵɵelementStart(11, "mj-page-body", 10)(12, "div", 11);
|
|
2097
|
+
i0.ɵɵconditionalCreate(13, PipelinesComponent_Conditional_13_Template, 4, 1, "div", 12)(14, PipelinesComponent_Conditional_14_Template, 53, 21, "div", 13);
|
|
2098
|
+
i0.ɵɵelementEnd()()();
|
|
2103
2099
|
} if (rf & 2) {
|
|
2100
|
+
i0.ɵɵadvance(2);
|
|
2101
|
+
i0.ɵɵconditional(ctx.IntegrationCount > 0 ? 2 : -1);
|
|
2102
|
+
i0.ɵɵadvance(6);
|
|
2103
|
+
i0.ɵɵproperty("Loading", ctx.IsLoading);
|
|
2104
|
+
i0.ɵɵadvance(2);
|
|
2105
|
+
i0.ɵɵproperty("Value", ctx.GlobalSearch);
|
|
2104
2106
|
i0.ɵɵadvance();
|
|
2105
|
-
i0.ɵɵ
|
|
2106
|
-
} }, dependencies: [i1.NgClass, i2.NgSelectOption, i2.ɵNgSelectMultipleOption], styles: ["\n\n\n\n\n[_nghost-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n overflow: hidden;\n}\n\n\n\n\n\n\n.pipelines-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--mj-bg-page);\n position: relative;\n overflow: hidden;\n}\n\n\n\n\n\n\n.pipelines-toolbar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 20px;\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n z-index: 10;\n}\n\n.toolbar-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.toolbar-title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.toolbar-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-color-indigo-500); }\n\n.toolbar-count-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 22px;\n height: 22px;\n padding: 0 6px;\n border-radius: 11px;\n background: var(--mj-color-indigo-500);\n color: var(--mj-bg-surface);\n font-size: 11px;\n font-weight: 600;\n}\n\n.toolbar-map-count[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-disabled);\n font-weight: 500;\n}\n\n.toolbar-right[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.global-search[_ngcontent-%COMP%] {\n position: relative;\n display: flex;\n align-items: center;\n}\n\n.search-icon[_ngcontent-%COMP%] {\n position: absolute;\n left: 10px;\n font-size: 12px;\n color: var(--mj-text-disabled);\n pointer-events: none;\n}\n\n.search-input[_ngcontent-%COMP%] {\n width: 240px;\n height: 32px;\n padding: 0 12px 0 30px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-page);\n outline: none;\n transition: border-color 150ms ease, background 150ms ease;\n}\n\n.search-input[_ngcontent-%COMP%]:focus {\n border-color: var(--mj-color-indigo-500);\n background: var(--mj-bg-surface);\n}\n\n.search-input[_ngcontent-%COMP%]::placeholder { color: var(--mj-color-neutral-300); }\n\n.toolbar-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 150ms ease;\n font-size: 13px;\n}\n\n.toolbar-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-color-neutral-300);\n color: var(--mj-text-primary);\n}\n\n.toolbar-btn[_ngcontent-%COMP%]:active { background: var(--mj-bg-surface-active); }\n\n.toolbar-divider[_ngcontent-%COMP%] {\n width: 1px;\n height: 20px;\n background: var(--mj-border-default);\n margin: 0 4px;\n}\n\n\n\n\n\n\n.pipelines-content[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n position: relative;\n overflow: hidden;\n min-height: 0;\n}\n\n.content-loading[_ngcontent-%COMP%], \n.content-empty[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n gap: 12px;\n color: var(--mj-text-disabled);\n}\n\n.content-loading[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 28px; color: var(--mj-color-indigo-500); }\n.content-loading[_ngcontent-%COMP%] span[_ngcontent-%COMP%] { font-size: 14px; }\n.content-empty[_ngcontent-%COMP%] .empty-icon[_ngcontent-%COMP%] { font-size: 48px; color: var(--mj-color-neutral-300); }\n.content-empty[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] { margin: 0; font-size: 18px; font-weight: 600; color: var(--mj-text-muted); }\n.content-empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%] { margin: 0; font-size: 13px; color: var(--mj-text-disabled); }\n\n\n\n\n\n\n.cards-list[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 16px 20px;\n display: flex;\n flex-direction: column;\n gap: 12px;\n max-width: 1200px;\n margin: 0 auto;\n width: 100%;\n box-sizing: border-box;\n min-height: 0;\n}\n\n\n\n\n\n\n.pipeline-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n overflow: hidden;\n transition: box-shadow 200ms ease, border-color 200ms ease;\n}\n\n.pipeline-card[_ngcontent-%COMP%]:hover { box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06); }\n\n.pipeline-card.expanded[_ngcontent-%COMP%] {\n border-color: var(--mj-color-indigo-100);\n box-shadow: 0 2px 12px rgba(99, 102, 241, 0.08);\n}\n\n\n\n.card-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 14px 18px;\n cursor: pointer;\n user-select: none;\n transition: background 150ms ease;\n}\n\n.card-header[_ngcontent-%COMP%]:hover { background: var(--mj-bg-page); }\n\n.card-header-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n min-width: 0;\n flex: 1;\n}\n\n.card-status-dot[_ngcontent-%COMP%] { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; }\n\n.card-icon[_ngcontent-%COMP%] {\n font-size: 18px;\n color: var(--mj-brand-primary);\n flex-shrink: 0;\n width: 24px;\n text-align: center;\n}\n\n.card-info[_ngcontent-%COMP%] { display: flex; flex-direction: column; gap: 2px; min-width: 0; }\n\n.card-name[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.card-meta[_ngcontent-%COMP%] { font-size: 12px; color: var(--mj-text-disabled); }\n.meta-sep[_ngcontent-%COMP%] { color: var(--mj-color-neutral-300); margin: 0 2px; }\n\n.card-header-right[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 14px;\n flex-shrink: 0;\n}\n\n.card-status-label[_ngcontent-%COMP%] { font-size: 12px; font-weight: 600; }\n.card-last-sync[_ngcontent-%COMP%] { font-size: 11px; color: var(--mj-text-disabled); }\n\n\n\n.mini-flow[_ngcontent-%COMP%] { display: flex; align-items: center; gap: 4px; }\n.mini-flow-dot[_ngcontent-%COMP%] { width: 8px; height: 8px; border-radius: 50%; }\n.mini-flow-dot.source[_ngcontent-%COMP%] { background: var(--mj-brand-primary); }\n.mini-flow-dot.dest[_ngcontent-%COMP%] { background: var(--mj-color-success-600); }\n.mini-flow-line[_ngcontent-%COMP%] { width: 16px; height: 2px; background: var(--mj-border-default); border-radius: 1px; }\n.mini-flow-count[_ngcontent-%COMP%] {\n font-size: 10px; font-weight: 700; color: var(--mj-color-indigo-500);\n background: var(--mj-color-indigo-50); padding: 1px 5px; border-radius: 4px;\n}\n\n.card-chevron[_ngcontent-%COMP%] { font-size: 12px; color: var(--mj-text-disabled); transition: transform 200ms ease; }\n\n\n\n\n\n\n.card-body[_ngcontent-%COMP%] {\n border-top: 1px solid var(--mj-border-subtle);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n min-height: 0;\n \n\n\n max-height: 60vh;\n}\n\n\n\n.card-search-bar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 18px;\n border-bottom: 1px solid var(--mj-border-subtle);\n flex-shrink: 0;\n}\n\n.card-search-icon[_ngcontent-%COMP%] { font-size: 11px; color: var(--mj-text-disabled); flex-shrink: 0; }\n\n.card-search-input[_ngcontent-%COMP%] {\n flex: 1;\n height: 28px;\n padding: 0 8px;\n border: 1px solid var(--mj-border-default);\n border-radius: 5px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-page);\n outline: none;\n transition: border-color 150ms ease;\n}\n\n.card-search-input[_ngcontent-%COMP%]:focus { border-color: var(--mj-color-indigo-500); background: var(--mj-bg-surface); }\n.card-search-input[_ngcontent-%COMP%]::placeholder { color: var(--mj-color-neutral-300); }\n.card-search-count[_ngcontent-%COMP%] { font-size: 11px; color: var(--mj-text-disabled); white-space: nowrap; flex-shrink: 0; }\n\n\n\n.map-table-head[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 6px 18px;\n font-size: 10px;\n font-weight: 600;\n color: var(--mj-text-disabled);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-page);\n flex-shrink: 0;\n}\n\n\n\n.map-table-body[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n min-height: 0;\n}\n\n.map-table-empty[_ngcontent-%COMP%] {\n padding: 24px 18px;\n text-align: center;\n color: var(--mj-text-disabled);\n font-size: 13px;\n}\n\n\n\n\n\n.map-col-source[_ngcontent-%COMP%] { flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n.map-col-direction[_ngcontent-%COMP%] { width: 52px; flex-shrink: 0; display: flex; align-items: center; justify-content: center; }\n.map-col-dest[_ngcontent-%COMP%] { flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n.map-col-meta[_ngcontent-%COMP%] { width: 80px; flex-shrink: 0; display: flex; align-items: center; justify-content: flex-end; gap: 4px; }\n\n\n\n.map-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 8px 18px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: background 150ms ease;\n border-bottom: 1px solid var(--mj-bg-page);\n}\n\n.map-row[_ngcontent-%COMP%]:hover { background: var(--mj-color-indigo-50); }\n.map-row.sync-disabled[_ngcontent-%COMP%] { opacity: 0.55; }\n.map-row.sync-disabled[_ngcontent-%COMP%]:hover { opacity: 0.8; }\n\n\n\n\n.map-config-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n border-radius: 4px;\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-disabled);\n font-size: 10px;\n}\n\n.map-edit-hint[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n border-radius: 4px;\n color: var(--mj-color-neutral-300);\n font-size: 11px;\n transition: color 150ms ease;\n}\n\n.map-row[_ngcontent-%COMP%]:hover .map-edit-hint[_ngcontent-%COMP%] { color: var(--mj-color-indigo-500); }\n\n\n\n\n\n\n.map-col-toggle[_ngcontent-%COMP%] {\n width: 50px;\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.sync-toggle[_ngcontent-%COMP%] {\n position: relative;\n display: inline-flex;\n align-items: center;\n cursor: pointer;\n}\n\n.sync-toggle[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n position: absolute;\n opacity: 0;\n width: 0;\n height: 0;\n}\n\n.sync-toggle-track[_ngcontent-%COMP%] {\n width: 30px;\n height: 16px;\n border-radius: 8px;\n background: var(--mj-color-neutral-300);\n position: relative;\n transition: background 200ms ease;\n}\n\n.sync-toggle-track[_ngcontent-%COMP%]::after {\n content: '';\n position: absolute;\n top: 2px;\n left: 2px;\n width: 12px;\n height: 12px;\n border-radius: 50%;\n background: var(--mj-bg-surface);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15);\n transition: transform 200ms ease;\n}\n\n.sync-toggle[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:checked + .sync-toggle-track[_ngcontent-%COMP%] {\n background: var(--mj-color-success-600);\n}\n\n.sync-toggle[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:checked + .sync-toggle-track[_ngcontent-%COMP%]::after {\n transform: translateX(14px);\n}\n\n\n\n\n\n\n.direction-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 36px;\n height: 20px;\n padding: 0 6px;\n border-radius: 4px;\n font-size: 10px;\n font-weight: 700;\n line-height: 1;\n flex-shrink: 0;\n}\n\n.direction-badge.pull[_ngcontent-%COMP%] { background: var(--mj-color-info-100); color: var(--mj-brand-primary); }\n.direction-badge.push[_ngcontent-%COMP%] { background: var(--mj-color-success-100); color: var(--mj-color-success-600); }\n.direction-badge.bidirectional[_ngcontent-%COMP%] { background: var(--mj-color-warning-100); color: var(--mj-color-warning-600); }\n\n\n\n\n\n\n.ve-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow: hidden;\n background: var(--mj-bg-surface);\n animation: _ngcontent-%COMP%_slideIn 250ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n@keyframes _ngcontent-%COMP%_slideIn {\n from { opacity: 0; transform: translateX(30px); }\n to { opacity: 1; transform: translateX(0); }\n}\n\n@keyframes _ngcontent-%COMP%_fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n\n\n\n\n\n.ve-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 14px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n gap: 16px;\n}\n\n.ve-header-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n min-width: 0;\n}\n\n.ve-back-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-muted);\n cursor: pointer;\n font-size: 14px;\n flex-shrink: 0;\n transition: all 150ms ease;\n}\n\n.ve-back-btn[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); }\n\n.ve-header-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 15px;\n font-weight: 600;\n min-width: 0;\n}\n\n.ve-source-label[_ngcontent-%COMP%] {\n color: var(--mj-color-indigo-500);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 200px;\n}\n\n.ve-direction-arrow[_ngcontent-%COMP%] { color: var(--mj-text-disabled); font-size: 13px; flex-shrink: 0; }\n\n.ve-dest-label[_ngcontent-%COMP%] {\n color: var(--mj-color-success-600);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 200px;\n}\n\n.ve-header-stats[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-shrink: 0;\n}\n\n.ve-stat[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n.ve-stat[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n font-weight: 700;\n}\n\n.ve-stat-sep[_ngcontent-%COMP%] {\n width: 1px;\n height: 14px;\n background: var(--mj-border-default);\n}\n\n.ve-header-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-shrink: 0;\n}\n\n.ve-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 7px 14px;\n border-radius: 7px;\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 150ms ease;\n border: none;\n white-space: nowrap;\n}\n\n.ve-btn-ghost[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-default);\n}\n\n.ve-btn-ghost[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-active); color: var(--mj-text-primary); }\n\n.ve-btn-primary[_ngcontent-%COMP%] {\n background: var(--mj-color-indigo-500);\n color: var(--mj-bg-surface);\n}\n\n.ve-btn-primary[_ngcontent-%COMP%]:hover { background: var(--mj-color-indigo-600); }\n.ve-btn-primary[_ngcontent-%COMP%]:disabled { opacity: 0.5; cursor: default; }\n\n.ve-btn-danger[_ngcontent-%COMP%] {\n background: var(--mj-status-error-bg);\n color: var(--mj-color-error-600);\n border: 1px solid var(--mj-color-error-200);\n}\n\n.ve-btn-danger[_ngcontent-%COMP%]:hover { background: var(--mj-color-error-100); }\n\n.ve-error-msg[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n font-size: 0.8125rem;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n margin-left: 8px;\n}\n\n.ve-save-success[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-color-success-600);\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 4px;\n animation: _ngcontent-%COMP%_fadeIn 300ms ease;\n}\n\n\n\n.ve-sync-toggle[_ngcontent-%COMP%] { flex-shrink: 0; margin-left: 8px; }\n.ve-sync-label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-muted);\n flex-shrink: 0;\n}\n\n\n\n.ve-action-sep[_ngcontent-%COMP%] {\n width: 1px;\n height: 20px;\n background: var(--mj-border-default);\n flex-shrink: 0;\n}\n\n\n\n.ve-btn-ghost.active[_ngcontent-%COMP%] {\n background: var(--mj-color-indigo-50);\n color: var(--mj-color-indigo-600);\n border-color: var(--mj-color-indigo-200);\n}\n\n\n\n\n\n\n.ve-preview-strip[_ngcontent-%COMP%] {\n display: flex;\n gap: 1px;\n background: var(--mj-border-default);\n border-bottom: 1px solid var(--mj-border-default);\n max-height: 220px;\n flex-shrink: 0;\n overflow: hidden;\n}\n\n.ve-preview-panel[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-page);\n overflow: hidden;\n}\n\n.ve-preview-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 14px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n border-bottom: 1px solid var(--mj-border-subtle);\n flex-shrink: 0;\n}\n\n.ve-preview-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 11px; color: var(--mj-color-indigo-500); }\n.ve-preview-header[_ngcontent-%COMP%] span[_ngcontent-%COMP%] { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n\n.ve-preview-close[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n border: none;\n border-radius: 4px;\n background: transparent;\n color: var(--mj-text-disabled);\n cursor: pointer;\n font-size: 11px;\n flex-shrink: 0;\n}\n\n.ve-preview-close[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-active); color: var(--mj-text-secondary); }\n\n.ve-preview-loading[_ngcontent-%COMP%], \n.ve-preview-empty[_ngcontent-%COMP%] {\n padding: 20px;\n text-align: center;\n color: var(--mj-text-disabled);\n font-size: 12px;\n}\n\n.ve-preview-loading[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { margin-right: 6px; color: var(--mj-color-indigo-500); }\n\n.ve-preview-table-wrap[_ngcontent-%COMP%] {\n flex: 1;\n overflow: auto;\n}\n\n.ve-preview-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n font-size: 11px;\n}\n\n.ve-preview-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n position: sticky;\n top: 0;\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-muted);\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n font-size: 10px;\n padding: 5px 10px;\n text-align: left;\n white-space: nowrap;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.ve-preview-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 4px 10px;\n color: var(--mj-text-primary);\n border-bottom: 1px solid var(--mj-border-subtle);\n max-width: 180px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.ve-preview-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover td[_ngcontent-%COMP%] {\n background: var(--mj-color-indigo-50);\n}\n\n\n\n\n\n\n.ve-connect-banner[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 20px;\n background: var(--mj-color-indigo-50);\n color: var(--mj-color-indigo-700);\n font-size: 13px;\n border-bottom: 1px solid var(--mj-color-indigo-100);\n flex-shrink: 0;\n}\n\n.ve-connect-banner[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] { font-weight: 700; }\n\n.ve-connect-cancel[_ngcontent-%COMP%] {\n margin-left: auto;\n padding: 3px 10px;\n border: 1px solid var(--mj-color-indigo-100);\n border-radius: 5px;\n background: var(--mj-bg-surface);\n color: var(--mj-color-indigo-700);\n font-size: 12px;\n cursor: pointer;\n transition: all 150ms ease;\n}\n\n.ve-connect-cancel[_ngcontent-%COMP%]:hover { background: var(--mj-color-indigo-100); }\n\n\n\n\n\n\n.ve-body[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n overflow: hidden;\n}\n\n.ve-loading[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n width: 100%;\n gap: 12px;\n color: var(--mj-text-disabled);\n font-size: 14px;\n}\n\n.ve-loading[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 24px; color: var(--mj-color-indigo-500); }\n\n\n\n.ve-sections-wrapper[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n min-width: 0;\n}\n\n\n\n.ve-section[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.ve-section[_ngcontent-%COMP%]:not(.collapsed) {\n flex: 1;\n min-height: 0;\n}\n\n.ve-section.collapsed[_ngcontent-%COMP%] {\n flex-shrink: 0;\n}\n\n.ve-section-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 16px;\n cursor: pointer;\n user-select: none;\n background: var(--mj-bg-page);\n border-bottom: 1px solid var(--mj-border-subtle);\n flex-shrink: 0;\n transition: background 150ms ease;\n}\n\n.ve-section-header[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.ve-section-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-text-disabled);\n width: 12px;\n flex-shrink: 0;\n transition: transform 200ms ease;\n}\n\n.ve-section-title[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.4px;\n color: var(--mj-text-muted);\n}\n\n.ve-section-badge[_ngcontent-%COMP%] {\n font-size: 10px;\n font-weight: 600;\n background: var(--mj-color-indigo-50);\n color: var(--mj-color-indigo-600);\n padding: 1px 8px;\n border-radius: 4px;\n margin-left: auto;\n}\n\n.ve-section-body[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n min-height: 0;\n animation: _ngcontent-%COMP%_fadeIn 200ms ease;\n}\n\n\n\n.ve-canvas-wrapper[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n min-width: 0;\n}\n\n\n\n\n\n\n.ve-col-headers[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 200px 1fr;\n flex-shrink: 0;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.ve-col-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 16px;\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--mj-text-muted);\n}\n\n.ve-col-header.source[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-color-indigo-500); }\n.ve-col-header.dest[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-color-success-600); }\n.ve-col-header-spacer[_ngcontent-%COMP%] { \n }\n\n.ve-col-count[_ngcontent-%COMP%] {\n font-size: 10px;\n font-weight: 600;\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-disabled);\n padding: 1px 6px;\n border-radius: 4px;\n}\n\n\n\n\n\n\n.ve-col-searches[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 200px 1fr;\n flex-shrink: 0;\n border-bottom: 1px solid var(--mj-border-subtle);\n padding: 6px 0;\n}\n\n.ve-col-search[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 0 12px;\n}\n\n.ve-col-search[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-disabled);\n flex-shrink: 0;\n}\n\n.ve-col-search[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n flex: 1;\n height: 28px;\n padding: 0 8px;\n border: 1px solid var(--mj-border-default);\n border-radius: 5px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-page);\n outline: none;\n transition: border-color 150ms ease;\n}\n\n.ve-col-search[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:focus { border-color: var(--mj-color-indigo-500); background: var(--mj-bg-surface); }\n.ve-col-search[_ngcontent-%COMP%] input[_ngcontent-%COMP%]::placeholder { color: var(--mj-color-neutral-300); }\n.ve-col-search-spacer[_ngcontent-%COMP%] { \n }\n\n\n\n\n\n\n.ve-canvas-scroll[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n}\n\n.ve-canvas-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 200px 1fr;\n position: relative;\n}\n\n\n\n\n\n\n.ve-field-col[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n\n.ve-field-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 0 14px;\n font-size: 13px;\n cursor: pointer;\n transition: background 150ms ease, opacity 150ms ease;\n border-bottom: 1px solid var(--mj-bg-page);\n box-sizing: border-box;\n}\n\n.ve-field-item.mapped[_ngcontent-%COMP%] { background: var(--mj-bg-surface); }\n\n.ve-field-item.unmapped[_ngcontent-%COMP%] {\n opacity: 0.5;\n background: var(--mj-bg-page);\n}\n\n.ve-field-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-color-indigo-50);\n opacity: 1;\n}\n\n.ve-field-item.connecting[_ngcontent-%COMP%] {\n background: var(--mj-color-indigo-100);\n opacity: 1;\n box-shadow: inset 0 0 0 2px var(--mj-color-indigo-500);\n}\n\n.ve-field-item.connect-target[_ngcontent-%COMP%]:hover {\n background: var(--mj-color-success-100);\n box-shadow: inset 0 0 0 2px var(--mj-color-success-600);\n}\n\n.ve-field-name[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n color: var(--mj-text-secondary);\n font-weight: 500;\n}\n\n.ve-field-type[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-text-disabled);\n flex-shrink: 0;\n font-family: 'SF Mono', 'Fira Code', monospace;\n}\n\n.ve-field-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 3px;\n flex-shrink: 0;\n}\n\n.ve-fbadge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 18px;\n height: 18px;\n padding: 0 3px;\n border-radius: 4px;\n font-size: 9px;\n font-weight: 700;\n}\n\n.ve-fbadge.pk[_ngcontent-%COMP%] { background: var(--mj-color-warning-100); color: var(--mj-color-warning-700); }\n.ve-fbadge.req[_ngcontent-%COMP%] { background: var(--mj-color-error-100); color: var(--mj-color-error-600); }\n\n.ve-field-empty[_ngcontent-%COMP%] {\n padding: 32px 16px;\n text-align: center;\n color: var(--mj-text-disabled);\n font-size: 13px;\n}\n\n\n\n\n\n\n.ve-svg[_ngcontent-%COMP%] {\n display: block;\n}\n\n.ve-conn-line[_ngcontent-%COMP%] {\n fill: none;\n stroke-width: 2;\n cursor: pointer;\n transition: stroke 200ms ease, stroke-width 200ms ease;\n}\n\n\n\n.ve-conn-line.conn-direct[_ngcontent-%COMP%] { stroke: var(--mj-brand-primary); stroke-dasharray: none; }\n.ve-conn-line.conn-regex[_ngcontent-%COMP%] { stroke: var(--ve-color-regex, #8b5cf6); stroke-dasharray: 6 3; }\n.ve-conn-line.conn-split[_ngcontent-%COMP%] { stroke: var(--mj-status-warning); stroke-dasharray: 8 4; }\n.ve-conn-line.conn-combine[_ngcontent-%COMP%] { stroke: var(--mj-status-success); stroke-dasharray: 8 4; }\n.ve-conn-line.conn-lookup[_ngcontent-%COMP%] { stroke: var(--ve-color-lookup, #0ea5e9); stroke-dasharray: 4 4; }\n.ve-conn-line.conn-format[_ngcontent-%COMP%] { stroke: var(--ve-color-format, #ec4899); stroke-dasharray: 4 4; }\n.ve-conn-line.conn-coerce[_ngcontent-%COMP%] { stroke: var(--ve-color-coerce, #f97316); stroke-dasharray: 4 4; }\n.ve-conn-line.conn-substring[_ngcontent-%COMP%] { stroke: var(--ve-color-substring, #14b8a6); stroke-dasharray: 4 4; }\n.ve-conn-line.conn-custom[_ngcontent-%COMP%] { stroke: var(--ve-color-custom, #a855f7); stroke-dasharray: 2 3; }\n\n.ve-conn-line[_ngcontent-%COMP%]:hover { stroke-width: 3.5; }\n.ve-conn-line.selected[_ngcontent-%COMP%] { stroke-width: 3.5; filter: drop-shadow(0 0 4px rgba(99, 102, 241, 0.4)); }\n\n\n\n.ve-badge-fo[_ngcontent-%COMP%] { overflow: visible; }\n\n.ve-conn-badge[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 11px;\n cursor: pointer;\n transition: all 150ms ease;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12);\n}\n\n.ve-conn-badge.badge-direct[_ngcontent-%COMP%] { background: var(--mj-brand-primary-subtle); color: var(--mj-brand-primary); border: 2px solid var(--mj-brand-primary); }\n.ve-conn-badge.badge-regex[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--ve-color-regex, #8b5cf6) 10%, var(--mj-bg-surface)); color: var(--ve-color-regex, #8b5cf6); border: 2px solid var(--ve-color-regex, #8b5cf6); }\n.ve-conn-badge.badge-split[_ngcontent-%COMP%] { background: var(--mj-status-warning-subtle); color: var(--mj-status-warning); border: 2px solid var(--mj-status-warning); }\n.ve-conn-badge.badge-combine[_ngcontent-%COMP%] { background: var(--mj-status-success-subtle); color: var(--mj-status-success); border: 2px solid var(--mj-status-success); }\n.ve-conn-badge.badge-lookup[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--ve-color-lookup, #0ea5e9) 10%, var(--mj-bg-surface)); color: var(--ve-color-lookup, #0ea5e9); border: 2px solid var(--ve-color-lookup, #0ea5e9); }\n.ve-conn-badge.badge-format[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--ve-color-format, #ec4899) 10%, var(--mj-bg-surface)); color: var(--ve-color-format, #ec4899); border: 2px solid var(--ve-color-format, #ec4899); }\n.ve-conn-badge.badge-coerce[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--ve-color-coerce, #f97316) 10%, var(--mj-bg-surface)); color: var(--ve-color-coerce, #f97316); border: 2px solid var(--ve-color-coerce, #f97316); }\n.ve-conn-badge.badge-substring[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--ve-color-substring, #14b8a6) 10%, var(--mj-bg-surface)); color: var(--ve-color-substring, #14b8a6); border: 2px solid var(--ve-color-substring, #14b8a6); }\n.ve-conn-badge.badge-custom[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--ve-color-custom, #a855f7) 10%, var(--mj-bg-surface)); color: var(--ve-color-custom, #a855f7); border: 2px solid var(--ve-color-custom, #a855f7); }\n\n.ve-conn-badge[_ngcontent-%COMP%]:hover { transform: scale(1.2); }\n.ve-conn-badge.selected[_ngcontent-%COMP%] { transform: scale(1.25); box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.3); }\n\n\n\n\n\n\n.ve-transform-panel[_ngcontent-%COMP%] {\n width: 320px;\n flex-shrink: 0;\n border-left: 1px solid var(--mj-border-default);\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n background: var(--mj-bg-page);\n animation: _ngcontent-%COMP%_slideInRight 200ms ease;\n}\n\n@keyframes _ngcontent-%COMP%_slideInRight {\n from { opacity: 0; transform: translateX(20px); }\n to { opacity: 1; transform: translateX(0); }\n}\n\n.ve-tp-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 14px 16px;\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.ve-tp-title[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 700;\n color: var(--mj-text-primary);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.ve-tp-close[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n border: none;\n border-radius: 6px;\n background: transparent;\n color: var(--mj-text-disabled);\n cursor: pointer;\n font-size: 13px;\n transition: all 150ms ease;\n}\n\n.ve-tp-close[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-active); color: var(--mj-text-secondary); }\n\n\n\n.ve-tp-mapping-info[_ngcontent-%COMP%] {\n padding: 14px 16px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.ve-tp-field-pair[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n}\n\n.ve-tp-field[_ngcontent-%COMP%] {\n padding: 4px 10px;\n border-radius: 6px;\n font-weight: 600;\n font-size: 12px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 110px;\n}\n\n.ve-tp-field.source[_ngcontent-%COMP%] { background: var(--mj-color-indigo-50); color: var(--mj-color-indigo-700); }\n.ve-tp-field.dest[_ngcontent-%COMP%] { background: var(--mj-status-success-bg); color: var(--mj-color-success-700); }\n.ve-tp-arrow[_ngcontent-%COMP%] { color: var(--mj-text-disabled); font-size: 11px; flex-shrink: 0; }\n\n\n\n.ve-tp-toggles[_ngcontent-%COMP%] {\n display: flex;\n gap: 16px;\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.ve-tp-toggle[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n}\n\n.ve-tp-toggle-box[_ngcontent-%COMP%] {\n width: 18px;\n height: 18px;\n border: 2px solid var(--mj-color-neutral-300);\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 10px;\n color: var(--mj-bg-surface);\n transition: all 150ms ease;\n}\n\n.ve-tp-toggle-box.active[_ngcontent-%COMP%] {\n background: var(--mj-color-indigo-500);\n border-color: var(--mj-color-indigo-500);\n}\n\n\n\n.ve-tp-section[_ngcontent-%COMP%] {\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.ve-tp-section-label[_ngcontent-%COMP%] {\n display: block;\n font-size: 10px;\n font-weight: 700;\n color: var(--mj-text-disabled);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n margin-bottom: 8px;\n}\n\n.ve-tp-section-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n\n\n\n.ve-tp-direction-btns[_ngcontent-%COMP%] {\n display: flex;\n gap: 0;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.ve-tp-direction-btns[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n flex: 1;\n padding: 6px 8px;\n border: none;\n background: var(--mj-bg-surface);\n color: var(--mj-text-muted);\n font-size: 11px;\n font-weight: 500;\n cursor: pointer;\n transition: all 150ms ease;\n border-right: 1px solid var(--mj-border-default);\n}\n\n.ve-tp-direction-btns[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:last-child { border-right: none; }\n.ve-tp-direction-btns[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-hover); }\n.ve-tp-direction-btns[_ngcontent-%COMP%] button.active[_ngcontent-%COMP%] { background: var(--mj-color-indigo-500); color: var(--mj-bg-surface); }\n\n\n\n.ve-tp-add-step[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n border: 1px solid var(--mj-border-default);\n border-radius: 5px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-muted);\n font-size: 11px;\n cursor: pointer;\n transition: all 150ms ease;\n}\n\n.ve-tp-add-step[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); }\n\n.ve-tp-step[_ngcontent-%COMP%] {\n margin-top: 8px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n overflow: hidden;\n}\n\n.ve-tp-step-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 10px;\n background: var(--mj-bg-page);\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.ve-tp-step-num[_ngcontent-%COMP%] {\n width: 20px;\n height: 20px;\n border-radius: 50%;\n background: var(--mj-color-indigo-500);\n color: var(--mj-bg-surface);\n font-size: 10px;\n font-weight: 700;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.ve-tp-type-select[_ngcontent-%COMP%] {\n flex: 1;\n height: 28px;\n padding: 0 8px;\n border: 1px solid var(--mj-border-default);\n border-radius: 5px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface);\n outline: none;\n cursor: pointer;\n}\n\n.ve-tp-type-select[_ngcontent-%COMP%]:focus { border-color: var(--mj-color-indigo-500); }\n\n.ve-tp-remove-step[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n border: none;\n border-radius: 5px;\n background: transparent;\n color: var(--mj-text-disabled);\n cursor: pointer;\n font-size: 11px;\n transition: all 150ms ease;\n flex-shrink: 0;\n}\n\n.ve-tp-remove-step[_ngcontent-%COMP%]:hover { background: var(--mj-color-error-100); color: var(--mj-color-error-600); }\n\n.ve-tp-step-config[_ngcontent-%COMP%] {\n padding: 8px 10px;\n}\n\n.ve-tp-config-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 6px;\n}\n\n.ve-tp-config-row[_ngcontent-%COMP%]:last-child { margin-bottom: 0; }\n\n.ve-tp-config-row[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n width: 80px;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-muted);\n flex-shrink: 0;\n}\n\n.ve-tp-config-row[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n flex: 1;\n height: 28px;\n padding: 0 8px;\n border: 1px solid var(--mj-border-default);\n border-radius: 5px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-page);\n outline: none;\n font-family: 'SF Mono', 'Fira Code', monospace;\n}\n\n.ve-tp-config-row[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:focus { border-color: var(--mj-color-indigo-500); background: var(--mj-bg-surface); }\n\n.ve-tp-step-onerror[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 10px;\n border-top: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-page);\n}\n\n.ve-tp-step-onerror[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 10px;\n font-weight: 600;\n color: var(--mj-text-disabled);\n flex-shrink: 0;\n}\n\n.ve-tp-step-onerror[_ngcontent-%COMP%] select[_ngcontent-%COMP%] {\n height: 24px;\n padding: 0 6px;\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n font-size: 11px;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface);\n outline: none;\n cursor: pointer;\n}\n\n.ve-tp-no-steps[_ngcontent-%COMP%] {\n padding: 16px;\n text-align: center;\n color: var(--mj-text-disabled);\n font-size: 12px;\n font-style: italic;\n}\n\n\n\n.ve-tp-footer[_ngcontent-%COMP%] {\n padding: 14px 16px;\n margin-top: auto;\n flex-shrink: 0;\n}\n\n\n\n\n\n\n.cards-list[_ngcontent-%COMP%]::-webkit-scrollbar, \n.map-table-body[_ngcontent-%COMP%]::-webkit-scrollbar, \n.ve-canvas-scroll[_ngcontent-%COMP%]::-webkit-scrollbar, \n.ve-transform-panel[_ngcontent-%COMP%]::-webkit-scrollbar {\n width: 6px;\n height: 6px;\n}\n\n.cards-list[_ngcontent-%COMP%]::-webkit-scrollbar-track, \n.map-table-body[_ngcontent-%COMP%]::-webkit-scrollbar-track, \n.ve-canvas-scroll[_ngcontent-%COMP%]::-webkit-scrollbar-track, \n.ve-transform-panel[_ngcontent-%COMP%]::-webkit-scrollbar-track {\n background: transparent;\n}\n\n.cards-list[_ngcontent-%COMP%]::-webkit-scrollbar-thumb, \n.map-table-body[_ngcontent-%COMP%]::-webkit-scrollbar-thumb, \n.ve-canvas-scroll[_ngcontent-%COMP%]::-webkit-scrollbar-thumb, \n.ve-transform-panel[_ngcontent-%COMP%]::-webkit-scrollbar-thumb {\n background: var(--mj-color-neutral-300);\n border-radius: 3px;\n}\n\n.cards-list[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover, \n.map-table-body[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover, \n.ve-canvas-scroll[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover, \n.ve-transform-panel[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover {\n background: var(--mj-text-disabled);\n}\n\n\n\n\n\n\n.ve-info-body[_ngcontent-%COMP%] {\n padding: 16px;\n overflow-y: auto;\n}\n\n.ve-info-loading[_ngcontent-%COMP%] {\n text-align: center;\n color: var(--mj-text-disabled);\n font-size: 13px;\n padding: 20px;\n}\n\n.ve-info-loading[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-color-indigo-500);\n margin-right: 6px;\n}\n\n.ve-info-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));\n gap: 12px;\n margin-bottom: 16px;\n}\n\n.ve-info-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 14px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n}\n\n.ve-info-card-icon[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 14px;\n flex-shrink: 0;\n background: var(--mj-color-indigo-50);\n color: var(--mj-color-indigo-500);\n}\n\n.ve-info-card-icon.source[_ngcontent-%COMP%] {\n background: var(--mj-color-info-100);\n color: var(--mj-brand-primary);\n}\n\n.ve-info-card-icon.sync[_ngcontent-%COMP%] {\n background: var(--mj-color-success-100);\n color: var(--mj-color-success-600);\n}\n\n.ve-info-card-icon.info-status-success[_ngcontent-%COMP%] {\n background: var(--mj-color-success-100);\n color: var(--mj-color-success-600);\n}\n\n.ve-info-card-icon.info-status-error[_ngcontent-%COMP%] {\n background: var(--mj-color-error-100);\n color: var(--mj-color-error-600);\n}\n\n.ve-info-card-icon.info-status-running[_ngcontent-%COMP%] {\n background: var(--mj-color-info-100);\n color: var(--mj-brand-primary);\n}\n\n.ve-info-card-icon.info-status-pending[_ngcontent-%COMP%] {\n background: var(--mj-color-warning-100);\n color: var(--mj-color-warning-600);\n}\n\n.ve-info-card-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n}\n\n.ve-info-card-value[_ngcontent-%COMP%] {\n font-size: 16px;\n font-weight: 700;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.ve-info-card-label[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-disabled);\n font-weight: 500;\n}\n\n.ve-info-details[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n overflow: hidden;\n}\n\n.ve-info-detail-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 14px;\n font-size: 12px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.ve-info-detail-row[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.ve-info-detail-label[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n.ve-info-detail-value[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n font-weight: 600;\n}"] });
|
|
2107
|
+
i0.ɵɵproperty("Flex", true)("Padding", false);
|
|
2108
|
+
i0.ɵɵadvance(2);
|
|
2109
|
+
i0.ɵɵconditional(!ctx.VisualEditorOpen ? 13 : 14);
|
|
2110
|
+
} }, dependencies: [i1.NgClass, i2.NgSelectOption, i2.ɵNgSelectMultipleOption, i3.MJButtonDirective, i3.MJPageLayoutComponent, i3.MJPageHeaderComponent, i3.MJPageBodyComponent, i3.MJPageSearchComponent, i3.MJStatBadgeComponent, i3.MJRefreshButtonComponent], styles: ["\n\n\n\n\n[_nghost-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n overflow: hidden;\n}\n\n\n\n\n\n\n\n\n\n.pipelines-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--mj-bg-page);\n position: relative;\n overflow: hidden;\n}\n\n\n\n\n\n\n.pipelines-toolbar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 20px;\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n z-index: 10;\n}\n\n.toolbar-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.toolbar-title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.toolbar-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-color-indigo-500); }\n\n.toolbar-count-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 22px;\n height: 22px;\n padding: 0 6px;\n border-radius: 11px;\n background: var(--mj-color-indigo-500);\n color: var(--mj-bg-surface);\n font-size: 11px;\n font-weight: 600;\n}\n\n.toolbar-map-count[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-disabled);\n font-weight: 500;\n}\n\n.toolbar-right[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.global-search[_ngcontent-%COMP%] {\n position: relative;\n display: flex;\n align-items: center;\n}\n\n.search-icon[_ngcontent-%COMP%] {\n position: absolute;\n left: 10px;\n font-size: 12px;\n color: var(--mj-text-disabled);\n pointer-events: none;\n}\n\n.search-input[_ngcontent-%COMP%] {\n width: 240px;\n height: 32px;\n padding: 0 12px 0 30px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-page);\n outline: none;\n transition: border-color 150ms ease, background 150ms ease;\n}\n\n.search-input[_ngcontent-%COMP%]:focus {\n border-color: var(--mj-color-indigo-500);\n background: var(--mj-bg-surface);\n}\n\n.search-input[_ngcontent-%COMP%]::placeholder { color: var(--mj-color-neutral-300); }\n\n.toolbar-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 150ms ease;\n font-size: 13px;\n}\n\n.toolbar-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-color-neutral-300);\n color: var(--mj-text-primary);\n}\n\n.toolbar-btn[_ngcontent-%COMP%]:active { background: var(--mj-bg-surface-active); }\n\n.toolbar-divider[_ngcontent-%COMP%] {\n width: 1px;\n height: 20px;\n background: var(--mj-border-default);\n margin: 0 4px;\n}\n\n\n\n\n\n\n.pipelines-content[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n position: relative;\n overflow: hidden;\n min-height: 0;\n}\n\n.content-loading[_ngcontent-%COMP%], \n.content-empty[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n gap: 12px;\n color: var(--mj-text-disabled);\n}\n\n.content-loading[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 28px; color: var(--mj-color-indigo-500); }\n.content-loading[_ngcontent-%COMP%] span[_ngcontent-%COMP%] { font-size: 14px; }\n.content-empty[_ngcontent-%COMP%] .empty-icon[_ngcontent-%COMP%] { font-size: 48px; color: var(--mj-color-neutral-300); }\n.content-empty[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] { margin: 0; font-size: 18px; font-weight: 600; color: var(--mj-text-muted); }\n.content-empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%] { margin: 0; font-size: 13px; color: var(--mj-text-disabled); }\n\n\n\n\n\n\n.cards-list[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 16px 20px;\n display: flex;\n flex-direction: column;\n gap: 12px;\n max-width: 1200px;\n margin: 0 auto;\n width: 100%;\n box-sizing: border-box;\n min-height: 0;\n}\n\n\n\n\n\n\n.pipeline-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n overflow: hidden;\n transition: box-shadow 200ms ease, border-color 200ms ease;\n}\n\n.pipeline-card[_ngcontent-%COMP%]:hover { box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06); }\n\n.pipeline-card.expanded[_ngcontent-%COMP%] {\n border-color: var(--mj-color-indigo-100);\n box-shadow: 0 2px 12px rgba(99, 102, 241, 0.08);\n}\n\n\n\n.card-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 14px 18px;\n cursor: pointer;\n user-select: none;\n transition: background 150ms ease;\n}\n\n.card-header[_ngcontent-%COMP%]:hover { background: var(--mj-bg-page); }\n\n.card-header-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n min-width: 0;\n flex: 1;\n}\n\n.card-status-dot[_ngcontent-%COMP%] { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; }\n\n.card-icon[_ngcontent-%COMP%] {\n font-size: 18px;\n color: var(--mj-brand-primary);\n flex-shrink: 0;\n width: 24px;\n text-align: center;\n}\n\n.card-info[_ngcontent-%COMP%] { display: flex; flex-direction: column; gap: 2px; min-width: 0; }\n\n.card-name[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.card-meta[_ngcontent-%COMP%] { font-size: 12px; color: var(--mj-text-disabled); }\n.meta-sep[_ngcontent-%COMP%] { color: var(--mj-color-neutral-300); margin: 0 2px; }\n\n.card-header-right[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 14px;\n flex-shrink: 0;\n}\n\n.card-status-label[_ngcontent-%COMP%] { font-size: 12px; font-weight: 600; }\n.card-last-sync[_ngcontent-%COMP%] { font-size: 11px; color: var(--mj-text-disabled); }\n\n\n\n.mini-flow[_ngcontent-%COMP%] { display: flex; align-items: center; gap: 4px; }\n.mini-flow-dot[_ngcontent-%COMP%] { width: 8px; height: 8px; border-radius: 50%; }\n.mini-flow-dot.source[_ngcontent-%COMP%] { background: var(--mj-brand-primary); }\n.mini-flow-dot.dest[_ngcontent-%COMP%] { background: var(--mj-color-success-600); }\n.mini-flow-line[_ngcontent-%COMP%] { width: 16px; height: 2px; background: var(--mj-border-default); border-radius: 1px; }\n.mini-flow-count[_ngcontent-%COMP%] {\n font-size: 10px; font-weight: 700; color: var(--mj-color-indigo-500);\n background: var(--mj-color-indigo-50); padding: 1px 5px; border-radius: 4px;\n}\n\n.card-chevron[_ngcontent-%COMP%] { font-size: 12px; color: var(--mj-text-disabled); transition: transform 200ms ease; }\n\n\n\n\n\n\n.card-body[_ngcontent-%COMP%] {\n border-top: 1px solid var(--mj-border-subtle);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n min-height: 0;\n \n\n\n max-height: 60vh;\n}\n\n\n\n.card-search-bar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 18px;\n border-bottom: 1px solid var(--mj-border-subtle);\n flex-shrink: 0;\n}\n\n.card-search-icon[_ngcontent-%COMP%] { font-size: 11px; color: var(--mj-text-disabled); flex-shrink: 0; }\n\n.card-search-input[_ngcontent-%COMP%] {\n flex: 1;\n height: 28px;\n padding: 0 8px;\n border: 1px solid var(--mj-border-default);\n border-radius: 5px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-page);\n outline: none;\n transition: border-color 150ms ease;\n}\n\n.card-search-input[_ngcontent-%COMP%]:focus { border-color: var(--mj-color-indigo-500); background: var(--mj-bg-surface); }\n.card-search-input[_ngcontent-%COMP%]::placeholder { color: var(--mj-color-neutral-300); }\n.card-search-count[_ngcontent-%COMP%] { font-size: 11px; color: var(--mj-text-disabled); white-space: nowrap; flex-shrink: 0; }\n\n\n\n.map-table-head[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 6px 18px;\n font-size: 10px;\n font-weight: 600;\n color: var(--mj-text-disabled);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-page);\n flex-shrink: 0;\n}\n\n\n\n.map-table-body[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n min-height: 0;\n}\n\n.map-table-empty[_ngcontent-%COMP%] {\n padding: 24px 18px;\n text-align: center;\n color: var(--mj-text-disabled);\n font-size: 13px;\n}\n\n\n\n\n\n.map-col-source[_ngcontent-%COMP%] { flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n.map-col-direction[_ngcontent-%COMP%] { width: 52px; flex-shrink: 0; display: flex; align-items: center; justify-content: center; }\n.map-col-dest[_ngcontent-%COMP%] { flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n.map-col-meta[_ngcontent-%COMP%] { width: 80px; flex-shrink: 0; display: flex; align-items: center; justify-content: flex-end; gap: 4px; }\n\n\n\n.map-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 8px 18px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: background 150ms ease;\n border-bottom: 1px solid var(--mj-bg-page);\n}\n\n.map-row[_ngcontent-%COMP%]:hover { background: var(--mj-color-indigo-50); }\n.map-row.sync-disabled[_ngcontent-%COMP%] { opacity: 0.55; }\n.map-row.sync-disabled[_ngcontent-%COMP%]:hover { opacity: 0.8; }\n\n\n\n\n.map-config-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n border-radius: 4px;\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-disabled);\n font-size: 10px;\n}\n\n.map-edit-hint[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n border-radius: 4px;\n color: var(--mj-color-neutral-300);\n font-size: 11px;\n transition: color 150ms ease;\n}\n\n.map-row[_ngcontent-%COMP%]:hover .map-edit-hint[_ngcontent-%COMP%] { color: var(--mj-color-indigo-500); }\n\n\n\n\n\n\n.map-col-toggle[_ngcontent-%COMP%] {\n width: 50px;\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.sync-toggle[_ngcontent-%COMP%] {\n position: relative;\n display: inline-flex;\n align-items: center;\n cursor: pointer;\n}\n\n.sync-toggle[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n position: absolute;\n opacity: 0;\n width: 0;\n height: 0;\n}\n\n.sync-toggle-track[_ngcontent-%COMP%] {\n width: 30px;\n height: 16px;\n border-radius: 8px;\n background: var(--mj-color-neutral-300);\n position: relative;\n transition: background 200ms ease;\n}\n\n.sync-toggle-track[_ngcontent-%COMP%]::after {\n content: '';\n position: absolute;\n top: 2px;\n left: 2px;\n width: 12px;\n height: 12px;\n border-radius: 50%;\n background: var(--mj-bg-surface);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15);\n transition: transform 200ms ease;\n}\n\n.sync-toggle[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:checked + .sync-toggle-track[_ngcontent-%COMP%] {\n background: var(--mj-color-success-600);\n}\n\n.sync-toggle[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:checked + .sync-toggle-track[_ngcontent-%COMP%]::after {\n transform: translateX(14px);\n}\n\n\n\n\n\n\n.direction-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 36px;\n height: 20px;\n padding: 0 6px;\n border-radius: 4px;\n font-size: 10px;\n font-weight: 700;\n line-height: 1;\n flex-shrink: 0;\n}\n\n.direction-badge.pull[_ngcontent-%COMP%] { background: var(--mj-color-info-100); color: var(--mj-brand-primary); }\n.direction-badge.push[_ngcontent-%COMP%] { background: var(--mj-color-success-100); color: var(--mj-color-success-600); }\n.direction-badge.bidirectional[_ngcontent-%COMP%] { background: var(--mj-color-warning-100); color: var(--mj-color-warning-600); }\n\n\n\n\n\n\n.ve-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow: hidden;\n background: var(--mj-bg-surface);\n animation: _ngcontent-%COMP%_slideIn 250ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n@keyframes _ngcontent-%COMP%_slideIn {\n from { opacity: 0; transform: translateX(30px); }\n to { opacity: 1; transform: translateX(0); }\n}\n\n@keyframes _ngcontent-%COMP%_fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n\n\n\n\n\n.ve-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 14px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n gap: 16px;\n}\n\n.ve-header-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n min-width: 0;\n}\n\n.ve-back-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-muted);\n cursor: pointer;\n font-size: 14px;\n flex-shrink: 0;\n transition: all 150ms ease;\n}\n\n.ve-back-btn[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); }\n\n.ve-header-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 15px;\n font-weight: 600;\n min-width: 0;\n}\n\n.ve-source-label[_ngcontent-%COMP%] {\n color: var(--mj-color-indigo-500);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 200px;\n}\n\n.ve-direction-arrow[_ngcontent-%COMP%] { color: var(--mj-text-disabled); font-size: 13px; flex-shrink: 0; }\n\n.ve-dest-label[_ngcontent-%COMP%] {\n color: var(--mj-color-success-600);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 200px;\n}\n\n.ve-header-stats[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-shrink: 0;\n}\n\n.ve-stat[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n.ve-stat[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n font-weight: 700;\n}\n\n.ve-stat-sep[_ngcontent-%COMP%] {\n width: 1px;\n height: 14px;\n background: var(--mj-border-default);\n}\n\n.ve-header-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-shrink: 0;\n}\n\n.ve-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 7px 14px;\n border-radius: 7px;\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 150ms ease;\n border: none;\n white-space: nowrap;\n}\n\n.ve-btn-ghost[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-default);\n}\n\n.ve-btn-ghost[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-active); color: var(--mj-text-primary); }\n\n.ve-btn-primary[_ngcontent-%COMP%] {\n background: var(--mj-color-indigo-500);\n color: var(--mj-bg-surface);\n}\n\n.ve-btn-primary[_ngcontent-%COMP%]:hover { background: var(--mj-color-indigo-600); }\n.ve-btn-primary[_ngcontent-%COMP%]:disabled { opacity: 0.5; cursor: default; }\n\n.ve-btn-danger[_ngcontent-%COMP%] {\n background: var(--mj-status-error-bg);\n color: var(--mj-color-error-600);\n border: 1px solid var(--mj-color-error-200);\n}\n\n.ve-btn-danger[_ngcontent-%COMP%]:hover { background: var(--mj-color-error-100); }\n\n.ve-error-msg[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n font-size: 0.8125rem;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n margin-left: 8px;\n}\n\n.ve-save-success[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-color-success-600);\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 4px;\n animation: _ngcontent-%COMP%_fadeIn 300ms ease;\n}\n\n\n\n.ve-sync-toggle[_ngcontent-%COMP%] { flex-shrink: 0; margin-left: 8px; }\n.ve-sync-label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-muted);\n flex-shrink: 0;\n}\n\n\n\n.ve-action-sep[_ngcontent-%COMP%] {\n width: 1px;\n height: 20px;\n background: var(--mj-border-default);\n flex-shrink: 0;\n}\n\n\n\n.ve-btn-ghost.active[_ngcontent-%COMP%] {\n background: var(--mj-color-indigo-50);\n color: var(--mj-color-indigo-600);\n border-color: var(--mj-color-indigo-200);\n}\n\n\n\n\n\n\n.ve-preview-strip[_ngcontent-%COMP%] {\n display: flex;\n gap: 1px;\n background: var(--mj-border-default);\n border-bottom: 1px solid var(--mj-border-default);\n max-height: 220px;\n flex-shrink: 0;\n overflow: hidden;\n}\n\n.ve-preview-panel[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-page);\n overflow: hidden;\n}\n\n.ve-preview-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 14px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n border-bottom: 1px solid var(--mj-border-subtle);\n flex-shrink: 0;\n}\n\n.ve-preview-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 11px; color: var(--mj-color-indigo-500); }\n.ve-preview-header[_ngcontent-%COMP%] span[_ngcontent-%COMP%] { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n\n.ve-preview-close[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n border: none;\n border-radius: 4px;\n background: transparent;\n color: var(--mj-text-disabled);\n cursor: pointer;\n font-size: 11px;\n flex-shrink: 0;\n}\n\n.ve-preview-close[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-active); color: var(--mj-text-secondary); }\n\n.ve-preview-loading[_ngcontent-%COMP%], \n.ve-preview-empty[_ngcontent-%COMP%] {\n padding: 20px;\n text-align: center;\n color: var(--mj-text-disabled);\n font-size: 12px;\n}\n\n.ve-preview-loading[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { margin-right: 6px; color: var(--mj-color-indigo-500); }\n\n.ve-preview-table-wrap[_ngcontent-%COMP%] {\n flex: 1;\n overflow: auto;\n}\n\n.ve-preview-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n font-size: 11px;\n}\n\n.ve-preview-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n position: sticky;\n top: 0;\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-muted);\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n font-size: 10px;\n padding: 5px 10px;\n text-align: left;\n white-space: nowrap;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.ve-preview-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 4px 10px;\n color: var(--mj-text-primary);\n border-bottom: 1px solid var(--mj-border-subtle);\n max-width: 180px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.ve-preview-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover td[_ngcontent-%COMP%] {\n background: var(--mj-color-indigo-50);\n}\n\n\n\n\n\n\n.ve-connect-banner[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 20px;\n background: var(--mj-color-indigo-50);\n color: var(--mj-color-indigo-700);\n font-size: 13px;\n border-bottom: 1px solid var(--mj-color-indigo-100);\n flex-shrink: 0;\n}\n\n.ve-connect-banner[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] { font-weight: 700; }\n\n.ve-connect-cancel[_ngcontent-%COMP%] {\n margin-left: auto;\n padding: 3px 10px;\n border: 1px solid var(--mj-color-indigo-100);\n border-radius: 5px;\n background: var(--mj-bg-surface);\n color: var(--mj-color-indigo-700);\n font-size: 12px;\n cursor: pointer;\n transition: all 150ms ease;\n}\n\n.ve-connect-cancel[_ngcontent-%COMP%]:hover { background: var(--mj-color-indigo-100); }\n\n\n\n\n\n\n.ve-body[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n overflow: hidden;\n}\n\n.ve-loading[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n width: 100%;\n gap: 12px;\n color: var(--mj-text-disabled);\n font-size: 14px;\n}\n\n.ve-loading[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 24px; color: var(--mj-color-indigo-500); }\n\n\n\n.ve-sections-wrapper[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n min-width: 0;\n}\n\n\n\n.ve-section[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.ve-section[_ngcontent-%COMP%]:not(.collapsed) {\n flex: 1;\n min-height: 0;\n}\n\n.ve-section.collapsed[_ngcontent-%COMP%] {\n flex-shrink: 0;\n}\n\n.ve-section-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 16px;\n cursor: pointer;\n user-select: none;\n background: var(--mj-bg-page);\n border-bottom: 1px solid var(--mj-border-subtle);\n flex-shrink: 0;\n transition: background 150ms ease;\n}\n\n.ve-section-header[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.ve-section-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-text-disabled);\n width: 12px;\n flex-shrink: 0;\n transition: transform 200ms ease;\n}\n\n.ve-section-title[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.4px;\n color: var(--mj-text-muted);\n}\n\n.ve-section-badge[_ngcontent-%COMP%] {\n font-size: 10px;\n font-weight: 600;\n background: var(--mj-color-indigo-50);\n color: var(--mj-color-indigo-600);\n padding: 1px 8px;\n border-radius: 4px;\n margin-left: auto;\n}\n\n.ve-section-body[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n min-height: 0;\n animation: _ngcontent-%COMP%_fadeIn 200ms ease;\n}\n\n\n\n.ve-canvas-wrapper[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n min-width: 0;\n}\n\n\n\n\n\n\n.ve-col-headers[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 200px 1fr;\n flex-shrink: 0;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.ve-col-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 16px;\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--mj-text-muted);\n}\n\n.ve-col-header.source[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-color-indigo-500); }\n.ve-col-header.dest[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-color-success-600); }\n.ve-col-header-spacer[_ngcontent-%COMP%] { \n }\n\n.ve-col-count[_ngcontent-%COMP%] {\n font-size: 10px;\n font-weight: 600;\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-disabled);\n padding: 1px 6px;\n border-radius: 4px;\n}\n\n\n\n\n\n\n.ve-col-searches[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 200px 1fr;\n flex-shrink: 0;\n border-bottom: 1px solid var(--mj-border-subtle);\n padding: 6px 0;\n}\n\n.ve-col-search[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 0 12px;\n}\n\n.ve-col-search[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-disabled);\n flex-shrink: 0;\n}\n\n.ve-col-search[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n flex: 1;\n height: 28px;\n padding: 0 8px;\n border: 1px solid var(--mj-border-default);\n border-radius: 5px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-page);\n outline: none;\n transition: border-color 150ms ease;\n}\n\n.ve-col-search[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:focus { border-color: var(--mj-color-indigo-500); background: var(--mj-bg-surface); }\n.ve-col-search[_ngcontent-%COMP%] input[_ngcontent-%COMP%]::placeholder { color: var(--mj-color-neutral-300); }\n.ve-col-search-spacer[_ngcontent-%COMP%] { \n }\n\n\n\n\n\n\n.ve-canvas-scroll[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n}\n\n.ve-canvas-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 200px 1fr;\n position: relative;\n}\n\n\n\n\n\n\n.ve-field-col[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n\n.ve-field-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 0 14px;\n font-size: 13px;\n cursor: pointer;\n transition: background 150ms ease, opacity 150ms ease;\n border-bottom: 1px solid var(--mj-bg-page);\n box-sizing: border-box;\n}\n\n.ve-field-item.mapped[_ngcontent-%COMP%] { background: var(--mj-bg-surface); }\n\n.ve-field-item.unmapped[_ngcontent-%COMP%] {\n opacity: 0.5;\n background: var(--mj-bg-page);\n}\n\n.ve-field-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-color-indigo-50);\n opacity: 1;\n}\n\n.ve-field-item.connecting[_ngcontent-%COMP%] {\n background: var(--mj-color-indigo-100);\n opacity: 1;\n box-shadow: inset 0 0 0 2px var(--mj-color-indigo-500);\n}\n\n.ve-field-item.connect-target[_ngcontent-%COMP%]:hover {\n background: var(--mj-color-success-100);\n box-shadow: inset 0 0 0 2px var(--mj-color-success-600);\n}\n\n.ve-field-name[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n color: var(--mj-text-secondary);\n font-weight: 500;\n}\n\n.ve-field-type[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-text-disabled);\n flex-shrink: 0;\n font-family: 'SF Mono', 'Fira Code', monospace;\n}\n\n.ve-field-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 3px;\n flex-shrink: 0;\n}\n\n.ve-fbadge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 18px;\n height: 18px;\n padding: 0 3px;\n border-radius: 4px;\n font-size: 9px;\n font-weight: 700;\n}\n\n.ve-fbadge.pk[_ngcontent-%COMP%] { background: var(--mj-color-warning-100); color: var(--mj-color-warning-700); }\n.ve-fbadge.req[_ngcontent-%COMP%] { background: var(--mj-color-error-100); color: var(--mj-color-error-600); }\n\n.ve-field-empty[_ngcontent-%COMP%] {\n padding: 32px 16px;\n text-align: center;\n color: var(--mj-text-disabled);\n font-size: 13px;\n}\n\n\n\n\n\n\n.ve-svg[_ngcontent-%COMP%] {\n display: block;\n}\n\n.ve-conn-line[_ngcontent-%COMP%] {\n fill: none;\n stroke-width: 2;\n cursor: pointer;\n transition: stroke 200ms ease, stroke-width 200ms ease;\n}\n\n\n\n.ve-conn-line.conn-direct[_ngcontent-%COMP%] { stroke: var(--mj-brand-primary); stroke-dasharray: none; }\n.ve-conn-line.conn-regex[_ngcontent-%COMP%] { stroke: var(--ve-color-regex, #8b5cf6); stroke-dasharray: 6 3; }\n.ve-conn-line.conn-split[_ngcontent-%COMP%] { stroke: var(--mj-status-warning); stroke-dasharray: 8 4; }\n.ve-conn-line.conn-combine[_ngcontent-%COMP%] { stroke: var(--mj-status-success); stroke-dasharray: 8 4; }\n.ve-conn-line.conn-lookup[_ngcontent-%COMP%] { stroke: var(--ve-color-lookup, #0ea5e9); stroke-dasharray: 4 4; }\n.ve-conn-line.conn-format[_ngcontent-%COMP%] { stroke: var(--ve-color-format, #ec4899); stroke-dasharray: 4 4; }\n.ve-conn-line.conn-coerce[_ngcontent-%COMP%] { stroke: var(--ve-color-coerce, #f97316); stroke-dasharray: 4 4; }\n.ve-conn-line.conn-substring[_ngcontent-%COMP%] { stroke: var(--ve-color-substring, #14b8a6); stroke-dasharray: 4 4; }\n.ve-conn-line.conn-custom[_ngcontent-%COMP%] { stroke: var(--ve-color-custom, #a855f7); stroke-dasharray: 2 3; }\n\n.ve-conn-line[_ngcontent-%COMP%]:hover { stroke-width: 3.5; }\n.ve-conn-line.selected[_ngcontent-%COMP%] { stroke-width: 3.5; filter: drop-shadow(0 0 4px rgba(99, 102, 241, 0.4)); }\n\n\n\n.ve-badge-fo[_ngcontent-%COMP%] { overflow: visible; }\n\n.ve-conn-badge[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 11px;\n cursor: pointer;\n transition: all 150ms ease;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12);\n}\n\n.ve-conn-badge.badge-direct[_ngcontent-%COMP%] { background: var(--mj-brand-primary-subtle); color: var(--mj-brand-primary); border: 2px solid var(--mj-brand-primary); }\n.ve-conn-badge.badge-regex[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--ve-color-regex, #8b5cf6) 10%, var(--mj-bg-surface)); color: var(--ve-color-regex, #8b5cf6); border: 2px solid var(--ve-color-regex, #8b5cf6); }\n.ve-conn-badge.badge-split[_ngcontent-%COMP%] { background: var(--mj-status-warning-subtle); color: var(--mj-status-warning); border: 2px solid var(--mj-status-warning); }\n.ve-conn-badge.badge-combine[_ngcontent-%COMP%] { background: var(--mj-status-success-subtle); color: var(--mj-status-success); border: 2px solid var(--mj-status-success); }\n.ve-conn-badge.badge-lookup[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--ve-color-lookup, #0ea5e9) 10%, var(--mj-bg-surface)); color: var(--ve-color-lookup, #0ea5e9); border: 2px solid var(--ve-color-lookup, #0ea5e9); }\n.ve-conn-badge.badge-format[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--ve-color-format, #ec4899) 10%, var(--mj-bg-surface)); color: var(--ve-color-format, #ec4899); border: 2px solid var(--ve-color-format, #ec4899); }\n.ve-conn-badge.badge-coerce[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--ve-color-coerce, #f97316) 10%, var(--mj-bg-surface)); color: var(--ve-color-coerce, #f97316); border: 2px solid var(--ve-color-coerce, #f97316); }\n.ve-conn-badge.badge-substring[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--ve-color-substring, #14b8a6) 10%, var(--mj-bg-surface)); color: var(--ve-color-substring, #14b8a6); border: 2px solid var(--ve-color-substring, #14b8a6); }\n.ve-conn-badge.badge-custom[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--ve-color-custom, #a855f7) 10%, var(--mj-bg-surface)); color: var(--ve-color-custom, #a855f7); border: 2px solid var(--ve-color-custom, #a855f7); }\n\n.ve-conn-badge[_ngcontent-%COMP%]:hover { transform: scale(1.2); }\n.ve-conn-badge.selected[_ngcontent-%COMP%] { transform: scale(1.25); box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.3); }\n\n\n\n\n\n\n.ve-transform-panel[_ngcontent-%COMP%] {\n width: 320px;\n flex-shrink: 0;\n border-left: 1px solid var(--mj-border-default);\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n background: var(--mj-bg-page);\n animation: _ngcontent-%COMP%_slideInRight 200ms ease;\n}\n\n@keyframes _ngcontent-%COMP%_slideInRight {\n from { opacity: 0; transform: translateX(20px); }\n to { opacity: 1; transform: translateX(0); }\n}\n\n.ve-tp-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 14px 16px;\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.ve-tp-title[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 700;\n color: var(--mj-text-primary);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.ve-tp-close[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n border: none;\n border-radius: 6px;\n background: transparent;\n color: var(--mj-text-disabled);\n cursor: pointer;\n font-size: 13px;\n transition: all 150ms ease;\n}\n\n.ve-tp-close[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-active); color: var(--mj-text-secondary); }\n\n\n\n.ve-tp-mapping-info[_ngcontent-%COMP%] {\n padding: 14px 16px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.ve-tp-field-pair[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n}\n\n.ve-tp-field[_ngcontent-%COMP%] {\n padding: 4px 10px;\n border-radius: 6px;\n font-weight: 600;\n font-size: 12px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 110px;\n}\n\n.ve-tp-field.source[_ngcontent-%COMP%] { background: var(--mj-color-indigo-50); color: var(--mj-color-indigo-700); }\n.ve-tp-field.dest[_ngcontent-%COMP%] { background: var(--mj-status-success-bg); color: var(--mj-color-success-700); }\n.ve-tp-arrow[_ngcontent-%COMP%] { color: var(--mj-text-disabled); font-size: 11px; flex-shrink: 0; }\n\n\n\n.ve-tp-toggles[_ngcontent-%COMP%] {\n display: flex;\n gap: 16px;\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.ve-tp-toggle[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n}\n\n.ve-tp-toggle-box[_ngcontent-%COMP%] {\n width: 18px;\n height: 18px;\n border: 2px solid var(--mj-color-neutral-300);\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 10px;\n color: var(--mj-bg-surface);\n transition: all 150ms ease;\n}\n\n.ve-tp-toggle-box.active[_ngcontent-%COMP%] {\n background: var(--mj-color-indigo-500);\n border-color: var(--mj-color-indigo-500);\n}\n\n\n\n.ve-tp-section[_ngcontent-%COMP%] {\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.ve-tp-section-label[_ngcontent-%COMP%] {\n display: block;\n font-size: 10px;\n font-weight: 700;\n color: var(--mj-text-disabled);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n margin-bottom: 8px;\n}\n\n.ve-tp-section-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n\n\n\n.ve-tp-direction-btns[_ngcontent-%COMP%] {\n display: flex;\n gap: 0;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.ve-tp-direction-btns[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n flex: 1;\n padding: 6px 8px;\n border: none;\n background: var(--mj-bg-surface);\n color: var(--mj-text-muted);\n font-size: 11px;\n font-weight: 500;\n cursor: pointer;\n transition: all 150ms ease;\n border-right: 1px solid var(--mj-border-default);\n}\n\n.ve-tp-direction-btns[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:last-child { border-right: none; }\n.ve-tp-direction-btns[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-hover); }\n.ve-tp-direction-btns[_ngcontent-%COMP%] button.active[_ngcontent-%COMP%] { background: var(--mj-color-indigo-500); color: var(--mj-bg-surface); }\n\n\n\n.ve-tp-add-step[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n border: 1px solid var(--mj-border-default);\n border-radius: 5px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-muted);\n font-size: 11px;\n cursor: pointer;\n transition: all 150ms ease;\n}\n\n.ve-tp-add-step[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); }\n\n.ve-tp-step[_ngcontent-%COMP%] {\n margin-top: 8px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n overflow: hidden;\n}\n\n.ve-tp-step-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 10px;\n background: var(--mj-bg-page);\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.ve-tp-step-num[_ngcontent-%COMP%] {\n width: 20px;\n height: 20px;\n border-radius: 50%;\n background: var(--mj-color-indigo-500);\n color: var(--mj-bg-surface);\n font-size: 10px;\n font-weight: 700;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.ve-tp-type-select[_ngcontent-%COMP%] {\n flex: 1;\n height: 28px;\n padding: 0 8px;\n border: 1px solid var(--mj-border-default);\n border-radius: 5px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface);\n outline: none;\n cursor: pointer;\n}\n\n.ve-tp-type-select[_ngcontent-%COMP%]:focus { border-color: var(--mj-color-indigo-500); }\n\n.ve-tp-remove-step[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n border: none;\n border-radius: 5px;\n background: transparent;\n color: var(--mj-text-disabled);\n cursor: pointer;\n font-size: 11px;\n transition: all 150ms ease;\n flex-shrink: 0;\n}\n\n.ve-tp-remove-step[_ngcontent-%COMP%]:hover { background: var(--mj-color-error-100); color: var(--mj-color-error-600); }\n\n.ve-tp-step-config[_ngcontent-%COMP%] {\n padding: 8px 10px;\n}\n\n.ve-tp-config-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 6px;\n}\n\n.ve-tp-config-row[_ngcontent-%COMP%]:last-child { margin-bottom: 0; }\n\n.ve-tp-config-row[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n width: 80px;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-muted);\n flex-shrink: 0;\n}\n\n.ve-tp-config-row[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n flex: 1;\n height: 28px;\n padding: 0 8px;\n border: 1px solid var(--mj-border-default);\n border-radius: 5px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-page);\n outline: none;\n font-family: 'SF Mono', 'Fira Code', monospace;\n}\n\n.ve-tp-config-row[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:focus { border-color: var(--mj-color-indigo-500); background: var(--mj-bg-surface); }\n\n.ve-tp-step-onerror[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 10px;\n border-top: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-page);\n}\n\n.ve-tp-step-onerror[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 10px;\n font-weight: 600;\n color: var(--mj-text-disabled);\n flex-shrink: 0;\n}\n\n.ve-tp-step-onerror[_ngcontent-%COMP%] select[_ngcontent-%COMP%] {\n height: 24px;\n padding: 0 6px;\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n font-size: 11px;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface);\n outline: none;\n cursor: pointer;\n}\n\n.ve-tp-no-steps[_ngcontent-%COMP%] {\n padding: 16px;\n text-align: center;\n color: var(--mj-text-disabled);\n font-size: 12px;\n font-style: italic;\n}\n\n\n\n.ve-tp-footer[_ngcontent-%COMP%] {\n padding: 14px 16px;\n margin-top: auto;\n flex-shrink: 0;\n}\n\n\n\n\n\n\n.cards-list[_ngcontent-%COMP%]::-webkit-scrollbar, \n.map-table-body[_ngcontent-%COMP%]::-webkit-scrollbar, \n.ve-canvas-scroll[_ngcontent-%COMP%]::-webkit-scrollbar, \n.ve-transform-panel[_ngcontent-%COMP%]::-webkit-scrollbar {\n width: 6px;\n height: 6px;\n}\n\n.cards-list[_ngcontent-%COMP%]::-webkit-scrollbar-track, \n.map-table-body[_ngcontent-%COMP%]::-webkit-scrollbar-track, \n.ve-canvas-scroll[_ngcontent-%COMP%]::-webkit-scrollbar-track, \n.ve-transform-panel[_ngcontent-%COMP%]::-webkit-scrollbar-track {\n background: transparent;\n}\n\n.cards-list[_ngcontent-%COMP%]::-webkit-scrollbar-thumb, \n.map-table-body[_ngcontent-%COMP%]::-webkit-scrollbar-thumb, \n.ve-canvas-scroll[_ngcontent-%COMP%]::-webkit-scrollbar-thumb, \n.ve-transform-panel[_ngcontent-%COMP%]::-webkit-scrollbar-thumb {\n background: var(--mj-color-neutral-300);\n border-radius: 3px;\n}\n\n.cards-list[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover, \n.map-table-body[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover, \n.ve-canvas-scroll[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover, \n.ve-transform-panel[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover {\n background: var(--mj-text-disabled);\n}\n\n\n\n\n\n\n.ve-info-body[_ngcontent-%COMP%] {\n padding: 16px;\n overflow-y: auto;\n}\n\n.ve-info-loading[_ngcontent-%COMP%] {\n text-align: center;\n color: var(--mj-text-disabled);\n font-size: 13px;\n padding: 20px;\n}\n\n.ve-info-loading[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-color-indigo-500);\n margin-right: 6px;\n}\n\n.ve-info-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));\n gap: 12px;\n margin-bottom: 16px;\n}\n\n.ve-info-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 14px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n}\n\n.ve-info-card-icon[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 14px;\n flex-shrink: 0;\n background: var(--mj-color-indigo-50);\n color: var(--mj-color-indigo-500);\n}\n\n.ve-info-card-icon.source[_ngcontent-%COMP%] {\n background: var(--mj-color-info-100);\n color: var(--mj-brand-primary);\n}\n\n.ve-info-card-icon.sync[_ngcontent-%COMP%] {\n background: var(--mj-color-success-100);\n color: var(--mj-color-success-600);\n}\n\n.ve-info-card-icon.info-status-success[_ngcontent-%COMP%] {\n background: var(--mj-color-success-100);\n color: var(--mj-color-success-600);\n}\n\n.ve-info-card-icon.info-status-error[_ngcontent-%COMP%] {\n background: var(--mj-color-error-100);\n color: var(--mj-color-error-600);\n}\n\n.ve-info-card-icon.info-status-running[_ngcontent-%COMP%] {\n background: var(--mj-color-info-100);\n color: var(--mj-brand-primary);\n}\n\n.ve-info-card-icon.info-status-pending[_ngcontent-%COMP%] {\n background: var(--mj-color-warning-100);\n color: var(--mj-color-warning-600);\n}\n\n.ve-info-card-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n}\n\n.ve-info-card-value[_ngcontent-%COMP%] {\n font-size: 16px;\n font-weight: 700;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.ve-info-card-label[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-disabled);\n font-weight: 500;\n}\n\n.ve-info-details[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n overflow: hidden;\n}\n\n.ve-info-detail-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 14px;\n font-size: 12px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.ve-info-detail-row[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.ve-info-detail-label[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n.ve-info-detail-value[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n font-weight: 600;\n}"] });
|
|
2107
2111
|
};
|
|
2108
2112
|
PipelinesComponent = __decorate([
|
|
2109
2113
|
RegisterClass(BaseResourceComponent, 'IntegrationPipelines')
|
|
@@ -2111,7 +2115,7 @@ PipelinesComponent = __decorate([
|
|
|
2111
2115
|
export { PipelinesComponent };
|
|
2112
2116
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PipelinesComponent, [{
|
|
2113
2117
|
type: Component,
|
|
2114
|
-
args: [{ standalone: false, selector: 'app-integration-pipelines', template: "<div class=\"pipelines-container\">\n\n <!-- ===================================================================== -->\n <!-- MAP LIST VIEW (hidden when editor is open) -->\n <!-- ===================================================================== -->\n @if (!VisualEditorOpen) {\n\n <!-- Toolbar -->\n <div class=\"pipelines-toolbar\">\n <div class=\"toolbar-left\">\n <h2 class=\"toolbar-title\">\n <i class=\"fa-solid fa-diagram-project\"></i>\n Pipelines\n </h2>\n <span class=\"toolbar-count-badge\">{{ IntegrationCount }}</span>\n <span class=\"toolbar-map-count\">{{ TotalMapCount }} entity maps</span>\n </div>\n <div class=\"toolbar-right\">\n <div class=\"global-search\">\n <i class=\"fa-solid fa-search search-icon\"></i>\n <input type=\"text\"\n class=\"search-input\"\n placeholder=\"Search integrations or entities...\"\n [value]=\"GlobalSearch\"\n (input)=\"OnGlobalSearchChange($event)\" />\n </div>\n <button class=\"toolbar-btn\" (click)=\"ExpandAll()\" title=\"Expand All\">\n <i class=\"fa-solid fa-angles-down\"></i>\n </button>\n <button class=\"toolbar-btn\" (click)=\"CollapseAll()\" title=\"Collapse All\">\n <i class=\"fa-solid fa-angles-up\"></i>\n </button>\n <div class=\"toolbar-divider\"></div>\n <button class=\"toolbar-btn\" (click)=\"LoadData()\" title=\"Refresh\">\n <i class=\"fa-solid fa-arrows-rotate\" [class.fa-spin]=\"IsLoading\"></i>\n </button>\n </div>\n </div>\n\n <!-- Main content area -->\n <div class=\"pipelines-content\">\n @if (IsLoading && PipelineCards.length === 0) {\n <div class=\"content-loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>Loading pipelines...</span>\n </div>\n } @else if (PipelineCards.length === 0) {\n <div class=\"content-empty\">\n <i class=\"fa-solid fa-diagram-project empty-icon\"></i>\n <h3>No Integration Pipelines</h3>\n <p>Configure integrations to see data flow pipelines here.</p>\n </div>\n } @else {\n <div class=\"cards-list\">\n @for (card of FilteredCards; track card.IntegrationID) {\n <!-- Pipeline card -->\n <div class=\"pipeline-card\" [class.expanded]=\"card.IsExpanded\">\n\n <!-- Card header (always visible) -->\n <div class=\"card-header\" (click)=\"ToggleCard(card)\">\n <div class=\"card-header-left\">\n <div class=\"card-status-dot\" [style.backgroundColor]=\"card.StatusColor\"></div>\n <i [class]=\"card.Icon + ' card-icon'\"></i>\n <div class=\"card-info\">\n <span class=\"card-name\">{{ card.IntegrationName }}</span>\n <span class=\"card-meta\">\n {{ card.EntityMapCount }} maps\n <span class=\"meta-sep\">·</span>\n {{ card.ActiveMapCount }} active\n <span class=\"meta-sep\">·</span>\n {{ card.UniqueEntityCount }} entities\n </span>\n </div>\n </div>\n <div class=\"card-header-right\">\n <span class=\"card-status-label\" [style.color]=\"card.StatusColor\">\n {{ card.StatusLabel }}\n </span>\n @if (card.LastSync) {\n <span class=\"card-last-sync\">{{ card.LastSync }}</span>\n }\n <!-- Mini flow indicator -->\n <div class=\"mini-flow\">\n <span class=\"mini-flow-dot source\"></span>\n <span class=\"mini-flow-line\"></span>\n <span class=\"mini-flow-count\">{{ card.EntityMapCount }}</span>\n <span class=\"mini-flow-line\"></span>\n <span class=\"mini-flow-dot dest\"></span>\n </div>\n <i class=\"fa-solid card-chevron\"\n [class.fa-chevron-down]=\"!card.IsExpanded\"\n [class.fa-chevron-up]=\"card.IsExpanded\"></i>\n </div>\n </div>\n\n <!-- Expanded entity map table -->\n @if (card.IsExpanded) {\n <div class=\"card-body\">\n <!-- Search within this integration -->\n <div class=\"card-search-bar\">\n <i class=\"fa-solid fa-filter card-search-icon\"></i>\n <input type=\"text\"\n class=\"card-search-input\"\n placeholder=\"Filter entity maps...\"\n [value]=\"card.SearchTerm\"\n (input)=\"OnCardSearch(card, $event)\" />\n <span class=\"card-search-count\">\n {{ card.FilteredMaps.length }} of {{ card.EntityMapCount }}\n </span>\n </div>\n\n <!-- Table header -->\n <div class=\"map-table-head\">\n <span class=\"map-col-toggle\">Sync</span>\n <span class=\"map-col-source\">External Object</span>\n <span class=\"map-col-direction\"></span>\n <span class=\"map-col-dest\">MJ Entity</span>\n <span class=\"map-col-meta\">Config</span>\n </div>\n\n <!-- Table body -->\n <div class=\"map-table-body\">\n @for (em of card.FilteredMaps; track em.ID) {\n <div class=\"map-row\"\n [class.sync-disabled]=\"!em.SyncEnabled\"\n (click)=\"OnMapRowClick(card, em)\">\n <span class=\"map-col-toggle\" (click)=\"$event.stopPropagation()\">\n <label class=\"sync-toggle\" [title]=\"em.SyncEnabled ? 'Sync enabled \u2014 click to disable' : 'Sync disabled \u2014 click to enable'\">\n <input type=\"checkbox\"\n [checked]=\"em.SyncEnabled\"\n (change)=\"OnToggleSyncEnabled(card, em, $event)\" />\n <span class=\"sync-toggle-track\"></span>\n </label>\n </span>\n <span class=\"map-col-source\" [title]=\"em.ExternalObjectName\">\n {{ em.ExternalObjectLabel ?? em.ExternalObjectName }}\n </span>\n <span class=\"map-col-direction\">\n <span [class]=\"DirectionBadgeClass(em.SyncDirection)\">\n {{ DirectionText(em.SyncDirection) }}\n </span>\n </span>\n <span class=\"map-col-dest\" [title]=\"em.Entity\">\n {{ em.Entity }}\n </span>\n <span class=\"map-col-meta\">\n @if (em.MatchStrategy) {\n <span class=\"map-config-badge\" [title]=\"'Match: ' + em.MatchStrategy\">\n <i class=\"fa-solid fa-link\"></i>\n </span>\n }\n <span class=\"map-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=\"map-table-empty\">\n No entity maps match your filter.\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n\n } @else {\n\n <!-- ===================================================================== -->\n <!-- VISUAL FIELD MAPPING EDITOR (inline, replaces map list) -->\n <!-- ===================================================================== -->\n\n <div class=\"ve-container\">\n\n <!-- Header -->\n <div class=\"ve-header\">\n <div class=\"ve-header-left\">\n <button class=\"ve-back-btn\" (click)=\"CloseVisualEditor()\" title=\"Back to Pipelines\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n </button>\n <div class=\"ve-header-title\">\n <span class=\"ve-source-label\">{{ EditorEntityMap?.ExternalObjectLabel ?? EditorEntityMap?.ExternalObjectName }}</span>\n <span class=\"ve-direction-arrow\">\n <i class=\"fa-solid fa-arrow-right-arrow-left\"></i>\n </span>\n <span class=\"ve-dest-label\">{{ EditorEntityMap?.Entity }}</span>\n </div>\n <!-- SyncEnabled toggle in editor header -->\n @if (EditorEntityMap) {\n <label class=\"sync-toggle ve-sync-toggle\"\n [title]=\"EditorEntityMap.SyncEnabled ? 'Sync enabled' : 'Sync disabled'\">\n <input type=\"checkbox\"\n [checked]=\"EditorEntityMap.SyncEnabled\"\n (change)=\"OnToggleEditorSyncEnabled($event)\" />\n <span class=\"sync-toggle-track\"></span>\n </label>\n <span class=\"ve-sync-label\">{{ EditorEntityMap.SyncEnabled ? 'Sync On' : 'Sync Off' }}</span>\n }\n </div>\n <div class=\"ve-header-stats\">\n <span class=\"ve-stat\">\n <strong>{{ EditorMappedCount }}</strong> mapped\n </span>\n <span class=\"ve-stat-sep\"></span>\n <span class=\"ve-stat\">\n <strong>{{ EditorKeyFieldCount }}</strong> key\n </span>\n <span class=\"ve-stat-sep\"></span>\n <span class=\"ve-stat\">\n <strong>{{ EditorRequiredCount }}</strong> required\n </span>\n </div>\n <div class=\"ve-header-actions\">\n <!-- Data preview buttons -->\n <button class=\"ve-btn ve-btn-ghost\"\n (click)=\"ToggleSourcePreview()\"\n [class.active]=\"ShowSourcePreview\"\n title=\"Preview source data\">\n <i class=\"fa-solid fa-cloud\"></i> Source Data\n </button>\n <button class=\"ve-btn ve-btn-ghost\"\n (click)=\"ToggleDestPreview()\"\n [class.active]=\"ShowDestPreview\"\n title=\"Preview MJ data\">\n <i class=\"fa-solid fa-database\"></i> MJ Data\n </button>\n <div class=\"ve-action-sep\"></div>\n <button class=\"ve-btn ve-btn-ghost\"\n [disabled]=\"IsRunningPipeline\"\n (click)=\"RunSchemaPipeline()\"\n title=\"Generate DDL, run CodeGen, and restart MJAPI for this mapping\">\n @if (IsRunningPipeline) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Running Pipeline...\n } @else {\n <i class=\"fa-solid fa-gears\"></i> Run Schema Pipeline\n }\n </button>\n @if (PipelineResultMessage) {\n <span [class]=\"PipelineResultSuccess ? 've-save-success' : 've-error-msg'\">\n <i [class]=\"PipelineResultSuccess ? 'fa-solid fa-circle-check' : 'fa-solid fa-circle-xmark'\"></i>\n {{ PipelineResultMessage }}\n </span>\n }\n <div class=\"ve-action-sep\"></div>\n <button class=\"ve-btn ve-btn-ghost\" (click)=\"AutoMapEditorFields()\" title=\"Auto-map fields by name\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i> Auto-Map\n </button>\n <button class=\"ve-btn ve-btn-primary\"\n [disabled]=\"!HasEditorChanges || EditorSaving\"\n (click)=\"SaveVisualEditor()\">\n @if (EditorSaving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Saving...\n } @else {\n <i class=\"fa-solid fa-check\"></i> Save\n }\n </button>\n @if (EditorSaveSuccess && !HasEditorChanges) {\n <span class=\"ve-save-success\">\n <i class=\"fa-solid fa-circle-check\"></i> Saved\n </span>\n }\n </div>\n </div>\n\n <!-- Data preview panels (collapsible) -->\n @if (ShowSourcePreview || ShowDestPreview) {\n <div class=\"ve-preview-strip\">\n @if (ShowSourcePreview) {\n <div class=\"ve-preview-panel\">\n <div class=\"ve-preview-header\">\n <i class=\"fa-solid fa-cloud\"></i>\n <span>Source Preview: {{ EditorEntityMap?.ExternalObjectLabel ?? EditorEntityMap?.ExternalObjectName }}</span>\n <button class=\"ve-preview-close\" (click)=\"ShowSourcePreview = false\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n @if (PreviewSourceLoading) {\n <div class=\"ve-preview-loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading...\n </div>\n } @else if (PreviewSourceRows.length === 0) {\n <div class=\"ve-preview-empty\">No source data available</div>\n } @else {\n <div class=\"ve-preview-table-wrap\">\n <table class=\"ve-preview-table\">\n <thead>\n <tr>\n @for (col of PreviewSourceColumns; track col) {\n <th>{{ col }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of PreviewSourceRows; track $index) {\n <tr>\n @for (col of PreviewSourceColumns; track col) {\n <td [title]=\"row[col]?.toString() ?? ''\">{{ row[col] ?? '' }}</td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n }\n @if (ShowDestPreview) {\n <div class=\"ve-preview-panel\">\n <div class=\"ve-preview-header\">\n <i class=\"fa-solid fa-database\"></i>\n <span>Dest Preview: {{ EditorEntityMap?.Entity }}</span>\n <button class=\"ve-preview-close\" (click)=\"ShowDestPreview = false\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n @if (PreviewDestLoading) {\n <div class=\"ve-preview-loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading...\n </div>\n } @else if (PreviewDestRows.length === 0) {\n <div class=\"ve-preview-empty\">No destination data available</div>\n } @else {\n <div class=\"ve-preview-table-wrap\">\n <table class=\"ve-preview-table\">\n <thead>\n <tr>\n @for (col of PreviewDestColumns; track col) {\n <th>{{ col }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of PreviewDestRows; track $index) {\n <tr>\n @for (col of PreviewDestColumns; track col) {\n <td [title]=\"row[col]?.toString() ?? ''\">{{ row[col] ?? '' }}</td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Connect mode banner -->\n @if (ConnectingFromSource) {\n <div class=\"ve-connect-banner\">\n <i class=\"fa-solid fa-link\"></i>\n Click a destination field to map from\n <strong>{{ ConnectingFromSource }}</strong>\n <button class=\"ve-connect-cancel\" (click)=\"CancelConnect()\">Cancel</button>\n </div>\n }\n\n <!-- Main content: sections + transform panel -->\n <div class=\"ve-body\" [class.has-transform-panel]=\"SelectedConnectionIdx !== null\">\n\n <!-- Loading state -->\n @if (EditorLoading) {\n <div class=\"ve-loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>Loading field mappings...</span>\n </div>\n } @else {\n\n <!-- Left content area (sections stacked vertically) -->\n <div class=\"ve-sections-wrapper\">\n\n <!-- ============================================================= -->\n <!-- FIELD MAPPINGS SECTION (collapsible) -->\n <!-- ============================================================= -->\n <div class=\"ve-section\" [class.collapsed]=\"!FieldMapsExpanded\">\n <div class=\"ve-section-header\" (click)=\"ToggleFieldMaps()\">\n <i class=\"fa-solid\"\n [class.fa-chevron-down]=\"FieldMapsExpanded\"\n [class.fa-chevron-right]=\"!FieldMapsExpanded\"></i>\n <span class=\"ve-section-title\">Field Mappings</span>\n <span class=\"ve-section-badge\">{{ EditorMappedCount }} mapped</span>\n </div>\n\n @if (FieldMapsExpanded) {\n <div class=\"ve-section-body\">\n <!-- Canvas area (scrollable) -->\n <div class=\"ve-canvas-wrapper\">\n\n <!-- Column headers -->\n <div class=\"ve-col-headers\">\n <div class=\"ve-col-header source\">\n <i class=\"fa-solid fa-cloud\"></i>\n Source Fields\n <span class=\"ve-col-count\">{{ EditorSourceFields.length }}</span>\n </div>\n <div class=\"ve-col-header-spacer\"></div>\n <div class=\"ve-col-header dest\">\n <i class=\"fa-solid fa-database\"></i>\n MJ Entity Fields\n <span class=\"ve-col-count\">{{ EditorDestFields.length }}</span>\n </div>\n </div>\n\n <!-- Search bars -->\n <div class=\"ve-col-searches\">\n <div class=\"ve-col-search\">\n <i class=\"fa-solid fa-search\"></i>\n <input type=\"text\"\n placeholder=\"Filter source fields...\"\n [value]=\"EditorSearchSource\"\n (input)=\"EditorSearchSource = $any($event.target).value\" />\n </div>\n <div class=\"ve-col-search-spacer\"></div>\n <div class=\"ve-col-search\">\n <i class=\"fa-solid fa-search\"></i>\n <input type=\"text\"\n placeholder=\"Filter destination fields...\"\n [value]=\"EditorSearchDest\"\n (input)=\"EditorSearchDest = $any($event.target).value\" />\n </div>\n </div>\n\n <!-- Canvas grid (source + SVG + dest) -->\n <div class=\"ve-canvas-scroll\" (click)=\"DeselectConnection()\">\n <div class=\"ve-canvas-grid\" [style.min-height.px]=\"EditorCanvasHeight\">\n\n <!-- Source column -->\n <div class=\"ve-field-col source\">\n @for (sf of FilteredEditorSourceFields; track sf.Name) {\n <div class=\"ve-field-item\"\n [class.mapped]=\"IsSourceFieldMapped(sf.Name)\"\n [class.unmapped]=\"!IsSourceFieldMapped(sf.Name)\"\n [class.connecting]=\"ConnectingFromSource === sf.Name\"\n [style.height.px]=\"FIELD_HEIGHT\"\n (click)=\"OnEditorSourceClick(sf.Name); $event.stopPropagation()\">\n <span class=\"ve-field-name\" [title]=\"sf.Name\">{{ sf.Label || sf.Name }}</span>\n <span class=\"ve-field-type\">{{ sf.Type }}</span>\n <span class=\"ve-field-badges\">\n @if (sf.IsPrimaryKey) {\n <span class=\"ve-fbadge pk\" title=\"Primary Key\">PK</span>\n }\n @if (sf.IsRequired) {\n <span class=\"ve-fbadge req\" title=\"Required\">*</span>\n }\n </span>\n </div>\n }\n @if (FilteredEditorSourceFields.length === 0) {\n <div class=\"ve-field-empty\">No source fields found</div>\n }\n </div>\n\n <!-- SVG connection lines -->\n <svg class=\"ve-svg\"\n [attr.width]=\"SVG_WIDTH\"\n [attr.height]=\"EditorCanvasHeight\"\n [attr.viewBox]=\"'0 0 ' + SVG_WIDTH + ' ' + EditorCanvasHeight\"\n (click)=\"$event.stopPropagation()\">\n @for (conn of VisibleConnections; track conn.SourceFieldName + '-' + conn.DestFieldName; let i = $index) {\n <!-- Connection line -->\n <path [attr.d]=\"GetConnectionPath(conn)\"\n class=\"ve-conn-line\"\n [class]=\"'ve-conn-line ' + GetConnectionLineClass(conn)\"\n [class.selected]=\"SelectedConnectionIdx === i\"\n (click)=\"SelectConnection(i, $event)\" />\n <!-- Transform badge at midpoint -->\n <foreignObject\n [attr.x]=\"SVG_WIDTH / 2 - 14\"\n [attr.y]=\"GetConnectionMidY(conn) - 14\"\n width=\"28\" height=\"28\"\n class=\"ve-badge-fo\">\n <div xmlns=\"http://www.w3.org/1999/xhtml\"\n class=\"ve-conn-badge\"\n [class]=\"'ve-conn-badge ' + GetConnectionBadgeClass(conn)\"\n [class.selected]=\"SelectedConnectionIdx === i\"\n (click)=\"SelectConnection(i, $event)\">\n <i [class]=\"GetConnectionDirectionIcon(conn)\"></i>\n </div>\n </foreignObject>\n }\n </svg>\n\n <!-- Dest column -->\n <div class=\"ve-field-col dest\">\n @for (df of FilteredEditorDestFields; track df.Name) {\n <div class=\"ve-field-item\"\n [class.mapped]=\"IsDestFieldMapped(df.Name)\"\n [class.unmapped]=\"!IsDestFieldMapped(df.Name)\"\n [class.connect-target]=\"ConnectingFromSource !== null\"\n [style.height.px]=\"FIELD_HEIGHT\"\n (click)=\"OnEditorDestClick(df.Name); $event.stopPropagation()\">\n <span class=\"ve-field-name\" [title]=\"df.Name\">{{ df.Name }}</span>\n <span class=\"ve-field-type\">{{ df.Type }}</span>\n <span class=\"ve-field-badges\">\n @if (df.IsRequired) {\n <span class=\"ve-fbadge req\" title=\"Required\">*</span>\n }\n </span>\n </div>\n }\n @if (FilteredEditorDestFields.length === 0) {\n <div class=\"ve-field-empty\">No destination fields found</div>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n\n <!-- ============================================================= -->\n <!-- INFO PANEL SECTION (collapsible) -->\n <!-- ============================================================= -->\n <div class=\"ve-section\" [class.collapsed]=\"!InfoPanelExpanded\">\n <div class=\"ve-section-header\" (click)=\"ToggleInfoPanel()\">\n <i class=\"fa-solid\"\n [class.fa-chevron-down]=\"InfoPanelExpanded\"\n [class.fa-chevron-right]=\"!InfoPanelExpanded\"></i>\n <span class=\"ve-section-title\">Sync Info</span>\n </div>\n\n @if (InfoPanelExpanded) {\n <div class=\"ve-section-body ve-info-body\">\n @if (InfoPanelLoading) {\n <div class=\"ve-info-loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading stats...\n </div>\n } @else {\n <div class=\"ve-info-grid\">\n <!-- Destination record count -->\n <div class=\"ve-info-card\">\n <div class=\"ve-info-card-icon\">\n <i class=\"fa-solid fa-database\"></i>\n </div>\n <div class=\"ve-info-card-content\">\n <span class=\"ve-info-card-value\">{{ InfoDestRecordCount ?? '-' }}</span>\n <span class=\"ve-info-card-label\">MJ Records</span>\n </div>\n </div>\n <!-- Source fields count -->\n <div class=\"ve-info-card\">\n <div class=\"ve-info-card-icon source\">\n <i class=\"fa-solid fa-cloud\"></i>\n </div>\n <div class=\"ve-info-card-content\">\n <span class=\"ve-info-card-value\">{{ EditorSourceFields.length }}</span>\n <span class=\"ve-info-card-label\">Source Fields</span>\n </div>\n </div>\n <!-- Last sync -->\n <div class=\"ve-info-card\">\n <div class=\"ve-info-card-icon sync\">\n <i class=\"fa-solid fa-arrows-rotate\"></i>\n </div>\n <div class=\"ve-info-card-content\">\n <span class=\"ve-info-card-value\">{{ FormatSyncDate(InfoLastSync?.StartedAt ?? null) }}</span>\n <span class=\"ve-info-card-label\">Last Sync</span>\n </div>\n </div>\n <!-- Sync status -->\n @if (InfoLastSync) {\n <div class=\"ve-info-card\">\n <div class=\"ve-info-card-icon\" [ngClass]=\"SyncStatusClass(InfoLastSync.Status)\">\n <i class=\"fa-solid\"\n [class.fa-circle-check]=\"InfoLastSync.Status === 'Success'\"\n [class.fa-circle-xmark]=\"InfoLastSync.Status === 'Failed'\"\n [class.fa-spinner]=\"InfoLastSync.Status === 'In Progress'\"\n [class.fa-clock]=\"InfoLastSync.Status === 'Pending'\"></i>\n </div>\n <div class=\"ve-info-card-content\">\n <span class=\"ve-info-card-value\">{{ InfoLastSync.Status }}</span>\n <span class=\"ve-info-card-label\">{{ InfoLastSync.TotalRecords }} records processed</span>\n </div>\n </div>\n }\n </div>\n\n <!-- Configuration details -->\n <div class=\"ve-info-details\">\n <div class=\"ve-info-detail-row\">\n <span class=\"ve-info-detail-label\">Sync Direction</span>\n <span class=\"ve-info-detail-value\">{{ EditorEntityMap?.SyncDirection }}</span>\n </div>\n <div class=\"ve-info-detail-row\">\n <span class=\"ve-info-detail-label\">Conflict Resolution</span>\n <span class=\"ve-info-detail-value\">{{ EditorEntityMap?.ConflictResolution }}</span>\n </div>\n <div class=\"ve-info-detail-row\">\n <span class=\"ve-info-detail-label\">Delete Behavior</span>\n <span class=\"ve-info-detail-value\">{{ EditorEntityMap?.DeleteBehavior }}</span>\n </div>\n <div class=\"ve-info-detail-row\">\n <span class=\"ve-info-detail-label\">Priority</span>\n <span class=\"ve-info-detail-value\">{{ EditorEntityMap?.Priority }}</span>\n </div>\n @if (EditorEntityMap?.MatchStrategy) {\n <div class=\"ve-info-detail-row\">\n <span class=\"ve-info-detail-label\">Match Strategy</span>\n <span class=\"ve-info-detail-value\">Configured</span>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Transform editor panel (right side, appears when connection selected) -->\n @if (SelectedConnection; as conn) {\n <div class=\"ve-transform-panel\" (click)=\"$event.stopPropagation()\">\n <div class=\"ve-tp-header\">\n <span class=\"ve-tp-title\">Mapping Details</span>\n <button class=\"ve-tp-close\" (click)=\"DeselectConnection()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n\n <!-- Source \u2192 Dest -->\n <div class=\"ve-tp-mapping-info\">\n <div class=\"ve-tp-field-pair\">\n <span class=\"ve-tp-field source\">{{ conn.SourceFieldName }}</span>\n <i class=\"fa-solid ve-tp-arrow\"\n [class.fa-arrow-right]=\"conn.Direction === 'SourceToDest'\"\n [class.fa-arrow-left]=\"conn.Direction === 'DestToSource'\"\n [class.fa-right-left]=\"conn.Direction === 'Both'\"></i>\n <span class=\"ve-tp-field dest\">{{ conn.DestFieldName }}</span>\n </div>\n </div>\n\n <!-- Toggles -->\n <div class=\"ve-tp-toggles\">\n <label class=\"ve-tp-toggle\" (click)=\"ToggleConnectionKey()\">\n <span class=\"ve-tp-toggle-box\" [class.active]=\"conn.IsKeyField\">\n @if (conn.IsKeyField) { <i class=\"fa-solid fa-check\"></i> }\n </span>\n <span>Key Field</span>\n </label>\n <label class=\"ve-tp-toggle\" (click)=\"ToggleConnectionRequired()\">\n <span class=\"ve-tp-toggle-box\" [class.active]=\"conn.IsRequired\">\n @if (conn.IsRequired) { <i class=\"fa-solid fa-check\"></i> }\n </span>\n <span>Required</span>\n </label>\n </div>\n\n <!-- Direction -->\n <div class=\"ve-tp-section\">\n <label class=\"ve-tp-section-label\">Direction</label>\n <div class=\"ve-tp-direction-btns\">\n <button [class.active]=\"conn.Direction === 'SourceToDest'\"\n (click)=\"OnConnectionDirectionChange('SourceToDest')\">\n Source → Dest\n </button>\n <button [class.active]=\"conn.Direction === 'DestToSource'\"\n (click)=\"OnConnectionDirectionChange('DestToSource')\">\n Dest → Source\n </button>\n <button [class.active]=\"conn.Direction === 'Both'\"\n (click)=\"OnConnectionDirectionChange('Both')\">\n Both\n </button>\n </div>\n </div>\n\n <!-- Transform pipeline -->\n <div class=\"ve-tp-section\">\n <div class=\"ve-tp-section-header\">\n <label class=\"ve-tp-section-label\">Transform Pipeline</label>\n <button class=\"ve-tp-add-step\" (click)=\"AddTransformStep()\">\n <i class=\"fa-solid fa-plus\"></i> Add Step\n </button>\n </div>\n\n @for (step of conn.TransformSteps; track $index; let si = $index) {\n <div class=\"ve-tp-step\">\n <div class=\"ve-tp-step-header\">\n <span class=\"ve-tp-step-num\">{{ si + 1 }}</span>\n <select class=\"ve-tp-type-select\"\n [value]=\"step.Type\"\n (change)=\"OnConnectionTransformChange(si, $any($event.target).value)\">\n @for (tt of TRANSFORM_TYPES; track tt.Value) {\n <option [value]=\"tt.Value\" [selected]=\"tt.Value === step.Type\">{{ tt.Label }}</option>\n }\n </select>\n <button class=\"ve-tp-remove-step\" (click)=\"RemoveTransformStep(si)\" title=\"Remove step\">\n <i class=\"fa-solid fa-trash-can\"></i>\n </button>\n </div>\n\n <!-- Config fields based on transform type -->\n @if (step.Type !== 'direct') {\n <div class=\"ve-tp-step-config\">\n @for (key of GetConfigKeys(step); track key) {\n <div class=\"ve-tp-config-row\">\n <label>{{ key }}</label>\n <input type=\"text\"\n [value]=\"GetConfigValue(step, key)\"\n (input)=\"OnTransformConfigChange(conn, si, key, $any($event.target).value)\"\n placeholder=\"{{ key }}\" />\n </div>\n }\n </div>\n }\n\n <!-- On error -->\n <div class=\"ve-tp-step-onerror\">\n <label>On Error:</label>\n <select [value]=\"step.OnError\"\n (change)=\"step.OnError = $any($event.target).value; conn.IsDirty = true\">\n <option value=\"Fail\">Fail</option>\n <option value=\"Skip\">Skip</option>\n <option value=\"Null\">Null</option>\n </select>\n </div>\n </div>\n }\n\n @if (conn.TransformSteps.length === 0) {\n <div class=\"ve-tp-no-steps\">\n No transform steps. Data passes through as-is.\n </div>\n }\n </div>\n\n <!-- Delete mapping button -->\n <div class=\"ve-tp-footer\">\n <button class=\"ve-btn ve-btn-danger\" (click)=\"RemoveSelectedConnection()\">\n <i class=\"fa-solid fa-trash-can\"></i> Remove Mapping\n </button>\n </div>\n </div>\n }\n }\n </div>\n </div>\n }\n</div>\n", styles: ["/* =========================================================================\n Integration Pipelines - Card Layout + Visual Editor\n ========================================================================= */\n\n:host {\n display: flex;\n flex-direction: column;\n height: 100%;\n overflow: hidden;\n}\n\n/* ---------------------------------------------------------------------------\n Container\n --------------------------------------------------------------------------- */\n\n.pipelines-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--mj-bg-page);\n position: relative;\n overflow: hidden;\n}\n\n/* ---------------------------------------------------------------------------\n Toolbar\n --------------------------------------------------------------------------- */\n\n.pipelines-toolbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 20px;\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n z-index: 10;\n}\n\n.toolbar-left {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.toolbar-title {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.toolbar-title i { color: var(--mj-color-indigo-500); }\n\n.toolbar-count-badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 22px;\n height: 22px;\n padding: 0 6px;\n border-radius: 11px;\n background: var(--mj-color-indigo-500);\n color: var(--mj-bg-surface);\n font-size: 11px;\n font-weight: 600;\n}\n\n.toolbar-map-count {\n font-size: 12px;\n color: var(--mj-text-disabled);\n font-weight: 500;\n}\n\n.toolbar-right {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.global-search {\n position: relative;\n display: flex;\n align-items: center;\n}\n\n.search-icon {\n position: absolute;\n left: 10px;\n font-size: 12px;\n color: var(--mj-text-disabled);\n pointer-events: none;\n}\n\n.search-input {\n width: 240px;\n height: 32px;\n padding: 0 12px 0 30px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-page);\n outline: none;\n transition: border-color 150ms ease, background 150ms ease;\n}\n\n.search-input:focus {\n border-color: var(--mj-color-indigo-500);\n background: var(--mj-bg-surface);\n}\n\n.search-input::placeholder { color: var(--mj-color-neutral-300); }\n\n.toolbar-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 150ms ease;\n font-size: 13px;\n}\n\n.toolbar-btn:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-color-neutral-300);\n color: var(--mj-text-primary);\n}\n\n.toolbar-btn:active { background: var(--mj-bg-surface-active); }\n\n.toolbar-divider {\n width: 1px;\n height: 20px;\n background: var(--mj-border-default);\n margin: 0 4px;\n}\n\n/* ---------------------------------------------------------------------------\n Content area\n --------------------------------------------------------------------------- */\n\n.pipelines-content {\n flex: 1;\n display: flex;\n flex-direction: column;\n position: relative;\n overflow: hidden;\n min-height: 0;\n}\n\n.content-loading,\n.content-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n gap: 12px;\n color: var(--mj-text-disabled);\n}\n\n.content-loading i { font-size: 28px; color: var(--mj-color-indigo-500); }\n.content-loading span { font-size: 14px; }\n.content-empty .empty-icon { font-size: 48px; color: var(--mj-color-neutral-300); }\n.content-empty h3 { margin: 0; font-size: 18px; font-weight: 600; color: var(--mj-text-muted); }\n.content-empty p { margin: 0; font-size: 13px; color: var(--mj-text-disabled); }\n\n/* ---------------------------------------------------------------------------\n Cards list\n --------------------------------------------------------------------------- */\n\n.cards-list {\n flex: 1;\n overflow-y: auto;\n padding: 16px 20px;\n display: flex;\n flex-direction: column;\n gap: 12px;\n max-width: 1200px;\n margin: 0 auto;\n width: 100%;\n box-sizing: border-box;\n min-height: 0;\n}\n\n/* ---------------------------------------------------------------------------\n Pipeline card\n --------------------------------------------------------------------------- */\n\n.pipeline-card {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n overflow: hidden;\n transition: box-shadow 200ms ease, border-color 200ms ease;\n}\n\n.pipeline-card:hover { box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06); }\n\n.pipeline-card.expanded {\n border-color: var(--mj-color-indigo-100);\n box-shadow: 0 2px 12px rgba(99, 102, 241, 0.08);\n}\n\n/* Card header */\n.card-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 14px 18px;\n cursor: pointer;\n user-select: none;\n transition: background 150ms ease;\n}\n\n.card-header:hover { background: var(--mj-bg-page); }\n\n.card-header-left {\n display: flex;\n align-items: center;\n gap: 12px;\n min-width: 0;\n flex: 1;\n}\n\n.card-status-dot { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; }\n\n.card-icon {\n font-size: 18px;\n color: var(--mj-brand-primary);\n flex-shrink: 0;\n width: 24px;\n text-align: center;\n}\n\n.card-info { display: flex; flex-direction: column; gap: 2px; min-width: 0; }\n\n.card-name {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.card-meta { font-size: 12px; color: var(--mj-text-disabled); }\n.meta-sep { color: var(--mj-color-neutral-300); margin: 0 2px; }\n\n.card-header-right {\n display: flex;\n align-items: center;\n gap: 14px;\n flex-shrink: 0;\n}\n\n.card-status-label { font-size: 12px; font-weight: 600; }\n.card-last-sync { font-size: 11px; color: var(--mj-text-disabled); }\n\n/* Mini flow indicator */\n.mini-flow { display: flex; align-items: center; gap: 4px; }\n.mini-flow-dot { width: 8px; height: 8px; border-radius: 50%; }\n.mini-flow-dot.source { background: var(--mj-brand-primary); }\n.mini-flow-dot.dest { background: var(--mj-color-success-600); }\n.mini-flow-line { width: 16px; height: 2px; background: var(--mj-border-default); border-radius: 1px; }\n.mini-flow-count {\n font-size: 10px; font-weight: 700; color: var(--mj-color-indigo-500);\n background: var(--mj-color-indigo-50); padding: 1px 5px; border-radius: 4px;\n}\n\n.card-chevron { font-size: 12px; color: var(--mj-text-disabled); transition: transform 200ms ease; }\n\n/* ---------------------------------------------------------------------------\n Card body (expanded entity maps)\n --------------------------------------------------------------------------- */\n\n.card-body {\n border-top: 1px solid var(--mj-border-subtle);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n min-height: 0;\n /* When card is expanded, card-body takes remaining space in the cards-list scroll area.\n Limit to ~60vh so the table body scrolls internally while headers stay pinned. */\n max-height: 60vh;\n}\n\n/* Search bar within card */\n.card-search-bar {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 18px;\n border-bottom: 1px solid var(--mj-border-subtle);\n flex-shrink: 0;\n}\n\n.card-search-icon { font-size: 11px; color: var(--mj-text-disabled); flex-shrink: 0; }\n\n.card-search-input {\n flex: 1;\n height: 28px;\n padding: 0 8px;\n border: 1px solid var(--mj-border-default);\n border-radius: 5px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-page);\n outline: none;\n transition: border-color 150ms ease;\n}\n\n.card-search-input:focus { border-color: var(--mj-color-indigo-500); background: var(--mj-bg-surface); }\n.card-search-input::placeholder { color: var(--mj-color-neutral-300); }\n.card-search-count { font-size: 11px; color: var(--mj-text-disabled); white-space: nowrap; flex-shrink: 0; }\n\n/* Map table header */\n.map-table-head {\n display: flex;\n align-items: center;\n padding: 6px 18px;\n font-size: 10px;\n font-weight: 600;\n color: var(--mj-text-disabled);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-page);\n flex-shrink: 0;\n}\n\n/* Map table body \u2014 scrolls within the constrained card-body */\n.map-table-body {\n flex: 1;\n overflow-y: auto;\n min-height: 0;\n}\n\n.map-table-empty {\n padding: 24px 18px;\n text-align: center;\n color: var(--mj-text-disabled);\n font-size: 13px;\n}\n\n/* Map table columns */\n/* map-col-toggle width is set in the sync toggle section above */\n.map-col-source { flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n.map-col-direction { width: 52px; flex-shrink: 0; display: flex; align-items: center; justify-content: center; }\n.map-col-dest { flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n.map-col-meta { width: 80px; flex-shrink: 0; display: flex; align-items: center; justify-content: flex-end; gap: 4px; }\n\n/* Map row */\n.map-row {\n display: flex;\n align-items: center;\n padding: 8px 18px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: background 150ms ease;\n border-bottom: 1px solid var(--mj-bg-page);\n}\n\n.map-row:hover { background: var(--mj-color-indigo-50); }\n.map-row.sync-disabled { opacity: 0.55; }\n.map-row.sync-disabled:hover { opacity: 0.8; }\n\n/* map-status-dot removed \u2014 replaced by sync-toggle */\n\n.map-config-badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n border-radius: 4px;\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-disabled);\n font-size: 10px;\n}\n\n.map-edit-hint {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n border-radius: 4px;\n color: var(--mj-color-neutral-300);\n font-size: 11px;\n transition: color 150ms ease;\n}\n\n.map-row:hover .map-edit-hint { color: var(--mj-color-indigo-500); }\n\n/* ---------------------------------------------------------------------------\n Sync toggle column\n --------------------------------------------------------------------------- */\n\n.map-col-toggle {\n width: 50px;\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.sync-toggle {\n position: relative;\n display: inline-flex;\n align-items: center;\n cursor: pointer;\n}\n\n.sync-toggle input {\n position: absolute;\n opacity: 0;\n width: 0;\n height: 0;\n}\n\n.sync-toggle-track {\n width: 30px;\n height: 16px;\n border-radius: 8px;\n background: var(--mj-color-neutral-300);\n position: relative;\n transition: background 200ms ease;\n}\n\n.sync-toggle-track::after {\n content: '';\n position: absolute;\n top: 2px;\n left: 2px;\n width: 12px;\n height: 12px;\n border-radius: 50%;\n background: var(--mj-bg-surface);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15);\n transition: transform 200ms ease;\n}\n\n.sync-toggle input:checked + .sync-toggle-track {\n background: var(--mj-color-success-600);\n}\n\n.sync-toggle input:checked + .sync-toggle-track::after {\n transform: translateX(14px);\n}\n\n/* ---------------------------------------------------------------------------\n Direction Badges\n --------------------------------------------------------------------------- */\n\n.direction-badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 36px;\n height: 20px;\n padding: 0 6px;\n border-radius: 4px;\n font-size: 10px;\n font-weight: 700;\n line-height: 1;\n flex-shrink: 0;\n}\n\n.direction-badge.pull { background: var(--mj-color-info-100); color: var(--mj-brand-primary); }\n.direction-badge.push { background: var(--mj-color-success-100); color: var(--mj-color-success-600); }\n.direction-badge.bidirectional { background: var(--mj-color-warning-100); color: var(--mj-color-warning-600); }\n\n/* =========================================================================\n VISUAL EDITOR (inline panel, replaces map list)\n ========================================================================= */\n\n.ve-container {\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow: hidden;\n background: var(--mj-bg-surface);\n animation: slideIn 250ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n@keyframes slideIn {\n from { opacity: 0; transform: translateX(30px); }\n to { opacity: 1; transform: translateX(0); }\n}\n\n@keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n/* ---------------------------------------------------------------------------\n VE Header\n --------------------------------------------------------------------------- */\n\n.ve-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 14px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n gap: 16px;\n}\n\n.ve-header-left {\n display: flex;\n align-items: center;\n gap: 12px;\n min-width: 0;\n}\n\n.ve-back-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-muted);\n cursor: pointer;\n font-size: 14px;\n flex-shrink: 0;\n transition: all 150ms ease;\n}\n\n.ve-back-btn:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); }\n\n.ve-header-title {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 15px;\n font-weight: 600;\n min-width: 0;\n}\n\n.ve-source-label {\n color: var(--mj-color-indigo-500);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 200px;\n}\n\n.ve-direction-arrow { color: var(--mj-text-disabled); font-size: 13px; flex-shrink: 0; }\n\n.ve-dest-label {\n color: var(--mj-color-success-600);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 200px;\n}\n\n.ve-header-stats {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-shrink: 0;\n}\n\n.ve-stat {\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n.ve-stat strong {\n color: var(--mj-text-primary);\n font-weight: 700;\n}\n\n.ve-stat-sep {\n width: 1px;\n height: 14px;\n background: var(--mj-border-default);\n}\n\n.ve-header-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-shrink: 0;\n}\n\n.ve-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 7px 14px;\n border-radius: 7px;\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 150ms ease;\n border: none;\n white-space: nowrap;\n}\n\n.ve-btn-ghost {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-default);\n}\n\n.ve-btn-ghost:hover { background: var(--mj-bg-surface-active); color: var(--mj-text-primary); }\n\n.ve-btn-primary {\n background: var(--mj-color-indigo-500);\n color: var(--mj-bg-surface);\n}\n\n.ve-btn-primary:hover { background: var(--mj-color-indigo-600); }\n.ve-btn-primary:disabled { opacity: 0.5; cursor: default; }\n\n.ve-btn-danger {\n background: var(--mj-status-error-bg);\n color: var(--mj-color-error-600);\n border: 1px solid var(--mj-color-error-200);\n}\n\n.ve-btn-danger:hover { background: var(--mj-color-error-100); }\n\n.ve-error-msg {\n color: var(--mj-status-error);\n font-size: 0.8125rem;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n margin-left: 8px;\n}\n\n.ve-save-success {\n font-size: 12px;\n color: var(--mj-color-success-600);\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 4px;\n animation: fadeIn 300ms ease;\n}\n\n/* Sync toggle in editor header */\n.ve-sync-toggle { flex-shrink: 0; margin-left: 8px; }\n.ve-sync-label {\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-muted);\n flex-shrink: 0;\n}\n\n/* Action separator */\n.ve-action-sep {\n width: 1px;\n height: 20px;\n background: var(--mj-border-default);\n flex-shrink: 0;\n}\n\n/* Active state for preview toggle buttons */\n.ve-btn-ghost.active {\n background: var(--mj-color-indigo-50);\n color: var(--mj-color-indigo-600);\n border-color: var(--mj-color-indigo-200);\n}\n\n/* ---------------------------------------------------------------------------\n Data Preview Strip\n --------------------------------------------------------------------------- */\n\n.ve-preview-strip {\n display: flex;\n gap: 1px;\n background: var(--mj-border-default);\n border-bottom: 1px solid var(--mj-border-default);\n max-height: 220px;\n flex-shrink: 0;\n overflow: hidden;\n}\n\n.ve-preview-panel {\n flex: 1;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-page);\n overflow: hidden;\n}\n\n.ve-preview-header {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 14px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n border-bottom: 1px solid var(--mj-border-subtle);\n flex-shrink: 0;\n}\n\n.ve-preview-header i { font-size: 11px; color: var(--mj-color-indigo-500); }\n.ve-preview-header span { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n\n.ve-preview-close {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n border: none;\n border-radius: 4px;\n background: transparent;\n color: var(--mj-text-disabled);\n cursor: pointer;\n font-size: 11px;\n flex-shrink: 0;\n}\n\n.ve-preview-close:hover { background: var(--mj-bg-surface-active); color: var(--mj-text-secondary); }\n\n.ve-preview-loading,\n.ve-preview-empty {\n padding: 20px;\n text-align: center;\n color: var(--mj-text-disabled);\n font-size: 12px;\n}\n\n.ve-preview-loading i { margin-right: 6px; color: var(--mj-color-indigo-500); }\n\n.ve-preview-table-wrap {\n flex: 1;\n overflow: auto;\n}\n\n.ve-preview-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 11px;\n}\n\n.ve-preview-table th {\n position: sticky;\n top: 0;\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-muted);\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n font-size: 10px;\n padding: 5px 10px;\n text-align: left;\n white-space: nowrap;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.ve-preview-table td {\n padding: 4px 10px;\n color: var(--mj-text-primary);\n border-bottom: 1px solid var(--mj-border-subtle);\n max-width: 180px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.ve-preview-table tbody tr:hover td {\n background: var(--mj-color-indigo-50);\n}\n\n/* ---------------------------------------------------------------------------\n Connect mode banner\n --------------------------------------------------------------------------- */\n\n.ve-connect-banner {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 20px;\n background: var(--mj-color-indigo-50);\n color: var(--mj-color-indigo-700);\n font-size: 13px;\n border-bottom: 1px solid var(--mj-color-indigo-100);\n flex-shrink: 0;\n}\n\n.ve-connect-banner strong { font-weight: 700; }\n\n.ve-connect-cancel {\n margin-left: auto;\n padding: 3px 10px;\n border: 1px solid var(--mj-color-indigo-100);\n border-radius: 5px;\n background: var(--mj-bg-surface);\n color: var(--mj-color-indigo-700);\n font-size: 12px;\n cursor: pointer;\n transition: all 150ms ease;\n}\n\n.ve-connect-cancel:hover { background: var(--mj-color-indigo-100); }\n\n/* ---------------------------------------------------------------------------\n VE Body\n --------------------------------------------------------------------------- */\n\n.ve-body {\n flex: 1;\n display: flex;\n overflow: hidden;\n}\n\n.ve-loading {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n width: 100%;\n gap: 12px;\n color: var(--mj-text-disabled);\n font-size: 14px;\n}\n\n.ve-loading i { font-size: 24px; color: var(--mj-color-indigo-500); }\n\n/* Sections wrapper (replaces ve-canvas-wrapper as the main left area) */\n.ve-sections-wrapper {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n min-width: 0;\n}\n\n/* Collapsible section */\n.ve-section {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.ve-section:not(.collapsed) {\n flex: 1;\n min-height: 0;\n}\n\n.ve-section.collapsed {\n flex-shrink: 0;\n}\n\n.ve-section-header {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 16px;\n cursor: pointer;\n user-select: none;\n background: var(--mj-bg-page);\n border-bottom: 1px solid var(--mj-border-subtle);\n flex-shrink: 0;\n transition: background 150ms ease;\n}\n\n.ve-section-header:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.ve-section-header i {\n font-size: 10px;\n color: var(--mj-text-disabled);\n width: 12px;\n flex-shrink: 0;\n transition: transform 200ms ease;\n}\n\n.ve-section-title {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.4px;\n color: var(--mj-text-muted);\n}\n\n.ve-section-badge {\n font-size: 10px;\n font-weight: 600;\n background: var(--mj-color-indigo-50);\n color: var(--mj-color-indigo-600);\n padding: 1px 8px;\n border-radius: 4px;\n margin-left: auto;\n}\n\n.ve-section-body {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n min-height: 0;\n animation: fadeIn 200ms ease;\n}\n\n/* Canvas wrapper (takes available space, pushes transform panel right) */\n.ve-canvas-wrapper {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n min-width: 0;\n}\n\n/* ---------------------------------------------------------------------------\n Column headers\n --------------------------------------------------------------------------- */\n\n.ve-col-headers {\n display: grid;\n grid-template-columns: 1fr 200px 1fr;\n flex-shrink: 0;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.ve-col-header {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 16px;\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--mj-text-muted);\n}\n\n.ve-col-header.source i { color: var(--mj-color-indigo-500); }\n.ve-col-header.dest i { color: var(--mj-color-success-600); }\n.ve-col-header-spacer { /* SVG gap */ }\n\n.ve-col-count {\n font-size: 10px;\n font-weight: 600;\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-disabled);\n padding: 1px 6px;\n border-radius: 4px;\n}\n\n/* ---------------------------------------------------------------------------\n Column search bars\n --------------------------------------------------------------------------- */\n\n.ve-col-searches {\n display: grid;\n grid-template-columns: 1fr 200px 1fr;\n flex-shrink: 0;\n border-bottom: 1px solid var(--mj-border-subtle);\n padding: 6px 0;\n}\n\n.ve-col-search {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 0 12px;\n}\n\n.ve-col-search i {\n font-size: 11px;\n color: var(--mj-text-disabled);\n flex-shrink: 0;\n}\n\n.ve-col-search input {\n flex: 1;\n height: 28px;\n padding: 0 8px;\n border: 1px solid var(--mj-border-default);\n border-radius: 5px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-page);\n outline: none;\n transition: border-color 150ms ease;\n}\n\n.ve-col-search input:focus { border-color: var(--mj-color-indigo-500); background: var(--mj-bg-surface); }\n.ve-col-search input::placeholder { color: var(--mj-color-neutral-300); }\n.ve-col-search-spacer { /* SVG gap */ }\n\n/* ---------------------------------------------------------------------------\n Canvas scroll + grid\n --------------------------------------------------------------------------- */\n\n.ve-canvas-scroll {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n}\n\n.ve-canvas-grid {\n display: grid;\n grid-template-columns: 1fr 200px 1fr;\n position: relative;\n}\n\n/* ---------------------------------------------------------------------------\n Field columns\n --------------------------------------------------------------------------- */\n\n.ve-field-col {\n display: flex;\n flex-direction: column;\n}\n\n.ve-field-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 0 14px;\n font-size: 13px;\n cursor: pointer;\n transition: background 150ms ease, opacity 150ms ease;\n border-bottom: 1px solid var(--mj-bg-page);\n box-sizing: border-box;\n}\n\n.ve-field-item.mapped { background: var(--mj-bg-surface); }\n\n.ve-field-item.unmapped {\n opacity: 0.5;\n background: var(--mj-bg-page);\n}\n\n.ve-field-item:hover {\n background: var(--mj-color-indigo-50);\n opacity: 1;\n}\n\n.ve-field-item.connecting {\n background: var(--mj-color-indigo-100);\n opacity: 1;\n box-shadow: inset 0 0 0 2px var(--mj-color-indigo-500);\n}\n\n.ve-field-item.connect-target:hover {\n background: var(--mj-color-success-100);\n box-shadow: inset 0 0 0 2px var(--mj-color-success-600);\n}\n\n.ve-field-name {\n flex: 1;\n min-width: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n color: var(--mj-text-secondary);\n font-weight: 500;\n}\n\n.ve-field-type {\n font-size: 10px;\n color: var(--mj-text-disabled);\n flex-shrink: 0;\n font-family: 'SF Mono', 'Fira Code', monospace;\n}\n\n.ve-field-badges {\n display: flex;\n gap: 3px;\n flex-shrink: 0;\n}\n\n.ve-fbadge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 18px;\n height: 18px;\n padding: 0 3px;\n border-radius: 4px;\n font-size: 9px;\n font-weight: 700;\n}\n\n.ve-fbadge.pk { background: var(--mj-color-warning-100); color: var(--mj-color-warning-700); }\n.ve-fbadge.req { background: var(--mj-color-error-100); color: var(--mj-color-error-600); }\n\n.ve-field-empty {\n padding: 32px 16px;\n text-align: center;\n color: var(--mj-text-disabled);\n font-size: 13px;\n}\n\n/* ---------------------------------------------------------------------------\n SVG connections\n --------------------------------------------------------------------------- */\n\n.ve-svg {\n display: block;\n}\n\n.ve-conn-line {\n fill: none;\n stroke-width: 2;\n cursor: pointer;\n transition: stroke 200ms ease, stroke-width 200ms ease;\n}\n\n/* Transform-based line styles \u2014 categorical data-viz colors */\n.ve-conn-line.conn-direct { stroke: var(--mj-brand-primary); stroke-dasharray: none; }\n.ve-conn-line.conn-regex { stroke: var(--ve-color-regex, #8b5cf6); stroke-dasharray: 6 3; }\n.ve-conn-line.conn-split { stroke: var(--mj-status-warning); stroke-dasharray: 8 4; }\n.ve-conn-line.conn-combine { stroke: var(--mj-status-success); stroke-dasharray: 8 4; }\n.ve-conn-line.conn-lookup { stroke: var(--ve-color-lookup, #0ea5e9); stroke-dasharray: 4 4; }\n.ve-conn-line.conn-format { stroke: var(--ve-color-format, #ec4899); stroke-dasharray: 4 4; }\n.ve-conn-line.conn-coerce { stroke: var(--ve-color-coerce, #f97316); stroke-dasharray: 4 4; }\n.ve-conn-line.conn-substring { stroke: var(--ve-color-substring, #14b8a6); stroke-dasharray: 4 4; }\n.ve-conn-line.conn-custom { stroke: var(--ve-color-custom, #a855f7); stroke-dasharray: 2 3; }\n\n.ve-conn-line:hover { stroke-width: 3.5; }\n.ve-conn-line.selected { stroke-width: 3.5; filter: drop-shadow(0 0 4px rgba(99, 102, 241, 0.4)); }\n\n/* Connection badge at midpoint */\n.ve-badge-fo { overflow: visible; }\n\n.ve-conn-badge {\n width: 28px;\n height: 28px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 11px;\n cursor: pointer;\n transition: all 150ms ease;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12);\n}\n\n.ve-conn-badge.badge-direct { background: var(--mj-brand-primary-subtle); color: var(--mj-brand-primary); border: 2px solid var(--mj-brand-primary); }\n.ve-conn-badge.badge-regex { background: color-mix(in srgb, var(--ve-color-regex, #8b5cf6) 10%, var(--mj-bg-surface)); color: var(--ve-color-regex, #8b5cf6); border: 2px solid var(--ve-color-regex, #8b5cf6); }\n.ve-conn-badge.badge-split { background: var(--mj-status-warning-subtle); color: var(--mj-status-warning); border: 2px solid var(--mj-status-warning); }\n.ve-conn-badge.badge-combine { background: var(--mj-status-success-subtle); color: var(--mj-status-success); border: 2px solid var(--mj-status-success); }\n.ve-conn-badge.badge-lookup { background: color-mix(in srgb, var(--ve-color-lookup, #0ea5e9) 10%, var(--mj-bg-surface)); color: var(--ve-color-lookup, #0ea5e9); border: 2px solid var(--ve-color-lookup, #0ea5e9); }\n.ve-conn-badge.badge-format { background: color-mix(in srgb, var(--ve-color-format, #ec4899) 10%, var(--mj-bg-surface)); color: var(--ve-color-format, #ec4899); border: 2px solid var(--ve-color-format, #ec4899); }\n.ve-conn-badge.badge-coerce { background: color-mix(in srgb, var(--ve-color-coerce, #f97316) 10%, var(--mj-bg-surface)); color: var(--ve-color-coerce, #f97316); border: 2px solid var(--ve-color-coerce, #f97316); }\n.ve-conn-badge.badge-substring { background: color-mix(in srgb, var(--ve-color-substring, #14b8a6) 10%, var(--mj-bg-surface)); color: var(--ve-color-substring, #14b8a6); border: 2px solid var(--ve-color-substring, #14b8a6); }\n.ve-conn-badge.badge-custom { background: color-mix(in srgb, var(--ve-color-custom, #a855f7) 10%, var(--mj-bg-surface)); color: var(--ve-color-custom, #a855f7); border: 2px solid var(--ve-color-custom, #a855f7); }\n\n.ve-conn-badge:hover { transform: scale(1.2); }\n.ve-conn-badge.selected { transform: scale(1.25); box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.3); }\n\n/* ---------------------------------------------------------------------------\n Transform Panel (right side)\n --------------------------------------------------------------------------- */\n\n.ve-transform-panel {\n width: 320px;\n flex-shrink: 0;\n border-left: 1px solid var(--mj-border-default);\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n background: var(--mj-bg-page);\n animation: slideInRight 200ms ease;\n}\n\n@keyframes slideInRight {\n from { opacity: 0; transform: translateX(20px); }\n to { opacity: 1; transform: translateX(0); }\n}\n\n.ve-tp-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 14px 16px;\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.ve-tp-title {\n font-size: 13px;\n font-weight: 700;\n color: var(--mj-text-primary);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.ve-tp-close {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n border: none;\n border-radius: 6px;\n background: transparent;\n color: var(--mj-text-disabled);\n cursor: pointer;\n font-size: 13px;\n transition: all 150ms ease;\n}\n\n.ve-tp-close:hover { background: var(--mj-bg-surface-active); color: var(--mj-text-secondary); }\n\n/* Mapping info */\n.ve-tp-mapping-info {\n padding: 14px 16px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.ve-tp-field-pair {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n}\n\n.ve-tp-field {\n padding: 4px 10px;\n border-radius: 6px;\n font-weight: 600;\n font-size: 12px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 110px;\n}\n\n.ve-tp-field.source { background: var(--mj-color-indigo-50); color: var(--mj-color-indigo-700); }\n.ve-tp-field.dest { background: var(--mj-status-success-bg); color: var(--mj-color-success-700); }\n.ve-tp-arrow { color: var(--mj-text-disabled); font-size: 11px; flex-shrink: 0; }\n\n/* Toggles */\n.ve-tp-toggles {\n display: flex;\n gap: 16px;\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.ve-tp-toggle {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n}\n\n.ve-tp-toggle-box {\n width: 18px;\n height: 18px;\n border: 2px solid var(--mj-color-neutral-300);\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 10px;\n color: var(--mj-bg-surface);\n transition: all 150ms ease;\n}\n\n.ve-tp-toggle-box.active {\n background: var(--mj-color-indigo-500);\n border-color: var(--mj-color-indigo-500);\n}\n\n/* Sections */\n.ve-tp-section {\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.ve-tp-section-label {\n display: block;\n font-size: 10px;\n font-weight: 700;\n color: var(--mj-text-disabled);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n margin-bottom: 8px;\n}\n\n.ve-tp-section-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n\n/* Direction buttons */\n.ve-tp-direction-btns {\n display: flex;\n gap: 0;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.ve-tp-direction-btns button {\n flex: 1;\n padding: 6px 8px;\n border: none;\n background: var(--mj-bg-surface);\n color: var(--mj-text-muted);\n font-size: 11px;\n font-weight: 500;\n cursor: pointer;\n transition: all 150ms ease;\n border-right: 1px solid var(--mj-border-default);\n}\n\n.ve-tp-direction-btns button:last-child { border-right: none; }\n.ve-tp-direction-btns button:hover { background: var(--mj-bg-surface-hover); }\n.ve-tp-direction-btns button.active { background: var(--mj-color-indigo-500); color: var(--mj-bg-surface); }\n\n/* Transform steps */\n.ve-tp-add-step {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n border: 1px solid var(--mj-border-default);\n border-radius: 5px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-muted);\n font-size: 11px;\n cursor: pointer;\n transition: all 150ms ease;\n}\n\n.ve-tp-add-step:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); }\n\n.ve-tp-step {\n margin-top: 8px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n overflow: hidden;\n}\n\n.ve-tp-step-header {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 10px;\n background: var(--mj-bg-page);\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.ve-tp-step-num {\n width: 20px;\n height: 20px;\n border-radius: 50%;\n background: var(--mj-color-indigo-500);\n color: var(--mj-bg-surface);\n font-size: 10px;\n font-weight: 700;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.ve-tp-type-select {\n flex: 1;\n height: 28px;\n padding: 0 8px;\n border: 1px solid var(--mj-border-default);\n border-radius: 5px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface);\n outline: none;\n cursor: pointer;\n}\n\n.ve-tp-type-select:focus { border-color: var(--mj-color-indigo-500); }\n\n.ve-tp-remove-step {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n border: none;\n border-radius: 5px;\n background: transparent;\n color: var(--mj-text-disabled);\n cursor: pointer;\n font-size: 11px;\n transition: all 150ms ease;\n flex-shrink: 0;\n}\n\n.ve-tp-remove-step:hover { background: var(--mj-color-error-100); color: var(--mj-color-error-600); }\n\n.ve-tp-step-config {\n padding: 8px 10px;\n}\n\n.ve-tp-config-row {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 6px;\n}\n\n.ve-tp-config-row:last-child { margin-bottom: 0; }\n\n.ve-tp-config-row label {\n width: 80px;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-muted);\n flex-shrink: 0;\n}\n\n.ve-tp-config-row input {\n flex: 1;\n height: 28px;\n padding: 0 8px;\n border: 1px solid var(--mj-border-default);\n border-radius: 5px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-page);\n outline: none;\n font-family: 'SF Mono', 'Fira Code', monospace;\n}\n\n.ve-tp-config-row input:focus { border-color: var(--mj-color-indigo-500); background: var(--mj-bg-surface); }\n\n.ve-tp-step-onerror {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 10px;\n border-top: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-page);\n}\n\n.ve-tp-step-onerror label {\n font-size: 10px;\n font-weight: 600;\n color: var(--mj-text-disabled);\n flex-shrink: 0;\n}\n\n.ve-tp-step-onerror select {\n height: 24px;\n padding: 0 6px;\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n font-size: 11px;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface);\n outline: none;\n cursor: pointer;\n}\n\n.ve-tp-no-steps {\n padding: 16px;\n text-align: center;\n color: var(--mj-text-disabled);\n font-size: 12px;\n font-style: italic;\n}\n\n/* Footer */\n.ve-tp-footer {\n padding: 14px 16px;\n margin-top: auto;\n flex-shrink: 0;\n}\n\n/* ---------------------------------------------------------------------------\n Scrollbar styling\n --------------------------------------------------------------------------- */\n\n.cards-list::-webkit-scrollbar,\n.map-table-body::-webkit-scrollbar,\n.ve-canvas-scroll::-webkit-scrollbar,\n.ve-transform-panel::-webkit-scrollbar {\n width: 6px;\n height: 6px;\n}\n\n.cards-list::-webkit-scrollbar-track,\n.map-table-body::-webkit-scrollbar-track,\n.ve-canvas-scroll::-webkit-scrollbar-track,\n.ve-transform-panel::-webkit-scrollbar-track {\n background: transparent;\n}\n\n.cards-list::-webkit-scrollbar-thumb,\n.map-table-body::-webkit-scrollbar-thumb,\n.ve-canvas-scroll::-webkit-scrollbar-thumb,\n.ve-transform-panel::-webkit-scrollbar-thumb {\n background: var(--mj-color-neutral-300);\n border-radius: 3px;\n}\n\n.cards-list::-webkit-scrollbar-thumb:hover,\n.map-table-body::-webkit-scrollbar-thumb:hover,\n.ve-canvas-scroll::-webkit-scrollbar-thumb:hover,\n.ve-transform-panel::-webkit-scrollbar-thumb:hover {\n background: var(--mj-text-disabled);\n}\n\n/* ---------------------------------------------------------------------------\n Info Panel\n --------------------------------------------------------------------------- */\n\n.ve-info-body {\n padding: 16px;\n overflow-y: auto;\n}\n\n.ve-info-loading {\n text-align: center;\n color: var(--mj-text-disabled);\n font-size: 13px;\n padding: 20px;\n}\n\n.ve-info-loading i {\n color: var(--mj-color-indigo-500);\n margin-right: 6px;\n}\n\n.ve-info-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));\n gap: 12px;\n margin-bottom: 16px;\n}\n\n.ve-info-card {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 14px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n}\n\n.ve-info-card-icon {\n width: 36px;\n height: 36px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 14px;\n flex-shrink: 0;\n background: var(--mj-color-indigo-50);\n color: var(--mj-color-indigo-500);\n}\n\n.ve-info-card-icon.source {\n background: var(--mj-color-info-100);\n color: var(--mj-brand-primary);\n}\n\n.ve-info-card-icon.sync {\n background: var(--mj-color-success-100);\n color: var(--mj-color-success-600);\n}\n\n.ve-info-card-icon.info-status-success {\n background: var(--mj-color-success-100);\n color: var(--mj-color-success-600);\n}\n\n.ve-info-card-icon.info-status-error {\n background: var(--mj-color-error-100);\n color: var(--mj-color-error-600);\n}\n\n.ve-info-card-icon.info-status-running {\n background: var(--mj-color-info-100);\n color: var(--mj-brand-primary);\n}\n\n.ve-info-card-icon.info-status-pending {\n background: var(--mj-color-warning-100);\n color: var(--mj-color-warning-600);\n}\n\n.ve-info-card-content {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n}\n\n.ve-info-card-value {\n font-size: 16px;\n font-weight: 700;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.ve-info-card-label {\n font-size: 11px;\n color: var(--mj-text-disabled);\n font-weight: 500;\n}\n\n.ve-info-details {\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n overflow: hidden;\n}\n\n.ve-info-detail-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 14px;\n font-size: 12px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.ve-info-detail-row:last-child {\n border-bottom: none;\n}\n\n.ve-info-detail-label {\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n.ve-info-detail-value {\n color: var(--mj-text-primary);\n font-weight: 600;\n}\n"] }]
|
|
2118
|
+
args: [{ standalone: false, selector: 'app-integration-pipelines', template: "<mj-page-layout>\n <mj-page-header\n Title=\"Integration Pipelines\"\n Icon=\"fa-solid fa-diagram-project\"\n Subtitle=\"Data transformation and routing pipelines\">\n @if (IntegrationCount > 0) {\n <div meta>\n <mj-stat-badge [Count]=\"IntegrationCount\" Label=\"pipelines\"></mj-stat-badge>\n <mj-stat-badge [Count]=\"TotalMapCount\" Label=\"entity maps\"></mj-stat-badge>\n </div>\n }\n <div actions>\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"ExpandAll()\" title=\"Expand All\">\n <i class=\"fa-solid fa-angles-down\"></i>\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"CollapseAll()\" title=\"Collapse All\">\n <i class=\"fa-solid fa-angles-up\"></i>\n </button>\n <mj-refresh-button [Loading]=\"IsLoading\" (Clicked)=\"LoadData()\"></mj-refresh-button>\n </div>\n <div toolbar>\n <mj-page-search\n Placeholder=\"Search integrations or entities...\"\n [Value]=\"GlobalSearch\"\n (ValueChange)=\"OnGlobalSearchValue($event)\">\n </mj-page-search>\n </div>\n </mj-page-header>\n\n <mj-page-body [Flex]=\"true\" [Padding]=\"false\">\n<div class=\"pipelines-container\">\n\n <!-- ===================================================================== -->\n <!-- MAP LIST VIEW (hidden when editor is open) -->\n <!-- ===================================================================== -->\n @if (!VisualEditorOpen) {\n\n <!-- Main content area -->\n <div class=\"pipelines-content\">\n @if (IsLoading && PipelineCards.length === 0) {\n <div class=\"content-loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>Loading pipelines...</span>\n </div>\n } @else if (PipelineCards.length === 0) {\n <div class=\"content-empty\">\n <i class=\"fa-solid fa-diagram-project empty-icon\"></i>\n <h3>No Integration Pipelines</h3>\n <p>Configure integrations to see data flow pipelines here.</p>\n </div>\n } @else {\n <div class=\"cards-list\">\n @for (card of FilteredCards; track card.IntegrationID) {\n <!-- Pipeline card -->\n <div class=\"pipeline-card\" [class.expanded]=\"card.IsExpanded\">\n\n <!-- Card header (always visible) -->\n <div class=\"card-header\" (click)=\"ToggleCard(card)\">\n <div class=\"card-header-left\">\n <div class=\"card-status-dot\" [style.backgroundColor]=\"card.StatusColor\"></div>\n <i [class]=\"card.Icon + ' card-icon'\"></i>\n <div class=\"card-info\">\n <span class=\"card-name\">{{ card.IntegrationName }}</span>\n <span class=\"card-meta\">\n {{ card.EntityMapCount }} maps\n <span class=\"meta-sep\">·</span>\n {{ card.ActiveMapCount }} active\n <span class=\"meta-sep\">·</span>\n {{ card.UniqueEntityCount }} entities\n </span>\n </div>\n </div>\n <div class=\"card-header-right\">\n <span class=\"card-status-label\" [style.color]=\"card.StatusColor\">\n {{ card.StatusLabel }}\n </span>\n @if (card.LastSync) {\n <span class=\"card-last-sync\">{{ card.LastSync }}</span>\n }\n <!-- Mini flow indicator -->\n <div class=\"mini-flow\">\n <span class=\"mini-flow-dot source\"></span>\n <span class=\"mini-flow-line\"></span>\n <span class=\"mini-flow-count\">{{ card.EntityMapCount }}</span>\n <span class=\"mini-flow-line\"></span>\n <span class=\"mini-flow-dot dest\"></span>\n </div>\n <i class=\"fa-solid card-chevron\"\n [class.fa-chevron-down]=\"!card.IsExpanded\"\n [class.fa-chevron-up]=\"card.IsExpanded\"></i>\n </div>\n </div>\n\n <!-- Expanded entity map table -->\n @if (card.IsExpanded) {\n <div class=\"card-body\">\n <!-- Search within this integration -->\n <div class=\"card-search-bar\">\n <i class=\"fa-solid fa-filter card-search-icon\"></i>\n <input type=\"text\"\n class=\"card-search-input\"\n placeholder=\"Filter entity maps...\"\n [value]=\"card.SearchTerm\"\n (input)=\"OnCardSearch(card, $event)\" />\n <span class=\"card-search-count\">\n {{ card.FilteredMaps.length }} of {{ card.EntityMapCount }}\n </span>\n </div>\n\n <!-- Table header -->\n <div class=\"map-table-head\">\n <span class=\"map-col-toggle\">Sync</span>\n <span class=\"map-col-source\">External Object</span>\n <span class=\"map-col-direction\"></span>\n <span class=\"map-col-dest\">MJ Entity</span>\n <span class=\"map-col-meta\">Config</span>\n </div>\n\n <!-- Table body -->\n <div class=\"map-table-body\">\n @for (em of card.FilteredMaps; track em.ID) {\n <div class=\"map-row\"\n [class.sync-disabled]=\"!em.SyncEnabled\"\n (click)=\"OnMapRowClick(card, em)\">\n <span class=\"map-col-toggle\" (click)=\"$event.stopPropagation()\">\n <label class=\"sync-toggle\" [title]=\"em.SyncEnabled ? 'Sync enabled \u2014 click to disable' : 'Sync disabled \u2014 click to enable'\">\n <input type=\"checkbox\"\n [checked]=\"em.SyncEnabled\"\n (change)=\"OnToggleSyncEnabled(card, em, $event)\" />\n <span class=\"sync-toggle-track\"></span>\n </label>\n </span>\n <span class=\"map-col-source\" [title]=\"em.ExternalObjectName\">\n {{ em.ExternalObjectLabel ?? em.ExternalObjectName }}\n </span>\n <span class=\"map-col-direction\">\n <span [class]=\"DirectionBadgeClass(em.SyncDirection)\">\n {{ DirectionText(em.SyncDirection) }}\n </span>\n </span>\n <span class=\"map-col-dest\" [title]=\"em.Entity\">\n {{ em.Entity }}\n </span>\n <span class=\"map-col-meta\">\n @if (em.MatchStrategy) {\n <span class=\"map-config-badge\" [title]=\"'Match: ' + em.MatchStrategy\">\n <i class=\"fa-solid fa-link\"></i>\n </span>\n }\n <span class=\"map-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=\"map-table-empty\">\n No entity maps match your filter.\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n\n } @else {\n\n <!-- ===================================================================== -->\n <!-- VISUAL FIELD MAPPING EDITOR (inline, replaces map list) -->\n <!-- ===================================================================== -->\n\n <div class=\"ve-container\">\n\n <!-- Header -->\n <div class=\"ve-header\">\n <div class=\"ve-header-left\">\n <button class=\"ve-back-btn\" (click)=\"CloseVisualEditor()\" title=\"Back to Pipelines\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n </button>\n <div class=\"ve-header-title\">\n <span class=\"ve-source-label\">{{ EditorEntityMap?.ExternalObjectLabel ?? EditorEntityMap?.ExternalObjectName }}</span>\n <span class=\"ve-direction-arrow\">\n <i class=\"fa-solid fa-arrow-right-arrow-left\"></i>\n </span>\n <span class=\"ve-dest-label\">{{ EditorEntityMap?.Entity }}</span>\n </div>\n <!-- SyncEnabled toggle in editor header -->\n @if (EditorEntityMap) {\n <label class=\"sync-toggle ve-sync-toggle\"\n [title]=\"EditorEntityMap.SyncEnabled ? 'Sync enabled' : 'Sync disabled'\">\n <input type=\"checkbox\"\n [checked]=\"EditorEntityMap.SyncEnabled\"\n (change)=\"OnToggleEditorSyncEnabled($event)\" />\n <span class=\"sync-toggle-track\"></span>\n </label>\n <span class=\"ve-sync-label\">{{ EditorEntityMap.SyncEnabled ? 'Sync On' : 'Sync Off' }}</span>\n }\n </div>\n <div class=\"ve-header-stats\">\n <span class=\"ve-stat\">\n <strong>{{ EditorMappedCount }}</strong> mapped\n </span>\n <span class=\"ve-stat-sep\"></span>\n <span class=\"ve-stat\">\n <strong>{{ EditorKeyFieldCount }}</strong> key\n </span>\n <span class=\"ve-stat-sep\"></span>\n <span class=\"ve-stat\">\n <strong>{{ EditorRequiredCount }}</strong> required\n </span>\n </div>\n <div class=\"ve-header-actions\">\n <!-- Data preview buttons -->\n <button class=\"ve-btn ve-btn-ghost\"\n (click)=\"ToggleSourcePreview()\"\n [class.active]=\"ShowSourcePreview\"\n title=\"Preview source data\">\n <i class=\"fa-solid fa-cloud\"></i> Source Data\n </button>\n <button class=\"ve-btn ve-btn-ghost\"\n (click)=\"ToggleDestPreview()\"\n [class.active]=\"ShowDestPreview\"\n title=\"Preview MJ data\">\n <i class=\"fa-solid fa-database\"></i> MJ Data\n </button>\n <div class=\"ve-action-sep\"></div>\n <button class=\"ve-btn ve-btn-ghost\"\n [disabled]=\"IsRunningPipeline\"\n (click)=\"RunSchemaPipeline()\"\n title=\"Generate DDL, run CodeGen, and restart MJAPI for this mapping\">\n @if (IsRunningPipeline) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Running Pipeline...\n } @else {\n <i class=\"fa-solid fa-gears\"></i> Run Schema Pipeline\n }\n </button>\n @if (PipelineResultMessage) {\n <span [class]=\"PipelineResultSuccess ? 've-save-success' : 've-error-msg'\">\n <i [class]=\"PipelineResultSuccess ? 'fa-solid fa-circle-check' : 'fa-solid fa-circle-xmark'\"></i>\n {{ PipelineResultMessage }}\n </span>\n }\n <div class=\"ve-action-sep\"></div>\n <button class=\"ve-btn ve-btn-ghost\" (click)=\"AutoMapEditorFields()\" title=\"Auto-map fields by name\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i> Auto-Map\n </button>\n <button class=\"ve-btn ve-btn-primary\"\n [disabled]=\"!HasEditorChanges || EditorSaving\"\n (click)=\"SaveVisualEditor()\">\n @if (EditorSaving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Saving...\n } @else {\n <i class=\"fa-solid fa-check\"></i> Save\n }\n </button>\n @if (EditorSaveSuccess && !HasEditorChanges) {\n <span class=\"ve-save-success\">\n <i class=\"fa-solid fa-circle-check\"></i> Saved\n </span>\n }\n </div>\n </div>\n\n <!-- Data preview panels (collapsible) -->\n @if (ShowSourcePreview || ShowDestPreview) {\n <div class=\"ve-preview-strip\">\n @if (ShowSourcePreview) {\n <div class=\"ve-preview-panel\">\n <div class=\"ve-preview-header\">\n <i class=\"fa-solid fa-cloud\"></i>\n <span>Source Preview: {{ EditorEntityMap?.ExternalObjectLabel ?? EditorEntityMap?.ExternalObjectName }}</span>\n <button class=\"ve-preview-close\" (click)=\"ShowSourcePreview = false\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n @if (PreviewSourceLoading) {\n <div class=\"ve-preview-loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading...\n </div>\n } @else if (PreviewSourceRows.length === 0) {\n <div class=\"ve-preview-empty\">No source data available</div>\n } @else {\n <div class=\"ve-preview-table-wrap\">\n <table class=\"ve-preview-table\">\n <thead>\n <tr>\n @for (col of PreviewSourceColumns; track col) {\n <th>{{ col }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of PreviewSourceRows; track $index) {\n <tr>\n @for (col of PreviewSourceColumns; track col) {\n <td [title]=\"row[col]?.toString() ?? ''\">{{ row[col] ?? '' }}</td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n }\n @if (ShowDestPreview) {\n <div class=\"ve-preview-panel\">\n <div class=\"ve-preview-header\">\n <i class=\"fa-solid fa-database\"></i>\n <span>Dest Preview: {{ EditorEntityMap?.Entity }}</span>\n <button class=\"ve-preview-close\" (click)=\"ShowDestPreview = false\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n @if (PreviewDestLoading) {\n <div class=\"ve-preview-loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading...\n </div>\n } @else if (PreviewDestRows.length === 0) {\n <div class=\"ve-preview-empty\">No destination data available</div>\n } @else {\n <div class=\"ve-preview-table-wrap\">\n <table class=\"ve-preview-table\">\n <thead>\n <tr>\n @for (col of PreviewDestColumns; track col) {\n <th>{{ col }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of PreviewDestRows; track $index) {\n <tr>\n @for (col of PreviewDestColumns; track col) {\n <td [title]=\"row[col]?.toString() ?? ''\">{{ row[col] ?? '' }}</td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Connect mode banner -->\n @if (ConnectingFromSource) {\n <div class=\"ve-connect-banner\">\n <i class=\"fa-solid fa-link\"></i>\n Click a destination field to map from\n <strong>{{ ConnectingFromSource }}</strong>\n <button class=\"ve-connect-cancel\" (click)=\"CancelConnect()\">Cancel</button>\n </div>\n }\n\n <!-- Main content: sections + transform panel -->\n <div class=\"ve-body\" [class.has-transform-panel]=\"SelectedConnectionIdx !== null\">\n\n <!-- Loading state -->\n @if (EditorLoading) {\n <div class=\"ve-loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>Loading field mappings...</span>\n </div>\n } @else {\n\n <!-- Left content area (sections stacked vertically) -->\n <div class=\"ve-sections-wrapper\">\n\n <!-- ============================================================= -->\n <!-- FIELD MAPPINGS SECTION (collapsible) -->\n <!-- ============================================================= -->\n <div class=\"ve-section\" [class.collapsed]=\"!FieldMapsExpanded\">\n <div class=\"ve-section-header\" (click)=\"ToggleFieldMaps()\">\n <i class=\"fa-solid\"\n [class.fa-chevron-down]=\"FieldMapsExpanded\"\n [class.fa-chevron-right]=\"!FieldMapsExpanded\"></i>\n <span class=\"ve-section-title\">Field Mappings</span>\n <span class=\"ve-section-badge\">{{ EditorMappedCount }} mapped</span>\n </div>\n\n @if (FieldMapsExpanded) {\n <div class=\"ve-section-body\">\n <!-- Canvas area (scrollable) -->\n <div class=\"ve-canvas-wrapper\">\n\n <!-- Column headers -->\n <div class=\"ve-col-headers\">\n <div class=\"ve-col-header source\">\n <i class=\"fa-solid fa-cloud\"></i>\n Source Fields\n <span class=\"ve-col-count\">{{ EditorSourceFields.length }}</span>\n </div>\n <div class=\"ve-col-header-spacer\"></div>\n <div class=\"ve-col-header dest\">\n <i class=\"fa-solid fa-database\"></i>\n MJ Entity Fields\n <span class=\"ve-col-count\">{{ EditorDestFields.length }}</span>\n </div>\n </div>\n\n <!-- Search bars -->\n <div class=\"ve-col-searches\">\n <div class=\"ve-col-search\">\n <i class=\"fa-solid fa-search\"></i>\n <input type=\"text\"\n placeholder=\"Filter source fields...\"\n [value]=\"EditorSearchSource\"\n (input)=\"EditorSearchSource = $any($event.target).value\" />\n </div>\n <div class=\"ve-col-search-spacer\"></div>\n <div class=\"ve-col-search\">\n <i class=\"fa-solid fa-search\"></i>\n <input type=\"text\"\n placeholder=\"Filter destination fields...\"\n [value]=\"EditorSearchDest\"\n (input)=\"EditorSearchDest = $any($event.target).value\" />\n </div>\n </div>\n\n <!-- Canvas grid (source + SVG + dest) -->\n <div class=\"ve-canvas-scroll\" (click)=\"DeselectConnection()\">\n <div class=\"ve-canvas-grid\" [style.min-height.px]=\"EditorCanvasHeight\">\n\n <!-- Source column -->\n <div class=\"ve-field-col source\">\n @for (sf of FilteredEditorSourceFields; track sf.Name) {\n <div class=\"ve-field-item\"\n [class.mapped]=\"IsSourceFieldMapped(sf.Name)\"\n [class.unmapped]=\"!IsSourceFieldMapped(sf.Name)\"\n [class.connecting]=\"ConnectingFromSource === sf.Name\"\n [style.height.px]=\"FIELD_HEIGHT\"\n (click)=\"OnEditorSourceClick(sf.Name); $event.stopPropagation()\">\n <span class=\"ve-field-name\" [title]=\"sf.Name\">{{ sf.Label || sf.Name }}</span>\n <span class=\"ve-field-type\">{{ sf.Type }}</span>\n <span class=\"ve-field-badges\">\n @if (sf.IsPrimaryKey) {\n <span class=\"ve-fbadge pk\" title=\"Primary Key\">PK</span>\n }\n @if (sf.IsRequired) {\n <span class=\"ve-fbadge req\" title=\"Required\">*</span>\n }\n </span>\n </div>\n }\n @if (FilteredEditorSourceFields.length === 0) {\n <div class=\"ve-field-empty\">No source fields found</div>\n }\n </div>\n\n <!-- SVG connection lines -->\n <svg class=\"ve-svg\"\n [attr.width]=\"SVG_WIDTH\"\n [attr.height]=\"EditorCanvasHeight\"\n [attr.viewBox]=\"'0 0 ' + SVG_WIDTH + ' ' + EditorCanvasHeight\"\n (click)=\"$event.stopPropagation()\">\n @for (conn of VisibleConnections; track conn.SourceFieldName + '-' + conn.DestFieldName; let i = $index) {\n <!-- Connection line -->\n <path [attr.d]=\"GetConnectionPath(conn)\"\n class=\"ve-conn-line\"\n [class]=\"'ve-conn-line ' + GetConnectionLineClass(conn)\"\n [class.selected]=\"SelectedConnectionIdx === i\"\n (click)=\"SelectConnection(i, $event)\" />\n <!-- Transform badge at midpoint -->\n <foreignObject\n [attr.x]=\"SVG_WIDTH / 2 - 14\"\n [attr.y]=\"GetConnectionMidY(conn) - 14\"\n width=\"28\" height=\"28\"\n class=\"ve-badge-fo\">\n <div xmlns=\"http://www.w3.org/1999/xhtml\"\n class=\"ve-conn-badge\"\n [class]=\"'ve-conn-badge ' + GetConnectionBadgeClass(conn)\"\n [class.selected]=\"SelectedConnectionIdx === i\"\n (click)=\"SelectConnection(i, $event)\">\n <i [class]=\"GetConnectionDirectionIcon(conn)\"></i>\n </div>\n </foreignObject>\n }\n </svg>\n\n <!-- Dest column -->\n <div class=\"ve-field-col dest\">\n @for (df of FilteredEditorDestFields; track df.Name) {\n <div class=\"ve-field-item\"\n [class.mapped]=\"IsDestFieldMapped(df.Name)\"\n [class.unmapped]=\"!IsDestFieldMapped(df.Name)\"\n [class.connect-target]=\"ConnectingFromSource !== null\"\n [style.height.px]=\"FIELD_HEIGHT\"\n (click)=\"OnEditorDestClick(df.Name); $event.stopPropagation()\">\n <span class=\"ve-field-name\" [title]=\"df.Name\">{{ df.Name }}</span>\n <span class=\"ve-field-type\">{{ df.Type }}</span>\n <span class=\"ve-field-badges\">\n @if (df.IsRequired) {\n <span class=\"ve-fbadge req\" title=\"Required\">*</span>\n }\n </span>\n </div>\n }\n @if (FilteredEditorDestFields.length === 0) {\n <div class=\"ve-field-empty\">No destination fields found</div>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n\n <!-- ============================================================= -->\n <!-- INFO PANEL SECTION (collapsible) -->\n <!-- ============================================================= -->\n <div class=\"ve-section\" [class.collapsed]=\"!InfoPanelExpanded\">\n <div class=\"ve-section-header\" (click)=\"ToggleInfoPanel()\">\n <i class=\"fa-solid\"\n [class.fa-chevron-down]=\"InfoPanelExpanded\"\n [class.fa-chevron-right]=\"!InfoPanelExpanded\"></i>\n <span class=\"ve-section-title\">Sync Info</span>\n </div>\n\n @if (InfoPanelExpanded) {\n <div class=\"ve-section-body ve-info-body\">\n @if (InfoPanelLoading) {\n <div class=\"ve-info-loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading stats...\n </div>\n } @else {\n <div class=\"ve-info-grid\">\n <!-- Destination record count -->\n <div class=\"ve-info-card\">\n <div class=\"ve-info-card-icon\">\n <i class=\"fa-solid fa-database\"></i>\n </div>\n <div class=\"ve-info-card-content\">\n <span class=\"ve-info-card-value\">{{ InfoDestRecordCount ?? '-' }}</span>\n <span class=\"ve-info-card-label\">MJ Records</span>\n </div>\n </div>\n <!-- Source fields count -->\n <div class=\"ve-info-card\">\n <div class=\"ve-info-card-icon source\">\n <i class=\"fa-solid fa-cloud\"></i>\n </div>\n <div class=\"ve-info-card-content\">\n <span class=\"ve-info-card-value\">{{ EditorSourceFields.length }}</span>\n <span class=\"ve-info-card-label\">Source Fields</span>\n </div>\n </div>\n <!-- Last sync -->\n <div class=\"ve-info-card\">\n <div class=\"ve-info-card-icon sync\">\n <i class=\"fa-solid fa-arrows-rotate\"></i>\n </div>\n <div class=\"ve-info-card-content\">\n <span class=\"ve-info-card-value\">{{ FormatSyncDate(InfoLastSync?.StartedAt ?? null) }}</span>\n <span class=\"ve-info-card-label\">Last Sync</span>\n </div>\n </div>\n <!-- Sync status -->\n @if (InfoLastSync) {\n <div class=\"ve-info-card\">\n <div class=\"ve-info-card-icon\" [ngClass]=\"SyncStatusClass(InfoLastSync.Status)\">\n <i class=\"fa-solid\"\n [class.fa-circle-check]=\"InfoLastSync.Status === 'Success'\"\n [class.fa-circle-xmark]=\"InfoLastSync.Status === 'Failed'\"\n [class.fa-spinner]=\"InfoLastSync.Status === 'In Progress'\"\n [class.fa-clock]=\"InfoLastSync.Status === 'Pending'\"></i>\n </div>\n <div class=\"ve-info-card-content\">\n <span class=\"ve-info-card-value\">{{ InfoLastSync.Status }}</span>\n <span class=\"ve-info-card-label\">{{ InfoLastSync.TotalRecords }} records processed</span>\n </div>\n </div>\n }\n </div>\n\n <!-- Configuration details -->\n <div class=\"ve-info-details\">\n <div class=\"ve-info-detail-row\">\n <span class=\"ve-info-detail-label\">Sync Direction</span>\n <span class=\"ve-info-detail-value\">{{ EditorEntityMap?.SyncDirection }}</span>\n </div>\n <div class=\"ve-info-detail-row\">\n <span class=\"ve-info-detail-label\">Conflict Resolution</span>\n <span class=\"ve-info-detail-value\">{{ EditorEntityMap?.ConflictResolution }}</span>\n </div>\n <div class=\"ve-info-detail-row\">\n <span class=\"ve-info-detail-label\">Delete Behavior</span>\n <span class=\"ve-info-detail-value\">{{ EditorEntityMap?.DeleteBehavior }}</span>\n </div>\n <div class=\"ve-info-detail-row\">\n <span class=\"ve-info-detail-label\">Priority</span>\n <span class=\"ve-info-detail-value\">{{ EditorEntityMap?.Priority }}</span>\n </div>\n @if (EditorEntityMap?.MatchStrategy) {\n <div class=\"ve-info-detail-row\">\n <span class=\"ve-info-detail-label\">Match Strategy</span>\n <span class=\"ve-info-detail-value\">Configured</span>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Transform editor panel (right side, appears when connection selected) -->\n @if (SelectedConnection; as conn) {\n <div class=\"ve-transform-panel\" (click)=\"$event.stopPropagation()\">\n <div class=\"ve-tp-header\">\n <span class=\"ve-tp-title\">Mapping Details</span>\n <button class=\"ve-tp-close\" (click)=\"DeselectConnection()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n\n <!-- Source \u2192 Dest -->\n <div class=\"ve-tp-mapping-info\">\n <div class=\"ve-tp-field-pair\">\n <span class=\"ve-tp-field source\">{{ conn.SourceFieldName }}</span>\n <i class=\"fa-solid ve-tp-arrow\"\n [class.fa-arrow-right]=\"conn.Direction === 'SourceToDest'\"\n [class.fa-arrow-left]=\"conn.Direction === 'DestToSource'\"\n [class.fa-right-left]=\"conn.Direction === 'Both'\"></i>\n <span class=\"ve-tp-field dest\">{{ conn.DestFieldName }}</span>\n </div>\n </div>\n\n <!-- Toggles -->\n <div class=\"ve-tp-toggles\">\n <label class=\"ve-tp-toggle\" (click)=\"ToggleConnectionKey()\">\n <span class=\"ve-tp-toggle-box\" [class.active]=\"conn.IsKeyField\">\n @if (conn.IsKeyField) { <i class=\"fa-solid fa-check\"></i> }\n </span>\n <span>Key Field</span>\n </label>\n <label class=\"ve-tp-toggle\" (click)=\"ToggleConnectionRequired()\">\n <span class=\"ve-tp-toggle-box\" [class.active]=\"conn.IsRequired\">\n @if (conn.IsRequired) { <i class=\"fa-solid fa-check\"></i> }\n </span>\n <span>Required</span>\n </label>\n </div>\n\n <!-- Direction -->\n <div class=\"ve-tp-section\">\n <label class=\"ve-tp-section-label\">Direction</label>\n <div class=\"ve-tp-direction-btns\">\n <button [class.active]=\"conn.Direction === 'SourceToDest'\"\n (click)=\"OnConnectionDirectionChange('SourceToDest')\">\n Source → Dest\n </button>\n <button [class.active]=\"conn.Direction === 'DestToSource'\"\n (click)=\"OnConnectionDirectionChange('DestToSource')\">\n Dest → Source\n </button>\n <button [class.active]=\"conn.Direction === 'Both'\"\n (click)=\"OnConnectionDirectionChange('Both')\">\n Both\n </button>\n </div>\n </div>\n\n <!-- Transform pipeline -->\n <div class=\"ve-tp-section\">\n <div class=\"ve-tp-section-header\">\n <label class=\"ve-tp-section-label\">Transform Pipeline</label>\n <button class=\"ve-tp-add-step\" (click)=\"AddTransformStep()\">\n <i class=\"fa-solid fa-plus\"></i> Add Step\n </button>\n </div>\n\n @for (step of conn.TransformSteps; track $index; let si = $index) {\n <div class=\"ve-tp-step\">\n <div class=\"ve-tp-step-header\">\n <span class=\"ve-tp-step-num\">{{ si + 1 }}</span>\n <select class=\"ve-tp-type-select\"\n [value]=\"step.Type\"\n (change)=\"OnConnectionTransformChange(si, $any($event.target).value)\">\n @for (tt of TRANSFORM_TYPES; track tt.Value) {\n <option [value]=\"tt.Value\" [selected]=\"tt.Value === step.Type\">{{ tt.Label }}</option>\n }\n </select>\n <button class=\"ve-tp-remove-step\" (click)=\"RemoveTransformStep(si)\" title=\"Remove step\">\n <i class=\"fa-solid fa-trash-can\"></i>\n </button>\n </div>\n\n <!-- Config fields based on transform type -->\n @if (step.Type !== 'direct') {\n <div class=\"ve-tp-step-config\">\n @for (key of GetConfigKeys(step); track key) {\n <div class=\"ve-tp-config-row\">\n <label>{{ key }}</label>\n <input type=\"text\"\n [value]=\"GetConfigValue(step, key)\"\n (input)=\"OnTransformConfigChange(conn, si, key, $any($event.target).value)\"\n placeholder=\"{{ key }}\" />\n </div>\n }\n </div>\n }\n\n <!-- On error -->\n <div class=\"ve-tp-step-onerror\">\n <label>On Error:</label>\n <select [value]=\"step.OnError\"\n (change)=\"step.OnError = $any($event.target).value; conn.IsDirty = true\">\n <option value=\"Fail\">Fail</option>\n <option value=\"Skip\">Skip</option>\n <option value=\"Null\">Null</option>\n </select>\n </div>\n </div>\n }\n\n @if (conn.TransformSteps.length === 0) {\n <div class=\"ve-tp-no-steps\">\n No transform steps. Data passes through as-is.\n </div>\n }\n </div>\n\n <!-- Delete mapping button -->\n <div class=\"ve-tp-footer\">\n <button class=\"ve-btn ve-btn-danger\" (click)=\"RemoveSelectedConnection()\">\n <i class=\"fa-solid fa-trash-can\"></i> Remove Mapping\n </button>\n </div>\n </div>\n }\n }\n </div>\n </div>\n }\n</div>\n </mj-page-body>\n</mj-page-layout>\n", styles: ["/* =========================================================================\n Integration Pipelines - Card Layout + Visual Editor\n ========================================================================= */\n\n:host {\n display: flex;\n flex-direction: column;\n height: 100%;\n overflow: hidden;\n}\n\n/* Slot passthrough now in <mj-page-header>; stat badges now via <mj-stat-badge>. */\n\n/* ---------------------------------------------------------------------------\n Container\n --------------------------------------------------------------------------- */\n\n.pipelines-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--mj-bg-page);\n position: relative;\n overflow: hidden;\n}\n\n/* ---------------------------------------------------------------------------\n Toolbar\n --------------------------------------------------------------------------- */\n\n.pipelines-toolbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 20px;\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n z-index: 10;\n}\n\n.toolbar-left {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.toolbar-title {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.toolbar-title i { color: var(--mj-color-indigo-500); }\n\n.toolbar-count-badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 22px;\n height: 22px;\n padding: 0 6px;\n border-radius: 11px;\n background: var(--mj-color-indigo-500);\n color: var(--mj-bg-surface);\n font-size: 11px;\n font-weight: 600;\n}\n\n.toolbar-map-count {\n font-size: 12px;\n color: var(--mj-text-disabled);\n font-weight: 500;\n}\n\n.toolbar-right {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.global-search {\n position: relative;\n display: flex;\n align-items: center;\n}\n\n.search-icon {\n position: absolute;\n left: 10px;\n font-size: 12px;\n color: var(--mj-text-disabled);\n pointer-events: none;\n}\n\n.search-input {\n width: 240px;\n height: 32px;\n padding: 0 12px 0 30px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-page);\n outline: none;\n transition: border-color 150ms ease, background 150ms ease;\n}\n\n.search-input:focus {\n border-color: var(--mj-color-indigo-500);\n background: var(--mj-bg-surface);\n}\n\n.search-input::placeholder { color: var(--mj-color-neutral-300); }\n\n.toolbar-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 150ms ease;\n font-size: 13px;\n}\n\n.toolbar-btn:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-color-neutral-300);\n color: var(--mj-text-primary);\n}\n\n.toolbar-btn:active { background: var(--mj-bg-surface-active); }\n\n.toolbar-divider {\n width: 1px;\n height: 20px;\n background: var(--mj-border-default);\n margin: 0 4px;\n}\n\n/* ---------------------------------------------------------------------------\n Content area\n --------------------------------------------------------------------------- */\n\n.pipelines-content {\n flex: 1;\n display: flex;\n flex-direction: column;\n position: relative;\n overflow: hidden;\n min-height: 0;\n}\n\n.content-loading,\n.content-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n gap: 12px;\n color: var(--mj-text-disabled);\n}\n\n.content-loading i { font-size: 28px; color: var(--mj-color-indigo-500); }\n.content-loading span { font-size: 14px; }\n.content-empty .empty-icon { font-size: 48px; color: var(--mj-color-neutral-300); }\n.content-empty h3 { margin: 0; font-size: 18px; font-weight: 600; color: var(--mj-text-muted); }\n.content-empty p { margin: 0; font-size: 13px; color: var(--mj-text-disabled); }\n\n/* ---------------------------------------------------------------------------\n Cards list\n --------------------------------------------------------------------------- */\n\n.cards-list {\n flex: 1;\n overflow-y: auto;\n padding: 16px 20px;\n display: flex;\n flex-direction: column;\n gap: 12px;\n max-width: 1200px;\n margin: 0 auto;\n width: 100%;\n box-sizing: border-box;\n min-height: 0;\n}\n\n/* ---------------------------------------------------------------------------\n Pipeline card\n --------------------------------------------------------------------------- */\n\n.pipeline-card {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n overflow: hidden;\n transition: box-shadow 200ms ease, border-color 200ms ease;\n}\n\n.pipeline-card:hover { box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06); }\n\n.pipeline-card.expanded {\n border-color: var(--mj-color-indigo-100);\n box-shadow: 0 2px 12px rgba(99, 102, 241, 0.08);\n}\n\n/* Card header */\n.card-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 14px 18px;\n cursor: pointer;\n user-select: none;\n transition: background 150ms ease;\n}\n\n.card-header:hover { background: var(--mj-bg-page); }\n\n.card-header-left {\n display: flex;\n align-items: center;\n gap: 12px;\n min-width: 0;\n flex: 1;\n}\n\n.card-status-dot { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; }\n\n.card-icon {\n font-size: 18px;\n color: var(--mj-brand-primary);\n flex-shrink: 0;\n width: 24px;\n text-align: center;\n}\n\n.card-info { display: flex; flex-direction: column; gap: 2px; min-width: 0; }\n\n.card-name {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.card-meta { font-size: 12px; color: var(--mj-text-disabled); }\n.meta-sep { color: var(--mj-color-neutral-300); margin: 0 2px; }\n\n.card-header-right {\n display: flex;\n align-items: center;\n gap: 14px;\n flex-shrink: 0;\n}\n\n.card-status-label { font-size: 12px; font-weight: 600; }\n.card-last-sync { font-size: 11px; color: var(--mj-text-disabled); }\n\n/* Mini flow indicator */\n.mini-flow { display: flex; align-items: center; gap: 4px; }\n.mini-flow-dot { width: 8px; height: 8px; border-radius: 50%; }\n.mini-flow-dot.source { background: var(--mj-brand-primary); }\n.mini-flow-dot.dest { background: var(--mj-color-success-600); }\n.mini-flow-line { width: 16px; height: 2px; background: var(--mj-border-default); border-radius: 1px; }\n.mini-flow-count {\n font-size: 10px; font-weight: 700; color: var(--mj-color-indigo-500);\n background: var(--mj-color-indigo-50); padding: 1px 5px; border-radius: 4px;\n}\n\n.card-chevron { font-size: 12px; color: var(--mj-text-disabled); transition: transform 200ms ease; }\n\n/* ---------------------------------------------------------------------------\n Card body (expanded entity maps)\n --------------------------------------------------------------------------- */\n\n.card-body {\n border-top: 1px solid var(--mj-border-subtle);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n min-height: 0;\n /* When card is expanded, card-body takes remaining space in the cards-list scroll area.\n Limit to ~60vh so the table body scrolls internally while headers stay pinned. */\n max-height: 60vh;\n}\n\n/* Search bar within card */\n.card-search-bar {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 18px;\n border-bottom: 1px solid var(--mj-border-subtle);\n flex-shrink: 0;\n}\n\n.card-search-icon { font-size: 11px; color: var(--mj-text-disabled); flex-shrink: 0; }\n\n.card-search-input {\n flex: 1;\n height: 28px;\n padding: 0 8px;\n border: 1px solid var(--mj-border-default);\n border-radius: 5px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-page);\n outline: none;\n transition: border-color 150ms ease;\n}\n\n.card-search-input:focus { border-color: var(--mj-color-indigo-500); background: var(--mj-bg-surface); }\n.card-search-input::placeholder { color: var(--mj-color-neutral-300); }\n.card-search-count { font-size: 11px; color: var(--mj-text-disabled); white-space: nowrap; flex-shrink: 0; }\n\n/* Map table header */\n.map-table-head {\n display: flex;\n align-items: center;\n padding: 6px 18px;\n font-size: 10px;\n font-weight: 600;\n color: var(--mj-text-disabled);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-page);\n flex-shrink: 0;\n}\n\n/* Map table body \u2014 scrolls within the constrained card-body */\n.map-table-body {\n flex: 1;\n overflow-y: auto;\n min-height: 0;\n}\n\n.map-table-empty {\n padding: 24px 18px;\n text-align: center;\n color: var(--mj-text-disabled);\n font-size: 13px;\n}\n\n/* Map table columns */\n/* map-col-toggle width is set in the sync toggle section above */\n.map-col-source { flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n.map-col-direction { width: 52px; flex-shrink: 0; display: flex; align-items: center; justify-content: center; }\n.map-col-dest { flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n.map-col-meta { width: 80px; flex-shrink: 0; display: flex; align-items: center; justify-content: flex-end; gap: 4px; }\n\n/* Map row */\n.map-row {\n display: flex;\n align-items: center;\n padding: 8px 18px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: background 150ms ease;\n border-bottom: 1px solid var(--mj-bg-page);\n}\n\n.map-row:hover { background: var(--mj-color-indigo-50); }\n.map-row.sync-disabled { opacity: 0.55; }\n.map-row.sync-disabled:hover { opacity: 0.8; }\n\n/* map-status-dot removed \u2014 replaced by sync-toggle */\n\n.map-config-badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n border-radius: 4px;\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-disabled);\n font-size: 10px;\n}\n\n.map-edit-hint {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n border-radius: 4px;\n color: var(--mj-color-neutral-300);\n font-size: 11px;\n transition: color 150ms ease;\n}\n\n.map-row:hover .map-edit-hint { color: var(--mj-color-indigo-500); }\n\n/* ---------------------------------------------------------------------------\n Sync toggle column\n --------------------------------------------------------------------------- */\n\n.map-col-toggle {\n width: 50px;\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.sync-toggle {\n position: relative;\n display: inline-flex;\n align-items: center;\n cursor: pointer;\n}\n\n.sync-toggle input {\n position: absolute;\n opacity: 0;\n width: 0;\n height: 0;\n}\n\n.sync-toggle-track {\n width: 30px;\n height: 16px;\n border-radius: 8px;\n background: var(--mj-color-neutral-300);\n position: relative;\n transition: background 200ms ease;\n}\n\n.sync-toggle-track::after {\n content: '';\n position: absolute;\n top: 2px;\n left: 2px;\n width: 12px;\n height: 12px;\n border-radius: 50%;\n background: var(--mj-bg-surface);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15);\n transition: transform 200ms ease;\n}\n\n.sync-toggle input:checked + .sync-toggle-track {\n background: var(--mj-color-success-600);\n}\n\n.sync-toggle input:checked + .sync-toggle-track::after {\n transform: translateX(14px);\n}\n\n/* ---------------------------------------------------------------------------\n Direction Badges\n --------------------------------------------------------------------------- */\n\n.direction-badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 36px;\n height: 20px;\n padding: 0 6px;\n border-radius: 4px;\n font-size: 10px;\n font-weight: 700;\n line-height: 1;\n flex-shrink: 0;\n}\n\n.direction-badge.pull { background: var(--mj-color-info-100); color: var(--mj-brand-primary); }\n.direction-badge.push { background: var(--mj-color-success-100); color: var(--mj-color-success-600); }\n.direction-badge.bidirectional { background: var(--mj-color-warning-100); color: var(--mj-color-warning-600); }\n\n/* =========================================================================\n VISUAL EDITOR (inline panel, replaces map list)\n ========================================================================= */\n\n.ve-container {\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow: hidden;\n background: var(--mj-bg-surface);\n animation: slideIn 250ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n@keyframes slideIn {\n from { opacity: 0; transform: translateX(30px); }\n to { opacity: 1; transform: translateX(0); }\n}\n\n@keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n/* ---------------------------------------------------------------------------\n VE Header\n --------------------------------------------------------------------------- */\n\n.ve-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 14px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n gap: 16px;\n}\n\n.ve-header-left {\n display: flex;\n align-items: center;\n gap: 12px;\n min-width: 0;\n}\n\n.ve-back-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-muted);\n cursor: pointer;\n font-size: 14px;\n flex-shrink: 0;\n transition: all 150ms ease;\n}\n\n.ve-back-btn:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); }\n\n.ve-header-title {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 15px;\n font-weight: 600;\n min-width: 0;\n}\n\n.ve-source-label {\n color: var(--mj-color-indigo-500);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 200px;\n}\n\n.ve-direction-arrow { color: var(--mj-text-disabled); font-size: 13px; flex-shrink: 0; }\n\n.ve-dest-label {\n color: var(--mj-color-success-600);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 200px;\n}\n\n.ve-header-stats {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-shrink: 0;\n}\n\n.ve-stat {\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n.ve-stat strong {\n color: var(--mj-text-primary);\n font-weight: 700;\n}\n\n.ve-stat-sep {\n width: 1px;\n height: 14px;\n background: var(--mj-border-default);\n}\n\n.ve-header-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-shrink: 0;\n}\n\n.ve-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 7px 14px;\n border-radius: 7px;\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 150ms ease;\n border: none;\n white-space: nowrap;\n}\n\n.ve-btn-ghost {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-default);\n}\n\n.ve-btn-ghost:hover { background: var(--mj-bg-surface-active); color: var(--mj-text-primary); }\n\n.ve-btn-primary {\n background: var(--mj-color-indigo-500);\n color: var(--mj-bg-surface);\n}\n\n.ve-btn-primary:hover { background: var(--mj-color-indigo-600); }\n.ve-btn-primary:disabled { opacity: 0.5; cursor: default; }\n\n.ve-btn-danger {\n background: var(--mj-status-error-bg);\n color: var(--mj-color-error-600);\n border: 1px solid var(--mj-color-error-200);\n}\n\n.ve-btn-danger:hover { background: var(--mj-color-error-100); }\n\n.ve-error-msg {\n color: var(--mj-status-error);\n font-size: 0.8125rem;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n margin-left: 8px;\n}\n\n.ve-save-success {\n font-size: 12px;\n color: var(--mj-color-success-600);\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 4px;\n animation: fadeIn 300ms ease;\n}\n\n/* Sync toggle in editor header */\n.ve-sync-toggle { flex-shrink: 0; margin-left: 8px; }\n.ve-sync-label {\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-muted);\n flex-shrink: 0;\n}\n\n/* Action separator */\n.ve-action-sep {\n width: 1px;\n height: 20px;\n background: var(--mj-border-default);\n flex-shrink: 0;\n}\n\n/* Active state for preview toggle buttons */\n.ve-btn-ghost.active {\n background: var(--mj-color-indigo-50);\n color: var(--mj-color-indigo-600);\n border-color: var(--mj-color-indigo-200);\n}\n\n/* ---------------------------------------------------------------------------\n Data Preview Strip\n --------------------------------------------------------------------------- */\n\n.ve-preview-strip {\n display: flex;\n gap: 1px;\n background: var(--mj-border-default);\n border-bottom: 1px solid var(--mj-border-default);\n max-height: 220px;\n flex-shrink: 0;\n overflow: hidden;\n}\n\n.ve-preview-panel {\n flex: 1;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-page);\n overflow: hidden;\n}\n\n.ve-preview-header {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 14px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n border-bottom: 1px solid var(--mj-border-subtle);\n flex-shrink: 0;\n}\n\n.ve-preview-header i { font-size: 11px; color: var(--mj-color-indigo-500); }\n.ve-preview-header span { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n\n.ve-preview-close {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n border: none;\n border-radius: 4px;\n background: transparent;\n color: var(--mj-text-disabled);\n cursor: pointer;\n font-size: 11px;\n flex-shrink: 0;\n}\n\n.ve-preview-close:hover { background: var(--mj-bg-surface-active); color: var(--mj-text-secondary); }\n\n.ve-preview-loading,\n.ve-preview-empty {\n padding: 20px;\n text-align: center;\n color: var(--mj-text-disabled);\n font-size: 12px;\n}\n\n.ve-preview-loading i { margin-right: 6px; color: var(--mj-color-indigo-500); }\n\n.ve-preview-table-wrap {\n flex: 1;\n overflow: auto;\n}\n\n.ve-preview-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 11px;\n}\n\n.ve-preview-table th {\n position: sticky;\n top: 0;\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-muted);\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n font-size: 10px;\n padding: 5px 10px;\n text-align: left;\n white-space: nowrap;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.ve-preview-table td {\n padding: 4px 10px;\n color: var(--mj-text-primary);\n border-bottom: 1px solid var(--mj-border-subtle);\n max-width: 180px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.ve-preview-table tbody tr:hover td {\n background: var(--mj-color-indigo-50);\n}\n\n/* ---------------------------------------------------------------------------\n Connect mode banner\n --------------------------------------------------------------------------- */\n\n.ve-connect-banner {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 20px;\n background: var(--mj-color-indigo-50);\n color: var(--mj-color-indigo-700);\n font-size: 13px;\n border-bottom: 1px solid var(--mj-color-indigo-100);\n flex-shrink: 0;\n}\n\n.ve-connect-banner strong { font-weight: 700; }\n\n.ve-connect-cancel {\n margin-left: auto;\n padding: 3px 10px;\n border: 1px solid var(--mj-color-indigo-100);\n border-radius: 5px;\n background: var(--mj-bg-surface);\n color: var(--mj-color-indigo-700);\n font-size: 12px;\n cursor: pointer;\n transition: all 150ms ease;\n}\n\n.ve-connect-cancel:hover { background: var(--mj-color-indigo-100); }\n\n/* ---------------------------------------------------------------------------\n VE Body\n --------------------------------------------------------------------------- */\n\n.ve-body {\n flex: 1;\n display: flex;\n overflow: hidden;\n}\n\n.ve-loading {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n width: 100%;\n gap: 12px;\n color: var(--mj-text-disabled);\n font-size: 14px;\n}\n\n.ve-loading i { font-size: 24px; color: var(--mj-color-indigo-500); }\n\n/* Sections wrapper (replaces ve-canvas-wrapper as the main left area) */\n.ve-sections-wrapper {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n min-width: 0;\n}\n\n/* Collapsible section */\n.ve-section {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.ve-section:not(.collapsed) {\n flex: 1;\n min-height: 0;\n}\n\n.ve-section.collapsed {\n flex-shrink: 0;\n}\n\n.ve-section-header {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 16px;\n cursor: pointer;\n user-select: none;\n background: var(--mj-bg-page);\n border-bottom: 1px solid var(--mj-border-subtle);\n flex-shrink: 0;\n transition: background 150ms ease;\n}\n\n.ve-section-header:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.ve-section-header i {\n font-size: 10px;\n color: var(--mj-text-disabled);\n width: 12px;\n flex-shrink: 0;\n transition: transform 200ms ease;\n}\n\n.ve-section-title {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.4px;\n color: var(--mj-text-muted);\n}\n\n.ve-section-badge {\n font-size: 10px;\n font-weight: 600;\n background: var(--mj-color-indigo-50);\n color: var(--mj-color-indigo-600);\n padding: 1px 8px;\n border-radius: 4px;\n margin-left: auto;\n}\n\n.ve-section-body {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n min-height: 0;\n animation: fadeIn 200ms ease;\n}\n\n/* Canvas wrapper (takes available space, pushes transform panel right) */\n.ve-canvas-wrapper {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n min-width: 0;\n}\n\n/* ---------------------------------------------------------------------------\n Column headers\n --------------------------------------------------------------------------- */\n\n.ve-col-headers {\n display: grid;\n grid-template-columns: 1fr 200px 1fr;\n flex-shrink: 0;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.ve-col-header {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 16px;\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--mj-text-muted);\n}\n\n.ve-col-header.source i { color: var(--mj-color-indigo-500); }\n.ve-col-header.dest i { color: var(--mj-color-success-600); }\n.ve-col-header-spacer { /* SVG gap */ }\n\n.ve-col-count {\n font-size: 10px;\n font-weight: 600;\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-disabled);\n padding: 1px 6px;\n border-radius: 4px;\n}\n\n/* ---------------------------------------------------------------------------\n Column search bars\n --------------------------------------------------------------------------- */\n\n.ve-col-searches {\n display: grid;\n grid-template-columns: 1fr 200px 1fr;\n flex-shrink: 0;\n border-bottom: 1px solid var(--mj-border-subtle);\n padding: 6px 0;\n}\n\n.ve-col-search {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 0 12px;\n}\n\n.ve-col-search i {\n font-size: 11px;\n color: var(--mj-text-disabled);\n flex-shrink: 0;\n}\n\n.ve-col-search input {\n flex: 1;\n height: 28px;\n padding: 0 8px;\n border: 1px solid var(--mj-border-default);\n border-radius: 5px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-page);\n outline: none;\n transition: border-color 150ms ease;\n}\n\n.ve-col-search input:focus { border-color: var(--mj-color-indigo-500); background: var(--mj-bg-surface); }\n.ve-col-search input::placeholder { color: var(--mj-color-neutral-300); }\n.ve-col-search-spacer { /* SVG gap */ }\n\n/* ---------------------------------------------------------------------------\n Canvas scroll + grid\n --------------------------------------------------------------------------- */\n\n.ve-canvas-scroll {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n}\n\n.ve-canvas-grid {\n display: grid;\n grid-template-columns: 1fr 200px 1fr;\n position: relative;\n}\n\n/* ---------------------------------------------------------------------------\n Field columns\n --------------------------------------------------------------------------- */\n\n.ve-field-col {\n display: flex;\n flex-direction: column;\n}\n\n.ve-field-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 0 14px;\n font-size: 13px;\n cursor: pointer;\n transition: background 150ms ease, opacity 150ms ease;\n border-bottom: 1px solid var(--mj-bg-page);\n box-sizing: border-box;\n}\n\n.ve-field-item.mapped { background: var(--mj-bg-surface); }\n\n.ve-field-item.unmapped {\n opacity: 0.5;\n background: var(--mj-bg-page);\n}\n\n.ve-field-item:hover {\n background: var(--mj-color-indigo-50);\n opacity: 1;\n}\n\n.ve-field-item.connecting {\n background: var(--mj-color-indigo-100);\n opacity: 1;\n box-shadow: inset 0 0 0 2px var(--mj-color-indigo-500);\n}\n\n.ve-field-item.connect-target:hover {\n background: var(--mj-color-success-100);\n box-shadow: inset 0 0 0 2px var(--mj-color-success-600);\n}\n\n.ve-field-name {\n flex: 1;\n min-width: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n color: var(--mj-text-secondary);\n font-weight: 500;\n}\n\n.ve-field-type {\n font-size: 10px;\n color: var(--mj-text-disabled);\n flex-shrink: 0;\n font-family: 'SF Mono', 'Fira Code', monospace;\n}\n\n.ve-field-badges {\n display: flex;\n gap: 3px;\n flex-shrink: 0;\n}\n\n.ve-fbadge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 18px;\n height: 18px;\n padding: 0 3px;\n border-radius: 4px;\n font-size: 9px;\n font-weight: 700;\n}\n\n.ve-fbadge.pk { background: var(--mj-color-warning-100); color: var(--mj-color-warning-700); }\n.ve-fbadge.req { background: var(--mj-color-error-100); color: var(--mj-color-error-600); }\n\n.ve-field-empty {\n padding: 32px 16px;\n text-align: center;\n color: var(--mj-text-disabled);\n font-size: 13px;\n}\n\n/* ---------------------------------------------------------------------------\n SVG connections\n --------------------------------------------------------------------------- */\n\n.ve-svg {\n display: block;\n}\n\n.ve-conn-line {\n fill: none;\n stroke-width: 2;\n cursor: pointer;\n transition: stroke 200ms ease, stroke-width 200ms ease;\n}\n\n/* Transform-based line styles \u2014 categorical data-viz colors */\n.ve-conn-line.conn-direct { stroke: var(--mj-brand-primary); stroke-dasharray: none; }\n.ve-conn-line.conn-regex { stroke: var(--ve-color-regex, #8b5cf6); stroke-dasharray: 6 3; }\n.ve-conn-line.conn-split { stroke: var(--mj-status-warning); stroke-dasharray: 8 4; }\n.ve-conn-line.conn-combine { stroke: var(--mj-status-success); stroke-dasharray: 8 4; }\n.ve-conn-line.conn-lookup { stroke: var(--ve-color-lookup, #0ea5e9); stroke-dasharray: 4 4; }\n.ve-conn-line.conn-format { stroke: var(--ve-color-format, #ec4899); stroke-dasharray: 4 4; }\n.ve-conn-line.conn-coerce { stroke: var(--ve-color-coerce, #f97316); stroke-dasharray: 4 4; }\n.ve-conn-line.conn-substring { stroke: var(--ve-color-substring, #14b8a6); stroke-dasharray: 4 4; }\n.ve-conn-line.conn-custom { stroke: var(--ve-color-custom, #a855f7); stroke-dasharray: 2 3; }\n\n.ve-conn-line:hover { stroke-width: 3.5; }\n.ve-conn-line.selected { stroke-width: 3.5; filter: drop-shadow(0 0 4px rgba(99, 102, 241, 0.4)); }\n\n/* Connection badge at midpoint */\n.ve-badge-fo { overflow: visible; }\n\n.ve-conn-badge {\n width: 28px;\n height: 28px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 11px;\n cursor: pointer;\n transition: all 150ms ease;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12);\n}\n\n.ve-conn-badge.badge-direct { background: var(--mj-brand-primary-subtle); color: var(--mj-brand-primary); border: 2px solid var(--mj-brand-primary); }\n.ve-conn-badge.badge-regex { background: color-mix(in srgb, var(--ve-color-regex, #8b5cf6) 10%, var(--mj-bg-surface)); color: var(--ve-color-regex, #8b5cf6); border: 2px solid var(--ve-color-regex, #8b5cf6); }\n.ve-conn-badge.badge-split { background: var(--mj-status-warning-subtle); color: var(--mj-status-warning); border: 2px solid var(--mj-status-warning); }\n.ve-conn-badge.badge-combine { background: var(--mj-status-success-subtle); color: var(--mj-status-success); border: 2px solid var(--mj-status-success); }\n.ve-conn-badge.badge-lookup { background: color-mix(in srgb, var(--ve-color-lookup, #0ea5e9) 10%, var(--mj-bg-surface)); color: var(--ve-color-lookup, #0ea5e9); border: 2px solid var(--ve-color-lookup, #0ea5e9); }\n.ve-conn-badge.badge-format { background: color-mix(in srgb, var(--ve-color-format, #ec4899) 10%, var(--mj-bg-surface)); color: var(--ve-color-format, #ec4899); border: 2px solid var(--ve-color-format, #ec4899); }\n.ve-conn-badge.badge-coerce { background: color-mix(in srgb, var(--ve-color-coerce, #f97316) 10%, var(--mj-bg-surface)); color: var(--ve-color-coerce, #f97316); border: 2px solid var(--ve-color-coerce, #f97316); }\n.ve-conn-badge.badge-substring { background: color-mix(in srgb, var(--ve-color-substring, #14b8a6) 10%, var(--mj-bg-surface)); color: var(--ve-color-substring, #14b8a6); border: 2px solid var(--ve-color-substring, #14b8a6); }\n.ve-conn-badge.badge-custom { background: color-mix(in srgb, var(--ve-color-custom, #a855f7) 10%, var(--mj-bg-surface)); color: var(--ve-color-custom, #a855f7); border: 2px solid var(--ve-color-custom, #a855f7); }\n\n.ve-conn-badge:hover { transform: scale(1.2); }\n.ve-conn-badge.selected { transform: scale(1.25); box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.3); }\n\n/* ---------------------------------------------------------------------------\n Transform Panel (right side)\n --------------------------------------------------------------------------- */\n\n.ve-transform-panel {\n width: 320px;\n flex-shrink: 0;\n border-left: 1px solid var(--mj-border-default);\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n background: var(--mj-bg-page);\n animation: slideInRight 200ms ease;\n}\n\n@keyframes slideInRight {\n from { opacity: 0; transform: translateX(20px); }\n to { opacity: 1; transform: translateX(0); }\n}\n\n.ve-tp-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 14px 16px;\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.ve-tp-title {\n font-size: 13px;\n font-weight: 700;\n color: var(--mj-text-primary);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.ve-tp-close {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n border: none;\n border-radius: 6px;\n background: transparent;\n color: var(--mj-text-disabled);\n cursor: pointer;\n font-size: 13px;\n transition: all 150ms ease;\n}\n\n.ve-tp-close:hover { background: var(--mj-bg-surface-active); color: var(--mj-text-secondary); }\n\n/* Mapping info */\n.ve-tp-mapping-info {\n padding: 14px 16px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.ve-tp-field-pair {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n}\n\n.ve-tp-field {\n padding: 4px 10px;\n border-radius: 6px;\n font-weight: 600;\n font-size: 12px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 110px;\n}\n\n.ve-tp-field.source { background: var(--mj-color-indigo-50); color: var(--mj-color-indigo-700); }\n.ve-tp-field.dest { background: var(--mj-status-success-bg); color: var(--mj-color-success-700); }\n.ve-tp-arrow { color: var(--mj-text-disabled); font-size: 11px; flex-shrink: 0; }\n\n/* Toggles */\n.ve-tp-toggles {\n display: flex;\n gap: 16px;\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.ve-tp-toggle {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n}\n\n.ve-tp-toggle-box {\n width: 18px;\n height: 18px;\n border: 2px solid var(--mj-color-neutral-300);\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 10px;\n color: var(--mj-bg-surface);\n transition: all 150ms ease;\n}\n\n.ve-tp-toggle-box.active {\n background: var(--mj-color-indigo-500);\n border-color: var(--mj-color-indigo-500);\n}\n\n/* Sections */\n.ve-tp-section {\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.ve-tp-section-label {\n display: block;\n font-size: 10px;\n font-weight: 700;\n color: var(--mj-text-disabled);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n margin-bottom: 8px;\n}\n\n.ve-tp-section-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n\n/* Direction buttons */\n.ve-tp-direction-btns {\n display: flex;\n gap: 0;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.ve-tp-direction-btns button {\n flex: 1;\n padding: 6px 8px;\n border: none;\n background: var(--mj-bg-surface);\n color: var(--mj-text-muted);\n font-size: 11px;\n font-weight: 500;\n cursor: pointer;\n transition: all 150ms ease;\n border-right: 1px solid var(--mj-border-default);\n}\n\n.ve-tp-direction-btns button:last-child { border-right: none; }\n.ve-tp-direction-btns button:hover { background: var(--mj-bg-surface-hover); }\n.ve-tp-direction-btns button.active { background: var(--mj-color-indigo-500); color: var(--mj-bg-surface); }\n\n/* Transform steps */\n.ve-tp-add-step {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n border: 1px solid var(--mj-border-default);\n border-radius: 5px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-muted);\n font-size: 11px;\n cursor: pointer;\n transition: all 150ms ease;\n}\n\n.ve-tp-add-step:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); }\n\n.ve-tp-step {\n margin-top: 8px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n overflow: hidden;\n}\n\n.ve-tp-step-header {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 10px;\n background: var(--mj-bg-page);\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.ve-tp-step-num {\n width: 20px;\n height: 20px;\n border-radius: 50%;\n background: var(--mj-color-indigo-500);\n color: var(--mj-bg-surface);\n font-size: 10px;\n font-weight: 700;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.ve-tp-type-select {\n flex: 1;\n height: 28px;\n padding: 0 8px;\n border: 1px solid var(--mj-border-default);\n border-radius: 5px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface);\n outline: none;\n cursor: pointer;\n}\n\n.ve-tp-type-select:focus { border-color: var(--mj-color-indigo-500); }\n\n.ve-tp-remove-step {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n border: none;\n border-radius: 5px;\n background: transparent;\n color: var(--mj-text-disabled);\n cursor: pointer;\n font-size: 11px;\n transition: all 150ms ease;\n flex-shrink: 0;\n}\n\n.ve-tp-remove-step:hover { background: var(--mj-color-error-100); color: var(--mj-color-error-600); }\n\n.ve-tp-step-config {\n padding: 8px 10px;\n}\n\n.ve-tp-config-row {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 6px;\n}\n\n.ve-tp-config-row:last-child { margin-bottom: 0; }\n\n.ve-tp-config-row label {\n width: 80px;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-muted);\n flex-shrink: 0;\n}\n\n.ve-tp-config-row input {\n flex: 1;\n height: 28px;\n padding: 0 8px;\n border: 1px solid var(--mj-border-default);\n border-radius: 5px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-page);\n outline: none;\n font-family: 'SF Mono', 'Fira Code', monospace;\n}\n\n.ve-tp-config-row input:focus { border-color: var(--mj-color-indigo-500); background: var(--mj-bg-surface); }\n\n.ve-tp-step-onerror {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 10px;\n border-top: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-page);\n}\n\n.ve-tp-step-onerror label {\n font-size: 10px;\n font-weight: 600;\n color: var(--mj-text-disabled);\n flex-shrink: 0;\n}\n\n.ve-tp-step-onerror select {\n height: 24px;\n padding: 0 6px;\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n font-size: 11px;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface);\n outline: none;\n cursor: pointer;\n}\n\n.ve-tp-no-steps {\n padding: 16px;\n text-align: center;\n color: var(--mj-text-disabled);\n font-size: 12px;\n font-style: italic;\n}\n\n/* Footer */\n.ve-tp-footer {\n padding: 14px 16px;\n margin-top: auto;\n flex-shrink: 0;\n}\n\n/* ---------------------------------------------------------------------------\n Scrollbar styling\n --------------------------------------------------------------------------- */\n\n.cards-list::-webkit-scrollbar,\n.map-table-body::-webkit-scrollbar,\n.ve-canvas-scroll::-webkit-scrollbar,\n.ve-transform-panel::-webkit-scrollbar {\n width: 6px;\n height: 6px;\n}\n\n.cards-list::-webkit-scrollbar-track,\n.map-table-body::-webkit-scrollbar-track,\n.ve-canvas-scroll::-webkit-scrollbar-track,\n.ve-transform-panel::-webkit-scrollbar-track {\n background: transparent;\n}\n\n.cards-list::-webkit-scrollbar-thumb,\n.map-table-body::-webkit-scrollbar-thumb,\n.ve-canvas-scroll::-webkit-scrollbar-thumb,\n.ve-transform-panel::-webkit-scrollbar-thumb {\n background: var(--mj-color-neutral-300);\n border-radius: 3px;\n}\n\n.cards-list::-webkit-scrollbar-thumb:hover,\n.map-table-body::-webkit-scrollbar-thumb:hover,\n.ve-canvas-scroll::-webkit-scrollbar-thumb:hover,\n.ve-transform-panel::-webkit-scrollbar-thumb:hover {\n background: var(--mj-text-disabled);\n}\n\n/* ---------------------------------------------------------------------------\n Info Panel\n --------------------------------------------------------------------------- */\n\n.ve-info-body {\n padding: 16px;\n overflow-y: auto;\n}\n\n.ve-info-loading {\n text-align: center;\n color: var(--mj-text-disabled);\n font-size: 13px;\n padding: 20px;\n}\n\n.ve-info-loading i {\n color: var(--mj-color-indigo-500);\n margin-right: 6px;\n}\n\n.ve-info-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));\n gap: 12px;\n margin-bottom: 16px;\n}\n\n.ve-info-card {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 14px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n}\n\n.ve-info-card-icon {\n width: 36px;\n height: 36px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 14px;\n flex-shrink: 0;\n background: var(--mj-color-indigo-50);\n color: var(--mj-color-indigo-500);\n}\n\n.ve-info-card-icon.source {\n background: var(--mj-color-info-100);\n color: var(--mj-brand-primary);\n}\n\n.ve-info-card-icon.sync {\n background: var(--mj-color-success-100);\n color: var(--mj-color-success-600);\n}\n\n.ve-info-card-icon.info-status-success {\n background: var(--mj-color-success-100);\n color: var(--mj-color-success-600);\n}\n\n.ve-info-card-icon.info-status-error {\n background: var(--mj-color-error-100);\n color: var(--mj-color-error-600);\n}\n\n.ve-info-card-icon.info-status-running {\n background: var(--mj-color-info-100);\n color: var(--mj-brand-primary);\n}\n\n.ve-info-card-icon.info-status-pending {\n background: var(--mj-color-warning-100);\n color: var(--mj-color-warning-600);\n}\n\n.ve-info-card-content {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n}\n\n.ve-info-card-value {\n font-size: 16px;\n font-weight: 700;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.ve-info-card-label {\n font-size: 11px;\n color: var(--mj-text-disabled);\n font-weight: 500;\n}\n\n.ve-info-details {\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n overflow: hidden;\n}\n\n.ve-info-detail-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 14px;\n font-size: 12px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.ve-info-detail-row:last-child {\n border-bottom: none;\n}\n\n.ve-info-detail-label {\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n.ve-info-detail-value {\n color: var(--mj-text-primary);\n font-weight: 600;\n}\n"] }]
|
|
2115
2119
|
}], null, null); })();
|
|
2116
2120
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PipelinesComponent, { className: "PipelinesComponent", filePath: "src/Integration/components/pipelines/pipelines.component.ts", lineNumber: 80 }); })();
|
|
2117
2121
|
export function LoadPipelinesComponent() {
|