@memberjunction/ng-dashboards 5.38.0 → 5.40.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 (321) hide show
  1. package/README.md +14 -7
  2. package/dist/AI/components/agents/agent-configuration.component.js +199 -198
  3. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  4. package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts.map +1 -1
  5. package/dist/AI/components/analytics/ai-analytics-resource.component.js +20 -17
  6. package/dist/AI/components/analytics/ai-analytics-resource.component.js.map +1 -1
  7. package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts +15 -0
  8. package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts.map +1 -1
  9. package/dist/AI/components/analytics/cost-budget/cost-budget.component.js +166 -58
  10. package/dist/AI/components/analytics/cost-budget/cost-budget.component.js.map +1 -1
  11. package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts.map +1 -1
  12. package/dist/AI/components/analytics/executive-summary/executive-summary.component.js +2 -1
  13. package/dist/AI/components/analytics/executive-summary/executive-summary.component.js.map +1 -1
  14. package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts +1 -0
  15. package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts.map +1 -1
  16. package/dist/AI/components/analytics/model-performance/model-performance.component.js +55 -36
  17. package/dist/AI/components/analytics/model-performance/model-performance.component.js.map +1 -1
  18. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts +9 -1
  19. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts.map +1 -1
  20. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js +158 -117
  21. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js.map +1 -1
  22. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts +1 -0
  23. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts.map +1 -1
  24. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js +22 -8
  25. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js.map +1 -1
  26. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +217 -860
  27. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
  28. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +1717 -7802
  29. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
  30. package/dist/AI/components/autotagging/components/classify-item-drilldown.component.d.ts +56 -0
  31. package/dist/AI/components/autotagging/components/classify-item-drilldown.component.d.ts.map +1 -0
  32. package/dist/AI/components/autotagging/components/classify-item-drilldown.component.js +423 -0
  33. package/dist/AI/components/autotagging/components/classify-item-drilldown.component.js.map +1 -0
  34. package/dist/AI/components/autotagging/components/classify-item-grid.component.d.ts +70 -0
  35. package/dist/AI/components/autotagging/components/classify-item-grid.component.d.ts.map +1 -0
  36. package/dist/AI/components/autotagging/components/classify-item-grid.component.js +308 -0
  37. package/dist/AI/components/autotagging/components/classify-item-grid.component.js.map +1 -0
  38. package/dist/AI/components/autotagging/components/classify-org-context-editor.component.d.ts +29 -0
  39. package/dist/AI/components/autotagging/components/classify-org-context-editor.component.d.ts.map +1 -0
  40. package/dist/AI/components/autotagging/components/classify-org-context-editor.component.js +186 -0
  41. package/dist/AI/components/autotagging/components/classify-org-context-editor.component.js.map +1 -0
  42. package/dist/AI/components/autotagging/components/classify-overview-analytics.component.d.ts +69 -0
  43. package/dist/AI/components/autotagging/components/classify-overview-analytics.component.d.ts.map +1 -0
  44. package/dist/AI/components/autotagging/components/classify-overview-analytics.component.js +278 -0
  45. package/dist/AI/components/autotagging/components/classify-overview-analytics.component.js.map +1 -0
  46. package/dist/AI/components/autotagging/components/classify-seed-taxonomy.component.d.ts +73 -0
  47. package/dist/AI/components/autotagging/components/classify-seed-taxonomy.component.d.ts.map +1 -0
  48. package/dist/AI/components/autotagging/components/classify-seed-taxonomy.component.js +393 -0
  49. package/dist/AI/components/autotagging/components/classify-seed-taxonomy.component.js.map +1 -0
  50. package/dist/AI/components/autotagging/dialogs/classify-setup-wizard.component.d.ts +122 -0
  51. package/dist/AI/components/autotagging/dialogs/classify-setup-wizard.component.d.ts.map +1 -0
  52. package/dist/AI/components/autotagging/dialogs/classify-setup-wizard.component.js +908 -0
  53. package/dist/AI/components/autotagging/dialogs/classify-setup-wizard.component.js.map +1 -0
  54. package/dist/AI/components/autotagging/dialogs/dry-run-preview.dialog.component.d.ts +87 -0
  55. package/dist/AI/components/autotagging/dialogs/dry-run-preview.dialog.component.d.ts.map +1 -0
  56. package/dist/AI/components/autotagging/dialogs/dry-run-preview.dialog.component.js +475 -0
  57. package/dist/AI/components/autotagging/dialogs/dry-run-preview.dialog.component.js.map +1 -0
  58. package/dist/AI/components/autotagging/dialogs/item-detail.dialog.component.d.ts +29 -0
  59. package/dist/AI/components/autotagging/dialogs/item-detail.dialog.component.d.ts.map +1 -0
  60. package/dist/AI/components/autotagging/dialogs/item-detail.dialog.component.js +208 -0
  61. package/dist/AI/components/autotagging/dialogs/item-detail.dialog.component.js.map +1 -0
  62. package/dist/AI/components/autotagging/dialogs/no-content-type-warning.dialog.component.d.ts +21 -0
  63. package/dist/AI/components/autotagging/dialogs/no-content-type-warning.dialog.component.d.ts.map +1 -0
  64. package/dist/AI/components/autotagging/dialogs/no-content-type-warning.dialog.component.js +70 -0
  65. package/dist/AI/components/autotagging/dialogs/no-content-type-warning.dialog.component.js.map +1 -0
  66. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.d.ts +333 -0
  67. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.d.ts.map +1 -0
  68. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js +2125 -0
  69. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js.map +1 -0
  70. package/dist/AI/components/autotagging/shared/classify.dryrun.d.ts +61 -0
  71. package/dist/AI/components/autotagging/shared/classify.dryrun.d.ts.map +1 -0
  72. package/dist/AI/components/autotagging/shared/classify.dryrun.js +78 -0
  73. package/dist/AI/components/autotagging/shared/classify.dryrun.js.map +1 -0
  74. package/dist/AI/components/autotagging/shared/classify.format.d.ts +58 -0
  75. package/dist/AI/components/autotagging/shared/classify.format.d.ts.map +1 -0
  76. package/dist/AI/components/autotagging/shared/classify.format.js +260 -0
  77. package/dist/AI/components/autotagging/shared/classify.format.js.map +1 -0
  78. package/dist/AI/components/autotagging/shared/classify.types.d.ts +319 -0
  79. package/dist/AI/components/autotagging/shared/classify.types.d.ts.map +1 -0
  80. package/dist/AI/components/autotagging/shared/classify.types.js +6 -0
  81. package/dist/AI/components/autotagging/shared/classify.types.js.map +1 -0
  82. package/dist/AI/components/autotagging/tabs/health-tab.component.d.ts +103 -0
  83. package/dist/AI/components/autotagging/tabs/health-tab.component.d.ts.map +1 -0
  84. package/dist/AI/components/autotagging/tabs/health-tab.component.js +571 -0
  85. package/dist/AI/components/autotagging/tabs/health-tab.component.js.map +1 -0
  86. package/dist/AI/components/autotagging/tabs/history-tab.component.d.ts +77 -0
  87. package/dist/AI/components/autotagging/tabs/history-tab.component.d.ts.map +1 -0
  88. package/dist/AI/components/autotagging/tabs/history-tab.component.js +519 -0
  89. package/dist/AI/components/autotagging/tabs/history-tab.component.js.map +1 -0
  90. package/dist/AI/components/autotagging/tabs/inbox-tab.component.d.ts +107 -0
  91. package/dist/AI/components/autotagging/tabs/inbox-tab.component.d.ts.map +1 -0
  92. package/dist/AI/components/autotagging/tabs/inbox-tab.component.js +719 -0
  93. package/dist/AI/components/autotagging/tabs/inbox-tab.component.js.map +1 -0
  94. package/dist/AI/components/autotagging/tabs/pipeline-tab.component.d.ts +131 -0
  95. package/dist/AI/components/autotagging/tabs/pipeline-tab.component.d.ts.map +1 -0
  96. package/dist/AI/components/autotagging/tabs/pipeline-tab.component.js +813 -0
  97. package/dist/AI/components/autotagging/tabs/pipeline-tab.component.js.map +1 -0
  98. package/dist/AI/components/autotagging/tabs/sources-tab.component.d.ts +177 -0
  99. package/dist/AI/components/autotagging/tabs/sources-tab.component.d.ts.map +1 -0
  100. package/dist/AI/components/autotagging/tabs/sources-tab.component.js +1465 -0
  101. package/dist/AI/components/autotagging/tabs/sources-tab.component.js.map +1 -0
  102. package/dist/AI/components/autotagging/tabs/tags-tab.component.d.ts +78 -0
  103. package/dist/AI/components/autotagging/tabs/tags-tab.component.d.ts.map +1 -0
  104. package/dist/AI/components/autotagging/tabs/tags-tab.component.js +492 -0
  105. package/dist/AI/components/autotagging/tabs/tags-tab.component.js.map +1 -0
  106. package/dist/AI/components/autotagging/tabs/taxonomy-tab.component.d.ts +397 -0
  107. package/dist/AI/components/autotagging/tabs/taxonomy-tab.component.d.ts.map +1 -0
  108. package/dist/AI/components/autotagging/tabs/taxonomy-tab.component.js +3490 -0
  109. package/dist/AI/components/autotagging/tabs/taxonomy-tab.component.js.map +1 -0
  110. package/dist/AI/components/autotagging/tabs/types-tab.component.d.ts +56 -0
  111. package/dist/AI/components/autotagging/tabs/types-tab.component.d.ts.map +1 -0
  112. package/dist/AI/components/autotagging/tabs/types-tab.component.js +271 -0
  113. package/dist/AI/components/autotagging/tabs/types-tab.component.js.map +1 -0
  114. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +3 -0
  115. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
  116. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +306 -290
  117. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
  118. package/dist/AI/components/execution-monitoring.component.js +1 -1
  119. package/dist/AI/components/execution-monitoring.component.js.map +1 -1
  120. package/dist/AI/components/models/model-management.component.js +209 -208
  121. package/dist/AI/components/models/model-management.component.js.map +1 -1
  122. package/dist/AI/components/prompts/prompt-management.component.js +130 -128
  123. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  124. package/dist/AI/components/requests/agent-requests-resource.component.js +61 -61
  125. package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
  126. package/dist/AI/components/system/system-configuration.component.js +17 -17
  127. package/dist/AI/components/system/system-configuration.component.js.map +1 -1
  128. package/dist/AI/components/tags/tags-resource.component.d.ts +1 -0
  129. package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
  130. package/dist/AI/components/tags/tags-resource.component.js +578 -538
  131. package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
  132. package/dist/AI/components/vectors/vector-management-resource.component.d.ts +3 -0
  133. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
  134. package/dist/AI/components/vectors/vector-management-resource.component.js +331 -303
  135. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  136. package/dist/AI/services/ai-instrumentation.service.d.ts +5 -0
  137. package/dist/AI/services/ai-instrumentation.service.d.ts.map +1 -1
  138. package/dist/AI/services/ai-instrumentation.service.js +14 -2
  139. package/dist/AI/services/ai-instrumentation.service.js.map +1 -1
  140. package/dist/AI/services/cache-metrics.d.ts +50 -0
  141. package/dist/AI/services/cache-metrics.d.ts.map +1 -0
  142. package/dist/AI/services/cache-metrics.js +43 -0
  143. package/dist/AI/services/cache-metrics.js.map +1 -0
  144. package/dist/APIKeys/api-applications-panel.component.js +2 -2
  145. package/dist/APIKeys/api-key-create-dialog.component.js +2 -2
  146. package/dist/APIKeys/api-key-edit-panel.component.js +2 -2
  147. package/dist/APIKeys/api-keys-resource.component.js +132 -131
  148. package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
  149. package/dist/Actions/components/actions-overview.component.js +141 -141
  150. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  151. package/dist/Actions/components/execution-monitoring.component.js +15 -15
  152. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  153. package/dist/Actions/components/explorer/action-explorer.component.d.ts +0 -5
  154. package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -1
  155. package/dist/Actions/components/explorer/action-explorer.component.js +139 -212
  156. package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
  157. package/dist/Admin/admin-data-schema.component.js +2 -2
  158. package/dist/Admin/admin-data-schema.component.js.map +1 -1
  159. package/dist/Admin/admin-dev-tools-resource.component.js +2 -2
  160. package/dist/Admin/admin-dev-tools-resource.component.js.map +1 -1
  161. package/dist/Admin/admin-identity-access.component.js +2 -2
  162. package/dist/Admin/admin-identity-access.component.js.map +1 -1
  163. package/dist/Admin/admin-monitoring.component.js +2 -2
  164. package/dist/Admin/admin-monitoring.component.js.map +1 -1
  165. package/dist/ApplicationRoles/application-roles-resource.component.js +54 -49
  166. package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
  167. package/dist/Communication/communication-logs-resource.component.d.ts +6 -0
  168. package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
  169. package/dist/Communication/communication-logs-resource.component.js +72 -50
  170. package/dist/Communication/communication-logs-resource.component.js.map +1 -1
  171. package/dist/Communication/communication-monitor-resource.component.js +103 -102
  172. package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
  173. package/dist/Communication/communication-providers-resource.component.js +52 -51
  174. package/dist/Communication/communication-providers-resource.component.js.map +1 -1
  175. package/dist/Communication/communication-runs-resource.component.js +39 -38
  176. package/dist/Communication/communication-runs-resource.component.js.map +1 -1
  177. package/dist/Communication/communication-templates-resource.component.d.ts +6 -0
  178. package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -1
  179. package/dist/Communication/communication-templates-resource.component.js +92 -89
  180. package/dist/Communication/communication-templates-resource.component.js.map +1 -1
  181. package/dist/Credentials/components/credentials-audit-resource.component.js +136 -135
  182. package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
  183. package/dist/Credentials/components/credentials-categories-resource.component.js +155 -152
  184. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  185. package/dist/Credentials/components/credentials-list-resource.component.js +119 -118
  186. package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
  187. package/dist/Credentials/components/credentials-overview-resource.component.js +129 -128
  188. package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
  189. package/dist/Credentials/components/credentials-types-resource.component.js +107 -106
  190. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  191. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +31 -340
  192. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
  193. package/dist/DataExplorer/data-explorer-dashboard.component.js +468 -1958
  194. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  195. package/dist/DataExplorer/data-explorer-resource.component.d.ts.map +1 -1
  196. package/dist/DataExplorer/data-explorer-resource.component.js +10 -0
  197. package/dist/DataExplorer/data-explorer-resource.component.js.map +1 -1
  198. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +1 -1
  199. package/dist/DatabaseDesigner/components/entity-list.component.js +115 -114
  200. package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -1
  201. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +5 -6
  202. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -1
  203. package/dist/DatabaseDesigner/database-designer-dashboards.module.js +4 -5
  204. package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -1
  205. package/dist/DevTools/app-state-inspector.component.js +18 -17
  206. package/dist/DevTools/app-state-inspector.component.js.map +1 -1
  207. package/dist/DevTools/class-registry.component.js +88 -85
  208. package/dist/DevTools/class-registry.component.js.map +1 -1
  209. package/dist/DevTools/event-monitor.component.js +155 -150
  210. package/dist/DevTools/event-monitor.component.js.map +1 -1
  211. package/dist/DevTools/graphql-console.component.js +245 -243
  212. package/dist/DevTools/graphql-console.component.js.map +1 -1
  213. package/dist/DevTools/layout-inspector.component.js +18 -17
  214. package/dist/DevTools/layout-inspector.component.js.map +1 -1
  215. package/dist/EntityAdmin/entity-admin-dashboard.component.js +20 -19
  216. package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
  217. package/dist/Home/home-dashboard.component.js +2 -2
  218. package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
  219. package/dist/Integration/components/activity/activity.component.js +236 -229
  220. package/dist/Integration/components/activity/activity.component.js.map +1 -1
  221. package/dist/Integration/components/connections/connections.component.js +390 -389
  222. package/dist/Integration/components/connections/connections.component.js.map +1 -1
  223. package/dist/Integration/components/overview/overview.component.js +2 -2
  224. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts.map +1 -1
  225. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +14 -11
  226. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
  227. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts +27 -2
  228. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts.map +1 -1
  229. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +244 -119
  230. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
  231. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +293 -291
  232. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
  233. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +62 -61
  234. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -1
  235. package/dist/KnowledgeHub/components/visualize/record-drilldown/record-drilldown.component.d.ts +65 -0
  236. package/dist/KnowledgeHub/components/visualize/record-drilldown/record-drilldown.component.d.ts.map +1 -0
  237. package/dist/KnowledgeHub/components/visualize/record-drilldown/record-drilldown.component.js +176 -0
  238. package/dist/KnowledgeHub/components/visualize/record-drilldown/record-drilldown.component.js.map +1 -0
  239. package/dist/KnowledgeHub/components/visualize/tag-cloud/tag-cloud.component.d.ts +81 -0
  240. package/dist/KnowledgeHub/components/visualize/tag-cloud/tag-cloud.component.d.ts.map +1 -0
  241. package/dist/KnowledgeHub/components/visualize/tag-cloud/tag-cloud.component.js +308 -0
  242. package/dist/KnowledgeHub/components/visualize/tag-cloud/tag-cloud.component.js.map +1 -0
  243. package/dist/KnowledgeHub/components/visualize/visualize-resource.component.d.ts +85 -0
  244. package/dist/KnowledgeHub/components/visualize/visualize-resource.component.d.ts.map +1 -0
  245. package/dist/KnowledgeHub/components/visualize/visualize-resource.component.js +362 -0
  246. package/dist/KnowledgeHub/components/visualize/visualize-resource.component.js.map +1 -0
  247. package/dist/KnowledgeHub/index.d.ts +3 -0
  248. package/dist/KnowledgeHub/index.d.ts.map +1 -1
  249. package/dist/KnowledgeHub/index.js +3 -0
  250. package/dist/KnowledgeHub/index.js.map +1 -1
  251. package/dist/Lists/components/lists-browse-resource.component.d.ts +6 -2
  252. package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
  253. package/dist/Lists/components/lists-browse-resource.component.js +525 -566
  254. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  255. package/dist/Lists/components/lists-categories-resource.component.js +135 -134
  256. package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
  257. package/dist/Lists/components/lists-my-lists-resource.component.js +199 -198
  258. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  259. package/dist/MCP/components/mcp-server-dialog.component.js +2 -2
  260. package/dist/MCP/mcp-dashboard.component.js +443 -438
  261. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  262. package/dist/QueryBrowser/query-browser-resource.component.js +1 -1
  263. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  264. package/dist/Scheduling/components/scheduling-activity.component.d.ts.map +1 -1
  265. package/dist/Scheduling/components/scheduling-activity.component.js +146 -147
  266. package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
  267. package/dist/Scheduling/components/scheduling-jobs.component.js +76 -75
  268. package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
  269. package/dist/Scheduling/components/scheduling-overview.component.js +97 -96
  270. package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
  271. package/dist/Scheduling/scheduling-dashboard.component.js +24 -22
  272. package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
  273. package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts +2 -0
  274. package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts.map +1 -1
  275. package/dist/Scheduling/services/scheduling-instrumentation.service.js +1 -0
  276. package/dist/Scheduling/services/scheduling-instrumentation.service.js.map +1 -1
  277. package/dist/Testing/components/testing-dashboard-tab-resource.component.js +1 -1
  278. package/dist/Testing/components/testing-explorer.component.d.ts +14 -4
  279. package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
  280. package/dist/Testing/components/testing-explorer.component.js +436 -427
  281. package/dist/Testing/components/testing-explorer.component.js.map +1 -1
  282. package/dist/Testing/components/testing-runs-resource.component.js +1 -1
  283. package/dist/Testing/components/testing-runs.component.js +116 -115
  284. package/dist/Testing/components/testing-runs.component.js.map +1 -1
  285. package/dist/Testing/testing-dashboard.component.js +6 -7
  286. package/dist/Testing/testing-dashboard.component.js.map +1 -1
  287. package/dist/VersionHistory/components/labels-resource.component.js +173 -172
  288. package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
  289. package/dist/VersionHistory/components/restore-resource.component.d.ts +6 -0
  290. package/dist/VersionHistory/components/restore-resource.component.d.ts.map +1 -1
  291. package/dist/VersionHistory/components/restore-resource.component.js +116 -92
  292. package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
  293. package/dist/ai-dashboards.module.d.ts +57 -35
  294. package/dist/ai-dashboards.module.d.ts.map +1 -1
  295. package/dist/ai-dashboards.module.js +80 -1
  296. package/dist/ai-dashboards.module.js.map +1 -1
  297. package/dist/communication-dashboards.module.d.ts +1 -1
  298. package/dist/communication-dashboards.module.d.ts.map +1 -1
  299. package/dist/communication-dashboards.module.js +7 -1
  300. package/dist/communication-dashboards.module.js.map +1 -1
  301. package/dist/data-explorer-dashboards.module.d.ts +12 -14
  302. package/dist/data-explorer-dashboards.module.d.ts.map +1 -1
  303. package/dist/data-explorer-dashboards.module.js +5 -14
  304. package/dist/data-explorer-dashboards.module.js.map +1 -1
  305. package/dist/public-api.d.ts +3 -0
  306. package/dist/public-api.d.ts.map +1 -1
  307. package/dist/public-api.js +3 -0
  308. package/dist/public-api.js.map +1 -1
  309. package/dist/testing-dashboards.module.d.ts +4 -5
  310. package/dist/testing-dashboards.module.d.ts.map +1 -1
  311. package/dist/testing-dashboards.module.js +7 -5
  312. package/dist/testing-dashboards.module.js.map +1 -1
  313. package/package.json +57 -54
  314. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.d.ts +0 -79
  315. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.d.ts.map +0 -1
  316. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js +0 -195
  317. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js.map +0 -1
  318. package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts +0 -226
  319. package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts.map +0 -1
  320. package/dist/DataExplorer/components/view-selector/view-selector.component.js +0 -861
  321. package/dist/DataExplorer/components/view-selector/view-selector.component.js.map +0 -1
@@ -29,39 +29,40 @@ function ConnectionsComponent_Conditional_4_Template(rf, ctx) { if (rf & 1) {
29
29
  i0.ɵɵelementStart(0, "button", 12);
30
30
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_4_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OpenWizard()); });
31
31
  i0.ɵɵelement(1, "i", 13);
32
- i0.ɵɵtext(2, " Add Integration ");
33
- i0.ɵɵelementEnd();
32
+ i0.ɵɵelementStart(2, "span", 14);
33
+ i0.ɵɵtext(3, "Add Integration");
34
+ i0.ɵɵelementEnd()();
34
35
  } }
35
36
  function ConnectionsComponent_Conditional_7_Conditional_0_Template(rf, ctx) { if (rf & 1) {
36
- i0.ɵɵelementStart(0, "div", 14);
37
- i0.ɵɵelement(1, "mj-loading", 17);
37
+ i0.ɵɵelementStart(0, "div", 15);
38
+ i0.ɵɵelement(1, "mj-loading", 18);
38
39
  i0.ɵɵelementEnd();
39
40
  } }
40
41
  function ConnectionsComponent_Conditional_7_Conditional_1_Template(rf, ctx) { if (rf & 1) {
41
42
  const _r3 = i0.ɵɵgetCurrentView();
42
- i0.ɵɵelementStart(0, "div", 15);
43
- i0.ɵɵelement(1, "i", 18);
43
+ i0.ɵɵelementStart(0, "div", 16);
44
+ i0.ɵɵelement(1, "i", 19);
44
45
  i0.ɵɵelementStart(2, "h3");
45
46
  i0.ɵɵtext(3, "No integrations yet");
46
47
  i0.ɵɵelementEnd();
47
48
  i0.ɵɵelementStart(4, "p");
48
49
  i0.ɵɵtext(5, "Connect your first external system to start syncing data.");
49
50
  i0.ɵɵelementEnd();
50
- i0.ɵɵelementStart(6, "button", 19);
51
+ i0.ɵɵelementStart(6, "button", 20);
51
52
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_7_Conditional_1_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OpenWizard()); });
52
53
  i0.ɵɵelement(7, "i", 13);
53
54
  i0.ɵɵtext(8, " Add Your First Integration ");
54
55
  i0.ɵɵelementEnd()();
55
56
  } }
56
57
  function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_22_Conditional_1_Template(rf, ctx) { if (rf & 1) {
57
- i0.ɵɵelement(0, "i", 48);
58
+ i0.ɵɵelement(0, "i", 49);
58
59
  } }
59
60
  function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_22_Conditional_2_Template(rf, ctx) { if (rf & 1) {
60
- i0.ɵɵelement(0, "i", 49);
61
+ i0.ɵɵelement(0, "i", 50);
61
62
  } }
62
63
  function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_22_Template(rf, ctx) { if (rf & 1) {
63
- i0.ɵɵelementStart(0, "div", 47);
64
- i0.ɵɵconditionalCreate(1, ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_22_Conditional_1_Template, 1, 0, "i", 48)(2, ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_22_Conditional_2_Template, 1, 0, "i", 49);
64
+ i0.ɵɵelementStart(0, "div", 48);
65
+ i0.ɵɵconditionalCreate(1, ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_22_Conditional_1_Template, 1, 0, "i", 49)(2, ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_22_Conditional_2_Template, 1, 0, "i", 50);
65
66
  i0.ɵɵelementStart(3, "span");
66
67
  i0.ɵɵtext(4);
67
68
  i0.ɵɵelementEnd()();
@@ -74,7 +75,7 @@ function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_22_T
74
75
  i0.ɵɵtextInterpolate(testResult_r7.Message);
75
76
  } }
76
77
  function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_23_Conditional_7_Template(rf, ctx) { if (rf & 1) {
77
- i0.ɵɵelement(0, "i", 42);
78
+ i0.ɵɵelement(0, "i", 43);
78
79
  i0.ɵɵtext(1, " Deleting... ");
79
80
  } }
80
81
  function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_23_Conditional_8_Template(rf, ctx) { if (rf & 1) {
@@ -82,16 +83,16 @@ function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_23_C
82
83
  } }
83
84
  function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_23_Template(rf, ctx) { if (rf & 1) {
84
85
  const _r8 = i0.ɵɵgetCurrentView();
85
- i0.ɵɵelementStart(0, "div", 39)(1, "div", 50);
86
- i0.ɵɵelement(2, "i", 51);
87
- i0.ɵɵelementStart(3, "span", 52);
86
+ i0.ɵɵelementStart(0, "div", 40)(1, "div", 51);
87
+ i0.ɵɵelement(2, "i", 52);
88
+ i0.ɵɵelementStart(3, "span", 53);
88
89
  i0.ɵɵtext(4, "Delete this integration and all its entity maps?");
89
90
  i0.ɵɵelementEnd();
90
- i0.ɵɵelementStart(5, "div", 53)(6, "button", 54);
91
+ i0.ɵɵelementStart(5, "div", 54)(6, "button", 55);
91
92
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_23_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r8); const summary_r6 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.ConfirmDelete(summary_r6.Integration.ID)); });
92
93
  i0.ɵɵconditionalCreate(7, ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_23_Conditional_7_Template, 2, 0)(8, ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_23_Conditional_8_Template, 1, 0);
93
94
  i0.ɵɵelementEnd();
94
- i0.ɵɵelementStart(9, "button", 43);
95
+ i0.ɵɵelementStart(9, "button", 44);
95
96
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_23_Template_button_click_9_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.CancelDelete()); });
96
97
  i0.ɵɵtext(10, " Cancel ");
97
98
  i0.ɵɵelementEnd()()()();
@@ -103,69 +104,69 @@ function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_23_T
103
104
  i0.ɵɵconditional(ctx_r1.IsDeleting ? 7 : 8);
104
105
  } }
105
106
  function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_26_Template(rf, ctx) { if (rf & 1) {
106
- i0.ɵɵelement(0, "i", 42);
107
+ i0.ɵɵelement(0, "i", 43);
107
108
  } }
108
109
  function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_27_Template(rf, ctx) { if (rf & 1) {
109
110
  i0.ɵɵtext(0, " Test ");
110
111
  } }
111
112
  function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_30_Conditional_2_Template(rf, ctx) { if (rf & 1) {
112
- i0.ɵɵelement(0, "i", 42);
113
+ i0.ɵɵelement(0, "i", 43);
113
114
  i0.ɵɵtext(1, " Syncing... ");
114
115
  } }
115
116
  function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_30_Conditional_3_Template(rf, ctx) { if (rf & 1) {
116
- i0.ɵɵelement(0, "i", 37);
117
+ i0.ɵɵelement(0, "i", 38);
117
118
  i0.ɵɵtext(1, " Sync ");
118
- i0.ɵɵelement(2, "i", 57);
119
+ i0.ɵɵelement(2, "i", 58);
119
120
  } }
120
121
  function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_30_Conditional_4_Template(rf, ctx) { if (rf & 1) {
121
122
  const _r10 = i0.ɵɵgetCurrentView();
122
- i0.ɵɵelementStart(0, "div", 56)(1, "div", 58)(2, "span", 59);
123
+ i0.ɵɵelementStart(0, "div", 57)(1, "div", 59)(2, "span", 60);
123
124
  i0.ɵɵtext(3, "Pull (External \u2192 MJ)");
124
125
  i0.ɵɵelementEnd();
125
- i0.ɵɵelementStart(4, "button", 60);
126
+ i0.ɵɵelementStart(4, "button", 61);
126
127
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_30_Conditional_4_Template_button_click_4_listener($event) { i0.ɵɵrestoreView(_r10); const summary_r6 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.RunSyncWithDirection(summary_r6.Integration.ID, false, "Pull", $event)); });
127
- i0.ɵɵelement(5, "i", 61);
128
+ i0.ɵɵelement(5, "i", 62);
128
129
  i0.ɵɵtext(6, " Incremental Pull ");
129
130
  i0.ɵɵelementEnd();
130
- i0.ɵɵelementStart(7, "button", 60);
131
+ i0.ɵɵelementStart(7, "button", 61);
131
132
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_30_Conditional_4_Template_button_click_7_listener($event) { i0.ɵɵrestoreView(_r10); const summary_r6 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.RunSyncWithDirection(summary_r6.Integration.ID, true, "Pull", $event)); });
132
- i0.ɵɵelement(8, "i", 62);
133
+ i0.ɵɵelement(8, "i", 63);
133
134
  i0.ɵɵtext(9, " Full Pull ");
134
135
  i0.ɵɵelementEnd()();
135
- i0.ɵɵelementStart(10, "div", 58)(11, "span", 59);
136
+ i0.ɵɵelementStart(10, "div", 59)(11, "span", 60);
136
137
  i0.ɵɵtext(12, "Push (MJ \u2192 External)");
137
138
  i0.ɵɵelementEnd();
138
- i0.ɵɵelementStart(13, "button", 60);
139
+ i0.ɵɵelementStart(13, "button", 61);
139
140
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_30_Conditional_4_Template_button_click_13_listener($event) { i0.ɵɵrestoreView(_r10); const summary_r6 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.RunSyncWithDirection(summary_r6.Integration.ID, false, "Push", $event)); });
140
- i0.ɵɵelement(14, "i", 63);
141
+ i0.ɵɵelement(14, "i", 64);
141
142
  i0.ɵɵtext(15, " Incremental Push ");
142
143
  i0.ɵɵelementEnd();
143
- i0.ɵɵelementStart(16, "button", 60);
144
+ i0.ɵɵelementStart(16, "button", 61);
144
145
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_30_Conditional_4_Template_button_click_16_listener($event) { i0.ɵɵrestoreView(_r10); const summary_r6 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.RunSyncWithDirection(summary_r6.Integration.ID, true, "Push", $event)); });
145
- i0.ɵɵelement(17, "i", 62);
146
+ i0.ɵɵelement(17, "i", 63);
146
147
  i0.ɵɵtext(18, " Full Push ");
147
148
  i0.ɵɵelementEnd()();
148
- i0.ɵɵelementStart(19, "div", 58)(20, "span", 59);
149
+ i0.ɵɵelementStart(19, "div", 59)(20, "span", 60);
149
150
  i0.ɵɵtext(21, "Bidirectional");
150
151
  i0.ɵɵelementEnd();
151
- i0.ɵɵelementStart(22, "button", 60);
152
+ i0.ɵɵelementStart(22, "button", 61);
152
153
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_30_Conditional_4_Template_button_click_22_listener($event) { i0.ɵɵrestoreView(_r10); const summary_r6 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.RunSyncWithDirection(summary_r6.Integration.ID, false, "Bidirectional", $event)); });
153
- i0.ɵɵelement(23, "i", 37);
154
+ i0.ɵɵelement(23, "i", 38);
154
155
  i0.ɵɵtext(24, " Incremental Both ");
155
156
  i0.ɵɵelementEnd();
156
- i0.ɵɵelementStart(25, "button", 60);
157
+ i0.ɵɵelementStart(25, "button", 61);
157
158
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_30_Conditional_4_Template_button_click_25_listener($event) { i0.ɵɵrestoreView(_r10); const summary_r6 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.RunSyncWithDirection(summary_r6.Integration.ID, true, "Bidirectional", $event)); });
158
- i0.ɵɵelement(26, "i", 62);
159
+ i0.ɵɵelement(26, "i", 63);
159
160
  i0.ɵɵtext(27, " Full Both ");
160
161
  i0.ɵɵelementEnd()()();
161
162
  } }
162
163
  function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_30_Template(rf, ctx) { if (rf & 1) {
163
164
  const _r9 = i0.ɵɵgetCurrentView();
164
- i0.ɵɵelementStart(0, "div", 44)(1, "button", 55);
165
+ i0.ɵɵelementStart(0, "div", 45)(1, "button", 56);
165
166
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_30_Template_button_click_1_listener($event) { i0.ɵɵrestoreView(_r9); const summary_r6 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.ToggleSyncMenu(summary_r6.Integration.ID, $event)); });
166
167
  i0.ɵɵconditionalCreate(2, ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_30_Conditional_2_Template, 2, 0)(3, ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_30_Conditional_3_Template, 3, 0);
167
168
  i0.ɵɵelementEnd();
168
- i0.ɵɵconditionalCreate(4, ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_30_Conditional_4_Template, 28, 0, "div", 56);
169
+ i0.ɵɵconditionalCreate(4, ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_30_Conditional_4_Template, 28, 0, "div", 57);
169
170
  i0.ɵɵelementEnd();
170
171
  } if (rf & 2) {
171
172
  const summary_r6 = i0.ɵɵnextContext().$implicit;
@@ -179,48 +180,48 @@ function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_30_T
179
180
  } }
180
181
  function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Template(rf, ctx) { if (rf & 1) {
181
182
  const _r5 = i0.ɵɵgetCurrentView();
182
- i0.ɵɵelementStart(0, "div", 20)(1, "div", 25);
183
+ i0.ɵɵelementStart(0, "div", 21)(1, "div", 26);
183
184
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Template_div_click_1_listener() { const summary_r6 = i0.ɵɵrestoreView(_r5).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.SelectIntegrationCard(summary_r6)); });
184
- i0.ɵɵelementStart(2, "div", 26)(3, "div", 27);
185
- i0.ɵɵelement(4, "i", 28);
185
+ i0.ɵɵelementStart(2, "div", 27)(3, "div", 28);
186
+ i0.ɵɵelement(4, "i", 29);
186
187
  i0.ɵɵelementEnd();
187
188
  i0.ɵɵelementStart(5, "span");
188
189
  i0.ɵɵtext(6);
189
190
  i0.ɵɵelementEnd()();
190
- i0.ɵɵelementStart(7, "div", 29)(8, "div", 30);
191
+ i0.ɵɵelementStart(7, "div", 30)(8, "div", 31);
191
192
  i0.ɵɵtext(9);
192
193
  i0.ɵɵelementEnd();
193
- i0.ɵɵelementStart(10, "div", 31);
194
+ i0.ɵɵelementStart(10, "div", 32);
194
195
  i0.ɵɵtext(11);
195
196
  i0.ɵɵelementEnd();
196
- i0.ɵɵelementStart(12, "div", 32)(13, "span", 33);
197
+ i0.ɵɵelementStart(12, "div", 33)(13, "span", 34);
197
198
  i0.ɵɵtext(14);
198
199
  i0.ɵɵelementEnd();
199
- i0.ɵɵelementStart(15, "span", 34);
200
+ i0.ɵɵelementStart(15, "span", 35);
200
201
  i0.ɵɵtext(16, "\u00B7");
201
202
  i0.ɵɵelementEnd();
202
- i0.ɵɵelementStart(17, "span", 35);
203
+ i0.ɵɵelementStart(17, "span", 36);
203
204
  i0.ɵɵtext(18);
204
205
  i0.ɵɵelementEnd()();
205
- i0.ɵɵelementStart(19, "div", 36);
206
- i0.ɵɵelement(20, "i", 37);
206
+ i0.ɵɵelementStart(19, "div", 37);
207
+ i0.ɵɵelement(20, "i", 38);
207
208
  i0.ɵɵtext(21);
208
209
  i0.ɵɵelementEnd();
209
- i0.ɵɵconditionalCreate(22, ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_22_Template, 5, 6, "div", 38);
210
+ i0.ɵɵconditionalCreate(22, ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_22_Template, 5, 6, "div", 39);
210
211
  i0.ɵɵelementEnd()();
211
- i0.ɵɵconditionalCreate(23, ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_23_Template, 11, 2, "div", 39);
212
- i0.ɵɵelementStart(24, "div", 40)(25, "button", 41);
212
+ i0.ɵɵconditionalCreate(23, ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_23_Template, 11, 2, "div", 40);
213
+ i0.ɵɵelementStart(24, "div", 41)(25, "button", 42);
213
214
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Template_button_click_25_listener() { const summary_r6 = i0.ɵɵrestoreView(_r5).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.TestExistingConnection(summary_r6.Integration.ID)); });
214
- i0.ɵɵconditionalCreate(26, ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_26_Template, 1, 0, "i", 42)(27, ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_27_Template, 1, 0);
215
+ i0.ɵɵconditionalCreate(26, ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_26_Template, 1, 0, "i", 43)(27, ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_27_Template, 1, 0);
215
216
  i0.ɵɵelementEnd();
216
- i0.ɵɵelementStart(28, "button", 43);
217
+ i0.ɵɵelementStart(28, "button", 44);
217
218
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Template_button_click_28_listener() { const summary_r6 = i0.ɵɵrestoreView(_r5).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnMenuAction("edit", summary_r6)); });
218
219
  i0.ɵɵtext(29, " Configure ");
219
220
  i0.ɵɵelementEnd();
220
- i0.ɵɵconditionalCreate(30, ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_30_Template, 5, 3, "div", 44);
221
- i0.ɵɵelementStart(31, "button", 45);
221
+ i0.ɵɵconditionalCreate(30, ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_30_Template, 5, 3, "div", 45);
222
+ i0.ɵɵelementStart(31, "button", 46);
222
223
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Template_button_click_31_listener() { const summary_r6 = i0.ɵɵrestoreView(_r5).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnMenuAction("delete", summary_r6)); });
223
- i0.ɵɵelement(32, "i", 46);
224
+ i0.ɵɵelement(32, "i", 47);
224
225
  i0.ɵɵelementEnd()()();
225
226
  } if (rf & 2) {
226
227
  let tmp_21_0;
@@ -257,14 +258,14 @@ function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Template(rf, ctx
257
258
  } }
258
259
  function ConnectionsComponent_Conditional_7_Conditional_2_Template(rf, ctx) { if (rf & 1) {
259
260
  const _r4 = i0.ɵɵgetCurrentView();
260
- i0.ɵɵelementStart(0, "div", 16);
261
- i0.ɵɵrepeaterCreate(1, ConnectionsComponent_Conditional_7_Conditional_2_For_2_Template, 33, 17, "div", 20, _forTrack0);
262
- i0.ɵɵelementStart(3, "div", 21);
261
+ i0.ɵɵelementStart(0, "div", 17);
262
+ i0.ɵɵrepeaterCreate(1, ConnectionsComponent_Conditional_7_Conditional_2_For_2_Template, 33, 17, "div", 21, _forTrack0);
263
+ i0.ɵɵelementStart(3, "div", 22);
263
264
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_7_Conditional_2_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OpenWizard()); });
264
- i0.ɵɵelementStart(4, "div", 22)(5, "div", 23);
265
+ i0.ɵɵelementStart(4, "div", 23)(5, "div", 24);
265
266
  i0.ɵɵelement(6, "i", 13);
266
267
  i0.ɵɵelementEnd();
267
- i0.ɵɵelementStart(7, "span", 24);
268
+ i0.ɵɵelementStart(7, "span", 25);
268
269
  i0.ɵɵtext(8, "Add Integration");
269
270
  i0.ɵɵelementEnd()()()();
270
271
  } if (rf & 2) {
@@ -273,9 +274,9 @@ function ConnectionsComponent_Conditional_7_Conditional_2_Template(rf, ctx) { if
273
274
  i0.ɵɵrepeater(ctx_r1.Connections);
274
275
  } }
275
276
  function ConnectionsComponent_Conditional_7_Template(rf, ctx) { if (rf & 1) {
276
- i0.ɵɵconditionalCreate(0, ConnectionsComponent_Conditional_7_Conditional_0_Template, 2, 0, "div", 14);
277
- i0.ɵɵconditionalCreate(1, ConnectionsComponent_Conditional_7_Conditional_1_Template, 9, 0, "div", 15);
278
- i0.ɵɵconditionalCreate(2, ConnectionsComponent_Conditional_7_Conditional_2_Template, 9, 0, "div", 16);
277
+ i0.ɵɵconditionalCreate(0, ConnectionsComponent_Conditional_7_Conditional_0_Template, 2, 0, "div", 15);
278
+ i0.ɵɵconditionalCreate(1, ConnectionsComponent_Conditional_7_Conditional_1_Template, 9, 0, "div", 16);
279
+ i0.ɵɵconditionalCreate(2, ConnectionsComponent_Conditional_7_Conditional_2_Template, 9, 0, "div", 17);
279
280
  } if (rf & 2) {
280
281
  const ctx_r1 = i0.ɵɵnextContext();
281
282
  i0.ɵɵconditional(ctx_r1.IsLoading ? 0 : -1);
@@ -286,7 +287,7 @@ function ConnectionsComponent_Conditional_7_Template(rf, ctx) { if (rf & 1) {
286
287
  } }
287
288
  function ConnectionsComponent_Conditional_8_Conditional_1_Template(rf, ctx) { if (rf & 1) {
288
289
  const _r11 = i0.ɵɵgetCurrentView();
289
- i0.ɵɵelementStart(0, "app-visual-field-editor", 65);
290
+ i0.ɵɵelementStart(0, "app-visual-field-editor", 66);
290
291
  i0.ɵɵlistener("Close", function ConnectionsComponent_Conditional_8_Conditional_1_Template_app_visual_field_editor_Close_0_listener() { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.CloseEntityMapEditor()); });
291
292
  i0.ɵɵelementEnd();
292
293
  } if (rf & 2) {
@@ -294,63 +295,63 @@ function ConnectionsComponent_Conditional_8_Conditional_1_Template(rf, ctx) { if
294
295
  i0.ɵɵproperty("EntityMap", ctx_r1.EditorEntityMap)("CompanyIntegrationID", ctx_r1.SelectedSummary.Integration.ID)("RunViewProvider", ctx_r1.RunViewToUse);
295
296
  } }
296
297
  function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_21_Conditional_2_Template(rf, ctx) { if (rf & 1) {
297
- i0.ɵɵelement(0, "i", 42);
298
+ i0.ɵɵelement(0, "i", 43);
298
299
  i0.ɵɵtext(1, " Syncing... ");
299
300
  } }
300
301
  function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_21_Conditional_3_Template(rf, ctx) { if (rf & 1) {
301
- i0.ɵɵelement(0, "i", 37);
302
+ i0.ɵɵelement(0, "i", 38);
302
303
  i0.ɵɵtext(1, " Sync ");
303
- i0.ɵɵelement(2, "i", 57);
304
+ i0.ɵɵelement(2, "i", 58);
304
305
  } }
305
306
  function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_21_Conditional_4_Template(rf, ctx) { if (rf & 1) {
306
307
  const _r14 = i0.ɵɵgetCurrentView();
307
- i0.ɵɵelementStart(0, "div", 97)(1, "div", 58)(2, "span", 59);
308
+ i0.ɵɵelementStart(0, "div", 98)(1, "div", 59)(2, "span", 60);
308
309
  i0.ɵɵtext(3, "Pull (External \u2192 MJ)");
309
310
  i0.ɵɵelementEnd();
310
- i0.ɵɵelementStart(4, "button", 60);
311
+ i0.ɵɵelementStart(4, "button", 61);
311
312
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_21_Conditional_4_Template_button_click_4_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.RunSyncWithDirection(ctx_r1.SelectedSummary.Integration.ID, false, "Pull", $event)); });
312
- i0.ɵɵelement(5, "i", 61);
313
+ i0.ɵɵelement(5, "i", 62);
313
314
  i0.ɵɵtext(6, " Incremental Pull ");
314
315
  i0.ɵɵelementEnd();
315
- i0.ɵɵelementStart(7, "button", 60);
316
+ i0.ɵɵelementStart(7, "button", 61);
316
317
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_21_Conditional_4_Template_button_click_7_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.RunSyncWithDirection(ctx_r1.SelectedSummary.Integration.ID, true, "Pull", $event)); });
317
- i0.ɵɵelement(8, "i", 62);
318
+ i0.ɵɵelement(8, "i", 63);
318
319
  i0.ɵɵtext(9, " Full Pull ");
319
320
  i0.ɵɵelementEnd()();
320
- i0.ɵɵelementStart(10, "div", 58)(11, "span", 59);
321
+ i0.ɵɵelementStart(10, "div", 59)(11, "span", 60);
321
322
  i0.ɵɵtext(12, "Push (MJ \u2192 External)");
322
323
  i0.ɵɵelementEnd();
323
- i0.ɵɵelementStart(13, "button", 60);
324
+ i0.ɵɵelementStart(13, "button", 61);
324
325
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_21_Conditional_4_Template_button_click_13_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.RunSyncWithDirection(ctx_r1.SelectedSummary.Integration.ID, false, "Push", $event)); });
325
- i0.ɵɵelement(14, "i", 63);
326
+ i0.ɵɵelement(14, "i", 64);
326
327
  i0.ɵɵtext(15, " Incremental Push ");
327
328
  i0.ɵɵelementEnd();
328
- i0.ɵɵelementStart(16, "button", 60);
329
+ i0.ɵɵelementStart(16, "button", 61);
329
330
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_21_Conditional_4_Template_button_click_16_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.RunSyncWithDirection(ctx_r1.SelectedSummary.Integration.ID, true, "Push", $event)); });
330
- i0.ɵɵelement(17, "i", 62);
331
+ i0.ɵɵelement(17, "i", 63);
331
332
  i0.ɵɵtext(18, " Full Push ");
332
333
  i0.ɵɵelementEnd()();
333
- i0.ɵɵelementStart(19, "div", 58)(20, "span", 59);
334
+ i0.ɵɵelementStart(19, "div", 59)(20, "span", 60);
334
335
  i0.ɵɵtext(21, "Bidirectional");
335
336
  i0.ɵɵelementEnd();
336
- i0.ɵɵelementStart(22, "button", 60);
337
+ i0.ɵɵelementStart(22, "button", 61);
337
338
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_21_Conditional_4_Template_button_click_22_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.RunSyncWithDirection(ctx_r1.SelectedSummary.Integration.ID, false, "Bidirectional", $event)); });
338
- i0.ɵɵelement(23, "i", 37);
339
+ i0.ɵɵelement(23, "i", 38);
339
340
  i0.ɵɵtext(24, " Incremental Both ");
340
341
  i0.ɵɵelementEnd();
341
- i0.ɵɵelementStart(25, "button", 60);
342
+ i0.ɵɵelementStart(25, "button", 61);
342
343
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_21_Conditional_4_Template_button_click_25_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.RunSyncWithDirection(ctx_r1.SelectedSummary.Integration.ID, true, "Bidirectional", $event)); });
343
- i0.ɵɵelement(26, "i", 62);
344
+ i0.ɵɵelement(26, "i", 63);
344
345
  i0.ɵɵtext(27, " Full Both ");
345
346
  i0.ɵɵelementEnd()()();
346
347
  } }
347
348
  function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_21_Template(rf, ctx) { if (rf & 1) {
348
349
  const _r13 = i0.ɵɵgetCurrentView();
349
- i0.ɵɵelementStart(0, "div", 44)(1, "button", 55);
350
+ i0.ɵɵelementStart(0, "div", 45)(1, "button", 56);
350
351
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_21_Template_button_click_1_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.ToggleSyncMenu(ctx_r1.SelectedSummary.Integration.ID, $event)); });
351
352
  i0.ɵɵconditionalCreate(2, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_21_Conditional_2_Template, 2, 0)(3, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_21_Conditional_3_Template, 3, 0);
352
353
  i0.ɵɵelementEnd();
353
- i0.ɵɵconditionalCreate(4, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_21_Conditional_4_Template, 28, 0, "div", 97);
354
+ i0.ɵɵconditionalCreate(4, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_21_Conditional_4_Template, 28, 0, "div", 98);
354
355
  i0.ɵɵelementEnd();
355
356
  } if (rf & 2) {
356
357
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -363,7 +364,7 @@ function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_21_Templat
363
364
  } }
364
365
  function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_28_Template(rf, ctx) { if (rf & 1) {
365
366
  const _r15 = i0.ɵɵgetCurrentView();
366
- i0.ɵɵelementStart(0, "mj-scheduled-job-summary", 98);
367
+ i0.ɵɵelementStart(0, "mj-scheduled-job-summary", 99);
367
368
  i0.ɵɵlistener("EditRequested", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_28_Template_mj_scheduled_job_summary_EditRequested_0_listener() { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OpenSchedulePanel()); });
368
369
  i0.ɵɵelementEnd();
369
370
  } if (rf & 2) {
@@ -372,24 +373,24 @@ function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_28_Templat
372
373
  } }
373
374
  function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_29_Template(rf, ctx) { if (rf & 1) {
374
375
  const _r16 = i0.ɵɵgetCurrentView();
375
- i0.ɵɵelementStart(0, "div", 81)(1, "span", 99);
376
+ i0.ɵɵelementStart(0, "div", 82)(1, "span", 100);
376
377
  i0.ɵɵtext(2, "No sync schedule configured");
377
378
  i0.ɵɵelementEnd();
378
- i0.ɵɵelementStart(3, "button", 100);
379
+ i0.ɵɵelementStart(3, "button", 101);
379
380
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_29_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OpenSchedulePanel()); });
380
381
  i0.ɵɵelement(4, "i", 13);
381
382
  i0.ɵɵtext(5, " Schedule Sync ");
382
383
  i0.ɵɵelementEnd()();
383
384
  } }
384
385
  function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_51_Conditional_1_Template(rf, ctx) { if (rf & 1) {
385
- i0.ɵɵelement(0, "i", 48);
386
+ i0.ɵɵelement(0, "i", 49);
386
387
  } }
387
388
  function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_51_Conditional_2_Template(rf, ctx) { if (rf & 1) {
388
- i0.ɵɵelement(0, "i", 49);
389
+ i0.ɵɵelement(0, "i", 50);
389
390
  } }
390
391
  function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_51_Template(rf, ctx) { if (rf & 1) {
391
- i0.ɵɵelementStart(0, "div", 101);
392
- i0.ɵɵconditionalCreate(1, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_51_Conditional_1_Template, 1, 0, "i", 48)(2, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_51_Conditional_2_Template, 1, 0, "i", 49);
392
+ i0.ɵɵelementStart(0, "div", 102);
393
+ i0.ɵɵconditionalCreate(1, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_51_Conditional_1_Template, 1, 0, "i", 49)(2, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_51_Conditional_2_Template, 1, 0, "i", 50);
393
394
  i0.ɵɵelementStart(3, "span");
394
395
  i0.ɵɵtext(4);
395
396
  i0.ɵɵelementEnd()();
@@ -402,7 +403,7 @@ function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_51_Templat
402
403
  i0.ɵɵtextInterpolate(ctx_r1.SyncResult.Message || (ctx_r1.SyncResult.Success ? "Sync completed successfully" : "Sync failed"));
403
404
  } }
404
405
  function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_For_13_Template(rf, ctx) { if (rf & 1) {
405
- i0.ɵɵelementStart(0, "option", 108);
406
+ i0.ɵɵelementStart(0, "option", 109);
406
407
  i0.ɵɵtext(1);
407
408
  i0.ɵɵelementEnd();
408
409
  } if (rf & 2) {
@@ -412,16 +413,16 @@ function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_For_13_
412
413
  i0.ɵɵtextInterpolate(schema_r18);
413
414
  } }
414
415
  function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Conditional_26_Template(rf, ctx) { if (rf & 1) {
415
- i0.ɵɵelement(0, "i", 42);
416
+ i0.ɵɵelement(0, "i", 43);
416
417
  i0.ɵɵtext(1, " Mapping... ");
417
418
  } }
418
419
  function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Conditional_27_Template(rf, ctx) { if (rf & 1) {
419
- i0.ɵɵelement(0, "i", 93);
420
+ i0.ɵɵelement(0, "i", 94);
420
421
  i0.ɵɵtext(1, " Auto-Map ");
421
422
  } }
422
423
  function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Conditional_30_Conditional_1_Template(rf, ctx) { if (rf & 1) {
423
- i0.ɵɵelementStart(0, "div", 122);
424
- i0.ɵɵelement(1, "i", 48);
424
+ i0.ɵɵelementStart(0, "div", 123);
425
+ i0.ɵɵelement(1, "i", 49);
425
426
  i0.ɵɵtext(2);
426
427
  i0.ɵɵelementEnd();
427
428
  } if (rf & 2) {
@@ -430,14 +431,14 @@ function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Conditi
430
431
  i0.ɵɵtextInterpolate4(" Created ", ctx_r1.AutoMapResult.EntityMapsCreated, " entity map", ctx_r1.AutoMapResult.EntityMapsCreated !== 1 ? "s" : "", " with ", ctx_r1.AutoMapResult.FieldMapsCreated, " field map", ctx_r1.AutoMapResult.FieldMapsCreated !== 1 ? "s" : "", " ");
431
432
  } }
432
433
  function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Conditional_30_Conditional_2_Template(rf, ctx) { if (rf & 1) {
433
- i0.ɵɵelementStart(0, "div", 122);
434
- i0.ɵɵelement(1, "i", 124);
434
+ i0.ɵɵelementStart(0, "div", 123);
435
+ i0.ɵɵelement(1, "i", 125);
435
436
  i0.ɵɵtext(2, " All entities in this schema are already mapped. ");
436
437
  i0.ɵɵelementEnd();
437
438
  } }
438
439
  function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Conditional_30_Conditional_3_For_2_Template(rf, ctx) { if (rf & 1) {
439
- i0.ɵɵelementStart(0, "div", 125);
440
- i0.ɵɵelement(1, "i", 126);
440
+ i0.ɵɵelementStart(0, "div", 126);
441
+ i0.ɵɵelement(1, "i", 127);
441
442
  i0.ɵɵtext(2);
442
443
  i0.ɵɵelementEnd();
443
444
  } if (rf & 2) {
@@ -446,8 +447,8 @@ function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Conditi
446
447
  i0.ɵɵtextInterpolate1(" ", err_r19);
447
448
  } }
448
449
  function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Conditional_30_Conditional_3_Template(rf, ctx) { if (rf & 1) {
449
- i0.ɵɵelementStart(0, "div", 123);
450
- i0.ɵɵrepeaterCreate(1, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Conditional_30_Conditional_3_For_2_Template, 3, 1, "div", 125, i0.ɵɵrepeaterTrackByIdentity);
450
+ i0.ɵɵelementStart(0, "div", 124);
451
+ i0.ɵɵrepeaterCreate(1, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Conditional_30_Conditional_3_For_2_Template, 3, 1, "div", 126, i0.ɵɵrepeaterTrackByIdentity);
451
452
  i0.ɵɵelementEnd();
452
453
  } if (rf & 2) {
453
454
  const ctx_r1 = i0.ɵɵnextContext(5);
@@ -455,9 +456,9 @@ function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Conditi
455
456
  i0.ɵɵrepeater(ctx_r1.AutoMapResult.Errors);
456
457
  } }
457
458
  function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Conditional_30_Template(rf, ctx) { if (rf & 1) {
458
- i0.ɵɵelementStart(0, "div", 121);
459
- i0.ɵɵconditionalCreate(1, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Conditional_30_Conditional_1_Template, 3, 4, "div", 122)(2, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Conditional_30_Conditional_2_Template, 3, 0, "div", 122);
460
- i0.ɵɵconditionalCreate(3, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Conditional_30_Conditional_3_Template, 3, 0, "div", 123);
459
+ i0.ɵɵelementStart(0, "div", 122);
460
+ i0.ɵɵconditionalCreate(1, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Conditional_30_Conditional_1_Template, 3, 4, "div", 123)(2, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Conditional_30_Conditional_2_Template, 3, 0, "div", 123);
461
+ i0.ɵɵconditionalCreate(3, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Conditional_30_Conditional_3_Template, 3, 0, "div", 124);
461
462
  i0.ɵɵelementEnd();
462
463
  } if (rf & 2) {
463
464
  const ctx_r1 = i0.ɵɵnextContext(4);
@@ -469,45 +470,45 @@ function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Conditi
469
470
  } }
470
471
  function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Template(rf, ctx) { if (rf & 1) {
471
472
  const _r17 = i0.ɵɵgetCurrentView();
472
- i0.ɵɵelementStart(0, "div", 95)(1, "div", 102);
473
- i0.ɵɵelement(2, "i", 93);
473
+ i0.ɵɵelementStart(0, "div", 96)(1, "div", 103);
474
+ i0.ɵɵelement(2, "i", 94);
474
475
  i0.ɵɵelementStart(3, "span");
475
476
  i0.ɵɵtext(4, "Auto-map all entities in a schema to this integration with 1:1 field mappings");
476
477
  i0.ɵɵelementEnd()();
477
- i0.ɵɵelementStart(5, "div", 103)(6, "div", 104)(7, "label", 105);
478
+ i0.ɵɵelementStart(5, "div", 104)(6, "div", 105)(7, "label", 106);
478
479
  i0.ɵɵtext(8, "Target Schema");
479
480
  i0.ɵɵelementEnd();
480
- i0.ɵɵelementStart(9, "select", 106);
481
+ i0.ɵɵelementStart(9, "select", 107);
481
482
  i0.ɵɵtwoWayListener("ngModelChange", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Template_select_ngModelChange_9_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.AutoMapSelectedSchema, $event) || (ctx_r1.AutoMapSelectedSchema = $event); return i0.ɵɵresetView($event); });
482
- i0.ɵɵelementStart(10, "option", 107);
483
+ i0.ɵɵelementStart(10, "option", 108);
483
484
  i0.ɵɵtext(11, "Select schema...");
484
485
  i0.ɵɵelementEnd();
485
- i0.ɵɵrepeaterCreate(12, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_For_13_Template, 2, 2, "option", 108, i0.ɵɵrepeaterTrackByIdentity);
486
+ i0.ɵɵrepeaterCreate(12, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_For_13_Template, 2, 2, "option", 109, i0.ɵɵrepeaterTrackByIdentity);
486
487
  i0.ɵɵelementEnd()();
487
- i0.ɵɵelementStart(14, "div", 109)(15, "label", 105);
488
+ i0.ɵɵelementStart(14, "div", 110)(15, "label", 106);
488
489
  i0.ɵɵtext(16, "Direction");
489
490
  i0.ɵɵelementEnd();
490
- i0.ɵɵelementStart(17, "div", 110)(18, "button", 111);
491
+ i0.ɵɵelementStart(17, "div", 111)(18, "button", 112);
491
492
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Template_button_click_18_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.AutoMapDirection = "Pull"); });
492
- i0.ɵɵelement(19, "i", 112);
493
+ i0.ɵɵelement(19, "i", 113);
493
494
  i0.ɵɵelementEnd();
494
- i0.ɵɵelementStart(20, "button", 113);
495
+ i0.ɵɵelementStart(20, "button", 114);
495
496
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Template_button_click_20_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.AutoMapDirection = "Bidirectional"); });
496
- i0.ɵɵelement(21, "i", 114);
497
+ i0.ɵɵelement(21, "i", 115);
497
498
  i0.ɵɵelementEnd();
498
- i0.ɵɵelementStart(22, "button", 115);
499
+ i0.ɵɵelementStart(22, "button", 116);
499
500
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Template_button_click_22_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.AutoMapDirection = "Push"); });
500
- i0.ɵɵelement(23, "i", 68);
501
+ i0.ɵɵelement(23, "i", 69);
501
502
  i0.ɵɵelementEnd()()();
502
- i0.ɵɵelementStart(24, "div", 116)(25, "button", 117);
503
+ i0.ɵɵelementStart(24, "div", 117)(25, "button", 118);
503
504
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Template_button_click_25_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.RunAutoMap()); });
504
505
  i0.ɵɵconditionalCreate(26, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Conditional_26_Template, 2, 0)(27, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Conditional_27_Template, 2, 0);
505
506
  i0.ɵɵelementEnd();
506
- i0.ɵɵelementStart(28, "button", 118);
507
+ i0.ɵɵelementStart(28, "button", 119);
507
508
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Template_button_click_28_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.CloseAutoMapPanel()); });
508
- i0.ɵɵelement(29, "i", 119);
509
+ i0.ɵɵelement(29, "i", 120);
509
510
  i0.ɵɵelementEnd()()();
510
- i0.ɵɵconditionalCreate(30, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Conditional_30_Template, 4, 8, "div", 120);
511
+ i0.ɵɵconditionalCreate(30, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Conditional_30_Template, 4, 8, "div", 121);
511
512
  i0.ɵɵelementEnd();
512
513
  } if (rf & 2) {
513
514
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -531,11 +532,11 @@ function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Templat
531
532
  i0.ɵɵconditional(ctx_r1.AutoMapResult ? 30 : -1);
532
533
  } }
533
534
  function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_8_Template(rf, ctx) { if (rf & 1) {
534
- i0.ɵɵelement(0, "i", 42);
535
+ i0.ɵɵelement(0, "i", 43);
535
536
  i0.ɵɵtext(1, " Creating... ");
536
537
  } }
537
538
  function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_9_Template(rf, ctx) { if (rf & 1) {
538
- i0.ɵɵelement(0, "i", 91);
539
+ i0.ɵɵelement(0, "i", 92);
539
540
  i0.ɵɵtext(1);
540
541
  } if (rf & 2) {
541
542
  const ctx_r1 = i0.ɵɵnextContext(4);
@@ -543,16 +544,16 @@ function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditi
543
544
  i0.ɵɵtextInterpolate2(" Create ", ctx_r1.CreateTablesSelectedCount, " Table", ctx_r1.CreateTablesSelectedCount !== 1 ? "s" : "", " ");
544
545
  } }
545
546
  function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_12_Template(rf, ctx) { if (rf & 1) {
546
- i0.ɵɵelement(0, "mj-loading", 127);
547
+ i0.ɵɵelement(0, "mj-loading", 128);
547
548
  } }
548
549
  function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_13_Template(rf, ctx) { if (rf & 1) {
549
- i0.ɵɵelementStart(0, "div", 128);
550
- i0.ɵɵelement(1, "i", 124);
550
+ i0.ɵɵelementStart(0, "div", 129);
551
+ i0.ɵɵelement(1, "i", 125);
551
552
  i0.ɵɵtext(2, " No source objects available from this connector. ");
552
553
  i0.ɵɵelementEnd();
553
554
  } }
554
555
  function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_14_For_9_Conditional_4_Template(rf, ctx) { if (rf & 1) {
555
- i0.ɵɵelementStart(0, "span", 137);
556
+ i0.ɵɵelementStart(0, "span", 138);
556
557
  i0.ɵɵtext(1);
557
558
  i0.ɵɵelementEnd();
558
559
  } if (rf & 2) {
@@ -561,26 +562,26 @@ function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditi
561
562
  i0.ɵɵtextInterpolate(obj_r23.Name);
562
563
  } }
563
564
  function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_14_For_9_Conditional_5_Template(rf, ctx) { if (rf & 1) {
564
- i0.ɵɵelementStart(0, "span", 138);
565
+ i0.ɵɵelementStart(0, "span", 139);
565
566
  i0.ɵɵtext(1, "Custom");
566
567
  i0.ɵɵelementEnd();
567
568
  } }
568
569
  function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_14_For_9_Conditional_6_Template(rf, ctx) { if (rf & 1) {
569
- i0.ɵɵelementStart(0, "span", 139);
570
+ i0.ɵɵelementStart(0, "span", 140);
570
571
  i0.ɵɵtext(1, "Registered");
571
572
  i0.ɵɵelementEnd();
572
573
  } }
573
574
  function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_14_For_9_Template(rf, ctx) { if (rf & 1) {
574
575
  const _r22 = i0.ɵɵgetCurrentView();
575
- i0.ɵɵelementStart(0, "label", 134)(1, "input", 136);
576
+ i0.ɵɵelementStart(0, "label", 135)(1, "input", 137);
576
577
  i0.ɵɵtwoWayListener("ngModelChange", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_14_For_9_Template_input_ngModelChange_1_listener($event) { const obj_r23 = i0.ɵɵrestoreView(_r22).$implicit; i0.ɵɵtwoWayBindingSet(obj_r23.Selected, $event) || (obj_r23.Selected = $event); return i0.ɵɵresetView($event); });
577
578
  i0.ɵɵelementEnd();
578
579
  i0.ɵɵelementStart(2, "span");
579
580
  i0.ɵɵtext(3);
580
581
  i0.ɵɵelementEnd();
581
- i0.ɵɵconditionalCreate(4, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_14_For_9_Conditional_4_Template, 2, 1, "span", 137);
582
- i0.ɵɵconditionalCreate(5, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_14_For_9_Conditional_5_Template, 2, 0, "span", 138);
583
- i0.ɵɵconditionalCreate(6, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_14_For_9_Conditional_6_Template, 2, 0, "span", 139);
582
+ i0.ɵɵconditionalCreate(4, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_14_For_9_Conditional_4_Template, 2, 1, "span", 138);
583
+ i0.ɵɵconditionalCreate(5, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_14_For_9_Conditional_5_Template, 2, 0, "span", 139);
584
+ i0.ɵɵconditionalCreate(6, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_14_For_9_Conditional_6_Template, 2, 0, "span", 140);
584
585
  i0.ɵɵelementEnd();
585
586
  } if (rf & 2) {
586
587
  const obj_r23 = ctx.$implicit;
@@ -597,16 +598,16 @@ function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditi
597
598
  } }
598
599
  function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_14_Template(rf, ctx) { if (rf & 1) {
599
600
  const _r21 = i0.ɵɵgetCurrentView();
600
- i0.ɵɵelementStart(0, "div", 130)(1, "input", 131);
601
+ i0.ɵɵelementStart(0, "div", 131)(1, "input", 132);
601
602
  i0.ɵɵtwoWayListener("ngModelChange", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_14_Template_input_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r1.CreateTablesSearch, $event) || (ctx_r1.CreateTablesSearch = $event); return i0.ɵɵresetView($event); });
602
603
  i0.ɵɵelementEnd()();
603
- i0.ɵɵelementStart(2, "div", 132)(3, "div", 133)(4, "label", 134)(5, "input", 135);
604
+ i0.ɵɵelementStart(2, "div", 133)(3, "div", 134)(4, "label", 135)(5, "input", 136);
604
605
  i0.ɵɵlistener("change", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_14_Template_input_change_5_listener($event) { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.ToggleAllCreateTablesObjects($event.target.checked)); });
605
606
  i0.ɵɵelementEnd();
606
607
  i0.ɵɵelementStart(6, "span");
607
608
  i0.ɵɵtext(7);
608
609
  i0.ɵɵelementEnd()()();
609
- i0.ɵɵrepeaterCreate(8, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_14_For_9_Template, 7, 5, "label", 134, _forTrack1);
610
+ i0.ɵɵrepeaterCreate(8, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_14_For_9_Template, 7, 5, "label", 135, _forTrack1);
610
611
  i0.ɵɵelementEnd();
611
612
  } if (rf & 2) {
612
613
  const ctx_r1 = i0.ɵɵnextContext(4);
@@ -620,14 +621,14 @@ function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditi
620
621
  i0.ɵɵrepeater(ctx_r1.FilteredCreateTablesObjects);
621
622
  } }
622
623
  function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_15_Conditional_1_Template(rf, ctx) { if (rf & 1) {
623
- i0.ɵɵelement(0, "i", 48);
624
+ i0.ɵɵelement(0, "i", 49);
624
625
  } }
625
626
  function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_15_Conditional_2_Template(rf, ctx) { if (rf & 1) {
626
- i0.ɵɵelement(0, "i", 49);
627
+ i0.ɵɵelement(0, "i", 50);
627
628
  } }
628
629
  function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_15_Template(rf, ctx) { if (rf & 1) {
629
- i0.ɵɵelementStart(0, "div", 121);
630
- i0.ɵɵconditionalCreate(1, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_15_Conditional_1_Template, 1, 0, "i", 48)(2, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_15_Conditional_2_Template, 1, 0, "i", 49);
630
+ i0.ɵɵelementStart(0, "div", 122);
631
+ i0.ɵɵconditionalCreate(1, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_15_Conditional_1_Template, 1, 0, "i", 49)(2, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_15_Conditional_2_Template, 1, 0, "i", 50);
631
632
  i0.ɵɵelementStart(3, "span");
632
633
  i0.ɵɵtext(4);
633
634
  i0.ɵɵelementEnd()();
@@ -641,21 +642,21 @@ function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditi
641
642
  } }
642
643
  function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Template(rf, ctx) { if (rf & 1) {
643
644
  const _r20 = i0.ɵɵgetCurrentView();
644
- i0.ɵɵelementStart(0, "div", 95)(1, "div", 102);
645
- i0.ɵɵelement(2, "i", 91);
645
+ i0.ɵɵelementStart(0, "div", 96)(1, "div", 103);
646
+ i0.ɵɵelement(2, "i", 92);
646
647
  i0.ɵɵelementStart(3, "span");
647
648
  i0.ɵɵtext(4, "Select source objects to create as entity tables in your database");
648
649
  i0.ɵɵelementEnd()();
649
- i0.ɵɵelementStart(5, "div", 103)(6, "div", 116)(7, "button", 117);
650
+ i0.ɵɵelementStart(5, "div", 104)(6, "div", 117)(7, "button", 118);
650
651
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.RunCreateTables()); });
651
652
  i0.ɵɵconditionalCreate(8, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_8_Template, 2, 0)(9, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_9_Template, 2, 2);
652
653
  i0.ɵɵelementEnd();
653
- i0.ɵɵelementStart(10, "button", 118);
654
+ i0.ɵɵelementStart(10, "button", 119);
654
655
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.CloseCreateTablesPanel()); });
655
- i0.ɵɵelement(11, "i", 119);
656
+ i0.ɵɵelement(11, "i", 120);
656
657
  i0.ɵɵelementEnd()()();
657
- i0.ɵɵconditionalCreate(12, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_12_Template, 1, 0, "mj-loading", 127)(13, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_13_Template, 3, 0, "div", 128)(14, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_14_Template, 10, 4);
658
- i0.ɵɵconditionalCreate(15, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_15_Template, 5, 6, "div", 129);
658
+ i0.ɵɵconditionalCreate(12, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_12_Template, 1, 0, "mj-loading", 128)(13, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_13_Template, 3, 0, "div", 129)(14, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_14_Template, 10, 4);
659
+ i0.ɵɵconditionalCreate(15, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_15_Template, 5, 6, "div", 130);
659
660
  i0.ɵɵelementEnd();
660
661
  } if (rf & 2) {
661
662
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -669,18 +670,18 @@ function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Templat
669
670
  i0.ɵɵconditional(ctx_r1.CreateTablesResult ? 15 : -1);
670
671
  } }
671
672
  function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Conditional_5_Template(rf, ctx) { if (rf & 1) {
672
- i0.ɵɵelementStart(0, "div", 140);
673
- i0.ɵɵelement(1, "i", 42);
673
+ i0.ɵɵelementStart(0, "div", 141);
674
+ i0.ɵɵelement(1, "i", 43);
674
675
  i0.ɵɵtext(2, " Loading...");
675
676
  i0.ɵɵelementEnd();
676
677
  } }
677
678
  function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Conditional_6_Template(rf, ctx) { if (rf & 1) {
678
- i0.ɵɵelementStart(0, "div", 141);
679
+ i0.ɵɵelementStart(0, "div", 142);
679
680
  i0.ɵɵtext(1, "No source objects found in metadata");
680
681
  i0.ɵɵelementEnd();
681
682
  } }
682
683
  function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Conditional_7_For_4_Template(rf, ctx) { if (rf & 1) {
683
- i0.ɵɵelementStart(0, "option", 108);
684
+ i0.ɵɵelementStart(0, "option", 109);
684
685
  i0.ɵɵtext(1);
685
686
  i0.ɵɵelementEnd();
686
687
  } if (rf & 2) {
@@ -691,12 +692,12 @@ function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Conditi
691
692
  } }
692
693
  function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Conditional_7_Template(rf, ctx) { if (rf & 1) {
693
694
  const _r25 = i0.ɵɵgetCurrentView();
694
- i0.ɵɵelementStart(0, "select", 106);
695
+ i0.ɵɵelementStart(0, "select", 107);
695
696
  i0.ɵɵtwoWayListener("ngModelChange", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Conditional_7_Template_select_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r25); const ctx_r1 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r1.AddMapSourceObjectName, $event) || (ctx_r1.AddMapSourceObjectName = $event); return i0.ɵɵresetView($event); });
696
- i0.ɵɵelementStart(1, "option", 107);
697
+ i0.ɵɵelementStart(1, "option", 108);
697
698
  i0.ɵɵtext(2, "Select source object...");
698
699
  i0.ɵɵelementEnd();
699
- i0.ɵɵrepeaterCreate(3, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Conditional_7_For_4_Template, 2, 2, "option", 108, _forTrack1);
700
+ i0.ɵɵrepeaterCreate(3, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Conditional_7_For_4_Template, 2, 2, "option", 109, _forTrack1);
700
701
  i0.ɵɵelementEnd();
701
702
  } if (rf & 2) {
702
703
  const ctx_r1 = i0.ɵɵnextContext(4);
@@ -707,52 +708,52 @@ function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Conditi
707
708
  i0.ɵɵrepeater(ctx_r1.AvailableSourceObjects);
708
709
  } }
709
710
  function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Conditional_29_Template(rf, ctx) { if (rf & 1) {
710
- i0.ɵɵelement(0, "i", 42);
711
+ i0.ɵɵelement(0, "i", 43);
711
712
  } }
712
713
  function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Conditional_30_Template(rf, ctx) { if (rf & 1) {
713
- i0.ɵɵelement(0, "i", 147);
714
+ i0.ɵɵelement(0, "i", 148);
714
715
  i0.ɵɵtext(1, " Add ");
715
716
  } }
716
717
  function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Template(rf, ctx) { if (rf & 1) {
717
718
  const _r24 = i0.ɵɵgetCurrentView();
718
- i0.ɵɵelementStart(0, "div", 95)(1, "div", 103)(2, "div", 104)(3, "label", 105);
719
+ i0.ɵɵelementStart(0, "div", 96)(1, "div", 104)(2, "div", 105)(3, "label", 106);
719
720
  i0.ɵɵtext(4, "Source Object");
720
721
  i0.ɵɵelementEnd();
721
- i0.ɵɵconditionalCreate(5, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Conditional_5_Template, 3, 0, "div", 140)(6, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Conditional_6_Template, 2, 0, "div", 141)(7, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Conditional_7_Template, 5, 2, "select", 142);
722
+ i0.ɵɵconditionalCreate(5, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Conditional_5_Template, 3, 0, "div", 141)(6, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Conditional_6_Template, 2, 0, "div", 142)(7, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Conditional_7_Template, 5, 2, "select", 143);
722
723
  i0.ɵɵelementEnd();
723
- i0.ɵɵelementStart(8, "div", 109)(9, "label", 105);
724
+ i0.ɵɵelementStart(8, "div", 110)(9, "label", 106);
724
725
  i0.ɵɵtext(10, "Direction");
725
726
  i0.ɵɵelementEnd();
726
- i0.ɵɵelementStart(11, "div", 110)(12, "button", 111);
727
+ i0.ɵɵelementStart(11, "div", 111)(12, "button", 112);
727
728
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Template_button_click_12_listener() { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.AddMapDirection = "Pull"); });
728
- i0.ɵɵelement(13, "i", 112);
729
+ i0.ɵɵelement(13, "i", 113);
729
730
  i0.ɵɵelementEnd();
730
- i0.ɵɵelementStart(14, "button", 113);
731
+ i0.ɵɵelementStart(14, "button", 114);
731
732
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Template_button_click_14_listener() { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.AddMapDirection = "Bidirectional"); });
732
- i0.ɵɵelement(15, "i", 114);
733
+ i0.ɵɵelement(15, "i", 115);
733
734
  i0.ɵɵelementEnd();
734
- i0.ɵɵelementStart(16, "button", 115);
735
+ i0.ɵɵelementStart(16, "button", 116);
735
736
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Template_button_click_16_listener() { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.AddMapDirection = "Push"); });
736
- i0.ɵɵelement(17, "i", 68);
737
+ i0.ɵɵelement(17, "i", 69);
737
738
  i0.ɵɵelementEnd()()();
738
- i0.ɵɵelementStart(18, "div", 143)(19, "label", 105);
739
+ i0.ɵɵelementStart(18, "div", 144)(19, "label", 106);
739
740
  i0.ɵɵtext(20, "MJ Entity");
740
741
  i0.ɵɵelementEnd();
741
- i0.ɵɵelementStart(21, "div", 144)(22, "mj-tree-dropdown", 145, 0);
742
+ i0.ɵɵelementStart(21, "div", 145)(22, "mj-tree-dropdown", 146, 0);
742
743
  i0.ɵɵlistener("SelectionChange", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Template_mj_tree_dropdown_SelectionChange_22_listener($event) { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnEntityTreeSelection($event)); });
743
744
  i0.ɵɵelementEnd();
744
- i0.ɵɵelementStart(24, "button", 146);
745
+ i0.ɵɵelementStart(24, "button", 147);
745
746
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Template_button_click_24_listener() { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OpenNewEntityDialog()); });
746
747
  i0.ɵɵelement(25, "i", 13);
747
748
  i0.ɵɵtext(26, " New ");
748
749
  i0.ɵɵelementEnd()()();
749
- i0.ɵɵelementStart(27, "div", 116)(28, "button", 117);
750
+ i0.ɵɵelementStart(27, "div", 117)(28, "button", 118);
750
751
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Template_button_click_28_listener() { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.SaveAddMap()); });
751
- i0.ɵɵconditionalCreate(29, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Conditional_29_Template, 1, 0, "i", 42)(30, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Conditional_30_Template, 2, 0);
752
+ i0.ɵɵconditionalCreate(29, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Conditional_29_Template, 1, 0, "i", 43)(30, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Conditional_30_Template, 2, 0);
752
753
  i0.ɵɵelementEnd();
753
- i0.ɵɵelementStart(31, "button", 118);
754
+ i0.ɵɵelementStart(31, "button", 119);
754
755
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Template_button_click_31_listener() { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.CloseAddMapPanel()); });
755
- i0.ɵɵelement(32, "i", 119);
756
+ i0.ɵɵelement(32, "i", 120);
756
757
  i0.ɵɵelementEnd()()()();
757
758
  } if (rf & 2) {
758
759
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -772,61 +773,61 @@ function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Templat
772
773
  i0.ɵɵconditional(ctx_r1.IsSavingAddMap ? 29 : 30);
773
774
  } }
774
775
  function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_55_Template(rf, ctx) { if (rf & 1) {
775
- i0.ɵɵelementStart(0, "div", 14);
776
- i0.ɵɵelement(1, "mj-loading", 148);
776
+ i0.ɵɵelementStart(0, "div", 15);
777
+ i0.ɵɵelement(1, "mj-loading", 149);
777
778
  i0.ɵɵelementEnd();
778
779
  } }
779
780
  function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_56_Template(rf, ctx) { if (rf & 1) {
780
781
  const _r27 = i0.ɵɵgetCurrentView();
781
- i0.ɵɵelementStart(0, "div", 96);
782
- i0.ɵɵelement(1, "i", 149);
782
+ i0.ɵɵelementStart(0, "div", 97);
783
+ i0.ɵɵelement(1, "i", 150);
783
784
  i0.ɵɵelementStart(2, "h3");
784
785
  i0.ɵɵtext(3, "No entity maps configured");
785
786
  i0.ɵɵelementEnd();
786
787
  i0.ɵɵelementStart(4, "p");
787
788
  i0.ɵɵtext(5, "Entity maps define how external objects sync to MJ entities.");
788
789
  i0.ɵɵelementEnd();
789
- i0.ɵɵelementStart(6, "button", 150);
790
+ i0.ɵɵelementStart(6, "button", 151);
790
791
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_56_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r27); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.ToggleAddMapPanel()); });
791
792
  i0.ɵɵelement(7, "i", 13);
792
793
  i0.ɵɵtext(8, " Add Your First Entity Map ");
793
794
  i0.ɵɵelementEnd()();
794
795
  } }
795
796
  function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_57_For_12_Conditional_13_Template(rf, ctx) { if (rf & 1) {
796
- i0.ɵɵelementStart(0, "span", 168);
797
- i0.ɵɵelement(1, "i", 172);
797
+ i0.ɵɵelementStart(0, "span", 169);
798
+ i0.ɵɵelement(1, "i", 173);
798
799
  i0.ɵɵelementEnd();
799
800
  } }
800
801
  function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_57_For_12_Template(rf, ctx) { if (rf & 1) {
801
802
  const _r28 = i0.ɵɵgetCurrentView();
802
- i0.ɵɵelementStart(0, "div", 160);
803
+ i0.ɵɵelementStart(0, "div", 161);
803
804
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_57_For_12_Template_div_click_0_listener() { const em_r29 = i0.ɵɵrestoreView(_r28).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnEntityMapClick(em_r29)); });
804
- i0.ɵɵelementStart(1, "span", 161);
805
+ i0.ɵɵelementStart(1, "span", 162);
805
806
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_57_For_12_Template_span_click_1_listener($event) { i0.ɵɵrestoreView(_r28); return i0.ɵɵresetView($event.stopPropagation()); });
806
- i0.ɵɵelementStart(2, "label", 162)(3, "input", 135);
807
+ i0.ɵɵelementStart(2, "label", 163)(3, "input", 136);
807
808
  i0.ɵɵlistener("change", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_57_For_12_Template_input_change_3_listener($event) { const em_r29 = i0.ɵɵrestoreView(_r28).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnToggleMapEnabled(em_r29, $event)); });
808
809
  i0.ɵɵelementEnd();
809
- i0.ɵɵelement(4, "span", 163);
810
+ i0.ɵɵelement(4, "span", 164);
810
811
  i0.ɵɵelementEnd()();
811
- i0.ɵɵelementStart(5, "span", 164);
812
+ i0.ɵɵelementStart(5, "span", 165);
812
813
  i0.ɵɵtext(6);
813
814
  i0.ɵɵelementEnd();
814
- i0.ɵɵelementStart(7, "span", 165);
815
+ i0.ɵɵelementStart(7, "span", 166);
815
816
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_57_For_12_Template_span_click_7_listener($event) { i0.ɵɵrestoreView(_r28); return i0.ɵɵresetView($event.stopPropagation()); });
816
- i0.ɵɵelementStart(8, "button", 166);
817
+ i0.ɵɵelementStart(8, "button", 167);
817
818
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_57_For_12_Template_button_click_8_listener() { const em_r29 = i0.ɵɵrestoreView(_r28).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.CycleSyncDirection(em_r29)); });
818
819
  i0.ɵɵtext(9);
819
820
  i0.ɵɵelementEnd()();
820
- i0.ɵɵelementStart(10, "span", 167);
821
+ i0.ɵɵelementStart(10, "span", 168);
821
822
  i0.ɵɵtext(11);
822
823
  i0.ɵɵelementEnd();
823
- i0.ɵɵelementStart(12, "span", 156);
824
- i0.ɵɵconditionalCreate(13, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_57_For_12_Conditional_13_Template, 2, 0, "span", 168);
825
- i0.ɵɵelementStart(14, "span", 169);
826
- i0.ɵɵelement(15, "i", 37);
824
+ i0.ɵɵelementStart(12, "span", 157);
825
+ i0.ɵɵconditionalCreate(13, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_57_For_12_Conditional_13_Template, 2, 0, "span", 169);
826
+ i0.ɵɵelementStart(14, "span", 170);
827
+ i0.ɵɵelement(15, "i", 38);
827
828
  i0.ɵɵelementEnd();
828
- i0.ɵɵelementStart(16, "span", 170);
829
- i0.ɵɵelement(17, "i", 171);
829
+ i0.ɵɵelementStart(16, "span", 171);
830
+ i0.ɵɵelement(17, "i", 172);
830
831
  i0.ɵɵelementEnd()()();
831
832
  } if (rf & 2) {
832
833
  const em_r29 = ctx.$implicit;
@@ -855,26 +856,26 @@ function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_57_For_12_
855
856
  i0.ɵɵproperty("title", "Conflict: " + em_r29.ConflictResolution);
856
857
  } }
857
858
  function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_57_ForEmpty_13_Template(rf, ctx) { if (rf & 1) {
858
- i0.ɵɵelementStart(0, "div", 159);
859
+ i0.ɵɵelementStart(0, "div", 160);
859
860
  i0.ɵɵtext(1, " No entity maps match your filter. ");
860
861
  i0.ɵɵelementEnd();
861
862
  } }
862
863
  function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_57_Template(rf, ctx) { if (rf & 1) {
863
- i0.ɵɵelementStart(0, "div", 151)(1, "span", 152);
864
+ i0.ɵɵelementStart(0, "div", 152)(1, "span", 153);
864
865
  i0.ɵɵtext(2, "Sync");
865
866
  i0.ɵɵelementEnd();
866
- i0.ɵɵelementStart(3, "span", 153);
867
+ i0.ɵɵelementStart(3, "span", 154);
867
868
  i0.ɵɵtext(4, "External Object");
868
869
  i0.ɵɵelementEnd();
869
- i0.ɵɵelement(5, "span", 154);
870
- i0.ɵɵelementStart(6, "span", 155);
870
+ i0.ɵɵelement(5, "span", 155);
871
+ i0.ɵɵelementStart(6, "span", 156);
871
872
  i0.ɵɵtext(7, "MJ Entity");
872
873
  i0.ɵɵelementEnd();
873
- i0.ɵɵelementStart(8, "span", 156);
874
+ i0.ɵɵelementStart(8, "span", 157);
874
875
  i0.ɵɵtext(9, "Config");
875
876
  i0.ɵɵelementEnd()();
876
- i0.ɵɵelementStart(10, "div", 157);
877
- i0.ɵɵrepeaterCreate(11, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_57_For_12_Template, 18, 14, "div", 158, _forTrack2, false, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_57_ForEmpty_13_Template, 2, 0, "div", 159);
877
+ i0.ɵɵelementStart(10, "div", 158);
878
+ i0.ɵɵrepeaterCreate(11, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_57_For_12_Template, 18, 14, "div", 159, _forTrack2, false, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_57_ForEmpty_13_Template, 2, 0, "div", 160);
878
879
  i0.ɵɵelementEnd();
879
880
  } if (rf & 2) {
880
881
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -883,76 +884,76 @@ function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_57_Templat
883
884
  } }
884
885
  function ConnectionsComponent_Conditional_8_Conditional_2_Template(rf, ctx) { if (rf & 1) {
885
886
  const _r12 = i0.ɵɵgetCurrentView();
886
- i0.ɵɵelementStart(0, "div", 66)(1, "button", 67);
887
+ i0.ɵɵelementStart(0, "div", 67)(1, "button", 68);
887
888
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.CloseDetailView()); });
888
- i0.ɵɵelement(2, "i", 68);
889
+ i0.ɵɵelement(2, "i", 69);
889
890
  i0.ɵɵelementEnd();
890
- i0.ɵɵelementStart(3, "div", 69)(4, "div", 27);
891
- i0.ɵɵelement(5, "i", 28);
891
+ i0.ɵɵelementStart(3, "div", 70)(4, "div", 28);
892
+ i0.ɵɵelement(5, "i", 29);
892
893
  i0.ɵɵelementEnd();
893
- i0.ɵɵelementStart(6, "div", 70)(7, "h2", 71);
894
+ i0.ɵɵelementStart(6, "div", 71)(7, "h2", 72);
894
895
  i0.ɵɵtext(8);
895
896
  i0.ɵɵelementEnd();
896
- i0.ɵɵelementStart(9, "span", 72);
897
+ i0.ɵɵelementStart(9, "span", 73);
897
898
  i0.ɵɵtext(10);
898
- i0.ɵɵelementStart(11, "span", 34);
899
+ i0.ɵɵelementStart(11, "span", 35);
899
900
  i0.ɵɵtext(12, "\u00B7");
900
901
  i0.ɵɵelementEnd();
901
902
  i0.ɵɵtext(13);
902
- i0.ɵɵelementStart(14, "span", 34);
903
+ i0.ɵɵelementStart(14, "span", 35);
903
904
  i0.ɵɵtext(15, "\u00B7");
904
905
  i0.ɵɵelementEnd();
905
906
  i0.ɵɵelementStart(16, "span");
906
907
  i0.ɵɵtext(17);
907
908
  i0.ɵɵelementEnd()()()();
908
- i0.ɵɵelementStart(18, "div", 73)(19, "button", 74);
909
+ i0.ɵɵelementStart(18, "div", 74)(19, "button", 75);
909
910
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Template_button_click_19_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OpenEditPanel(ctx_r1.SelectedSummary)); });
910
- i0.ɵɵelement(20, "i", 75);
911
+ i0.ɵɵelement(20, "i", 76);
911
912
  i0.ɵɵelementEnd();
912
- i0.ɵɵconditionalCreate(21, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_21_Template, 5, 3, "div", 44);
913
+ i0.ɵɵconditionalCreate(21, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_21_Template, 5, 3, "div", 45);
913
914
  i0.ɵɵelementEnd()();
914
- i0.ɵɵelementStart(22, "div", 76)(23, "div", 77)(24, "div", 78);
915
- i0.ɵɵelement(25, "i", 79);
915
+ i0.ɵɵelementStart(22, "div", 77)(23, "div", 78)(24, "div", 79);
916
+ i0.ɵɵelement(25, "i", 80);
916
917
  i0.ɵɵelementStart(26, "span");
917
918
  i0.ɵɵtext(27, "Sync Schedule");
918
919
  i0.ɵɵelementEnd()()();
919
- i0.ɵɵconditionalCreate(28, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_28_Template, 1, 1, "mj-scheduled-job-summary", 80)(29, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_29_Template, 6, 0, "div", 81);
920
+ i0.ɵɵconditionalCreate(28, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_28_Template, 1, 1, "mj-scheduled-job-summary", 81)(29, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_29_Template, 6, 0, "div", 82);
920
921
  i0.ɵɵelementEnd();
921
- i0.ɵɵelementStart(30, "mj-scheduled-job-slide-panel", 82);
922
+ i0.ɵɵelementStart(30, "mj-scheduled-job-slide-panel", 83);
922
923
  i0.ɵɵlistener("Close", function ConnectionsComponent_Conditional_8_Conditional_2_Template_mj_scheduled_job_slide_panel_Close_30_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.CloseSchedulePanel()); })("Saved", function ConnectionsComponent_Conditional_8_Conditional_2_Template_mj_scheduled_job_slide_panel_Saved_30_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnScheduleSaved()); })("Deleted", function ConnectionsComponent_Conditional_8_Conditional_2_Template_mj_scheduled_job_slide_panel_Deleted_30_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnScheduleDeleted()); });
923
924
  i0.ɵɵelementEnd();
924
- i0.ɵɵelementStart(31, "div", 83)(32, "div", 84)(33, "span", 85);
925
+ i0.ɵɵelementStart(31, "div", 84)(32, "div", 85)(33, "span", 86);
925
926
  i0.ɵɵtext(34);
926
- i0.ɵɵelementStart(35, "span", 34);
927
+ i0.ɵɵelementStart(35, "span", 35);
927
928
  i0.ɵɵtext(36, "\u00B7");
928
929
  i0.ɵɵelementEnd();
929
930
  i0.ɵɵtext(37);
930
931
  i0.ɵɵelementEnd()();
931
- i0.ɵɵelementStart(38, "div", 86)(39, "div", 87);
932
- i0.ɵɵelement(40, "i", 88);
933
- i0.ɵɵelementStart(41, "input", 89);
932
+ i0.ɵɵelementStart(38, "div", 87)(39, "div", 88);
933
+ i0.ɵɵelement(40, "i", 89);
934
+ i0.ɵɵelementStart(41, "input", 90);
934
935
  i0.ɵɵlistener("input", function ConnectionsComponent_Conditional_8_Conditional_2_Template_input_input_41_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnDetailSearch($event)); });
935
936
  i0.ɵɵelementEnd()();
936
- i0.ɵɵelementStart(42, "button", 90);
937
+ i0.ɵɵelementStart(42, "button", 91);
937
938
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Template_button_click_42_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.ToggleCreateTablesPanel()); });
938
- i0.ɵɵelement(43, "i", 91);
939
+ i0.ɵɵelement(43, "i", 92);
939
940
  i0.ɵɵtext(44, " Create Tables ");
940
941
  i0.ɵɵelementEnd();
941
- i0.ɵɵelementStart(45, "button", 92);
942
+ i0.ɵɵelementStart(45, "button", 93);
942
943
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Template_button_click_45_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.ToggleAutoMapPanel()); });
943
- i0.ɵɵelement(46, "i", 93);
944
+ i0.ɵɵelement(46, "i", 94);
944
945
  i0.ɵɵtext(47, " Auto-Map Schema ");
945
946
  i0.ɵɵelementEnd();
946
- i0.ɵɵelementStart(48, "button", 92);
947
+ i0.ɵɵelementStart(48, "button", 93);
947
948
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Template_button_click_48_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.ToggleAddMapPanel()); });
948
949
  i0.ɵɵelement(49, "i", 13);
949
950
  i0.ɵɵtext(50, " Add Map ");
950
951
  i0.ɵɵelementEnd()()();
951
- i0.ɵɵconditionalCreate(51, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_51_Template, 5, 6, "div", 94);
952
- i0.ɵɵconditionalCreate(52, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Template, 31, 11, "div", 95);
953
- i0.ɵɵconditionalCreate(53, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Template, 16, 4, "div", 95);
954
- i0.ɵɵconditionalCreate(54, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Template, 33, 16, "div", 95);
955
- i0.ɵɵconditionalCreate(55, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_55_Template, 2, 0, "div", 14)(56, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_56_Template, 9, 0, "div", 96)(57, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_57_Template, 14, 1);
952
+ i0.ɵɵconditionalCreate(51, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_51_Template, 5, 6, "div", 95);
953
+ i0.ɵɵconditionalCreate(52, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Template, 31, 11, "div", 96);
954
+ i0.ɵɵconditionalCreate(53, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Template, 16, 4, "div", 96);
955
+ i0.ɵɵconditionalCreate(54, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Template, 33, 16, "div", 96);
956
+ i0.ɵɵconditionalCreate(55, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_55_Template, 2, 0, "div", 15)(56, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_56_Template, 9, 0, "div", 97)(57, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_57_Template, 14, 1);
956
957
  } if (rf & 2) {
957
958
  const ctx_r1 = i0.ɵɵnextContext(2);
958
959
  i0.ɵɵadvance(4);
@@ -1000,7 +1001,7 @@ function ConnectionsComponent_Conditional_8_Conditional_2_Template(rf, ctx) { if
1000
1001
  } }
1001
1002
  function ConnectionsComponent_Conditional_8_Template(rf, ctx) { if (rf & 1) {
1002
1003
  i0.ɵɵelementStart(0, "div", 7);
1003
- i0.ɵɵconditionalCreate(1, ConnectionsComponent_Conditional_8_Conditional_1_Template, 1, 3, "app-visual-field-editor", 64)(2, ConnectionsComponent_Conditional_8_Conditional_2_Template, 58, 32);
1004
+ i0.ɵɵconditionalCreate(1, ConnectionsComponent_Conditional_8_Conditional_1_Template, 1, 3, "app-visual-field-editor", 65)(2, ConnectionsComponent_Conditional_8_Conditional_2_Template, 58, 32);
1004
1005
  i0.ɵɵelementEnd();
1005
1006
  } if (rf & 2) {
1006
1007
  const ctx_r1 = i0.ɵɵnextContext();
@@ -1008,7 +1009,7 @@ function ConnectionsComponent_Conditional_8_Template(rf, ctx) { if (rf & 1) {
1008
1009
  i0.ɵɵconditional(ctx_r1.EditorEntityMap ? 1 : 2);
1009
1010
  } }
1010
1011
  function ConnectionsComponent_Conditional_9_For_9_Conditional_2_Template(rf, ctx) { if (rf & 1) {
1011
- i0.ɵɵelement(0, "i", 147);
1012
+ i0.ɵɵelement(0, "i", 148);
1012
1013
  } }
1013
1014
  function ConnectionsComponent_Conditional_9_For_9_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1014
1015
  i0.ɵɵtext(0);
@@ -1017,20 +1018,20 @@ function ConnectionsComponent_Conditional_9_For_9_Conditional_3_Template(rf, ctx
1017
1018
  i0.ɵɵtextInterpolate1(" ", step_r31.Number, " ");
1018
1019
  } }
1019
1020
  function ConnectionsComponent_Conditional_9_For_9_Conditional_6_Template(rf, ctx) { if (rf & 1) {
1020
- i0.ɵɵelement(0, "div", 188);
1021
+ i0.ɵɵelement(0, "div", 189);
1021
1022
  } if (rf & 2) {
1022
1023
  const step_r31 = i0.ɵɵnextContext().$implicit;
1023
1024
  const ctx_r1 = i0.ɵɵnextContext(2);
1024
1025
  i0.ɵɵclassProp("step-line-active", ctx_r1.IsStepCompleted(step_r31.Number));
1025
1026
  } }
1026
1027
  function ConnectionsComponent_Conditional_9_For_9_Template(rf, ctx) { if (rf & 1) {
1027
- i0.ɵɵelementStart(0, "div", 184)(1, "div", 185);
1028
- i0.ɵɵconditionalCreate(2, ConnectionsComponent_Conditional_9_For_9_Conditional_2_Template, 1, 0, "i", 147)(3, ConnectionsComponent_Conditional_9_For_9_Conditional_3_Template, 1, 1);
1028
+ i0.ɵɵelementStart(0, "div", 185)(1, "div", 186);
1029
+ i0.ɵɵconditionalCreate(2, ConnectionsComponent_Conditional_9_For_9_Conditional_2_Template, 1, 0, "i", 148)(3, ConnectionsComponent_Conditional_9_For_9_Conditional_3_Template, 1, 1);
1029
1030
  i0.ɵɵelementEnd();
1030
- i0.ɵɵelementStart(4, "span", 186);
1031
+ i0.ɵɵelementStart(4, "span", 187);
1031
1032
  i0.ɵɵtext(5);
1032
1033
  i0.ɵɵelementEnd()();
1033
- i0.ɵɵconditionalCreate(6, ConnectionsComponent_Conditional_9_For_9_Conditional_6_Template, 1, 2, "div", 187);
1034
+ i0.ɵɵconditionalCreate(6, ConnectionsComponent_Conditional_9_For_9_Conditional_6_Template, 1, 2, "div", 188);
1034
1035
  } if (rf & 2) {
1035
1036
  const step_r31 = ctx.$implicit;
1036
1037
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -1043,24 +1044,24 @@ function ConnectionsComponent_Conditional_9_For_9_Template(rf, ctx) { if (rf & 1
1043
1044
  i0.ɵɵconditional(step_r31.Number < ctx_r1.WizardSteps.length ? 6 : -1);
1044
1045
  } }
1045
1046
  function ConnectionsComponent_Conditional_9_Conditional_11_Conditional_6_Template(rf, ctx) { if (rf & 1) {
1046
- i0.ɵɵelementStart(0, "div", 193);
1047
- i0.ɵɵelement(1, "i", 195);
1047
+ i0.ɵɵelementStart(0, "div", 194);
1048
+ i0.ɵɵelement(1, "i", 196);
1048
1049
  i0.ɵɵelementStart(2, "p");
1049
1050
  i0.ɵɵtext(3, "No integrations configured");
1050
1051
  i0.ɵɵelementEnd();
1051
- i0.ɵɵelementStart(4, "span", 196);
1052
+ i0.ɵɵelementStart(4, "span", 197);
1052
1053
  i0.ɵɵtext(5, "Configure integration definitions in the admin area first.");
1053
1054
  i0.ɵɵelementEnd()();
1054
1055
  } }
1055
1056
  function ConnectionsComponent_Conditional_9_Conditional_11_Conditional_7_Template(rf, ctx) { if (rf & 1) {
1056
- i0.ɵɵelementStart(0, "div", 193);
1057
- i0.ɵɵelement(1, "i", 197);
1057
+ i0.ɵɵelementStart(0, "div", 194);
1058
+ i0.ɵɵelement(1, "i", 198);
1058
1059
  i0.ɵɵelementStart(2, "p");
1059
1060
  i0.ɵɵtext(3, "No matching integrations");
1060
1061
  i0.ɵɵelementEnd()();
1061
1062
  } }
1062
1063
  function ConnectionsComponent_Conditional_9_Conditional_11_Conditional_8_For_2_Conditional_5_Template(rf, ctx) { if (rf & 1) {
1063
- i0.ɵɵelementStart(0, "div", 202);
1064
+ i0.ɵɵelementStart(0, "div", 203);
1064
1065
  i0.ɵɵtext(1);
1065
1066
  i0.ɵɵelementEnd();
1066
1067
  } if (rf & 2) {
@@ -1070,15 +1071,15 @@ function ConnectionsComponent_Conditional_9_Conditional_11_Conditional_8_For_2_C
1070
1071
  } }
1071
1072
  function ConnectionsComponent_Conditional_9_Conditional_11_Conditional_8_For_2_Template(rf, ctx) { if (rf & 1) {
1072
1073
  const _r33 = i0.ɵɵgetCurrentView();
1073
- i0.ɵɵelementStart(0, "div", 199);
1074
+ i0.ɵɵelementStart(0, "div", 200);
1074
1075
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Conditional_11_Conditional_8_For_2_Template_div_click_0_listener() { const def_r34 = i0.ɵɵrestoreView(_r33).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.SelectIntegration(def_r34)); });
1075
- i0.ɵɵelementStart(1, "div", 200);
1076
+ i0.ɵɵelementStart(1, "div", 201);
1076
1077
  i0.ɵɵelement(2, "i");
1077
1078
  i0.ɵɵelementEnd();
1078
- i0.ɵɵelementStart(3, "div", 201);
1079
+ i0.ɵɵelementStart(3, "div", 202);
1079
1080
  i0.ɵɵtext(4);
1080
1081
  i0.ɵɵelementEnd();
1081
- i0.ɵɵconditionalCreate(5, ConnectionsComponent_Conditional_9_Conditional_11_Conditional_8_For_2_Conditional_5_Template, 2, 1, "div", 202);
1082
+ i0.ɵɵconditionalCreate(5, ConnectionsComponent_Conditional_9_Conditional_11_Conditional_8_For_2_Conditional_5_Template, 2, 1, "div", 203);
1082
1083
  i0.ɵɵelementEnd();
1083
1084
  } if (rf & 2) {
1084
1085
  const def_r34 = ctx.$implicit;
@@ -1094,8 +1095,8 @@ function ConnectionsComponent_Conditional_9_Conditional_11_Conditional_8_For_2_T
1094
1095
  i0.ɵɵconditional(def_r34.Description ? 5 : -1);
1095
1096
  } }
1096
1097
  function ConnectionsComponent_Conditional_9_Conditional_11_Conditional_8_Template(rf, ctx) { if (rf & 1) {
1097
- i0.ɵɵelementStart(0, "div", 194);
1098
- i0.ɵɵrepeaterCreate(1, ConnectionsComponent_Conditional_9_Conditional_11_Conditional_8_For_2_Template, 6, 8, "div", 198, _forTrack2);
1098
+ i0.ɵɵelementStart(0, "div", 195);
1099
+ i0.ɵɵrepeaterCreate(1, ConnectionsComponent_Conditional_9_Conditional_11_Conditional_8_For_2_Template, 6, 8, "div", 199, _forTrack2);
1099
1100
  i0.ɵɵelementEnd();
1100
1101
  } if (rf & 2) {
1101
1102
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -1104,15 +1105,15 @@ function ConnectionsComponent_Conditional_9_Conditional_11_Conditional_8_Templat
1104
1105
  } }
1105
1106
  function ConnectionsComponent_Conditional_9_Conditional_11_Template(rf, ctx) { if (rf & 1) {
1106
1107
  const _r32 = i0.ɵɵgetCurrentView();
1107
- i0.ɵɵelementStart(0, "div", 178)(1, "h3", 189);
1108
+ i0.ɵɵelementStart(0, "div", 179)(1, "h3", 190);
1108
1109
  i0.ɵɵtext(2, "What system do you want to connect?");
1109
1110
  i0.ɵɵelementEnd();
1110
- i0.ɵɵelementStart(3, "div", 190);
1111
- i0.ɵɵelement(4, "i", 191);
1112
- i0.ɵɵelementStart(5, "input", 192);
1111
+ i0.ɵɵelementStart(3, "div", 191);
1112
+ i0.ɵɵelement(4, "i", 192);
1113
+ i0.ɵɵelementStart(5, "input", 193);
1113
1114
  i0.ɵɵtwoWayListener("ngModelChange", function ConnectionsComponent_Conditional_9_Conditional_11_Template_input_ngModelChange_5_listener($event) { i0.ɵɵrestoreView(_r32); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.SearchQuery, $event) || (ctx_r1.SearchQuery = $event); return i0.ɵɵresetView($event); });
1114
1115
  i0.ɵɵelementEnd()();
1115
- i0.ɵɵconditionalCreate(6, ConnectionsComponent_Conditional_9_Conditional_11_Conditional_6_Template, 6, 0, "div", 193)(7, ConnectionsComponent_Conditional_9_Conditional_11_Conditional_7_Template, 4, 0, "div", 193)(8, ConnectionsComponent_Conditional_9_Conditional_11_Conditional_8_Template, 3, 0, "div", 194);
1116
+ i0.ɵɵconditionalCreate(6, ConnectionsComponent_Conditional_9_Conditional_11_Conditional_6_Template, 6, 0, "div", 194)(7, ConnectionsComponent_Conditional_9_Conditional_11_Conditional_7_Template, 4, 0, "div", 194)(8, ConnectionsComponent_Conditional_9_Conditional_11_Conditional_8_Template, 3, 0, "div", 195);
1116
1117
  i0.ɵɵelementEnd();
1117
1118
  } if (rf & 2) {
1118
1119
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -1122,7 +1123,7 @@ function ConnectionsComponent_Conditional_9_Conditional_11_Template(rf, ctx) { i
1122
1123
  i0.ɵɵconditional(ctx_r1.FilteredIntegrations.length === 0 && ctx_r1.AvailableIntegrations.length === 0 ? 6 : ctx_r1.FilteredIntegrations.length === 0 ? 7 : 8);
1123
1124
  } }
1124
1125
  function ConnectionsComponent_Conditional_9_Conditional_12_Conditional_10_For_4_Template(rf, ctx) { if (rf & 1) {
1125
- i0.ɵɵelementStart(0, "option", 108);
1126
+ i0.ɵɵelementStart(0, "option", 109);
1126
1127
  i0.ɵɵtext(1);
1127
1128
  i0.ɵɵelementEnd();
1128
1129
  } if (rf & 2) {
@@ -1133,12 +1134,12 @@ function ConnectionsComponent_Conditional_9_Conditional_12_Conditional_10_For_4_
1133
1134
  } }
1134
1135
  function ConnectionsComponent_Conditional_9_Conditional_12_Conditional_10_Template(rf, ctx) { if (rf & 1) {
1135
1136
  const _r36 = i0.ɵɵgetCurrentView();
1136
- i0.ɵɵelementStart(0, "select", 218);
1137
+ i0.ɵɵelementStart(0, "select", 219);
1137
1138
  i0.ɵɵtwoWayListener("ngModelChange", function ConnectionsComponent_Conditional_9_Conditional_12_Conditional_10_Template_select_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r36); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.SelectedCompanyID, $event) || (ctx_r1.SelectedCompanyID = $event); return i0.ɵɵresetView($event); });
1138
- i0.ɵɵelementStart(1, "option", 107);
1139
+ i0.ɵɵelementStart(1, "option", 108);
1139
1140
  i0.ɵɵtext(2, "Select a company...");
1140
1141
  i0.ɵɵelementEnd();
1141
- i0.ɵɵrepeaterCreate(3, ConnectionsComponent_Conditional_9_Conditional_12_Conditional_10_For_4_Template, 2, 2, "option", 108, _forTrack2);
1142
+ i0.ɵɵrepeaterCreate(3, ConnectionsComponent_Conditional_9_Conditional_12_Conditional_10_For_4_Template, 2, 2, "option", 109, _forTrack2);
1142
1143
  i0.ɵɵelementEnd();
1143
1144
  } if (rf & 2) {
1144
1145
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -1149,26 +1150,26 @@ function ConnectionsComponent_Conditional_9_Conditional_12_Conditional_10_Templa
1149
1150
  i0.ɵɵrepeater(ctx_r1.Companies);
1150
1151
  } }
1151
1152
  function ConnectionsComponent_Conditional_9_Conditional_12_Conditional_11_Template(rf, ctx) { if (rf & 1) {
1152
- i0.ɵɵelement(0, "input", 208);
1153
+ i0.ɵɵelement(0, "input", 209);
1153
1154
  } if (rf & 2) {
1154
1155
  const ctx_r1 = i0.ɵɵnextContext(3);
1155
1156
  i0.ɵɵproperty("value", ctx_r1.Companies[0].Name);
1156
1157
  } }
1157
1158
  function ConnectionsComponent_Conditional_9_Conditional_12_Conditional_12_Template(rf, ctx) { if (rf & 1) {
1158
- i0.ɵɵelementStart(0, "div", 209);
1159
+ i0.ɵɵelementStart(0, "div", 210);
1159
1160
  i0.ɵɵtext(1, "No companies available. Create one in the admin area.");
1160
1161
  i0.ɵɵelementEnd();
1161
1162
  } }
1162
1163
  function ConnectionsComponent_Conditional_9_Conditional_12_Conditional_22_Template(rf, ctx) { if (rf & 1) {
1163
1164
  const _r38 = i0.ɵɵgetCurrentView();
1164
- i0.ɵɵelementStart(0, "div", 214)(1, "div", 219);
1165
- i0.ɵɵelement(2, "i", 220);
1165
+ i0.ɵɵelementStart(0, "div", 215)(1, "div", 220);
1166
+ i0.ɵɵelement(2, "i", 221);
1166
1167
  i0.ɵɵelementStart(3, "span");
1167
1168
  i0.ɵɵtext(4);
1168
1169
  i0.ɵɵelementEnd()();
1169
- i0.ɵɵelementStart(5, "button", 221);
1170
+ i0.ɵɵelementStart(5, "button", 222);
1170
1171
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Conditional_12_Conditional_22_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r38); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.ClearCredential()); });
1171
- i0.ɵɵelement(6, "i", 119);
1172
+ i0.ɵɵelement(6, "i", 120);
1172
1173
  i0.ɵɵelementEnd()();
1173
1174
  } if (rf & 2) {
1174
1175
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -1177,27 +1178,27 @@ function ConnectionsComponent_Conditional_9_Conditional_12_Conditional_22_Templa
1177
1178
  } }
1178
1179
  function ConnectionsComponent_Conditional_9_Conditional_12_Conditional_23_Template(rf, ctx) { if (rf & 1) {
1179
1180
  const _r39 = i0.ɵɵgetCurrentView();
1180
- i0.ɵɵelementStart(0, "div", 215)(1, "button", 43);
1181
+ i0.ɵɵelementStart(0, "div", 216)(1, "button", 44);
1181
1182
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Conditional_12_Conditional_23_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r39); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.ShowExistingCredentials()); });
1182
- i0.ɵɵelement(2, "i", 220);
1183
+ i0.ɵɵelement(2, "i", 221);
1183
1184
  i0.ɵɵtext(3, " Choose Existing Credential ");
1184
1185
  i0.ɵɵelementEnd();
1185
- i0.ɵɵelementStart(4, "button", 43);
1186
+ i0.ɵɵelementStart(4, "button", 44);
1186
1187
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Conditional_12_Conditional_23_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r39); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OpenCredentialDialog()); });
1187
1188
  i0.ɵɵelement(5, "i", 13);
1188
1189
  i0.ɵɵtext(6, " Create New Credential ");
1189
1190
  i0.ɵɵelementEnd()();
1190
1191
  } }
1191
1192
  function ConnectionsComponent_Conditional_9_Conditional_12_Conditional_24_Template(rf, ctx) { if (rf & 1) {
1192
- i0.ɵɵelementStart(0, "div", 216);
1193
- i0.ɵɵelement(1, "mj-loading", 222);
1193
+ i0.ɵɵelementStart(0, "div", 217);
1194
+ i0.ɵɵelement(1, "mj-loading", 223);
1194
1195
  i0.ɵɵelementEnd();
1195
1196
  } }
1196
1197
  function ConnectionsComponent_Conditional_9_Conditional_12_Conditional_25_For_2_Template(rf, ctx) { if (rf & 1) {
1197
1198
  const _r40 = i0.ɵɵgetCurrentView();
1198
- i0.ɵɵelementStart(0, "div", 224);
1199
+ i0.ɵɵelementStart(0, "div", 225);
1199
1200
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Conditional_12_Conditional_25_For_2_Template_div_click_0_listener() { const cred_r41 = i0.ɵɵrestoreView(_r40).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.SelectExistingCredential(cred_r41)); });
1200
- i0.ɵɵelement(1, "i", 220);
1201
+ i0.ɵɵelement(1, "i", 221);
1201
1202
  i0.ɵɵelementStart(2, "span");
1202
1203
  i0.ɵɵtext(3);
1203
1204
  i0.ɵɵelementEnd()();
@@ -1207,8 +1208,8 @@ function ConnectionsComponent_Conditional_9_Conditional_12_Conditional_25_For_2_
1207
1208
  i0.ɵɵtextInterpolate(cred_r41.Name);
1208
1209
  } }
1209
1210
  function ConnectionsComponent_Conditional_9_Conditional_12_Conditional_25_Template(rf, ctx) { if (rf & 1) {
1210
- i0.ɵɵelementStart(0, "div", 217);
1211
- i0.ɵɵrepeaterCreate(1, ConnectionsComponent_Conditional_9_Conditional_12_Conditional_25_For_2_Template, 4, 1, "div", 223, _forTrack2);
1211
+ i0.ɵɵelementStart(0, "div", 218);
1212
+ i0.ɵɵrepeaterCreate(1, ConnectionsComponent_Conditional_9_Conditional_12_Conditional_25_For_2_Template, 4, 1, "div", 224, _forTrack2);
1212
1213
  i0.ɵɵelementEnd();
1213
1214
  } if (rf & 2) {
1214
1215
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -1217,34 +1218,34 @@ function ConnectionsComponent_Conditional_9_Conditional_12_Conditional_25_Templa
1217
1218
  } }
1218
1219
  function ConnectionsComponent_Conditional_9_Conditional_12_Template(rf, ctx) { if (rf & 1) {
1219
1220
  const _r35 = i0.ɵɵgetCurrentView();
1220
- i0.ɵɵelementStart(0, "div", 178)(1, "h3", 189);
1221
+ i0.ɵɵelementStart(0, "div", 179)(1, "h3", 190);
1221
1222
  i0.ɵɵtext(2, "Set up your connection");
1222
1223
  i0.ɵɵelementEnd();
1223
- i0.ɵɵelementStart(3, "div", 203)(4, "label", 204);
1224
+ i0.ɵɵelementStart(3, "div", 204)(4, "label", 205);
1224
1225
  i0.ɵɵtext(5, "Connection Name");
1225
1226
  i0.ɵɵelementEnd();
1226
- i0.ɵɵelementStart(6, "input", 205);
1227
+ i0.ɵɵelementStart(6, "input", 206);
1227
1228
  i0.ɵɵtwoWayListener("ngModelChange", function ConnectionsComponent_Conditional_9_Conditional_12_Template_input_ngModelChange_6_listener($event) { i0.ɵɵrestoreView(_r35); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.ConnectionName, $event) || (ctx_r1.ConnectionName = $event); return i0.ɵɵresetView($event); });
1228
1229
  i0.ɵɵelementEnd()();
1229
- i0.ɵɵelementStart(7, "div", 203)(8, "label", 206);
1230
+ i0.ɵɵelementStart(7, "div", 204)(8, "label", 207);
1230
1231
  i0.ɵɵtext(9, "Company");
1231
1232
  i0.ɵɵelementEnd();
1232
- i0.ɵɵconditionalCreate(10, ConnectionsComponent_Conditional_9_Conditional_12_Conditional_10_Template, 5, 2, "select", 207)(11, ConnectionsComponent_Conditional_9_Conditional_12_Conditional_11_Template, 1, 1, "input", 208)(12, ConnectionsComponent_Conditional_9_Conditional_12_Conditional_12_Template, 2, 0, "div", 209);
1233
+ i0.ɵɵconditionalCreate(10, ConnectionsComponent_Conditional_9_Conditional_12_Conditional_10_Template, 5, 2, "select", 208)(11, ConnectionsComponent_Conditional_9_Conditional_12_Conditional_11_Template, 1, 1, "input", 209)(12, ConnectionsComponent_Conditional_9_Conditional_12_Conditional_12_Template, 2, 0, "div", 210);
1233
1234
  i0.ɵɵelementEnd();
1234
- i0.ɵɵelementStart(13, "div", 203)(14, "label", 210);
1235
+ i0.ɵɵelementStart(13, "div", 204)(14, "label", 211);
1235
1236
  i0.ɵɵtext(15, "Description ");
1236
- i0.ɵɵelementStart(16, "span", 211);
1237
+ i0.ɵɵelementStart(16, "span", 212);
1237
1238
  i0.ɵɵtext(17, "(optional)");
1238
1239
  i0.ɵɵelementEnd()();
1239
- i0.ɵɵelementStart(18, "textarea", 212);
1240
+ i0.ɵɵelementStart(18, "textarea", 213);
1240
1241
  i0.ɵɵtwoWayListener("ngModelChange", function ConnectionsComponent_Conditional_9_Conditional_12_Template_textarea_ngModelChange_18_listener($event) { i0.ɵɵrestoreView(_r35); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.ConnectionDescription, $event) || (ctx_r1.ConnectionDescription = $event); return i0.ɵɵresetView($event); });
1241
1242
  i0.ɵɵelementEnd()();
1242
- i0.ɵɵelementStart(19, "div", 203)(20, "label", 213);
1243
+ i0.ɵɵelementStart(19, "div", 204)(20, "label", 214);
1243
1244
  i0.ɵɵtext(21, "Credential");
1244
1245
  i0.ɵɵelementEnd();
1245
- i0.ɵɵconditionalCreate(22, ConnectionsComponent_Conditional_9_Conditional_12_Conditional_22_Template, 7, 1, "div", 214)(23, ConnectionsComponent_Conditional_9_Conditional_12_Conditional_23_Template, 7, 0, "div", 215);
1246
- i0.ɵɵconditionalCreate(24, ConnectionsComponent_Conditional_9_Conditional_12_Conditional_24_Template, 2, 0, "div", 216);
1247
- i0.ɵɵconditionalCreate(25, ConnectionsComponent_Conditional_9_Conditional_12_Conditional_25_Template, 3, 0, "div", 217);
1246
+ i0.ɵɵconditionalCreate(22, ConnectionsComponent_Conditional_9_Conditional_12_Conditional_22_Template, 7, 1, "div", 215)(23, ConnectionsComponent_Conditional_9_Conditional_12_Conditional_23_Template, 7, 0, "div", 216);
1247
+ i0.ɵɵconditionalCreate(24, ConnectionsComponent_Conditional_9_Conditional_12_Conditional_24_Template, 2, 0, "div", 217);
1248
+ i0.ɵɵconditionalCreate(25, ConnectionsComponent_Conditional_9_Conditional_12_Conditional_25_Template, 3, 0, "div", 218);
1248
1249
  i0.ɵɵelementEnd()();
1249
1250
  } if (rf & 2) {
1250
1251
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -1263,31 +1264,31 @@ function ConnectionsComponent_Conditional_9_Conditional_12_Template(rf, ctx) { i
1263
1264
  } }
1264
1265
  function ConnectionsComponent_Conditional_9_Conditional_13_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1265
1266
  const _r42 = i0.ɵɵgetCurrentView();
1266
- i0.ɵɵelementStart(0, "div", 225)(1, "button", 228);
1267
+ i0.ɵɵelementStart(0, "div", 226)(1, "button", 229);
1267
1268
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Conditional_13_Conditional_3_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r42); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.TestNewConnection()); });
1268
- i0.ɵɵelement(2, "i", 229);
1269
+ i0.ɵɵelement(2, "i", 230);
1269
1270
  i0.ɵɵtext(3, " Test Connection ");
1270
1271
  i0.ɵɵelementEnd();
1271
- i0.ɵɵelementStart(4, "p", 230);
1272
+ i0.ɵɵelementStart(4, "p", 231);
1272
1273
  i0.ɵɵtext(5, "We'll verify we can reach your system and authenticate.");
1273
1274
  i0.ɵɵelementEnd()();
1274
1275
  } }
1275
1276
  function ConnectionsComponent_Conditional_9_Conditional_13_Conditional_4_Template(rf, ctx) { if (rf & 1) {
1276
- i0.ɵɵelementStart(0, "div", 226)(1, "div", 231);
1277
- i0.ɵɵelement(2, "i", 232);
1277
+ i0.ɵɵelementStart(0, "div", 227)(1, "div", 232);
1278
+ i0.ɵɵelement(2, "i", 233);
1278
1279
  i0.ɵɵelementEnd();
1279
1280
  i0.ɵɵelementStart(3, "p");
1280
1281
  i0.ɵɵtext(4, "Testing connection...");
1281
1282
  i0.ɵɵelementEnd()();
1282
1283
  } }
1283
1284
  function ConnectionsComponent_Conditional_9_Conditional_13_Conditional_5_Conditional_2_Template(rf, ctx) { if (rf & 1) {
1284
- i0.ɵɵelement(0, "i", 48);
1285
+ i0.ɵɵelement(0, "i", 49);
1285
1286
  } }
1286
1287
  function ConnectionsComponent_Conditional_9_Conditional_13_Conditional_5_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1287
- i0.ɵɵelement(0, "i", 49);
1288
+ i0.ɵɵelement(0, "i", 50);
1288
1289
  } }
1289
1290
  function ConnectionsComponent_Conditional_9_Conditional_13_Conditional_5_Conditional_6_Template(rf, ctx) { if (rf & 1) {
1290
- i0.ɵɵelementStart(0, "div", 236);
1291
+ i0.ɵɵelementStart(0, "div", 237);
1291
1292
  i0.ɵɵtext(1);
1292
1293
  i0.ɵɵelementEnd();
1293
1294
  } if (rf & 2) {
@@ -1297,21 +1298,21 @@ function ConnectionsComponent_Conditional_9_Conditional_13_Conditional_5_Conditi
1297
1298
  } }
1298
1299
  function ConnectionsComponent_Conditional_9_Conditional_13_Conditional_5_Conditional_7_Template(rf, ctx) { if (rf & 1) {
1299
1300
  const _r43 = i0.ɵɵgetCurrentView();
1300
- i0.ɵɵelementStart(0, "button", 238);
1301
+ i0.ɵɵelementStart(0, "button", 239);
1301
1302
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Conditional_13_Conditional_5_Conditional_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r43); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.TestNewConnection()); });
1302
- i0.ɵɵelement(1, "i", 239);
1303
+ i0.ɵɵelement(1, "i", 240);
1303
1304
  i0.ɵɵtext(2, " Retry ");
1304
1305
  i0.ɵɵelementEnd();
1305
1306
  } }
1306
1307
  function ConnectionsComponent_Conditional_9_Conditional_13_Conditional_5_Template(rf, ctx) { if (rf & 1) {
1307
- i0.ɵɵelementStart(0, "div", 233)(1, "div", 234);
1308
- i0.ɵɵconditionalCreate(2, ConnectionsComponent_Conditional_9_Conditional_13_Conditional_5_Conditional_2_Template, 1, 0, "i", 48)(3, ConnectionsComponent_Conditional_9_Conditional_13_Conditional_5_Conditional_3_Template, 1, 0, "i", 49);
1308
+ i0.ɵɵelementStart(0, "div", 234)(1, "div", 235);
1309
+ i0.ɵɵconditionalCreate(2, ConnectionsComponent_Conditional_9_Conditional_13_Conditional_5_Conditional_2_Template, 1, 0, "i", 49)(3, ConnectionsComponent_Conditional_9_Conditional_13_Conditional_5_Conditional_3_Template, 1, 0, "i", 50);
1309
1310
  i0.ɵɵelementEnd();
1310
- i0.ɵɵelementStart(4, "div", 235);
1311
+ i0.ɵɵelementStart(4, "div", 236);
1311
1312
  i0.ɵɵtext(5);
1312
1313
  i0.ɵɵelementEnd();
1313
- i0.ɵɵconditionalCreate(6, ConnectionsComponent_Conditional_9_Conditional_13_Conditional_5_Conditional_6_Template, 2, 1, "div", 236);
1314
- i0.ɵɵconditionalCreate(7, ConnectionsComponent_Conditional_9_Conditional_13_Conditional_5_Conditional_7_Template, 3, 0, "button", 237);
1314
+ i0.ɵɵconditionalCreate(6, ConnectionsComponent_Conditional_9_Conditional_13_Conditional_5_Conditional_6_Template, 2, 1, "div", 237);
1315
+ i0.ɵɵconditionalCreate(7, ConnectionsComponent_Conditional_9_Conditional_13_Conditional_5_Conditional_7_Template, 3, 0, "button", 238);
1315
1316
  i0.ɵɵelementEnd();
1316
1317
  } if (rf & 2) {
1317
1318
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -1326,12 +1327,12 @@ function ConnectionsComponent_Conditional_9_Conditional_13_Conditional_5_Templat
1326
1327
  i0.ɵɵconditional(!ctx_r1.TestResult.Success ? 7 : -1);
1327
1328
  } }
1328
1329
  function ConnectionsComponent_Conditional_9_Conditional_13_Template(rf, ctx) { if (rf & 1) {
1329
- i0.ɵɵelementStart(0, "div", 179)(1, "h3", 189);
1330
+ i0.ɵɵelementStart(0, "div", 180)(1, "h3", 190);
1330
1331
  i0.ɵɵtext(2, "Let's verify everything works");
1331
1332
  i0.ɵɵelementEnd();
1332
- i0.ɵɵconditionalCreate(3, ConnectionsComponent_Conditional_9_Conditional_13_Conditional_3_Template, 6, 0, "div", 225);
1333
- i0.ɵɵconditionalCreate(4, ConnectionsComponent_Conditional_9_Conditional_13_Conditional_4_Template, 5, 0, "div", 226);
1334
- i0.ɵɵconditionalCreate(5, ConnectionsComponent_Conditional_9_Conditional_13_Conditional_5_Template, 8, 8, "div", 227);
1333
+ i0.ɵɵconditionalCreate(3, ConnectionsComponent_Conditional_9_Conditional_13_Conditional_3_Template, 6, 0, "div", 226);
1334
+ i0.ɵɵconditionalCreate(4, ConnectionsComponent_Conditional_9_Conditional_13_Conditional_4_Template, 5, 0, "div", 227);
1335
+ i0.ɵɵconditionalCreate(5, ConnectionsComponent_Conditional_9_Conditional_13_Conditional_5_Template, 8, 8, "div", 228);
1335
1336
  i0.ɵɵelementEnd();
1336
1337
  } if (rf & 2) {
1337
1338
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -1344,13 +1345,13 @@ function ConnectionsComponent_Conditional_9_Conditional_13_Template(rf, ctx) { i
1344
1345
  } }
1345
1346
  function ConnectionsComponent_Conditional_9_Conditional_17_Template(rf, ctx) { if (rf & 1) {
1346
1347
  const _r44 = i0.ɵɵgetCurrentView();
1347
- i0.ɵɵelementStart(0, "button", 43);
1348
+ i0.ɵɵelementStart(0, "button", 44);
1348
1349
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Conditional_17_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r44); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.PreviousStep()); });
1349
1350
  i0.ɵɵtext(1, " Back ");
1350
1351
  i0.ɵɵelementEnd();
1351
1352
  } }
1352
1353
  function ConnectionsComponent_Conditional_9_Conditional_19_Template(rf, ctx) { if (rf & 1) {
1353
- i0.ɵɵelement(0, "i", 42);
1354
+ i0.ɵɵelement(0, "i", 43);
1354
1355
  i0.ɵɵtext(1, " Saving... ");
1355
1356
  } }
1356
1357
  function ConnectionsComponent_Conditional_9_Conditional_20_Template(rf, ctx) { if (rf & 1) {
@@ -1361,27 +1362,27 @@ function ConnectionsComponent_Conditional_9_Conditional_20_Template(rf, ctx) { i
1361
1362
  } }
1362
1363
  function ConnectionsComponent_Conditional_9_Template(rf, ctx) { if (rf & 1) {
1363
1364
  const _r30 = i0.ɵɵgetCurrentView();
1364
- i0.ɵɵelementStart(0, "div", 8)(1, "div", 173)(2, "button", 174);
1365
+ i0.ɵɵelementStart(0, "div", 8)(1, "div", 174)(2, "button", 175);
1365
1366
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r30); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.CloseWizard()); });
1366
- i0.ɵɵelement(3, "i", 68);
1367
+ i0.ɵɵelement(3, "i", 69);
1367
1368
  i0.ɵɵtext(4, " Back to Integrations ");
1368
1369
  i0.ɵɵelementEnd();
1369
- i0.ɵɵelementStart(5, "h2", 175);
1370
+ i0.ɵɵelementStart(5, "h2", 176);
1370
1371
  i0.ɵɵtext(6, "New Integration");
1371
1372
  i0.ɵɵelementEnd()();
1372
- i0.ɵɵelementStart(7, "div", 176);
1373
+ i0.ɵɵelementStart(7, "div", 177);
1373
1374
  i0.ɵɵrepeaterCreate(8, ConnectionsComponent_Conditional_9_For_9_Template, 7, 7, null, null, _forTrack3);
1374
1375
  i0.ɵɵelementEnd();
1375
- i0.ɵɵelementStart(10, "div", 177);
1376
- i0.ɵɵconditionalCreate(11, ConnectionsComponent_Conditional_9_Conditional_11_Template, 9, 2, "div", 178);
1377
- i0.ɵɵconditionalCreate(12, ConnectionsComponent_Conditional_9_Conditional_12_Template, 26, 6, "div", 178);
1378
- i0.ɵɵconditionalCreate(13, ConnectionsComponent_Conditional_9_Conditional_13_Template, 6, 3, "div", 179);
1376
+ i0.ɵɵelementStart(10, "div", 178);
1377
+ i0.ɵɵconditionalCreate(11, ConnectionsComponent_Conditional_9_Conditional_11_Template, 9, 2, "div", 179);
1378
+ i0.ɵɵconditionalCreate(12, ConnectionsComponent_Conditional_9_Conditional_12_Template, 26, 6, "div", 179);
1379
+ i0.ɵɵconditionalCreate(13, ConnectionsComponent_Conditional_9_Conditional_13_Template, 6, 3, "div", 180);
1379
1380
  i0.ɵɵelementEnd();
1380
- i0.ɵɵelementStart(14, "div", 180);
1381
- i0.ɵɵelement(15, "div", 181);
1382
- i0.ɵɵelementStart(16, "div", 182);
1383
- i0.ɵɵconditionalCreate(17, ConnectionsComponent_Conditional_9_Conditional_17_Template, 2, 0, "button", 183);
1384
- i0.ɵɵelementStart(18, "button", 55);
1381
+ i0.ɵɵelementStart(14, "div", 181);
1382
+ i0.ɵɵelement(15, "div", 182);
1383
+ i0.ɵɵelementStart(16, "div", 183);
1384
+ i0.ɵɵconditionalCreate(17, ConnectionsComponent_Conditional_9_Conditional_17_Template, 2, 0, "button", 184);
1385
+ i0.ɵɵelementStart(18, "button", 56);
1385
1386
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Template_button_click_18_listener() { i0.ɵɵrestoreView(_r30); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.FinishWizard()); });
1386
1387
  i0.ɵɵconditionalCreate(19, ConnectionsComponent_Conditional_9_Conditional_19_Template, 2, 0)(20, ConnectionsComponent_Conditional_9_Conditional_20_Template, 1, 1);
1387
1388
  i0.ɵɵelementEnd()()()();
@@ -1403,20 +1404,20 @@ function ConnectionsComponent_Conditional_9_Template(rf, ctx) { if (rf & 1) {
1403
1404
  i0.ɵɵconditional(ctx_r1.IsSaving ? 19 : 20);
1404
1405
  } }
1405
1406
  function ConnectionsComponent_Conditional_12_Conditional_8_Template(rf, ctx) { if (rf & 1) {
1406
- i0.ɵɵelementStart(0, "div", 244);
1407
- i0.ɵɵelement(1, "mj-loading", 245);
1407
+ i0.ɵɵelementStart(0, "div", 245);
1408
+ i0.ɵɵelement(1, "mj-loading", 246);
1408
1409
  i0.ɵɵelementEnd();
1409
1410
  } }
1410
1411
  function ConnectionsComponent_Conditional_12_Conditional_9_Conditional_17_Template(rf, ctx) { if (rf & 1) {
1411
1412
  const _r47 = i0.ɵɵgetCurrentView();
1412
- i0.ɵɵelementStart(0, "div", 253)(1, "div", 256);
1413
- i0.ɵɵelement(2, "i", 220);
1413
+ i0.ɵɵelementStart(0, "div", 254)(1, "div", 257);
1414
+ i0.ɵɵelement(2, "i", 221);
1414
1415
  i0.ɵɵelementStart(3, "span");
1415
1416
  i0.ɵɵtext(4);
1416
1417
  i0.ɵɵelementEnd()();
1417
- i0.ɵɵelementStart(5, "button", 257);
1418
+ i0.ɵɵelementStart(5, "button", 258);
1418
1419
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_12_Conditional_9_Conditional_17_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r47); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.ClearEditCredential()); });
1419
- i0.ɵɵelement(6, "i", 119);
1420
+ i0.ɵɵelement(6, "i", 120);
1420
1421
  i0.ɵɵelementEnd()();
1421
1422
  } if (rf & 2) {
1422
1423
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -1425,9 +1426,9 @@ function ConnectionsComponent_Conditional_12_Conditional_9_Conditional_17_Templa
1425
1426
  } }
1426
1427
  function ConnectionsComponent_Conditional_12_Conditional_9_Conditional_18_Conditional_4_For_2_Template(rf, ctx) { if (rf & 1) {
1427
1428
  const _r49 = i0.ɵɵgetCurrentView();
1428
- i0.ɵɵelementStart(0, "div", 262);
1429
+ i0.ɵɵelementStart(0, "div", 263);
1429
1430
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_12_Conditional_9_Conditional_18_Conditional_4_For_2_Template_div_click_0_listener() { const cred_r50 = i0.ɵɵrestoreView(_r49).$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.SelectEditCredential(cred_r50)); });
1430
- i0.ɵɵelement(1, "i", 220);
1431
+ i0.ɵɵelement(1, "i", 221);
1431
1432
  i0.ɵɵelementStart(2, "span");
1432
1433
  i0.ɵɵtext(3);
1433
1434
  i0.ɵɵelementEnd()();
@@ -1437,8 +1438,8 @@ function ConnectionsComponent_Conditional_12_Conditional_9_Conditional_18_Condit
1437
1438
  i0.ɵɵtextInterpolate(cred_r50.Name);
1438
1439
  } }
1439
1440
  function ConnectionsComponent_Conditional_12_Conditional_9_Conditional_18_Conditional_4_Template(rf, ctx) { if (rf & 1) {
1440
- i0.ɵɵelementStart(0, "div", 260);
1441
- i0.ɵɵrepeaterCreate(1, ConnectionsComponent_Conditional_12_Conditional_9_Conditional_18_Conditional_4_For_2_Template, 4, 1, "div", 261, _forTrack2);
1441
+ i0.ɵɵelementStart(0, "div", 261);
1442
+ i0.ɵɵrepeaterCreate(1, ConnectionsComponent_Conditional_12_Conditional_9_Conditional_18_Conditional_4_For_2_Template, 4, 1, "div", 262, _forTrack2);
1442
1443
  i0.ɵɵelementEnd();
1443
1444
  } if (rf & 2) {
1444
1445
  const ctx_r1 = i0.ɵɵnextContext(4);
@@ -1447,19 +1448,19 @@ function ConnectionsComponent_Conditional_12_Conditional_9_Conditional_18_Condit
1447
1448
  } }
1448
1449
  function ConnectionsComponent_Conditional_12_Conditional_9_Conditional_18_Template(rf, ctx) { if (rf & 1) {
1449
1450
  const _r48 = i0.ɵɵgetCurrentView();
1450
- i0.ɵɵelementStart(0, "div", 258)(1, "button", 259);
1451
+ i0.ɵɵelementStart(0, "div", 259)(1, "button", 260);
1451
1452
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_12_Conditional_9_Conditional_18_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r48); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OpenEditCredentialDialog()); });
1452
1453
  i0.ɵɵelement(2, "i", 13);
1453
1454
  i0.ɵɵtext(3, " New Credential ");
1454
1455
  i0.ɵɵelementEnd()();
1455
- i0.ɵɵconditionalCreate(4, ConnectionsComponent_Conditional_12_Conditional_9_Conditional_18_Conditional_4_Template, 3, 0, "div", 260);
1456
+ i0.ɵɵconditionalCreate(4, ConnectionsComponent_Conditional_12_Conditional_9_Conditional_18_Conditional_4_Template, 3, 0, "div", 261);
1456
1457
  } if (rf & 2) {
1457
1458
  const ctx_r1 = i0.ɵɵnextContext(3);
1458
1459
  i0.ɵɵadvance(4);
1459
1460
  i0.ɵɵconditional(ctx_r1.EditCredentials.length > 0 ? 4 : -1);
1460
1461
  } }
1461
1462
  function ConnectionsComponent_Conditional_12_Conditional_9_Conditional_31_Template(rf, ctx) { if (rf & 1) {
1462
- i0.ɵɵelement(0, "i", 42);
1463
+ i0.ɵɵelement(0, "i", 43);
1463
1464
  i0.ɵɵtext(1, " Saving... ");
1464
1465
  } }
1465
1466
  function ConnectionsComponent_Conditional_12_Conditional_9_Conditional_32_Template(rf, ctx) { if (rf & 1) {
@@ -1467,45 +1468,45 @@ function ConnectionsComponent_Conditional_12_Conditional_9_Conditional_32_Templa
1467
1468
  } }
1468
1469
  function ConnectionsComponent_Conditional_12_Conditional_9_Template(rf, ctx) { if (rf & 1) {
1469
1470
  const _r46 = i0.ɵɵgetCurrentView();
1470
- i0.ɵɵelementStart(0, "div", 246)(1, "div", 247)(2, "label", 248);
1471
+ i0.ɵɵelementStart(0, "div", 247)(1, "div", 248)(2, "label", 249);
1471
1472
  i0.ɵɵtext(3, "Connection Name");
1472
1473
  i0.ɵɵelementEnd();
1473
- i0.ɵɵelementStart(4, "input", 249);
1474
+ i0.ɵɵelementStart(4, "input", 250);
1474
1475
  i0.ɵɵtwoWayListener("ngModelChange", function ConnectionsComponent_Conditional_12_Conditional_9_Template_input_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r46); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.EditName, $event) || (ctx_r1.EditName = $event); return i0.ɵɵresetView($event); });
1475
1476
  i0.ɵɵelementEnd()();
1476
- i0.ɵɵelementStart(5, "div", 247)(6, "label", 248);
1477
+ i0.ɵɵelementStart(5, "div", 248)(6, "label", 249);
1477
1478
  i0.ɵɵtext(7, "Status");
1478
1479
  i0.ɵɵelementEnd();
1479
- i0.ɵɵelementStart(8, "div", 250)(9, "label", 251)(10, "input", 136);
1480
+ i0.ɵɵelementStart(8, "div", 251)(9, "label", 252)(10, "input", 137);
1480
1481
  i0.ɵɵtwoWayListener("ngModelChange", function ConnectionsComponent_Conditional_12_Conditional_9_Template_input_ngModelChange_10_listener($event) { i0.ɵɵrestoreView(_r46); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.EditIsActive, $event) || (ctx_r1.EditIsActive = $event); return i0.ɵɵresetView($event); });
1481
1482
  i0.ɵɵelementEnd();
1482
- i0.ɵɵelement(11, "span", 163);
1483
+ i0.ɵɵelement(11, "span", 164);
1483
1484
  i0.ɵɵelementEnd();
1484
- i0.ɵɵelementStart(12, "span", 252);
1485
+ i0.ɵɵelementStart(12, "span", 253);
1485
1486
  i0.ɵɵtext(13);
1486
1487
  i0.ɵɵelementEnd()()();
1487
- i0.ɵɵelementStart(14, "div", 247)(15, "label", 248);
1488
+ i0.ɵɵelementStart(14, "div", 248)(15, "label", 249);
1488
1489
  i0.ɵɵtext(16, "Credential");
1489
1490
  i0.ɵɵelementEnd();
1490
- i0.ɵɵconditionalCreate(17, ConnectionsComponent_Conditional_12_Conditional_9_Conditional_17_Template, 7, 1, "div", 253)(18, ConnectionsComponent_Conditional_12_Conditional_9_Conditional_18_Template, 5, 1);
1491
+ i0.ɵɵconditionalCreate(17, ConnectionsComponent_Conditional_12_Conditional_9_Conditional_17_Template, 7, 1, "div", 254)(18, ConnectionsComponent_Conditional_12_Conditional_9_Conditional_18_Template, 5, 1);
1491
1492
  i0.ɵɵelementEnd();
1492
- i0.ɵɵelementStart(19, "div", 247)(20, "label", 248);
1493
+ i0.ɵɵelementStart(19, "div", 248)(20, "label", 249);
1493
1494
  i0.ɵɵtext(21, "Integration");
1494
1495
  i0.ɵɵelementEnd();
1495
- i0.ɵɵelementStart(22, "div", 254);
1496
+ i0.ɵɵelementStart(22, "div", 255);
1496
1497
  i0.ɵɵtext(23);
1497
1498
  i0.ɵɵelementEnd()();
1498
- i0.ɵɵelementStart(24, "div", 247)(25, "label", 248);
1499
+ i0.ɵɵelementStart(24, "div", 248)(25, "label", 249);
1499
1500
  i0.ɵɵtext(26, "Company");
1500
1501
  i0.ɵɵelementEnd();
1501
- i0.ɵɵelementStart(27, "div", 254);
1502
+ i0.ɵɵelementStart(27, "div", 255);
1502
1503
  i0.ɵɵtext(28);
1503
1504
  i0.ɵɵelementEnd()()();
1504
- i0.ɵɵelementStart(29, "div", 255)(30, "button", 55);
1505
+ i0.ɵɵelementStart(29, "div", 256)(30, "button", 56);
1505
1506
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_12_Conditional_9_Template_button_click_30_listener() { i0.ɵɵrestoreView(_r46); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.SaveEditChanges()); });
1506
1507
  i0.ɵɵconditionalCreate(31, ConnectionsComponent_Conditional_12_Conditional_9_Conditional_31_Template, 2, 0)(32, ConnectionsComponent_Conditional_12_Conditional_9_Conditional_32_Template, 1, 0);
1507
1508
  i0.ɵɵelementEnd();
1508
- i0.ɵɵelementStart(33, "button", 43);
1509
+ i0.ɵɵelementStart(33, "button", 44);
1509
1510
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_12_Conditional_9_Template_button_click_33_listener() { i0.ɵɵrestoreView(_r46); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.CloseEditPanel()); });
1510
1511
  i0.ɵɵtext(34, " Cancel ");
1511
1512
  i0.ɵɵelementEnd()();
@@ -1532,17 +1533,17 @@ function ConnectionsComponent_Conditional_12_Conditional_9_Template(rf, ctx) { i
1532
1533
  } }
1533
1534
  function ConnectionsComponent_Conditional_12_Template(rf, ctx) { if (rf & 1) {
1534
1535
  const _r45 = i0.ɵɵgetCurrentView();
1535
- i0.ɵɵelementStart(0, "div", 240)(1, "div", 241)(2, "div", 242);
1536
+ i0.ɵɵelementStart(0, "div", 241)(1, "div", 242)(2, "div", 243);
1536
1537
  i0.ɵɵelement(3, "i");
1537
1538
  i0.ɵɵelementEnd();
1538
1539
  i0.ɵɵelementStart(4, "span");
1539
1540
  i0.ɵɵtext(5, "Configure Integration");
1540
1541
  i0.ɵɵelementEnd()();
1541
- i0.ɵɵelementStart(6, "button", 243);
1542
+ i0.ɵɵelementStart(6, "button", 244);
1542
1543
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_12_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r45); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.CloseEditPanel()); });
1543
- i0.ɵɵelement(7, "i", 119);
1544
+ i0.ɵɵelement(7, "i", 120);
1544
1545
  i0.ɵɵelementEnd()();
1545
- i0.ɵɵconditionalCreate(8, ConnectionsComponent_Conditional_12_Conditional_8_Template, 2, 0, "div", 244)(9, ConnectionsComponent_Conditional_12_Conditional_9_Template, 35, 10);
1546
+ i0.ɵɵconditionalCreate(8, ConnectionsComponent_Conditional_12_Conditional_8_Template, 2, 0, "div", 245)(9, ConnectionsComponent_Conditional_12_Conditional_9_Template, 35, 10);
1546
1547
  } if (rf & 2) {
1547
1548
  const ctx_r1 = i0.ɵɵnextContext();
1548
1549
  i0.ɵɵadvance(2);
@@ -1554,7 +1555,7 @@ function ConnectionsComponent_Conditional_12_Template(rf, ctx) { if (rf & 1) {
1554
1555
  } }
1555
1556
  function ConnectionsComponent_Conditional_13_Template(rf, ctx) { if (rf & 1) {
1556
1557
  const _r51 = i0.ɵɵgetCurrentView();
1557
- i0.ɵɵelementStart(0, "mj-credential-dialog", 263);
1558
+ i0.ɵɵelementStart(0, "mj-credential-dialog", 264);
1558
1559
  i0.ɵɵlistener("close", function ConnectionsComponent_Conditional_13_Template_mj_credential_dialog_close_0_listener($event) { i0.ɵɵrestoreView(_r51); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.EditPanelOpen ? ctx_r1.OnEditCredentialDialogClose($event) : ctx_r1.OnCredentialDialogClose($event)); });
1559
1560
  i0.ɵɵelementEnd();
1560
1561
  } if (rf & 2) {
@@ -1568,13 +1569,13 @@ function ConnectionsComponent_Conditional_14_Conditional_16_Template(rf, ctx) {
1568
1569
  i0.ɵɵtextInterpolate1(" ", ctx_r1.AddMapSourceObjectName, " ");
1569
1570
  } }
1570
1571
  function ConnectionsComponent_Conditional_14_Conditional_17_Template(rf, ctx) { if (rf & 1) {
1571
- i0.ɵɵelementStart(0, "span", 275);
1572
+ i0.ɵɵelementStart(0, "span", 276);
1572
1573
  i0.ɵɵtext(1, "Select a source object in the Add Map form first");
1573
1574
  i0.ɵɵelementEnd();
1574
1575
  } }
1575
1576
  function ConnectionsComponent_Conditional_14_Conditional_29_For_2_Template(rf, ctx) { if (rf & 1) {
1576
- i0.ɵɵelementStart(0, "div", 286);
1577
- i0.ɵɵelement(1, "i", 126);
1577
+ i0.ɵɵelementStart(0, "div", 287);
1578
+ i0.ɵɵelement(1, "i", 127);
1578
1579
  i0.ɵɵtext(2);
1579
1580
  i0.ɵɵelementEnd();
1580
1581
  } if (rf & 2) {
@@ -1583,8 +1584,8 @@ function ConnectionsComponent_Conditional_14_Conditional_29_For_2_Template(rf, c
1583
1584
  i0.ɵɵtextInterpolate1(" ", warn_r53);
1584
1585
  } }
1585
1586
  function ConnectionsComponent_Conditional_14_Conditional_29_Template(rf, ctx) { if (rf & 1) {
1586
- i0.ɵɵelementStart(0, "div", 280);
1587
- i0.ɵɵrepeaterCreate(1, ConnectionsComponent_Conditional_14_Conditional_29_For_2_Template, 3, 1, "div", 286, i0.ɵɵrepeaterTrackByIdentity);
1587
+ i0.ɵɵelementStart(0, "div", 281);
1588
+ i0.ɵɵrepeaterCreate(1, ConnectionsComponent_Conditional_14_Conditional_29_For_2_Template, 3, 1, "div", 287, i0.ɵɵrepeaterTrackByIdentity);
1588
1589
  i0.ɵɵelementEnd();
1589
1590
  } if (rf & 2) {
1590
1591
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -1592,23 +1593,23 @@ function ConnectionsComponent_Conditional_14_Conditional_29_Template(rf, ctx) {
1592
1593
  i0.ɵɵrepeater(ctx_r1.DDLPreviewWarnings);
1593
1594
  } }
1594
1595
  function ConnectionsComponent_Conditional_14_Conditional_30_Conditional_5_Template(rf, ctx) { if (rf & 1) {
1595
- i0.ɵɵelement(0, "i", 147);
1596
+ i0.ɵɵelement(0, "i", 148);
1596
1597
  i0.ɵɵtext(1, " Copied ");
1597
1598
  } }
1598
1599
  function ConnectionsComponent_Conditional_14_Conditional_30_Conditional_6_Template(rf, ctx) { if (rf & 1) {
1599
- i0.ɵɵelement(0, "i", 290);
1600
+ i0.ɵɵelement(0, "i", 291);
1600
1601
  i0.ɵɵtext(1, " Copy ");
1601
1602
  } }
1602
1603
  function ConnectionsComponent_Conditional_14_Conditional_30_Template(rf, ctx) { if (rf & 1) {
1603
1604
  const _r54 = i0.ɵɵgetCurrentView();
1604
- i0.ɵɵelementStart(0, "div", 281)(1, "div", 287)(2, "span");
1605
+ i0.ɵɵelementStart(0, "div", 282)(1, "div", 288)(2, "span");
1605
1606
  i0.ɵɵtext(3, "SQL Preview");
1606
1607
  i0.ɵɵelementEnd();
1607
- i0.ɵɵelementStart(4, "button", 288);
1608
+ i0.ɵɵelementStart(4, "button", 289);
1608
1609
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_14_Conditional_30_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r54); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.CopyDDLToClipboard()); });
1609
1610
  i0.ɵɵconditionalCreate(5, ConnectionsComponent_Conditional_14_Conditional_30_Conditional_5_Template, 2, 0)(6, ConnectionsComponent_Conditional_14_Conditional_30_Conditional_6_Template, 2, 0);
1610
1611
  i0.ɵɵelementEnd()();
1611
- i0.ɵɵelementStart(7, "pre", 289);
1612
+ i0.ɵɵelementStart(7, "pre", 290);
1612
1613
  i0.ɵɵtext(8);
1613
1614
  i0.ɵɵelementEnd()();
1614
1615
  } if (rf & 2) {
@@ -1619,8 +1620,8 @@ function ConnectionsComponent_Conditional_14_Conditional_30_Template(rf, ctx) {
1619
1620
  i0.ɵɵtextInterpolate(ctx_r1.DDLPreview);
1620
1621
  } }
1621
1622
  function ConnectionsComponent_Conditional_14_Conditional_31_Template(rf, ctx) { if (rf & 1) {
1622
- i0.ɵɵelementStart(0, "div", 282)(1, "h4");
1623
- i0.ɵɵelement(2, "i", 291);
1623
+ i0.ɵɵelementStart(0, "div", 283)(1, "h4");
1624
+ i0.ɵɵelement(2, "i", 292);
1624
1625
  i0.ɵɵtext(3, " Next Steps");
1625
1626
  i0.ɵɵelementEnd();
1626
1627
  i0.ɵɵelementStart(4, "ol")(5, "li");
@@ -1637,58 +1638,58 @@ function ConnectionsComponent_Conditional_14_Conditional_31_Template(rf, ctx) {
1637
1638
  i0.ɵɵelementEnd()()();
1638
1639
  } }
1639
1640
  function ConnectionsComponent_Conditional_14_Conditional_34_Template(rf, ctx) { if (rf & 1) {
1640
- i0.ɵɵelement(0, "i", 42);
1641
+ i0.ɵɵelement(0, "i", 43);
1641
1642
  i0.ɵɵtext(1, " Generating... ");
1642
1643
  } }
1643
1644
  function ConnectionsComponent_Conditional_14_Conditional_35_Template(rf, ctx) { if (rf & 1) {
1644
- i0.ɵɵelement(0, "i", 292);
1645
+ i0.ɵɵelement(0, "i", 293);
1645
1646
  i0.ɵɵtext(1, " Generate SQL ");
1646
1647
  } }
1647
1648
  function ConnectionsComponent_Conditional_14_Template(rf, ctx) { if (rf & 1) {
1648
1649
  const _r52 = i0.ɵɵgetCurrentView();
1649
- i0.ɵɵelementStart(0, "div", 264);
1650
+ i0.ɵɵelementStart(0, "div", 265);
1650
1651
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_14_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r52); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.CloseNewEntityDialog()); });
1651
1652
  i0.ɵɵelementEnd();
1652
- i0.ɵɵelementStart(1, "div", 265)(2, "div", 266)(3, "h3");
1653
+ i0.ɵɵelementStart(1, "div", 266)(2, "div", 267)(3, "h3");
1653
1654
  i0.ɵɵtext(4, "Create New Entity Table");
1654
1655
  i0.ɵɵelementEnd();
1655
- i0.ɵɵelementStart(5, "button", 267);
1656
+ i0.ɵɵelementStart(5, "button", 268);
1656
1657
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_14_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r52); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.CloseNewEntityDialog()); });
1657
- i0.ɵɵelement(6, "i", 119);
1658
+ i0.ɵɵelement(6, "i", 120);
1658
1659
  i0.ɵɵelementEnd()();
1659
- i0.ɵɵelementStart(7, "div", 268)(8, "p", 269);
1660
+ i0.ɵɵelementStart(7, "div", 269)(8, "p", 270);
1660
1661
  i0.ɵɵtext(9, " Generate a SQL migration to create a new database table for this integration's data. After running the migration and CodeGen, the new entity will appear in the entity picker. ");
1661
1662
  i0.ɵɵelementEnd();
1662
- i0.ɵɵelementStart(10, "div", 270)(11, "div", 271)(12, "div", 272)(13, "label", 273);
1663
+ i0.ɵɵelementStart(10, "div", 271)(11, "div", 272)(12, "div", 273)(13, "label", 274);
1663
1664
  i0.ɵɵtext(14, "Source Object");
1664
1665
  i0.ɵɵelementEnd();
1665
- i0.ɵɵelementStart(15, "div", 274);
1666
- i0.ɵɵconditionalCreate(16, ConnectionsComponent_Conditional_14_Conditional_16_Template, 1, 1)(17, ConnectionsComponent_Conditional_14_Conditional_17_Template, 2, 0, "span", 275);
1666
+ i0.ɵɵelementStart(15, "div", 275);
1667
+ i0.ɵɵconditionalCreate(16, ConnectionsComponent_Conditional_14_Conditional_16_Template, 1, 1)(17, ConnectionsComponent_Conditional_14_Conditional_17_Template, 2, 0, "span", 276);
1667
1668
  i0.ɵɵelementEnd()()();
1668
- i0.ɵɵelementStart(18, "div", 271)(19, "div", 272)(20, "label", 273);
1669
+ i0.ɵɵelementStart(18, "div", 272)(19, "div", 273)(20, "label", 274);
1669
1670
  i0.ɵɵtext(21, "Schema");
1670
1671
  i0.ɵɵelementEnd();
1671
- i0.ɵɵelementStart(22, "input", 276);
1672
+ i0.ɵɵelementStart(22, "input", 277);
1672
1673
  i0.ɵɵtwoWayListener("ngModelChange", function ConnectionsComponent_Conditional_14_Template_input_ngModelChange_22_listener($event) { i0.ɵɵrestoreView(_r52); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.NewEntitySchema, $event) || (ctx_r1.NewEntitySchema = $event); return i0.ɵɵresetView($event); });
1673
1674
  i0.ɵɵelementEnd()();
1674
- i0.ɵɵelementStart(23, "span", 277);
1675
+ i0.ɵɵelementStart(23, "span", 278);
1675
1676
  i0.ɵɵtext(24, ".");
1676
1677
  i0.ɵɵelementEnd();
1677
- i0.ɵɵelementStart(25, "div", 278)(26, "label", 273);
1678
+ i0.ɵɵelementStart(25, "div", 279)(26, "label", 274);
1678
1679
  i0.ɵɵtext(27, "Table Name");
1679
1680
  i0.ɵɵelementEnd();
1680
- i0.ɵɵelementStart(28, "input", 279);
1681
+ i0.ɵɵelementStart(28, "input", 280);
1681
1682
  i0.ɵɵtwoWayListener("ngModelChange", function ConnectionsComponent_Conditional_14_Template_input_ngModelChange_28_listener($event) { i0.ɵɵrestoreView(_r52); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.NewEntityTable, $event) || (ctx_r1.NewEntityTable = $event); return i0.ɵɵresetView($event); });
1682
1683
  i0.ɵɵelementEnd()()()();
1683
- i0.ɵɵconditionalCreate(29, ConnectionsComponent_Conditional_14_Conditional_29_Template, 3, 0, "div", 280);
1684
- i0.ɵɵconditionalCreate(30, ConnectionsComponent_Conditional_14_Conditional_30_Template, 9, 2, "div", 281);
1685
- i0.ɵɵconditionalCreate(31, ConnectionsComponent_Conditional_14_Conditional_31_Template, 13, 0, "div", 282);
1684
+ i0.ɵɵconditionalCreate(29, ConnectionsComponent_Conditional_14_Conditional_29_Template, 3, 0, "div", 281);
1685
+ i0.ɵɵconditionalCreate(30, ConnectionsComponent_Conditional_14_Conditional_30_Template, 9, 2, "div", 282);
1686
+ i0.ɵɵconditionalCreate(31, ConnectionsComponent_Conditional_14_Conditional_31_Template, 13, 0, "div", 283);
1686
1687
  i0.ɵɵelementEnd();
1687
- i0.ɵɵelementStart(32, "div", 283)(33, "button", 284);
1688
+ i0.ɵɵelementStart(32, "div", 284)(33, "button", 285);
1688
1689
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_14_Template_button_click_33_listener() { i0.ɵɵrestoreView(_r52); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.PreviewDDL()); });
1689
1690
  i0.ɵɵconditionalCreate(34, ConnectionsComponent_Conditional_14_Conditional_34_Template, 2, 0)(35, ConnectionsComponent_Conditional_14_Conditional_35_Template, 2, 0);
1690
1691
  i0.ɵɵelementEnd();
1691
- i0.ɵɵelementStart(36, "button", 285);
1692
+ i0.ɵɵelementStart(36, "button", 286);
1692
1693
  i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_14_Template_button_click_36_listener() { i0.ɵɵrestoreView(_r52); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.CloseNewEntityDialog()); });
1693
1694
  i0.ɵɵtext(37, " Done ");
1694
1695
  i0.ɵɵelementEnd()()();
@@ -3079,11 +3080,11 @@ let ConnectionsComponent = class ConnectionsComponent extends BaseResourceCompon
3079
3080
  } if (rf & 2) {
3080
3081
  let _t;
3081
3082
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.entityTreeDropdown = _t.first);
3082
- } }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 15, vars: 18, consts: [["entityTreeDropdown", ""], ["Title", "Integrations", "Icon", "fa-solid fa-plug", "Subtitle", "Connected systems and data sources"], ["actions", ""], [3, "Clicked", "Loading"], ["mjButton", "", "variant", "primary", "size", "sm"], [3, "Flex", "Padding"], [1, "connections-container"], [1, "detail-view"], [1, "wizard-inline"], [1, "edit-panel-backdrop", 3, "click"], [1, "edit-panel"], [3, "Visible", "PreselectedTypeId"], ["mjButton", "", "variant", "primary", "size", "sm", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "loading-container"], [1, "empty-state"], [1, "card-grid"], ["text", "Loading integrations..."], [1, "fa-solid", "fa-plug", "empty-icon"], ["mjButton", "", "variant", "primary", 3, "click"], [1, "connection-card"], [1, "connection-card", "new-connection-card", 3, "click"], [1, "new-card-content"], [1, "new-card-icon"], [1, "new-card-label"], [1, "card-clickable", 3, "click"], [1, "card-header"], [1, "icon-circle"], [1, "icon-large"], [1, "card-body"], [1, "card-name"], [1, "card-company"], [1, "card-meta"], [1, "meta-label"], [1, "meta-separator"], [1, "meta-value"], [1, "card-sync-info"], [1, "fa-solid", "fa-arrows-rotate"], [1, "card-test-result", 3, "test-success", "test-failure"], [1, "delete-confirm-overlay"], [1, "card-footer"], ["mjButton", "", "variant", "outline", 3, "click", "disabled"], [1, "fa-solid", "fa-spinner", "fa-spin"], ["mjButton", "", "variant", "outline", 3, "click"], [1, "sync-menu-wrapper"], ["title", "Delete integration", 1, "card-delete-btn", 3, "click"], [1, "fa-solid", "fa-trash-can"], [1, "card-test-result"], [1, "fa-solid", "fa-circle-check"], [1, "fa-solid", "fa-circle-xmark"], [1, "delete-confirm-content"], [1, "fa-solid", "fa-triangle-exclamation", "delete-warn-icon"], [1, "delete-confirm-text"], [1, "delete-confirm-actions"], ["mjButton", "", "variant", "danger", 3, "click", "disabled"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], [1, "sync-dropdown"], [1, "fa-solid", "fa-chevron-down", "sync-caret"], [1, "sync-dropdown-group"], [1, "sync-dropdown-label"], [1, "sync-dropdown-item", 3, "click"], [1, "fa-solid", "fa-arrow-down-to-line"], [1, "fa-solid", "fa-rotate"], [1, "fa-solid", "fa-arrow-up-from-line"], [3, "EntityMap", "CompanyIntegrationID", "RunViewProvider"], [3, "Close", "EntityMap", "CompanyIntegrationID", "RunViewProvider"], [1, "detail-header"], ["title", "Back to Integrations", 1, "detail-back-btn", 3, "click"], [1, "fa-solid", "fa-arrow-left"], [1, "detail-header-info"], [1, "detail-header-text"], [1, "detail-title"], [1, "detail-subtitle"], [1, "detail-header-actions"], ["title", "Configure", 1, "detail-edit-btn", 3, "click"], [1, "fa-solid", "fa-pen-to-square"], [1, "schedule-section"], [1, "schedule-section-header"], [1, "schedule-section-title"], [1, "fa-solid", "fa-calendar-check"], [3, "ScheduledJobID"], [1, "schedule-empty"], [3, "Close", "Saved", "Deleted", "IsOpen", "ScheduledJobID", "JobTypeID", "DefaultConfiguration", "HideJobType"], [1, "detail-toolbar"], [1, "detail-toolbar-left"], [1, "detail-map-count"], [1, "detail-toolbar-right"], [1, "detail-search"], [1, "fa-solid", "fa-filter"], ["type", "text", "placeholder", "Filter entity maps...", 3, "input", "value"], ["title", "Select source objects and create entity tables", 1, "add-map-btn", 3, "click"], [1, "fa-solid", "fa-table"], [1, "add-map-btn", 3, "click"], [1, "fa-solid", "fa-wand-magic-sparkles"], [1, "sync-result-banner", 3, "sync-success", "sync-failure"], [1, "add-map-panel"], [1, "detail-empty"], [1, "sync-dropdown", "sync-dropdown-left"], [3, "EditRequested", "ScheduledJobID"], [1, "schedule-empty-text"], [1, "schedule-create-btn", 3, "click"], [1, "sync-result-banner"], [1, "auto-map-header"], [1, "add-map-row"], [1, "add-map-field"], [1, "add-map-label"], [1, "add-map-select", 3, "ngModelChange", "ngModel"], ["disabled", "", 3, "ngValue"], [3, "value"], [1, "add-map-direction-col"], [1, "add-map-direction-btns"], ["title", "Pull from source", 3, "click"], [1, "fa-solid", "fa-arrow-right"], ["title", "Bidirectional sync", 3, "click"], [1, "fa-solid", "fa-right-left"], ["title", "Push to source", 3, "click"], [1, "add-map-actions"], [1, "add-map-save-btn", 3, "click", "disabled"], [1, "add-map-cancel-btn", 3, "click"], [1, "fa-solid", "fa-xmark"], [1, "auto-map-result", 3, "auto-map-success", "auto-map-partial", "auto-map-failure"], [1, "auto-map-result"], [1, "auto-map-result-summary"], [1, "auto-map-errors"], [1, "fa-solid", "fa-circle-info"], [1, "auto-map-error"], [1, "fa-solid", "fa-triangle-exclamation"], ["text", "Loading source objects...", "size", "small"], [1, "auto-map-result", "auto-map-success"], [1, "auto-map-result", 3, "auto-map-success", "auto-map-failure"], [1, "create-tables-filters"], ["type", "text", "placeholder", "Search by name or label...", 1, "create-tables-search", "mj-input", 3, "ngModelChange", "ngModel"], [1, "create-tables-list"], [1, "create-tables-select-all"], [1, "create-tables-checkbox"], ["type", "checkbox", 3, "change", "checked"], ["type", "checkbox", 3, "ngModelChange", "ngModel"], [1, "create-tables-name-hint"], [1, "create-tables-badge", "create-tables-badge-custom"], [1, "create-tables-badge", "create-tables-badge-registered"], [1, "add-map-loading"], [1, "add-map-hint"], [1, "add-map-select", 3, "ngModel"], [1, "add-map-field", "add-map-entity-field"], [1, "entity-picker-row"], [3, "SelectionChange", "BranchConfig", "LeafConfig", "Value", "SelectableTypes", "SelectionMode", "Placeholder", "EnableSearch"], ["title", "Create new entity table", 1, "new-entity-btn", 3, "click"], [1, "fa-solid", "fa-check"], ["text", "Loading entity maps..."], [1, "fa-solid", "fa-cube"], [1, "add-map-btn", "add-map-btn-lg", 3, "click"], [1, "detail-table-head"], [1, "dt-col-toggle"], [1, "dt-col-source"], [1, "dt-col-direction"], [1, "dt-col-dest"], [1, "dt-col-meta"], [1, "detail-table-body"], [1, "detail-map-row", 3, "sync-disabled"], [1, "detail-table-empty"], [1, "detail-map-row", 3, "click"], [1, "dt-col-toggle", 3, "click"], [1, "toggle-switch", 3, "title"], [1, "toggle-slider"], [1, "dt-col-source", 3, "title"], [1, "dt-col-direction", 3, "click"], [1, "direction-toggle", 3, "click", "title"], [1, "dt-col-dest", 3, "title"], ["title", "Match strategy configured", 1, "detail-config-badge"], [1, "detail-config-badge", 3, "title"], [1, "map-edit-hint"], [1, "fa-solid", "fa-chevron-right"], [1, "fa-solid", "fa-link"], [1, "wizard-header"], [1, "wizard-back-btn", 3, "click"], [1, "wizard-title"], [1, "step-indicator"], [1, "wizard-body"], [1, "step-content"], [1, "step-content", "step-content-centered"], [1, "wizard-footer"], [1, "footer-left"], [1, "footer-right"], ["mjButton", "", "variant", "outline"], [1, "step-item"], [1, "step-circle"], [1, "step-label"], [1, "step-line", 3, "step-line-active"], [1, "step-line"], [1, "step-title"], [1, "search-bar"], [1, "fa-solid", "fa-search", "search-icon"], ["type", "text", "placeholder", "Search integrations...", 1, "search-input", 3, "ngModelChange", "ngModel"], [1, "no-integrations"], [1, "integration-picker-grid"], [1, "fa-solid", "fa-puzzle-piece"], [1, "no-integrations-hint"], [1, "fa-solid", "fa-search"], [1, "integration-picker-card", 3, "picker-selected"], [1, "integration-picker-card", 3, "click"], [1, "picker-icon-circle"], [1, "picker-name"], [1, "picker-description"], [1, "form-group"], ["for", "connectionName", 1, "form-label"], ["id", "connectionName", "type", "text", "placeholder", "e.g. Production HubSpot", 1, "form-input", 3, "ngModelChange", "ngModel"], ["for", "companySelect", 1, "form-label"], ["id", "companySelect", 1, "form-input", 3, "ngModel"], ["type", "text", "disabled", "", 1, "form-input", 3, "value"], [1, "form-hint"], ["for", "connectionDescription", 1, "form-label"], [1, "optional-label"], ["id", "connectionDescription", "placeholder", "Notes about this connection...", "rows", "3", 1, "form-input", "form-textarea", 3, "ngModelChange", "ngModel"], [1, "form-label"], [1, "credential-selected"], [1, "credential-actions"], [1, "credential-loading"], [1, "credential-list"], ["id", "companySelect", 1, "form-input", 3, "ngModelChange", "ngModel"], [1, "credential-info"], [1, "fa-solid", "fa-key"], [1, "credential-clear", 3, "click"], ["text", "Loading credentials...", "size", "small"], [1, "credential-list-item"], [1, "credential-list-item", 3, "click"], [1, "test-prompt"], [1, "test-running"], [1, "test-result", 3, "test-result-success", "test-result-failure"], ["mjButton", "", "variant", "primary", "size", "lg", 3, "click"], [1, "fa-solid", "fa-vial"], [1, "test-hint"], [1, "test-spinner"], [1, "fa-solid", "fa-spinner", "fa-spin", "fa-3x"], [1, "test-result"], [1, "test-result-icon"], [1, "test-result-message"], [1, "test-result-detail"], ["mjButton", "", "variant", "outline", 1, "test-retry-btn"], ["mjButton", "", "variant", "outline", 1, "test-retry-btn", 3, "click"], [1, "fa-solid", "fa-rotate-right"], [1, "edit-panel-header"], [1, "edit-panel-title"], [1, "edit-icon-circle"], [1, "edit-close-btn", 3, "click"], [1, "edit-panel-loading"], ["text", "Loading...", "size", "small"], [1, "edit-panel-body"], [1, "edit-form-group"], [1, "edit-form-label"], ["type", "text", "placeholder", "Connection name...", 1, "edit-form-input", 3, "ngModelChange", "ngModel"], [1, "edit-toggle-row"], [1, "toggle-switch"], [1, "edit-toggle-label"], [1, "edit-credential-selected"], [1, "edit-readonly-field"], [1, "edit-panel-footer"], [1, "edit-credential-info"], [1, "edit-credential-clear", 3, "click"], [1, "edit-credential-actions"], ["mjButton", "", "variant", "outline", "size", "sm", 3, "click"], [1, "edit-credential-list"], [1, "edit-credential-item"], [1, "edit-credential-item", 3, "click"], [3, "close", "Visible", "PreselectedTypeId"], [1, "new-entity-backdrop", 3, "click"], [1, "new-entity-dialog"], [1, "new-entity-dialog-header"], [1, "new-entity-dialog-close", 3, "click"], [1, "new-entity-dialog-body"], [1, "new-entity-dialog-desc"], [1, "new-entity-dialog-form"], [1, "new-entity-dialog-row"], [1, "new-entity-dialog-field"], [1, "new-entity-dialog-label"], [1, "new-entity-dialog-value"], [1, "new-entity-dialog-hint"], ["type", "text", "placeholder", "e.g. hubspot", 1, "new-entity-dialog-input", 3, "ngModelChange", "ngModel"], [1, "new-entity-dialog-dot"], [1, "new-entity-dialog-field", "new-entity-dialog-field-wide"], ["type", "text", "placeholder", "e.g. Contact", 1, "new-entity-dialog-input", 3, "ngModelChange", "ngModel"], [1, "ddl-warnings"], [1, "ddl-preview-block"], [1, "new-entity-next-steps"], [1, "new-entity-dialog-footer"], [1, "new-entity-preview-btn", 3, "click", "disabled"], [1, "new-entity-dialog-done-btn", 3, "click"], [1, "ddl-warning"], [1, "ddl-preview-header"], ["title", "Copy to clipboard", 1, "ddl-copy-btn", 3, "click"], [1, "ddl-preview-code"], [1, "fa-regular", "fa-copy"], [1, "fa-solid", "fa-list-check"], [1, "fa-solid", "fa-code"]], template: function ConnectionsComponent_Template(rf, ctx) { if (rf & 1) {
3083
+ } }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 15, vars: 18, consts: [["entityTreeDropdown", ""], ["Title", "Integrations", "Icon", "fa-solid fa-plug", "Subtitle", "Connected systems and data sources"], ["actions", ""], [3, "Clicked", "Loading"], ["mjButton", "", "variant", "primary", "size", "sm"], [3, "Flex", "Padding"], [1, "connections-container"], [1, "detail-view"], [1, "wizard-inline"], [1, "edit-panel-backdrop", 3, "click"], [1, "edit-panel"], [3, "Visible", "PreselectedTypeId"], ["mjButton", "", "variant", "primary", "size", "sm", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "action-btn-label"], [1, "loading-container"], [1, "empty-state"], [1, "card-grid"], ["text", "Loading integrations..."], [1, "fa-solid", "fa-plug", "empty-icon"], ["mjButton", "", "variant", "primary", 3, "click"], [1, "connection-card"], [1, "connection-card", "new-connection-card", 3, "click"], [1, "new-card-content"], [1, "new-card-icon"], [1, "new-card-label"], [1, "card-clickable", 3, "click"], [1, "card-header"], [1, "icon-circle"], [1, "icon-large"], [1, "card-body"], [1, "card-name"], [1, "card-company"], [1, "card-meta"], [1, "meta-label"], [1, "meta-separator"], [1, "meta-value"], [1, "card-sync-info"], [1, "fa-solid", "fa-arrows-rotate"], [1, "card-test-result", 3, "test-success", "test-failure"], [1, "delete-confirm-overlay"], [1, "card-footer"], ["mjButton", "", "variant", "outline", 3, "click", "disabled"], [1, "fa-solid", "fa-spinner", "fa-spin"], ["mjButton", "", "variant", "outline", 3, "click"], [1, "sync-menu-wrapper"], ["title", "Delete integration", 1, "card-delete-btn", 3, "click"], [1, "fa-solid", "fa-trash-can"], [1, "card-test-result"], [1, "fa-solid", "fa-circle-check"], [1, "fa-solid", "fa-circle-xmark"], [1, "delete-confirm-content"], [1, "fa-solid", "fa-triangle-exclamation", "delete-warn-icon"], [1, "delete-confirm-text"], [1, "delete-confirm-actions"], ["mjButton", "", "variant", "danger", 3, "click", "disabled"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], [1, "sync-dropdown"], [1, "fa-solid", "fa-chevron-down", "sync-caret"], [1, "sync-dropdown-group"], [1, "sync-dropdown-label"], [1, "sync-dropdown-item", 3, "click"], [1, "fa-solid", "fa-arrow-down-to-line"], [1, "fa-solid", "fa-rotate"], [1, "fa-solid", "fa-arrow-up-from-line"], [3, "EntityMap", "CompanyIntegrationID", "RunViewProvider"], [3, "Close", "EntityMap", "CompanyIntegrationID", "RunViewProvider"], [1, "detail-header"], ["title", "Back to Integrations", 1, "detail-back-btn", 3, "click"], [1, "fa-solid", "fa-arrow-left"], [1, "detail-header-info"], [1, "detail-header-text"], [1, "detail-title"], [1, "detail-subtitle"], [1, "detail-header-actions"], ["title", "Configure", 1, "detail-edit-btn", 3, "click"], [1, "fa-solid", "fa-pen-to-square"], [1, "schedule-section"], [1, "schedule-section-header"], [1, "schedule-section-title"], [1, "fa-solid", "fa-calendar-check"], [3, "ScheduledJobID"], [1, "schedule-empty"], [3, "Close", "Saved", "Deleted", "IsOpen", "ScheduledJobID", "JobTypeID", "DefaultConfiguration", "HideJobType"], [1, "detail-toolbar"], [1, "detail-toolbar-left"], [1, "detail-map-count"], [1, "detail-toolbar-right"], [1, "detail-search"], [1, "fa-solid", "fa-filter"], ["type", "text", "placeholder", "Filter entity maps...", 3, "input", "value"], ["title", "Select source objects and create entity tables", 1, "add-map-btn", 3, "click"], [1, "fa-solid", "fa-table"], [1, "add-map-btn", 3, "click"], [1, "fa-solid", "fa-wand-magic-sparkles"], [1, "sync-result-banner", 3, "sync-success", "sync-failure"], [1, "add-map-panel"], [1, "detail-empty"], [1, "sync-dropdown", "sync-dropdown-left"], [3, "EditRequested", "ScheduledJobID"], [1, "schedule-empty-text"], [1, "schedule-create-btn", 3, "click"], [1, "sync-result-banner"], [1, "auto-map-header"], [1, "add-map-row"], [1, "add-map-field"], [1, "add-map-label"], [1, "add-map-select", 3, "ngModelChange", "ngModel"], ["disabled", "", 3, "ngValue"], [3, "value"], [1, "add-map-direction-col"], [1, "add-map-direction-btns"], ["title", "Pull from source", 3, "click"], [1, "fa-solid", "fa-arrow-right"], ["title", "Bidirectional sync", 3, "click"], [1, "fa-solid", "fa-right-left"], ["title", "Push to source", 3, "click"], [1, "add-map-actions"], [1, "add-map-save-btn", 3, "click", "disabled"], [1, "add-map-cancel-btn", 3, "click"], [1, "fa-solid", "fa-xmark"], [1, "auto-map-result", 3, "auto-map-success", "auto-map-partial", "auto-map-failure"], [1, "auto-map-result"], [1, "auto-map-result-summary"], [1, "auto-map-errors"], [1, "fa-solid", "fa-circle-info"], [1, "auto-map-error"], [1, "fa-solid", "fa-triangle-exclamation"], ["text", "Loading source objects...", "size", "small"], [1, "auto-map-result", "auto-map-success"], [1, "auto-map-result", 3, "auto-map-success", "auto-map-failure"], [1, "create-tables-filters"], ["type", "text", "placeholder", "Search by name or label...", 1, "create-tables-search", "mj-input", 3, "ngModelChange", "ngModel"], [1, "create-tables-list"], [1, "create-tables-select-all"], [1, "create-tables-checkbox"], ["type", "checkbox", 3, "change", "checked"], ["type", "checkbox", 3, "ngModelChange", "ngModel"], [1, "create-tables-name-hint"], [1, "create-tables-badge", "create-tables-badge-custom"], [1, "create-tables-badge", "create-tables-badge-registered"], [1, "add-map-loading"], [1, "add-map-hint"], [1, "add-map-select", 3, "ngModel"], [1, "add-map-field", "add-map-entity-field"], [1, "entity-picker-row"], [3, "SelectionChange", "BranchConfig", "LeafConfig", "Value", "SelectableTypes", "SelectionMode", "Placeholder", "EnableSearch"], ["title", "Create new entity table", 1, "new-entity-btn", 3, "click"], [1, "fa-solid", "fa-check"], ["text", "Loading entity maps..."], [1, "fa-solid", "fa-cube"], [1, "add-map-btn", "add-map-btn-lg", 3, "click"], [1, "detail-table-head"], [1, "dt-col-toggle"], [1, "dt-col-source"], [1, "dt-col-direction"], [1, "dt-col-dest"], [1, "dt-col-meta"], [1, "detail-table-body"], [1, "detail-map-row", 3, "sync-disabled"], [1, "detail-table-empty"], [1, "detail-map-row", 3, "click"], [1, "dt-col-toggle", 3, "click"], [1, "toggle-switch", 3, "title"], [1, "toggle-slider"], [1, "dt-col-source", 3, "title"], [1, "dt-col-direction", 3, "click"], [1, "direction-toggle", 3, "click", "title"], [1, "dt-col-dest", 3, "title"], ["title", "Match strategy configured", 1, "detail-config-badge"], [1, "detail-config-badge", 3, "title"], [1, "map-edit-hint"], [1, "fa-solid", "fa-chevron-right"], [1, "fa-solid", "fa-link"], [1, "wizard-header"], [1, "wizard-back-btn", 3, "click"], [1, "wizard-title"], [1, "step-indicator"], [1, "wizard-body"], [1, "step-content"], [1, "step-content", "step-content-centered"], [1, "wizard-footer"], [1, "footer-left"], [1, "footer-right"], ["mjButton", "", "variant", "outline"], [1, "step-item"], [1, "step-circle"], [1, "step-label"], [1, "step-line", 3, "step-line-active"], [1, "step-line"], [1, "step-title"], [1, "search-bar"], [1, "fa-solid", "fa-search", "search-icon"], ["type", "text", "placeholder", "Search integrations...", 1, "search-input", 3, "ngModelChange", "ngModel"], [1, "no-integrations"], [1, "integration-picker-grid"], [1, "fa-solid", "fa-puzzle-piece"], [1, "no-integrations-hint"], [1, "fa-solid", "fa-search"], [1, "integration-picker-card", 3, "picker-selected"], [1, "integration-picker-card", 3, "click"], [1, "picker-icon-circle"], [1, "picker-name"], [1, "picker-description"], [1, "form-group"], ["for", "connectionName", 1, "form-label"], ["id", "connectionName", "type", "text", "placeholder", "e.g. Production HubSpot", 1, "form-input", 3, "ngModelChange", "ngModel"], ["for", "companySelect", 1, "form-label"], ["id", "companySelect", 1, "form-input", 3, "ngModel"], ["type", "text", "disabled", "", 1, "form-input", 3, "value"], [1, "form-hint"], ["for", "connectionDescription", 1, "form-label"], [1, "optional-label"], ["id", "connectionDescription", "placeholder", "Notes about this connection...", "rows", "3", 1, "form-input", "form-textarea", 3, "ngModelChange", "ngModel"], [1, "form-label"], [1, "credential-selected"], [1, "credential-actions"], [1, "credential-loading"], [1, "credential-list"], ["id", "companySelect", 1, "form-input", 3, "ngModelChange", "ngModel"], [1, "credential-info"], [1, "fa-solid", "fa-key"], [1, "credential-clear", 3, "click"], ["text", "Loading credentials...", "size", "small"], [1, "credential-list-item"], [1, "credential-list-item", 3, "click"], [1, "test-prompt"], [1, "test-running"], [1, "test-result", 3, "test-result-success", "test-result-failure"], ["mjButton", "", "variant", "primary", "size", "lg", 3, "click"], [1, "fa-solid", "fa-vial"], [1, "test-hint"], [1, "test-spinner"], [1, "fa-solid", "fa-spinner", "fa-spin", "fa-3x"], [1, "test-result"], [1, "test-result-icon"], [1, "test-result-message"], [1, "test-result-detail"], ["mjButton", "", "variant", "outline", 1, "test-retry-btn"], ["mjButton", "", "variant", "outline", 1, "test-retry-btn", 3, "click"], [1, "fa-solid", "fa-rotate-right"], [1, "edit-panel-header"], [1, "edit-panel-title"], [1, "edit-icon-circle"], [1, "edit-close-btn", 3, "click"], [1, "edit-panel-loading"], ["text", "Loading...", "size", "small"], [1, "edit-panel-body"], [1, "edit-form-group"], [1, "edit-form-label"], ["type", "text", "placeholder", "Connection name...", 1, "edit-form-input", 3, "ngModelChange", "ngModel"], [1, "edit-toggle-row"], [1, "toggle-switch"], [1, "edit-toggle-label"], [1, "edit-credential-selected"], [1, "edit-readonly-field"], [1, "edit-panel-footer"], [1, "edit-credential-info"], [1, "edit-credential-clear", 3, "click"], [1, "edit-credential-actions"], ["mjButton", "", "variant", "outline", "size", "sm", 3, "click"], [1, "edit-credential-list"], [1, "edit-credential-item"], [1, "edit-credential-item", 3, "click"], [3, "close", "Visible", "PreselectedTypeId"], [1, "new-entity-backdrop", 3, "click"], [1, "new-entity-dialog"], [1, "new-entity-dialog-header"], [1, "new-entity-dialog-close", 3, "click"], [1, "new-entity-dialog-body"], [1, "new-entity-dialog-desc"], [1, "new-entity-dialog-form"], [1, "new-entity-dialog-row"], [1, "new-entity-dialog-field"], [1, "new-entity-dialog-label"], [1, "new-entity-dialog-value"], [1, "new-entity-dialog-hint"], ["type", "text", "placeholder", "e.g. hubspot", 1, "new-entity-dialog-input", 3, "ngModelChange", "ngModel"], [1, "new-entity-dialog-dot"], [1, "new-entity-dialog-field", "new-entity-dialog-field-wide"], ["type", "text", "placeholder", "e.g. Contact", 1, "new-entity-dialog-input", 3, "ngModelChange", "ngModel"], [1, "ddl-warnings"], [1, "ddl-preview-block"], [1, "new-entity-next-steps"], [1, "new-entity-dialog-footer"], [1, "new-entity-preview-btn", 3, "click", "disabled"], [1, "new-entity-dialog-done-btn", 3, "click"], [1, "ddl-warning"], [1, "ddl-preview-header"], ["title", "Copy to clipboard", 1, "ddl-copy-btn", 3, "click"], [1, "ddl-preview-code"], [1, "fa-regular", "fa-copy"], [1, "fa-solid", "fa-list-check"], [1, "fa-solid", "fa-code"]], template: function ConnectionsComponent_Template(rf, ctx) { if (rf & 1) {
3083
3084
  i0.ɵɵelementStart(0, "mj-page-layout")(1, "mj-page-header", 1)(2, "div", 2)(3, "mj-refresh-button", 3);
3084
3085
  i0.ɵɵlistener("Clicked", function ConnectionsComponent_Template_mj_refresh_button_Clicked_3_listener() { return ctx.LoadData(); });
3085
3086
  i0.ɵɵelementEnd();
3086
- i0.ɵɵconditionalCreate(4, ConnectionsComponent_Conditional_4_Template, 3, 0, "button", 4);
3087
+ i0.ɵɵconditionalCreate(4, ConnectionsComponent_Conditional_4_Template, 4, 0, "button", 4);
3087
3088
  i0.ɵɵelementEnd()();
3088
3089
  i0.ɵɵelementStart(5, "mj-page-body", 5)(6, "div", 6);
3089
3090
  i0.ɵɵconditionalCreate(7, ConnectionsComponent_Conditional_7_Template, 3, 3);
@@ -3132,7 +3133,7 @@ ConnectionsComponent = ConnectionsComponent_1 = __decorate([
3132
3133
  export { ConnectionsComponent };
3133
3134
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ConnectionsComponent, [{
3134
3135
  type: Component,
3135
- args: [{ standalone: false, selector: 'app-integration-connections', template: "<mj-page-layout>\n <mj-page-header\n Title=\"Integrations\"\n Icon=\"fa-solid fa-plug\"\n Subtitle=\"Connected systems and data sources\">\n <!-- [meta] intentionally omitted \u2014 chrome slot discipline audit Task B.\n \"Connections.length integrations\" badge mirrored the visible card\n grid row count. -->\n <div actions>\n <mj-refresh-button [Loading]=\"IsLoading\" (Clicked)=\"LoadData()\"></mj-refresh-button>\n @if (!WizardOpen && !SelectedSummary) {\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"OpenWizard()\">\n <i class=\"fa-solid fa-plus\"></i> Add Integration\n </button>\n }\n </div>\n </mj-page-header>\n\n <mj-page-body [Flex]=\"true\" [Padding]=\"false\">\n<!-- Main container -->\n<div class=\"connections-container\" [class.detail-active]=\"!!SelectedSummary\"\n [class.editor-active]=\"!!EditorEntityMap\">\n\n <!-- ======================================================================\n CARD GRID VIEW (shown when no wizard and no detail selected)\n ====================================================================== -->\n @if (!WizardOpen && !SelectedSummary) {\n <!-- Loading state -->\n @if (IsLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading integrations...\"></mj-loading>\n </div>\n }\n\n <!-- Empty state -->\n @if (!IsLoading && Connections.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-plug empty-icon\"></i>\n <h3>No integrations yet</h3>\n <p>Connect your first external system to start syncing data.</p>\n <button mjButton variant=\"primary\" (click)=\"OpenWizard()\">\n <i class=\"fa-solid fa-plus\"></i>\n Add Your First Integration\n </button>\n </div>\n }\n\n <!-- Card grid -->\n @if (!IsLoading && Connections.length > 0) {\n <div class=\"card-grid\">\n @for (summary of Connections; track summary.Integration.ID) {\n <div class=\"connection-card\">\n <!-- Card header + body: clickable to open detail view -->\n <div class=\"card-clickable\" (click)=\"SelectIntegrationCard(summary)\">\n <div class=\"card-header\">\n <div class=\"icon-circle\" [style.background-color]=\"GetIconBrandColor(summary.Integration.Integration)\">\n <i [class]=\"GetIntegrationIcon(summary.Integration.Integration, summary.Icon)\" class=\"icon-large\"></i>\n </div>\n <span [class]=\"GetStatusBadgeClass(summary)\">{{ GetStatusBadge(summary) }}</span>\n </div>\n\n <!-- Card body -->\n <div class=\"card-body\">\n <div class=\"card-name\">{{ summary.Integration.Name }}</div>\n <div class=\"card-company\">{{ summary.Integration.Company }}</div>\n <div class=\"card-meta\">\n <span class=\"meta-label\">{{ GetSourceTypeLabel(summary) }}</span>\n <span class=\"meta-separator\">&middot;</span>\n <span class=\"meta-value\">{{ GetCredentialHint(summary) }}</span>\n </div>\n <div class=\"card-sync-info\">\n <i class=\"fa-solid fa-arrows-rotate\"></i>\n Syncing {{ GetEntityMapCount(summary.Integration.ID) }} entities\n </div>\n\n <!-- Inline test result -->\n @if (GetCardTestResult(summary.Integration.ID); as testResult) {\n <div class=\"card-test-result\" [class.test-success]=\"testResult.Success\" [class.test-failure]=\"!testResult.Success\">\n @if (testResult.Success) {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else {\n <i class=\"fa-solid fa-circle-xmark\"></i>\n }\n <span>{{ testResult.Message }}</span>\n </div>\n }\n </div>\n </div><!-- /card-clickable -->\n\n <!-- Delete confirmation overlay -->\n @if (IsDeleteConfirming(summary.Integration.ID)) {\n <div class=\"delete-confirm-overlay\">\n <div class=\"delete-confirm-content\">\n <i class=\"fa-solid fa-triangle-exclamation delete-warn-icon\"></i>\n <span class=\"delete-confirm-text\">Delete this integration and all its entity maps?</span>\n <div class=\"delete-confirm-actions\">\n <button mjButton\n variant=\"danger\"\n [disabled]=\"IsDeleting\"\n (click)=\"ConfirmDelete(summary.Integration.ID)\">\n @if (IsDeleting) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Deleting...\n } @else {\n Delete\n }\n </button>\n <button mjButton variant=\"outline\" (click)=\"CancelDelete()\">\n Cancel\n </button>\n </div>\n </div>\n </div>\n }\n\n <!-- Card footer -->\n <div class=\"card-footer\">\n <button mjButton\n variant=\"outline\"\n [disabled]=\"!!TestingCardID\"\n (click)=\"TestExistingConnection(summary.Integration.ID)\">\n @if (IsTestingCard(summary.Integration.ID)) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else {\n Test\n }\n </button>\n <button mjButton variant=\"outline\" (click)=\"OnMenuAction('edit', summary)\">\n Configure\n </button>\n @if (IsConnectionActive(summary)) {\n <div class=\"sync-menu-wrapper\">\n <button mjButton variant=\"primary\"\n [disabled]=\"!!SyncingIntegrationID\"\n (click)=\"ToggleSyncMenu(summary.Integration.ID, $event)\">\n @if (IsSyncing(summary.Integration.ID)) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Syncing...\n } @else {\n <i class=\"fa-solid fa-arrows-rotate\"></i> Sync\n <i class=\"fa-solid fa-chevron-down sync-caret\"></i>\n }\n </button>\n @if (SyncMenuIntegrationID === summary.Integration.ID) {\n <div class=\"sync-dropdown\">\n <div class=\"sync-dropdown-group\">\n <span class=\"sync-dropdown-label\">Pull (External \u2192 MJ)</span>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(summary.Integration.ID, false, 'Pull', $event)\">\n <i class=\"fa-solid fa-arrow-down-to-line\"></i> Incremental Pull\n </button>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(summary.Integration.ID, true, 'Pull', $event)\">\n <i class=\"fa-solid fa-rotate\"></i> Full Pull\n </button>\n </div>\n <div class=\"sync-dropdown-group\">\n <span class=\"sync-dropdown-label\">Push (MJ \u2192 External)</span>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(summary.Integration.ID, false, 'Push', $event)\">\n <i class=\"fa-solid fa-arrow-up-from-line\"></i> Incremental Push\n </button>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(summary.Integration.ID, true, 'Push', $event)\">\n <i class=\"fa-solid fa-rotate\"></i> Full Push\n </button>\n </div>\n <div class=\"sync-dropdown-group\">\n <span class=\"sync-dropdown-label\">Bidirectional</span>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(summary.Integration.ID, false, 'Bidirectional', $event)\">\n <i class=\"fa-solid fa-arrows-rotate\"></i> Incremental Both\n </button>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(summary.Integration.ID, true, 'Bidirectional', $event)\">\n <i class=\"fa-solid fa-rotate\"></i> Full Both\n </button>\n </div>\n </div>\n }\n </div>\n }\n <button class=\"card-delete-btn\" (click)=\"OnMenuAction('delete', summary)\" title=\"Delete integration\">\n <i class=\"fa-solid fa-trash-can\"></i>\n </button>\n </div>\n </div>\n }\n\n <!-- New connection card -->\n <div class=\"connection-card new-connection-card\" (click)=\"OpenWizard()\">\n <div class=\"new-card-content\">\n <div class=\"new-card-icon\">\n <i class=\"fa-solid fa-plus\"></i>\n </div>\n <span class=\"new-card-label\">Add Integration</span>\n </div>\n </div>\n </div>\n }\n }\n\n <!-- ======================================================================\n DETAIL VIEW (entity maps for selected integration)\n ====================================================================== -->\n @if (!WizardOpen && SelectedSummary) {\n <div class=\"detail-view\">\n\n <!-- ================================================================\n ENTITY MAP EDITOR (field mapping detail for a selected map)\n ================================================================ -->\n @if (EditorEntityMap) {\n <app-visual-field-editor\n [EntityMap]=\"EditorEntityMap\"\n [CompanyIntegrationID]=\"SelectedSummary!.Integration.ID\"\n [RunViewProvider]=\"RunViewToUse\"\n (Close)=\"CloseEntityMapEditor()\">\n </app-visual-field-editor>\n\n <!-- ================================================================\n ENTITY MAPS LIST (shown when no editor map is selected)\n ================================================================ -->\n } @else {\n <!-- Detail header -->\n <div class=\"detail-header\">\n <button class=\"detail-back-btn\" (click)=\"CloseDetailView()\" title=\"Back to Integrations\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n </button>\n <div class=\"detail-header-info\">\n <div class=\"icon-circle\" [style.background-color]=\"GetIconBrandColor(SelectedSummary.Integration.Integration)\">\n <i [class]=\"GetIntegrationIcon(SelectedSummary.Integration.Integration)\" class=\"icon-large\"></i>\n </div>\n <div class=\"detail-header-text\">\n <h2 class=\"detail-title\">{{ SelectedSummary.Integration.Name }}</h2>\n <span class=\"detail-subtitle\">\n {{ SelectedSummary.Integration.Company }}\n <span class=\"meta-separator\">&middot;</span>\n {{ GetSourceTypeLabel(SelectedSummary) }}\n <span class=\"meta-separator\">&middot;</span>\n <span [class]=\"GetStatusBadgeClass(SelectedSummary)\">{{ GetStatusBadge(SelectedSummary) }}</span>\n </span>\n </div>\n </div>\n <div class=\"detail-header-actions\">\n <button class=\"detail-edit-btn\" (click)=\"OpenEditPanel(SelectedSummary)\" title=\"Configure\">\n <i class=\"fa-solid fa-pen-to-square\"></i>\n </button>\n @if (IsConnectionActive(SelectedSummary)) {\n <div class=\"sync-menu-wrapper\">\n <button mjButton variant=\"primary\"\n [disabled]=\"!!SyncingIntegrationID\"\n (click)=\"ToggleSyncMenu(SelectedSummary.Integration.ID, $event)\">\n @if (IsSyncing(SelectedSummary.Integration.ID)) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Syncing...\n } @else {\n <i class=\"fa-solid fa-arrows-rotate\"></i> Sync\n <i class=\"fa-solid fa-chevron-down sync-caret\"></i>\n }\n </button>\n @if (SyncMenuIntegrationID === SelectedSummary.Integration.ID) {\n <div class=\"sync-dropdown sync-dropdown-left\">\n <div class=\"sync-dropdown-group\">\n <span class=\"sync-dropdown-label\">Pull (External \u2192 MJ)</span>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(SelectedSummary.Integration.ID, false, 'Pull', $event)\">\n <i class=\"fa-solid fa-arrow-down-to-line\"></i> Incremental Pull\n </button>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(SelectedSummary.Integration.ID, true, 'Pull', $event)\">\n <i class=\"fa-solid fa-rotate\"></i> Full Pull\n </button>\n </div>\n <div class=\"sync-dropdown-group\">\n <span class=\"sync-dropdown-label\">Push (MJ \u2192 External)</span>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(SelectedSummary.Integration.ID, false, 'Push', $event)\">\n <i class=\"fa-solid fa-arrow-up-from-line\"></i> Incremental Push\n </button>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(SelectedSummary.Integration.ID, true, 'Push', $event)\">\n <i class=\"fa-solid fa-rotate\"></i> Full Push\n </button>\n </div>\n <div class=\"sync-dropdown-group\">\n <span class=\"sync-dropdown-label\">Bidirectional</span>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(SelectedSummary.Integration.ID, false, 'Bidirectional', $event)\">\n <i class=\"fa-solid fa-arrows-rotate\"></i> Incremental Both\n </button>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(SelectedSummary.Integration.ID, true, 'Bidirectional', $event)\">\n <i class=\"fa-solid fa-rotate\"></i> Full Both\n </button>\n </div>\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Schedule section -->\n <div class=\"schedule-section\">\n <div class=\"schedule-section-header\">\n <div class=\"schedule-section-title\">\n <i class=\"fa-solid fa-calendar-check\"></i>\n <span>Sync Schedule</span>\n </div>\n </div>\n @if (ScheduledJobID) {\n <mj-scheduled-job-summary\n [ScheduledJobID]=\"ScheduledJobID\"\n (EditRequested)=\"OpenSchedulePanel()\">\n </mj-scheduled-job-summary>\n } @else {\n <div class=\"schedule-empty\">\n <span class=\"schedule-empty-text\">No sync schedule configured</span>\n <button class=\"schedule-create-btn\" (click)=\"OpenSchedulePanel()\">\n <i class=\"fa-solid fa-plus\"></i>\n Schedule Sync\n </button>\n </div>\n }\n </div>\n\n <!-- Schedule slide panel -->\n <mj-scheduled-job-slide-panel\n [IsOpen]=\"ShowScheduleSlidePanel\"\n [ScheduledJobID]=\"ScheduledJobID\"\n [JobTypeID]=\"IntegrationSyncJobTypeID\"\n [DefaultConfiguration]=\"ScheduleDefaultConfiguration\"\n [HideJobType]=\"true\"\n (Close)=\"CloseSchedulePanel()\"\n (Saved)=\"OnScheduleSaved()\"\n (Deleted)=\"OnScheduleDeleted()\">\n </mj-scheduled-job-slide-panel>\n\n <!-- Entity maps toolbar -->\n <div class=\"detail-toolbar\">\n <div class=\"detail-toolbar-left\">\n <span class=\"detail-map-count\">\n {{ DetailEntityMaps.length }} entity map{{ DetailEntityMaps.length !== 1 ? 's' : '' }}\n <span class=\"meta-separator\">&middot;</span>\n {{ DetailActiveMapCount }} active\n </span>\n </div>\n <div class=\"detail-toolbar-right\">\n <div class=\"detail-search\">\n <i class=\"fa-solid fa-filter\"></i>\n <input type=\"text\"\n placeholder=\"Filter entity maps...\"\n [value]=\"DetailSearchTerm\"\n (input)=\"OnDetailSearch($event)\" />\n </div>\n <button class=\"add-map-btn\" (click)=\"ToggleCreateTablesPanel()\" [class.active]=\"ShowCreateTablesPanel\"\n title=\"Select source objects and create entity tables\">\n <i class=\"fa-solid fa-table\"></i> Create Tables\n </button>\n <button class=\"add-map-btn\" (click)=\"ToggleAutoMapPanel()\" [class.active]=\"ShowAutoMapPanel\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i> Auto-Map Schema\n </button>\n <button class=\"add-map-btn\" (click)=\"ToggleAddMapPanel()\" [class.active]=\"ShowAddMapPanel\">\n <i class=\"fa-solid fa-plus\"></i> Add Map\n </button>\n </div>\n </div>\n\n <!-- Sync result banner -->\n @if (SyncResult) {\n <div class=\"sync-result-banner\" [class.sync-success]=\"SyncResult.Success\" [class.sync-failure]=\"!SyncResult.Success\">\n @if (SyncResult.Success) {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else {\n <i class=\"fa-solid fa-circle-xmark\"></i>\n }\n <span>{{ SyncResult.Message || (SyncResult.Success ? 'Sync completed successfully' : 'Sync failed') }}</span>\n </div>\n }\n\n <!-- Auto-Map Schema panel -->\n @if (ShowAutoMapPanel) {\n <div class=\"add-map-panel\">\n <div class=\"auto-map-header\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i>\n <span>Auto-map all entities in a schema to this integration with 1:1 field mappings</span>\n </div>\n <div class=\"add-map-row\">\n <div class=\"add-map-field\">\n <label class=\"add-map-label\">Target Schema</label>\n <select class=\"add-map-select\" [(ngModel)]=\"AutoMapSelectedSchema\">\n <option [ngValue]=\"''\" disabled>Select schema...</option>\n @for (schema of AutoMapSchemas; track schema) {\n <option [value]=\"schema\">{{ schema }}</option>\n }\n </select>\n </div>\n\n <div class=\"add-map-direction-col\">\n <label class=\"add-map-label\">Direction</label>\n <div class=\"add-map-direction-btns\">\n <button [class.active]=\"AutoMapDirection === 'Pull'\" (click)=\"AutoMapDirection = 'Pull'\" title=\"Pull from source\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </button>\n <button [class.active]=\"AutoMapDirection === 'Bidirectional'\" (click)=\"AutoMapDirection = 'Bidirectional'\" title=\"Bidirectional sync\">\n <i class=\"fa-solid fa-right-left\"></i>\n </button>\n <button [class.active]=\"AutoMapDirection === 'Push'\" (click)=\"AutoMapDirection = 'Push'\" title=\"Push to source\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n </button>\n </div>\n </div>\n\n <div class=\"add-map-actions\">\n <button class=\"add-map-save-btn\"\n [disabled]=\"!CanAutoMap\"\n (click)=\"RunAutoMap()\">\n @if (IsAutoMapping) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Mapping...\n } @else {\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i> Auto-Map\n }\n </button>\n <button class=\"add-map-cancel-btn\" (click)=\"CloseAutoMapPanel()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n </div>\n\n @if (AutoMapResult) {\n <div class=\"auto-map-result\" [class.auto-map-success]=\"AutoMapResult.Errors.length === 0\"\n [class.auto-map-partial]=\"AutoMapResult.Errors.length > 0 && AutoMapResult.EntityMapsCreated > 0\"\n [class.auto-map-failure]=\"AutoMapResult.EntityMapsCreated === 0 && AutoMapResult.Errors.length > 0\">\n @if (AutoMapResult.EntityMapsCreated > 0) {\n <div class=\"auto-map-result-summary\">\n <i class=\"fa-solid fa-circle-check\"></i>\n Created {{ AutoMapResult.EntityMapsCreated }} entity map{{ AutoMapResult.EntityMapsCreated !== 1 ? 's' : '' }}\n with {{ AutoMapResult.FieldMapsCreated }} field map{{ AutoMapResult.FieldMapsCreated !== 1 ? 's' : '' }}\n </div>\n } @else if (AutoMapResult.Errors.length === 0) {\n <div class=\"auto-map-result-summary\">\n <i class=\"fa-solid fa-circle-info\"></i>\n All entities in this schema are already mapped.\n </div>\n }\n @if (AutoMapResult.Errors.length > 0) {\n <div class=\"auto-map-errors\">\n @for (err of AutoMapResult.Errors; track err) {\n <div class=\"auto-map-error\"><i class=\"fa-solid fa-triangle-exclamation\"></i> {{ err }}</div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Create Tables panel (select source objects \u2192 create entity tables) -->\n @if (ShowCreateTablesPanel) {\n <div class=\"add-map-panel\">\n <div class=\"auto-map-header\">\n <i class=\"fa-solid fa-table\"></i>\n <span>Select source objects to create as entity tables in your database</span>\n </div>\n\n <div class=\"add-map-row\">\n <div class=\"add-map-actions\">\n <button class=\"add-map-save-btn\"\n [disabled]=\"!CanCreateTables\"\n (click)=\"RunCreateTables()\">\n @if (IsCreatingTables) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Creating...\n } @else {\n <i class=\"fa-solid fa-table\"></i> Create {{ CreateTablesSelectedCount }} Table{{ CreateTablesSelectedCount !== 1 ? 's' : '' }}\n }\n </button>\n <button class=\"add-map-cancel-btn\" (click)=\"CloseCreateTablesPanel()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n </div>\n\n @if (IsLoadingCreateTablesObjects) {\n <mj-loading text=\"Loading source objects...\" size=\"small\"></mj-loading>\n } @else if (CreateTablesObjects.length === 0) {\n <div class=\"auto-map-result auto-map-success\">\n <i class=\"fa-solid fa-circle-info\"></i>\n No source objects available from this connector.\n </div>\n } @else {\n <div class=\"create-tables-filters\">\n <input type=\"text\"\n class=\"create-tables-search mj-input\"\n placeholder=\"Search by name or label...\"\n [(ngModel)]=\"CreateTablesSearch\" />\n </div>\n <div class=\"create-tables-list\">\n <div class=\"create-tables-select-all\">\n <label class=\"create-tables-checkbox\">\n <input type=\"checkbox\"\n [checked]=\"FilteredCreateTablesObjects.length > 0 && CreateTablesSelectedCount === FilteredCreateTablesObjects.length\"\n (change)=\"ToggleAllCreateTablesObjects($any($event.target).checked)\" />\n <span>Select All ({{ FilteredCreateTablesObjects.length }} of {{ CreateTablesObjects.length }})</span>\n </label>\n </div>\n @for (obj of FilteredCreateTablesObjects; track obj.Name) {\n <label class=\"create-tables-checkbox\">\n <input type=\"checkbox\" [(ngModel)]=\"obj.Selected\" />\n <span>{{ obj.Label }}</span>\n @if (obj.Label !== obj.Name) {\n <span class=\"create-tables-name-hint\">{{ obj.Name }}</span>\n }\n @if (obj.IsCustom) {\n <span class=\"create-tables-badge create-tables-badge-custom\">Custom</span>\n }\n @if (obj.AlreadyPersisted) {\n <span class=\"create-tables-badge create-tables-badge-registered\">Registered</span>\n }\n </label>\n }\n </div>\n }\n\n @if (CreateTablesResult) {\n <div class=\"auto-map-result\"\n [class.auto-map-success]=\"CreateTablesResult.Success\"\n [class.auto-map-failure]=\"!CreateTablesResult.Success\">\n @if (CreateTablesResult.Success) {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else {\n <i class=\"fa-solid fa-circle-xmark\"></i>\n }\n <span>{{ CreateTablesResult.Message }}</span>\n </div>\n }\n </div>\n }\n\n <!-- Add Entity Map inline form -->\n @if (ShowAddMapPanel) {\n <div class=\"add-map-panel\">\n <div class=\"add-map-row\">\n <div class=\"add-map-field\">\n <label class=\"add-map-label\">Source Object</label>\n @if (IsLoadingSourceObjects) {\n <div class=\"add-map-loading\"><i class=\"fa-solid fa-spinner fa-spin\"></i> Loading...</div>\n } @else if (AvailableSourceObjects.length === 0) {\n <div class=\"add-map-hint\">No source objects found in metadata</div>\n } @else {\n <select class=\"add-map-select\" [(ngModel)]=\"AddMapSourceObjectName\">\n <option [ngValue]=\"''\" disabled>Select source object...</option>\n @for (obj of AvailableSourceObjects; track obj.Name) {\n <option [value]=\"obj.Name\">{{ obj.Label || obj.Name }}</option>\n }\n </select>\n }\n </div>\n\n <div class=\"add-map-direction-col\">\n <label class=\"add-map-label\">Direction</label>\n <div class=\"add-map-direction-btns\">\n <button [class.active]=\"AddMapDirection === 'Pull'\" (click)=\"AddMapDirection = 'Pull'\" title=\"Pull from source\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </button>\n <button [class.active]=\"AddMapDirection === 'Bidirectional'\" (click)=\"AddMapDirection = 'Bidirectional'\" title=\"Bidirectional sync\">\n <i class=\"fa-solid fa-right-left\"></i>\n </button>\n <button [class.active]=\"AddMapDirection === 'Push'\" (click)=\"AddMapDirection = 'Push'\" title=\"Push to source\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n </button>\n </div>\n </div>\n\n <div class=\"add-map-field add-map-entity-field\">\n <label class=\"add-map-label\">MJ Entity</label>\n <div class=\"entity-picker-row\">\n <mj-tree-dropdown\n #entityTreeDropdown\n [BranchConfig]=\"EntityBranchConfig\"\n [LeafConfig]=\"EntityLeafConfig\"\n [Value]=\"AddMapEntityIDAsKey\"\n [SelectableTypes]=\"'leaf'\"\n [SelectionMode]=\"'single'\"\n [Placeholder]=\"'Search entities by schema...'\"\n [EnableSearch]=\"true\"\n (SelectionChange)=\"OnEntityTreeSelection($event)\">\n </mj-tree-dropdown>\n <button class=\"new-entity-btn\" (click)=\"OpenNewEntityDialog()\" title=\"Create new entity table\">\n <i class=\"fa-solid fa-plus\"></i> New\n </button>\n </div>\n </div>\n\n <div class=\"add-map-actions\">\n <button class=\"add-map-save-btn\"\n [disabled]=\"!CanSaveAddMap || IsSavingAddMap\"\n (click)=\"SaveAddMap()\">\n @if (IsSavingAddMap) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else {\n <i class=\"fa-solid fa-check\"></i> Add\n }\n </button>\n <button class=\"add-map-cancel-btn\" (click)=\"CloseAddMapPanel()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n </div>\n </div>\n }\n\n <!-- Entity maps table -->\n @if (IsDetailLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading entity maps...\"></mj-loading>\n </div>\n } @else if (DetailEntityMaps.length === 0 && !ShowAddMapPanel) {\n <div class=\"detail-empty\">\n <i class=\"fa-solid fa-cube\"></i>\n <h3>No entity maps configured</h3>\n <p>Entity maps define how external objects sync to MJ entities.</p>\n <button class=\"add-map-btn add-map-btn-lg\" (click)=\"ToggleAddMapPanel()\">\n <i class=\"fa-solid fa-plus\"></i> Add Your First Entity Map\n </button>\n </div>\n } @else if (DetailEntityMaps.length > 0) {\n <!-- Table header -->\n <div class=\"detail-table-head\">\n <span class=\"dt-col-toggle\">Sync</span>\n <span class=\"dt-col-source\">External Object</span>\n <span class=\"dt-col-direction\"></span>\n <span class=\"dt-col-dest\">MJ Entity</span>\n <span class=\"dt-col-meta\">Config</span>\n </div>\n\n <!-- Table body -->\n <div class=\"detail-table-body\">\n @for (em of DetailFilteredMaps; track em.ID) {\n <div class=\"detail-map-row\" [class.sync-disabled]=\"!em.SyncEnabled\" (click)=\"OnEntityMapClick(em)\">\n <span class=\"dt-col-toggle\" (click)=\"$event.stopPropagation()\">\n <label class=\"toggle-switch\" [title]=\"em.SyncEnabled ? 'Sync enabled' : 'Sync disabled'\">\n <input type=\"checkbox\"\n [checked]=\"em.SyncEnabled\"\n (change)=\"OnToggleMapEnabled(em, $event)\" />\n <span class=\"toggle-slider\"></span>\n </label>\n </span>\n <span class=\"dt-col-source\" [title]=\"em.ExternalObjectName\">\n {{ em.ExternalObjectLabel ?? em.ExternalObjectName }}\n </span>\n <span class=\"dt-col-direction\" (click)=\"$event.stopPropagation()\">\n <button class=\"direction-toggle\" [class]=\"DirectionBadgeClass(em.SyncDirection)\"\n (click)=\"CycleSyncDirection(em)\"\n [title]=\"'Click to change sync direction (currently: ' + em.SyncDirection + ')'\">\n {{ DirectionText(em.SyncDirection) }}\n </button>\n </span>\n <span class=\"dt-col-dest\" [title]=\"em.Entity\">\n {{ em.Entity }}\n </span>\n <span class=\"dt-col-meta\">\n @if (em.MatchStrategy) {\n <span class=\"detail-config-badge\" title=\"Match strategy configured\">\n <i class=\"fa-solid fa-link\"></i>\n </span>\n }\n <span class=\"detail-config-badge\" [title]=\"'Conflict: ' + em.ConflictResolution\">\n <i class=\"fa-solid fa-arrows-rotate\"></i>\n </span>\n <span class=\"map-edit-hint\">\n <i class=\"fa-solid fa-chevron-right\"></i>\n </span>\n </span>\n </div>\n } @empty {\n <div class=\"detail-table-empty\">\n No entity maps match your filter.\n </div>\n }\n </div>\n }\n }\n\n </div>\n }\n\n <!-- ======================================================================\n WIZARD (inline, replaces card grid when open)\n ====================================================================== -->\n @if (WizardOpen) {\n <div class=\"wizard-inline\">\n <!-- Wizard header -->\n <div class=\"wizard-header\">\n <button class=\"wizard-back-btn\" (click)=\"CloseWizard()\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n Back to Integrations\n </button>\n <h2 class=\"wizard-title\">New Integration</h2>\n </div>\n\n <!-- Step indicator -->\n <div class=\"step-indicator\">\n @for (step of WizardSteps; track step.Number) {\n <div class=\"step-item\" [class.step-active]=\"IsStepActive(step.Number)\" [class.step-completed]=\"IsStepCompleted(step.Number)\">\n <div class=\"step-circle\">\n @if (IsStepCompleted(step.Number)) {\n <i class=\"fa-solid fa-check\"></i>\n } @else {\n {{ step.Number }}\n }\n </div>\n <span class=\"step-label\">{{ step.Label }}</span>\n </div>\n @if (step.Number < WizardSteps.length) {\n <div class=\"step-line\" [class.step-line-active]=\"IsStepCompleted(step.Number)\"></div>\n }\n }\n </div>\n\n <!-- Step content -->\n <div class=\"wizard-body\">\n\n <!-- Step 1: Choose Integration -->\n @if (WizardStep === 1) {\n <div class=\"step-content\">\n <h3 class=\"step-title\">What system do you want to connect?</h3>\n <div class=\"search-bar\">\n <i class=\"fa-solid fa-search search-icon\"></i>\n <input type=\"text\"\n class=\"search-input\"\n placeholder=\"Search integrations...\"\n [(ngModel)]=\"SearchQuery\" />\n </div>\n\n @if (FilteredIntegrations.length === 0 && AvailableIntegrations.length === 0) {\n <div class=\"no-integrations\">\n <i class=\"fa-solid fa-puzzle-piece\"></i>\n <p>No integrations configured</p>\n <span class=\"no-integrations-hint\">Configure integration definitions in the admin area first.</span>\n </div>\n } @else if (FilteredIntegrations.length === 0) {\n <div class=\"no-integrations\">\n <i class=\"fa-solid fa-search\"></i>\n <p>No matching integrations</p>\n </div>\n } @else {\n <div class=\"integration-picker-grid\">\n @for (def of FilteredIntegrations; track def.ID) {\n <div class=\"integration-picker-card\"\n [class.picker-selected]=\"IsSelectedIntegration(def)\"\n (click)=\"SelectIntegration(def)\">\n <div class=\"picker-icon-circle\" [style.background-color]=\"GetIconBrandColor(def.Name)\">\n <i [class]=\"GetIntegrationIcon(def.Name, def.Get('Icon'))\"></i>\n </div>\n <div class=\"picker-name\">{{ def.Name }}</div>\n @if (def.Description) {\n <div class=\"picker-description\">{{ def.Description }}</div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Step 2: Configure Connection -->\n @if (WizardStep === 2) {\n <div class=\"step-content\">\n <h3 class=\"step-title\">Set up your connection</h3>\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"connectionName\">Connection Name</label>\n <input id=\"connectionName\"\n type=\"text\"\n class=\"form-input\"\n placeholder=\"e.g. Production HubSpot\"\n [(ngModel)]=\"ConnectionName\" />\n </div>\n\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"companySelect\">Company</label>\n @if (NeedsCompanyPicker) {\n <select id=\"companySelect\" class=\"form-input\" [(ngModel)]=\"SelectedCompanyID\">\n <option [ngValue]=\"null\" disabled>Select a company...</option>\n @for (company of Companies; track company.ID) {\n <option [value]=\"company.ID\">{{ company.Name }}</option>\n }\n </select>\n } @else if (Companies.length === 1) {\n <input type=\"text\" class=\"form-input\" [value]=\"Companies[0].Name\" disabled />\n } @else {\n <div class=\"form-hint\">No companies available. Create one in the admin area.</div>\n }\n </div>\n\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"connectionDescription\">Description <span class=\"optional-label\">(optional)</span></label>\n <textarea id=\"connectionDescription\"\n class=\"form-input form-textarea\"\n placeholder=\"Notes about this connection...\"\n [(ngModel)]=\"ConnectionDescription\"\n rows=\"3\"></textarea>\n </div>\n\n <!-- Credential section -->\n <div class=\"form-group\">\n <label class=\"form-label\">Credential</label>\n @if (SelectedCredential) {\n <div class=\"credential-selected\">\n <div class=\"credential-info\">\n <i class=\"fa-solid fa-key\"></i>\n <span>{{ SelectedCredential.Name }}</span>\n </div>\n <button class=\"credential-clear\" (click)=\"ClearCredential()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n } @else {\n <div class=\"credential-actions\">\n <button mjButton variant=\"outline\" (click)=\"ShowExistingCredentials()\">\n <i class=\"fa-solid fa-key\"></i>\n Choose Existing Credential\n </button>\n <button mjButton variant=\"outline\" (click)=\"OpenCredentialDialog()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create New Credential\n </button>\n </div>\n }\n\n @if (IsLoadingCredentials) {\n <div class=\"credential-loading\">\n <mj-loading text=\"Loading credentials...\" size=\"small\"></mj-loading>\n </div>\n }\n\n @if (!IsLoadingCredentials && ExistingCredentials.length > 0 && !SelectedCredential) {\n <div class=\"credential-list\">\n @for (cred of ExistingCredentials; track cred.ID) {\n <div class=\"credential-list-item\" (click)=\"SelectExistingCredential(cred)\">\n <i class=\"fa-solid fa-key\"></i>\n <span>{{ cred.Name }}</span>\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Step 3: Test Connection -->\n @if (WizardStep === 3) {\n <div class=\"step-content step-content-centered\">\n <h3 class=\"step-title\">Let's verify everything works</h3>\n\n @if (!TestResult && !IsTesting) {\n <div class=\"test-prompt\">\n <button mjButton\n variant=\"primary\"\n size=\"lg\"\n (click)=\"TestNewConnection()\">\n <i class=\"fa-solid fa-vial\"></i>\n Test Connection\n </button>\n <p class=\"test-hint\">We'll verify we can reach your system and authenticate.</p>\n </div>\n }\n\n @if (IsTesting) {\n <div class=\"test-running\">\n <div class=\"test-spinner\">\n <i class=\"fa-solid fa-spinner fa-spin fa-3x\"></i>\n </div>\n <p>Testing connection...</p>\n </div>\n }\n\n @if (TestResult) {\n <div class=\"test-result\" [class.test-result-success]=\"TestResult.Success\" [class.test-result-failure]=\"!TestResult.Success\">\n <div class=\"test-result-icon\">\n @if (TestResult.Success) {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else {\n <i class=\"fa-solid fa-circle-xmark\"></i>\n }\n </div>\n <div class=\"test-result-message\">{{ TestResult.Message }}</div>\n @if (TestResult.Success && TestResult.ServerVersion) {\n <div class=\"test-result-detail\">\n Server version: {{ TestResult.ServerVersion }}\n </div>\n }\n @if (!TestResult.Success) {\n <button mjButton variant=\"outline\" (click)=\"TestNewConnection()\" class=\"test-retry-btn\">\n <i class=\"fa-solid fa-rotate-right\"></i>\n Retry\n </button>\n }\n </div>\n }\n </div>\n }\n\n </div>\n\n <!-- Wizard footer -->\n <div class=\"wizard-footer\">\n <div class=\"footer-left\"></div>\n <div class=\"footer-right\">\n @if (WizardStep > 1) {\n <button mjButton variant=\"outline\" (click)=\"PreviousStep()\">\n Back\n </button>\n }\n <button mjButton\n variant=\"primary\"\n [disabled]=\"IsNextDisabled || IsSaving\"\n (click)=\"FinishWizard()\">\n @if (IsSaving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Saving...\n } @else {\n {{ NextButtonLabel }}\n }\n </button>\n </div>\n </div>\n </div>\n }\n\n</div>\n\n<!-- Edit panel (slide-in) -->\n<div class=\"edit-panel-backdrop\"\n [class.open]=\"EditPanelOpen\"\n (click)=\"CloseEditPanel()\"></div>\n<div class=\"edit-panel\" [class.open]=\"EditPanelOpen\">\n @if (EditingSummary) {\n <!-- Header -->\n <div class=\"edit-panel-header\">\n <div class=\"edit-panel-title\">\n <div class=\"edit-icon-circle\"\n [style.background-color]=\"GetIconBrandColor(EditingSummary.Integration.Integration)\">\n <i [class]=\"GetIntegrationIcon(EditingSummary.Integration.Integration, EditingSummary.Icon)\"></i>\n </div>\n <span>Configure Integration</span>\n </div>\n <button class=\"edit-close-btn\" (click)=\"CloseEditPanel()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n\n @if (IsEditLoading) {\n <div class=\"edit-panel-loading\">\n <mj-loading text=\"Loading...\" size=\"small\"></mj-loading>\n </div>\n } @else {\n <!-- Edit form -->\n <div class=\"edit-panel-body\">\n <div class=\"edit-form-group\">\n <label class=\"edit-form-label\">Connection Name</label>\n <input type=\"text\"\n class=\"edit-form-input\"\n [(ngModel)]=\"EditName\"\n placeholder=\"Connection name...\" />\n </div>\n\n <div class=\"edit-form-group\">\n <label class=\"edit-form-label\">Status</label>\n <div class=\"edit-toggle-row\">\n <label class=\"toggle-switch\">\n <input type=\"checkbox\" [(ngModel)]=\"EditIsActive\" />\n <span class=\"toggle-slider\"></span>\n </label>\n <span class=\"edit-toggle-label\" [class.active]=\"EditIsActive\">\n {{ EditIsActive ? 'Active' : 'Inactive' }}\n </span>\n </div>\n </div>\n\n <div class=\"edit-form-group\">\n <label class=\"edit-form-label\">Credential</label>\n @if (EditCredential) {\n <div class=\"edit-credential-selected\">\n <div class=\"edit-credential-info\">\n <i class=\"fa-solid fa-key\"></i>\n <span>{{ EditCredential.Name }}</span>\n </div>\n <button class=\"edit-credential-clear\" (click)=\"ClearEditCredential()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n } @else {\n <div class=\"edit-credential-actions\">\n <button mjButton variant=\"outline\" size=\"sm\" (click)=\"OpenEditCredentialDialog()\">\n <i class=\"fa-solid fa-plus\"></i> New Credential\n </button>\n </div>\n @if (EditCredentials.length > 0) {\n <div class=\"edit-credential-list\">\n @for (cred of EditCredentials; track cred.ID) {\n <div class=\"edit-credential-item\" (click)=\"SelectEditCredential(cred)\">\n <i class=\"fa-solid fa-key\"></i>\n <span>{{ cred.Name }}</span>\n </div>\n }\n </div>\n }\n }\n </div>\n\n <div class=\"edit-form-group\">\n <label class=\"edit-form-label\">Integration</label>\n <div class=\"edit-readonly-field\">\n {{ EditingSummary.Integration.Integration }}\n </div>\n </div>\n\n <div class=\"edit-form-group\">\n <label class=\"edit-form-label\">Company</label>\n <div class=\"edit-readonly-field\">\n {{ EditingSummary.Integration.Company }}\n </div>\n </div>\n </div>\n\n <!-- Footer -->\n <div class=\"edit-panel-footer\">\n <button mjButton\n variant=\"primary\"\n [disabled]=\"IsEditSaving || !EditName.trim()\"\n (click)=\"SaveEditChanges()\">\n @if (IsEditSaving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Saving...\n } @else {\n Save Changes\n }\n </button>\n <button mjButton variant=\"outline\" (click)=\"CloseEditPanel()\">\n Cancel\n </button>\n </div>\n }\n }\n</div>\n\n<!-- Credential dialog (shared between wizard and edit panel) -->\n@if (ShowCredentialDialog) {\n <mj-credential-dialog\n [Visible]=\"true\"\n [PreselectedTypeId]=\"PreselectedCredentialTypeId\"\n (close)=\"EditPanelOpen ? OnEditCredentialDialogClose($event) : OnCredentialDialogClose($event)\">\n </mj-credential-dialog>\n}\n\n<!-- New Entity dialog -->\n@if (ShowCreateEntity) {\n <div class=\"new-entity-backdrop\" (click)=\"CloseNewEntityDialog()\"></div>\n <div class=\"new-entity-dialog\">\n <div class=\"new-entity-dialog-header\">\n <h3>Create New Entity Table</h3>\n <button class=\"new-entity-dialog-close\" (click)=\"CloseNewEntityDialog()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n <div class=\"new-entity-dialog-body\">\n <p class=\"new-entity-dialog-desc\">\n Generate a SQL migration to create a new database table for this integration's data.\n After running the migration and CodeGen, the new entity will appear in the entity picker.\n </p>\n\n <div class=\"new-entity-dialog-form\">\n <div class=\"new-entity-dialog-row\">\n <div class=\"new-entity-dialog-field\">\n <label class=\"new-entity-dialog-label\">Source Object</label>\n <div class=\"new-entity-dialog-value\">\n @if (AddMapSourceObjectName) {\n {{ AddMapSourceObjectName }}\n } @else {\n <span class=\"new-entity-dialog-hint\">Select a source object in the Add Map form first</span>\n }\n </div>\n </div>\n </div>\n <div class=\"new-entity-dialog-row\">\n <div class=\"new-entity-dialog-field\">\n <label class=\"new-entity-dialog-label\">Schema</label>\n <input type=\"text\"\n class=\"new-entity-dialog-input\"\n placeholder=\"e.g. hubspot\"\n [(ngModel)]=\"NewEntitySchema\" />\n </div>\n <span class=\"new-entity-dialog-dot\">.</span>\n <div class=\"new-entity-dialog-field new-entity-dialog-field-wide\">\n <label class=\"new-entity-dialog-label\">Table Name</label>\n <input type=\"text\"\n class=\"new-entity-dialog-input\"\n placeholder=\"e.g. Contact\"\n [(ngModel)]=\"NewEntityTable\" />\n </div>\n </div>\n </div>\n\n @if (DDLPreviewWarnings.length > 0) {\n <div class=\"ddl-warnings\">\n @for (warn of DDLPreviewWarnings; track warn) {\n <div class=\"ddl-warning\"><i class=\"fa-solid fa-triangle-exclamation\"></i> {{ warn }}</div>\n }\n </div>\n }\n\n @if (DDLPreview) {\n <div class=\"ddl-preview-block\">\n <div class=\"ddl-preview-header\">\n <span>SQL Preview</span>\n <button class=\"ddl-copy-btn\" (click)=\"CopyDDLToClipboard()\" title=\"Copy to clipboard\">\n @if (DDLCopied) {\n <i class=\"fa-solid fa-check\"></i> Copied\n } @else {\n <i class=\"fa-regular fa-copy\"></i> Copy\n }\n </button>\n </div>\n <pre class=\"ddl-preview-code\">{{ DDLPreview }}</pre>\n </div>\n }\n\n @if (DDLPreview) {\n <div class=\"new-entity-next-steps\">\n <h4><i class=\"fa-solid fa-list-check\"></i> Next Steps</h4>\n <ol>\n <li>Copy the SQL above and save it as a migration file</li>\n <li>Run the migration against your database</li>\n <li>Run CodeGen to register the new entity in MemberJunction</li>\n <li>Refresh the page &mdash; the new entity will appear in the entity picker</li>\n </ol>\n </div>\n }\n </div>\n <div class=\"new-entity-dialog-footer\">\n <button class=\"new-entity-preview-btn\"\n [disabled]=\"!CanGenerateSQL || IsGeneratingDDL\"\n (click)=\"PreviewDDL()\">\n @if (IsGeneratingDDL) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Generating...\n } @else {\n <i class=\"fa-solid fa-code\"></i> Generate SQL\n }\n </button>\n <button class=\"new-entity-dialog-done-btn\" (click)=\"CloseNewEntityDialog()\">\n Done\n </button>\n </div>\n </div>\n}\n </mj-page-body>\n</mj-page-layout>\n", styles: ["/* ---------------------------------------------------------------------------\n Host & Container \u2014 flex chain for scrollable detail view\n --------------------------------------------------------------------------- */\n\n:host {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n/* Slot passthrough now in <mj-page-header>; stat badges now via <mj-stat-badge>. */\n\n.connections-container {\n padding: 24px;\n max-width: 1400px;\n width: 100%;\n margin: 0 auto;\n flex: 1;\n display: flex;\n flex-direction: column;\n min-height: 0;\n overflow-y: auto;\n box-sizing: border-box;\n}\n\n/* When detail or editor view is active, prevent container scrolling\n so the inner .detail-table-body handles its own scroll */\n.connections-container.detail-active,\n.connections-container.editor-active {\n overflow: hidden;\n}\n\n/* ---------------------------------------------------------------------------\n Loading & Empty States\n --------------------------------------------------------------------------- */\n\n.loading-container {\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 300px;\n}\n\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n min-height: 400px;\n text-align: center;\n color: var(--mj-text-muted);\n}\n\n.empty-icon {\n font-size: 48px;\n color: var(--mj-text-disabled);\n margin-bottom: 16px;\n}\n\n.empty-state h3 {\n font-size: 20px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin: 0 0 8px;\n}\n\n.empty-state p {\n font-size: 14px;\n margin: 0 0 24px;\n}\n\n/* ---------------------------------------------------------------------------\n Card Grid\n --------------------------------------------------------------------------- */\n\n.card-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));\n gap: 20px;\n}\n\n/* ---------------------------------------------------------------------------\n Connection Card\n --------------------------------------------------------------------------- */\n\n.connection-card {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);\n transition: box-shadow 0.2s ease, transform 0.2s ease;\n display: flex;\n flex-direction: column;\n position: relative;\n overflow: hidden;\n}\n\n.connection-card:hover {\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n transform: translateY(-2px);\n}\n\n/* Card Header */\n.card-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 16px 0;\n}\n\n.icon-circle {\n width: 48px;\n height: 48px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n flex-shrink: 0;\n}\n\n.icon-large {\n font-size: 22px;\n}\n\n/* Status Badge */\n.status-badge {\n font-size: 12px;\n font-weight: 600;\n padding: 4px 10px;\n border-radius: 20px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.status-badge-connected {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success);\n}\n\n.status-badge-error {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error);\n}\n\n.status-badge-inactive {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-muted);\n}\n\n.status-badge-syncing {\n background: var(--mj-status-info-bg);\n color: var(--mj-brand-primary);\n}\n\n/* Card Body */\n.card-body {\n padding: 12px 16px;\n flex: 1;\n}\n\n.card-name {\n font-size: 18px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin-bottom: 2px;\n}\n\n.card-company {\n font-size: 14px;\n color: var(--mj-text-disabled);\n margin-bottom: 10px;\n}\n\n.card-meta {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-bottom: 6px;\n}\n\n.meta-separator {\n margin: 0 6px;\n}\n\n.meta-label {\n font-weight: 500;\n}\n\n.card-sync-info {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-bottom: 8px;\n}\n\n.card-sync-info i {\n margin-right: 4px;\n color: var(--mj-text-disabled);\n}\n\n/* Card inline test result */\n.card-test-result {\n font-size: 12px;\n padding: 6px 10px;\n border-radius: 6px;\n display: flex;\n align-items: center;\n gap: 6px;\n margin-top: 8px;\n}\n\n.card-test-result.test-success {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success);\n}\n\n.card-test-result.test-failure {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error);\n}\n\n.card-test-result span {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n/* Card Footer */\n.card-footer {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 16px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n.card-footer button {\n font-size: 13px;\n}\n\n/* Sync dropdown menu */\n.sync-menu-wrapper {\n position: relative;\n display: inline-flex;\n}\n\n.sync-caret {\n font-size: 10px;\n margin-left: 4px;\n opacity: 0.8;\n}\n\n.sync-dropdown {\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n z-index: 1000;\n background: var(--mj-bg-surface-elevated);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n box-shadow: 0 8px 24px rgba(0,0,0,0.12);\n min-width: 220px;\n overflow: hidden;\n}\n\n.sync-dropdown-left {\n left: auto;\n right: 0;\n}\n\n.sync-dropdown-group {\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.sync-dropdown-group:last-child {\n border-bottom: none;\n}\n\n.sync-dropdown-label {\n display: block;\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--mj-text-muted);\n padding: 0 12px 4px;\n}\n\n.sync-dropdown-item {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 7px 12px;\n background: none;\n border: none;\n cursor: pointer;\n font-size: 13px;\n color: var(--mj-text-primary);\n text-align: left;\n transition: background 0.12s;\n}\n\n.sync-dropdown-item:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.sync-dropdown-item i {\n width: 16px;\n text-align: center;\n color: var(--mj-text-secondary);\n flex-shrink: 0;\n}\n\n/* Card Delete Button */\n.card-delete-btn {\n margin-left: auto;\n background: none;\n border: 1px solid transparent;\n cursor: pointer;\n padding: 4px 8px;\n border-radius: 6px;\n color: var(--mj-text-disabled);\n font-size: 14px;\n transition: all 0.15s;\n}\n\n.card-delete-btn:hover {\n background: var(--mj-status-error-bg);\n border-color: var(--mj-status-error-border);\n color: var(--mj-status-error);\n}\n\n.menu-trigger:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-secondary);\n}\n\n.card-menu-dropdown {\n position: absolute;\n right: 0;\n top: 100%;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);\n min-width: 160px;\n z-index: 50;\n padding: 4px;\n}\n\n.menu-item {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 8px 12px;\n border: none;\n background: none;\n cursor: pointer;\n font-size: 13px;\n color: var(--mj-text-secondary);\n border-radius: 6px;\n transition: background 0.15s;\n text-align: left;\n}\n\n.menu-item:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.menu-item i {\n width: 16px;\n text-align: center;\n color: var(--mj-text-muted);\n}\n\n.menu-item-danger {\n color: var(--mj-status-error);\n}\n\n.menu-item-danger i {\n color: var(--mj-status-error);\n}\n\n.menu-item-danger:hover {\n background: var(--mj-status-error-bg);\n}\n\n/* ---------------------------------------------------------------------------\n New Connection Card\n --------------------------------------------------------------------------- */\n\n.new-connection-card {\n border: 2px dashed var(--mj-border-strong);\n background: var(--mj-bg-page);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 200px;\n transition: background 0.2s, border-color 0.2s;\n}\n\n.new-connection-card:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-brand-primary);\n box-shadow: none;\n transform: none;\n}\n\n.new-card-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n}\n\n.new-card-icon {\n width: 56px;\n height: 56px;\n border-radius: 50%;\n background: var(--mj-bg-surface-active);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 24px;\n color: var(--mj-text-muted);\n transition: background 0.2s, color 0.2s;\n}\n\n.new-connection-card:hover .new-card-icon {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.new-card-label {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-muted);\n}\n\n.new-connection-card:hover .new-card-label {\n color: var(--mj-brand-primary);\n}\n\n/* ---------------------------------------------------------------------------\n Wizard (inline, replaces card grid)\n --------------------------------------------------------------------------- */\n\n.wizard-inline {\n display: flex;\n flex-direction: column;\n height: 100%;\n max-width: 720px;\n margin: 0 auto;\n}\n\n/* Wizard Header */\n.wizard-header {\n display: flex;\n align-items: center;\n gap: 16px;\n padding: 0 0 20px;\n}\n\n.wizard-back-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n background: none;\n border: none;\n cursor: pointer;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-muted);\n padding: 6px 10px;\n border-radius: 6px;\n transition: background 0.15s, color 0.15s;\n}\n\n.wizard-back-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.wizard-title {\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0;\n}\n\n/* ---------------------------------------------------------------------------\n Step Indicator\n --------------------------------------------------------------------------- */\n\n.step-indicator {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 20px 32px;\n gap: 0;\n}\n\n.step-item {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 6px;\n position: relative;\n}\n\n.step-circle {\n width: 32px;\n height: 32px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 13px;\n font-weight: 600;\n background: var(--mj-bg-surface-active);\n color: var(--mj-text-disabled);\n border: 2px solid var(--mj-border-default);\n transition: all 0.2s;\n}\n\n.step-active .step-circle {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n\n.step-completed .step-circle {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n border-color: var(--mj-status-success);\n}\n\n.step-label {\n font-size: 11px;\n font-weight: 500;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n}\n\n.step-active .step-label {\n color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n.step-completed .step-label {\n color: var(--mj-status-success);\n}\n\n.step-line {\n width: 48px;\n height: 2px;\n background: var(--mj-border-default);\n margin: 0 8px;\n margin-bottom: 20px;\n transition: background 0.2s;\n}\n\n.step-line-active {\n background: var(--mj-status-success);\n}\n\n/* ---------------------------------------------------------------------------\n Wizard Body\n --------------------------------------------------------------------------- */\n\n.wizard-body {\n flex: 1;\n overflow-y: auto;\n padding: 0 24px 24px;\n}\n\n.step-content {\n min-height: 300px;\n}\n\n.step-content-centered {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n}\n\n.step-title {\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 20px;\n}\n\n.step-content-centered .step-title {\n margin-bottom: 32px;\n}\n\n/* Search bar */\n.search-bar {\n position: relative;\n margin-bottom: 20px;\n}\n\n.search-icon {\n position: absolute;\n left: 14px;\n top: 50%;\n transform: translateY(-50%);\n color: var(--mj-text-disabled);\n font-size: 14px;\n}\n\n.search-input {\n width: 100%;\n padding: 10px 14px 10px 40px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n font-size: 14px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n transition: border-color 0.2s, box-shadow 0.2s;\n box-sizing: border-box;\n}\n\n.search-input:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);\n}\n\n.search-input::placeholder {\n color: var(--mj-text-disabled);\n}\n\n/* No integrations */\n.no-integrations {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 48px 24px;\n color: var(--mj-text-disabled);\n text-align: center;\n}\n\n.no-integrations i {\n font-size: 36px;\n margin-bottom: 12px;\n}\n\n.no-integrations p {\n font-size: 16px;\n font-weight: 500;\n color: var(--mj-text-muted);\n margin: 0 0 4px;\n}\n\n.no-integrations-hint {\n font-size: 13px;\n}\n\n/* Integration picker grid */\n.integration-picker-grid {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 12px;\n}\n\n.integration-picker-card {\n border: 2px solid var(--mj-border-default);\n border-radius: 10px;\n padding: 16px;\n cursor: pointer;\n text-align: center;\n transition: border-color 0.2s, background 0.15s;\n}\n\n.integration-picker-card:hover {\n border-color: var(--mj-brand-primary);\n background: var(--mj-bg-page);\n}\n\n.integration-picker-card.picker-selected {\n border-color: var(--mj-brand-primary);\n background: var(--mj-status-info-bg);\n}\n\n.picker-icon-circle {\n width: 40px;\n height: 40px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n margin: 0 auto 10px;\n font-size: 18px;\n}\n\n.picker-name {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n}\n\n.picker-description {\n font-size: 12px;\n color: var(--mj-text-disabled);\n line-height: 1.3;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n\n/* ---------------------------------------------------------------------------\n Form Controls (Step 2)\n --------------------------------------------------------------------------- */\n\n.form-group {\n margin-bottom: 20px;\n}\n\n.form-label {\n display: block;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 6px;\n}\n\n.optional-label {\n font-weight: 400;\n color: var(--mj-text-disabled);\n}\n\n.form-input {\n width: 100%;\n padding: 10px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n font-size: 14px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n transition: border-color 0.2s, box-shadow 0.2s;\n box-sizing: border-box;\n}\n\n.form-input:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);\n}\n\n.form-input::placeholder {\n color: var(--mj-text-disabled);\n}\n\n.form-input:disabled {\n background: var(--mj-bg-page);\n color: var(--mj-text-muted);\n}\n\n.form-textarea {\n resize: vertical;\n min-height: 72px;\n}\n\n.form-hint {\n font-size: 13px;\n color: var(--mj-text-disabled);\n padding: 8px 0;\n}\n\n/* Credential section */\n.credential-selected {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 14px;\n background: var(--mj-status-success-bg);\n border: 1px solid var(--mj-status-success-border);\n border-radius: 8px;\n}\n\n.credential-info {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-status-success-text);\n font-size: 14px;\n font-weight: 500;\n}\n\n.credential-info i {\n color: var(--mj-status-success);\n}\n\n.credential-clear {\n background: none;\n border: none;\n cursor: pointer;\n color: var(--mj-text-disabled);\n font-size: 14px;\n padding: 4px;\n border-radius: 4px;\n transition: color 0.15s;\n}\n\n.credential-clear:hover {\n color: var(--mj-status-error);\n}\n\n.credential-actions {\n display: flex;\n gap: 8px;\n}\n\n.credential-actions button {\n font-size: 13px;\n}\n\n.credential-loading {\n padding: 16px 0;\n}\n\n.credential-list {\n margin-top: 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n}\n\n.credential-list-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n cursor: pointer;\n font-size: 14px;\n color: var(--mj-text-secondary);\n border-bottom: 1px solid var(--mj-border-subtle);\n transition: background 0.15s;\n}\n\n.credential-list-item:last-child {\n border-bottom: none;\n}\n\n.credential-list-item:hover {\n background: var(--mj-bg-page);\n}\n\n.credential-list-item i {\n color: var(--mj-text-disabled);\n}\n\n/* ---------------------------------------------------------------------------\n Test Connection (Step 3)\n --------------------------------------------------------------------------- */\n\n.test-prompt {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 16px;\n}\n\n.test-hint {\n font-size: 14px;\n color: var(--mj-text-disabled);\n margin: 0;\n}\n\n.test-running {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 16px;\n color: var(--mj-brand-primary);\n}\n\n.test-spinner {\n width: 64px;\n height: 64px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.test-running p {\n font-size: 15px;\n font-weight: 500;\n margin: 0;\n}\n\n/* Test result */\n.test-result {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n padding: 24px;\n border-radius: 12px;\n max-width: 400px;\n}\n\n.test-result-success {\n background: var(--mj-status-success-bg);\n}\n\n.test-result-failure {\n background: var(--mj-status-error-bg);\n}\n\n.test-result-icon {\n font-size: 48px;\n animation: scaleIn 0.3s ease-out;\n}\n\n.test-result-success .test-result-icon {\n color: var(--mj-status-success);\n}\n\n.test-result-failure .test-result-icon {\n color: var(--mj-status-error);\n}\n\n@keyframes scaleIn {\n from {\n transform: scale(0.5);\n opacity: 0;\n }\n to {\n transform: scale(1);\n opacity: 1;\n }\n}\n\n.test-result-message {\n font-size: 15px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n text-align: center;\n}\n\n.test-result-detail {\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.test-retry-btn {\n margin-top: 4px;\n}\n\n/* Toggle switch */\n.toggle-switch {\n position: relative;\n display: inline-block;\n width: 44px;\n height: 24px;\n flex-shrink: 0;\n}\n\n.toggle-switch input {\n opacity: 0;\n width: 0;\n height: 0;\n}\n\n.toggle-slider {\n position: absolute;\n cursor: pointer;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--mj-border-strong);\n border-radius: 24px;\n transition: background 0.2s;\n}\n\n.toggle-slider::before {\n content: '';\n position: absolute;\n height: 18px;\n width: 18px;\n left: 3px;\n bottom: 3px;\n background: var(--mj-bg-surface);\n border-radius: 50%;\n transition: transform 0.2s;\n}\n\n.toggle-switch input:checked + .toggle-slider {\n background: var(--mj-brand-primary);\n}\n\n.toggle-switch input:checked + .toggle-slider::before {\n transform: translateX(20px);\n}\n\n/* ---------------------------------------------------------------------------\n Wizard Footer\n --------------------------------------------------------------------------- */\n\n.wizard-footer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 24px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n.footer-left {\n display: flex;\n align-items: center;\n}\n\n.footer-right {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n/* ---------------------------------------------------------------------------\n Responsive\n --------------------------------------------------------------------------- */\n\n@media (max-width: 768px) {\n .connections-container {\n padding: 16px;\n }\n\n .card-grid {\n grid-template-columns: 1fr;\n }\n\n .integration-picker-grid {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .step-indicator {\n padding: 16px;\n overflow-x: auto;\n }\n\n .step-line {\n width: 24px;\n }\n\n .credential-actions {\n flex-direction: column;\n }\n}\n\n@media (max-width: 480px) {\n .integration-picker-grid {\n grid-template-columns: 1fr;\n }\n\n .card-footer {\n flex-wrap: wrap;\n }\n}\n\n/* ---------------------------------------------------------------------------\n Delete confirmation overlay\n --------------------------------------------------------------------------- */\n\n.delete-confirm-overlay {\n position: absolute;\n inset: 0;\n background: rgba(255, 255, 255, 0.95);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 5;\n border-radius: 12px;\n animation: fadeIn 150ms ease;\n}\n\n@keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n.delete-confirm-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 10px;\n padding: 20px;\n text-align: center;\n}\n\n.delete-warn-icon {\n font-size: 28px;\n color: var(--mj-status-error);\n}\n\n.delete-confirm-text {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n max-width: 220px;\n}\n\n.delete-confirm-actions {\n display: flex;\n gap: 8px;\n margin-top: 4px;\n}\n\n/* ---------------------------------------------------------------------------\n Edit panel (slide-in)\n --------------------------------------------------------------------------- */\n\n.edit-panel-backdrop {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.1);\n z-index: 99;\n opacity: 0;\n pointer-events: none;\n transition: opacity 300ms ease;\n}\n\n.edit-panel-backdrop.open {\n opacity: 1;\n pointer-events: auto;\n}\n\n.edit-panel {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n width: 400px;\n max-width: 100%;\n background: var(--mj-bg-surface);\n border-left: 1px solid var(--mj-border-default);\n box-shadow: -8px 0 24px rgba(0, 0, 0, 0.08);\n z-index: 100;\n transform: translateX(100%);\n transition: transform 300ms cubic-bezier(0.4, 0, 0.2, 1);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.edit-panel.open {\n transform: translateX(0);\n}\n\n.edit-panel-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.edit-panel-title {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.edit-icon-circle {\n width: 32px;\n height: 32px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n font-size: 14px;\n}\n\n.edit-close-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n border: none;\n border-radius: 6px;\n background: transparent;\n color: var(--mj-text-disabled);\n cursor: pointer;\n font-size: 14px;\n transition: all 150ms ease;\n}\n\n.edit-close-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-secondary);\n}\n\n.edit-panel-loading {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 48px 20px;\n}\n\n.edit-panel-body {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n\n.edit-form-group {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.edit-form-label {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.edit-form-input {\n height: 36px;\n padding: 0 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 14px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n outline: none;\n transition: border-color 150ms ease;\n}\n\n.edit-form-input:focus {\n border-color: var(--mj-brand-primary);\n}\n\n.edit-readonly-field {\n padding: 8px 12px;\n background: var(--mj-bg-page);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.edit-toggle-row {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.edit-toggle-label {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-disabled);\n}\n\n.edit-toggle-label.active {\n color: var(--mj-status-success);\n}\n\n.edit-credential-selected {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-page);\n}\n\n.edit-credential-info {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.edit-credential-info i {\n color: var(--mj-brand-primary);\n}\n\n.edit-credential-clear {\n width: 24px;\n height: 24px;\n border: none;\n border-radius: 4px;\n background: transparent;\n color: var(--mj-text-disabled);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n transition: all 150ms ease;\n}\n\n.edit-credential-clear:hover {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error);\n}\n\n.edit-credential-actions {\n display: flex;\n gap: 8px;\n}\n\n.edit-credential-list {\n display: flex;\n flex-direction: column;\n gap: 2px;\n margin-top: 6px;\n max-height: 180px;\n overflow-y: auto;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n}\n\n.edit-credential-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: background 150ms ease;\n}\n\n.edit-credential-item:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.edit-credential-item i {\n color: var(--mj-text-disabled);\n font-size: 12px;\n}\n\n.edit-panel-footer {\n display: flex;\n gap: 8px;\n padding: 16px 20px;\n border-top: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n/* ---------------------------------------------------------------------------\n Card clickable area\n --------------------------------------------------------------------------- */\n\n.card-clickable {\n cursor: pointer;\n}\n\n/* ---------------------------------------------------------------------------\n Detail View (entity maps for a selected integration)\n --------------------------------------------------------------------------- */\n\n.detail-view {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n.detail-header {\n display: flex;\n align-items: center;\n gap: 16px;\n padding-bottom: 20px;\n border-bottom: 1px solid var(--mj-border-subtle);\n margin-bottom: 16px;\n flex-wrap: wrap;\n}\n\n.detail-header-info {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n min-width: 0;\n}\n\n.detail-header-text {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n}\n\n.detail-title {\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.detail-subtitle {\n font-size: 13px;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 4px;\n flex-wrap: wrap;\n}\n\n.detail-header-actions {\n display: flex;\n gap: 8px;\n flex-shrink: 0;\n}\n\n/* Schedule section */\n.schedule-section {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n padding: 16px 20px;\n margin-bottom: 16px;\n}\n\n.schedule-section-header {\n margin-bottom: 12px;\n}\n\n.schedule-section-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 0.8rem;\n font-weight: 700;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n\n.schedule-section-title i {\n color: var(--mj-brand-primary);\n}\n\n.schedule-empty {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 0;\n}\n\n.schedule-empty-text {\n font-size: 0.85rem;\n color: var(--mj-text-disabled);\n}\n\n.schedule-create-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n background: linear-gradient(135deg, var(--mj-brand-primary) 0%, var(--mj-brand-primary-active) 100%);\n color: white;\n border: none;\n border-radius: 8px;\n cursor: pointer;\n font-size: 0.8rem;\n font-weight: 600;\n transition: all 0.2s ease;\n}\n\n.schedule-create-btn:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n}\n\n/* Detail toolbar */\n.detail-toolbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 12px;\n}\n\n.detail-toolbar-left {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.detail-map-count {\n font-size: 13px;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n.detail-search {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n}\n\n.detail-search i {\n color: var(--mj-text-disabled);\n font-size: 12px;\n}\n\n.detail-search input {\n border: none;\n outline: none;\n background: transparent;\n font-size: 13px;\n color: var(--mj-text-primary);\n width: 200px;\n}\n\n.detail-search input::placeholder {\n color: var(--mj-text-disabled);\n}\n\n/* Add Map button */\n.add-map-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface-card);\n color: var(--mj-brand-primary-hover);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 150ms ease;\n white-space: nowrap;\n}\n\n.add-map-btn:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-border-strong);\n}\n\n.add-map-btn.active {\n background: var(--mj-brand-primary);\n color: var(--mj-bg-surface);\n border-color: var(--mj-brand-primary);\n}\n\n.apply-all-btn {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n\n.apply-all-btn:hover {\n background: var(--mj-brand-primary-hover);\n border-color: var(--mj-brand-primary-hover);\n}\n\n.apply-all-btn:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.add-map-btn-lg {\n margin-top: 16px;\n padding: 10px 20px;\n font-size: 14px;\n}\n\n/* Add map inline panel */\n.add-map-panel {\n padding: 16px;\n margin-bottom: 12px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n animation: fadeIn 200ms ease;\n}\n\n.add-map-row {\n display: flex;\n align-items: flex-end;\n gap: 12px;\n}\n\n.add-map-field {\n flex: 1;\n min-width: 0;\n}\n\n.add-map-label {\n display: block;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n margin-bottom: 6px;\n}\n\n.add-map-select {\n width: 100%;\n height: 34px;\n padding: 0 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n outline: none;\n cursor: pointer;\n}\n\n.add-map-select:focus {\n border-color: var(--mj-brand-primary);\n}\n\n.add-map-direction-col {\n flex-shrink: 0;\n}\n\n.add-map-direction-btns {\n display: flex;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.add-map-direction-btns button {\n padding: 7px 12px;\n border: none;\n background: var(--mj-bg-surface);\n color: var(--mj-text-muted);\n font-size: 13px;\n cursor: pointer;\n transition: all 150ms ease;\n border-right: 1px solid var(--mj-border-default);\n}\n\n.add-map-direction-btns button:last-child {\n border-right: none;\n}\n\n.add-map-direction-btns button:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.add-map-direction-btns button.active {\n background: var(--mj-brand-primary);\n color: var(--mj-bg-surface);\n}\n\n.add-map-actions {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n}\n\n.add-map-save-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 7px 16px;\n border: none;\n border-radius: 6px;\n background: var(--mj-brand-primary);\n color: var(--mj-bg-surface);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 150ms ease;\n white-space: nowrap;\n}\n\n.add-map-save-btn:hover {\n background: var(--mj-brand-primary-hover);\n}\n\n.add-map-save-btn:disabled {\n opacity: 0.5;\n cursor: default;\n}\n\n.add-map-cancel-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 34px;\n height: 34px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-muted);\n cursor: pointer;\n font-size: 13px;\n transition: all 150ms ease;\n}\n\n.add-map-cancel-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.add-map-loading {\n font-size: 12px;\n color: var(--mj-text-disabled);\n padding: 8px 0;\n}\n\n.add-map-loading i {\n color: var(--mj-brand-primary);\n margin-right: 4px;\n}\n\n.add-map-hint {\n font-size: 12px;\n color: var(--mj-text-disabled);\n padding: 8px 0;\n font-style: italic;\n}\n\n/* Entity field needs more room for tree dropdown */\n.add-map-entity-field {\n flex: 2;\n min-width: 280px;\n}\n\n/* Entity picker row: tree dropdown + New button side by side */\n.entity-picker-row {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n}\n\n.entity-picker-row mj-tree-dropdown {\n flex: 1;\n min-width: 0;\n}\n\n.new-entity-btn {\n flex-shrink: 0;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 7px 12px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-brand-primary);\n background: var(--mj-brand-primary-subtle);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-radius: 6px;\n cursor: pointer;\n white-space: nowrap;\n transition: all 0.15s ease;\n}\n\n.new-entity-btn:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n/* ---------------------------------------------------------------------------\n Sync Result Banner\n --------------------------------------------------------------------------- */\n\n.sync-result-banner {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n margin-bottom: 12px;\n animation: fadeIn 200ms ease;\n}\n\n.sync-result-banner.sync-success {\n background: var(--mj-status-success-bg);\n border: 1px solid var(--mj-status-success-border);\n color: var(--mj-status-success-text);\n}\n\n.sync-result-banner.sync-failure {\n background: var(--mj-status-error-bg);\n border: 1px solid var(--mj-status-error-border);\n color: var(--mj-status-error-text);\n}\n\n/* ---------------------------------------------------------------------------\n Auto-Map Schema Panel\n --------------------------------------------------------------------------- */\n\n.auto-map-header {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 12px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.auto-map-header i {\n color: var(--mj-brand-primary);\n}\n\n.auto-map-result {\n margin-top: 12px;\n padding: 10px 14px;\n border-radius: 6px;\n font-size: 13px;\n}\n\n.auto-map-result.auto-map-success {\n background: var(--mj-status-success-bg);\n border: 1px solid var(--mj-status-success-border);\n color: var(--mj-status-success-text);\n}\n\n.auto-map-result.auto-map-partial {\n background: var(--mj-status-warning-bg);\n border: 1px solid var(--mj-status-warning-border);\n color: var(--mj-status-warning-text);\n}\n\n.auto-map-result.auto-map-failure {\n background: var(--mj-status-error-bg);\n border: 1px solid var(--mj-status-error-border);\n color: var(--mj-status-error-text);\n}\n\n.auto-map-result-summary {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n}\n\n.auto-map-errors {\n margin-top: 6px;\n font-size: 12px;\n}\n\n.auto-map-error {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 2px 0;\n}\n\n/* ---------------------------------------------------------------------------\n New Entity Dialog\n --------------------------------------------------------------------------- */\n\n.new-entity-backdrop {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.4);\n z-index: 1000;\n animation: fadeIn 0.15s ease;\n}\n\n.new-entity-dialog {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 640px;\n max-width: 90vw;\n max-height: 85vh;\n background: var(--mj-bg-surface);\n border-radius: var(--mj-radius-lg);\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.2);\n z-index: 1001;\n display: flex;\n flex-direction: column;\n animation: fadeIn 0.2s ease;\n}\n\n.new-entity-dialog-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.new-entity-dialog-header h3 {\n margin: 0;\n font-size: var(--mj-text-base);\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.new-entity-dialog-close {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n padding: 0;\n font-size: var(--mj-text-sm);\n color: var(--mj-text-secondary);\n background: transparent;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.new-entity-dialog-close:hover {\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-primary);\n}\n\n.new-entity-dialog-body {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.new-entity-dialog-desc {\n margin: 0;\n font-size: 13px;\n color: var(--mj-text-secondary);\n line-height: 1.5;\n}\n\n.new-entity-dialog-form {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.new-entity-dialog-row {\n display: flex;\n align-items: flex-end;\n gap: 8px;\n}\n\n.new-entity-dialog-field {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 120px;\n}\n\n.new-entity-dialog-field-wide {\n flex: 1;\n}\n\n.new-entity-dialog-label {\n font-size: var(--mj-text-xs);\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.new-entity-dialog-input {\n padding: 8px 12px;\n font-size: var(--mj-text-sm);\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-md);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n transition: border-color 0.15s ease;\n}\n\n.new-entity-dialog-input:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 2px rgba(99, 102, 241, 0.1);\n}\n\n.new-entity-dialog-dot {\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-secondary);\n padding-bottom: 6px;\n user-select: none;\n}\n\n.new-entity-dialog-value {\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-primary);\n padding: 8px 0 4px;\n}\n\n.new-entity-dialog-hint {\n font-style: italic;\n color: var(--mj-text-disabled);\n font-weight: 400;\n}\n\n.new-entity-dialog-footer {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 8px;\n padding: 12px 20px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n.new-entity-preview-btn {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 8px 16px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n background: var(--mj-brand-primary);\n border: none;\n border-radius: 6px;\n cursor: pointer;\n white-space: nowrap;\n transition: background 0.15s ease;\n}\n\n.new-entity-preview-btn:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n}\n\n.new-entity-preview-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.new-entity-dialog-done-btn {\n display: inline-flex;\n align-items: center;\n padding: 8px 16px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n background: transparent;\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-md);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.new-entity-dialog-done-btn:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-text-disabled);\n}\n\n/* Next steps callout inside dialog */\n.new-entity-next-steps {\n background: var(--mj-brand-primary-subtle);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-radius: var(--mj-radius-md);\n padding: 14px 16px;\n}\n\n.new-entity-next-steps h4 {\n margin: 0 0 8px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-brand-primary-hover);\n}\n\n.new-entity-next-steps h4 i {\n margin-right: 6px;\n}\n\n.new-entity-next-steps ol {\n margin: 0;\n padding-left: 20px;\n font-size: 13px;\n color: var(--mj-brand-primary-hover);\n line-height: 1.7;\n}\n\n/* DDL copy button */\n.ddl-copy-btn {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n background: transparent;\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-sm);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.ddl-copy-btn:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-text-disabled);\n}\n\n/* DDL Preview */\n.ddl-warnings {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.ddl-warning {\n font-size: 12px;\n color: var(--mj-status-warning);\n background: var(--mj-status-warning-subtle);\n padding: 6px 10px;\n border-radius: var(--mj-radius-sm);\n border-left: 3px solid var(--mj-status-warning);\n}\n\n.ddl-warning i {\n margin-right: 4px;\n}\n\n.ddl-preview-block {\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n overflow: hidden;\n max-height: 300px;\n display: flex;\n flex-direction: column;\n}\n\n.ddl-preview-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n font-size: var(--mj-text-xs);\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.ddl-preview-code {\n margin: 0;\n padding: 12px 16px;\n font-size: 12px;\n font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', monospace;\n line-height: 1.6;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n overflow: auto;\n white-space: pre-wrap;\n word-break: break-word;\n flex: 1;\n}\n\n@keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n/* Detail empty state */\n.detail-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 64px 24px;\n text-align: center;\n color: var(--mj-text-disabled);\n}\n\n.detail-empty i {\n font-size: 36px;\n margin-bottom: 12px;\n color: var(--mj-text-disabled);\n}\n\n.detail-empty h3 {\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin: 0 0 6px;\n}\n\n.detail-empty p {\n font-size: 13px;\n margin: 0;\n max-width: 400px;\n}\n\n/* Detail table */\n.detail-table-head {\n display: flex;\n align-items: center;\n padding: 8px 16px;\n background: var(--mj-bg-page);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px 8px 0 0;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-text-secondary);\n}\n\n.detail-table-body {\n border: 1px solid var(--mj-border-default);\n border-top: none;\n border-radius: 0 0 8px 8px;\n overflow-y: auto;\n flex: 1;\n min-height: 0;\n}\n\n.detail-map-row {\n display: flex;\n align-items: center;\n padding: 10px 16px;\n border-bottom: 1px solid var(--mj-border-subtle);\n transition: background 0.15s;\n font-size: 13px;\n}\n\n.detail-map-row:last-child {\n border-bottom: none;\n}\n\n.detail-map-row:hover {\n background: var(--mj-bg-page);\n cursor: pointer;\n}\n\n.detail-map-row.sync-disabled {\n opacity: 0.5;\n}\n\n/* Column widths (shared between head and body) */\n.dt-col-toggle {\n width: 60px;\n flex-shrink: 0;\n}\n\n.dt-col-source {\n flex: 2;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.dt-col-direction {\n width: 80px;\n flex-shrink: 0;\n text-align: center;\n}\n\n.dt-col-dest {\n flex: 2;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--mj-text-primary);\n}\n\n.dt-col-meta {\n width: 80px;\n flex-shrink: 0;\n display: flex;\n align-items: center;\n gap: 6px;\n justify-content: flex-end;\n}\n\n/* Direction badge */\n.direction-badge {\n font-size: 11px;\n font-weight: 600;\n padding: 2px 8px;\n border-radius: 4px;\n white-space: nowrap;\n}\n\n/* Clickable direction toggle button */\nbutton.direction-toggle {\n border: 1px solid transparent;\n cursor: pointer;\n transition: border-color 0.15s, box-shadow 0.15s;\n}\nbutton.direction-toggle:hover {\n border-color: var(--mj-border-strong);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n}\n\n.direction-badge.pull {\n background: var(--mj-status-info-bg);\n color: var(--mj-brand-primary);\n}\n\n.direction-badge.push {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success);\n}\n\n.direction-badge.bidirectional {\n background: var(--mj-status-warning-subtle);\n color: var(--mj-status-warning);\n}\n\n/* Create Tables list */\n.create-tables-list {\n max-height: 300px;\n overflow-y: auto;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n margin-top: 8px;\n background: var(--mj-bg-surface);\n}\n.create-tables-select-all {\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n font-weight: 600;\n}\n.create-tables-checkbox {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 12px;\n cursor: pointer;\n font-size: 13px;\n color: var(--mj-text-primary);\n}\n.create-tables-checkbox:hover {\n background: var(--mj-bg-surface-hover);\n}\n.create-tables-checkbox input[type=\"checkbox\"] {\n width: 16px;\n height: 16px;\n cursor: pointer;\n}\n.create-tables-name-hint {\n color: var(--mj-text-muted);\n font-size: 11px;\n margin-left: 8px;\n}\n.create-tables-filters {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 8px 0;\n flex-wrap: wrap;\n}\n.create-tables-search {\n flex: 1 1 240px;\n min-width: 200px;\n}\n.create-tables-toggle {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n}\n.create-tables-toggle input[type=\"checkbox\"] {\n margin: 0;\n}\n.create-tables-badge {\n display: inline-block;\n margin-left: 6px;\n padding: 1px 6px;\n font-size: 10px;\n font-weight: 600;\n border-radius: 10px;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n line-height: 1.4;\n}\n.create-tables-badge-custom {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n.create-tables-badge-registered {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success-text);\n}\n.add-map-input {\n width: 100%;\n padding: 6px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n font-size: 13px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n}\n.add-map-input:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n/* Config badges */\n.detail-config-badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n border-radius: 4px;\n background: var(--mj-bg-surface-active);\n color: var(--mj-text-disabled);\n font-size: 11px;\n}\n\n/* Detail back button (icon-only) */\n.detail-back-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n font-size: 16px;\n transition: background 0.15s, color 0.15s, border-color 0.15s;\n flex-shrink: 0;\n}\n\n.detail-back-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-strong);\n}\n\n/* Detail edit button (icon-only) */\n.detail-edit-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n font-size: 14px;\n transition: background 0.15s, color 0.15s, border-color 0.15s;\n flex-shrink: 0;\n}\n\n.detail-edit-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-strong);\n}\n\n/* Chevron hint on entity map rows */\n.map-edit-hint {\n color: var(--mj-text-disabled);\n font-size: 11px;\n transition: color 0.15s;\n}\n\n.detail-map-row:hover .map-edit-hint {\n color: var(--mj-brand-primary);\n}\n\n/* Entity map editor header */\n.ve-header-title-inline {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 16px;\n font-weight: 600;\n}\n\n.ve-source-label {\n color: var(--mj-brand-primary);\n}\n\n.ve-direction-icon {\n color: var(--mj-text-disabled);\n font-size: 14px;\n}\n\n.ve-dest-label {\n color: var(--mj-status-success);\n}\n\n.ve-stat-inline {\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.ve-stat-inline strong {\n color: var(--mj-text-primary);\n font-weight: 600;\n}\n\n.detail-table-empty {\n padding: 24px;\n text-align: center;\n color: var(--mj-text-disabled);\n font-size: 13px;\n}\n\n/* ---------------------------------------------------------------------------\n Discovered Source Objects Section\n --------------------------------------------------------------------------- */\n\n.discovered-objects-section {\n margin: 12px 0;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n overflow: hidden;\n}\n\n.discovered-objects-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 14px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.discovered-objects-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.discovered-objects-title i {\n color: var(--mj-brand-primary);\n}\n\n.discovered-count {\n font-weight: 400;\n color: var(--mj-text-muted);\n font-size: 12px;\n}\n\n.discovered-objects-actions {\n display: flex;\n gap: 8px;\n}\n\n.discovered-action-btn {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n background: none;\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n padding: 3px 10px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: background 0.15s, color 0.15s;\n}\n\n.discovered-action-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.discovered-action-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.discovered-loading,\n.discovered-empty {\n padding: 16px;\n text-align: center;\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.discovered-loading i {\n margin-right: 6px;\n}\n\n.discovered-objects-list {\n max-height: 280px;\n overflow-y: auto;\n}\n\n.discovered-object-row {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 7px 14px;\n cursor: pointer;\n transition: background 0.1s;\n border-bottom: 1px solid var(--mj-border-subtle);\n font-size: 13px;\n}\n\n.discovered-object-row:last-child {\n border-bottom: none;\n}\n\n.discovered-object-row:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.discovered-object-row.selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n}\n\n.discovered-object-row input[type=\"checkbox\"] {\n flex-shrink: 0;\n width: 16px;\n height: 16px;\n accent-color: var(--mj-brand-primary);\n cursor: pointer;\n}\n\n.discovered-object-name {\n flex: 1;\n color: var(--mj-text-primary);\n font-weight: 500;\n}\n\n.discovered-object-api-name {\n flex: 1;\n color: var(--mj-text-muted);\n font-size: 12px;\n font-family: monospace;\n}\n\n.discovered-object-badges {\n display: flex;\n gap: 4px;\n}\n\n.discovered-badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n border-radius: 4px;\n font-size: 10px;\n}\n\n.discovered-badge.incremental {\n color: var(--mj-status-success);\n background: var(--mj-status-success-bg);\n}\n\n.discovered-badge.writable {\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n}\n"] }]
3136
+ args: [{ standalone: false, selector: 'app-integration-connections', template: "<mj-page-layout>\n <mj-page-header\n Title=\"Integrations\"\n Icon=\"fa-solid fa-plug\"\n Subtitle=\"Connected systems and data sources\">\n <!-- [meta] intentionally omitted \u2014 chrome slot discipline audit Task B.\n \"Connections.length integrations\" badge mirrored the visible card\n grid row count. -->\n <div actions>\n <mj-refresh-button [Loading]=\"IsLoading\" (Clicked)=\"LoadData()\"></mj-refresh-button>\n @if (!WizardOpen && !SelectedSummary) {\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"OpenWizard()\">\n <i class=\"fa-solid fa-plus\"></i> <span class=\"action-btn-label\">Add Integration</span>\n </button>\n }\n </div>\n </mj-page-header>\n\n <mj-page-body [Flex]=\"true\" [Padding]=\"false\">\n<!-- Main container -->\n<div class=\"connections-container\" [class.detail-active]=\"!!SelectedSummary\"\n [class.editor-active]=\"!!EditorEntityMap\">\n\n <!-- ======================================================================\n CARD GRID VIEW (shown when no wizard and no detail selected)\n ====================================================================== -->\n @if (!WizardOpen && !SelectedSummary) {\n <!-- Loading state -->\n @if (IsLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading integrations...\"></mj-loading>\n </div>\n }\n\n <!-- Empty state -->\n @if (!IsLoading && Connections.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-plug empty-icon\"></i>\n <h3>No integrations yet</h3>\n <p>Connect your first external system to start syncing data.</p>\n <button mjButton variant=\"primary\" (click)=\"OpenWizard()\">\n <i class=\"fa-solid fa-plus\"></i>\n Add Your First Integration\n </button>\n </div>\n }\n\n <!-- Card grid -->\n @if (!IsLoading && Connections.length > 0) {\n <div class=\"card-grid\">\n @for (summary of Connections; track summary.Integration.ID) {\n <div class=\"connection-card\">\n <!-- Card header + body: clickable to open detail view -->\n <div class=\"card-clickable\" (click)=\"SelectIntegrationCard(summary)\">\n <div class=\"card-header\">\n <div class=\"icon-circle\" [style.background-color]=\"GetIconBrandColor(summary.Integration.Integration)\">\n <i [class]=\"GetIntegrationIcon(summary.Integration.Integration, summary.Icon)\" class=\"icon-large\"></i>\n </div>\n <span [class]=\"GetStatusBadgeClass(summary)\">{{ GetStatusBadge(summary) }}</span>\n </div>\n\n <!-- Card body -->\n <div class=\"card-body\">\n <div class=\"card-name\">{{ summary.Integration.Name }}</div>\n <div class=\"card-company\">{{ summary.Integration.Company }}</div>\n <div class=\"card-meta\">\n <span class=\"meta-label\">{{ GetSourceTypeLabel(summary) }}</span>\n <span class=\"meta-separator\">&middot;</span>\n <span class=\"meta-value\">{{ GetCredentialHint(summary) }}</span>\n </div>\n <div class=\"card-sync-info\">\n <i class=\"fa-solid fa-arrows-rotate\"></i>\n Syncing {{ GetEntityMapCount(summary.Integration.ID) }} entities\n </div>\n\n <!-- Inline test result -->\n @if (GetCardTestResult(summary.Integration.ID); as testResult) {\n <div class=\"card-test-result\" [class.test-success]=\"testResult.Success\" [class.test-failure]=\"!testResult.Success\">\n @if (testResult.Success) {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else {\n <i class=\"fa-solid fa-circle-xmark\"></i>\n }\n <span>{{ testResult.Message }}</span>\n </div>\n }\n </div>\n </div><!-- /card-clickable -->\n\n <!-- Delete confirmation overlay -->\n @if (IsDeleteConfirming(summary.Integration.ID)) {\n <div class=\"delete-confirm-overlay\">\n <div class=\"delete-confirm-content\">\n <i class=\"fa-solid fa-triangle-exclamation delete-warn-icon\"></i>\n <span class=\"delete-confirm-text\">Delete this integration and all its entity maps?</span>\n <div class=\"delete-confirm-actions\">\n <button mjButton\n variant=\"danger\"\n [disabled]=\"IsDeleting\"\n (click)=\"ConfirmDelete(summary.Integration.ID)\">\n @if (IsDeleting) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Deleting...\n } @else {\n Delete\n }\n </button>\n <button mjButton variant=\"outline\" (click)=\"CancelDelete()\">\n Cancel\n </button>\n </div>\n </div>\n </div>\n }\n\n <!-- Card footer -->\n <div class=\"card-footer\">\n <button mjButton\n variant=\"outline\"\n [disabled]=\"!!TestingCardID\"\n (click)=\"TestExistingConnection(summary.Integration.ID)\">\n @if (IsTestingCard(summary.Integration.ID)) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else {\n Test\n }\n </button>\n <button mjButton variant=\"outline\" (click)=\"OnMenuAction('edit', summary)\">\n Configure\n </button>\n @if (IsConnectionActive(summary)) {\n <div class=\"sync-menu-wrapper\">\n <button mjButton variant=\"primary\"\n [disabled]=\"!!SyncingIntegrationID\"\n (click)=\"ToggleSyncMenu(summary.Integration.ID, $event)\">\n @if (IsSyncing(summary.Integration.ID)) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Syncing...\n } @else {\n <i class=\"fa-solid fa-arrows-rotate\"></i> Sync\n <i class=\"fa-solid fa-chevron-down sync-caret\"></i>\n }\n </button>\n @if (SyncMenuIntegrationID === summary.Integration.ID) {\n <div class=\"sync-dropdown\">\n <div class=\"sync-dropdown-group\">\n <span class=\"sync-dropdown-label\">Pull (External \u2192 MJ)</span>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(summary.Integration.ID, false, 'Pull', $event)\">\n <i class=\"fa-solid fa-arrow-down-to-line\"></i> Incremental Pull\n </button>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(summary.Integration.ID, true, 'Pull', $event)\">\n <i class=\"fa-solid fa-rotate\"></i> Full Pull\n </button>\n </div>\n <div class=\"sync-dropdown-group\">\n <span class=\"sync-dropdown-label\">Push (MJ \u2192 External)</span>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(summary.Integration.ID, false, 'Push', $event)\">\n <i class=\"fa-solid fa-arrow-up-from-line\"></i> Incremental Push\n </button>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(summary.Integration.ID, true, 'Push', $event)\">\n <i class=\"fa-solid fa-rotate\"></i> Full Push\n </button>\n </div>\n <div class=\"sync-dropdown-group\">\n <span class=\"sync-dropdown-label\">Bidirectional</span>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(summary.Integration.ID, false, 'Bidirectional', $event)\">\n <i class=\"fa-solid fa-arrows-rotate\"></i> Incremental Both\n </button>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(summary.Integration.ID, true, 'Bidirectional', $event)\">\n <i class=\"fa-solid fa-rotate\"></i> Full Both\n </button>\n </div>\n </div>\n }\n </div>\n }\n <button class=\"card-delete-btn\" (click)=\"OnMenuAction('delete', summary)\" title=\"Delete integration\">\n <i class=\"fa-solid fa-trash-can\"></i>\n </button>\n </div>\n </div>\n }\n\n <!-- New connection card -->\n <div class=\"connection-card new-connection-card\" (click)=\"OpenWizard()\">\n <div class=\"new-card-content\">\n <div class=\"new-card-icon\">\n <i class=\"fa-solid fa-plus\"></i>\n </div>\n <span class=\"new-card-label\">Add Integration</span>\n </div>\n </div>\n </div>\n }\n }\n\n <!-- ======================================================================\n DETAIL VIEW (entity maps for selected integration)\n ====================================================================== -->\n @if (!WizardOpen && SelectedSummary) {\n <div class=\"detail-view\">\n\n <!-- ================================================================\n ENTITY MAP EDITOR (field mapping detail for a selected map)\n ================================================================ -->\n @if (EditorEntityMap) {\n <app-visual-field-editor\n [EntityMap]=\"EditorEntityMap\"\n [CompanyIntegrationID]=\"SelectedSummary!.Integration.ID\"\n [RunViewProvider]=\"RunViewToUse\"\n (Close)=\"CloseEntityMapEditor()\">\n </app-visual-field-editor>\n\n <!-- ================================================================\n ENTITY MAPS LIST (shown when no editor map is selected)\n ================================================================ -->\n } @else {\n <!-- Detail header -->\n <div class=\"detail-header\">\n <button class=\"detail-back-btn\" (click)=\"CloseDetailView()\" title=\"Back to Integrations\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n </button>\n <div class=\"detail-header-info\">\n <div class=\"icon-circle\" [style.background-color]=\"GetIconBrandColor(SelectedSummary.Integration.Integration)\">\n <i [class]=\"GetIntegrationIcon(SelectedSummary.Integration.Integration)\" class=\"icon-large\"></i>\n </div>\n <div class=\"detail-header-text\">\n <h2 class=\"detail-title\">{{ SelectedSummary.Integration.Name }}</h2>\n <span class=\"detail-subtitle\">\n {{ SelectedSummary.Integration.Company }}\n <span class=\"meta-separator\">&middot;</span>\n {{ GetSourceTypeLabel(SelectedSummary) }}\n <span class=\"meta-separator\">&middot;</span>\n <span [class]=\"GetStatusBadgeClass(SelectedSummary)\">{{ GetStatusBadge(SelectedSummary) }}</span>\n </span>\n </div>\n </div>\n <div class=\"detail-header-actions\">\n <button class=\"detail-edit-btn\" (click)=\"OpenEditPanel(SelectedSummary)\" title=\"Configure\">\n <i class=\"fa-solid fa-pen-to-square\"></i>\n </button>\n @if (IsConnectionActive(SelectedSummary)) {\n <div class=\"sync-menu-wrapper\">\n <button mjButton variant=\"primary\"\n [disabled]=\"!!SyncingIntegrationID\"\n (click)=\"ToggleSyncMenu(SelectedSummary.Integration.ID, $event)\">\n @if (IsSyncing(SelectedSummary.Integration.ID)) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Syncing...\n } @else {\n <i class=\"fa-solid fa-arrows-rotate\"></i> Sync\n <i class=\"fa-solid fa-chevron-down sync-caret\"></i>\n }\n </button>\n @if (SyncMenuIntegrationID === SelectedSummary.Integration.ID) {\n <div class=\"sync-dropdown sync-dropdown-left\">\n <div class=\"sync-dropdown-group\">\n <span class=\"sync-dropdown-label\">Pull (External \u2192 MJ)</span>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(SelectedSummary.Integration.ID, false, 'Pull', $event)\">\n <i class=\"fa-solid fa-arrow-down-to-line\"></i> Incremental Pull\n </button>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(SelectedSummary.Integration.ID, true, 'Pull', $event)\">\n <i class=\"fa-solid fa-rotate\"></i> Full Pull\n </button>\n </div>\n <div class=\"sync-dropdown-group\">\n <span class=\"sync-dropdown-label\">Push (MJ \u2192 External)</span>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(SelectedSummary.Integration.ID, false, 'Push', $event)\">\n <i class=\"fa-solid fa-arrow-up-from-line\"></i> Incremental Push\n </button>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(SelectedSummary.Integration.ID, true, 'Push', $event)\">\n <i class=\"fa-solid fa-rotate\"></i> Full Push\n </button>\n </div>\n <div class=\"sync-dropdown-group\">\n <span class=\"sync-dropdown-label\">Bidirectional</span>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(SelectedSummary.Integration.ID, false, 'Bidirectional', $event)\">\n <i class=\"fa-solid fa-arrows-rotate\"></i> Incremental Both\n </button>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(SelectedSummary.Integration.ID, true, 'Bidirectional', $event)\">\n <i class=\"fa-solid fa-rotate\"></i> Full Both\n </button>\n </div>\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Schedule section -->\n <div class=\"schedule-section\">\n <div class=\"schedule-section-header\">\n <div class=\"schedule-section-title\">\n <i class=\"fa-solid fa-calendar-check\"></i>\n <span>Sync Schedule</span>\n </div>\n </div>\n @if (ScheduledJobID) {\n <mj-scheduled-job-summary\n [ScheduledJobID]=\"ScheduledJobID\"\n (EditRequested)=\"OpenSchedulePanel()\">\n </mj-scheduled-job-summary>\n } @else {\n <div class=\"schedule-empty\">\n <span class=\"schedule-empty-text\">No sync schedule configured</span>\n <button class=\"schedule-create-btn\" (click)=\"OpenSchedulePanel()\">\n <i class=\"fa-solid fa-plus\"></i>\n Schedule Sync\n </button>\n </div>\n }\n </div>\n\n <!-- Schedule slide panel -->\n <mj-scheduled-job-slide-panel\n [IsOpen]=\"ShowScheduleSlidePanel\"\n [ScheduledJobID]=\"ScheduledJobID\"\n [JobTypeID]=\"IntegrationSyncJobTypeID\"\n [DefaultConfiguration]=\"ScheduleDefaultConfiguration\"\n [HideJobType]=\"true\"\n (Close)=\"CloseSchedulePanel()\"\n (Saved)=\"OnScheduleSaved()\"\n (Deleted)=\"OnScheduleDeleted()\">\n </mj-scheduled-job-slide-panel>\n\n <!-- Entity maps toolbar -->\n <div class=\"detail-toolbar\">\n <div class=\"detail-toolbar-left\">\n <span class=\"detail-map-count\">\n {{ DetailEntityMaps.length }} entity map{{ DetailEntityMaps.length !== 1 ? 's' : '' }}\n <span class=\"meta-separator\">&middot;</span>\n {{ DetailActiveMapCount }} active\n </span>\n </div>\n <div class=\"detail-toolbar-right\">\n <div class=\"detail-search\">\n <i class=\"fa-solid fa-filter\"></i>\n <input type=\"text\"\n placeholder=\"Filter entity maps...\"\n [value]=\"DetailSearchTerm\"\n (input)=\"OnDetailSearch($event)\" />\n </div>\n <button class=\"add-map-btn\" (click)=\"ToggleCreateTablesPanel()\" [class.active]=\"ShowCreateTablesPanel\"\n title=\"Select source objects and create entity tables\">\n <i class=\"fa-solid fa-table\"></i> Create Tables\n </button>\n <button class=\"add-map-btn\" (click)=\"ToggleAutoMapPanel()\" [class.active]=\"ShowAutoMapPanel\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i> Auto-Map Schema\n </button>\n <button class=\"add-map-btn\" (click)=\"ToggleAddMapPanel()\" [class.active]=\"ShowAddMapPanel\">\n <i class=\"fa-solid fa-plus\"></i> Add Map\n </button>\n </div>\n </div>\n\n <!-- Sync result banner -->\n @if (SyncResult) {\n <div class=\"sync-result-banner\" [class.sync-success]=\"SyncResult.Success\" [class.sync-failure]=\"!SyncResult.Success\">\n @if (SyncResult.Success) {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else {\n <i class=\"fa-solid fa-circle-xmark\"></i>\n }\n <span>{{ SyncResult.Message || (SyncResult.Success ? 'Sync completed successfully' : 'Sync failed') }}</span>\n </div>\n }\n\n <!-- Auto-Map Schema panel -->\n @if (ShowAutoMapPanel) {\n <div class=\"add-map-panel\">\n <div class=\"auto-map-header\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i>\n <span>Auto-map all entities in a schema to this integration with 1:1 field mappings</span>\n </div>\n <div class=\"add-map-row\">\n <div class=\"add-map-field\">\n <label class=\"add-map-label\">Target Schema</label>\n <select class=\"add-map-select\" [(ngModel)]=\"AutoMapSelectedSchema\">\n <option [ngValue]=\"''\" disabled>Select schema...</option>\n @for (schema of AutoMapSchemas; track schema) {\n <option [value]=\"schema\">{{ schema }}</option>\n }\n </select>\n </div>\n\n <div class=\"add-map-direction-col\">\n <label class=\"add-map-label\">Direction</label>\n <div class=\"add-map-direction-btns\">\n <button [class.active]=\"AutoMapDirection === 'Pull'\" (click)=\"AutoMapDirection = 'Pull'\" title=\"Pull from source\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </button>\n <button [class.active]=\"AutoMapDirection === 'Bidirectional'\" (click)=\"AutoMapDirection = 'Bidirectional'\" title=\"Bidirectional sync\">\n <i class=\"fa-solid fa-right-left\"></i>\n </button>\n <button [class.active]=\"AutoMapDirection === 'Push'\" (click)=\"AutoMapDirection = 'Push'\" title=\"Push to source\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n </button>\n </div>\n </div>\n\n <div class=\"add-map-actions\">\n <button class=\"add-map-save-btn\"\n [disabled]=\"!CanAutoMap\"\n (click)=\"RunAutoMap()\">\n @if (IsAutoMapping) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Mapping...\n } @else {\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i> Auto-Map\n }\n </button>\n <button class=\"add-map-cancel-btn\" (click)=\"CloseAutoMapPanel()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n </div>\n\n @if (AutoMapResult) {\n <div class=\"auto-map-result\" [class.auto-map-success]=\"AutoMapResult.Errors.length === 0\"\n [class.auto-map-partial]=\"AutoMapResult.Errors.length > 0 && AutoMapResult.EntityMapsCreated > 0\"\n [class.auto-map-failure]=\"AutoMapResult.EntityMapsCreated === 0 && AutoMapResult.Errors.length > 0\">\n @if (AutoMapResult.EntityMapsCreated > 0) {\n <div class=\"auto-map-result-summary\">\n <i class=\"fa-solid fa-circle-check\"></i>\n Created {{ AutoMapResult.EntityMapsCreated }} entity map{{ AutoMapResult.EntityMapsCreated !== 1 ? 's' : '' }}\n with {{ AutoMapResult.FieldMapsCreated }} field map{{ AutoMapResult.FieldMapsCreated !== 1 ? 's' : '' }}\n </div>\n } @else if (AutoMapResult.Errors.length === 0) {\n <div class=\"auto-map-result-summary\">\n <i class=\"fa-solid fa-circle-info\"></i>\n All entities in this schema are already mapped.\n </div>\n }\n @if (AutoMapResult.Errors.length > 0) {\n <div class=\"auto-map-errors\">\n @for (err of AutoMapResult.Errors; track err) {\n <div class=\"auto-map-error\"><i class=\"fa-solid fa-triangle-exclamation\"></i> {{ err }}</div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Create Tables panel (select source objects \u2192 create entity tables) -->\n @if (ShowCreateTablesPanel) {\n <div class=\"add-map-panel\">\n <div class=\"auto-map-header\">\n <i class=\"fa-solid fa-table\"></i>\n <span>Select source objects to create as entity tables in your database</span>\n </div>\n\n <div class=\"add-map-row\">\n <div class=\"add-map-actions\">\n <button class=\"add-map-save-btn\"\n [disabled]=\"!CanCreateTables\"\n (click)=\"RunCreateTables()\">\n @if (IsCreatingTables) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Creating...\n } @else {\n <i class=\"fa-solid fa-table\"></i> Create {{ CreateTablesSelectedCount }} Table{{ CreateTablesSelectedCount !== 1 ? 's' : '' }}\n }\n </button>\n <button class=\"add-map-cancel-btn\" (click)=\"CloseCreateTablesPanel()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n </div>\n\n @if (IsLoadingCreateTablesObjects) {\n <mj-loading text=\"Loading source objects...\" size=\"small\"></mj-loading>\n } @else if (CreateTablesObjects.length === 0) {\n <div class=\"auto-map-result auto-map-success\">\n <i class=\"fa-solid fa-circle-info\"></i>\n No source objects available from this connector.\n </div>\n } @else {\n <div class=\"create-tables-filters\">\n <input type=\"text\"\n class=\"create-tables-search mj-input\"\n placeholder=\"Search by name or label...\"\n [(ngModel)]=\"CreateTablesSearch\" />\n </div>\n <div class=\"create-tables-list\">\n <div class=\"create-tables-select-all\">\n <label class=\"create-tables-checkbox\">\n <input type=\"checkbox\"\n [checked]=\"FilteredCreateTablesObjects.length > 0 && CreateTablesSelectedCount === FilteredCreateTablesObjects.length\"\n (change)=\"ToggleAllCreateTablesObjects($any($event.target).checked)\" />\n <span>Select All ({{ FilteredCreateTablesObjects.length }} of {{ CreateTablesObjects.length }})</span>\n </label>\n </div>\n @for (obj of FilteredCreateTablesObjects; track obj.Name) {\n <label class=\"create-tables-checkbox\">\n <input type=\"checkbox\" [(ngModel)]=\"obj.Selected\" />\n <span>{{ obj.Label }}</span>\n @if (obj.Label !== obj.Name) {\n <span class=\"create-tables-name-hint\">{{ obj.Name }}</span>\n }\n @if (obj.IsCustom) {\n <span class=\"create-tables-badge create-tables-badge-custom\">Custom</span>\n }\n @if (obj.AlreadyPersisted) {\n <span class=\"create-tables-badge create-tables-badge-registered\">Registered</span>\n }\n </label>\n }\n </div>\n }\n\n @if (CreateTablesResult) {\n <div class=\"auto-map-result\"\n [class.auto-map-success]=\"CreateTablesResult.Success\"\n [class.auto-map-failure]=\"!CreateTablesResult.Success\">\n @if (CreateTablesResult.Success) {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else {\n <i class=\"fa-solid fa-circle-xmark\"></i>\n }\n <span>{{ CreateTablesResult.Message }}</span>\n </div>\n }\n </div>\n }\n\n <!-- Add Entity Map inline form -->\n @if (ShowAddMapPanel) {\n <div class=\"add-map-panel\">\n <div class=\"add-map-row\">\n <div class=\"add-map-field\">\n <label class=\"add-map-label\">Source Object</label>\n @if (IsLoadingSourceObjects) {\n <div class=\"add-map-loading\"><i class=\"fa-solid fa-spinner fa-spin\"></i> Loading...</div>\n } @else if (AvailableSourceObjects.length === 0) {\n <div class=\"add-map-hint\">No source objects found in metadata</div>\n } @else {\n <select class=\"add-map-select\" [(ngModel)]=\"AddMapSourceObjectName\">\n <option [ngValue]=\"''\" disabled>Select source object...</option>\n @for (obj of AvailableSourceObjects; track obj.Name) {\n <option [value]=\"obj.Name\">{{ obj.Label || obj.Name }}</option>\n }\n </select>\n }\n </div>\n\n <div class=\"add-map-direction-col\">\n <label class=\"add-map-label\">Direction</label>\n <div class=\"add-map-direction-btns\">\n <button [class.active]=\"AddMapDirection === 'Pull'\" (click)=\"AddMapDirection = 'Pull'\" title=\"Pull from source\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </button>\n <button [class.active]=\"AddMapDirection === 'Bidirectional'\" (click)=\"AddMapDirection = 'Bidirectional'\" title=\"Bidirectional sync\">\n <i class=\"fa-solid fa-right-left\"></i>\n </button>\n <button [class.active]=\"AddMapDirection === 'Push'\" (click)=\"AddMapDirection = 'Push'\" title=\"Push to source\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n </button>\n </div>\n </div>\n\n <div class=\"add-map-field add-map-entity-field\">\n <label class=\"add-map-label\">MJ Entity</label>\n <div class=\"entity-picker-row\">\n <mj-tree-dropdown\n #entityTreeDropdown\n [BranchConfig]=\"EntityBranchConfig\"\n [LeafConfig]=\"EntityLeafConfig\"\n [Value]=\"AddMapEntityIDAsKey\"\n [SelectableTypes]=\"'leaf'\"\n [SelectionMode]=\"'single'\"\n [Placeholder]=\"'Search entities by schema...'\"\n [EnableSearch]=\"true\"\n (SelectionChange)=\"OnEntityTreeSelection($event)\">\n </mj-tree-dropdown>\n <button class=\"new-entity-btn\" (click)=\"OpenNewEntityDialog()\" title=\"Create new entity table\">\n <i class=\"fa-solid fa-plus\"></i> New\n </button>\n </div>\n </div>\n\n <div class=\"add-map-actions\">\n <button class=\"add-map-save-btn\"\n [disabled]=\"!CanSaveAddMap || IsSavingAddMap\"\n (click)=\"SaveAddMap()\">\n @if (IsSavingAddMap) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else {\n <i class=\"fa-solid fa-check\"></i> Add\n }\n </button>\n <button class=\"add-map-cancel-btn\" (click)=\"CloseAddMapPanel()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n </div>\n </div>\n }\n\n <!-- Entity maps table -->\n @if (IsDetailLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading entity maps...\"></mj-loading>\n </div>\n } @else if (DetailEntityMaps.length === 0 && !ShowAddMapPanel) {\n <div class=\"detail-empty\">\n <i class=\"fa-solid fa-cube\"></i>\n <h3>No entity maps configured</h3>\n <p>Entity maps define how external objects sync to MJ entities.</p>\n <button class=\"add-map-btn add-map-btn-lg\" (click)=\"ToggleAddMapPanel()\">\n <i class=\"fa-solid fa-plus\"></i> Add Your First Entity Map\n </button>\n </div>\n } @else if (DetailEntityMaps.length > 0) {\n <!-- Table header -->\n <div class=\"detail-table-head\">\n <span class=\"dt-col-toggle\">Sync</span>\n <span class=\"dt-col-source\">External Object</span>\n <span class=\"dt-col-direction\"></span>\n <span class=\"dt-col-dest\">MJ Entity</span>\n <span class=\"dt-col-meta\">Config</span>\n </div>\n\n <!-- Table body -->\n <div class=\"detail-table-body\">\n @for (em of DetailFilteredMaps; track em.ID) {\n <div class=\"detail-map-row\" [class.sync-disabled]=\"!em.SyncEnabled\" (click)=\"OnEntityMapClick(em)\">\n <span class=\"dt-col-toggle\" (click)=\"$event.stopPropagation()\">\n <label class=\"toggle-switch\" [title]=\"em.SyncEnabled ? 'Sync enabled' : 'Sync disabled'\">\n <input type=\"checkbox\"\n [checked]=\"em.SyncEnabled\"\n (change)=\"OnToggleMapEnabled(em, $event)\" />\n <span class=\"toggle-slider\"></span>\n </label>\n </span>\n <span class=\"dt-col-source\" [title]=\"em.ExternalObjectName\">\n {{ em.ExternalObjectLabel ?? em.ExternalObjectName }}\n </span>\n <span class=\"dt-col-direction\" (click)=\"$event.stopPropagation()\">\n <button class=\"direction-toggle\" [class]=\"DirectionBadgeClass(em.SyncDirection)\"\n (click)=\"CycleSyncDirection(em)\"\n [title]=\"'Click to change sync direction (currently: ' + em.SyncDirection + ')'\">\n {{ DirectionText(em.SyncDirection) }}\n </button>\n </span>\n <span class=\"dt-col-dest\" [title]=\"em.Entity\">\n {{ em.Entity }}\n </span>\n <span class=\"dt-col-meta\">\n @if (em.MatchStrategy) {\n <span class=\"detail-config-badge\" title=\"Match strategy configured\">\n <i class=\"fa-solid fa-link\"></i>\n </span>\n }\n <span class=\"detail-config-badge\" [title]=\"'Conflict: ' + em.ConflictResolution\">\n <i class=\"fa-solid fa-arrows-rotate\"></i>\n </span>\n <span class=\"map-edit-hint\">\n <i class=\"fa-solid fa-chevron-right\"></i>\n </span>\n </span>\n </div>\n } @empty {\n <div class=\"detail-table-empty\">\n No entity maps match your filter.\n </div>\n }\n </div>\n }\n }\n\n </div>\n }\n\n <!-- ======================================================================\n WIZARD (inline, replaces card grid when open)\n ====================================================================== -->\n @if (WizardOpen) {\n <div class=\"wizard-inline\">\n <!-- Wizard header -->\n <div class=\"wizard-header\">\n <button class=\"wizard-back-btn\" (click)=\"CloseWizard()\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n Back to Integrations\n </button>\n <h2 class=\"wizard-title\">New Integration</h2>\n </div>\n\n <!-- Step indicator -->\n <div class=\"step-indicator\">\n @for (step of WizardSteps; track step.Number) {\n <div class=\"step-item\" [class.step-active]=\"IsStepActive(step.Number)\" [class.step-completed]=\"IsStepCompleted(step.Number)\">\n <div class=\"step-circle\">\n @if (IsStepCompleted(step.Number)) {\n <i class=\"fa-solid fa-check\"></i>\n } @else {\n {{ step.Number }}\n }\n </div>\n <span class=\"step-label\">{{ step.Label }}</span>\n </div>\n @if (step.Number < WizardSteps.length) {\n <div class=\"step-line\" [class.step-line-active]=\"IsStepCompleted(step.Number)\"></div>\n }\n }\n </div>\n\n <!-- Step content -->\n <div class=\"wizard-body\">\n\n <!-- Step 1: Choose Integration -->\n @if (WizardStep === 1) {\n <div class=\"step-content\">\n <h3 class=\"step-title\">What system do you want to connect?</h3>\n <div class=\"search-bar\">\n <i class=\"fa-solid fa-search search-icon\"></i>\n <input type=\"text\"\n class=\"search-input\"\n placeholder=\"Search integrations...\"\n [(ngModel)]=\"SearchQuery\" />\n </div>\n\n @if (FilteredIntegrations.length === 0 && AvailableIntegrations.length === 0) {\n <div class=\"no-integrations\">\n <i class=\"fa-solid fa-puzzle-piece\"></i>\n <p>No integrations configured</p>\n <span class=\"no-integrations-hint\">Configure integration definitions in the admin area first.</span>\n </div>\n } @else if (FilteredIntegrations.length === 0) {\n <div class=\"no-integrations\">\n <i class=\"fa-solid fa-search\"></i>\n <p>No matching integrations</p>\n </div>\n } @else {\n <div class=\"integration-picker-grid\">\n @for (def of FilteredIntegrations; track def.ID) {\n <div class=\"integration-picker-card\"\n [class.picker-selected]=\"IsSelectedIntegration(def)\"\n (click)=\"SelectIntegration(def)\">\n <div class=\"picker-icon-circle\" [style.background-color]=\"GetIconBrandColor(def.Name)\">\n <i [class]=\"GetIntegrationIcon(def.Name, def.Get('Icon'))\"></i>\n </div>\n <div class=\"picker-name\">{{ def.Name }}</div>\n @if (def.Description) {\n <div class=\"picker-description\">{{ def.Description }}</div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Step 2: Configure Connection -->\n @if (WizardStep === 2) {\n <div class=\"step-content\">\n <h3 class=\"step-title\">Set up your connection</h3>\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"connectionName\">Connection Name</label>\n <input id=\"connectionName\"\n type=\"text\"\n class=\"form-input\"\n placeholder=\"e.g. Production HubSpot\"\n [(ngModel)]=\"ConnectionName\" />\n </div>\n\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"companySelect\">Company</label>\n @if (NeedsCompanyPicker) {\n <select id=\"companySelect\" class=\"form-input\" [(ngModel)]=\"SelectedCompanyID\">\n <option [ngValue]=\"null\" disabled>Select a company...</option>\n @for (company of Companies; track company.ID) {\n <option [value]=\"company.ID\">{{ company.Name }}</option>\n }\n </select>\n } @else if (Companies.length === 1) {\n <input type=\"text\" class=\"form-input\" [value]=\"Companies[0].Name\" disabled />\n } @else {\n <div class=\"form-hint\">No companies available. Create one in the admin area.</div>\n }\n </div>\n\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"connectionDescription\">Description <span class=\"optional-label\">(optional)</span></label>\n <textarea id=\"connectionDescription\"\n class=\"form-input form-textarea\"\n placeholder=\"Notes about this connection...\"\n [(ngModel)]=\"ConnectionDescription\"\n rows=\"3\"></textarea>\n </div>\n\n <!-- Credential section -->\n <div class=\"form-group\">\n <label class=\"form-label\">Credential</label>\n @if (SelectedCredential) {\n <div class=\"credential-selected\">\n <div class=\"credential-info\">\n <i class=\"fa-solid fa-key\"></i>\n <span>{{ SelectedCredential.Name }}</span>\n </div>\n <button class=\"credential-clear\" (click)=\"ClearCredential()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n } @else {\n <div class=\"credential-actions\">\n <button mjButton variant=\"outline\" (click)=\"ShowExistingCredentials()\">\n <i class=\"fa-solid fa-key\"></i>\n Choose Existing Credential\n </button>\n <button mjButton variant=\"outline\" (click)=\"OpenCredentialDialog()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create New Credential\n </button>\n </div>\n }\n\n @if (IsLoadingCredentials) {\n <div class=\"credential-loading\">\n <mj-loading text=\"Loading credentials...\" size=\"small\"></mj-loading>\n </div>\n }\n\n @if (!IsLoadingCredentials && ExistingCredentials.length > 0 && !SelectedCredential) {\n <div class=\"credential-list\">\n @for (cred of ExistingCredentials; track cred.ID) {\n <div class=\"credential-list-item\" (click)=\"SelectExistingCredential(cred)\">\n <i class=\"fa-solid fa-key\"></i>\n <span>{{ cred.Name }}</span>\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Step 3: Test Connection -->\n @if (WizardStep === 3) {\n <div class=\"step-content step-content-centered\">\n <h3 class=\"step-title\">Let's verify everything works</h3>\n\n @if (!TestResult && !IsTesting) {\n <div class=\"test-prompt\">\n <button mjButton\n variant=\"primary\"\n size=\"lg\"\n (click)=\"TestNewConnection()\">\n <i class=\"fa-solid fa-vial\"></i>\n Test Connection\n </button>\n <p class=\"test-hint\">We'll verify we can reach your system and authenticate.</p>\n </div>\n }\n\n @if (IsTesting) {\n <div class=\"test-running\">\n <div class=\"test-spinner\">\n <i class=\"fa-solid fa-spinner fa-spin fa-3x\"></i>\n </div>\n <p>Testing connection...</p>\n </div>\n }\n\n @if (TestResult) {\n <div class=\"test-result\" [class.test-result-success]=\"TestResult.Success\" [class.test-result-failure]=\"!TestResult.Success\">\n <div class=\"test-result-icon\">\n @if (TestResult.Success) {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else {\n <i class=\"fa-solid fa-circle-xmark\"></i>\n }\n </div>\n <div class=\"test-result-message\">{{ TestResult.Message }}</div>\n @if (TestResult.Success && TestResult.ServerVersion) {\n <div class=\"test-result-detail\">\n Server version: {{ TestResult.ServerVersion }}\n </div>\n }\n @if (!TestResult.Success) {\n <button mjButton variant=\"outline\" (click)=\"TestNewConnection()\" class=\"test-retry-btn\">\n <i class=\"fa-solid fa-rotate-right\"></i>\n Retry\n </button>\n }\n </div>\n }\n </div>\n }\n\n </div>\n\n <!-- Wizard footer -->\n <div class=\"wizard-footer\">\n <div class=\"footer-left\"></div>\n <div class=\"footer-right\">\n @if (WizardStep > 1) {\n <button mjButton variant=\"outline\" (click)=\"PreviousStep()\">\n Back\n </button>\n }\n <button mjButton\n variant=\"primary\"\n [disabled]=\"IsNextDisabled || IsSaving\"\n (click)=\"FinishWizard()\">\n @if (IsSaving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Saving...\n } @else {\n {{ NextButtonLabel }}\n }\n </button>\n </div>\n </div>\n </div>\n }\n\n</div>\n\n<!-- Edit panel (slide-in) -->\n<div class=\"edit-panel-backdrop\"\n [class.open]=\"EditPanelOpen\"\n (click)=\"CloseEditPanel()\"></div>\n<div class=\"edit-panel\" [class.open]=\"EditPanelOpen\">\n @if (EditingSummary) {\n <!-- Header -->\n <div class=\"edit-panel-header\">\n <div class=\"edit-panel-title\">\n <div class=\"edit-icon-circle\"\n [style.background-color]=\"GetIconBrandColor(EditingSummary.Integration.Integration)\">\n <i [class]=\"GetIntegrationIcon(EditingSummary.Integration.Integration, EditingSummary.Icon)\"></i>\n </div>\n <span>Configure Integration</span>\n </div>\n <button class=\"edit-close-btn\" (click)=\"CloseEditPanel()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n\n @if (IsEditLoading) {\n <div class=\"edit-panel-loading\">\n <mj-loading text=\"Loading...\" size=\"small\"></mj-loading>\n </div>\n } @else {\n <!-- Edit form -->\n <div class=\"edit-panel-body\">\n <div class=\"edit-form-group\">\n <label class=\"edit-form-label\">Connection Name</label>\n <input type=\"text\"\n class=\"edit-form-input\"\n [(ngModel)]=\"EditName\"\n placeholder=\"Connection name...\" />\n </div>\n\n <div class=\"edit-form-group\">\n <label class=\"edit-form-label\">Status</label>\n <div class=\"edit-toggle-row\">\n <label class=\"toggle-switch\">\n <input type=\"checkbox\" [(ngModel)]=\"EditIsActive\" />\n <span class=\"toggle-slider\"></span>\n </label>\n <span class=\"edit-toggle-label\" [class.active]=\"EditIsActive\">\n {{ EditIsActive ? 'Active' : 'Inactive' }}\n </span>\n </div>\n </div>\n\n <div class=\"edit-form-group\">\n <label class=\"edit-form-label\">Credential</label>\n @if (EditCredential) {\n <div class=\"edit-credential-selected\">\n <div class=\"edit-credential-info\">\n <i class=\"fa-solid fa-key\"></i>\n <span>{{ EditCredential.Name }}</span>\n </div>\n <button class=\"edit-credential-clear\" (click)=\"ClearEditCredential()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n } @else {\n <div class=\"edit-credential-actions\">\n <button mjButton variant=\"outline\" size=\"sm\" (click)=\"OpenEditCredentialDialog()\">\n <i class=\"fa-solid fa-plus\"></i> New Credential\n </button>\n </div>\n @if (EditCredentials.length > 0) {\n <div class=\"edit-credential-list\">\n @for (cred of EditCredentials; track cred.ID) {\n <div class=\"edit-credential-item\" (click)=\"SelectEditCredential(cred)\">\n <i class=\"fa-solid fa-key\"></i>\n <span>{{ cred.Name }}</span>\n </div>\n }\n </div>\n }\n }\n </div>\n\n <div class=\"edit-form-group\">\n <label class=\"edit-form-label\">Integration</label>\n <div class=\"edit-readonly-field\">\n {{ EditingSummary.Integration.Integration }}\n </div>\n </div>\n\n <div class=\"edit-form-group\">\n <label class=\"edit-form-label\">Company</label>\n <div class=\"edit-readonly-field\">\n {{ EditingSummary.Integration.Company }}\n </div>\n </div>\n </div>\n\n <!-- Footer -->\n <div class=\"edit-panel-footer\">\n <button mjButton\n variant=\"primary\"\n [disabled]=\"IsEditSaving || !EditName.trim()\"\n (click)=\"SaveEditChanges()\">\n @if (IsEditSaving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Saving...\n } @else {\n Save Changes\n }\n </button>\n <button mjButton variant=\"outline\" (click)=\"CloseEditPanel()\">\n Cancel\n </button>\n </div>\n }\n }\n</div>\n\n<!-- Credential dialog (shared between wizard and edit panel) -->\n@if (ShowCredentialDialog) {\n <mj-credential-dialog\n [Visible]=\"true\"\n [PreselectedTypeId]=\"PreselectedCredentialTypeId\"\n (close)=\"EditPanelOpen ? OnEditCredentialDialogClose($event) : OnCredentialDialogClose($event)\">\n </mj-credential-dialog>\n}\n\n<!-- New Entity dialog -->\n@if (ShowCreateEntity) {\n <div class=\"new-entity-backdrop\" (click)=\"CloseNewEntityDialog()\"></div>\n <div class=\"new-entity-dialog\">\n <div class=\"new-entity-dialog-header\">\n <h3>Create New Entity Table</h3>\n <button class=\"new-entity-dialog-close\" (click)=\"CloseNewEntityDialog()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n <div class=\"new-entity-dialog-body\">\n <p class=\"new-entity-dialog-desc\">\n Generate a SQL migration to create a new database table for this integration's data.\n After running the migration and CodeGen, the new entity will appear in the entity picker.\n </p>\n\n <div class=\"new-entity-dialog-form\">\n <div class=\"new-entity-dialog-row\">\n <div class=\"new-entity-dialog-field\">\n <label class=\"new-entity-dialog-label\">Source Object</label>\n <div class=\"new-entity-dialog-value\">\n @if (AddMapSourceObjectName) {\n {{ AddMapSourceObjectName }}\n } @else {\n <span class=\"new-entity-dialog-hint\">Select a source object in the Add Map form first</span>\n }\n </div>\n </div>\n </div>\n <div class=\"new-entity-dialog-row\">\n <div class=\"new-entity-dialog-field\">\n <label class=\"new-entity-dialog-label\">Schema</label>\n <input type=\"text\"\n class=\"new-entity-dialog-input\"\n placeholder=\"e.g. hubspot\"\n [(ngModel)]=\"NewEntitySchema\" />\n </div>\n <span class=\"new-entity-dialog-dot\">.</span>\n <div class=\"new-entity-dialog-field new-entity-dialog-field-wide\">\n <label class=\"new-entity-dialog-label\">Table Name</label>\n <input type=\"text\"\n class=\"new-entity-dialog-input\"\n placeholder=\"e.g. Contact\"\n [(ngModel)]=\"NewEntityTable\" />\n </div>\n </div>\n </div>\n\n @if (DDLPreviewWarnings.length > 0) {\n <div class=\"ddl-warnings\">\n @for (warn of DDLPreviewWarnings; track warn) {\n <div class=\"ddl-warning\"><i class=\"fa-solid fa-triangle-exclamation\"></i> {{ warn }}</div>\n }\n </div>\n }\n\n @if (DDLPreview) {\n <div class=\"ddl-preview-block\">\n <div class=\"ddl-preview-header\">\n <span>SQL Preview</span>\n <button class=\"ddl-copy-btn\" (click)=\"CopyDDLToClipboard()\" title=\"Copy to clipboard\">\n @if (DDLCopied) {\n <i class=\"fa-solid fa-check\"></i> Copied\n } @else {\n <i class=\"fa-regular fa-copy\"></i> Copy\n }\n </button>\n </div>\n <pre class=\"ddl-preview-code\">{{ DDLPreview }}</pre>\n </div>\n }\n\n @if (DDLPreview) {\n <div class=\"new-entity-next-steps\">\n <h4><i class=\"fa-solid fa-list-check\"></i> Next Steps</h4>\n <ol>\n <li>Copy the SQL above and save it as a migration file</li>\n <li>Run the migration against your database</li>\n <li>Run CodeGen to register the new entity in MemberJunction</li>\n <li>Refresh the page &mdash; the new entity will appear in the entity picker</li>\n </ol>\n </div>\n }\n </div>\n <div class=\"new-entity-dialog-footer\">\n <button class=\"new-entity-preview-btn\"\n [disabled]=\"!CanGenerateSQL || IsGeneratingDDL\"\n (click)=\"PreviewDDL()\">\n @if (IsGeneratingDDL) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Generating...\n } @else {\n <i class=\"fa-solid fa-code\"></i> Generate SQL\n }\n </button>\n <button class=\"new-entity-dialog-done-btn\" (click)=\"CloseNewEntityDialog()\">\n Done\n </button>\n </div>\n </div>\n}\n </mj-page-body>\n</mj-page-layout>\n", styles: ["/* ---------------------------------------------------------------------------\n Host & Container \u2014 flex chain for scrollable detail view\n --------------------------------------------------------------------------- */\n\n:host {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n/* Slot passthrough now in <mj-page-header>; stat badges now via <mj-stat-badge>. */\n\n.connections-container {\n padding: 24px;\n max-width: 1400px;\n width: 100%;\n margin: 0 auto;\n flex: 1;\n display: flex;\n flex-direction: column;\n min-height: 0;\n overflow-y: auto;\n box-sizing: border-box;\n}\n\n/* When detail or editor view is active, prevent container scrolling\n so the inner .detail-table-body handles its own scroll */\n.connections-container.detail-active,\n.connections-container.editor-active {\n overflow: hidden;\n}\n\n/* ---------------------------------------------------------------------------\n Loading & Empty States\n --------------------------------------------------------------------------- */\n\n.loading-container {\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 300px;\n}\n\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n min-height: 400px;\n text-align: center;\n color: var(--mj-text-muted);\n}\n\n.empty-icon {\n font-size: 48px;\n color: var(--mj-text-disabled);\n margin-bottom: 16px;\n}\n\n.empty-state h3 {\n font-size: 20px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin: 0 0 8px;\n}\n\n.empty-state p {\n font-size: 14px;\n margin: 0 0 24px;\n}\n\n/* ---------------------------------------------------------------------------\n Card Grid\n --------------------------------------------------------------------------- */\n\n.card-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));\n gap: 20px;\n}\n\n/* ---------------------------------------------------------------------------\n Connection Card\n --------------------------------------------------------------------------- */\n\n.connection-card {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);\n transition: box-shadow 0.2s ease, transform 0.2s ease;\n display: flex;\n flex-direction: column;\n position: relative;\n overflow: hidden;\n}\n\n.connection-card:hover {\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n transform: translateY(-2px);\n}\n\n/* Card Header */\n.card-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 16px 0;\n}\n\n.icon-circle {\n width: 48px;\n height: 48px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n flex-shrink: 0;\n}\n\n.icon-large {\n font-size: 22px;\n}\n\n/* Status Badge */\n.status-badge {\n font-size: 12px;\n font-weight: 600;\n padding: 4px 10px;\n border-radius: 20px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.status-badge-connected {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success);\n}\n\n.status-badge-error {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error);\n}\n\n.status-badge-inactive {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-muted);\n}\n\n.status-badge-syncing {\n background: var(--mj-status-info-bg);\n color: var(--mj-brand-primary);\n}\n\n/* Card Body */\n.card-body {\n padding: 12px 16px;\n flex: 1;\n}\n\n.card-name {\n font-size: 18px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin-bottom: 2px;\n}\n\n.card-company {\n font-size: 14px;\n color: var(--mj-text-disabled);\n margin-bottom: 10px;\n}\n\n.card-meta {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-bottom: 6px;\n}\n\n.meta-separator {\n margin: 0 6px;\n}\n\n.meta-label {\n font-weight: 500;\n}\n\n.card-sync-info {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-bottom: 8px;\n}\n\n.card-sync-info i {\n margin-right: 4px;\n color: var(--mj-text-disabled);\n}\n\n/* Card inline test result */\n.card-test-result {\n font-size: 12px;\n padding: 6px 10px;\n border-radius: 6px;\n display: flex;\n align-items: center;\n gap: 6px;\n margin-top: 8px;\n}\n\n.card-test-result.test-success {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success);\n}\n\n.card-test-result.test-failure {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error);\n}\n\n.card-test-result span {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n/* Card Footer */\n.card-footer {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 16px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n.card-footer button {\n font-size: 13px;\n}\n\n/* Sync dropdown menu */\n.sync-menu-wrapper {\n position: relative;\n display: inline-flex;\n}\n\n.sync-caret {\n font-size: 10px;\n margin-left: 4px;\n opacity: 0.8;\n}\n\n.sync-dropdown {\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n z-index: 1000;\n background: var(--mj-bg-surface-elevated);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n box-shadow: 0 8px 24px rgba(0,0,0,0.12);\n min-width: 220px;\n overflow: hidden;\n}\n\n.sync-dropdown-left {\n left: auto;\n right: 0;\n}\n\n.sync-dropdown-group {\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.sync-dropdown-group:last-child {\n border-bottom: none;\n}\n\n.sync-dropdown-label {\n display: block;\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--mj-text-muted);\n padding: 0 12px 4px;\n}\n\n.sync-dropdown-item {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 7px 12px;\n background: none;\n border: none;\n cursor: pointer;\n font-size: 13px;\n color: var(--mj-text-primary);\n text-align: left;\n transition: background 0.12s;\n}\n\n.sync-dropdown-item:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.sync-dropdown-item i {\n width: 16px;\n text-align: center;\n color: var(--mj-text-secondary);\n flex-shrink: 0;\n}\n\n/* Card Delete Button */\n.card-delete-btn {\n margin-left: auto;\n background: none;\n border: 1px solid transparent;\n cursor: pointer;\n padding: 4px 8px;\n border-radius: 6px;\n color: var(--mj-text-disabled);\n font-size: 14px;\n transition: all 0.15s;\n}\n\n.card-delete-btn:hover {\n background: var(--mj-status-error-bg);\n border-color: var(--mj-status-error-border);\n color: var(--mj-status-error);\n}\n\n.menu-trigger:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-secondary);\n}\n\n.card-menu-dropdown {\n position: absolute;\n right: 0;\n top: 100%;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);\n min-width: 160px;\n z-index: 50;\n padding: 4px;\n}\n\n.menu-item {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 8px 12px;\n border: none;\n background: none;\n cursor: pointer;\n font-size: 13px;\n color: var(--mj-text-secondary);\n border-radius: 6px;\n transition: background 0.15s;\n text-align: left;\n}\n\n.menu-item:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.menu-item i {\n width: 16px;\n text-align: center;\n color: var(--mj-text-muted);\n}\n\n.menu-item-danger {\n color: var(--mj-status-error);\n}\n\n.menu-item-danger i {\n color: var(--mj-status-error);\n}\n\n.menu-item-danger:hover {\n background: var(--mj-status-error-bg);\n}\n\n/* ---------------------------------------------------------------------------\n New Connection Card\n --------------------------------------------------------------------------- */\n\n.new-connection-card {\n border: 2px dashed var(--mj-border-strong);\n background: var(--mj-bg-page);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 200px;\n transition: background 0.2s, border-color 0.2s;\n}\n\n.new-connection-card:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-brand-primary);\n box-shadow: none;\n transform: none;\n}\n\n.new-card-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n}\n\n.new-card-icon {\n width: 56px;\n height: 56px;\n border-radius: 50%;\n background: var(--mj-bg-surface-active);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 24px;\n color: var(--mj-text-muted);\n transition: background 0.2s, color 0.2s;\n}\n\n.new-connection-card:hover .new-card-icon {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.new-card-label {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-muted);\n}\n\n.new-connection-card:hover .new-card-label {\n color: var(--mj-brand-primary);\n}\n\n/* ---------------------------------------------------------------------------\n Wizard (inline, replaces card grid)\n --------------------------------------------------------------------------- */\n\n.wizard-inline {\n display: flex;\n flex-direction: column;\n height: 100%;\n max-width: 720px;\n margin: 0 auto;\n}\n\n/* Wizard Header */\n.wizard-header {\n display: flex;\n align-items: center;\n gap: 16px;\n padding: 0 0 20px;\n}\n\n.wizard-back-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n background: none;\n border: none;\n cursor: pointer;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-muted);\n padding: 6px 10px;\n border-radius: 6px;\n transition: background 0.15s, color 0.15s;\n}\n\n.wizard-back-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.wizard-title {\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0;\n}\n\n/* ---------------------------------------------------------------------------\n Step Indicator\n --------------------------------------------------------------------------- */\n\n.step-indicator {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 20px 32px;\n gap: 0;\n}\n\n.step-item {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 6px;\n position: relative;\n}\n\n.step-circle {\n width: 32px;\n height: 32px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 13px;\n font-weight: 600;\n background: var(--mj-bg-surface-active);\n color: var(--mj-text-disabled);\n border: 2px solid var(--mj-border-default);\n transition: all 0.2s;\n}\n\n.step-active .step-circle {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n\n.step-completed .step-circle {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n border-color: var(--mj-status-success);\n}\n\n.step-label {\n font-size: 11px;\n font-weight: 500;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n}\n\n.step-active .step-label {\n color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n.step-completed .step-label {\n color: var(--mj-status-success);\n}\n\n.step-line {\n width: 48px;\n height: 2px;\n background: var(--mj-border-default);\n margin: 0 8px;\n margin-bottom: 20px;\n transition: background 0.2s;\n}\n\n.step-line-active {\n background: var(--mj-status-success);\n}\n\n/* ---------------------------------------------------------------------------\n Wizard Body\n --------------------------------------------------------------------------- */\n\n.wizard-body {\n flex: 1;\n overflow-y: auto;\n padding: 0 24px 24px;\n}\n\n.step-content {\n min-height: 300px;\n}\n\n.step-content-centered {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n}\n\n.step-title {\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 20px;\n}\n\n.step-content-centered .step-title {\n margin-bottom: 32px;\n}\n\n/* Search bar */\n.search-bar {\n position: relative;\n margin-bottom: 20px;\n}\n\n.search-icon {\n position: absolute;\n left: 14px;\n top: 50%;\n transform: translateY(-50%);\n color: var(--mj-text-disabled);\n font-size: 14px;\n}\n\n.search-input {\n width: 100%;\n padding: 10px 14px 10px 40px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n font-size: 14px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n transition: border-color 0.2s, box-shadow 0.2s;\n box-sizing: border-box;\n}\n\n.search-input:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);\n}\n\n.search-input::placeholder {\n color: var(--mj-text-disabled);\n}\n\n/* No integrations */\n.no-integrations {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 48px 24px;\n color: var(--mj-text-disabled);\n text-align: center;\n}\n\n.no-integrations i {\n font-size: 36px;\n margin-bottom: 12px;\n}\n\n.no-integrations p {\n font-size: 16px;\n font-weight: 500;\n color: var(--mj-text-muted);\n margin: 0 0 4px;\n}\n\n.no-integrations-hint {\n font-size: 13px;\n}\n\n/* Integration picker grid */\n.integration-picker-grid {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 12px;\n}\n\n.integration-picker-card {\n border: 2px solid var(--mj-border-default);\n border-radius: 10px;\n padding: 16px;\n cursor: pointer;\n text-align: center;\n transition: border-color 0.2s, background 0.15s;\n}\n\n.integration-picker-card:hover {\n border-color: var(--mj-brand-primary);\n background: var(--mj-bg-page);\n}\n\n.integration-picker-card.picker-selected {\n border-color: var(--mj-brand-primary);\n background: var(--mj-status-info-bg);\n}\n\n.picker-icon-circle {\n width: 40px;\n height: 40px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n margin: 0 auto 10px;\n font-size: 18px;\n}\n\n.picker-name {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n}\n\n.picker-description {\n font-size: 12px;\n color: var(--mj-text-disabled);\n line-height: 1.3;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n\n/* ---------------------------------------------------------------------------\n Form Controls (Step 2)\n --------------------------------------------------------------------------- */\n\n.form-group {\n margin-bottom: 20px;\n}\n\n.form-label {\n display: block;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 6px;\n}\n\n.optional-label {\n font-weight: 400;\n color: var(--mj-text-disabled);\n}\n\n.form-input {\n width: 100%;\n padding: 10px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n font-size: 14px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n transition: border-color 0.2s, box-shadow 0.2s;\n box-sizing: border-box;\n}\n\n.form-input:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);\n}\n\n.form-input::placeholder {\n color: var(--mj-text-disabled);\n}\n\n.form-input:disabled {\n background: var(--mj-bg-page);\n color: var(--mj-text-muted);\n}\n\n.form-textarea {\n resize: vertical;\n min-height: 72px;\n}\n\n.form-hint {\n font-size: 13px;\n color: var(--mj-text-disabled);\n padding: 8px 0;\n}\n\n/* Credential section */\n.credential-selected {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 14px;\n background: var(--mj-status-success-bg);\n border: 1px solid var(--mj-status-success-border);\n border-radius: 8px;\n}\n\n.credential-info {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-status-success-text);\n font-size: 14px;\n font-weight: 500;\n}\n\n.credential-info i {\n color: var(--mj-status-success);\n}\n\n.credential-clear {\n background: none;\n border: none;\n cursor: pointer;\n color: var(--mj-text-disabled);\n font-size: 14px;\n padding: 4px;\n border-radius: 4px;\n transition: color 0.15s;\n}\n\n.credential-clear:hover {\n color: var(--mj-status-error);\n}\n\n.credential-actions {\n display: flex;\n gap: 8px;\n}\n\n.credential-actions button {\n font-size: 13px;\n}\n\n.credential-loading {\n padding: 16px 0;\n}\n\n.credential-list {\n margin-top: 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n}\n\n.credential-list-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n cursor: pointer;\n font-size: 14px;\n color: var(--mj-text-secondary);\n border-bottom: 1px solid var(--mj-border-subtle);\n transition: background 0.15s;\n}\n\n.credential-list-item:last-child {\n border-bottom: none;\n}\n\n.credential-list-item:hover {\n background: var(--mj-bg-page);\n}\n\n.credential-list-item i {\n color: var(--mj-text-disabled);\n}\n\n/* ---------------------------------------------------------------------------\n Test Connection (Step 3)\n --------------------------------------------------------------------------- */\n\n.test-prompt {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 16px;\n}\n\n.test-hint {\n font-size: 14px;\n color: var(--mj-text-disabled);\n margin: 0;\n}\n\n.test-running {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 16px;\n color: var(--mj-brand-primary);\n}\n\n.test-spinner {\n width: 64px;\n height: 64px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.test-running p {\n font-size: 15px;\n font-weight: 500;\n margin: 0;\n}\n\n/* Test result */\n.test-result {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n padding: 24px;\n border-radius: 12px;\n max-width: 400px;\n}\n\n.test-result-success {\n background: var(--mj-status-success-bg);\n}\n\n.test-result-failure {\n background: var(--mj-status-error-bg);\n}\n\n.test-result-icon {\n font-size: 48px;\n animation: scaleIn 0.3s ease-out;\n}\n\n.test-result-success .test-result-icon {\n color: var(--mj-status-success);\n}\n\n.test-result-failure .test-result-icon {\n color: var(--mj-status-error);\n}\n\n@keyframes scaleIn {\n from {\n transform: scale(0.5);\n opacity: 0;\n }\n to {\n transform: scale(1);\n opacity: 1;\n }\n}\n\n.test-result-message {\n font-size: 15px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n text-align: center;\n}\n\n.test-result-detail {\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.test-retry-btn {\n margin-top: 4px;\n}\n\n/* Toggle switch */\n.toggle-switch {\n position: relative;\n display: inline-block;\n width: 44px;\n height: 24px;\n flex-shrink: 0;\n}\n\n.toggle-switch input {\n opacity: 0;\n width: 0;\n height: 0;\n}\n\n.toggle-slider {\n position: absolute;\n cursor: pointer;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--mj-border-strong);\n border-radius: 24px;\n transition: background 0.2s;\n}\n\n.toggle-slider::before {\n content: '';\n position: absolute;\n height: 18px;\n width: 18px;\n left: 3px;\n bottom: 3px;\n background: var(--mj-bg-surface);\n border-radius: 50%;\n transition: transform 0.2s;\n}\n\n.toggle-switch input:checked + .toggle-slider {\n background: var(--mj-brand-primary);\n}\n\n.toggle-switch input:checked + .toggle-slider::before {\n transform: translateX(20px);\n}\n\n/* ---------------------------------------------------------------------------\n Wizard Footer\n --------------------------------------------------------------------------- */\n\n.wizard-footer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 24px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n.footer-left {\n display: flex;\n align-items: center;\n}\n\n.footer-right {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n/* ---------------------------------------------------------------------------\n Responsive\n --------------------------------------------------------------------------- */\n\n@media (max-width: 768px) {\n .connections-container {\n padding: 16px;\n }\n\n .card-grid {\n grid-template-columns: 1fr;\n }\n\n .integration-picker-grid {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .step-indicator {\n padding: 16px;\n overflow-x: auto;\n }\n\n .step-line {\n width: 24px;\n }\n\n .credential-actions {\n flex-direction: column;\n }\n}\n\n@media (max-width: 480px) {\n .integration-picker-grid {\n grid-template-columns: 1fr;\n }\n\n .card-footer {\n flex-wrap: wrap;\n }\n}\n\n/* ---------------------------------------------------------------------------\n Delete confirmation overlay\n --------------------------------------------------------------------------- */\n\n.delete-confirm-overlay {\n position: absolute;\n inset: 0;\n background: rgba(255, 255, 255, 0.95);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 5;\n border-radius: 12px;\n animation: fadeIn 150ms ease;\n}\n\n@keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n.delete-confirm-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 10px;\n padding: 20px;\n text-align: center;\n}\n\n.delete-warn-icon {\n font-size: 28px;\n color: var(--mj-status-error);\n}\n\n.delete-confirm-text {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n max-width: 220px;\n}\n\n.delete-confirm-actions {\n display: flex;\n gap: 8px;\n margin-top: 4px;\n}\n\n/* ---------------------------------------------------------------------------\n Edit panel (slide-in)\n --------------------------------------------------------------------------- */\n\n.edit-panel-backdrop {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.1);\n z-index: 99;\n opacity: 0;\n pointer-events: none;\n transition: opacity 300ms ease;\n}\n\n.edit-panel-backdrop.open {\n opacity: 1;\n pointer-events: auto;\n}\n\n.edit-panel {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n width: 400px;\n max-width: 100%;\n background: var(--mj-bg-surface);\n border-left: 1px solid var(--mj-border-default);\n box-shadow: -8px 0 24px rgba(0, 0, 0, 0.08);\n z-index: 100;\n transform: translateX(100%);\n transition: transform 300ms cubic-bezier(0.4, 0, 0.2, 1);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.edit-panel.open {\n transform: translateX(0);\n}\n\n.edit-panel-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.edit-panel-title {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.edit-icon-circle {\n width: 32px;\n height: 32px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n font-size: 14px;\n}\n\n.edit-close-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n border: none;\n border-radius: 6px;\n background: transparent;\n color: var(--mj-text-disabled);\n cursor: pointer;\n font-size: 14px;\n transition: all 150ms ease;\n}\n\n.edit-close-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-secondary);\n}\n\n.edit-panel-loading {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 48px 20px;\n}\n\n.edit-panel-body {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n\n.edit-form-group {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.edit-form-label {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.edit-form-input {\n height: 36px;\n padding: 0 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 14px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n outline: none;\n transition: border-color 150ms ease;\n}\n\n.edit-form-input:focus {\n border-color: var(--mj-brand-primary);\n}\n\n.edit-readonly-field {\n padding: 8px 12px;\n background: var(--mj-bg-page);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.edit-toggle-row {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.edit-toggle-label {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-disabled);\n}\n\n.edit-toggle-label.active {\n color: var(--mj-status-success);\n}\n\n.edit-credential-selected {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-page);\n}\n\n.edit-credential-info {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.edit-credential-info i {\n color: var(--mj-brand-primary);\n}\n\n.edit-credential-clear {\n width: 24px;\n height: 24px;\n border: none;\n border-radius: 4px;\n background: transparent;\n color: var(--mj-text-disabled);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n transition: all 150ms ease;\n}\n\n.edit-credential-clear:hover {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error);\n}\n\n.edit-credential-actions {\n display: flex;\n gap: 8px;\n}\n\n.edit-credential-list {\n display: flex;\n flex-direction: column;\n gap: 2px;\n margin-top: 6px;\n max-height: 180px;\n overflow-y: auto;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n}\n\n.edit-credential-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: background 150ms ease;\n}\n\n.edit-credential-item:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.edit-credential-item i {\n color: var(--mj-text-disabled);\n font-size: 12px;\n}\n\n.edit-panel-footer {\n display: flex;\n gap: 8px;\n padding: 16px 20px;\n border-top: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n/* ---------------------------------------------------------------------------\n Card clickable area\n --------------------------------------------------------------------------- */\n\n.card-clickable {\n cursor: pointer;\n}\n\n/* ---------------------------------------------------------------------------\n Detail View (entity maps for a selected integration)\n --------------------------------------------------------------------------- */\n\n.detail-view {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n.detail-header {\n display: flex;\n align-items: center;\n gap: 16px;\n padding-bottom: 20px;\n border-bottom: 1px solid var(--mj-border-subtle);\n margin-bottom: 16px;\n flex-wrap: wrap;\n}\n\n.detail-header-info {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n min-width: 0;\n}\n\n.detail-header-text {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n}\n\n.detail-title {\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.detail-subtitle {\n font-size: 13px;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 4px;\n flex-wrap: wrap;\n}\n\n.detail-header-actions {\n display: flex;\n gap: 8px;\n flex-shrink: 0;\n}\n\n/* Schedule section */\n.schedule-section {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n padding: 16px 20px;\n margin-bottom: 16px;\n}\n\n.schedule-section-header {\n margin-bottom: 12px;\n}\n\n.schedule-section-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 0.8rem;\n font-weight: 700;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n\n.schedule-section-title i {\n color: var(--mj-brand-primary);\n}\n\n.schedule-empty {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 0;\n}\n\n.schedule-empty-text {\n font-size: 0.85rem;\n color: var(--mj-text-disabled);\n}\n\n.schedule-create-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n background: linear-gradient(135deg, var(--mj-brand-primary) 0%, var(--mj-brand-primary-active) 100%);\n color: white;\n border: none;\n border-radius: 8px;\n cursor: pointer;\n font-size: 0.8rem;\n font-weight: 600;\n transition: all 0.2s ease;\n}\n\n.schedule-create-btn:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n}\n\n/* Detail toolbar */\n.detail-toolbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 12px;\n}\n\n.detail-toolbar-left {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.detail-map-count {\n font-size: 13px;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n.detail-search {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n}\n\n.detail-search i {\n color: var(--mj-text-disabled);\n font-size: 12px;\n}\n\n.detail-search input {\n border: none;\n outline: none;\n background: transparent;\n font-size: 13px;\n color: var(--mj-text-primary);\n width: 200px;\n}\n\n.detail-search input::placeholder {\n color: var(--mj-text-disabled);\n}\n\n/* Add Map button */\n.add-map-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface-card);\n color: var(--mj-brand-primary-hover);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 150ms ease;\n white-space: nowrap;\n}\n\n.add-map-btn:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-border-strong);\n}\n\n.add-map-btn.active {\n background: var(--mj-brand-primary);\n color: var(--mj-bg-surface);\n border-color: var(--mj-brand-primary);\n}\n\n.apply-all-btn {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n\n.apply-all-btn:hover {\n background: var(--mj-brand-primary-hover);\n border-color: var(--mj-brand-primary-hover);\n}\n\n.apply-all-btn:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.add-map-btn-lg {\n margin-top: 16px;\n padding: 10px 20px;\n font-size: 14px;\n}\n\n/* Add map inline panel */\n.add-map-panel {\n padding: 16px;\n margin-bottom: 12px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n animation: fadeIn 200ms ease;\n}\n\n.add-map-row {\n display: flex;\n align-items: flex-end;\n gap: 12px;\n}\n\n.add-map-field {\n flex: 1;\n min-width: 0;\n}\n\n.add-map-label {\n display: block;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n margin-bottom: 6px;\n}\n\n.add-map-select {\n width: 100%;\n height: 34px;\n padding: 0 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n outline: none;\n cursor: pointer;\n}\n\n.add-map-select:focus {\n border-color: var(--mj-brand-primary);\n}\n\n.add-map-direction-col {\n flex-shrink: 0;\n}\n\n.add-map-direction-btns {\n display: flex;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.add-map-direction-btns button {\n padding: 7px 12px;\n border: none;\n background: var(--mj-bg-surface);\n color: var(--mj-text-muted);\n font-size: 13px;\n cursor: pointer;\n transition: all 150ms ease;\n border-right: 1px solid var(--mj-border-default);\n}\n\n.add-map-direction-btns button:last-child {\n border-right: none;\n}\n\n.add-map-direction-btns button:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.add-map-direction-btns button.active {\n background: var(--mj-brand-primary);\n color: var(--mj-bg-surface);\n}\n\n.add-map-actions {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n}\n\n.add-map-save-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 7px 16px;\n border: none;\n border-radius: 6px;\n background: var(--mj-brand-primary);\n color: var(--mj-bg-surface);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 150ms ease;\n white-space: nowrap;\n}\n\n.add-map-save-btn:hover {\n background: var(--mj-brand-primary-hover);\n}\n\n.add-map-save-btn:disabled {\n opacity: 0.5;\n cursor: default;\n}\n\n.add-map-cancel-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 34px;\n height: 34px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-muted);\n cursor: pointer;\n font-size: 13px;\n transition: all 150ms ease;\n}\n\n.add-map-cancel-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.add-map-loading {\n font-size: 12px;\n color: var(--mj-text-disabled);\n padding: 8px 0;\n}\n\n.add-map-loading i {\n color: var(--mj-brand-primary);\n margin-right: 4px;\n}\n\n.add-map-hint {\n font-size: 12px;\n color: var(--mj-text-disabled);\n padding: 8px 0;\n font-style: italic;\n}\n\n/* Entity field needs more room for tree dropdown */\n.add-map-entity-field {\n flex: 2;\n min-width: 280px;\n}\n\n/* Entity picker row: tree dropdown + New button side by side */\n.entity-picker-row {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n}\n\n.entity-picker-row mj-tree-dropdown {\n flex: 1;\n min-width: 0;\n}\n\n.new-entity-btn {\n flex-shrink: 0;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 7px 12px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-brand-primary);\n background: var(--mj-brand-primary-subtle);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-radius: 6px;\n cursor: pointer;\n white-space: nowrap;\n transition: all 0.15s ease;\n}\n\n.new-entity-btn:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n/* ---------------------------------------------------------------------------\n Sync Result Banner\n --------------------------------------------------------------------------- */\n\n.sync-result-banner {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n margin-bottom: 12px;\n animation: fadeIn 200ms ease;\n}\n\n.sync-result-banner.sync-success {\n background: var(--mj-status-success-bg);\n border: 1px solid var(--mj-status-success-border);\n color: var(--mj-status-success-text);\n}\n\n.sync-result-banner.sync-failure {\n background: var(--mj-status-error-bg);\n border: 1px solid var(--mj-status-error-border);\n color: var(--mj-status-error-text);\n}\n\n/* ---------------------------------------------------------------------------\n Auto-Map Schema Panel\n --------------------------------------------------------------------------- */\n\n.auto-map-header {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 12px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.auto-map-header i {\n color: var(--mj-brand-primary);\n}\n\n.auto-map-result {\n margin-top: 12px;\n padding: 10px 14px;\n border-radius: 6px;\n font-size: 13px;\n}\n\n.auto-map-result.auto-map-success {\n background: var(--mj-status-success-bg);\n border: 1px solid var(--mj-status-success-border);\n color: var(--mj-status-success-text);\n}\n\n.auto-map-result.auto-map-partial {\n background: var(--mj-status-warning-bg);\n border: 1px solid var(--mj-status-warning-border);\n color: var(--mj-status-warning-text);\n}\n\n.auto-map-result.auto-map-failure {\n background: var(--mj-status-error-bg);\n border: 1px solid var(--mj-status-error-border);\n color: var(--mj-status-error-text);\n}\n\n.auto-map-result-summary {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n}\n\n.auto-map-errors {\n margin-top: 6px;\n font-size: 12px;\n}\n\n.auto-map-error {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 2px 0;\n}\n\n/* ---------------------------------------------------------------------------\n New Entity Dialog\n --------------------------------------------------------------------------- */\n\n.new-entity-backdrop {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.4);\n z-index: 1000;\n animation: fadeIn 0.15s ease;\n}\n\n.new-entity-dialog {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 640px;\n max-width: 90vw;\n max-height: 85vh;\n background: var(--mj-bg-surface);\n border-radius: var(--mj-radius-lg);\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.2);\n z-index: 1001;\n display: flex;\n flex-direction: column;\n animation: fadeIn 0.2s ease;\n}\n\n.new-entity-dialog-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.new-entity-dialog-header h3 {\n margin: 0;\n font-size: var(--mj-text-base);\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.new-entity-dialog-close {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n padding: 0;\n font-size: var(--mj-text-sm);\n color: var(--mj-text-secondary);\n background: transparent;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.new-entity-dialog-close:hover {\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-primary);\n}\n\n.new-entity-dialog-body {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.new-entity-dialog-desc {\n margin: 0;\n font-size: 13px;\n color: var(--mj-text-secondary);\n line-height: 1.5;\n}\n\n.new-entity-dialog-form {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.new-entity-dialog-row {\n display: flex;\n align-items: flex-end;\n gap: 8px;\n}\n\n.new-entity-dialog-field {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 120px;\n}\n\n.new-entity-dialog-field-wide {\n flex: 1;\n}\n\n.new-entity-dialog-label {\n font-size: var(--mj-text-xs);\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.new-entity-dialog-input {\n padding: 8px 12px;\n font-size: var(--mj-text-sm);\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-md);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n transition: border-color 0.15s ease;\n}\n\n.new-entity-dialog-input:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 2px rgba(99, 102, 241, 0.1);\n}\n\n.new-entity-dialog-dot {\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-secondary);\n padding-bottom: 6px;\n user-select: none;\n}\n\n.new-entity-dialog-value {\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-primary);\n padding: 8px 0 4px;\n}\n\n.new-entity-dialog-hint {\n font-style: italic;\n color: var(--mj-text-disabled);\n font-weight: 400;\n}\n\n.new-entity-dialog-footer {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 8px;\n padding: 12px 20px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n.new-entity-preview-btn {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 8px 16px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n background: var(--mj-brand-primary);\n border: none;\n border-radius: 6px;\n cursor: pointer;\n white-space: nowrap;\n transition: background 0.15s ease;\n}\n\n.new-entity-preview-btn:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n}\n\n.new-entity-preview-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.new-entity-dialog-done-btn {\n display: inline-flex;\n align-items: center;\n padding: 8px 16px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n background: transparent;\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-md);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.new-entity-dialog-done-btn:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-text-disabled);\n}\n\n/* Next steps callout inside dialog */\n.new-entity-next-steps {\n background: var(--mj-brand-primary-subtle);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-radius: var(--mj-radius-md);\n padding: 14px 16px;\n}\n\n.new-entity-next-steps h4 {\n margin: 0 0 8px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-brand-primary-hover);\n}\n\n.new-entity-next-steps h4 i {\n margin-right: 6px;\n}\n\n.new-entity-next-steps ol {\n margin: 0;\n padding-left: 20px;\n font-size: 13px;\n color: var(--mj-brand-primary-hover);\n line-height: 1.7;\n}\n\n/* DDL copy button */\n.ddl-copy-btn {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n background: transparent;\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-sm);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.ddl-copy-btn:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-text-disabled);\n}\n\n/* DDL Preview */\n.ddl-warnings {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.ddl-warning {\n font-size: 12px;\n color: var(--mj-status-warning);\n background: var(--mj-status-warning-subtle);\n padding: 6px 10px;\n border-radius: var(--mj-radius-sm);\n border-left: 3px solid var(--mj-status-warning);\n}\n\n.ddl-warning i {\n margin-right: 4px;\n}\n\n.ddl-preview-block {\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n overflow: hidden;\n max-height: 300px;\n display: flex;\n flex-direction: column;\n}\n\n.ddl-preview-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n font-size: var(--mj-text-xs);\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.ddl-preview-code {\n margin: 0;\n padding: 12px 16px;\n font-size: 12px;\n font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', monospace;\n line-height: 1.6;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n overflow: auto;\n white-space: pre-wrap;\n word-break: break-word;\n flex: 1;\n}\n\n@keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n/* Detail empty state */\n.detail-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 64px 24px;\n text-align: center;\n color: var(--mj-text-disabled);\n}\n\n.detail-empty i {\n font-size: 36px;\n margin-bottom: 12px;\n color: var(--mj-text-disabled);\n}\n\n.detail-empty h3 {\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin: 0 0 6px;\n}\n\n.detail-empty p {\n font-size: 13px;\n margin: 0;\n max-width: 400px;\n}\n\n/* Detail table */\n.detail-table-head {\n display: flex;\n align-items: center;\n padding: 8px 16px;\n background: var(--mj-bg-page);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px 8px 0 0;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-text-secondary);\n}\n\n.detail-table-body {\n border: 1px solid var(--mj-border-default);\n border-top: none;\n border-radius: 0 0 8px 8px;\n overflow-y: auto;\n flex: 1;\n min-height: 0;\n}\n\n.detail-map-row {\n display: flex;\n align-items: center;\n padding: 10px 16px;\n border-bottom: 1px solid var(--mj-border-subtle);\n transition: background 0.15s;\n font-size: 13px;\n}\n\n.detail-map-row:last-child {\n border-bottom: none;\n}\n\n.detail-map-row:hover {\n background: var(--mj-bg-page);\n cursor: pointer;\n}\n\n.detail-map-row.sync-disabled {\n opacity: 0.5;\n}\n\n/* Column widths (shared between head and body) */\n.dt-col-toggle {\n width: 60px;\n flex-shrink: 0;\n}\n\n.dt-col-source {\n flex: 2;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.dt-col-direction {\n width: 80px;\n flex-shrink: 0;\n text-align: center;\n}\n\n.dt-col-dest {\n flex: 2;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--mj-text-primary);\n}\n\n.dt-col-meta {\n width: 80px;\n flex-shrink: 0;\n display: flex;\n align-items: center;\n gap: 6px;\n justify-content: flex-end;\n}\n\n/* Direction badge */\n.direction-badge {\n font-size: 11px;\n font-weight: 600;\n padding: 2px 8px;\n border-radius: 4px;\n white-space: nowrap;\n}\n\n/* Clickable direction toggle button */\nbutton.direction-toggle {\n border: 1px solid transparent;\n cursor: pointer;\n transition: border-color 0.15s, box-shadow 0.15s;\n}\nbutton.direction-toggle:hover {\n border-color: var(--mj-border-strong);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n}\n\n.direction-badge.pull {\n background: var(--mj-status-info-bg);\n color: var(--mj-brand-primary);\n}\n\n.direction-badge.push {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success);\n}\n\n.direction-badge.bidirectional {\n background: var(--mj-status-warning-subtle);\n color: var(--mj-status-warning);\n}\n\n/* Create Tables list */\n.create-tables-list {\n max-height: 300px;\n overflow-y: auto;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n margin-top: 8px;\n background: var(--mj-bg-surface);\n}\n.create-tables-select-all {\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n font-weight: 600;\n}\n.create-tables-checkbox {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 12px;\n cursor: pointer;\n font-size: 13px;\n color: var(--mj-text-primary);\n}\n.create-tables-checkbox:hover {\n background: var(--mj-bg-surface-hover);\n}\n.create-tables-checkbox input[type=\"checkbox\"] {\n width: 16px;\n height: 16px;\n cursor: pointer;\n}\n.create-tables-name-hint {\n color: var(--mj-text-muted);\n font-size: 11px;\n margin-left: 8px;\n}\n.create-tables-filters {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 8px 0;\n flex-wrap: wrap;\n}\n.create-tables-search {\n flex: 1 1 240px;\n min-width: 200px;\n}\n.create-tables-toggle {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n}\n.create-tables-toggle input[type=\"checkbox\"] {\n margin: 0;\n}\n.create-tables-badge {\n display: inline-block;\n margin-left: 6px;\n padding: 1px 6px;\n font-size: 10px;\n font-weight: 600;\n border-radius: 10px;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n line-height: 1.4;\n}\n.create-tables-badge-custom {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n.create-tables-badge-registered {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success-text);\n}\n.add-map-input {\n width: 100%;\n padding: 6px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n font-size: 13px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n}\n.add-map-input:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n/* Config badges */\n.detail-config-badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n border-radius: 4px;\n background: var(--mj-bg-surface-active);\n color: var(--mj-text-disabled);\n font-size: 11px;\n}\n\n/* Detail back button (icon-only) */\n.detail-back-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n font-size: 16px;\n transition: background 0.15s, color 0.15s, border-color 0.15s;\n flex-shrink: 0;\n}\n\n.detail-back-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-strong);\n}\n\n/* Detail edit button (icon-only) */\n.detail-edit-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n font-size: 14px;\n transition: background 0.15s, color 0.15s, border-color 0.15s;\n flex-shrink: 0;\n}\n\n.detail-edit-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-strong);\n}\n\n/* Chevron hint on entity map rows */\n.map-edit-hint {\n color: var(--mj-text-disabled);\n font-size: 11px;\n transition: color 0.15s;\n}\n\n.detail-map-row:hover .map-edit-hint {\n color: var(--mj-brand-primary);\n}\n\n/* Entity map editor header */\n.ve-header-title-inline {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 16px;\n font-weight: 600;\n}\n\n.ve-source-label {\n color: var(--mj-brand-primary);\n}\n\n.ve-direction-icon {\n color: var(--mj-text-disabled);\n font-size: 14px;\n}\n\n.ve-dest-label {\n color: var(--mj-status-success);\n}\n\n.ve-stat-inline {\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.ve-stat-inline strong {\n color: var(--mj-text-primary);\n font-weight: 600;\n}\n\n.detail-table-empty {\n padding: 24px;\n text-align: center;\n color: var(--mj-text-disabled);\n font-size: 13px;\n}\n\n/* ---------------------------------------------------------------------------\n Discovered Source Objects Section\n --------------------------------------------------------------------------- */\n\n.discovered-objects-section {\n margin: 12px 0;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n overflow: hidden;\n}\n\n.discovered-objects-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 14px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.discovered-objects-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.discovered-objects-title i {\n color: var(--mj-brand-primary);\n}\n\n.discovered-count {\n font-weight: 400;\n color: var(--mj-text-muted);\n font-size: 12px;\n}\n\n.discovered-objects-actions {\n display: flex;\n gap: 8px;\n}\n\n.discovered-action-btn {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n background: none;\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n padding: 3px 10px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: background 0.15s, color 0.15s;\n}\n\n.discovered-action-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.discovered-action-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.discovered-loading,\n.discovered-empty {\n padding: 16px;\n text-align: center;\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.discovered-loading i {\n margin-right: 6px;\n}\n\n.discovered-objects-list {\n max-height: 280px;\n overflow-y: auto;\n}\n\n.discovered-object-row {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 7px 14px;\n cursor: pointer;\n transition: background 0.1s;\n border-bottom: 1px solid var(--mj-border-subtle);\n font-size: 13px;\n}\n\n.discovered-object-row:last-child {\n border-bottom: none;\n}\n\n.discovered-object-row:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.discovered-object-row.selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n}\n\n.discovered-object-row input[type=\"checkbox\"] {\n flex-shrink: 0;\n width: 16px;\n height: 16px;\n accent-color: var(--mj-brand-primary);\n cursor: pointer;\n}\n\n.discovered-object-name {\n flex: 1;\n color: var(--mj-text-primary);\n font-weight: 500;\n}\n\n.discovered-object-api-name {\n flex: 1;\n color: var(--mj-text-muted);\n font-size: 12px;\n font-family: monospace;\n}\n\n.discovered-object-badges {\n display: flex;\n gap: 4px;\n}\n\n.discovered-badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n border-radius: 4px;\n font-size: 10px;\n}\n\n.discovered-badge.incremental {\n color: var(--mj-status-success);\n background: var(--mj-status-success-bg);\n}\n\n.discovered-badge.writable {\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n}\n"] }]
3136
3137
  }], null, { entityTreeDropdown: [{
3137
3138
  type: ViewChild,
3138
3139
  args: ['entityTreeDropdown']