@memberjunction/ng-dashboards 5.34.1 → 5.36.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (407) hide show
  1. package/dist/AI/components/agents/agent-configuration.component.d.ts +51 -0
  2. package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
  3. package/dist/AI/components/agents/agent-configuration.component.js +399 -292
  4. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  5. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts +8 -2
  6. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts.map +1 -1
  7. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js +87 -85
  8. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js.map +1 -1
  9. package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts +96 -0
  10. package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts.map +1 -1
  11. package/dist/AI/components/analytics/ai-analytics-resource.component.js +453 -122
  12. package/dist/AI/components/analytics/ai-analytics-resource.component.js.map +1 -1
  13. package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts +5 -0
  14. package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts.map +1 -1
  15. package/dist/AI/components/analytics/analytics-filter-bar.component.js +184 -135
  16. package/dist/AI/components/analytics/analytics-filter-bar.component.js.map +1 -1
  17. package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts +8 -2
  18. package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts.map +1 -1
  19. package/dist/AI/components/analytics/cost-budget/cost-budget.component.js +104 -103
  20. package/dist/AI/components/analytics/cost-budget/cost-budget.component.js.map +1 -1
  21. package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts +8 -2
  22. package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts.map +1 -1
  23. package/dist/AI/components/analytics/error-analysis/error-analysis.component.js +76 -74
  24. package/dist/AI/components/analytics/error-analysis/error-analysis.component.js.map +1 -1
  25. package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts.map +1 -1
  26. package/dist/AI/components/analytics/executive-summary/executive-summary.component.js +67 -87
  27. package/dist/AI/components/analytics/executive-summary/executive-summary.component.js.map +1 -1
  28. package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts +12 -19
  29. package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts.map +1 -1
  30. package/dist/AI/components/analytics/model-performance/model-performance.component.js +96 -203
  31. package/dist/AI/components/analytics/model-performance/model-performance.component.js.map +1 -1
  32. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts.map +1 -1
  33. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js +110 -126
  34. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js.map +1 -1
  35. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts.map +1 -1
  36. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js +61 -77
  37. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js.map +1 -1
  38. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +28 -0
  39. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
  40. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +2084 -2079
  41. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
  42. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +6 -3
  43. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
  44. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +493 -490
  45. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
  46. package/dist/AI/components/models/model-management.component.d.ts +17 -0
  47. package/dist/AI/components/models/model-management.component.d.ts.map +1 -1
  48. package/dist/AI/components/models/model-management.component.js +370 -425
  49. package/dist/AI/components/models/model-management.component.js.map +1 -1
  50. package/dist/AI/components/prompts/prompt-management.component.d.ts +17 -0
  51. package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
  52. package/dist/AI/components/prompts/prompt-management.component.js +317 -357
  53. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  54. package/dist/AI/components/requests/agent-requests-resource.component.d.ts +11 -0
  55. package/dist/AI/components/requests/agent-requests-resource.component.d.ts.map +1 -1
  56. package/dist/AI/components/requests/agent-requests-resource.component.js +170 -175
  57. package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
  58. package/dist/AI/components/system/system-configuration.component.d.ts +19 -0
  59. package/dist/AI/components/system/system-configuration.component.d.ts.map +1 -1
  60. package/dist/AI/components/system/system-configuration.component.js +403 -362
  61. package/dist/AI/components/system/system-configuration.component.js.map +1 -1
  62. package/dist/AI/components/tags/tags-resource.component.d.ts +15 -0
  63. package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
  64. package/dist/AI/components/tags/tags-resource.component.js +1423 -1438
  65. package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
  66. package/dist/AI/components/vectors/vector-management-resource.component.d.ts +8 -3
  67. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
  68. package/dist/AI/components/vectors/vector-management-resource.component.js +547 -521
  69. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  70. package/dist/APIKeys/api-keys-resource.component.d.ts +12 -8
  71. package/dist/APIKeys/api-keys-resource.component.d.ts.map +1 -1
  72. package/dist/APIKeys/api-keys-resource.component.js +329 -371
  73. package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
  74. package/dist/Actions/components/actions-overview.component.d.ts +6 -0
  75. package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
  76. package/dist/Actions/components/actions-overview.component.js +202 -158
  77. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  78. package/dist/Actions/components/execution-monitoring.component.d.ts +9 -3
  79. package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
  80. package/dist/Actions/components/execution-monitoring.component.js +191 -142
  81. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  82. package/dist/Actions/components/explorer/action-explorer.component.d.ts +41 -1
  83. package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -1
  84. package/dist/Actions/components/explorer/action-explorer.component.js +388 -94
  85. package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
  86. package/dist/Actions/components/explorer/index.d.ts +0 -1
  87. package/dist/Actions/components/explorer/index.d.ts.map +1 -1
  88. package/dist/Actions/components/explorer/index.js +0 -1
  89. package/dist/Actions/components/explorer/index.js.map +1 -1
  90. package/dist/Admin/admin-data-schema.component.js +19 -79
  91. package/dist/Admin/admin-data-schema.component.js.map +1 -1
  92. package/dist/Admin/admin-dev-tools-resource.component.js +19 -79
  93. package/dist/Admin/admin-dev-tools-resource.component.js.map +1 -1
  94. package/dist/Admin/admin-identity-access.component.js +19 -79
  95. package/dist/Admin/admin-identity-access.component.js.map +1 -1
  96. package/dist/Admin/admin-monitoring.component.js +19 -79
  97. package/dist/Admin/admin-monitoring.component.js.map +1 -1
  98. package/dist/Admin/base-admin-container.component.d.ts +9 -7
  99. package/dist/Admin/base-admin-container.component.d.ts.map +1 -1
  100. package/dist/Admin/base-admin-container.component.js +26 -17
  101. package/dist/Admin/base-admin-container.component.js.map +1 -1
  102. package/dist/ApplicationRoles/application-roles-resource.component.js +92 -91
  103. package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
  104. package/dist/Archiving/components/archive-config-resource.component.d.ts.map +1 -1
  105. package/dist/Archiving/components/archive-config-resource.component.js +24 -5
  106. package/dist/Archiving/components/archive-config-resource.component.js.map +1 -1
  107. package/dist/Archiving/components/archive-runs-resource.component.d.ts.map +1 -1
  108. package/dist/Archiving/components/archive-runs-resource.component.js +24 -5
  109. package/dist/Archiving/components/archive-runs-resource.component.js.map +1 -1
  110. package/dist/Communication/communication-logs-resource.component.d.ts +1 -1
  111. package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
  112. package/dist/Communication/communication-logs-resource.component.js +80 -99
  113. package/dist/Communication/communication-logs-resource.component.js.map +1 -1
  114. package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
  115. package/dist/Communication/communication-monitor-resource.component.js +127 -106
  116. package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
  117. package/dist/Communication/communication-new-message-resource.component.d.ts +93 -0
  118. package/dist/Communication/communication-new-message-resource.component.d.ts.map +1 -0
  119. package/dist/Communication/communication-new-message-resource.component.js +661 -0
  120. package/dist/Communication/communication-new-message-resource.component.js.map +1 -0
  121. package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
  122. package/dist/Communication/communication-providers-resource.component.js +44 -45
  123. package/dist/Communication/communication-providers-resource.component.js.map +1 -1
  124. package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
  125. package/dist/Communication/communication-runs-resource.component.js +60 -58
  126. package/dist/Communication/communication-runs-resource.component.js.map +1 -1
  127. package/dist/Communication/communication-templates-resource.component.d.ts +1 -1
  128. package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -1
  129. package/dist/Communication/communication-templates-resource.component.js +139 -162
  130. package/dist/Communication/communication-templates-resource.component.js.map +1 -1
  131. package/dist/Credentials/components/credentials-audit-resource.component.d.ts +7 -0
  132. package/dist/Credentials/components/credentials-audit-resource.component.d.ts.map +1 -1
  133. package/dist/Credentials/components/credentials-audit-resource.component.js +310 -297
  134. package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
  135. package/dist/Credentials/components/credentials-categories-resource.component.js +238 -266
  136. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  137. package/dist/Credentials/components/credentials-list-resource.component.d.ts +7 -0
  138. package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
  139. package/dist/Credentials/components/credentials-list-resource.component.js +381 -399
  140. package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
  141. package/dist/Credentials/components/credentials-overview-resource.component.js +222 -228
  142. package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
  143. package/dist/Credentials/components/credentials-types-resource.component.d.ts +6 -0
  144. package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
  145. package/dist/Credentials/components/credentials-types-resource.component.js +290 -305
  146. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  147. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts +8 -0
  148. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts.map +1 -1
  149. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +41 -21
  150. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js.map +1 -1
  151. package/dist/DatabaseDesigner/components/entity-list.component.d.ts +2 -0
  152. package/dist/DatabaseDesigner/components/entity-list.component.d.ts.map +1 -1
  153. package/dist/DatabaseDesigner/components/entity-list.component.js +148 -155
  154. package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -1
  155. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +1 -1
  156. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -1
  157. package/dist/DatabaseDesigner/database-designer-dashboards.module.js +25 -1
  158. package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -1
  159. package/dist/DevTools/app-state-inspector.component.d.ts +5 -0
  160. package/dist/DevTools/app-state-inspector.component.d.ts.map +1 -1
  161. package/dist/DevTools/app-state-inspector.component.js +46 -72
  162. package/dist/DevTools/app-state-inspector.component.js.map +1 -1
  163. package/dist/DevTools/class-registry.component.js +88 -100
  164. package/dist/DevTools/class-registry.component.js.map +1 -1
  165. package/dist/DevTools/event-monitor.component.js +158 -168
  166. package/dist/DevTools/event-monitor.component.js.map +1 -1
  167. package/dist/DevTools/graphql-console.component.js +257 -264
  168. package/dist/DevTools/graphql-console.component.js.map +1 -1
  169. package/dist/DevTools/layout-inspector.component.d.ts +5 -0
  170. package/dist/DevTools/layout-inspector.component.d.ts.map +1 -1
  171. package/dist/DevTools/layout-inspector.component.js +46 -64
  172. package/dist/DevTools/layout-inspector.component.js.map +1 -1
  173. package/dist/DevTools/lazy-module-status.component.js +75 -84
  174. package/dist/DevTools/lazy-module-status.component.js.map +1 -1
  175. package/dist/DevTools/settings-explorer.component.js +76 -85
  176. package/dist/DevTools/settings-explorer.component.js.map +1 -1
  177. package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts +2 -0
  178. package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
  179. package/dist/EntityAdmin/entity-admin-dashboard.component.js +24 -16
  180. package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
  181. package/dist/Home/home-dashboard.component.d.ts +6 -0
  182. package/dist/Home/home-dashboard.component.d.ts.map +1 -1
  183. package/dist/Home/home-dashboard.component.js +521 -485
  184. package/dist/Home/home-dashboard.component.js.map +1 -1
  185. package/dist/Integration/components/activity/activity.component.d.ts +8 -0
  186. package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
  187. package/dist/Integration/components/activity/activity.component.js +307 -318
  188. package/dist/Integration/components/activity/activity.component.js.map +1 -1
  189. package/dist/Integration/components/connections/connections.component.js +654 -648
  190. package/dist/Integration/components/connections/connections.component.js.map +1 -1
  191. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +234 -233
  192. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
  193. package/dist/Integration/components/overview/overview.component.js +182 -163
  194. package/dist/Integration/components/overview/overview.component.js.map +1 -1
  195. package/dist/Integration/components/pipelines/pipelines.component.d.ts +2 -0
  196. package/dist/Integration/components/pipelines/pipelines.component.d.ts.map +1 -1
  197. package/dist/Integration/components/pipelines/pipelines.component.js +595 -606
  198. package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
  199. package/dist/Integration/components/schedules/schedules.component.js +230 -241
  200. package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
  201. package/dist/Integration/integration.module.d.ts +1 -1
  202. package/dist/Integration/integration.module.d.ts.map +1 -1
  203. package/dist/Integration/integration.module.js +28 -1
  204. package/dist/Integration/integration.module.js.map +1 -1
  205. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts +5 -0
  206. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts.map +1 -1
  207. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +1138 -1147
  208. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
  209. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +54 -51
  210. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
  211. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts +11 -0
  212. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts.map +1 -1
  213. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +684 -697
  214. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
  215. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts +12 -1
  216. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts.map +1 -1
  217. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +191 -120
  218. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -1
  219. package/dist/Lists/components/lists-browse-resource.component.d.ts +120 -1
  220. package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
  221. package/dist/Lists/components/lists-browse-resource.component.js +1239 -610
  222. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  223. package/dist/Lists/components/lists-categories-resource.component.d.ts.map +1 -1
  224. package/dist/Lists/components/lists-categories-resource.component.js +152 -160
  225. package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
  226. package/dist/Lists/components/lists-my-lists-resource.component.d.ts.map +1 -1
  227. package/dist/Lists/components/lists-my-lists-resource.component.js +302 -319
  228. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  229. package/dist/Lists/components/lists-operations-resource.component.d.ts +133 -3
  230. package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
  231. package/dist/Lists/components/lists-operations-resource.component.js +1460 -272
  232. package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
  233. package/dist/Lists/components/lists-shared-with-me-resource.component.d.ts +29 -0
  234. package/dist/Lists/components/lists-shared-with-me-resource.component.d.ts.map +1 -0
  235. package/dist/Lists/components/lists-shared-with-me-resource.component.js +77 -0
  236. package/dist/Lists/components/lists-shared-with-me-resource.component.js.map +1 -0
  237. package/dist/Lists/components/venn-diagram/venn-diagram.component.d.ts +6 -0
  238. package/dist/Lists/components/venn-diagram/venn-diagram.component.d.ts.map +1 -1
  239. package/dist/Lists/components/venn-diagram/venn-diagram.component.js +35 -7
  240. package/dist/Lists/components/venn-diagram/venn-diagram.component.js.map +1 -1
  241. package/dist/Lists/index.d.ts +1 -0
  242. package/dist/Lists/index.d.ts.map +1 -1
  243. package/dist/Lists/index.js +1 -0
  244. package/dist/Lists/index.js.map +1 -1
  245. package/dist/Lists/services/list-set-operations.service.d.ts +93 -2
  246. package/dist/Lists/services/list-set-operations.service.d.ts.map +1 -1
  247. package/dist/Lists/services/list-set-operations.service.js +236 -10
  248. package/dist/Lists/services/list-set-operations.service.js.map +1 -1
  249. package/dist/MCP/mcp-dashboard.component.d.ts +20 -0
  250. package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
  251. package/dist/MCP/mcp-dashboard.component.js +1248 -1338
  252. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  253. package/dist/MCP/mcp.module.d.ts +1 -1
  254. package/dist/MCP/mcp.module.d.ts.map +1 -1
  255. package/dist/MCP/mcp.module.js +34 -1
  256. package/dist/MCP/mcp.module.js.map +1 -1
  257. package/dist/Permissions/audit-log-resource.component.js +76 -85
  258. package/dist/Permissions/audit-log-resource.component.js.map +1 -1
  259. package/dist/Permissions/resource-access-resource.component.js +64 -69
  260. package/dist/Permissions/resource-access-resource.component.js.map +1 -1
  261. package/dist/Permissions/user-access-resource.component.js +63 -74
  262. package/dist/Permissions/user-access-resource.component.js.map +1 -1
  263. package/dist/QueryBrowser/query-browser-resource.component.js +2 -2
  264. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  265. package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts +2 -1
  266. package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts.map +1 -1
  267. package/dist/Scheduling/components/scheduling-activity-resource.component.js +11 -12
  268. package/dist/Scheduling/components/scheduling-activity-resource.component.js.map +1 -1
  269. package/dist/Scheduling/components/scheduling-activity.component.d.ts +9 -1
  270. package/dist/Scheduling/components/scheduling-activity.component.d.ts.map +1 -1
  271. package/dist/Scheduling/components/scheduling-activity.component.js +250 -197
  272. package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
  273. package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts +2 -1
  274. package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts.map +1 -1
  275. package/dist/Scheduling/components/scheduling-jobs-resource.component.js +11 -12
  276. package/dist/Scheduling/components/scheduling-jobs-resource.component.js.map +1 -1
  277. package/dist/Scheduling/components/scheduling-jobs.component.d.ts +9 -1
  278. package/dist/Scheduling/components/scheduling-jobs.component.d.ts.map +1 -1
  279. package/dist/Scheduling/components/scheduling-jobs.component.js +203 -147
  280. package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
  281. package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts +2 -1
  282. package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts.map +1 -1
  283. package/dist/Scheduling/components/scheduling-overview-resource.component.js +11 -12
  284. package/dist/Scheduling/components/scheduling-overview-resource.component.js.map +1 -1
  285. package/dist/Scheduling/components/scheduling-overview.component.d.ts +3 -1
  286. package/dist/Scheduling/components/scheduling-overview.component.d.ts.map +1 -1
  287. package/dist/Scheduling/components/scheduling-overview.component.js +224 -190
  288. package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
  289. package/dist/Scheduling/scheduling-dashboard.component.d.ts +19 -6
  290. package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
  291. package/dist/Scheduling/scheduling-dashboard.component.js +259 -103
  292. package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
  293. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts +13 -3
  294. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
  295. package/dist/SystemDiagnostics/system-diagnostics.component.js +1009 -1264
  296. package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
  297. package/dist/Testing/components/testing-analytics-resource.component.d.ts +2 -1
  298. package/dist/Testing/components/testing-analytics-resource.component.d.ts.map +1 -1
  299. package/dist/Testing/components/testing-analytics-resource.component.js +7 -14
  300. package/dist/Testing/components/testing-analytics-resource.component.js.map +1 -1
  301. package/dist/Testing/components/testing-analytics.component.d.ts +3 -1
  302. package/dist/Testing/components/testing-analytics.component.d.ts.map +1 -1
  303. package/dist/Testing/components/testing-analytics.component.js +420 -393
  304. package/dist/Testing/components/testing-analytics.component.js.map +1 -1
  305. package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts +2 -1
  306. package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts.map +1 -1
  307. package/dist/Testing/components/testing-dashboard-tab-resource.component.js +16 -19
  308. package/dist/Testing/components/testing-dashboard-tab-resource.component.js.map +1 -1
  309. package/dist/Testing/components/testing-dashboard-tab.component.d.ts +3 -1
  310. package/dist/Testing/components/testing-dashboard-tab.component.d.ts.map +1 -1
  311. package/dist/Testing/components/testing-dashboard-tab.component.js +157 -122
  312. package/dist/Testing/components/testing-dashboard-tab.component.js.map +1 -1
  313. package/dist/Testing/components/testing-explorer-resource.component.d.ts +2 -1
  314. package/dist/Testing/components/testing-explorer-resource.component.d.ts.map +1 -1
  315. package/dist/Testing/components/testing-explorer-resource.component.js +7 -12
  316. package/dist/Testing/components/testing-explorer-resource.component.js.map +1 -1
  317. package/dist/Testing/components/testing-explorer.component.d.ts +38 -6
  318. package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
  319. package/dist/Testing/components/testing-explorer.component.js +679 -786
  320. package/dist/Testing/components/testing-explorer.component.js.map +1 -1
  321. package/dist/Testing/components/testing-review-resource.component.d.ts +4 -1
  322. package/dist/Testing/components/testing-review-resource.component.d.ts.map +1 -1
  323. package/dist/Testing/components/testing-review-resource.component.js +9 -12
  324. package/dist/Testing/components/testing-review-resource.component.js.map +1 -1
  325. package/dist/Testing/components/testing-review.component.d.ts +3 -1
  326. package/dist/Testing/components/testing-review.component.d.ts.map +1 -1
  327. package/dist/Testing/components/testing-review.component.js +310 -274
  328. package/dist/Testing/components/testing-review.component.js.map +1 -1
  329. package/dist/Testing/components/testing-runs-resource.component.d.ts +2 -1
  330. package/dist/Testing/components/testing-runs-resource.component.d.ts.map +1 -1
  331. package/dist/Testing/components/testing-runs-resource.component.js +16 -19
  332. package/dist/Testing/components/testing-runs-resource.component.js.map +1 -1
  333. package/dist/Testing/components/testing-runs.component.d.ts +3 -1
  334. package/dist/Testing/components/testing-runs.component.d.ts.map +1 -1
  335. package/dist/Testing/components/testing-runs.component.js +307 -273
  336. package/dist/Testing/components/testing-runs.component.js.map +1 -1
  337. package/dist/Testing/testing-dashboard.component.d.ts +2 -0
  338. package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
  339. package/dist/Testing/testing-dashboard.component.js +114 -99
  340. package/dist/Testing/testing-dashboard.component.js.map +1 -1
  341. package/dist/VersionHistory/components/diff-resource.component.js +185 -188
  342. package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
  343. package/dist/VersionHistory/components/graph-resource.component.js +154 -184
  344. package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
  345. package/dist/VersionHistory/components/labels-resource.component.d.ts +7 -0
  346. package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -1
  347. package/dist/VersionHistory/components/labels-resource.component.js +350 -354
  348. package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
  349. package/dist/VersionHistory/components/restore-resource.component.js +163 -169
  350. package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
  351. package/dist/actions-dashboards.module.d.ts +15 -16
  352. package/dist/actions-dashboards.module.d.ts.map +1 -1
  353. package/dist/actions-dashboards.module.js +34 -11
  354. package/dist/actions-dashboards.module.js.map +1 -1
  355. package/dist/ai-dashboards.module.d.ts +45 -48
  356. package/dist/ai-dashboards.module.d.ts.map +1 -1
  357. package/dist/ai-dashboards.module.js +51 -10
  358. package/dist/ai-dashboards.module.js.map +1 -1
  359. package/dist/archiving-dashboards.module.d.ts +2 -1
  360. package/dist/archiving-dashboards.module.d.ts.map +1 -1
  361. package/dist/archiving-dashboards.module.js +12 -2
  362. package/dist/archiving-dashboards.module.js.map +1 -1
  363. package/dist/communication-dashboards.module.d.ts +9 -6
  364. package/dist/communication-dashboards.module.d.ts.map +1 -1
  365. package/dist/communication-dashboards.module.js +37 -7
  366. package/dist/communication-dashboards.module.js.map +1 -1
  367. package/dist/core-dashboards.module.d.ts +1 -1
  368. package/dist/core-dashboards.module.d.ts.map +1 -1
  369. package/dist/core-dashboards.module.js +46 -1
  370. package/dist/core-dashboards.module.js.map +1 -1
  371. package/dist/credentials-dashboards.module.d.ts +1 -1
  372. package/dist/credentials-dashboards.module.d.ts.map +1 -1
  373. package/dist/credentials-dashboards.module.js +28 -1
  374. package/dist/credentials-dashboards.module.js.map +1 -1
  375. package/dist/lists-dashboards.module.d.ts +10 -9
  376. package/dist/lists-dashboards.module.d.ts.map +1 -1
  377. package/dist/lists-dashboards.module.js +40 -2
  378. package/dist/lists-dashboards.module.js.map +1 -1
  379. package/dist/public-api.d.ts +3 -2
  380. package/dist/public-api.d.ts.map +1 -1
  381. package/dist/public-api.js +4 -3
  382. package/dist/public-api.js.map +1 -1
  383. package/dist/scheduling-dashboards.module.d.ts +1 -1
  384. package/dist/scheduling-dashboards.module.d.ts.map +1 -1
  385. package/dist/scheduling-dashboards.module.js +31 -1
  386. package/dist/scheduling-dashboards.module.js.map +1 -1
  387. package/dist/testing-dashboards.module.d.ts +8 -7
  388. package/dist/testing-dashboards.module.d.ts.map +1 -1
  389. package/dist/testing-dashboards.module.js +42 -0
  390. package/dist/testing-dashboards.module.js.map +1 -1
  391. package/package.json +53 -52
  392. package/dist/AI/components/agents/agent-filter-panel.component.d.ts +0 -56
  393. package/dist/AI/components/agents/agent-filter-panel.component.d.ts.map +0 -1
  394. package/dist/AI/components/agents/agent-filter-panel.component.js +0 -285
  395. package/dist/AI/components/agents/agent-filter-panel.component.js.map +0 -1
  396. package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts +0 -49
  397. package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts.map +0 -1
  398. package/dist/AI/components/prompts/prompt-filter-panel.component.js +0 -184
  399. package/dist/AI/components/prompts/prompt-filter-panel.component.js.map +0 -1
  400. package/dist/AI/components/system/system-config-filter-panel.component.d.ts +0 -33
  401. package/dist/AI/components/system/system-config-filter-panel.component.d.ts.map +0 -1
  402. package/dist/AI/components/system/system-config-filter-panel.component.js +0 -144
  403. package/dist/AI/components/system/system-config-filter-panel.component.js.map +0 -1
  404. package/dist/Actions/components/explorer/action-toolbar.component.d.ts +0 -63
  405. package/dist/Actions/components/explorer/action-toolbar.component.d.ts.map +0 -1
  406. package/dist/Actions/components/explorer/action-toolbar.component.js +0 -463
  407. package/dist/Actions/components/explorer/action-toolbar.component.js.map +0 -1
@@ -13,21 +13,22 @@ 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 PipelinesComponent_Conditional_1_Conditional_21_Template(rf, ctx) { if (rf & 1) {
22
- i0.ɵɵelementStart(0, "div", 20);
23
- i0.ɵɵelement(1, "i", 23);
22
+ function PipelinesComponent_Conditional_12_Conditional_1_Template(rf, ctx) { if (rf & 1) {
23
+ i0.ɵɵelementStart(0, "div", 13);
24
+ i0.ɵɵelement(1, "i", 16);
24
25
  i0.ɵɵelementStart(2, "span");
25
26
  i0.ɵɵtext(3, "Loading pipelines...");
26
27
  i0.ɵɵelementEnd()();
27
28
  } }
28
- function PipelinesComponent_Conditional_1_Conditional_22_Template(rf, ctx) { if (rf & 1) {
29
- i0.ɵɵelementStart(0, "div", 21);
30
- i0.ɵɵelement(1, "i", 24);
29
+ function PipelinesComponent_Conditional_12_Conditional_2_Template(rf, ctx) { if (rf & 1) {
30
+ i0.ɵɵelementStart(0, "div", 14);
31
+ i0.ɵɵelement(1, "i", 17);
31
32
  i0.ɵɵelementStart(2, "h3");
32
33
  i0.ɵɵtext(3, "No Integration Pipelines");
33
34
  i0.ɵɵelementEnd();
@@ -35,1099 +36,1062 @@ function PipelinesComponent_Conditional_1_Conditional_22_Template(rf, ctx) { if
35
36
  i0.ɵɵtext(5, "Configure integrations to see data flow pipelines here.");
36
37
  i0.ɵɵelementEnd()();
37
38
  } }
38
- function PipelinesComponent_Conditional_1_Conditional_23_For_2_Conditional_19_Template(rf, ctx) { if (rf & 1) {
39
- i0.ɵɵelementStart(0, "span", 36);
39
+ function PipelinesComponent_Conditional_12_Conditional_3_For_2_Conditional_19_Template(rf, ctx) { if (rf & 1) {
40
+ i0.ɵɵelementStart(0, "span", 29);
40
41
  i0.ɵɵtext(1);
41
42
  i0.ɵɵelementEnd();
42
43
  } if (rf & 2) {
43
- const card_r4 = i0.ɵɵnextContext().$implicit;
44
+ const card_r2 = i0.ɵɵnextContext().$implicit;
44
45
  i0.ɵɵadvance();
45
- i0.ɵɵtextInterpolate(card_r4.LastSync);
46
+ i0.ɵɵtextInterpolate(card_r2.LastSync);
46
47
  } }
47
- function PipelinesComponent_Conditional_1_Conditional_23_For_2_Conditional_28_For_18_Conditional_13_Template(rf, ctx) { if (rf & 1) {
48
- i0.ɵɵelementStart(0, "span", 64);
49
- i0.ɵɵelement(1, "i", 67);
48
+ function PipelinesComponent_Conditional_12_Conditional_3_For_2_Conditional_28_For_18_Conditional_13_Template(rf, ctx) { if (rf & 1) {
49
+ i0.ɵɵelementStart(0, "span", 57);
50
+ i0.ɵɵelement(1, "i", 61);
50
51
  i0.ɵɵelementEnd();
51
52
  } if (rf & 2) {
52
- const em_r7 = i0.ɵɵnextContext().$implicit;
53
- i0.ɵɵproperty("title", "Match: " + em_r7.MatchStrategy);
53
+ const em_r6 = i0.ɵɵnextContext().$implicit;
54
+ i0.ɵɵproperty("title", "Match: " + em_r6.MatchStrategy);
54
55
  } }
55
- function PipelinesComponent_Conditional_1_Conditional_23_For_2_Conditional_28_For_18_Template(rf, ctx) { if (rf & 1) {
56
- const _r6 = i0.ɵɵgetCurrentView();
57
- i0.ɵɵelementStart(0, "div", 57);
58
- i0.ɵɵlistener("click", function PipelinesComponent_Conditional_1_Conditional_23_For_2_Conditional_28_For_18_Template_div_click_0_listener() { const em_r7 = i0.ɵɵrestoreView(_r6).$implicit; const card_r4 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnMapRowClick(card_r4, em_r7)); });
59
- i0.ɵɵelementStart(1, "span", 58);
60
- i0.ɵɵlistener("click", function PipelinesComponent_Conditional_1_Conditional_23_For_2_Conditional_28_For_18_Template_span_click_1_listener($event) { i0.ɵɵrestoreView(_r6); return i0.ɵɵresetView($event.stopPropagation()); });
61
- i0.ɵɵelementStart(2, "label", 59)(3, "input", 60);
62
- i0.ɵɵlistener("change", function PipelinesComponent_Conditional_1_Conditional_23_For_2_Conditional_28_For_18_Template_input_change_3_listener($event) { const em_r7 = i0.ɵɵrestoreView(_r6).$implicit; const card_r4 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnToggleSyncEnabled(card_r4, em_r7, $event)); });
63
- i0.ɵɵelementEnd();
64
- i0.ɵɵelement(4, "span", 61);
56
+ function PipelinesComponent_Conditional_12_Conditional_3_For_2_Conditional_28_For_18_Template(rf, ctx) { if (rf & 1) {
57
+ const _r5 = i0.ɵɵgetCurrentView();
58
+ i0.ɵɵelementStart(0, "div", 50);
59
+ i0.ɵɵlistener("click", function PipelinesComponent_Conditional_12_Conditional_3_For_2_Conditional_28_For_18_Template_div_click_0_listener() { const em_r6 = i0.ɵɵrestoreView(_r5).$implicit; const card_r2 = i0.ɵɵnextContext(2).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.OnMapRowClick(card_r2, em_r6)); });
60
+ i0.ɵɵelementStart(1, "span", 51);
61
+ i0.ɵɵlistener("click", function PipelinesComponent_Conditional_12_Conditional_3_For_2_Conditional_28_For_18_Template_span_click_1_listener($event) { i0.ɵɵrestoreView(_r5); return i0.ɵɵresetView($event.stopPropagation()); });
62
+ i0.ɵɵelementStart(2, "label", 52)(3, "input", 53);
63
+ i0.ɵɵlistener("change", function PipelinesComponent_Conditional_12_Conditional_3_For_2_Conditional_28_For_18_Template_input_change_3_listener($event) { const em_r6 = i0.ɵɵrestoreView(_r5).$implicit; const card_r2 = i0.ɵɵnextContext(2).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.OnToggleSyncEnabled(card_r2, em_r6, $event)); });
64
+ i0.ɵɵelementEnd();
65
+ i0.ɵɵelement(4, "span", 54);
65
66
  i0.ɵɵelementEnd()();
66
- i0.ɵɵelementStart(5, "span", 62);
67
+ i0.ɵɵelementStart(5, "span", 55);
67
68
  i0.ɵɵtext(6);
68
69
  i0.ɵɵelementEnd();
69
- i0.ɵɵelementStart(7, "span", 51)(8, "span");
70
+ i0.ɵɵelementStart(7, "span", 44)(8, "span");
70
71
  i0.ɵɵtext(9);
71
72
  i0.ɵɵelementEnd()();
72
- i0.ɵɵelementStart(10, "span", 63);
73
+ i0.ɵɵelementStart(10, "span", 56);
73
74
  i0.ɵɵtext(11);
74
75
  i0.ɵɵelementEnd();
75
- i0.ɵɵelementStart(12, "span", 53);
76
- i0.ɵɵconditionalCreate(13, PipelinesComponent_Conditional_1_Conditional_23_For_2_Conditional_28_For_18_Conditional_13_Template, 2, 1, "span", 64);
77
- i0.ɵɵelementStart(14, "span", 64);
78
- i0.ɵɵelement(15, "i", 18);
76
+ i0.ɵɵelementStart(12, "span", 46);
77
+ i0.ɵɵconditionalCreate(13, PipelinesComponent_Conditional_12_Conditional_3_For_2_Conditional_28_For_18_Conditional_13_Template, 2, 1, "span", 57);
78
+ i0.ɵɵelementStart(14, "span", 57);
79
+ i0.ɵɵelement(15, "i", 58);
79
80
  i0.ɵɵelementEnd();
80
- i0.ɵɵelementStart(16, "span", 65);
81
- i0.ɵɵelement(17, "i", 66);
81
+ i0.ɵɵelementStart(16, "span", 59);
82
+ i0.ɵɵelement(17, "i", 60);
82
83
  i0.ɵɵelementEnd()()();
83
84
  } if (rf & 2) {
84
- const em_r7 = ctx.$implicit;
85
- const ctx_r1 = i0.ɵɵnextContext(5);
86
- i0.ɵɵclassProp("sync-disabled", !em_r7.SyncEnabled);
85
+ const em_r6 = ctx.$implicit;
86
+ const ctx_r2 = i0.ɵɵnextContext(5);
87
+ i0.ɵɵclassProp("sync-disabled", !em_r6.SyncEnabled);
87
88
  i0.ɵɵadvance(2);
88
- i0.ɵɵproperty("title", em_r7.SyncEnabled ? "Sync enabled \u2014 click to disable" : "Sync disabled \u2014 click to enable");
89
+ i0.ɵɵproperty("title", em_r6.SyncEnabled ? "Sync enabled \u2014 click to disable" : "Sync disabled \u2014 click to enable");
89
90
  i0.ɵɵadvance();
90
- i0.ɵɵproperty("checked", em_r7.SyncEnabled);
91
+ i0.ɵɵproperty("checked", em_r6.SyncEnabled);
91
92
  i0.ɵɵadvance(2);
92
- i0.ɵɵproperty("title", em_r7.ExternalObjectName);
93
+ i0.ɵɵproperty("title", em_r6.ExternalObjectName);
93
94
  i0.ɵɵadvance();
94
- i0.ɵɵtextInterpolate1(" ", em_r7.ExternalObjectLabel ?? em_r7.ExternalObjectName, " ");
95
+ i0.ɵɵtextInterpolate1(" ", em_r6.ExternalObjectLabel ?? em_r6.ExternalObjectName, " ");
95
96
  i0.ɵɵadvance(2);
96
- i0.ɵɵclassMap(ctx_r1.DirectionBadgeClass(em_r7.SyncDirection));
97
+ i0.ɵɵclassMap(ctx_r2.DirectionBadgeClass(em_r6.SyncDirection));
97
98
  i0.ɵɵadvance();
98
- i0.ɵɵtextInterpolate1(" ", ctx_r1.DirectionText(em_r7.SyncDirection), " ");
99
+ i0.ɵɵtextInterpolate1(" ", ctx_r2.DirectionText(em_r6.SyncDirection), " ");
99
100
  i0.ɵɵadvance();
100
- i0.ɵɵproperty("title", em_r7.Entity);
101
+ i0.ɵɵproperty("title", em_r6.Entity);
101
102
  i0.ɵɵadvance();
102
- i0.ɵɵtextInterpolate1(" ", em_r7.Entity, " ");
103
+ i0.ɵɵtextInterpolate1(" ", em_r6.Entity, " ");
103
104
  i0.ɵɵadvance(2);
104
- i0.ɵɵconditional(em_r7.MatchStrategy ? 13 : -1);
105
+ i0.ɵɵconditional(em_r6.MatchStrategy ? 13 : -1);
105
106
  i0.ɵɵadvance();
106
- i0.ɵɵproperty("title", "Conflict: " + em_r7.ConflictResolution);
107
+ i0.ɵɵproperty("title", "Conflict: " + em_r6.ConflictResolution);
107
108
  } }
108
- function PipelinesComponent_Conditional_1_Conditional_23_For_2_Conditional_28_ForEmpty_19_Template(rf, ctx) { if (rf & 1) {
109
- i0.ɵɵelementStart(0, "div", 56);
109
+ function PipelinesComponent_Conditional_12_Conditional_3_For_2_Conditional_28_ForEmpty_19_Template(rf, ctx) { if (rf & 1) {
110
+ i0.ɵɵelementStart(0, "div", 49);
110
111
  i0.ɵɵtext(1, " No entity maps match your filter. ");
111
112
  i0.ɵɵelementEnd();
112
113
  } }
113
- function PipelinesComponent_Conditional_1_Conditional_23_For_2_Conditional_28_Template(rf, ctx) { if (rf & 1) {
114
- const _r5 = i0.ɵɵgetCurrentView();
115
- i0.ɵɵelementStart(0, "div", 43)(1, "div", 44);
116
- i0.ɵɵelement(2, "i", 45);
117
- i0.ɵɵelementStart(3, "input", 46);
118
- i0.ɵɵlistener("input", function PipelinesComponent_Conditional_1_Conditional_23_For_2_Conditional_28_Template_input_input_3_listener($event) { i0.ɵɵrestoreView(_r5); const card_r4 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnCardSearch(card_r4, $event)); });
119
- i0.ɵɵelementEnd();
120
- i0.ɵɵelementStart(4, "span", 47);
114
+ function PipelinesComponent_Conditional_12_Conditional_3_For_2_Conditional_28_Template(rf, ctx) { if (rf & 1) {
115
+ const _r4 = i0.ɵɵgetCurrentView();
116
+ i0.ɵɵelementStart(0, "div", 36)(1, "div", 37);
117
+ i0.ɵɵelement(2, "i", 38);
118
+ i0.ɵɵelementStart(3, "input", 39);
119
+ i0.ɵɵlistener("input", function PipelinesComponent_Conditional_12_Conditional_3_For_2_Conditional_28_Template_input_input_3_listener($event) { i0.ɵɵrestoreView(_r4); const card_r2 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.OnCardSearch(card_r2, $event)); });
120
+ i0.ɵɵelementEnd();
121
+ i0.ɵɵelementStart(4, "span", 40);
121
122
  i0.ɵɵtext(5);
122
123
  i0.ɵɵelementEnd()();
123
- i0.ɵɵelementStart(6, "div", 48)(7, "span", 49);
124
+ i0.ɵɵelementStart(6, "div", 41)(7, "span", 42);
124
125
  i0.ɵɵtext(8, "Sync");
125
126
  i0.ɵɵelementEnd();
126
- i0.ɵɵelementStart(9, "span", 50);
127
+ i0.ɵɵelementStart(9, "span", 43);
127
128
  i0.ɵɵtext(10, "External Object");
128
129
  i0.ɵɵelementEnd();
129
- i0.ɵɵelement(11, "span", 51);
130
- i0.ɵɵelementStart(12, "span", 52);
130
+ i0.ɵɵelement(11, "span", 44);
131
+ i0.ɵɵelementStart(12, "span", 45);
131
132
  i0.ɵɵtext(13, "MJ Entity");
132
133
  i0.ɵɵelementEnd();
133
- i0.ɵɵelementStart(14, "span", 53);
134
+ i0.ɵɵelementStart(14, "span", 46);
134
135
  i0.ɵɵtext(15, "Config");
135
136
  i0.ɵɵelementEnd()();
136
- i0.ɵɵelementStart(16, "div", 54);
137
- i0.ɵɵrepeaterCreate(17, PipelinesComponent_Conditional_1_Conditional_23_For_2_Conditional_28_For_18_Template, 18, 13, "div", 55, _forTrack1, false, PipelinesComponent_Conditional_1_Conditional_23_For_2_Conditional_28_ForEmpty_19_Template, 2, 0, "div", 56);
137
+ i0.ɵɵelementStart(16, "div", 47);
138
+ i0.ɵɵrepeaterCreate(17, PipelinesComponent_Conditional_12_Conditional_3_For_2_Conditional_28_For_18_Template, 18, 13, "div", 48, _forTrack1, false, PipelinesComponent_Conditional_12_Conditional_3_For_2_Conditional_28_ForEmpty_19_Template, 2, 0, "div", 49);
138
139
  i0.ɵɵelementEnd()();
139
140
  } if (rf & 2) {
140
- const card_r4 = i0.ɵɵnextContext().$implicit;
141
+ const card_r2 = i0.ɵɵnextContext().$implicit;
141
142
  i0.ɵɵadvance(3);
142
- i0.ɵɵproperty("value", card_r4.SearchTerm);
143
+ i0.ɵɵproperty("value", card_r2.SearchTerm);
143
144
  i0.ɵɵadvance(2);
144
- i0.ɵɵtextInterpolate2(" ", card_r4.FilteredMaps.length, " of ", card_r4.EntityMapCount, " ");
145
+ i0.ɵɵtextInterpolate2(" ", card_r2.FilteredMaps.length, " of ", card_r2.EntityMapCount, " ");
145
146
  i0.ɵɵadvance(12);
146
- i0.ɵɵrepeater(card_r4.FilteredMaps);
147
+ i0.ɵɵrepeater(card_r2.FilteredMaps);
147
148
  } }
148
- function PipelinesComponent_Conditional_1_Conditional_23_For_2_Template(rf, ctx) { if (rf & 1) {
149
- const _r3 = i0.ɵɵgetCurrentView();
150
- i0.ɵɵelementStart(0, "div", 26)(1, "div", 27);
151
- i0.ɵɵlistener("click", function PipelinesComponent_Conditional_1_Conditional_23_For_2_Template_div_click_1_listener() { const card_r4 = i0.ɵɵrestoreView(_r3).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.ToggleCard(card_r4)); });
152
- i0.ɵɵelementStart(2, "div", 28);
153
- i0.ɵɵelement(3, "div", 29)(4, "i");
154
- i0.ɵɵelementStart(5, "div", 30)(6, "span", 31);
149
+ function PipelinesComponent_Conditional_12_Conditional_3_For_2_Template(rf, ctx) { if (rf & 1) {
150
+ const _r1 = i0.ɵɵgetCurrentView();
151
+ i0.ɵɵelementStart(0, "div", 19)(1, "div", 20);
152
+ i0.ɵɵlistener("click", function PipelinesComponent_Conditional_12_Conditional_3_For_2_Template_div_click_1_listener() { const card_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.ToggleCard(card_r2)); });
153
+ i0.ɵɵelementStart(2, "div", 21);
154
+ i0.ɵɵelement(3, "div", 22)(4, "i");
155
+ i0.ɵɵelementStart(5, "div", 23)(6, "span", 24);
155
156
  i0.ɵɵtext(7);
156
157
  i0.ɵɵelementEnd();
157
- i0.ɵɵelementStart(8, "span", 32);
158
+ i0.ɵɵelementStart(8, "span", 25);
158
159
  i0.ɵɵtext(9);
159
- i0.ɵɵelementStart(10, "span", 33);
160
+ i0.ɵɵelementStart(10, "span", 26);
160
161
  i0.ɵɵtext(11, "\u00B7");
161
162
  i0.ɵɵelementEnd();
162
163
  i0.ɵɵtext(12);
163
- i0.ɵɵelementStart(13, "span", 33);
164
+ i0.ɵɵelementStart(13, "span", 26);
164
165
  i0.ɵɵtext(14, "\u00B7");
165
166
  i0.ɵɵelementEnd();
166
167
  i0.ɵɵtext(15);
167
168
  i0.ɵɵelementEnd()()();
168
- i0.ɵɵelementStart(16, "div", 34)(17, "span", 35);
169
+ i0.ɵɵelementStart(16, "div", 27)(17, "span", 28);
169
170
  i0.ɵɵtext(18);
170
171
  i0.ɵɵelementEnd();
171
- i0.ɵɵconditionalCreate(19, PipelinesComponent_Conditional_1_Conditional_23_For_2_Conditional_19_Template, 2, 1, "span", 36);
172
- i0.ɵɵelementStart(20, "div", 37);
173
- i0.ɵɵelement(21, "span", 38)(22, "span", 39);
174
- i0.ɵɵelementStart(23, "span", 40);
172
+ i0.ɵɵconditionalCreate(19, PipelinesComponent_Conditional_12_Conditional_3_For_2_Conditional_19_Template, 2, 1, "span", 29);
173
+ i0.ɵɵelementStart(20, "div", 30);
174
+ i0.ɵɵelement(21, "span", 31)(22, "span", 32);
175
+ i0.ɵɵelementStart(23, "span", 33);
175
176
  i0.ɵɵtext(24);
176
177
  i0.ɵɵelementEnd();
177
- i0.ɵɵelement(25, "span", 39)(26, "span", 41);
178
+ i0.ɵɵelement(25, "span", 32)(26, "span", 34);
178
179
  i0.ɵɵelementEnd();
179
- i0.ɵɵelement(27, "i", 42);
180
+ i0.ɵɵelement(27, "i", 35);
180
181
  i0.ɵɵelementEnd()();
181
- i0.ɵɵconditionalCreate(28, PipelinesComponent_Conditional_1_Conditional_23_For_2_Conditional_28_Template, 20, 4, "div", 43);
182
+ i0.ɵɵconditionalCreate(28, PipelinesComponent_Conditional_12_Conditional_3_For_2_Conditional_28_Template, 20, 4, "div", 36);
182
183
  i0.ɵɵelementEnd();
183
184
  } if (rf & 2) {
184
- const card_r4 = ctx.$implicit;
185
- i0.ɵɵclassProp("expanded", card_r4.IsExpanded);
185
+ const card_r2 = ctx.$implicit;
186
+ i0.ɵɵclassProp("expanded", card_r2.IsExpanded);
186
187
  i0.ɵɵadvance(3);
187
- i0.ɵɵstyleProp("background-color", card_r4.StatusColor);
188
+ i0.ɵɵstyleProp("background-color", card_r2.StatusColor);
188
189
  i0.ɵɵadvance();
189
- i0.ɵɵclassMap(card_r4.Icon + " card-icon");
190
+ i0.ɵɵclassMap(card_r2.Icon + " card-icon");
190
191
  i0.ɵɵadvance(3);
191
- i0.ɵɵtextInterpolate(card_r4.IntegrationName);
192
+ i0.ɵɵtextInterpolate(card_r2.IntegrationName);
192
193
  i0.ɵɵadvance(2);
193
- i0.ɵɵtextInterpolate1(" ", card_r4.EntityMapCount, " maps ");
194
+ i0.ɵɵtextInterpolate1(" ", card_r2.EntityMapCount, " maps ");
194
195
  i0.ɵɵadvance(3);
195
- i0.ɵɵtextInterpolate1(" ", card_r4.ActiveMapCount, " active ");
196
+ i0.ɵɵtextInterpolate1(" ", card_r2.ActiveMapCount, " active ");
196
197
  i0.ɵɵadvance(3);
197
- i0.ɵɵtextInterpolate1(" ", card_r4.UniqueEntityCount, " entities ");
198
+ i0.ɵɵtextInterpolate1(" ", card_r2.UniqueEntityCount, " entities ");
198
199
  i0.ɵɵadvance(2);
199
- i0.ɵɵstyleProp("color", card_r4.StatusColor);
200
+ i0.ɵɵstyleProp("color", card_r2.StatusColor);
200
201
  i0.ɵɵadvance();
201
- i0.ɵɵtextInterpolate1(" ", card_r4.StatusLabel, " ");
202
+ i0.ɵɵtextInterpolate1(" ", card_r2.StatusLabel, " ");
202
203
  i0.ɵɵadvance();
203
- i0.ɵɵconditional(card_r4.LastSync ? 19 : -1);
204
+ i0.ɵɵconditional(card_r2.LastSync ? 19 : -1);
204
205
  i0.ɵɵadvance(5);
205
- i0.ɵɵtextInterpolate(card_r4.EntityMapCount);
206
+ i0.ɵɵtextInterpolate(card_r2.EntityMapCount);
206
207
  i0.ɵɵadvance(3);
207
- i0.ɵɵclassProp("fa-chevron-down", !card_r4.IsExpanded)("fa-chevron-up", card_r4.IsExpanded);
208
+ i0.ɵɵclassProp("fa-chevron-down", !card_r2.IsExpanded)("fa-chevron-up", card_r2.IsExpanded);
208
209
  i0.ɵɵadvance();
209
- i0.ɵɵconditional(card_r4.IsExpanded ? 28 : -1);
210
+ i0.ɵɵconditional(card_r2.IsExpanded ? 28 : -1);
210
211
  } }
211
- function PipelinesComponent_Conditional_1_Conditional_23_Template(rf, ctx) { if (rf & 1) {
212
- i0.ɵɵelementStart(0, "div", 22);
213
- i0.ɵɵrepeaterCreate(1, PipelinesComponent_Conditional_1_Conditional_23_For_2_Template, 29, 20, "div", 25, _forTrack0);
212
+ function PipelinesComponent_Conditional_12_Conditional_3_Template(rf, ctx) { if (rf & 1) {
213
+ i0.ɵɵelementStart(0, "div", 15);
214
+ i0.ɵɵrepeaterCreate(1, PipelinesComponent_Conditional_12_Conditional_3_For_2_Template, 29, 20, "div", 18, _forTrack0);
214
215
  i0.ɵɵelementEnd();
215
216
  } if (rf & 2) {
216
- const ctx_r1 = i0.ɵɵnextContext(2);
217
+ const ctx_r2 = i0.ɵɵnextContext(2);
217
218
  i0.ɵɵadvance();
218
- i0.ɵɵrepeater(ctx_r1.FilteredCards);
219
+ i0.ɵɵrepeater(ctx_r2.FilteredCards);
219
220
  } }
220
- function PipelinesComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
221
- const _r1 = i0.ɵɵgetCurrentView();
222
- i0.ɵɵelementStart(0, "div", 2)(1, "div", 3)(2, "h2", 4);
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);
221
+ function PipelinesComponent_Conditional_12_Template(rf, ctx) { if (rf & 1) {
222
+ i0.ɵɵelementStart(0, "div", 11);
223
+ i0.ɵɵconditionalCreate(1, PipelinesComponent_Conditional_12_Conditional_1_Template, 4, 0, "div", 13)(2, PipelinesComponent_Conditional_12_Conditional_2_Template, 6, 0, "div", 14)(3, PipelinesComponent_Conditional_12_Conditional_3_Template, 3, 0, "div", 15);
252
224
  i0.ɵɵelementEnd();
253
225
  } if (rf & 2) {
254
- const ctx_r1 = i0.ɵɵnextContext();
255
- i0.ɵɵadvance(6);
256
- i0.ɵɵtextInterpolate(ctx_r1.IntegrationCount);
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);
226
+ const ctx_r2 = i0.ɵɵnextContext();
227
+ i0.ɵɵadvance();
228
+ i0.ɵɵconditional(ctx_r2.IsLoading && ctx_r2.PipelineCards.length === 0 ? 1 : ctx_r2.PipelineCards.length === 0 ? 2 : 3);
265
229
  } }
266
- function PipelinesComponent_Conditional_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
267
- const _r9 = i0.ɵɵgetCurrentView();
268
- i0.ɵɵelementStart(0, "label", 96)(1, "input", 60);
269
- i0.ɵɵlistener("change", function PipelinesComponent_Conditional_2_Conditional_12_Template_input_change_1_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnToggleEditorSyncEnabled($event)); });
230
+ function PipelinesComponent_Conditional_13_Conditional_12_Template(rf, ctx) { if (rf & 1) {
231
+ const _r8 = i0.ɵɵgetCurrentView();
232
+ i0.ɵɵelementStart(0, "label", 90)(1, "input", 53);
233
+ i0.ɵɵlistener("change", function PipelinesComponent_Conditional_13_Conditional_12_Template_input_change_1_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.OnToggleEditorSyncEnabled($event)); });
270
234
  i0.ɵɵelementEnd();
271
- i0.ɵɵelement(2, "span", 61);
235
+ i0.ɵɵelement(2, "span", 54);
272
236
  i0.ɵɵelementEnd();
273
- i0.ɵɵelementStart(3, "span", 97);
237
+ i0.ɵɵelementStart(3, "span", 91);
274
238
  i0.ɵɵtext(4);
275
239
  i0.ɵɵelementEnd();
276
240
  } if (rf & 2) {
277
- const ctx_r1 = i0.ɵɵnextContext(2);
278
- i0.ɵɵproperty("title", ctx_r1.EditorEntityMap.SyncEnabled ? "Sync enabled" : "Sync disabled");
241
+ const ctx_r2 = i0.ɵɵnextContext(2);
242
+ i0.ɵɵproperty("title", ctx_r2.EditorEntityMap.SyncEnabled ? "Sync enabled" : "Sync disabled");
279
243
  i0.ɵɵadvance();
280
- i0.ɵɵproperty("checked", ctx_r1.EditorEntityMap.SyncEnabled);
244
+ i0.ɵɵproperty("checked", ctx_r2.EditorEntityMap.SyncEnabled);
281
245
  i0.ɵɵadvance(3);
282
- i0.ɵɵtextInterpolate(ctx_r1.EditorEntityMap.SyncEnabled ? "Sync On" : "Sync Off");
246
+ i0.ɵɵtextInterpolate(ctx_r2.EditorEntityMap.SyncEnabled ? "Sync On" : "Sync Off");
283
247
  } }
284
- function PipelinesComponent_Conditional_2_Conditional_37_Template(rf, ctx) { if (rf & 1) {
285
- i0.ɵɵelement(0, "i", 23);
248
+ function PipelinesComponent_Conditional_13_Conditional_37_Template(rf, ctx) { if (rf & 1) {
249
+ i0.ɵɵelement(0, "i", 16);
286
250
  i0.ɵɵtext(1, " Running Pipeline... ");
287
251
  } }
288
- function PipelinesComponent_Conditional_2_Conditional_38_Template(rf, ctx) { if (rf & 1) {
289
- i0.ɵɵelement(0, "i", 98);
252
+ function PipelinesComponent_Conditional_13_Conditional_38_Template(rf, ctx) { if (rf & 1) {
253
+ i0.ɵɵelement(0, "i", 92);
290
254
  i0.ɵɵtext(1, " Run Schema Pipeline ");
291
255
  } }
292
- function PipelinesComponent_Conditional_2_Conditional_39_Template(rf, ctx) { if (rf & 1) {
256
+ function PipelinesComponent_Conditional_13_Conditional_39_Template(rf, ctx) { if (rf & 1) {
293
257
  i0.ɵɵelementStart(0, "span");
294
258
  i0.ɵɵelement(1, "i");
295
259
  i0.ɵɵtext(2);
296
260
  i0.ɵɵelementEnd();
297
261
  } if (rf & 2) {
298
- const ctx_r1 = i0.ɵɵnextContext(2);
299
- i0.ɵɵclassMap(ctx_r1.PipelineResultSuccess ? "ve-save-success" : "ve-error-msg");
262
+ const ctx_r2 = i0.ɵɵnextContext(2);
263
+ i0.ɵɵclassMap(ctx_r2.PipelineResultSuccess ? "ve-save-success" : "ve-error-msg");
300
264
  i0.ɵɵadvance();
301
- i0.ɵɵclassMap(ctx_r1.PipelineResultSuccess ? "fa-solid fa-circle-check" : "fa-solid fa-circle-xmark");
265
+ i0.ɵɵclassMap(ctx_r2.PipelineResultSuccess ? "fa-solid fa-circle-check" : "fa-solid fa-circle-xmark");
302
266
  i0.ɵɵadvance();
303
- i0.ɵɵtextInterpolate1(" ", ctx_r1.PipelineResultMessage, " ");
267
+ i0.ɵɵtextInterpolate1(" ", ctx_r2.PipelineResultMessage, " ");
304
268
  } }
305
- function PipelinesComponent_Conditional_2_Conditional_45_Template(rf, ctx) { if (rf & 1) {
306
- i0.ɵɵelement(0, "i", 23);
269
+ function PipelinesComponent_Conditional_13_Conditional_45_Template(rf, ctx) { if (rf & 1) {
270
+ i0.ɵɵelement(0, "i", 16);
307
271
  i0.ɵɵtext(1, " Saving... ");
308
272
  } }
309
- function PipelinesComponent_Conditional_2_Conditional_46_Template(rf, ctx) { if (rf & 1) {
310
- i0.ɵɵelement(0, "i", 99);
273
+ function PipelinesComponent_Conditional_13_Conditional_46_Template(rf, ctx) { if (rf & 1) {
274
+ i0.ɵɵelement(0, "i", 93);
311
275
  i0.ɵɵtext(1, " Save ");
312
276
  } }
313
- function PipelinesComponent_Conditional_2_Conditional_47_Template(rf, ctx) { if (rf & 1) {
314
- i0.ɵɵelementStart(0, "span", 91);
315
- i0.ɵɵelement(1, "i", 100);
277
+ function PipelinesComponent_Conditional_13_Conditional_47_Template(rf, ctx) { if (rf & 1) {
278
+ i0.ɵɵelementStart(0, "span", 85);
279
+ i0.ɵɵelement(1, "i", 94);
316
280
  i0.ɵɵtext(2, " Saved ");
317
281
  i0.ɵɵelementEnd();
318
282
  } }
319
- function PipelinesComponent_Conditional_2_Conditional_48_Conditional_1_Conditional_7_Template(rf, ctx) { if (rf & 1) {
320
- i0.ɵɵelementStart(0, "div", 105);
321
- i0.ɵɵelement(1, "i", 23);
283
+ function PipelinesComponent_Conditional_13_Conditional_48_Conditional_1_Conditional_7_Template(rf, ctx) { if (rf & 1) {
284
+ i0.ɵɵelementStart(0, "div", 99);
285
+ i0.ɵɵelement(1, "i", 16);
322
286
  i0.ɵɵtext(2, " Loading... ");
323
287
  i0.ɵɵelementEnd();
324
288
  } }
325
- function PipelinesComponent_Conditional_2_Conditional_48_Conditional_1_Conditional_8_Template(rf, ctx) { if (rf & 1) {
326
- i0.ɵɵelementStart(0, "div", 106);
289
+ function PipelinesComponent_Conditional_13_Conditional_48_Conditional_1_Conditional_8_Template(rf, ctx) { if (rf & 1) {
290
+ i0.ɵɵelementStart(0, "div", 100);
327
291
  i0.ɵɵtext(1, "No source data available");
328
292
  i0.ɵɵelementEnd();
329
293
  } }
330
- function PipelinesComponent_Conditional_2_Conditional_48_Conditional_1_Conditional_9_For_5_Template(rf, ctx) { if (rf & 1) {
294
+ function PipelinesComponent_Conditional_13_Conditional_48_Conditional_1_Conditional_9_For_5_Template(rf, ctx) { if (rf & 1) {
331
295
  i0.ɵɵelementStart(0, "th");
332
296
  i0.ɵɵtext(1);
333
297
  i0.ɵɵelementEnd();
334
298
  } if (rf & 2) {
335
- const col_r11 = ctx.$implicit;
299
+ const col_r10 = ctx.$implicit;
336
300
  i0.ɵɵadvance();
337
- i0.ɵɵtextInterpolate(col_r11);
301
+ i0.ɵɵtextInterpolate(col_r10);
338
302
  } }
339
- function PipelinesComponent_Conditional_2_Conditional_48_Conditional_1_Conditional_9_For_8_For_2_Template(rf, ctx) { if (rf & 1) {
340
- i0.ɵɵelementStart(0, "td", 109);
303
+ function PipelinesComponent_Conditional_13_Conditional_48_Conditional_1_Conditional_9_For_8_For_2_Template(rf, ctx) { if (rf & 1) {
304
+ i0.ɵɵelementStart(0, "td", 103);
341
305
  i0.ɵɵtext(1);
342
306
  i0.ɵɵelementEnd();
343
307
  } if (rf & 2) {
344
- const col_r12 = ctx.$implicit;
345
- const row_r13 = i0.ɵɵnextContext().$implicit;
346
- i0.ɵɵproperty("title", (row_r13[col_r12] == null ? null : row_r13[col_r12].toString()) ?? "");
308
+ const col_r11 = ctx.$implicit;
309
+ const row_r12 = i0.ɵɵnextContext().$implicit;
310
+ i0.ɵɵproperty("title", (row_r12[col_r11] == null ? null : row_r12[col_r11].toString()) ?? "");
347
311
  i0.ɵɵadvance();
348
- i0.ɵɵtextInterpolate(row_r13[col_r12] ?? "");
312
+ i0.ɵɵtextInterpolate(row_r12[col_r11] ?? "");
349
313
  } }
350
- function PipelinesComponent_Conditional_2_Conditional_48_Conditional_1_Conditional_9_For_8_Template(rf, ctx) { if (rf & 1) {
314
+ function PipelinesComponent_Conditional_13_Conditional_48_Conditional_1_Conditional_9_For_8_Template(rf, ctx) { if (rf & 1) {
351
315
  i0.ɵɵelementStart(0, "tr");
352
- i0.ɵɵrepeaterCreate(1, PipelinesComponent_Conditional_2_Conditional_48_Conditional_1_Conditional_9_For_8_For_2_Template, 2, 2, "td", 109, i0.ɵɵrepeaterTrackByIdentity);
316
+ i0.ɵɵrepeaterCreate(1, PipelinesComponent_Conditional_13_Conditional_48_Conditional_1_Conditional_9_For_8_For_2_Template, 2, 2, "td", 103, i0.ɵɵrepeaterTrackByIdentity);
353
317
  i0.ɵɵelementEnd();
354
318
  } if (rf & 2) {
355
- const ctx_r1 = i0.ɵɵnextContext(5);
319
+ const ctx_r2 = i0.ɵɵnextContext(5);
356
320
  i0.ɵɵadvance();
357
- i0.ɵɵrepeater(ctx_r1.PreviewSourceColumns);
321
+ i0.ɵɵrepeater(ctx_r2.PreviewSourceColumns);
358
322
  } }
359
- function PipelinesComponent_Conditional_2_Conditional_48_Conditional_1_Conditional_9_Template(rf, ctx) { if (rf & 1) {
360
- i0.ɵɵelementStart(0, "div", 107)(1, "table", 108)(2, "thead")(3, "tr");
361
- i0.ɵɵrepeaterCreate(4, PipelinesComponent_Conditional_2_Conditional_48_Conditional_1_Conditional_9_For_5_Template, 2, 1, "th", null, i0.ɵɵrepeaterTrackByIdentity);
323
+ function PipelinesComponent_Conditional_13_Conditional_48_Conditional_1_Conditional_9_Template(rf, ctx) { if (rf & 1) {
324
+ i0.ɵɵelementStart(0, "div", 101)(1, "table", 102)(2, "thead")(3, "tr");
325
+ i0.ɵɵrepeaterCreate(4, PipelinesComponent_Conditional_13_Conditional_48_Conditional_1_Conditional_9_For_5_Template, 2, 1, "th", null, i0.ɵɵrepeaterTrackByIdentity);
362
326
  i0.ɵɵelementEnd()();
363
327
  i0.ɵɵelementStart(6, "tbody");
364
- i0.ɵɵrepeaterCreate(7, PipelinesComponent_Conditional_2_Conditional_48_Conditional_1_Conditional_9_For_8_Template, 3, 0, "tr", null, i0.ɵɵrepeaterTrackByIndex);
328
+ i0.ɵɵrepeaterCreate(7, PipelinesComponent_Conditional_13_Conditional_48_Conditional_1_Conditional_9_For_8_Template, 3, 0, "tr", null, i0.ɵɵrepeaterTrackByIndex);
365
329
  i0.ɵɵelementEnd()()();
366
330
  } if (rf & 2) {
367
- const ctx_r1 = i0.ɵɵnextContext(4);
331
+ const ctx_r2 = i0.ɵɵnextContext(4);
368
332
  i0.ɵɵadvance(4);
369
- i0.ɵɵrepeater(ctx_r1.PreviewSourceColumns);
333
+ i0.ɵɵrepeater(ctx_r2.PreviewSourceColumns);
370
334
  i0.ɵɵadvance(3);
371
- i0.ɵɵrepeater(ctx_r1.PreviewSourceRows);
335
+ i0.ɵɵrepeater(ctx_r2.PreviewSourceRows);
372
336
  } }
373
- function PipelinesComponent_Conditional_2_Conditional_48_Conditional_1_Template(rf, ctx) { if (rf & 1) {
374
- const _r10 = i0.ɵɵgetCurrentView();
375
- i0.ɵɵelementStart(0, "div", 101)(1, "div", 102);
376
- i0.ɵɵelement(2, "i", 82);
337
+ function PipelinesComponent_Conditional_13_Conditional_48_Conditional_1_Template(rf, ctx) { if (rf & 1) {
338
+ const _r9 = i0.ɵɵgetCurrentView();
339
+ i0.ɵɵelementStart(0, "div", 95)(1, "div", 96);
340
+ i0.ɵɵelement(2, "i", 76);
377
341
  i0.ɵɵelementStart(3, "span");
378
342
  i0.ɵɵtext(4);
379
343
  i0.ɵɵelementEnd();
380
- i0.ɵɵelementStart(5, "button", 103);
381
- i0.ɵɵlistener("click", function PipelinesComponent_Conditional_2_Conditional_48_Conditional_1_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.ShowSourcePreview = false); });
382
- i0.ɵɵelement(6, "i", 104);
344
+ i0.ɵɵelementStart(5, "button", 97);
345
+ i0.ɵɵlistener("click", function PipelinesComponent_Conditional_13_Conditional_48_Conditional_1_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r9); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.ShowSourcePreview = false); });
346
+ i0.ɵɵelement(6, "i", 98);
383
347
  i0.ɵɵelementEnd()();
384
- i0.ɵɵconditionalCreate(7, PipelinesComponent_Conditional_2_Conditional_48_Conditional_1_Conditional_7_Template, 3, 0, "div", 105)(8, PipelinesComponent_Conditional_2_Conditional_48_Conditional_1_Conditional_8_Template, 2, 0, "div", 106)(9, PipelinesComponent_Conditional_2_Conditional_48_Conditional_1_Conditional_9_Template, 9, 0, "div", 107);
348
+ i0.ɵɵconditionalCreate(7, PipelinesComponent_Conditional_13_Conditional_48_Conditional_1_Conditional_7_Template, 3, 0, "div", 99)(8, PipelinesComponent_Conditional_13_Conditional_48_Conditional_1_Conditional_8_Template, 2, 0, "div", 100)(9, PipelinesComponent_Conditional_13_Conditional_48_Conditional_1_Conditional_9_Template, 9, 0, "div", 101);
385
349
  i0.ɵɵelementEnd();
386
350
  } if (rf & 2) {
387
- const ctx_r1 = i0.ɵɵnextContext(3);
351
+ const ctx_r2 = i0.ɵɵnextContext(3);
388
352
  i0.ɵɵadvance(4);
389
- i0.ɵɵtextInterpolate1("Source Preview: ", (ctx_r1.EditorEntityMap == null ? null : ctx_r1.EditorEntityMap.ExternalObjectLabel) ?? (ctx_r1.EditorEntityMap == null ? null : ctx_r1.EditorEntityMap.ExternalObjectName));
353
+ i0.ɵɵtextInterpolate1("Source Preview: ", (ctx_r2.EditorEntityMap == null ? null : ctx_r2.EditorEntityMap.ExternalObjectLabel) ?? (ctx_r2.EditorEntityMap == null ? null : ctx_r2.EditorEntityMap.ExternalObjectName));
390
354
  i0.ɵɵadvance(3);
391
- i0.ɵɵconditional(ctx_r1.PreviewSourceLoading ? 7 : ctx_r1.PreviewSourceRows.length === 0 ? 8 : 9);
355
+ i0.ɵɵconditional(ctx_r2.PreviewSourceLoading ? 7 : ctx_r2.PreviewSourceRows.length === 0 ? 8 : 9);
392
356
  } }
393
- function PipelinesComponent_Conditional_2_Conditional_48_Conditional_2_Conditional_7_Template(rf, ctx) { if (rf & 1) {
394
- i0.ɵɵelementStart(0, "div", 105);
395
- i0.ɵɵelement(1, "i", 23);
357
+ function PipelinesComponent_Conditional_13_Conditional_48_Conditional_2_Conditional_7_Template(rf, ctx) { if (rf & 1) {
358
+ i0.ɵɵelementStart(0, "div", 99);
359
+ i0.ɵɵelement(1, "i", 16);
396
360
  i0.ɵɵtext(2, " Loading... ");
397
361
  i0.ɵɵelementEnd();
398
362
  } }
399
- function PipelinesComponent_Conditional_2_Conditional_48_Conditional_2_Conditional_8_Template(rf, ctx) { if (rf & 1) {
400
- i0.ɵɵelementStart(0, "div", 106);
363
+ function PipelinesComponent_Conditional_13_Conditional_48_Conditional_2_Conditional_8_Template(rf, ctx) { if (rf & 1) {
364
+ i0.ɵɵelementStart(0, "div", 100);
401
365
  i0.ɵɵtext(1, "No destination data available");
402
366
  i0.ɵɵelementEnd();
403
367
  } }
404
- function PipelinesComponent_Conditional_2_Conditional_48_Conditional_2_Conditional_9_For_5_Template(rf, ctx) { if (rf & 1) {
368
+ function PipelinesComponent_Conditional_13_Conditional_48_Conditional_2_Conditional_9_For_5_Template(rf, ctx) { if (rf & 1) {
405
369
  i0.ɵɵelementStart(0, "th");
406
370
  i0.ɵɵtext(1);
407
371
  i0.ɵɵelementEnd();
408
372
  } if (rf & 2) {
409
- const col_r15 = ctx.$implicit;
373
+ const col_r14 = ctx.$implicit;
410
374
  i0.ɵɵadvance();
411
- i0.ɵɵtextInterpolate(col_r15);
375
+ i0.ɵɵtextInterpolate(col_r14);
412
376
  } }
413
- function PipelinesComponent_Conditional_2_Conditional_48_Conditional_2_Conditional_9_For_8_For_2_Template(rf, ctx) { if (rf & 1) {
414
- i0.ɵɵelementStart(0, "td", 109);
377
+ function PipelinesComponent_Conditional_13_Conditional_48_Conditional_2_Conditional_9_For_8_For_2_Template(rf, ctx) { if (rf & 1) {
378
+ i0.ɵɵelementStart(0, "td", 103);
415
379
  i0.ɵɵtext(1);
416
380
  i0.ɵɵelementEnd();
417
381
  } if (rf & 2) {
418
- const col_r16 = ctx.$implicit;
419
- const row_r17 = i0.ɵɵnextContext().$implicit;
420
- i0.ɵɵproperty("title", (row_r17[col_r16] == null ? null : row_r17[col_r16].toString()) ?? "");
382
+ const col_r15 = ctx.$implicit;
383
+ const row_r16 = i0.ɵɵnextContext().$implicit;
384
+ i0.ɵɵproperty("title", (row_r16[col_r15] == null ? null : row_r16[col_r15].toString()) ?? "");
421
385
  i0.ɵɵadvance();
422
- i0.ɵɵtextInterpolate(row_r17[col_r16] ?? "");
386
+ i0.ɵɵtextInterpolate(row_r16[col_r15] ?? "");
423
387
  } }
424
- function PipelinesComponent_Conditional_2_Conditional_48_Conditional_2_Conditional_9_For_8_Template(rf, ctx) { if (rf & 1) {
388
+ function PipelinesComponent_Conditional_13_Conditional_48_Conditional_2_Conditional_9_For_8_Template(rf, ctx) { if (rf & 1) {
425
389
  i0.ɵɵelementStart(0, "tr");
426
- i0.ɵɵrepeaterCreate(1, PipelinesComponent_Conditional_2_Conditional_48_Conditional_2_Conditional_9_For_8_For_2_Template, 2, 2, "td", 109, i0.ɵɵrepeaterTrackByIdentity);
390
+ i0.ɵɵrepeaterCreate(1, PipelinesComponent_Conditional_13_Conditional_48_Conditional_2_Conditional_9_For_8_For_2_Template, 2, 2, "td", 103, i0.ɵɵrepeaterTrackByIdentity);
427
391
  i0.ɵɵelementEnd();
428
392
  } if (rf & 2) {
429
- const ctx_r1 = i0.ɵɵnextContext(5);
393
+ const ctx_r2 = i0.ɵɵnextContext(5);
430
394
  i0.ɵɵadvance();
431
- i0.ɵɵrepeater(ctx_r1.PreviewDestColumns);
395
+ i0.ɵɵrepeater(ctx_r2.PreviewDestColumns);
432
396
  } }
433
- function PipelinesComponent_Conditional_2_Conditional_48_Conditional_2_Conditional_9_Template(rf, ctx) { if (rf & 1) {
434
- i0.ɵɵelementStart(0, "div", 107)(1, "table", 108)(2, "thead")(3, "tr");
435
- i0.ɵɵrepeaterCreate(4, PipelinesComponent_Conditional_2_Conditional_48_Conditional_2_Conditional_9_For_5_Template, 2, 1, "th", null, i0.ɵɵrepeaterTrackByIdentity);
397
+ function PipelinesComponent_Conditional_13_Conditional_48_Conditional_2_Conditional_9_Template(rf, ctx) { if (rf & 1) {
398
+ i0.ɵɵelementStart(0, "div", 101)(1, "table", 102)(2, "thead")(3, "tr");
399
+ i0.ɵɵrepeaterCreate(4, PipelinesComponent_Conditional_13_Conditional_48_Conditional_2_Conditional_9_For_5_Template, 2, 1, "th", null, i0.ɵɵrepeaterTrackByIdentity);
436
400
  i0.ɵɵelementEnd()();
437
401
  i0.ɵɵelementStart(6, "tbody");
438
- i0.ɵɵrepeaterCreate(7, PipelinesComponent_Conditional_2_Conditional_48_Conditional_2_Conditional_9_For_8_Template, 3, 0, "tr", null, i0.ɵɵrepeaterTrackByIndex);
402
+ i0.ɵɵrepeaterCreate(7, PipelinesComponent_Conditional_13_Conditional_48_Conditional_2_Conditional_9_For_8_Template, 3, 0, "tr", null, i0.ɵɵrepeaterTrackByIndex);
439
403
  i0.ɵɵelementEnd()()();
440
404
  } if (rf & 2) {
441
- const ctx_r1 = i0.ɵɵnextContext(4);
405
+ const ctx_r2 = i0.ɵɵnextContext(4);
442
406
  i0.ɵɵadvance(4);
443
- i0.ɵɵrepeater(ctx_r1.PreviewDestColumns);
407
+ i0.ɵɵrepeater(ctx_r2.PreviewDestColumns);
444
408
  i0.ɵɵadvance(3);
445
- i0.ɵɵrepeater(ctx_r1.PreviewDestRows);
409
+ i0.ɵɵrepeater(ctx_r2.PreviewDestRows);
446
410
  } }
447
- function PipelinesComponent_Conditional_2_Conditional_48_Conditional_2_Template(rf, ctx) { if (rf & 1) {
448
- const _r14 = i0.ɵɵgetCurrentView();
449
- i0.ɵɵelementStart(0, "div", 101)(1, "div", 102);
450
- i0.ɵɵelement(2, "i", 84);
411
+ function PipelinesComponent_Conditional_13_Conditional_48_Conditional_2_Template(rf, ctx) { if (rf & 1) {
412
+ const _r13 = i0.ɵɵgetCurrentView();
413
+ i0.ɵɵelementStart(0, "div", 95)(1, "div", 96);
414
+ i0.ɵɵelement(2, "i", 78);
451
415
  i0.ɵɵelementStart(3, "span");
452
416
  i0.ɵɵtext(4);
453
417
  i0.ɵɵelementEnd();
454
- i0.ɵɵelementStart(5, "button", 103);
455
- i0.ɵɵlistener("click", function PipelinesComponent_Conditional_2_Conditional_48_Conditional_2_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.ShowDestPreview = false); });
456
- i0.ɵɵelement(6, "i", 104);
418
+ i0.ɵɵelementStart(5, "button", 97);
419
+ i0.ɵɵlistener("click", function PipelinesComponent_Conditional_13_Conditional_48_Conditional_2_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r13); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.ShowDestPreview = false); });
420
+ i0.ɵɵelement(6, "i", 98);
457
421
  i0.ɵɵelementEnd()();
458
- i0.ɵɵconditionalCreate(7, PipelinesComponent_Conditional_2_Conditional_48_Conditional_2_Conditional_7_Template, 3, 0, "div", 105)(8, PipelinesComponent_Conditional_2_Conditional_48_Conditional_2_Conditional_8_Template, 2, 0, "div", 106)(9, PipelinesComponent_Conditional_2_Conditional_48_Conditional_2_Conditional_9_Template, 9, 0, "div", 107);
422
+ i0.ɵɵconditionalCreate(7, PipelinesComponent_Conditional_13_Conditional_48_Conditional_2_Conditional_7_Template, 3, 0, "div", 99)(8, PipelinesComponent_Conditional_13_Conditional_48_Conditional_2_Conditional_8_Template, 2, 0, "div", 100)(9, PipelinesComponent_Conditional_13_Conditional_48_Conditional_2_Conditional_9_Template, 9, 0, "div", 101);
459
423
  i0.ɵɵelementEnd();
460
424
  } if (rf & 2) {
461
- const ctx_r1 = i0.ɵɵnextContext(3);
425
+ const ctx_r2 = i0.ɵɵnextContext(3);
462
426
  i0.ɵɵadvance(4);
463
- i0.ɵɵtextInterpolate1("Dest Preview: ", ctx_r1.EditorEntityMap == null ? null : ctx_r1.EditorEntityMap.Entity);
427
+ i0.ɵɵtextInterpolate1("Dest Preview: ", ctx_r2.EditorEntityMap == null ? null : ctx_r2.EditorEntityMap.Entity);
464
428
  i0.ɵɵadvance(3);
465
- i0.ɵɵconditional(ctx_r1.PreviewDestLoading ? 7 : ctx_r1.PreviewDestRows.length === 0 ? 8 : 9);
429
+ i0.ɵɵconditional(ctx_r2.PreviewDestLoading ? 7 : ctx_r2.PreviewDestRows.length === 0 ? 8 : 9);
466
430
  } }
467
- function PipelinesComponent_Conditional_2_Conditional_48_Template(rf, ctx) { if (rf & 1) {
468
- i0.ɵɵelementStart(0, "div", 92);
469
- i0.ɵɵconditionalCreate(1, PipelinesComponent_Conditional_2_Conditional_48_Conditional_1_Template, 10, 2, "div", 101);
470
- i0.ɵɵconditionalCreate(2, PipelinesComponent_Conditional_2_Conditional_48_Conditional_2_Template, 10, 2, "div", 101);
431
+ function PipelinesComponent_Conditional_13_Conditional_48_Template(rf, ctx) { if (rf & 1) {
432
+ i0.ɵɵelementStart(0, "div", 86);
433
+ i0.ɵɵconditionalCreate(1, PipelinesComponent_Conditional_13_Conditional_48_Conditional_1_Template, 10, 2, "div", 95);
434
+ i0.ɵɵconditionalCreate(2, PipelinesComponent_Conditional_13_Conditional_48_Conditional_2_Template, 10, 2, "div", 95);
471
435
  i0.ɵɵelementEnd();
472
436
  } if (rf & 2) {
473
- const ctx_r1 = i0.ɵɵnextContext(2);
437
+ const ctx_r2 = i0.ɵɵnextContext(2);
474
438
  i0.ɵɵadvance();
475
- i0.ɵɵconditional(ctx_r1.ShowSourcePreview ? 1 : -1);
439
+ i0.ɵɵconditional(ctx_r2.ShowSourcePreview ? 1 : -1);
476
440
  i0.ɵɵadvance();
477
- i0.ɵɵconditional(ctx_r1.ShowDestPreview ? 2 : -1);
441
+ i0.ɵɵconditional(ctx_r2.ShowDestPreview ? 2 : -1);
478
442
  } }
479
- function PipelinesComponent_Conditional_2_Conditional_49_Template(rf, ctx) { if (rf & 1) {
480
- const _r18 = i0.ɵɵgetCurrentView();
481
- i0.ɵɵelementStart(0, "div", 93);
482
- i0.ɵɵelement(1, "i", 67);
443
+ function PipelinesComponent_Conditional_13_Conditional_49_Template(rf, ctx) { if (rf & 1) {
444
+ const _r17 = i0.ɵɵgetCurrentView();
445
+ i0.ɵɵelementStart(0, "div", 87);
446
+ i0.ɵɵelement(1, "i", 61);
483
447
  i0.ɵɵtext(2, " Click a destination field to map from ");
484
448
  i0.ɵɵelementStart(3, "strong");
485
449
  i0.ɵɵtext(4);
486
450
  i0.ɵɵelementEnd();
487
- i0.ɵɵelementStart(5, "button", 110);
488
- i0.ɵɵlistener("click", function PipelinesComponent_Conditional_2_Conditional_49_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r18); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.CancelConnect()); });
451
+ i0.ɵɵelementStart(5, "button", 104);
452
+ i0.ɵɵlistener("click", function PipelinesComponent_Conditional_13_Conditional_49_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r17); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.CancelConnect()); });
489
453
  i0.ɵɵtext(6, "Cancel");
490
454
  i0.ɵɵelementEnd()();
491
455
  } if (rf & 2) {
492
- const ctx_r1 = i0.ɵɵnextContext(2);
456
+ const ctx_r2 = i0.ɵɵnextContext(2);
493
457
  i0.ɵɵadvance(4);
494
- i0.ɵɵtextInterpolate(ctx_r1.ConnectingFromSource);
458
+ i0.ɵɵtextInterpolate(ctx_r2.ConnectingFromSource);
495
459
  } }
496
- function PipelinesComponent_Conditional_2_Conditional_51_Template(rf, ctx) { if (rf & 1) {
497
- i0.ɵɵelementStart(0, "div", 95);
498
- i0.ɵɵelement(1, "i", 23);
460
+ function PipelinesComponent_Conditional_13_Conditional_51_Template(rf, ctx) { if (rf & 1) {
461
+ i0.ɵɵelementStart(0, "div", 89);
462
+ i0.ɵɵelement(1, "i", 16);
499
463
  i0.ɵɵelementStart(2, "span");
500
464
  i0.ɵɵtext(3, "Loading field mappings...");
501
465
  i0.ɵɵelementEnd()();
502
466
  } }
503
- function PipelinesComponent_Conditional_2_Conditional_52_Conditional_8_For_26_Conditional_6_Template(rf, ctx) { if (rf & 1) {
504
- i0.ɵɵelementStart(0, "span", 144);
467
+ function PipelinesComponent_Conditional_13_Conditional_52_Conditional_8_For_26_Conditional_6_Template(rf, ctx) { if (rf & 1) {
468
+ i0.ɵɵelementStart(0, "span", 138);
505
469
  i0.ɵɵtext(1, "PK");
506
470
  i0.ɵɵelementEnd();
507
471
  } }
508
- function PipelinesComponent_Conditional_2_Conditional_52_Conditional_8_For_26_Conditional_7_Template(rf, ctx) { if (rf & 1) {
509
- i0.ɵɵelementStart(0, "span", 145);
472
+ function PipelinesComponent_Conditional_13_Conditional_52_Conditional_8_For_26_Conditional_7_Template(rf, ctx) { if (rf & 1) {
473
+ i0.ɵɵelementStart(0, "span", 139);
510
474
  i0.ɵɵtext(1, "*");
511
475
  i0.ɵɵelementEnd();
512
476
  } }
513
- function PipelinesComponent_Conditional_2_Conditional_52_Conditional_8_For_26_Template(rf, ctx) { if (rf & 1) {
514
- const _r21 = i0.ɵɵgetCurrentView();
515
- i0.ɵɵelementStart(0, "div", 140);
516
- i0.ɵɵlistener("click", function PipelinesComponent_Conditional_2_Conditional_52_Conditional_8_For_26_Template_div_click_0_listener($event) { const sf_r22 = i0.ɵɵrestoreView(_r21).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); ctx_r1.OnEditorSourceClick(sf_r22.Name); return i0.ɵɵresetView($event.stopPropagation()); });
517
- i0.ɵɵelementStart(1, "span", 141);
477
+ function PipelinesComponent_Conditional_13_Conditional_52_Conditional_8_For_26_Template(rf, ctx) { if (rf & 1) {
478
+ const _r20 = i0.ɵɵgetCurrentView();
479
+ i0.ɵɵelementStart(0, "div", 134);
480
+ i0.ɵɵlistener("click", function PipelinesComponent_Conditional_13_Conditional_52_Conditional_8_For_26_Template_div_click_0_listener($event) { const sf_r21 = i0.ɵɵrestoreView(_r20).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); ctx_r2.OnEditorSourceClick(sf_r21.Name); return i0.ɵɵresetView($event.stopPropagation()); });
481
+ i0.ɵɵelementStart(1, "span", 135);
518
482
  i0.ɵɵtext(2);
519
483
  i0.ɵɵelementEnd();
520
- i0.ɵɵelementStart(3, "span", 142);
484
+ i0.ɵɵelementStart(3, "span", 136);
521
485
  i0.ɵɵtext(4);
522
486
  i0.ɵɵelementEnd();
523
- i0.ɵɵelementStart(5, "span", 143);
524
- i0.ɵɵconditionalCreate(6, PipelinesComponent_Conditional_2_Conditional_52_Conditional_8_For_26_Conditional_6_Template, 2, 0, "span", 144);
525
- i0.ɵɵconditionalCreate(7, PipelinesComponent_Conditional_2_Conditional_52_Conditional_8_For_26_Conditional_7_Template, 2, 0, "span", 145);
487
+ i0.ɵɵelementStart(5, "span", 137);
488
+ i0.ɵɵconditionalCreate(6, PipelinesComponent_Conditional_13_Conditional_52_Conditional_8_For_26_Conditional_6_Template, 2, 0, "span", 138);
489
+ i0.ɵɵconditionalCreate(7, PipelinesComponent_Conditional_13_Conditional_52_Conditional_8_For_26_Conditional_7_Template, 2, 0, "span", 139);
526
490
  i0.ɵɵelementEnd()();
527
491
  } if (rf & 2) {
528
- const sf_r22 = ctx.$implicit;
529
- const ctx_r1 = i0.ɵɵnextContext(4);
530
- i0.ɵɵstyleProp("height", ctx_r1.FIELD_HEIGHT, "px");
531
- i0.ɵɵclassProp("mapped", ctx_r1.IsSourceFieldMapped(sf_r22.Name))("unmapped", !ctx_r1.IsSourceFieldMapped(sf_r22.Name))("connecting", ctx_r1.ConnectingFromSource === sf_r22.Name);
492
+ const sf_r21 = ctx.$implicit;
493
+ const ctx_r2 = i0.ɵɵnextContext(4);
494
+ i0.ɵɵstyleProp("height", ctx_r2.FIELD_HEIGHT, "px");
495
+ i0.ɵɵclassProp("mapped", ctx_r2.IsSourceFieldMapped(sf_r21.Name))("unmapped", !ctx_r2.IsSourceFieldMapped(sf_r21.Name))("connecting", ctx_r2.ConnectingFromSource === sf_r21.Name);
532
496
  i0.ɵɵadvance();
533
- i0.ɵɵproperty("title", sf_r22.Name);
497
+ i0.ɵɵproperty("title", sf_r21.Name);
534
498
  i0.ɵɵadvance();
535
- i0.ɵɵtextInterpolate(sf_r22.Label || sf_r22.Name);
499
+ i0.ɵɵtextInterpolate(sf_r21.Label || sf_r21.Name);
536
500
  i0.ɵɵadvance(2);
537
- i0.ɵɵtextInterpolate(sf_r22.Type);
501
+ i0.ɵɵtextInterpolate(sf_r21.Type);
538
502
  i0.ɵɵadvance(2);
539
- i0.ɵɵconditional(sf_r22.IsPrimaryKey ? 6 : -1);
503
+ i0.ɵɵconditional(sf_r21.IsPrimaryKey ? 6 : -1);
540
504
  i0.ɵɵadvance();
541
- i0.ɵɵconditional(sf_r22.IsRequired ? 7 : -1);
505
+ i0.ɵɵconditional(sf_r21.IsRequired ? 7 : -1);
542
506
  } }
543
- function PipelinesComponent_Conditional_2_Conditional_52_Conditional_8_Conditional_27_Template(rf, ctx) { if (rf & 1) {
544
- i0.ɵɵelementStart(0, "div", 136);
507
+ function PipelinesComponent_Conditional_13_Conditional_52_Conditional_8_Conditional_27_Template(rf, ctx) { if (rf & 1) {
508
+ i0.ɵɵelementStart(0, "div", 130);
545
509
  i0.ɵɵtext(1, "No source fields found");
546
510
  i0.ɵɵelementEnd();
547
511
  } }
548
- function PipelinesComponent_Conditional_2_Conditional_52_Conditional_8_For_30_Template(rf, ctx) { if (rf & 1) {
549
- const _r23 = i0.ɵɵgetCurrentView();
512
+ function PipelinesComponent_Conditional_13_Conditional_52_Conditional_8_For_30_Template(rf, ctx) { if (rf & 1) {
513
+ const _r22 = i0.ɵɵgetCurrentView();
550
514
  i0.ɵɵnamespaceSVG();
551
- i0.ɵɵelementStart(0, "path", 146);
552
- i0.ɵɵlistener("click", function PipelinesComponent_Conditional_2_Conditional_52_Conditional_8_For_30_Template_path_click_0_listener($event) { const ɵ$index_501_r24 = i0.ɵɵrestoreView(_r23).$index; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.SelectConnection(ɵ$index_501_r24, $event)); });
515
+ i0.ɵɵelementStart(0, "path", 140);
516
+ i0.ɵɵlistener("click", function PipelinesComponent_Conditional_13_Conditional_52_Conditional_8_For_30_Template_path_click_0_listener($event) { const ɵ$index_486_r23 = i0.ɵɵrestoreView(_r22).$index; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.SelectConnection(ɵ$index_486_r23, $event)); });
553
517
  i0.ɵɵelementEnd();
554
- i0.ɵɵelementStart(1, "foreignObject", 147);
518
+ i0.ɵɵelementStart(1, "foreignObject", 141);
555
519
  i0.ɵɵnamespaceHTML();
556
- i0.ɵɵelementStart(2, "div", 148);
557
- i0.ɵɵlistener("click", function PipelinesComponent_Conditional_2_Conditional_52_Conditional_8_For_30_Template_div_click_2_listener($event) { const ɵ$index_501_r24 = i0.ɵɵrestoreView(_r23).$index; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.SelectConnection(ɵ$index_501_r24, $event)); });
520
+ i0.ɵɵelementStart(2, "div", 142);
521
+ i0.ɵɵlistener("click", function PipelinesComponent_Conditional_13_Conditional_52_Conditional_8_For_30_Template_div_click_2_listener($event) { const ɵ$index_486_r23 = i0.ɵɵrestoreView(_r22).$index; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.SelectConnection(ɵ$index_486_r23, $event)); });
558
522
  i0.ɵɵelement(3, "i");
559
523
  i0.ɵɵelementEnd()();
560
524
  } if (rf & 2) {
561
- const conn_r25 = ctx.$implicit;
562
- const ɵ$index_501_r24 = ctx.$index;
563
- const ctx_r1 = i0.ɵɵnextContext(4);
564
- i0.ɵɵclassMap("ve-conn-line " + ctx_r1.GetConnectionLineClass(conn_r25));
565
- i0.ɵɵclassProp("selected", ctx_r1.SelectedConnectionIdx === ɵ$index_501_r24);
566
- i0.ɵɵattribute("d", ctx_r1.GetConnectionPath(conn_r25));
525
+ const conn_r24 = ctx.$implicit;
526
+ const ɵ$index_486_r23 = ctx.$index;
527
+ const ctx_r2 = i0.ɵɵnextContext(4);
528
+ i0.ɵɵclassMap("ve-conn-line " + ctx_r2.GetConnectionLineClass(conn_r24));
529
+ i0.ɵɵclassProp("selected", ctx_r2.SelectedConnectionIdx === ɵ$index_486_r23);
530
+ i0.ɵɵattribute("d", ctx_r2.GetConnectionPath(conn_r24));
567
531
  i0.ɵɵadvance();
568
- i0.ɵɵattribute("x", ctx_r1.SVG_WIDTH / 2 - 14)("y", ctx_r1.GetConnectionMidY(conn_r25) - 14);
532
+ i0.ɵɵattribute("x", ctx_r2.SVG_WIDTH / 2 - 14)("y", ctx_r2.GetConnectionMidY(conn_r24) - 14);
569
533
  i0.ɵɵadvance();
570
- i0.ɵɵclassMap("ve-conn-badge " + ctx_r1.GetConnectionBadgeClass(conn_r25));
571
- i0.ɵɵclassProp("selected", ctx_r1.SelectedConnectionIdx === ɵ$index_501_r24);
534
+ i0.ɵɵclassMap("ve-conn-badge " + ctx_r2.GetConnectionBadgeClass(conn_r24));
535
+ i0.ɵɵclassProp("selected", ctx_r2.SelectedConnectionIdx === ɵ$index_486_r23);
572
536
  i0.ɵɵadvance();
573
- i0.ɵɵclassMap(ctx_r1.GetConnectionDirectionIcon(conn_r25));
537
+ i0.ɵɵclassMap(ctx_r2.GetConnectionDirectionIcon(conn_r24));
574
538
  } }
575
- function PipelinesComponent_Conditional_2_Conditional_52_Conditional_8_For_33_Conditional_6_Template(rf, ctx) { if (rf & 1) {
576
- i0.ɵɵelementStart(0, "span", 145);
539
+ function PipelinesComponent_Conditional_13_Conditional_52_Conditional_8_For_33_Conditional_6_Template(rf, ctx) { if (rf & 1) {
540
+ i0.ɵɵelementStart(0, "span", 139);
577
541
  i0.ɵɵtext(1, "*");
578
542
  i0.ɵɵelementEnd();
579
543
  } }
580
- function PipelinesComponent_Conditional_2_Conditional_52_Conditional_8_For_33_Template(rf, ctx) { if (rf & 1) {
581
- const _r26 = i0.ɵɵgetCurrentView();
582
- i0.ɵɵelementStart(0, "div", 140);
583
- i0.ɵɵlistener("click", function PipelinesComponent_Conditional_2_Conditional_52_Conditional_8_For_33_Template_div_click_0_listener($event) { const df_r27 = i0.ɵɵrestoreView(_r26).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); ctx_r1.OnEditorDestClick(df_r27.Name); return i0.ɵɵresetView($event.stopPropagation()); });
584
- i0.ɵɵelementStart(1, "span", 141);
544
+ function PipelinesComponent_Conditional_13_Conditional_52_Conditional_8_For_33_Template(rf, ctx) { if (rf & 1) {
545
+ const _r25 = i0.ɵɵgetCurrentView();
546
+ i0.ɵɵelementStart(0, "div", 134);
547
+ i0.ɵɵlistener("click", function PipelinesComponent_Conditional_13_Conditional_52_Conditional_8_For_33_Template_div_click_0_listener($event) { const df_r26 = i0.ɵɵrestoreView(_r25).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); ctx_r2.OnEditorDestClick(df_r26.Name); return i0.ɵɵresetView($event.stopPropagation()); });
548
+ i0.ɵɵelementStart(1, "span", 135);
585
549
  i0.ɵɵtext(2);
586
550
  i0.ɵɵelementEnd();
587
- i0.ɵɵelementStart(3, "span", 142);
551
+ i0.ɵɵelementStart(3, "span", 136);
588
552
  i0.ɵɵtext(4);
589
553
  i0.ɵɵelementEnd();
590
- i0.ɵɵelementStart(5, "span", 143);
591
- i0.ɵɵconditionalCreate(6, PipelinesComponent_Conditional_2_Conditional_52_Conditional_8_For_33_Conditional_6_Template, 2, 0, "span", 145);
554
+ i0.ɵɵelementStart(5, "span", 137);
555
+ i0.ɵɵconditionalCreate(6, PipelinesComponent_Conditional_13_Conditional_52_Conditional_8_For_33_Conditional_6_Template, 2, 0, "span", 139);
592
556
  i0.ɵɵelementEnd()();
593
557
  } if (rf & 2) {
594
- const df_r27 = ctx.$implicit;
595
- const ctx_r1 = i0.ɵɵnextContext(4);
596
- i0.ɵɵstyleProp("height", ctx_r1.FIELD_HEIGHT, "px");
597
- i0.ɵɵclassProp("mapped", ctx_r1.IsDestFieldMapped(df_r27.Name))("unmapped", !ctx_r1.IsDestFieldMapped(df_r27.Name))("connect-target", ctx_r1.ConnectingFromSource !== null);
558
+ const df_r26 = ctx.$implicit;
559
+ const ctx_r2 = i0.ɵɵnextContext(4);
560
+ i0.ɵɵstyleProp("height", ctx_r2.FIELD_HEIGHT, "px");
561
+ i0.ɵɵclassProp("mapped", ctx_r2.IsDestFieldMapped(df_r26.Name))("unmapped", !ctx_r2.IsDestFieldMapped(df_r26.Name))("connect-target", ctx_r2.ConnectingFromSource !== null);
598
562
  i0.ɵɵadvance();
599
- i0.ɵɵproperty("title", df_r27.Name);
563
+ i0.ɵɵproperty("title", df_r26.Name);
600
564
  i0.ɵɵadvance();
601
- i0.ɵɵtextInterpolate(df_r27.Name);
565
+ i0.ɵɵtextInterpolate(df_r26.Name);
602
566
  i0.ɵɵadvance(2);
603
- i0.ɵɵtextInterpolate(df_r27.Type);
567
+ i0.ɵɵtextInterpolate(df_r26.Type);
604
568
  i0.ɵɵadvance(2);
605
- i0.ɵɵconditional(df_r27.IsRequired ? 6 : -1);
569
+ i0.ɵɵconditional(df_r26.IsRequired ? 6 : -1);
606
570
  } }
607
- function PipelinesComponent_Conditional_2_Conditional_52_Conditional_8_Conditional_34_Template(rf, ctx) { if (rf & 1) {
608
- i0.ɵɵelementStart(0, "div", 136);
571
+ function PipelinesComponent_Conditional_13_Conditional_52_Conditional_8_Conditional_34_Template(rf, ctx) { if (rf & 1) {
572
+ i0.ɵɵelementStart(0, "div", 130);
609
573
  i0.ɵɵtext(1, "No destination fields found");
610
574
  i0.ɵɵelementEnd();
611
575
  } }
612
- function PipelinesComponent_Conditional_2_Conditional_52_Conditional_8_Template(rf, ctx) { if (rf & 1) {
613
- const _r20 = i0.ɵɵgetCurrentView();
614
- i0.ɵɵelementStart(0, "div", 117)(1, "div", 120)(2, "div", 121)(3, "div", 122);
615
- i0.ɵɵelement(4, "i", 82);
576
+ function PipelinesComponent_Conditional_13_Conditional_52_Conditional_8_Template(rf, ctx) { if (rf & 1) {
577
+ const _r19 = i0.ɵɵgetCurrentView();
578
+ i0.ɵɵelementStart(0, "div", 111)(1, "div", 114)(2, "div", 115)(3, "div", 116);
579
+ i0.ɵɵelement(4, "i", 76);
616
580
  i0.ɵɵtext(5, " Source Fields ");
617
- i0.ɵɵelementStart(6, "span", 123);
581
+ i0.ɵɵelementStart(6, "span", 117);
618
582
  i0.ɵɵtext(7);
619
583
  i0.ɵɵelementEnd()();
620
- i0.ɵɵelement(8, "div", 124);
621
- i0.ɵɵelementStart(9, "div", 125);
622
- i0.ɵɵelement(10, "i", 84);
584
+ i0.ɵɵelement(8, "div", 118);
585
+ i0.ɵɵelementStart(9, "div", 119);
586
+ i0.ɵɵelement(10, "i", 78);
623
587
  i0.ɵɵtext(11, " MJ Entity Fields ");
624
- i0.ɵɵelementStart(12, "span", 123);
588
+ i0.ɵɵelementStart(12, "span", 117);
625
589
  i0.ɵɵtext(13);
626
590
  i0.ɵɵelementEnd()()();
627
- i0.ɵɵelementStart(14, "div", 126)(15, "div", 127);
628
- i0.ɵɵelement(16, "i", 128);
629
- i0.ɵɵelementStart(17, "input", 129);
630
- i0.ɵɵlistener("input", function PipelinesComponent_Conditional_2_Conditional_52_Conditional_8_Template_input_input_17_listener($event) { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.EditorSearchSource = $event.target.value); });
591
+ i0.ɵɵelementStart(14, "div", 120)(15, "div", 121);
592
+ i0.ɵɵelement(16, "i", 122);
593
+ i0.ɵɵelementStart(17, "input", 123);
594
+ i0.ɵɵlistener("input", function PipelinesComponent_Conditional_13_Conditional_52_Conditional_8_Template_input_input_17_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.EditorSearchSource = $event.target.value); });
631
595
  i0.ɵɵelementEnd()();
632
- i0.ɵɵelement(18, "div", 130);
633
- i0.ɵɵelementStart(19, "div", 127);
634
- i0.ɵɵelement(20, "i", 128);
635
- i0.ɵɵelementStart(21, "input", 131);
636
- i0.ɵɵlistener("input", function PipelinesComponent_Conditional_2_Conditional_52_Conditional_8_Template_input_input_21_listener($event) { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.EditorSearchDest = $event.target.value); });
596
+ i0.ɵɵelement(18, "div", 124);
597
+ i0.ɵɵelementStart(19, "div", 121);
598
+ i0.ɵɵelement(20, "i", 122);
599
+ i0.ɵɵelementStart(21, "input", 125);
600
+ i0.ɵɵlistener("input", function PipelinesComponent_Conditional_13_Conditional_52_Conditional_8_Template_input_input_21_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.EditorSearchDest = $event.target.value); });
637
601
  i0.ɵɵelementEnd()()();
638
- i0.ɵɵelementStart(22, "div", 132);
639
- i0.ɵɵlistener("click", function PipelinesComponent_Conditional_2_Conditional_52_Conditional_8_Template_div_click_22_listener() { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.DeselectConnection()); });
640
- i0.ɵɵelementStart(23, "div", 133)(24, "div", 134);
641
- i0.ɵɵrepeaterCreate(25, PipelinesComponent_Conditional_2_Conditional_52_Conditional_8_For_26_Template, 8, 13, "div", 135, _forTrack2);
642
- i0.ɵɵconditionalCreate(27, PipelinesComponent_Conditional_2_Conditional_52_Conditional_8_Conditional_27_Template, 2, 0, "div", 136);
602
+ i0.ɵɵelementStart(22, "div", 126);
603
+ i0.ɵɵlistener("click", function PipelinesComponent_Conditional_13_Conditional_52_Conditional_8_Template_div_click_22_listener() { i0.ɵɵrestoreView(_r19); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.DeselectConnection()); });
604
+ i0.ɵɵelementStart(23, "div", 127)(24, "div", 128);
605
+ i0.ɵɵrepeaterCreate(25, PipelinesComponent_Conditional_13_Conditional_52_Conditional_8_For_26_Template, 8, 13, "div", 129, _forTrack2);
606
+ i0.ɵɵconditionalCreate(27, PipelinesComponent_Conditional_13_Conditional_52_Conditional_8_Conditional_27_Template, 2, 0, "div", 130);
643
607
  i0.ɵɵelementEnd();
644
608
  i0.ɵɵnamespaceSVG();
645
- i0.ɵɵelementStart(28, "svg", 137);
646
- i0.ɵɵlistener("click", function PipelinesComponent_Conditional_2_Conditional_52_Conditional_8_Template_svg_click_28_listener($event) { i0.ɵɵrestoreView(_r20); return i0.ɵɵresetView($event.stopPropagation()); });
647
- i0.ɵɵrepeaterCreate(29, PipelinesComponent_Conditional_2_Conditional_52_Conditional_8_For_30_Template, 4, 13, null, null, _forTrack3);
609
+ i0.ɵɵelementStart(28, "svg", 131);
610
+ i0.ɵɵlistener("click", function PipelinesComponent_Conditional_13_Conditional_52_Conditional_8_Template_svg_click_28_listener($event) { i0.ɵɵrestoreView(_r19); return i0.ɵɵresetView($event.stopPropagation()); });
611
+ i0.ɵɵrepeaterCreate(29, PipelinesComponent_Conditional_13_Conditional_52_Conditional_8_For_30_Template, 4, 13, null, null, _forTrack3);
648
612
  i0.ɵɵelementEnd();
649
613
  i0.ɵɵnamespaceHTML();
650
- i0.ɵɵelementStart(31, "div", 138);
651
- i0.ɵɵrepeaterCreate(32, PipelinesComponent_Conditional_2_Conditional_52_Conditional_8_For_33_Template, 7, 12, "div", 139, _forTrack2);
652
- i0.ɵɵconditionalCreate(34, PipelinesComponent_Conditional_2_Conditional_52_Conditional_8_Conditional_34_Template, 2, 0, "div", 136);
614
+ i0.ɵɵelementStart(31, "div", 132);
615
+ i0.ɵɵrepeaterCreate(32, PipelinesComponent_Conditional_13_Conditional_52_Conditional_8_For_33_Template, 7, 12, "div", 133, _forTrack2);
616
+ i0.ɵɵconditionalCreate(34, PipelinesComponent_Conditional_13_Conditional_52_Conditional_8_Conditional_34_Template, 2, 0, "div", 130);
653
617
  i0.ɵɵelementEnd()()()()();
654
618
  } if (rf & 2) {
655
- const ctx_r1 = i0.ɵɵnextContext(3);
619
+ const ctx_r2 = i0.ɵɵnextContext(3);
656
620
  i0.ɵɵadvance(7);
657
- i0.ɵɵtextInterpolate(ctx_r1.EditorSourceFields.length);
621
+ i0.ɵɵtextInterpolate(ctx_r2.EditorSourceFields.length);
658
622
  i0.ɵɵadvance(6);
659
- i0.ɵɵtextInterpolate(ctx_r1.EditorDestFields.length);
623
+ i0.ɵɵtextInterpolate(ctx_r2.EditorDestFields.length);
660
624
  i0.ɵɵadvance(4);
661
- i0.ɵɵproperty("value", ctx_r1.EditorSearchSource);
625
+ i0.ɵɵproperty("value", ctx_r2.EditorSearchSource);
662
626
  i0.ɵɵadvance(4);
663
- i0.ɵɵproperty("value", ctx_r1.EditorSearchDest);
627
+ i0.ɵɵproperty("value", ctx_r2.EditorSearchDest);
664
628
  i0.ɵɵadvance(2);
665
- i0.ɵɵstyleProp("min-height", ctx_r1.EditorCanvasHeight, "px");
629
+ i0.ɵɵstyleProp("min-height", ctx_r2.EditorCanvasHeight, "px");
666
630
  i0.ɵɵadvance(2);
667
- i0.ɵɵrepeater(ctx_r1.FilteredEditorSourceFields);
631
+ i0.ɵɵrepeater(ctx_r2.FilteredEditorSourceFields);
668
632
  i0.ɵɵadvance(2);
669
- i0.ɵɵconditional(ctx_r1.FilteredEditorSourceFields.length === 0 ? 27 : -1);
633
+ i0.ɵɵconditional(ctx_r2.FilteredEditorSourceFields.length === 0 ? 27 : -1);
670
634
  i0.ɵɵadvance();
671
- i0.ɵɵattribute("width", ctx_r1.SVG_WIDTH)("height", ctx_r1.EditorCanvasHeight)("viewBox", "0 0 " + ctx_r1.SVG_WIDTH + " " + ctx_r1.EditorCanvasHeight);
635
+ i0.ɵɵattribute("width", ctx_r2.SVG_WIDTH)("height", ctx_r2.EditorCanvasHeight)("viewBox", "0 0 " + ctx_r2.SVG_WIDTH + " " + ctx_r2.EditorCanvasHeight);
672
636
  i0.ɵɵadvance();
673
- i0.ɵɵrepeater(ctx_r1.VisibleConnections);
637
+ i0.ɵɵrepeater(ctx_r2.VisibleConnections);
674
638
  i0.ɵɵadvance(3);
675
- i0.ɵɵrepeater(ctx_r1.FilteredEditorDestFields);
639
+ i0.ɵɵrepeater(ctx_r2.FilteredEditorDestFields);
676
640
  i0.ɵɵadvance(2);
677
- i0.ɵɵconditional(ctx_r1.FilteredEditorDestFields.length === 0 ? 34 : -1);
641
+ i0.ɵɵconditional(ctx_r2.FilteredEditorDestFields.length === 0 ? 34 : -1);
678
642
  } }
679
- function PipelinesComponent_Conditional_2_Conditional_52_Conditional_14_Conditional_1_Template(rf, ctx) { if (rf & 1) {
680
- i0.ɵɵelementStart(0, "div", 149);
681
- i0.ɵɵelement(1, "i", 23);
643
+ function PipelinesComponent_Conditional_13_Conditional_52_Conditional_14_Conditional_1_Template(rf, ctx) { if (rf & 1) {
644
+ i0.ɵɵelementStart(0, "div", 143);
645
+ i0.ɵɵelement(1, "i", 16);
682
646
  i0.ɵɵtext(2, " Loading stats... ");
683
647
  i0.ɵɵelementEnd();
684
648
  } }
685
- function PipelinesComponent_Conditional_2_Conditional_52_Conditional_14_Conditional_2_Conditional_25_Template(rf, ctx) { if (rf & 1) {
686
- i0.ɵɵelementStart(0, "div", 151)(1, "div", 162);
687
- i0.ɵɵelement(2, "i", 114);
649
+ function PipelinesComponent_Conditional_13_Conditional_52_Conditional_14_Conditional_2_Conditional_25_Template(rf, ctx) { if (rf & 1) {
650
+ i0.ɵɵelementStart(0, "div", 145)(1, "div", 156);
651
+ i0.ɵɵelement(2, "i", 108);
688
652
  i0.ɵɵelementEnd();
689
- i0.ɵɵelementStart(3, "div", 153)(4, "span", 154);
653
+ i0.ɵɵelementStart(3, "div", 147)(4, "span", 148);
690
654
  i0.ɵɵtext(5);
691
655
  i0.ɵɵelementEnd();
692
- i0.ɵɵelementStart(6, "span", 155);
656
+ i0.ɵɵelementStart(6, "span", 149);
693
657
  i0.ɵɵtext(7);
694
658
  i0.ɵɵelementEnd()()();
695
659
  } if (rf & 2) {
696
- const ctx_r1 = i0.ɵɵnextContext(5);
660
+ const ctx_r2 = i0.ɵɵnextContext(5);
697
661
  i0.ɵɵadvance();
698
- i0.ɵɵproperty("ngClass", ctx_r1.SyncStatusClass(ctx_r1.InfoLastSync.Status));
662
+ i0.ɵɵproperty("ngClass", ctx_r2.SyncStatusClass(ctx_r2.InfoLastSync.Status));
699
663
  i0.ɵɵadvance();
700
- i0.ɵɵclassProp("fa-circle-check", ctx_r1.InfoLastSync.Status === "Success")("fa-circle-xmark", ctx_r1.InfoLastSync.Status === "Failed")("fa-spinner", ctx_r1.InfoLastSync.Status === "In Progress")("fa-clock", ctx_r1.InfoLastSync.Status === "Pending");
664
+ i0.ɵɵclassProp("fa-circle-check", ctx_r2.InfoLastSync.Status === "Success")("fa-circle-xmark", ctx_r2.InfoLastSync.Status === "Failed")("fa-spinner", ctx_r2.InfoLastSync.Status === "In Progress")("fa-clock", ctx_r2.InfoLastSync.Status === "Pending");
701
665
  i0.ɵɵadvance(3);
702
- i0.ɵɵtextInterpolate(ctx_r1.InfoLastSync.Status);
666
+ i0.ɵɵtextInterpolate(ctx_r2.InfoLastSync.Status);
703
667
  i0.ɵɵadvance(2);
704
- i0.ɵɵtextInterpolate1("", ctx_r1.InfoLastSync.TotalRecords, " records processed");
668
+ i0.ɵɵtextInterpolate1("", ctx_r2.InfoLastSync.TotalRecords, " records processed");
705
669
  } }
706
- function PipelinesComponent_Conditional_2_Conditional_52_Conditional_14_Conditional_2_Conditional_47_Template(rf, ctx) { if (rf & 1) {
707
- i0.ɵɵelementStart(0, "div", 159)(1, "span", 160);
670
+ function PipelinesComponent_Conditional_13_Conditional_52_Conditional_14_Conditional_2_Conditional_47_Template(rf, ctx) { if (rf & 1) {
671
+ i0.ɵɵelementStart(0, "div", 153)(1, "span", 154);
708
672
  i0.ɵɵtext(2, "Match Strategy");
709
673
  i0.ɵɵelementEnd();
710
- i0.ɵɵelementStart(3, "span", 161);
674
+ i0.ɵɵelementStart(3, "span", 155);
711
675
  i0.ɵɵtext(4, "Configured");
712
676
  i0.ɵɵelementEnd()();
713
677
  } }
714
- function PipelinesComponent_Conditional_2_Conditional_52_Conditional_14_Conditional_2_Template(rf, ctx) { if (rf & 1) {
715
- i0.ɵɵelementStart(0, "div", 150)(1, "div", 151)(2, "div", 152);
716
- i0.ɵɵelement(3, "i", 84);
678
+ function PipelinesComponent_Conditional_13_Conditional_52_Conditional_14_Conditional_2_Template(rf, ctx) { if (rf & 1) {
679
+ i0.ɵɵelementStart(0, "div", 144)(1, "div", 145)(2, "div", 146);
680
+ i0.ɵɵelement(3, "i", 78);
717
681
  i0.ɵɵelementEnd();
718
- i0.ɵɵelementStart(4, "div", 153)(5, "span", 154);
682
+ i0.ɵɵelementStart(4, "div", 147)(5, "span", 148);
719
683
  i0.ɵɵtext(6);
720
684
  i0.ɵɵelementEnd();
721
- i0.ɵɵelementStart(7, "span", 155);
685
+ i0.ɵɵelementStart(7, "span", 149);
722
686
  i0.ɵɵtext(8, "MJ Records");
723
687
  i0.ɵɵelementEnd()()();
724
- i0.ɵɵelementStart(9, "div", 151)(10, "div", 156);
725
- i0.ɵɵelement(11, "i", 82);
688
+ i0.ɵɵelementStart(9, "div", 145)(10, "div", 150);
689
+ i0.ɵɵelement(11, "i", 76);
726
690
  i0.ɵɵelementEnd();
727
- i0.ɵɵelementStart(12, "div", 153)(13, "span", 154);
691
+ i0.ɵɵelementStart(12, "div", 147)(13, "span", 148);
728
692
  i0.ɵɵtext(14);
729
693
  i0.ɵɵelementEnd();
730
- i0.ɵɵelementStart(15, "span", 155);
694
+ i0.ɵɵelementStart(15, "span", 149);
731
695
  i0.ɵɵtext(16, "Source Fields");
732
696
  i0.ɵɵelementEnd()()();
733
- i0.ɵɵelementStart(17, "div", 151)(18, "div", 157);
734
- i0.ɵɵelement(19, "i", 18);
697
+ i0.ɵɵelementStart(17, "div", 145)(18, "div", 151);
698
+ i0.ɵɵelement(19, "i", 58);
735
699
  i0.ɵɵelementEnd();
736
- i0.ɵɵelementStart(20, "div", 153)(21, "span", 154);
700
+ i0.ɵɵelementStart(20, "div", 147)(21, "span", 148);
737
701
  i0.ɵɵtext(22);
738
702
  i0.ɵɵelementEnd();
739
- i0.ɵɵelementStart(23, "span", 155);
703
+ i0.ɵɵelementStart(23, "span", 149);
740
704
  i0.ɵɵtext(24, "Last Sync");
741
705
  i0.ɵɵelementEnd()()();
742
- i0.ɵɵconditionalCreate(25, PipelinesComponent_Conditional_2_Conditional_52_Conditional_14_Conditional_2_Conditional_25_Template, 8, 11, "div", 151);
706
+ i0.ɵɵconditionalCreate(25, PipelinesComponent_Conditional_13_Conditional_52_Conditional_14_Conditional_2_Conditional_25_Template, 8, 11, "div", 145);
743
707
  i0.ɵɵelementEnd();
744
- i0.ɵɵelementStart(26, "div", 158)(27, "div", 159)(28, "span", 160);
708
+ i0.ɵɵelementStart(26, "div", 152)(27, "div", 153)(28, "span", 154);
745
709
  i0.ɵɵtext(29, "Sync Direction");
746
710
  i0.ɵɵelementEnd();
747
- i0.ɵɵelementStart(30, "span", 161);
711
+ i0.ɵɵelementStart(30, "span", 155);
748
712
  i0.ɵɵtext(31);
749
713
  i0.ɵɵelementEnd()();
750
- i0.ɵɵelementStart(32, "div", 159)(33, "span", 160);
714
+ i0.ɵɵelementStart(32, "div", 153)(33, "span", 154);
751
715
  i0.ɵɵtext(34, "Conflict Resolution");
752
716
  i0.ɵɵelementEnd();
753
- i0.ɵɵelementStart(35, "span", 161);
717
+ i0.ɵɵelementStart(35, "span", 155);
754
718
  i0.ɵɵtext(36);
755
719
  i0.ɵɵelementEnd()();
756
- i0.ɵɵelementStart(37, "div", 159)(38, "span", 160);
720
+ i0.ɵɵelementStart(37, "div", 153)(38, "span", 154);
757
721
  i0.ɵɵtext(39, "Delete Behavior");
758
722
  i0.ɵɵelementEnd();
759
- i0.ɵɵelementStart(40, "span", 161);
723
+ i0.ɵɵelementStart(40, "span", 155);
760
724
  i0.ɵɵtext(41);
761
725
  i0.ɵɵelementEnd()();
762
- i0.ɵɵelementStart(42, "div", 159)(43, "span", 160);
726
+ i0.ɵɵelementStart(42, "div", 153)(43, "span", 154);
763
727
  i0.ɵɵtext(44, "Priority");
764
728
  i0.ɵɵelementEnd();
765
- i0.ɵɵelementStart(45, "span", 161);
729
+ i0.ɵɵelementStart(45, "span", 155);
766
730
  i0.ɵɵtext(46);
767
731
  i0.ɵɵelementEnd()();
768
- i0.ɵɵconditionalCreate(47, PipelinesComponent_Conditional_2_Conditional_52_Conditional_14_Conditional_2_Conditional_47_Template, 5, 0, "div", 159);
732
+ i0.ɵɵconditionalCreate(47, PipelinesComponent_Conditional_13_Conditional_52_Conditional_14_Conditional_2_Conditional_47_Template, 5, 0, "div", 153);
769
733
  i0.ɵɵelementEnd();
770
734
  } if (rf & 2) {
771
- const ctx_r1 = i0.ɵɵnextContext(4);
735
+ const ctx_r2 = i0.ɵɵnextContext(4);
772
736
  i0.ɵɵadvance(6);
773
- i0.ɵɵtextInterpolate(ctx_r1.InfoDestRecordCount ?? "-");
737
+ i0.ɵɵtextInterpolate(ctx_r2.InfoDestRecordCount ?? "-");
774
738
  i0.ɵɵadvance(8);
775
- i0.ɵɵtextInterpolate(ctx_r1.EditorSourceFields.length);
739
+ i0.ɵɵtextInterpolate(ctx_r2.EditorSourceFields.length);
776
740
  i0.ɵɵadvance(8);
777
- i0.ɵɵtextInterpolate(ctx_r1.FormatSyncDate((ctx_r1.InfoLastSync == null ? null : ctx_r1.InfoLastSync.StartedAt) ?? null));
741
+ i0.ɵɵtextInterpolate(ctx_r2.FormatSyncDate((ctx_r2.InfoLastSync == null ? null : ctx_r2.InfoLastSync.StartedAt) ?? null));
778
742
  i0.ɵɵadvance(3);
779
- i0.ɵɵconditional(ctx_r1.InfoLastSync ? 25 : -1);
743
+ i0.ɵɵconditional(ctx_r2.InfoLastSync ? 25 : -1);
780
744
  i0.ɵɵadvance(6);
781
- i0.ɵɵtextInterpolate(ctx_r1.EditorEntityMap == null ? null : ctx_r1.EditorEntityMap.SyncDirection);
745
+ i0.ɵɵtextInterpolate(ctx_r2.EditorEntityMap == null ? null : ctx_r2.EditorEntityMap.SyncDirection);
782
746
  i0.ɵɵadvance(5);
783
- i0.ɵɵtextInterpolate(ctx_r1.EditorEntityMap == null ? null : ctx_r1.EditorEntityMap.ConflictResolution);
747
+ i0.ɵɵtextInterpolate(ctx_r2.EditorEntityMap == null ? null : ctx_r2.EditorEntityMap.ConflictResolution);
784
748
  i0.ɵɵadvance(5);
785
- i0.ɵɵtextInterpolate(ctx_r1.EditorEntityMap == null ? null : ctx_r1.EditorEntityMap.DeleteBehavior);
749
+ i0.ɵɵtextInterpolate(ctx_r2.EditorEntityMap == null ? null : ctx_r2.EditorEntityMap.DeleteBehavior);
786
750
  i0.ɵɵadvance(5);
787
- i0.ɵɵtextInterpolate(ctx_r1.EditorEntityMap == null ? null : ctx_r1.EditorEntityMap.Priority);
751
+ i0.ɵɵtextInterpolate(ctx_r2.EditorEntityMap == null ? null : ctx_r2.EditorEntityMap.Priority);
788
752
  i0.ɵɵadvance();
789
- i0.ɵɵconditional((ctx_r1.EditorEntityMap == null ? null : ctx_r1.EditorEntityMap.MatchStrategy) ? 47 : -1);
753
+ i0.ɵɵconditional((ctx_r2.EditorEntityMap == null ? null : ctx_r2.EditorEntityMap.MatchStrategy) ? 47 : -1);
790
754
  } }
791
- function PipelinesComponent_Conditional_2_Conditional_52_Conditional_14_Template(rf, ctx) { if (rf & 1) {
792
- i0.ɵɵelementStart(0, "div", 118);
793
- i0.ɵɵconditionalCreate(1, PipelinesComponent_Conditional_2_Conditional_52_Conditional_14_Conditional_1_Template, 3, 0, "div", 149)(2, PipelinesComponent_Conditional_2_Conditional_52_Conditional_14_Conditional_2_Template, 48, 9);
755
+ function PipelinesComponent_Conditional_13_Conditional_52_Conditional_14_Template(rf, ctx) { if (rf & 1) {
756
+ i0.ɵɵelementStart(0, "div", 112);
757
+ i0.ɵɵconditionalCreate(1, PipelinesComponent_Conditional_13_Conditional_52_Conditional_14_Conditional_1_Template, 3, 0, "div", 143)(2, PipelinesComponent_Conditional_13_Conditional_52_Conditional_14_Conditional_2_Template, 48, 9);
794
758
  i0.ɵɵelementEnd();
795
759
  } if (rf & 2) {
796
- const ctx_r1 = i0.ɵɵnextContext(3);
760
+ const ctx_r2 = i0.ɵɵnextContext(3);
797
761
  i0.ɵɵadvance();
798
- i0.ɵɵconditional(ctx_r1.InfoPanelLoading ? 1 : 2);
762
+ i0.ɵɵconditional(ctx_r2.InfoPanelLoading ? 1 : 2);
799
763
  } }
800
- function PipelinesComponent_Conditional_2_Conditional_52_Conditional_15_Conditional_16_Template(rf, ctx) { if (rf & 1) {
801
- i0.ɵɵelement(0, "i", 99);
764
+ function PipelinesComponent_Conditional_13_Conditional_52_Conditional_15_Conditional_16_Template(rf, ctx) { if (rf & 1) {
765
+ i0.ɵɵelement(0, "i", 93);
802
766
  } }
803
- function PipelinesComponent_Conditional_2_Conditional_52_Conditional_15_Conditional_21_Template(rf, ctx) { if (rf & 1) {
804
- i0.ɵɵelement(0, "i", 99);
767
+ function PipelinesComponent_Conditional_13_Conditional_52_Conditional_15_Conditional_21_Template(rf, ctx) { if (rf & 1) {
768
+ i0.ɵɵelement(0, "i", 93);
805
769
  } }
806
- function PipelinesComponent_Conditional_2_Conditional_52_Conditional_15_For_42_For_6_Template(rf, ctx) { if (rf & 1) {
807
- i0.ɵɵelementStart(0, "option", 190);
770
+ function PipelinesComponent_Conditional_13_Conditional_52_Conditional_15_For_42_For_6_Template(rf, ctx) { if (rf & 1) {
771
+ i0.ɵɵelementStart(0, "option", 184);
808
772
  i0.ɵɵtext(1);
809
773
  i0.ɵɵelementEnd();
810
774
  } if (rf & 2) {
811
- const tt_r31 = ctx.$implicit;
812
- const step_r32 = i0.ɵɵnextContext().$implicit;
813
- i0.ɵɵproperty("value", tt_r31.Value)("selected", tt_r31.Value === step_r32.Type);
775
+ const tt_r30 = ctx.$implicit;
776
+ const step_r31 = i0.ɵɵnextContext().$implicit;
777
+ i0.ɵɵproperty("value", tt_r30.Value)("selected", tt_r30.Value === step_r31.Type);
814
778
  i0.ɵɵadvance();
815
- i0.ɵɵtextInterpolate(tt_r31.Label);
779
+ i0.ɵɵtextInterpolate(tt_r30.Label);
816
780
  } }
817
- function PipelinesComponent_Conditional_2_Conditional_52_Conditional_15_For_42_Conditional_9_For_2_Template(rf, ctx) { if (rf & 1) {
818
- const _r33 = i0.ɵɵgetCurrentView();
819
- i0.ɵɵelementStart(0, "div", 198)(1, "label");
781
+ function PipelinesComponent_Conditional_13_Conditional_52_Conditional_15_For_42_Conditional_9_For_2_Template(rf, ctx) { if (rf & 1) {
782
+ const _r32 = i0.ɵɵgetCurrentView();
783
+ i0.ɵɵelementStart(0, "div", 192)(1, "label");
820
784
  i0.ɵɵtext(2);
821
785
  i0.ɵɵelementEnd();
822
- i0.ɵɵelementStart(3, "input", 199);
823
- i0.ɵɵlistener("input", function PipelinesComponent_Conditional_2_Conditional_52_Conditional_15_For_42_Conditional_9_For_2_Template_input_input_3_listener($event) { const key_r34 = i0.ɵɵrestoreView(_r33).$implicit; const ɵ$index_726_r30 = i0.ɵɵnextContext(2).$index; const conn_r35 = i0.ɵɵnextContext(); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnTransformConfigChange(conn_r35, ɵ$index_726_r30, key_r34, $event.target.value)); });
786
+ i0.ɵɵelementStart(3, "input", 193);
787
+ i0.ɵɵlistener("input", function PipelinesComponent_Conditional_13_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_711_r29 = i0.ɵɵnextContext(2).$index; const conn_r34 = i0.ɵɵnextContext(); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.OnTransformConfigChange(conn_r34, ɵ$index_711_r29, key_r33, $event.target.value)); });
824
788
  i0.ɵɵelementEnd()();
825
789
  } if (rf & 2) {
826
- const key_r34 = ctx.$implicit;
827
- const step_r32 = i0.ɵɵnextContext(2).$implicit;
828
- const ctx_r1 = i0.ɵɵnextContext(4);
790
+ const key_r33 = ctx.$implicit;
791
+ const step_r31 = i0.ɵɵnextContext(2).$implicit;
792
+ const ctx_r2 = i0.ɵɵnextContext(4);
829
793
  i0.ɵɵadvance(2);
830
- i0.ɵɵtextInterpolate(key_r34);
794
+ i0.ɵɵtextInterpolate(key_r33);
831
795
  i0.ɵɵadvance();
832
- i0.ɵɵproperty("placeholder", i0.ɵɵinterpolate(key_r34))("value", ctx_r1.GetConfigValue(step_r32, key_r34));
796
+ i0.ɵɵproperty("placeholder", i0.ɵɵinterpolate(key_r33))("value", ctx_r2.GetConfigValue(step_r31, key_r33));
833
797
  } }
834
- function PipelinesComponent_Conditional_2_Conditional_52_Conditional_15_For_42_Conditional_9_Template(rf, ctx) { if (rf & 1) {
835
- i0.ɵɵelementStart(0, "div", 192);
836
- i0.ɵɵrepeaterCreate(1, PipelinesComponent_Conditional_2_Conditional_52_Conditional_15_For_42_Conditional_9_For_2_Template, 4, 4, "div", 198, i0.ɵɵrepeaterTrackByIdentity);
798
+ function PipelinesComponent_Conditional_13_Conditional_52_Conditional_15_For_42_Conditional_9_Template(rf, ctx) { if (rf & 1) {
799
+ i0.ɵɵelementStart(0, "div", 186);
800
+ i0.ɵɵrepeaterCreate(1, PipelinesComponent_Conditional_13_Conditional_52_Conditional_15_For_42_Conditional_9_For_2_Template, 4, 4, "div", 192, i0.ɵɵrepeaterTrackByIdentity);
837
801
  i0.ɵɵelementEnd();
838
802
  } if (rf & 2) {
839
- const step_r32 = i0.ɵɵnextContext().$implicit;
840
- const ctx_r1 = i0.ɵɵnextContext(4);
803
+ const step_r31 = i0.ɵɵnextContext().$implicit;
804
+ const ctx_r2 = i0.ɵɵnextContext(4);
841
805
  i0.ɵɵadvance();
842
- i0.ɵɵrepeater(ctx_r1.GetConfigKeys(step_r32));
806
+ i0.ɵɵrepeater(ctx_r2.GetConfigKeys(step_r31));
843
807
  } }
844
- function PipelinesComponent_Conditional_2_Conditional_52_Conditional_15_For_42_Template(rf, ctx) { if (rf & 1) {
845
- const _r29 = i0.ɵɵgetCurrentView();
846
- i0.ɵɵelementStart(0, "div", 182)(1, "div", 187)(2, "span", 188);
808
+ function PipelinesComponent_Conditional_13_Conditional_52_Conditional_15_For_42_Template(rf, ctx) { if (rf & 1) {
809
+ const _r28 = i0.ɵɵgetCurrentView();
810
+ i0.ɵɵelementStart(0, "div", 176)(1, "div", 181)(2, "span", 182);
847
811
  i0.ɵɵtext(3);
848
812
  i0.ɵɵelementEnd();
849
- i0.ɵɵelementStart(4, "select", 189);
850
- i0.ɵɵlistener("change", function PipelinesComponent_Conditional_2_Conditional_52_Conditional_15_For_42_Template_select_change_4_listener($event) { const ɵ$index_726_r30 = i0.ɵɵrestoreView(_r29).$index; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnConnectionTransformChange(ɵ$index_726_r30, $event.target.value)); });
851
- i0.ɵɵrepeaterCreate(5, PipelinesComponent_Conditional_2_Conditional_52_Conditional_15_For_42_For_6_Template, 2, 3, "option", 190, _forTrack4);
813
+ i0.ɵɵelementStart(4, "select", 183);
814
+ i0.ɵɵlistener("change", function PipelinesComponent_Conditional_13_Conditional_52_Conditional_15_For_42_Template_select_change_4_listener($event) { const ɵ$index_711_r29 = i0.ɵɵrestoreView(_r28).$index; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.OnConnectionTransformChange(ɵ$index_711_r29, $event.target.value)); });
815
+ i0.ɵɵrepeaterCreate(5, PipelinesComponent_Conditional_13_Conditional_52_Conditional_15_For_42_For_6_Template, 2, 3, "option", 184, _forTrack4);
852
816
  i0.ɵɵelementEnd();
853
- i0.ɵɵelementStart(7, "button", 191);
854
- i0.ɵɵlistener("click", function PipelinesComponent_Conditional_2_Conditional_52_Conditional_15_For_42_Template_button_click_7_listener() { const ɵ$index_726_r30 = i0.ɵɵrestoreView(_r29).$index; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.RemoveTransformStep(ɵ$index_726_r30)); });
855
- i0.ɵɵelement(8, "i", 186);
817
+ i0.ɵɵelementStart(7, "button", 185);
818
+ i0.ɵɵlistener("click", function PipelinesComponent_Conditional_13_Conditional_52_Conditional_15_For_42_Template_button_click_7_listener() { const ɵ$index_711_r29 = i0.ɵɵrestoreView(_r28).$index; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.RemoveTransformStep(ɵ$index_711_r29)); });
819
+ i0.ɵɵelement(8, "i", 180);
856
820
  i0.ɵɵelementEnd()();
857
- i0.ɵɵconditionalCreate(9, PipelinesComponent_Conditional_2_Conditional_52_Conditional_15_For_42_Conditional_9_Template, 3, 0, "div", 192);
858
- i0.ɵɵelementStart(10, "div", 193)(11, "label");
821
+ i0.ɵɵconditionalCreate(9, PipelinesComponent_Conditional_13_Conditional_52_Conditional_15_For_42_Conditional_9_Template, 3, 0, "div", 186);
822
+ i0.ɵɵelementStart(10, "div", 187)(11, "label");
859
823
  i0.ɵɵtext(12, "On Error:");
860
824
  i0.ɵɵelementEnd();
861
- i0.ɵɵelementStart(13, "select", 194);
862
- i0.ɵɵlistener("change", function PipelinesComponent_Conditional_2_Conditional_52_Conditional_15_For_42_Template_select_change_13_listener($event) { const step_r32 = i0.ɵɵrestoreView(_r29).$implicit; const conn_r35 = i0.ɵɵnextContext(); step_r32.OnError = $event.target.value; return i0.ɵɵresetView(conn_r35.IsDirty = true); });
863
- i0.ɵɵelementStart(14, "option", 195);
825
+ i0.ɵɵelementStart(13, "select", 188);
826
+ i0.ɵɵlistener("change", function PipelinesComponent_Conditional_13_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); });
827
+ i0.ɵɵelementStart(14, "option", 189);
864
828
  i0.ɵɵtext(15, "Fail");
865
829
  i0.ɵɵelementEnd();
866
- i0.ɵɵelementStart(16, "option", 196);
830
+ i0.ɵɵelementStart(16, "option", 190);
867
831
  i0.ɵɵtext(17, "Skip");
868
832
  i0.ɵɵelementEnd();
869
- i0.ɵɵelementStart(18, "option", 197);
833
+ i0.ɵɵelementStart(18, "option", 191);
870
834
  i0.ɵɵtext(19, "Null");
871
835
  i0.ɵɵelementEnd()()()();
872
836
  } if (rf & 2) {
873
- const step_r32 = ctx.$implicit;
874
- const ɵ$index_726_r30 = ctx.$index;
875
- const ctx_r1 = i0.ɵɵnextContext(4);
837
+ const step_r31 = ctx.$implicit;
838
+ const ɵ$index_711_r29 = ctx.$index;
839
+ const ctx_r2 = i0.ɵɵnextContext(4);
876
840
  i0.ɵɵadvance(3);
877
- i0.ɵɵtextInterpolate(ɵ$index_726_r30 + 1);
841
+ i0.ɵɵtextInterpolate(ɵ$index_711_r29 + 1);
878
842
  i0.ɵɵadvance();
879
- i0.ɵɵproperty("value", step_r32.Type);
843
+ i0.ɵɵproperty("value", step_r31.Type);
880
844
  i0.ɵɵadvance();
881
- i0.ɵɵrepeater(ctx_r1.TRANSFORM_TYPES);
845
+ i0.ɵɵrepeater(ctx_r2.TRANSFORM_TYPES);
882
846
  i0.ɵɵadvance(4);
883
- i0.ɵɵconditional(step_r32.Type !== "direct" ? 9 : -1);
847
+ i0.ɵɵconditional(step_r31.Type !== "direct" ? 9 : -1);
884
848
  i0.ɵɵadvance(4);
885
- i0.ɵɵproperty("value", step_r32.OnError);
849
+ i0.ɵɵproperty("value", step_r31.OnError);
886
850
  } }
887
- function PipelinesComponent_Conditional_2_Conditional_52_Conditional_15_Conditional_43_Template(rf, ctx) { if (rf & 1) {
888
- i0.ɵɵelementStart(0, "div", 183);
851
+ function PipelinesComponent_Conditional_13_Conditional_52_Conditional_15_Conditional_43_Template(rf, ctx) { if (rf & 1) {
852
+ i0.ɵɵelementStart(0, "div", 177);
889
853
  i0.ɵɵtext(1, " No transform steps. Data passes through as-is. ");
890
854
  i0.ɵɵelementEnd();
891
855
  } }
892
- function PipelinesComponent_Conditional_2_Conditional_52_Conditional_15_Template(rf, ctx) { if (rf & 1) {
893
- const _r28 = i0.ɵɵgetCurrentView();
894
- i0.ɵɵelementStart(0, "div", 163);
895
- i0.ɵɵlistener("click", function PipelinesComponent_Conditional_2_Conditional_52_Conditional_15_Template_div_click_0_listener($event) { i0.ɵɵrestoreView(_r28); return i0.ɵɵresetView($event.stopPropagation()); });
896
- i0.ɵɵelementStart(1, "div", 164)(2, "span", 165);
856
+ function PipelinesComponent_Conditional_13_Conditional_52_Conditional_15_Template(rf, ctx) { if (rf & 1) {
857
+ const _r27 = i0.ɵɵgetCurrentView();
858
+ i0.ɵɵelementStart(0, "div", 157);
859
+ i0.ɵɵlistener("click", function PipelinesComponent_Conditional_13_Conditional_52_Conditional_15_Template_div_click_0_listener($event) { i0.ɵɵrestoreView(_r27); return i0.ɵɵresetView($event.stopPropagation()); });
860
+ i0.ɵɵelementStart(1, "div", 158)(2, "span", 159);
897
861
  i0.ɵɵtext(3, "Mapping Details");
898
862
  i0.ɵɵelementEnd();
899
- i0.ɵɵelementStart(4, "button", 166);
900
- i0.ɵɵlistener("click", function PipelinesComponent_Conditional_2_Conditional_52_Conditional_15_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r28); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.DeselectConnection()); });
901
- i0.ɵɵelement(5, "i", 104);
863
+ i0.ɵɵelementStart(4, "button", 160);
864
+ i0.ɵɵlistener("click", function PipelinesComponent_Conditional_13_Conditional_52_Conditional_15_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r27); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.DeselectConnection()); });
865
+ i0.ɵɵelement(5, "i", 98);
902
866
  i0.ɵɵelementEnd()();
903
- i0.ɵɵelementStart(6, "div", 167)(7, "div", 168)(8, "span", 169);
867
+ i0.ɵɵelementStart(6, "div", 161)(7, "div", 162)(8, "span", 163);
904
868
  i0.ɵɵtext(9);
905
869
  i0.ɵɵelementEnd();
906
- i0.ɵɵelement(10, "i", 170);
907
- i0.ɵɵelementStart(11, "span", 171);
870
+ i0.ɵɵelement(10, "i", 164);
871
+ i0.ɵɵelementStart(11, "span", 165);
908
872
  i0.ɵɵtext(12);
909
873
  i0.ɵɵelementEnd()()();
910
- i0.ɵɵelementStart(13, "div", 172)(14, "label", 173);
911
- i0.ɵɵlistener("click", function PipelinesComponent_Conditional_2_Conditional_52_Conditional_15_Template_label_click_14_listener() { i0.ɵɵrestoreView(_r28); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.ToggleConnectionKey()); });
912
- i0.ɵɵelementStart(15, "span", 174);
913
- i0.ɵɵconditionalCreate(16, PipelinesComponent_Conditional_2_Conditional_52_Conditional_15_Conditional_16_Template, 1, 0, "i", 99);
874
+ i0.ɵɵelementStart(13, "div", 166)(14, "label", 167);
875
+ i0.ɵɵlistener("click", function PipelinesComponent_Conditional_13_Conditional_52_Conditional_15_Template_label_click_14_listener() { i0.ɵɵrestoreView(_r27); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.ToggleConnectionKey()); });
876
+ i0.ɵɵelementStart(15, "span", 168);
877
+ i0.ɵɵconditionalCreate(16, PipelinesComponent_Conditional_13_Conditional_52_Conditional_15_Conditional_16_Template, 1, 0, "i", 93);
914
878
  i0.ɵɵelementEnd();
915
879
  i0.ɵɵelementStart(17, "span");
916
880
  i0.ɵɵtext(18, "Key Field");
917
881
  i0.ɵɵelementEnd()();
918
- i0.ɵɵelementStart(19, "label", 173);
919
- i0.ɵɵlistener("click", function PipelinesComponent_Conditional_2_Conditional_52_Conditional_15_Template_label_click_19_listener() { i0.ɵɵrestoreView(_r28); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.ToggleConnectionRequired()); });
920
- i0.ɵɵelementStart(20, "span", 174);
921
- i0.ɵɵconditionalCreate(21, PipelinesComponent_Conditional_2_Conditional_52_Conditional_15_Conditional_21_Template, 1, 0, "i", 99);
882
+ i0.ɵɵelementStart(19, "label", 167);
883
+ i0.ɵɵlistener("click", function PipelinesComponent_Conditional_13_Conditional_52_Conditional_15_Template_label_click_19_listener() { i0.ɵɵrestoreView(_r27); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.ToggleConnectionRequired()); });
884
+ i0.ɵɵelementStart(20, "span", 168);
885
+ i0.ɵɵconditionalCreate(21, PipelinesComponent_Conditional_13_Conditional_52_Conditional_15_Conditional_21_Template, 1, 0, "i", 93);
922
886
  i0.ɵɵelementEnd();
923
887
  i0.ɵɵelementStart(22, "span");
924
888
  i0.ɵɵtext(23, "Required");
925
889
  i0.ɵɵelementEnd()()();
926
- i0.ɵɵelementStart(24, "div", 175)(25, "label", 176);
890
+ i0.ɵɵelementStart(24, "div", 169)(25, "label", 170);
927
891
  i0.ɵɵtext(26, "Direction");
928
892
  i0.ɵɵelementEnd();
929
- i0.ɵɵelementStart(27, "div", 177)(28, "button", 178);
930
- i0.ɵɵlistener("click", function PipelinesComponent_Conditional_2_Conditional_52_Conditional_15_Template_button_click_28_listener() { i0.ɵɵrestoreView(_r28); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnConnectionDirectionChange("SourceToDest")); });
893
+ i0.ɵɵelementStart(27, "div", 171)(28, "button", 172);
894
+ i0.ɵɵlistener("click", function PipelinesComponent_Conditional_13_Conditional_52_Conditional_15_Template_button_click_28_listener() { i0.ɵɵrestoreView(_r27); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.OnConnectionDirectionChange("SourceToDest")); });
931
895
  i0.ɵɵtext(29, " Source \u2192 Dest ");
932
896
  i0.ɵɵelementEnd();
933
- i0.ɵɵelementStart(30, "button", 178);
934
- i0.ɵɵlistener("click", function PipelinesComponent_Conditional_2_Conditional_52_Conditional_15_Template_button_click_30_listener() { i0.ɵɵrestoreView(_r28); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnConnectionDirectionChange("DestToSource")); });
897
+ i0.ɵɵelementStart(30, "button", 172);
898
+ i0.ɵɵlistener("click", function PipelinesComponent_Conditional_13_Conditional_52_Conditional_15_Template_button_click_30_listener() { i0.ɵɵrestoreView(_r27); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.OnConnectionDirectionChange("DestToSource")); });
935
899
  i0.ɵɵtext(31, " Dest \u2192 Source ");
936
900
  i0.ɵɵelementEnd();
937
- i0.ɵɵelementStart(32, "button", 178);
938
- i0.ɵɵlistener("click", function PipelinesComponent_Conditional_2_Conditional_52_Conditional_15_Template_button_click_32_listener() { i0.ɵɵrestoreView(_r28); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnConnectionDirectionChange("Both")); });
901
+ i0.ɵɵelementStart(32, "button", 172);
902
+ i0.ɵɵlistener("click", function PipelinesComponent_Conditional_13_Conditional_52_Conditional_15_Template_button_click_32_listener() { i0.ɵɵrestoreView(_r27); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.OnConnectionDirectionChange("Both")); });
939
903
  i0.ɵɵtext(33, " Both ");
940
904
  i0.ɵɵelementEnd()()();
941
- i0.ɵɵelementStart(34, "div", 175)(35, "div", 179)(36, "label", 176);
905
+ i0.ɵɵelementStart(34, "div", 169)(35, "div", 173)(36, "label", 170);
942
906
  i0.ɵɵtext(37, "Transform Pipeline");
943
907
  i0.ɵɵelementEnd();
944
- i0.ɵɵelementStart(38, "button", 180);
945
- i0.ɵɵlistener("click", function PipelinesComponent_Conditional_2_Conditional_52_Conditional_15_Template_button_click_38_listener() { i0.ɵɵrestoreView(_r28); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.AddTransformStep()); });
946
- i0.ɵɵelement(39, "i", 181);
908
+ i0.ɵɵelementStart(38, "button", 174);
909
+ i0.ɵɵlistener("click", function PipelinesComponent_Conditional_13_Conditional_52_Conditional_15_Template_button_click_38_listener() { i0.ɵɵrestoreView(_r27); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.AddTransformStep()); });
910
+ i0.ɵɵelement(39, "i", 175);
947
911
  i0.ɵɵtext(40, " Add Step ");
948
912
  i0.ɵɵelementEnd()();
949
- i0.ɵɵrepeaterCreate(41, PipelinesComponent_Conditional_2_Conditional_52_Conditional_15_For_42_Template, 20, 4, "div", 182, i0.ɵɵrepeaterTrackByIndex);
950
- i0.ɵɵconditionalCreate(43, PipelinesComponent_Conditional_2_Conditional_52_Conditional_15_Conditional_43_Template, 2, 0, "div", 183);
913
+ i0.ɵɵrepeaterCreate(41, PipelinesComponent_Conditional_13_Conditional_52_Conditional_15_For_42_Template, 20, 4, "div", 176, i0.ɵɵrepeaterTrackByIndex);
914
+ i0.ɵɵconditionalCreate(43, PipelinesComponent_Conditional_13_Conditional_52_Conditional_15_Conditional_43_Template, 2, 0, "div", 177);
951
915
  i0.ɵɵelementEnd();
952
- i0.ɵɵelementStart(44, "div", 184)(45, "button", 185);
953
- i0.ɵɵlistener("click", function PipelinesComponent_Conditional_2_Conditional_52_Conditional_15_Template_button_click_45_listener() { i0.ɵɵrestoreView(_r28); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.RemoveSelectedConnection()); });
954
- i0.ɵɵelement(46, "i", 186);
916
+ i0.ɵɵelementStart(44, "div", 178)(45, "button", 179);
917
+ i0.ɵɵlistener("click", function PipelinesComponent_Conditional_13_Conditional_52_Conditional_15_Template_button_click_45_listener() { i0.ɵɵrestoreView(_r27); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.RemoveSelectedConnection()); });
918
+ i0.ɵɵelement(46, "i", 180);
955
919
  i0.ɵɵtext(47, " Remove Mapping ");
956
920
  i0.ɵɵelementEnd()()();
957
921
  } if (rf & 2) {
958
- const conn_r35 = ctx;
922
+ const conn_r34 = ctx;
959
923
  i0.ɵɵadvance(9);
960
- i0.ɵɵtextInterpolate(conn_r35.SourceFieldName);
924
+ i0.ɵɵtextInterpolate(conn_r34.SourceFieldName);
961
925
  i0.ɵɵadvance();
962
- i0.ɵɵclassProp("fa-arrow-right", conn_r35.Direction === "SourceToDest")("fa-arrow-left", conn_r35.Direction === "DestToSource")("fa-right-left", conn_r35.Direction === "Both");
926
+ i0.ɵɵclassProp("fa-arrow-right", conn_r34.Direction === "SourceToDest")("fa-arrow-left", conn_r34.Direction === "DestToSource")("fa-right-left", conn_r34.Direction === "Both");
963
927
  i0.ɵɵadvance(2);
964
- i0.ɵɵtextInterpolate(conn_r35.DestFieldName);
928
+ i0.ɵɵtextInterpolate(conn_r34.DestFieldName);
965
929
  i0.ɵɵadvance(3);
966
- i0.ɵɵclassProp("active", conn_r35.IsKeyField);
930
+ i0.ɵɵclassProp("active", conn_r34.IsKeyField);
967
931
  i0.ɵɵadvance();
968
- i0.ɵɵconditional(conn_r35.IsKeyField ? 16 : -1);
932
+ i0.ɵɵconditional(conn_r34.IsKeyField ? 16 : -1);
969
933
  i0.ɵɵadvance(4);
970
- i0.ɵɵclassProp("active", conn_r35.IsRequired);
934
+ i0.ɵɵclassProp("active", conn_r34.IsRequired);
971
935
  i0.ɵɵadvance();
972
- i0.ɵɵconditional(conn_r35.IsRequired ? 21 : -1);
936
+ i0.ɵɵconditional(conn_r34.IsRequired ? 21 : -1);
973
937
  i0.ɵɵadvance(7);
974
- i0.ɵɵclassProp("active", conn_r35.Direction === "SourceToDest");
938
+ i0.ɵɵclassProp("active", conn_r34.Direction === "SourceToDest");
975
939
  i0.ɵɵadvance(2);
976
- i0.ɵɵclassProp("active", conn_r35.Direction === "DestToSource");
940
+ i0.ɵɵclassProp("active", conn_r34.Direction === "DestToSource");
977
941
  i0.ɵɵadvance(2);
978
- i0.ɵɵclassProp("active", conn_r35.Direction === "Both");
942
+ i0.ɵɵclassProp("active", conn_r34.Direction === "Both");
979
943
  i0.ɵɵadvance(9);
980
- i0.ɵɵrepeater(conn_r35.TransformSteps);
944
+ i0.ɵɵrepeater(conn_r34.TransformSteps);
981
945
  i0.ɵɵadvance(2);
982
- i0.ɵɵconditional(conn_r35.TransformSteps.length === 0 ? 43 : -1);
946
+ i0.ɵɵconditional(conn_r34.TransformSteps.length === 0 ? 43 : -1);
983
947
  } }
984
- function PipelinesComponent_Conditional_2_Conditional_52_Template(rf, ctx) { if (rf & 1) {
985
- const _r19 = i0.ɵɵgetCurrentView();
986
- i0.ɵɵelementStart(0, "div", 111)(1, "div", 112)(2, "div", 113);
987
- i0.ɵɵlistener("click", function PipelinesComponent_Conditional_2_Conditional_52_Template_div_click_2_listener() { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.ToggleFieldMaps()); });
988
- i0.ɵɵelement(3, "i", 114);
989
- i0.ɵɵelementStart(4, "span", 115);
948
+ function PipelinesComponent_Conditional_13_Conditional_52_Template(rf, ctx) { if (rf & 1) {
949
+ const _r18 = i0.ɵɵgetCurrentView();
950
+ i0.ɵɵelementStart(0, "div", 105)(1, "div", 106)(2, "div", 107);
951
+ i0.ɵɵlistener("click", function PipelinesComponent_Conditional_13_Conditional_52_Template_div_click_2_listener() { i0.ɵɵrestoreView(_r18); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.ToggleFieldMaps()); });
952
+ i0.ɵɵelement(3, "i", 108);
953
+ i0.ɵɵelementStart(4, "span", 109);
990
954
  i0.ɵɵtext(5, "Field Mappings");
991
955
  i0.ɵɵelementEnd();
992
- i0.ɵɵelementStart(6, "span", 116);
956
+ i0.ɵɵelementStart(6, "span", 110);
993
957
  i0.ɵɵtext(7);
994
958
  i0.ɵɵelementEnd()();
995
- i0.ɵɵconditionalCreate(8, PipelinesComponent_Conditional_2_Conditional_52_Conditional_8_Template, 35, 11, "div", 117);
959
+ i0.ɵɵconditionalCreate(8, PipelinesComponent_Conditional_13_Conditional_52_Conditional_8_Template, 35, 11, "div", 111);
996
960
  i0.ɵɵelementEnd();
997
- i0.ɵɵelementStart(9, "div", 112)(10, "div", 113);
998
- i0.ɵɵlistener("click", function PipelinesComponent_Conditional_2_Conditional_52_Template_div_click_10_listener() { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.ToggleInfoPanel()); });
999
- i0.ɵɵelement(11, "i", 114);
1000
- i0.ɵɵelementStart(12, "span", 115);
961
+ i0.ɵɵelementStart(9, "div", 106)(10, "div", 107);
962
+ i0.ɵɵlistener("click", function PipelinesComponent_Conditional_13_Conditional_52_Template_div_click_10_listener() { i0.ɵɵrestoreView(_r18); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.ToggleInfoPanel()); });
963
+ i0.ɵɵelement(11, "i", 108);
964
+ i0.ɵɵelementStart(12, "span", 109);
1001
965
  i0.ɵɵtext(13, "Sync Info");
1002
966
  i0.ɵɵelementEnd()();
1003
- i0.ɵɵconditionalCreate(14, PipelinesComponent_Conditional_2_Conditional_52_Conditional_14_Template, 3, 1, "div", 118);
967
+ i0.ɵɵconditionalCreate(14, PipelinesComponent_Conditional_13_Conditional_52_Conditional_14_Template, 3, 1, "div", 112);
1004
968
  i0.ɵɵelementEnd()();
1005
- i0.ɵɵconditionalCreate(15, PipelinesComponent_Conditional_2_Conditional_52_Conditional_15_Template, 48, 21, "div", 119);
969
+ i0.ɵɵconditionalCreate(15, PipelinesComponent_Conditional_13_Conditional_52_Conditional_15_Template, 48, 21, "div", 113);
1006
970
  } if (rf & 2) {
1007
971
  let tmp_11_0;
1008
- const ctx_r1 = i0.ɵɵnextContext(2);
972
+ const ctx_r2 = i0.ɵɵnextContext(2);
1009
973
  i0.ɵɵadvance();
1010
- i0.ɵɵclassProp("collapsed", !ctx_r1.FieldMapsExpanded);
974
+ i0.ɵɵclassProp("collapsed", !ctx_r2.FieldMapsExpanded);
1011
975
  i0.ɵɵadvance(2);
1012
- i0.ɵɵclassProp("fa-chevron-down", ctx_r1.FieldMapsExpanded)("fa-chevron-right", !ctx_r1.FieldMapsExpanded);
976
+ i0.ɵɵclassProp("fa-chevron-down", ctx_r2.FieldMapsExpanded)("fa-chevron-right", !ctx_r2.FieldMapsExpanded);
1013
977
  i0.ɵɵadvance(4);
1014
- i0.ɵɵtextInterpolate1("", ctx_r1.EditorMappedCount, " mapped");
978
+ i0.ɵɵtextInterpolate1("", ctx_r2.EditorMappedCount, " mapped");
1015
979
  i0.ɵɵadvance();
1016
- i0.ɵɵconditional(ctx_r1.FieldMapsExpanded ? 8 : -1);
980
+ i0.ɵɵconditional(ctx_r2.FieldMapsExpanded ? 8 : -1);
1017
981
  i0.ɵɵadvance();
1018
- i0.ɵɵclassProp("collapsed", !ctx_r1.InfoPanelExpanded);
982
+ i0.ɵɵclassProp("collapsed", !ctx_r2.InfoPanelExpanded);
1019
983
  i0.ɵɵadvance(2);
1020
- i0.ɵɵclassProp("fa-chevron-down", ctx_r1.InfoPanelExpanded)("fa-chevron-right", !ctx_r1.InfoPanelExpanded);
984
+ i0.ɵɵclassProp("fa-chevron-down", ctx_r2.InfoPanelExpanded)("fa-chevron-right", !ctx_r2.InfoPanelExpanded);
1021
985
  i0.ɵɵadvance(3);
1022
- i0.ɵɵconditional(ctx_r1.InfoPanelExpanded ? 14 : -1);
986
+ i0.ɵɵconditional(ctx_r2.InfoPanelExpanded ? 14 : -1);
1023
987
  i0.ɵɵadvance();
1024
- i0.ɵɵconditional((tmp_11_0 = ctx_r1.SelectedConnection) ? 15 : -1, tmp_11_0);
988
+ i0.ɵɵconditional((tmp_11_0 = ctx_r2.SelectedConnection) ? 15 : -1, tmp_11_0);
1025
989
  } }
1026
- function PipelinesComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
1027
- const _r8 = i0.ɵɵgetCurrentView();
1028
- i0.ɵɵelementStart(0, "div", 1)(1, "div", 68)(2, "div", 69)(3, "button", 70);
1029
- i0.ɵɵlistener("click", function PipelinesComponent_Conditional_2_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.CloseVisualEditor()); });
1030
- i0.ɵɵelement(4, "i", 71);
990
+ function PipelinesComponent_Conditional_13_Template(rf, ctx) { if (rf & 1) {
991
+ const _r7 = i0.ɵɵgetCurrentView();
992
+ i0.ɵɵelementStart(0, "div", 12)(1, "div", 62)(2, "div", 63)(3, "button", 64);
993
+ i0.ɵɵlistener("click", function PipelinesComponent_Conditional_13_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r7); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.CloseVisualEditor()); });
994
+ i0.ɵɵelement(4, "i", 65);
1031
995
  i0.ɵɵelementEnd();
1032
- i0.ɵɵelementStart(5, "div", 72)(6, "span", 73);
996
+ i0.ɵɵelementStart(5, "div", 66)(6, "span", 67);
1033
997
  i0.ɵɵtext(7);
1034
998
  i0.ɵɵelementEnd();
1035
- i0.ɵɵelementStart(8, "span", 74);
1036
- i0.ɵɵelement(9, "i", 75);
999
+ i0.ɵɵelementStart(8, "span", 68);
1000
+ i0.ɵɵelement(9, "i", 69);
1037
1001
  i0.ɵɵelementEnd();
1038
- i0.ɵɵelementStart(10, "span", 76);
1002
+ i0.ɵɵelementStart(10, "span", 70);
1039
1003
  i0.ɵɵtext(11);
1040
1004
  i0.ɵɵelementEnd()();
1041
- i0.ɵɵconditionalCreate(12, PipelinesComponent_Conditional_2_Conditional_12_Template, 5, 3);
1005
+ i0.ɵɵconditionalCreate(12, PipelinesComponent_Conditional_13_Conditional_12_Template, 5, 3);
1042
1006
  i0.ɵɵelementEnd();
1043
- i0.ɵɵelementStart(13, "div", 77)(14, "span", 78)(15, "strong");
1007
+ i0.ɵɵelementStart(13, "div", 71)(14, "span", 72)(15, "strong");
1044
1008
  i0.ɵɵtext(16);
1045
1009
  i0.ɵɵelementEnd();
1046
1010
  i0.ɵɵtext(17, " mapped ");
1047
1011
  i0.ɵɵelementEnd();
1048
- i0.ɵɵelement(18, "span", 79);
1049
- i0.ɵɵelementStart(19, "span", 78)(20, "strong");
1012
+ i0.ɵɵelement(18, "span", 73);
1013
+ i0.ɵɵelementStart(19, "span", 72)(20, "strong");
1050
1014
  i0.ɵɵtext(21);
1051
1015
  i0.ɵɵelementEnd();
1052
1016
  i0.ɵɵtext(22, " key ");
1053
1017
  i0.ɵɵelementEnd();
1054
- i0.ɵɵelement(23, "span", 79);
1055
- i0.ɵɵelementStart(24, "span", 78)(25, "strong");
1018
+ i0.ɵɵelement(23, "span", 73);
1019
+ i0.ɵɵelementStart(24, "span", 72)(25, "strong");
1056
1020
  i0.ɵɵtext(26);
1057
1021
  i0.ɵɵelementEnd();
1058
1022
  i0.ɵɵtext(27, " required ");
1059
1023
  i0.ɵɵelementEnd()();
1060
- i0.ɵɵelementStart(28, "div", 80)(29, "button", 81);
1061
- i0.ɵɵlistener("click", function PipelinesComponent_Conditional_2_Template_button_click_29_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ToggleSourcePreview()); });
1062
- i0.ɵɵelement(30, "i", 82);
1024
+ i0.ɵɵelementStart(28, "div", 74)(29, "button", 75);
1025
+ i0.ɵɵlistener("click", function PipelinesComponent_Conditional_13_Template_button_click_29_listener() { i0.ɵɵrestoreView(_r7); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ToggleSourcePreview()); });
1026
+ i0.ɵɵelement(30, "i", 76);
1063
1027
  i0.ɵɵtext(31, " Source Data ");
1064
1028
  i0.ɵɵelementEnd();
1065
- i0.ɵɵelementStart(32, "button", 83);
1066
- i0.ɵɵlistener("click", function PipelinesComponent_Conditional_2_Template_button_click_32_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ToggleDestPreview()); });
1067
- i0.ɵɵelement(33, "i", 84);
1029
+ i0.ɵɵelementStart(32, "button", 77);
1030
+ i0.ɵɵlistener("click", function PipelinesComponent_Conditional_13_Template_button_click_32_listener() { i0.ɵɵrestoreView(_r7); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.ToggleDestPreview()); });
1031
+ i0.ɵɵelement(33, "i", 78);
1068
1032
  i0.ɵɵtext(34, " MJ Data ");
1069
1033
  i0.ɵɵelementEnd();
1070
- i0.ɵɵelement(35, "div", 85);
1071
- i0.ɵɵelementStart(36, "button", 86);
1072
- i0.ɵɵlistener("click", function PipelinesComponent_Conditional_2_Template_button_click_36_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.RunSchemaPipeline()); });
1073
- i0.ɵɵconditionalCreate(37, PipelinesComponent_Conditional_2_Conditional_37_Template, 2, 0)(38, PipelinesComponent_Conditional_2_Conditional_38_Template, 2, 0);
1034
+ i0.ɵɵelement(35, "div", 79);
1035
+ i0.ɵɵelementStart(36, "button", 80);
1036
+ i0.ɵɵlistener("click", function PipelinesComponent_Conditional_13_Template_button_click_36_listener() { i0.ɵɵrestoreView(_r7); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.RunSchemaPipeline()); });
1037
+ i0.ɵɵconditionalCreate(37, PipelinesComponent_Conditional_13_Conditional_37_Template, 2, 0)(38, PipelinesComponent_Conditional_13_Conditional_38_Template, 2, 0);
1074
1038
  i0.ɵɵelementEnd();
1075
- i0.ɵɵconditionalCreate(39, PipelinesComponent_Conditional_2_Conditional_39_Template, 3, 5, "span", 87);
1076
- i0.ɵɵelement(40, "div", 85);
1077
- i0.ɵɵelementStart(41, "button", 88);
1078
- i0.ɵɵlistener("click", function PipelinesComponent_Conditional_2_Template_button_click_41_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.AutoMapEditorFields()); });
1079
- i0.ɵɵelement(42, "i", 89);
1039
+ i0.ɵɵconditionalCreate(39, PipelinesComponent_Conditional_13_Conditional_39_Template, 3, 5, "span", 81);
1040
+ i0.ɵɵelement(40, "div", 79);
1041
+ i0.ɵɵelementStart(41, "button", 82);
1042
+ i0.ɵɵlistener("click", function PipelinesComponent_Conditional_13_Template_button_click_41_listener() { i0.ɵɵrestoreView(_r7); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.AutoMapEditorFields()); });
1043
+ i0.ɵɵelement(42, "i", 83);
1080
1044
  i0.ɵɵtext(43, " Auto-Map ");
1081
1045
  i0.ɵɵelementEnd();
1082
- i0.ɵɵelementStart(44, "button", 90);
1083
- i0.ɵɵlistener("click", function PipelinesComponent_Conditional_2_Template_button_click_44_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.SaveVisualEditor()); });
1084
- i0.ɵɵconditionalCreate(45, PipelinesComponent_Conditional_2_Conditional_45_Template, 2, 0)(46, PipelinesComponent_Conditional_2_Conditional_46_Template, 2, 0);
1046
+ i0.ɵɵelementStart(44, "button", 84);
1047
+ i0.ɵɵlistener("click", function PipelinesComponent_Conditional_13_Template_button_click_44_listener() { i0.ɵɵrestoreView(_r7); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.SaveVisualEditor()); });
1048
+ i0.ɵɵconditionalCreate(45, PipelinesComponent_Conditional_13_Conditional_45_Template, 2, 0)(46, PipelinesComponent_Conditional_13_Conditional_46_Template, 2, 0);
1085
1049
  i0.ɵɵelementEnd();
1086
- i0.ɵɵconditionalCreate(47, PipelinesComponent_Conditional_2_Conditional_47_Template, 3, 0, "span", 91);
1050
+ i0.ɵɵconditionalCreate(47, PipelinesComponent_Conditional_13_Conditional_47_Template, 3, 0, "span", 85);
1087
1051
  i0.ɵɵelementEnd()();
1088
- i0.ɵɵconditionalCreate(48, PipelinesComponent_Conditional_2_Conditional_48_Template, 3, 2, "div", 92);
1089
- i0.ɵɵconditionalCreate(49, PipelinesComponent_Conditional_2_Conditional_49_Template, 7, 1, "div", 93);
1090
- i0.ɵɵelementStart(50, "div", 94);
1091
- i0.ɵɵconditionalCreate(51, PipelinesComponent_Conditional_2_Conditional_51_Template, 4, 0, "div", 95)(52, PipelinesComponent_Conditional_2_Conditional_52_Template, 16, 16);
1052
+ i0.ɵɵconditionalCreate(48, PipelinesComponent_Conditional_13_Conditional_48_Template, 3, 2, "div", 86);
1053
+ i0.ɵɵconditionalCreate(49, PipelinesComponent_Conditional_13_Conditional_49_Template, 7, 1, "div", 87);
1054
+ i0.ɵɵelementStart(50, "div", 88);
1055
+ i0.ɵɵconditionalCreate(51, PipelinesComponent_Conditional_13_Conditional_51_Template, 4, 0, "div", 89)(52, PipelinesComponent_Conditional_13_Conditional_52_Template, 16, 16);
1092
1056
  i0.ɵɵelementEnd()();
1093
1057
  } if (rf & 2) {
1094
- const ctx_r1 = i0.ɵɵnextContext();
1058
+ const ctx_r2 = i0.ɵɵnextContext();
1095
1059
  i0.ɵɵadvance(7);
1096
- i0.ɵɵtextInterpolate((ctx_r1.EditorEntityMap == null ? null : ctx_r1.EditorEntityMap.ExternalObjectLabel) ?? (ctx_r1.EditorEntityMap == null ? null : ctx_r1.EditorEntityMap.ExternalObjectName));
1060
+ i0.ɵɵtextInterpolate((ctx_r2.EditorEntityMap == null ? null : ctx_r2.EditorEntityMap.ExternalObjectLabel) ?? (ctx_r2.EditorEntityMap == null ? null : ctx_r2.EditorEntityMap.ExternalObjectName));
1097
1061
  i0.ɵɵadvance(4);
1098
- i0.ɵɵtextInterpolate(ctx_r1.EditorEntityMap == null ? null : ctx_r1.EditorEntityMap.Entity);
1062
+ i0.ɵɵtextInterpolate(ctx_r2.EditorEntityMap == null ? null : ctx_r2.EditorEntityMap.Entity);
1099
1063
  i0.ɵɵadvance();
1100
- i0.ɵɵconditional(ctx_r1.EditorEntityMap ? 12 : -1);
1064
+ i0.ɵɵconditional(ctx_r2.EditorEntityMap ? 12 : -1);
1101
1065
  i0.ɵɵadvance(4);
1102
- i0.ɵɵtextInterpolate(ctx_r1.EditorMappedCount);
1066
+ i0.ɵɵtextInterpolate(ctx_r2.EditorMappedCount);
1103
1067
  i0.ɵɵadvance(5);
1104
- i0.ɵɵtextInterpolate(ctx_r1.EditorKeyFieldCount);
1068
+ i0.ɵɵtextInterpolate(ctx_r2.EditorKeyFieldCount);
1105
1069
  i0.ɵɵadvance(5);
1106
- i0.ɵɵtextInterpolate(ctx_r1.EditorRequiredCount);
1070
+ i0.ɵɵtextInterpolate(ctx_r2.EditorRequiredCount);
1107
1071
  i0.ɵɵadvance(3);
1108
- i0.ɵɵclassProp("active", ctx_r1.ShowSourcePreview);
1072
+ i0.ɵɵclassProp("active", ctx_r2.ShowSourcePreview);
1109
1073
  i0.ɵɵadvance(3);
1110
- i0.ɵɵclassProp("active", ctx_r1.ShowDestPreview);
1074
+ i0.ɵɵclassProp("active", ctx_r2.ShowDestPreview);
1111
1075
  i0.ɵɵadvance(4);
1112
- i0.ɵɵproperty("disabled", ctx_r1.IsRunningPipeline);
1076
+ i0.ɵɵproperty("disabled", ctx_r2.IsRunningPipeline);
1113
1077
  i0.ɵɵadvance();
1114
- i0.ɵɵconditional(ctx_r1.IsRunningPipeline ? 37 : 38);
1078
+ i0.ɵɵconditional(ctx_r2.IsRunningPipeline ? 37 : 38);
1115
1079
  i0.ɵɵadvance(2);
1116
- i0.ɵɵconditional(ctx_r1.PipelineResultMessage ? 39 : -1);
1080
+ i0.ɵɵconditional(ctx_r2.PipelineResultMessage ? 39 : -1);
1117
1081
  i0.ɵɵadvance(5);
1118
- i0.ɵɵproperty("disabled", !ctx_r1.HasEditorChanges || ctx_r1.EditorSaving);
1082
+ i0.ɵɵproperty("disabled", !ctx_r2.HasEditorChanges || ctx_r2.EditorSaving);
1119
1083
  i0.ɵɵadvance();
1120
- i0.ɵɵconditional(ctx_r1.EditorSaving ? 45 : 46);
1084
+ i0.ɵɵconditional(ctx_r2.EditorSaving ? 45 : 46);
1121
1085
  i0.ɵɵadvance(2);
1122
- i0.ɵɵconditional(ctx_r1.EditorSaveSuccess && !ctx_r1.HasEditorChanges ? 47 : -1);
1086
+ i0.ɵɵconditional(ctx_r2.EditorSaveSuccess && !ctx_r2.HasEditorChanges ? 47 : -1);
1123
1087
  i0.ɵɵadvance();
1124
- i0.ɵɵconditional(ctx_r1.ShowSourcePreview || ctx_r1.ShowDestPreview ? 48 : -1);
1088
+ i0.ɵɵconditional(ctx_r2.ShowSourcePreview || ctx_r2.ShowDestPreview ? 48 : -1);
1125
1089
  i0.ɵɵadvance();
1126
- i0.ɵɵconditional(ctx_r1.ConnectingFromSource ? 49 : -1);
1090
+ i0.ɵɵconditional(ctx_r2.ConnectingFromSource ? 49 : -1);
1127
1091
  i0.ɵɵadvance();
1128
- i0.ɵɵclassProp("has-transform-panel", ctx_r1.SelectedConnectionIdx !== null);
1092
+ i0.ɵɵclassProp("has-transform-panel", ctx_r2.SelectedConnectionIdx !== null);
1129
1093
  i0.ɵɵadvance();
1130
- i0.ɵɵconditional(ctx_r1.EditorLoading ? 51 : 52);
1094
+ i0.ɵɵconditional(ctx_r2.EditorLoading ? 51 : 52);
1131
1095
  } }
1132
1096
  let PipelinesComponent = class PipelinesComponent extends BaseResourceComponent {
1133
1097
  // ---------------------------------------------------------------------------
@@ -1298,6 +1262,11 @@ let PipelinesComponent = class PipelinesComponent extends BaseResourceComponent
1298
1262
  this.GlobalSearch = input.value;
1299
1263
  this.cdr.detectChanges();
1300
1264
  }
1265
+ /** Bridge for <mj-page-search> which emits a plain string. */
1266
+ OnGlobalSearchValue(value) {
1267
+ this.GlobalSearch = value;
1268
+ this.cdr.detectChanges();
1269
+ }
1301
1270
  get FilteredCards() {
1302
1271
  if (!this.GlobalSearch.trim())
1303
1272
  return this.PipelineCards;
@@ -2096,14 +2065,34 @@ let PipelinesComponent = class PipelinesComponent extends BaseResourceComponent
2096
2065
  return 'Inactive';
2097
2066
  }
2098
2067
  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: 3, vars: 1, consts: [[1, "pipelines-container"], [1, "ve-container"], [1, "pipelines-toolbar"], [1, "toolbar-left"], [1, "toolbar-title"], [1, "fa-solid", "fa-diagram-project"], [1, "toolbar-count-badge"], [1, "toolbar-map-count"], [1, "toolbar-right"], [1, "global-search"], [1, "fa-solid", "fa-search", "search-icon"], ["type", "text", "placeholder", "Search integrations or entities...", 1, "search-input", 3, "input", "value"], ["title", "Expand All", 1, "toolbar-btn", 3, "click"], [1, "fa-solid", "fa-angles-down"], ["title", "Collapse All", 1, "toolbar-btn", 3, "click"], [1, "fa-solid", "fa-angles-up"], [1, "toolbar-divider"], ["title", "Refresh", 1, "toolbar-btn", 3, "click"], [1, "fa-solid", "fa-arrows-rotate"], [1, "pipelines-content"], [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, "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) {
2100
- i0.ɵɵelementStart(0, "div", 0);
2101
- i0.ɵɵconditionalCreate(1, PipelinesComponent_Conditional_1_Template, 24, 6)(2, PipelinesComponent_Conditional_2_Template, 53, 21, "div", 1);
2068
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PipelinesComponent, selectors: [["app-integration-pipelines"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 14, vars: 5, consts: [["Title", "Integration Pipelines", "Icon", "fa-solid fa-diagram-project", "Subtitle", "Data transformation and routing pipelines"], ["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"], [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) {
2069
+ i0.ɵɵelementStart(0, "mj-page-layout")(1, "mj-page-header", 0)(2, "div", 1)(3, "button", 2);
2070
+ i0.ɵɵlistener("click", function PipelinesComponent_Template_button_click_3_listener() { return ctx.ExpandAll(); });
2071
+ i0.ɵɵelement(4, "i", 3);
2072
+ i0.ɵɵelementEnd();
2073
+ i0.ɵɵelementStart(5, "button", 4);
2074
+ i0.ɵɵlistener("click", function PipelinesComponent_Template_button_click_5_listener() { return ctx.CollapseAll(); });
2075
+ i0.ɵɵelement(6, "i", 5);
2102
2076
  i0.ɵɵelementEnd();
2077
+ i0.ɵɵelementStart(7, "mj-refresh-button", 6);
2078
+ i0.ɵɵlistener("Clicked", function PipelinesComponent_Template_mj_refresh_button_Clicked_7_listener() { return ctx.LoadData(); });
2079
+ i0.ɵɵelementEnd()();
2080
+ i0.ɵɵelementStart(8, "div", 7)(9, "mj-page-search", 8);
2081
+ i0.ɵɵlistener("ValueChange", function PipelinesComponent_Template_mj_page_search_ValueChange_9_listener($event) { return ctx.OnGlobalSearchValue($event); });
2082
+ i0.ɵɵelementEnd()()();
2083
+ i0.ɵɵelementStart(10, "mj-page-body", 9)(11, "div", 10);
2084
+ i0.ɵɵconditionalCreate(12, PipelinesComponent_Conditional_12_Template, 4, 1, "div", 11)(13, PipelinesComponent_Conditional_13_Template, 53, 21, "div", 12);
2085
+ i0.ɵɵelementEnd()()();
2103
2086
  } if (rf & 2) {
2087
+ i0.ɵɵadvance(7);
2088
+ i0.ɵɵproperty("Loading", ctx.IsLoading);
2089
+ i0.ɵɵadvance(2);
2090
+ i0.ɵɵproperty("Value", ctx.GlobalSearch);
2104
2091
  i0.ɵɵadvance();
2105
- i0.ɵɵconditional(!ctx.VisualEditorOpen ? 1 : 2);
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}"] });
2092
+ i0.ɵɵproperty("Flex", true)("Padding", false);
2093
+ i0.ɵɵadvance(2);
2094
+ i0.ɵɵconditional(!ctx.VisualEditorOpen ? 12 : 13);
2095
+ } }, dependencies: [i1.NgClass, i2.NgSelectOption, i2.ɵNgSelectMultipleOption, i3.MJButtonDirective, i3.MJPageLayoutComponent, i3.MJPageHeaderComponent, i3.MJPageBodyComponent, i3.MJPageSearchComponent, 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
2096
  };
2108
2097
  PipelinesComponent = __decorate([
2109
2098
  RegisterClass(BaseResourceComponent, 'IntegrationPipelines')
@@ -2111,7 +2100,7 @@ PipelinesComponent = __decorate([
2111
2100
  export { PipelinesComponent };
2112
2101
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PipelinesComponent, [{
2113
2102
  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\">&middot;</span>\n {{ card.ActiveMapCount }} active\n <span class=\"meta-sep\">&middot;</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 &rarr; Dest\n </button>\n <button [class.active]=\"conn.Direction === 'DestToSource'\"\n (click)=\"OnConnectionDirectionChange('DestToSource')\">\n Dest &rarr; 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"] }]
2103
+ 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 <!-- [meta] intentionally omitted \u2014 chrome slot discipline audit Task B.\n Pipelines count mirrored the visible list; entity-maps count was\n cross-aggregate reference info that didn't drive action on this page. -->\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\">&middot;</span>\n {{ card.ActiveMapCount }} active\n <span class=\"meta-sep\">&middot;</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 &rarr; Dest\n </button>\n <button [class.active]=\"conn.Direction === 'DestToSource'\"\n (click)=\"OnConnectionDirectionChange('DestToSource')\">\n Dest &rarr; 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
2104
  }], null, null); })();
2116
2105
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PipelinesComponent, { className: "PipelinesComponent", filePath: "src/Integration/components/pipelines/pipelines.component.ts", lineNumber: 80 }); })();
2117
2106
  export function LoadPipelinesComponent() {