@memberjunction/ng-dashboards 5.30.1 → 5.32.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 (424) hide show
  1. package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
  2. package/dist/AI/components/agents/agent-configuration.component.js +4 -4
  3. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  4. package/dist/AI/components/agents/agent-editor.component.d.ts +2 -1
  5. package/dist/AI/components/agents/agent-editor.component.d.ts.map +1 -1
  6. package/dist/AI/components/agents/agent-editor.component.js +8 -6
  7. package/dist/AI/components/agents/agent-editor.component.js.map +1 -1
  8. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts +2 -1
  9. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts.map +1 -1
  10. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js +6 -5
  11. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js.map +1 -1
  12. package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts +2 -1
  13. package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts.map +1 -1
  14. package/dist/AI/components/analytics/cost-budget/cost-budget.component.js +6 -5
  15. package/dist/AI/components/analytics/cost-budget/cost-budget.component.js.map +1 -1
  16. package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts +2 -1
  17. package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts.map +1 -1
  18. package/dist/AI/components/analytics/error-analysis/error-analysis.component.js +6 -5
  19. package/dist/AI/components/analytics/error-analysis/error-analysis.component.js.map +1 -1
  20. package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts +2 -1
  21. package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts.map +1 -1
  22. package/dist/AI/components/analytics/executive-summary/executive-summary.component.js +7 -4
  23. package/dist/AI/components/analytics/executive-summary/executive-summary.component.js.map +1 -1
  24. package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts +3 -2
  25. package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts.map +1 -1
  26. package/dist/AI/components/analytics/model-performance/model-performance.component.js +10 -6
  27. package/dist/AI/components/analytics/model-performance/model-performance.component.js.map +1 -1
  28. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts +2 -1
  29. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts.map +1 -1
  30. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js +6 -5
  31. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js.map +1 -1
  32. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts +2 -1
  33. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts.map +1 -1
  34. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js +6 -5
  35. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js.map +1 -1
  36. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
  37. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +55 -52
  38. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
  39. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +15 -15
  40. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
  41. package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
  42. package/dist/AI/components/execution-monitoring.component.js +4 -3
  43. package/dist/AI/components/execution-monitoring.component.js.map +1 -1
  44. package/dist/AI/components/models/model-management.component.js +2 -2
  45. package/dist/AI/components/models/model-management.component.js.map +1 -1
  46. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts +2 -1
  47. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts.map +1 -1
  48. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +10 -8
  49. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
  50. package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
  51. package/dist/AI/components/prompts/prompt-management.component.js +2 -2
  52. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  53. package/dist/AI/components/prompts/prompt-version-control.component.d.ts +2 -1
  54. package/dist/AI/components/prompts/prompt-version-control.component.d.ts.map +1 -1
  55. package/dist/AI/components/prompts/prompt-version-control.component.js +13 -10
  56. package/dist/AI/components/prompts/prompt-version-control.component.js.map +1 -1
  57. package/dist/AI/components/requests/agent-requests-resource.component.js +1 -1
  58. package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
  59. package/dist/AI/components/tags/tags-resource.component.d.ts +1181 -0
  60. package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -0
  61. package/dist/AI/components/tags/tags-resource.component.js +7487 -0
  62. package/dist/AI/components/tags/tags-resource.component.js.map +1 -0
  63. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
  64. package/dist/AI/components/vectors/vector-management-resource.component.js +25 -21
  65. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  66. package/dist/AI/index.d.ts +1 -0
  67. package/dist/AI/index.d.ts.map +1 -1
  68. package/dist/AI/index.js +5 -0
  69. package/dist/AI/index.js.map +1 -1
  70. package/dist/AI/services/ai-instrumentation.service.d.ts +5 -0
  71. package/dist/AI/services/ai-instrumentation.service.d.ts.map +1 -1
  72. package/dist/AI/services/ai-instrumentation.service.js +12 -4
  73. package/dist/AI/services/ai-instrumentation.service.js.map +1 -1
  74. package/dist/APIKeys/api-applications-panel.component.d.ts +3 -2
  75. package/dist/APIKeys/api-applications-panel.component.d.ts.map +1 -1
  76. package/dist/APIKeys/api-applications-panel.component.js +5 -4
  77. package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
  78. package/dist/APIKeys/api-key-create-dialog.component.d.ts +2 -1
  79. package/dist/APIKeys/api-key-create-dialog.component.d.ts.map +1 -1
  80. package/dist/APIKeys/api-key-create-dialog.component.js +5 -5
  81. package/dist/APIKeys/api-key-create-dialog.component.js.map +1 -1
  82. package/dist/APIKeys/api-key-edit-panel.component.d.ts +3 -2
  83. package/dist/APIKeys/api-key-edit-panel.component.d.ts.map +1 -1
  84. package/dist/APIKeys/api-key-edit-panel.component.js +11 -10
  85. package/dist/APIKeys/api-key-edit-panel.component.js.map +1 -1
  86. package/dist/APIKeys/api-key-list.component.d.ts +2 -1
  87. package/dist/APIKeys/api-key-list.component.d.ts.map +1 -1
  88. package/dist/APIKeys/api-key-list.component.js +6 -5
  89. package/dist/APIKeys/api-key-list.component.js.map +1 -1
  90. package/dist/APIKeys/api-keys-resource.component.d.ts.map +1 -1
  91. package/dist/APIKeys/api-keys-resource.component.js +4 -4
  92. package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
  93. package/dist/APIKeys/api-scopes-panel.component.d.ts +3 -2
  94. package/dist/APIKeys/api-scopes-panel.component.d.ts.map +1 -1
  95. package/dist/APIKeys/api-scopes-panel.component.js +8 -6
  96. package/dist/APIKeys/api-scopes-panel.component.js.map +1 -1
  97. package/dist/APIKeys/api-usage-panel.component.d.ts +3 -2
  98. package/dist/APIKeys/api-usage-panel.component.d.ts.map +1 -1
  99. package/dist/APIKeys/api-usage-panel.component.js +10 -8
  100. package/dist/APIKeys/api-usage-panel.component.js.map +1 -1
  101. package/dist/Actions/components/actions-list-view.component.d.ts +2 -1
  102. package/dist/Actions/components/actions-list-view.component.d.ts.map +1 -1
  103. package/dist/Actions/components/actions-list-view.component.js +6 -5
  104. package/dist/Actions/components/actions-list-view.component.js.map +1 -1
  105. package/dist/Actions/components/actions-overview.component.js +2 -2
  106. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  107. package/dist/Actions/components/categories-list-view.component.d.ts +2 -1
  108. package/dist/Actions/components/categories-list-view.component.d.ts.map +1 -1
  109. package/dist/Actions/components/categories-list-view.component.js +6 -5
  110. package/dist/Actions/components/categories-list-view.component.js.map +1 -1
  111. package/dist/Actions/components/execution-monitoring.component.js +1 -1
  112. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  113. package/dist/Actions/components/explorer/action-card.component.d.ts +2 -1
  114. package/dist/Actions/components/explorer/action-card.component.d.ts.map +1 -1
  115. package/dist/Actions/components/explorer/action-card.component.js +6 -4
  116. package/dist/Actions/components/explorer/action-card.component.js.map +1 -1
  117. package/dist/Actions/components/explorer/action-explorer.component.js +1 -1
  118. package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
  119. package/dist/Actions/components/explorer/new-action-panel.component.d.ts +2 -1
  120. package/dist/Actions/components/explorer/new-action-panel.component.d.ts.map +1 -1
  121. package/dist/Actions/components/explorer/new-action-panel.component.js +7 -5
  122. package/dist/Actions/components/explorer/new-action-panel.component.js.map +1 -1
  123. package/dist/Actions/components/explorer/new-category-panel.component.d.ts +2 -1
  124. package/dist/Actions/components/explorer/new-category-panel.component.d.ts.map +1 -1
  125. package/dist/Actions/components/explorer/new-category-panel.component.js +7 -5
  126. package/dist/Actions/components/explorer/new-category-panel.component.js.map +1 -1
  127. package/dist/ApplicationRoles/application-roles-resource.component.js +4 -4
  128. package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
  129. package/dist/Communication/communication-logs-resource.component.js +1 -1
  130. package/dist/Communication/communication-logs-resource.component.js.map +1 -1
  131. package/dist/Communication/communication-monitor-resource.component.js +1 -1
  132. package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
  133. package/dist/Communication/communication-providers-resource.component.js +3 -3
  134. package/dist/Communication/communication-providers-resource.component.js.map +1 -1
  135. package/dist/Communication/communication-runs-resource.component.js +1 -1
  136. package/dist/Communication/communication-runs-resource.component.js.map +1 -1
  137. package/dist/Communication/communication-templates-resource.component.js +3 -3
  138. package/dist/Communication/communication-templates-resource.component.js.map +1 -1
  139. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts +1 -1
  140. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
  141. package/dist/ComponentStudio/component-studio-dashboard.component.js +5 -4
  142. package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
  143. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts +2 -1
  144. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts.map +1 -1
  145. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js +6 -4
  146. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js.map +1 -1
  147. package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts +11 -2
  148. package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts.map +1 -1
  149. package/dist/ComponentStudio/components/artifact-load-dialog.component.js +61 -27
  150. package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
  151. package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts +4 -2
  152. package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
  153. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +19 -11
  154. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
  155. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.d.ts +4 -2
  156. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.d.ts.map +1 -1
  157. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js +11 -3
  158. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js.map +1 -1
  159. package/dist/ComponentStudio/components/workspace/component-preview.component.d.ts +10 -1
  160. package/dist/ComponentStudio/components/workspace/component-preview.component.d.ts.map +1 -1
  161. package/dist/ComponentStudio/components/workspace/component-preview.component.js +18 -9
  162. package/dist/ComponentStudio/components/workspace/component-preview.component.js.map +1 -1
  163. package/dist/ComponentStudio/services/component-studio-state.service.d.ts +11 -1
  164. package/dist/ComponentStudio/services/component-studio-state.service.d.ts.map +1 -1
  165. package/dist/ComponentStudio/services/component-studio-state.service.js +23 -3
  166. package/dist/ComponentStudio/services/component-studio-state.service.js.map +1 -1
  167. package/dist/ComponentStudio/services/component-version.service.d.ts +6 -1
  168. package/dist/ComponentStudio/services/component-version.service.d.ts.map +1 -1
  169. package/dist/ComponentStudio/services/component-version.service.js +16 -6
  170. package/dist/ComponentStudio/services/component-version.service.js.map +1 -1
  171. package/dist/Credentials/components/credentials-audit-resource.component.js +1 -1
  172. package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
  173. package/dist/Credentials/components/credentials-categories-resource.component.d.ts.map +1 -1
  174. package/dist/Credentials/components/credentials-categories-resource.component.js +3 -3
  175. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  176. package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
  177. package/dist/Credentials/components/credentials-list-resource.component.js +3 -3
  178. package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
  179. package/dist/Credentials/components/credentials-overview-resource.component.d.ts.map +1 -1
  180. package/dist/Credentials/components/credentials-overview-resource.component.js +3 -3
  181. package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
  182. package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
  183. package/dist/Credentials/components/credentials-types-resource.component.js +3 -3
  184. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  185. package/dist/Credentials/credentials-dashboard.component.js +1 -1
  186. package/dist/Credentials/credentials-dashboard.component.js.map +1 -1
  187. package/dist/DashboardBrowser/dashboard-browser-resource.component.js +13 -13
  188. package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
  189. package/dist/DashboardBrowser/dashboard-share-adapter.d.ts +4 -0
  190. package/dist/DashboardBrowser/dashboard-share-adapter.d.ts.map +1 -1
  191. package/dist/DashboardBrowser/dashboard-share-adapter.js +5 -2
  192. package/dist/DashboardBrowser/dashboard-share-adapter.js.map +1 -1
  193. package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts +3 -1
  194. package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts.map +1 -1
  195. package/dist/DashboardBrowser/dashboard-share-dialog.component.js +9 -4
  196. package/dist/DashboardBrowser/dashboard-share-dialog.component.js.map +1 -1
  197. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts +3 -2
  198. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts.map +1 -1
  199. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js +7 -6
  200. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js.map +1 -1
  201. package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts +3 -2
  202. package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts.map +1 -1
  203. package/dist/DataExplorer/components/view-selector/view-selector.component.js +6 -5
  204. package/dist/DataExplorer/components/view-selector/view-selector.component.js.map +1 -1
  205. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
  206. package/dist/DataExplorer/data-explorer-dashboard.component.js +10 -9
  207. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  208. package/dist/DataExplorer/services/explorer-state.service.d.ts +6 -1
  209. package/dist/DataExplorer/services/explorer-state.service.d.ts.map +1 -1
  210. package/dist/DataExplorer/services/explorer-state.service.js +15 -5
  211. package/dist/DataExplorer/services/explorer-state.service.js.map +1 -1
  212. package/dist/DatabaseDesigner/components/create-wizard/database-create-wizard.component.d.ts +64 -0
  213. package/dist/DatabaseDesigner/components/create-wizard/database-create-wizard.component.d.ts.map +1 -0
  214. package/dist/DatabaseDesigner/components/create-wizard/database-create-wizard.component.js +400 -0
  215. package/dist/DatabaseDesigner/components/create-wizard/database-create-wizard.component.js.map +1 -0
  216. package/dist/DatabaseDesigner/components/create-wizard/steps/step-basics.component.d.ts +42 -0
  217. package/dist/DatabaseDesigner/components/create-wizard/steps/step-basics.component.d.ts.map +1 -0
  218. package/dist/DatabaseDesigner/components/create-wizard/steps/step-basics.component.js +232 -0
  219. package/dist/DatabaseDesigner/components/create-wizard/steps/step-basics.component.js.map +1 -0
  220. package/dist/DatabaseDesigner/components/create-wizard/steps/step-fields.component.d.ts +14 -0
  221. package/dist/DatabaseDesigner/components/create-wizard/steps/step-fields.component.d.ts.map +1 -0
  222. package/dist/DatabaseDesigner/components/create-wizard/steps/step-fields.component.js +38 -0
  223. package/dist/DatabaseDesigner/components/create-wizard/steps/step-fields.component.js.map +1 -0
  224. package/dist/DatabaseDesigner/components/create-wizard/steps/step-pipeline.component.d.ts +24 -0
  225. package/dist/DatabaseDesigner/components/create-wizard/steps/step-pipeline.component.d.ts.map +1 -0
  226. package/dist/DatabaseDesigner/components/create-wizard/steps/step-pipeline.component.js +77 -0
  227. package/dist/DatabaseDesigner/components/create-wizard/steps/step-pipeline.component.js.map +1 -0
  228. package/dist/DatabaseDesigner/components/create-wizard/steps/step-relationships.component.d.ts +88 -0
  229. package/dist/DatabaseDesigner/components/create-wizard/steps/step-relationships.component.d.ts.map +1 -0
  230. package/dist/DatabaseDesigner/components/create-wizard/steps/step-relationships.component.js +404 -0
  231. package/dist/DatabaseDesigner/components/create-wizard/steps/step-relationships.component.js.map +1 -0
  232. package/dist/DatabaseDesigner/components/create-wizard/steps/step-review.component.d.ts +12 -0
  233. package/dist/DatabaseDesigner/components/create-wizard/steps/step-review.component.d.ts.map +1 -0
  234. package/dist/DatabaseDesigner/components/create-wizard/steps/step-review.component.js +116 -0
  235. package/dist/DatabaseDesigner/components/create-wizard/steps/step-review.component.js.map +1 -0
  236. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts +55 -0
  237. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts.map +1 -0
  238. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +204 -0
  239. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js.map +1 -0
  240. package/dist/DatabaseDesigner/components/entity-list.component.d.ts +61 -0
  241. package/dist/DatabaseDesigner/components/entity-list.component.d.ts.map +1 -0
  242. package/dist/DatabaseDesigner/components/entity-list.component.js +485 -0
  243. package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -0
  244. package/dist/DatabaseDesigner/components/modify/database-modify.component.d.ts +52 -0
  245. package/dist/DatabaseDesigner/components/modify/database-modify.component.d.ts.map +1 -0
  246. package/dist/DatabaseDesigner/components/modify/database-modify.component.js +320 -0
  247. package/dist/DatabaseDesigner/components/modify/database-modify.component.js.map +1 -0
  248. package/dist/DatabaseDesigner/components/shared/database-preview-pane.component.d.ts +79 -0
  249. package/dist/DatabaseDesigner/components/shared/database-preview-pane.component.d.ts.map +1 -0
  250. package/dist/DatabaseDesigner/components/shared/database-preview-pane.component.js +378 -0
  251. package/dist/DatabaseDesigner/components/shared/database-preview-pane.component.js.map +1 -0
  252. package/dist/DatabaseDesigner/components/shared/entity-fields-grid.component.d.ts +85 -0
  253. package/dist/DatabaseDesigner/components/shared/entity-fields-grid.component.d.ts.map +1 -0
  254. package/dist/DatabaseDesigner/components/shared/entity-fields-grid.component.js +429 -0
  255. package/dist/DatabaseDesigner/components/shared/entity-fields-grid.component.js.map +1 -0
  256. package/dist/DatabaseDesigner/components/shared/entity-pipeline-panel.component.d.ts +58 -0
  257. package/dist/DatabaseDesigner/components/shared/entity-pipeline-panel.component.d.ts.map +1 -0
  258. package/dist/DatabaseDesigner/components/shared/entity-pipeline-panel.component.js +333 -0
  259. package/dist/DatabaseDesigner/components/shared/entity-pipeline-panel.component.js.map +1 -0
  260. package/dist/DatabaseDesigner/components/shared/entity-review-panel.component.d.ts +36 -0
  261. package/dist/DatabaseDesigner/components/shared/entity-review-panel.component.d.ts.map +1 -0
  262. package/dist/DatabaseDesigner/components/shared/entity-review-panel.component.js +345 -0
  263. package/dist/DatabaseDesigner/components/shared/entity-review-panel.component.js.map +1 -0
  264. package/dist/DatabaseDesigner/components/shared/wizard-step-indicator.component.d.ts +13 -0
  265. package/dist/DatabaseDesigner/components/shared/wizard-step-indicator.component.d.ts.map +1 -0
  266. package/dist/DatabaseDesigner/components/shared/wizard-step-indicator.component.js +81 -0
  267. package/dist/DatabaseDesigner/components/shared/wizard-step-indicator.component.js.map +1 -0
  268. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +30 -0
  269. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -0
  270. package/dist/DatabaseDesigner/database-designer-dashboards.module.js +131 -0
  271. package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -0
  272. package/dist/DatabaseDesigner/database-designer-erd.d.ts +19 -0
  273. package/dist/DatabaseDesigner/database-designer-erd.d.ts.map +1 -0
  274. package/dist/DatabaseDesigner/database-designer-erd.js +84 -0
  275. package/dist/DatabaseDesigner/database-designer-erd.js.map +1 -0
  276. package/dist/DatabaseDesigner/database-designer.types.d.ts +167 -0
  277. package/dist/DatabaseDesigner/database-designer.types.d.ts.map +1 -0
  278. package/dist/DatabaseDesigner/database-designer.types.js +26 -0
  279. package/dist/DatabaseDesigner/database-designer.types.js.map +1 -0
  280. package/dist/DatabaseDesigner/services/database-designer.engine.d.ts +94 -0
  281. package/dist/DatabaseDesigner/services/database-designer.engine.d.ts.map +1 -0
  282. package/dist/DatabaseDesigner/services/database-designer.engine.js +392 -0
  283. package/dist/DatabaseDesigner/services/database-designer.engine.js.map +1 -0
  284. package/dist/DatabaseDesigner/services/database-designer.service.d.ts +78 -0
  285. package/dist/DatabaseDesigner/services/database-designer.service.d.ts.map +1 -0
  286. package/dist/DatabaseDesigner/services/database-designer.service.js +273 -0
  287. package/dist/DatabaseDesigner/services/database-designer.service.js.map +1 -0
  288. package/dist/DatabaseDesigner/services/entity-wizard-state.service.d.ts +79 -0
  289. package/dist/DatabaseDesigner/services/entity-wizard-state.service.d.ts.map +1 -0
  290. package/dist/DatabaseDesigner/services/entity-wizard-state.service.js +204 -0
  291. package/dist/DatabaseDesigner/services/entity-wizard-state.service.js.map +1 -0
  292. package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
  293. package/dist/EntityAdmin/entity-admin-dashboard.component.js +2 -2
  294. package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
  295. package/dist/Home/action-pin-config-dialog.component.d.ts +2 -1
  296. package/dist/Home/action-pin-config-dialog.component.d.ts.map +1 -1
  297. package/dist/Home/action-pin-config-dialog.component.js +6 -4
  298. package/dist/Home/action-pin-config-dialog.component.js.map +1 -1
  299. package/dist/Home/action-pin-runner-dialog.component.d.ts +2 -1
  300. package/dist/Home/action-pin-runner-dialog.component.d.ts.map +1 -1
  301. package/dist/Home/action-pin-runner-dialog.component.js +5 -4
  302. package/dist/Home/action-pin-runner-dialog.component.js.map +1 -1
  303. package/dist/Home/home-application.d.ts.map +1 -1
  304. package/dist/Home/home-application.js +10 -12
  305. package/dist/Home/home-application.js.map +1 -1
  306. package/dist/Home/home-dashboard.component.d.ts.map +1 -1
  307. package/dist/Home/home-dashboard.component.js +3 -3
  308. package/dist/Home/home-dashboard.component.js.map +1 -1
  309. package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
  310. package/dist/Integration/components/activity/activity.component.js +1 -0
  311. package/dist/Integration/components/activity/activity.component.js.map +1 -1
  312. package/dist/Integration/components/connections/connections.component.d.ts.map +1 -1
  313. package/dist/Integration/components/connections/connections.component.js +11 -10
  314. package/dist/Integration/components/connections/connections.component.js.map +1 -1
  315. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.d.ts.map +1 -1
  316. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +2 -2
  317. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
  318. package/dist/Integration/components/overview/overview.component.d.ts.map +1 -1
  319. package/dist/Integration/components/overview/overview.component.js +1 -0
  320. package/dist/Integration/components/overview/overview.component.js.map +1 -1
  321. package/dist/Integration/components/pipelines/pipelines.component.d.ts.map +1 -1
  322. package/dist/Integration/components/pipelines/pipelines.component.js +1 -0
  323. package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
  324. package/dist/Integration/components/schedules/schedules.component.d.ts.map +1 -1
  325. package/dist/Integration/components/schedules/schedules.component.js +5 -4
  326. package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
  327. package/dist/Integration/services/integration-data.service.d.ts +5 -1
  328. package/dist/Integration/services/integration-data.service.d.ts.map +1 -1
  329. package/dist/Integration/services/integration-data.service.js +27 -19
  330. package/dist/Integration/services/integration-data.service.js.map +1 -1
  331. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +6 -6
  332. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
  333. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts.map +1 -1
  334. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +8 -6
  335. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
  336. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +6 -6
  337. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
  338. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +3 -3
  339. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -1
  340. package/dist/Lists/components/lists-browse-resource.component.js +6 -6
  341. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  342. package/dist/Lists/components/lists-categories-resource.component.js +4 -4
  343. package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
  344. package/dist/Lists/components/lists-my-lists-resource.component.js +6 -6
  345. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  346. package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
  347. package/dist/Lists/components/lists-operations-resource.component.js +11 -10
  348. package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
  349. package/dist/Lists/services/list-set-operations.service.d.ts +5 -0
  350. package/dist/Lists/services/list-set-operations.service.d.ts.map +1 -1
  351. package/dist/Lists/services/list-set-operations.service.js +11 -3
  352. package/dist/Lists/services/list-set-operations.service.js.map +1 -1
  353. package/dist/MCP/components/mcp-connection-dialog.component.d.ts +2 -1
  354. package/dist/MCP/components/mcp-connection-dialog.component.d.ts.map +1 -1
  355. package/dist/MCP/components/mcp-connection-dialog.component.js +8 -6
  356. package/dist/MCP/components/mcp-connection-dialog.component.js.map +1 -1
  357. package/dist/MCP/components/mcp-server-dialog.component.d.ts +2 -1
  358. package/dist/MCP/components/mcp-server-dialog.component.d.ts.map +1 -1
  359. package/dist/MCP/components/mcp-server-dialog.component.js +7 -5
  360. package/dist/MCP/components/mcp-server-dialog.component.js.map +1 -1
  361. package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
  362. package/dist/MCP/mcp-dashboard.component.js +12 -12
  363. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  364. package/dist/Permissions/permissions-shared.d.ts +3 -3
  365. package/dist/Permissions/permissions-shared.d.ts.map +1 -1
  366. package/dist/Permissions/permissions-shared.js +5 -5
  367. package/dist/Permissions/permissions-shared.js.map +1 -1
  368. package/dist/Permissions/resource-access-resource.component.js +1 -1
  369. package/dist/Permissions/resource-access-resource.component.js.map +1 -1
  370. package/dist/Permissions/user-access-resource.component.js +1 -2
  371. package/dist/Permissions/user-access-resource.component.js.map +1 -1
  372. package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
  373. package/dist/QueryBrowser/query-browser-resource.component.js +2 -2
  374. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  375. package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
  376. package/dist/Scheduling/scheduling-dashboard.component.js +1 -0
  377. package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
  378. package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts +5 -0
  379. package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts.map +1 -1
  380. package/dist/Scheduling/services/scheduling-instrumentation.service.js +21 -13
  381. package/dist/Scheduling/services/scheduling-instrumentation.service.js.map +1 -1
  382. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
  383. package/dist/SystemDiagnostics/system-diagnostics.component.js +2 -2
  384. package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
  385. package/dist/Testing/components/testing-explorer.component.d.ts +2 -1
  386. package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
  387. package/dist/Testing/components/testing-explorer.component.js +9 -7
  388. package/dist/Testing/components/testing-explorer.component.js.map +1 -1
  389. package/dist/Testing/services/testing-instrumentation.service.d.ts +6 -1
  390. package/dist/Testing/services/testing-instrumentation.service.d.ts.map +1 -1
  391. package/dist/Testing/services/testing-instrumentation.service.js +21 -11
  392. package/dist/Testing/services/testing-instrumentation.service.js.map +1 -1
  393. package/dist/Testing/testing-dashboard.component.d.ts +3 -1
  394. package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
  395. package/dist/Testing/testing-dashboard.component.js +15 -11
  396. package/dist/Testing/testing-dashboard.component.js.map +1 -1
  397. package/dist/VersionHistory/components/diff-resource.component.d.ts.map +1 -1
  398. package/dist/VersionHistory/components/diff-resource.component.js +5 -5
  399. package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
  400. package/dist/VersionHistory/components/graph-resource.component.d.ts.map +1 -1
  401. package/dist/VersionHistory/components/graph-resource.component.js +1 -2
  402. package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
  403. package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -1
  404. package/dist/VersionHistory/components/labels-resource.component.js +3 -3
  405. package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
  406. package/dist/VersionHistory/components/restore-resource.component.js +1 -1
  407. package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
  408. package/dist/ai-dashboards.module.d.ts +35 -34
  409. package/dist/ai-dashboards.module.d.ts.map +1 -1
  410. package/dist/ai-dashboards.module.js +6 -0
  411. package/dist/ai-dashboards.module.js.map +1 -1
  412. package/dist/module.d.ts +13 -12
  413. package/dist/module.d.ts.map +1 -1
  414. package/dist/module.js +7 -0
  415. package/dist/module.js.map +1 -1
  416. package/dist/public-api.d.ts +3 -1
  417. package/dist/public-api.d.ts.map +1 -1
  418. package/dist/public-api.js +3 -1
  419. package/dist/public-api.js.map +1 -1
  420. package/dist/shared/entity-field-display.d.ts +4 -3
  421. package/dist/shared/entity-field-display.d.ts.map +1 -1
  422. package/dist/shared/entity-field-display.js +9 -9
  423. package/dist/shared/entity-field-display.js.map +1 -1
  424. package/package.json +52 -51
@@ -1 +1 @@
1
- {"version":3,"file":"mapping-workspace.component.js","sourceRoot":"","sources":["../../../../src/Integration/components/mapping-workspace/mapping-workspace.component.ts","../../../../src/Integration/components/mapping-workspace/mapping-workspace.component.html"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAU,MAAM,EAAE,MAAM,eAAe,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EACL,sBAAsB,EAKvB,MAAM,yCAAyC,CAAC;;;;;;;;;;;;;;;ICN7C,gCAAsE;;;IAqBhE,gCAAoE;;;IA2B5D,+BAA4B;IAC1B,wBAA2C;IAAC,wCAC9C;IAAA,iBAAM;;;IAEN,+BAAmC;IACjC,wBAAgD;IAChD,YACF;IAAA,iBAAM;;;IADJ,eACF;IADE,qDACF;;;IAEA,+BAAmC;IACjC,sDACF;IAAA,iBAAM;;;;IAEN,uCAQiE;IAH/D,mYAAsC;IACtC,gQAAe,mCAAkC,KAAC;IAGpD,iBAAc;;;IALZ,AAHA,+CAA0B,wBAGH;IACvB,+DAAsC;IAGtC,AADA,iCAAmB,2CAC2C;;;IAwB9D,iCAAwD;;;;IAExD,uCAOyD;IAFvD,iYAA8B;IAGhC,iBAAc;;;IAJZ,AAHA,wCAAmB,wBAGI;IACvB,uDAA8B;IAE9B,AADA,iCAAmB,2CACmC;;;IAX1D,AADF,+BAAwB,YACf;IAAA,gCAAgB;IAAA,iBAAQ;IAG7B,AAFF,4JAAyB,uIAEhB;IAWX,iBAAM;;;IAbJ,eAYC;IAZD,kDAYC;;;IAyBK,gCAAwB;IAAA,YAAmC;IAAA,iBAAO;;;IAA1C,cAAmC;IAAnC,+DAAmC;;;IAiBzD,wBAA2C;IAAC,+BAC9C;;;IACE,wBAAoC;IAAC,6BACvC;;;IAGA,+BAA4D;IAC1D,wBAAgD;IAAC,YACnD;IAAA,iBAAM;;;IAD6C,eACnD;IADmD,uDACnD;;;IAGA,+BAA8B;IAAA,YAAuB;IAAA,iBAAM;;;IAA7B,cAAuB;IAAvB,8CAAuB;;;;IAfvD,AADF,+BAAiC,iBAGA;IAAvB,wPAAS,mBAAY,KAAC;IAG1B,AAFF,yJAAuB,mIAEd;IAGX,iBAAS;IACT,oKAAuB;IAKvB,oKAAyB;IAG3B,iBAAM;;;IAhBI,cAA4B;IAA5B,iDAA4B;IAElC,cAIC;IAJD,gDAIC;IAEH,eAIC;IAJD,iDAIC;IACD,cAEC;IAFD,mDAEC;;;;IA/CL,AADF,+BAA6B,cACA;IAAA,iCAAiB;IAAA,iBAAM;IAEhD,AADF,+BAAwB,YACf;IAAA,yBAAS;IAAA,iBAAQ;IACxB,uCAMyC;IAJvC,yXAAiC;IACjC,0PAAe,2BAAoB,KAAC;IAKxC,AADE,iBAAc,EACV;IAGF,AADF,AADF,+BAAsB,cACI,YACf;IAAA,2BAAU;IAAA,iBAAQ;IACzB,kCAC4D;IADpC,kXAAgC;IAAxD,iBAC4D;IAC5D,wJAAiD;IAGnD,iBAAM;IAEJ,AADF,gCAAwB,aACf;IAAA,4BAAW;IAAA,iBAAQ;IAC1B,kCAC8D;IADtC,wWAA2B;IAGvD,AADE,AAFE,iBAC8D,EAC1D,EACF;IAGN,uJAA6E;IAqB/E,iBAAM;;;IA9CA,eAAkB;IAAlB,uCAAkB;IAClB,0DAAiC;IAGjC,AADA,kCAAoB,oBACD;IAOK,eAAgC;IAAhC,yDAAgC;IACjD,uEAAkD;IACzD,cAEC;IAFD,mFAEC;IAIuB,eAA2B;IAA3B,oDAA2B;IAC5C,yEAAoD;IAK/D,cAoBC;IApBD,sHAoBC;;;IAmBC,wBAA2C;IAAC,2BAC9C;;;IACE,wBAA+C;IAAC,oCAClD;;;IACE,wBAAiC;IAAC,yBACpC;;;;IAlJF,AADF,AADF,+BAA2B,cACE,SACrB;IAAA,wBAAuC;IAAC,+BAAc;IAAA,iBAAK;IAC/D,kCAA0D;IAA1B,0NAAS,sBAAe,KAAC;IACvD,wBAAiC;IAErC,AADE,iBAAS,EACL;IAIJ,AADF,+BAAwB,YACf;IAAA,6BAAa;IAAA,iBAAQ;IAc1B,AAJA,AALA,AAJF,wIAA4B,kHAIA,kHAKiB,0HAIpC;IAYX,iBAAM;IAIJ,AADF,gCAAgC,kBAGc;IAApC,2NAAS,qBAAc,UAAU,CAAC,KAAC;IACzC,yBAAoC;IAAC,kCACvC;IAAA,iBAAS;IACT,mCAEuC;IAA/B,2NAAS,qBAAc,KAAK,CAAC,KAAC;IACpC,yBAA+C;IAAC,6BAClD;IACF,AADE,iBAAS,EACL;IAGN,wIAAiC;IAoBjC,0IAA4B;IAyD1B,AADF,gCAAwB,aACf;IAAA,+BAAc;IAAA,iBAAQ;IAC7B,wCAEiC;IAA/B,qWAA8B;IAElC,AADE,iBAAc,EACV;IAIJ,AADF,gCAA8B,kBAGG;IAAvB,2NAAS,mBAAY,KAAC;IAK1B,AAFA,AAFF,6HAAyB,uGAEU,uGAE1B;IAGX,iBAAS;IACT,mCAAqD;IAA1B,2NAAS,sBAAe,KAAC;IAClD,yBACF;IAEJ,AADE,AADE,iBAAS,EACL,EACF;;;IA/IF,gBAwBC;IAxBD,gIAwBC;IAMO,eAA0C;IAA1C,0DAA0C;IAK1C,eAAqC;IAArC,qDAAqC;IAO/C,eAiBC;IAjBD,4DAiBC;IAGD,cAqDC;IArDD,uDAqDC;IAMG,eAA0C;IAA1C,kDAA0C;IAC1C,uDAA8B;IAOxB,eAAiD;IAAjD,6EAAiD;IAEvD,cAMC;IAND,uFAMC;;;;IAYL,AADF,+BAAwB,gBAGuB;IADtC,oWAAiC;IAE1C,AAHE,iBAE6C,EACzC;;;IAFG,cAAiC;IAAjC,0DAAiC;;;;IAO1C,6BAAsB;IACpB,4CACA;IAAA,6BAA8F;IAAjE,sNAAS,qBAAc,KAAC;IAAyC,uBAAO;IACvG,AADuG,iBAAI,EACvG;;;IAEJ,6BAAsB;IAAA,YAA2C;IAAA,iBAAI;;;IAA/C,cAA2C;IAA3C,6EAA2C;;;IAiBrD,gCAAkC;IAAA,uBAAO;IAAA,iBAAO;;;;IAShD,qCAEoD;IADlD,8YAAsC;IACtC,mTAAiB,0CAA+B,KAAC;IACnD,iBAAY;;;IAFV,4DAAsC;;;;IAvBhD,+BAGiC;IAA5B,0PAAS,4BAAiB,KAAC;IAE5B,AADF,+BAAwB,eACA;IAAA,YAAqB;IAAA,iBAAO;IAClD,gCAAuB;IAAA,wBAAuC;IAAA,iBAAO;IACrE,gCAAwB;IAAA,YAAqB;IAC/C,AAD+C,iBAAO,EAChD;IAGF,AADF,AADF,+BAA2B,cACF,gBACe;IAAA,aAAwB;IAAA,iBAAO;IACnE,gJAAsB;IAGxB,iBAAM;IAEJ,AADF,gCAAwB,kBAEsB;IAApC,oQAAS,oCAAyB,KAAC;IACzC,yBAAqC;IACvC,iBAAS;IACT,qJAAuC;IAQ7C,AADE,AADE,iBAAM,EACF,EACF;;;;IA3BD,AADA,6DAAyC,+BACT;IAGX,eAAqB;IAArB,yCAAqB;IAEnB,eAAqB;IAArB,yCAAqB;IAIP,eAAwB;IAAxB,4CAAwB;IAC5D,cAEC;IAFD,8CAEC;IAOD,eAKC;IALD,mEAKC;;;IA5BX,+BAA6B;IAC3B,yIA+BC;IACH,iBAAM;;;IAhCJ,cA+BC;IA/BD,kCA+BC;;;;IA1NH,AADF,+BAA+B,eACgB;IAAA,2BAAW;IAAA,iBAAO;IAE7D,AADF,+BAA4B,iBAE8B;IAAhD,4MAAS,qBAAc,KAAC;IAC9B,wBAAgC;IAAC,yBACnC;IAEJ,AADE,AADE,iBAAS,EACL,EACF;IAGN,0HAAoB;IA+JpB,wHAA0B;IAgBxB,AAFA,AALF,sHAA6C,kGAKiB,oGAErD;;;IA/KT,eA4JC;IA5JD,8CA4JC;IAGD,cAMC;IAND,oDAMC;IAGD,cA0CC;IA1CD,mJA0CC;;;IAUD,+BAAiC;IAC/B,wBAAwC;IACxC,yBAAG;IAAA,yFAAyE;IAC9E,AAD8E,iBAAI,EAC5E;;;IAsBI,wBAAiC;;;IAEjC,mBACF;;;;IAmBF,AADF,+BAAgC,aACmB;IAC/C,wBAAoC;IAAC,+BACvC;IAAA,iBAAK;IACL,+BAA4B;IAAA,YAAmC;IAAA,iBAAM;IAEnE,AADF,+BAAyB,iBAE6C;IAA5D,6NAAS,+DAAiD,KAAC;IACjE,wBAAgC;IAAC,0BACnC;IAEJ,AADE,AADE,iBAAS,EACL,EACF;;;IAPwB,eAAmC;IAAnC,0DAAmC;;;IAuBvD,wBAA0D;;;IAG1D,iCAAgC;IAAA,iBAAC;IAAA,iBAAO;;;IAN1C,AADF,+BAAgC,eACG;IAAA,YAAgB;IAAA,iBAAO;IACxD,gCAAiC;IAAA,YAAgB;IAAA,iBAAO;IACxD,4IAA0B;IAG1B,gJAAwB;IAG1B,iBAAM;;;IAR6B,eAAgB;IAAhB,oCAAgB;IAChB,eAAgB;IAAhB,oCAAgB;IACjD,cAEC;IAFD,iDAEC;IACD,cAEC;IAFD,+CAEC;;;IAdP,AADF,+BAAoC,aACe;IAC/C,wBAAgC;IAAC,+BACjC;IAAA,gCAA6D;IAAA,YAA8C;IAC7G,AAD6G,iBAAO,EAC/G;IACL,+BAAiC;IAC/B,yIAWC;IAEL,AADE,iBAAM,EACF;;;IAhB2D,eAA8C;IAA9C,8EAA8C;IAG3G,eAWC;IAXD,qDAWC;;;IAxEP,AADF,+BAAkC,cACN;IAAA,wBAAiC;IAAA,iBAAM;IACjE,0BAAI;IAAA,YAAmD;IAAA,iBAAK;IAC5D,yBAAG;IACD,kEACA;IAAA,8BAAQ;IAAA,YAAsE;IAAA,iBAAS;IACvF,4FACF;IAAA,iBAAI;IAKA,AADF,AADF,gCAA2B,eACP,eACc;IAAA,yBAAiC;IAAA,iBAAM;IACrE,iCAAyB;IAAA,4BAAW;IACtC,AADsC,iBAAO,EACvC;IACN,2BAA+E;IAE7E,AADF,gCAAkB,eACiE;IAG7E,AAFF,yHAAqC,0FAE5B;IAGX,iBAAM;IACN,iCAAyB;IAAA,8BAAa;IACxC,AADwC,iBAAO,EACzC;IACN,2BAAkC;IAEhC,AADF,gCAAkB,eACgB;IAAA,kBAAC;IAAA,iBAAM;IACvC,iCAAyB;IAAA,iCAAgB;IAC3C,AAD2C,iBAAO,EAC5C;IACN,2BAAkC;IAEhC,AADF,gCAAkB,eACgB;IAAA,kBAAC;IAAA,iBAAM;IACvC,iCAAyB;IAAA,8BAAa;IAE1C,AADE,AADwC,iBAAO,EACzC,EACF;IAGN,4HAAqC;IAgBrC,2HAAkD;IAsBpD,iBAAM;;;IA3EA,eAAmD;IAAnD,+EAAmD;IAG7C,eAAsE;IAAtE,yGAAsE;IAUlD,eAA4C;IAA5C,4DAA4C;IAE7C,eAAuD;IAAvD,mFAAuD;IAC9E,cAIC;IAJD,gEAIC;IAiBP,gBAaC;IAbD,gEAaC;IAGD,cAqBC;IArBD,6EAqBC;;;IAGH,iCAAoE;;;;IAMlE,gCAA6B;IAC3B,wBAA+C;IAE1C,AAAH,AADF,gCAAyB,QACpB,aAAQ;IAAA,YAAuE;IAAA,iBAAS;IAAC,gEAA+C;IAC7I,AAD6I,iBAAI,EAC3I;IACN,mCAA2E;IAAjC,4NAAS,6BAAsB,KAAC;IACxE,wBAAiC;IAErC,AADE,iBAAS,EACL;;;IALS,eAAuE;IAAvE,8GAAuE;;;IAchF,4BAAM;IAAA,YAAa;IAAA,iBAAO;;;IAApB,cAAa;IAAb,iCAAa;;;IAJzB,gCAA+B;IAC7B,wBAAgD;IAChD,gCAAiC;IAC/B,6JAEC;IAEL,AADE,iBAAM,EACF;;;IAJF,eAEC;IAFD,gDAEC;;;IAwBC,wBAA2C;IAAC,2BAC9C;;;IACE,yBAAuC;IAAC,sBAC1C;;;;IAMJ,6BAAsB;IACpB,wCACA;IAAA,6BAAiG;IAApE,wNAAS,wBAAiB,KAAC;IAAyC,uBAAO;IAC1G,AAD0G,iBAAI,EAC1G;;;;IAYQ,kCACiF;IAD5C,qYAAmC;IACjE,gTAAiB,gCAAqB,KAAC;IAD9C,iBACiF;;;IAD5C,yDAAmC;;;IAMpE,iCAAmC;IAAA,YAA2B;IAAA,iBAAO;;;IAAlC,cAA2B;IAA3B,+CAA2B;;;IAG9D,iCAAqD;IAAA,yBAA+B;IAAC,mBAAE;IAAA,iBAAO;;;IAG9F,iCAAmD;IAAA,mBAAG;IAAA,iBAAO;;;IAG7D,iCAAmD;IAAA,kBAAE;IAAA,iBAAO;;;IAZhE,gCAA4B;IAAA,YAA2B;IAAA,iBAAM;IAC7D,gCAAwB;IACtB,8JAA6B;IAG7B,8JAAwB;IAGxB,8JAA8B;IAG9B,8JAA8B;IAGhC,iBAAM;;;IAdsB,cAA2B;IAA3B,+CAA2B;IAErD,eAEC;IAFD,oDAEC;IACD,cAEC;IAFD,+CAEC;IACD,cAEC;IAFD,qDAEC;IACD,cAEC;IAFD,qDAEC;;;;IAQH,mCACwE;IADrC,iSAAS,uCAA4B,KAAC;IAEvE,oBAAmE;IACnE,4BAAM;IAAA,YAAwD;IAAA,iBAAO;IACrE,iCAA6B;IAAA,YAAyC;IACxE,AADwE,iBAAO,EACtE;;;;IAJD,iFAA+D;IAClE,cAA2D;IAA3D,2EAA2D;IACxD,eAAwD;IAAxD,mFAAwD;IACjC,eAAyC;IAAzC,kEAAyC;;;;IAGxE,mCAC+C;IADS,iSAAS,uCAA4B,KAAC;IAE5F,wBAAuC;IACvC,4BAAM;IAAA,YAAwG;IAChH,AADgH,iBAAO,EAC9G;;;;IADD,eAAwG;IAAxG,uIAAwG;;;IAY5G,mCAA0B;IAAA,YAAa;IAAA,iBAAS;;;IAAxC,mCAAiB;IAAC,cAAa;IAAb,iCAAa;;;;IAJ3C,mCACgD;IADrB,gZAAwC;IAC3D,iTAAiB,gCAAqB,KAAC;IAC7C,mCAAiB;IAAA,wCAAwB;IAAA,iBAAS;IAClD,iKAEC;IACH,iBAAS;;;;IANkB,8DAAwC;IAGjE,eAEC;IAFD,uCAEC;;;;IAGH,kCACiF;IAD5C,gZAAwC;IACtE,iTAAiB,gCAAqB,KAAC;IAD9C,iBACiF;;;IAD5C,8DAAwC;;;IAyCrE,mCAA2B;IAAA,YAAc;IAAA,iBAAS;;;IAA1C,oCAAkB;IAAC,cAAc;IAAd,kCAAc;;;;IAmBvC,AADF,gCAA0B,YACjB;IAAA,mDAAmC;IAAA,iBAAQ;IAClD,kCAEkD;IAD3C,+WAA6B,cAAc,kCAAY,yCAA8B,KAAC;IAE/F,AAHE,iBAEkD,EAC9C;;;IAHiC,eAA6C;IAA7C,+DAA6C;;;;IAQhF,AADF,AADF,gCAAwB,eACI,YACjB;IAAA,uBAAO;IAAA,iBAAQ;IACtB,kCAE4C;IADrC,+WAA6B,SAAS,kCAAY,yCAA8B,KAAC;IAE1F,AAHE,iBAE4C,EACxC;IAEJ,AADF,gCAA0B,YACjB;IAAA,2BAAW;IAAA,iBAAQ;IAC1B,kCAEiC;IAD1B,+WAA6B,aAAa,kCAAY,yCAA8B,KAAC;IAE9F,AAHE,iBAEiC,EAC7B;IAEJ,AADF,gCAAoC,aAC3B;IAAA,sBAAK;IAAA,iBAAQ;IACpB,mCAE0B;IADnB,gXAA6B,OAAO,kCAAY,yCAA8B,KAAC;IAG1F,AADE,AAHE,iBAE0B,EACtB,EACF;;;IAhBwC,eAAwC;IAAxC,0DAAwC;IAMxC,eAA4C;IAA5C,8DAA4C;IAM5C,eAAuC;IAAvC,yDAAuC;;;;IASjF,AADF,AADF,gCAAwB,eACI,YACjB;IAAA,yBAAS;IAAA,iBAAQ;IACxB,kCAEyB;IADlB,+WAA6B,WAAW,kCAAY,yCAA8B,KAAC;IAE5F,AAHE,iBAEyB,EACrB;IAEJ,AADF,gCAAoC,YAC3B;IAAA,oCAAoB;IAAA,iBAAQ;IACnC,kCAEiB;IADV,+WAA6B,OAAO,mCAAa,yCAA8B,KAAC;IAG3F,AADE,AAHE,iBAEiB,EACb,EACF;;;IAVwC,eAA2C;IAA3C,6DAA2C;IAM9C,eAAqC;IAArC,uDAAqC;;;;IAW1E,mCACsF;IAA9E,0WAAS,kDAAmC,wBAAE,yCAA8B,KAAC;IACnF,YACF;IAAA,iBAAS;;;;;IAHgB,kFAA0D;IAEjF,cACF;IADE,uCACF;;;;IANJ,AADF,gCAA0B,YACjB;IAAA,wCAAwB;IAAA,iBAAQ;IACvC,gCAA+B;IAC7B,kMAKC;IAEL,AADE,iBAAM,EACF;IAEJ,AADF,gCAAoC,YAC3B;IAAA,yBAAS;IAAA,iBAAQ;IACxB,kCAEyB;IADlB,+WAA6B,WAAW,kCAAY,yCAA8B,KAAC;IAE5F,AAHE,iBAEyB,EACrB;;;;IAbF,eAKC;IALD,cAAA,iCAA0B,CAKzB;IAKuC,eAA2C;IAA3C,6DAA2C;;;;IAW/E,AADF,gCAA4B,iBAE4G;IAA/H,oXAAU,8FAAiF,wBAAE,yCAA8B,KAAC;IADnI,iBACsI;IACtI,yBAAwD;IACxD,kCACoI;IAA7H,oXAAU,4FAA+E,wBAAE,yCAA8B,KAAC;IADjI,iBACoI;IACpI,mCAAmH;IAApF,6WAAS,wDAAyC,wBAAE,yCAA8B,KAAC;IAChH,wBAAiC;IAErC,AADE,iBAAS,EACL;;;IARiC,cAAmB;IAAnB,qCAAmB;IAGnB,eAAqB;IAArB,uCAAqB;;;;IAPhE,AADF,gCAA0B,YACjB;IAAA,6BAAa;IAAA,iBAAQ;IAC5B,gCAA8B;IAC5B,4LAWC;IACD,mCAAqG;IAAtE,0UAAS,sCAA2B,wBAAE,yCAA8B,KAAC;IAClG,wBAAgC;IAAC,6BACnC;IAEJ,AADE,AADE,iBAAS,EACL,EACF;IAEJ,AADF,gCAAoC,aAC3B;IAAA,wCAAuB;IAAA,iBAAQ;IACtC,mCAE4B;IADrB,gXAA6B,SAAS,kCAAY,yCAA8B,KAAC;IAE1F,AAHE,iBAE4B,EACxB;;;;IAtBF,eAWC;IAXD,cAAA,wCAA6B,CAW5B;IAQkC,eAAwC;IAAxC,0DAAwC;;;;IAQ3E,AADF,AADF,gCAAwB,eACc,YAC3B;IAAA,2BAAW;IAAA,iBAAQ;IAC1B,mCAC6F;IAArF,gXAA6B,YAAY,kCAAY,yCAA8B,KAAC;IAC1F,mCAAqB;IAAA,oBAAI;IAAA,iBAAS;IAClC,mCAAuB;IAAA,sBAAM;IAAA,iBAAS;IACtC,mCAAuB;IAAA,uBAAM;IAEjC,AADE,AAD+B,iBAAS,EAC/B,EACL;IAEJ,AADF,iCAA0B,aACjB;IAAA,8BAAa;IAAA,iBAAQ;IAC5B,mCAE6C;IADtC,gXAA6B,cAAc,kCAAY,yCAA8B,KAAC;IAGjG,AADE,AAHE,iBAE6C,EACzC,EACF;;;IAbyB,eAA+C;IAA/C,iEAA+C;IAShC,gBAAgD;IAAhD,kEAAgD;;;;IAQ5F,AADF,gCAAoC,YAC3B;IAAA,2BAAW;IAAA,iBAAQ;IAC1B,mCAC6F;IAArF,gXAA6B,YAAY,kCAAY,yCAA8B,KAAC;IAC1F,mCAAuB;IAAA,sBAAM;IAAA,iBAAS;IACtC,mCAAuB;IAAA,sBAAM;IAAA,iBAAS;IACtC,mCAAwB;IAAA,uBAAO;IAAA,iBAAS;IACxC,oCAAqB;IAAA,qBAAI;IAE7B,AADE,AAD2B,iBAAS,EAC3B,EACL;;;IAPuB,eAAiD;IAAjD,mEAAiD;;;;IAY1E,AADF,AADF,gCAAwB,eACc,YAC3B;IAAA,2BAAW;IAAA,iBAAQ;IAC1B,kCAEiB;IADV,+WAA6B,OAAO,mCAAa,yCAA8B,KAAC;IAEzF,AAHE,iBAEiB,EACb;IAEJ,AADF,gCAAoC,YAC3B;IAAA,uCAAuB;IAAA,iBAAQ;IACtC,kCAEiB;IADV,+WAA6B,QAAQ,uBAAuB,SAAS,wBAAE,yCAA8B,KAAC;IAGjH,AADE,AAHE,iBAEiB,EACb,EACF;;;IAVqC,eAAqC;IAArC,uDAAqC;IAMrC,eAAuC;IAAvC,yDAAuC;;;;IAQhF,AADF,gCAA0B,YACjB;IAAA,sCAAsB;IAAA,iCAA0B;IAAA,qBAAK;IAAA,4BAAM;IAAA,qBAAK;IAAA,iBAAO;IAAC,qBAAI;IAAA,4BAAM;IAAA,sBAAM;IAAA,iBAAO;IAAA,kBAAC;IAAO,AAAP,iBAAO,EAAQ;IACtH,sCAEqD;IAD3C,mXAA6B,YAAY,kCAAY,yCAA8B,KAAC;IAEhG,AADuD,iBAAW,EAC5D;;;IAH0C,gBAAgD;IAAhD,kEAAgD;;;;IApKpG,AADF,AADF,gCAAyB,eACS,gBACA;IAAA,YAAY;IAAA,iBAAO;IACjD,mCACqE;IAA7D,0VAAiB,yDAA0C,KAAC;IAClE,wKAEC;IACH,iBAAS;IACT,mCAC0E;IADtC,sWAA0B;IACtD,yTAAiB,yCAA8B,KAAC;IACtD,mCAAqB;IAAA,oBAAI;IAAA,iBAAS;IAClC,oCAAqB;IAAA,yBAAQ;IAAA,iBAAS;IACtC,oCAAqB;IAAA,yBAAQ;IAC/B,AAD+B,iBAAS,EAC/B;IACT,oCAAgG;IAA7D,yUAAS,sDAA8B,KAAC;IACzE,yBAAqC;IAEzC,AADE,iBAAS,EACL;IAGN,iCAA2B;IA8IvB,AAhBA,AAZA,AAnBA,AA5BA,AAnBA,AAhBA,AAtBA,AARA,+JAAkB,0IAQD,yIAsBA,8HAgBE,8HAmBD,0IA4BA,0IAmBA,yIAYG,0IAgBH;IAUxB,AADE,iBAAM,EACF;;;;;;IA3K4B,eAAY;IAAZ,yCAAY;IACP,cAAqB;IAArB,uCAAqB;IAEtD,cAEC;IAFD,oCAEC;IAEiC,eAA0B;IAA1B,gDAA0B;IAa9D,gBAqJC;IArJD,gDAAA,QAAQ,qBAAR,OAAO,qBAAP,OAAO,qBAAP,SAAS,qBAAT,QAAQ,qBAAR,QAAQ,qBAAR,QAAQ,qBAAR,WAAW,qBAAX,QAAQ,WAqJP;;;;IAjLL,AADF,AADF,gCAAkC,eACL,gBACE;IAAA,wBAA+C;IAAC,mCAAkB;IAAA,iBAAO;IACpG,mCAAsF;IAA3D,kSAAS,kCAAuB,KAAC;IAC1D,wBAAgC;IAAC,0BACnC;IACF,AADE,iBAAS,EACL;IACN,+KA+KC;IACH,iBAAM;;;IAhLJ,eA+KC;IA/KD,0CA+KC;;;;IArQH,AAFF,AAJF,gCACgE,eAGzC,eAEK;IAIpB,AAHF,iJAAmB,6GAGV;IAiBX,iBAAM;IAGN,gCAAgC;IAQ5B,AAPF,kJAA0C,4HAOjC;IAOX,iBAAM;IAGN,gCAAsB;IASlB,AARF,kJAAoC,6HAQ3B;IAIX,iBAAM;IAKF,AADF,AADF,iCAAuB,kBACkC,kBAEJ;IAD1B,0VAA8B;IAC9C,+QAAiB,gCAAqB,KAAC;IAD9C,iBACiD;IACjD,0BAA+B;IACjC,iBAAQ;IAEN,AADF,mCAA+C,kBAEI;IAD1B,0VAA8B;IAC9C,+QAAiB,gCAAqB,KAAC;IAD9C,iBACiD;IACjD,kCAA2B;IAAA,kBAAC;IAEhC,AADE,AAD8B,iBAAO,EAC7B,EACJ;IAGN,oCAAkF;IAAhC,mQAAS,0CAAqB,KAAC;IAC/E,yBAAiC;IAErC,AADE,iBAAS,EACL;IAGN,kJAAuE;IA0LzE,iBAAM;;;;IA7QD,AADuB,2FAA0E,yDACvC;IAMzD,eAmBC;IAnBD,yCAmBC;IAKD,eAaC;IAbD,gEAaC;IAKD,eAWC;IAXD,8DAWC;IAMwB,eAA8B;IAA9B,oDAA8B;IAK9B,eAA8B;IAA9B,oDAA8B;IAa3D,eAyLC;IAzLD,mGAyLC;;;IA/QP,gCAA6B;IAC3B,8JAgRC;IACH,iBAAM;;;IAjRJ,cAgRC;IAhRD,0CAgRC;;;IA4BG,kCAAoE;;;IAEpE,6BAAsB;IAAA,yCAAyB;IAAA,iBAAI;;;IAOzC,0BAAI;IAAA,YAAS;IAAA,iBAAK;;;IAAd,cAAS;IAAT,6BAAS;;;IAQX,0BAAI;IAAA,YAAkC;IAAA,iBAAK;;;;;IAAvC,cAAkC;IAAlC,iEAAkC;;;IAF1C,0BAAI;IACF,gLAEC;IACH,iBAAK;;;IAHH,cAEC;IAFD,cAAA,kDAAoC,CAEnC;;;IAXL,AADF,AADF,AADF,gCAAmC,iBACJ,YACpB,SACD;IACF,0KAEC;IAEL,AADE,iBAAK,EACC;IACR,6BAAO;IACL,uKAMC;IAGP,AADE,AADE,iBAAQ,EACF,EACJ;;;IAfE,eAEC;IAFD,cAAA,kDAAoC,CAEnC;IAIH,eAMC;IAND,uCAMC;;;;IA1BP,AADF,AADF,gCAA2B,eACS,SAC5B;IAAA,yBAAiC;IAAC,oCAAmB;IAAA,iBAAK;IAC9D,kCAA+D;IAA/B,6NAAS,2BAAoB,KAAC;IAC5D,wBAAiC;IAErC,AADE,iBAAS,EACL;IAKJ,AAFA,AAFF,gJAA8B,gHAEe,mHAEpC;IAsBX,iBAAM;;;IA1BJ,eAyBC;IAzBD,mGAyBC;;;IAaC,kCAAyE;;;IAEzE,6BAAsB;IAAA,8CAA8B;IAAA,iBAAI;;;IAO9C,0BAAI;IAAA,YAAS;IAAA,iBAAK;;;IAAd,cAAS;IAAT,6BAAS;;;IAQX,0BAAI;IAAA,YAAkC;IAAA,iBAAK;;;;;IAAvC,cAAkC;IAAlC,iEAAkC;;;IAF1C,0BAAI;IACF,gLAEC;IACH,iBAAK;;;IAHH,cAEC;IAFD,cAAA,gDAAkC,CAEjC;;;IAXL,AADF,AADF,AADF,gCAAmC,iBACJ,YACpB,SACD;IACF,0KAEC;IAEL,AADE,iBAAK,EACC;IACR,6BAAO;IACL,uKAMC;IAGP,AADE,AADE,iBAAQ,EACF,EACJ;;;IAfE,eAEC;IAFD,cAAA,gDAAkC,CAEjC;IAIH,eAMC;IAND,qCAMC;;;;IA1BP,AADF,AADF,gCAA2B,eACS,SAC5B;IAAA,wBAAoC;IAAC,yCAAwB;IAAA,iBAAK;IACtE,kCAA6D;IAA7B,6NAAS,yBAAkB,KAAC;IAC1D,wBAAiC;IAErC,AADE,iBAAS,EACL;IAKJ,AAFA,AAFF,gJAA4B,gHAEe,mHAElC;IAsBX,iBAAM;;;IA1BJ,eAyBC;IAzBD,+FAyBC;;;;IAnaP,0HAAyB;IAazB,0HAAqE;IAYnE,AADF,gCAAkC,cACR;IACtB,gCACA;IAAA,iCAA0B;IAAA,YAAmC;IAC/D,AAD+D,iBAAO,EACjE;IAEH,AADF,gCAAmC,kBAGyD;IAAlF,8MAAS,qBAAc,KAAC;IAC9B,wBAA+C;IAAC,2BAClD;IAAA,iBAAS;IACT,mCACoC;IAA5B,+MAAS,wBAAiB,KAAC;IACjC,yBAAgC;IAAC,4BACnC;IAAA,iBAAS;IACT,mCAEsC;IAA9B,+MAAS,0BAAmB,KAAC;IAGjC,AAFF,gHAAsB,0FAEb;IAKf,AADE,AADE,iBAAS,EACL,EACF;IAOJ,AALF,yHAAyC,sGAKhC;IAyRL,AADF,AADF,iCAAkC,gBACH,kBAGW;IAA9B,+MAAS,0BAAmB,KAAC;IACnC,0BAA4C;IAAC,iCAC/C;IAAA,iBAAS;IACT,mCAEoC;IAA5B,+MAAS,wBAAiB,KAAC;IACjC,yBAAoC;IAAC,sCACvC;IACF,AADE,iBAAS,EACL;IAEN,6HAAyB;IAqCzB,6HAAuB;IAoCzB,iBAAM;;;IAtaN,mDAUC;IAGD,cASC;IATD,sGASC;IAK6B,eAAmC;IAAnC,mEAAmC;IAIrD,eAAkC;IAAlC,uDAAkC;IASlC,eAA8C;IAA9C,0EAA8C;IAEpD,cAIC;IAJD,iDAIC;IAKP,eAyRC;IAzRD,oEAyRC;IAMW,eAAmC;IAAnC,wDAAmC;IAKnC,eAAiC;IAAjC,sDAAiC;IAM3C,eAmCC;IAnCD,oDAmCC;IAED,cAmCC;IAnCD,kDAmCC;;;IAWH,6BAAsB;IAAA,yDAAyC;IAAA,iBAAI;;;IAEnE,iCAAwD;;;IAExD,6BAAsB;IAAA,8BAAc;IAAA,iBAAI;;;IA2BlC,AADF,gCAA8B,eACE;IAAA,YAAmB;IAAA,iBAAM;IAGnD,AADF,AADF,gCAA8B,eACL,gBACE;IAAA,YAA2B;IAAA,iBAAO;IACzD,iCAAyB;IAAA,uBAAO;IAClC,AADkC,iBAAO,EACnC;IAEJ,AADF,gCAAuB,iBACE;IAAA,aAA2B;IAAA,iBAAO;IACzD,kCAAyB;IAAA,wBAAO;IAClC,AADkC,iBAAO,EACnC;IAEJ,AADF,iCAAuB,iBACiD;IACpE,aACF;IAAA,iBAAO;IACP,kCAAyB;IAAA,uBAAM;IAGrC,AADE,AADE,AADiC,iBAAO,EAClC,EACF,EACF;;;IAjB0B,eAAmB;IAAnB,uCAAmB;IAGtB,eAA2B;IAA3B,+CAA2B;IAI3B,eAA2B;IAA3B,+CAA2B;IAI3B,eAA8C;IAA9C,2DAA8C;IACnE,cACF;IADE,0DACF;;;IAhBR,+BAAkD;IAAA,gCAAgB;IAAA,iBAAK;IACvE,2IAoBC;;;IApBD,eAoBC;IApBD,sCAoBC;;;IAzCC,AADF,AADF,gCAA8B,eACC,gBACP;IAAA,sBAAM;IAAA,iBAAO;IACjC,iCAA8D;IAC5D,YACF;IACF,AADE,iBAAO,EACH;IAEJ,AADF,gCAA6B,gBACP;IAAA,uBAAO;IAAA,iBAAO;IAClC,4BAAM;IAAA,aAAqC;IAC7C,AAD6C,iBAAO,EAC9C;IAEJ,AADF,iCAA6B,iBACP;IAAA,8BAAa;IAAA,iBAAO;IACxC,6BAAM;IAAA,aAAqC;;IAC7C,AAD6C,iBAAO,EAC9C;IAEJ,AADF,iCAA6B,iBACP;IAAA,uBAAM;IAAA,iBAAO;IACjC,6BAAM;IAAA,aAAyB;IAEnC,AADE,AADiC,iBAAO,EAClC,EACF;IAEN,gHAAmC;;;IAlBN,eAAoC;IAApC,gDAAoC;IAC3D,cACF;IADE,wDACF;IAIM,eAAqC;IAArC,mEAAqC;IAIrC,eAAqC;IAArC,0EAAqC;IAIrC,eAAyB;IAAzB,gDAAyB;IAInC,cAuBC;IAvBD,8DAuBC;;;;IAnzBD,AADF,AADF,AAJF,8BAA4B,aAIF,aACY,eACL;IAAA,2BAAW;IAAA,iBAAQ;IAC9C,sCAOmD;IAFjD,iVAAmC;IACnC,oNAAe,kCAAiC,KAAC;IAGrD,AADE,iBAAc,EACV;IAIJ,AAFF,gHAA2B,0EAES;IAiOtC,iBAAM;IAKN,+BAA0B;IAyFtB,AAFA,AAhFA,AANF,0GAAsB,uFAMW,6FAgFA,6EAExB;IA4aX,iBAAM;IAMJ,AADF,gCAAyB,aACC;IAAA,iCAAgB;IAAA,iBAAK;IAO3C,AAFA,AAFA,AAFF,0GAA8B,6FAEI,oFAET,4EAEhB;IAgDb,AADE,iBAAM,EACF;;;IApzBE,eAAqB;IAGrB,AAHA,0CAAqB,wBAGE;IACvB,4DAAmC;IAEnC,wDAAgD;IAIpD,cAkOC;IAlOD,wFAkOC;IAOD,eAmgBC;IAngBD,kHAmgBC;IAQD,eAoDC;IApDD,oHAoDC;;ADxtBT,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AASvE,IAAM,yBAAyB,GAA/B,MAAM,yBAA0B,SAAQ,qBAAqB;IAElE,oBAAoB;IACpB,YAAY,GAAiC,EAAE,CAAC;IAChD,UAAU,GAAmB,EAAE,CAAC;IAChC,SAAS,GAAkB,EAAE,CAAC;IAC9B,gBAAgB,GAAmB,EAAE,CAAC;IACtC,SAAS,GAA6B,IAAI,CAAC;IAE3C,oBAAoB;IACpB,qBAAqB,GAAG,EAAE,CAAC;IAC3B,aAAa,GAAkB,IAAI,CAAC;IACpC,mBAAmB,GAAG,EAAE,CAAC;IAEzB,kBAAkB;IAClB,qBAAqB,GAAG,KAAK,CAAC;IAC9B,mBAAmB,GAAG,KAAK,CAAC;IAC5B,kBAAkB,GAAG,KAAK,CAAC;IAC3B,mBAAmB,GAAG,KAAK,CAAC;IAE5B,uBAAuB;IACvB,YAAY,GAAG,KAAK,CAAC;IACrB,UAAU,GAAe,UAAU,CAAC;IAEpC,gCAAgC;IAChC,iBAAiB,GAAuB,EAAE,CAAC;IAC3C,oBAAoB,GAAG,KAAK,CAAC;IAC7B,aAAa,GAAG,EAAE,CAAC;IACnB,wBAAwB,GAAG,EAAE,CAAC;IAE9B,0BAA0B;IAC1B,UAAU,GAAqB,EAAE,CAAC;IAClC,iBAAiB,GAAG,KAAK,CAAC;IAC1B,gBAAgB,GAAkB,IAAI,CAAC;IAEvC,qBAAqB;IACrB,mBAAmB,GAAG,EAAE,CAAC;IACzB,kBAAkB,GAAG,EAAE,CAAC;IACxB,aAAa,GAAG,EAAE,CAAC;IACnB,SAAS,GAAa,EAAE,CAAC;IAEzB,8BAA8B;IAC9B,gBAAgB,GAAsC,MAAM,CAAC;IAC7D,iBAAiB,GAAG,KAAK,CAAC;IAE1B,4CAA4C;IAC5C,WAAW,GAAsB,EAAE,CAAC;IAEpC,sBAAsB;IACtB,eAAe,GAAG,KAAK,CAAC;IACxB,iBAAiB,GAAG,EAAE,CAAC;IACvB,eAAe,GAAG,EAAE,CAAC;IAErB,gCAAgC;IAChC,cAAc,GAAuB,EAAE,CAAC;IACxC,iBAAiB,GAAoB,EAAE,CAAC;IACxC,mBAAmB,GAAG,KAAK,CAAC;IAC5B,cAAc,GAAG,KAAK,CAAC;IACvB,YAAY,GAAG,CAAC,CAAC;IACjB,iBAAiB,GAAG,KAAK,CAAC;IAE1B,yCAAyC;IACzC,YAAY,GAAqC,EAAE,CAAC;IACpD,qBAAqB,GAAG,KAAK,CAAC;IAE9B,uBAAuB;IACvB,iBAAiB,GAAoB,EAAE,CAAC;IACxC,eAAe,GAAoB,EAAE,CAAC;IACtC,sBAAsB,GAAG,KAAK,CAAC;IAC/B,oBAAoB,GAAG,KAAK,CAAC;IAC7B,iBAAiB,GAAG,KAAK,CAAC;IAC1B,eAAe,GAAG,KAAK,CAAC;IAEhB,WAAW,GAAG,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAC7C,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAChC,aAAa,GAAG,IAAI,GAAG,EAA8B,CAAC;IACtD,cAAc,GAAG,CAAC,CAAC;IAE3B,KAAK,CAAC,QAAQ;QACZ,KAAK,CAAC,QAAQ,EAAE,CAAC;QACjB,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC9B,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAED,wEAAwE;IACxE,sBAAsB;IACtB,wEAAwE;IAExE,yEAAyE;IACzE,IAAI,OAAO;QACT,MAAM,SAAS,GAAkB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAC1D,EAAE,EAAE,EAAE,CAAC,EAAE;YACT,UAAU,EAAE,EAAE,CAAC,kBAAkB;YACjC,UAAU,EAAE,EAAE,CAAC,MAAM;YACrB,aAAa,EAAE,EAAE,CAAC,aAAa;YAC/B,WAAW,EAAE,EAAE,CAAC,WAAW;YAC3B,SAAS,EAAE,KAAK;YAChB,OAAO,EAAE,EAAE;YACX,UAAU,EAAE,IAAI;SACjB,CAAC,CAAC,CAAC;QAEJ,MAAM,YAAY,GAAkB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAC9D,EAAE,EAAE,EAAE,CAAC,OAAO;YACd,UAAU,EAAE,EAAE,CAAC,gBAAgB;YAC/B,UAAU,EAAE,EAAE,CAAC,UAAU;YACzB,aAAa,EAAE,EAAE,CAAC,aAAa;YAC/B,WAAW,EAAE,KAAK;YAClB,SAAS,EAAE,IAAI;YACf,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,EAAE;SACf,CAAC,CAAC,CAAC;QAEJ,OAAO,CAAC,GAAG,SAAS,EAAE,GAAG,YAAY,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,YAAY;QACd,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE;YAAE,OAAO,GAAG,CAAC;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,CAAC;QACtD,OAAO,GAAG,CAAC,MAAM,CACf,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;eAC3C,CAAC,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CACjD,CAAC;IACJ,CAAC;IAED,IAAI,WAAW;QACb,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,OAAO,IAAI,CAAC;QACrC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,IAAI,CAAC;IAC9E,CAAC;IAED,IAAI,iBAAiB;QACnB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC;QAC7B,OAAO,GAAG,EAAE,OAAO,IAAI,IAAI,CAAC;IAC9B,CAAC;IAED,IAAI,kBAAkB;QACpB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC;QAC7B,OAAO,GAAG,EAAE,UAAU,IAAI,IAAI,CAAC;IACjC,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,oBAAoB;QACtB,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,cAAc;QAChB,IAAI,CAAC,IAAI,CAAC,wBAAwB;YAAE,OAAO,KAAK,CAAC;QACjD,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC;QACnE,OAAO,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;IAC9G,CAAC;IAED,kEAAkE;IAClE,IAAI,kBAAkB;QACpB,IAAI,CAAC,IAAI,CAAC,wBAAwB;YAAE,OAAO,EAAE,CAAC;QAC9C,OAAO,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;IACtE,CAAC;IAED,IAAI,mBAAmB;QACrB,IAAI,CAAC,IAAI,CAAC,wBAAwB;YAAE,OAAO,EAAE,CAAC;QAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACvF,MAAM,KAAK,GAAG,GAAG,EAAE,KAAK,IAAI,IAAI,CAAC,wBAAwB,CAAC;QAC1D,IAAI,IAAI,CAAC,mBAAmB;YAAE,OAAO,GAAG,IAAI,CAAC,mBAAmB,IAAI,KAAK,EAAE,CAAC;QAC5E,OAAO,KAAK,CAAC;IACf,CAAC;IAED,wEAAwE;IACxE,eAAe;IACf,wEAAwE;IAExE,KAAK,CAAC,gBAAgB;QACpB,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;QAClC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,wBAAwB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACrF,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;QACxD,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;YACnC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,aAAqB;QAC7C,IAAI,CAAC,qBAAqB,GAAG,aAAa,CAAC;QAC3C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;QAC9B,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,IAAI,CAAC,aAAa;YAAE,OAAO;QAE3B,8EAA8E;QAC9E,MAAM,OAAO,CAAC,GAAG,CAAC;YAChB,IAAI,CAAC,4BAA4B,CAAC,aAAa,CAAC;YAChD,IAAI,CAAC,2BAA2B,CAAC,aAAa,CAAC;YAC/C,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC;SAC1C,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,4BAA4B,CAAC,aAAqB;QAC9D,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,IAAI,CAAC,UAAU,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAC5F,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;YACjC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,2BAA2B,CAAC,aAAqB;QAC7D,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YACxF,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAClD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnB,IAAI,CAAC,gBAAgB,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YACtG,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;YACjC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,8FAA8F;IACtF,qBAAqB,CAAC,aAAqB;QACjD,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;YAC1C,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,aAAa,CAAE,CAAC;YAChE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC3B,CAAC;QAED,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAEzB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,qBAAqB,CAAC,QAAQ,CAAC;YAC9C,MAAM,WAAW,GAAG,MAAM,CAAC,mCAAmC,CAAC,aAAa,CAAC,CAAC;YAC9E,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,IAAI,CAAC,aAAa,GAAG,mCAAmC,CAAC;gBACzD,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;YAC3B,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,CAAC,2BAA2B,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YACnE,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACzC,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,KAAK,EAAE,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,IAAI;gBAC9B,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,eAAe;gBACvC,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,EAAE;gBAChC,uBAAuB,EAAE,CAAC,CAAC,uBAAuB;gBAClD,aAAa,EAAE,CAAC,CAAC,aAAa;aAC/B,CAAC,CAAC,CAAC;YACJ,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAChE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,aAAa,GAAG,2BAA4B,CAAW,CAAC,OAAO,EAAE,CAAC;QACzE,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;YAClC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;QACD,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,wEAAwE;IACxE,uBAAuB;IACvB,wEAAwE;IAExE,KAAK,CAAC,WAAW,CAAC,IAAiB;QACjC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,4DAA4D;YAC5D,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;YACzB,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;YAC5B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QAED,gFAAgF;QAChF,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,GAAG,CAAC;gBAChB,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;gBACjG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAQ,CAAC,QAAQ,CAAC;aACnD,CAAC,CAAC;YAEH,wDAAwD;YACxD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,+BAA+B,CACtD,IAAI,CAAC,qBAAqB,EAC1B,IAAI,CAAC,OAAQ,CAAC,kBAAkB,CACjC,CAAC;YAEF,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3E,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;YAChC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,aAAa,CAAC,EAAU;QACtB,OAAO,IAAI,CAAC,aAAa,KAAK,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,EAAgB;QACtC,MAAM,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC;IACvE,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,IAAiB,EAAE,KAAY;QAC/C,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;QACzE,CAAC;aAAM,CAAC;YACN,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChE,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;YACzB,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;QAC9B,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAED,wEAAwE;IACxE,eAAe;IACf,wEAAwE;IAExE,YAAY;QACV,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED,aAAa;QACX,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED,aAAa,CAAC,IAAgB;QAC5B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IACzB,CAAC;IAED,oBAAoB,CAAC,UAAkB;QACrC,IAAI,CAAC,wBAAwB,GAAG,UAAU,CAAC;QAC3C,qDAAqD;QACrD,IAAI,IAAI,CAAC,UAAU,KAAK,KAAK,EAAE,CAAC;YAC9B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;YAClD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAAC;QAChD,CAAC;IACH,CAAC;IAED,kBAAkB;QAChB,oDAAoD;QACpD,IAAI,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAClC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAAC;QAChD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,qBAAqB;YAAE,OAAO;QAChE,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAEzB,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;gBACnC,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;YACrC,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAChC,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;YAC/B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,qBAAqB;QACjC,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAC7F,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC;YACpD,oBAAoB,EAAE,IAAI,CAAC,qBAAqB;YAChD,kBAAkB,EAAE,IAAI,CAAC,wBAAwB;YACjD,mBAAmB,EAAE,SAAS,EAAE,KAAK,KAAK,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS;YACxF,QAAQ,EAAE,IAAI,CAAC,gBAAiB;YAChC,aAAa,EAAE,IAAI,CAAC,gBAAgB;SACrC,CAAC,CAAC;QAEH,IAAI,MAAM,EAAE,CAAC;YACX,sDAAsD;YACtD,MAAM,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YACpE,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CACjC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,kBAAkB,KAAK,IAAI,CAAC,wBAAwB,CAC9D,CAAC;YACF,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,EAAE,CAAC;gBAC/B,MAAM,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC;YAC/C,CAAC;YACD,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,gBAAgB;QAC5B,wDAAwD;QACxD,MAAM,YAAY,GAAG,IAAI,CAAC,+BAA+B,CACvD,IAAI,CAAC,qBAAqB,EAC1B,IAAI,CAAC,wBAAwB,CAC9B,CAAC;QAEF,uBAAuB;QACvB,IAAI,UAAU,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,CACpD,IAAI,CAAC,qBAAqB,EAC1B,CAAC;oBACC,gBAAgB,EAAE,IAAI,CAAC,wBAAwB;oBAC/C,UAAU,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE;oBAC3C,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE;oBACzC,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;iBACtC,CAAC,EACF,WAAW,CACZ,CAAC;YACF,IAAI,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpD,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,oCAAoC;QACtC,CAAC;QAED,2BAA2B;QAC3B,MAAM,UAAU,GAAoB;YAClC,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,cAAc,EAAE;YAC3C,gBAAgB,EAAE,IAAI,CAAC,wBAAwB;YAC/C,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,wBAAwB,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,wBAAwB;YACrI,UAAU,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE;YAC3C,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE;YACzC,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;YACrC,aAAa,EAAE,IAAI,CAAC,gBAAgB;YACpC,YAAY,EAAE,YAAY;YAC1B,UAAU,EAAE,UAAU;YACtB,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC;QAEF,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAClC,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,OAAO,CAAC;QACxC,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAEO,YAAY;QAClB,IAAI,CAAC,wBAAwB,GAAG,EAAE,CAAC;QACnC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC7B,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;QAC9B,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC;QAC/B,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;IAC5B,CAAC;IAEO,KAAK,CAAC,oBAAoB;QAChC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO;QACvC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,IAAI,CAAC,UAAU,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC7E,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;YAC/B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAEO,aAAa;QACnB,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO;QACtC,MAAM,EAAE,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC1B,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;QACpC,KAAK,MAAM,MAAM,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC;YACjC,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;gBACtB,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;IAChD,CAAC;IAED,wEAAwE;IACxE,4BAA4B;IAC5B,wEAAwE;IAExE,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,IAAI,CAAC,wBAAwB,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE;YAAE,OAAO;QAClH,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAEzB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,CACjD,IAAI,CAAC,qBAAqB,EAC1B,CAAC;oBACC,gBAAgB,EAAE,IAAI,CAAC,wBAAwB;oBAC/C,UAAU,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE;oBAC3C,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE;oBACzC,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,mBAAmB;iBAClE,CAAC,EACF,WAAW,CACZ,CAAC;YAEF,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9C,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,WAAW,QAAQ,CAAC,CAAC,QAAQ,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvH,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,OAAO,IAAI,kBAAkB,CAAC;YAC9D,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,eAAe,GAAG,0BAA2B,CAAW,CAAC,OAAO,EAAE,CAAC;QAC1E,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;YAC7B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,wEAAwE;IACxE,gBAAgB;IAChB,wEAAwE;IAEhE,eAAe,CAAC,EAAe;QACrC,+DAA+D;QAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CACpC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC,eAAe,CAAC,WAAW,EAAE,CACjE,CAAC;QACF,OAAO;YACL,EAAE,EAAE,EAAE,CAAC,EAAE;YACT,eAAe,EAAE,EAAE,CAAC,eAAe;YACnC,gBAAgB,EAAE,EAAE,CAAC,gBAAgB,IAAI,EAAE;YAC3C,eAAe,EAAE,OAAO,EAAE,IAAI,IAAI,EAAE;YACpC,oBAAoB,EAAE,EAAE,CAAC,oBAAoB;YAC7C,qBAAqB,EAAE,EAAE,CAAC,qBAAqB,IAAI,EAAE;YACrD,UAAU,EAAE,EAAE,CAAC,UAAU;YACzB,UAAU,EAAE,EAAE,CAAC,UAAU;YACzB,SAAS,EAAE,EAAE,CAAC,SAAS;YACvB,MAAM,EAAE,EAAE,CAAC,MAA+B;YAC1C,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,KAAK;YACd,UAAU,EAAE,OAAO,EAAE,YAAY,IAAI,KAAK;YAC1C,gBAAgB,EAAE,OAAO,EAAE,UAAU,IAAI,KAAK;YAC9C,gBAAgB,EAAE,OAAO,EAAE,UAAU,IAAI,KAAK;YAC9C,iBAAiB,EAAE,IAAI,CAAC,sBAAsB,CAAC,EAAE,CAAC,iBAAiB,CAAC;YACpE,mBAAmB,EAAE,KAAK;SAC3B,CAAC;IACJ,CAAC;IAEO,sBAAsB,CAAC,IAAmB;QAChD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE;YAAE,OAAO,EAAE,CAAC;QAC3C,IAAI,CAAC;YACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACzC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;gBAAE,OAAO,EAAE,CAAC;YACtC,OAAQ,MAA4B,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAChD,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,QAAQ;gBAC3B,MAAM,EAAG,IAAI,CAAC,MAAkC,IAAI,EAAE;gBACtD,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,MAAM;aAChC,CAAC,CAAC,CAAC;QACN,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,0BAA0B,CAAC,KAAwB;QACjD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACpC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;IAClG,CAAC;IAEO,KAAK,CAAC,qBAAqB,CAAC,QAAgB;QAClD,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,IAAI,CAAC,iBAAiB,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAChG,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;YACjC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,oFAAoF;IACpF,KAAK,CAAC,yBAAyB,CAAC,SAAuB;QACrD,wDAAwD;QACxD,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;QAClC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,+BAA+B,CACtD,IAAI,CAAC,qBAAqB,EAC1B,SAAS,CAAC,kBAAkB,CAC7B,CAAC;YAEF,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YAE3C,0BAA0B;YAC1B,MAAM,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YAErD,0CAA0C;YAC1C,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACxF,IAAI,CAAC,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC;YACzC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;YAE/C,4EAA4E;YAC5E,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,aAAa,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;gBACpD,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;gBACjC,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC;gBAC5E,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;oBACpC,WAAW,EAAE,SAAS,CAAC,EAAE;oBACzB,eAAe,EAAE,KAAK,CAAC,WAAW,CAAC,IAAI;oBACvC,gBAAgB,EAAE,WAAW,KAAK,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;oBAClF,oBAAoB,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI;oBAC1C,UAAU,EAAE,KAAK,CAAC,WAAW,CAAC,YAAY;oBAC1C,UAAU,EAAE,KAAK,CAAC,WAAW,CAAC,UAAU;oBACxC,SAAS,EAAE,cAAc;oBACzB,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;oBACpF,QAAQ,EAAE,KAAK,CAAC,WAAW;iBAC5B,CAAC,CAAC;YACL,CAAC;YAED,oBAAoB;YACpB,IAAI,CAAC,SAAS,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YACvF,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3E,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;YACnC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAEO,iBAAiB,CACvB,YAA8C,EAC9C,UAA2B;QAE3B,MAAM,OAAO,GAA0G,EAAE,CAAC;QAC1H,MAAM,YAAY,GAAG,IAAI,GAAG,EAAyB,CAAC;QACtD,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;YAC5B,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;QAC9C,CAAC;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7C,MAAM,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YAC3B,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;YAC1D,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,2DAA2D;IAC3D,IAAI,qBAAqB;QACvB,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAC/B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,oBAAoB,CACtE,CAAC,MAAM,CAAC;IACX,CAAC;IAED,gEAAgE;IAChE,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC;IAC9E,CAAC;IAED,4CAA4C;IAC5C,IAAI,iBAAiB;QACnB,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,IAAI,IAAI,CAAC,qBAAqB,GAAG,CAAC,EAAE,CAAC;YACnC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,qBAAqB,gDAAgD,CAAC,CAAC;QAC/F,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9D,QAAQ,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;IAChE,CAAC;IAED,gEAAgE;IAChE,KAAK,CAAC,YAAY;QAChB,IAAI,CAAC,IAAI,CAAC,iBAAiB;YAAE,OAAO;QACpC,MAAM,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC/D,CAAC;IAED,cAAc,CAAC,KAAuB;QACpC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;IACvB,CAAC;IAED,eAAe;QACb,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;YACvB,EAAE,EAAE,IAAI;YACR,eAAe,EAAE,EAAE;YACnB,gBAAgB,EAAE,EAAE;YACpB,eAAe,EAAE,EAAE;YACnB,oBAAoB,EAAE,EAAE;YACxB,qBAAqB,EAAE,EAAE;YACzB,UAAU,EAAE,KAAK;YACjB,UAAU,EAAE,KAAK;YACjB,SAAS,EAAE,cAAc;YACzB,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,IAAI;YACX,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,KAAK;YACjB,gBAAgB,EAAE,KAAK;YACvB,gBAAgB,EAAE,KAAK;YACvB,iBAAiB,EAAE,EAAE;YACrB,mBAAmB,EAAE,KAAK;SAC3B,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAED,kBAAkB,CAAC,KAAa;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACvC,CAAC;aAAM,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC;YACpB,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC;YAC1B,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;QACvB,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,iBAAiB;QACrB,IAAI,CAAC,IAAI,CAAC,iBAAiB;YAAE,OAAO;QACpC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAEzB,IAAI,CAAC;YACH,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACxC,IAAI,CAAC,KAAK,CAAC,OAAO;oBAAE,SAAS;gBAE7B,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,oBAAoB,EAAE,CAAC;oBACvE,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;wBACpC,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,EAAE;wBACtC,eAAe,EAAE,KAAK,CAAC,eAAe;wBACtC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,IAAI,SAAS;wBACrD,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;wBAChD,qBAAqB,EAAE,KAAK,CAAC,qBAAqB,IAAI,SAAS;wBAC/D,UAAU,EAAE,KAAK,CAAC,UAAU;wBAC5B,UAAU,EAAE,KAAK,CAAC,UAAU;wBAC5B,SAAS,EAAE,KAAK,CAAC,SAAS;wBAC1B,iBAAiB,EAAE,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,iBAAiB,CAAC;qBAC5E,CAAC,CAAC;gBACL,CAAC;qBAAM,IAAI,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;oBACnD,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAClD,CAAC;qBAAM,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC;oBACpB,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,EAAE;wBAC9C,eAAe,EAAE,KAAK,CAAC,eAAe;wBACtC,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;wBAChD,UAAU,EAAE,KAAK,CAAC,UAAU;wBAC5B,UAAU,EAAE,KAAK,CAAC,UAAU;wBAC5B,SAAS,EAAE,KAAK,CAAC,SAAS;wBAC1B,MAAM,EAAE,KAAK,CAAC,MAAM;wBACpB,iBAAiB,EAAE,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,iBAAiB,CAAC;qBAC5E,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,IAAI,CAAC,SAAS,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YACpG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC;YACzE,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QACjC,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;YAC5B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,oBAAoB;QAClB,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;IACjC,CAAC;IAED,wEAAwE;IACxE,qBAAqB;IACrB,wEAAwE;IAExE,sDAAsD;IAC7C,cAAc,GAAsF;QAC3G,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,yBAAyB,EAAE,WAAW,EAAE,4CAA4C,EAAE;QAChI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,WAAW,EAAE,iCAAiC,EAAE;QAC5G,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,sBAAsB,EAAE,WAAW,EAAE,kCAAkC,EAAE;QACjH,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,0BAA0B,EAAE,WAAW,EAAE,8BAA8B,EAAE;QACrH,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,kBAAkB,EAAE,WAAW,EAAE,iCAAiC,EAAE;QAC9G,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,kBAAkB,EAAE,WAAW,EAAE,mCAAmC,EAAE;QAChH,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,0BAA0B,EAAE,WAAW,EAAE,kCAAkC,EAAE;QACvH,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,wBAAwB,EAAE,WAAW,EAAE,2BAA2B,EAAE;QACpH,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,iCAAiC,EAAE,WAAW,EAAE,8BAA8B,EAAE;KAC3H,CAAC;IAEF,qBAAqB,CAAC,KAAuB;QAC3C,2EAA2E;QAC3E,IAAI,KAAK,CAAC,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzC,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YAC9E,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;QACvB,CAAC;QACD,KAAK,CAAC,mBAAmB,GAAG,CAAC,KAAK,CAAC,mBAAmB,CAAC;QACvD,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAED,gBAAgB,CAAC,KAAuB;QACtC,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC;YAC3B,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,EAAE;YACV,OAAO,EAAE,MAAM;SAChB,CAAC,CAAC;QACH,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;QACrB,KAAK,CAAC,mBAAmB,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAED,mBAAmB,CAAC,KAAuB,EAAE,SAAiB;QAC5D,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAC7C,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAED,qBAAqB,CAAC,KAAuB,EAAE,IAAqB,EAAE,OAAsB;QAC1F,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;QACpB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;QACpD,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAED,uBAAuB,CAAC,KAAuB;QAC7C,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;IACvB,CAAC;IAEO,uBAAuB,CAAC,IAAmB;QACjD,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC;YACzB,KAAK,OAAO,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;YAClE,KAAK,OAAO,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;YAClD,KAAK,SAAS,CAAC,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;YAC5D,KAAK,QAAQ,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YACjD,KAAK,QAAQ,CAAC,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;YAClE,KAAK,QAAQ,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;YAC/C,KAAK,WAAW,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;YAClD,KAAK,QAAQ,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;QAChD,CAAC;IACH,CAAC;IAED,iBAAiB,CAAC,IAAmB;QACnC,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC;IACxE,CAAC;IAED,gBAAgB,CAAC,IAAmB;QAClC,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,EAAE,IAAI,IAAI,yBAAyB,CAAC;IAC5F,CAAC;IAED,+DAA+D;IAC/D,wBAAwB;QACtB,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED;;;OAGG;IACK,+BAA+B,CACrC,oBAA4B,EAC5B,kBAA0B;QAE1B,MAAM,MAAM,GAAG,qBAAqB,CAAC,QAAQ,CAAC;QAC9C,MAAM,WAAW,GAAG,MAAM,CAAC,mCAAmC,CAAC,oBAAoB,CAAC,CAAC;QACrF,IAAI,CAAC,WAAW;YAAE,OAAO,EAAE,CAAC;QAE5B,MAAM,GAAG,GAAG,MAAM,CAAC,oBAAoB,CAAC,WAAW,CAAC,EAAE,EAAE,kBAAkB,CAAC,CAAC;QAC5E,IAAI,CAAC,GAAG;YAAE,OAAO,EAAE,CAAC;QAEpB,OAAO,MAAM,CAAC,0BAA0B,CAAC,GAAG,CAAC,EAAE,CAAC;aAC7C,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC;aAClC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAED,sDAAsD;IACtD,cAAc,CAAC,MAA+B;QAC5C,MAAM,GAAG,GAAI,MAAM,CAAC,KAAK,CAA4B,IAAI,EAAE,CAAC;QAC5D,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;IACtB,CAAC;IAED,gBAAgB,CAAC,MAA+B;QAC9C,MAAM,GAAG,GAAI,MAAM,CAAC,KAAK,CAA4B,IAAI,EAAE,CAAC;QAC5D,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IACpF,CAAC;IAED,iBAAiB,CAAC,MAA+B,EAAE,MAAc,EAAE,MAAc,EAAE,QAAgB;QACjG,MAAM,GAAG,GAAI,MAAM,CAAC,KAAK,CAA4B,IAAI,EAAE,CAAC;QAC5D,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC;QACrB,CAAC;QACD,GAAG,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC;QACvB,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;IAC7B,CAAC;IAED,iBAAiB,CAAC,MAA+B,EAAE,GAAW;QAC5D,MAAM,GAAG,GAAI,MAAM,CAAC,KAAK,CAA4B,IAAI,EAAE,CAAC;QAC5D,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;QAChB,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;IAC7B,CAAC;IAED,oDAAoD;IACpD,kBAAkB,CAAC,MAA+B,EAAE,SAAiB;QACnE,MAAM,MAAM,GAAI,MAAM,CAAC,cAAc,CAAc,IAAI,EAAE,CAAC;QAC1D,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACtC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;YACb,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzB,CAAC;QACD,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;IACvC,CAAC;IAED,sBAAsB,CAAC,MAA+B,EAAE,SAAiB;QACvE,MAAM,MAAM,GAAI,MAAM,CAAC,cAAc,CAAc,IAAI,EAAE,CAAC;QAC1D,OAAO,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;IAED,wEAAwE;IACxE,eAAe;IACf,wEAAwE;IAExE,KAAK,CAAC,iBAAiB;QACrB,IAAI,CAAC,IAAI,CAAC,iBAAiB;YAAE,OAAO;QACpC,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;QACnC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAEzB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,iBAAiB,CACrD,IAAI,CAAC,qBAAqB,EAC1B,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,EACzC,CAAC,CACF,CAAC;YACF,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC;QAClC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAG,CAAW,CAAC,OAAO,CAAC,CAAC;QACnF,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;YACpC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,IAAI,CAAC,IAAI,CAAC,iBAAiB;YAAE,OAAO;QACpC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAEzB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAC1D,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAC/B,CAAC,EACD,IAAI,CAAC,YAAY,CAClB,CAAC;YACF,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC;QAChC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAG,CAAW,CAAC,OAAO,CAAC,CAAC;QACjF,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;YAClC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,kBAAkB;QAChB,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;IAC9B,CAAC;IAED,gBAAgB;QACd,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC7B,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;IAC5B,CAAC;IAEO,gBAAgB;QACtB,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;IACjC,CAAC;IAED,iBAAiB,CAAC,IAAqB;QACrC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QACjC,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,qCAAqC;IAChF,CAAC;IAED,kBAAkB,CAAC,KAAuC;QACxD,IAAI,KAAK,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;QAC/B,IAAI,OAAO,KAAK,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5D,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1B,OAAO,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;IAC9D,CAAC;IAED,wEAAwE;IACxE,sBAAsB;IACtB,wEAAwE;IAExE,kBAAkB,CAAC,GAAW;QAC5B,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YAC5C,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;IACL,CAAC;IAED,oBAAoB,CAAC,UAA2B,EAAE,IAAY;QAC5D,qDAAqD;QACrD,qDAAqD;QACrD,yDAAyD;QACzD,wCAAwC;QACxC,IAAI,IAAI,KAAK,CAAC;YAAE,OAAO,MAAM,CAAC;QAC9B,IAAI,IAAI,KAAK,CAAC;YAAE,OAAO,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QAClE,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,wEAAwE;IACxE,UAAU;IACV,wEAAwE;IAExE,IAAI,cAAc;QAChB,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO,MAAM,CAAC;QACnC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO,OAAO,CAAC;QACxD,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QACrD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,UAAU,CAAC,OAAsB;QAC/B,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAC1B,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,SAAS,EAAE;YACjD,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS;YAC9B,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS;SACnC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,KAAmB;QAC9C,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,KAAmB;QAC5C,OAAO,6BAA6B,CAAC;IACvC,CAAC;iRAnhCU,yBAAyB,yBAAzB,yBAAyB;6DAAzB,yBAAyB;YCnHlC,AADF,AADF,8BAA+B,aACC,SACxB;YAAA,uBAA2C;YAAC,kCAAiB;YACnE,AADmE,iBAAK,EAClE;YAIJ,AAFF,kGAA6B,sEAEpB;YA+zBX,iBAAM;;YAj0BJ,eAg0BC;YAh0BD,mDAg0BC;;;ADhtBU,yBAAyB;IAPrC,aAAa,CAAC,qBAAqB,EAAE,6BAA6B,CAAC;GAOvD,yBAAyB,CAohCrC;;iFAphCY,yBAAyB;cANrC,SAAS;6BACI,KAAK,YACP,uBAAuB;;kFAItB,yBAAyB;AAshCtC,MAAM,UAAU,oBAAoB;IAClC,0BAA0B;AAC5B,CAAC","sourcesContent":["import { ChangeDetectorRef, Component, OnInit, inject } from '@angular/core';\nimport { RegisterClass, UUIDsEqual } from '@memberjunction/global';\nimport { Metadata } from '@memberjunction/core';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { ResourceData, MJIntegrationObjectFieldEntity, MJCompanyIntegrationEntity } from '@memberjunction/core-entities';\nimport { IntegrationEngineBase } from '@memberjunction/integration-engine-base';\nimport {\n IntegrationDataService,\n IntegrationRunRow,\n EntityMapRow,\n FieldMapRow,\n RunDetailRow\n} from '../../services/integration-data.service';\n\n// ---------------------------------------------------------------------------\n// Interfaces\n// ---------------------------------------------------------------------------\n\n/** Source object from integration metadata */\ninterface DiscoveredObject {\n Name: string;\n Label: string;\n Category: string;\n Description: string;\n SupportsIncrementalSync: boolean;\n SupportsWrite: boolean;\n}\n\n/** Target MJ entity for the picker */\ninterface MJEntityOption {\n ID: string;\n Name: string;\n}\n\n/** MJ entity field for field mapping destination picker */\ninterface MJFieldOption {\n ID: string;\n Name: string;\n Type: string;\n IsRequired: boolean;\n}\n\n/** Transform type for the pipeline builder */\ntype TransformType = 'direct' | 'regex' | 'split' | 'combine' | 'lookup' | 'format' | 'coerce' | 'substring' | 'custom';\n\n/** A single step in a transform pipeline */\ninterface TransformStepUI {\n Type: TransformType;\n Config: Record<string, unknown>;\n OnError: 'Skip' | 'Null' | 'Fail';\n}\n\n/** Editable field map row used in the center panel */\ninterface EditableFieldMap {\n ID: string | null;\n SourceFieldName: string;\n SourceFieldLabel: string;\n SourceFieldType: string;\n DestinationFieldName: string;\n DestinationFieldLabel: string;\n IsKeyField: boolean;\n IsRequired: boolean;\n Direction: 'Both' | 'DestToSource' | 'SourceToDest';\n Status: 'Active' | 'Inactive';\n IsNew: boolean;\n IsDirty: boolean;\n // Source metadata (from connector discovery)\n IsSourcePK: boolean;\n IsSourceRequired: boolean;\n IsSourceReadOnly: boolean;\n // Transform pipeline\n TransformPipeline: TransformStepUI[];\n ShowTransformEditor: boolean;\n}\n\n/** Pending entity map — entity hasn't been created yet */\ninterface PendingMapEntry {\n LocalID: string;\n SourceObjectName: string;\n SourceObjectLabel: string;\n SchemaName: string;\n TableName: string;\n EntityName: string;\n SyncDirection: 'Bidirectional' | 'Pull' | 'Push';\n SourceFields: MJIntegrationObjectFieldEntity[];\n DDLContent: string;\n CreatedAt: Date;\n}\n\n/** Combined list item for left panel — merges real and pending maps */\ninterface MapListItem {\n ID: string;\n SourceName: string;\n TargetName: string;\n SyncDirection: string;\n SyncEnabled: boolean;\n IsPending: boolean;\n RealMap: EntityMapRow | null;\n PendingMap: PendingMapEntry | null;\n}\n\ntype TargetMode = 'existing' | 'new';\n\n/** Data preview row — key/value record */\ntype PreviewRecord = Record<string, string | number | boolean | null>;\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\n@RegisterClass(BaseResourceComponent, 'IntegrationMappingWorkspace')\n@Component({\n standalone: false,\n selector: 'app-mapping-workspace',\n templateUrl: './mapping-workspace.component.html',\n styleUrls: ['./mapping-workspace.component.css']\n})\nexport class MappingWorkspaceComponent extends BaseResourceComponent implements OnInit {\n\n // --- Core data ---\n Integrations: MJCompanyIntegrationEntity[] = [];\n EntityMaps: EntityMapRow[] = [];\n FieldMaps: FieldMapRow[] = [];\n RunEntityDetails: RunDetailRow[] = [];\n LatestRun: IntegrationRunRow | null = null;\n\n // --- Selection ---\n SelectedIntegrationID = '';\n SelectedMapID: string | null = null;\n EntityMapSearchText = '';\n\n // --- Loading ---\n IsLoadingIntegrations = false;\n IsLoadingEntityMaps = false;\n IsLoadingFieldMaps = false;\n IsLoadingRunDetails = false;\n\n // --- Add Map flow ---\n ShowAddPanel = false;\n TargetMode: TargetMode = 'existing';\n\n // Source objects from discovery\n DiscoveredObjects: DiscoveredObject[] = [];\n IsDiscoveringObjects = false;\n DiscoverError = '';\n SelectedSourceObjectName = '';\n\n // Target: existing entity\n MJEntities: MJEntityOption[] = [];\n IsLoadingEntities = false;\n SelectedEntityID: string | null = null;\n\n // Target: new entity\n NewEntitySchemaName = '';\n NewEntityTableName = '';\n NewEntityName = '';\n DBSchemas: string[] = [];\n\n // Sync direction for add flow\n AddSyncDirection: 'Bidirectional' | 'Pull' | 'Push' = 'Pull';\n IsSavingEntityMap = false;\n\n // --- Pending entity maps (local state) ---\n PendingMaps: PendingMapEntry[] = [];\n\n // --- DDL preview ---\n IsGeneratingDDL = false;\n DDLPreviewContent = '';\n DDLPreviewError = '';\n\n // --- Field mapping editing ---\n EditableFields: EditableFieldMap[] = [];\n DestinationFields: MJFieldOption[] = [];\n IsLoadingDestFields = false;\n IsSavingFields = false;\n AutoMapCount = 0;\n ShowAutoMapBanner = false;\n\n // --- Source fields for auto-mapping ---\n SourceFields: MJIntegrationObjectFieldEntity[] = [];\n IsLoadingSourceFields = false;\n\n // --- Data preview ---\n SourcePreviewData: PreviewRecord[] = [];\n DestPreviewData: PreviewRecord[] = [];\n IsLoadingSourcePreview = false;\n IsLoadingDestPreview = false;\n ShowSourcePreview = false;\n ShowDestPreview = false;\n\n private dataService = inject(IntegrationDataService);\n private cdr = inject(ChangeDetectorRef);\n private discoverCache = new Map<string, DiscoveredObject[]>();\n private pendingCounter = 0;\n\n async ngOnInit(): Promise<void> {\n super.ngOnInit();\n await this.LoadIntegrations();\n this.NotifyLoadComplete();\n }\n\n // =====================================================================\n // Computed Properties\n // =====================================================================\n\n /** Merged list of real entity maps + pending maps, for the left panel */\n get AllMaps(): MapListItem[] {\n const realItems: MapListItem[] = this.EntityMaps.map(em => ({\n ID: em.ID,\n SourceName: em.ExternalObjectName,\n TargetName: em.Entity,\n SyncDirection: em.SyncDirection,\n SyncEnabled: em.SyncEnabled,\n IsPending: false,\n RealMap: em,\n PendingMap: null\n }));\n\n const pendingItems: MapListItem[] = this.PendingMaps.map(pm => ({\n ID: pm.LocalID,\n SourceName: pm.SourceObjectName,\n TargetName: pm.EntityName,\n SyncDirection: pm.SyncDirection,\n SyncEnabled: false,\n IsPending: true,\n RealMap: null,\n PendingMap: pm\n }));\n\n return [...realItems, ...pendingItems];\n }\n\n get FilteredMaps(): MapListItem[] {\n const all = this.AllMaps;\n if (!this.EntityMapSearchText.trim()) return all;\n const search = this.EntityMapSearchText.toLowerCase();\n return all.filter(\n m => m.SourceName.toLowerCase().includes(search)\n || m.TargetName.toLowerCase().includes(search)\n );\n }\n\n get SelectedMap(): MapListItem | null {\n if (!this.SelectedMapID) return null;\n return this.AllMaps.find(m => UUIDsEqual(m.ID, this.SelectedMapID)) ?? null;\n }\n\n get SelectedEntityMap(): EntityMapRow | null {\n const map = this.SelectedMap;\n return map?.RealMap ?? null;\n }\n\n get SelectedPendingMap(): PendingMapEntry | null {\n const map = this.SelectedMap;\n return map?.PendingMap ?? null;\n }\n\n get HasDirtyFields(): boolean {\n return this.EditableFields.some(f => f.IsDirty || f.IsNew);\n }\n\n get ActiveEditableFields(): EditableFieldMap[] {\n return this.EditableFields.filter(f => f.Status !== 'Inactive');\n }\n\n get IsAddFormValid(): boolean {\n if (!this.SelectedSourceObjectName) return false;\n if (this.TargetMode === 'existing') return !!this.SelectedEntityID;\n return !!this.NewEntitySchemaName.trim() && !!this.NewEntityTableName.trim() && !!this.NewEntityName.trim();\n }\n\n /** Auto-suggest table/entity names from selected source object */\n get SuggestedTableName(): string {\n if (!this.SelectedSourceObjectName) return '';\n return this.SelectedSourceObjectName.replace(/[^A-Za-z0-9_]/g, '_');\n }\n\n get SuggestedEntityName(): string {\n if (!this.SelectedSourceObjectName) return '';\n const obj = this.DiscoveredObjects.find(o => o.Name === this.SelectedSourceObjectName);\n const label = obj?.Label || this.SelectedSourceObjectName;\n if (this.NewEntitySchemaName) return `${this.NewEntitySchemaName} ${label}`;\n return label;\n }\n\n // =====================================================================\n // Data Loading\n // =====================================================================\n\n async LoadIntegrations(): Promise<void> {\n this.IsLoadingIntegrations = true;\n this.cdr.detectChanges();\n try {\n const summaries = await this.dataService.LoadIntegrationSummaries(this.RunViewToUse);\n this.Integrations = summaries.map(s => s.Integration);\n } finally {\n this.IsLoadingIntegrations = false;\n this.cdr.detectChanges();\n }\n }\n\n async OnIntegrationChange(integrationID: string): Promise<void> {\n this.SelectedIntegrationID = integrationID;\n this.SelectedMapID = null;\n this.FieldMaps = [];\n this.EditableFields = [];\n this.DestinationFields = [];\n this.RunEntityDetails = [];\n this.LatestRun = null;\n this.EntityMapSearchText = '';\n this.CloseAddPanel();\n this.CloseAllPreviews();\n\n if (!integrationID) return;\n\n // Load entity maps + latest run in parallel, and auto-discover source objects\n await Promise.all([\n this.LoadEntityMapsForIntegration(integrationID),\n this.LoadLatestRunForIntegration(integrationID),\n this.DiscoverSourceObjects(integrationID)\n ]);\n }\n\n private async LoadEntityMapsForIntegration(integrationID: string): Promise<void> {\n this.IsLoadingEntityMaps = true;\n this.cdr.detectChanges();\n try {\n this.EntityMaps = await this.dataService.LoadEntityMaps(integrationID, this.RunViewToUse);\n } finally {\n this.IsLoadingEntityMaps = false;\n this.cdr.detectChanges();\n }\n }\n\n private async LoadLatestRunForIntegration(integrationID: string): Promise<void> {\n this.IsLoadingRunDetails = true;\n this.cdr.detectChanges();\n try {\n const runs = await this.dataService.LoadRunHistory(integrationID, 1, this.RunViewToUse);\n this.LatestRun = runs.length > 0 ? runs[0] : null;\n if (this.LatestRun) {\n this.RunEntityDetails = await this.dataService.LoadRunDetails(this.LatestRun.ID, this.RunViewToUse);\n }\n } finally {\n this.IsLoadingRunDetails = false;\n this.cdr.detectChanges();\n }\n }\n\n /** Load source objects from IntegrationObject metadata via engine (cached per integration) */\n private DiscoverSourceObjects(integrationID: string): Promise<void> {\n if (this.discoverCache.has(integrationID)) {\n this.DiscoveredObjects = this.discoverCache.get(integrationID)!;\n return Promise.resolve();\n }\n\n this.IsDiscoveringObjects = true;\n this.DiscoverError = '';\n this.DiscoveredObjects = [];\n this.cdr.detectChanges();\n\n try {\n const engine = IntegrationEngineBase.Instance;\n const integration = engine.GetIntegrationForCompanyIntegration(integrationID);\n if (!integration) {\n this.DiscoverError = 'Integration not found in metadata';\n return Promise.resolve();\n }\n\n const objects = engine.GetActiveIntegrationObjects(integration.ID);\n this.DiscoveredObjects = objects.map(o => ({\n Name: o.Name,\n Label: o.DisplayName || o.Name,\n Category: o.Category || 'Uncategorized',\n Description: o.Description || '',\n SupportsIncrementalSync: o.SupportsIncrementalSync,\n SupportsWrite: o.SupportsWrite\n }));\n this.discoverCache.set(integrationID, this.DiscoveredObjects);\n } catch (e) {\n this.DiscoverError = `Failed to load objects: ${(e as Error).message}`;\n } finally {\n this.IsDiscoveringObjects = false;\n this.cdr.detectChanges();\n }\n return Promise.resolve();\n }\n\n // =====================================================================\n // Entity Map Selection\n // =====================================================================\n\n async OnMapSelect(item: MapListItem): Promise<void> {\n this.SelectedMapID = item.ID;\n this.CloseAllPreviews();\n\n if (item.IsPending) {\n // Pending maps show the pending entity view in center panel\n this.EditableFields = [];\n this.DestinationFields = [];\n this.cdr.detectChanges();\n return;\n }\n\n // Real entity map — load field maps + dest fields, resolve source from metadata\n this.IsLoadingFieldMaps = true;\n this.cdr.detectChanges();\n try {\n await Promise.all([\n this.dataService.LoadFieldMaps(item.ID, this.RunViewToUse).then(fms => { this.FieldMaps = fms; }),\n this.LoadDestinationFields(item.RealMap!.EntityID)\n ]);\n\n // Resolve source fields from IntegrationObject metadata\n this.SourceFields = this.resolveSourceFieldsFromMetadata(\n this.SelectedIntegrationID,\n item.RealMap!.ExternalObjectName\n );\n\n this.EditableFields = this.FieldMaps.map(fm => this.ToEditableField(fm));\n } finally {\n this.IsLoadingFieldMaps = false;\n this.cdr.detectChanges();\n }\n }\n\n IsSelectedMap(id: string): boolean {\n return this.SelectedMapID === id || UUIDsEqual(this.SelectedMapID, id);\n }\n\n async OnToggleEntityMap(em: EntityMapRow): Promise<void> {\n await this.dataService.ToggleEntityMapEnabled(em.ID, em.SyncEnabled);\n }\n\n async OnDeleteMap(item: MapListItem, event: Event): Promise<void> {\n event.stopPropagation();\n if (item.IsPending) {\n this.PendingMaps = this.PendingMaps.filter(p => p.LocalID !== item.ID);\n } else {\n const deleted = await this.dataService.DeleteEntityMap(item.ID);\n if (deleted) {\n this.EntityMaps = this.EntityMaps.filter(e => !UUIDsEqual(e.ID, item.ID));\n }\n }\n\n if (this.IsSelectedMap(item.ID)) {\n this.SelectedMapID = null;\n this.EditableFields = [];\n this.DestinationFields = [];\n }\n this.cdr.detectChanges();\n }\n\n // =====================================================================\n // Add Map Flow\n // =====================================================================\n\n OpenAddPanel(): void {\n this.ShowAddPanel = true;\n this.TargetMode = 'existing';\n this.ResetAddForm();\n this.EnsureEntitiesLoaded();\n this.LoadDBSchemas();\n }\n\n CloseAddPanel(): void {\n this.ShowAddPanel = false;\n this.ResetAddForm();\n }\n\n SetTargetMode(mode: TargetMode): void {\n this.TargetMode = mode;\n }\n\n OnSourceObjectChange(objectName: string): void {\n this.SelectedSourceObjectName = objectName;\n // Auto-suggest table/entity name for new entity mode\n if (this.TargetMode === 'new') {\n this.NewEntityTableName = this.SuggestedTableName;\n this.NewEntityName = this.SuggestedEntityName;\n }\n }\n\n OnSchemaNameChange(): void {\n // Update entity name suggestion when schema changes\n if (this.SelectedSourceObjectName) {\n this.NewEntityName = this.SuggestedEntityName;\n }\n }\n\n async SaveAddMap(): Promise<void> {\n if (!this.IsAddFormValid || !this.SelectedIntegrationID) return;\n this.IsSavingEntityMap = true;\n this.cdr.detectChanges();\n\n try {\n if (this.TargetMode === 'existing') {\n await this.SaveExistingEntityMap();\n } else {\n await this.SaveNewEntityMap();\n }\n } finally {\n this.IsSavingEntityMap = false;\n this.cdr.detectChanges();\n }\n }\n\n private async SaveExistingEntityMap(): Promise<void> {\n const sourceObj = this.DiscoveredObjects.find(o => o.Name === this.SelectedSourceObjectName);\n const result = await this.dataService.CreateEntityMap({\n CompanyIntegrationID: this.SelectedIntegrationID,\n ExternalObjectName: this.SelectedSourceObjectName,\n ExternalObjectLabel: sourceObj?.Label !== sourceObj?.Name ? sourceObj?.Label : undefined,\n EntityID: this.SelectedEntityID!,\n SyncDirection: this.AddSyncDirection\n });\n\n if (result) {\n // Reload entity maps and auto-generate field mappings\n await this.LoadEntityMapsForIntegration(this.SelectedIntegrationID);\n const newMap = this.EntityMaps.find(\n em => em.ExternalObjectName === this.SelectedSourceObjectName\n );\n if (newMap) {\n this.SelectedMapID = newMap.ID;\n await this.AutoGenerateFieldMappings(newMap);\n }\n this.CloseAddPanel();\n }\n }\n\n private async SaveNewEntityMap(): Promise<void> {\n // Resolve source fields from IntegrationObject metadata\n const sourceFields = this.resolveSourceFieldsFromMetadata(\n this.SelectedIntegrationID,\n this.SelectedSourceObjectName\n );\n\n // Generate DDL preview\n let ddlContent = '';\n try {\n const ddlResult = await this.dataService.SchemaPreview(\n this.SelectedIntegrationID,\n [{\n SourceObjectName: this.SelectedSourceObjectName,\n SchemaName: this.NewEntitySchemaName.trim(),\n TableName: this.NewEntityTableName.trim(),\n EntityName: this.NewEntityName.trim()\n }],\n 'sqlserver'\n );\n if (ddlResult.Success && ddlResult.Files.length > 0) {\n ddlContent = ddlResult.Files.map(f => f.Content).join('\\n\\n');\n }\n } catch {\n // DDL will be empty — not a blocker\n }\n\n // Create pending map entry\n const pendingMap: PendingMapEntry = {\n LocalID: `pending-${++this.pendingCounter}`,\n SourceObjectName: this.SelectedSourceObjectName,\n SourceObjectLabel: this.DiscoveredObjects.find(o => o.Name === this.SelectedSourceObjectName)?.Label || this.SelectedSourceObjectName,\n SchemaName: this.NewEntitySchemaName.trim(),\n TableName: this.NewEntityTableName.trim(),\n EntityName: this.NewEntityName.trim(),\n SyncDirection: this.AddSyncDirection,\n SourceFields: sourceFields,\n DDLContent: ddlContent,\n CreatedAt: new Date()\n };\n\n this.PendingMaps.push(pendingMap);\n this.SelectedMapID = pendingMap.LocalID;\n this.CloseAddPanel();\n }\n\n private ResetAddForm(): void {\n this.SelectedSourceObjectName = '';\n this.SelectedEntityID = null;\n this.NewEntitySchemaName = '';\n this.NewEntityTableName = '';\n this.NewEntityName = '';\n this.AddSyncDirection = 'Pull';\n this.DDLPreviewContent = '';\n this.DDLPreviewError = '';\n }\n\n private async EnsureEntitiesLoaded(): Promise<void> {\n if (this.MJEntities.length > 0) return;\n this.IsLoadingEntities = true;\n this.cdr.detectChanges();\n try {\n this.MJEntities = await this.dataService.LoadMJEntities(this.RunViewToUse);\n } finally {\n this.IsLoadingEntities = false;\n this.cdr.detectChanges();\n }\n }\n\n private LoadDBSchemas(): void {\n if (this.DBSchemas.length > 0) return;\n const md = new Metadata();\n const schemaSet = new Set<string>();\n for (const entity of md.Entities) {\n if (entity.SchemaName) {\n schemaSet.add(entity.SchemaName);\n }\n }\n this.DBSchemas = Array.from(schemaSet).sort();\n }\n\n // =====================================================================\n // DDL Preview for Add Panel\n // =====================================================================\n\n async PreviewDDL(): Promise<void> {\n if (!this.SelectedSourceObjectName || !this.NewEntitySchemaName.trim() || !this.NewEntityTableName.trim()) return;\n this.IsGeneratingDDL = true;\n this.DDLPreviewContent = '';\n this.DDLPreviewError = '';\n this.cdr.detectChanges();\n\n try {\n const result = await this.dataService.SchemaPreview(\n this.SelectedIntegrationID,\n [{\n SourceObjectName: this.SelectedSourceObjectName,\n SchemaName: this.NewEntitySchemaName.trim(),\n TableName: this.NewEntityTableName.trim(),\n EntityName: this.NewEntityName.trim() || this.SuggestedEntityName\n }],\n 'sqlserver'\n );\n\n if (result.Success && result.Files.length > 0) {\n this.DDLPreviewContent = result.Files.map(f => `-- ${f.Description}\\n-- ${f.FilePath}\\n\\n${f.Content}`).join('\\n\\n');\n } else {\n this.DDLPreviewError = result.Message || 'No DDL generated';\n }\n } catch (e) {\n this.DDLPreviewError = `DDL generation failed: ${(e as Error).message}`;\n } finally {\n this.IsGeneratingDDL = false;\n this.cdr.detectChanges();\n }\n }\n\n // =====================================================================\n // Field Mapping\n // =====================================================================\n\n private ToEditableField(fm: FieldMapRow): EditableFieldMap {\n // Look up source metadata from IntegrationObjectField entities\n const srcMeta = this.SourceFields.find(\n sf => sf.Name.toLowerCase() === fm.SourceFieldName.toLowerCase()\n );\n return {\n ID: fm.ID,\n SourceFieldName: fm.SourceFieldName,\n SourceFieldLabel: fm.SourceFieldLabel ?? '',\n SourceFieldType: srcMeta?.Type ?? '',\n DestinationFieldName: fm.DestinationFieldName,\n DestinationFieldLabel: fm.DestinationFieldLabel ?? '',\n IsKeyField: fm.IsKeyField,\n IsRequired: fm.IsRequired,\n Direction: fm.Direction,\n Status: fm.Status as 'Active' | 'Inactive',\n IsNew: false,\n IsDirty: false,\n IsSourcePK: srcMeta?.IsPrimaryKey ?? false,\n IsSourceRequired: srcMeta?.IsRequired ?? false,\n IsSourceReadOnly: srcMeta?.IsReadOnly ?? false,\n TransformPipeline: this.ParseTransformPipeline(fm.TransformPipeline),\n ShowTransformEditor: false\n };\n }\n\n private ParseTransformPipeline(json: string | null): TransformStepUI[] {\n if (!json || json.trim() === '') return [];\n try {\n const parsed: unknown = JSON.parse(json);\n if (!Array.isArray(parsed)) return [];\n return (parsed as TransformStepUI[]).map(step => ({\n Type: step.Type ?? 'direct',\n Config: (step.Config as Record<string, unknown>) ?? {},\n OnError: step.OnError ?? 'Fail'\n }));\n } catch {\n return [];\n }\n }\n\n SerializeTransformPipeline(steps: TransformStepUI[]): string | null {\n if (steps.length === 0) return null;\n return JSON.stringify(steps.map(s => ({ Type: s.Type, Config: s.Config, OnError: s.OnError })));\n }\n\n private async LoadDestinationFields(entityID: string): Promise<void> {\n this.IsLoadingDestFields = true;\n this.cdr.detectChanges();\n try {\n this.DestinationFields = await this.dataService.LoadEntityFields(entityID, this.RunViewToUse);\n } finally {\n this.IsLoadingDestFields = false;\n this.cdr.detectChanges();\n }\n }\n\n /** Auto-generate field mappings by matching source fields to destination by name */\n async AutoGenerateFieldMappings(entityMap: EntityMapRow): Promise<void> {\n // Resolve source fields from IntegrationObject metadata\n this.IsLoadingSourceFields = true;\n this.cdr.detectChanges();\n try {\n this.SourceFields = this.resolveSourceFieldsFromMetadata(\n this.SelectedIntegrationID,\n entityMap.ExternalObjectName\n );\n\n if (this.SourceFields.length === 0) return;\n\n // Load destination fields\n await this.LoadDestinationFields(entityMap.EntityID);\n\n // Match fields by name (case-insensitive)\n const matchedFields = this.MatchFieldsByName(this.SourceFields, this.DestinationFields);\n this.AutoMapCount = matchedFields.length;\n this.ShowAutoMapBanner = this.AutoMapCount > 0;\n\n // Create field maps for matches, preserving source field order via Priority\n for (let idx = 0; idx < matchedFields.length; idx++) {\n const match = matchedFields[idx];\n const displayName = match.sourceField.DisplayName || match.sourceField.Name;\n await this.dataService.CreateFieldMap({\n EntityMapID: entityMap.ID,\n SourceFieldName: match.sourceField.Name,\n SourceFieldLabel: displayName !== match.sourceField.Name ? displayName : undefined,\n DestinationFieldName: match.destField.Name,\n IsKeyField: match.sourceField.IsPrimaryKey,\n IsRequired: match.sourceField.IsRequired,\n Direction: 'SourceToDest',\n TransformPipeline: JSON.stringify([{ Type: 'direct', Config: {}, OnError: 'Fail' }]),\n Priority: match.sourceIndex\n });\n }\n\n // Reload field maps\n this.FieldMaps = await this.dataService.LoadFieldMaps(entityMap.ID, this.RunViewToUse);\n this.EditableFields = this.FieldMaps.map(fm => this.ToEditableField(fm));\n } finally {\n this.IsLoadingSourceFields = false;\n this.cdr.detectChanges();\n }\n }\n\n private MatchFieldsByName(\n sourceFields: MJIntegrationObjectFieldEntity[],\n destFields: MJFieldOption[]\n ): Array<{ sourceField: MJIntegrationObjectFieldEntity; destField: MJFieldOption; sourceIndex: number }> {\n const matches: Array<{ sourceField: MJIntegrationObjectFieldEntity; destField: MJFieldOption; sourceIndex: number }> = [];\n const destFieldMap = new Map<string, MJFieldOption>();\n for (const df of destFields) {\n destFieldMap.set(df.Name.toLowerCase(), df);\n }\n\n for (let i = 0; i < sourceFields.length; i++) {\n const sf = sourceFields[i];\n const destMatch = destFieldMap.get(sf.Name.toLowerCase());\n if (destMatch) {\n matches.push({ sourceField: sf, destField: destMatch, sourceIndex: i });\n }\n }\n return matches;\n }\n\n /** Validation: count fields missing destination mapping */\n get UnmappedRequiredCount(): number {\n return this.EditableFields.filter(\n f => f.Status === 'Active' && f.IsRequired && !f.DestinationFieldName\n ).length;\n }\n\n /** Validation: check if at least one key field is configured */\n get HasKeyField(): boolean {\n return this.EditableFields.some(f => f.Status === 'Active' && f.IsKeyField);\n }\n\n /** Validation: overall mapping readiness */\n get MappingValidation(): { IsValid: boolean; Warnings: string[] } {\n const warnings: string[] = [];\n if (this.UnmappedRequiredCount > 0) {\n warnings.push(`${this.UnmappedRequiredCount} required field(s) missing destination mapping`);\n }\n if (!this.HasKeyField && this.ActiveEditableFields.length > 0) {\n warnings.push('No key field configured — sync may create duplicates');\n }\n return { IsValid: warnings.length === 0, Warnings: warnings };\n }\n\n /** Re-run auto-mapping for the currently selected entity map */\n async RerunAutoMap(): Promise<void> {\n if (!this.SelectedEntityMap) return;\n await this.AutoGenerateFieldMappings(this.SelectedEntityMap);\n }\n\n OnFieldChanged(field: EditableFieldMap): void {\n field.IsDirty = true;\n }\n\n AddFieldMapping(): void {\n this.EditableFields.push({\n ID: null,\n SourceFieldName: '',\n SourceFieldLabel: '',\n SourceFieldType: '',\n DestinationFieldName: '',\n DestinationFieldLabel: '',\n IsKeyField: false,\n IsRequired: false,\n Direction: 'SourceToDest',\n Status: 'Active',\n IsNew: true,\n IsDirty: true,\n IsSourcePK: false,\n IsSourceRequired: false,\n IsSourceReadOnly: false,\n TransformPipeline: [],\n ShowTransformEditor: false\n });\n this.cdr.detectChanges();\n }\n\n RemoveFieldMapping(index: number): void {\n const field = this.EditableFields[index];\n if (field.IsNew) {\n this.EditableFields.splice(index, 1);\n } else if (field.ID) {\n field.Status = 'Inactive';\n field.IsDirty = true;\n }\n this.cdr.detectChanges();\n }\n\n async SaveFieldMappings(): Promise<void> {\n if (!this.SelectedEntityMap) return;\n this.IsSavingFields = true;\n this.cdr.detectChanges();\n\n try {\n for (const field of this.EditableFields) {\n if (!field.IsDirty) continue;\n\n if (field.IsNew && field.SourceFieldName && field.DestinationFieldName) {\n await this.dataService.CreateFieldMap({\n EntityMapID: this.SelectedEntityMap.ID,\n SourceFieldName: field.SourceFieldName,\n SourceFieldLabel: field.SourceFieldLabel || undefined,\n DestinationFieldName: field.DestinationFieldName,\n DestinationFieldLabel: field.DestinationFieldLabel || undefined,\n IsKeyField: field.IsKeyField,\n IsRequired: field.IsRequired,\n Direction: field.Direction,\n TransformPipeline: this.SerializeTransformPipeline(field.TransformPipeline)\n });\n } else if (field.ID && field.Status === 'Inactive') {\n await this.dataService.DeleteFieldMap(field.ID);\n } else if (field.ID) {\n await this.dataService.UpdateFieldMap(field.ID, {\n SourceFieldName: field.SourceFieldName,\n DestinationFieldName: field.DestinationFieldName,\n IsKeyField: field.IsKeyField,\n IsRequired: field.IsRequired,\n Direction: field.Direction,\n Status: field.Status,\n TransformPipeline: this.SerializeTransformPipeline(field.TransformPipeline)\n });\n }\n }\n\n this.FieldMaps = await this.dataService.LoadFieldMaps(this.SelectedEntityMap.ID, this.RunViewToUse);\n this.EditableFields = this.FieldMaps.map(fm => this.ToEditableField(fm));\n this.ShowAutoMapBanner = false;\n } finally {\n this.IsSavingFields = false;\n this.cdr.detectChanges();\n }\n }\n\n DismissAutoMapBanner(): void {\n this.ShowAutoMapBanner = false;\n }\n\n // =====================================================================\n // Transform Pipeline\n // =====================================================================\n\n /** Available transform types with display metadata */\n readonly TransformTypes: Array<{ Value: TransformType; Label: string; Icon: string; Description: string }> = [\n { Value: 'direct', Label: 'Direct', Icon: 'fa-solid fa-arrow-right', Description: 'Pass through as-is (with optional default)' },\n { Value: 'regex', Label: 'Regex', Icon: 'fa-solid fa-code', Description: 'Apply regex pattern replacement' },\n { Value: 'split', Label: 'Split', Icon: 'fa-solid fa-scissors', Description: 'Split text and extract a segment' },\n { Value: 'combine', Label: 'Combine', Icon: 'fa-solid fa-object-group', Description: 'Merge multiple source fields' },\n { Value: 'lookup', Label: 'Lookup', Icon: 'fa-solid fa-book', Description: 'Map values using a lookup table' },\n { Value: 'format', Label: 'Format', Icon: 'fa-solid fa-font', Description: 'Format dates, numbers, or strings' },\n { Value: 'coerce', Label: 'Coerce', Icon: 'fa-solid fa-exchange-alt', Description: 'Convert to a different data type' },\n { Value: 'substring', Label: 'Substring', Icon: 'fa-solid fa-text-width', Description: 'Extract a portion of text' },\n { Value: 'custom', Label: 'Custom', Icon: 'fa-solid fa-wand-magic-sparkles', Description: 'Custom JavaScript expression' }\n ];\n\n ToggleTransformEditor(field: EditableFieldMap): void {\n // Auto-add a direct step if none exist so the editor has something to show\n if (field.TransformPipeline.length === 0) {\n field.TransformPipeline.push({ Type: 'direct', Config: {}, OnError: 'Fail' });\n field.IsDirty = true;\n }\n field.ShowTransformEditor = !field.ShowTransformEditor;\n this.cdr.detectChanges();\n }\n\n AddTransformStep(field: EditableFieldMap): void {\n field.TransformPipeline.push({\n Type: 'direct',\n Config: {},\n OnError: 'Fail'\n });\n field.IsDirty = true;\n field.ShowTransformEditor = true;\n this.cdr.detectChanges();\n }\n\n RemoveTransformStep(field: EditableFieldMap, stepIndex: number): void {\n field.TransformPipeline.splice(stepIndex, 1);\n field.IsDirty = true;\n this.cdr.detectChanges();\n }\n\n OnTransformTypeChange(field: EditableFieldMap, step: TransformStepUI, newType: TransformType): void {\n step.Type = newType;\n step.Config = this.GetDefaultConfigForType(newType);\n field.IsDirty = true;\n this.cdr.detectChanges();\n }\n\n OnTransformConfigChange(field: EditableFieldMap): void {\n field.IsDirty = true;\n }\n\n private GetDefaultConfigForType(type: TransformType): Record<string, unknown> {\n switch (type) {\n case 'direct': return {};\n case 'regex': return { Pattern: '', Replacement: '', Flags: 'g' };\n case 'split': return { Delimiter: ',', Index: 0 };\n case 'combine': return { SourceFields: [], Separator: ' ' };\n case 'lookup': return { Map: {}, Default: null };\n case 'format': return { FormatString: 'ISO', FormatType: 'date' };\n case 'coerce': return { TargetType: 'string' };\n case 'substring': return { Start: 0, Length: 10 };\n case 'custom': return { Expression: 'value' };\n }\n }\n\n GetTransformLabel(type: TransformType): string {\n return this.TransformTypes.find(t => t.Value === type)?.Label ?? type;\n }\n\n GetTransformIcon(type: TransformType): string {\n return this.TransformTypes.find(t => t.Value === type)?.Icon ?? 'fa-solid fa-arrow-right';\n }\n\n /** For combine transforms: get available source field names */\n GetAvailableSourceFields(): string[] {\n return this.SourceFields.map(sf => sf.Name);\n }\n\n /**\n * Resolve source fields from IntegrationObjectField metadata via IntegrationEngineBase.\n * CompanyIntegrationID → Integration → IntegrationObject → IntegrationObjectFields.\n */\n private resolveSourceFieldsFromMetadata(\n companyIntegrationID: string,\n externalObjectName: string\n ): MJIntegrationObjectFieldEntity[] {\n const engine = IntegrationEngineBase.Instance;\n const integration = engine.GetIntegrationForCompanyIntegration(companyIntegrationID);\n if (!integration) return [];\n\n const obj = engine.GetIntegrationObject(integration.ID, externalObjectName);\n if (!obj) return [];\n\n return engine.GetIntegrationObjectFields(obj.ID)\n .filter(f => f.Status === 'Active')\n .sort((a, b) => a.Sequence - b.Sequence);\n }\n\n /** For lookup transforms: add a new key-value pair */\n AddLookupEntry(config: Record<string, unknown>): void {\n const map = (config['Map'] as Record<string, string>) ?? {};\n map[''] = '';\n config['Map'] = map;\n }\n\n GetLookupEntries(config: Record<string, unknown>): Array<{ key: string; value: string }> {\n const map = (config['Map'] as Record<string, string>) ?? {};\n return Object.entries(map).map(([key, value]) => ({ key, value: String(value) }));\n }\n\n UpdateLookupEntry(config: Record<string, unknown>, oldKey: string, newKey: string, newValue: string): void {\n const map = (config['Map'] as Record<string, string>) ?? {};\n if (oldKey !== newKey) {\n delete map[oldKey];\n }\n map[newKey] = newValue;\n config['Map'] = { ...map };\n }\n\n RemoveLookupEntry(config: Record<string, unknown>, key: string): void {\n const map = (config['Map'] as Record<string, string>) ?? {};\n delete map[key];\n config['Map'] = { ...map };\n }\n\n /** For combine transforms: toggle a source field */\n ToggleCombineField(config: Record<string, unknown>, fieldName: string): void {\n const fields = (config['SourceFields'] as string[]) ?? [];\n const idx = fields.indexOf(fieldName);\n if (idx >= 0) {\n fields.splice(idx, 1);\n } else {\n fields.push(fieldName);\n }\n config['SourceFields'] = [...fields];\n }\n\n IsCombineFieldSelected(config: Record<string, unknown>, fieldName: string): boolean {\n const fields = (config['SourceFields'] as string[]) ?? [];\n return fields.includes(fieldName);\n }\n\n // =====================================================================\n // Data Preview\n // =====================================================================\n\n async LoadSourcePreview(): Promise<void> {\n if (!this.SelectedEntityMap) return;\n this.IsLoadingSourcePreview = true;\n this.ShowSourcePreview = true;\n this.SourcePreviewData = [];\n this.cdr.detectChanges();\n\n try {\n const result = await this.dataService.PreviewSourceData(\n this.SelectedIntegrationID,\n this.SelectedEntityMap.ExternalObjectName,\n 5\n );\n this.SourcePreviewData = result;\n } catch (e) {\n console.error('[MappingWorkspace] Source preview failed:', (e as Error).message);\n } finally {\n this.IsLoadingSourcePreview = false;\n this.cdr.detectChanges();\n }\n }\n\n async LoadDestPreview(): Promise<void> {\n if (!this.SelectedEntityMap) return;\n this.IsLoadingDestPreview = true;\n this.ShowDestPreview = true;\n this.DestPreviewData = [];\n this.cdr.detectChanges();\n\n try {\n const result = await this.dataService.PreviewDestinationData(\n this.SelectedEntityMap.EntityID,\n 5,\n this.RunViewToUse\n );\n this.DestPreviewData = result;\n } catch (e) {\n console.error('[MappingWorkspace] Dest preview failed:', (e as Error).message);\n } finally {\n this.IsLoadingDestPreview = false;\n this.cdr.detectChanges();\n }\n }\n\n CloseSourcePreview(): void {\n this.ShowSourcePreview = false;\n this.SourcePreviewData = [];\n }\n\n CloseDestPreview(): void {\n this.ShowDestPreview = false;\n this.DestPreviewData = [];\n }\n\n private CloseAllPreviews(): void {\n this.CloseSourcePreview();\n this.CloseDestPreview();\n this.ShowAutoMapBanner = false;\n }\n\n GetPreviewColumns(data: PreviewRecord[]): string[] {\n if (data.length === 0) return [];\n return Object.keys(data[0]).slice(0, 8); // Limit to 8 columns for readability\n }\n\n FormatPreviewValue(value: string | number | boolean | null): string {\n if (value == null) return '--';\n if (typeof value === 'boolean') return value ? 'Yes' : 'No';\n const str = String(value);\n return str.length > 50 ? str.substring(0, 47) + '...' : str;\n }\n\n // =====================================================================\n // Pending Map Actions\n // =====================================================================\n\n CopyDDLToClipboard(ddl: string): void {\n navigator.clipboard.writeText(ddl).catch(() => {\n console.error('[MappingWorkspace] Failed to copy DDL to clipboard');\n });\n }\n\n GetPendingStepStatus(pendingMap: PendingMapEntry, step: number): 'current' | 'done' | 'future' {\n // Step 1: Map Created — always done for pending maps\n // Step 2: DDL Generated — done if DDL content exists\n // Step 3: Deploy & CodeGen — always future (manual step)\n // Step 4: Ready to Sync — always future\n if (step === 1) return 'done';\n if (step === 2) return pendingMap.DDLContent ? 'done' : 'current';\n return 'future';\n }\n\n // =====================================================================\n // Helpers\n // =====================================================================\n\n get RunStatusColor(): string {\n if (!this.LatestRun) return 'gray';\n if (this.LatestRun.Status === 'Success') return 'green';\n if (this.LatestRun.Status === 'Failed') return 'red';\n return 'amber';\n }\n\n FormatDate(dateStr: string | null): string {\n if (!dateStr) return '--';\n return new Date(dateStr).toLocaleString(undefined, {\n month: 'short', day: 'numeric',\n hour: '2-digit', minute: '2-digit'\n });\n }\n\n async GetResourceDisplayName(_data: ResourceData): Promise<string> {\n return 'Mapping Workspace';\n }\n\n async GetResourceIconClass(_data: ResourceData): Promise<string> {\n return 'fa-solid fa-diagram-project';\n }\n}\n\nexport function LoadMappingWorkspace(): void {\n // Tree-shaking prevention\n}\n","<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"]}
1
+ {"version":3,"file":"mapping-workspace.component.js","sourceRoot":"","sources":["../../../../src/Integration/components/mapping-workspace/mapping-workspace.component.ts","../../../../src/Integration/components/mapping-workspace/mapping-workspace.component.html"],"names":[],"mappings":"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","sourcesContent":["import { ChangeDetectorRef, Component, OnInit, inject } from '@angular/core';\nimport { RegisterClass, UUIDsEqual } from '@memberjunction/global';\nimport { Metadata } from '@memberjunction/core';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { ResourceData, MJIntegrationObjectFieldEntity, MJCompanyIntegrationEntity } from '@memberjunction/core-entities';\nimport { IntegrationEngineBase } from '@memberjunction/integration-engine-base';\nimport {\n IntegrationDataService,\n IntegrationRunRow,\n EntityMapRow,\n FieldMapRow,\n RunDetailRow\n} from '../../services/integration-data.service';\n\n// ---------------------------------------------------------------------------\n// Interfaces\n// ---------------------------------------------------------------------------\n\n/** Source object from integration metadata */\ninterface DiscoveredObject {\n Name: string;\n Label: string;\n Category: string;\n Description: string;\n SupportsIncrementalSync: boolean;\n SupportsWrite: boolean;\n}\n\n/** Target MJ entity for the picker */\ninterface MJEntityOption {\n ID: string;\n Name: string;\n}\n\n/** MJ entity field for field mapping destination picker */\ninterface MJFieldOption {\n ID: string;\n Name: string;\n Type: string;\n IsRequired: boolean;\n}\n\n/** Transform type for the pipeline builder */\ntype TransformType = 'direct' | 'regex' | 'split' | 'combine' | 'lookup' | 'format' | 'coerce' | 'substring' | 'custom';\n\n/** A single step in a transform pipeline */\ninterface TransformStepUI {\n Type: TransformType;\n Config: Record<string, unknown>;\n OnError: 'Skip' | 'Null' | 'Fail';\n}\n\n/** Editable field map row used in the center panel */\ninterface EditableFieldMap {\n ID: string | null;\n SourceFieldName: string;\n SourceFieldLabel: string;\n SourceFieldType: string;\n DestinationFieldName: string;\n DestinationFieldLabel: string;\n IsKeyField: boolean;\n IsRequired: boolean;\n Direction: 'Both' | 'DestToSource' | 'SourceToDest';\n Status: 'Active' | 'Inactive';\n IsNew: boolean;\n IsDirty: boolean;\n // Source metadata (from connector discovery)\n IsSourcePK: boolean;\n IsSourceRequired: boolean;\n IsSourceReadOnly: boolean;\n // Transform pipeline\n TransformPipeline: TransformStepUI[];\n ShowTransformEditor: boolean;\n}\n\n/** Pending entity map — entity hasn't been created yet */\ninterface PendingMapEntry {\n LocalID: string;\n SourceObjectName: string;\n SourceObjectLabel: string;\n SchemaName: string;\n TableName: string;\n EntityName: string;\n SyncDirection: 'Bidirectional' | 'Pull' | 'Push';\n SourceFields: MJIntegrationObjectFieldEntity[];\n DDLContent: string;\n CreatedAt: Date;\n}\n\n/** Combined list item for left panel — merges real and pending maps */\ninterface MapListItem {\n ID: string;\n SourceName: string;\n TargetName: string;\n SyncDirection: string;\n SyncEnabled: boolean;\n IsPending: boolean;\n RealMap: EntityMapRow | null;\n PendingMap: PendingMapEntry | null;\n}\n\ntype TargetMode = 'existing' | 'new';\n\n/** Data preview row — key/value record */\ntype PreviewRecord = Record<string, string | number | boolean | null>;\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\n@RegisterClass(BaseResourceComponent, 'IntegrationMappingWorkspace')\n@Component({\n standalone: false,\n selector: 'app-mapping-workspace',\n templateUrl: './mapping-workspace.component.html',\n styleUrls: ['./mapping-workspace.component.css']\n})\nexport class MappingWorkspaceComponent extends BaseResourceComponent implements OnInit {\n\n // --- Core data ---\n Integrations: MJCompanyIntegrationEntity[] = [];\n EntityMaps: EntityMapRow[] = [];\n FieldMaps: FieldMapRow[] = [];\n RunEntityDetails: RunDetailRow[] = [];\n LatestRun: IntegrationRunRow | null = null;\n\n // --- Selection ---\n SelectedIntegrationID = '';\n SelectedMapID: string | null = null;\n EntityMapSearchText = '';\n\n // --- Loading ---\n IsLoadingIntegrations = false;\n IsLoadingEntityMaps = false;\n IsLoadingFieldMaps = false;\n IsLoadingRunDetails = false;\n\n // --- Add Map flow ---\n ShowAddPanel = false;\n TargetMode: TargetMode = 'existing';\n\n // Source objects from discovery\n DiscoveredObjects: DiscoveredObject[] = [];\n IsDiscoveringObjects = false;\n DiscoverError = '';\n SelectedSourceObjectName = '';\n\n // Target: existing entity\n MJEntities: MJEntityOption[] = [];\n IsLoadingEntities = false;\n SelectedEntityID: string | null = null;\n\n // Target: new entity\n NewEntitySchemaName = '';\n NewEntityTableName = '';\n NewEntityName = '';\n DBSchemas: string[] = [];\n\n // Sync direction for add flow\n AddSyncDirection: 'Bidirectional' | 'Pull' | 'Push' = 'Pull';\n IsSavingEntityMap = false;\n\n // --- Pending entity maps (local state) ---\n PendingMaps: PendingMapEntry[] = [];\n\n // --- DDL preview ---\n IsGeneratingDDL = false;\n DDLPreviewContent = '';\n DDLPreviewError = '';\n\n // --- Field mapping editing ---\n EditableFields: EditableFieldMap[] = [];\n DestinationFields: MJFieldOption[] = [];\n IsLoadingDestFields = false;\n IsSavingFields = false;\n AutoMapCount = 0;\n ShowAutoMapBanner = false;\n\n // --- Source fields for auto-mapping ---\n SourceFields: MJIntegrationObjectFieldEntity[] = [];\n IsLoadingSourceFields = false;\n\n // --- Data preview ---\n SourcePreviewData: PreviewRecord[] = [];\n DestPreviewData: PreviewRecord[] = [];\n IsLoadingSourcePreview = false;\n IsLoadingDestPreview = false;\n ShowSourcePreview = false;\n ShowDestPreview = false;\n\n private dataService = inject(IntegrationDataService);\n private cdr = inject(ChangeDetectorRef);\n private discoverCache = new Map<string, DiscoveredObject[]>();\n private pendingCounter = 0;\n\n async ngOnInit(): Promise<void> {\n super.ngOnInit();\n this.dataService.Provider = this.ProviderToUse;\n await this.LoadIntegrations();\n this.NotifyLoadComplete();\n }\n\n // =====================================================================\n // Computed Properties\n // =====================================================================\n\n /** Merged list of real entity maps + pending maps, for the left panel */\n get AllMaps(): MapListItem[] {\n const realItems: MapListItem[] = this.EntityMaps.map(em => ({\n ID: em.ID,\n SourceName: em.ExternalObjectName,\n TargetName: em.Entity,\n SyncDirection: em.SyncDirection,\n SyncEnabled: em.SyncEnabled,\n IsPending: false,\n RealMap: em,\n PendingMap: null\n }));\n\n const pendingItems: MapListItem[] = this.PendingMaps.map(pm => ({\n ID: pm.LocalID,\n SourceName: pm.SourceObjectName,\n TargetName: pm.EntityName,\n SyncDirection: pm.SyncDirection,\n SyncEnabled: false,\n IsPending: true,\n RealMap: null,\n PendingMap: pm\n }));\n\n return [...realItems, ...pendingItems];\n }\n\n get FilteredMaps(): MapListItem[] {\n const all = this.AllMaps;\n if (!this.EntityMapSearchText.trim()) return all;\n const search = this.EntityMapSearchText.toLowerCase();\n return all.filter(\n m => m.SourceName.toLowerCase().includes(search)\n || m.TargetName.toLowerCase().includes(search)\n );\n }\n\n get SelectedMap(): MapListItem | null {\n if (!this.SelectedMapID) return null;\n return this.AllMaps.find(m => UUIDsEqual(m.ID, this.SelectedMapID)) ?? null;\n }\n\n get SelectedEntityMap(): EntityMapRow | null {\n const map = this.SelectedMap;\n return map?.RealMap ?? null;\n }\n\n get SelectedPendingMap(): PendingMapEntry | null {\n const map = this.SelectedMap;\n return map?.PendingMap ?? null;\n }\n\n get HasDirtyFields(): boolean {\n return this.EditableFields.some(f => f.IsDirty || f.IsNew);\n }\n\n get ActiveEditableFields(): EditableFieldMap[] {\n return this.EditableFields.filter(f => f.Status !== 'Inactive');\n }\n\n get IsAddFormValid(): boolean {\n if (!this.SelectedSourceObjectName) return false;\n if (this.TargetMode === 'existing') return !!this.SelectedEntityID;\n return !!this.NewEntitySchemaName.trim() && !!this.NewEntityTableName.trim() && !!this.NewEntityName.trim();\n }\n\n /** Auto-suggest table/entity names from selected source object */\n get SuggestedTableName(): string {\n if (!this.SelectedSourceObjectName) return '';\n return this.SelectedSourceObjectName.replace(/[^A-Za-z0-9_]/g, '_');\n }\n\n get SuggestedEntityName(): string {\n if (!this.SelectedSourceObjectName) return '';\n const obj = this.DiscoveredObjects.find(o => o.Name === this.SelectedSourceObjectName);\n const label = obj?.Label || this.SelectedSourceObjectName;\n if (this.NewEntitySchemaName) return `${this.NewEntitySchemaName} ${label}`;\n return label;\n }\n\n // =====================================================================\n // Data Loading\n // =====================================================================\n\n async LoadIntegrations(): Promise<void> {\n this.IsLoadingIntegrations = true;\n this.cdr.detectChanges();\n try {\n const summaries = await this.dataService.LoadIntegrationSummaries(this.RunViewToUse);\n this.Integrations = summaries.map(s => s.Integration);\n } finally {\n this.IsLoadingIntegrations = false;\n this.cdr.detectChanges();\n }\n }\n\n async OnIntegrationChange(integrationID: string): Promise<void> {\n this.SelectedIntegrationID = integrationID;\n this.SelectedMapID = null;\n this.FieldMaps = [];\n this.EditableFields = [];\n this.DestinationFields = [];\n this.RunEntityDetails = [];\n this.LatestRun = null;\n this.EntityMapSearchText = '';\n this.CloseAddPanel();\n this.CloseAllPreviews();\n\n if (!integrationID) return;\n\n // Load entity maps + latest run in parallel, and auto-discover source objects\n await Promise.all([\n this.LoadEntityMapsForIntegration(integrationID),\n this.LoadLatestRunForIntegration(integrationID),\n this.DiscoverSourceObjects(integrationID)\n ]);\n }\n\n private async LoadEntityMapsForIntegration(integrationID: string): Promise<void> {\n this.IsLoadingEntityMaps = true;\n this.cdr.detectChanges();\n try {\n this.EntityMaps = await this.dataService.LoadEntityMaps(integrationID, this.RunViewToUse);\n } finally {\n this.IsLoadingEntityMaps = false;\n this.cdr.detectChanges();\n }\n }\n\n private async LoadLatestRunForIntegration(integrationID: string): Promise<void> {\n this.IsLoadingRunDetails = true;\n this.cdr.detectChanges();\n try {\n const runs = await this.dataService.LoadRunHistory(integrationID, 1, this.RunViewToUse);\n this.LatestRun = runs.length > 0 ? runs[0] : null;\n if (this.LatestRun) {\n this.RunEntityDetails = await this.dataService.LoadRunDetails(this.LatestRun.ID, this.RunViewToUse);\n }\n } finally {\n this.IsLoadingRunDetails = false;\n this.cdr.detectChanges();\n }\n }\n\n /** Load source objects from IntegrationObject metadata via engine (cached per integration) */\n private DiscoverSourceObjects(integrationID: string): Promise<void> {\n if (this.discoverCache.has(integrationID)) {\n this.DiscoveredObjects = this.discoverCache.get(integrationID)!;\n return Promise.resolve();\n }\n\n this.IsDiscoveringObjects = true;\n this.DiscoverError = '';\n this.DiscoveredObjects = [];\n this.cdr.detectChanges();\n\n try {\n const engine = IntegrationEngineBase.Instance;\n const integration = engine.GetIntegrationForCompanyIntegration(integrationID);\n if (!integration) {\n this.DiscoverError = 'Integration not found in metadata';\n return Promise.resolve();\n }\n\n const objects = engine.GetActiveIntegrationObjects(integration.ID);\n this.DiscoveredObjects = objects.map(o => ({\n Name: o.Name,\n Label: o.DisplayName || o.Name,\n Category: o.Category || 'Uncategorized',\n Description: o.Description || '',\n SupportsIncrementalSync: o.SupportsIncrementalSync,\n SupportsWrite: o.SupportsWrite\n }));\n this.discoverCache.set(integrationID, this.DiscoveredObjects);\n } catch (e) {\n this.DiscoverError = `Failed to load objects: ${(e as Error).message}`;\n } finally {\n this.IsDiscoveringObjects = false;\n this.cdr.detectChanges();\n }\n return Promise.resolve();\n }\n\n // =====================================================================\n // Entity Map Selection\n // =====================================================================\n\n async OnMapSelect(item: MapListItem): Promise<void> {\n this.SelectedMapID = item.ID;\n this.CloseAllPreviews();\n\n if (item.IsPending) {\n // Pending maps show the pending entity view in center panel\n this.EditableFields = [];\n this.DestinationFields = [];\n this.cdr.detectChanges();\n return;\n }\n\n // Real entity map — load field maps + dest fields, resolve source from metadata\n this.IsLoadingFieldMaps = true;\n this.cdr.detectChanges();\n try {\n await Promise.all([\n this.dataService.LoadFieldMaps(item.ID, this.RunViewToUse).then(fms => { this.FieldMaps = fms; }),\n this.LoadDestinationFields(item.RealMap!.EntityID)\n ]);\n\n // Resolve source fields from IntegrationObject metadata\n this.SourceFields = this.resolveSourceFieldsFromMetadata(\n this.SelectedIntegrationID,\n item.RealMap!.ExternalObjectName\n );\n\n this.EditableFields = this.FieldMaps.map(fm => this.ToEditableField(fm));\n } finally {\n this.IsLoadingFieldMaps = false;\n this.cdr.detectChanges();\n }\n }\n\n IsSelectedMap(id: string): boolean {\n return this.SelectedMapID === id || UUIDsEqual(this.SelectedMapID, id);\n }\n\n async OnToggleEntityMap(em: EntityMapRow): Promise<void> {\n await this.dataService.ToggleEntityMapEnabled(em.ID, em.SyncEnabled);\n }\n\n async OnDeleteMap(item: MapListItem, event: Event): Promise<void> {\n event.stopPropagation();\n if (item.IsPending) {\n this.PendingMaps = this.PendingMaps.filter(p => p.LocalID !== item.ID);\n } else {\n const deleted = await this.dataService.DeleteEntityMap(item.ID);\n if (deleted) {\n this.EntityMaps = this.EntityMaps.filter(e => !UUIDsEqual(e.ID, item.ID));\n }\n }\n\n if (this.IsSelectedMap(item.ID)) {\n this.SelectedMapID = null;\n this.EditableFields = [];\n this.DestinationFields = [];\n }\n this.cdr.detectChanges();\n }\n\n // =====================================================================\n // Add Map Flow\n // =====================================================================\n\n OpenAddPanel(): void {\n this.ShowAddPanel = true;\n this.TargetMode = 'existing';\n this.ResetAddForm();\n this.EnsureEntitiesLoaded();\n this.LoadDBSchemas();\n }\n\n CloseAddPanel(): void {\n this.ShowAddPanel = false;\n this.ResetAddForm();\n }\n\n SetTargetMode(mode: TargetMode): void {\n this.TargetMode = mode;\n }\n\n OnSourceObjectChange(objectName: string): void {\n this.SelectedSourceObjectName = objectName;\n // Auto-suggest table/entity name for new entity mode\n if (this.TargetMode === 'new') {\n this.NewEntityTableName = this.SuggestedTableName;\n this.NewEntityName = this.SuggestedEntityName;\n }\n }\n\n OnSchemaNameChange(): void {\n // Update entity name suggestion when schema changes\n if (this.SelectedSourceObjectName) {\n this.NewEntityName = this.SuggestedEntityName;\n }\n }\n\n async SaveAddMap(): Promise<void> {\n if (!this.IsAddFormValid || !this.SelectedIntegrationID) return;\n this.IsSavingEntityMap = true;\n this.cdr.detectChanges();\n\n try {\n if (this.TargetMode === 'existing') {\n await this.SaveExistingEntityMap();\n } else {\n await this.SaveNewEntityMap();\n }\n } finally {\n this.IsSavingEntityMap = false;\n this.cdr.detectChanges();\n }\n }\n\n private async SaveExistingEntityMap(): Promise<void> {\n const sourceObj = this.DiscoveredObjects.find(o => o.Name === this.SelectedSourceObjectName);\n const result = await this.dataService.CreateEntityMap({\n CompanyIntegrationID: this.SelectedIntegrationID,\n ExternalObjectName: this.SelectedSourceObjectName,\n ExternalObjectLabel: sourceObj?.Label !== sourceObj?.Name ? sourceObj?.Label : undefined,\n EntityID: this.SelectedEntityID!,\n SyncDirection: this.AddSyncDirection\n });\n\n if (result) {\n // Reload entity maps and auto-generate field mappings\n await this.LoadEntityMapsForIntegration(this.SelectedIntegrationID);\n const newMap = this.EntityMaps.find(\n em => em.ExternalObjectName === this.SelectedSourceObjectName\n );\n if (newMap) {\n this.SelectedMapID = newMap.ID;\n await this.AutoGenerateFieldMappings(newMap);\n }\n this.CloseAddPanel();\n }\n }\n\n private async SaveNewEntityMap(): Promise<void> {\n // Resolve source fields from IntegrationObject metadata\n const sourceFields = this.resolveSourceFieldsFromMetadata(\n this.SelectedIntegrationID,\n this.SelectedSourceObjectName\n );\n\n // Generate DDL preview\n let ddlContent = '';\n try {\n const ddlResult = await this.dataService.SchemaPreview(\n this.SelectedIntegrationID,\n [{\n SourceObjectName: this.SelectedSourceObjectName,\n SchemaName: this.NewEntitySchemaName.trim(),\n TableName: this.NewEntityTableName.trim(),\n EntityName: this.NewEntityName.trim()\n }],\n 'sqlserver'\n );\n if (ddlResult.Success && ddlResult.Files.length > 0) {\n ddlContent = ddlResult.Files.map(f => f.Content).join('\\n\\n');\n }\n } catch {\n // DDL will be empty — not a blocker\n }\n\n // Create pending map entry\n const pendingMap: PendingMapEntry = {\n LocalID: `pending-${++this.pendingCounter}`,\n SourceObjectName: this.SelectedSourceObjectName,\n SourceObjectLabel: this.DiscoveredObjects.find(o => o.Name === this.SelectedSourceObjectName)?.Label || this.SelectedSourceObjectName,\n SchemaName: this.NewEntitySchemaName.trim(),\n TableName: this.NewEntityTableName.trim(),\n EntityName: this.NewEntityName.trim(),\n SyncDirection: this.AddSyncDirection,\n SourceFields: sourceFields,\n DDLContent: ddlContent,\n CreatedAt: new Date()\n };\n\n this.PendingMaps.push(pendingMap);\n this.SelectedMapID = pendingMap.LocalID;\n this.CloseAddPanel();\n }\n\n private ResetAddForm(): void {\n this.SelectedSourceObjectName = '';\n this.SelectedEntityID = null;\n this.NewEntitySchemaName = '';\n this.NewEntityTableName = '';\n this.NewEntityName = '';\n this.AddSyncDirection = 'Pull';\n this.DDLPreviewContent = '';\n this.DDLPreviewError = '';\n }\n\n private async EnsureEntitiesLoaded(): Promise<void> {\n if (this.MJEntities.length > 0) return;\n this.IsLoadingEntities = true;\n this.cdr.detectChanges();\n try {\n this.MJEntities = await this.dataService.LoadMJEntities(this.RunViewToUse);\n } finally {\n this.IsLoadingEntities = false;\n this.cdr.detectChanges();\n }\n }\n\n private LoadDBSchemas(): void {\n if (this.DBSchemas.length > 0) return;\n const md = this.ProviderToUse;\n const schemaSet = new Set<string>();\n for (const entity of md.Entities) {\n if (entity.SchemaName) {\n schemaSet.add(entity.SchemaName);\n }\n }\n this.DBSchemas = Array.from(schemaSet).sort();\n }\n\n // =====================================================================\n // DDL Preview for Add Panel\n // =====================================================================\n\n async PreviewDDL(): Promise<void> {\n if (!this.SelectedSourceObjectName || !this.NewEntitySchemaName.trim() || !this.NewEntityTableName.trim()) return;\n this.IsGeneratingDDL = true;\n this.DDLPreviewContent = '';\n this.DDLPreviewError = '';\n this.cdr.detectChanges();\n\n try {\n const result = await this.dataService.SchemaPreview(\n this.SelectedIntegrationID,\n [{\n SourceObjectName: this.SelectedSourceObjectName,\n SchemaName: this.NewEntitySchemaName.trim(),\n TableName: this.NewEntityTableName.trim(),\n EntityName: this.NewEntityName.trim() || this.SuggestedEntityName\n }],\n 'sqlserver'\n );\n\n if (result.Success && result.Files.length > 0) {\n this.DDLPreviewContent = result.Files.map(f => `-- ${f.Description}\\n-- ${f.FilePath}\\n\\n${f.Content}`).join('\\n\\n');\n } else {\n this.DDLPreviewError = result.Message || 'No DDL generated';\n }\n } catch (e) {\n this.DDLPreviewError = `DDL generation failed: ${(e as Error).message}`;\n } finally {\n this.IsGeneratingDDL = false;\n this.cdr.detectChanges();\n }\n }\n\n // =====================================================================\n // Field Mapping\n // =====================================================================\n\n private ToEditableField(fm: FieldMapRow): EditableFieldMap {\n // Look up source metadata from IntegrationObjectField entities\n const srcMeta = this.SourceFields.find(\n sf => sf.Name.toLowerCase() === fm.SourceFieldName.toLowerCase()\n );\n return {\n ID: fm.ID,\n SourceFieldName: fm.SourceFieldName,\n SourceFieldLabel: fm.SourceFieldLabel ?? '',\n SourceFieldType: srcMeta?.Type ?? '',\n DestinationFieldName: fm.DestinationFieldName,\n DestinationFieldLabel: fm.DestinationFieldLabel ?? '',\n IsKeyField: fm.IsKeyField,\n IsRequired: fm.IsRequired,\n Direction: fm.Direction,\n Status: fm.Status as 'Active' | 'Inactive',\n IsNew: false,\n IsDirty: false,\n IsSourcePK: srcMeta?.IsPrimaryKey ?? false,\n IsSourceRequired: srcMeta?.IsRequired ?? false,\n IsSourceReadOnly: srcMeta?.IsReadOnly ?? false,\n TransformPipeline: this.ParseTransformPipeline(fm.TransformPipeline),\n ShowTransformEditor: false\n };\n }\n\n private ParseTransformPipeline(json: string | null): TransformStepUI[] {\n if (!json || json.trim() === '') return [];\n try {\n const parsed: unknown = JSON.parse(json);\n if (!Array.isArray(parsed)) return [];\n return (parsed as TransformStepUI[]).map(step => ({\n Type: step.Type ?? 'direct',\n Config: (step.Config as Record<string, unknown>) ?? {},\n OnError: step.OnError ?? 'Fail'\n }));\n } catch {\n return [];\n }\n }\n\n SerializeTransformPipeline(steps: TransformStepUI[]): string | null {\n if (steps.length === 0) return null;\n return JSON.stringify(steps.map(s => ({ Type: s.Type, Config: s.Config, OnError: s.OnError })));\n }\n\n private async LoadDestinationFields(entityID: string): Promise<void> {\n this.IsLoadingDestFields = true;\n this.cdr.detectChanges();\n try {\n this.DestinationFields = await this.dataService.LoadEntityFields(entityID, this.RunViewToUse);\n } finally {\n this.IsLoadingDestFields = false;\n this.cdr.detectChanges();\n }\n }\n\n /** Auto-generate field mappings by matching source fields to destination by name */\n async AutoGenerateFieldMappings(entityMap: EntityMapRow): Promise<void> {\n // Resolve source fields from IntegrationObject metadata\n this.IsLoadingSourceFields = true;\n this.cdr.detectChanges();\n try {\n this.SourceFields = this.resolveSourceFieldsFromMetadata(\n this.SelectedIntegrationID,\n entityMap.ExternalObjectName\n );\n\n if (this.SourceFields.length === 0) return;\n\n // Load destination fields\n await this.LoadDestinationFields(entityMap.EntityID);\n\n // Match fields by name (case-insensitive)\n const matchedFields = this.MatchFieldsByName(this.SourceFields, this.DestinationFields);\n this.AutoMapCount = matchedFields.length;\n this.ShowAutoMapBanner = this.AutoMapCount > 0;\n\n // Create field maps for matches, preserving source field order via Priority\n for (let idx = 0; idx < matchedFields.length; idx++) {\n const match = matchedFields[idx];\n const displayName = match.sourceField.DisplayName || match.sourceField.Name;\n await this.dataService.CreateFieldMap({\n EntityMapID: entityMap.ID,\n SourceFieldName: match.sourceField.Name,\n SourceFieldLabel: displayName !== match.sourceField.Name ? displayName : undefined,\n DestinationFieldName: match.destField.Name,\n IsKeyField: match.sourceField.IsPrimaryKey,\n IsRequired: match.sourceField.IsRequired,\n Direction: 'SourceToDest',\n TransformPipeline: JSON.stringify([{ Type: 'direct', Config: {}, OnError: 'Fail' }]),\n Priority: match.sourceIndex\n });\n }\n\n // Reload field maps\n this.FieldMaps = await this.dataService.LoadFieldMaps(entityMap.ID, this.RunViewToUse);\n this.EditableFields = this.FieldMaps.map(fm => this.ToEditableField(fm));\n } finally {\n this.IsLoadingSourceFields = false;\n this.cdr.detectChanges();\n }\n }\n\n private MatchFieldsByName(\n sourceFields: MJIntegrationObjectFieldEntity[],\n destFields: MJFieldOption[]\n ): Array<{ sourceField: MJIntegrationObjectFieldEntity; destField: MJFieldOption; sourceIndex: number }> {\n const matches: Array<{ sourceField: MJIntegrationObjectFieldEntity; destField: MJFieldOption; sourceIndex: number }> = [];\n const destFieldMap = new Map<string, MJFieldOption>();\n for (const df of destFields) {\n destFieldMap.set(df.Name.toLowerCase(), df);\n }\n\n for (let i = 0; i < sourceFields.length; i++) {\n const sf = sourceFields[i];\n const destMatch = destFieldMap.get(sf.Name.toLowerCase());\n if (destMatch) {\n matches.push({ sourceField: sf, destField: destMatch, sourceIndex: i });\n }\n }\n return matches;\n }\n\n /** Validation: count fields missing destination mapping */\n get UnmappedRequiredCount(): number {\n return this.EditableFields.filter(\n f => f.Status === 'Active' && f.IsRequired && !f.DestinationFieldName\n ).length;\n }\n\n /** Validation: check if at least one key field is configured */\n get HasKeyField(): boolean {\n return this.EditableFields.some(f => f.Status === 'Active' && f.IsKeyField);\n }\n\n /** Validation: overall mapping readiness */\n get MappingValidation(): { IsValid: boolean; Warnings: string[] } {\n const warnings: string[] = [];\n if (this.UnmappedRequiredCount > 0) {\n warnings.push(`${this.UnmappedRequiredCount} required field(s) missing destination mapping`);\n }\n if (!this.HasKeyField && this.ActiveEditableFields.length > 0) {\n warnings.push('No key field configured — sync may create duplicates');\n }\n return { IsValid: warnings.length === 0, Warnings: warnings };\n }\n\n /** Re-run auto-mapping for the currently selected entity map */\n async RerunAutoMap(): Promise<void> {\n if (!this.SelectedEntityMap) return;\n await this.AutoGenerateFieldMappings(this.SelectedEntityMap);\n }\n\n OnFieldChanged(field: EditableFieldMap): void {\n field.IsDirty = true;\n }\n\n AddFieldMapping(): void {\n this.EditableFields.push({\n ID: null,\n SourceFieldName: '',\n SourceFieldLabel: '',\n SourceFieldType: '',\n DestinationFieldName: '',\n DestinationFieldLabel: '',\n IsKeyField: false,\n IsRequired: false,\n Direction: 'SourceToDest',\n Status: 'Active',\n IsNew: true,\n IsDirty: true,\n IsSourcePK: false,\n IsSourceRequired: false,\n IsSourceReadOnly: false,\n TransformPipeline: [],\n ShowTransformEditor: false\n });\n this.cdr.detectChanges();\n }\n\n RemoveFieldMapping(index: number): void {\n const field = this.EditableFields[index];\n if (field.IsNew) {\n this.EditableFields.splice(index, 1);\n } else if (field.ID) {\n field.Status = 'Inactive';\n field.IsDirty = true;\n }\n this.cdr.detectChanges();\n }\n\n async SaveFieldMappings(): Promise<void> {\n if (!this.SelectedEntityMap) return;\n this.IsSavingFields = true;\n this.cdr.detectChanges();\n\n try {\n for (const field of this.EditableFields) {\n if (!field.IsDirty) continue;\n\n if (field.IsNew && field.SourceFieldName && field.DestinationFieldName) {\n await this.dataService.CreateFieldMap({\n EntityMapID: this.SelectedEntityMap.ID,\n SourceFieldName: field.SourceFieldName,\n SourceFieldLabel: field.SourceFieldLabel || undefined,\n DestinationFieldName: field.DestinationFieldName,\n DestinationFieldLabel: field.DestinationFieldLabel || undefined,\n IsKeyField: field.IsKeyField,\n IsRequired: field.IsRequired,\n Direction: field.Direction,\n TransformPipeline: this.SerializeTransformPipeline(field.TransformPipeline)\n });\n } else if (field.ID && field.Status === 'Inactive') {\n await this.dataService.DeleteFieldMap(field.ID);\n } else if (field.ID) {\n await this.dataService.UpdateFieldMap(field.ID, {\n SourceFieldName: field.SourceFieldName,\n DestinationFieldName: field.DestinationFieldName,\n IsKeyField: field.IsKeyField,\n IsRequired: field.IsRequired,\n Direction: field.Direction,\n Status: field.Status,\n TransformPipeline: this.SerializeTransformPipeline(field.TransformPipeline)\n });\n }\n }\n\n this.FieldMaps = await this.dataService.LoadFieldMaps(this.SelectedEntityMap.ID, this.RunViewToUse);\n this.EditableFields = this.FieldMaps.map(fm => this.ToEditableField(fm));\n this.ShowAutoMapBanner = false;\n } finally {\n this.IsSavingFields = false;\n this.cdr.detectChanges();\n }\n }\n\n DismissAutoMapBanner(): void {\n this.ShowAutoMapBanner = false;\n }\n\n // =====================================================================\n // Transform Pipeline\n // =====================================================================\n\n /** Available transform types with display metadata */\n readonly TransformTypes: Array<{ Value: TransformType; Label: string; Icon: string; Description: string }> = [\n { Value: 'direct', Label: 'Direct', Icon: 'fa-solid fa-arrow-right', Description: 'Pass through as-is (with optional default)' },\n { Value: 'regex', Label: 'Regex', Icon: 'fa-solid fa-code', Description: 'Apply regex pattern replacement' },\n { Value: 'split', Label: 'Split', Icon: 'fa-solid fa-scissors', Description: 'Split text and extract a segment' },\n { Value: 'combine', Label: 'Combine', Icon: 'fa-solid fa-object-group', Description: 'Merge multiple source fields' },\n { Value: 'lookup', Label: 'Lookup', Icon: 'fa-solid fa-book', Description: 'Map values using a lookup table' },\n { Value: 'format', Label: 'Format', Icon: 'fa-solid fa-font', Description: 'Format dates, numbers, or strings' },\n { Value: 'coerce', Label: 'Coerce', Icon: 'fa-solid fa-exchange-alt', Description: 'Convert to a different data type' },\n { Value: 'substring', Label: 'Substring', Icon: 'fa-solid fa-text-width', Description: 'Extract a portion of text' },\n { Value: 'custom', Label: 'Custom', Icon: 'fa-solid fa-wand-magic-sparkles', Description: 'Custom JavaScript expression' }\n ];\n\n ToggleTransformEditor(field: EditableFieldMap): void {\n // Auto-add a direct step if none exist so the editor has something to show\n if (field.TransformPipeline.length === 0) {\n field.TransformPipeline.push({ Type: 'direct', Config: {}, OnError: 'Fail' });\n field.IsDirty = true;\n }\n field.ShowTransformEditor = !field.ShowTransformEditor;\n this.cdr.detectChanges();\n }\n\n AddTransformStep(field: EditableFieldMap): void {\n field.TransformPipeline.push({\n Type: 'direct',\n Config: {},\n OnError: 'Fail'\n });\n field.IsDirty = true;\n field.ShowTransformEditor = true;\n this.cdr.detectChanges();\n }\n\n RemoveTransformStep(field: EditableFieldMap, stepIndex: number): void {\n field.TransformPipeline.splice(stepIndex, 1);\n field.IsDirty = true;\n this.cdr.detectChanges();\n }\n\n OnTransformTypeChange(field: EditableFieldMap, step: TransformStepUI, newType: TransformType): void {\n step.Type = newType;\n step.Config = this.GetDefaultConfigForType(newType);\n field.IsDirty = true;\n this.cdr.detectChanges();\n }\n\n OnTransformConfigChange(field: EditableFieldMap): void {\n field.IsDirty = true;\n }\n\n private GetDefaultConfigForType(type: TransformType): Record<string, unknown> {\n switch (type) {\n case 'direct': return {};\n case 'regex': return { Pattern: '', Replacement: '', Flags: 'g' };\n case 'split': return { Delimiter: ',', Index: 0 };\n case 'combine': return { SourceFields: [], Separator: ' ' };\n case 'lookup': return { Map: {}, Default: null };\n case 'format': return { FormatString: 'ISO', FormatType: 'date' };\n case 'coerce': return { TargetType: 'string' };\n case 'substring': return { Start: 0, Length: 10 };\n case 'custom': return { Expression: 'value' };\n }\n }\n\n GetTransformLabel(type: TransformType): string {\n return this.TransformTypes.find(t => t.Value === type)?.Label ?? type;\n }\n\n GetTransformIcon(type: TransformType): string {\n return this.TransformTypes.find(t => t.Value === type)?.Icon ?? 'fa-solid fa-arrow-right';\n }\n\n /** For combine transforms: get available source field names */\n GetAvailableSourceFields(): string[] {\n return this.SourceFields.map(sf => sf.Name);\n }\n\n /**\n * Resolve source fields from IntegrationObjectField metadata via IntegrationEngineBase.\n * CompanyIntegrationID → Integration → IntegrationObject → IntegrationObjectFields.\n */\n private resolveSourceFieldsFromMetadata(\n companyIntegrationID: string,\n externalObjectName: string\n ): MJIntegrationObjectFieldEntity[] {\n const engine = IntegrationEngineBase.Instance;\n const integration = engine.GetIntegrationForCompanyIntegration(companyIntegrationID);\n if (!integration) return [];\n\n const obj = engine.GetIntegrationObject(integration.ID, externalObjectName);\n if (!obj) return [];\n\n return engine.GetIntegrationObjectFields(obj.ID)\n .filter(f => f.Status === 'Active')\n .sort((a, b) => a.Sequence - b.Sequence);\n }\n\n /** For lookup transforms: add a new key-value pair */\n AddLookupEntry(config: Record<string, unknown>): void {\n const map = (config['Map'] as Record<string, string>) ?? {};\n map[''] = '';\n config['Map'] = map;\n }\n\n GetLookupEntries(config: Record<string, unknown>): Array<{ key: string; value: string }> {\n const map = (config['Map'] as Record<string, string>) ?? {};\n return Object.entries(map).map(([key, value]) => ({ key, value: String(value) }));\n }\n\n UpdateLookupEntry(config: Record<string, unknown>, oldKey: string, newKey: string, newValue: string): void {\n const map = (config['Map'] as Record<string, string>) ?? {};\n if (oldKey !== newKey) {\n delete map[oldKey];\n }\n map[newKey] = newValue;\n config['Map'] = { ...map };\n }\n\n RemoveLookupEntry(config: Record<string, unknown>, key: string): void {\n const map = (config['Map'] as Record<string, string>) ?? {};\n delete map[key];\n config['Map'] = { ...map };\n }\n\n /** For combine transforms: toggle a source field */\n ToggleCombineField(config: Record<string, unknown>, fieldName: string): void {\n const fields = (config['SourceFields'] as string[]) ?? [];\n const idx = fields.indexOf(fieldName);\n if (idx >= 0) {\n fields.splice(idx, 1);\n } else {\n fields.push(fieldName);\n }\n config['SourceFields'] = [...fields];\n }\n\n IsCombineFieldSelected(config: Record<string, unknown>, fieldName: string): boolean {\n const fields = (config['SourceFields'] as string[]) ?? [];\n return fields.includes(fieldName);\n }\n\n // =====================================================================\n // Data Preview\n // =====================================================================\n\n async LoadSourcePreview(): Promise<void> {\n if (!this.SelectedEntityMap) return;\n this.IsLoadingSourcePreview = true;\n this.ShowSourcePreview = true;\n this.SourcePreviewData = [];\n this.cdr.detectChanges();\n\n try {\n const result = await this.dataService.PreviewSourceData(\n this.SelectedIntegrationID,\n this.SelectedEntityMap.ExternalObjectName,\n 5\n );\n this.SourcePreviewData = result;\n } catch (e) {\n console.error('[MappingWorkspace] Source preview failed:', (e as Error).message);\n } finally {\n this.IsLoadingSourcePreview = false;\n this.cdr.detectChanges();\n }\n }\n\n async LoadDestPreview(): Promise<void> {\n if (!this.SelectedEntityMap) return;\n this.IsLoadingDestPreview = true;\n this.ShowDestPreview = true;\n this.DestPreviewData = [];\n this.cdr.detectChanges();\n\n try {\n const result = await this.dataService.PreviewDestinationData(\n this.SelectedEntityMap.EntityID,\n 5,\n this.RunViewToUse\n );\n this.DestPreviewData = result;\n } catch (e) {\n console.error('[MappingWorkspace] Dest preview failed:', (e as Error).message);\n } finally {\n this.IsLoadingDestPreview = false;\n this.cdr.detectChanges();\n }\n }\n\n CloseSourcePreview(): void {\n this.ShowSourcePreview = false;\n this.SourcePreviewData = [];\n }\n\n CloseDestPreview(): void {\n this.ShowDestPreview = false;\n this.DestPreviewData = [];\n }\n\n private CloseAllPreviews(): void {\n this.CloseSourcePreview();\n this.CloseDestPreview();\n this.ShowAutoMapBanner = false;\n }\n\n GetPreviewColumns(data: PreviewRecord[]): string[] {\n if (data.length === 0) return [];\n return Object.keys(data[0]).slice(0, 8); // Limit to 8 columns for readability\n }\n\n FormatPreviewValue(value: string | number | boolean | null): string {\n if (value == null) return '--';\n if (typeof value === 'boolean') return value ? 'Yes' : 'No';\n const str = String(value);\n return str.length > 50 ? str.substring(0, 47) + '...' : str;\n }\n\n // =====================================================================\n // Pending Map Actions\n // =====================================================================\n\n CopyDDLToClipboard(ddl: string): void {\n navigator.clipboard.writeText(ddl).catch(() => {\n console.error('[MappingWorkspace] Failed to copy DDL to clipboard');\n });\n }\n\n GetPendingStepStatus(pendingMap: PendingMapEntry, step: number): 'current' | 'done' | 'future' {\n // Step 1: Map Created — always done for pending maps\n // Step 2: DDL Generated — done if DDL content exists\n // Step 3: Deploy & CodeGen — always future (manual step)\n // Step 4: Ready to Sync — always future\n if (step === 1) return 'done';\n if (step === 2) return pendingMap.DDLContent ? 'done' : 'current';\n return 'future';\n }\n\n // =====================================================================\n // Helpers\n // =====================================================================\n\n get RunStatusColor(): string {\n if (!this.LatestRun) return 'gray';\n if (this.LatestRun.Status === 'Success') return 'green';\n if (this.LatestRun.Status === 'Failed') return 'red';\n return 'amber';\n }\n\n FormatDate(dateStr: string | null): string {\n if (!dateStr) return '--';\n return new Date(dateStr).toLocaleString(undefined, {\n month: 'short', day: 'numeric',\n hour: '2-digit', minute: '2-digit'\n });\n }\n\n async GetResourceDisplayName(_data: ResourceData): Promise<string> {\n return 'Mapping Workspace';\n }\n\n async GetResourceIconClass(_data: ResourceData): Promise<string> {\n return 'fa-solid fa-diagram-project';\n }\n}\n\nexport function LoadMappingWorkspace(): void {\n // Tree-shaking prevention\n}\n","<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"]}