@memberjunction/ng-dashboards 5.22.0 → 5.24.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 (245) hide show
  1. package/README.md +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 +364 -362
  4. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  5. package/dist/AI/components/agents/agent-editor.component.js +2 -2
  6. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +947 -64
  7. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
  8. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +7645 -430
  9. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
  10. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +285 -6
  11. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
  12. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +2454 -277
  13. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
  14. package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
  15. package/dist/AI/components/execution-monitoring.component.js +191 -197
  16. package/dist/AI/components/execution-monitoring.component.js.map +1 -1
  17. package/dist/AI/components/models/model-management.component.js +9 -8
  18. package/dist/AI/components/models/model-management.component.js.map +1 -1
  19. package/dist/AI/components/prompts/prompt-management.component.js +305 -299
  20. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  21. package/dist/AI/components/system/system-configuration.component.js +319 -313
  22. package/dist/AI/components/system/system-configuration.component.js.map +1 -1
  23. package/dist/AI/components/vectors/vector-management-resource.component.d.ts +20 -2
  24. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
  25. package/dist/AI/components/vectors/vector-management-resource.component.js +419 -232
  26. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  27. package/dist/APIKeys/api-applications-panel.component.js +10 -12
  28. package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
  29. package/dist/APIKeys/api-key-create-dialog.component.js +13 -19
  30. package/dist/APIKeys/api-key-create-dialog.component.js.map +1 -1
  31. package/dist/APIKeys/api-key-edit-panel.component.js +12 -14
  32. package/dist/APIKeys/api-key-edit-panel.component.js.map +1 -1
  33. package/dist/APIKeys/api-scopes-panel.component.js +61 -68
  34. package/dist/APIKeys/api-scopes-panel.component.js.map +1 -1
  35. package/dist/APIKeys/api-usage-panel.component.js +10 -11
  36. package/dist/APIKeys/api-usage-panel.component.js.map +1 -1
  37. package/dist/Actions/components/actions-list-view.component.js +82 -96
  38. package/dist/Actions/components/actions-list-view.component.js.map +1 -1
  39. package/dist/Actions/components/actions-overview.component.js +130 -134
  40. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  41. package/dist/Actions/components/categories-list-view.component.d.ts.map +1 -1
  42. package/dist/Actions/components/categories-list-view.component.js +40 -46
  43. package/dist/Actions/components/categories-list-view.component.js.map +1 -1
  44. package/dist/Actions/components/code-management.component.js +2 -2
  45. package/dist/Actions/components/code-management.component.js.map +1 -1
  46. package/dist/Actions/components/entity-integration.component.js +2 -2
  47. package/dist/Actions/components/entity-integration.component.js.map +1 -1
  48. package/dist/Actions/components/execution-monitoring.component.js +127 -132
  49. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  50. package/dist/Actions/components/executions-list-view.component.js +2 -2
  51. package/dist/Actions/components/executions-list-view.component.js.map +1 -1
  52. package/dist/Actions/components/explorer/action-card.component.js +11 -17
  53. package/dist/Actions/components/explorer/action-card.component.js.map +1 -1
  54. package/dist/Actions/components/explorer/action-explorer.component.js +5 -11
  55. package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
  56. package/dist/Actions/components/explorer/action-list-item.component.js +8 -10
  57. package/dist/Actions/components/explorer/action-list-item.component.js.map +1 -1
  58. package/dist/Actions/components/explorer/action-toolbar.component.js +112 -133
  59. package/dist/Actions/components/explorer/action-toolbar.component.js.map +1 -1
  60. package/dist/Actions/components/explorer/action-tree-panel.component.js +63 -83
  61. package/dist/Actions/components/explorer/action-tree-panel.component.js.map +1 -1
  62. package/dist/Actions/components/explorer/new-action-panel.component.js +17 -21
  63. package/dist/Actions/components/explorer/new-action-panel.component.js.map +1 -1
  64. package/dist/Actions/components/explorer/new-category-panel.component.js +17 -21
  65. package/dist/Actions/components/explorer/new-category-panel.component.js.map +1 -1
  66. package/dist/Actions/components/scheduled-actions.component.js +2 -2
  67. package/dist/Actions/components/scheduled-actions.component.js.map +1 -1
  68. package/dist/Actions/components/security-permissions.component.js +2 -2
  69. package/dist/Actions/components/security-permissions.component.js.map +1 -1
  70. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts +13 -5
  71. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
  72. package/dist/ComponentStudio/component-studio-dashboard.component.js +168 -145
  73. package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
  74. package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts +4 -5
  75. package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts.map +1 -1
  76. package/dist/ComponentStudio/components/artifact-load-dialog.component.js +197 -200
  77. package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
  78. package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts +5 -7
  79. package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
  80. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +142 -148
  81. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
  82. package/dist/ComponentStudio/components/browser/component-browser.component.js +153 -166
  83. package/dist/ComponentStudio/components/browser/component-browser.component.js.map +1 -1
  84. package/dist/ComponentStudio/components/editors/code-editor-panel.component.js +15 -20
  85. package/dist/ComponentStudio/components/editors/code-editor-panel.component.js.map +1 -1
  86. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js +16 -21
  87. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js.map +1 -1
  88. package/dist/ComponentStudio/components/editors/requirements-editor.component.js +18 -23
  89. package/dist/ComponentStudio/components/editors/requirements-editor.component.js.map +1 -1
  90. package/dist/ComponentStudio/components/editors/spec-editor.component.js +25 -30
  91. package/dist/ComponentStudio/components/editors/spec-editor.component.js.map +1 -1
  92. package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js +10 -11
  93. package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js.map +1 -1
  94. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.d.ts.map +1 -1
  95. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js +24 -35
  96. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js.map +1 -1
  97. package/dist/ComponentStudio/components/text-import-dialog.component.js +15 -17
  98. package/dist/ComponentStudio/components/text-import-dialog.component.js.map +1 -1
  99. package/dist/Credentials/components/credentials-categories-resource.component.js +7 -6
  100. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  101. package/dist/Credentials/components/credentials-list-resource.component.js +6 -5
  102. package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
  103. package/dist/Credentials/components/credentials-types-resource.component.js +7 -6
  104. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  105. package/dist/DashboardBrowser/dashboard-share-dialog.component.js +9 -9
  106. package/dist/DashboardBrowser/dashboard-share-dialog.component.js.map +1 -1
  107. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
  108. package/dist/DataExplorer/data-explorer-dashboard.component.js +17 -17
  109. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  110. package/dist/Home/home-dashboard.component.js +4 -4
  111. package/dist/Home/home-dashboard.component.js.map +1 -1
  112. package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
  113. package/dist/Integration/components/activity/activity.component.js +1 -0
  114. package/dist/Integration/components/activity/activity.component.js.map +1 -1
  115. package/dist/Integration/components/connections/connections.component.d.ts.map +1 -1
  116. package/dist/Integration/components/connections/connections.component.js +5 -4
  117. package/dist/Integration/components/connections/connections.component.js.map +1 -1
  118. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.d.ts.map +1 -1
  119. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +247 -259
  120. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
  121. package/dist/Integration/components/overview/overview.component.d.ts.map +1 -1
  122. package/dist/Integration/components/overview/overview.component.js +1 -0
  123. package/dist/Integration/components/overview/overview.component.js.map +1 -1
  124. package/dist/Integration/components/pipelines/pipelines.component.d.ts.map +1 -1
  125. package/dist/Integration/components/pipelines/pipelines.component.js +1 -0
  126. package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
  127. package/dist/Integration/components/schedules/schedules.component.d.ts.map +1 -1
  128. package/dist/Integration/components/schedules/schedules.component.js +1 -0
  129. package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
  130. package/dist/Integration/components/widgets/integration-card.component.js +7 -9
  131. package/dist/Integration/components/widgets/integration-card.component.js.map +1 -1
  132. package/dist/Integration/integration.module.d.ts +6 -10
  133. package/dist/Integration/integration.module.d.ts.map +1 -1
  134. package/dist/Integration/integration.module.js +12 -20
  135. package/dist/Integration/integration.module.js.map +1 -1
  136. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts +411 -0
  137. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts.map +1 -0
  138. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +4266 -0
  139. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -0
  140. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts +140 -0
  141. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts.map +1 -0
  142. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +780 -0
  143. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -0
  144. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts +8 -2
  145. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts.map +1 -1
  146. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +246 -195
  147. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
  148. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts +75 -0
  149. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts.map +1 -0
  150. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +601 -0
  151. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -0
  152. package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.d.ts +93 -12
  153. package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.d.ts.map +1 -1
  154. package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.js +637 -107
  155. package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.js.map +1 -1
  156. package/dist/KnowledgeHub/index.d.ts +3 -0
  157. package/dist/KnowledgeHub/index.d.ts.map +1 -1
  158. package/dist/KnowledgeHub/index.js +3 -0
  159. package/dist/KnowledgeHub/index.js.map +1 -1
  160. package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
  161. package/dist/Lists/components/lists-browse-resource.component.js +9 -7
  162. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  163. package/dist/Lists/components/lists-my-lists-resource.component.js +5 -4
  164. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  165. package/dist/Lists/components/lists-operations-resource.component.js +10 -9
  166. package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
  167. package/dist/MCP/components/mcp-connection-dialog.component.js +141 -132
  168. package/dist/MCP/components/mcp-connection-dialog.component.js.map +1 -1
  169. package/dist/MCP/components/mcp-log-detail-panel.component.js +4 -4
  170. package/dist/MCP/components/mcp-log-detail-panel.component.js.map +1 -1
  171. package/dist/MCP/components/mcp-server-dialog.component.js +141 -128
  172. package/dist/MCP/components/mcp-server-dialog.component.js.map +1 -1
  173. package/dist/MCP/components/mcp-test-tool-dialog.component.js +210 -218
  174. package/dist/MCP/components/mcp-test-tool-dialog.component.js.map +1 -1
  175. package/dist/MCP/mcp-dashboard.component.js +2 -2
  176. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  177. package/dist/MCP/mcp.module.d.ts +6 -9
  178. package/dist/MCP/mcp.module.d.ts.map +1 -1
  179. package/dist/MCP/mcp.module.js +20 -22
  180. package/dist/MCP/mcp.module.js.map +1 -1
  181. package/dist/Scheduling/components/scheduling-activity.component.js +5 -4
  182. package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
  183. package/dist/Scheduling/components/scheduling-jobs.component.js +6 -5
  184. package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
  185. package/dist/Scheduling/components/scheduling-overview.component.js +93 -92
  186. package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
  187. package/dist/Testing/testing-dashboard.component.js +9 -10
  188. package/dist/Testing/testing-dashboard.component.js.map +1 -1
  189. package/dist/__tests__/analytics-resource.test.d.ts +2 -0
  190. package/dist/__tests__/analytics-resource.test.d.ts.map +1 -0
  191. package/dist/__tests__/analytics-resource.test.js +181 -0
  192. package/dist/__tests__/analytics-resource.test.js.map +1 -0
  193. package/dist/__tests__/scheduling.test.d.ts +2 -0
  194. package/dist/__tests__/scheduling.test.d.ts.map +1 -0
  195. package/dist/__tests__/scheduling.test.js +205 -0
  196. package/dist/__tests__/scheduling.test.js.map +1 -0
  197. package/dist/actions-dashboards.module.d.ts +8 -13
  198. package/dist/actions-dashboards.module.d.ts.map +1 -1
  199. package/dist/actions-dashboards.module.js +6 -27
  200. package/dist/actions-dashboards.module.js.map +1 -1
  201. package/dist/ai-dashboards.module.d.ts +20 -20
  202. package/dist/ai-dashboards.module.d.ts.map +1 -1
  203. package/dist/ai-dashboards.module.js +43 -44
  204. package/dist/ai-dashboards.module.js.map +1 -1
  205. package/dist/communication-dashboards.module.d.ts +4 -8
  206. package/dist/communication-dashboards.module.d.ts.map +1 -1
  207. package/dist/communication-dashboards.module.js +0 -19
  208. package/dist/communication-dashboards.module.js.map +1 -1
  209. package/dist/component-studio-dashboards.module.d.ts +7 -11
  210. package/dist/component-studio-dashboards.module.d.ts.map +1 -1
  211. package/dist/component-studio-dashboards.module.js +22 -34
  212. package/dist/component-studio-dashboards.module.js.map +1 -1
  213. package/dist/core-dashboards.module.d.ts +12 -18
  214. package/dist/core-dashboards.module.d.ts.map +1 -1
  215. package/dist/core-dashboards.module.js +15 -31
  216. package/dist/core-dashboards.module.js.map +1 -1
  217. package/dist/credentials-dashboards.module.d.ts +5 -8
  218. package/dist/credentials-dashboards.module.d.ts.map +1 -1
  219. package/dist/credentials-dashboards.module.js +3 -19
  220. package/dist/credentials-dashboards.module.js.map +1 -1
  221. package/dist/data-explorer-dashboards.module.d.ts +7 -13
  222. package/dist/data-explorer-dashboards.module.d.ts.map +1 -1
  223. package/dist/data-explorer-dashboards.module.js +0 -27
  224. package/dist/data-explorer-dashboards.module.js.map +1 -1
  225. package/dist/lists-dashboards.module.d.ts +5 -8
  226. package/dist/lists-dashboards.module.d.ts.map +1 -1
  227. package/dist/lists-dashboards.module.js +3 -19
  228. package/dist/lists-dashboards.module.js.map +1 -1
  229. package/dist/public-api.d.ts +2 -0
  230. package/dist/public-api.d.ts.map +1 -1
  231. package/dist/public-api.js +2 -0
  232. package/dist/public-api.js.map +1 -1
  233. package/dist/scheduling-dashboards.module.d.ts +6 -10
  234. package/dist/scheduling-dashboards.module.d.ts.map +1 -1
  235. package/dist/scheduling-dashboards.module.js +3 -23
  236. package/dist/scheduling-dashboards.module.js.map +1 -1
  237. package/dist/shared/entity-field-display.d.ts +44 -0
  238. package/dist/shared/entity-field-display.d.ts.map +1 -0
  239. package/dist/shared/entity-field-display.js +118 -0
  240. package/dist/shared/entity-field-display.js.map +1 -0
  241. package/dist/testing-dashboards.module.d.ts +7 -13
  242. package/dist/testing-dashboards.module.d.ts.map +1 -1
  243. package/dist/testing-dashboards.module.js +0 -27
  244. package/dist/testing-dashboards.module.js.map +1 -1
  245. package/package.json +48 -55
@@ -13,10 +13,8 @@ import { IntegrationDataService } from '../../services/integration-data.service'
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 "@progress/kendo-angular-buttons";
17
- import * as i4 from "@progress/kendo-angular-dropdowns";
18
- import * as i5 from "@progress/kendo-angular-inputs";
19
- import * as i6 from "@memberjunction/ng-shared-generic";
16
+ import * as i3 from "@memberjunction/ng-ui-components";
17
+ import * as i4 from "@memberjunction/ng-shared-generic";
20
18
  const _c0 = () => ({ ID: "", Name: "-- Select --" });
21
19
  const _c1 = () => ["Pull", "Push", "Bidirectional"];
22
20
  const _c2 = () => ({ Name: "", Label: "Select source object..." });
@@ -54,35 +52,35 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Con
54
52
  } }
55
53
  function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Conditional_13_Template(rf, ctx) { if (rf & 1) {
56
54
  const _r5 = i0.ɵɵgetCurrentView();
57
- i0.ɵɵelementStart(0, "kendo-dropdownlist", 44);
58
- i0.ɵɵtwoWayListener("ngModelChange", function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Conditional_13_Template_kendo_dropdownlist_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r1.SelectedSourceObjectName, $event) || (ctx_r1.SelectedSourceObjectName = $event); return i0.ɵɵresetView($event); });
59
- i0.ɵɵlistener("valueChange", function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Conditional_13_Template_kendo_dropdownlist_valueChange_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnSourceObjectChange($event)); });
55
+ i0.ɵɵelementStart(0, "mj-dropdown", 44);
56
+ i0.ɵɵtwoWayListener("ngModelChange", function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Conditional_13_Template_mj_dropdown_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r1.SelectedSourceObjectName, $event) || (ctx_r1.SelectedSourceObjectName = $event); return i0.ɵɵresetView($event); });
57
+ i0.ɵɵlistener("ValueChange", function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Conditional_13_Template_mj_dropdown_ValueChange_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnSourceObjectChange($event)); });
60
58
  i0.ɵɵelementEnd();
61
59
  } if (rf & 2) {
62
60
  const ctx_r1 = i0.ɵɵnextContext(4);
63
- i0.ɵɵproperty("data", ctx_r1.DiscoveredObjects)("textField", "Label")("valueField", "Name")("valuePrimitive", true);
61
+ i0.ɵɵproperty("Data", ctx_r1.DiscoveredObjects)("ValuePrimitive", true);
64
62
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.SelectedSourceObjectName);
65
- i0.ɵɵproperty("filterable", true)("defaultItem", i0.ɵɵpureFunction0(7, _c2));
63
+ i0.ɵɵproperty("Filterable", true)("DefaultItem", i0.ɵɵpureFunction0(5, _c2));
66
64
  } }
67
65
  function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Conditional_21_Conditional_3_Template(rf, ctx) { if (rf & 1) {
68
66
  i0.ɵɵelement(0, "mj-loading", 16);
69
67
  } }
70
68
  function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Conditional_21_Conditional_4_Template(rf, ctx) { if (rf & 1) {
71
69
  const _r6 = i0.ɵɵgetCurrentView();
72
- i0.ɵɵelementStart(0, "kendo-dropdownlist", 45);
73
- i0.ɵɵtwoWayListener("ngModelChange", function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Conditional_21_Conditional_4_Template_kendo_dropdownlist_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(5); i0.ɵɵtwoWayBindingSet(ctx_r1.SelectedEntityID, $event) || (ctx_r1.SelectedEntityID = $event); return i0.ɵɵresetView($event); });
70
+ i0.ɵɵelementStart(0, "mj-dropdown", 46);
71
+ i0.ɵɵtwoWayListener("ngModelChange", function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Conditional_21_Conditional_4_Template_mj_dropdown_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(5); i0.ɵɵtwoWayBindingSet(ctx_r1.SelectedEntityID, $event) || (ctx_r1.SelectedEntityID = $event); return i0.ɵɵresetView($event); });
74
72
  i0.ɵɵelementEnd();
75
73
  } if (rf & 2) {
76
74
  const ctx_r1 = i0.ɵɵnextContext(5);
77
- i0.ɵɵproperty("data", ctx_r1.MJEntities)("textField", "Name")("valueField", "ID")("valuePrimitive", true);
75
+ i0.ɵɵproperty("Data", ctx_r1.MJEntities)("ValuePrimitive", true);
78
76
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.SelectedEntityID);
79
- i0.ɵɵproperty("filterable", true)("defaultItem", i0.ɵɵpureFunction0(7, _c3));
77
+ i0.ɵɵproperty("Filterable", true)("DefaultItem", i0.ɵɵpureFunction0(5, _c3));
80
78
  } }
81
79
  function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Conditional_21_Template(rf, ctx) { if (rf & 1) {
82
80
  i0.ɵɵelementStart(0, "div", 29)(1, "label");
83
81
  i0.ɵɵtext(2, "Target MJ Entity");
84
82
  i0.ɵɵelementEnd();
85
- i0.ɵɵconditionalCreate(3, MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Conditional_21_Conditional_3_Template, 1, 0, "mj-loading", 16)(4, MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Conditional_21_Conditional_4_Template, 1, 8, "kendo-dropdownlist", 32);
83
+ i0.ɵɵconditionalCreate(3, MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Conditional_21_Conditional_3_Template, 1, 0, "mj-loading", 16)(4, MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Conditional_21_Conditional_4_Template, 1, 6, "mj-dropdown", 45);
86
84
  i0.ɵɵelementEnd();
87
85
  } if (rf & 2) {
88
86
  const ctx_r1 = i0.ɵɵnextContext(4);
@@ -90,7 +88,7 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Con
90
88
  i0.ɵɵconditional(ctx_r1.IsLoadingEntities ? 3 : 4);
91
89
  } }
92
90
  function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Conditional_22_Conditional_12_Template(rf, ctx) { if (rf & 1) {
93
- i0.ɵɵelementStart(0, "span", 50);
91
+ i0.ɵɵelementStart(0, "span", 51);
94
92
  i0.ɵɵtext(1);
95
93
  i0.ɵɵelementEnd();
96
94
  } if (rf & 2) {
@@ -107,7 +105,7 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Con
107
105
  i0.ɵɵtext(1, " Preview DDL ");
108
106
  } }
109
107
  function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Conditional_22_Conditional_17_Conditional_4_Template(rf, ctx) { if (rf & 1) {
110
- i0.ɵɵelementStart(0, "div", 53);
108
+ i0.ɵɵelementStart(0, "div", 54);
111
109
  i0.ɵɵelement(1, "i", 43);
112
110
  i0.ɵɵtext(2);
113
111
  i0.ɵɵelementEnd();
@@ -117,7 +115,7 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Con
117
115
  i0.ɵɵtextInterpolate1(" ", ctx_r1.DDLPreviewError, " ");
118
116
  } }
119
117
  function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Conditional_22_Conditional_17_Conditional_5_Template(rf, ctx) { if (rf & 1) {
120
- i0.ɵɵelementStart(0, "pre", 54);
118
+ i0.ɵɵelementStart(0, "pre", 55);
121
119
  i0.ɵɵtext(1);
122
120
  i0.ɵɵelementEnd();
123
121
  } if (rf & 2) {
@@ -127,17 +125,17 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Con
127
125
  } }
128
126
  function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Conditional_22_Conditional_17_Template(rf, ctx) { if (rf & 1) {
129
127
  const _r8 = i0.ɵɵgetCurrentView();
130
- i0.ɵɵelementStart(0, "div", 51)(1, "button", 52);
128
+ i0.ɵɵelementStart(0, "div", 52)(1, "button", 53);
131
129
  i0.ɵɵlistener("click", function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Conditional_22_Conditional_17_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.PreviewDDL()); });
132
130
  i0.ɵɵconditionalCreate(2, MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Conditional_22_Conditional_17_Conditional_2_Template, 2, 0)(3, MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Conditional_22_Conditional_17_Conditional_3_Template, 2, 0);
133
131
  i0.ɵɵelementEnd();
134
- i0.ɵɵconditionalCreate(4, MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Conditional_22_Conditional_17_Conditional_4_Template, 3, 1, "div", 53);
135
- i0.ɵɵconditionalCreate(5, MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Conditional_22_Conditional_17_Conditional_5_Template, 2, 1, "pre", 54);
132
+ i0.ɵɵconditionalCreate(4, MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Conditional_22_Conditional_17_Conditional_4_Template, 3, 1, "div", 54);
133
+ i0.ɵɵconditionalCreate(5, MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Conditional_22_Conditional_17_Conditional_5_Template, 2, 1, "pre", 55);
136
134
  i0.ɵɵelementEnd();
137
135
  } if (rf & 2) {
138
136
  const ctx_r1 = i0.ɵɵnextContext(5);
139
137
  i0.ɵɵadvance();
140
- i0.ɵɵproperty("look", "outline")("size", "small")("disabled", ctx_r1.IsGeneratingDDL);
138
+ i0.ɵɵproperty("disabled", ctx_r1.IsGeneratingDDL);
141
139
  i0.ɵɵadvance();
142
140
  i0.ɵɵconditional(ctx_r1.IsGeneratingDDL ? 2 : 3);
143
141
  i0.ɵɵadvance(2);
@@ -147,38 +145,38 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Con
147
145
  } }
148
146
  function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Conditional_22_Template(rf, ctx) { if (rf & 1) {
149
147
  const _r7 = i0.ɵɵgetCurrentView();
150
- i0.ɵɵelementStart(0, "div", 37)(1, "div", 46);
148
+ i0.ɵɵelementStart(0, "div", 37)(1, "div", 47);
151
149
  i0.ɵɵtext(2, "Define New Entity");
152
150
  i0.ɵɵelementEnd();
153
151
  i0.ɵɵelementStart(3, "div", 29)(4, "label");
154
152
  i0.ɵɵtext(5, "DB Schema");
155
153
  i0.ɵɵelementEnd();
156
- i0.ɵɵelementStart(6, "kendo-combobox", 47);
157
- i0.ɵɵtwoWayListener("ngModelChange", function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Conditional_22_Template_kendo_combobox_ngModelChange_6_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r1.NewEntitySchemaName, $event) || (ctx_r1.NewEntitySchemaName = $event); return i0.ɵɵresetView($event); });
158
- i0.ɵɵlistener("valueChange", function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Conditional_22_Template_kendo_combobox_valueChange_6_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnSchemaNameChange()); });
154
+ i0.ɵɵelementStart(6, "mj-combobox", 48);
155
+ i0.ɵɵtwoWayListener("ngModelChange", function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Conditional_22_Template_mj_combobox_ngModelChange_6_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r1.NewEntitySchemaName, $event) || (ctx_r1.NewEntitySchemaName = $event); return i0.ɵɵresetView($event); });
156
+ i0.ɵɵlistener("ValueChange", function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Conditional_22_Template_mj_combobox_ValueChange_6_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnSchemaNameChange()); });
159
157
  i0.ɵɵelementEnd()();
160
- i0.ɵɵelementStart(7, "div", 48)(8, "div", 29)(9, "label");
158
+ i0.ɵɵelementStart(7, "div", 49)(8, "div", 29)(9, "label");
161
159
  i0.ɵɵtext(10, "Table Name");
162
160
  i0.ɵɵelementEnd();
163
- i0.ɵɵelementStart(11, "input", 49);
161
+ i0.ɵɵelementStart(11, "input", 50);
164
162
  i0.ɵɵtwoWayListener("ngModelChange", function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Conditional_22_Template_input_ngModelChange_11_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r1.NewEntityTableName, $event) || (ctx_r1.NewEntityTableName = $event); return i0.ɵɵresetView($event); });
165
163
  i0.ɵɵelementEnd();
166
- i0.ɵɵconditionalCreate(12, MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Conditional_22_Conditional_12_Template, 2, 1, "span", 50);
164
+ i0.ɵɵconditionalCreate(12, MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Conditional_22_Conditional_12_Template, 2, 1, "span", 51);
167
165
  i0.ɵɵelementEnd();
168
166
  i0.ɵɵelementStart(13, "div", 29)(14, "label");
169
167
  i0.ɵɵtext(15, "Entity Name");
170
168
  i0.ɵɵelementEnd();
171
- i0.ɵɵelementStart(16, "input", 49);
169
+ i0.ɵɵelementStart(16, "input", 50);
172
170
  i0.ɵɵtwoWayListener("ngModelChange", function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Conditional_22_Template_input_ngModelChange_16_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r1.NewEntityName, $event) || (ctx_r1.NewEntityName = $event); return i0.ɵɵresetView($event); });
173
171
  i0.ɵɵelementEnd()()();
174
- i0.ɵɵconditionalCreate(17, MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Conditional_22_Conditional_17_Template, 6, 6, "div", 51);
172
+ i0.ɵɵconditionalCreate(17, MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Conditional_22_Conditional_17_Template, 6, 4, "div", 52);
175
173
  i0.ɵɵelementEnd();
176
174
  } if (rf & 2) {
177
175
  const ctx_r1 = i0.ɵɵnextContext(4);
178
176
  i0.ɵɵadvance(6);
179
- i0.ɵɵproperty("data", ctx_r1.DBSchemas);
177
+ i0.ɵɵproperty("Data", ctx_r1.DBSchemas);
180
178
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.NewEntitySchemaName);
181
- i0.ɵɵproperty("allowCustom", true)("filterable", true)("placeholder", "Select or type schema...");
179
+ i0.ɵɵproperty("AllowCustom", true)("Filterable", true);
182
180
  i0.ɵɵadvance(5);
183
181
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.NewEntityTableName);
184
182
  i0.ɵɵproperty("placeholder", ctx_r1.SuggestedTableName || "Table name");
@@ -199,7 +197,7 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Con
199
197
  i0.ɵɵtext(1, " Create Pending Map ");
200
198
  } }
201
199
  function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Conditional_31_Template(rf, ctx) { if (rf & 1) {
202
- i0.ɵɵelement(0, "i", 55);
200
+ i0.ɵɵelement(0, "i", 56);
203
201
  i0.ɵɵtext(1, " Add Map ");
204
202
  } }
205
203
  function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Template(rf, ctx) { if (rf & 1) {
@@ -215,7 +213,7 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Tem
215
213
  i0.ɵɵelementStart(7, "div", 29)(8, "label");
216
214
  i0.ɵɵtext(9, "Source Object");
217
215
  i0.ɵɵelementEnd();
218
- i0.ɵɵconditionalCreate(10, MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Conditional_10_Template, 3, 0, "div", 30)(11, MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Conditional_11_Template, 3, 1, "div", 31)(12, MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Conditional_12_Template, 2, 0, "div", 31)(13, MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Conditional_13_Template, 1, 8, "kendo-dropdownlist", 32);
216
+ i0.ɵɵconditionalCreate(10, MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Conditional_10_Template, 3, 0, "div", 30)(11, MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Conditional_11_Template, 3, 1, "div", 31)(12, MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Conditional_12_Template, 2, 0, "div", 31)(13, MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Conditional_13_Template, 1, 6, "mj-dropdown", 32);
219
217
  i0.ɵɵelementEnd();
220
218
  i0.ɵɵelementStart(14, "div", 33)(15, "button", 34);
221
219
  i0.ɵɵlistener("click", function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Template_button_click_15_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.SetTargetMode("existing")); });
@@ -228,12 +226,12 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Tem
228
226
  i0.ɵɵtext(20, " New Entity ");
229
227
  i0.ɵɵelementEnd()();
230
228
  i0.ɵɵconditionalCreate(21, MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Conditional_21_Template, 5, 1, "div", 29);
231
- i0.ɵɵconditionalCreate(22, MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Conditional_22_Template, 18, 11, "div", 37);
229
+ i0.ɵɵconditionalCreate(22, MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Conditional_22_Template, 18, 10, "div", 37);
232
230
  i0.ɵɵelementStart(23, "div", 29)(24, "label");
233
231
  i0.ɵɵtext(25, "Sync Direction");
234
232
  i0.ɵɵelementEnd();
235
- i0.ɵɵelementStart(26, "kendo-dropdownlist", 38);
236
- i0.ɵɵtwoWayListener("ngModelChange", function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Template_kendo_dropdownlist_ngModelChange_26_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.AddSyncDirection, $event) || (ctx_r1.AddSyncDirection = $event); return i0.ɵɵresetView($event); });
233
+ i0.ɵɵelementStart(26, "mj-dropdown", 38);
234
+ i0.ɵɵtwoWayListener("ngModelChange", function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Template_mj_dropdown_ngModelChange_26_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.AddSyncDirection, $event) || (ctx_r1.AddSyncDirection = $event); return i0.ɵɵresetView($event); });
237
235
  i0.ɵɵelementEnd()();
238
236
  i0.ɵɵelementStart(27, "div", 39)(28, "button", 40);
239
237
  i0.ɵɵlistener("click", function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Template_button_click_28_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.SaveAddMap()); });
@@ -256,18 +254,16 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Tem
256
254
  i0.ɵɵadvance();
257
255
  i0.ɵɵconditional(ctx_r1.TargetMode === "new" ? 22 : -1);
258
256
  i0.ɵɵadvance(4);
259
- i0.ɵɵproperty("data", i0.ɵɵpureFunction0(14, _c1));
257
+ i0.ɵɵproperty("Data", i0.ɵɵpureFunction0(11, _c1));
260
258
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.AddSyncDirection);
261
259
  i0.ɵɵadvance(2);
262
- i0.ɵɵproperty("themeColor", "primary")("size", "small")("disabled", !ctx_r1.IsAddFormValid || ctx_r1.IsSavingEntityMap);
260
+ i0.ɵɵproperty("disabled", !ctx_r1.IsAddFormValid || ctx_r1.IsSavingEntityMap);
263
261
  i0.ɵɵadvance();
264
262
  i0.ɵɵconditional(ctx_r1.IsSavingEntityMap ? 29 : ctx_r1.TargetMode === "new" ? 30 : 31);
265
- i0.ɵɵadvance(3);
266
- i0.ɵɵproperty("size", "small");
267
263
  } }
268
264
  function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_8_Template(rf, ctx) { if (rf & 1) {
269
265
  const _r9 = i0.ɵɵgetCurrentView();
270
- i0.ɵɵelementStart(0, "div", 23)(1, "input", 56);
266
+ i0.ɵɵelementStart(0, "div", 23)(1, "input", 57);
271
267
  i0.ɵɵtwoWayListener("ngModelChange", function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_8_Template_input_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.EntityMapSearchText, $event) || (ctx_r1.EntityMapSearchText = $event); return i0.ɵɵresetView($event); });
272
268
  i0.ɵɵelementEnd()();
273
269
  } if (rf & 2) {
@@ -279,7 +275,7 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_9_Tem
279
275
  const _r10 = i0.ɵɵgetCurrentView();
280
276
  i0.ɵɵelementStart(0, "p", 15);
281
277
  i0.ɵɵtext(1, " No entity maps configured. ");
282
- i0.ɵɵelementStart(2, "a", 57);
278
+ i0.ɵɵelementStart(2, "a", 58);
283
279
  i0.ɵɵlistener("click", function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_9_Template_a_click_2_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OpenAddPanel()); });
284
280
  i0.ɵɵtext(3, "Add one");
285
281
  i0.ɵɵelementEnd()();
@@ -294,44 +290,43 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_10_Te
294
290
  i0.ɵɵtextInterpolate1("No matches for \"", ctx_r1.EntityMapSearchText, "\".");
295
291
  } }
296
292
  function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_11_For_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
297
- i0.ɵɵelementStart(0, "span", 68);
293
+ i0.ɵɵelementStart(0, "span", 69);
298
294
  i0.ɵɵtext(1, "Pending");
299
295
  i0.ɵɵelementEnd();
300
296
  } }
301
297
  function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_11_For_2_Conditional_16_Template(rf, ctx) { if (rf & 1) {
302
298
  const _r13 = i0.ɵɵgetCurrentView();
303
- i0.ɵɵelementStart(0, "kendo-switch", 73);
304
- i0.ɵɵtwoWayListener("ngModelChange", function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_11_For_2_Conditional_16_Template_kendo_switch_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r13); const item_r12 = i0.ɵɵnextContext().$implicit; i0.ɵɵtwoWayBindingSet(item_r12.RealMap.SyncEnabled, $event) || (item_r12.RealMap.SyncEnabled = $event); return i0.ɵɵresetView($event); });
305
- i0.ɵɵlistener("valueChange", function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_11_For_2_Conditional_16_Template_kendo_switch_valueChange_0_listener() { i0.ɵɵrestoreView(_r13); const item_r12 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnToggleEntityMap(item_r12.RealMap)); });
299
+ i0.ɵɵelementStart(0, "mj-switch", 74);
300
+ i0.ɵɵtwoWayListener("ngModelChange", function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_11_For_2_Conditional_16_Template_mj_switch_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r13); const item_r12 = i0.ɵɵnextContext().$implicit; i0.ɵɵtwoWayBindingSet(item_r12.RealMap.SyncEnabled, $event) || (item_r12.RealMap.SyncEnabled = $event); return i0.ɵɵresetView($event); });
301
+ i0.ɵɵlistener("ngModelChange", function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_11_For_2_Conditional_16_Template_mj_switch_ngModelChange_0_listener() { i0.ɵɵrestoreView(_r13); const item_r12 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnToggleEntityMap(item_r12.RealMap)); });
306
302
  i0.ɵɵelementEnd();
307
303
  } if (rf & 2) {
308
304
  const item_r12 = i0.ɵɵnextContext().$implicit;
309
305
  i0.ɵɵtwoWayProperty("ngModel", item_r12.RealMap.SyncEnabled);
310
- i0.ɵɵproperty("size", "small");
311
306
  } }
312
307
  function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_11_For_2_Template(rf, ctx) { if (rf & 1) {
313
308
  const _r11 = i0.ɵɵgetCurrentView();
314
- i0.ɵɵelementStart(0, "div", 59);
309
+ i0.ɵɵelementStart(0, "div", 60);
315
310
  i0.ɵɵlistener("click", function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_11_For_2_Template_div_click_0_listener() { const item_r12 = i0.ɵɵrestoreView(_r11).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnMapSelect(item_r12)); });
316
- i0.ɵɵelementStart(1, "div", 60)(2, "span", 61);
311
+ i0.ɵɵelementStart(1, "div", 61)(2, "span", 62);
317
312
  i0.ɵɵtext(3);
318
313
  i0.ɵɵelementEnd();
319
- i0.ɵɵelementStart(4, "span", 62);
320
- i0.ɵɵelement(5, "i", 63);
314
+ i0.ɵɵelementStart(4, "span", 63);
315
+ i0.ɵɵelement(5, "i", 64);
321
316
  i0.ɵɵelementEnd();
322
- i0.ɵɵelementStart(6, "span", 64);
317
+ i0.ɵɵelementStart(6, "span", 65);
323
318
  i0.ɵɵtext(7);
324
319
  i0.ɵɵelementEnd()();
325
- i0.ɵɵelementStart(8, "div", 65)(9, "div", 66)(10, "span", 67);
320
+ i0.ɵɵelementStart(8, "div", 66)(9, "div", 67)(10, "span", 68);
326
321
  i0.ɵɵtext(11);
327
322
  i0.ɵɵelementEnd();
328
- i0.ɵɵconditionalCreate(12, MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_11_For_2_Conditional_12_Template, 2, 0, "span", 68);
323
+ i0.ɵɵconditionalCreate(12, MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_11_For_2_Conditional_12_Template, 2, 0, "span", 69);
329
324
  i0.ɵɵelementEnd();
330
- i0.ɵɵelementStart(13, "div", 69)(14, "button", 70);
325
+ i0.ɵɵelementStart(13, "div", 70)(14, "button", 71);
331
326
  i0.ɵɵlistener("click", function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_11_For_2_Template_button_click_14_listener($event) { const item_r12 = i0.ɵɵrestoreView(_r11).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnDeleteMap(item_r12, $event)); });
332
- i0.ɵɵelement(15, "i", 71);
327
+ i0.ɵɵelement(15, "i", 72);
333
328
  i0.ɵɵelementEnd();
334
- i0.ɵɵconditionalCreate(16, MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_11_For_2_Conditional_16_Template, 1, 2, "kendo-switch", 72);
329
+ i0.ɵɵconditionalCreate(16, MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_11_For_2_Conditional_16_Template, 1, 1, "mj-switch", 73);
335
330
  i0.ɵɵelementEnd()()();
336
331
  } if (rf & 2) {
337
332
  const item_r12 = ctx.$implicit;
@@ -350,7 +345,7 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_11_Fo
350
345
  } }
351
346
  function MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_11_Template(rf, ctx) { if (rf & 1) {
352
347
  i0.ɵɵelementStart(0, "div", 24);
353
- i0.ɵɵrepeaterCreate(1, MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_11_For_2_Template, 17, 9, "div", 58, _forTrack0);
348
+ i0.ɵɵrepeaterCreate(1, MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_11_For_2_Template, 17, 9, "div", 59, _forTrack0);
354
349
  i0.ɵɵelementEnd();
355
350
  } if (rf & 2) {
356
351
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -367,14 +362,12 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_7_Template(rf, ctx)
367
362
  i0.ɵɵelement(5, "i", 21);
368
363
  i0.ɵɵtext(6, " Add Map ");
369
364
  i0.ɵɵelementEnd()()();
370
- i0.ɵɵconditionalCreate(7, MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Template, 34, 15, "div", 22);
365
+ i0.ɵɵconditionalCreate(7, MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_7_Template, 34, 12, "div", 22);
371
366
  i0.ɵɵconditionalCreate(8, MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_8_Template, 2, 1, "div", 23);
372
367
  i0.ɵɵconditionalCreate(9, MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_9_Template, 4, 0, "p", 15)(10, MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_10_Template, 2, 1, "p", 15)(11, MappingWorkspaceComponent_Conditional_6_Conditional_7_Conditional_11_Template, 3, 0, "div", 24);
373
368
  } if (rf & 2) {
374
369
  const ctx_r1 = i0.ɵɵnextContext(2);
375
- i0.ɵɵadvance(4);
376
- i0.ɵɵproperty("look", "flat")("size", "small");
377
- i0.ɵɵadvance(3);
370
+ i0.ɵɵadvance(7);
378
371
  i0.ɵɵconditional(ctx_r1.ShowAddPanel ? 7 : -1);
379
372
  i0.ɵɵadvance();
380
373
  i0.ɵɵconditional(ctx_r1.AllMaps.length > 0 ? 8 : -1);
@@ -383,55 +376,53 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_7_Template(rf, ctx)
383
376
  } }
384
377
  function MappingWorkspaceComponent_Conditional_6_Conditional_9_Template(rf, ctx) { if (rf & 1) {
385
378
  i0.ɵɵelementStart(0, "div", 11);
386
- i0.ɵɵelement(1, "i", 74);
379
+ i0.ɵɵelement(1, "i", 75);
387
380
  i0.ɵɵelementStart(2, "p");
388
381
  i0.ɵɵtext(3, "Select an entity map from the left panel to view and edit field mappings.");
389
382
  i0.ɵɵelementEnd()();
390
383
  } }
391
384
  function MappingWorkspaceComponent_Conditional_6_Conditional_10_Conditional_19_Template(rf, ctx) { if (rf & 1) {
392
- i0.ɵɵelement(0, "i", 55);
385
+ i0.ɵɵelement(0, "i", 56);
393
386
  } }
394
387
  function MappingWorkspaceComponent_Conditional_6_Conditional_10_Conditional_20_Template(rf, ctx) { if (rf & 1) {
395
388
  i0.ɵɵtext(0, " 2 ");
396
389
  } }
397
390
  function MappingWorkspaceComponent_Conditional_6_Conditional_10_Conditional_35_Template(rf, ctx) { if (rf & 1) {
398
391
  const _r14 = i0.ɵɵgetCurrentView();
399
- i0.ɵɵelementStart(0, "div", 84)(1, "h4", 86);
392
+ i0.ɵɵelementStart(0, "div", 85)(1, "h4", 87);
400
393
  i0.ɵɵelement(2, "i", 35);
401
394
  i0.ɵɵtext(3, " Generated DDL ");
402
395
  i0.ɵɵelementEnd();
403
- i0.ɵɵelementStart(4, "pre", 87);
396
+ i0.ɵɵelementStart(4, "pre", 88);
404
397
  i0.ɵɵtext(5);
405
398
  i0.ɵɵelementEnd();
406
- i0.ɵɵelementStart(6, "div", 88)(7, "button", 89);
399
+ i0.ɵɵelementStart(6, "div", 89)(7, "button", 90);
407
400
  i0.ɵɵlistener("click", function MappingWorkspaceComponent_Conditional_6_Conditional_10_Conditional_35_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.CopyDDLToClipboard(ctx_r1.SelectedPendingMap.DDLContent)); });
408
- i0.ɵɵelement(8, "i", 90);
401
+ i0.ɵɵelement(8, "i", 91);
409
402
  i0.ɵɵtext(9, " Copy DDL ");
410
403
  i0.ɵɵelementEnd()()();
411
404
  } if (rf & 2) {
412
405
  const ctx_r1 = i0.ɵɵnextContext(3);
413
406
  i0.ɵɵadvance(5);
414
407
  i0.ɵɵtextInterpolate(ctx_r1.SelectedPendingMap.DDLContent);
415
- i0.ɵɵadvance(2);
416
- i0.ɵɵproperty("look", "outline")("size", "small");
417
408
  } }
418
409
  function MappingWorkspaceComponent_Conditional_6_Conditional_10_Conditional_36_For_8_Conditional_5_Template(rf, ctx) { if (rf & 1) {
419
- i0.ɵɵelement(0, "i", 98);
410
+ i0.ɵɵelement(0, "i", 99);
420
411
  } }
421
412
  function MappingWorkspaceComponent_Conditional_6_Conditional_10_Conditional_36_For_8_Conditional_6_Template(rf, ctx) { if (rf & 1) {
422
- i0.ɵɵelementStart(0, "span", 99);
413
+ i0.ɵɵelementStart(0, "span", 100);
423
414
  i0.ɵɵtext(1, "*");
424
415
  i0.ɵɵelementEnd();
425
416
  } }
426
417
  function MappingWorkspaceComponent_Conditional_6_Conditional_10_Conditional_36_For_8_Template(rf, ctx) { if (rf & 1) {
427
- i0.ɵɵelementStart(0, "div", 95)(1, "span", 96);
418
+ i0.ɵɵelementStart(0, "div", 96)(1, "span", 97);
428
419
  i0.ɵɵtext(2);
429
420
  i0.ɵɵelementEnd();
430
- i0.ɵɵelementStart(3, "span", 97);
421
+ i0.ɵɵelementStart(3, "span", 98);
431
422
  i0.ɵɵtext(4);
432
423
  i0.ɵɵelementEnd();
433
- i0.ɵɵconditionalCreate(5, MappingWorkspaceComponent_Conditional_6_Conditional_10_Conditional_36_For_8_Conditional_5_Template, 1, 0, "i", 98);
434
- i0.ɵɵconditionalCreate(6, MappingWorkspaceComponent_Conditional_6_Conditional_10_Conditional_36_For_8_Conditional_6_Template, 2, 0, "span", 99);
424
+ i0.ɵɵconditionalCreate(5, MappingWorkspaceComponent_Conditional_6_Conditional_10_Conditional_36_For_8_Conditional_5_Template, 1, 0, "i", 99);
425
+ i0.ɵɵconditionalCreate(6, MappingWorkspaceComponent_Conditional_6_Conditional_10_Conditional_36_For_8_Conditional_6_Template, 2, 0, "span", 100);
435
426
  i0.ɵɵelementEnd();
436
427
  } if (rf & 2) {
437
428
  const field_r15 = ctx.$implicit;
@@ -445,14 +436,14 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_10_Conditional_36_F
445
436
  i0.ɵɵconditional(field_r15.IsRequired ? 6 : -1);
446
437
  } }
447
438
  function MappingWorkspaceComponent_Conditional_6_Conditional_10_Conditional_36_Template(rf, ctx) { if (rf & 1) {
448
- i0.ɵɵelementStart(0, "div", 85)(1, "h4", 91);
449
- i0.ɵɵelement(2, "i", 92);
439
+ i0.ɵɵelementStart(0, "div", 86)(1, "h4", 92);
440
+ i0.ɵɵelement(2, "i", 93);
450
441
  i0.ɵɵtext(3, " Source Fields ");
451
- i0.ɵɵelementStart(4, "span", 93);
442
+ i0.ɵɵelementStart(4, "span", 94);
452
443
  i0.ɵɵtext(5);
453
444
  i0.ɵɵelementEnd()();
454
- i0.ɵɵelementStart(6, "div", 94);
455
- i0.ɵɵrepeaterCreate(7, MappingWorkspaceComponent_Conditional_6_Conditional_10_Conditional_36_For_8_Template, 7, 4, "div", 95, _forTrack1);
445
+ i0.ɵɵelementStart(6, "div", 95);
446
+ i0.ɵɵrepeaterCreate(7, MappingWorkspaceComponent_Conditional_6_Conditional_10_Conditional_36_For_8_Template, 7, 4, "div", 96, _forTrack1);
456
447
  i0.ɵɵelementEnd()();
457
448
  } if (rf & 2) {
458
449
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -462,8 +453,8 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_10_Conditional_36_T
462
453
  i0.ɵɵrepeater(ctx_r1.SelectedPendingMap.SourceFields);
463
454
  } }
464
455
  function MappingWorkspaceComponent_Conditional_6_Conditional_10_Template(rf, ctx) { if (rf & 1) {
465
- i0.ɵɵelementStart(0, "div", 12)(1, "div", 75);
466
- i0.ɵɵelement(2, "i", 76);
456
+ i0.ɵɵelementStart(0, "div", 12)(1, "div", 76);
457
+ i0.ɵɵelement(2, "i", 77);
467
458
  i0.ɵɵelementEnd();
468
459
  i0.ɵɵelementStart(3, "h3");
469
460
  i0.ɵɵtext(4);
@@ -475,35 +466,35 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_10_Template(rf, ctx
475
466
  i0.ɵɵelementEnd();
476
467
  i0.ɵɵtext(9, " to be created. Run the DDL migration and CodeGen to activate this mapping. ");
477
468
  i0.ɵɵelementEnd();
478
- i0.ɵɵelementStart(10, "div", 77)(11, "div", 78)(12, "div", 79);
479
- i0.ɵɵelement(13, "i", 55);
469
+ i0.ɵɵelementStart(10, "div", 78)(11, "div", 79)(12, "div", 80);
470
+ i0.ɵɵelement(13, "i", 56);
480
471
  i0.ɵɵelementEnd();
481
- i0.ɵɵelementStart(14, "span", 80);
472
+ i0.ɵɵelementStart(14, "span", 81);
482
473
  i0.ɵɵtext(15, "Map Created");
483
474
  i0.ɵɵelementEnd()();
484
- i0.ɵɵelement(16, "div", 81);
485
- i0.ɵɵelementStart(17, "div", 78)(18, "div", 82);
486
- i0.ɵɵconditionalCreate(19, MappingWorkspaceComponent_Conditional_6_Conditional_10_Conditional_19_Template, 1, 0, "i", 55)(20, MappingWorkspaceComponent_Conditional_6_Conditional_10_Conditional_20_Template, 1, 0);
475
+ i0.ɵɵelement(16, "div", 82);
476
+ i0.ɵɵelementStart(17, "div", 79)(18, "div", 83);
477
+ i0.ɵɵconditionalCreate(19, MappingWorkspaceComponent_Conditional_6_Conditional_10_Conditional_19_Template, 1, 0, "i", 56)(20, MappingWorkspaceComponent_Conditional_6_Conditional_10_Conditional_20_Template, 1, 0);
487
478
  i0.ɵɵelementEnd();
488
- i0.ɵɵelementStart(21, "span", 80);
479
+ i0.ɵɵelementStart(21, "span", 81);
489
480
  i0.ɵɵtext(22, "DDL Generated");
490
481
  i0.ɵɵelementEnd()();
491
- i0.ɵɵelement(23, "div", 81);
492
- i0.ɵɵelementStart(24, "div", 78)(25, "div", 83);
482
+ i0.ɵɵelement(23, "div", 82);
483
+ i0.ɵɵelementStart(24, "div", 79)(25, "div", 84);
493
484
  i0.ɵɵtext(26, "3");
494
485
  i0.ɵɵelementEnd();
495
- i0.ɵɵelementStart(27, "span", 80);
486
+ i0.ɵɵelementStart(27, "span", 81);
496
487
  i0.ɵɵtext(28, "Deploy & CodeGen");
497
488
  i0.ɵɵelementEnd()();
498
- i0.ɵɵelement(29, "div", 81);
499
- i0.ɵɵelementStart(30, "div", 78)(31, "div", 83);
489
+ i0.ɵɵelement(29, "div", 82);
490
+ i0.ɵɵelementStart(30, "div", 79)(31, "div", 84);
500
491
  i0.ɵɵtext(32, "4");
501
492
  i0.ɵɵelementEnd();
502
- i0.ɵɵelementStart(33, "span", 80);
493
+ i0.ɵɵelementStart(33, "span", 81);
503
494
  i0.ɵɵtext(34, "Ready to Sync");
504
495
  i0.ɵɵelementEnd()()();
505
- i0.ɵɵconditionalCreate(35, MappingWorkspaceComponent_Conditional_6_Conditional_10_Conditional_35_Template, 10, 3, "div", 84);
506
- i0.ɵɵconditionalCreate(36, MappingWorkspaceComponent_Conditional_6_Conditional_10_Conditional_36_Template, 9, 1, "div", 85);
496
+ i0.ɵɵconditionalCreate(35, MappingWorkspaceComponent_Conditional_6_Conditional_10_Conditional_35_Template, 10, 1, "div", 85);
497
+ i0.ɵɵconditionalCreate(36, MappingWorkspaceComponent_Conditional_6_Conditional_10_Conditional_36_Template, 9, 1, "div", 86);
507
498
  i0.ɵɵelementEnd();
508
499
  } if (rf & 2) {
509
500
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -527,14 +518,14 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_11_Template(rf, ctx
527
518
  } }
528
519
  function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_0_Template(rf, ctx) { if (rf & 1) {
529
520
  const _r17 = i0.ɵɵgetCurrentView();
530
- i0.ɵɵelementStart(0, "div", 100);
521
+ i0.ɵɵelementStart(0, "div", 101);
531
522
  i0.ɵɵelement(1, "i", 36);
532
- i0.ɵɵelementStart(2, "div", 112)(3, "p")(4, "strong");
523
+ i0.ɵɵelementStart(2, "div", 113)(3, "p")(4, "strong");
533
524
  i0.ɵɵtext(5);
534
525
  i0.ɵɵelementEnd();
535
526
  i0.ɵɵtext(6, " by matching source and destination field names.");
536
527
  i0.ɵɵelementEnd()();
537
- i0.ɵɵelementStart(7, "button", 89);
528
+ i0.ɵɵelementStart(7, "button", 114);
538
529
  i0.ɵɵlistener("click", function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_0_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.DismissAutoMapBanner()); });
539
530
  i0.ɵɵelement(8, "i", 28);
540
531
  i0.ɵɵelementEnd()();
@@ -542,8 +533,6 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_0_Te
542
533
  const ctx_r1 = i0.ɵɵnextContext(3);
543
534
  i0.ɵɵadvance(5);
544
535
  i0.ɵɵtextInterpolate2("", ctx_r1.AutoMapCount, " field", ctx_r1.AutoMapCount !== 1 ? "s" : "", " auto-mapped");
545
- i0.ɵɵadvance(2);
546
- i0.ɵɵproperty("look", "flat")("size", "small");
547
536
  } }
548
537
  function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_1_For_4_Template(rf, ctx) { if (rf & 1) {
549
538
  i0.ɵɵelementStart(0, "span");
@@ -555,9 +544,9 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_1_Fo
555
544
  i0.ɵɵtextInterpolate(warning_r18);
556
545
  } }
557
546
  function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_1_Template(rf, ctx) { if (rf & 1) {
558
- i0.ɵɵelementStart(0, "div", 101);
547
+ i0.ɵɵelementStart(0, "div", 102);
559
548
  i0.ɵɵelement(1, "i", 43);
560
- i0.ɵɵelementStart(2, "div", 113);
549
+ i0.ɵɵelementStart(2, "div", 115);
561
550
  i0.ɵɵrepeaterCreate(3, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_1_For_4_Template, 2, 1, "span", null, i0.ɵɵrepeaterTrackByIdentity);
562
551
  i0.ɵɵelementEnd()();
563
552
  } if (rf & 2) {
@@ -570,21 +559,21 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_15_T
570
559
  i0.ɵɵtext(1, " Saving... ");
571
560
  } }
572
561
  function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_16_Template(rf, ctx) { if (rf & 1) {
573
- i0.ɵɵelement(0, "i", 114);
562
+ i0.ɵɵelement(0, "i", 116);
574
563
  i0.ɵɵtext(1, " Save ");
575
564
  } }
576
565
  function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_17_Template(rf, ctx) { if (rf & 1) {
577
566
  const _r19 = i0.ɵɵgetCurrentView();
578
567
  i0.ɵɵelementStart(0, "p", 15);
579
568
  i0.ɵɵtext(1, " No field mappings yet. ");
580
- i0.ɵɵelementStart(2, "a", 57);
569
+ i0.ɵɵelementStart(2, "a", 58);
581
570
  i0.ɵɵlistener("click", function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_17_Template_a_click_2_listener() { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.AddFieldMapping()); });
582
571
  i0.ɵɵtext(3, "Add one");
583
572
  i0.ɵɵelementEnd()();
584
573
  } }
585
574
  function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
586
575
  const _r21 = i0.ɵɵgetCurrentView();
587
- i0.ɵɵelementStart(0, "input", 134);
576
+ i0.ɵɵelementStart(0, "input", 136);
588
577
  i0.ɵɵtwoWayListener("ngModelChange", function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_3_Template_input_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r21); const field_r22 = i0.ɵɵnextContext().$implicit; i0.ɵɵtwoWayBindingSet(field_r22.SourceFieldName, $event) || (field_r22.SourceFieldName = $event); return i0.ɵɵresetView($event); });
589
578
  i0.ɵɵlistener("ngModelChange", function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_3_Template_input_ngModelChange_0_listener() { i0.ɵɵrestoreView(_r21); const field_r22 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnFieldChanged(field_r22)); });
590
579
  i0.ɵɵelementEnd();
@@ -593,7 +582,7 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_F
593
582
  i0.ɵɵtwoWayProperty("ngModel", field_r22.SourceFieldName);
594
583
  } }
595
584
  function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_4_Conditional_3_Template(rf, ctx) { if (rf & 1) {
596
- i0.ɵɵelementStart(0, "span", 137);
585
+ i0.ɵɵelementStart(0, "span", 139);
597
586
  i0.ɵɵtext(1);
598
587
  i0.ɵɵelementEnd();
599
588
  } if (rf & 2) {
@@ -602,30 +591,30 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_F
602
591
  i0.ɵɵtextInterpolate(field_r22.SourceFieldType);
603
592
  } }
604
593
  function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_4_Conditional_4_Template(rf, ctx) { if (rf & 1) {
605
- i0.ɵɵelementStart(0, "span", 138);
606
- i0.ɵɵelement(1, "i", 129);
594
+ i0.ɵɵelementStart(0, "span", 140);
595
+ i0.ɵɵelement(1, "i", 131);
607
596
  i0.ɵɵtext(2, " PK");
608
597
  i0.ɵɵelementEnd();
609
598
  } }
610
599
  function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_4_Conditional_5_Template(rf, ctx) { if (rf & 1) {
611
- i0.ɵɵelementStart(0, "span", 139);
600
+ i0.ɵɵelementStart(0, "span", 141);
612
601
  i0.ɵɵtext(1, "REQ");
613
602
  i0.ɵɵelementEnd();
614
603
  } }
615
604
  function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_4_Conditional_6_Template(rf, ctx) { if (rf & 1) {
616
- i0.ɵɵelementStart(0, "span", 140);
605
+ i0.ɵɵelementStart(0, "span", 142);
617
606
  i0.ɵɵtext(1, "RO");
618
607
  i0.ɵɵelementEnd();
619
608
  } }
620
609
  function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_4_Template(rf, ctx) { if (rf & 1) {
621
- i0.ɵɵelementStart(0, "div", 135);
610
+ i0.ɵɵelementStart(0, "div", 137);
622
611
  i0.ɵɵtext(1);
623
612
  i0.ɵɵelementEnd();
624
- i0.ɵɵelementStart(2, "div", 136);
625
- i0.ɵɵconditionalCreate(3, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_4_Conditional_3_Template, 2, 1, "span", 137);
626
- i0.ɵɵconditionalCreate(4, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_4_Conditional_4_Template, 3, 0, "span", 138);
627
- i0.ɵɵconditionalCreate(5, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_4_Conditional_5_Template, 2, 0, "span", 139);
628
- i0.ɵɵconditionalCreate(6, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_4_Conditional_6_Template, 2, 0, "span", 140);
613
+ i0.ɵɵelementStart(2, "div", 138);
614
+ i0.ɵɵconditionalCreate(3, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_4_Conditional_3_Template, 2, 1, "span", 139);
615
+ i0.ɵɵconditionalCreate(4, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_4_Conditional_4_Template, 3, 0, "span", 140);
616
+ i0.ɵɵconditionalCreate(5, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_4_Conditional_5_Template, 2, 0, "span", 141);
617
+ i0.ɵɵconditionalCreate(6, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_4_Conditional_6_Template, 2, 0, "span", 142);
629
618
  i0.ɵɵelementEnd();
630
619
  } if (rf & 2) {
631
620
  const field_r22 = i0.ɵɵnextContext().$implicit;
@@ -642,13 +631,13 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_F
642
631
  } }
643
632
  function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_6_Template(rf, ctx) { if (rf & 1) {
644
633
  const _r23 = i0.ɵɵgetCurrentView();
645
- i0.ɵɵelementStart(0, "button", 141);
634
+ i0.ɵɵelementStart(0, "button", 143);
646
635
  i0.ɵɵlistener("click", function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r23); const field_r22 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.ToggleTransformEditor(field_r22)); });
647
636
  i0.ɵɵelement(1, "i");
648
637
  i0.ɵɵelementStart(2, "span");
649
638
  i0.ɵɵtext(3);
650
639
  i0.ɵɵelementEnd();
651
- i0.ɵɵelementStart(4, "span", 142);
640
+ i0.ɵɵelementStart(4, "span", 144);
652
641
  i0.ɵɵtext(5);
653
642
  i0.ɵɵelementEnd()();
654
643
  } if (rf & 2) {
@@ -664,9 +653,9 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_F
664
653
  } }
665
654
  function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_7_Template(rf, ctx) { if (rf & 1) {
666
655
  const _r24 = i0.ɵɵgetCurrentView();
667
- i0.ɵɵelementStart(0, "button", 143);
656
+ i0.ɵɵelementStart(0, "button", 145);
668
657
  i0.ɵɵlistener("click", function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r24); const field_r22 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.ToggleTransformEditor(field_r22)); });
669
- i0.ɵɵelement(1, "i", 63);
658
+ i0.ɵɵelement(1, "i", 64);
670
659
  i0.ɵɵelementStart(2, "span");
671
660
  i0.ɵɵtext(3);
672
661
  i0.ɵɵelementEnd()();
@@ -677,7 +666,7 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_F
677
666
  i0.ɵɵtextInterpolate(field_r22.TransformPipeline.length > 0 ? ctx_r1.GetTransformLabel(field_r22.TransformPipeline[0].Type) : "Direct");
678
667
  } }
679
668
  function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_9_For_4_Template(rf, ctx) { if (rf & 1) {
680
- i0.ɵɵelementStart(0, "option", 146);
669
+ i0.ɵɵelementStart(0, "option", 148);
681
670
  i0.ɵɵtext(1);
682
671
  i0.ɵɵelementEnd();
683
672
  } if (rf & 2) {
@@ -688,13 +677,13 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_F
688
677
  } }
689
678
  function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_9_Template(rf, ctx) { if (rf & 1) {
690
679
  const _r25 = i0.ɵɵgetCurrentView();
691
- i0.ɵɵelementStart(0, "select", 144);
680
+ i0.ɵɵelementStart(0, "select", 146);
692
681
  i0.ɵɵtwoWayListener("ngModelChange", function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_9_Template_select_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r25); const field_r22 = i0.ɵɵnextContext().$implicit; i0.ɵɵtwoWayBindingSet(field_r22.DestinationFieldName, $event) || (field_r22.DestinationFieldName = $event); return i0.ɵɵresetView($event); });
693
682
  i0.ɵɵlistener("ngModelChange", function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_9_Template_select_ngModelChange_0_listener() { i0.ɵɵrestoreView(_r25); const field_r22 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnFieldChanged(field_r22)); });
694
- i0.ɵɵelementStart(1, "option", 145);
683
+ i0.ɵɵelementStart(1, "option", 147);
695
684
  i0.ɵɵtext(2, "-- Select destination --");
696
685
  i0.ɵɵelementEnd();
697
- i0.ɵɵrepeaterCreate(3, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_9_For_4_Template, 2, 2, "option", 146, _forTrack0);
686
+ i0.ɵɵrepeaterCreate(3, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_9_For_4_Template, 2, 2, "option", 148, _forTrack0);
698
687
  i0.ɵɵelementEnd();
699
688
  } if (rf & 2) {
700
689
  const field_r22 = i0.ɵɵnextContext().$implicit;
@@ -705,7 +694,7 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_F
705
694
  } }
706
695
  function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_10_Template(rf, ctx) { if (rf & 1) {
707
696
  const _r27 = i0.ɵɵgetCurrentView();
708
- i0.ɵɵelementStart(0, "input", 147);
697
+ i0.ɵɵelementStart(0, "input", 149);
709
698
  i0.ɵɵtwoWayListener("ngModelChange", function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_10_Template_input_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r27); const field_r22 = i0.ɵɵnextContext().$implicit; i0.ɵɵtwoWayBindingSet(field_r22.DestinationFieldName, $event) || (field_r22.DestinationFieldName = $event); return i0.ɵɵresetView($event); });
710
699
  i0.ɵɵlistener("ngModelChange", function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_10_Template_input_ngModelChange_0_listener() { i0.ɵɵrestoreView(_r27); const field_r22 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnFieldChanged(field_r22)); });
711
700
  i0.ɵɵelementEnd();
@@ -714,7 +703,7 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_F
714
703
  i0.ɵɵtwoWayProperty("ngModel", field_r22.DestinationFieldName);
715
704
  } }
716
705
  function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_For_6_Template(rf, ctx) { if (rf & 1) {
717
- i0.ɵɵelementStart(0, "option", 146);
706
+ i0.ɵɵelementStart(0, "option", 148);
718
707
  i0.ɵɵtext(1);
719
708
  i0.ɵɵelementEnd();
720
709
  } if (rf & 2) {
@@ -725,10 +714,10 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_F
725
714
  } }
726
715
  function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_17_Template(rf, ctx) { if (rf & 1) {
727
716
  const _r34 = i0.ɵɵgetCurrentView();
728
- i0.ɵɵelementStart(0, "div", 161)(1, "label");
717
+ i0.ɵɵelementStart(0, "div", 163)(1, "label");
729
718
  i0.ɵɵtext(2, "Default value (when source is null)");
730
719
  i0.ɵɵelementEnd();
731
- i0.ɵɵelementStart(3, "input", 164);
720
+ i0.ɵɵelementStart(3, "input", 166);
732
721
  i0.ɵɵlistener("ngModelChange", function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_17_Template_input_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r34); const step_r31 = i0.ɵɵnextContext().$implicit; const field_r22 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); step_r31.Config["DefaultValue"] = $event; return i0.ɵɵresetView(ctx_r1.OnTransformConfigChange(field_r22)); });
733
722
  i0.ɵɵelementEnd()();
734
723
  } if (rf & 2) {
@@ -738,22 +727,22 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_F
738
727
  } }
739
728
  function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_18_Template(rf, ctx) { if (rf & 1) {
740
729
  const _r35 = i0.ɵɵgetCurrentView();
741
- i0.ɵɵelementStart(0, "div", 162)(1, "div", 161)(2, "label");
730
+ i0.ɵɵelementStart(0, "div", 164)(1, "div", 163)(2, "label");
742
731
  i0.ɵɵtext(3, "Pattern");
743
732
  i0.ɵɵelementEnd();
744
- i0.ɵɵelementStart(4, "input", 165);
733
+ i0.ɵɵelementStart(4, "input", 167);
745
734
  i0.ɵɵlistener("ngModelChange", function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_18_Template_input_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r35); const step_r31 = i0.ɵɵnextContext().$implicit; const field_r22 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); step_r31.Config["Pattern"] = $event; return i0.ɵɵresetView(ctx_r1.OnTransformConfigChange(field_r22)); });
746
735
  i0.ɵɵelementEnd()();
747
- i0.ɵɵelementStart(5, "div", 161)(6, "label");
736
+ i0.ɵɵelementStart(5, "div", 163)(6, "label");
748
737
  i0.ɵɵtext(7, "Replacement");
749
738
  i0.ɵɵelementEnd();
750
- i0.ɵɵelementStart(8, "input", 166);
739
+ i0.ɵɵelementStart(8, "input", 168);
751
740
  i0.ɵɵlistener("ngModelChange", function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_18_Template_input_ngModelChange_8_listener($event) { i0.ɵɵrestoreView(_r35); const step_r31 = i0.ɵɵnextContext().$implicit; const field_r22 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); step_r31.Config["Replacement"] = $event; return i0.ɵɵresetView(ctx_r1.OnTransformConfigChange(field_r22)); });
752
741
  i0.ɵɵelementEnd()();
753
- i0.ɵɵelementStart(9, "div", 163)(10, "label");
742
+ i0.ɵɵelementStart(9, "div", 165)(10, "label");
754
743
  i0.ɵɵtext(11, "Flags");
755
744
  i0.ɵɵelementEnd();
756
- i0.ɵɵelementStart(12, "input", 167);
745
+ i0.ɵɵelementStart(12, "input", 169);
757
746
  i0.ɵɵlistener("ngModelChange", function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_18_Template_input_ngModelChange_12_listener($event) { i0.ɵɵrestoreView(_r35); const step_r31 = i0.ɵɵnextContext().$implicit; const field_r22 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); step_r31.Config["Flags"] = $event; return i0.ɵɵresetView(ctx_r1.OnTransformConfigChange(field_r22)); });
758
747
  i0.ɵɵelementEnd()()();
759
748
  } if (rf & 2) {
@@ -767,16 +756,16 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_F
767
756
  } }
768
757
  function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_19_Template(rf, ctx) { if (rf & 1) {
769
758
  const _r36 = i0.ɵɵgetCurrentView();
770
- i0.ɵɵelementStart(0, "div", 162)(1, "div", 161)(2, "label");
759
+ i0.ɵɵelementStart(0, "div", 164)(1, "div", 163)(2, "label");
771
760
  i0.ɵɵtext(3, "Delimiter");
772
761
  i0.ɵɵelementEnd();
773
- i0.ɵɵelementStart(4, "input", 168);
762
+ i0.ɵɵelementStart(4, "input", 170);
774
763
  i0.ɵɵlistener("ngModelChange", function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_19_Template_input_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r36); const step_r31 = i0.ɵɵnextContext().$implicit; const field_r22 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); step_r31.Config["Delimiter"] = $event; return i0.ɵɵresetView(ctx_r1.OnTransformConfigChange(field_r22)); });
775
764
  i0.ɵɵelementEnd()();
776
- i0.ɵɵelementStart(5, "div", 163)(6, "label");
765
+ i0.ɵɵelementStart(5, "div", 165)(6, "label");
777
766
  i0.ɵɵtext(7, "Part index (0-based)");
778
767
  i0.ɵɵelementEnd();
779
- i0.ɵɵelementStart(8, "input", 169);
768
+ i0.ɵɵelementStart(8, "input", 171);
780
769
  i0.ɵɵlistener("ngModelChange", function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_19_Template_input_ngModelChange_8_listener($event) { i0.ɵɵrestoreView(_r36); const step_r31 = i0.ɵɵnextContext().$implicit; const field_r22 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); step_r31.Config["Index"] = +$event; return i0.ɵɵresetView(ctx_r1.OnTransformConfigChange(field_r22)); });
781
770
  i0.ɵɵelementEnd()()();
782
771
  } if (rf & 2) {
@@ -788,7 +777,7 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_F
788
777
  } }
789
778
  function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_20_For_5_Template(rf, ctx) { if (rf & 1) {
790
779
  const _r38 = i0.ɵɵgetCurrentView();
791
- i0.ɵɵelementStart(0, "button", 173);
780
+ i0.ɵɵelementStart(0, "button", 175);
792
781
  i0.ɵɵlistener("click", function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_20_For_5_Template_button_click_0_listener() { const sf_r39 = i0.ɵɵrestoreView(_r38).$implicit; const step_r31 = i0.ɵɵnextContext(2).$implicit; const field_r22 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); ctx_r1.ToggleCombineField(step_r31.Config, sf_r39); return i0.ɵɵresetView(ctx_r1.OnTransformConfigChange(field_r22)); });
793
782
  i0.ɵɵtext(1);
794
783
  i0.ɵɵelementEnd();
@@ -802,16 +791,16 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_F
802
791
  } }
803
792
  function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_20_Template(rf, ctx) { if (rf & 1) {
804
793
  const _r37 = i0.ɵɵgetCurrentView();
805
- i0.ɵɵelementStart(0, "div", 161)(1, "label");
794
+ i0.ɵɵelementStart(0, "div", 163)(1, "label");
806
795
  i0.ɵɵtext(2, "Source fields to combine");
807
796
  i0.ɵɵelementEnd();
808
- i0.ɵɵelementStart(3, "div", 170);
809
- i0.ɵɵrepeaterCreate(4, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_20_For_5_Template, 2, 3, "button", 171, i0.ɵɵrepeaterTrackByIdentity);
797
+ i0.ɵɵelementStart(3, "div", 172);
798
+ i0.ɵɵrepeaterCreate(4, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_20_For_5_Template, 2, 3, "button", 173, i0.ɵɵrepeaterTrackByIdentity);
810
799
  i0.ɵɵelementEnd()();
811
- i0.ɵɵelementStart(6, "div", 163)(7, "label");
800
+ i0.ɵɵelementStart(6, "div", 165)(7, "label");
812
801
  i0.ɵɵtext(8, "Separator");
813
802
  i0.ɵɵelementEnd();
814
- i0.ɵɵelementStart(9, "input", 172);
803
+ i0.ɵɵelementStart(9, "input", 174);
815
804
  i0.ɵɵlistener("ngModelChange", function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_20_Template_input_ngModelChange_9_listener($event) { i0.ɵɵrestoreView(_r37); const step_r31 = i0.ɵɵnextContext().$implicit; const field_r22 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); step_r31.Config["Separator"] = $event; return i0.ɵɵresetView(ctx_r1.OnTransformConfigChange(field_r22)); });
816
805
  i0.ɵɵelementEnd()();
817
806
  } if (rf & 2) {
@@ -824,14 +813,14 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_F
824
813
  } }
825
814
  function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_21_For_5_Template(rf, ctx) { if (rf & 1) {
826
815
  const _r41 = i0.ɵɵgetCurrentView();
827
- i0.ɵɵelementStart(0, "div", 175)(1, "input", 178);
816
+ i0.ɵɵelementStart(0, "div", 177)(1, "input", 180);
828
817
  i0.ɵɵlistener("change", function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_21_For_5_Template_input_change_1_listener($event) { const entry_r42 = i0.ɵɵrestoreView(_r41).$implicit; const step_r31 = i0.ɵɵnextContext(2).$implicit; const field_r22 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); ctx_r1.UpdateLookupEntry(step_r31.Config, entry_r42.key, $event.target.value, entry_r42.value); return i0.ɵɵresetView(ctx_r1.OnTransformConfigChange(field_r22)); });
829
818
  i0.ɵɵelementEnd();
830
- i0.ɵɵelement(2, "i", 179);
831
- i0.ɵɵelementStart(3, "input", 180);
819
+ i0.ɵɵelement(2, "i", 181);
820
+ i0.ɵɵelementStart(3, "input", 182);
832
821
  i0.ɵɵlistener("change", function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_21_For_5_Template_input_change_3_listener($event) { const entry_r42 = i0.ɵɵrestoreView(_r41).$implicit; const step_r31 = i0.ɵɵnextContext(2).$implicit; const field_r22 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); ctx_r1.UpdateLookupEntry(step_r31.Config, entry_r42.key, entry_r42.key, $event.target.value); return i0.ɵɵresetView(ctx_r1.OnTransformConfigChange(field_r22)); });
833
822
  i0.ɵɵelementEnd();
834
- i0.ɵɵelementStart(4, "button", 181);
823
+ i0.ɵɵelementStart(4, "button", 183);
835
824
  i0.ɵɵlistener("click", function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_21_For_5_Template_button_click_4_listener() { const entry_r42 = i0.ɵɵrestoreView(_r41).$implicit; const step_r31 = i0.ɵɵnextContext(2).$implicit; const field_r22 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); ctx_r1.RemoveLookupEntry(step_r31.Config, entry_r42.key); return i0.ɵɵresetView(ctx_r1.OnTransformConfigChange(field_r22)); });
836
825
  i0.ɵɵelement(5, "i", 28);
837
826
  i0.ɵɵelementEnd()();
@@ -844,20 +833,20 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_F
844
833
  } }
845
834
  function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_21_Template(rf, ctx) { if (rf & 1) {
846
835
  const _r40 = i0.ɵɵgetCurrentView();
847
- i0.ɵɵelementStart(0, "div", 161)(1, "label");
836
+ i0.ɵɵelementStart(0, "div", 163)(1, "label");
848
837
  i0.ɵɵtext(2, "Value mapping");
849
838
  i0.ɵɵelementEnd();
850
- i0.ɵɵelementStart(3, "div", 174);
851
- i0.ɵɵrepeaterCreate(4, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_21_For_5_Template, 6, 2, "div", 175, i0.ɵɵrepeaterTrackByIndex);
852
- i0.ɵɵelementStart(6, "button", 176);
839
+ i0.ɵɵelementStart(3, "div", 176);
840
+ i0.ɵɵrepeaterCreate(4, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_21_For_5_Template, 6, 2, "div", 177, i0.ɵɵrepeaterTrackByIndex);
841
+ i0.ɵɵelementStart(6, "button", 178);
853
842
  i0.ɵɵlistener("click", function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_21_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r40); const step_r31 = i0.ɵɵnextContext().$implicit; const field_r22 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); ctx_r1.AddLookupEntry(step_r31.Config); return i0.ɵɵresetView(ctx_r1.OnTransformConfigChange(field_r22)); });
854
843
  i0.ɵɵelement(7, "i", 21);
855
844
  i0.ɵɵtext(8, " Add mapping ");
856
845
  i0.ɵɵelementEnd()()();
857
- i0.ɵɵelementStart(9, "div", 163)(10, "label");
846
+ i0.ɵɵelementStart(9, "div", 165)(10, "label");
858
847
  i0.ɵɵtext(11, "Default (when no match)");
859
848
  i0.ɵɵelementEnd();
860
- i0.ɵɵelementStart(12, "input", 177);
849
+ i0.ɵɵelementStart(12, "input", 179);
861
850
  i0.ɵɵlistener("ngModelChange", function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_21_Template_input_ngModelChange_12_listener($event) { i0.ɵɵrestoreView(_r40); const step_r31 = i0.ɵɵnextContext().$implicit; const field_r22 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); step_r31.Config["Default"] = $event; return i0.ɵɵresetView(ctx_r1.OnTransformConfigChange(field_r22)); });
862
851
  i0.ɵɵelementEnd()();
863
852
  } if (rf & 2) {
@@ -870,24 +859,24 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_F
870
859
  } }
871
860
  function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_22_Template(rf, ctx) { if (rf & 1) {
872
861
  const _r43 = i0.ɵɵgetCurrentView();
873
- i0.ɵɵelementStart(0, "div", 162)(1, "div", 163)(2, "label");
862
+ i0.ɵɵelementStart(0, "div", 164)(1, "div", 165)(2, "label");
874
863
  i0.ɵɵtext(3, "Format type");
875
864
  i0.ɵɵelementEnd();
876
- i0.ɵɵelementStart(4, "select", 144);
865
+ i0.ɵɵelementStart(4, "select", 146);
877
866
  i0.ɵɵlistener("ngModelChange", function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_22_Template_select_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r43); const step_r31 = i0.ɵɵnextContext().$implicit; const field_r22 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); step_r31.Config["FormatType"] = $event; return i0.ɵɵresetView(ctx_r1.OnTransformConfigChange(field_r22)); });
878
- i0.ɵɵelementStart(5, "option", 182);
867
+ i0.ɵɵelementStart(5, "option", 184);
879
868
  i0.ɵɵtext(6, "Date");
880
869
  i0.ɵɵelementEnd();
881
- i0.ɵɵelementStart(7, "option", 183);
870
+ i0.ɵɵelementStart(7, "option", 185);
882
871
  i0.ɵɵtext(8, "Number");
883
872
  i0.ɵɵelementEnd();
884
- i0.ɵɵelementStart(9, "option", 184);
873
+ i0.ɵɵelementStart(9, "option", 186);
885
874
  i0.ɵɵtext(10, "String");
886
875
  i0.ɵɵelementEnd()()();
887
- i0.ɵɵelementStart(11, "div", 161)(12, "label");
876
+ i0.ɵɵelementStart(11, "div", 163)(12, "label");
888
877
  i0.ɵɵtext(13, "Format string");
889
878
  i0.ɵɵelementEnd();
890
- i0.ɵɵelementStart(14, "input", 185);
879
+ i0.ɵɵelementStart(14, "input", 187);
891
880
  i0.ɵɵlistener("ngModelChange", function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_22_Template_input_ngModelChange_14_listener($event) { i0.ɵɵrestoreView(_r43); const step_r31 = i0.ɵɵnextContext().$implicit; const field_r22 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); step_r31.Config["FormatString"] = $event; return i0.ɵɵresetView(ctx_r1.OnTransformConfigChange(field_r22)); });
892
881
  i0.ɵɵelementEnd()()();
893
882
  } if (rf & 2) {
@@ -899,21 +888,21 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_F
899
888
  } }
900
889
  function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_23_Template(rf, ctx) { if (rf & 1) {
901
890
  const _r44 = i0.ɵɵgetCurrentView();
902
- i0.ɵɵelementStart(0, "div", 163)(1, "label");
891
+ i0.ɵɵelementStart(0, "div", 165)(1, "label");
903
892
  i0.ɵɵtext(2, "Target type");
904
893
  i0.ɵɵelementEnd();
905
- i0.ɵɵelementStart(3, "select", 144);
894
+ i0.ɵɵelementStart(3, "select", 146);
906
895
  i0.ɵɵlistener("ngModelChange", function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_23_Template_select_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r44); const step_r31 = i0.ɵɵnextContext().$implicit; const field_r22 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); step_r31.Config["TargetType"] = $event; return i0.ɵɵresetView(ctx_r1.OnTransformConfigChange(field_r22)); });
907
- i0.ɵɵelementStart(4, "option", 184);
896
+ i0.ɵɵelementStart(4, "option", 186);
908
897
  i0.ɵɵtext(5, "String");
909
898
  i0.ɵɵelementEnd();
910
- i0.ɵɵelementStart(6, "option", 183);
899
+ i0.ɵɵelementStart(6, "option", 185);
911
900
  i0.ɵɵtext(7, "Number");
912
901
  i0.ɵɵelementEnd();
913
- i0.ɵɵelementStart(8, "option", 186);
902
+ i0.ɵɵelementStart(8, "option", 188);
914
903
  i0.ɵɵtext(9, "Boolean");
915
904
  i0.ɵɵelementEnd();
916
- i0.ɵɵelementStart(10, "option", 182);
905
+ i0.ɵɵelementStart(10, "option", 184);
917
906
  i0.ɵɵtext(11, "Date");
918
907
  i0.ɵɵelementEnd()()();
919
908
  } if (rf & 2) {
@@ -923,16 +912,16 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_F
923
912
  } }
924
913
  function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_24_Template(rf, ctx) { if (rf & 1) {
925
914
  const _r45 = i0.ɵɵgetCurrentView();
926
- i0.ɵɵelementStart(0, "div", 162)(1, "div", 163)(2, "label");
915
+ i0.ɵɵelementStart(0, "div", 164)(1, "div", 165)(2, "label");
927
916
  i0.ɵɵtext(3, "Start index");
928
917
  i0.ɵɵelementEnd();
929
- i0.ɵɵelementStart(4, "input", 169);
918
+ i0.ɵɵelementStart(4, "input", 171);
930
919
  i0.ɵɵlistener("ngModelChange", function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_24_Template_input_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r45); const step_r31 = i0.ɵɵnextContext().$implicit; const field_r22 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); step_r31.Config["Start"] = +$event; return i0.ɵɵresetView(ctx_r1.OnTransformConfigChange(field_r22)); });
931
920
  i0.ɵɵelementEnd()();
932
- i0.ɵɵelementStart(5, "div", 163)(6, "label");
921
+ i0.ɵɵelementStart(5, "div", 165)(6, "label");
933
922
  i0.ɵɵtext(7, "Length (blank = to end)");
934
923
  i0.ɵɵelementEnd();
935
- i0.ɵɵelementStart(8, "input", 187);
924
+ i0.ɵɵelementStart(8, "input", 189);
936
925
  i0.ɵɵlistener("ngModelChange", function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_24_Template_input_ngModelChange_8_listener($event) { i0.ɵɵrestoreView(_r45); const step_r31 = i0.ɵɵnextContext().$implicit; const field_r22 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); step_r31.Config["Length"] = $event ? +$event : undefined; return i0.ɵɵresetView(ctx_r1.OnTransformConfigChange(field_r22)); });
937
926
  i0.ɵɵelementEnd()()();
938
927
  } if (rf & 2) {
@@ -944,9 +933,9 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_F
944
933
  } }
945
934
  function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_25_Template(rf, ctx) { if (rf & 1) {
946
935
  const _r46 = i0.ɵɵgetCurrentView();
947
- i0.ɵɵelementStart(0, "div", 161)(1, "label");
936
+ i0.ɵɵelementStart(0, "div", 163)(1, "label");
948
937
  i0.ɵɵtext(2, "JavaScript expression ");
949
- i0.ɵɵelementStart(3, "span", 188);
938
+ i0.ɵɵelementStart(3, "span", 190);
950
939
  i0.ɵɵtext(4, "(use ");
951
940
  i0.ɵɵelementStart(5, "code");
952
941
  i0.ɵɵtext(6, "value");
@@ -957,7 +946,7 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_F
957
946
  i0.ɵɵelementEnd();
958
947
  i0.ɵɵtext(10, ")");
959
948
  i0.ɵɵelementEnd()();
960
- i0.ɵɵelementStart(11, "textarea", 189);
949
+ i0.ɵɵelementStart(11, "textarea", 191);
961
950
  i0.ɵɵlistener("ngModelChange", function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_25_Template_textarea_ngModelChange_11_listener($event) { i0.ɵɵrestoreView(_r46); const step_r31 = i0.ɵɵnextContext().$implicit; const field_r22 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); step_r31.Config["Expression"] = $event; return i0.ɵɵresetView(ctx_r1.OnTransformConfigChange(field_r22)); });
962
951
  i0.ɵɵelementEnd()();
963
952
  } if (rf & 2) {
@@ -967,31 +956,31 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_F
967
956
  } }
968
957
  function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Template(rf, ctx) { if (rf & 1) {
969
958
  const _r30 = i0.ɵɵgetCurrentView();
970
- i0.ɵɵelementStart(0, "div", 151)(1, "div", 152)(2, "span", 153);
959
+ i0.ɵɵelementStart(0, "div", 153)(1, "div", 154)(2, "span", 155);
971
960
  i0.ɵɵtext(3);
972
961
  i0.ɵɵelementEnd();
973
- i0.ɵɵelementStart(4, "select", 154);
962
+ i0.ɵɵelementStart(4, "select", 156);
974
963
  i0.ɵɵlistener("ngModelChange", function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Template_select_ngModelChange_4_listener($event) { const step_r31 = i0.ɵɵrestoreView(_r30).$implicit; const field_r22 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnTransformTypeChange(field_r22, step_r31, $event)); });
975
- i0.ɵɵrepeaterCreate(5, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_For_6_Template, 2, 2, "option", 146, _forTrack2);
964
+ i0.ɵɵrepeaterCreate(5, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_For_6_Template, 2, 2, "option", 148, _forTrack2);
976
965
  i0.ɵɵelementEnd();
977
- i0.ɵɵelementStart(7, "select", 155);
966
+ i0.ɵɵelementStart(7, "select", 157);
978
967
  i0.ɵɵtwoWayListener("ngModelChange", function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Template_select_ngModelChange_7_listener($event) { const step_r31 = i0.ɵɵrestoreView(_r30).$implicit; i0.ɵɵtwoWayBindingSet(step_r31.OnError, $event) || (step_r31.OnError = $event); return i0.ɵɵresetView($event); });
979
968
  i0.ɵɵlistener("ngModelChange", function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Template_select_ngModelChange_7_listener() { i0.ɵɵrestoreView(_r30); const field_r22 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnTransformConfigChange(field_r22)); });
980
- i0.ɵɵelementStart(8, "option", 156);
969
+ i0.ɵɵelementStart(8, "option", 158);
981
970
  i0.ɵɵtext(9, "Fail");
982
971
  i0.ɵɵelementEnd();
983
- i0.ɵɵelementStart(10, "option", 157);
972
+ i0.ɵɵelementStart(10, "option", 159);
984
973
  i0.ɵɵtext(11, "Skip row");
985
974
  i0.ɵɵelementEnd();
986
- i0.ɵɵelementStart(12, "option", 158);
975
+ i0.ɵɵelementStart(12, "option", 160);
987
976
  i0.ɵɵtext(13, "Set null");
988
977
  i0.ɵɵelementEnd()();
989
- i0.ɵɵelementStart(14, "button", 159);
978
+ i0.ɵɵelementStart(14, "button", 161);
990
979
  i0.ɵɵlistener("click", function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Template_button_click_14_listener() { const ɵ$index_534_r33 = i0.ɵɵrestoreView(_r30).$index; const field_r22 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.RemoveTransformStep(field_r22, ɵ$index_534_r33)); });
991
- i0.ɵɵelement(15, "i", 71);
980
+ i0.ɵɵelement(15, "i", 72);
992
981
  i0.ɵɵelementEnd()();
993
- i0.ɵɵelementStart(16, "div", 160);
994
- i0.ɵɵconditionalCreate(17, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_17_Template, 4, 1, "div", 161)(18, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_18_Template, 13, 3, "div", 162)(19, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_19_Template, 9, 2, "div", 162)(20, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_20_Template, 10, 1)(21, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_21_Template, 13, 1)(22, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_22_Template, 15, 2, "div", 162)(23, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_23_Template, 12, 1, "div", 163)(24, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_24_Template, 9, 2, "div", 162)(25, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_25_Template, 12, 1, "div", 161);
982
+ i0.ɵɵelementStart(16, "div", 162);
983
+ i0.ɵɵconditionalCreate(17, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_17_Template, 4, 1, "div", 163)(18, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_18_Template, 13, 3, "div", 164)(19, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_19_Template, 9, 2, "div", 164)(20, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_20_Template, 10, 1)(21, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_21_Template, 13, 1)(22, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_22_Template, 15, 2, "div", 164)(23, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_23_Template, 12, 1, "div", 165)(24, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_24_Template, 9, 2, "div", 164)(25, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Case_25_Template, 12, 1, "div", 163);
995
984
  i0.ɵɵelementEnd()();
996
985
  } if (rf & 2) {
997
986
  let tmp_30_0;
@@ -1011,16 +1000,16 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_F
1011
1000
  } }
1012
1001
  function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_Template(rf, ctx) { if (rf & 1) {
1013
1002
  const _r29 = i0.ɵɵgetCurrentView();
1014
- i0.ɵɵelementStart(0, "div", 133)(1, "div", 148)(2, "span", 149);
1003
+ i0.ɵɵelementStart(0, "div", 135)(1, "div", 150)(2, "span", 151);
1015
1004
  i0.ɵɵelement(3, "i", 36);
1016
1005
  i0.ɵɵtext(4, " Transform Pipeline");
1017
1006
  i0.ɵɵelementEnd();
1018
- i0.ɵɵelementStart(5, "button", 150);
1007
+ i0.ɵɵelementStart(5, "button", 152);
1019
1008
  i0.ɵɵlistener("click", function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r29); const field_r22 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.AddTransformStep(field_r22)); });
1020
1009
  i0.ɵɵelement(6, "i", 21);
1021
1010
  i0.ɵɵtext(7, " Add Step ");
1022
1011
  i0.ɵɵelementEnd()();
1023
- i0.ɵɵrepeaterCreate(8, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Template, 26, 4, "div", 151, i0.ɵɵrepeaterTrackByIndex);
1012
+ i0.ɵɵrepeaterCreate(8, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_For_9_Template, 26, 4, "div", 153, i0.ɵɵrepeaterTrackByIndex);
1024
1013
  i0.ɵɵelementEnd();
1025
1014
  } if (rf & 2) {
1026
1015
  const field_r22 = i0.ɵɵnextContext().$implicit;
@@ -1029,33 +1018,33 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_F
1029
1018
  } }
1030
1019
  function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Template(rf, ctx) { if (rf & 1) {
1031
1020
  const _r20 = i0.ɵɵgetCurrentView();
1032
- i0.ɵɵelementStart(0, "div", 116)(1, "div", 117)(2, "div", 118);
1033
- i0.ɵɵconditionalCreate(3, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_3_Template, 1, 1, "input", 119)(4, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_4_Template, 7, 5);
1021
+ i0.ɵɵelementStart(0, "div", 118)(1, "div", 119)(2, "div", 120);
1022
+ i0.ɵɵconditionalCreate(3, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_3_Template, 1, 1, "input", 121)(4, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_4_Template, 7, 5);
1034
1023
  i0.ɵɵelementEnd();
1035
- i0.ɵɵelementStart(5, "div", 120);
1036
- i0.ɵɵconditionalCreate(6, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_6_Template, 6, 5, "button", 121)(7, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_7_Template, 4, 1, "button", 122);
1024
+ i0.ɵɵelementStart(5, "div", 122);
1025
+ i0.ɵɵconditionalCreate(6, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_6_Template, 6, 5, "button", 123)(7, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_7_Template, 4, 1, "button", 124);
1037
1026
  i0.ɵɵelementEnd();
1038
- i0.ɵɵelementStart(8, "div", 123);
1039
- i0.ɵɵconditionalCreate(9, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_9_Template, 5, 1, "select", 124)(10, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_10_Template, 1, 1, "input", 125);
1027
+ i0.ɵɵelementStart(8, "div", 125);
1028
+ i0.ɵɵconditionalCreate(9, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_9_Template, 5, 1, "select", 126)(10, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_10_Template, 1, 1, "input", 127);
1040
1029
  i0.ɵɵelementEnd();
1041
- i0.ɵɵelementStart(11, "div", 126)(12, "label", 127)(13, "input", 128);
1030
+ i0.ɵɵelementStart(11, "div", 128)(12, "label", 129)(13, "input", 130);
1042
1031
  i0.ɵɵtwoWayListener("ngModelChange", function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Template_input_ngModelChange_13_listener($event) { const field_r22 = i0.ɵɵrestoreView(_r20).$implicit; i0.ɵɵtwoWayBindingSet(field_r22.IsKeyField, $event) || (field_r22.IsKeyField = $event); return i0.ɵɵresetView($event); });
1043
1032
  i0.ɵɵlistener("ngModelChange", function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Template_input_ngModelChange_13_listener() { const field_r22 = i0.ɵɵrestoreView(_r20).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnFieldChanged(field_r22)); });
1044
1033
  i0.ɵɵelementEnd();
1045
- i0.ɵɵelement(14, "i", 129);
1034
+ i0.ɵɵelement(14, "i", 131);
1046
1035
  i0.ɵɵelementEnd();
1047
- i0.ɵɵelementStart(15, "label", 130)(16, "input", 128);
1036
+ i0.ɵɵelementStart(15, "label", 132)(16, "input", 130);
1048
1037
  i0.ɵɵtwoWayListener("ngModelChange", function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Template_input_ngModelChange_16_listener($event) { const field_r22 = i0.ɵɵrestoreView(_r20).$implicit; i0.ɵɵtwoWayBindingSet(field_r22.IsRequired, $event) || (field_r22.IsRequired = $event); return i0.ɵɵresetView($event); });
1049
1038
  i0.ɵɵlistener("ngModelChange", function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Template_input_ngModelChange_16_listener() { const field_r22 = i0.ɵɵrestoreView(_r20).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnFieldChanged(field_r22)); });
1050
1039
  i0.ɵɵelementEnd();
1051
- i0.ɵɵelementStart(17, "span", 131);
1040
+ i0.ɵɵelementStart(17, "span", 133);
1052
1041
  i0.ɵɵtext(18, "*");
1053
1042
  i0.ɵɵelementEnd()()();
1054
- i0.ɵɵelementStart(19, "button", 132);
1043
+ i0.ɵɵelementStart(19, "button", 134);
1055
1044
  i0.ɵɵlistener("click", function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Template_button_click_19_listener() { const ɵ$index_430_r28 = i0.ɵɵrestoreView(_r20).$index; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.RemoveFieldMapping(ɵ$index_430_r28)); });
1056
1045
  i0.ɵɵelement(20, "i", 28);
1057
1046
  i0.ɵɵelementEnd()();
1058
- i0.ɵɵconditionalCreate(21, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_Template, 10, 0, "div", 133);
1047
+ i0.ɵɵconditionalCreate(21, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Conditional_21_Template, 10, 0, "div", 135);
1059
1048
  i0.ɵɵelementEnd();
1060
1049
  } if (rf & 2) {
1061
1050
  const field_r22 = ctx.$implicit;
@@ -1075,8 +1064,8 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_F
1075
1064
  i0.ɵɵconditional(field_r22.ShowTransformEditor && field_r22.TransformPipeline.length > 0 ? 21 : -1);
1076
1065
  } }
1077
1066
  function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_Template(rf, ctx) { if (rf & 1) {
1078
- i0.ɵɵelementStart(0, "div", 107);
1079
- i0.ɵɵrepeaterCreate(1, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Template, 22, 10, "div", 115, i0.ɵɵrepeaterTrackByIdentity);
1067
+ i0.ɵɵelementStart(0, "div", 108);
1068
+ i0.ɵɵrepeaterCreate(1, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_For_2_Template, 22, 10, "div", 117, i0.ɵɵrepeaterTrackByIdentity);
1080
1069
  i0.ɵɵelementEnd();
1081
1070
  } if (rf & 2) {
1082
1071
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -1084,7 +1073,7 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_T
1084
1073
  i0.ɵɵrepeater(ctx_r1.ActiveEditableFields);
1085
1074
  } }
1086
1075
  function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_27_Conditional_7_Template(rf, ctx) { if (rf & 1) {
1087
- i0.ɵɵelement(0, "mj-loading", 192);
1076
+ i0.ɵɵelement(0, "mj-loading", 194);
1088
1077
  } }
1089
1078
  function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_27_Conditional_8_Template(rf, ctx) { if (rf & 1) {
1090
1079
  i0.ɵɵelementStart(0, "p", 15);
@@ -1121,7 +1110,7 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_27_C
1121
1110
  i0.ɵɵrepeater(ctx_r1.GetPreviewColumns(ctx_r1.SourcePreviewData));
1122
1111
  } }
1123
1112
  function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_27_Conditional_9_Template(rf, ctx) { if (rf & 1) {
1124
- i0.ɵɵelementStart(0, "div", 193)(1, "table", 194)(2, "thead")(3, "tr");
1113
+ i0.ɵɵelementStart(0, "div", 195)(1, "table", 196)(2, "thead")(3, "tr");
1125
1114
  i0.ɵɵrepeaterCreate(4, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_27_Conditional_9_For_5_Template, 2, 1, "th", null, i0.ɵɵrepeaterTrackByIdentity);
1126
1115
  i0.ɵɵelementEnd()();
1127
1116
  i0.ɵɵelementStart(6, "tbody");
@@ -1136,15 +1125,15 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_27_C
1136
1125
  } }
1137
1126
  function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_27_Template(rf, ctx) { if (rf & 1) {
1138
1127
  const _r47 = i0.ɵɵgetCurrentView();
1139
- i0.ɵɵelementStart(0, "div", 111)(1, "div", 190)(2, "h4");
1140
- i0.ɵɵelement(3, "i", 191);
1128
+ i0.ɵɵelementStart(0, "div", 112)(1, "div", 192)(2, "h4");
1129
+ i0.ɵɵelement(3, "i", 193);
1141
1130
  i0.ɵɵtext(4, " Source Data Preview");
1142
1131
  i0.ɵɵelementEnd();
1143
1132
  i0.ɵɵelementStart(5, "button", 27);
1144
1133
  i0.ɵɵlistener("click", function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_27_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r47); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.CloseSourcePreview()); });
1145
1134
  i0.ɵɵelement(6, "i", 28);
1146
1135
  i0.ɵɵelementEnd()();
1147
- i0.ɵɵconditionalCreate(7, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_27_Conditional_7_Template, 1, 0, "mj-loading", 192)(8, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_27_Conditional_8_Template, 2, 0, "p", 15)(9, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_27_Conditional_9_Template, 9, 0, "div", 193);
1136
+ i0.ɵɵconditionalCreate(7, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_27_Conditional_7_Template, 1, 0, "mj-loading", 194)(8, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_27_Conditional_8_Template, 2, 0, "p", 15)(9, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_27_Conditional_9_Template, 9, 0, "div", 195);
1148
1137
  i0.ɵɵelementEnd();
1149
1138
  } if (rf & 2) {
1150
1139
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -1152,7 +1141,7 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_27_T
1152
1141
  i0.ɵɵconditional(ctx_r1.IsLoadingSourcePreview ? 7 : ctx_r1.SourcePreviewData.length === 0 ? 8 : 9);
1153
1142
  } }
1154
1143
  function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_28_Conditional_7_Template(rf, ctx) { if (rf & 1) {
1155
- i0.ɵɵelement(0, "mj-loading", 195);
1144
+ i0.ɵɵelement(0, "mj-loading", 197);
1156
1145
  } }
1157
1146
  function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_28_Conditional_8_Template(rf, ctx) { if (rf & 1) {
1158
1147
  i0.ɵɵelementStart(0, "p", 15);
@@ -1189,7 +1178,7 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_28_C
1189
1178
  i0.ɵɵrepeater(ctx_r1.GetPreviewColumns(ctx_r1.DestPreviewData));
1190
1179
  } }
1191
1180
  function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_28_Conditional_9_Template(rf, ctx) { if (rf & 1) {
1192
- i0.ɵɵelementStart(0, "div", 193)(1, "table", 194)(2, "thead")(3, "tr");
1181
+ i0.ɵɵelementStart(0, "div", 195)(1, "table", 196)(2, "thead")(3, "tr");
1193
1182
  i0.ɵɵrepeaterCreate(4, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_28_Conditional_9_For_5_Template, 2, 1, "th", null, i0.ɵɵrepeaterTrackByIdentity);
1194
1183
  i0.ɵɵelementEnd()();
1195
1184
  i0.ɵɵelementStart(6, "tbody");
@@ -1204,7 +1193,7 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_28_C
1204
1193
  } }
1205
1194
  function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_28_Template(rf, ctx) { if (rf & 1) {
1206
1195
  const _r51 = i0.ɵɵgetCurrentView();
1207
- i0.ɵɵelementStart(0, "div", 111)(1, "div", 190)(2, "h4");
1196
+ i0.ɵɵelementStart(0, "div", 112)(1, "div", 192)(2, "h4");
1208
1197
  i0.ɵɵelement(3, "i", 35);
1209
1198
  i0.ɵɵtext(4, " Destination Data Preview");
1210
1199
  i0.ɵɵelementEnd();
@@ -1212,7 +1201,7 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_28_T
1212
1201
  i0.ɵɵlistener("click", function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_28_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r51); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.CloseDestPreview()); });
1213
1202
  i0.ɵɵelement(6, "i", 28);
1214
1203
  i0.ɵɵelementEnd()();
1215
- i0.ɵɵconditionalCreate(7, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_28_Conditional_7_Template, 1, 0, "mj-loading", 195)(8, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_28_Conditional_8_Template, 2, 0, "p", 15)(9, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_28_Conditional_9_Template, 9, 0, "div", 193);
1204
+ i0.ɵɵconditionalCreate(7, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_28_Conditional_7_Template, 1, 0, "mj-loading", 197)(8, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_28_Conditional_8_Template, 2, 0, "p", 15)(9, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_28_Conditional_9_Template, 9, 0, "div", 195);
1216
1205
  i0.ɵɵelementEnd();
1217
1206
  } if (rf & 2) {
1218
1207
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -1221,19 +1210,19 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_28_T
1221
1210
  } }
1222
1211
  function MappingWorkspaceComponent_Conditional_6_Conditional_12_Template(rf, ctx) { if (rf & 1) {
1223
1212
  const _r16 = i0.ɵɵgetCurrentView();
1224
- i0.ɵɵconditionalCreate(0, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_0_Template, 9, 4, "div", 100);
1225
- i0.ɵɵconditionalCreate(1, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_1_Template, 5, 0, "div", 101);
1226
- i0.ɵɵelementStart(2, "div", 102)(3, "h3", 103);
1213
+ i0.ɵɵconditionalCreate(0, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_0_Template, 9, 2, "div", 101);
1214
+ i0.ɵɵconditionalCreate(1, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_1_Template, 5, 0, "div", 102);
1215
+ i0.ɵɵelementStart(2, "div", 103)(3, "h3", 104);
1227
1216
  i0.ɵɵtext(4, " Field Mappings ");
1228
- i0.ɵɵelementStart(5, "span", 104);
1217
+ i0.ɵɵelementStart(5, "span", 105);
1229
1218
  i0.ɵɵtext(6);
1230
1219
  i0.ɵɵelementEnd()();
1231
- i0.ɵɵelementStart(7, "div", 105)(8, "button", 106);
1220
+ i0.ɵɵelementStart(7, "div", 106)(8, "button", 107);
1232
1221
  i0.ɵɵlistener("click", function MappingWorkspaceComponent_Conditional_6_Conditional_12_Template_button_click_8_listener() { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.RerunAutoMap()); });
1233
1222
  i0.ɵɵelement(9, "i", 36);
1234
1223
  i0.ɵɵtext(10, " Auto-Map ");
1235
1224
  i0.ɵɵelementEnd();
1236
- i0.ɵɵelementStart(11, "button", 89);
1225
+ i0.ɵɵelementStart(11, "button", 90);
1237
1226
  i0.ɵɵlistener("click", function MappingWorkspaceComponent_Conditional_6_Conditional_12_Template_button_click_11_listener() { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.AddFieldMapping()); });
1238
1227
  i0.ɵɵelement(12, "i", 21);
1239
1228
  i0.ɵɵtext(13, " Add Field ");
@@ -1242,19 +1231,19 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_12_Template(rf, ctx
1242
1231
  i0.ɵɵlistener("click", function MappingWorkspaceComponent_Conditional_6_Conditional_12_Template_button_click_14_listener() { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.SaveFieldMappings()); });
1243
1232
  i0.ɵɵconditionalCreate(15, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_15_Template, 2, 0)(16, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_16_Template, 2, 0);
1244
1233
  i0.ɵɵelementEnd()()();
1245
- i0.ɵɵconditionalCreate(17, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_17_Template, 4, 0, "p", 15)(18, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_Template, 3, 0, "div", 107);
1246
- i0.ɵɵelementStart(19, "div", 108)(20, "div", 109)(21, "button", 52);
1234
+ i0.ɵɵconditionalCreate(17, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_17_Template, 4, 0, "p", 15)(18, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_18_Template, 3, 0, "div", 108);
1235
+ i0.ɵɵelementStart(19, "div", 109)(20, "div", 110)(21, "button", 53);
1247
1236
  i0.ɵɵlistener("click", function MappingWorkspaceComponent_Conditional_6_Conditional_12_Template_button_click_21_listener() { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.LoadSourcePreview()); });
1248
- i0.ɵɵelement(22, "i", 110);
1237
+ i0.ɵɵelement(22, "i", 111);
1249
1238
  i0.ɵɵtext(23, " Preview Source ");
1250
1239
  i0.ɵɵelementEnd();
1251
- i0.ɵɵelementStart(24, "button", 52);
1240
+ i0.ɵɵelementStart(24, "button", 53);
1252
1241
  i0.ɵɵlistener("click", function MappingWorkspaceComponent_Conditional_6_Conditional_12_Template_button_click_24_listener() { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.LoadDestPreview()); });
1253
1242
  i0.ɵɵelement(25, "i", 35);
1254
1243
  i0.ɵɵtext(26, " Preview Destination ");
1255
1244
  i0.ɵɵelementEnd()();
1256
- i0.ɵɵconditionalCreate(27, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_27_Template, 10, 1, "div", 111);
1257
- i0.ɵɵconditionalCreate(28, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_28_Template, 10, 1, "div", 111);
1245
+ i0.ɵɵconditionalCreate(27, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_27_Template, 10, 1, "div", 112);
1246
+ i0.ɵɵconditionalCreate(28, MappingWorkspaceComponent_Conditional_6_Conditional_12_Conditional_28_Template, 10, 1, "div", 112);
1258
1247
  i0.ɵɵelementEnd();
1259
1248
  } if (rf & 2) {
1260
1249
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -1264,19 +1253,17 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_12_Template(rf, ctx
1264
1253
  i0.ɵɵadvance(5);
1265
1254
  i0.ɵɵtextInterpolate1("(", ctx_r1.ActiveEditableFields.length, ")");
1266
1255
  i0.ɵɵadvance(2);
1267
- i0.ɵɵproperty("look", "outline")("size", "small")("disabled", ctx_r1.IsLoadingSourceFields);
1268
- i0.ɵɵadvance(3);
1269
- i0.ɵɵproperty("look", "outline")("size", "small");
1270
- i0.ɵɵadvance(3);
1271
- i0.ɵɵproperty("themeColor", "primary")("size", "small")("disabled", !ctx_r1.HasDirtyFields || ctx_r1.IsSavingFields);
1256
+ i0.ɵɵproperty("disabled", ctx_r1.IsLoadingSourceFields);
1257
+ i0.ɵɵadvance(6);
1258
+ i0.ɵɵproperty("disabled", !ctx_r1.HasDirtyFields || ctx_r1.IsSavingFields);
1272
1259
  i0.ɵɵadvance();
1273
1260
  i0.ɵɵconditional(ctx_r1.IsSavingFields ? 15 : 16);
1274
1261
  i0.ɵɵadvance(2);
1275
1262
  i0.ɵɵconditional(ctx_r1.ActiveEditableFields.length === 0 ? 17 : 18);
1276
1263
  i0.ɵɵadvance(4);
1277
- i0.ɵɵproperty("look", "outline")("size", "small")("disabled", ctx_r1.IsLoadingSourcePreview);
1264
+ i0.ɵɵproperty("disabled", ctx_r1.IsLoadingSourcePreview);
1278
1265
  i0.ɵɵadvance(3);
1279
- i0.ɵɵproperty("look", "outline")("size", "small")("disabled", ctx_r1.IsLoadingDestPreview);
1266
+ i0.ɵɵproperty("disabled", ctx_r1.IsLoadingDestPreview);
1280
1267
  i0.ɵɵadvance(3);
1281
1268
  i0.ɵɵconditional(ctx_r1.ShowSourcePreview ? 27 : -1);
1282
1269
  i0.ɵɵadvance();
@@ -1296,25 +1283,25 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_18_Template(rf, ctx
1296
1283
  i0.ɵɵelementEnd();
1297
1284
  } }
1298
1285
  function MappingWorkspaceComponent_Conditional_6_Conditional_19_Conditional_22_For_3_Template(rf, ctx) { if (rf & 1) {
1299
- i0.ɵɵelementStart(0, "div", 201)(1, "div", 202);
1286
+ i0.ɵɵelementStart(0, "div", 203)(1, "div", 204);
1300
1287
  i0.ɵɵtext(2);
1301
1288
  i0.ɵɵelementEnd();
1302
- i0.ɵɵelementStart(3, "div", 203)(4, "div", 204)(5, "span", 205);
1289
+ i0.ɵɵelementStart(3, "div", 205)(4, "div", 206)(5, "span", 207);
1303
1290
  i0.ɵɵtext(6);
1304
1291
  i0.ɵɵelementEnd();
1305
- i0.ɵɵelementStart(7, "span", 206);
1292
+ i0.ɵɵelementStart(7, "span", 208);
1306
1293
  i0.ɵɵtext(8, "Created");
1307
1294
  i0.ɵɵelementEnd()();
1308
- i0.ɵɵelementStart(9, "div", 204)(10, "span", 205);
1295
+ i0.ɵɵelementStart(9, "div", 206)(10, "span", 207);
1309
1296
  i0.ɵɵtext(11);
1310
1297
  i0.ɵɵelementEnd();
1311
- i0.ɵɵelementStart(12, "span", 206);
1298
+ i0.ɵɵelementStart(12, "span", 208);
1312
1299
  i0.ɵɵtext(13, "Updated");
1313
1300
  i0.ɵɵelementEnd()();
1314
- i0.ɵɵelementStart(14, "div", 204)(15, "span", 205);
1301
+ i0.ɵɵelementStart(14, "div", 206)(15, "span", 207);
1315
1302
  i0.ɵɵtext(16);
1316
1303
  i0.ɵɵelementEnd();
1317
- i0.ɵɵelementStart(17, "span", 206);
1304
+ i0.ɵɵelementStart(17, "span", 208);
1318
1305
  i0.ɵɵtext(18, "Errors");
1319
1306
  i0.ɵɵelementEnd()()()();
1320
1307
  } if (rf & 2) {
@@ -1331,36 +1318,36 @@ function MappingWorkspaceComponent_Conditional_6_Conditional_19_Conditional_22_F
1331
1318
  i0.ɵɵtextInterpolate1(" ", detail_r55.RecordsErrored, " ");
1332
1319
  } }
1333
1320
  function MappingWorkspaceComponent_Conditional_6_Conditional_19_Conditional_22_Template(rf, ctx) { if (rf & 1) {
1334
- i0.ɵɵelementStart(0, "h4", 200);
1321
+ i0.ɵɵelementStart(0, "h4", 202);
1335
1322
  i0.ɵɵtext(1, "Per-Entity Stats");
1336
1323
  i0.ɵɵelementEnd();
1337
- i0.ɵɵrepeaterCreate(2, MappingWorkspaceComponent_Conditional_6_Conditional_19_Conditional_22_For_3_Template, 19, 6, "div", 201, _forTrack3);
1324
+ i0.ɵɵrepeaterCreate(2, MappingWorkspaceComponent_Conditional_6_Conditional_19_Conditional_22_For_3_Template, 19, 6, "div", 203, _forTrack3);
1338
1325
  } if (rf & 2) {
1339
1326
  const ctx_r1 = i0.ɵɵnextContext(3);
1340
1327
  i0.ɵɵadvance(2);
1341
1328
  i0.ɵɵrepeater(ctx_r1.RunEntityDetails);
1342
1329
  } }
1343
1330
  function MappingWorkspaceComponent_Conditional_6_Conditional_19_Template(rf, ctx) { if (rf & 1) {
1344
- i0.ɵɵelementStart(0, "div", 196)(1, "div", 197)(2, "span", 198);
1331
+ i0.ɵɵelementStart(0, "div", 198)(1, "div", 199)(2, "span", 200);
1345
1332
  i0.ɵɵtext(3, "Status");
1346
1333
  i0.ɵɵelementEnd();
1347
- i0.ɵɵelementStart(4, "span", 199);
1334
+ i0.ɵɵelementStart(4, "span", 201);
1348
1335
  i0.ɵɵtext(5);
1349
1336
  i0.ɵɵelementEnd()();
1350
- i0.ɵɵelementStart(6, "div", 197)(7, "span", 198);
1337
+ i0.ɵɵelementStart(6, "div", 199)(7, "span", 200);
1351
1338
  i0.ɵɵtext(8, "Started");
1352
1339
  i0.ɵɵelementEnd();
1353
1340
  i0.ɵɵelementStart(9, "span");
1354
1341
  i0.ɵɵtext(10);
1355
1342
  i0.ɵɵelementEnd()();
1356
- i0.ɵɵelementStart(11, "div", 197)(12, "span", 198);
1343
+ i0.ɵɵelementStart(11, "div", 199)(12, "span", 200);
1357
1344
  i0.ɵɵtext(13, "Total Records");
1358
1345
  i0.ɵɵelementEnd();
1359
1346
  i0.ɵɵelementStart(14, "span");
1360
1347
  i0.ɵɵtext(15);
1361
1348
  i0.ɵɵpipe(16, "number");
1362
1349
  i0.ɵɵelementEnd()();
1363
- i0.ɵɵelementStart(17, "div", 197)(18, "span", 198);
1350
+ i0.ɵɵelementStart(17, "div", 199)(18, "span", 200);
1364
1351
  i0.ɵɵtext(19, "Run By");
1365
1352
  i0.ɵɵelementEnd();
1366
1353
  i0.ɵɵelementStart(20, "span");
@@ -1387,14 +1374,14 @@ function MappingWorkspaceComponent_Conditional_6_Template(rf, ctx) { if (rf & 1)
1387
1374
  i0.ɵɵelementStart(0, "div", 4)(1, "div", 5)(2, "div", 6)(3, "label", 7);
1388
1375
  i0.ɵɵtext(4, "Integration");
1389
1376
  i0.ɵɵelementEnd();
1390
- i0.ɵɵelementStart(5, "kendo-dropdownlist", 8);
1391
- i0.ɵɵtwoWayListener("ngModelChange", function MappingWorkspaceComponent_Conditional_6_Template_kendo_dropdownlist_ngModelChange_5_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.SelectedIntegrationID, $event) || (ctx_r1.SelectedIntegrationID = $event); return i0.ɵɵresetView($event); });
1392
- i0.ɵɵlistener("valueChange", function MappingWorkspaceComponent_Conditional_6_Template_kendo_dropdownlist_valueChange_5_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnIntegrationChange($event)); });
1377
+ i0.ɵɵelementStart(5, "mj-dropdown", 8);
1378
+ i0.ɵɵtwoWayListener("ngModelChange", function MappingWorkspaceComponent_Conditional_6_Template_mj_dropdown_ngModelChange_5_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.SelectedIntegrationID, $event) || (ctx_r1.SelectedIntegrationID = $event); return i0.ɵɵresetView($event); });
1379
+ i0.ɵɵlistener("ValueChange", function MappingWorkspaceComponent_Conditional_6_Template_mj_dropdown_ValueChange_5_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnIntegrationChange($event)); });
1393
1380
  i0.ɵɵelementEnd()();
1394
- i0.ɵɵconditionalCreate(6, MappingWorkspaceComponent_Conditional_6_Conditional_6_Template, 1, 0, "mj-loading", 9)(7, MappingWorkspaceComponent_Conditional_6_Conditional_7_Template, 12, 5);
1381
+ i0.ɵɵconditionalCreate(6, MappingWorkspaceComponent_Conditional_6_Conditional_6_Template, 1, 0, "mj-loading", 9)(7, MappingWorkspaceComponent_Conditional_6_Conditional_7_Template, 12, 3);
1395
1382
  i0.ɵɵelementEnd();
1396
1383
  i0.ɵɵelementStart(8, "div", 10);
1397
- i0.ɵɵconditionalCreate(9, MappingWorkspaceComponent_Conditional_6_Conditional_9_Template, 4, 0, "div", 11)(10, MappingWorkspaceComponent_Conditional_6_Conditional_10_Template, 37, 9, "div", 12)(11, MappingWorkspaceComponent_Conditional_6_Conditional_11_Template, 1, 0, "mj-loading", 13)(12, MappingWorkspaceComponent_Conditional_6_Conditional_12_Template, 29, 21);
1384
+ i0.ɵɵconditionalCreate(9, MappingWorkspaceComponent_Conditional_6_Conditional_9_Template, 4, 0, "div", 11)(10, MappingWorkspaceComponent_Conditional_6_Conditional_10_Template, 37, 9, "div", 12)(11, MappingWorkspaceComponent_Conditional_6_Conditional_11_Template, 1, 0, "mj-loading", 13)(12, MappingWorkspaceComponent_Conditional_6_Conditional_12_Template, 29, 11);
1398
1385
  i0.ɵɵelementEnd();
1399
1386
  i0.ɵɵelementStart(13, "div", 14)(14, "h4", 7);
1400
1387
  i0.ɵɵtext(15, "Last Run Details");
@@ -1404,9 +1391,9 @@ function MappingWorkspaceComponent_Conditional_6_Template(rf, ctx) { if (rf & 1)
1404
1391
  } if (rf & 2) {
1405
1392
  const ctx_r1 = i0.ɵɵnextContext();
1406
1393
  i0.ɵɵadvance(5);
1407
- i0.ɵɵproperty("data", ctx_r1.Integrations)("textField", "Name")("valueField", "ID")("valuePrimitive", true);
1394
+ i0.ɵɵproperty("Data", ctx_r1.Integrations)("ValuePrimitive", true);
1408
1395
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.SelectedIntegrationID);
1409
- i0.ɵɵproperty("defaultItem", i0.ɵɵpureFunction0(9, _c0));
1396
+ i0.ɵɵproperty("DefaultItem", i0.ɵɵpureFunction0(7, _c0));
1410
1397
  i0.ɵɵadvance();
1411
1398
  i0.ɵɵconditional(ctx_r1.IsLoadingEntityMaps ? 6 : ctx_r1.SelectedIntegrationID ? 7 : -1);
1412
1399
  i0.ɵɵadvance(3);
@@ -1482,6 +1469,7 @@ let MappingWorkspaceComponent = class MappingWorkspaceComponent extends BaseReso
1482
1469
  pendingCounter = 0;
1483
1470
  async ngOnInit() {
1484
1471
  await this.LoadIntegrations();
1472
+ this.NotifyLoadComplete();
1485
1473
  }
1486
1474
  // =====================================================================
1487
1475
  // Computed Properties
@@ -2346,17 +2334,17 @@ let MappingWorkspaceComponent = class MappingWorkspaceComponent extends BaseReso
2346
2334
  return 'fa-solid fa-diagram-project';
2347
2335
  }
2348
2336
  static ɵfac = /*@__PURE__*/ (() => { let ɵMappingWorkspaceComponent_BaseFactory; return function MappingWorkspaceComponent_Factory(__ngFactoryType__) { return (ɵMappingWorkspaceComponent_BaseFactory || (ɵMappingWorkspaceComponent_BaseFactory = i0.ɵɵgetInheritedFactory(MappingWorkspaceComponent)))(__ngFactoryType__ || MappingWorkspaceComponent); }; })();
2349
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MappingWorkspaceComponent, selectors: [["app-mapping-workspace"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 7, vars: 1, consts: [[1, "mapping-workspace"], [1, "workspace-header"], [1, "fa-solid", "fa-diagram-project"], ["text", "Loading integrations...", "size", "medium"], [1, "workspace-body"], [1, "left-panel"], [1, "integration-selector"], [1, "panel-label"], [3, "ngModelChange", "valueChange", "data", "textField", "valueField", "valuePrimitive", "ngModel", "defaultItem"], ["text", "Loading entity maps...", "size", "small"], [1, "center-panel"], [1, "placeholder-message"], [1, "pending-entity-panel"], ["text", "Loading field maps...", "size", "medium"], [1, "right-panel"], [1, "empty-hint"], ["text", "Loading...", "size", "small"], [1, "entity-map-header"], [1, "panel-label", 2, "margin", "0"], [1, "header-actions"], ["kendoButton", "", "title", "Add entity map", 3, "click", "look", "size"], [1, "fa-solid", "fa-plus"], [1, "add-map-panel"], [1, "search-box"], [1, "entity-map-list"], [1, "add-panel-top"], [1, "fa-solid", "fa-plus-circle"], [1, "add-panel-close", 3, "click"], [1, "fa-solid", "fa-times"], [1, "form-group"], [1, "source-loading"], [1, "discover-error-inline"], [3, "data", "textField", "valueField", "valuePrimitive", "ngModel", "filterable", "defaultItem"], [1, "target-mode-toggle"], [1, "target-mode-btn", 3, "click"], [1, "fa-solid", "fa-database"], [1, "fa-solid", "fa-wand-magic-sparkles"], [1, "new-entity-form"], [3, "ngModelChange", "data", "ngModel"], [1, "add-form-actions"], ["kendoButton", "", 3, "click", "themeColor", "size", "disabled"], ["kendoButton", "", 3, "click", "size"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-triangle-exclamation"], [3, "ngModelChange", "valueChange", "data", "textField", "valueField", "valuePrimitive", "ngModel", "filterable", "defaultItem"], [3, "ngModelChange", "data", "textField", "valueField", "valuePrimitive", "ngModel", "filterable", "defaultItem"], [1, "section-label"], [3, "ngModelChange", "valueChange", "data", "ngModel", "allowCustom", "filterable", "placeholder"], [1, "form-row"], ["kendoTextBox", "", 3, "ngModelChange", "ngModel", "placeholder"], [1, "auto-hint"], [1, "ddl-preview-section"], ["kendoButton", "", 3, "click", "look", "size", "disabled"], [1, "discover-error-inline", 2, "margin-top", "8px"], [1, "ddl-preview-code"], [1, "fa-solid", "fa-check"], ["kendoTextBox", "", "placeholder", "Search entity maps...", 3, "ngModelChange", "ngModel"], ["href", "javascript:void(0)", 2, "color", "var(--mj-brand-primary)", 3, "click"], [1, "entity-map-item", 3, "selected", "pending"], [1, "entity-map-item", 3, "click"], [1, "em-top-row"], [1, "em-name"], [1, "em-arrow"], [1, "fa-solid", "fa-arrow-right"], [1, "em-entity"], [1, "em-bottom-row"], [1, "em-badges"], [1, "badge", "badge-direction"], [1, "badge", "badge-pending"], [1, "em-actions"], ["title", "Delete", 1, "em-delete", 3, "click"], [1, "fa-solid", "fa-trash-can"], [3, "ngModel", "size"], [3, "ngModelChange", "valueChange", "ngModel", "size"], [1, "fa-solid", "fa-hand-pointer"], [1, "pending-icon"], [1, "fa-solid", "fa-clock"], [1, "pending-steps"], [1, "step"], [1, "step-circle", "done"], [1, "step-label"], [1, "step-connector"], [1, "step-circle", 3, "ngClass"], [1, "step-circle", "future"], [1, "ddl-preview-inline"], [1, "pending-fields-section"], [2, "font-size", "14px", "margin-bottom", "8px"], [1, "ddl-code-block"], [1, "ddl-actions"], ["kendoButton", "", 3, "click", "look", "size"], [1, "fa-solid", "fa-copy"], [2, "font-size", "14px", "margin", "16px 0 8px"], [1, "fa-solid", "fa-list"], [2, "color", "var(--mj-text-muted)", "font-weight", "400"], [1, "pending-fields-list"], [1, "pending-field-item"], [1, "pending-field-name"], [1, "pending-field-type"], ["title", "Key field", 1, "fa-solid", "fa-key", "key-icon"], [1, "pending-field-req"], [1, "auto-map-banner"], [1, "validation-banner"], [1, "field-mapping-header"], [1, "panel-title"], [1, "field-count"], [1, "field-mapping-actions"], ["kendoButton", "", "title", "Auto-match source and destination fields by name", 3, "click", "look", "size", "disabled"], [1, "field-map-cards"], [1, "data-preview-section"], [1, "preview-actions"], [1, "fa-solid", "fa-cloud-arrow-down"], [1, "preview-panel"], [1, "banner-text"], [1, "validation-warnings"], [1, "fa-solid", "fa-floppy-disk"], [1, "field-map-card", 3, "validation-error", "has-transform"], [1, "field-map-card"], [1, "fmc-row"], [1, "fmc-source"], ["type", "text", "placeholder", "Source field name", 1, "fmc-input", 3, "ngModel"], [1, "fmc-transform-zone"], [1, "fmc-transform-pill", 3, "title"], ["title", "Click to change transform type", 1, "fmc-transform-pill", "fmc-transform-direct"], [1, "fmc-dest"], [1, "fmc-select", 3, "ngModel"], ["type", "text", "placeholder", "Destination field", 1, "fmc-input", 3, "ngModel"], [1, "fmc-flags"], ["title", "Key field for matching", 1, "fmc-flag"], ["type", "checkbox", 3, "ngModelChange", "ngModel"], [1, "fa-solid", "fa-key"], ["title", "Required field", 1, "fmc-flag"], [1, "fmc-req-star"], ["title", "Remove mapping", 1, "fmc-remove", 3, "click"], [1, "fmc-transform-editor"], ["type", "text", "placeholder", "Source field name", 1, "fmc-input", 3, "ngModelChange", "ngModel"], [1, "fmc-field-name"], [1, "fmc-badges"], [1, "fmc-badge", "badge-type"], ["title", "Primary Key", 1, "fmc-badge", "badge-pk"], ["title", "Required", 1, "fmc-badge", "badge-req"], ["title", "Read-Only", 1, "fmc-badge", "badge-ro"], [1, "fmc-transform-pill", 3, "click", "title"], [1, "fmc-step-count"], ["title", "Click to change transform type", 1, "fmc-transform-pill", "fmc-transform-direct", 3, "click"], [1, "fmc-select", 3, "ngModelChange", "ngModel"], ["value", ""], [3, "value"], ["type", "text", "placeholder", "Destination field", 1, "fmc-input", 3, "ngModelChange", "ngModel"], [1, "fmc-te-header"], [1, "fmc-te-title"], ["title", "Add another step", 1, "fmc-te-add", 3, "click"], [1, "fmc-te-step"], [1, "fmc-te-step-header"], [1, "fmc-te-step-num"], [1, "fmc-te-type-select", 3, "ngModelChange", "ngModel"], ["title", "On error", 1, "fmc-te-error-select", 3, "ngModelChange", "ngModel"], ["value", "Fail"], ["value", "Skip"], ["value", "Null"], ["title", "Remove step", 1, "fmc-te-remove-step", 3, "click"], [1, "fmc-te-config"], [1, "fmc-te-field"], [1, "fmc-te-row"], [1, "fmc-te-field", "fmc-te-sm"], ["type", "text", "placeholder", "Leave empty for no default", 1, "fmc-input", 3, "ngModelChange", "ngModel"], ["type", "text", "placeholder", "e.g. (\\d{3})-(\\d{4})", 1, "fmc-input", "mono", 3, "ngModelChange", "ngModel"], ["type", "text", "placeholder", "e.g. $1$2", 1, "fmc-input", "mono", 3, "ngModelChange", "ngModel"], ["type", "text", "placeholder", "gi", 1, "fmc-input", "mono", 3, "ngModelChange", "ngModel"], ["type", "text", "placeholder", ",", 1, "fmc-input", "mono", 3, "ngModelChange", "ngModel"], ["type", "number", "min", "0", 1, "fmc-input", 3, "ngModelChange", "ngModel"], [1, "fmc-combine-chips"], [1, "fmc-chip", 3, "selected"], ["type", "text", "placeholder", " ", 1, "fmc-input", "mono", 3, "ngModelChange", "ngModel"], [1, "fmc-chip", 3, "click"], [1, "fmc-lookup-table"], [1, "fmc-lookup-row"], [1, "fmc-lookup-add", 3, "click"], ["type", "text", "placeholder", "null", 1, "fmc-input", 3, "ngModelChange", "ngModel"], ["type", "text", "placeholder", "Source value", 1, "fmc-input", 3, "change", "value"], [1, "fa-solid", "fa-arrow-right", "fmc-lookup-arrow"], ["type", "text", "placeholder", "Mapped value", 1, "fmc-input", 3, "change", "value"], [1, "fmc-lookup-del", 3, "click"], ["value", "date"], ["value", "number"], ["value", "string"], ["type", "text", "placeholder", "ISO or decimal places", 1, "fmc-input", "mono", 3, "ngModelChange", "ngModel"], ["value", "boolean"], ["type", "number", "min", "1", 1, "fmc-input", 3, "ngModelChange", "ngModel"], [1, "fmc-te-hint"], ["placeholder", "value.toUpperCase()", "rows", "2", 1, "fmc-input", "mono", "fmc-textarea", 3, "ngModelChange", "ngModel"], [1, "preview-panel-header"], [1, "fa-solid", "fa-cloud"], ["text", "Loading source data...", "size", "small"], [1, "preview-table-wrapper"], [1, "preview-table"], ["text", "Loading destination data...", "size", "small"], [1, "run-summary-card"], [1, "run-summary-row"], [1, "label"], [1, "run-status"], [1, "panel-label", 2, "margin-top", "16px"], [1, "entity-stat-card"], [1, "entity-stat-name"], [1, "entity-stat-grid"], [1, "mini-stat"], [1, "mini-val"], [1, "mini-label"]], template: function MappingWorkspaceComponent_Template(rf, ctx) { if (rf & 1) {
2337
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MappingWorkspaceComponent, selectors: [["app-mapping-workspace"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 7, vars: 1, consts: [[1, "mapping-workspace"], [1, "workspace-header"], [1, "fa-solid", "fa-diagram-project"], ["text", "Loading integrations...", "size", "medium"], [1, "workspace-body"], [1, "left-panel"], [1, "integration-selector"], [1, "panel-label"], ["TextField", "Name", "ValueField", "ID", 3, "ngModelChange", "ValueChange", "Data", "ValuePrimitive", "ngModel", "DefaultItem"], ["text", "Loading entity maps...", "size", "small"], [1, "center-panel"], [1, "placeholder-message"], [1, "pending-entity-panel"], ["text", "Loading field maps...", "size", "medium"], [1, "right-panel"], [1, "empty-hint"], ["text", "Loading...", "size", "small"], [1, "entity-map-header"], [1, "panel-label", 2, "margin", "0"], [1, "header-actions"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Add entity map", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "add-map-panel"], [1, "search-box"], [1, "entity-map-list"], [1, "add-panel-top"], [1, "fa-solid", "fa-plus-circle"], [1, "add-panel-close", 3, "click"], [1, "fa-solid", "fa-times"], [1, "form-group"], [1, "source-loading"], [1, "discover-error-inline"], ["TextField", "Label", "ValueField", "Name", 3, "Data", "ValuePrimitive", "ngModel", "Filterable", "DefaultItem"], [1, "target-mode-toggle"], [1, "target-mode-btn", 3, "click"], [1, "fa-solid", "fa-database"], [1, "fa-solid", "fa-wand-magic-sparkles"], [1, "new-entity-form"], [3, "ngModelChange", "Data", "ngModel"], [1, "add-form-actions"], ["mjButton", "", "variant", "primary", "size", "sm", 3, "click", "disabled"], ["mjButton", "", "size", "sm", 3, "click"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-triangle-exclamation"], ["TextField", "Label", "ValueField", "Name", 3, "ngModelChange", "ValueChange", "Data", "ValuePrimitive", "ngModel", "Filterable", "DefaultItem"], ["TextField", "Name", "ValueField", "ID", 3, "Data", "ValuePrimitive", "ngModel", "Filterable", "DefaultItem"], ["TextField", "Name", "ValueField", "ID", 3, "ngModelChange", "Data", "ValuePrimitive", "ngModel", "Filterable", "DefaultItem"], [1, "section-label"], ["Placeholder", "Select or type schema...", 3, "ngModelChange", "ValueChange", "Data", "ngModel", "AllowCustom", "Filterable"], [1, "form-row"], [1, "mj-input", 3, "ngModelChange", "ngModel", "placeholder"], [1, "auto-hint"], [1, "ddl-preview-section"], ["mjButton", "", "variant", "outline", "size", "sm", 3, "click", "disabled"], [1, "discover-error-inline", 2, "margin-top", "8px"], [1, "ddl-preview-code"], [1, "fa-solid", "fa-check"], ["placeholder", "Search entity maps...", 1, "mj-input", 3, "ngModelChange", "ngModel"], ["href", "javascript:void(0)", 2, "color", "var(--mj-brand-primary)", 3, "click"], [1, "entity-map-item", 3, "selected", "pending"], [1, "entity-map-item", 3, "click"], [1, "em-top-row"], [1, "em-name"], [1, "em-arrow"], [1, "fa-solid", "fa-arrow-right"], [1, "em-entity"], [1, "em-bottom-row"], [1, "em-badges"], [1, "badge", "badge-direction"], [1, "badge", "badge-pending"], [1, "em-actions"], ["title", "Delete", 1, "em-delete", 3, "click"], [1, "fa-solid", "fa-trash-can"], [3, "ngModel"], [3, "ngModelChange", "ngModel"], [1, "fa-solid", "fa-hand-pointer"], [1, "pending-icon"], [1, "fa-solid", "fa-clock"], [1, "pending-steps"], [1, "step"], [1, "step-circle", "done"], [1, "step-label"], [1, "step-connector"], [1, "step-circle", 3, "ngClass"], [1, "step-circle", "future"], [1, "ddl-preview-inline"], [1, "pending-fields-section"], [2, "font-size", "14px", "margin-bottom", "8px"], [1, "ddl-code-block"], [1, "ddl-actions"], ["mjButton", "", "variant", "outline", "size", "sm", 3, "click"], [1, "fa-solid", "fa-copy"], [2, "font-size", "14px", "margin", "16px 0 8px"], [1, "fa-solid", "fa-list"], [2, "color", "var(--mj-text-muted)", "font-weight", "400"], [1, "pending-fields-list"], [1, "pending-field-item"], [1, "pending-field-name"], [1, "pending-field-type"], ["title", "Key field", 1, "fa-solid", "fa-key", "key-icon"], [1, "pending-field-req"], [1, "auto-map-banner"], [1, "validation-banner"], [1, "field-mapping-header"], [1, "panel-title"], [1, "field-count"], [1, "field-mapping-actions"], ["mjButton", "", "variant", "outline", "size", "sm", "title", "Auto-match source and destination fields by name", 3, "click", "disabled"], [1, "field-map-cards"], [1, "data-preview-section"], [1, "preview-actions"], [1, "fa-solid", "fa-cloud-arrow-down"], [1, "preview-panel"], [1, "banner-text"], ["mjButton", "", "variant", "flat", "size", "sm", 3, "click"], [1, "validation-warnings"], [1, "fa-solid", "fa-floppy-disk"], [1, "field-map-card", 3, "validation-error", "has-transform"], [1, "field-map-card"], [1, "fmc-row"], [1, "fmc-source"], ["type", "text", "placeholder", "Source field name", 1, "fmc-input", 3, "ngModel"], [1, "fmc-transform-zone"], [1, "fmc-transform-pill", 3, "title"], ["title", "Click to change transform type", 1, "fmc-transform-pill", "fmc-transform-direct"], [1, "fmc-dest"], [1, "fmc-select", 3, "ngModel"], ["type", "text", "placeholder", "Destination field", 1, "fmc-input", 3, "ngModel"], [1, "fmc-flags"], ["title", "Key field for matching", 1, "fmc-flag"], ["type", "checkbox", 3, "ngModelChange", "ngModel"], [1, "fa-solid", "fa-key"], ["title", "Required field", 1, "fmc-flag"], [1, "fmc-req-star"], ["title", "Remove mapping", 1, "fmc-remove", 3, "click"], [1, "fmc-transform-editor"], ["type", "text", "placeholder", "Source field name", 1, "fmc-input", 3, "ngModelChange", "ngModel"], [1, "fmc-field-name"], [1, "fmc-badges"], [1, "fmc-badge", "badge-type"], ["title", "Primary Key", 1, "fmc-badge", "badge-pk"], ["title", "Required", 1, "fmc-badge", "badge-req"], ["title", "Read-Only", 1, "fmc-badge", "badge-ro"], [1, "fmc-transform-pill", 3, "click", "title"], [1, "fmc-step-count"], ["title", "Click to change transform type", 1, "fmc-transform-pill", "fmc-transform-direct", 3, "click"], [1, "fmc-select", 3, "ngModelChange", "ngModel"], ["value", ""], [3, "value"], ["type", "text", "placeholder", "Destination field", 1, "fmc-input", 3, "ngModelChange", "ngModel"], [1, "fmc-te-header"], [1, "fmc-te-title"], ["title", "Add another step", 1, "fmc-te-add", 3, "click"], [1, "fmc-te-step"], [1, "fmc-te-step-header"], [1, "fmc-te-step-num"], [1, "fmc-te-type-select", 3, "ngModelChange", "ngModel"], ["title", "On error", 1, "fmc-te-error-select", 3, "ngModelChange", "ngModel"], ["value", "Fail"], ["value", "Skip"], ["value", "Null"], ["title", "Remove step", 1, "fmc-te-remove-step", 3, "click"], [1, "fmc-te-config"], [1, "fmc-te-field"], [1, "fmc-te-row"], [1, "fmc-te-field", "fmc-te-sm"], ["type", "text", "placeholder", "Leave empty for no default", 1, "fmc-input", 3, "ngModelChange", "ngModel"], ["type", "text", "placeholder", "e.g. (\\d{3})-(\\d{4})", 1, "fmc-input", "mono", 3, "ngModelChange", "ngModel"], ["type", "text", "placeholder", "e.g. $1$2", 1, "fmc-input", "mono", 3, "ngModelChange", "ngModel"], ["type", "text", "placeholder", "gi", 1, "fmc-input", "mono", 3, "ngModelChange", "ngModel"], ["type", "text", "placeholder", ",", 1, "fmc-input", "mono", 3, "ngModelChange", "ngModel"], ["type", "number", "min", "0", 1, "fmc-input", 3, "ngModelChange", "ngModel"], [1, "fmc-combine-chips"], [1, "fmc-chip", 3, "selected"], ["type", "text", "placeholder", " ", 1, "fmc-input", "mono", 3, "ngModelChange", "ngModel"], [1, "fmc-chip", 3, "click"], [1, "fmc-lookup-table"], [1, "fmc-lookup-row"], [1, "fmc-lookup-add", 3, "click"], ["type", "text", "placeholder", "null", 1, "fmc-input", 3, "ngModelChange", "ngModel"], ["type", "text", "placeholder", "Source value", 1, "fmc-input", 3, "change", "value"], [1, "fa-solid", "fa-arrow-right", "fmc-lookup-arrow"], ["type", "text", "placeholder", "Mapped value", 1, "fmc-input", 3, "change", "value"], [1, "fmc-lookup-del", 3, "click"], ["value", "date"], ["value", "number"], ["value", "string"], ["type", "text", "placeholder", "ISO or decimal places", 1, "fmc-input", "mono", 3, "ngModelChange", "ngModel"], ["value", "boolean"], ["type", "number", "min", "1", 1, "fmc-input", 3, "ngModelChange", "ngModel"], [1, "fmc-te-hint"], ["placeholder", "value.toUpperCase()", "rows", "2", 1, "fmc-input", "mono", "fmc-textarea", 3, "ngModelChange", "ngModel"], [1, "preview-panel-header"], [1, "fa-solid", "fa-cloud"], ["text", "Loading source data...", "size", "small"], [1, "preview-table-wrapper"], [1, "preview-table"], ["text", "Loading destination data...", "size", "small"], [1, "run-summary-card"], [1, "run-summary-row"], [1, "label"], [1, "run-status"], [1, "panel-label", 2, "margin-top", "16px"], [1, "entity-stat-card"], [1, "entity-stat-name"], [1, "entity-stat-grid"], [1, "mini-stat"], [1, "mini-val"], [1, "mini-label"]], template: function MappingWorkspaceComponent_Template(rf, ctx) { if (rf & 1) {
2350
2338
  i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "h2");
2351
2339
  i0.ɵɵelement(3, "i", 2);
2352
2340
  i0.ɵɵtext(4, " Mapping Workspace");
2353
2341
  i0.ɵɵelementEnd()();
2354
- i0.ɵɵconditionalCreate(5, MappingWorkspaceComponent_Conditional_5_Template, 1, 0, "mj-loading", 3)(6, MappingWorkspaceComponent_Conditional_6_Template, 20, 10, "div", 4);
2342
+ i0.ɵɵconditionalCreate(5, MappingWorkspaceComponent_Conditional_5_Template, 1, 0, "mj-loading", 3)(6, MappingWorkspaceComponent_Conditional_6_Template, 20, 8, "div", 4);
2355
2343
  i0.ɵɵelementEnd();
2356
2344
  } if (rf & 2) {
2357
2345
  i0.ɵɵadvance(5);
2358
2346
  i0.ɵɵconditional(ctx.IsLoadingIntegrations ? 5 : 6);
2359
- } }, dependencies: [i1.NgClass, i2.NgSelectOption, i2.ɵNgSelectMultipleOption, i2.DefaultValueAccessor, i2.NumberValueAccessor, i2.CheckboxControlValueAccessor, i2.SelectControlValueAccessor, i2.NgControlStatus, i2.MinValidator, i2.NgModel, i3.ButtonComponent, i4.ComboBoxComponent, i4.DropDownListComponent, i5.TextBoxDirective, i5.SwitchComponent, i6.LoadingComponent, i1.DecimalPipe], styles: [".mapping-workspace[_ngcontent-%COMP%] { padding: 24px; height: 100%; display: flex; flex-direction: column; }\n.workspace-header[_ngcontent-%COMP%] {\n display: flex; align-items: center; justify-content: space-between;\n margin-bottom: 16px;\n}\n.workspace-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n margin: 0; font-size: 20px; font-weight: 600;\n}\n.workspace-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { margin-right: 8px; color: var(--mj-color-indigo-500); }\n\n\n\n.workspace-body[_ngcontent-%COMP%] {\n display: flex; flex: 1; gap: 1px; background: var(--mj-border-default);\n border-radius: 10px; overflow: hidden; min-height: 500px;\n}\n\n.left-panel[_ngcontent-%COMP%] { width: 320px; min-width: 280px; background: var(--mj-bg-surface); padding: 16px; overflow-y: auto; flex-shrink: 0; }\n.center-panel[_ngcontent-%COMP%] { flex: 1; background: var(--mj-bg-surface); padding: 20px; overflow-y: auto; }\n.right-panel[_ngcontent-%COMP%] { width: 280px; min-width: 240px; background: var(--mj-bg-surface); padding: 16px; overflow-y: auto; flex-shrink: 0; }\n\n\n\n.panel-label[_ngcontent-%COMP%] {\n font-size: 11px; font-weight: 700; color: var(--mj-text-disabled);\n text-transform: uppercase; letter-spacing: 0.6px;\n margin: 0 0 6px 0; display: block;\n}\n.panel-title[_ngcontent-%COMP%] { margin: 0 0 12px 0; font-size: 16px; font-weight: 600; }\n.panel-title[_ngcontent-%COMP%] .field-count[_ngcontent-%COMP%] { color: var(--mj-text-disabled); font-weight: 400; font-size: 13px; }\n.empty-hint[_ngcontent-%COMP%] { color: var(--mj-text-disabled); font-size: 13px; font-style: italic; }\n.search-box[_ngcontent-%COMP%] { margin-bottom: 12px; }\n\n\n\n.integration-selector[_ngcontent-%COMP%] { margin-bottom: 20px; padding-bottom: 16px; border-bottom: 1px solid var(--mj-border-subtle); }\n\n\n\n.entity-map-header[_ngcontent-%COMP%] {\n display: flex; align-items: center; justify-content: space-between;\n margin-bottom: 10px;\n}\n.header-actions[_ngcontent-%COMP%] { display: flex; gap: 4px; }\n\n\n\n.add-map-panel[_ngcontent-%COMP%] {\n background: var(--mj-bg-page); border: 1px solid var(--mj-border-default); border-radius: 10px;\n padding: 16px; margin-bottom: 14px;\n}\n.add-panel-top[_ngcontent-%COMP%] {\n display: flex; align-items: center; justify-content: space-between;\n margin-bottom: 14px;\n}\n.add-panel-top[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] { margin: 0; font-size: 14px; font-weight: 600; }\n.add-panel-close[_ngcontent-%COMP%] {\n background: none; border: none; cursor: pointer; color: var(--mj-text-disabled); font-size: 14px;\n}\n.add-panel-close[_ngcontent-%COMP%]:hover { color: var(--mj-text-primary); }\n\n.form-group[_ngcontent-%COMP%] { display: flex; flex-direction: column; gap: 4px; margin-bottom: 12px; }\n.form-group[_ngcontent-%COMP%] label[_ngcontent-%COMP%] { font-size: 12px; font-weight: 600; color: var(--mj-text-muted); }\n.form-row[_ngcontent-%COMP%] { display: flex; gap: 10px; }\n.form-row[_ngcontent-%COMP%] .form-group[_ngcontent-%COMP%] { flex: 1; }\n\n.source-loading[_ngcontent-%COMP%] {\n display: flex; align-items: center; gap: 8px;\n font-size: 12px; color: var(--mj-text-disabled); padding: 6px 0;\n}\n.source-loading[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-color-indigo-500); }\n\n.discover-error-inline[_ngcontent-%COMP%] {\n font-size: 12px; color: var(--mj-color-error-600); padding: 6px 0;\n}\n.discover-error-inline[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { margin-right: 4px; }\n\n\n\n.target-mode-toggle[_ngcontent-%COMP%] {\n display: flex; border: 1px solid var(--mj-border-default); border-radius: 6px;\n overflow: hidden; margin-bottom: 12px;\n}\n.target-mode-btn[_ngcontent-%COMP%] {\n flex: 1; padding: 8px 12px; font-size: 12px; font-weight: 600;\n text-align: center; cursor: pointer; background: var(--mj-bg-surface); border: none;\n color: var(--mj-text-muted); transition: all 0.15s;\n}\n.target-mode-btn[_ngcontent-%COMP%]:first-child { border-right: 1px solid var(--mj-border-default); }\n.target-mode-btn.active[_ngcontent-%COMP%] { background: var(--mj-color-indigo-500); color: var(--mj-bg-surface); }\n.target-mode-btn[_ngcontent-%COMP%]:not(.active):hover { background: var(--mj-status-info-bg); color: var(--mj-color-indigo-500); }\n.target-mode-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { margin-right: 4px; }\n\n\n\n.new-entity-form[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface); border: 1px solid var(--mj-border-default); border-radius: 8px;\n padding: 14px; margin-bottom: 12px;\n}\n.new-entity-form[_ngcontent-%COMP%] .section-label[_ngcontent-%COMP%] {\n font-size: 11px; font-weight: 700; color: var(--mj-color-indigo-500);\n text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 10px;\n}\n.auto-hint[_ngcontent-%COMP%] { font-size: 10px; color: var(--mj-text-disabled); font-style: italic; }\n\n\n\n.ddl-preview-section[_ngcontent-%COMP%] { margin-top: 8px; }\n.ddl-preview-code[_ngcontent-%COMP%] {\n background: var(--mj-text-primary); color: var(--mj-color-neutral-300); padding: 10px;\n border-radius: 4px; font-size: 11px; line-height: 1.5;\n max-height: 200px; overflow: auto; white-space: pre-wrap;\n word-break: break-word; margin-top: 8px;\n}\n\n.add-form-actions[_ngcontent-%COMP%] { display: flex; gap: 6px; padding-top: 4px; }\n\n\n\n.entity-map-list[_ngcontent-%COMP%] { display: flex; flex-direction: column; gap: 4px; }\n.entity-map-item[_ngcontent-%COMP%] {\n padding: 8px 10px; border-radius: 6px;\n cursor: pointer; border: 1px solid var(--mj-border-subtle); transition: all 0.15s;\n}\n.entity-map-item[_ngcontent-%COMP%]:hover { background: var(--mj-bg-page); }\n.entity-map-item.selected[_ngcontent-%COMP%] { background: var(--mj-status-info-bg); border-color: var(--mj-color-indigo-500); }\n.entity-map-item.pending[_ngcontent-%COMP%] { border-left: 3px solid var(--mj-status-warning); }\n\n.em-top-row[_ngcontent-%COMP%] {\n display: flex; align-items: center; gap: 4px;\n font-size: 13px; margin-bottom: 4px;\n}\n.em-name[_ngcontent-%COMP%] { font-weight: 600; }\n.em-arrow[_ngcontent-%COMP%] { color: var(--mj-text-disabled); font-size: 11px; }\n.em-entity[_ngcontent-%COMP%] { color: var(--mj-text-muted); }\n\n.em-bottom-row[_ngcontent-%COMP%] {\n display: flex; align-items: center; justify-content: space-between;\n font-size: 11px; color: var(--mj-text-disabled);\n}\n.em-badges[_ngcontent-%COMP%] { display: flex; gap: 4px; align-items: center; }\n.badge[_ngcontent-%COMP%] {\n font-size: 10px; padding: 1px 6px; border-radius: 4px; font-weight: 600;\n}\n.badge-direction[_ngcontent-%COMP%] { background: var(--mj-bg-surface-hover); color: var(--mj-text-muted); }\n.badge-pending[_ngcontent-%COMP%] { background: var(--mj-color-warning-50); color: var(--mj-color-warning-600); }\n\n.em-actions[_ngcontent-%COMP%] { display: flex; align-items: center; gap: 4px; }\n.em-delete[_ngcontent-%COMP%] {\n opacity: 0; transition: opacity 0.15s;\n cursor: pointer; color: var(--mj-color-error-600); background: none; border: none;\n padding: 2px 4px; font-size: 12px;\n}\n.entity-map-item[_ngcontent-%COMP%]:hover .em-delete[_ngcontent-%COMP%] { opacity: 1; }\n\n\n\n.placeholder-message[_ngcontent-%COMP%] {\n display: flex; flex-direction: column; align-items: center;\n justify-content: center; height: 300px; color: var(--mj-text-disabled);\n}\n.placeholder-message[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 36px; margin-bottom: 12px; }\n.placeholder-message[_ngcontent-%COMP%] p[_ngcontent-%COMP%] { text-align: center; }\n\n\n\n.pending-entity-panel[_ngcontent-%COMP%] {\n background: var(--mj-status-warning-bg); border: 1px solid var(--mj-color-warning-200); border-radius: 10px;\n padding: 24px; text-align: center;\n}\n.pending-icon[_ngcontent-%COMP%] { font-size: 40px; color: var(--mj-status-warning); margin-bottom: 12px; }\n.pending-entity-panel[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] { font-size: 16px; margin-bottom: 8px; }\n.pending-entity-panel[_ngcontent-%COMP%] p[_ngcontent-%COMP%] { font-size: 13px; color: var(--mj-text-disabled); margin-bottom: 16px; line-height: 1.5; }\n\n\n\n.pending-steps[_ngcontent-%COMP%] {\n display: flex; gap: 0; margin: 20px 0; justify-content: center; align-items: center;\n}\n.step[_ngcontent-%COMP%] {\n display: flex; flex-direction: column; align-items: center; gap: 6px;\n padding: 0 16px;\n}\n.step-circle[_ngcontent-%COMP%] {\n width: 36px; height: 36px; border-radius: 50%;\n display: flex; align-items: center; justify-content: center;\n font-size: 14px; font-weight: 700;\n}\n.step-circle.done[_ngcontent-%COMP%] { background: var(--mj-status-success-bg); color: var(--mj-color-success-700); }\n.step-circle.current[_ngcontent-%COMP%] { background: var(--mj-color-indigo-500); color: var(--mj-bg-surface); }\n.step-circle.future[_ngcontent-%COMP%] { background: var(--mj-bg-surface-hover); color: var(--mj-text-disabled); }\n.step-label[_ngcontent-%COMP%] { font-size: 10px; font-weight: 600; color: var(--mj-text-disabled); text-transform: uppercase; white-space: nowrap; }\n.step-connector[_ngcontent-%COMP%] { width: 32px; height: 2px; background: var(--mj-border-default); align-self: center; margin-bottom: 18px; }\n.step-connector.done[_ngcontent-%COMP%] { background: var(--mj-color-success-700); }\n\n\n\n.ddl-preview-inline[_ngcontent-%COMP%] { margin-top: 16px; text-align: left; }\n.ddl-code-block[_ngcontent-%COMP%] {\n background: var(--mj-text-primary); color: var(--mj-color-neutral-300); padding: 12px;\n border-radius: 6px; font-size: 12px; line-height: 1.5;\n max-height: 250px; overflow: auto; white-space: pre-wrap;\n}\n.ddl-actions[_ngcontent-%COMP%] { display: flex; gap: 8px; margin-top: 12px; justify-content: center; }\n\n\n\n.pending-fields-section[_ngcontent-%COMP%] { text-align: left; }\n.pending-fields-list[_ngcontent-%COMP%] {\n display: flex; flex-direction: column; gap: 2px;\n max-height: 200px; overflow-y: auto;\n}\n.pending-field-item[_ngcontent-%COMP%] {\n display: flex; align-items: center; gap: 8px;\n padding: 4px 8px; font-size: 13px; border-radius: 4px;\n}\n.pending-field-item[_ngcontent-%COMP%]:hover { background: var(--mj-status-warning-bg); }\n.pending-field-name[_ngcontent-%COMP%] { font-weight: 600; }\n.pending-field-type[_ngcontent-%COMP%] { font-size: 11px; color: var(--mj-text-disabled); background: var(--mj-bg-surface-hover); padding: 1px 6px; border-radius: 3px; }\n.pending-field-req[_ngcontent-%COMP%] { color: var(--mj-color-error-600); font-weight: 700; }\n\n\n\n.auto-map-banner[_ngcontent-%COMP%] {\n background: var(--mj-status-info-bg); border: 1px solid var(--mj-color-info-100); border-radius: 8px;\n padding: 12px 16px; margin-bottom: 16px;\n display: flex; align-items: center; gap: 12px;\n}\n.auto-map-banner[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] { color: var(--mj-color-indigo-500); font-size: 18px; }\n.auto-map-banner[_ngcontent-%COMP%] .banner-text[_ngcontent-%COMP%] { flex: 1; }\n.auto-map-banner[_ngcontent-%COMP%] .banner-text[_ngcontent-%COMP%] p[_ngcontent-%COMP%] { font-size: 13px; color: var(--mj-text-muted); margin: 0; }\n.auto-map-banner[_ngcontent-%COMP%] .banner-text[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] { color: var(--mj-text-primary); }\n\n\n\n.field-mapping-header[_ngcontent-%COMP%] {\n display: flex; align-items: center; justify-content: space-between;\n margin-bottom: 16px;\n}\n.field-mapping-actions[_ngcontent-%COMP%] { display: flex; gap: 6px; }\n\n\n\n.field-map-cards[_ngcontent-%COMP%] {\n display: flex; flex-direction: column; gap: 6px;\n}\n\n.field-map-card[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n background: var(--mj-bg-surface);\n transition: all 0.2s ease;\n overflow: hidden;\n}\n.field-map-card[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-border-strong);\n box-shadow: 0 2px 8px rgba(74, 108, 247, 0.06);\n}\n.field-map-card.has-transform[_ngcontent-%COMP%] {\n border-left: 3px solid var(--mj-color-indigo-500);\n}\n.field-map-card.validation-error[_ngcontent-%COMP%] {\n border-color: var(--mj-color-warning-200);\n background: var(--mj-status-warning-bg);\n}\n\n\n\n.fmc-row[_ngcontent-%COMP%] {\n display: flex; align-items: center; gap: 10px;\n padding: 10px 14px;\n}\n\n\n\n.fmc-source[_ngcontent-%COMP%] {\n flex: 1; min-width: 0;\n}\n.fmc-field-name[_ngcontent-%COMP%] {\n font-size: 13px; font-weight: 600; color: var(--mj-text-primary);\n white-space: nowrap; overflow: hidden; text-overflow: ellipsis;\n}\n.fmc-badges[_ngcontent-%COMP%] {\n display: flex; gap: 4px; margin-top: 3px; flex-wrap: wrap;\n}\n.fmc-badge[_ngcontent-%COMP%] {\n font-size: 9px; font-weight: 700; padding: 1px 5px;\n border-radius: 3px; text-transform: uppercase; letter-spacing: 0.3px;\n white-space: nowrap; line-height: 1.5;\n}\n.badge-type[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-hover); color: var(--mj-text-muted);\n}\n.badge-pk[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, var(--mj-color-warning-100), var(--mj-color-warning-200));\n color: var(--mj-color-warning-800);\n}\n.badge-pk[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 8px; margin-right: 2px; }\n.badge-req[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, var(--mj-color-error-100), var(--mj-color-error-200));\n color: var(--mj-color-error-800);\n}\n.badge-ro[_ngcontent-%COMP%] {\n background: var(--mj-color-purple-50); color: var(--mj-color-purple-700);\n}\n\n\n\n.fmc-transform-zone[_ngcontent-%COMP%] {\n flex-shrink: 0;\n display: flex; align-items: center; justify-content: center;\n width: 100px;\n}\n.fmc-arrow-btn[_ngcontent-%COMP%] {\n width: 32px; height: 32px;\n border-radius: 50%; border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-page); color: var(--mj-text-disabled);\n cursor: pointer; font-size: 12px;\n display: flex; align-items: center; justify-content: center;\n transition: all 0.2s;\n}\n.fmc-arrow-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-color-indigo-500); color: var(--mj-bg-surface); border-color: var(--mj-color-indigo-500);\n transform: scale(1.1);\n}\n.fmc-transform-pill[_ngcontent-%COMP%] {\n display: flex; align-items: center; gap: 4px;\n padding: 4px 10px; border-radius: 16px;\n background: linear-gradient(135deg, var(--mj-color-indigo-50), var(--mj-color-indigo-100));\n border: 1px solid var(--mj-color-indigo-200); color: var(--mj-color-indigo-700);\n font-size: 11px; font-weight: 600;\n cursor: pointer; transition: all 0.2s;\n white-space: nowrap;\n}\n.fmc-transform-pill[_ngcontent-%COMP%]:hover {\n background: linear-gradient(135deg, var(--mj-color-indigo-100), var(--mj-color-indigo-200));\n transform: scale(1.02);\n}\n.fmc-transform-pill[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 10px; }\n.fmc-transform-direct[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, var(--mj-bg-page), var(--mj-bg-surface-hover));\n border-color: var(--mj-color-neutral-300); color: var(--mj-text-muted);\n}\n.fmc-transform-direct[_ngcontent-%COMP%]:hover {\n background: linear-gradient(135deg, var(--mj-color-indigo-50), var(--mj-color-indigo-100));\n border-color: var(--mj-color-indigo-200); color: var(--mj-color-indigo-700);\n}\n.fmc-step-count[_ngcontent-%COMP%] {\n background: var(--mj-color-indigo-700); color: var(--mj-bg-surface); font-size: 9px;\n padding: 0 4px; border-radius: 8px; font-weight: 700;\n}\n\n\n\n.fmc-dest[_ngcontent-%COMP%] {\n flex: 1; min-width: 0;\n}\n.fmc-select[_ngcontent-%COMP%] {\n width: 100%; padding: 6px 10px; border: 1px solid var(--mj-border-default);\n border-radius: 6px; font-size: 13px; color: var(--mj-text-primary);\n background: var(--mj-bg-page);\n transition: border-color 0.15s;\n}\n.fmc-select[_ngcontent-%COMP%]:focus { border-color: var(--mj-color-indigo-500); outline: none; box-shadow: 0 0 0 2px rgba(74, 108, 247, 0.12); }\n\n\n\n.fmc-input[_ngcontent-%COMP%] {\n width: 100%; padding: 5px 8px; border: 1px solid var(--mj-border-default);\n border-radius: 6px; font-size: 13px; color: var(--mj-text-primary);\n background: var(--mj-bg-page);\n transition: border-color 0.15s;\n}\n.fmc-input[_ngcontent-%COMP%]:focus { border-color: var(--mj-color-indigo-500); outline: none; box-shadow: 0 0 0 2px rgba(74, 108, 247, 0.12); }\n.fmc-input.mono[_ngcontent-%COMP%] { font-family: 'SF Mono', 'Fira Code', 'Consolas', monospace; font-size: 12px; }\n\n\n\n.fmc-flags[_ngcontent-%COMP%] {\n display: flex; gap: 6px; flex-shrink: 0;\n}\n.fmc-flag[_ngcontent-%COMP%] {\n display: flex; align-items: center; gap: 3px;\n font-size: 11px; color: var(--mj-text-disabled); cursor: pointer;\n padding: 2px 4px; border-radius: 4px;\n transition: color 0.15s;\n}\n.fmc-flag[_ngcontent-%COMP%]:hover { color: var(--mj-color-indigo-500); }\n.fmc-flag[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n width: 13px; height: 13px; cursor: pointer;\n accent-color: var(--mj-color-indigo-500);\n}\n.fmc-flag[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 10px; }\n.fmc-req-star[_ngcontent-%COMP%] { font-size: 14px; font-weight: 700; color: inherit; }\n\n\n\n.fmc-remove[_ngcontent-%COMP%] {\n flex-shrink: 0;\n background: none; border: none; cursor: pointer;\n color: var(--mj-color-neutral-300); font-size: 13px; padding: 4px;\n border-radius: 4px; transition: all 0.15s;\n}\n.fmc-remove[_ngcontent-%COMP%]:hover { color: var(--mj-status-error); background: var(--mj-status-error-bg); }\n\n\n\n.fmc-transform-editor[_ngcontent-%COMP%] {\n border-top: 1px solid var(--mj-bg-surface-hover);\n background: linear-gradient(180deg, var(--mj-color-indigo-50) 0%, var(--mj-bg-page) 100%);\n padding: 12px 14px;\n}\n.fmc-te-header[_ngcontent-%COMP%] {\n display: flex; align-items: center; justify-content: space-between;\n margin-bottom: 10px;\n}\n.fmc-te-title[_ngcontent-%COMP%] {\n font-size: 11px; font-weight: 700; color: var(--mj-color-indigo-500);\n text-transform: uppercase; letter-spacing: 0.5px;\n}\n.fmc-te-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { margin-right: 4px; }\n.fmc-te-add[_ngcontent-%COMP%] {\n font-size: 11px; font-weight: 600; color: var(--mj-color-indigo-500);\n background: none; border: 1px solid var(--mj-color-indigo-200);\n border-radius: 6px; padding: 3px 10px;\n cursor: pointer; transition: all 0.15s;\n}\n.fmc-te-add[_ngcontent-%COMP%]:hover { background: var(--mj-color-indigo-50); }\n.fmc-te-add[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { margin-right: 3px; font-size: 10px; }\n\n\n\n.fmc-te-step[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 10px 12px;\n margin-bottom: 8px;\n transition: box-shadow 0.15s;\n}\n.fmc-te-step[_ngcontent-%COMP%]:hover { box-shadow: 0 1px 4px rgba(0,0,0,0.05); }\n.fmc-te-step[_ngcontent-%COMP%]:last-child { margin-bottom: 0; }\n\n.fmc-te-step-header[_ngcontent-%COMP%] {\n display: flex; align-items: center; gap: 8px; margin-bottom: 8px;\n}\n.fmc-te-step-num[_ngcontent-%COMP%] {\n width: 22px; height: 22px; border-radius: 50%;\n background: linear-gradient(135deg, var(--mj-color-indigo-500), var(--mj-color-indigo-500));\n color: var(--mj-bg-surface); font-size: 11px; font-weight: 700;\n display: flex; align-items: center; justify-content: center;\n flex-shrink: 0;\n}\n.fmc-te-type-select[_ngcontent-%COMP%] {\n flex: 1; padding: 4px 8px; border: 1px solid var(--mj-border-default);\n border-radius: 6px; font-size: 12px; font-weight: 600;\n color: var(--mj-text-primary); background: var(--mj-bg-page);\n}\n.fmc-te-type-select[_ngcontent-%COMP%]:focus { border-color: var(--mj-color-indigo-500); outline: none; }\n.fmc-te-error-select[_ngcontent-%COMP%] {\n width: 100px; padding: 4px 6px; border: 1px solid var(--mj-border-default);\n border-radius: 6px; font-size: 11px; color: var(--mj-text-muted);\n background: var(--mj-bg-page);\n}\n.fmc-te-error-select[_ngcontent-%COMP%]:focus { border-color: var(--mj-color-indigo-500); outline: none; }\n.fmc-te-remove-step[_ngcontent-%COMP%] {\n background: none; border: none; cursor: pointer;\n color: var(--mj-color-neutral-300); font-size: 12px; padding: 4px;\n border-radius: 4px; transition: all 0.15s;\n}\n.fmc-te-remove-step[_ngcontent-%COMP%]:hover { color: var(--mj-status-error); background: var(--mj-status-error-bg); }\n\n\n\n.fmc-te-config[_ngcontent-%COMP%] {\n padding-left: 30px;\n}\n.fmc-te-field[_ngcontent-%COMP%] {\n margin-bottom: 8px;\n}\n.fmc-te-field[_ngcontent-%COMP%]:last-child { margin-bottom: 0; }\n.fmc-te-field[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: block; font-size: 11px; font-weight: 600;\n color: var(--mj-text-muted); margin-bottom: 3px;\n}\n.fmc-te-field[_ngcontent-%COMP%] label[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-hover); padding: 0 3px; border-radius: 3px;\n font-size: 10px; color: var(--mj-color-indigo-700);\n}\n.fmc-te-hint[_ngcontent-%COMP%] { font-weight: 400; color: var(--mj-text-disabled); }\n.fmc-te-row[_ngcontent-%COMP%] {\n display: flex; gap: 10px; align-items: flex-end;\n}\n.fmc-te-sm[_ngcontent-%COMP%] { max-width: 140px; }\n.fmc-textarea[_ngcontent-%COMP%] {\n resize: vertical; min-height: 40px;\n}\n\n\n\n.fmc-combine-chips[_ngcontent-%COMP%] {\n display: flex; flex-wrap: wrap; gap: 4px; margin-top: 4px;\n}\n.fmc-chip[_ngcontent-%COMP%] {\n font-size: 11px; padding: 3px 8px; border-radius: 14px;\n border: 1px solid var(--mj-border-default); background: var(--mj-bg-surface);\n color: var(--mj-text-muted); cursor: pointer;\n transition: all 0.15s; font-weight: 500;\n}\n.fmc-chip[_ngcontent-%COMP%]:hover { border-color: var(--mj-color-indigo-300); color: var(--mj-color-indigo-700); }\n.fmc-chip.selected[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, var(--mj-color-indigo-50), var(--mj-color-indigo-100));\n border-color: var(--mj-color-indigo-400); color: var(--mj-color-indigo-700); font-weight: 600;\n}\n\n\n\n.fmc-lookup-table[_ngcontent-%COMP%] {\n display: flex; flex-direction: column; gap: 4px; margin-top: 4px;\n}\n.fmc-lookup-row[_ngcontent-%COMP%] {\n display: flex; align-items: center; gap: 6px;\n}\n.fmc-lookup-row[_ngcontent-%COMP%] .fmc-input[_ngcontent-%COMP%] { flex: 1; }\n.fmc-lookup-arrow[_ngcontent-%COMP%] { color: var(--mj-color-indigo-200); font-size: 10px; flex-shrink: 0; }\n.fmc-lookup-del[_ngcontent-%COMP%] {\n background: none; border: none; cursor: pointer;\n color: var(--mj-color-neutral-300); font-size: 11px; padding: 2px;\n transition: color 0.15s;\n}\n.fmc-lookup-del[_ngcontent-%COMP%]:hover { color: var(--mj-status-error); }\n.fmc-lookup-add[_ngcontent-%COMP%] {\n font-size: 11px; color: var(--mj-color-indigo-500); background: none;\n border: 1px dashed var(--mj-color-indigo-200); border-radius: 6px;\n padding: 4px 10px; cursor: pointer;\n transition: all 0.15s; margin-top: 2px;\n}\n.fmc-lookup-add[_ngcontent-%COMP%]:hover { background: var(--mj-color-indigo-50); }\n.fmc-lookup-add[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { margin-right: 3px; font-size: 10px; }\n\n\n\n.data-preview-section[_ngcontent-%COMP%] { margin-top: 24px; border-top: 1px solid var(--mj-border-subtle); padding-top: 16px; }\n.preview-actions[_ngcontent-%COMP%] { display: flex; gap: 8px; margin-bottom: 12px; }\n\n.preview-panel[_ngcontent-%COMP%] {\n background: var(--mj-bg-page); border: 1px solid var(--mj-border-default); border-radius: 8px;\n padding: 12px; margin-bottom: 12px;\n}\n.preview-panel-header[_ngcontent-%COMP%] {\n display: flex; align-items: center; justify-content: space-between;\n margin-bottom: 8px;\n}\n.preview-panel-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] { font-size: 13px; font-weight: 600; margin: 0; }\n.preview-panel-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { margin-right: 6px; color: var(--mj-color-indigo-500); }\n\n.preview-table-wrapper[_ngcontent-%COMP%] { overflow-x: auto; }\n.preview-table[_ngcontent-%COMP%] {\n width: 100%; border-collapse: collapse; font-size: 12px;\n}\n.preview-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n text-align: left; padding: 5px 8px;\n background: var(--mj-border-default); font-weight: 600; font-size: 10px;\n text-transform: uppercase; color: var(--mj-text-muted);\n border-bottom: 1px solid var(--mj-border-default); white-space: nowrap;\n}\n.preview-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 4px 8px; border-bottom: 1px solid var(--mj-border-subtle);\n white-space: nowrap; max-width: 150px; overflow: hidden; text-overflow: ellipsis;\n}\n.preview-table[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover { background: var(--mj-status-info-bg); }\n\n\n\n.run-summary-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-page); border-radius: 8px; padding: 12px;\n}\n.run-summary-row[_ngcontent-%COMP%] {\n display: flex; justify-content: space-between;\n padding: 4px 0; font-size: 13px;\n}\n.run-summary-row[_ngcontent-%COMP%] .label[_ngcontent-%COMP%] { color: var(--mj-text-muted); font-weight: 500; }\n.run-status[_ngcontent-%COMP%] {\n font-size: 11px; padding: 2px 6px; border-radius: 4px; font-weight: 600;\n}\n.status-green[_ngcontent-%COMP%] { background: var(--mj-status-success-bg); color: var(--mj-color-success-700); }\n.status-amber[_ngcontent-%COMP%] { background: var(--mj-color-warning-50); color: var(--mj-color-warning-600); }\n.status-red[_ngcontent-%COMP%] { background: var(--mj-status-error-bg); color: var(--mj-color-error-600); }\n\n.entity-stat-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-page); border-radius: 6px; padding: 10px;\n margin-bottom: 8px;\n}\n.entity-stat-name[_ngcontent-%COMP%] { font-size: 13px; font-weight: 600; margin-bottom: 6px; }\n.entity-stat-grid[_ngcontent-%COMP%] { display: flex; gap: 12px; }\n.mini-stat[_ngcontent-%COMP%] { text-align: center; }\n.mini-val[_ngcontent-%COMP%] { display: block; font-size: 16px; font-weight: 600; }\n.mini-val.has-errors[_ngcontent-%COMP%] { color: var(--mj-color-error-600); }\n.mini-label[_ngcontent-%COMP%] { font-size: 10px; color: var(--mj-text-disabled); }\n\n\n\n.validation-banner[_ngcontent-%COMP%] {\n background: var(--mj-color-warning-50); border: 1px solid var(--mj-color-warning-200); border-radius: 8px;\n padding: 10px 14px; margin-bottom: 14px;\n display: flex; align-items: flex-start; gap: 10px;\n font-size: 13px; color: var(--mj-color-warning-600);\n}\n.validation-banner[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] { margin-top: 2px; }\n.validation-warnings[_ngcontent-%COMP%] { display: flex; flex-direction: column; gap: 2px; }\n\n.field-map-card.validation-error[_ngcontent-%COMP%] .fmc-source[_ngcontent-%COMP%] {\n border-left: 3px solid var(--mj-color-warning-600);\n padding-left: 8px;\n}\n\n\n\n@media (max-width: 1100px) { .right-panel[_ngcontent-%COMP%] { display: none; } }\n@media (max-width: 800px) { .left-panel[_ngcontent-%COMP%] { width: 260px; } }"] });
2347
+ } }, dependencies: [i1.NgClass, i2.NgSelectOption, i2.ɵNgSelectMultipleOption, i2.DefaultValueAccessor, i2.NumberValueAccessor, i2.CheckboxControlValueAccessor, i2.SelectControlValueAccessor, i2.NgControlStatus, i2.MinValidator, i2.NgModel, i3.MJButtonDirective, i3.MJComboboxComponent, i3.MJDropdownComponent, i3.MJSwitchComponent, i4.LoadingComponent, i1.DecimalPipe], styles: [".mapping-workspace[_ngcontent-%COMP%] { padding: 24px; height: 100%; display: flex; flex-direction: column; }\n.workspace-header[_ngcontent-%COMP%] {\n display: flex; align-items: center; justify-content: space-between;\n margin-bottom: 16px;\n}\n.workspace-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n margin: 0; font-size: 20px; font-weight: 600;\n}\n.workspace-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { margin-right: 8px; color: var(--mj-color-indigo-500); }\n\n\n\n.workspace-body[_ngcontent-%COMP%] {\n display: flex; flex: 1; gap: 1px; background: var(--mj-border-default);\n border-radius: 10px; overflow: hidden; min-height: 500px;\n}\n\n.left-panel[_ngcontent-%COMP%] { width: 320px; min-width: 280px; background: var(--mj-bg-surface); padding: 16px; overflow-y: auto; flex-shrink: 0; }\n.center-panel[_ngcontent-%COMP%] { flex: 1; background: var(--mj-bg-surface); padding: 20px; overflow-y: auto; }\n.right-panel[_ngcontent-%COMP%] { width: 280px; min-width: 240px; background: var(--mj-bg-surface); padding: 16px; overflow-y: auto; flex-shrink: 0; }\n\n\n\n.panel-label[_ngcontent-%COMP%] {\n font-size: 11px; font-weight: 700; color: var(--mj-text-disabled);\n text-transform: uppercase; letter-spacing: 0.6px;\n margin: 0 0 6px 0; display: block;\n}\n.panel-title[_ngcontent-%COMP%] { margin: 0 0 12px 0; font-size: 16px; font-weight: 600; }\n.panel-title[_ngcontent-%COMP%] .field-count[_ngcontent-%COMP%] { color: var(--mj-text-disabled); font-weight: 400; font-size: 13px; }\n.empty-hint[_ngcontent-%COMP%] { color: var(--mj-text-disabled); font-size: 13px; font-style: italic; }\n.search-box[_ngcontent-%COMP%] { margin-bottom: 12px; }\n\n\n\n.integration-selector[_ngcontent-%COMP%] { margin-bottom: 20px; padding-bottom: 16px; border-bottom: 1px solid var(--mj-border-subtle); }\n\n\n\n.entity-map-header[_ngcontent-%COMP%] {\n display: flex; align-items: center; justify-content: space-between;\n margin-bottom: 10px;\n}\n.header-actions[_ngcontent-%COMP%] { display: flex; gap: 4px; }\n\n\n\n.add-map-panel[_ngcontent-%COMP%] {\n background: var(--mj-bg-page); border: 1px solid var(--mj-border-default); border-radius: 10px;\n padding: 16px; margin-bottom: 14px;\n}\n.add-panel-top[_ngcontent-%COMP%] {\n display: flex; align-items: center; justify-content: space-between;\n margin-bottom: 14px;\n}\n.add-panel-top[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] { margin: 0; font-size: 14px; font-weight: 600; }\n.add-panel-close[_ngcontent-%COMP%] {\n background: none; border: none; cursor: pointer; color: var(--mj-text-disabled); font-size: 14px;\n}\n.add-panel-close[_ngcontent-%COMP%]:hover { color: var(--mj-text-primary); }\n\n.form-group[_ngcontent-%COMP%] { display: flex; flex-direction: column; gap: 4px; margin-bottom: 12px; }\n.form-group[_ngcontent-%COMP%] label[_ngcontent-%COMP%] { font-size: 12px; font-weight: 600; color: var(--mj-text-muted); }\n.form-row[_ngcontent-%COMP%] { display: flex; gap: 10px; }\n.form-row[_ngcontent-%COMP%] .form-group[_ngcontent-%COMP%] { flex: 1; }\n\n.source-loading[_ngcontent-%COMP%] {\n display: flex; align-items: center; gap: 8px;\n font-size: 12px; color: var(--mj-text-disabled); padding: 6px 0;\n}\n.source-loading[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-color-indigo-500); }\n\n.discover-error-inline[_ngcontent-%COMP%] {\n font-size: 12px; color: var(--mj-color-error-600); padding: 6px 0;\n}\n.discover-error-inline[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { margin-right: 4px; }\n\n\n\n.target-mode-toggle[_ngcontent-%COMP%] {\n display: flex; border: 1px solid var(--mj-border-default); border-radius: 6px;\n overflow: hidden; margin-bottom: 12px;\n}\n.target-mode-btn[_ngcontent-%COMP%] {\n flex: 1; padding: 8px 12px; font-size: 12px; font-weight: 600;\n text-align: center; cursor: pointer; background: var(--mj-bg-surface); border: none;\n color: var(--mj-text-muted); transition: all 0.15s;\n}\n.target-mode-btn[_ngcontent-%COMP%]:first-child { border-right: 1px solid var(--mj-border-default); }\n.target-mode-btn.active[_ngcontent-%COMP%] { background: var(--mj-color-indigo-500); color: var(--mj-bg-surface); }\n.target-mode-btn[_ngcontent-%COMP%]:not(.active):hover { background: var(--mj-status-info-bg); color: var(--mj-color-indigo-500); }\n.target-mode-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { margin-right: 4px; }\n\n\n\n.new-entity-form[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface); border: 1px solid var(--mj-border-default); border-radius: 8px;\n padding: 14px; margin-bottom: 12px;\n}\n.new-entity-form[_ngcontent-%COMP%] .section-label[_ngcontent-%COMP%] {\n font-size: 11px; font-weight: 700; color: var(--mj-color-indigo-500);\n text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 10px;\n}\n.auto-hint[_ngcontent-%COMP%] { font-size: 10px; color: var(--mj-text-disabled); font-style: italic; }\n\n\n\n.ddl-preview-section[_ngcontent-%COMP%] { margin-top: 8px; }\n.ddl-preview-code[_ngcontent-%COMP%] {\n background: var(--mj-text-primary); color: var(--mj-color-neutral-300); padding: 10px;\n border-radius: 4px; font-size: 11px; line-height: 1.5;\n max-height: 200px; overflow: auto; white-space: pre-wrap;\n word-break: break-word; margin-top: 8px;\n}\n\n.add-form-actions[_ngcontent-%COMP%] { display: flex; gap: 6px; padding-top: 4px; }\n\n\n\n.entity-map-list[_ngcontent-%COMP%] { display: flex; flex-direction: column; gap: 4px; }\n.entity-map-item[_ngcontent-%COMP%] {\n padding: 8px 10px; border-radius: 6px;\n cursor: pointer; border: 1px solid var(--mj-border-subtle); transition: all 0.15s;\n}\n.entity-map-item[_ngcontent-%COMP%]:hover { background: var(--mj-bg-page); }\n.entity-map-item.selected[_ngcontent-%COMP%] { background: var(--mj-status-info-bg); border-color: var(--mj-color-indigo-500); }\n.entity-map-item.pending[_ngcontent-%COMP%] { border-left: 3px solid var(--mj-status-warning); }\n\n.em-top-row[_ngcontent-%COMP%] {\n display: flex; align-items: center; gap: 4px;\n font-size: 13px; margin-bottom: 4px;\n}\n.em-name[_ngcontent-%COMP%] { font-weight: 600; }\n.em-arrow[_ngcontent-%COMP%] { color: var(--mj-text-disabled); font-size: 11px; }\n.em-entity[_ngcontent-%COMP%] { color: var(--mj-text-muted); }\n\n.em-bottom-row[_ngcontent-%COMP%] {\n display: flex; align-items: center; justify-content: space-between;\n font-size: 11px; color: var(--mj-text-disabled);\n}\n.em-badges[_ngcontent-%COMP%] { display: flex; gap: 4px; align-items: center; }\n.badge[_ngcontent-%COMP%] {\n font-size: 10px; padding: 1px 6px; border-radius: 4px; font-weight: 600;\n}\n.badge-direction[_ngcontent-%COMP%] { background: var(--mj-bg-surface-hover); color: var(--mj-text-muted); }\n.badge-pending[_ngcontent-%COMP%] { background: var(--mj-color-warning-50); color: var(--mj-color-warning-600); }\n\n.em-actions[_ngcontent-%COMP%] { display: flex; align-items: center; gap: 4px; }\n.em-delete[_ngcontent-%COMP%] {\n opacity: 0; transition: opacity 0.15s;\n cursor: pointer; color: var(--mj-color-error-600); background: none; border: none;\n padding: 2px 4px; font-size: 12px;\n}\n.entity-map-item[_ngcontent-%COMP%]:hover .em-delete[_ngcontent-%COMP%] { opacity: 1; }\n\n\n\n.placeholder-message[_ngcontent-%COMP%] {\n display: flex; flex-direction: column; align-items: center;\n justify-content: center; height: 300px; color: var(--mj-text-disabled);\n}\n.placeholder-message[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 36px; margin-bottom: 12px; }\n.placeholder-message[_ngcontent-%COMP%] p[_ngcontent-%COMP%] { text-align: center; }\n\n\n\n.pending-entity-panel[_ngcontent-%COMP%] {\n background: var(--mj-status-warning-bg); border: 1px solid var(--mj-color-warning-200); border-radius: 10px;\n padding: 24px; text-align: center;\n}\n.pending-icon[_ngcontent-%COMP%] { font-size: 40px; color: var(--mj-status-warning); margin-bottom: 12px; }\n.pending-entity-panel[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] { font-size: 16px; margin-bottom: 8px; }\n.pending-entity-panel[_ngcontent-%COMP%] p[_ngcontent-%COMP%] { font-size: 13px; color: var(--mj-text-disabled); margin-bottom: 16px; line-height: 1.5; }\n\n\n\n.pending-steps[_ngcontent-%COMP%] {\n display: flex; gap: 0; margin: 20px 0; justify-content: center; align-items: center;\n}\n.step[_ngcontent-%COMP%] {\n display: flex; flex-direction: column; align-items: center; gap: 6px;\n padding: 0 16px;\n}\n.step-circle[_ngcontent-%COMP%] {\n width: 36px; height: 36px; border-radius: 50%;\n display: flex; align-items: center; justify-content: center;\n font-size: 14px; font-weight: 700;\n}\n.step-circle.done[_ngcontent-%COMP%] { background: var(--mj-status-success-bg); color: var(--mj-color-success-700); }\n.step-circle.current[_ngcontent-%COMP%] { background: var(--mj-color-indigo-500); color: var(--mj-bg-surface); }\n.step-circle.future[_ngcontent-%COMP%] { background: var(--mj-bg-surface-hover); color: var(--mj-text-disabled); }\n.step-label[_ngcontent-%COMP%] { font-size: 10px; font-weight: 600; color: var(--mj-text-disabled); text-transform: uppercase; white-space: nowrap; }\n.step-connector[_ngcontent-%COMP%] { width: 32px; height: 2px; background: var(--mj-border-default); align-self: center; margin-bottom: 18px; }\n.step-connector.done[_ngcontent-%COMP%] { background: var(--mj-color-success-700); }\n\n\n\n.ddl-preview-inline[_ngcontent-%COMP%] { margin-top: 16px; text-align: left; }\n.ddl-code-block[_ngcontent-%COMP%] {\n background: var(--mj-text-primary); color: var(--mj-color-neutral-300); padding: 12px;\n border-radius: 6px; font-size: 12px; line-height: 1.5;\n max-height: 250px; overflow: auto; white-space: pre-wrap;\n}\n.ddl-actions[_ngcontent-%COMP%] { display: flex; gap: 8px; margin-top: 12px; justify-content: center; }\n\n\n\n.pending-fields-section[_ngcontent-%COMP%] { text-align: left; }\n.pending-fields-list[_ngcontent-%COMP%] {\n display: flex; flex-direction: column; gap: 2px;\n max-height: 200px; overflow-y: auto;\n}\n.pending-field-item[_ngcontent-%COMP%] {\n display: flex; align-items: center; gap: 8px;\n padding: 4px 8px; font-size: 13px; border-radius: 4px;\n}\n.pending-field-item[_ngcontent-%COMP%]:hover { background: var(--mj-status-warning-bg); }\n.pending-field-name[_ngcontent-%COMP%] { font-weight: 600; }\n.pending-field-type[_ngcontent-%COMP%] { font-size: 11px; color: var(--mj-text-disabled); background: var(--mj-bg-surface-hover); padding: 1px 6px; border-radius: 3px; }\n.pending-field-req[_ngcontent-%COMP%] { color: var(--mj-color-error-600); font-weight: 700; }\n\n\n\n.auto-map-banner[_ngcontent-%COMP%] {\n background: var(--mj-status-info-bg); border: 1px solid var(--mj-color-info-100); border-radius: 8px;\n padding: 12px 16px; margin-bottom: 16px;\n display: flex; align-items: center; gap: 12px;\n}\n.auto-map-banner[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] { color: var(--mj-color-indigo-500); font-size: 18px; }\n.auto-map-banner[_ngcontent-%COMP%] .banner-text[_ngcontent-%COMP%] { flex: 1; }\n.auto-map-banner[_ngcontent-%COMP%] .banner-text[_ngcontent-%COMP%] p[_ngcontent-%COMP%] { font-size: 13px; color: var(--mj-text-muted); margin: 0; }\n.auto-map-banner[_ngcontent-%COMP%] .banner-text[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] { color: var(--mj-text-primary); }\n\n\n\n.field-mapping-header[_ngcontent-%COMP%] {\n display: flex; align-items: center; justify-content: space-between;\n margin-bottom: 16px;\n}\n.field-mapping-actions[_ngcontent-%COMP%] { display: flex; gap: 6px; }\n\n\n\n.field-map-cards[_ngcontent-%COMP%] {\n display: flex; flex-direction: column; gap: 6px;\n}\n\n.field-map-card[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n background: var(--mj-bg-surface);\n transition: all 0.2s ease;\n overflow: hidden;\n}\n.field-map-card[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-border-strong);\n box-shadow: 0 2px 8px rgba(74, 108, 247, 0.06);\n}\n.field-map-card.has-transform[_ngcontent-%COMP%] {\n border-left: 3px solid var(--mj-color-indigo-500);\n}\n.field-map-card.validation-error[_ngcontent-%COMP%] {\n border-color: var(--mj-color-warning-200);\n background: var(--mj-status-warning-bg);\n}\n\n\n\n.fmc-row[_ngcontent-%COMP%] {\n display: flex; align-items: center; gap: 10px;\n padding: 10px 14px;\n}\n\n\n\n.fmc-source[_ngcontent-%COMP%] {\n flex: 1; min-width: 0;\n}\n.fmc-field-name[_ngcontent-%COMP%] {\n font-size: 13px; font-weight: 600; color: var(--mj-text-primary);\n white-space: nowrap; overflow: hidden; text-overflow: ellipsis;\n}\n.fmc-badges[_ngcontent-%COMP%] {\n display: flex; gap: 4px; margin-top: 3px; flex-wrap: wrap;\n}\n.fmc-badge[_ngcontent-%COMP%] {\n font-size: 9px; font-weight: 700; padding: 1px 5px;\n border-radius: 3px; text-transform: uppercase; letter-spacing: 0.3px;\n white-space: nowrap; line-height: 1.5;\n}\n.badge-type[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-hover); color: var(--mj-text-muted);\n}\n.badge-pk[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, var(--mj-color-warning-100), var(--mj-color-warning-200));\n color: var(--mj-color-warning-800);\n}\n.badge-pk[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 8px; margin-right: 2px; }\n.badge-req[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, var(--mj-color-error-100), var(--mj-color-error-200));\n color: var(--mj-color-error-800);\n}\n.badge-ro[_ngcontent-%COMP%] {\n background: var(--mj-color-purple-50); color: var(--mj-color-purple-700);\n}\n\n\n\n.fmc-transform-zone[_ngcontent-%COMP%] {\n flex-shrink: 0;\n display: flex; align-items: center; justify-content: center;\n width: 100px;\n}\n.fmc-arrow-btn[_ngcontent-%COMP%] {\n width: 32px; height: 32px;\n border-radius: 50%; border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-page); color: var(--mj-text-disabled);\n cursor: pointer; font-size: 12px;\n display: flex; align-items: center; justify-content: center;\n transition: all 0.2s;\n}\n.fmc-arrow-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-color-indigo-500); color: var(--mj-bg-surface); border-color: var(--mj-color-indigo-500);\n transform: scale(1.1);\n}\n.fmc-transform-pill[_ngcontent-%COMP%] {\n display: flex; align-items: center; gap: 4px;\n padding: 4px 10px; border-radius: 16px;\n background: linear-gradient(135deg, var(--mj-color-indigo-50), var(--mj-color-indigo-100));\n border: 1px solid var(--mj-color-indigo-200); color: var(--mj-color-indigo-700);\n font-size: 11px; font-weight: 600;\n cursor: pointer; transition: all 0.2s;\n white-space: nowrap;\n}\n.fmc-transform-pill[_ngcontent-%COMP%]:hover {\n background: linear-gradient(135deg, var(--mj-color-indigo-100), var(--mj-color-indigo-200));\n transform: scale(1.02);\n}\n.fmc-transform-pill[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 10px; }\n.fmc-transform-direct[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, var(--mj-bg-page), var(--mj-bg-surface-hover));\n border-color: var(--mj-color-neutral-300); color: var(--mj-text-muted);\n}\n.fmc-transform-direct[_ngcontent-%COMP%]:hover {\n background: linear-gradient(135deg, var(--mj-color-indigo-50), var(--mj-color-indigo-100));\n border-color: var(--mj-color-indigo-200); color: var(--mj-color-indigo-700);\n}\n.fmc-step-count[_ngcontent-%COMP%] {\n background: var(--mj-color-indigo-700); color: var(--mj-bg-surface); font-size: 9px;\n padding: 0 4px; border-radius: 8px; font-weight: 700;\n}\n\n\n\n.fmc-dest[_ngcontent-%COMP%] {\n flex: 1; min-width: 0;\n}\n.fmc-select[_ngcontent-%COMP%] {\n width: 100%; padding: 6px 10px; border: 1px solid var(--mj-border-default);\n border-radius: 6px; font-size: 13px; color: var(--mj-text-primary);\n background: var(--mj-bg-page);\n transition: border-color 0.15s;\n}\n.fmc-select[_ngcontent-%COMP%]:focus { border-color: var(--mj-color-indigo-500); outline: none; box-shadow: 0 0 0 2px rgba(74, 108, 247, 0.12); }\n\n\n\n.fmc-input[_ngcontent-%COMP%] {\n width: 100%; padding: 5px 8px; border: 1px solid var(--mj-border-default);\n border-radius: 6px; font-size: 13px; color: var(--mj-text-primary);\n background: var(--mj-bg-page);\n transition: border-color 0.15s;\n}\n.fmc-input[_ngcontent-%COMP%]:focus { border-color: var(--mj-color-indigo-500); outline: none; box-shadow: 0 0 0 2px rgba(74, 108, 247, 0.12); }\n.fmc-input.mono[_ngcontent-%COMP%] { font-family: 'SF Mono', 'Fira Code', 'Consolas', monospace; font-size: 12px; }\n\n\n\n.fmc-flags[_ngcontent-%COMP%] {\n display: flex; gap: 6px; flex-shrink: 0;\n}\n.fmc-flag[_ngcontent-%COMP%] {\n display: flex; align-items: center; gap: 3px;\n font-size: 11px; color: var(--mj-text-disabled); cursor: pointer;\n padding: 2px 4px; border-radius: 4px;\n transition: color 0.15s;\n}\n.fmc-flag[_ngcontent-%COMP%]:hover { color: var(--mj-color-indigo-500); }\n.fmc-flag[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n width: 13px; height: 13px; cursor: pointer;\n accent-color: var(--mj-color-indigo-500);\n}\n.fmc-flag[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 10px; }\n.fmc-req-star[_ngcontent-%COMP%] { font-size: 14px; font-weight: 700; color: inherit; }\n\n\n\n.fmc-remove[_ngcontent-%COMP%] {\n flex-shrink: 0;\n background: none; border: none; cursor: pointer;\n color: var(--mj-color-neutral-300); font-size: 13px; padding: 4px;\n border-radius: 4px; transition: all 0.15s;\n}\n.fmc-remove[_ngcontent-%COMP%]:hover { color: var(--mj-status-error); background: var(--mj-status-error-bg); }\n\n\n\n.fmc-transform-editor[_ngcontent-%COMP%] {\n border-top: 1px solid var(--mj-bg-surface-hover);\n background: linear-gradient(180deg, var(--mj-color-indigo-50) 0%, var(--mj-bg-page) 100%);\n padding: 12px 14px;\n}\n.fmc-te-header[_ngcontent-%COMP%] {\n display: flex; align-items: center; justify-content: space-between;\n margin-bottom: 10px;\n}\n.fmc-te-title[_ngcontent-%COMP%] {\n font-size: 11px; font-weight: 700; color: var(--mj-color-indigo-500);\n text-transform: uppercase; letter-spacing: 0.5px;\n}\n.fmc-te-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { margin-right: 4px; }\n.fmc-te-add[_ngcontent-%COMP%] {\n font-size: 11px; font-weight: 600; color: var(--mj-color-indigo-500);\n background: none; border: 1px solid var(--mj-color-indigo-200);\n border-radius: 6px; padding: 3px 10px;\n cursor: pointer; transition: all 0.15s;\n}\n.fmc-te-add[_ngcontent-%COMP%]:hover { background: var(--mj-color-indigo-50); }\n.fmc-te-add[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { margin-right: 3px; font-size: 10px; }\n\n\n\n.fmc-te-step[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 10px 12px;\n margin-bottom: 8px;\n transition: box-shadow 0.15s;\n}\n.fmc-te-step[_ngcontent-%COMP%]:hover { box-shadow: 0 1px 4px rgba(0,0,0,0.05); }\n.fmc-te-step[_ngcontent-%COMP%]:last-child { margin-bottom: 0; }\n\n.fmc-te-step-header[_ngcontent-%COMP%] {\n display: flex; align-items: center; gap: 8px; margin-bottom: 8px;\n}\n.fmc-te-step-num[_ngcontent-%COMP%] {\n width: 22px; height: 22px; border-radius: 50%;\n background: linear-gradient(135deg, var(--mj-color-indigo-500), var(--mj-color-indigo-500));\n color: var(--mj-bg-surface); font-size: 11px; font-weight: 700;\n display: flex; align-items: center; justify-content: center;\n flex-shrink: 0;\n}\n.fmc-te-type-select[_ngcontent-%COMP%] {\n flex: 1; padding: 4px 8px; border: 1px solid var(--mj-border-default);\n border-radius: 6px; font-size: 12px; font-weight: 600;\n color: var(--mj-text-primary); background: var(--mj-bg-page);\n}\n.fmc-te-type-select[_ngcontent-%COMP%]:focus { border-color: var(--mj-color-indigo-500); outline: none; }\n.fmc-te-error-select[_ngcontent-%COMP%] {\n width: 100px; padding: 4px 6px; border: 1px solid var(--mj-border-default);\n border-radius: 6px; font-size: 11px; color: var(--mj-text-muted);\n background: var(--mj-bg-page);\n}\n.fmc-te-error-select[_ngcontent-%COMP%]:focus { border-color: var(--mj-color-indigo-500); outline: none; }\n.fmc-te-remove-step[_ngcontent-%COMP%] {\n background: none; border: none; cursor: pointer;\n color: var(--mj-color-neutral-300); font-size: 12px; padding: 4px;\n border-radius: 4px; transition: all 0.15s;\n}\n.fmc-te-remove-step[_ngcontent-%COMP%]:hover { color: var(--mj-status-error); background: var(--mj-status-error-bg); }\n\n\n\n.fmc-te-config[_ngcontent-%COMP%] {\n padding-left: 30px;\n}\n.fmc-te-field[_ngcontent-%COMP%] {\n margin-bottom: 8px;\n}\n.fmc-te-field[_ngcontent-%COMP%]:last-child { margin-bottom: 0; }\n.fmc-te-field[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: block; font-size: 11px; font-weight: 600;\n color: var(--mj-text-muted); margin-bottom: 3px;\n}\n.fmc-te-field[_ngcontent-%COMP%] label[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-hover); padding: 0 3px; border-radius: 3px;\n font-size: 10px; color: var(--mj-color-indigo-700);\n}\n.fmc-te-hint[_ngcontent-%COMP%] { font-weight: 400; color: var(--mj-text-disabled); }\n.fmc-te-row[_ngcontent-%COMP%] {\n display: flex; gap: 10px; align-items: flex-end;\n}\n.fmc-te-sm[_ngcontent-%COMP%] { max-width: 140px; }\n.fmc-textarea[_ngcontent-%COMP%] {\n resize: vertical; min-height: 40px;\n}\n\n\n\n.fmc-combine-chips[_ngcontent-%COMP%] {\n display: flex; flex-wrap: wrap; gap: 4px; margin-top: 4px;\n}\n.fmc-chip[_ngcontent-%COMP%] {\n font-size: 11px; padding: 3px 8px; border-radius: 14px;\n border: 1px solid var(--mj-border-default); background: var(--mj-bg-surface);\n color: var(--mj-text-muted); cursor: pointer;\n transition: all 0.15s; font-weight: 500;\n}\n.fmc-chip[_ngcontent-%COMP%]:hover { border-color: var(--mj-color-indigo-300); color: var(--mj-color-indigo-700); }\n.fmc-chip.selected[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, var(--mj-color-indigo-50), var(--mj-color-indigo-100));\n border-color: var(--mj-color-indigo-400); color: var(--mj-color-indigo-700); font-weight: 600;\n}\n\n\n\n.fmc-lookup-table[_ngcontent-%COMP%] {\n display: flex; flex-direction: column; gap: 4px; margin-top: 4px;\n}\n.fmc-lookup-row[_ngcontent-%COMP%] {\n display: flex; align-items: center; gap: 6px;\n}\n.fmc-lookup-row[_ngcontent-%COMP%] .fmc-input[_ngcontent-%COMP%] { flex: 1; }\n.fmc-lookup-arrow[_ngcontent-%COMP%] { color: var(--mj-color-indigo-200); font-size: 10px; flex-shrink: 0; }\n.fmc-lookup-del[_ngcontent-%COMP%] {\n background: none; border: none; cursor: pointer;\n color: var(--mj-color-neutral-300); font-size: 11px; padding: 2px;\n transition: color 0.15s;\n}\n.fmc-lookup-del[_ngcontent-%COMP%]:hover { color: var(--mj-status-error); }\n.fmc-lookup-add[_ngcontent-%COMP%] {\n font-size: 11px; color: var(--mj-color-indigo-500); background: none;\n border: 1px dashed var(--mj-color-indigo-200); border-radius: 6px;\n padding: 4px 10px; cursor: pointer;\n transition: all 0.15s; margin-top: 2px;\n}\n.fmc-lookup-add[_ngcontent-%COMP%]:hover { background: var(--mj-color-indigo-50); }\n.fmc-lookup-add[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { margin-right: 3px; font-size: 10px; }\n\n\n\n.data-preview-section[_ngcontent-%COMP%] { margin-top: 24px; border-top: 1px solid var(--mj-border-subtle); padding-top: 16px; }\n.preview-actions[_ngcontent-%COMP%] { display: flex; gap: 8px; margin-bottom: 12px; }\n\n.preview-panel[_ngcontent-%COMP%] {\n background: var(--mj-bg-page); border: 1px solid var(--mj-border-default); border-radius: 8px;\n padding: 12px; margin-bottom: 12px;\n}\n.preview-panel-header[_ngcontent-%COMP%] {\n display: flex; align-items: center; justify-content: space-between;\n margin-bottom: 8px;\n}\n.preview-panel-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] { font-size: 13px; font-weight: 600; margin: 0; }\n.preview-panel-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { margin-right: 6px; color: var(--mj-color-indigo-500); }\n\n.preview-table-wrapper[_ngcontent-%COMP%] { overflow-x: auto; }\n.preview-table[_ngcontent-%COMP%] {\n width: 100%; border-collapse: collapse; font-size: 12px;\n}\n.preview-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n text-align: left; padding: 5px 8px;\n background: var(--mj-border-default); font-weight: 600; font-size: 10px;\n text-transform: uppercase; color: var(--mj-text-muted);\n border-bottom: 1px solid var(--mj-border-default); white-space: nowrap;\n}\n.preview-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 4px 8px; border-bottom: 1px solid var(--mj-border-subtle);\n white-space: nowrap; max-width: 150px; overflow: hidden; text-overflow: ellipsis;\n}\n.preview-table[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover { background: var(--mj-status-info-bg); }\n\n\n\n.run-summary-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-page); border-radius: 8px; padding: 12px;\n}\n.run-summary-row[_ngcontent-%COMP%] {\n display: flex; justify-content: space-between;\n padding: 4px 0; font-size: 13px;\n}\n.run-summary-row[_ngcontent-%COMP%] .label[_ngcontent-%COMP%] { color: var(--mj-text-muted); font-weight: 500; }\n.run-status[_ngcontent-%COMP%] {\n font-size: 11px; padding: 2px 6px; border-radius: 4px; font-weight: 600;\n}\n.status-green[_ngcontent-%COMP%] { background: var(--mj-status-success-bg); color: var(--mj-color-success-700); }\n.status-amber[_ngcontent-%COMP%] { background: var(--mj-color-warning-50); color: var(--mj-color-warning-600); }\n.status-red[_ngcontent-%COMP%] { background: var(--mj-status-error-bg); color: var(--mj-color-error-600); }\n\n.entity-stat-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-page); border-radius: 6px; padding: 10px;\n margin-bottom: 8px;\n}\n.entity-stat-name[_ngcontent-%COMP%] { font-size: 13px; font-weight: 600; margin-bottom: 6px; }\n.entity-stat-grid[_ngcontent-%COMP%] { display: flex; gap: 12px; }\n.mini-stat[_ngcontent-%COMP%] { text-align: center; }\n.mini-val[_ngcontent-%COMP%] { display: block; font-size: 16px; font-weight: 600; }\n.mini-val.has-errors[_ngcontent-%COMP%] { color: var(--mj-color-error-600); }\n.mini-label[_ngcontent-%COMP%] { font-size: 10px; color: var(--mj-text-disabled); }\n\n\n\n.validation-banner[_ngcontent-%COMP%] {\n background: var(--mj-color-warning-50); border: 1px solid var(--mj-color-warning-200); border-radius: 8px;\n padding: 10px 14px; margin-bottom: 14px;\n display: flex; align-items: flex-start; gap: 10px;\n font-size: 13px; color: var(--mj-color-warning-600);\n}\n.validation-banner[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] { margin-top: 2px; }\n.validation-warnings[_ngcontent-%COMP%] { display: flex; flex-direction: column; gap: 2px; }\n\n.field-map-card.validation-error[_ngcontent-%COMP%] .fmc-source[_ngcontent-%COMP%] {\n border-left: 3px solid var(--mj-color-warning-600);\n padding-left: 8px;\n}\n\n\n\n@media (max-width: 1100px) { .right-panel[_ngcontent-%COMP%] { display: none; } }\n@media (max-width: 800px) { .left-panel[_ngcontent-%COMP%] { width: 260px; } }"] });
2360
2348
  };
2361
2349
  MappingWorkspaceComponent = __decorate([
2362
2350
  RegisterClass(BaseResourceComponent, 'IntegrationMappingWorkspace')
@@ -2364,7 +2352,7 @@ MappingWorkspaceComponent = __decorate([
2364
2352
  export { MappingWorkspaceComponent };
2365
2353
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MappingWorkspaceComponent, [{
2366
2354
  type: Component,
2367
- args: [{ standalone: false, selector: 'app-mapping-workspace', template: "<div class=\"mapping-workspace\">\n <div class=\"workspace-header\">\n <h2><i class=\"fa-solid fa-diagram-project\"></i> Mapping Workspace</h2>\n </div>\n\n @if (IsLoadingIntegrations) {\n <mj-loading text=\"Loading integrations...\" size=\"medium\"></mj-loading>\n } @else {\n <div class=\"workspace-body\">\n <!-- ============================================================ -->\n <!-- LEFT PANEL: Integration selector + Entity map list -->\n <!-- ============================================================ -->\n <div class=\"left-panel\">\n <div class=\"integration-selector\">\n <label class=\"panel-label\">Integration</label>\n <kendo-dropdownlist\n [data]=\"Integrations\"\n [textField]=\"'Name'\"\n [valueField]=\"'ID'\"\n [valuePrimitive]=\"true\"\n [(ngModel)]=\"SelectedIntegrationID\"\n (valueChange)=\"OnIntegrationChange($event)\"\n [defaultItem]=\"{ ID: '', Name: '-- Select --' }\">\n </kendo-dropdownlist>\n </div>\n\n @if (IsLoadingEntityMaps) {\n <mj-loading text=\"Loading entity maps...\" size=\"small\"></mj-loading>\n } @else if (SelectedIntegrationID) {\n <!-- Entity Map Header -->\n <div class=\"entity-map-header\">\n <span class=\"panel-label\" style=\"margin: 0;\">Entity Maps</span>\n <div class=\"header-actions\">\n <button kendoButton [look]=\"'flat'\" [size]=\"'small'\"\n (click)=\"OpenAddPanel()\" title=\"Add entity map\">\n <i class=\"fa-solid fa-plus\"></i> Add Map\n </button>\n </div>\n </div>\n\n <!-- ==================== ADD MAP PANEL ==================== -->\n @if (ShowAddPanel) {\n <div class=\"add-map-panel\">\n <div class=\"add-panel-top\">\n <h5><i class=\"fa-solid fa-plus-circle\"></i> Add Entity Map</h5>\n <button class=\"add-panel-close\" (click)=\"CloseAddPanel()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n\n <!-- Source Object Dropdown -->\n <div class=\"form-group\">\n <label>Source Object</label>\n @if (IsDiscoveringObjects) {\n <div class=\"source-loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Discovering objects...\n </div>\n } @else if (DiscoverError) {\n <div class=\"discover-error-inline\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n {{ DiscoverError }}\n </div>\n } @else if (DiscoveredObjects.length === 0) {\n <div class=\"discover-error-inline\">\n No objects found in external system.\n </div>\n } @else {\n <kendo-dropdownlist\n [data]=\"DiscoveredObjects\"\n [textField]=\"'Label'\"\n [valueField]=\"'Name'\"\n [valuePrimitive]=\"true\"\n [(ngModel)]=\"SelectedSourceObjectName\"\n (valueChange)=\"OnSourceObjectChange($event)\"\n [filterable]=\"true\"\n [defaultItem]=\"{ Name: '', Label: 'Select source object...' }\">\n </kendo-dropdownlist>\n }\n </div>\n\n <!-- Target Mode Toggle -->\n <div class=\"target-mode-toggle\">\n <button class=\"target-mode-btn\"\n [class.active]=\"TargetMode === 'existing'\"\n (click)=\"SetTargetMode('existing')\">\n <i class=\"fa-solid fa-database\"></i> Existing Entity\n </button>\n <button class=\"target-mode-btn\"\n [class.active]=\"TargetMode === 'new'\"\n (click)=\"SetTargetMode('new')\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i> New Entity\n </button>\n </div>\n\n <!-- Existing entity picker -->\n @if (TargetMode === 'existing') {\n <div class=\"form-group\">\n <label>Target MJ Entity</label>\n @if (IsLoadingEntities) {\n <mj-loading text=\"Loading...\" size=\"small\"></mj-loading>\n } @else {\n <kendo-dropdownlist\n [data]=\"MJEntities\"\n [textField]=\"'Name'\"\n [valueField]=\"'ID'\"\n [valuePrimitive]=\"true\"\n [(ngModel)]=\"SelectedEntityID\"\n [filterable]=\"true\"\n [defaultItem]=\"{ ID: null, Name: 'Select entity...' }\">\n </kendo-dropdownlist>\n }\n </div>\n }\n\n <!-- New entity form -->\n @if (TargetMode === 'new') {\n <div class=\"new-entity-form\">\n <div class=\"section-label\">Define New Entity</div>\n <div class=\"form-group\">\n <label>DB Schema</label>\n <kendo-combobox\n [data]=\"DBSchemas\"\n [(ngModel)]=\"NewEntitySchemaName\"\n (valueChange)=\"OnSchemaNameChange()\"\n [allowCustom]=\"true\"\n [filterable]=\"true\"\n [placeholder]=\"'Select or type schema...'\">\n </kendo-combobox>\n </div>\n <div class=\"form-row\">\n <div class=\"form-group\">\n <label>Table Name</label>\n <input kendoTextBox [(ngModel)]=\"NewEntityTableName\"\n [placeholder]=\"SuggestedTableName || 'Table name'\" />\n @if (SuggestedTableName && !NewEntityTableName) {\n <span class=\"auto-hint\">Suggested: {{ SuggestedTableName }}</span>\n }\n </div>\n <div class=\"form-group\">\n <label>Entity Name</label>\n <input kendoTextBox [(ngModel)]=\"NewEntityName\"\n [placeholder]=\"SuggestedEntityName || 'Entity name'\" />\n </div>\n </div>\n\n <!-- DDL Preview -->\n @if (SelectedSourceObjectName && NewEntitySchemaName && NewEntityTableName) {\n <div class=\"ddl-preview-section\">\n <button kendoButton [look]=\"'outline'\" [size]=\"'small'\"\n [disabled]=\"IsGeneratingDDL\"\n (click)=\"PreviewDDL()\">\n @if (IsGeneratingDDL) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Generating...\n } @else {\n <i class=\"fa-solid fa-database\"></i> Preview DDL\n }\n </button>\n @if (DDLPreviewError) {\n <div class=\"discover-error-inline\" style=\"margin-top: 8px;\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i> {{ DDLPreviewError }}\n </div>\n }\n @if (DDLPreviewContent) {\n <pre class=\"ddl-preview-code\">{{ DDLPreviewContent }}</pre>\n }\n </div>\n }\n </div>\n }\n\n <!-- Sync direction -->\n <div class=\"form-group\">\n <label>Sync Direction</label>\n <kendo-dropdownlist\n [data]=\"['Pull', 'Push', 'Bidirectional']\"\n [(ngModel)]=\"AddSyncDirection\">\n </kendo-dropdownlist>\n </div>\n\n <!-- Save / Cancel -->\n <div class=\"add-form-actions\">\n <button kendoButton [themeColor]=\"'primary'\" [size]=\"'small'\"\n [disabled]=\"!IsAddFormValid || IsSavingEntityMap\"\n (click)=\"SaveAddMap()\">\n @if (IsSavingEntityMap) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Saving...\n } @else if (TargetMode === 'new') {\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i> Create Pending Map\n } @else {\n <i class=\"fa-solid fa-check\"></i> Add Map\n }\n </button>\n <button kendoButton [size]=\"'small'\" (click)=\"CloseAddPanel()\">\n Cancel\n </button>\n </div>\n </div>\n }\n\n <!-- Search -->\n @if (AllMaps.length > 0) {\n <div class=\"search-box\">\n <input kendoTextBox\n [(ngModel)]=\"EntityMapSearchText\"\n placeholder=\"Search entity maps...\" />\n </div>\n }\n\n <!-- Entity Map List -->\n @if (AllMaps.length === 0 && !ShowAddPanel) {\n <p class=\"empty-hint\">\n No entity maps configured.\n <a href=\"javascript:void(0)\" (click)=\"OpenAddPanel()\" style=\"color: var(--mj-brand-primary);\">Add one</a>\n </p>\n } @else if (FilteredMaps.length === 0 && AllMaps.length > 0) {\n <p class=\"empty-hint\">No matches for \"{{ EntityMapSearchText }}\".</p>\n } @else {\n <div class=\"entity-map-list\">\n @for (item of FilteredMaps; track item.ID) {\n <div class=\"entity-map-item\"\n [class.selected]=\"IsSelectedMap(item.ID)\"\n [class.pending]=\"item.IsPending\"\n (click)=\"OnMapSelect(item)\">\n <div class=\"em-top-row\">\n <span class=\"em-name\">{{ item.SourceName }}</span>\n <span class=\"em-arrow\"><i class=\"fa-solid fa-arrow-right\"></i></span>\n <span class=\"em-entity\">{{ item.TargetName }}</span>\n </div>\n <div class=\"em-bottom-row\">\n <div class=\"em-badges\">\n <span class=\"badge badge-direction\">{{ item.SyncDirection }}</span>\n @if (item.IsPending) {\n <span class=\"badge badge-pending\">Pending</span>\n }\n </div>\n <div class=\"em-actions\">\n <button class=\"em-delete\" title=\"Delete\"\n (click)=\"OnDeleteMap(item, $event)\">\n <i class=\"fa-solid fa-trash-can\"></i>\n </button>\n @if (!item.IsPending && item.RealMap) {\n <kendo-switch\n [(ngModel)]=\"item.RealMap.SyncEnabled\"\n [size]=\"'small'\"\n (valueChange)=\"OnToggleEntityMap(item.RealMap)\">\n </kendo-switch>\n }\n </div>\n </div>\n </div>\n }\n </div>\n }\n }\n </div>\n\n <!-- ============================================================ -->\n <!-- CENTER PANEL: Field mapping / Pending entity / Placeholder -->\n <!-- ============================================================ -->\n <div class=\"center-panel\">\n @if (!SelectedMapID) {\n <!-- No selection placeholder -->\n <div class=\"placeholder-message\">\n <i class=\"fa-solid fa-hand-pointer\"></i>\n <p>Select an entity map from the left panel to view and edit field mappings.</p>\n </div>\n } @else if (SelectedPendingMap) {\n <!-- ==================== PENDING ENTITY VIEW ==================== -->\n <div class=\"pending-entity-panel\">\n <div class=\"pending-icon\"><i class=\"fa-solid fa-clock\"></i></div>\n <h3>Pending Entity: {{ SelectedPendingMap.EntityName }}</h3>\n <p>\n This entity map is waiting for the target entity\n <strong>{{ SelectedPendingMap.SchemaName }}.{{ SelectedPendingMap.TableName }}</strong>\n to be created. Run the DDL migration and CodeGen to activate this mapping.\n </p>\n\n <!-- Progress stepper -->\n <div class=\"pending-steps\">\n <div class=\"step\">\n <div class=\"step-circle done\"><i class=\"fa-solid fa-check\"></i></div>\n <span class=\"step-label\">Map Created</span>\n </div>\n <div class=\"step-connector\" [class.done]=\"SelectedPendingMap.DDLContent\"></div>\n <div class=\"step\">\n <div class=\"step-circle\" [ngClass]=\"GetPendingStepStatus(SelectedPendingMap, 2)\">\n @if (SelectedPendingMap.DDLContent) {\n <i class=\"fa-solid fa-check\"></i>\n } @else {\n 2\n }\n </div>\n <span class=\"step-label\">DDL Generated</span>\n </div>\n <div class=\"step-connector\"></div>\n <div class=\"step\">\n <div class=\"step-circle future\">3</div>\n <span class=\"step-label\">Deploy & CodeGen</span>\n </div>\n <div class=\"step-connector\"></div>\n <div class=\"step\">\n <div class=\"step-circle future\">4</div>\n <span class=\"step-label\">Ready to Sync</span>\n </div>\n </div>\n\n <!-- DDL content -->\n @if (SelectedPendingMap.DDLContent) {\n <div class=\"ddl-preview-inline\">\n <h4 style=\"font-size: 14px; margin-bottom: 8px;\">\n <i class=\"fa-solid fa-database\"></i> Generated DDL\n </h4>\n <pre class=\"ddl-code-block\">{{ SelectedPendingMap.DDLContent }}</pre>\n <div class=\"ddl-actions\">\n <button kendoButton [look]=\"'outline'\" [size]=\"'small'\"\n (click)=\"CopyDDLToClipboard(SelectedPendingMap.DDLContent)\">\n <i class=\"fa-solid fa-copy\"></i> Copy DDL\n </button>\n </div>\n </div>\n }\n\n <!-- Source fields list -->\n @if (SelectedPendingMap.SourceFields.length > 0) {\n <div class=\"pending-fields-section\">\n <h4 style=\"font-size: 14px; margin: 16px 0 8px;\">\n <i class=\"fa-solid fa-list\"></i> Source Fields\n <span style=\"color: var(--mj-text-muted); font-weight: 400;\">({{ SelectedPendingMap.SourceFields.length }})</span>\n </h4>\n <div class=\"pending-fields-list\">\n @for (field of SelectedPendingMap.SourceFields; track field.Name) {\n <div class=\"pending-field-item\">\n <span class=\"pending-field-name\">{{ field.Name }}</span>\n <span class=\"pending-field-type\">{{ field.Type }}</span>\n @if (field.IsPrimaryKey) {\n <i class=\"fa-solid fa-key key-icon\" title=\"Key field\"></i>\n }\n @if (field.IsRequired) {\n <span class=\"pending-field-req\">*</span>\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n } @else if (IsLoadingFieldMaps) {\n <mj-loading text=\"Loading field maps...\" size=\"medium\"></mj-loading>\n } @else {\n <!-- ==================== FIELD MAPPING EDITOR ==================== -->\n\n <!-- Auto-map banner -->\n @if (ShowAutoMapBanner) {\n <div class=\"auto-map-banner\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i>\n <div class=\"banner-text\">\n <p><strong>{{ AutoMapCount }} field{{ AutoMapCount !== 1 ? 's' : '' }} auto-mapped</strong> by matching source and destination field names.</p>\n </div>\n <button kendoButton [look]=\"'flat'\" [size]=\"'small'\" (click)=\"DismissAutoMapBanner()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n }\n\n <!-- Validation warnings -->\n @if (ActiveEditableFields.length > 0 && !MappingValidation.IsValid) {\n <div class=\"validation-banner\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n <div class=\"validation-warnings\">\n @for (warning of MappingValidation.Warnings; track warning) {\n <span>{{ warning }}</span>\n }\n </div>\n </div>\n }\n\n <div class=\"field-mapping-header\">\n <h3 class=\"panel-title\">\n Field Mappings\n <span class=\"field-count\">({{ ActiveEditableFields.length }})</span>\n </h3>\n <div class=\"field-mapping-actions\">\n <button kendoButton [look]=\"'outline'\" [size]=\"'small'\"\n [disabled]=\"IsLoadingSourceFields\"\n (click)=\"RerunAutoMap()\" title=\"Auto-match source and destination fields by name\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i> Auto-Map\n </button>\n <button kendoButton [look]=\"'outline'\" [size]=\"'small'\"\n (click)=\"AddFieldMapping()\">\n <i class=\"fa-solid fa-plus\"></i> Add Field\n </button>\n <button kendoButton [themeColor]=\"'primary'\" [size]=\"'small'\"\n [disabled]=\"!HasDirtyFields || IsSavingFields\"\n (click)=\"SaveFieldMappings()\">\n @if (IsSavingFields) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Saving...\n } @else {\n <i class=\"fa-solid fa-floppy-disk\"></i> Save\n }\n </button>\n </div>\n </div>\n\n @if (ActiveEditableFields.length === 0) {\n <p class=\"empty-hint\">\n No field mappings yet.\n <a href=\"javascript:void(0)\" (click)=\"AddFieldMapping()\" style=\"color: var(--mj-brand-primary);\">Add one</a>\n </p>\n } @else {\n <div class=\"field-map-cards\">\n @for (field of ActiveEditableFields; track field; let i = $index) {\n <div class=\"field-map-card\" [class.validation-error]=\"field.IsRequired && !field.DestinationFieldName\"\n [class.has-transform]=\"field.TransformPipeline.length > 0\">\n\n <!-- Main mapping row -->\n <div class=\"fmc-row\">\n <!-- Source column -->\n <div class=\"fmc-source\">\n @if (field.IsNew) {\n <input type=\"text\" class=\"fmc-input\" [(ngModel)]=\"field.SourceFieldName\"\n (ngModelChange)=\"OnFieldChanged(field)\" placeholder=\"Source field name\" />\n } @else {\n <div class=\"fmc-field-name\">{{ field.SourceFieldName }}</div>\n <div class=\"fmc-badges\">\n @if (field.SourceFieldType) {\n <span class=\"fmc-badge badge-type\">{{ field.SourceFieldType }}</span>\n }\n @if (field.IsSourcePK) {\n <span class=\"fmc-badge badge-pk\" title=\"Primary Key\"><i class=\"fa-solid fa-key\"></i> PK</span>\n }\n @if (field.IsSourceRequired) {\n <span class=\"fmc-badge badge-req\" title=\"Required\">REQ</span>\n }\n @if (field.IsSourceReadOnly) {\n <span class=\"fmc-badge badge-ro\" title=\"Read-Only\">RO</span>\n }\n </div>\n }\n </div>\n\n <!-- Transform indicator -->\n <div class=\"fmc-transform-zone\">\n @if (field.TransformPipeline.length > 1) {\n <button class=\"fmc-transform-pill\" (click)=\"ToggleTransformEditor(field)\"\n [title]=\"field.TransformPipeline.length + ' transform step(s)'\">\n <i [class]=\"GetTransformIcon(field.TransformPipeline[0].Type)\"></i>\n <span>{{ GetTransformLabel(field.TransformPipeline[0].Type) }}</span>\n <span class=\"fmc-step-count\">+{{ field.TransformPipeline.length - 1 }}</span>\n </button>\n } @else {\n <button class=\"fmc-transform-pill fmc-transform-direct\" (click)=\"ToggleTransformEditor(field)\"\n title=\"Click to change transform type\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n <span>{{ field.TransformPipeline.length > 0 ? GetTransformLabel(field.TransformPipeline[0].Type) : 'Direct' }}</span>\n </button>\n }\n </div>\n\n <!-- Destination column -->\n <div class=\"fmc-dest\">\n @if (DestinationFields.length > 0) {\n <select class=\"fmc-select\" [(ngModel)]=\"field.DestinationFieldName\"\n (ngModelChange)=\"OnFieldChanged(field)\">\n <option value=\"\">-- Select destination --</option>\n @for (df of DestinationFields; track df.ID) {\n <option [value]=\"df.Name\">{{ df.Name }}</option>\n }\n </select>\n } @else {\n <input type=\"text\" class=\"fmc-input\" [(ngModel)]=\"field.DestinationFieldName\"\n (ngModelChange)=\"OnFieldChanged(field)\" placeholder=\"Destination field\" />\n }\n </div>\n\n <!-- Sync flags -->\n <div class=\"fmc-flags\">\n <label class=\"fmc-flag\" title=\"Key field for matching\">\n <input type=\"checkbox\" [(ngModel)]=\"field.IsKeyField\"\n (ngModelChange)=\"OnFieldChanged(field)\" />\n <i class=\"fa-solid fa-key\"></i>\n </label>\n <label class=\"fmc-flag\" title=\"Required field\">\n <input type=\"checkbox\" [(ngModel)]=\"field.IsRequired\"\n (ngModelChange)=\"OnFieldChanged(field)\" />\n <span class=\"fmc-req-star\">*</span>\n </label>\n </div>\n\n <!-- Remove button -->\n <button class=\"fmc-remove\" title=\"Remove mapping\" (click)=\"RemoveFieldMapping(i)\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n\n <!-- Transform pipeline editor (expandable) -->\n @if (field.ShowTransformEditor && field.TransformPipeline.length > 0) {\n <div class=\"fmc-transform-editor\">\n <div class=\"fmc-te-header\">\n <span class=\"fmc-te-title\"><i class=\"fa-solid fa-wand-magic-sparkles\"></i> Transform Pipeline</span>\n <button class=\"fmc-te-add\" (click)=\"AddTransformStep(field)\" title=\"Add another step\">\n <i class=\"fa-solid fa-plus\"></i> Add Step\n </button>\n </div>\n @for (step of field.TransformPipeline; track $index; let si = $index) {\n <div class=\"fmc-te-step\">\n <div class=\"fmc-te-step-header\">\n <span class=\"fmc-te-step-num\">{{ si + 1 }}</span>\n <select class=\"fmc-te-type-select\" [ngModel]=\"step.Type\"\n (ngModelChange)=\"OnTransformTypeChange(field, step, $event)\">\n @for (tt of TransformTypes; track tt.Value) {\n <option [value]=\"tt.Value\">{{ tt.Label }}</option>\n }\n </select>\n <select class=\"fmc-te-error-select\" [(ngModel)]=\"step.OnError\"\n (ngModelChange)=\"OnTransformConfigChange(field)\" title=\"On error\">\n <option value=\"Fail\">Fail</option>\n <option value=\"Skip\">Skip row</option>\n <option value=\"Null\">Set null</option>\n </select>\n <button class=\"fmc-te-remove-step\" (click)=\"RemoveTransformStep(field, si)\" title=\"Remove step\">\n <i class=\"fa-solid fa-trash-can\"></i>\n </button>\n </div>\n\n <!-- Config editors per type -->\n <div class=\"fmc-te-config\">\n @switch (step.Type) {\n @case ('direct') {\n <div class=\"fmc-te-field\">\n <label>Default value (when source is null)</label>\n <input type=\"text\" class=\"fmc-input\" [ngModel]=\"step.Config['DefaultValue'] ?? ''\"\n (ngModelChange)=\"step.Config['DefaultValue'] = $event; OnTransformConfigChange(field)\"\n placeholder=\"Leave empty for no default\" />\n </div>\n }\n @case ('regex') {\n <div class=\"fmc-te-row\">\n <div class=\"fmc-te-field\">\n <label>Pattern</label>\n <input type=\"text\" class=\"fmc-input mono\" [ngModel]=\"step.Config['Pattern'] ?? ''\"\n (ngModelChange)=\"step.Config['Pattern'] = $event; OnTransformConfigChange(field)\"\n placeholder=\"e.g. (\\d{3})-(\\d{4})\" />\n </div>\n <div class=\"fmc-te-field\">\n <label>Replacement</label>\n <input type=\"text\" class=\"fmc-input mono\" [ngModel]=\"step.Config['Replacement'] ?? ''\"\n (ngModelChange)=\"step.Config['Replacement'] = $event; OnTransformConfigChange(field)\"\n placeholder=\"e.g. $1$2\" />\n </div>\n <div class=\"fmc-te-field fmc-te-sm\">\n <label>Flags</label>\n <input type=\"text\" class=\"fmc-input mono\" [ngModel]=\"step.Config['Flags'] ?? 'g'\"\n (ngModelChange)=\"step.Config['Flags'] = $event; OnTransformConfigChange(field)\"\n placeholder=\"gi\" />\n </div>\n </div>\n }\n @case ('split') {\n <div class=\"fmc-te-row\">\n <div class=\"fmc-te-field\">\n <label>Delimiter</label>\n <input type=\"text\" class=\"fmc-input mono\" [ngModel]=\"step.Config['Delimiter'] ?? ','\"\n (ngModelChange)=\"step.Config['Delimiter'] = $event; OnTransformConfigChange(field)\"\n placeholder=\",\" />\n </div>\n <div class=\"fmc-te-field fmc-te-sm\">\n <label>Part index (0-based)</label>\n <input type=\"number\" class=\"fmc-input\" [ngModel]=\"step.Config['Index'] ?? 0\"\n (ngModelChange)=\"step.Config['Index'] = +$event; OnTransformConfigChange(field)\"\n min=\"0\" />\n </div>\n </div>\n }\n @case ('combine') {\n <div class=\"fmc-te-field\">\n <label>Source fields to combine</label>\n <div class=\"fmc-combine-chips\">\n @for (sf of GetAvailableSourceFields(); track sf) {\n <button class=\"fmc-chip\" [class.selected]=\"IsCombineFieldSelected(step.Config, sf)\"\n (click)=\"ToggleCombineField(step.Config, sf); OnTransformConfigChange(field)\">\n {{ sf }}\n </button>\n }\n </div>\n </div>\n <div class=\"fmc-te-field fmc-te-sm\">\n <label>Separator</label>\n <input type=\"text\" class=\"fmc-input mono\" [ngModel]=\"step.Config['Separator'] ?? ' '\"\n (ngModelChange)=\"step.Config['Separator'] = $event; OnTransformConfigChange(field)\"\n placeholder=\" \" />\n </div>\n }\n @case ('lookup') {\n <div class=\"fmc-te-field\">\n <label>Value mapping</label>\n <div class=\"fmc-lookup-table\">\n @for (entry of GetLookupEntries(step.Config); track $index) {\n <div class=\"fmc-lookup-row\">\n <input type=\"text\" class=\"fmc-input\" [value]=\"entry.key\" placeholder=\"Source value\"\n (change)=\"UpdateLookupEntry(step.Config, entry.key, $any($event.target).value, entry.value); OnTransformConfigChange(field)\" />\n <i class=\"fa-solid fa-arrow-right fmc-lookup-arrow\"></i>\n <input type=\"text\" class=\"fmc-input\" [value]=\"entry.value\" placeholder=\"Mapped value\"\n (change)=\"UpdateLookupEntry(step.Config, entry.key, entry.key, $any($event.target).value); OnTransformConfigChange(field)\" />\n <button class=\"fmc-lookup-del\" (click)=\"RemoveLookupEntry(step.Config, entry.key); OnTransformConfigChange(field)\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n }\n <button class=\"fmc-lookup-add\" (click)=\"AddLookupEntry(step.Config); OnTransformConfigChange(field)\">\n <i class=\"fa-solid fa-plus\"></i> Add mapping\n </button>\n </div>\n </div>\n <div class=\"fmc-te-field fmc-te-sm\">\n <label>Default (when no match)</label>\n <input type=\"text\" class=\"fmc-input\" [ngModel]=\"step.Config['Default'] ?? ''\"\n (ngModelChange)=\"step.Config['Default'] = $event; OnTransformConfigChange(field)\"\n placeholder=\"null\" />\n </div>\n }\n @case ('format') {\n <div class=\"fmc-te-row\">\n <div class=\"fmc-te-field fmc-te-sm\">\n <label>Format type</label>\n <select class=\"fmc-select\" [ngModel]=\"step.Config['FormatType'] ?? 'date'\"\n (ngModelChange)=\"step.Config['FormatType'] = $event; OnTransformConfigChange(field)\">\n <option value=\"date\">Date</option>\n <option value=\"number\">Number</option>\n <option value=\"string\">String</option>\n </select>\n </div>\n <div class=\"fmc-te-field\">\n <label>Format string</label>\n <input type=\"text\" class=\"fmc-input mono\" [ngModel]=\"step.Config['FormatString'] ?? 'ISO'\"\n (ngModelChange)=\"step.Config['FormatString'] = $event; OnTransformConfigChange(field)\"\n placeholder=\"ISO or decimal places\" />\n </div>\n </div>\n }\n @case ('coerce') {\n <div class=\"fmc-te-field fmc-te-sm\">\n <label>Target type</label>\n <select class=\"fmc-select\" [ngModel]=\"step.Config['TargetType'] ?? 'string'\"\n (ngModelChange)=\"step.Config['TargetType'] = $event; OnTransformConfigChange(field)\">\n <option value=\"string\">String</option>\n <option value=\"number\">Number</option>\n <option value=\"boolean\">Boolean</option>\n <option value=\"date\">Date</option>\n </select>\n </div>\n }\n @case ('substring') {\n <div class=\"fmc-te-row\">\n <div class=\"fmc-te-field fmc-te-sm\">\n <label>Start index</label>\n <input type=\"number\" class=\"fmc-input\" [ngModel]=\"step.Config['Start'] ?? 0\"\n (ngModelChange)=\"step.Config['Start'] = +$event; OnTransformConfigChange(field)\"\n min=\"0\" />\n </div>\n <div class=\"fmc-te-field fmc-te-sm\">\n <label>Length (blank = to end)</label>\n <input type=\"number\" class=\"fmc-input\" [ngModel]=\"step.Config['Length'] ?? ''\"\n (ngModelChange)=\"step.Config['Length'] = $event ? +$event : undefined; OnTransformConfigChange(field)\"\n min=\"1\" />\n </div>\n </div>\n }\n @case ('custom') {\n <div class=\"fmc-te-field\">\n <label>JavaScript expression <span class=\"fmc-te-hint\">(use <code>value</code> and <code>fields</code>)</span></label>\n <textarea class=\"fmc-input mono fmc-textarea\" [ngModel]=\"step.Config['Expression'] ?? 'value'\"\n (ngModelChange)=\"step.Config['Expression'] = $event; OnTransformConfigChange(field)\"\n placeholder=\"value.toUpperCase()\" rows=\"2\"></textarea>\n </div>\n }\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Data Preview Section -->\n <div class=\"data-preview-section\">\n <div class=\"preview-actions\">\n <button kendoButton [look]=\"'outline'\" [size]=\"'small'\"\n [disabled]=\"IsLoadingSourcePreview\"\n (click)=\"LoadSourcePreview()\">\n <i class=\"fa-solid fa-cloud-arrow-down\"></i> Preview Source\n </button>\n <button kendoButton [look]=\"'outline'\" [size]=\"'small'\"\n [disabled]=\"IsLoadingDestPreview\"\n (click)=\"LoadDestPreview()\">\n <i class=\"fa-solid fa-database\"></i> Preview Destination\n </button>\n </div>\n\n @if (ShowSourcePreview) {\n <div class=\"preview-panel\">\n <div class=\"preview-panel-header\">\n <h4><i class=\"fa-solid fa-cloud\"></i> Source Data Preview</h4>\n <button class=\"add-panel-close\" (click)=\"CloseSourcePreview()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n @if (IsLoadingSourcePreview) {\n <mj-loading text=\"Loading source data...\" size=\"small\"></mj-loading>\n } @else if (SourcePreviewData.length === 0) {\n <p class=\"empty-hint\">No source data available.</p>\n } @else {\n <div class=\"preview-table-wrapper\">\n <table class=\"preview-table\">\n <thead>\n <tr>\n @for (col of GetPreviewColumns(SourcePreviewData); track col) {\n <th>{{ col }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of SourcePreviewData; track $index) {\n <tr>\n @for (col of GetPreviewColumns(SourcePreviewData); track col) {\n <td>{{ FormatPreviewValue(row[col]) }}</td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n }\n\n @if (ShowDestPreview) {\n <div class=\"preview-panel\">\n <div class=\"preview-panel-header\">\n <h4><i class=\"fa-solid fa-database\"></i> Destination Data Preview</h4>\n <button class=\"add-panel-close\" (click)=\"CloseDestPreview()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n @if (IsLoadingDestPreview) {\n <mj-loading text=\"Loading destination data...\" size=\"small\"></mj-loading>\n } @else if (DestPreviewData.length === 0) {\n <p class=\"empty-hint\">No destination data available.</p>\n } @else {\n <div class=\"preview-table-wrapper\">\n <table class=\"preview-table\">\n <thead>\n <tr>\n @for (col of GetPreviewColumns(DestPreviewData); track col) {\n <th>{{ col }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of DestPreviewData; track $index) {\n <tr>\n @for (col of GetPreviewColumns(DestPreviewData); track col) {\n <td>{{ FormatPreviewValue(row[col]) }}</td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n\n <!-- ============================================================ -->\n <!-- RIGHT PANEL: Last run details -->\n <!-- ============================================================ -->\n <div class=\"right-panel\">\n <h4 class=\"panel-label\">Last Run Details</h4>\n @if (!SelectedIntegrationID) {\n <p class=\"empty-hint\">Select an integration to see run details.</p>\n } @else if (IsLoadingRunDetails) {\n <mj-loading text=\"Loading...\" size=\"small\"></mj-loading>\n } @else if (!LatestRun) {\n <p class=\"empty-hint\">No runs found.</p>\n } @else {\n <div class=\"run-summary-card\">\n <div class=\"run-summary-row\">\n <span class=\"label\">Status</span>\n <span class=\"run-status\" [class]=\"'status-' + RunStatusColor\">\n {{ LatestRun.Status }}\n </span>\n </div>\n <div class=\"run-summary-row\">\n <span class=\"label\">Started</span>\n <span>{{ FormatDate(LatestRun.StartedAt) }}</span>\n </div>\n <div class=\"run-summary-row\">\n <span class=\"label\">Total Records</span>\n <span>{{ LatestRun.TotalRecords | number }}</span>\n </div>\n <div class=\"run-summary-row\">\n <span class=\"label\">Run By</span>\n <span>{{ LatestRun.RunByUser }}</span>\n </div>\n </div>\n\n @if (RunEntityDetails.length > 0) {\n <h4 class=\"panel-label\" style=\"margin-top: 16px;\">Per-Entity Stats</h4>\n @for (detail of RunEntityDetails; track detail.EntityID) {\n <div class=\"entity-stat-card\">\n <div class=\"entity-stat-name\">{{ detail.Entity }}</div>\n <div class=\"entity-stat-grid\">\n <div class=\"mini-stat\">\n <span class=\"mini-val\">{{ detail.RecordsCreated }}</span>\n <span class=\"mini-label\">Created</span>\n </div>\n <div class=\"mini-stat\">\n <span class=\"mini-val\">{{ detail.RecordsUpdated }}</span>\n <span class=\"mini-label\">Updated</span>\n </div>\n <div class=\"mini-stat\">\n <span class=\"mini-val\" [class.has-errors]=\"detail.RecordsErrored > 0\">\n {{ detail.RecordsErrored }}\n </span>\n <span class=\"mini-label\">Errors</span>\n </div>\n </div>\n </div>\n }\n }\n }\n </div>\n </div>\n }\n</div>\n", styles: [".mapping-workspace { padding: 24px; height: 100%; display: flex; flex-direction: column; }\n.workspace-header {\n display: flex; align-items: center; justify-content: space-between;\n margin-bottom: 16px;\n}\n.workspace-header h2 {\n margin: 0; font-size: 20px; font-weight: 600;\n}\n.workspace-header h2 i { margin-right: 8px; color: var(--mj-color-indigo-500); }\n\n/* ===== Three-panel layout ===== */\n.workspace-body {\n display: flex; flex: 1; gap: 1px; background: var(--mj-border-default);\n border-radius: 10px; overflow: hidden; min-height: 500px;\n}\n\n.left-panel { width: 320px; min-width: 280px; background: var(--mj-bg-surface); padding: 16px; overflow-y: auto; flex-shrink: 0; }\n.center-panel { flex: 1; background: var(--mj-bg-surface); padding: 20px; overflow-y: auto; }\n.right-panel { width: 280px; min-width: 240px; background: var(--mj-bg-surface); padding: 16px; overflow-y: auto; flex-shrink: 0; }\n\n/* ===== Shared ===== */\n.panel-label {\n font-size: 11px; font-weight: 700; color: var(--mj-text-disabled);\n text-transform: uppercase; letter-spacing: 0.6px;\n margin: 0 0 6px 0; display: block;\n}\n.panel-title { margin: 0 0 12px 0; font-size: 16px; font-weight: 600; }\n.panel-title .field-count { color: var(--mj-text-disabled); font-weight: 400; font-size: 13px; }\n.empty-hint { color: var(--mj-text-disabled); font-size: 13px; font-style: italic; }\n.search-box { margin-bottom: 12px; }\n\n/* ===== Integration selector ===== */\n.integration-selector { margin-bottom: 20px; padding-bottom: 16px; border-bottom: 1px solid var(--mj-border-subtle); }\n\n/* ===== Entity Map Header ===== */\n.entity-map-header {\n display: flex; align-items: center; justify-content: space-between;\n margin-bottom: 10px;\n}\n.header-actions { display: flex; gap: 4px; }\n\n/* ===== Add Map Panel ===== */\n.add-map-panel {\n background: var(--mj-bg-page); border: 1px solid var(--mj-border-default); border-radius: 10px;\n padding: 16px; margin-bottom: 14px;\n}\n.add-panel-top {\n display: flex; align-items: center; justify-content: space-between;\n margin-bottom: 14px;\n}\n.add-panel-top h5 { margin: 0; font-size: 14px; font-weight: 600; }\n.add-panel-close {\n background: none; border: none; cursor: pointer; color: var(--mj-text-disabled); font-size: 14px;\n}\n.add-panel-close:hover { color: var(--mj-text-primary); }\n\n.form-group { display: flex; flex-direction: column; gap: 4px; margin-bottom: 12px; }\n.form-group label { font-size: 12px; font-weight: 600; color: var(--mj-text-muted); }\n.form-row { display: flex; gap: 10px; }\n.form-row .form-group { flex: 1; }\n\n.source-loading {\n display: flex; align-items: center; gap: 8px;\n font-size: 12px; color: var(--mj-text-disabled); padding: 6px 0;\n}\n.source-loading i { color: var(--mj-color-indigo-500); }\n\n.discover-error-inline {\n font-size: 12px; color: var(--mj-color-error-600); padding: 6px 0;\n}\n.discover-error-inline i { margin-right: 4px; }\n\n/* Target mode toggle */\n.target-mode-toggle {\n display: flex; border: 1px solid var(--mj-border-default); border-radius: 6px;\n overflow: hidden; margin-bottom: 12px;\n}\n.target-mode-btn {\n flex: 1; padding: 8px 12px; font-size: 12px; font-weight: 600;\n text-align: center; cursor: pointer; background: var(--mj-bg-surface); border: none;\n color: var(--mj-text-muted); transition: all 0.15s;\n}\n.target-mode-btn:first-child { border-right: 1px solid var(--mj-border-default); }\n.target-mode-btn.active { background: var(--mj-color-indigo-500); color: var(--mj-bg-surface); }\n.target-mode-btn:not(.active):hover { background: var(--mj-status-info-bg); color: var(--mj-color-indigo-500); }\n.target-mode-btn i { margin-right: 4px; }\n\n/* New entity form */\n.new-entity-form {\n background: var(--mj-bg-surface); border: 1px solid var(--mj-border-default); border-radius: 8px;\n padding: 14px; margin-bottom: 12px;\n}\n.new-entity-form .section-label {\n font-size: 11px; font-weight: 700; color: var(--mj-color-indigo-500);\n text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 10px;\n}\n.auto-hint { font-size: 10px; color: var(--mj-text-disabled); font-style: italic; }\n\n/* DDL preview in add panel */\n.ddl-preview-section { margin-top: 8px; }\n.ddl-preview-code {\n background: var(--mj-text-primary); color: var(--mj-color-neutral-300); padding: 10px;\n border-radius: 4px; font-size: 11px; line-height: 1.5;\n max-height: 200px; overflow: auto; white-space: pre-wrap;\n word-break: break-word; margin-top: 8px;\n}\n\n.add-form-actions { display: flex; gap: 6px; padding-top: 4px; }\n\n/* ===== Entity Map List ===== */\n.entity-map-list { display: flex; flex-direction: column; gap: 4px; }\n.entity-map-item {\n padding: 8px 10px; border-radius: 6px;\n cursor: pointer; border: 1px solid var(--mj-border-subtle); transition: all 0.15s;\n}\n.entity-map-item:hover { background: var(--mj-bg-page); }\n.entity-map-item.selected { background: var(--mj-status-info-bg); border-color: var(--mj-color-indigo-500); }\n.entity-map-item.pending { border-left: 3px solid var(--mj-status-warning); }\n\n.em-top-row {\n display: flex; align-items: center; gap: 4px;\n font-size: 13px; margin-bottom: 4px;\n}\n.em-name { font-weight: 600; }\n.em-arrow { color: var(--mj-text-disabled); font-size: 11px; }\n.em-entity { color: var(--mj-text-muted); }\n\n.em-bottom-row {\n display: flex; align-items: center; justify-content: space-between;\n font-size: 11px; color: var(--mj-text-disabled);\n}\n.em-badges { display: flex; gap: 4px; align-items: center; }\n.badge {\n font-size: 10px; padding: 1px 6px; border-radius: 4px; font-weight: 600;\n}\n.badge-direction { background: var(--mj-bg-surface-hover); color: var(--mj-text-muted); }\n.badge-pending { background: var(--mj-color-warning-50); color: var(--mj-color-warning-600); }\n\n.em-actions { display: flex; align-items: center; gap: 4px; }\n.em-delete {\n opacity: 0; transition: opacity 0.15s;\n cursor: pointer; color: var(--mj-color-error-600); background: none; border: none;\n padding: 2px 4px; font-size: 12px;\n}\n.entity-map-item:hover .em-delete { opacity: 1; }\n\n/* ===== Center Panel: Placeholder ===== */\n.placeholder-message {\n display: flex; flex-direction: column; align-items: center;\n justify-content: center; height: 300px; color: var(--mj-text-disabled);\n}\n.placeholder-message i { font-size: 36px; margin-bottom: 12px; }\n.placeholder-message p { text-align: center; }\n\n/* ===== Pending Entity Panel ===== */\n.pending-entity-panel {\n background: var(--mj-status-warning-bg); border: 1px solid var(--mj-color-warning-200); border-radius: 10px;\n padding: 24px; text-align: center;\n}\n.pending-icon { font-size: 40px; color: var(--mj-status-warning); margin-bottom: 12px; }\n.pending-entity-panel h3 { font-size: 16px; margin-bottom: 8px; }\n.pending-entity-panel p { font-size: 13px; color: var(--mj-text-disabled); margin-bottom: 16px; line-height: 1.5; }\n\n/* Stepper */\n.pending-steps {\n display: flex; gap: 0; margin: 20px 0; justify-content: center; align-items: center;\n}\n.step {\n display: flex; flex-direction: column; align-items: center; gap: 6px;\n padding: 0 16px;\n}\n.step-circle {\n width: 36px; height: 36px; border-radius: 50%;\n display: flex; align-items: center; justify-content: center;\n font-size: 14px; font-weight: 700;\n}\n.step-circle.done { background: var(--mj-status-success-bg); color: var(--mj-color-success-700); }\n.step-circle.current { background: var(--mj-color-indigo-500); color: var(--mj-bg-surface); }\n.step-circle.future { background: var(--mj-bg-surface-hover); color: var(--mj-text-disabled); }\n.step-label { font-size: 10px; font-weight: 600; color: var(--mj-text-disabled); text-transform: uppercase; white-space: nowrap; }\n.step-connector { width: 32px; height: 2px; background: var(--mj-border-default); align-self: center; margin-bottom: 18px; }\n.step-connector.done { background: var(--mj-color-success-700); }\n\n/* DDL in pending view */\n.ddl-preview-inline { margin-top: 16px; text-align: left; }\n.ddl-code-block {\n background: var(--mj-text-primary); color: var(--mj-color-neutral-300); padding: 12px;\n border-radius: 6px; font-size: 12px; line-height: 1.5;\n max-height: 250px; overflow: auto; white-space: pre-wrap;\n}\n.ddl-actions { display: flex; gap: 8px; margin-top: 12px; justify-content: center; }\n\n/* Pending fields list */\n.pending-fields-section { text-align: left; }\n.pending-fields-list {\n display: flex; flex-direction: column; gap: 2px;\n max-height: 200px; overflow-y: auto;\n}\n.pending-field-item {\n display: flex; align-items: center; gap: 8px;\n padding: 4px 8px; font-size: 13px; border-radius: 4px;\n}\n.pending-field-item:hover { background: var(--mj-status-warning-bg); }\n.pending-field-name { font-weight: 600; }\n.pending-field-type { font-size: 11px; color: var(--mj-text-disabled); background: var(--mj-bg-surface-hover); padding: 1px 6px; border-radius: 3px; }\n.pending-field-req { color: var(--mj-color-error-600); font-weight: 700; }\n\n/* ===== Auto-map banner ===== */\n.auto-map-banner {\n background: var(--mj-status-info-bg); border: 1px solid var(--mj-color-info-100); border-radius: 8px;\n padding: 12px 16px; margin-bottom: 16px;\n display: flex; align-items: center; gap: 12px;\n}\n.auto-map-banner > i { color: var(--mj-color-indigo-500); font-size: 18px; }\n.auto-map-banner .banner-text { flex: 1; }\n.auto-map-banner .banner-text p { font-size: 13px; color: var(--mj-text-muted); margin: 0; }\n.auto-map-banner .banner-text strong { color: var(--mj-text-primary); }\n\n/* ===== Field Mapping Editor ===== */\n.field-mapping-header {\n display: flex; align-items: center; justify-content: space-between;\n margin-bottom: 16px;\n}\n.field-mapping-actions { display: flex; gap: 6px; }\n\n/* ===== Field Map Cards (New world-class design) ===== */\n.field-map-cards {\n display: flex; flex-direction: column; gap: 6px;\n}\n\n.field-map-card {\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n background: var(--mj-bg-surface);\n transition: all 0.2s ease;\n overflow: hidden;\n}\n.field-map-card:hover {\n border-color: var(--mj-border-strong);\n box-shadow: 0 2px 8px rgba(74, 108, 247, 0.06);\n}\n.field-map-card.has-transform {\n border-left: 3px solid var(--mj-color-indigo-500);\n}\n.field-map-card.validation-error {\n border-color: var(--mj-color-warning-200);\n background: var(--mj-status-warning-bg);\n}\n\n/* Main mapping row */\n.fmc-row {\n display: flex; align-items: center; gap: 10px;\n padding: 10px 14px;\n}\n\n/* Source column */\n.fmc-source {\n flex: 1; min-width: 0;\n}\n.fmc-field-name {\n font-size: 13px; font-weight: 600; color: var(--mj-text-primary);\n white-space: nowrap; overflow: hidden; text-overflow: ellipsis;\n}\n.fmc-badges {\n display: flex; gap: 4px; margin-top: 3px; flex-wrap: wrap;\n}\n.fmc-badge {\n font-size: 9px; font-weight: 700; padding: 1px 5px;\n border-radius: 3px; text-transform: uppercase; letter-spacing: 0.3px;\n white-space: nowrap; line-height: 1.5;\n}\n.badge-type {\n background: var(--mj-bg-surface-hover); color: var(--mj-text-muted);\n}\n.badge-pk {\n background: linear-gradient(135deg, var(--mj-color-warning-100), var(--mj-color-warning-200));\n color: var(--mj-color-warning-800);\n}\n.badge-pk i { font-size: 8px; margin-right: 2px; }\n.badge-req {\n background: linear-gradient(135deg, var(--mj-color-error-100), var(--mj-color-error-200));\n color: var(--mj-color-error-800);\n}\n.badge-ro {\n background: var(--mj-color-purple-50); color: var(--mj-color-purple-700);\n}\n\n/* Transform zone (center arrow / pill) */\n.fmc-transform-zone {\n flex-shrink: 0;\n display: flex; align-items: center; justify-content: center;\n width: 100px;\n}\n.fmc-arrow-btn {\n width: 32px; height: 32px;\n border-radius: 50%; border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-page); color: var(--mj-text-disabled);\n cursor: pointer; font-size: 12px;\n display: flex; align-items: center; justify-content: center;\n transition: all 0.2s;\n}\n.fmc-arrow-btn:hover {\n background: var(--mj-color-indigo-500); color: var(--mj-bg-surface); border-color: var(--mj-color-indigo-500);\n transform: scale(1.1);\n}\n.fmc-transform-pill {\n display: flex; align-items: center; gap: 4px;\n padding: 4px 10px; border-radius: 16px;\n background: linear-gradient(135deg, var(--mj-color-indigo-50), var(--mj-color-indigo-100));\n border: 1px solid var(--mj-color-indigo-200); color: var(--mj-color-indigo-700);\n font-size: 11px; font-weight: 600;\n cursor: pointer; transition: all 0.2s;\n white-space: nowrap;\n}\n.fmc-transform-pill:hover {\n background: linear-gradient(135deg, var(--mj-color-indigo-100), var(--mj-color-indigo-200));\n transform: scale(1.02);\n}\n.fmc-transform-pill i { font-size: 10px; }\n.fmc-transform-direct {\n background: linear-gradient(135deg, var(--mj-bg-page), var(--mj-bg-surface-hover));\n border-color: var(--mj-color-neutral-300); color: var(--mj-text-muted);\n}\n.fmc-transform-direct:hover {\n background: linear-gradient(135deg, var(--mj-color-indigo-50), var(--mj-color-indigo-100));\n border-color: var(--mj-color-indigo-200); color: var(--mj-color-indigo-700);\n}\n.fmc-step-count {\n background: var(--mj-color-indigo-700); color: var(--mj-bg-surface); font-size: 9px;\n padding: 0 4px; border-radius: 8px; font-weight: 700;\n}\n\n/* Destination column */\n.fmc-dest {\n flex: 1; min-width: 0;\n}\n.fmc-select {\n width: 100%; padding: 6px 10px; border: 1px solid var(--mj-border-default);\n border-radius: 6px; font-size: 13px; color: var(--mj-text-primary);\n background: var(--mj-bg-page);\n transition: border-color 0.15s;\n}\n.fmc-select:focus { border-color: var(--mj-color-indigo-500); outline: none; box-shadow: 0 0 0 2px rgba(74, 108, 247, 0.12); }\n\n/* Shared input style */\n.fmc-input {\n width: 100%; padding: 5px 8px; border: 1px solid var(--mj-border-default);\n border-radius: 6px; font-size: 13px; color: var(--mj-text-primary);\n background: var(--mj-bg-page);\n transition: border-color 0.15s;\n}\n.fmc-input:focus { border-color: var(--mj-color-indigo-500); outline: none; box-shadow: 0 0 0 2px rgba(74, 108, 247, 0.12); }\n.fmc-input.mono { font-family: 'SF Mono', 'Fira Code', 'Consolas', monospace; font-size: 12px; }\n\n/* Flags (key, required) */\n.fmc-flags {\n display: flex; gap: 6px; flex-shrink: 0;\n}\n.fmc-flag {\n display: flex; align-items: center; gap: 3px;\n font-size: 11px; color: var(--mj-text-disabled); cursor: pointer;\n padding: 2px 4px; border-radius: 4px;\n transition: color 0.15s;\n}\n.fmc-flag:hover { color: var(--mj-color-indigo-500); }\n.fmc-flag input[type=\"checkbox\"] {\n width: 13px; height: 13px; cursor: pointer;\n accent-color: var(--mj-color-indigo-500);\n}\n.fmc-flag i { font-size: 10px; }\n.fmc-req-star { font-size: 14px; font-weight: 700; color: inherit; }\n\n/* Remove button */\n.fmc-remove {\n flex-shrink: 0;\n background: none; border: none; cursor: pointer;\n color: var(--mj-color-neutral-300); font-size: 13px; padding: 4px;\n border-radius: 4px; transition: all 0.15s;\n}\n.fmc-remove:hover { color: var(--mj-status-error); background: var(--mj-status-error-bg); }\n\n/* ===== Transform Pipeline Editor ===== */\n.fmc-transform-editor {\n border-top: 1px solid var(--mj-bg-surface-hover);\n background: linear-gradient(180deg, var(--mj-color-indigo-50) 0%, var(--mj-bg-page) 100%);\n padding: 12px 14px;\n}\n.fmc-te-header {\n display: flex; align-items: center; justify-content: space-between;\n margin-bottom: 10px;\n}\n.fmc-te-title {\n font-size: 11px; font-weight: 700; color: var(--mj-color-indigo-500);\n text-transform: uppercase; letter-spacing: 0.5px;\n}\n.fmc-te-title i { margin-right: 4px; }\n.fmc-te-add {\n font-size: 11px; font-weight: 600; color: var(--mj-color-indigo-500);\n background: none; border: 1px solid var(--mj-color-indigo-200);\n border-radius: 6px; padding: 3px 10px;\n cursor: pointer; transition: all 0.15s;\n}\n.fmc-te-add:hover { background: var(--mj-color-indigo-50); }\n.fmc-te-add i { margin-right: 3px; font-size: 10px; }\n\n/* Individual transform step */\n.fmc-te-step {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 10px 12px;\n margin-bottom: 8px;\n transition: box-shadow 0.15s;\n}\n.fmc-te-step:hover { box-shadow: 0 1px 4px rgba(0,0,0,0.05); }\n.fmc-te-step:last-child { margin-bottom: 0; }\n\n.fmc-te-step-header {\n display: flex; align-items: center; gap: 8px; margin-bottom: 8px;\n}\n.fmc-te-step-num {\n width: 22px; height: 22px; border-radius: 50%;\n background: linear-gradient(135deg, var(--mj-color-indigo-500), var(--mj-color-indigo-500));\n color: var(--mj-bg-surface); font-size: 11px; font-weight: 700;\n display: flex; align-items: center; justify-content: center;\n flex-shrink: 0;\n}\n.fmc-te-type-select {\n flex: 1; padding: 4px 8px; border: 1px solid var(--mj-border-default);\n border-radius: 6px; font-size: 12px; font-weight: 600;\n color: var(--mj-text-primary); background: var(--mj-bg-page);\n}\n.fmc-te-type-select:focus { border-color: var(--mj-color-indigo-500); outline: none; }\n.fmc-te-error-select {\n width: 100px; padding: 4px 6px; border: 1px solid var(--mj-border-default);\n border-radius: 6px; font-size: 11px; color: var(--mj-text-muted);\n background: var(--mj-bg-page);\n}\n.fmc-te-error-select:focus { border-color: var(--mj-color-indigo-500); outline: none; }\n.fmc-te-remove-step {\n background: none; border: none; cursor: pointer;\n color: var(--mj-color-neutral-300); font-size: 12px; padding: 4px;\n border-radius: 4px; transition: all 0.15s;\n}\n.fmc-te-remove-step:hover { color: var(--mj-status-error); background: var(--mj-status-error-bg); }\n\n/* Config area */\n.fmc-te-config {\n padding-left: 30px;\n}\n.fmc-te-field {\n margin-bottom: 8px;\n}\n.fmc-te-field:last-child { margin-bottom: 0; }\n.fmc-te-field label {\n display: block; font-size: 11px; font-weight: 600;\n color: var(--mj-text-muted); margin-bottom: 3px;\n}\n.fmc-te-field label code {\n background: var(--mj-bg-surface-hover); padding: 0 3px; border-radius: 3px;\n font-size: 10px; color: var(--mj-color-indigo-700);\n}\n.fmc-te-hint { font-weight: 400; color: var(--mj-text-disabled); }\n.fmc-te-row {\n display: flex; gap: 10px; align-items: flex-end;\n}\n.fmc-te-sm { max-width: 140px; }\n.fmc-textarea {\n resize: vertical; min-height: 40px;\n}\n\n/* Combine chips */\n.fmc-combine-chips {\n display: flex; flex-wrap: wrap; gap: 4px; margin-top: 4px;\n}\n.fmc-chip {\n font-size: 11px; padding: 3px 8px; border-radius: 14px;\n border: 1px solid var(--mj-border-default); background: var(--mj-bg-surface);\n color: var(--mj-text-muted); cursor: pointer;\n transition: all 0.15s; font-weight: 500;\n}\n.fmc-chip:hover { border-color: var(--mj-color-indigo-300); color: var(--mj-color-indigo-700); }\n.fmc-chip.selected {\n background: linear-gradient(135deg, var(--mj-color-indigo-50), var(--mj-color-indigo-100));\n border-color: var(--mj-color-indigo-400); color: var(--mj-color-indigo-700); font-weight: 600;\n}\n\n/* Lookup table */\n.fmc-lookup-table {\n display: flex; flex-direction: column; gap: 4px; margin-top: 4px;\n}\n.fmc-lookup-row {\n display: flex; align-items: center; gap: 6px;\n}\n.fmc-lookup-row .fmc-input { flex: 1; }\n.fmc-lookup-arrow { color: var(--mj-color-indigo-200); font-size: 10px; flex-shrink: 0; }\n.fmc-lookup-del {\n background: none; border: none; cursor: pointer;\n color: var(--mj-color-neutral-300); font-size: 11px; padding: 2px;\n transition: color 0.15s;\n}\n.fmc-lookup-del:hover { color: var(--mj-status-error); }\n.fmc-lookup-add {\n font-size: 11px; color: var(--mj-color-indigo-500); background: none;\n border: 1px dashed var(--mj-color-indigo-200); border-radius: 6px;\n padding: 4px 10px; cursor: pointer;\n transition: all 0.15s; margin-top: 2px;\n}\n.fmc-lookup-add:hover { background: var(--mj-color-indigo-50); }\n.fmc-lookup-add i { margin-right: 3px; font-size: 10px; }\n\n/* ===== Data Preview ===== */\n.data-preview-section { margin-top: 24px; border-top: 1px solid var(--mj-border-subtle); padding-top: 16px; }\n.preview-actions { display: flex; gap: 8px; margin-bottom: 12px; }\n\n.preview-panel {\n background: var(--mj-bg-page); border: 1px solid var(--mj-border-default); border-radius: 8px;\n padding: 12px; margin-bottom: 12px;\n}\n.preview-panel-header {\n display: flex; align-items: center; justify-content: space-between;\n margin-bottom: 8px;\n}\n.preview-panel-header h4 { font-size: 13px; font-weight: 600; margin: 0; }\n.preview-panel-header h4 i { margin-right: 6px; color: var(--mj-color-indigo-500); }\n\n.preview-table-wrapper { overflow-x: auto; }\n.preview-table {\n width: 100%; border-collapse: collapse; font-size: 12px;\n}\n.preview-table th {\n text-align: left; padding: 5px 8px;\n background: var(--mj-border-default); font-weight: 600; font-size: 10px;\n text-transform: uppercase; color: var(--mj-text-muted);\n border-bottom: 1px solid var(--mj-border-default); white-space: nowrap;\n}\n.preview-table td {\n padding: 4px 8px; border-bottom: 1px solid var(--mj-border-subtle);\n white-space: nowrap; max-width: 150px; overflow: hidden; text-overflow: ellipsis;\n}\n.preview-table tr:hover { background: var(--mj-status-info-bg); }\n\n/* ===== Right panel: run details ===== */\n.run-summary-card {\n background: var(--mj-bg-page); border-radius: 8px; padding: 12px;\n}\n.run-summary-row {\n display: flex; justify-content: space-between;\n padding: 4px 0; font-size: 13px;\n}\n.run-summary-row .label { color: var(--mj-text-muted); font-weight: 500; }\n.run-status {\n font-size: 11px; padding: 2px 6px; border-radius: 4px; font-weight: 600;\n}\n.status-green { background: var(--mj-status-success-bg); color: var(--mj-color-success-700); }\n.status-amber { background: var(--mj-color-warning-50); color: var(--mj-color-warning-600); }\n.status-red { background: var(--mj-status-error-bg); color: var(--mj-color-error-600); }\n\n.entity-stat-card {\n background: var(--mj-bg-page); border-radius: 6px; padding: 10px;\n margin-bottom: 8px;\n}\n.entity-stat-name { font-size: 13px; font-weight: 600; margin-bottom: 6px; }\n.entity-stat-grid { display: flex; gap: 12px; }\n.mini-stat { text-align: center; }\n.mini-val { display: block; font-size: 16px; font-weight: 600; }\n.mini-val.has-errors { color: var(--mj-color-error-600); }\n.mini-label { font-size: 10px; color: var(--mj-text-disabled); }\n\n/* ===== Validation ===== */\n.validation-banner {\n background: var(--mj-color-warning-50); border: 1px solid var(--mj-color-warning-200); border-radius: 8px;\n padding: 10px 14px; margin-bottom: 14px;\n display: flex; align-items: flex-start; gap: 10px;\n font-size: 13px; color: var(--mj-color-warning-600);\n}\n.validation-banner > i { margin-top: 2px; }\n.validation-warnings { display: flex; flex-direction: column; gap: 2px; }\n\n.field-map-card.validation-error .fmc-source {\n border-left: 3px solid var(--mj-color-warning-600);\n padding-left: 8px;\n}\n\n/* ===== Responsive ===== */\n@media (max-width: 1100px) { .right-panel { display: none; } }\n@media (max-width: 800px) { .left-panel { width: 260px; } }\n"] }]
2355
+ args: [{ standalone: false, selector: 'app-mapping-workspace', template: "<div class=\"mapping-workspace\">\n <div class=\"workspace-header\">\n <h2><i class=\"fa-solid fa-diagram-project\"></i> Mapping Workspace</h2>\n </div>\n\n @if (IsLoadingIntegrations) {\n <mj-loading text=\"Loading integrations...\" size=\"medium\"></mj-loading>\n } @else {\n <div class=\"workspace-body\">\n <!-- ============================================================ -->\n <!-- LEFT PANEL: Integration selector + Entity map list -->\n <!-- ============================================================ -->\n <div class=\"left-panel\">\n <div class=\"integration-selector\">\n <label class=\"panel-label\">Integration</label>\n <mj-dropdown\n [Data]=\"Integrations\"\n TextField=\"Name\"\n ValueField=\"ID\"\n [ValuePrimitive]=\"true\"\n [(ngModel)]=\"SelectedIntegrationID\"\n (ValueChange)=\"OnIntegrationChange($any($event))\"\n [DefaultItem]=\"{ ID: '', Name: '-- Select --' }\">\n </mj-dropdown>\n </div>\n\n @if (IsLoadingEntityMaps) {\n <mj-loading text=\"Loading entity maps...\" size=\"small\"></mj-loading>\n } @else if (SelectedIntegrationID) {\n <!-- Entity Map Header -->\n <div class=\"entity-map-header\">\n <span class=\"panel-label\" style=\"margin: 0;\">Entity Maps</span>\n <div class=\"header-actions\">\n <button mjButton variant=\"flat\" size=\"sm\"\n (click)=\"OpenAddPanel()\" title=\"Add entity map\">\n <i class=\"fa-solid fa-plus\"></i> Add Map\n </button>\n </div>\n </div>\n\n <!-- ==================== ADD MAP PANEL ==================== -->\n @if (ShowAddPanel) {\n <div class=\"add-map-panel\">\n <div class=\"add-panel-top\">\n <h5><i class=\"fa-solid fa-plus-circle\"></i> Add Entity Map</h5>\n <button class=\"add-panel-close\" (click)=\"CloseAddPanel()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n\n <!-- Source Object Dropdown -->\n <div class=\"form-group\">\n <label>Source Object</label>\n @if (IsDiscoveringObjects) {\n <div class=\"source-loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Discovering objects...\n </div>\n } @else if (DiscoverError) {\n <div class=\"discover-error-inline\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n {{ DiscoverError }}\n </div>\n } @else if (DiscoveredObjects.length === 0) {\n <div class=\"discover-error-inline\">\n No objects found in external system.\n </div>\n } @else {\n <mj-dropdown\n [Data]=\"DiscoveredObjects\"\n TextField=\"Label\"\n ValueField=\"Name\"\n [ValuePrimitive]=\"true\"\n [(ngModel)]=\"SelectedSourceObjectName\"\n (ValueChange)=\"OnSourceObjectChange($any($event))\"\n [Filterable]=\"true\"\n [DefaultItem]=\"{ Name: '', Label: 'Select source object...' }\">\n </mj-dropdown>\n }\n </div>\n\n <!-- Target Mode Toggle -->\n <div class=\"target-mode-toggle\">\n <button class=\"target-mode-btn\"\n [class.active]=\"TargetMode === 'existing'\"\n (click)=\"SetTargetMode('existing')\">\n <i class=\"fa-solid fa-database\"></i> Existing Entity\n </button>\n <button class=\"target-mode-btn\"\n [class.active]=\"TargetMode === 'new'\"\n (click)=\"SetTargetMode('new')\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i> New Entity\n </button>\n </div>\n\n <!-- Existing entity picker -->\n @if (TargetMode === 'existing') {\n <div class=\"form-group\">\n <label>Target MJ Entity</label>\n @if (IsLoadingEntities) {\n <mj-loading text=\"Loading...\" size=\"small\"></mj-loading>\n } @else {\n <mj-dropdown\n [Data]=\"MJEntities\"\n TextField=\"Name\"\n ValueField=\"ID\"\n [ValuePrimitive]=\"true\"\n [(ngModel)]=\"SelectedEntityID\"\n [Filterable]=\"true\"\n [DefaultItem]=\"{ ID: null, Name: 'Select entity...' }\">\n </mj-dropdown>\n }\n </div>\n }\n\n <!-- New entity form -->\n @if (TargetMode === 'new') {\n <div class=\"new-entity-form\">\n <div class=\"section-label\">Define New Entity</div>\n <div class=\"form-group\">\n <label>DB Schema</label>\n <mj-combobox\n [Data]=\"DBSchemas\"\n [(ngModel)]=\"NewEntitySchemaName\"\n (ValueChange)=\"OnSchemaNameChange()\"\n [AllowCustom]=\"true\"\n [Filterable]=\"true\"\n Placeholder=\"Select or type schema...\">\n </mj-combobox>\n </div>\n <div class=\"form-row\">\n <div class=\"form-group\">\n <label>Table Name</label>\n <input class=\"mj-input\" [(ngModel)]=\"NewEntityTableName\"\n [placeholder]=\"SuggestedTableName || 'Table name'\" />\n @if (SuggestedTableName && !NewEntityTableName) {\n <span class=\"auto-hint\">Suggested: {{ SuggestedTableName }}</span>\n }\n </div>\n <div class=\"form-group\">\n <label>Entity Name</label>\n <input class=\"mj-input\" [(ngModel)]=\"NewEntityName\"\n [placeholder]=\"SuggestedEntityName || 'Entity name'\" />\n </div>\n </div>\n\n <!-- DDL Preview -->\n @if (SelectedSourceObjectName && NewEntitySchemaName && NewEntityTableName) {\n <div class=\"ddl-preview-section\">\n <button mjButton variant=\"outline\" size=\"sm\"\n [disabled]=\"IsGeneratingDDL\"\n (click)=\"PreviewDDL()\">\n @if (IsGeneratingDDL) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Generating...\n } @else {\n <i class=\"fa-solid fa-database\"></i> Preview DDL\n }\n </button>\n @if (DDLPreviewError) {\n <div class=\"discover-error-inline\" style=\"margin-top: 8px;\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i> {{ DDLPreviewError }}\n </div>\n }\n @if (DDLPreviewContent) {\n <pre class=\"ddl-preview-code\">{{ DDLPreviewContent }}</pre>\n }\n </div>\n }\n </div>\n }\n\n <!-- Sync direction -->\n <div class=\"form-group\">\n <label>Sync Direction</label>\n <mj-dropdown\n [Data]=\"['Pull', 'Push', 'Bidirectional']\"\n [(ngModel)]=\"AddSyncDirection\">\n </mj-dropdown>\n </div>\n\n <!-- Save / Cancel -->\n <div class=\"add-form-actions\">\n <button mjButton variant=\"primary\" size=\"sm\"\n [disabled]=\"!IsAddFormValid || IsSavingEntityMap\"\n (click)=\"SaveAddMap()\">\n @if (IsSavingEntityMap) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Saving...\n } @else if (TargetMode === 'new') {\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i> Create Pending Map\n } @else {\n <i class=\"fa-solid fa-check\"></i> Add Map\n }\n </button>\n <button mjButton size=\"sm\" (click)=\"CloseAddPanel()\">\n Cancel\n </button>\n </div>\n </div>\n }\n\n <!-- Search -->\n @if (AllMaps.length > 0) {\n <div class=\"search-box\">\n <input class=\"mj-input\"\n [(ngModel)]=\"EntityMapSearchText\"\n placeholder=\"Search entity maps...\" />\n </div>\n }\n\n <!-- Entity Map List -->\n @if (AllMaps.length === 0 && !ShowAddPanel) {\n <p class=\"empty-hint\">\n No entity maps configured.\n <a href=\"javascript:void(0)\" (click)=\"OpenAddPanel()\" style=\"color: var(--mj-brand-primary);\">Add one</a>\n </p>\n } @else if (FilteredMaps.length === 0 && AllMaps.length > 0) {\n <p class=\"empty-hint\">No matches for \"{{ EntityMapSearchText }}\".</p>\n } @else {\n <div class=\"entity-map-list\">\n @for (item of FilteredMaps; track item.ID) {\n <div class=\"entity-map-item\"\n [class.selected]=\"IsSelectedMap(item.ID)\"\n [class.pending]=\"item.IsPending\"\n (click)=\"OnMapSelect(item)\">\n <div class=\"em-top-row\">\n <span class=\"em-name\">{{ item.SourceName }}</span>\n <span class=\"em-arrow\"><i class=\"fa-solid fa-arrow-right\"></i></span>\n <span class=\"em-entity\">{{ item.TargetName }}</span>\n </div>\n <div class=\"em-bottom-row\">\n <div class=\"em-badges\">\n <span class=\"badge badge-direction\">{{ item.SyncDirection }}</span>\n @if (item.IsPending) {\n <span class=\"badge badge-pending\">Pending</span>\n }\n </div>\n <div class=\"em-actions\">\n <button class=\"em-delete\" title=\"Delete\"\n (click)=\"OnDeleteMap(item, $event)\">\n <i class=\"fa-solid fa-trash-can\"></i>\n </button>\n @if (!item.IsPending && item.RealMap) {\n <mj-switch\n [(ngModel)]=\"item.RealMap.SyncEnabled\"\n (ngModelChange)=\"OnToggleEntityMap(item.RealMap)\">\n </mj-switch>\n }\n </div>\n </div>\n </div>\n }\n </div>\n }\n }\n </div>\n\n <!-- ============================================================ -->\n <!-- CENTER PANEL: Field mapping / Pending entity / Placeholder -->\n <!-- ============================================================ -->\n <div class=\"center-panel\">\n @if (!SelectedMapID) {\n <!-- No selection placeholder -->\n <div class=\"placeholder-message\">\n <i class=\"fa-solid fa-hand-pointer\"></i>\n <p>Select an entity map from the left panel to view and edit field mappings.</p>\n </div>\n } @else if (SelectedPendingMap) {\n <!-- ==================== PENDING ENTITY VIEW ==================== -->\n <div class=\"pending-entity-panel\">\n <div class=\"pending-icon\"><i class=\"fa-solid fa-clock\"></i></div>\n <h3>Pending Entity: {{ SelectedPendingMap.EntityName }}</h3>\n <p>\n This entity map is waiting for the target entity\n <strong>{{ SelectedPendingMap.SchemaName }}.{{ SelectedPendingMap.TableName }}</strong>\n to be created. Run the DDL migration and CodeGen to activate this mapping.\n </p>\n\n <!-- Progress stepper -->\n <div class=\"pending-steps\">\n <div class=\"step\">\n <div class=\"step-circle done\"><i class=\"fa-solid fa-check\"></i></div>\n <span class=\"step-label\">Map Created</span>\n </div>\n <div class=\"step-connector\" [class.done]=\"SelectedPendingMap.DDLContent\"></div>\n <div class=\"step\">\n <div class=\"step-circle\" [ngClass]=\"GetPendingStepStatus(SelectedPendingMap, 2)\">\n @if (SelectedPendingMap.DDLContent) {\n <i class=\"fa-solid fa-check\"></i>\n } @else {\n 2\n }\n </div>\n <span class=\"step-label\">DDL Generated</span>\n </div>\n <div class=\"step-connector\"></div>\n <div class=\"step\">\n <div class=\"step-circle future\">3</div>\n <span class=\"step-label\">Deploy & CodeGen</span>\n </div>\n <div class=\"step-connector\"></div>\n <div class=\"step\">\n <div class=\"step-circle future\">4</div>\n <span class=\"step-label\">Ready to Sync</span>\n </div>\n </div>\n\n <!-- DDL content -->\n @if (SelectedPendingMap.DDLContent) {\n <div class=\"ddl-preview-inline\">\n <h4 style=\"font-size: 14px; margin-bottom: 8px;\">\n <i class=\"fa-solid fa-database\"></i> Generated DDL\n </h4>\n <pre class=\"ddl-code-block\">{{ SelectedPendingMap.DDLContent }}</pre>\n <div class=\"ddl-actions\">\n <button mjButton variant=\"outline\" size=\"sm\"\n (click)=\"CopyDDLToClipboard(SelectedPendingMap.DDLContent)\">\n <i class=\"fa-solid fa-copy\"></i> Copy DDL\n </button>\n </div>\n </div>\n }\n\n <!-- Source fields list -->\n @if (SelectedPendingMap.SourceFields.length > 0) {\n <div class=\"pending-fields-section\">\n <h4 style=\"font-size: 14px; margin: 16px 0 8px;\">\n <i class=\"fa-solid fa-list\"></i> Source Fields\n <span style=\"color: var(--mj-text-muted); font-weight: 400;\">({{ SelectedPendingMap.SourceFields.length }})</span>\n </h4>\n <div class=\"pending-fields-list\">\n @for (field of SelectedPendingMap.SourceFields; track field.Name) {\n <div class=\"pending-field-item\">\n <span class=\"pending-field-name\">{{ field.Name }}</span>\n <span class=\"pending-field-type\">{{ field.Type }}</span>\n @if (field.IsPrimaryKey) {\n <i class=\"fa-solid fa-key key-icon\" title=\"Key field\"></i>\n }\n @if (field.IsRequired) {\n <span class=\"pending-field-req\">*</span>\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n } @else if (IsLoadingFieldMaps) {\n <mj-loading text=\"Loading field maps...\" size=\"medium\"></mj-loading>\n } @else {\n <!-- ==================== FIELD MAPPING EDITOR ==================== -->\n\n <!-- Auto-map banner -->\n @if (ShowAutoMapBanner) {\n <div class=\"auto-map-banner\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i>\n <div class=\"banner-text\">\n <p><strong>{{ AutoMapCount }} field{{ AutoMapCount !== 1 ? 's' : '' }} auto-mapped</strong> by matching source and destination field names.</p>\n </div>\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"DismissAutoMapBanner()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n }\n\n <!-- Validation warnings -->\n @if (ActiveEditableFields.length > 0 && !MappingValidation.IsValid) {\n <div class=\"validation-banner\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n <div class=\"validation-warnings\">\n @for (warning of MappingValidation.Warnings; track warning) {\n <span>{{ warning }}</span>\n }\n </div>\n </div>\n }\n\n <div class=\"field-mapping-header\">\n <h3 class=\"panel-title\">\n Field Mappings\n <span class=\"field-count\">({{ ActiveEditableFields.length }})</span>\n </h3>\n <div class=\"field-mapping-actions\">\n <button mjButton variant=\"outline\" size=\"sm\"\n [disabled]=\"IsLoadingSourceFields\"\n (click)=\"RerunAutoMap()\" title=\"Auto-match source and destination fields by name\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i> Auto-Map\n </button>\n <button mjButton variant=\"outline\" size=\"sm\"\n (click)=\"AddFieldMapping()\">\n <i class=\"fa-solid fa-plus\"></i> Add Field\n </button>\n <button mjButton variant=\"primary\" size=\"sm\"\n [disabled]=\"!HasDirtyFields || IsSavingFields\"\n (click)=\"SaveFieldMappings()\">\n @if (IsSavingFields) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Saving...\n } @else {\n <i class=\"fa-solid fa-floppy-disk\"></i> Save\n }\n </button>\n </div>\n </div>\n\n @if (ActiveEditableFields.length === 0) {\n <p class=\"empty-hint\">\n No field mappings yet.\n <a href=\"javascript:void(0)\" (click)=\"AddFieldMapping()\" style=\"color: var(--mj-brand-primary);\">Add one</a>\n </p>\n } @else {\n <div class=\"field-map-cards\">\n @for (field of ActiveEditableFields; track field; let i = $index) {\n <div class=\"field-map-card\" [class.validation-error]=\"field.IsRequired && !field.DestinationFieldName\"\n [class.has-transform]=\"field.TransformPipeline.length > 0\">\n\n <!-- Main mapping row -->\n <div class=\"fmc-row\">\n <!-- Source column -->\n <div class=\"fmc-source\">\n @if (field.IsNew) {\n <input type=\"text\" class=\"fmc-input\" [(ngModel)]=\"field.SourceFieldName\"\n (ngModelChange)=\"OnFieldChanged(field)\" placeholder=\"Source field name\" />\n } @else {\n <div class=\"fmc-field-name\">{{ field.SourceFieldName }}</div>\n <div class=\"fmc-badges\">\n @if (field.SourceFieldType) {\n <span class=\"fmc-badge badge-type\">{{ field.SourceFieldType }}</span>\n }\n @if (field.IsSourcePK) {\n <span class=\"fmc-badge badge-pk\" title=\"Primary Key\"><i class=\"fa-solid fa-key\"></i> PK</span>\n }\n @if (field.IsSourceRequired) {\n <span class=\"fmc-badge badge-req\" title=\"Required\">REQ</span>\n }\n @if (field.IsSourceReadOnly) {\n <span class=\"fmc-badge badge-ro\" title=\"Read-Only\">RO</span>\n }\n </div>\n }\n </div>\n\n <!-- Transform indicator -->\n <div class=\"fmc-transform-zone\">\n @if (field.TransformPipeline.length > 1) {\n <button class=\"fmc-transform-pill\" (click)=\"ToggleTransformEditor(field)\"\n [title]=\"field.TransformPipeline.length + ' transform step(s)'\">\n <i [class]=\"GetTransformIcon(field.TransformPipeline[0].Type)\"></i>\n <span>{{ GetTransformLabel(field.TransformPipeline[0].Type) }}</span>\n <span class=\"fmc-step-count\">+{{ field.TransformPipeline.length - 1 }}</span>\n </button>\n } @else {\n <button class=\"fmc-transform-pill fmc-transform-direct\" (click)=\"ToggleTransformEditor(field)\"\n title=\"Click to change transform type\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n <span>{{ field.TransformPipeline.length > 0 ? GetTransformLabel(field.TransformPipeline[0].Type) : 'Direct' }}</span>\n </button>\n }\n </div>\n\n <!-- Destination column -->\n <div class=\"fmc-dest\">\n @if (DestinationFields.length > 0) {\n <select class=\"fmc-select\" [(ngModel)]=\"field.DestinationFieldName\"\n (ngModelChange)=\"OnFieldChanged(field)\">\n <option value=\"\">-- Select destination --</option>\n @for (df of DestinationFields; track df.ID) {\n <option [value]=\"df.Name\">{{ df.Name }}</option>\n }\n </select>\n } @else {\n <input type=\"text\" class=\"fmc-input\" [(ngModel)]=\"field.DestinationFieldName\"\n (ngModelChange)=\"OnFieldChanged(field)\" placeholder=\"Destination field\" />\n }\n </div>\n\n <!-- Sync flags -->\n <div class=\"fmc-flags\">\n <label class=\"fmc-flag\" title=\"Key field for matching\">\n <input type=\"checkbox\" [(ngModel)]=\"field.IsKeyField\"\n (ngModelChange)=\"OnFieldChanged(field)\" />\n <i class=\"fa-solid fa-key\"></i>\n </label>\n <label class=\"fmc-flag\" title=\"Required field\">\n <input type=\"checkbox\" [(ngModel)]=\"field.IsRequired\"\n (ngModelChange)=\"OnFieldChanged(field)\" />\n <span class=\"fmc-req-star\">*</span>\n </label>\n </div>\n\n <!-- Remove button -->\n <button class=\"fmc-remove\" title=\"Remove mapping\" (click)=\"RemoveFieldMapping(i)\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n\n <!-- Transform pipeline editor (expandable) -->\n @if (field.ShowTransformEditor && field.TransformPipeline.length > 0) {\n <div class=\"fmc-transform-editor\">\n <div class=\"fmc-te-header\">\n <span class=\"fmc-te-title\"><i class=\"fa-solid fa-wand-magic-sparkles\"></i> Transform Pipeline</span>\n <button class=\"fmc-te-add\" (click)=\"AddTransformStep(field)\" title=\"Add another step\">\n <i class=\"fa-solid fa-plus\"></i> Add Step\n </button>\n </div>\n @for (step of field.TransformPipeline; track $index; let si = $index) {\n <div class=\"fmc-te-step\">\n <div class=\"fmc-te-step-header\">\n <span class=\"fmc-te-step-num\">{{ si + 1 }}</span>\n <select class=\"fmc-te-type-select\" [ngModel]=\"step.Type\"\n (ngModelChange)=\"OnTransformTypeChange(field, step, $event)\">\n @for (tt of TransformTypes; track tt.Value) {\n <option [value]=\"tt.Value\">{{ tt.Label }}</option>\n }\n </select>\n <select class=\"fmc-te-error-select\" [(ngModel)]=\"step.OnError\"\n (ngModelChange)=\"OnTransformConfigChange(field)\" title=\"On error\">\n <option value=\"Fail\">Fail</option>\n <option value=\"Skip\">Skip row</option>\n <option value=\"Null\">Set null</option>\n </select>\n <button class=\"fmc-te-remove-step\" (click)=\"RemoveTransformStep(field, si)\" title=\"Remove step\">\n <i class=\"fa-solid fa-trash-can\"></i>\n </button>\n </div>\n\n <!-- Config editors per type -->\n <div class=\"fmc-te-config\">\n @switch (step.Type) {\n @case ('direct') {\n <div class=\"fmc-te-field\">\n <label>Default value (when source is null)</label>\n <input type=\"text\" class=\"fmc-input\" [ngModel]=\"step.Config['DefaultValue'] ?? ''\"\n (ngModelChange)=\"step.Config['DefaultValue'] = $event; OnTransformConfigChange(field)\"\n placeholder=\"Leave empty for no default\" />\n </div>\n }\n @case ('regex') {\n <div class=\"fmc-te-row\">\n <div class=\"fmc-te-field\">\n <label>Pattern</label>\n <input type=\"text\" class=\"fmc-input mono\" [ngModel]=\"step.Config['Pattern'] ?? ''\"\n (ngModelChange)=\"step.Config['Pattern'] = $event; OnTransformConfigChange(field)\"\n placeholder=\"e.g. (\\d{3})-(\\d{4})\" />\n </div>\n <div class=\"fmc-te-field\">\n <label>Replacement</label>\n <input type=\"text\" class=\"fmc-input mono\" [ngModel]=\"step.Config['Replacement'] ?? ''\"\n (ngModelChange)=\"step.Config['Replacement'] = $event; OnTransformConfigChange(field)\"\n placeholder=\"e.g. $1$2\" />\n </div>\n <div class=\"fmc-te-field fmc-te-sm\">\n <label>Flags</label>\n <input type=\"text\" class=\"fmc-input mono\" [ngModel]=\"step.Config['Flags'] ?? 'g'\"\n (ngModelChange)=\"step.Config['Flags'] = $event; OnTransformConfigChange(field)\"\n placeholder=\"gi\" />\n </div>\n </div>\n }\n @case ('split') {\n <div class=\"fmc-te-row\">\n <div class=\"fmc-te-field\">\n <label>Delimiter</label>\n <input type=\"text\" class=\"fmc-input mono\" [ngModel]=\"step.Config['Delimiter'] ?? ','\"\n (ngModelChange)=\"step.Config['Delimiter'] = $event; OnTransformConfigChange(field)\"\n placeholder=\",\" />\n </div>\n <div class=\"fmc-te-field fmc-te-sm\">\n <label>Part index (0-based)</label>\n <input type=\"number\" class=\"fmc-input\" [ngModel]=\"step.Config['Index'] ?? 0\"\n (ngModelChange)=\"step.Config['Index'] = +$event; OnTransformConfigChange(field)\"\n min=\"0\" />\n </div>\n </div>\n }\n @case ('combine') {\n <div class=\"fmc-te-field\">\n <label>Source fields to combine</label>\n <div class=\"fmc-combine-chips\">\n @for (sf of GetAvailableSourceFields(); track sf) {\n <button class=\"fmc-chip\" [class.selected]=\"IsCombineFieldSelected(step.Config, sf)\"\n (click)=\"ToggleCombineField(step.Config, sf); OnTransformConfigChange(field)\">\n {{ sf }}\n </button>\n }\n </div>\n </div>\n <div class=\"fmc-te-field fmc-te-sm\">\n <label>Separator</label>\n <input type=\"text\" class=\"fmc-input mono\" [ngModel]=\"step.Config['Separator'] ?? ' '\"\n (ngModelChange)=\"step.Config['Separator'] = $event; OnTransformConfigChange(field)\"\n placeholder=\" \" />\n </div>\n }\n @case ('lookup') {\n <div class=\"fmc-te-field\">\n <label>Value mapping</label>\n <div class=\"fmc-lookup-table\">\n @for (entry of GetLookupEntries(step.Config); track $index) {\n <div class=\"fmc-lookup-row\">\n <input type=\"text\" class=\"fmc-input\" [value]=\"entry.key\" placeholder=\"Source value\"\n (change)=\"UpdateLookupEntry(step.Config, entry.key, $any($event.target).value, entry.value); OnTransformConfigChange(field)\" />\n <i class=\"fa-solid fa-arrow-right fmc-lookup-arrow\"></i>\n <input type=\"text\" class=\"fmc-input\" [value]=\"entry.value\" placeholder=\"Mapped value\"\n (change)=\"UpdateLookupEntry(step.Config, entry.key, entry.key, $any($event.target).value); OnTransformConfigChange(field)\" />\n <button class=\"fmc-lookup-del\" (click)=\"RemoveLookupEntry(step.Config, entry.key); OnTransformConfigChange(field)\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n }\n <button class=\"fmc-lookup-add\" (click)=\"AddLookupEntry(step.Config); OnTransformConfigChange(field)\">\n <i class=\"fa-solid fa-plus\"></i> Add mapping\n </button>\n </div>\n </div>\n <div class=\"fmc-te-field fmc-te-sm\">\n <label>Default (when no match)</label>\n <input type=\"text\" class=\"fmc-input\" [ngModel]=\"step.Config['Default'] ?? ''\"\n (ngModelChange)=\"step.Config['Default'] = $event; OnTransformConfigChange(field)\"\n placeholder=\"null\" />\n </div>\n }\n @case ('format') {\n <div class=\"fmc-te-row\">\n <div class=\"fmc-te-field fmc-te-sm\">\n <label>Format type</label>\n <select class=\"fmc-select\" [ngModel]=\"step.Config['FormatType'] ?? 'date'\"\n (ngModelChange)=\"step.Config['FormatType'] = $event; OnTransformConfigChange(field)\">\n <option value=\"date\">Date</option>\n <option value=\"number\">Number</option>\n <option value=\"string\">String</option>\n </select>\n </div>\n <div class=\"fmc-te-field\">\n <label>Format string</label>\n <input type=\"text\" class=\"fmc-input mono\" [ngModel]=\"step.Config['FormatString'] ?? 'ISO'\"\n (ngModelChange)=\"step.Config['FormatString'] = $event; OnTransformConfigChange(field)\"\n placeholder=\"ISO or decimal places\" />\n </div>\n </div>\n }\n @case ('coerce') {\n <div class=\"fmc-te-field fmc-te-sm\">\n <label>Target type</label>\n <select class=\"fmc-select\" [ngModel]=\"step.Config['TargetType'] ?? 'string'\"\n (ngModelChange)=\"step.Config['TargetType'] = $event; OnTransformConfigChange(field)\">\n <option value=\"string\">String</option>\n <option value=\"number\">Number</option>\n <option value=\"boolean\">Boolean</option>\n <option value=\"date\">Date</option>\n </select>\n </div>\n }\n @case ('substring') {\n <div class=\"fmc-te-row\">\n <div class=\"fmc-te-field fmc-te-sm\">\n <label>Start index</label>\n <input type=\"number\" class=\"fmc-input\" [ngModel]=\"step.Config['Start'] ?? 0\"\n (ngModelChange)=\"step.Config['Start'] = +$event; OnTransformConfigChange(field)\"\n min=\"0\" />\n </div>\n <div class=\"fmc-te-field fmc-te-sm\">\n <label>Length (blank = to end)</label>\n <input type=\"number\" class=\"fmc-input\" [ngModel]=\"step.Config['Length'] ?? ''\"\n (ngModelChange)=\"step.Config['Length'] = $event ? +$event : undefined; OnTransformConfigChange(field)\"\n min=\"1\" />\n </div>\n </div>\n }\n @case ('custom') {\n <div class=\"fmc-te-field\">\n <label>JavaScript expression <span class=\"fmc-te-hint\">(use <code>value</code> and <code>fields</code>)</span></label>\n <textarea class=\"fmc-input mono fmc-textarea\" [ngModel]=\"step.Config['Expression'] ?? 'value'\"\n (ngModelChange)=\"step.Config['Expression'] = $event; OnTransformConfigChange(field)\"\n placeholder=\"value.toUpperCase()\" rows=\"2\"></textarea>\n </div>\n }\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Data Preview Section -->\n <div class=\"data-preview-section\">\n <div class=\"preview-actions\">\n <button mjButton variant=\"outline\" size=\"sm\"\n [disabled]=\"IsLoadingSourcePreview\"\n (click)=\"LoadSourcePreview()\">\n <i class=\"fa-solid fa-cloud-arrow-down\"></i> Preview Source\n </button>\n <button mjButton variant=\"outline\" size=\"sm\"\n [disabled]=\"IsLoadingDestPreview\"\n (click)=\"LoadDestPreview()\">\n <i class=\"fa-solid fa-database\"></i> Preview Destination\n </button>\n </div>\n\n @if (ShowSourcePreview) {\n <div class=\"preview-panel\">\n <div class=\"preview-panel-header\">\n <h4><i class=\"fa-solid fa-cloud\"></i> Source Data Preview</h4>\n <button class=\"add-panel-close\" (click)=\"CloseSourcePreview()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n @if (IsLoadingSourcePreview) {\n <mj-loading text=\"Loading source data...\" size=\"small\"></mj-loading>\n } @else if (SourcePreviewData.length === 0) {\n <p class=\"empty-hint\">No source data available.</p>\n } @else {\n <div class=\"preview-table-wrapper\">\n <table class=\"preview-table\">\n <thead>\n <tr>\n @for (col of GetPreviewColumns(SourcePreviewData); track col) {\n <th>{{ col }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of SourcePreviewData; track $index) {\n <tr>\n @for (col of GetPreviewColumns(SourcePreviewData); track col) {\n <td>{{ FormatPreviewValue(row[col]) }}</td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n }\n\n @if (ShowDestPreview) {\n <div class=\"preview-panel\">\n <div class=\"preview-panel-header\">\n <h4><i class=\"fa-solid fa-database\"></i> Destination Data Preview</h4>\n <button class=\"add-panel-close\" (click)=\"CloseDestPreview()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n @if (IsLoadingDestPreview) {\n <mj-loading text=\"Loading destination data...\" size=\"small\"></mj-loading>\n } @else if (DestPreviewData.length === 0) {\n <p class=\"empty-hint\">No destination data available.</p>\n } @else {\n <div class=\"preview-table-wrapper\">\n <table class=\"preview-table\">\n <thead>\n <tr>\n @for (col of GetPreviewColumns(DestPreviewData); track col) {\n <th>{{ col }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of DestPreviewData; track $index) {\n <tr>\n @for (col of GetPreviewColumns(DestPreviewData); track col) {\n <td>{{ FormatPreviewValue(row[col]) }}</td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n\n <!-- ============================================================ -->\n <!-- RIGHT PANEL: Last run details -->\n <!-- ============================================================ -->\n <div class=\"right-panel\">\n <h4 class=\"panel-label\">Last Run Details</h4>\n @if (!SelectedIntegrationID) {\n <p class=\"empty-hint\">Select an integration to see run details.</p>\n } @else if (IsLoadingRunDetails) {\n <mj-loading text=\"Loading...\" size=\"small\"></mj-loading>\n } @else if (!LatestRun) {\n <p class=\"empty-hint\">No runs found.</p>\n } @else {\n <div class=\"run-summary-card\">\n <div class=\"run-summary-row\">\n <span class=\"label\">Status</span>\n <span class=\"run-status\" [class]=\"'status-' + RunStatusColor\">\n {{ LatestRun.Status }}\n </span>\n </div>\n <div class=\"run-summary-row\">\n <span class=\"label\">Started</span>\n <span>{{ FormatDate(LatestRun.StartedAt) }}</span>\n </div>\n <div class=\"run-summary-row\">\n <span class=\"label\">Total Records</span>\n <span>{{ LatestRun.TotalRecords | number }}</span>\n </div>\n <div class=\"run-summary-row\">\n <span class=\"label\">Run By</span>\n <span>{{ LatestRun.RunByUser }}</span>\n </div>\n </div>\n\n @if (RunEntityDetails.length > 0) {\n <h4 class=\"panel-label\" style=\"margin-top: 16px;\">Per-Entity Stats</h4>\n @for (detail of RunEntityDetails; track detail.EntityID) {\n <div class=\"entity-stat-card\">\n <div class=\"entity-stat-name\">{{ detail.Entity }}</div>\n <div class=\"entity-stat-grid\">\n <div class=\"mini-stat\">\n <span class=\"mini-val\">{{ detail.RecordsCreated }}</span>\n <span class=\"mini-label\">Created</span>\n </div>\n <div class=\"mini-stat\">\n <span class=\"mini-val\">{{ detail.RecordsUpdated }}</span>\n <span class=\"mini-label\">Updated</span>\n </div>\n <div class=\"mini-stat\">\n <span class=\"mini-val\" [class.has-errors]=\"detail.RecordsErrored > 0\">\n {{ detail.RecordsErrored }}\n </span>\n <span class=\"mini-label\">Errors</span>\n </div>\n </div>\n </div>\n }\n }\n }\n </div>\n </div>\n }\n</div>\n", styles: [".mapping-workspace { padding: 24px; height: 100%; display: flex; flex-direction: column; }\n.workspace-header {\n display: flex; align-items: center; justify-content: space-between;\n margin-bottom: 16px;\n}\n.workspace-header h2 {\n margin: 0; font-size: 20px; font-weight: 600;\n}\n.workspace-header h2 i { margin-right: 8px; color: var(--mj-color-indigo-500); }\n\n/* ===== Three-panel layout ===== */\n.workspace-body {\n display: flex; flex: 1; gap: 1px; background: var(--mj-border-default);\n border-radius: 10px; overflow: hidden; min-height: 500px;\n}\n\n.left-panel { width: 320px; min-width: 280px; background: var(--mj-bg-surface); padding: 16px; overflow-y: auto; flex-shrink: 0; }\n.center-panel { flex: 1; background: var(--mj-bg-surface); padding: 20px; overflow-y: auto; }\n.right-panel { width: 280px; min-width: 240px; background: var(--mj-bg-surface); padding: 16px; overflow-y: auto; flex-shrink: 0; }\n\n/* ===== Shared ===== */\n.panel-label {\n font-size: 11px; font-weight: 700; color: var(--mj-text-disabled);\n text-transform: uppercase; letter-spacing: 0.6px;\n margin: 0 0 6px 0; display: block;\n}\n.panel-title { margin: 0 0 12px 0; font-size: 16px; font-weight: 600; }\n.panel-title .field-count { color: var(--mj-text-disabled); font-weight: 400; font-size: 13px; }\n.empty-hint { color: var(--mj-text-disabled); font-size: 13px; font-style: italic; }\n.search-box { margin-bottom: 12px; }\n\n/* ===== Integration selector ===== */\n.integration-selector { margin-bottom: 20px; padding-bottom: 16px; border-bottom: 1px solid var(--mj-border-subtle); }\n\n/* ===== Entity Map Header ===== */\n.entity-map-header {\n display: flex; align-items: center; justify-content: space-between;\n margin-bottom: 10px;\n}\n.header-actions { display: flex; gap: 4px; }\n\n/* ===== Add Map Panel ===== */\n.add-map-panel {\n background: var(--mj-bg-page); border: 1px solid var(--mj-border-default); border-radius: 10px;\n padding: 16px; margin-bottom: 14px;\n}\n.add-panel-top {\n display: flex; align-items: center; justify-content: space-between;\n margin-bottom: 14px;\n}\n.add-panel-top h5 { margin: 0; font-size: 14px; font-weight: 600; }\n.add-panel-close {\n background: none; border: none; cursor: pointer; color: var(--mj-text-disabled); font-size: 14px;\n}\n.add-panel-close:hover { color: var(--mj-text-primary); }\n\n.form-group { display: flex; flex-direction: column; gap: 4px; margin-bottom: 12px; }\n.form-group label { font-size: 12px; font-weight: 600; color: var(--mj-text-muted); }\n.form-row { display: flex; gap: 10px; }\n.form-row .form-group { flex: 1; }\n\n.source-loading {\n display: flex; align-items: center; gap: 8px;\n font-size: 12px; color: var(--mj-text-disabled); padding: 6px 0;\n}\n.source-loading i { color: var(--mj-color-indigo-500); }\n\n.discover-error-inline {\n font-size: 12px; color: var(--mj-color-error-600); padding: 6px 0;\n}\n.discover-error-inline i { margin-right: 4px; }\n\n/* Target mode toggle */\n.target-mode-toggle {\n display: flex; border: 1px solid var(--mj-border-default); border-radius: 6px;\n overflow: hidden; margin-bottom: 12px;\n}\n.target-mode-btn {\n flex: 1; padding: 8px 12px; font-size: 12px; font-weight: 600;\n text-align: center; cursor: pointer; background: var(--mj-bg-surface); border: none;\n color: var(--mj-text-muted); transition: all 0.15s;\n}\n.target-mode-btn:first-child { border-right: 1px solid var(--mj-border-default); }\n.target-mode-btn.active { background: var(--mj-color-indigo-500); color: var(--mj-bg-surface); }\n.target-mode-btn:not(.active):hover { background: var(--mj-status-info-bg); color: var(--mj-color-indigo-500); }\n.target-mode-btn i { margin-right: 4px; }\n\n/* New entity form */\n.new-entity-form {\n background: var(--mj-bg-surface); border: 1px solid var(--mj-border-default); border-radius: 8px;\n padding: 14px; margin-bottom: 12px;\n}\n.new-entity-form .section-label {\n font-size: 11px; font-weight: 700; color: var(--mj-color-indigo-500);\n text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 10px;\n}\n.auto-hint { font-size: 10px; color: var(--mj-text-disabled); font-style: italic; }\n\n/* DDL preview in add panel */\n.ddl-preview-section { margin-top: 8px; }\n.ddl-preview-code {\n background: var(--mj-text-primary); color: var(--mj-color-neutral-300); padding: 10px;\n border-radius: 4px; font-size: 11px; line-height: 1.5;\n max-height: 200px; overflow: auto; white-space: pre-wrap;\n word-break: break-word; margin-top: 8px;\n}\n\n.add-form-actions { display: flex; gap: 6px; padding-top: 4px; }\n\n/* ===== Entity Map List ===== */\n.entity-map-list { display: flex; flex-direction: column; gap: 4px; }\n.entity-map-item {\n padding: 8px 10px; border-radius: 6px;\n cursor: pointer; border: 1px solid var(--mj-border-subtle); transition: all 0.15s;\n}\n.entity-map-item:hover { background: var(--mj-bg-page); }\n.entity-map-item.selected { background: var(--mj-status-info-bg); border-color: var(--mj-color-indigo-500); }\n.entity-map-item.pending { border-left: 3px solid var(--mj-status-warning); }\n\n.em-top-row {\n display: flex; align-items: center; gap: 4px;\n font-size: 13px; margin-bottom: 4px;\n}\n.em-name { font-weight: 600; }\n.em-arrow { color: var(--mj-text-disabled); font-size: 11px; }\n.em-entity { color: var(--mj-text-muted); }\n\n.em-bottom-row {\n display: flex; align-items: center; justify-content: space-between;\n font-size: 11px; color: var(--mj-text-disabled);\n}\n.em-badges { display: flex; gap: 4px; align-items: center; }\n.badge {\n font-size: 10px; padding: 1px 6px; border-radius: 4px; font-weight: 600;\n}\n.badge-direction { background: var(--mj-bg-surface-hover); color: var(--mj-text-muted); }\n.badge-pending { background: var(--mj-color-warning-50); color: var(--mj-color-warning-600); }\n\n.em-actions { display: flex; align-items: center; gap: 4px; }\n.em-delete {\n opacity: 0; transition: opacity 0.15s;\n cursor: pointer; color: var(--mj-color-error-600); background: none; border: none;\n padding: 2px 4px; font-size: 12px;\n}\n.entity-map-item:hover .em-delete { opacity: 1; }\n\n/* ===== Center Panel: Placeholder ===== */\n.placeholder-message {\n display: flex; flex-direction: column; align-items: center;\n justify-content: center; height: 300px; color: var(--mj-text-disabled);\n}\n.placeholder-message i { font-size: 36px; margin-bottom: 12px; }\n.placeholder-message p { text-align: center; }\n\n/* ===== Pending Entity Panel ===== */\n.pending-entity-panel {\n background: var(--mj-status-warning-bg); border: 1px solid var(--mj-color-warning-200); border-radius: 10px;\n padding: 24px; text-align: center;\n}\n.pending-icon { font-size: 40px; color: var(--mj-status-warning); margin-bottom: 12px; }\n.pending-entity-panel h3 { font-size: 16px; margin-bottom: 8px; }\n.pending-entity-panel p { font-size: 13px; color: var(--mj-text-disabled); margin-bottom: 16px; line-height: 1.5; }\n\n/* Stepper */\n.pending-steps {\n display: flex; gap: 0; margin: 20px 0; justify-content: center; align-items: center;\n}\n.step {\n display: flex; flex-direction: column; align-items: center; gap: 6px;\n padding: 0 16px;\n}\n.step-circle {\n width: 36px; height: 36px; border-radius: 50%;\n display: flex; align-items: center; justify-content: center;\n font-size: 14px; font-weight: 700;\n}\n.step-circle.done { background: var(--mj-status-success-bg); color: var(--mj-color-success-700); }\n.step-circle.current { background: var(--mj-color-indigo-500); color: var(--mj-bg-surface); }\n.step-circle.future { background: var(--mj-bg-surface-hover); color: var(--mj-text-disabled); }\n.step-label { font-size: 10px; font-weight: 600; color: var(--mj-text-disabled); text-transform: uppercase; white-space: nowrap; }\n.step-connector { width: 32px; height: 2px; background: var(--mj-border-default); align-self: center; margin-bottom: 18px; }\n.step-connector.done { background: var(--mj-color-success-700); }\n\n/* DDL in pending view */\n.ddl-preview-inline { margin-top: 16px; text-align: left; }\n.ddl-code-block {\n background: var(--mj-text-primary); color: var(--mj-color-neutral-300); padding: 12px;\n border-radius: 6px; font-size: 12px; line-height: 1.5;\n max-height: 250px; overflow: auto; white-space: pre-wrap;\n}\n.ddl-actions { display: flex; gap: 8px; margin-top: 12px; justify-content: center; }\n\n/* Pending fields list */\n.pending-fields-section { text-align: left; }\n.pending-fields-list {\n display: flex; flex-direction: column; gap: 2px;\n max-height: 200px; overflow-y: auto;\n}\n.pending-field-item {\n display: flex; align-items: center; gap: 8px;\n padding: 4px 8px; font-size: 13px; border-radius: 4px;\n}\n.pending-field-item:hover { background: var(--mj-status-warning-bg); }\n.pending-field-name { font-weight: 600; }\n.pending-field-type { font-size: 11px; color: var(--mj-text-disabled); background: var(--mj-bg-surface-hover); padding: 1px 6px; border-radius: 3px; }\n.pending-field-req { color: var(--mj-color-error-600); font-weight: 700; }\n\n/* ===== Auto-map banner ===== */\n.auto-map-banner {\n background: var(--mj-status-info-bg); border: 1px solid var(--mj-color-info-100); border-radius: 8px;\n padding: 12px 16px; margin-bottom: 16px;\n display: flex; align-items: center; gap: 12px;\n}\n.auto-map-banner > i { color: var(--mj-color-indigo-500); font-size: 18px; }\n.auto-map-banner .banner-text { flex: 1; }\n.auto-map-banner .banner-text p { font-size: 13px; color: var(--mj-text-muted); margin: 0; }\n.auto-map-banner .banner-text strong { color: var(--mj-text-primary); }\n\n/* ===== Field Mapping Editor ===== */\n.field-mapping-header {\n display: flex; align-items: center; justify-content: space-between;\n margin-bottom: 16px;\n}\n.field-mapping-actions { display: flex; gap: 6px; }\n\n/* ===== Field Map Cards (New world-class design) ===== */\n.field-map-cards {\n display: flex; flex-direction: column; gap: 6px;\n}\n\n.field-map-card {\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n background: var(--mj-bg-surface);\n transition: all 0.2s ease;\n overflow: hidden;\n}\n.field-map-card:hover {\n border-color: var(--mj-border-strong);\n box-shadow: 0 2px 8px rgba(74, 108, 247, 0.06);\n}\n.field-map-card.has-transform {\n border-left: 3px solid var(--mj-color-indigo-500);\n}\n.field-map-card.validation-error {\n border-color: var(--mj-color-warning-200);\n background: var(--mj-status-warning-bg);\n}\n\n/* Main mapping row */\n.fmc-row {\n display: flex; align-items: center; gap: 10px;\n padding: 10px 14px;\n}\n\n/* Source column */\n.fmc-source {\n flex: 1; min-width: 0;\n}\n.fmc-field-name {\n font-size: 13px; font-weight: 600; color: var(--mj-text-primary);\n white-space: nowrap; overflow: hidden; text-overflow: ellipsis;\n}\n.fmc-badges {\n display: flex; gap: 4px; margin-top: 3px; flex-wrap: wrap;\n}\n.fmc-badge {\n font-size: 9px; font-weight: 700; padding: 1px 5px;\n border-radius: 3px; text-transform: uppercase; letter-spacing: 0.3px;\n white-space: nowrap; line-height: 1.5;\n}\n.badge-type {\n background: var(--mj-bg-surface-hover); color: var(--mj-text-muted);\n}\n.badge-pk {\n background: linear-gradient(135deg, var(--mj-color-warning-100), var(--mj-color-warning-200));\n color: var(--mj-color-warning-800);\n}\n.badge-pk i { font-size: 8px; margin-right: 2px; }\n.badge-req {\n background: linear-gradient(135deg, var(--mj-color-error-100), var(--mj-color-error-200));\n color: var(--mj-color-error-800);\n}\n.badge-ro {\n background: var(--mj-color-purple-50); color: var(--mj-color-purple-700);\n}\n\n/* Transform zone (center arrow / pill) */\n.fmc-transform-zone {\n flex-shrink: 0;\n display: flex; align-items: center; justify-content: center;\n width: 100px;\n}\n.fmc-arrow-btn {\n width: 32px; height: 32px;\n border-radius: 50%; border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-page); color: var(--mj-text-disabled);\n cursor: pointer; font-size: 12px;\n display: flex; align-items: center; justify-content: center;\n transition: all 0.2s;\n}\n.fmc-arrow-btn:hover {\n background: var(--mj-color-indigo-500); color: var(--mj-bg-surface); border-color: var(--mj-color-indigo-500);\n transform: scale(1.1);\n}\n.fmc-transform-pill {\n display: flex; align-items: center; gap: 4px;\n padding: 4px 10px; border-radius: 16px;\n background: linear-gradient(135deg, var(--mj-color-indigo-50), var(--mj-color-indigo-100));\n border: 1px solid var(--mj-color-indigo-200); color: var(--mj-color-indigo-700);\n font-size: 11px; font-weight: 600;\n cursor: pointer; transition: all 0.2s;\n white-space: nowrap;\n}\n.fmc-transform-pill:hover {\n background: linear-gradient(135deg, var(--mj-color-indigo-100), var(--mj-color-indigo-200));\n transform: scale(1.02);\n}\n.fmc-transform-pill i { font-size: 10px; }\n.fmc-transform-direct {\n background: linear-gradient(135deg, var(--mj-bg-page), var(--mj-bg-surface-hover));\n border-color: var(--mj-color-neutral-300); color: var(--mj-text-muted);\n}\n.fmc-transform-direct:hover {\n background: linear-gradient(135deg, var(--mj-color-indigo-50), var(--mj-color-indigo-100));\n border-color: var(--mj-color-indigo-200); color: var(--mj-color-indigo-700);\n}\n.fmc-step-count {\n background: var(--mj-color-indigo-700); color: var(--mj-bg-surface); font-size: 9px;\n padding: 0 4px; border-radius: 8px; font-weight: 700;\n}\n\n/* Destination column */\n.fmc-dest {\n flex: 1; min-width: 0;\n}\n.fmc-select {\n width: 100%; padding: 6px 10px; border: 1px solid var(--mj-border-default);\n border-radius: 6px; font-size: 13px; color: var(--mj-text-primary);\n background: var(--mj-bg-page);\n transition: border-color 0.15s;\n}\n.fmc-select:focus { border-color: var(--mj-color-indigo-500); outline: none; box-shadow: 0 0 0 2px rgba(74, 108, 247, 0.12); }\n\n/* Shared input style */\n.fmc-input {\n width: 100%; padding: 5px 8px; border: 1px solid var(--mj-border-default);\n border-radius: 6px; font-size: 13px; color: var(--mj-text-primary);\n background: var(--mj-bg-page);\n transition: border-color 0.15s;\n}\n.fmc-input:focus { border-color: var(--mj-color-indigo-500); outline: none; box-shadow: 0 0 0 2px rgba(74, 108, 247, 0.12); }\n.fmc-input.mono { font-family: 'SF Mono', 'Fira Code', 'Consolas', monospace; font-size: 12px; }\n\n/* Flags (key, required) */\n.fmc-flags {\n display: flex; gap: 6px; flex-shrink: 0;\n}\n.fmc-flag {\n display: flex; align-items: center; gap: 3px;\n font-size: 11px; color: var(--mj-text-disabled); cursor: pointer;\n padding: 2px 4px; border-radius: 4px;\n transition: color 0.15s;\n}\n.fmc-flag:hover { color: var(--mj-color-indigo-500); }\n.fmc-flag input[type=\"checkbox\"] {\n width: 13px; height: 13px; cursor: pointer;\n accent-color: var(--mj-color-indigo-500);\n}\n.fmc-flag i { font-size: 10px; }\n.fmc-req-star { font-size: 14px; font-weight: 700; color: inherit; }\n\n/* Remove button */\n.fmc-remove {\n flex-shrink: 0;\n background: none; border: none; cursor: pointer;\n color: var(--mj-color-neutral-300); font-size: 13px; padding: 4px;\n border-radius: 4px; transition: all 0.15s;\n}\n.fmc-remove:hover { color: var(--mj-status-error); background: var(--mj-status-error-bg); }\n\n/* ===== Transform Pipeline Editor ===== */\n.fmc-transform-editor {\n border-top: 1px solid var(--mj-bg-surface-hover);\n background: linear-gradient(180deg, var(--mj-color-indigo-50) 0%, var(--mj-bg-page) 100%);\n padding: 12px 14px;\n}\n.fmc-te-header {\n display: flex; align-items: center; justify-content: space-between;\n margin-bottom: 10px;\n}\n.fmc-te-title {\n font-size: 11px; font-weight: 700; color: var(--mj-color-indigo-500);\n text-transform: uppercase; letter-spacing: 0.5px;\n}\n.fmc-te-title i { margin-right: 4px; }\n.fmc-te-add {\n font-size: 11px; font-weight: 600; color: var(--mj-color-indigo-500);\n background: none; border: 1px solid var(--mj-color-indigo-200);\n border-radius: 6px; padding: 3px 10px;\n cursor: pointer; transition: all 0.15s;\n}\n.fmc-te-add:hover { background: var(--mj-color-indigo-50); }\n.fmc-te-add i { margin-right: 3px; font-size: 10px; }\n\n/* Individual transform step */\n.fmc-te-step {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 10px 12px;\n margin-bottom: 8px;\n transition: box-shadow 0.15s;\n}\n.fmc-te-step:hover { box-shadow: 0 1px 4px rgba(0,0,0,0.05); }\n.fmc-te-step:last-child { margin-bottom: 0; }\n\n.fmc-te-step-header {\n display: flex; align-items: center; gap: 8px; margin-bottom: 8px;\n}\n.fmc-te-step-num {\n width: 22px; height: 22px; border-radius: 50%;\n background: linear-gradient(135deg, var(--mj-color-indigo-500), var(--mj-color-indigo-500));\n color: var(--mj-bg-surface); font-size: 11px; font-weight: 700;\n display: flex; align-items: center; justify-content: center;\n flex-shrink: 0;\n}\n.fmc-te-type-select {\n flex: 1; padding: 4px 8px; border: 1px solid var(--mj-border-default);\n border-radius: 6px; font-size: 12px; font-weight: 600;\n color: var(--mj-text-primary); background: var(--mj-bg-page);\n}\n.fmc-te-type-select:focus { border-color: var(--mj-color-indigo-500); outline: none; }\n.fmc-te-error-select {\n width: 100px; padding: 4px 6px; border: 1px solid var(--mj-border-default);\n border-radius: 6px; font-size: 11px; color: var(--mj-text-muted);\n background: var(--mj-bg-page);\n}\n.fmc-te-error-select:focus { border-color: var(--mj-color-indigo-500); outline: none; }\n.fmc-te-remove-step {\n background: none; border: none; cursor: pointer;\n color: var(--mj-color-neutral-300); font-size: 12px; padding: 4px;\n border-radius: 4px; transition: all 0.15s;\n}\n.fmc-te-remove-step:hover { color: var(--mj-status-error); background: var(--mj-status-error-bg); }\n\n/* Config area */\n.fmc-te-config {\n padding-left: 30px;\n}\n.fmc-te-field {\n margin-bottom: 8px;\n}\n.fmc-te-field:last-child { margin-bottom: 0; }\n.fmc-te-field label {\n display: block; font-size: 11px; font-weight: 600;\n color: var(--mj-text-muted); margin-bottom: 3px;\n}\n.fmc-te-field label code {\n background: var(--mj-bg-surface-hover); padding: 0 3px; border-radius: 3px;\n font-size: 10px; color: var(--mj-color-indigo-700);\n}\n.fmc-te-hint { font-weight: 400; color: var(--mj-text-disabled); }\n.fmc-te-row {\n display: flex; gap: 10px; align-items: flex-end;\n}\n.fmc-te-sm { max-width: 140px; }\n.fmc-textarea {\n resize: vertical; min-height: 40px;\n}\n\n/* Combine chips */\n.fmc-combine-chips {\n display: flex; flex-wrap: wrap; gap: 4px; margin-top: 4px;\n}\n.fmc-chip {\n font-size: 11px; padding: 3px 8px; border-radius: 14px;\n border: 1px solid var(--mj-border-default); background: var(--mj-bg-surface);\n color: var(--mj-text-muted); cursor: pointer;\n transition: all 0.15s; font-weight: 500;\n}\n.fmc-chip:hover { border-color: var(--mj-color-indigo-300); color: var(--mj-color-indigo-700); }\n.fmc-chip.selected {\n background: linear-gradient(135deg, var(--mj-color-indigo-50), var(--mj-color-indigo-100));\n border-color: var(--mj-color-indigo-400); color: var(--mj-color-indigo-700); font-weight: 600;\n}\n\n/* Lookup table */\n.fmc-lookup-table {\n display: flex; flex-direction: column; gap: 4px; margin-top: 4px;\n}\n.fmc-lookup-row {\n display: flex; align-items: center; gap: 6px;\n}\n.fmc-lookup-row .fmc-input { flex: 1; }\n.fmc-lookup-arrow { color: var(--mj-color-indigo-200); font-size: 10px; flex-shrink: 0; }\n.fmc-lookup-del {\n background: none; border: none; cursor: pointer;\n color: var(--mj-color-neutral-300); font-size: 11px; padding: 2px;\n transition: color 0.15s;\n}\n.fmc-lookup-del:hover { color: var(--mj-status-error); }\n.fmc-lookup-add {\n font-size: 11px; color: var(--mj-color-indigo-500); background: none;\n border: 1px dashed var(--mj-color-indigo-200); border-radius: 6px;\n padding: 4px 10px; cursor: pointer;\n transition: all 0.15s; margin-top: 2px;\n}\n.fmc-lookup-add:hover { background: var(--mj-color-indigo-50); }\n.fmc-lookup-add i { margin-right: 3px; font-size: 10px; }\n\n/* ===== Data Preview ===== */\n.data-preview-section { margin-top: 24px; border-top: 1px solid var(--mj-border-subtle); padding-top: 16px; }\n.preview-actions { display: flex; gap: 8px; margin-bottom: 12px; }\n\n.preview-panel {\n background: var(--mj-bg-page); border: 1px solid var(--mj-border-default); border-radius: 8px;\n padding: 12px; margin-bottom: 12px;\n}\n.preview-panel-header {\n display: flex; align-items: center; justify-content: space-between;\n margin-bottom: 8px;\n}\n.preview-panel-header h4 { font-size: 13px; font-weight: 600; margin: 0; }\n.preview-panel-header h4 i { margin-right: 6px; color: var(--mj-color-indigo-500); }\n\n.preview-table-wrapper { overflow-x: auto; }\n.preview-table {\n width: 100%; border-collapse: collapse; font-size: 12px;\n}\n.preview-table th {\n text-align: left; padding: 5px 8px;\n background: var(--mj-border-default); font-weight: 600; font-size: 10px;\n text-transform: uppercase; color: var(--mj-text-muted);\n border-bottom: 1px solid var(--mj-border-default); white-space: nowrap;\n}\n.preview-table td {\n padding: 4px 8px; border-bottom: 1px solid var(--mj-border-subtle);\n white-space: nowrap; max-width: 150px; overflow: hidden; text-overflow: ellipsis;\n}\n.preview-table tr:hover { background: var(--mj-status-info-bg); }\n\n/* ===== Right panel: run details ===== */\n.run-summary-card {\n background: var(--mj-bg-page); border-radius: 8px; padding: 12px;\n}\n.run-summary-row {\n display: flex; justify-content: space-between;\n padding: 4px 0; font-size: 13px;\n}\n.run-summary-row .label { color: var(--mj-text-muted); font-weight: 500; }\n.run-status {\n font-size: 11px; padding: 2px 6px; border-radius: 4px; font-weight: 600;\n}\n.status-green { background: var(--mj-status-success-bg); color: var(--mj-color-success-700); }\n.status-amber { background: var(--mj-color-warning-50); color: var(--mj-color-warning-600); }\n.status-red { background: var(--mj-status-error-bg); color: var(--mj-color-error-600); }\n\n.entity-stat-card {\n background: var(--mj-bg-page); border-radius: 6px; padding: 10px;\n margin-bottom: 8px;\n}\n.entity-stat-name { font-size: 13px; font-weight: 600; margin-bottom: 6px; }\n.entity-stat-grid { display: flex; gap: 12px; }\n.mini-stat { text-align: center; }\n.mini-val { display: block; font-size: 16px; font-weight: 600; }\n.mini-val.has-errors { color: var(--mj-color-error-600); }\n.mini-label { font-size: 10px; color: var(--mj-text-disabled); }\n\n/* ===== Validation ===== */\n.validation-banner {\n background: var(--mj-color-warning-50); border: 1px solid var(--mj-color-warning-200); border-radius: 8px;\n padding: 10px 14px; margin-bottom: 14px;\n display: flex; align-items: flex-start; gap: 10px;\n font-size: 13px; color: var(--mj-color-warning-600);\n}\n.validation-banner > i { margin-top: 2px; }\n.validation-warnings { display: flex; flex-direction: column; gap: 2px; }\n\n.field-map-card.validation-error .fmc-source {\n border-left: 3px solid var(--mj-color-warning-600);\n padding-left: 8px;\n}\n\n/* ===== Responsive ===== */\n@media (max-width: 1100px) { .right-panel { display: none; } }\n@media (max-width: 800px) { .left-panel { width: 260px; } }\n"] }]
2368
2356
  }], null, null); })();
2369
2357
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MappingWorkspaceComponent, { className: "MappingWorkspaceComponent", filePath: "src/Integration/components/mapping-workspace/mapping-workspace.component.ts", lineNumber: 118 }); })();
2370
2358
  export function LoadMappingWorkspace() {