@keboola/design 10.1.0 → 11.0.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 (504) hide show
  1. package/AGENTS.md +2 -0
  2. package/dist/MermaidDiagram-ZU5KAVRT.js +18 -0
  3. package/dist/{MermaidDiagram-EOKJHQQV.js.map → MermaidDiagram-ZU5KAVRT.js.map} +1 -1
  4. package/dist/charts.d.ts +14 -8
  5. package/dist/charts.js +6 -1
  6. package/dist/charts.js.map +1 -1
  7. package/dist/chunk-2YYJDKSP.js +51 -0
  8. package/dist/chunk-2YYJDKSP.js.map +1 -0
  9. package/dist/chunk-3P5UUCFI.js +385 -0
  10. package/dist/chunk-3P5UUCFI.js.map +1 -0
  11. package/dist/chunk-3QDFDDWZ.js +99 -0
  12. package/dist/chunk-3QDFDDWZ.js.map +1 -0
  13. package/dist/chunk-3W27OLK5.js +15 -0
  14. package/dist/chunk-3W27OLK5.js.map +1 -0
  15. package/dist/chunk-4FIZZONW.js +40 -0
  16. package/dist/chunk-4FIZZONW.js.map +1 -0
  17. package/dist/chunk-4GIAXOJG.js +133 -0
  18. package/dist/chunk-4GIAXOJG.js.map +1 -0
  19. package/dist/chunk-52NDNMK7.js +99 -0
  20. package/dist/chunk-52NDNMK7.js.map +1 -0
  21. package/dist/chunk-576G5OES.js +201 -0
  22. package/dist/chunk-576G5OES.js.map +1 -0
  23. package/dist/chunk-5AIE6SET.js +659 -0
  24. package/dist/chunk-5AIE6SET.js.map +1 -0
  25. package/dist/chunk-5FTNAZRW.js +327 -0
  26. package/dist/chunk-5FTNAZRW.js.map +1 -0
  27. package/dist/chunk-5IG2S7ZY.js +70 -0
  28. package/dist/chunk-5IG2S7ZY.js.map +1 -0
  29. package/dist/chunk-5QCXHNCW.js +404 -0
  30. package/dist/chunk-5QCXHNCW.js.map +1 -0
  31. package/dist/chunk-6DUMGC7Y.js +105 -0
  32. package/dist/chunk-6DUMGC7Y.js.map +1 -0
  33. package/dist/chunk-6J25CVST.js +174 -0
  34. package/dist/chunk-6J25CVST.js.map +1 -0
  35. package/dist/chunk-6NN35XOP.js +120 -0
  36. package/dist/chunk-6NN35XOP.js.map +1 -0
  37. package/dist/chunk-6NZBVA4T.js +24 -0
  38. package/dist/chunk-6NZBVA4T.js.map +1 -0
  39. package/dist/chunk-6W5BHRCL.js +295 -0
  40. package/dist/chunk-6W5BHRCL.js.map +1 -0
  41. package/dist/chunk-72BKRCEG.js +409 -0
  42. package/dist/chunk-72BKRCEG.js.map +1 -0
  43. package/dist/{chunk-Q7NWXLCT.js → chunk-7GTI3PPI.js} +53 -48
  44. package/dist/chunk-7GTI3PPI.js.map +1 -0
  45. package/dist/chunk-7P6PLZ4B.js +74 -0
  46. package/dist/chunk-7P6PLZ4B.js.map +1 -0
  47. package/dist/chunk-7WZWY5IA.js +46 -0
  48. package/dist/chunk-7WZWY5IA.js.map +1 -0
  49. package/dist/chunk-AIYO2632.js +489 -0
  50. package/dist/chunk-AIYO2632.js.map +1 -0
  51. package/dist/chunk-ANFZWPNE.js +112 -0
  52. package/dist/chunk-ANFZWPNE.js.map +1 -0
  53. package/dist/chunk-ANZTVAJU.js +73 -0
  54. package/dist/chunk-ANZTVAJU.js.map +1 -0
  55. package/dist/chunk-BD5BTJKX.js +166 -0
  56. package/dist/chunk-BD5BTJKX.js.map +1 -0
  57. package/dist/chunk-BHGIDSRJ.js +140 -0
  58. package/dist/chunk-BHGIDSRJ.js.map +1 -0
  59. package/dist/chunk-BSQWZITZ.js +507 -0
  60. package/dist/chunk-BSQWZITZ.js.map +1 -0
  61. package/dist/chunk-D3LAIK62.js +23 -0
  62. package/dist/chunk-D3LAIK62.js.map +1 -0
  63. package/dist/chunk-DODCR43C.js +155 -0
  64. package/dist/chunk-DODCR43C.js.map +1 -0
  65. package/dist/chunk-EEK5NGZF.js +40 -0
  66. package/dist/chunk-EEK5NGZF.js.map +1 -0
  67. package/dist/chunk-ENRG7TXA.js +11 -0
  68. package/dist/chunk-ENRG7TXA.js.map +1 -0
  69. package/dist/chunk-EQRMGIGY.js +239 -0
  70. package/dist/chunk-EQRMGIGY.js.map +1 -0
  71. package/dist/{chunk-XV3UUOYF.js → chunk-ERAHK5YQ.js} +9 -359
  72. package/dist/chunk-ERAHK5YQ.js.map +1 -0
  73. package/dist/chunk-F3FOFY2P.js +124 -0
  74. package/dist/chunk-F3FOFY2P.js.map +1 -0
  75. package/dist/chunk-F6BTWFOC.js +507 -0
  76. package/dist/chunk-F6BTWFOC.js.map +1 -0
  77. package/dist/chunk-F6J6NNAL.js +34 -0
  78. package/dist/chunk-F6J6NNAL.js.map +1 -0
  79. package/dist/chunk-FCHJ7D5O.js +59 -0
  80. package/dist/chunk-FCHJ7D5O.js.map +1 -0
  81. package/dist/chunk-FFJTEQCC.js +80 -0
  82. package/dist/chunk-FFJTEQCC.js.map +1 -0
  83. package/dist/chunk-FUFMVW7O.js +64 -0
  84. package/dist/chunk-FUFMVW7O.js.map +1 -0
  85. package/dist/chunk-FVPGQ6UE.js +25 -0
  86. package/dist/chunk-FVPGQ6UE.js.map +1 -0
  87. package/dist/{chunk-JP7PNHLH.js → chunk-G3PMV62Z.js} +3 -10
  88. package/dist/chunk-G3PMV62Z.js.map +1 -0
  89. package/dist/chunk-GACFOW3E.js +51 -0
  90. package/dist/chunk-GACFOW3E.js.map +1 -0
  91. package/dist/chunk-GDT6HQMK.js +42 -0
  92. package/dist/chunk-GDT6HQMK.js.map +1 -0
  93. package/dist/chunk-HLGU22C6.js +2589 -0
  94. package/dist/chunk-HLGU22C6.js.map +1 -0
  95. package/dist/chunk-HPMYYGP7.js +134 -0
  96. package/dist/chunk-HPMYYGP7.js.map +1 -0
  97. package/dist/chunk-I2UCOD45.js +197 -0
  98. package/dist/chunk-I2UCOD45.js.map +1 -0
  99. package/dist/chunk-IEGDZUVM.js +75 -0
  100. package/dist/chunk-IEGDZUVM.js.map +1 -0
  101. package/dist/chunk-IIS7INHF.js +47 -0
  102. package/dist/chunk-IIS7INHF.js.map +1 -0
  103. package/dist/chunk-ITELSEFU.js +256 -0
  104. package/dist/chunk-ITELSEFU.js.map +1 -0
  105. package/dist/{chunk-CTCFYWJC.js → chunk-IXAYNBOY.js} +6 -6
  106. package/dist/{chunk-CTCFYWJC.js.map → chunk-IXAYNBOY.js.map} +1 -1
  107. package/dist/chunk-JUW2ETEI.js +191 -0
  108. package/dist/chunk-JUW2ETEI.js.map +1 -0
  109. package/dist/chunk-K65C7CVE.js +127 -0
  110. package/dist/chunk-K65C7CVE.js.map +1 -0
  111. package/dist/chunk-KDI64MCY.js +189 -0
  112. package/dist/chunk-KDI64MCY.js.map +1 -0
  113. package/dist/chunk-KN4ASMH5.js +160 -0
  114. package/dist/chunk-KN4ASMH5.js.map +1 -0
  115. package/dist/chunk-KQW7QNTU.js +1549 -0
  116. package/dist/chunk-KQW7QNTU.js.map +1 -0
  117. package/dist/chunk-KR7NXXHC.js +66 -0
  118. package/dist/chunk-KR7NXXHC.js.map +1 -0
  119. package/dist/chunk-KRZKIVMA.js +142 -0
  120. package/dist/chunk-KRZKIVMA.js.map +1 -0
  121. package/dist/{chunk-C3L3TBBT.js → chunk-KTTLLKGQ.js} +6 -63
  122. package/dist/chunk-KTTLLKGQ.js.map +1 -0
  123. package/dist/chunk-KWKSHPDP.js +234 -0
  124. package/dist/chunk-KWKSHPDP.js.map +1 -0
  125. package/dist/chunk-KZVC7OYG.js +57 -0
  126. package/dist/chunk-KZVC7OYG.js.map +1 -0
  127. package/dist/chunk-L5DHUN2V.js +204 -0
  128. package/dist/chunk-L5DHUN2V.js.map +1 -0
  129. package/dist/chunk-LCTGEH57.js +1376 -0
  130. package/dist/chunk-LCTGEH57.js.map +1 -0
  131. package/dist/chunk-LXLIQ2D6.js +12 -0
  132. package/dist/chunk-LXLIQ2D6.js.map +1 -0
  133. package/dist/chunk-M4CTURKX.js +84 -0
  134. package/dist/chunk-M4CTURKX.js.map +1 -0
  135. package/dist/chunk-M6LTUPVP.js +301 -0
  136. package/dist/chunk-M6LTUPVP.js.map +1 -0
  137. package/dist/chunk-MA6RRHDT.js +291 -0
  138. package/dist/chunk-MA6RRHDT.js.map +1 -0
  139. package/dist/chunk-MODE4QIA.js +6 -0
  140. package/dist/chunk-MODE4QIA.js.map +1 -0
  141. package/dist/chunk-MVILMVGG.js +118 -0
  142. package/dist/chunk-MVILMVGG.js.map +1 -0
  143. package/dist/chunk-MWS4VCLV.js +17 -0
  144. package/dist/chunk-MWS4VCLV.js.map +1 -0
  145. package/dist/chunk-NEUX74SO.js +315 -0
  146. package/dist/chunk-NEUX74SO.js.map +1 -0
  147. package/dist/chunk-NFHKYBRD.js +156 -0
  148. package/dist/chunk-NFHKYBRD.js.map +1 -0
  149. package/dist/chunk-NHJNNXD3.js +89 -0
  150. package/dist/chunk-NHJNNXD3.js.map +1 -0
  151. package/dist/chunk-O2BF3HZL.js +33 -0
  152. package/dist/chunk-O2BF3HZL.js.map +1 -0
  153. package/dist/chunk-OANXCZYD.js +212 -0
  154. package/dist/chunk-OANXCZYD.js.map +1 -0
  155. package/dist/chunk-ODJF7YIP.js +230 -0
  156. package/dist/chunk-ODJF7YIP.js.map +1 -0
  157. package/dist/chunk-ON4BJTHI.js +101 -0
  158. package/dist/chunk-ON4BJTHI.js.map +1 -0
  159. package/dist/{chunk-VMFSRV5H.js → chunk-OTL5WXIJ.js} +2 -2
  160. package/dist/{chunk-VMFSRV5H.js.map → chunk-OTL5WXIJ.js.map} +1 -1
  161. package/dist/{chunk-VPPM7UUQ.js → chunk-PACNBKJV.js} +3 -3
  162. package/dist/{chunk-VPPM7UUQ.js.map → chunk-PACNBKJV.js.map} +1 -1
  163. package/dist/{chunk-ESBL3IPF.js → chunk-PROCA7K7.js} +2 -2
  164. package/dist/{chunk-ESBL3IPF.js.map → chunk-PROCA7K7.js.map} +1 -1
  165. package/dist/chunk-QGMIPA67.js +85 -0
  166. package/dist/chunk-QGMIPA67.js.map +1 -0
  167. package/dist/chunk-QQA37LFB.js +190 -0
  168. package/dist/chunk-QQA37LFB.js.map +1 -0
  169. package/dist/chunk-QZAWRSEB.js +61 -0
  170. package/dist/chunk-QZAWRSEB.js.map +1 -0
  171. package/dist/chunk-R74KGWNS.js +699 -0
  172. package/dist/chunk-R74KGWNS.js.map +1 -0
  173. package/dist/chunk-RFDLHMKL.js +110 -0
  174. package/dist/chunk-RFDLHMKL.js.map +1 -0
  175. package/dist/chunk-RL64HN7S.js +40 -0
  176. package/dist/chunk-RL64HN7S.js.map +1 -0
  177. package/dist/chunk-RMRQKPL7.js +115 -0
  178. package/dist/chunk-RMRQKPL7.js.map +1 -0
  179. package/dist/{chunk-BOHNXTMM.js → chunk-RQVK4IYC.js} +3 -3
  180. package/dist/{chunk-BOHNXTMM.js.map → chunk-RQVK4IYC.js.map} +1 -1
  181. package/dist/chunk-RTW56PWZ.js +59 -0
  182. package/dist/chunk-RTW56PWZ.js.map +1 -0
  183. package/dist/chunk-RUTPQNLR.js +266 -0
  184. package/dist/chunk-RUTPQNLR.js.map +1 -0
  185. package/dist/chunk-S6TAF63G.js +25 -0
  186. package/dist/chunk-S6TAF63G.js.map +1 -0
  187. package/dist/chunk-SBGAUGXY.js +224 -0
  188. package/dist/chunk-SBGAUGXY.js.map +1 -0
  189. package/dist/chunk-SC275NHZ.js +407 -0
  190. package/dist/chunk-SC275NHZ.js.map +1 -0
  191. package/dist/chunk-SCQPU4UE.js +97 -0
  192. package/dist/chunk-SCQPU4UE.js.map +1 -0
  193. package/dist/chunk-SFFF2WQP.js +8 -0
  194. package/dist/chunk-SFFF2WQP.js.map +1 -0
  195. package/dist/chunk-SJYMHZKA.js +36 -0
  196. package/dist/chunk-SJYMHZKA.js.map +1 -0
  197. package/dist/chunk-SLCCUJVN.js +125 -0
  198. package/dist/chunk-SLCCUJVN.js.map +1 -0
  199. package/dist/{chunk-IJTHFNNJ.js → chunk-SVBSNSD4.js} +10 -12
  200. package/dist/chunk-SVBSNSD4.js.map +1 -0
  201. package/dist/chunk-SVPLTL35.js +62 -0
  202. package/dist/chunk-SVPLTL35.js.map +1 -0
  203. package/dist/{chunk-63NSN2VL.js → chunk-SWQFYNYG.js} +115 -51
  204. package/dist/chunk-SWQFYNYG.js.map +1 -0
  205. package/dist/chunk-THHB4EWS.js +72 -0
  206. package/dist/chunk-THHB4EWS.js.map +1 -0
  207. package/dist/chunk-TUCDD33E.js +246 -0
  208. package/dist/chunk-TUCDD33E.js.map +1 -0
  209. package/dist/chunk-TV4WAP2R.js +14 -0
  210. package/dist/chunk-TV4WAP2R.js.map +1 -0
  211. package/dist/chunk-U3A6YBTZ.js +134 -0
  212. package/dist/chunk-U3A6YBTZ.js.map +1 -0
  213. package/dist/chunk-UGT6DKWM.js +95 -0
  214. package/dist/chunk-UGT6DKWM.js.map +1 -0
  215. package/dist/chunk-VSERHUWD.js +212 -0
  216. package/dist/chunk-VSERHUWD.js.map +1 -0
  217. package/dist/chunk-VYG7BDXC.js +49 -0
  218. package/dist/chunk-VYG7BDXC.js.map +1 -0
  219. package/dist/chunk-WETKNYZX.js +52 -0
  220. package/dist/chunk-WETKNYZX.js.map +1 -0
  221. package/dist/chunk-WGG4AML3.js +216 -0
  222. package/dist/chunk-WGG4AML3.js.map +1 -0
  223. package/dist/chunk-WKAUEL6I.js +30 -0
  224. package/dist/chunk-WKAUEL6I.js.map +1 -0
  225. package/dist/chunk-WPOLA5CG.js +81 -0
  226. package/dist/chunk-WPOLA5CG.js.map +1 -0
  227. package/dist/chunk-WPVETCGJ.js +254 -0
  228. package/dist/chunk-WPVETCGJ.js.map +1 -0
  229. package/dist/chunk-WTSM3A7E.js +13 -0
  230. package/dist/chunk-WTSM3A7E.js.map +1 -0
  231. package/dist/chunk-WU3F2K3T.js +148 -0
  232. package/dist/chunk-WU3F2K3T.js.map +1 -0
  233. package/dist/chunk-WZZK2DTZ.js +39 -0
  234. package/dist/chunk-WZZK2DTZ.js.map +1 -0
  235. package/dist/chunk-X4IHLKRD.js +42 -0
  236. package/dist/chunk-X4IHLKRD.js.map +1 -0
  237. package/dist/chunk-XAHEXZJC.js +80 -0
  238. package/dist/chunk-XAHEXZJC.js.map +1 -0
  239. package/dist/chunk-XCYGJDUX.js +31 -0
  240. package/dist/chunk-XCYGJDUX.js.map +1 -0
  241. package/dist/chunk-Y4W3JORC.js +104 -0
  242. package/dist/chunk-Y4W3JORC.js.map +1 -0
  243. package/dist/{chunk-7PUUHEJQ.js → chunk-YFZJ3ZLG.js} +26 -42
  244. package/dist/chunk-YFZJ3ZLG.js.map +1 -0
  245. package/dist/{chunk-6FPEI4EM.js → chunk-YI3WLXEN.js} +27 -2323
  246. package/dist/chunk-YI3WLXEN.js.map +1 -0
  247. package/dist/chunk-ZBKFSPD3.js +29 -0
  248. package/dist/chunk-ZBKFSPD3.js.map +1 -0
  249. package/dist/chunk-ZOERRQ6A.js +79 -0
  250. package/dist/chunk-ZOERRQ6A.js.map +1 -0
  251. package/dist/chunk-ZSTGUKHU.js +10 -0
  252. package/dist/chunk-ZSTGUKHU.js.map +1 -0
  253. package/dist/chunk-ZUEHDL27.js +65 -0
  254. package/dist/chunk-ZUEHDL27.js.map +1 -0
  255. package/dist/editors.js +22 -14
  256. package/dist/editors.js.map +1 -1
  257. package/dist/icons.js +7 -2
  258. package/dist/index.d.ts +8 -18
  259. package/dist/index.js +121 -15800
  260. package/dist/index.js.map +1 -1
  261. package/dist/internal/blocks/AIKit.js +30 -0
  262. package/dist/internal/blocks/AIKit.js.map +1 -0
  263. package/dist/internal/blocks/AppShell.js +11 -0
  264. package/dist/internal/blocks/AppShell.js.map +1 -0
  265. package/dist/internal/blocks/AutoSaveTextarea.js +14 -0
  266. package/dist/internal/blocks/AutoSaveTextarea.js.map +1 -0
  267. package/dist/internal/blocks/BrandEditor.js +23 -0
  268. package/dist/internal/blocks/BrandEditor.js.map +1 -0
  269. package/dist/internal/blocks/ChartPanel.js +10 -0
  270. package/dist/internal/blocks/ChartPanel.js.map +1 -0
  271. package/dist/internal/blocks/ClipboardButton.js +12 -0
  272. package/dist/internal/blocks/ClipboardButton.js.map +1 -0
  273. package/dist/internal/blocks/ColorInput.js +13 -0
  274. package/dist/internal/blocks/ColorInput.js.map +1 -0
  275. package/dist/internal/blocks/ColorModeSwitch.js +13 -0
  276. package/dist/internal/blocks/ColorModeSwitch.js.map +1 -0
  277. package/dist/internal/blocks/Command.js +15 -0
  278. package/dist/internal/blocks/Command.js.map +1 -0
  279. package/dist/internal/blocks/CopyField.js +11 -0
  280. package/dist/internal/blocks/CopyField.js.map +1 -0
  281. package/dist/internal/blocks/DashboardHero.js +9 -0
  282. package/dist/internal/blocks/DashboardHero.js.map +1 -0
  283. package/dist/internal/blocks/DateInput.js +16 -0
  284. package/dist/internal/blocks/DateInput.js.map +1 -0
  285. package/dist/internal/blocks/DateRangeInput.js +16 -0
  286. package/dist/internal/blocks/DateRangeInput.js.map +1 -0
  287. package/dist/internal/blocks/EmptyConfigurationActionCard.js +10 -0
  288. package/dist/internal/blocks/EmptyConfigurationActionCard.js.map +1 -0
  289. package/dist/internal/blocks/EmptyState.js +4 -0
  290. package/dist/internal/blocks/EmptyState.js.map +1 -0
  291. package/dist/internal/blocks/ErrorState.js +5 -0
  292. package/dist/internal/blocks/ErrorState.js.map +1 -0
  293. package/dist/internal/blocks/ExportMenu.js +13 -0
  294. package/dist/internal/blocks/ExportMenu.js.map +1 -0
  295. package/dist/internal/blocks/Form.js +29 -0
  296. package/dist/internal/blocks/Form.js.map +1 -0
  297. package/dist/internal/blocks/FormGroup.js +18 -0
  298. package/dist/internal/blocks/FormGroup.js.map +1 -0
  299. package/dist/internal/blocks/GoogleButton.js +10 -0
  300. package/dist/internal/blocks/GoogleButton.js.map +1 -0
  301. package/dist/internal/blocks/MicrosoftButton.js +10 -0
  302. package/dist/internal/blocks/MicrosoftButton.js.map +1 -0
  303. package/dist/internal/blocks/MultiActionButtonGroup.js +12 -0
  304. package/dist/internal/blocks/MultiActionButtonGroup.js.map +1 -0
  305. package/dist/internal/blocks/MultiCombobox.js +14 -0
  306. package/dist/internal/blocks/MultiCombobox.js.map +1 -0
  307. package/dist/internal/blocks/NumberInput.js +12 -0
  308. package/dist/internal/blocks/NumberInput.js.map +1 -0
  309. package/dist/internal/blocks/OtpInput.js +10 -0
  310. package/dist/internal/blocks/OtpInput.js.map +1 -0
  311. package/dist/internal/blocks/PageHeader.js +9 -0
  312. package/dist/internal/blocks/PageHeader.js.map +1 -0
  313. package/dist/internal/blocks/PageLayout.js +9 -0
  314. package/dist/internal/blocks/PageLayout.js.map +1 -0
  315. package/dist/internal/blocks/PageToolbar.js +13 -0
  316. package/dist/internal/blocks/PageToolbar.js.map +1 -0
  317. package/dist/internal/blocks/PasswordInput.js +13 -0
  318. package/dist/internal/blocks/PasswordInput.js.map +1 -0
  319. package/dist/internal/blocks/SearchInput.js +12 -0
  320. package/dist/internal/blocks/SearchInput.js.map +1 -0
  321. package/dist/internal/blocks/SearchInputWithNavigation.js +16 -0
  322. package/dist/internal/blocks/SearchInputWithNavigation.js.map +1 -0
  323. package/dist/internal/blocks/SectionNav.js +15 -0
  324. package/dist/internal/blocks/SectionNav.js.map +1 -0
  325. package/dist/internal/blocks/SplitButton.js +14 -0
  326. package/dist/internal/blocks/SplitButton.js.map +1 -0
  327. package/dist/internal/blocks/StatCard.js +10 -0
  328. package/dist/internal/blocks/StatCard.js.map +1 -0
  329. package/dist/internal/blocks/TextInput.js +13 -0
  330. package/dist/internal/blocks/TextInput.js.map +1 -0
  331. package/dist/internal/blocks/Textarea.js +13 -0
  332. package/dist/internal/blocks/Textarea.js.map +1 -0
  333. package/dist/internal/blocks/TimeInput.js +17 -0
  334. package/dist/internal/blocks/TimeInput.js.map +1 -0
  335. package/dist/internal/components/Alert.js +11 -0
  336. package/dist/internal/components/Alert.js.map +1 -0
  337. package/dist/internal/components/AlertModal.js +11 -0
  338. package/dist/internal/components/AlertModal.js.map +1 -0
  339. package/dist/internal/components/Avatar.js +9 -0
  340. package/dist/internal/components/Avatar.js.map +1 -0
  341. package/dist/internal/components/Badge.js +9 -0
  342. package/dist/internal/components/Badge.js.map +1 -0
  343. package/dist/internal/components/BrandLogo.js +11 -0
  344. package/dist/internal/components/BrandLogo.js.map +1 -0
  345. package/dist/internal/components/Breadcrumb.js +14 -0
  346. package/dist/internal/components/Breadcrumb.js.map +1 -0
  347. package/dist/internal/components/Button.js +10 -0
  348. package/dist/internal/components/Button.js.map +1 -0
  349. package/dist/internal/components/ButtonGroup.js +9 -0
  350. package/dist/internal/components/ButtonGroup.js.map +1 -0
  351. package/dist/internal/components/Calendar.js +9 -0
  352. package/dist/internal/components/Calendar.js.map +1 -0
  353. package/dist/internal/components/Card.js +9 -0
  354. package/dist/internal/components/Card.js.map +1 -0
  355. package/dist/internal/components/Checkbox.js +11 -0
  356. package/dist/internal/components/Checkbox.js.map +1 -0
  357. package/dist/internal/components/Clipboard.js +9 -0
  358. package/dist/internal/components/Clipboard.js.map +1 -0
  359. package/dist/internal/components/Collapsible.js +9 -0
  360. package/dist/internal/components/Collapsible.js.map +1 -0
  361. package/dist/internal/components/CollapsiblePanel.js +11 -0
  362. package/dist/internal/components/CollapsiblePanel.js.map +1 -0
  363. package/dist/internal/components/Combobox.js +13 -0
  364. package/dist/internal/components/Combobox.js.map +1 -0
  365. package/dist/internal/components/DatePicker.js +11 -0
  366. package/dist/internal/components/DatePicker.js.map +1 -0
  367. package/dist/internal/components/DateRangePicker.js +17 -0
  368. package/dist/internal/components/DateRangePicker.js.map +1 -0
  369. package/dist/internal/components/DiffView.js +9 -0
  370. package/dist/internal/components/DiffView.js.map +1 -0
  371. package/dist/internal/components/DotsLoader.js +5 -0
  372. package/dist/internal/components/DotsLoader.js.map +1 -0
  373. package/dist/internal/components/DropdownMenu.js +11 -0
  374. package/dist/internal/components/DropdownMenu.js.map +1 -0
  375. package/dist/internal/components/EmptySearchContent.js +4 -0
  376. package/dist/internal/components/EmptySearchContent.js.map +1 -0
  377. package/dist/internal/components/FileUpload.js +11 -0
  378. package/dist/internal/components/FileUpload.js.map +1 -0
  379. package/dist/internal/components/FullScreenModal.js +12 -0
  380. package/dist/internal/components/FullScreenModal.js.map +1 -0
  381. package/dist/internal/components/HelpBlock.js +4 -0
  382. package/dist/internal/components/HelpBlock.js.map +1 -0
  383. package/dist/internal/components/HoverCard.js +9 -0
  384. package/dist/internal/components/HoverCard.js.map +1 -0
  385. package/dist/internal/components/InputGroup.js +11 -0
  386. package/dist/internal/components/InputGroup.js.map +1 -0
  387. package/dist/internal/components/Kbd.js +9 -0
  388. package/dist/internal/components/Kbd.js.map +1 -0
  389. package/dist/internal/components/Label.js +9 -0
  390. package/dist/internal/components/Label.js.map +1 -0
  391. package/dist/internal/components/Link.js +9 -0
  392. package/dist/internal/components/Link.js.map +1 -0
  393. package/dist/internal/components/MarkedText.js +5 -0
  394. package/dist/internal/components/MarkedText.js.map +1 -0
  395. package/dist/internal/components/MergeEditor/ConflictStatus/ConflictStatusIndicator.js +10 -0
  396. package/dist/internal/components/MergeEditor/ConflictStatus/ConflictStatusIndicator.js.map +1 -0
  397. package/dist/internal/components/MergeEditor/PaneHeader.js +4 -0
  398. package/dist/internal/components/MergeEditor/PaneHeader.js.map +1 -0
  399. package/dist/internal/components/MergeEditor/constants.js +4 -0
  400. package/dist/internal/components/MergeEditor/constants.js.map +1 -0
  401. package/dist/internal/components/MergeEditor/useMergeDiff.js +5 -0
  402. package/dist/internal/components/MergeEditor/useMergeDiff.js.map +1 -0
  403. package/dist/internal/components/Modal.js +13 -0
  404. package/dist/internal/components/Modal.js.map +1 -0
  405. package/dist/internal/components/Navbar.js +14 -0
  406. package/dist/internal/components/Navbar.js.map +1 -0
  407. package/dist/internal/components/Pagination.js +11 -0
  408. package/dist/internal/components/Pagination.js.map +1 -0
  409. package/dist/internal/components/PanelWithDetails.js +11 -0
  410. package/dist/internal/components/PanelWithDetails.js.map +1 -0
  411. package/dist/internal/components/Popconfirm.js +12 -0
  412. package/dist/internal/components/Popconfirm.js.map +1 -0
  413. package/dist/internal/components/Popover.js +9 -0
  414. package/dist/internal/components/Popover.js.map +1 -0
  415. package/dist/internal/components/Progress.js +9 -0
  416. package/dist/internal/components/Progress.js.map +1 -0
  417. package/dist/internal/components/RadioGroup.js +12 -0
  418. package/dist/internal/components/RadioGroup.js.map +1 -0
  419. package/dist/internal/components/Resizable.js +9 -0
  420. package/dist/internal/components/Resizable.js.map +1 -0
  421. package/dist/internal/components/ScrollArea.js +9 -0
  422. package/dist/internal/components/ScrollArea.js.map +1 -0
  423. package/dist/internal/components/Search.js +10 -0
  424. package/dist/internal/components/Search.js.map +1 -0
  425. package/dist/internal/components/Select.js +12 -0
  426. package/dist/internal/components/Select.js.map +1 -0
  427. package/dist/internal/components/Separator.js +9 -0
  428. package/dist/internal/components/Separator.js.map +1 -0
  429. package/dist/internal/components/Sheet.js +12 -0
  430. package/dist/internal/components/Sheet.js.map +1 -0
  431. package/dist/internal/components/Sidebar.js +20 -0
  432. package/dist/internal/components/Sidebar.js.map +1 -0
  433. package/dist/internal/components/Skeleton/Skeleton.js +9 -0
  434. package/dist/internal/components/Skeleton/Skeleton.js.map +1 -0
  435. package/dist/internal/components/Skeleton/SkeletonList.js +10 -0
  436. package/dist/internal/components/Skeleton/SkeletonList.js.map +1 -0
  437. package/dist/internal/components/Slider.js +11 -0
  438. package/dist/internal/components/Slider.js.map +1 -0
  439. package/dist/internal/components/SpotlightBackdrop.js +9 -0
  440. package/dist/internal/components/SpotlightBackdrop.js.map +1 -0
  441. package/dist/internal/components/Stepper.js +10 -0
  442. package/dist/internal/components/Stepper.js.map +1 -0
  443. package/dist/internal/components/Switch.js +10 -0
  444. package/dist/internal/components/Switch.js.map +1 -0
  445. package/dist/internal/components/Table.js +10 -0
  446. package/dist/internal/components/Table.js.map +1 -0
  447. package/dist/internal/components/Tabs.js +12 -0
  448. package/dist/internal/components/Tabs.js.map +1 -0
  449. package/dist/internal/components/ThemeProvider.js +10 -0
  450. package/dist/internal/components/ThemeProvider.js.map +1 -0
  451. package/dist/internal/components/TimePicker.js +12 -0
  452. package/dist/internal/components/TimePicker.js.map +1 -0
  453. package/dist/internal/components/Timeline.js +10 -0
  454. package/dist/internal/components/Timeline.js.map +1 -0
  455. package/dist/internal/components/Toast.js +11 -0
  456. package/dist/internal/components/Toast.js.map +1 -0
  457. package/dist/internal/components/Toggle.js +9 -0
  458. package/dist/internal/components/Toggle.js.map +1 -0
  459. package/dist/internal/components/ToggleGroup.js +9 -0
  460. package/dist/internal/components/ToggleGroup.js.map +1 -0
  461. package/dist/internal/components/Tooltip.js +8 -0
  462. package/dist/internal/components/Tooltip.js.map +1 -0
  463. package/dist/internal/components/Truncated.js +9 -0
  464. package/dist/internal/components/Truncated.js.map +1 -0
  465. package/dist/internal/components/Workbench.js +11 -0
  466. package/dist/internal/components/Workbench.js.map +1 -0
  467. package/dist/internal/components/ZoomableSvg.js +13 -0
  468. package/dist/internal/components/ZoomableSvg.js.map +1 -0
  469. package/dist/internal/hooks/useAutosizeInput.js +4 -0
  470. package/dist/internal/hooks/useAutosizeInput.js.map +1 -0
  471. package/dist/internal/hooks/useScrollbarPosition.js +5 -0
  472. package/dist/internal/hooks/useScrollbarPosition.js.map +1 -0
  473. package/dist/internal/hooks/useStableCallback.js +4 -0
  474. package/dist/internal/hooks/useStableCallback.js.map +1 -0
  475. package/dist/internal/utils/mergeRefs.js +4 -0
  476. package/dist/internal/utils/mergeRefs.js.map +1 -0
  477. package/dist/internal/utils.js +8 -0
  478. package/dist/internal/utils.js.map +1 -0
  479. package/dist/markdown-editor.js +23 -9
  480. package/dist/markdown-editor.js.map +1 -1
  481. package/dist/mermaid.js +16 -8
  482. package/dist/rjsf.js +102 -29
  483. package/dist/rjsf.js.map +1 -1
  484. package/dist/styles.css +1 -1
  485. package/dist/testing.js +8 -3
  486. package/dist/testing.js.map +1 -1
  487. package/package.json +9 -8
  488. package/src/styles.css +35 -7
  489. package/src/theme.css +64 -0
  490. package/dist/MermaidDiagram-EOKJHQQV.js +0 -10
  491. package/dist/chunk-63NSN2VL.js.map +0 -1
  492. package/dist/chunk-6FPEI4EM.js.map +0 -1
  493. package/dist/chunk-7PUUHEJQ.js.map +0 -1
  494. package/dist/chunk-C3L3TBBT.js.map +0 -1
  495. package/dist/chunk-IJTHFNNJ.js.map +0 -1
  496. package/dist/chunk-JP7PNHLH.js.map +0 -1
  497. package/dist/chunk-KPNAW5MU.js +0 -229
  498. package/dist/chunk-KPNAW5MU.js.map +0 -1
  499. package/dist/chunk-L37JJ6MR.js +0 -152
  500. package/dist/chunk-L37JJ6MR.js.map +0 -1
  501. package/dist/chunk-Q7NWXLCT.js.map +0 -1
  502. package/dist/chunk-SYIEF644.js +0 -1016
  503. package/dist/chunk-SYIEF644.js.map +0 -1
  504. package/dist/chunk-XV3UUOYF.js.map +0 -1
package/dist/rjsf.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/blocks/RjsfSchemaEditor/markdownContext.ts","../src/blocks/RjsfSchemaEditor/widgets/CodeEditorWidget.tsx","../src/blocks/RjsfSchemaEditor/fields/CodeEditorField.tsx","../src/blocks/RjsfSchemaEditor/fieldHelpers.ts","../src/blocks/RjsfSchemaEditor/SchemaDescription.tsx","../src/blocks/RjsfSchemaEditor/fields/GridObjectField.tsx","../src/blocks/RjsfSchemaEditor/fields/InfoField.tsx","../src/blocks/RjsfSchemaEditor/TooltipIcon.tsx","../src/blocks/RjsfSchemaEditor/fields/TableArrayField.tsx","../src/blocks/RjsfSchemaEditor/fields/TabsObjectField.tsx","../src/blocks/RjsfSchemaEditor/templates/ArrayFieldItemTemplate.tsx","../src/blocks/RjsfSchemaEditor/templates/ArrayFieldTemplate.tsx","../src/blocks/RjsfSchemaEditor/templates/DescriptionFieldTemplate.tsx","../src/blocks/RjsfSchemaEditor/templates/ErrorListTemplate.tsx","../src/blocks/RjsfSchemaEditor/RootFormDataContext.ts","../src/blocks/RjsfSchemaEditor/templates/FieldTemplate.tsx","../src/blocks/RjsfSchemaEditor/templates/ObjectFieldTemplate.tsx","../src/blocks/RjsfSchemaEditor/widgets/CheckboxWidget.tsx","../src/blocks/RjsfSchemaEditor/widgets/DateWidget.tsx","../src/blocks/RjsfSchemaEditor/widgets/DynamicSelectWidget.tsx","../src/blocks/RjsfSchemaEditor/widgets/NumberWidget.tsx","../src/blocks/RjsfSchemaEditor/widgets/PasswordWidget.tsx","../src/blocks/RjsfSchemaEditor/widgets/RadioWidget.tsx","../src/blocks/RjsfSchemaEditor/widgets/SelectWidget.tsx","../src/blocks/RjsfSchemaEditor/widgets/TemplateWatchWidget.tsx","../src/blocks/RjsfSchemaEditor/widgets/TextareaWidget.tsx","../src/blocks/RjsfSchemaEditor/widgets/TextWidget.tsx","../src/blocks/RjsfSchemaEditor/registry.ts","../src/blocks/RjsfSchemaEditor/schemaUtils.ts","../src/blocks/RjsfSchemaEditor/RjsfSchemaEditor.tsx"],"names":["jsx","jsxs","useRef","useCallback","useState","DOMPurify","createContext","use","resolveByPath","Fragment","useEffect"],"mappings":"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","file":"rjsf.js","sourcesContent":["import { createContext, use } from 'react';\nimport type { ReactNode } from 'react';\n\nexport type RenderMarkdown = (source: string) => ReactNode;\n\n/** Falls back to plain text when the host app doesn't provide a markdown renderer. */\nconst RenderMarkdownContext = createContext<RenderMarkdown>((source) => source);\n\nexport const RenderMarkdownProvider = RenderMarkdownContext;\n\nexport const useRenderMarkdown = (): RenderMarkdown => use(RenderMarkdownContext);\n","import { useEffect, useState } from 'react';\n\nimport { CodeEditor } from '../../../components/CodeEditor';\n// Deliberately not the barrel: CodeEditorWidget.test.tsx stubs the whole\n// `components/CodeEditor` module to avoid mounting a real editor, so anything\n// imported from there is a stub. The mode guard has to be the real one.\nimport { isLanguageMode, type LANGUAGE_MODE } from '../../../components/CodeEditor/helpers';\n\ntype CodeEditorWidgetProps = {\n id: string;\n value: unknown;\n onChange: (value: unknown) => void;\n disabled?: boolean;\n readonly?: boolean;\n options: Record<string, unknown>;\n};\n\nconst isValidJson = (raw: string): boolean => {\n try {\n const parsed: unknown = JSON.parse(raw);\n return Boolean(parsed && typeof parsed === 'object');\n } catch {\n return false;\n }\n};\n\nconst sanitize = (val: unknown): string => {\n if (typeof val === 'object' && val !== null) return JSON.stringify(val, null, ' ');\n return String(val ?? '');\n};\n\nexport const CodeEditorWidget = ({\n id,\n value,\n onChange,\n disabled,\n readonly,\n options,\n}: CodeEditorWidgetProps) => {\n const editorOptions = (options.editor ?? {}) as Record<string, unknown>;\n const rawMode = (editorOptions.mode as string) ?? 'application/json';\n const mode: LANGUAGE_MODE = isLanguageMode(rawMode) ? rawMode : 'application/json';\n const isJsonMode = mode === 'application/json';\n const isReadOnly = disabled || readonly || !!(editorOptions.readOnly as boolean);\n\n // The editor owns its text so the user's formatting is preserved while typing;\n // external value changes sync in below only when the parsed data actually differs.\n const [text, setText] = useState(() => sanitize(value));\n\n useEffect(() => {\n setText((currentText) => {\n const sanitized = sanitize(value);\n if (currentText === sanitized) return currentText;\n\n // For JSON, compare parsed data to avoid unnecessary reformatting\n if (isJsonMode && isValidJson(currentText)) {\n try {\n if (\n JSON.stringify(JSON.parse(currentText)) ===\n JSON.stringify(typeof value === 'object' ? value : JSON.parse(sanitized))\n ) {\n return currentText; // same data, different formatting — keep editor's format\n }\n } catch {\n // parse failed — fall through to replace the text\n }\n }\n\n return sanitized;\n });\n }, [value, isJsonMode]);\n\n const handleChange = (raw: string) => {\n setText(raw);\n if (isJsonMode && isValidJson(raw)) {\n onChange(JSON.parse(raw));\n } else {\n onChange(raw);\n }\n };\n\n const help =\n isJsonMode && !isReadOnly && options.encryptionHint !== false ? (\n <>\n Properties prefixed with <code>#</code> sign will be encrypted on save. Already encrypted\n strings will persist.\n </>\n ) : null;\n\n return (\n <div id={id}>\n {isReadOnly ? (\n <CodeEditor\n variant=\"field\"\n value={text}\n mode={mode}\n readOnly\n withCopyButton\n withLineNumbers={editorOptions.lineNumbers !== false}\n />\n ) : (\n <CodeEditor\n variant=\"field\"\n value={text}\n mode={mode}\n onChange={handleChange}\n withCopyButton\n withLineNumbers={editorOptions.lineNumbers !== false}\n help={help}\n />\n )}\n </div>\n );\n};\n","import type { FieldProps } from '@rjsf/utils';\n\nimport { CodeEditorWidget } from '../widgets/CodeEditorWidget';\n\n/**\n * Field wrapper for CodeEditorWidget when used with type: \"object\".\n * RJSF only applies ui:widget to primitive types, so object-typed\n * code editors need a custom field that delegates to the widget.\n */\nexport const CodeEditorField = ({\n fieldPathId,\n formData,\n onChange,\n disabled,\n readonly,\n uiSchema,\n}: FieldProps) => {\n const uiOptions = uiSchema?.['ui:options'] as Record<string, unknown> | undefined;\n\n return (\n <CodeEditorWidget\n id={fieldPathId.$id}\n value={formData}\n onChange={(val: unknown) => onChange(val, fieldPathId.path)}\n disabled={!!disabled}\n readonly={!!readonly}\n options={uiOptions ?? {}}\n />\n );\n};\n","/**\n * Shared helpers for RJSF custom fields and widgets.\n */\nimport type { Field, Registry } from '@rjsf/utils';\n\n/** No-op function reused as onBlur/onFocus stub in custom fields. */\nconst noop = () => {};\n\nconst NullField: Field = () => null;\n\n/** RJSF always registers SchemaField; the fallback only satisfies the indexed-access type. */\nexport const getSchemaField = (registry: Registry): Field =>\n registry.fields.SchemaField ?? NullField;\n\n/** Stub props shared by all custom SchemaField call-sites (onBlur, onFocus, errorSchema). */\nexport const SCHEMA_FIELD_STUBS = {\n onBlur: noop,\n onFocus: noop,\n errorSchema: {} satisfies Record<string, never>,\n};\n\n/**\n * Resolves a dot-path against an object (e.g. \"_metadata_.table.columns\").\n *\n * json-editor watch paths may be prefixed with the schema `id` (e.g.\n * \"rootschema.endpoints.contact\"). The prefix is not a real data key — it\n * identifies the schema root. When the first segment doesn't exist in `data`\n * we retry without it so components using this convention still resolve.\n */\nexport const resolveByPath = (path: string, data: Record<string, unknown>): unknown => {\n const parts = path.split('.');\n const walk = (segments: string[]): unknown => {\n let current: unknown = data;\n for (const part of segments) {\n if (current == null || typeof current !== 'object') return undefined;\n current = (current as Record<string, unknown>)[part];\n }\n return current;\n };\n const result = walk(parts);\n const [first] = parts;\n if (result !== undefined || first === undefined || parts.length <= 1) return result;\n // First segment may be a schema id prefix — retry without it.\n if (!(first in data)) return walk(parts.slice(1));\n return result;\n};\n\n/**\n * Extracts a property name from a simple Mustache-like template.\n * e.g. \"{{item.field_name}}\" → \"field_name\"\n */\nexport const extractProperty = (template: string): string => {\n const match = /\\{\\{item\\.(\\w+)\\}\\}/.exec(template);\n return match?.[1] ?? '';\n};\n\n/**\n * Builds select options from watched form data and enumSource config.\n *\n * Supports two json-editor enumSource formats:\n * 1. String: `enumSource: \"varName\"` — use the watched array directly as string values\n * 2. Array: `enumSource: [{ source, value, title }]` — map items through templates\n */\nexport const buildDynamicOptions = (\n watch: Record<string, string>,\n enumSource: unknown,\n rootFormData: Record<string, unknown>,\n): { value: string; label: string }[] => {\n if (typeof enumSource === 'string') {\n const watchPath = watch[enumSource];\n if (!watchPath) return [];\n const sourceData = resolveByPath(watchPath, rootFormData);\n if (!Array.isArray(sourceData)) return [];\n return sourceData.map((item) => {\n const val = String(item ?? '');\n return { value: val, label: val };\n });\n }\n\n if (Array.isArray(enumSource) && enumSource.length > 0) {\n if (enumSource.length > 1) {\n console.warn('[RJSF] Multiple enumSource entries are not supported, only the first is used.');\n }\n const source = enumSource[0] as { source: string; value: string; title: string };\n const watchPath = watch[source.source];\n if (!watchPath) return [];\n const sourceData = resolveByPath(watchPath, rootFormData);\n if (!Array.isArray(sourceData)) return [];\n\n const valueProp = extractProperty(source.value);\n const titleProp = extractProperty(source.title);\n\n return sourceData\n .filter((item): item is Record<string, unknown> => item != null && typeof item === 'object')\n .map((item) => ({\n value: String(item[valueProp] ?? ''),\n label: String(item[titleProp] ?? item[valueProp] ?? ''),\n }));\n }\n\n return [];\n};\n\n/**\n * Builds a child `fieldPathId` for a nested SchemaField.\n * Joins segments with \"_\" for the $id and appends them to the path array.\n */\nexport const childFieldPathId = (\n parentFieldPathId: { $id?: string; path?: (string | number)[] } | undefined,\n ...segments: (string | number)[]\n) => ({\n $id: [parentFieldPathId?.$id ?? 'root', ...segments].join('_'),\n path: [...(parentFieldPathId?.path ?? []), ...segments],\n});\n\n/**\n * Sorts object entries by `propertyOrder`, falling back to MAX_SAFE_INTEGER\n * for properties without an explicit order.\n */\nexport const sortByPropertyOrder = (\n properties: Record<string, { propertyOrder?: number }>,\n): string[] =>\n Object.entries(properties)\n .sort(\n ([, a], [, b]) =>\n (a.propertyOrder ?? Number.MAX_SAFE_INTEGER) - (b.propertyOrder ?? Number.MAX_SAFE_INTEGER),\n )\n .map(([key]) => key);\n","import type { ReactNode } from 'react';\nimport DOMPurify from 'dompurify';\n\n/** Renders a schema description with sanitized HTML support (links, formatting, etc.). */\nexport const SchemaDescription = ({ description }: { description?: string }): ReactNode => {\n if (!description) return null;\n\n return (\n <p\n className=\"tw:text-xs tw:text-neutral-400\"\n dangerouslySetInnerHTML={{ __html: DOMPurify.sanitize(description) }}\n />\n );\n};\n","import { useCallback, useRef } from 'react';\nimport type { FieldProps, RJSFSchema, UiSchema } from '@rjsf/utils';\n\nimport { CollapsiblePanel } from '../../../components/CollapsiblePanel';\nimport {\n childFieldPathId,\n getSchemaField,\n SCHEMA_FIELD_STUBS,\n sortByPropertyOrder,\n} from '../fieldHelpers';\nimport { SchemaDescription } from '../SchemaDescription';\n\ntype PropertyDef = {\n title?: string;\n propertyOrder?: number;\n options?: { grid_columns?: number; grid_break?: boolean };\n};\n\n/**\n * Custom field that renders an object's properties in a responsive grid layout.\n * Used for schema objects with `format: \"grid\"` or `\"grid-strict\"`.\n * json-editor uses a 12-column grid; each property can specify `options.grid_columns`.\n * Supports `options.collapsed` for collapsible sections.\n */\nexport const GridObjectField = ({\n schema,\n uiSchema = {},\n formData,\n onChange,\n disabled,\n readonly,\n registry,\n fieldPathId,\n}: FieldProps) => {\n const properties = (schema.properties ?? {}) as Record<string, PropertyDef>;\n const data = (formData ?? {}) as Record<string, unknown>;\n const SchemaField = getSchemaField(registry);\n\n // Use a ref to always have the latest data in the onChange handler\n // without recreating callbacks on every render.\n const dataRef = useRef(data);\n dataRef.current = data;\n\n // Per-property onChange that merges the property value into the full object.\n // Without this, child SchemaFields would replace the entire object with just\n // the property value. We pass fieldPathId.path (this field's own path) so\n // RJSF's Form._set correctly places the full object at the right location.\n // Using the child's path would cause a mismatch: the full grid object would\n // be set at the leaf path, corrupting data (e.g. [object Object] in selects).\n const fieldPath = fieldPathId?.path;\n const onPropertyChange = useCallback(\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n (key: string) => (value: any, _childPath: any, errorSchema?: any, id?: string) => {\n onChange({ ...dataRef.current, [key]: value } as any, fieldPath, errorSchema, id);\n },\n [onChange, fieldPath],\n );\n\n const uiOptions = uiSchema['ui:options'] as Record<string, unknown> | undefined;\n const hasCollapsed = uiOptions?.collapsed !== undefined;\n const collapsed = !!uiOptions?.collapsed;\n const disableCollapse = !!uiOptions?.disableCollapse;\n\n const sortedKeys = sortByPropertyOrder(properties);\n\n if (sortedKeys.length === 0) return null;\n\n const gridContent = (\n <div className=\"tw:grid tw:grid-cols-12 tw:gap-4 tw:[&>div:empty]:hidden\">\n {sortedKeys.map((key) => {\n const gridCols = properties[key]?.options?.grid_columns ?? 12;\n const gridBreak = !!properties[key]?.options?.grid_break;\n return (\n <div\n key={key}\n style={{\n gridColumn: gridBreak ? '1 / -1' : `span ${Math.min(gridCols, 12)}`,\n }}\n >\n <SchemaField\n name={key}\n schema={schema.properties![key] as RJSFSchema}\n uiSchema={(uiSchema[key] ?? {}) as UiSchema}\n formData={data[key]}\n {...SCHEMA_FIELD_STUBS}\n fieldPathId={childFieldPathId(fieldPathId, key)}\n registry={registry}\n onChange={onPropertyChange(key)}\n disabled={!!disabled}\n readonly={!!readonly}\n />\n </div>\n );\n })}\n </div>\n );\n\n // Collapsible grid section\n if (hasCollapsed && !disableCollapse) {\n const hasValues = Object.values(data).some(\n (v) => v !== undefined && v !== null && v !== '' && v !== false,\n );\n const defaultExpanded = hasValues ? !collapsed : true;\n\n return (\n <CollapsiblePanel\n className=\"tw:rounded-lg\"\n header={schema.title || 'Settings'}\n defaultExpanded={defaultExpanded}\n headerClassName=\"tw:rounded-lg\"\n bodyClassName=\"tw:flex tw:flex-col tw:gap-4\"\n >\n <SchemaDescription description={schema.description} />\n {gridContent}\n </CollapsiblePanel>\n );\n }\n\n // Grid objects with a title get a bordered card to visually separate sections.\n if (schema.title) {\n return (\n <div className=\"tw:rounded-lg tw:border tw:border-solid tw:border-neutral-200 tw:p-4\">\n <h3 className=\"tw:mb-3 tw:text-base tw:font-medium tw:text-neutral-800\">{schema.title}</h3>\n <SchemaDescription description={schema.description} />\n {gridContent}\n </div>\n );\n }\n\n return (\n <div className=\"tw:flex tw:flex-col tw:gap-4\">\n <SchemaDescription description={schema.description} />\n {gridContent}\n </div>\n );\n};\n","import type { FieldProps } from '@rjsf/utils';\n\nimport { Alert } from '../../../components/Alert';\n\nconst VALID_ALERT_TYPES = new Set(['info', 'warning', 'error', 'success']);\n\ntype AlertVariant = 'info' | 'warning' | 'error' | 'success';\n\n/**\n * Custom field that renders static informational text.\n * Used for schema properties with `format: \"info\"`.\n * Displays title and description as a read-only alert.\n * Supports `options.alert_type` to control the alert variant\n * (`\"info\"` (default), `\"warning\"`, `\"error\"`, `\"success\"`).\n */\nexport const InfoField = ({ schema, uiSchema }: FieldProps) => {\n if (!schema.title && !schema.description) return null;\n\n const uiOptions = uiSchema?.['ui:options'] as Record<string, unknown> | undefined;\n const alertType = String(uiOptions?.alertType ?? 'info');\n const variant: AlertVariant = VALID_ALERT_TYPES.has(alertType)\n ? (alertType as AlertVariant)\n : 'info';\n\n return (\n <div className=\"tw:my-3\">\n <Alert variant={variant} title={schema.title}>\n {schema.description}\n </Alert>\n </div>\n );\n};\n","import type { ReactNode } from 'react';\n\nimport { Tooltip } from '../../components/Tooltip';\nimport { Info } from '../../icons';\n\nimport { useRenderMarkdown } from './markdownContext';\n\nexport const TooltipIcon = ({ rawHelp }: { rawHelp: string }): ReactNode => {\n const renderMarkdown = useRenderMarkdown();\n\n return (\n <Tooltip placement=\"top\" variant=\"explanatory\" tooltip={renderMarkdown(rawHelp)} triggerAsChild>\n <span className=\"tw:cursor-help tw:text-neutral-400\">\n <Info className=\"tw:size-4\" />\n </span>\n </Tooltip>\n );\n};\n","import { useRef } from 'react';\nimport type { FieldProps, RJSFSchema, UiSchema } from '@rjsf/utils';\n\nimport { Button } from '../../../components/Button';\nimport { CollapsiblePanel } from '../../../components/CollapsiblePanel';\nimport { Trash2 } from '../../../icons';\nimport {\n childFieldPathId,\n getSchemaField,\n SCHEMA_FIELD_STUBS,\n sortByPropertyOrder,\n} from '../fieldHelpers';\nimport { SchemaDescription } from '../SchemaDescription';\nimport { TooltipIcon } from '../TooltipIcon';\n\ntype PropertyDef = {\n title?: string;\n type?: string;\n enum?: string[];\n propertyOrder?: number;\n default?: unknown;\n};\n\n/** Default value for a freshly added cell/item, honouring the schema default. */\nconst defaultValueFor = (prop: { type?: string; default?: unknown }): unknown => {\n if (prop.default !== undefined) return prop.default;\n if (prop.type === 'boolean') return false;\n if (prop.type === 'string') return '';\n return undefined;\n};\n\n/**\n * Custom field that renders an array as a table.\n * Used for schema arrays with `format: \"table\"`.\n *\n * - Array of objects: each item is a row, each property a column.\n * - Array of primitives (e.g. `items: { type: 'string' }`): each item is a\n * single-column row holding the value itself.\n *\n * Cells are rendered via RJSF's SchemaField so all registered widgets are used.\n */\nexport const TableArrayField = ({\n schema,\n uiSchema = {},\n formData,\n onChange,\n disabled,\n readonly,\n registry,\n fieldPathId,\n}: FieldProps) => {\n const items = (formData ?? []) as unknown[];\n const itemSchema = schema.items as Record<string, unknown> | undefined;\n const properties = (itemSchema?.properties ?? {}) as Record<string, PropertyDef>;\n const itemUiSchema = (uiSchema.items ?? {}) as UiSchema;\n\n const SchemaField = getSchemaField(registry);\n\n const sortedKeys = sortByPropertyOrder(properties);\n\n // Arrays of primitives (strings, numbers, …) have no object properties, so\n // there are no columns to derive — render the item value in a single column.\n const isPrimitiveItems = sortedKeys.length === 0 && itemSchema != null;\n\n const isReadOnly = disabled || readonly;\n\n const fieldPath = fieldPathId?.path ?? [];\n\n // Keep a ref to items so onChange closures always read the latest data\n const itemsRef = useRef(items);\n itemsRef.current = items;\n\n const handleCellChange = (rowIndex: number, key: string, value: unknown) => {\n const newItems = [...itemsRef.current];\n newItems[rowIndex] = { ...(newItems[rowIndex] as Record<string, unknown>), [key]: value };\n onChange(newItems, fieldPath);\n };\n\n const handleItemChange = (rowIndex: number, value: unknown) => {\n const newItems = [...itemsRef.current];\n newItems[rowIndex] = value;\n onChange(newItems, fieldPath);\n };\n\n const handleRemoveRow = (rowIndex: number) => {\n onChange(\n itemsRef.current.filter((_, i) => i !== rowIndex),\n fieldPath,\n );\n };\n\n const handleAddRow = () => {\n if (isPrimitiveItems) {\n onChange(\n [\n ...itemsRef.current,\n defaultValueFor({\n type: itemSchema?.type as string | undefined,\n default: itemSchema?.default,\n }),\n ],\n fieldPath,\n );\n return;\n }\n const newItem: Record<string, unknown> = {};\n for (const key of sortedKeys) {\n newItem[key] = defaultValueFor(properties[key] ?? {});\n }\n onChange([...itemsRef.current, newItem], fieldPath);\n };\n\n const withHiddenLabel = (base: UiSchema): UiSchema => ({\n ...base,\n 'ui:options': {\n ...base['ui:options'],\n label: false,\n },\n });\n\n const getCellUiSchema = (key: string): UiSchema =>\n withHiddenLabel((itemUiSchema[key] ?? {}) as UiSchema);\n\n const table = items.length > 0 && (\n <table className=\"tw:w-full tw:table-fixed tw:border-collapse tw:text-sm\">\n <thead>\n <tr>\n {isPrimitiveItems ? (\n <th className=\"tw:border-b tw:border-neutral-200 tw:p-2 tw:text-left tw:text-xs tw:font-medium tw:text-neutral-600\">\n {(itemSchema?.title as string) ?? ''}\n </th>\n ) : (\n sortedKeys.map((key) => (\n <th\n key={key}\n className=\"tw:border-b tw:border-neutral-200 tw:p-2 tw:text-left tw:text-xs tw:font-medium tw:text-neutral-600\"\n >\n {properties[key]?.title ?? key}\n </th>\n ))\n )}\n {!isReadOnly && <th className=\"tw:w-20\" />}\n </tr>\n </thead>\n <tbody>\n {items.map((item, rowIndex) => (\n <tr key={rowIndex} className=\"tw:border-b tw:border-neutral-100\">\n {isPrimitiveItems ? (\n <td className=\"tw:px-2 tw:py-1.5 tw:[&>div]:mb-0\">\n <SchemaField\n name={String(rowIndex)}\n schema={itemSchema as RJSFSchema}\n uiSchema={withHiddenLabel(itemUiSchema)}\n formData={item}\n {...SCHEMA_FIELD_STUBS}\n fieldPathId={childFieldPathId(fieldPathId, rowIndex)}\n registry={registry}\n onChange={(val: unknown) => handleItemChange(rowIndex, val)}\n disabled={!!disabled}\n readonly={!!readonly}\n />\n </td>\n ) : (\n sortedKeys.map((key) => (\n <td key={key} className=\"tw:px-2 tw:py-1.5 tw:[&>div]:mb-0\">\n <SchemaField\n name={key}\n schema={properties[key] as unknown as RJSFSchema}\n uiSchema={getCellUiSchema(key)}\n formData={(item as Record<string, unknown>)[key]}\n {...SCHEMA_FIELD_STUBS}\n fieldPathId={childFieldPathId(fieldPathId, rowIndex, key)}\n registry={registry}\n onChange={(val: unknown) => handleCellChange(rowIndex, key, val)}\n disabled={!!disabled}\n readonly={!!readonly}\n />\n </td>\n ))\n )}\n {!isReadOnly && (\n <td className=\"tw:px-2 tw:py-1.5 tw:text-right\">\n <Button\n variant=\"invisible\"\n size=\"icon\"\n onClick={() => handleRemoveRow(rowIndex)}\n aria-label=\"Remove row\"\n >\n <Trash2 className=\"tw:size-4\" />\n </Button>\n </td>\n )}\n </tr>\n ))}\n </tbody>\n </table>\n );\n\n const addButton = !isReadOnly && (\n <Button variant=\"outline\" onClick={handleAddRow}>\n Add {(itemSchema?.title as string) || 'Item'}\n </Button>\n );\n\n // Wrap in CollapsiblePanel when the table has a title\n if (schema.title) {\n const tooltip = uiSchema['ui:help'];\n\n return (\n <CollapsiblePanel\n className=\"tw:rounded-lg\"\n headerClassName=\"tw:rounded-lg\"\n header={\n <span className=\"tw:inline-flex tw:items-center tw:gap-1\">\n {schema.title}\n {tooltip && <TooltipIcon rawHelp={tooltip} />}\n </span>\n }\n defaultExpanded\n bodyClassName=\"tw:flex tw:flex-col tw:gap-4\"\n >\n <SchemaDescription description={schema.description} />\n {table}\n {addButton}\n </CollapsiblePanel>\n );\n }\n\n return (\n <div className=\"tw:flex tw:flex-col tw:gap-4\">\n <SchemaDescription description={schema.description} />\n {table}\n {addButton}\n </div>\n );\n};\n","import { useCallback, useRef, useState } from 'react';\nimport type { FieldProps, RJSFSchema, UiSchema } from '@rjsf/utils';\n\nimport { Tabs, TabsContent } from '../../../components/Tabs';\nimport {\n childFieldPathId,\n getSchemaField,\n SCHEMA_FIELD_STUBS,\n sortByPropertyOrder,\n} from '../fieldHelpers';\nimport { SchemaDescription } from '../SchemaDescription';\n\ntype PropertyDef = { title?: string; propertyOrder?: number };\n\n/**\n * Custom field that renders an object's properties as tabs.\n * Used for schema objects with `format: \"tabs\"`, `\"tabs-top\"`, or `\"categories\"`.\n * Each property becomes a tab panel.\n */\nexport const TabsObjectField = ({\n schema,\n uiSchema = {},\n formData,\n onChange,\n disabled,\n readonly,\n registry,\n fieldPathId,\n}: FieldProps) => {\n const properties = (schema.properties ?? {}) as Record<string, PropertyDef>;\n const data = (formData ?? {}) as Record<string, unknown>;\n const SchemaField = getSchemaField(registry);\n\n const dataRef = useRef(data);\n dataRef.current = data;\n\n const onPropertyChange = useCallback(\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n (key: string) => (value: any, path: any, errorSchema?: any, id?: string) => {\n onChange({ ...dataRef.current, [key]: value } as any, path, errorSchema, id);\n },\n [onChange],\n );\n\n const sortedKeys = sortByPropertyOrder(properties);\n\n const [activeTab, setActiveTab] = useState(sortedKeys[0] ?? '');\n\n if (sortedKeys.length === 0) return null;\n\n const triggers = sortedKeys.map((key) => ({\n value: key,\n title: properties[key]?.title ?? key,\n }));\n\n return (\n <div className=\"tw:flex tw:flex-col tw:gap-4\">\n {schema.title && (\n <h3 className=\"tw:text-base tw:font-medium tw:text-neutral-800\">{schema.title}</h3>\n )}\n <SchemaDescription description={schema.description} />\n <Tabs triggers={triggers} value={activeTab} onValueChange={setActiveTab} compact>\n {sortedKeys.map((key) => (\n <TabsContent key={key} value={key}>\n <SchemaField\n name={key}\n schema={schema.properties![key] as RJSFSchema}\n uiSchema={(uiSchema[key] ?? {}) as UiSchema}\n formData={data[key]}\n {...SCHEMA_FIELD_STUBS}\n fieldPathId={childFieldPathId(fieldPathId, key)}\n registry={registry}\n onChange={onPropertyChange(key)}\n disabled={!!disabled}\n readonly={!!readonly}\n />\n </TabsContent>\n ))}\n </Tabs>\n </div>\n );\n};\n","import type { ArrayFieldItemTemplateProps } from '@rjsf/utils';\n\nimport { Button } from '../../../components/Button';\nimport { CollapsiblePanel } from '../../../components/CollapsiblePanel';\nimport { Trash2 } from '../../../icons';\n\nexport const ArrayFieldItemTemplate = ({\n children,\n index,\n totalItems,\n schema,\n hasToolbar,\n disabled,\n readonly,\n buttonsProps,\n}: ArrayFieldItemTemplateProps) => {\n const isObject = schema.type === 'object';\n const canRemove = hasToolbar && buttonsProps.hasRemove && !disabled && !readonly;\n\n // Object array items use CollapsiblePanel for meaningful collapsing\n if (isObject) {\n const itemTitle = `${schema.title || 'Item'} ${index + 1}`;\n // Single item starts expanded; multiple items start collapsed to keep the page compact\n const defaultExpanded = totalItems <= 1;\n\n return (\n <CollapsiblePanel\n className=\"tw:rounded-lg\"\n headerClassName=\"tw:rounded-lg\"\n header={\n <div className=\"tw:flex tw:w-full tw:items-center tw:justify-between\">\n <span>{itemTitle}</span>\n {canRemove && (\n <div\n role=\"presentation\"\n onClick={(e) => e.stopPropagation()}\n onKeyUp={(e) => e.stopPropagation()}\n >\n <Button\n variant=\"invisible\"\n size=\"icon\"\n aria-label={`Remove ${itemTitle}`}\n onClick={buttonsProps.onRemoveItem}\n >\n <Trash2 className=\"tw:size-4\" />\n </Button>\n </div>\n )}\n </div>\n }\n defaultExpanded={defaultExpanded}\n >\n <div className=\"tw:flex tw:flex-col tw:gap-4\">{children}</div>\n </CollapsiblePanel>\n );\n }\n\n // Simple items use a card layout\n return (\n <div className=\"tw:rounded-lg tw:border tw:border-solid tw:border-neutral-200 tw:bg-white tw:p-4\">\n <div className=\"tw:flex tw:items-start tw:gap-3\">\n <div className=\"tw:flex tw:flex-1 tw:flex-col tw:gap-4\">{children}</div>\n {canRemove && (\n <Button\n variant=\"outline\"\n size=\"small\"\n className=\"tw:mt-5 tw:shrink-0\"\n onClick={buttonsProps.onRemoveItem}\n >\n Delete\n </Button>\n )}\n </div>\n </div>\n );\n};\n","import type { ArrayFieldTemplateProps } from '@rjsf/utils';\n\nimport { Button } from '../../../components/Button';\n\nexport const ArrayFieldTemplate = ({\n items,\n canAdd,\n onAddClick,\n title,\n schema,\n disabled,\n readonly,\n}: ArrayFieldTemplateProps) => {\n const isReadOnly = disabled || readonly;\n\n const itemLabel =\n typeof schema.items === 'object' && schema.items !== null && !Array.isArray(schema.items)\n ? (schema.items as { title?: string }).title || 'Item'\n : 'Item';\n\n return (\n <div className=\"tw:flex tw:flex-col tw:gap-4\">\n {(title || schema.description) && (\n <div>\n {title && <h3 className=\"tw:text-base tw:font-medium tw:text-neutral-800\">{title}</h3>}\n {schema.description && (\n <p className=\"tw:mt-1 tw:text-xs tw:text-neutral-400\">{schema.description}</p>\n )}\n </div>\n )}\n {items}\n {canAdd && !isReadOnly && (\n <Button variant=\"outline\" onClick={onAddClick}>\n Add {itemLabel}\n </Button>\n )}\n </div>\n );\n};\n","import { isValidElement } from 'react';\nimport type { DescriptionFieldProps } from '@rjsf/utils';\nimport DOMPurify from 'dompurify';\n\n/**\n * Custom description template that renders HTML in schema descriptions.\n * Uses DOMPurify to sanitize the HTML before rendering.\n * Schema descriptions are authored by component developers and may contain\n * links (<a>), formatting (<strong>, <code>, <br>), etc.\n */\nexport const DescriptionFieldTemplate = ({ description, id }: DescriptionFieldProps) => {\n if (!description) return null;\n\n if (isValidElement(description)) {\n return <div id={id}>{description}</div>;\n }\n\n return (\n <p\n id={id}\n className=\"tw:text-xs tw:text-neutral-400\"\n dangerouslySetInnerHTML={{ __html: DOMPurify.sanitize(String(description)) }}\n />\n );\n};\n","import type { ErrorListProps } from '@rjsf/utils';\n\nexport const ErrorListTemplate = ({ errors }: ErrorListProps) => {\n if (!errors.length) return null;\n\n return (\n <div className=\"tw:mb-4\">\n {errors.map((error) => (\n <p key={`${error.property}:${error.message}`} className=\"tw:text-xs tw:text-error-500\">\n {error.message}\n </p>\n ))}\n </div>\n );\n};\n","import { createContext, use } from 'react';\n\nconst RootFormDataContext = createContext<Record<string, unknown>>({});\n\nexport const RootFormDataProvider = RootFormDataContext;\n\nexport const useRootFormData = (): Record<string, unknown> => use(RootFormDataContext);\n","import type { ReactNode } from 'react';\nimport type { FieldTemplateProps } from '@rjsf/utils';\nimport DOMPurify from 'dompurify';\n\nimport { Label } from '../../../components/Label';\nimport { Link } from '../../../components/Link';\nimport { Tooltip } from '../../../components/Tooltip';\nimport { BookOpen } from '../../../icons';\nimport { FormGroup } from '../../FormGroup';\nimport { useRootFormData } from '../RootFormDataContext';\nimport { TooltipIcon } from '../TooltipIcon';\n\n/**\n * Resolves a dot-path against an object.\n */\nconst resolveByPath = (parts: string[], data: Record<string, unknown>): unknown => {\n let current: unknown = data;\n for (const part of parts) {\n if (current == null || typeof current !== 'object') return undefined;\n current = (current as Record<string, unknown>)[part];\n }\n return current;\n};\n\n/**\n * Resolves a dependency path against form data.\n *\n * - Paths starting with \"root.\" are resolved from the root form data\n * - Other paths are resolved as siblings (relative to the parent object)\n */\nconst resolveDependencyValue = (\n path: string,\n formData: Record<string, unknown>,\n parentPath: (string | number)[],\n): unknown => {\n if (path.startsWith('root.')) {\n return resolveByPath(path.replace(/^root\\./, '').split('.'), formData);\n }\n // Resolve as sibling field within the same parent object\n const parent = resolveByPath(parentPath.map(String), formData);\n if (parent && typeof parent === 'object') {\n const sibling = resolveByPath(path.split('.'), parent as Record<string, unknown>);\n if (sibling !== undefined) return sibling;\n }\n // Fallback: try from root (handles cross-level dependencies like\n // a nested field depending on a root-level property)\n return resolveByPath(path.split('.'), formData);\n};\n\n/**\n * Evaluates json-editor `options.dependencies` against current form data.\n * Returns true if the field should be visible.\n *\n * Rules (matching old json-editor behavior):\n * - `{ \"field\": \"value\" }` — show when field equals value\n * - `{ \"field\": [\"a\", \"b\"] }` — show when field is one of the values\n * - `{ \"field\": \"\" }` — show when field is empty/falsy\n * - Multiple entries are AND-ed: all conditions must match\n */\nconst evaluateDependencies = (\n dependencies: Record<string, unknown>,\n formData: Record<string, unknown>,\n parentPath: (string | number)[],\n): boolean => {\n for (const [path, expected] of Object.entries(dependencies)) {\n const actual = resolveDependencyValue(path, formData, parentPath);\n\n if (Array.isArray(expected)) {\n if (!expected.includes(actual)) return false;\n } else if (expected === '') {\n // Show when field is empty/falsy\n if (actual !== '' && actual !== undefined && actual !== null) return false;\n } else {\n if (actual !== expected) return false;\n }\n }\n return true;\n};\n\nconst DocumentationLinkIcon = ({\n documentation,\n}: {\n documentation: { link: string; tooltip?: string };\n}): ReactNode => (\n <Tooltip\n placement=\"top\"\n variant=\"explanatory\"\n tooltip={documentation.tooltip ?? 'Open documentation'}\n triggerAsChild\n >\n <Link href={documentation.link}>\n <span className=\"tw:cursor-pointer tw:text-neutral-400 tw:hover:text-neutral-600\">\n <BookOpen className=\"tw:size-4\" />\n </span>\n </Link>\n </Tooltip>\n);\n\n/**\n * Renders the field's FormGroup wrapper, label, help, and errors.\n * Does NOT subscribe to RootFormDataContext — that subscription only happens\n * inside FieldTemplateWithDependencies, so fields without dependencies don't\n * re-render on every form-state change.\n */\nconst FieldTemplateBody = ({\n id,\n label,\n rawHelp,\n rawDescription,\n rawErrors,\n children,\n schema,\n uiSchema,\n displayLabel,\n}: FieldTemplateProps) => {\n // Button-type pseudo-fields (test-connection, sync-action) render without label/description wrapping\n const widget = uiSchema?.['ui:widget'];\n if (widget === 'test-connection' || widget === 'sync-action') {\n return <>{children}</>;\n }\n\n // Object/array types get rendered by their own templates — UNLESS the array\n // has a custom widget (e.g. multi-select), in which case it renders as a\n // single leaf widget that needs the label/description wrapper.\n if (schema.type === 'object') {\n return <>{children}</>;\n }\n if (schema.type === 'array' && !uiSchema?.['ui:widget']) {\n return <>{children}</>;\n }\n\n const uiOptions = uiSchema?.['ui:options'] as Record<string, unknown> | undefined;\n const documentation = uiOptions?.documentation as { link: string; tooltip?: string } | undefined;\n\n const hasErrors = rawErrors && rawErrors.length > 0;\n // Checkbox fields render their own label inside the widget — skip the FormGroup label\n // and place the help icons beside the checkbox instead (outside the label, so\n // clicking an icon doesn't toggle the checkbox).\n // Booleans rendered as select (via enum_titles) still need the label.\n const isCheckbox = schema.type === 'boolean' && uiSchema?.['ui:widget'] !== 'select';\n const showLabel = displayLabel && label && !isCheckbox;\n\n const hasHelpIcons = Boolean(rawHelp || documentation);\n const helpIcons = (\n <>\n {rawHelp && <TooltipIcon rawHelp={rawHelp} />}\n {documentation && <DocumentationLinkIcon documentation={documentation} />}\n </>\n );\n\n return (\n <FormGroup state={hasErrors ? 'error' : 'default'}>\n {showLabel && (\n <Label htmlFor={id}>\n <span className=\"tw:inline-flex tw:items-center tw:gap-1\">\n {label}\n {helpIcons}\n </span>\n </Label>\n )}\n {!showLabel && !isCheckbox && hasHelpIcons && (\n <div className=\"tw:flex tw:items-center tw:gap-1\">{helpIcons}</div>\n )}\n {isCheckbox && hasHelpIcons ? (\n <div className=\"tw:flex tw:items-center tw:gap-1\">\n {children}\n {helpIcons}\n </div>\n ) : (\n children\n )}\n {rawDescription && (\n <FormGroup.Help>\n <span dangerouslySetInnerHTML={{ __html: DOMPurify.sanitize(rawDescription) }} />\n </FormGroup.Help>\n )}\n {hasErrors && <FormGroup.Help>{rawErrors.join('. ')}</FormGroup.Help>}\n </FormGroup>\n );\n};\n\n/**\n * Wraps FieldTemplateBody with a root-form-data subscription used to evaluate\n * conditional visibility (options.dependencies). Subscribing here — instead of\n * unconditionally in FieldTemplate — keeps fields without dependencies out of\n * the RootFormDataContext consumer set, so they don't re-render on every\n * keystroke. Critical for forms with many fields (e.g. column_mapping tables).\n */\nconst FieldTemplateWithDependencies = ({\n dependencies,\n ...props\n}: FieldTemplateProps & { dependencies: Record<string, unknown> }) => {\n const rootFormData = useRootFormData();\n // Use fieldPathId.path (accurate) instead of parsing `id` on \"_\"\n // which breaks for snake_case property names.\n const parentPath = props.fieldPathId.path.slice(0, -1);\n if (!evaluateDependencies(dependencies, rootFormData, parentPath)) {\n return null;\n }\n return <FieldTemplateBody {...props} />;\n};\n\nexport const FieldTemplate = (props: FieldTemplateProps) => {\n if (props.hidden) return <div className=\"tw:hidden\">{props.children}</div>;\n\n // Template-watch widgets compute values from watched paths and render nothing.\n // They must stay mounted (for the useEffect), but the FormGroup/Label wrapper must be hidden.\n if (props.uiSchema?.['ui:widget'] === 'template-watch') {\n return <div className=\"tw:hidden\">{props.children}</div>;\n }\n\n const uiOptions = props.uiSchema?.['ui:options'] as Record<string, unknown> | undefined;\n const dependencies = uiOptions?.dependencies as Record<string, unknown> | undefined;\n\n if (dependencies) {\n return <FieldTemplateWithDependencies dependencies={dependencies} {...props} />;\n }\n\n return <FieldTemplateBody {...props} />;\n};\n","import type { ObjectFieldTemplateProps } from '@rjsf/utils';\n\nimport { CollapsiblePanel } from '../../../components/CollapsiblePanel';\n\nexport const ObjectFieldTemplate = ({\n title,\n description,\n properties,\n formData,\n uiSchema,\n schema,\n fieldPathId,\n}: ObjectFieldTemplateProps) => {\n const isRoot = !fieldPathId?.path?.length;\n const uiOptions = uiSchema?.['ui:options'] as Record<string, unknown> | undefined;\n const hasCollapsed = uiOptions?.collapsed !== undefined;\n const collapsed = !!uiOptions?.collapsed;\n const disableCollapse = !!uiOptions?.disableCollapse;\n\n // Detect if this object is a direct child of an array (array item)\n // In that case, ArrayFieldItemTemplate already provides the card/panel wrapper\n const lastPathSegment = fieldPathId?.path?.at(-1);\n const isArrayItem = typeof lastPathSegment === 'number';\n\n // Skip hidden object/array subtrees (options.hidden: true on a container).\n // RJSF's `ui:widget: 'hidden'` only short-circuits leaf fields; it still recurses\n // into objects/arrays, which mounts hundreds of unused subtrees (e.g. _metadata_\n // arrays populated by sync actions). Hidden LEAVES are kept — they render as\n // `<input type=\"hidden\">` and their mount-phase onChange writes the schema default\n // into formData, which is required for sibling `options.dependencies` to resolve\n // (e.g. hubspot's `*_hidden` helper fields with `default: \"true\"`).\n //\n // Container detection accepts implicit shapes too: `type` may be omitted (json-editor\n // infers object from `properties`) or be a union (`['object', 'null']`).\n type ChildSchema = { type?: string | string[]; properties?: unknown; items?: unknown };\n const childSchemas = (schema as { properties?: Record<string, ChildSchema> }).properties;\n const isContainerSchema = (s: ChildSchema | undefined): boolean => {\n if (!s) return false;\n if (s.properties || s.items) return true;\n if (Array.isArray(s.type)) return s.type.includes('object') || s.type.includes('array');\n return s.type === 'object' || s.type === 'array';\n };\n const visibleProperties = properties.filter((prop) => {\n const childUi = uiSchema?.[prop.name] as { 'ui:widget'?: string } | undefined;\n if (childUi?.['ui:widget'] !== 'hidden') return true;\n return !isContainerSchema(childSchemas?.[prop.name]);\n });\n\n // Hidden-but-mounted fields (hidden leaves, template-watch) need their wrapper\n // div hidden too, otherwise the empty wrapper is still a flex item and tw:gap-4\n // adds phantom spacing.\n const isHiddenMount = (name: string): boolean => {\n const w = (uiSchema?.[name] as { 'ui:widget'?: string } | undefined)?.['ui:widget'];\n return w === 'hidden' || w === 'template-watch';\n };\n\n const renderChildren = (props: typeof visibleProperties) =>\n props.map((prop) => (\n <div key={prop.name} className={isHiddenMount(prop.name) ? 'tw:hidden' : undefined}>\n {prop.content}\n </div>\n ));\n\n if (isRoot) {\n return (\n <div className=\"tw:flex tw:flex-col tw:gap-4 tw:[&>div:empty]:hidden\">\n {renderChildren(visibleProperties)}\n </div>\n );\n }\n\n const childrenContent = renderChildren(visibleProperties);\n\n // Collapsible nested object when options.collapsed is explicitly set\n if (hasCollapsed && !disableCollapse) {\n const data = (formData ?? {}) as Record<string, unknown>;\n const hasValues = Object.values(data).some(\n (v) => v !== undefined && v !== null && v !== '' && v !== false,\n );\n const defaultExpanded = hasValues ? !collapsed : true;\n\n return (\n <CollapsiblePanel\n className=\"tw:rounded-lg\"\n headerClassName=\"tw:rounded-lg\"\n header={title || 'Settings'}\n defaultExpanded={defaultExpanded}\n bodyClassName=\"tw:flex tw:flex-col tw:gap-4 tw:[&>div:empty]:hidden\"\n >\n {description}\n {childrenContent}\n </CollapsiblePanel>\n );\n }\n\n // Array items render flat — the parent ArrayFieldItemTemplate provides the wrapper\n if (isArrayItem) {\n return (\n <div className=\"tw:flex tw:flex-col tw:gap-4 tw:[&>div:empty]:hidden\">{childrenContent}</div>\n );\n }\n\n return (\n <div className=\"tw:rounded-lg tw:border tw:border-solid tw:border-neutral-200 tw:bg-white tw:p-4\">\n {title && (\n <h3 className=\"tw:mb-2 tw:text-base tw:font-medium tw:text-neutral-800\">{title}</h3>\n )}\n {description && <p className=\"tw:mb-3 tw:text-xs tw:text-neutral-400\">{description}</p>}\n <div className=\"tw:flex tw:flex-col tw:gap-4 tw:[&>div:empty]:hidden\">{childrenContent}</div>\n </div>\n );\n};\n","import type { WidgetProps } from '@rjsf/utils';\n\nimport { Checkbox } from '../../../components/Checkbox';\n\nexport const CheckboxWidget = ({\n id,\n value,\n onChange,\n disabled,\n readonly,\n label,\n hideLabel,\n}: WidgetProps) => {\n const checked = !!value;\n\n return (\n <Checkbox id={id} checked={checked} onCheckedChange={onChange} disabled={disabled || readonly}>\n {hideLabel ? undefined : label}\n </Checkbox>\n );\n};\n","import type { WidgetProps } from '@rjsf/utils';\n\nimport { DateInput } from '../../DateInput';\n\nexport const DateWidget = ({\n id,\n value,\n onChange,\n onBlur,\n onFocus,\n disabled,\n readonly,\n placeholder,\n rawErrors,\n}: WidgetProps) => {\n // Parse YYYY-MM-DD as a local date to avoid UTC-offset day shift\n const dateValue = (() => {\n if (!value) return null;\n const parts = (value as string).split('-').map(Number);\n const [year, month, day] = parts;\n if (parts.length !== 3 || parts.some(Number.isNaN)) return null;\n if (year === undefined || month === undefined || day === undefined) return null;\n return new Date(year, month - 1, day);\n })();\n const isValid = dateValue && !Number.isNaN(dateValue.getTime());\n\n return (\n <DateInput\n id={id}\n value={isValid ? dateValue : null}\n onValueChange={(date) => {\n if (!date) {\n onChange(undefined);\n return;\n }\n // Store as ISO date string (YYYY-MM-DD)\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n onChange(`${year}-${month}-${day}`);\n }}\n onBlur={() => onBlur(id, value)}\n onFocus={() => onFocus(id, value)}\n disabled={disabled || readonly}\n placeholder={placeholder || 'Select a date'}\n state={rawErrors?.length ? 'error' : 'default'}\n variant=\"secondary\"\n />\n );\n};\n","import type { WidgetProps } from '@rjsf/utils';\n\nimport { Combobox } from '../../../components/Combobox';\nimport type { LabeledItem } from '../../../components/Combobox/types';\nimport { buildDynamicOptions } from '../fieldHelpers';\nimport { useRootFormData } from '../RootFormDataContext';\n\n/**\n * Widget for fields using json-editor's enumSource/watch pattern.\n * Reads options dynamically from the root form data based on watched paths.\n */\nexport const DynamicSelectWidget = ({\n value,\n onChange,\n disabled,\n readonly,\n options: widgetOptions,\n}: WidgetProps) => {\n const data = useRootFormData();\n\n const watch = widgetOptions.watch as Record<string, string> | undefined;\n const enumSource = widgetOptions.enumSource;\n\n const dynamicItems: LabeledItem[] = watch ? buildDynamicOptions(watch, enumSource, data) : [];\n\n // Ensure the current value is always in the options list (e.g. stored config value while the watched source is not loaded yet)\n const stringValue = value == null ? '' : String(value);\n const matched = dynamicItems.find((item) => item.value === stringValue);\n const fallbackItem =\n !matched && stringValue !== '' ? { value: stringValue, label: stringValue } : null;\n const selectedItem = matched ?? fallbackItem;\n const items = fallbackItem ? [fallbackItem, ...dynamicItems] : dynamicItems;\n\n return (\n <Combobox\n variant=\"secondary\"\n items={items}\n value={selectedItem}\n disabled={disabled || readonly}\n onValueChange={(selected) => onChange(selected?.value ?? '')}\n />\n );\n};\n","import type { WidgetProps } from '@rjsf/utils';\n\nimport { NumberInput } from '../../../blocks/NumberInput';\n\nexport const NumberWidget = ({\n id,\n value,\n onChange,\n onBlur,\n onFocus,\n disabled,\n readonly,\n placeholder,\n schema,\n rawErrors,\n}: WidgetProps) => {\n return (\n <NumberInput\n id={id}\n value={value ?? null}\n onValueChange={(num) => onChange(num ?? undefined)}\n onBlur={() => onBlur(id, value)}\n onFocus={() => onFocus(id, value)}\n disabled={disabled || readonly}\n placeholder={placeholder}\n min={schema.minimum}\n max={schema.maximum}\n step={schema.multipleOf}\n state={rawErrors?.length ? 'error' : 'default'}\n variant=\"secondary\"\n />\n );\n};\n","import type { WidgetProps } from '@rjsf/utils';\n\nimport { PasswordInput } from '../../../blocks/PasswordInput';\n\nexport const PasswordWidget = ({\n id,\n value,\n onChange,\n onBlur,\n onFocus,\n disabled,\n readonly,\n placeholder,\n rawErrors,\n}: WidgetProps) => {\n const stringValue = value == null ? '' : String(value);\n\n return (\n <PasswordInput\n id={id}\n value={stringValue}\n onValueChange={onChange}\n onBlur={() => onBlur(id, value)}\n onFocus={() => onFocus(id, value)}\n disabled={disabled || readonly}\n placeholder={placeholder}\n allowPasswordToggle\n state={rawErrors?.length ? 'error' : 'default'}\n variant=\"secondary\"\n />\n );\n};\n","import type { WidgetProps } from '@rjsf/utils';\n\nimport { RadioGroup } from '../../../components/RadioGroup';\n\nexport const RadioWidget = ({ id, value, onChange, disabled, readonly, options }: WidgetProps) => {\n const enumOptions = (options.enumOptions ?? []) as { value: string; label: string }[];\n\n return (\n <RadioGroup\n id={id}\n value={value ?? ''}\n onValueChange={onChange}\n disabled={disabled || readonly}\n orientation=\"vertical\"\n >\n {enumOptions.map((opt) => (\n <RadioGroup.Item key={opt.value} value={opt.value}>\n {opt.label}\n </RadioGroup.Item>\n ))}\n </RadioGroup>\n );\n};\n","import type { WidgetProps } from '@rjsf/utils';\n\nimport { Combobox } from '../../../components/Combobox';\nimport type { LabeledItem } from '../../../components/Combobox/types';\n\nexport const SelectWidget = ({\n value,\n schema,\n onChange,\n disabled,\n readonly,\n options,\n placeholder,\n required,\n}: WidgetProps) => {\n const enumOptions = (options.enumOptions ?? []) as { value: unknown; label: string }[];\n const isBoolean = schema.type === 'boolean';\n\n // Map values (including booleans) to string keys so the Combobox can match them\n const items: LabeledItem[] = enumOptions.map((o) => ({\n value: String(o.value ?? ''),\n label: o.label,\n }));\n\n const selectedItem = items.find((item) => item.value === (value == null ? '' : String(value)));\n\n return (\n <Combobox\n variant=\"secondary\"\n items={items}\n value={selectedItem ?? null}\n allowClear={!required}\n disabled={disabled || readonly}\n placeholder={placeholder}\n onValueChange={(selected) => {\n const selectedValue = selected?.value ?? '';\n if (isBoolean) {\n onChange(selectedValue === 'true');\n return;\n }\n onChange(selectedValue);\n }}\n />\n );\n};\n","import { useEffect, useRef } from 'react';\nimport type { WidgetProps } from '@rjsf/utils';\n\nimport { resolveByPath } from '../fieldHelpers';\nimport { useRootFormData } from '../RootFormDataContext';\n\n/**\n * Resolves a json-editor `template` string by substituting watched variables.\n * e.g. template=\"{{val}}\" with watch={ val: \"some.path\" } → resolves \"some.path\" from form data.\n */\nconst resolveTemplate = (\n template: string,\n watch: Record<string, string>,\n rootFormData: Record<string, unknown>,\n): string => {\n return template.replace(/\\{\\{(\\w+)\\}\\}/g, (_, varName: string) => {\n const watchPath = watch[varName];\n if (!watchPath) return '';\n const value = resolveByPath(watchPath, rootFormData);\n return value == null ? '' : String(value);\n });\n};\n\n/**\n * Widget for json-editor's `template`/`watch` pattern (without `enumSource`).\n * Computes a value from watched form data paths and keeps the field in sync.\n * These fields are typically hidden helpers used for cross-object dependencies.\n */\nexport const TemplateWatchWidget = ({ value, onChange, options: widgetOptions }: WidgetProps) => {\n const data = useRootFormData();\n\n const watch = widgetOptions.watch as Record<string, string> | undefined;\n const template = widgetOptions.template as string | undefined;\n\n const computed = watch && template ? resolveTemplate(template, watch, data) : (value ?? '');\n\n const lastSetRef = useRef<string>(String(value ?? ''));\n\n useEffect(() => {\n const computedStr = String(computed);\n if (computedStr !== lastSetRef.current) {\n lastSetRef.current = computedStr;\n onChange(computedStr);\n }\n }, [computed, onChange]);\n\n // Render nothing — the field is hidden via options.hidden / FieldTemplate\n return null;\n};\n","import type { WidgetProps } from '@rjsf/utils';\n\nimport { Textarea } from '../../../blocks/Textarea';\n\nexport const TextareaWidget = ({\n id,\n value,\n onChange,\n onBlur,\n onFocus,\n disabled,\n readonly,\n placeholder,\n options,\n rawErrors,\n}: WidgetProps) => {\n const rows = (options.rows as number) ?? 5;\n const stringValue = value == null ? '' : String(value);\n\n return (\n <Textarea\n id={id}\n value={stringValue}\n onValueChange={onChange}\n onBlur={() => onBlur(id, value)}\n onFocus={() => onFocus(id, value)}\n disabled={disabled || readonly}\n placeholder={placeholder}\n minRows={rows}\n state={rawErrors?.length ? 'error' : 'default'}\n variant=\"secondary\"\n />\n );\n};\n","import type { ChangeEvent } from 'react';\nimport type { WidgetProps } from '@rjsf/utils';\n\nimport { TextInput } from '../../TextInput';\n\nexport const TextWidget = ({\n id,\n value,\n onChange,\n onBlur,\n onFocus,\n disabled,\n readonly,\n placeholder,\n schema,\n options,\n rawErrors,\n}: WidgetProps) => {\n const stringValue = value == null ? '' : typeof value === 'object' ? '' : String(value);\n const shouldTrim = !!options.trim;\n\n return (\n <TextInput\n id={id}\n value={stringValue}\n onChange={(e: ChangeEvent<HTMLInputElement>) => {\n const v = e.target.value;\n onChange(shouldTrim ? v.trim() : v);\n }}\n onBlur={() => onBlur(id, value)}\n onFocus={() => onFocus(id, value)}\n disabled={disabled || readonly}\n placeholder={placeholder}\n type={schema.format === 'email' ? 'email' : 'text'}\n state={rawErrors?.length ? 'error' : 'default'}\n variant=\"secondary\"\n />\n );\n};\n","/**\n * Default RJSF registry: design system widgets, custom fields, and templates.\n * Host-coupled entries (sync actions, SSH form) default to no-op stubs — the\n * host app injects its implementations via the RjsfSchemaEditor `widgets` and\n * `fields` props under the same registry keys.\n */\nimport type { RegistryFieldsType, RegistryWidgetsType, TemplatesType } from '@rjsf/utils';\n\nimport { CodeEditorField } from './fields/CodeEditorField';\nimport { GridObjectField } from './fields/GridObjectField';\nimport { InfoField } from './fields/InfoField';\nimport { TableArrayField } from './fields/TableArrayField';\nimport { TabsObjectField } from './fields/TabsObjectField';\nimport { ArrayFieldItemTemplate } from './templates/ArrayFieldItemTemplate';\nimport { ArrayFieldTemplate } from './templates/ArrayFieldTemplate';\nimport { DescriptionFieldTemplate } from './templates/DescriptionFieldTemplate';\nimport { ErrorListTemplate } from './templates/ErrorListTemplate';\nimport { FieldTemplate } from './templates/FieldTemplate';\nimport { ObjectFieldTemplate } from './templates/ObjectFieldTemplate';\nimport { CheckboxWidget } from './widgets/CheckboxWidget';\nimport { CodeEditorWidget } from './widgets/CodeEditorWidget';\nimport { DateWidget } from './widgets/DateWidget';\nimport { DynamicSelectWidget } from './widgets/DynamicSelectWidget';\nimport { NumberWidget } from './widgets/NumberWidget';\nimport { PasswordWidget } from './widgets/PasswordWidget';\nimport { RadioWidget } from './widgets/RadioWidget';\nimport { SelectWidget } from './widgets/SelectWidget';\nimport { TemplateWatchWidget } from './widgets/TemplateWatchWidget';\nimport { TextareaWidget } from './widgets/TextareaWidget';\nimport { TextWidget } from './widgets/TextWidget';\n\n// Rendered for host-coupled entries when the host app doesn't inject an implementation\nconst StubWidget = () => null;\nconst StubField = () => null;\n\nexport const defaultFields: RegistryFieldsType = {\n tableArray: TableArrayField,\n tabsObject: TabsObjectField,\n gridObject: GridObjectField,\n codeEditor: CodeEditorField,\n info: InfoField,\n sshForm: StubField,\n};\n\nexport const defaultWidgets: RegistryWidgetsType = {\n // Override RJSF defaults with design system components\n TextWidget,\n UpDownWidget: NumberWidget,\n TextareaWidget,\n PasswordWidget,\n SelectWidget,\n CheckboxWidget,\n RadioWidget,\n // RJSF maps standard formats to dedicated widgets\n EmailWidget: TextWidget,\n URLWidget: TextWidget,\n DateWidget,\n DateTimeWidget: TextWidget,\n // Custom widgets mapped via uiSchema\n 'code-editor': CodeEditorWidget,\n 'dynamic-select': DynamicSelectWidget,\n 'template-watch': TemplateWatchWidget,\n // Host-coupled widgets — injected by the host app\n 'test-connection': StubWidget,\n 'sync-action': StubWidget,\n 'async-select': StubWidget,\n 'async-multi-select': StubWidget,\n};\n\nexport const defaultTemplates: Partial<TemplatesType> = {\n FieldTemplate,\n ObjectFieldTemplate,\n DescriptionFieldTemplate,\n ArrayFieldTemplate,\n ArrayFieldItemTemplate,\n ErrorListTemplate,\n};\n","import type { UiSchema } from '@rjsf/utils';\n\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\ntype JsonSchema = Record<string, any>;\n\n/**\n * Resolves a $ref reference against the schema definitions, merging any\n * sibling overrides (title, options, etc.) on top of the resolved schema.\n */\nconst resolveRef = (\n propSchema: JsonSchema,\n definitions: Record<string, JsonSchema> | undefined,\n): JsonSchema => {\n if (!propSchema.$ref || !definitions) return propSchema;\n const refPath = String(propSchema.$ref).replace('#/definitions/', '');\n const resolved = definitions[refPath];\n if (!resolved) return propSchema;\n // oxlint-disable-next-line no-unused-vars\n const { $ref, ...overrides } = propSchema;\n return { ...resolved, ...overrides };\n};\n\n/**\n * Walks a JSON Schema and generates a RJSF uiSchema based on custom `format` and `options` properties.\n * This maps the legacy @json-editor/json-editor conventions to RJSF widget references.\n */\nexport const generateUiSchema = (\n schema: JsonSchema,\n readOnly = false,\n definitions?: Record<string, JsonSchema>,\n globalConfig?: Record<string, unknown>,\n /** When true, password fields render as plain text inputs (protected default branch). */\n hasProtectedDefaultBranch = false,\n): UiSchema => {\n const uiSchema: UiSchema = {};\n const defs = definitions ?? (schema.definitions as Record<string, JsonSchema> | undefined);\n\n if (readOnly) {\n uiSchema['ui:disabled'] = true;\n }\n\n const properties = schema.properties as Record<string, JsonSchema> | undefined;\n if (!properties) {\n // Even without direct properties, the schema may have allOf/if-then-else\n // that define conditional properties needing uiSchema mappings.\n // Fall through to combiner/conditional processing below.\n } else {\n for (const [key, rawPropSchema] of Object.entries(properties)) {\n const propSchema = resolveRef(rawPropSchema, defs);\n const format = propSchema.format as string | undefined;\n const type = (propSchema.type ?? (propSchema.properties ? 'object' : undefined)) as\n | string\n | undefined;\n const options = propSchema.options as Record<string, unknown> | undefined;\n\n const fieldUi: UiSchema = {};\n\n // Hidden fields\n if (options?.hidden) {\n fieldUi['ui:widget'] = 'hidden';\n }\n\n // Table-format arrays → custom table field\n if (type === 'array' && format === 'table') {\n fieldUi['ui:field'] = 'tableArray';\n }\n\n // Checkbox-format arrays → RJSF checkboxes widget\n if (type === 'array' && format === 'checkbox') {\n fieldUi['ui:widget'] = 'checkboxes';\n }\n\n // Radio-format → radio buttons widget\n if (format === 'radio' && propSchema.enum) {\n fieldUi['ui:widget'] = 'radio';\n }\n\n // Tabs/categories-format objects → tabbed layout\n if (\n type === 'object' &&\n (format === 'tabs' || format === 'tabs-top' || format === 'categories')\n ) {\n fieldUi['ui:field'] = 'tabsObject';\n }\n\n // Grid-format objects → responsive grid layout\n if (type === 'object' && (format === 'grid' || format === 'grid-strict')) {\n fieldUi['ui:field'] = 'gridObject';\n }\n\n // Info-format → static informational display\n if (format === 'info') {\n fieldUi['ui:field'] = 'info';\n if (options?.alert_type) {\n fieldUi['ui:options'] = {\n ...fieldUi['ui:options'],\n alertType: options.alert_type as string,\n };\n }\n }\n\n // Custom format → widget mapping\n if (type === 'button' && format === 'test-connection') {\n fieldUi['ui:widget'] = 'test-connection';\n fieldUi['ui:options'] = (options ?? {}) as UiSchema['ui:options'];\n } else if (type === 'button' && format === 'sync-action') {\n fieldUi['ui:widget'] = 'sync-action';\n fieldUi['ui:options'] = (options ?? {}) as UiSchema['ui:options'];\n } else if ((type === 'string' || type === 'object') && format === 'editor') {\n // Objects need ui:field (RJSF ignores ui:widget on object types)\n if (type === 'object') {\n fieldUi['ui:field'] = 'codeEditor';\n } else {\n fieldUi['ui:widget'] = 'code-editor';\n }\n fieldUi['ui:options'] = {\n editor: (options?.editor ?? {}) as Record<string, unknown>,\n // A JSON editor stores parsed keys, so `#` prefixes really are encrypted here.\n // Fields whose JSON is not Keboola configuration (a query filter tree, a payload\n // template) opt out with `encryption_hint: false` — encrypting a key there would\n // hand the component ciphertext it cannot use.\n encryptionHint: options?.encryption_hint !== false,\n };\n } else if (type === 'object' && format === 'ssh-editor') {\n fieldUi['ui:field'] = 'sshForm';\n fieldUi['ui:options'] = { only_keys: !!options?.only_keys };\n } else if (type === 'string' && format === 'password') {\n // On protected branches, render password fields as plain text inputs\n if (!hasProtectedDefaultBranch) {\n fieldUi['ui:widget'] = 'password';\n }\n } else if (type === 'string' && format === 'textarea') {\n fieldUi['ui:widget'] = 'textarea';\n if (options?.input_height) {\n fieldUi['ui:options'] = {\n ...fieldUi['ui:options'],\n rows: parseInputHeightToRows(String(options.input_height)),\n };\n }\n } else if (type === 'string' && format === 'trim') {\n fieldUi['ui:options'] = {\n ...fieldUi['ui:options'],\n trim: true,\n };\n } else if (isDynamicSelectSchema(propSchema)) {\n fieldUi['ui:widget'] = 'dynamic-select';\n fieldUi['ui:options'] = {\n ...fieldUi['ui:options'],\n watch: propSchema.watch as Record<string, string>,\n enumSource: propSchema.enumSource as unknown[],\n tags: !!options?.tags,\n };\n } else if (isMultiSelectSchema(propSchema)) {\n // Multi-select MUST be checked before async-select — arrays with options.async\n // would otherwise match isAsyncSelectSchema and render as single-select.\n const items = propSchema.items as JsonSchema | undefined;\n const itemsOptions = items?.options as Record<string, unknown> | undefined;\n fieldUi['ui:widget'] = 'async-multi-select';\n fieldUi['ui:options'] = {\n async: options?.async ?? itemsOptions?.async ?? null,\n creatable: !!options?.creatable || !!options?.tags,\n placeholder: String(\n (options?.inputAttributes as Record<string, string>)?.placeholder ?? '',\n ),\n // Pass dynamic source from items for enumSource/watch multi-selects\n ...(items?.watch && { watch: items.watch as Record<string, string> }),\n ...(items?.enumSource && { enumSource: items.enumSource }),\n };\n } else if (isAsyncSelectSchema(propSchema)) {\n fieldUi['ui:widget'] = 'async-select';\n fieldUi['ui:options'] = {\n async: options?.async ?? null,\n creatable: !!options?.creatable,\n placeholder: String(\n (options?.inputAttributes as Record<string, string>)?.placeholder ?? '',\n ),\n };\n }\n\n // Template/watch pattern (without enumSource) → computed hidden helper fields.\n // Must come after the hidden check so it overrides ui:widget=\"hidden\" — the widget\n // itself renders nothing but keeps its value in sync with watched paths.\n if (isTemplateWatchSchema(propSchema)) {\n fieldUi['ui:widget'] = 'template-watch';\n fieldUi['ui:options'] = {\n ...fieldUi['ui:options'],\n watch: propSchema.watch as Record<string, string>,\n template: propSchema.template as string,\n };\n }\n\n // Boolean with enum_titles → render as select instead of checkbox\n if (type === 'boolean' && options?.enum_titles) {\n fieldUi['ui:widget'] = 'select';\n }\n\n // Collapsed state for arrays/objects (collapsed:false = collapsible but expanded by default)\n if (options?.collapsed !== undefined) {\n fieldUi['ui:options'] = {\n ...fieldUi['ui:options'],\n collapsed: !!options.collapsed,\n };\n }\n\n // Prevent collapsing\n if (options?.disable_collapse) {\n fieldUi['ui:options'] = {\n ...fieldUi['ui:options'],\n disableCollapse: true,\n };\n }\n\n // Conditional visibility based on other field values\n if (options?.dependencies) {\n fieldUi['ui:options'] = {\n ...fieldUi['ui:options'],\n dependencies: options.dependencies as Record<string, unknown>,\n };\n }\n\n // Grid break — forces a new row in grid layouts\n if (options?.grid_break) {\n fieldUi['ui:options'] = {\n ...fieldUi['ui:options'],\n gridBreak: true,\n };\n }\n\n // Disabled field (options.enabled: false)\n if (options?.enabled === false) {\n fieldUi['ui:disabled'] = true;\n }\n\n // Global config: disable fields that have pre-filled values from image_parameters\n const globalValue = globalConfig?.[key];\n if (globalValue !== undefined) {\n if (typeof globalValue !== 'object' || globalValue === null || Array.isArray(globalValue)) {\n // Leaf value — disable this field\n fieldUi['ui:disabled'] = true;\n }\n // Nested objects are handled by the recursive call below\n }\n\n // Forward tooltip/documentation options\n if (options?.tooltip) {\n fieldUi['ui:help'] = String(options.tooltip);\n }\n\n // Forward documentation link\n if ((options?.documentation as Record<string, unknown>)?.link) {\n fieldUi['ui:options'] = {\n ...fieldUi['ui:options'],\n documentation: options?.documentation as { link: string; tooltip?: string },\n };\n }\n\n // Forward placeholder from inputAttributes\n if (\n (options?.inputAttributes as Record<string, string>)?.placeholder &&\n !fieldUi['ui:widget']\n ) {\n fieldUi['ui:placeholder'] = String(\n (options?.inputAttributes as Record<string, string>)?.placeholder,\n );\n }\n\n // Forward enum_titles as RJSF enumNames for proper select labels\n if (options?.enum_titles && propSchema.enum) {\n fieldUi['ui:options'] = {\n ...fieldUi['ui:options'],\n enumNames: options.enum_titles as string[],\n };\n }\n\n // Array control options\n if (type === 'array') {\n const arrayOpts: Record<string, boolean> = {};\n if (options?.disable_array_add) arrayOpts.addable = false;\n if (options?.disable_array_delete) arrayOpts.removable = false;\n if (options?.disable_array_reorder) arrayOpts.orderable = false;\n if (Object.keys(arrayOpts).length > 0) {\n fieldUi['ui:options'] = {\n ...fieldUi['ui:options'],\n ...arrayOpts,\n };\n }\n\n // Forward item-level enum_titles through RJSF's items uiSchema channel —\n // optionsList pairs them with the typed items.enum values for multiselect widgets\n const itemsEnumTitles = (propSchema.items?.options as Record<string, unknown> | undefined)\n ?.enum_titles;\n if (Array.isArray(itemsEnumTitles)) {\n fieldUi.items = { 'ui:options': { enumNames: itemsEnumTitles as string[] } };\n }\n }\n\n // Recursively process nested objects\n if (type === 'object' && propSchema.properties) {\n const nestedGlobal =\n globalValue && typeof globalValue === 'object' && !Array.isArray(globalValue)\n ? (globalValue as Record<string, unknown>)\n : undefined;\n const nested = generateUiSchema(\n propSchema,\n readOnly,\n defs,\n nestedGlobal,\n hasProtectedDefaultBranch,\n );\n Object.assign(fieldUi, nested);\n }\n\n // Recurse into array items so nested format:\"table\" etc. get mapped\n if (type === 'array' && propSchema.items?.properties) {\n const itemsUi = generateUiSchema(\n propSchema.items as JsonSchema,\n readOnly,\n defs,\n undefined,\n hasProtectedDefaultBranch,\n );\n if (Object.keys(itemsUi).length > 0) {\n fieldUi.items = itemsUi;\n }\n }\n\n // Warn about unhandled enumSource/watch (ones not caught by isDynamicSelectSchema)\n if ((propSchema.enumSource || propSchema.watch) && !fieldUi['ui:widget']) {\n console.warn(\n `[RJSF] Property \"${key}\" uses enumSource/watch which is not yet supported. It will render as a plain input.`,\n );\n }\n\n if (Object.keys(fieldUi).length > 0) {\n uiSchema[key] = fieldUi;\n }\n }\n\n // Generate ui:order from propertyOrder (RJSF's built-in property sorting)\n const orderedEntries = Object.entries(properties)\n .filter(([, prop]) => prop.propertyOrder !== undefined)\n .sort(\n ([, a], [, b]) =>\n (a.propertyOrder ?? Number.MAX_SAFE_INTEGER) -\n (b.propertyOrder ?? Number.MAX_SAFE_INTEGER),\n );\n\n if (orderedEntries.length > 0) {\n uiSchema['ui:order'] = [...orderedEntries.map(([key]) => key), '*'];\n }\n } // end of: if (properties)\n\n // Handle allOf/anyOf/oneOf\n for (const combiner of ['allOf', 'anyOf', 'oneOf'] as const) {\n const schemas = schema[combiner] as JsonSchema[] | undefined;\n if (schemas) {\n for (const subSchema of schemas) {\n const subUi = generateUiSchema(\n subSchema,\n readOnly,\n undefined,\n undefined,\n hasProtectedDefaultBranch,\n );\n Object.assign(uiSchema, subUi);\n }\n }\n }\n\n // Handle if/then/else — generate uiSchema for conditional branches\n for (const branch of ['if', 'then', 'else'] as const) {\n const branchSchema = schema[branch] as JsonSchema | undefined;\n if (branchSchema?.properties) {\n const branchUi = generateUiSchema(\n branchSchema,\n readOnly,\n undefined,\n undefined,\n hasProtectedDefaultBranch,\n );\n Object.assign(uiSchema, branchUi);\n }\n }\n\n return uiSchema;\n};\n\nconst isDynamicSelectSchema = (schema: JsonSchema): boolean => {\n return !!(schema.enumSource && schema.watch && schema.type === 'string');\n};\n\nconst isTemplateWatchSchema = (schema: JsonSchema): boolean => {\n return !!(schema.template && schema.watch && !schema.enumSource);\n};\n\nconst isAsyncSelectSchema = (schema: JsonSchema): boolean => {\n return !!(schema.options?.async || schema.options?.creatable);\n};\n\nconst isMultiSelectSchema = (schema: JsonSchema): boolean => {\n const items = schema.items as JsonSchema | undefined;\n return !!(\n items &&\n schema.uniqueItems &&\n schema.type === 'array' &&\n schema.format !== 'checkbox' &&\n !Array.isArray(items) &&\n ['string', 'number', 'integer'].includes(items.type as string) &&\n (items.enum || items.enumSource || (schema.options as Record<string, unknown>)?.tags)\n );\n};\n\n/**\n * Cleans up non-standard properties from a schema before passing to RJSF/AJV.\n * RJSF is strict about unknown keywords, and our schemas contain json-editor-specific\n * extensions (format: 'button', options, etc.).\n */\n/** Convert CSS height like \"100px\" to approximate textarea rows */\nconst parseInputHeightToRows = (height: string): number => {\n const px = parseInt(height, 10);\n if (Number.isNaN(px) || px <= 0) return 5;\n // ~20px per row is a reasonable approximation\n return Math.max(2, Math.round(px / 20));\n};\n\nconst CUSTOM_FORMATS = [\n 'table',\n 'editor',\n 'ssh-editor',\n 'trim',\n 'textarea',\n 'grid',\n 'grid-strict',\n 'tabs',\n 'tabs-top',\n 'categories',\n 'info',\n 'select',\n 'checkbox',\n 'json',\n 'button',\n 'radio',\n];\n\nexport const sanitizeSchema = (\n schema: JsonSchema,\n definitions?: Record<string, JsonSchema>,\n /** When true, skip adding additionalProperties:false. Used for if/then/else\n * sub-schemas where it would break JSON Schema conditional semantics. */\n isConditionalBranch = false,\n): JsonSchema => {\n const cleaned = { ...schema };\n const defs = definitions ?? (cleaned.definitions as Record<string, JsonSchema> | undefined);\n\n // Strip empty enum arrays — they serve as placeholders for values loaded by\n // sync actions, but AJV rejects all values against enum:[].\n // This also fixes CLI/MCP validation which uses the schema to validate input.\n if (Array.isArray(cleaned.enum) && cleaned.enum.length === 0) {\n delete cleaned.enum;\n }\n\n if (\n Array.isArray(cleaned.enum) &&\n cleaned.enum.length > 0 &&\n (cleaned.type === 'string' || cleaned.type === 'integer' || cleaned.type === 'number')\n ) {\n if (cleaned.default === undefined) {\n // The old json-editor always pre-selected the first enum value on render.\n cleaned.default = cleaned.enum[0];\n } else if (!cleaned.enum.includes(cleaned.default)) {\n // Drop an out-of-enum default. RJSF injects the schema default into missing\n // fields, so keeping it would persist an invalid value on save; without a\n // default the field stays absent and the component's runtime default applies.\n delete cleaned.default;\n }\n }\n\n // Infer type:\"object\" when properties exist but type is missing\n if (cleaned.properties && !cleaned.type) {\n cleaned.type = 'object';\n }\n\n // Strip non-standard json-editor `required: true` from individual properties.\n // The parent's property loop promotes it to the parent required array before calling sanitizeSchema.\n if (cleaned.required === true) {\n delete cleaned.required;\n }\n\n // Strip non-standard format values that AJV would reject\n if (CUSTOM_FORMATS.includes(cleaned.format as string)) {\n delete cleaned.format;\n }\n\n // Remove button-type pseudo-properties (they aren't real data fields)\n // They're rendered as widgets but shouldn't be in the schema for validation\n const properties = cleaned.properties as Record<string, JsonSchema> | undefined;\n if (properties) {\n const sanitizedProps: Record<string, JsonSchema> = {};\n const required = (cleaned.required as string[]) ?? [];\n const sanitizedRequired: string[] = [];\n\n for (const [key, rawPropSchema] of Object.entries(properties)) {\n // Resolve $ref before processing\n const propSchema = resolveRef(rawPropSchema, defs);\n\n if (propSchema.type === 'button') {\n // Convert button pseudo-type to string so RJSF accepts it.\n // The uiSchema maps these to custom widgets (test-connection, sync-action).\n // Preserve propertyOrder and description so the field sorts and renders correctly.\n sanitizedProps[key] = {\n type: 'string',\n title: propSchema.title,\n ...(propSchema.propertyOrder !== undefined && {\n propertyOrder: propSchema.propertyOrder,\n }),\n ...(propSchema.description !== undefined && { description: propSchema.description }),\n };\n continue;\n }\n\n // Boolean with enum_titles → add oneOf so RJSF select shows custom labels instead of Yes/No.\n // The mapping must follow the schema's `enum` array so titles[i] pairs with enum[i];\n // fall back to [true, false] when no enum is provided (legacy json-editor convention).\n if (propSchema.type === 'boolean' && propSchema.options?.enum_titles) {\n const titles = propSchema.options.enum_titles as string[];\n const sanitized = sanitizeSchema(propSchema, defs);\n const enumValues = (propSchema.enum as boolean[] | undefined) ?? [true, false];\n sanitized.oneOf = enumValues.map((value, index) => ({\n const: value,\n title: titles[index] ?? (value ? 'Yes' : 'No'),\n }));\n sanitizedProps[key] = sanitized;\n if (required.includes(key) || propSchema.required === true) {\n if (!sanitizedRequired.includes(key)) sanitizedRequired.push(key);\n }\n continue;\n }\n\n sanitizedProps[key] = sanitizeSchema(propSchema, defs);\n\n if (required.includes(key) || propSchema.required === true) {\n if (!sanitizedRequired.includes(key)) sanitizedRequired.push(key);\n }\n }\n\n cleaned.properties = sanitizedProps;\n if (sanitizedRequired.length > 0) {\n cleaned.required = sanitizedRequired;\n }\n\n // Prevent RJSF from rendering \"additional properties\" UI for data fields\n // not defined in the schema (e.g. legacy/renamed properties in stored configs).\n // Skip for:\n // - conditional branches (if/then/else) where it breaks JSON Schema semantics\n // - schemas with if/then/else where conditional branches may define extra properties\n if (!isConditionalBranch && cleaned.additionalProperties === undefined && !cleaned.if) {\n cleaned.additionalProperties = false;\n }\n }\n\n // Recursively handle allOf/anyOf/oneOf\n // Sub-schemas inside combiners that contain if/then/else are processed normally,\n // but their if/then/else branches get the isConditionalBranch flag.\n for (const combiner of ['allOf', 'anyOf', 'oneOf'] as const) {\n const schemas = cleaned[combiner] as JsonSchema[] | undefined;\n if (schemas) {\n cleaned[combiner] = schemas.map((s) => sanitizeSchema(s, defs));\n }\n }\n\n // Recursively handle if/then/else conditional schemas.\n // These sub-schemas must NOT get additionalProperties:false because:\n // - On `if`: it would change the condition semantics (requiring no other properties)\n // - On `then`/`else`: it would reject all properties not redefined in the branch\n for (const branch of ['if', 'then', 'else'] as const) {\n const branchSchema = cleaned[branch] as JsonSchema | undefined;\n if (branchSchema) {\n cleaned[branch] = sanitizeSchema(branchSchema, defs, true);\n }\n }\n\n // Handle array items\n if (cleaned.items && typeof cleaned.items === 'object' && !Array.isArray(cleaned.items)) {\n cleaned.items = sanitizeSchema(cleaned.items as JsonSchema, defs);\n }\n\n return cleaned;\n};\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport type { IChangeEvent } from '@rjsf/core';\nimport Form from '@rjsf/core';\nimport type { RegistryFieldsType, RegistryWidgetsType } from '@rjsf/utils';\nimport validator from '@rjsf/validator-ajv8';\n\nimport { debounce } from '../../utils/debounce';\n\nimport type { RenderMarkdown } from './markdownContext';\nimport { RenderMarkdownProvider } from './markdownContext';\nimport { defaultFields, defaultTemplates, defaultWidgets } from './registry';\nimport { RootFormDataProvider } from './RootFormDataContext';\nimport { generateUiSchema, sanitizeSchema } from './schemaUtils';\n\nconst defaultRenderMarkdown: RenderMarkdown = (source) => source;\n\n/**\n * Produces a canonical JSON string with sorted keys at every level.\n * This ensures two objects with the same data but different key ordering\n * produce the same string. Also normalizes undefined → omitted (via JSON.stringify).\n */\nconst stableStringify = (obj: unknown): string =>\n JSON.stringify(obj, (_key, val) => {\n if (val && typeof val === 'object' && !Array.isArray(val)) {\n const sorted: Record<string, unknown> = {};\n for (const key of Object.keys(val).sort()) {\n sorted[key] = val[key];\n }\n return sorted;\n }\n return val;\n });\n\nexport const RjsfSchemaEditor = ({\n schema,\n value,\n onChange,\n readOnly,\n inForm,\n globalConfig,\n onRegisterValidate,\n widgets,\n fields,\n renderMarkdown,\n hasProtectedDefaultBranch = false,\n}: {\n schema: Record<string, unknown>;\n value: Record<string, unknown>;\n onChange: (value: Record<string, unknown>) => void;\n readOnly: boolean;\n inForm?: boolean;\n /** Pre-filled values from image_parameters.global_config — matching fields are disabled. */\n globalConfig?: Record<string, unknown> | null;\n /** Called with a validate function that triggers RJSF schema validation and shows errors inline.\n * Returns true when valid, false when there are errors. */\n onRegisterValidate?: (validate: () => boolean) => void;\n /** Host-app widgets merged over the built-in registry (e.g. sync-action, async-select). */\n widgets?: RegistryWidgetsType;\n /** Host-app fields merged over the built-in registry (e.g. sshForm). */\n fields?: RegistryFieldsType;\n /** Renders markdown help texts (tooltips, sync-action results). Defaults to plain text. */\n renderMarkdown?: RenderMarkdown;\n /** When true, password fields render as plain text inputs (protected default branch). */\n hasProtectedDefaultBranch?: boolean;\n}) => {\n const schemaJs = useMemo(() => sanitizeSchema(schema), [schema]);\n const uiSchema = useMemo(\n () =>\n generateUiSchema(\n schema,\n readOnly,\n undefined,\n globalConfig ?? undefined,\n hasProtectedDefaultBranch,\n ),\n [schema, readOnly, globalConfig, hasProtectedDefaultBranch],\n );\n\n const mergedWidgets = useMemo(() => ({ ...defaultWidgets, ...widgets }), [widgets]);\n const mergedFields = useMemo(() => ({ ...defaultFields, ...fields }), [fields]);\n\n // --- Uncontrolled mode: Form manages its own state ---\n // We pass `initialFormData` instead of `formData` so RJSF's\n // getSnapshotBeforeUpdate sees formData=undefined → reuses internal\n // state → no resets on parent re-renders or store echoes.\n const initialDataRef = useRef<Record<string, unknown>>(value);\n const formDataRef = useRef<Record<string, unknown>>(initialDataRef.current);\n const [formKey, setFormKey] = useState(0);\n\n // Validation stays quiet until the host asks for it (see onRegisterValidate) — a config\n // saved before its schema gained a constraint would otherwise open covered in errors.\n // From the first ask on, RJSF revalidates on blur so the errors clear as the fields are\n // fixed rather than sticking until something remounts the form. Blur rather than change:\n // a full AJV pass over a component schema on every keystroke is a lot to spend inside a\n // code-editor field.\n const [hasValidated, setHasValidated] = useState(false);\n\n // Root form data provided via context so that DynamicSelectWidget, TemplateWatchWidget etc.\n // can reactively read the latest form data — including hidden objects like _metadata_\n // that RJSF's internal processing might not preserve in ObjectFieldTemplate.formData.\n const [rootFormData, setRootFormData] = useState<Record<string, unknown>>(initialDataRef.current);\n\n // Tracks the form data produced by RJSF after filling in schema defaults during mount.\n // RJSF may add default values that weren't in the stored config, creating a diff.\n // This baseline is captured during mount-phase onChange events and used as a secondary\n // check in debouncedOnChange — if the data only contains mount-phase defaults (matches\n // the baseline), it won't propagate to the store as \"unsaved changes\".\n const mountedFormDataJsonRef = useRef<string | null>(null);\n\n // Primary defense: skip onChange during mount phase via effect timing.\n // Re-arms when formKey changes (Form remounts).\n const isInitialMountRef = useRef(true);\n useEffect(() => {\n isInitialMountRef.current = false;\n }, [formKey]);\n\n // Stable refs to avoid recreating callbacks when parent props change\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n const valueRef = useRef(value);\n valueRef.current = value;\n\n // Tracks canonical JSON of the last value we sent to the store so we can\n // distinguish our own echo from genuine external changes.\n const lastSentJsonRef = useRef<string | null>(null);\n\n // Stable debounced callback — uses refs so the debounce timer is never recreated.\n const debouncedOnChange = useMemo(\n () =>\n debounce((data: Record<string, unknown>) => {\n const dataJson = stableStringify(data);\n const storeJson = stableStringify(valueRef.current);\n if (dataJson !== storeJson) {\n // Secondary defense: if no data has been sent to the store yet AND the data\n // matches what RJSF produced during mount (stored data + schema defaults),\n // don't propagate. This catches late mount-phase onChange events that slip\n // past isInitialMountRef (e.g. RJSF firing onChange in a setState callback\n // after the useEffect has already run). The lastSentJsonRef check ensures\n // this only applies to the very first propagation — once the user has made\n // a real change, reverting back to the mount state must still propagate.\n if (\n lastSentJsonRef.current === null &&\n mountedFormDataJsonRef.current &&\n dataJson === mountedFormDataJsonRef.current\n ) {\n return;\n }\n lastSentJsonRef.current = dataJson;\n onChangeRef.current(data);\n }\n }, 100),\n [],\n );\n\n // Cancel any pending write when the editor unmounts\n useEffect(() => () => debouncedOnChange.cancel(), [debouncedOnChange]);\n\n // Detect external value changes during render (not in useEffect,\n // to avoid a flash of stale data). On genuine external change,\n // bump formKey to remount Form with new initialFormData.\n const [prevValue, setPrevValue] = useState(value);\n if (value !== prevValue) {\n setPrevValue(value);\n const incomingJson = stableStringify(value);\n if (incomingJson !== stableStringify(prevValue)) {\n if (lastSentJsonRef.current && lastSentJsonRef.current === incomingJson) {\n // Our own debounced update echoing back from the store — ignore\n lastSentJsonRef.current = null;\n } else {\n // Genuine external change (sync action, external reset, etc.). The incoming value\n // wins and Form remounts from it, so a still-pending debounced write describes a\n // form the user can no longer see — letting it land would put the host store and\n // the visible form out of sync, with the echo detection hiding the difference.\n debouncedOnChange.cancel();\n lastSentJsonRef.current = null;\n initialDataRef.current = value;\n formDataRef.current = value;\n isInitialMountRef.current = true;\n mountedFormDataJsonRef.current = null;\n setFormKey((k) => k + 1);\n }\n }\n }\n\n const handleChange = useCallback(\n (e: IChangeEvent) => {\n if (!e.formData) return;\n formDataRef.current = e.formData as Record<string, unknown>;\n setRootFormData(e.formData as Record<string, unknown>);\n\n // Primary defense: suppress mount-phase onChange via effect timing.\n // Also capture the form data as the mounted baseline for secondary defense.\n if (isInitialMountRef.current) {\n mountedFormDataJsonRef.current = stableStringify(e.formData);\n return;\n }\n\n debouncedOnChange(e.formData as Record<string, unknown>);\n },\n [debouncedOnChange],\n );\n\n const debouncedOnChangeRef = useRef(debouncedOnChange);\n debouncedOnChangeRef.current = debouncedOnChange;\n\n // Ref to setRootFormData so formContext stays stable (useMemo with empty deps)\n const setRootFormDataRef = useRef(setRootFormData);\n setRootFormDataRef.current = setRootFormData;\n\n // Stable formContext — uses refs instead of direct onChange dep so the\n // object reference never changes. This prevents RJSF's\n // getSnapshotBeforeUpdate from firing on every parent re-render.\n const formContext = useMemo(\n () => ({\n setFormData: (data: unknown) => {\n // Shallow-merge with existing data — the old json-editor's root.setValue()\n // only updated properties present in the new value, preserving the rest.\n const merged = { ...formDataRef.current, ...(data as Record<string, unknown>) };\n initialDataRef.current = merged;\n formDataRef.current = merged;\n setRootFormDataRef.current(merged);\n debouncedOnChangeRef.current.cancel();\n lastSentJsonRef.current = stableStringify(merged);\n onChangeRef.current(merged);\n isInitialMountRef.current = true;\n mountedFormDataJsonRef.current = null;\n setFormKey((k) => k + 1);\n },\n getFormData: () => formDataRef.current,\n }),\n [], // stable — uses refs for all external values\n );\n\n // Expose programmatic validation to the parent via callback ref.\n // RJSF Form.validateForm() validates current formData, updates error state, and returns validity.\n const formRef = useRef<InstanceType<typeof Form>>(null);\n useEffect(() => {\n if (onRegisterValidate) {\n onRegisterValidate(() => {\n setHasValidated(true);\n return formRef.current?.validateForm() ?? true;\n });\n }\n }, [onRegisterValidate, formKey]);\n\n return (\n <div className=\"json-editor\">\n <RenderMarkdownProvider value={renderMarkdown ?? defaultRenderMarkdown}>\n <RootFormDataProvider value={rootFormData}>\n <Form\n ref={formRef}\n schema={schemaJs}\n key={formKey}\n initialFormData={initialDataRef.current}\n uiSchema={uiSchema}\n validator={validator}\n onChange={handleChange}\n widgets={mergedWidgets}\n fields={mergedFields}\n templates={defaultTemplates}\n formContext={formContext}\n disabled={readOnly}\n liveValidate={hasValidated ? 'onBlur' : undefined}\n showErrorList={false}\n noHtml5Validate\n tagName={inForm ? 'div' : 'form'}\n >\n {/* Hide default submit button */}\n <></>\n </Form>\n </RootFormDataProvider>\n </RenderMarkdownProvider>\n </div>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/blocks/RjsfSchemaEditor/markdownContext.ts","../src/blocks/RjsfSchemaEditor/widgets/CodeEditorWidget.tsx","../src/blocks/RjsfSchemaEditor/fields/CodeEditorField.tsx","../src/blocks/RjsfSchemaEditor/fieldHelpers.ts","../src/blocks/RjsfSchemaEditor/SchemaDescription.tsx","../src/blocks/RjsfSchemaEditor/fields/GridObjectField.tsx","../src/blocks/RjsfSchemaEditor/fields/InfoField.tsx","../src/blocks/RjsfSchemaEditor/TooltipIcon.tsx","../src/blocks/RjsfSchemaEditor/fields/TableArrayField.tsx","../src/blocks/RjsfSchemaEditor/fields/TabsObjectField.tsx","../src/blocks/RjsfSchemaEditor/templates/ArrayFieldItemTemplate.tsx","../src/blocks/RjsfSchemaEditor/templates/ArrayFieldTemplate.tsx","../src/blocks/RjsfSchemaEditor/templates/DescriptionFieldTemplate.tsx","../src/blocks/RjsfSchemaEditor/templates/ErrorListTemplate.tsx","../src/blocks/RjsfSchemaEditor/RootFormDataContext.ts","../src/blocks/RjsfSchemaEditor/templates/FieldTemplate.tsx","../src/blocks/RjsfSchemaEditor/templates/ObjectFieldTemplate.tsx","../src/blocks/RjsfSchemaEditor/widgets/CheckboxWidget.tsx","../src/blocks/RjsfSchemaEditor/widgets/DateWidget.tsx","../src/blocks/RjsfSchemaEditor/widgets/DynamicSelectWidget.tsx","../src/blocks/RjsfSchemaEditor/widgets/NumberWidget.tsx","../src/blocks/RjsfSchemaEditor/widgets/PasswordWidget.tsx","../src/blocks/RjsfSchemaEditor/widgets/RadioWidget.tsx","../src/blocks/RjsfSchemaEditor/widgets/SelectWidget.tsx","../src/blocks/RjsfSchemaEditor/widgets/TemplateWatchWidget.tsx","../src/blocks/RjsfSchemaEditor/widgets/TextareaWidget.tsx","../src/blocks/RjsfSchemaEditor/widgets/TextWidget.tsx","../src/blocks/RjsfSchemaEditor/registry.ts","../src/blocks/RjsfSchemaEditor/schemaUtils.ts","../src/blocks/RjsfSchemaEditor/RjsfSchemaEditor.tsx"],"names":["jsx","jsxs","useRef","useCallback","useState","DOMPurify","createContext","use","resolveByPath","Fragment","useEffect"],"mappings":"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","file":"rjsf.js","sourcesContent":["import { createContext, use } from 'react';\nimport type { ReactNode } from 'react';\n\nexport type RenderMarkdown = (source: string) => ReactNode;\n\n/** Falls back to plain text when the host app doesn't provide a markdown renderer. */\nconst RenderMarkdownContext = createContext<RenderMarkdown>((source) => source);\n\nexport const RenderMarkdownProvider = RenderMarkdownContext;\n\nexport const useRenderMarkdown = (): RenderMarkdown => use(RenderMarkdownContext);\n","import { useEffect, useState } from 'react';\n\nimport { CodeEditor } from '../../../components/CodeEditor';\n// Deliberately not the barrel: CodeEditorWidget.test.tsx stubs the whole\n// `components/CodeEditor` module to avoid mounting a real editor, so anything\n// imported from there is a stub. The mode guard has to be the real one.\nimport { isLanguageMode, type LANGUAGE_MODE } from '../../../components/CodeEditor/helpers';\n\ntype CodeEditorWidgetProps = {\n id: string;\n value: unknown;\n onChange: (value: unknown) => void;\n disabled?: boolean;\n readonly?: boolean;\n options: Record<string, unknown>;\n};\n\nconst isValidJson = (raw: string): boolean => {\n try {\n const parsed: unknown = JSON.parse(raw);\n return Boolean(parsed && typeof parsed === 'object');\n } catch {\n return false;\n }\n};\n\nconst sanitize = (val: unknown): string => {\n if (typeof val === 'object' && val !== null) return JSON.stringify(val, null, ' ');\n return String(val ?? '');\n};\n\nexport const CodeEditorWidget = ({\n id,\n value,\n onChange,\n disabled,\n readonly,\n options,\n}: CodeEditorWidgetProps) => {\n const editorOptions = (options.editor ?? {}) as Record<string, unknown>;\n const rawMode = (editorOptions.mode as string) ?? 'application/json';\n const mode: LANGUAGE_MODE = isLanguageMode(rawMode) ? rawMode : 'application/json';\n const isJsonMode = mode === 'application/json';\n const isReadOnly = disabled || readonly || !!(editorOptions.readOnly as boolean);\n\n // The editor owns its text so the user's formatting is preserved while typing;\n // external value changes sync in below only when the parsed data actually differs.\n const [text, setText] = useState(() => sanitize(value));\n\n useEffect(() => {\n setText((currentText) => {\n const sanitized = sanitize(value);\n if (currentText === sanitized) return currentText;\n\n // For JSON, compare parsed data to avoid unnecessary reformatting\n if (isJsonMode && isValidJson(currentText)) {\n try {\n if (\n JSON.stringify(JSON.parse(currentText)) ===\n JSON.stringify(typeof value === 'object' ? value : JSON.parse(sanitized))\n ) {\n return currentText; // same data, different formatting — keep editor's format\n }\n } catch {\n // parse failed — fall through to replace the text\n }\n }\n\n return sanitized;\n });\n }, [value, isJsonMode]);\n\n const handleChange = (raw: string) => {\n setText(raw);\n if (isJsonMode && isValidJson(raw)) {\n onChange(JSON.parse(raw));\n } else {\n onChange(raw);\n }\n };\n\n const help =\n isJsonMode && !isReadOnly && options.encryptionHint !== false ? (\n <>\n Properties prefixed with <code>#</code> sign will be encrypted on save. Already encrypted\n strings will persist.\n </>\n ) : null;\n\n return (\n <div id={id}>\n {isReadOnly ? (\n <CodeEditor\n variant=\"field\"\n value={text}\n mode={mode}\n readOnly\n withCopyButton\n withLineNumbers={editorOptions.lineNumbers !== false}\n />\n ) : (\n <CodeEditor\n variant=\"field\"\n value={text}\n mode={mode}\n onChange={handleChange}\n withCopyButton\n withLineNumbers={editorOptions.lineNumbers !== false}\n help={help}\n />\n )}\n </div>\n );\n};\n","import type { FieldProps } from '@rjsf/utils';\n\nimport { CodeEditorWidget } from '../widgets/CodeEditorWidget';\n\n/**\n * Field wrapper for CodeEditorWidget when used with type: \"object\".\n * RJSF only applies ui:widget to primitive types, so object-typed\n * code editors need a custom field that delegates to the widget.\n */\nexport const CodeEditorField = ({\n fieldPathId,\n formData,\n onChange,\n disabled,\n readonly,\n uiSchema,\n}: FieldProps) => {\n const uiOptions = uiSchema?.['ui:options'] as Record<string, unknown> | undefined;\n\n return (\n <CodeEditorWidget\n id={fieldPathId.$id}\n value={formData}\n onChange={(val: unknown) => onChange(val, fieldPathId.path)}\n disabled={!!disabled}\n readonly={!!readonly}\n options={uiOptions ?? {}}\n />\n );\n};\n","/**\n * Shared helpers for RJSF custom fields and widgets.\n */\nimport type { Field, Registry, UiSchema } from '@rjsf/utils';\n\n/** No-op function reused as onBlur/onFocus stub in custom fields. */\nconst noop = () => {};\n\nconst NullField: Field = () => null;\n\n/** RJSF always registers SchemaField; the fallback only satisfies the indexed-access type. */\nexport const getSchemaField = (registry: Registry): Field =>\n registry.fields.SchemaField ?? NullField;\n\n/** Stub props shared by all custom SchemaField call-sites (onBlur, onFocus, errorSchema). */\nexport const SCHEMA_FIELD_STUBS = {\n onBlur: noop,\n onFocus: noop,\n errorSchema: {} satisfies Record<string, never>,\n};\n\n/**\n * Resolves a dot-path against an object (e.g. \"_metadata_.table.columns\").\n *\n * json-editor watch paths may be prefixed with the schema `id` (e.g.\n * \"rootschema.endpoints.contact\"). The prefix is not a real data key — it\n * identifies the schema root. When the first segment doesn't exist in `data`\n * we retry without it so components using this convention still resolve.\n */\nexport const resolveByPath = (path: string, data: Record<string, unknown>): unknown => {\n const parts = path.split('.');\n const walk = (segments: string[]): unknown => {\n let current: unknown = data;\n for (const part of segments) {\n if (current == null || typeof current !== 'object') return undefined;\n current = (current as Record<string, unknown>)[part];\n }\n return current;\n };\n const result = walk(parts);\n const [first] = parts;\n if (result !== undefined || first === undefined || parts.length <= 1) return result;\n // First segment may be a schema id prefix — retry without it.\n if (!(first in data)) return walk(parts.slice(1));\n return result;\n};\n\n/**\n * Whether a `template-watch` field is the invisible computed-helper variant.\n *\n * - `template-watch` replaces `ui:widget: 'hidden'`, so `ui:options.hidden` carries the schema's\n * `options.hidden` instead.\n * - The field stays mounted either way; only its wrapper is hidden.\n */\nexport const isHiddenTemplateWatch = (uiSchema: UiSchema | undefined): boolean => {\n if (uiSchema?.['ui:widget'] !== 'template-watch') return false;\n return !!(uiSchema['ui:options'] as Record<string, unknown> | undefined)?.hidden;\n};\n\n/**\n * Extracts a property name from a simple Mustache-like template.\n * e.g. \"{{item.field_name}}\" → \"field_name\"\n */\nexport const extractProperty = (template: string): string => {\n const match = /\\{\\{item\\.(\\w+)\\}\\}/.exec(template);\n return match?.[1] ?? '';\n};\n\n/**\n * Builds select options from watched form data and enumSource config.\n *\n * Supports two json-editor enumSource formats:\n * 1. String: `enumSource: \"varName\"` — use the watched array directly as string values\n * 2. Array: `enumSource: [{ source, value, title }]` — map items through templates\n */\nexport const buildDynamicOptions = (\n watch: Record<string, string>,\n enumSource: unknown,\n rootFormData: Record<string, unknown>,\n): { value: string; label: string }[] => {\n if (typeof enumSource === 'string') {\n const watchPath = watch[enumSource];\n if (!watchPath) return [];\n const sourceData = resolveByPath(watchPath, rootFormData);\n if (!Array.isArray(sourceData)) return [];\n return sourceData.map((item) => {\n const val = String(item ?? '');\n return { value: val, label: val };\n });\n }\n\n if (Array.isArray(enumSource) && enumSource.length > 0) {\n if (enumSource.length > 1) {\n console.warn('[RJSF] Multiple enumSource entries are not supported, only the first is used.');\n }\n const source = enumSource[0] as { source: string; value: string; title: string };\n const watchPath = watch[source.source];\n if (!watchPath) return [];\n const sourceData = resolveByPath(watchPath, rootFormData);\n if (!Array.isArray(sourceData)) return [];\n\n const valueProp = extractProperty(source.value);\n const titleProp = extractProperty(source.title);\n\n return sourceData\n .filter((item): item is Record<string, unknown> => item != null && typeof item === 'object')\n .map((item) => ({\n value: String(item[valueProp] ?? ''),\n label: String(item[titleProp] ?? item[valueProp] ?? ''),\n }));\n }\n\n return [];\n};\n\n/**\n * Builds a child `fieldPathId` for a nested SchemaField.\n * Joins segments with \"_\" for the $id and appends them to the path array.\n */\nexport const childFieldPathId = (\n parentFieldPathId: { $id?: string; path?: (string | number)[] } | undefined,\n ...segments: (string | number)[]\n) => ({\n $id: [parentFieldPathId?.$id ?? 'root', ...segments].join('_'),\n path: [...(parentFieldPathId?.path ?? []), ...segments],\n});\n\n/**\n * Sorts object entries by `propertyOrder`, falling back to MAX_SAFE_INTEGER\n * for properties without an explicit order.\n */\nexport const sortByPropertyOrder = (\n properties: Record<string, { propertyOrder?: number }>,\n): string[] =>\n Object.entries(properties)\n .sort(\n ([, a], [, b]) =>\n (a.propertyOrder ?? Number.MAX_SAFE_INTEGER) - (b.propertyOrder ?? Number.MAX_SAFE_INTEGER),\n )\n .map(([key]) => key);\n","import type { ReactNode } from 'react';\nimport DOMPurify from 'dompurify';\n\n/** Renders a schema description with sanitized HTML support (links, formatting, etc.). */\nexport const SchemaDescription = ({ description }: { description?: string }): ReactNode => {\n if (!description) return null;\n\n return (\n <p\n className=\"tw:text-xs tw:text-neutral-400\"\n dangerouslySetInnerHTML={{ __html: DOMPurify.sanitize(description) }}\n />\n );\n};\n","import { useCallback, useRef } from 'react';\nimport type { FieldProps, RJSFSchema, UiSchema } from '@rjsf/utils';\n\nimport { CollapsiblePanel } from '../../../components/CollapsiblePanel';\nimport {\n childFieldPathId,\n getSchemaField,\n SCHEMA_FIELD_STUBS,\n sortByPropertyOrder,\n} from '../fieldHelpers';\nimport { SchemaDescription } from '../SchemaDescription';\n\ntype PropertyDef = {\n title?: string;\n propertyOrder?: number;\n options?: { grid_columns?: number; grid_break?: boolean };\n};\n\n/**\n * Custom field that renders an object's properties in a responsive grid layout.\n * Used for schema objects with `format: \"grid\"` or `\"grid-strict\"`.\n * json-editor uses a 12-column grid; each property can specify `options.grid_columns`.\n * Supports `options.collapsed` for collapsible sections.\n */\nexport const GridObjectField = ({\n schema,\n uiSchema = {},\n formData,\n onChange,\n disabled,\n readonly,\n registry,\n fieldPathId,\n}: FieldProps) => {\n const properties = (schema.properties ?? {}) as Record<string, PropertyDef>;\n const data = (formData ?? {}) as Record<string, unknown>;\n const SchemaField = getSchemaField(registry);\n\n // Use a ref to always have the latest data in the onChange handler\n // without recreating callbacks on every render.\n const dataRef = useRef(data);\n dataRef.current = data;\n\n // Per-property onChange that merges the property value into the full object.\n // Without this, child SchemaFields would replace the entire object with just\n // the property value. We pass fieldPathId.path (this field's own path) so\n // RJSF's Form._set correctly places the full object at the right location.\n // Using the child's path would cause a mismatch: the full grid object would\n // be set at the leaf path, corrupting data (e.g. [object Object] in selects).\n const fieldPath = fieldPathId?.path;\n const onPropertyChange = useCallback(\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n (key: string) => (value: any, _childPath: any, errorSchema?: any, id?: string) => {\n onChange({ ...dataRef.current, [key]: value } as any, fieldPath, errorSchema, id);\n },\n [onChange, fieldPath],\n );\n\n const uiOptions = uiSchema['ui:options'] as Record<string, unknown> | undefined;\n const hasCollapsed = uiOptions?.collapsed !== undefined;\n const collapsed = !!uiOptions?.collapsed;\n const disableCollapse = !!uiOptions?.disableCollapse;\n\n const sortedKeys = sortByPropertyOrder(properties);\n\n if (sortedKeys.length === 0) return null;\n\n const gridContent = (\n <div className=\"tw:grid tw:grid-cols-12 tw:gap-4 tw:[&>div:empty]:hidden\">\n {sortedKeys.map((key) => {\n const gridCols = properties[key]?.options?.grid_columns ?? 12;\n const gridBreak = !!properties[key]?.options?.grid_break;\n return (\n <div\n key={key}\n style={{\n gridColumn: gridBreak ? '1 / -1' : `span ${Math.min(gridCols, 12)}`,\n }}\n >\n <SchemaField\n name={key}\n schema={schema.properties![key] as RJSFSchema}\n uiSchema={(uiSchema[key] ?? {}) as UiSchema}\n formData={data[key]}\n {...SCHEMA_FIELD_STUBS}\n fieldPathId={childFieldPathId(fieldPathId, key)}\n registry={registry}\n onChange={onPropertyChange(key)}\n disabled={!!disabled}\n readonly={!!readonly}\n />\n </div>\n );\n })}\n </div>\n );\n\n // Collapsible grid section\n if (hasCollapsed && !disableCollapse) {\n const hasValues = Object.values(data).some(\n (v) => v !== undefined && v !== null && v !== '' && v !== false,\n );\n const defaultExpanded = hasValues ? !collapsed : true;\n\n return (\n <CollapsiblePanel\n className=\"tw:rounded-lg\"\n header={schema.title || 'Settings'}\n defaultExpanded={defaultExpanded}\n headerClassName=\"tw:rounded-lg\"\n bodyClassName=\"tw:flex tw:flex-col tw:gap-4\"\n >\n <SchemaDescription description={schema.description} />\n {gridContent}\n </CollapsiblePanel>\n );\n }\n\n // Grid objects with a title get a bordered card to visually separate sections.\n if (schema.title) {\n return (\n <div className=\"tw:rounded-lg tw:border tw:border-solid tw:border-neutral-200 tw:p-4\">\n <h3 className=\"tw:mb-3 tw:text-base tw:font-medium tw:text-neutral-800\">{schema.title}</h3>\n <SchemaDescription description={schema.description} />\n {gridContent}\n </div>\n );\n }\n\n return (\n <div className=\"tw:flex tw:flex-col tw:gap-4\">\n <SchemaDescription description={schema.description} />\n {gridContent}\n </div>\n );\n};\n","import type { FieldProps } from '@rjsf/utils';\n\nimport { Alert } from '../../../components/Alert';\n\nconst VALID_ALERT_TYPES = new Set(['info', 'warning', 'error', 'success']);\n\ntype AlertVariant = 'info' | 'warning' | 'error' | 'success';\n\n/**\n * Custom field that renders static informational text.\n * Used for schema properties with `format: \"info\"`.\n * Displays title and description as a read-only alert.\n * Supports `options.alert_type` to control the alert variant\n * (`\"info\"` (default), `\"warning\"`, `\"error\"`, `\"success\"`).\n */\nexport const InfoField = ({ schema, uiSchema }: FieldProps) => {\n if (!schema.title && !schema.description) return null;\n\n const uiOptions = uiSchema?.['ui:options'] as Record<string, unknown> | undefined;\n const alertType = String(uiOptions?.alertType ?? 'info');\n const variant: AlertVariant = VALID_ALERT_TYPES.has(alertType)\n ? (alertType as AlertVariant)\n : 'info';\n\n return (\n <div className=\"tw:my-3\">\n <Alert variant={variant} title={schema.title}>\n {schema.description}\n </Alert>\n </div>\n );\n};\n","import type { ReactNode } from 'react';\n\nimport { Tooltip } from '../../components/Tooltip';\nimport { Info } from '../../icons';\n\nimport { useRenderMarkdown } from './markdownContext';\n\nexport const TooltipIcon = ({ rawHelp }: { rawHelp: string }): ReactNode => {\n const renderMarkdown = useRenderMarkdown();\n\n return (\n <Tooltip placement=\"top\" variant=\"explanatory\" tooltip={renderMarkdown(rawHelp)} triggerAsChild>\n <span className=\"tw:cursor-help tw:text-neutral-400\">\n <Info className=\"tw:size-4\" />\n </span>\n </Tooltip>\n );\n};\n","import { useRef } from 'react';\nimport type { FieldProps, RJSFSchema, UiSchema } from '@rjsf/utils';\n\nimport { Button } from '../../../components/Button';\nimport { CollapsiblePanel } from '../../../components/CollapsiblePanel';\nimport { Trash2 } from '../../../icons';\nimport {\n childFieldPathId,\n getSchemaField,\n SCHEMA_FIELD_STUBS,\n sortByPropertyOrder,\n} from '../fieldHelpers';\nimport { SchemaDescription } from '../SchemaDescription';\nimport { TooltipIcon } from '../TooltipIcon';\n\ntype PropertyDef = {\n title?: string;\n type?: string;\n enum?: string[];\n propertyOrder?: number;\n default?: unknown;\n};\n\n/** Default value for a freshly added cell/item, honouring the schema default. */\nconst defaultValueFor = (prop: { type?: string; default?: unknown }): unknown => {\n if (prop.default !== undefined) return prop.default;\n if (prop.type === 'boolean') return false;\n if (prop.type === 'string') return '';\n return undefined;\n};\n\n/**\n * Custom field that renders an array as a table.\n * Used for schema arrays with `format: \"table\"`.\n *\n * - Array of objects: each item is a row, each property a column.\n * - Array of primitives (e.g. `items: { type: 'string' }`): each item is a\n * single-column row holding the value itself.\n *\n * Cells are rendered via RJSF's SchemaField so all registered widgets are used.\n */\nexport const TableArrayField = ({\n schema,\n uiSchema = {},\n formData,\n onChange,\n disabled,\n readonly,\n registry,\n fieldPathId,\n}: FieldProps) => {\n const items = (formData ?? []) as unknown[];\n const itemSchema = schema.items as Record<string, unknown> | undefined;\n const properties = (itemSchema?.properties ?? {}) as Record<string, PropertyDef>;\n const itemUiSchema = (uiSchema.items ?? {}) as UiSchema;\n\n const SchemaField = getSchemaField(registry);\n\n const sortedKeys = sortByPropertyOrder(properties);\n\n // Arrays of primitives (strings, numbers, …) have no object properties, so\n // there are no columns to derive — render the item value in a single column.\n const isPrimitiveItems = sortedKeys.length === 0 && itemSchema != null;\n\n const isReadOnly = disabled || readonly;\n\n const fieldPath = fieldPathId?.path ?? [];\n\n // Keep a ref to items so onChange closures always read the latest data\n const itemsRef = useRef(items);\n itemsRef.current = items;\n\n const handleCellChange = (rowIndex: number, key: string, value: unknown) => {\n const newItems = [...itemsRef.current];\n newItems[rowIndex] = { ...(newItems[rowIndex] as Record<string, unknown>), [key]: value };\n onChange(newItems, fieldPath);\n };\n\n const handleItemChange = (rowIndex: number, value: unknown) => {\n const newItems = [...itemsRef.current];\n newItems[rowIndex] = value;\n onChange(newItems, fieldPath);\n };\n\n const handleRemoveRow = (rowIndex: number) => {\n onChange(\n itemsRef.current.filter((_, i) => i !== rowIndex),\n fieldPath,\n );\n };\n\n const handleAddRow = () => {\n if (isPrimitiveItems) {\n onChange(\n [\n ...itemsRef.current,\n defaultValueFor({\n type: itemSchema?.type as string | undefined,\n default: itemSchema?.default,\n }),\n ],\n fieldPath,\n );\n return;\n }\n const newItem: Record<string, unknown> = {};\n for (const key of sortedKeys) {\n newItem[key] = defaultValueFor(properties[key] ?? {});\n }\n onChange([...itemsRef.current, newItem], fieldPath);\n };\n\n const withHiddenLabel = (base: UiSchema): UiSchema => ({\n ...base,\n 'ui:options': {\n ...base['ui:options'],\n label: false,\n },\n });\n\n const getCellUiSchema = (key: string): UiSchema =>\n withHiddenLabel((itemUiSchema[key] ?? {}) as UiSchema);\n\n const table = items.length > 0 && (\n <table className=\"tw:w-full tw:table-fixed tw:border-collapse tw:text-sm\">\n <thead>\n <tr>\n {isPrimitiveItems ? (\n <th className=\"tw:border-b tw:border-neutral-200 tw:p-2 tw:text-left tw:text-xs tw:font-medium tw:text-neutral-600\">\n {(itemSchema?.title as string) ?? ''}\n </th>\n ) : (\n sortedKeys.map((key) => (\n <th\n key={key}\n className=\"tw:border-b tw:border-neutral-200 tw:p-2 tw:text-left tw:text-xs tw:font-medium tw:text-neutral-600\"\n >\n {properties[key]?.title ?? key}\n </th>\n ))\n )}\n {!isReadOnly && <th className=\"tw:w-20\" />}\n </tr>\n </thead>\n <tbody>\n {items.map((item, rowIndex) => (\n <tr key={rowIndex} className=\"tw:border-b tw:border-neutral-100\">\n {isPrimitiveItems ? (\n <td className=\"tw:px-2 tw:py-1.5 tw:[&>div]:mb-0\">\n <SchemaField\n name={String(rowIndex)}\n schema={itemSchema as RJSFSchema}\n uiSchema={withHiddenLabel(itemUiSchema)}\n formData={item}\n {...SCHEMA_FIELD_STUBS}\n fieldPathId={childFieldPathId(fieldPathId, rowIndex)}\n registry={registry}\n onChange={(val: unknown) => handleItemChange(rowIndex, val)}\n disabled={!!disabled}\n readonly={!!readonly}\n />\n </td>\n ) : (\n sortedKeys.map((key) => (\n <td key={key} className=\"tw:px-2 tw:py-1.5 tw:[&>div]:mb-0\">\n <SchemaField\n name={key}\n schema={properties[key] as unknown as RJSFSchema}\n uiSchema={getCellUiSchema(key)}\n formData={(item as Record<string, unknown>)[key]}\n {...SCHEMA_FIELD_STUBS}\n fieldPathId={childFieldPathId(fieldPathId, rowIndex, key)}\n registry={registry}\n onChange={(val: unknown) => handleCellChange(rowIndex, key, val)}\n disabled={!!disabled}\n readonly={!!readonly}\n />\n </td>\n ))\n )}\n {!isReadOnly && (\n <td className=\"tw:px-2 tw:py-1.5 tw:text-right\">\n <Button\n variant=\"invisible\"\n size=\"icon\"\n onClick={() => handleRemoveRow(rowIndex)}\n aria-label=\"Remove row\"\n >\n <Trash2 className=\"tw:size-4\" />\n </Button>\n </td>\n )}\n </tr>\n ))}\n </tbody>\n </table>\n );\n\n const addButton = !isReadOnly && (\n <Button variant=\"outline\" onClick={handleAddRow}>\n Add {(itemSchema?.title as string) || 'Item'}\n </Button>\n );\n\n // Wrap in CollapsiblePanel when the table has a title\n if (schema.title) {\n const tooltip = uiSchema['ui:help'];\n\n return (\n <CollapsiblePanel\n className=\"tw:rounded-lg\"\n headerClassName=\"tw:rounded-lg\"\n header={\n <span className=\"tw:inline-flex tw:items-center tw:gap-1\">\n {schema.title}\n {tooltip && <TooltipIcon rawHelp={tooltip} />}\n </span>\n }\n defaultExpanded\n bodyClassName=\"tw:flex tw:flex-col tw:gap-4\"\n >\n <SchemaDescription description={schema.description} />\n {table}\n {addButton}\n </CollapsiblePanel>\n );\n }\n\n return (\n <div className=\"tw:flex tw:flex-col tw:gap-4\">\n <SchemaDescription description={schema.description} />\n {table}\n {addButton}\n </div>\n );\n};\n","import { useCallback, useRef, useState } from 'react';\nimport type { FieldProps, RJSFSchema, UiSchema } from '@rjsf/utils';\n\nimport { Tabs, TabsContent } from '../../../components/Tabs';\nimport {\n childFieldPathId,\n getSchemaField,\n SCHEMA_FIELD_STUBS,\n sortByPropertyOrder,\n} from '../fieldHelpers';\nimport { SchemaDescription } from '../SchemaDescription';\n\ntype PropertyDef = { title?: string; propertyOrder?: number };\n\n/**\n * Custom field that renders an object's properties as tabs.\n * Used for schema objects with `format: \"tabs\"`, `\"tabs-top\"`, or `\"categories\"`.\n * Each property becomes a tab panel.\n */\nexport const TabsObjectField = ({\n schema,\n uiSchema = {},\n formData,\n onChange,\n disabled,\n readonly,\n registry,\n fieldPathId,\n}: FieldProps) => {\n const properties = (schema.properties ?? {}) as Record<string, PropertyDef>;\n const data = (formData ?? {}) as Record<string, unknown>;\n const SchemaField = getSchemaField(registry);\n\n const dataRef = useRef(data);\n dataRef.current = data;\n\n const onPropertyChange = useCallback(\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n (key: string) => (value: any, path: any, errorSchema?: any, id?: string) => {\n onChange({ ...dataRef.current, [key]: value } as any, path, errorSchema, id);\n },\n [onChange],\n );\n\n const sortedKeys = sortByPropertyOrder(properties);\n\n const [activeTab, setActiveTab] = useState(sortedKeys[0] ?? '');\n\n if (sortedKeys.length === 0) return null;\n\n const triggers = sortedKeys.map((key) => ({\n value: key,\n title: properties[key]?.title ?? key,\n }));\n\n return (\n <div className=\"tw:flex tw:flex-col tw:gap-4\">\n {schema.title && (\n <h3 className=\"tw:text-base tw:font-medium tw:text-neutral-800\">{schema.title}</h3>\n )}\n <SchemaDescription description={schema.description} />\n <Tabs triggers={triggers} value={activeTab} onValueChange={setActiveTab} compact>\n {sortedKeys.map((key) => (\n <TabsContent key={key} value={key}>\n <SchemaField\n name={key}\n schema={schema.properties![key] as RJSFSchema}\n uiSchema={(uiSchema[key] ?? {}) as UiSchema}\n formData={data[key]}\n {...SCHEMA_FIELD_STUBS}\n fieldPathId={childFieldPathId(fieldPathId, key)}\n registry={registry}\n onChange={onPropertyChange(key)}\n disabled={!!disabled}\n readonly={!!readonly}\n />\n </TabsContent>\n ))}\n </Tabs>\n </div>\n );\n};\n","import type { ArrayFieldItemTemplateProps } from '@rjsf/utils';\n\nimport { Button } from '../../../components/Button';\nimport { CollapsiblePanel } from '../../../components/CollapsiblePanel';\nimport { Trash2 } from '../../../icons';\n\nexport const ArrayFieldItemTemplate = ({\n children,\n index,\n totalItems,\n schema,\n hasToolbar,\n disabled,\n readonly,\n buttonsProps,\n}: ArrayFieldItemTemplateProps) => {\n const isObject = schema.type === 'object';\n const canRemove = hasToolbar && buttonsProps.hasRemove && !disabled && !readonly;\n\n // Object array items use CollapsiblePanel for meaningful collapsing\n if (isObject) {\n const itemTitle = `${schema.title || 'Item'} ${index + 1}`;\n // Single item starts expanded; multiple items start collapsed to keep the page compact\n const defaultExpanded = totalItems <= 1;\n\n return (\n <CollapsiblePanel\n className=\"tw:rounded-lg\"\n headerClassName=\"tw:rounded-lg\"\n header={\n <div className=\"tw:flex tw:w-full tw:items-center tw:justify-between\">\n <span>{itemTitle}</span>\n {canRemove && (\n <div\n role=\"presentation\"\n onClick={(e) => e.stopPropagation()}\n onKeyUp={(e) => e.stopPropagation()}\n >\n <Button\n variant=\"invisible\"\n size=\"icon\"\n aria-label={`Remove ${itemTitle}`}\n onClick={buttonsProps.onRemoveItem}\n >\n <Trash2 className=\"tw:size-4\" />\n </Button>\n </div>\n )}\n </div>\n }\n defaultExpanded={defaultExpanded}\n >\n <div className=\"tw:flex tw:flex-col tw:gap-4\">{children}</div>\n </CollapsiblePanel>\n );\n }\n\n // Simple items use a card layout\n return (\n <div className=\"tw:rounded-lg tw:border tw:border-solid tw:border-neutral-200 tw:bg-white tw:p-4\">\n <div className=\"tw:flex tw:items-start tw:gap-3\">\n <div className=\"tw:flex tw:flex-1 tw:flex-col tw:gap-4\">{children}</div>\n {canRemove && (\n <Button\n variant=\"outline\"\n size=\"small\"\n className=\"tw:mt-5 tw:shrink-0\"\n onClick={buttonsProps.onRemoveItem}\n >\n Delete\n </Button>\n )}\n </div>\n </div>\n );\n};\n","import type { ArrayFieldTemplateProps } from '@rjsf/utils';\n\nimport { Button } from '../../../components/Button';\n\nexport const ArrayFieldTemplate = ({\n items,\n canAdd,\n onAddClick,\n title,\n schema,\n disabled,\n readonly,\n}: ArrayFieldTemplateProps) => {\n const isReadOnly = disabled || readonly;\n\n const itemLabel =\n typeof schema.items === 'object' && schema.items !== null && !Array.isArray(schema.items)\n ? (schema.items as { title?: string }).title || 'Item'\n : 'Item';\n\n return (\n <div className=\"tw:flex tw:flex-col tw:gap-4\">\n {(title || schema.description) && (\n <div>\n {title && <h3 className=\"tw:text-base tw:font-medium tw:text-neutral-800\">{title}</h3>}\n {schema.description && (\n <p className=\"tw:mt-1 tw:text-xs tw:text-neutral-400\">{schema.description}</p>\n )}\n </div>\n )}\n {items}\n {canAdd && !isReadOnly && (\n <Button variant=\"outline\" onClick={onAddClick}>\n Add {itemLabel}\n </Button>\n )}\n </div>\n );\n};\n","import { isValidElement } from 'react';\nimport type { DescriptionFieldProps } from '@rjsf/utils';\nimport DOMPurify from 'dompurify';\n\n/**\n * Custom description template that renders HTML in schema descriptions.\n * Uses DOMPurify to sanitize the HTML before rendering.\n * Schema descriptions are authored by component developers and may contain\n * links (<a>), formatting (<strong>, <code>, <br>), etc.\n */\nexport const DescriptionFieldTemplate = ({ description, id }: DescriptionFieldProps) => {\n if (!description) return null;\n\n if (isValidElement(description)) {\n return <div id={id}>{description}</div>;\n }\n\n return (\n <p\n id={id}\n className=\"tw:text-xs tw:text-neutral-400\"\n dangerouslySetInnerHTML={{ __html: DOMPurify.sanitize(String(description)) }}\n />\n );\n};\n","import type { ErrorListProps } from '@rjsf/utils';\n\nexport const ErrorListTemplate = ({ errors }: ErrorListProps) => {\n if (!errors.length) return null;\n\n return (\n <div className=\"tw:mb-4\">\n {errors.map((error) => (\n <p key={`${error.property}:${error.message}`} className=\"tw:text-xs tw:text-error-500\">\n {error.message}\n </p>\n ))}\n </div>\n );\n};\n","import { createContext, use } from 'react';\n\nconst RootFormDataContext = createContext<Record<string, unknown>>({});\n\nexport const RootFormDataProvider = RootFormDataContext;\n\nexport const useRootFormData = (): Record<string, unknown> => use(RootFormDataContext);\n","import type { ReactNode } from 'react';\nimport type { FieldTemplateProps } from '@rjsf/utils';\nimport DOMPurify from 'dompurify';\n\nimport { Label } from '../../../components/Label';\nimport { Link } from '../../../components/Link';\nimport { Tooltip } from '../../../components/Tooltip';\nimport { BookOpen } from '../../../icons';\nimport { FormGroup } from '../../FormGroup';\nimport { isHiddenTemplateWatch } from '../fieldHelpers';\nimport { useRootFormData } from '../RootFormDataContext';\nimport { TooltipIcon } from '../TooltipIcon';\n\n/**\n * Resolves a dot-path against an object.\n */\nconst resolveByPath = (parts: string[], data: Record<string, unknown>): unknown => {\n let current: unknown = data;\n for (const part of parts) {\n if (current == null || typeof current !== 'object') return undefined;\n current = (current as Record<string, unknown>)[part];\n }\n return current;\n};\n\n/**\n * Resolves a dependency path against form data.\n *\n * - Paths starting with \"root.\" are resolved from the root form data\n * - Other paths are resolved as siblings (relative to the parent object)\n */\nconst resolveDependencyValue = (\n path: string,\n formData: Record<string, unknown>,\n parentPath: (string | number)[],\n): unknown => {\n if (path.startsWith('root.')) {\n return resolveByPath(path.replace(/^root\\./, '').split('.'), formData);\n }\n // Resolve as sibling field within the same parent object\n const parent = resolveByPath(parentPath.map(String), formData);\n if (parent && typeof parent === 'object') {\n const sibling = resolveByPath(path.split('.'), parent as Record<string, unknown>);\n if (sibling !== undefined) return sibling;\n }\n // Fallback: try from root (handles cross-level dependencies like\n // a nested field depending on a root-level property)\n return resolveByPath(path.split('.'), formData);\n};\n\n/**\n * Evaluates json-editor `options.dependencies` against current form data.\n * Returns true if the field should be visible.\n *\n * Rules (matching old json-editor behavior):\n * - `{ \"field\": \"value\" }` — show when field equals value\n * - `{ \"field\": [\"a\", \"b\"] }` — show when field is one of the values\n * - `{ \"field\": \"\" }` — show when field is empty/falsy\n * - Multiple entries are AND-ed: all conditions must match\n */\nconst evaluateDependencies = (\n dependencies: Record<string, unknown>,\n formData: Record<string, unknown>,\n parentPath: (string | number)[],\n): boolean => {\n for (const [path, expected] of Object.entries(dependencies)) {\n const actual = resolveDependencyValue(path, formData, parentPath);\n\n if (Array.isArray(expected)) {\n if (!expected.includes(actual)) return false;\n } else if (expected === '') {\n // Show when field is empty/falsy\n if (actual !== '' && actual !== undefined && actual !== null) return false;\n } else {\n if (actual !== expected) return false;\n }\n }\n return true;\n};\n\nconst DocumentationLinkIcon = ({\n documentation,\n}: {\n documentation: { link: string; tooltip?: string };\n}): ReactNode => (\n <Tooltip\n placement=\"top\"\n variant=\"explanatory\"\n tooltip={documentation.tooltip ?? 'Open documentation'}\n triggerAsChild\n >\n <Link href={documentation.link}>\n <span className=\"tw:cursor-pointer tw:text-neutral-400 tw:hover:text-neutral-600\">\n <BookOpen className=\"tw:size-4\" />\n </span>\n </Link>\n </Tooltip>\n);\n\n/**\n * Renders the field's FormGroup wrapper, label, help, and errors.\n * Does NOT subscribe to RootFormDataContext — that subscription only happens\n * inside FieldTemplateWithDependencies, so fields without dependencies don't\n * re-render on every form-state change.\n */\nconst FieldTemplateBody = ({\n id,\n label,\n rawHelp,\n rawDescription,\n rawErrors,\n children,\n schema,\n uiSchema,\n displayLabel,\n}: FieldTemplateProps) => {\n // Button-type pseudo-fields (test-connection, sync-action) render without label/description wrapping\n const widget = uiSchema?.['ui:widget'];\n if (widget === 'test-connection' || widget === 'sync-action') {\n return <>{children}</>;\n }\n\n // Object/array types get rendered by their own templates — UNLESS the array\n // has a custom widget (e.g. multi-select), in which case it renders as a\n // single leaf widget that needs the label/description wrapper.\n if (schema.type === 'object') {\n return <>{children}</>;\n }\n if (schema.type === 'array' && !uiSchema?.['ui:widget']) {\n return <>{children}</>;\n }\n\n const uiOptions = uiSchema?.['ui:options'] as Record<string, unknown> | undefined;\n const documentation = uiOptions?.documentation as { link: string; tooltip?: string } | undefined;\n\n const hasErrors = rawErrors && rawErrors.length > 0;\n // Checkbox fields render their own label inside the widget — skip the FormGroup label\n // and place the help icons beside the checkbox instead (outside the label, so\n // clicking an icon doesn't toggle the checkbox).\n // Booleans rendered as select (via enum_titles) still need the label.\n const isCheckbox = schema.type === 'boolean' && uiSchema?.['ui:widget'] !== 'select';\n const showLabel = displayLabel && label && !isCheckbox;\n\n const hasHelpIcons = Boolean(rawHelp || documentation);\n const helpIcons = (\n <>\n {rawHelp && <TooltipIcon rawHelp={rawHelp} />}\n {documentation && <DocumentationLinkIcon documentation={documentation} />}\n </>\n );\n\n return (\n <FormGroup state={hasErrors ? 'error' : 'default'}>\n {showLabel && (\n <Label htmlFor={id}>\n <span className=\"tw:inline-flex tw:items-center tw:gap-1\">\n {label}\n {helpIcons}\n </span>\n </Label>\n )}\n {!showLabel && !isCheckbox && hasHelpIcons && (\n <div className=\"tw:flex tw:items-center tw:gap-1\">{helpIcons}</div>\n )}\n {isCheckbox && hasHelpIcons ? (\n <div className=\"tw:flex tw:items-center tw:gap-1\">\n {children}\n {helpIcons}\n </div>\n ) : (\n children\n )}\n {rawDescription && (\n <FormGroup.Help>\n <span dangerouslySetInnerHTML={{ __html: DOMPurify.sanitize(rawDescription) }} />\n </FormGroup.Help>\n )}\n {hasErrors && <FormGroup.Help>{rawErrors.join('. ')}</FormGroup.Help>}\n </FormGroup>\n );\n};\n\n/**\n * Wraps FieldTemplateBody with a root-form-data subscription used to evaluate\n * conditional visibility (options.dependencies). Subscribing here — instead of\n * unconditionally in FieldTemplate — keeps fields without dependencies out of\n * the RootFormDataContext consumer set, so they don't re-render on every\n * keystroke. Critical for forms with many fields (e.g. column_mapping tables).\n */\nconst FieldTemplateWithDependencies = ({\n dependencies,\n keepMounted,\n ...props\n}: FieldTemplateProps & { dependencies: Record<string, unknown>; keepMounted: boolean }) => {\n const rootFormData = useRootFormData();\n // Use fieldPathId.path (accurate) instead of parsing `id` on \"_\"\n // which breaks for snake_case property names.\n const parentPath = props.fieldPathId.path.slice(0, -1);\n if (!evaluateDependencies(dependencies, rootFormData, parentPath)) {\n // A computed field keeps its wrapper so the widget stays mounted and its value tracks the\n // watched paths; unmounting would freeze the value until the dependency lets it back in.\n return keepMounted ? <div className=\"tw:hidden\">{props.children}</div> : null;\n }\n return <FieldTemplateBody {...props} />;\n};\n\nexport const FieldTemplate = (props: FieldTemplateProps) => {\n if (props.hidden) return <div className=\"tw:hidden\">{props.children}</div>;\n\n const uiOptions = props.uiSchema?.['ui:options'] as Record<string, unknown> | undefined;\n\n // A hidden template-watch field renders nothing but stays mounted for its useEffect, so only\n // the FormGroup/Label wrapper is hidden.\n if (isHiddenTemplateWatch(props.uiSchema)) {\n return <div className=\"tw:hidden\">{props.children}</div>;\n }\n\n const dependencies = uiOptions?.dependencies as Record<string, unknown> | undefined;\n\n if (dependencies) {\n return (\n <FieldTemplateWithDependencies\n dependencies={dependencies}\n keepMounted={props.uiSchema?.['ui:widget'] === 'template-watch'}\n {...props}\n />\n );\n }\n\n return <FieldTemplateBody {...props} />;\n};\n","import type { ObjectFieldTemplateProps } from '@rjsf/utils';\n\nimport { CollapsiblePanel } from '../../../components/CollapsiblePanel';\nimport { isHiddenTemplateWatch } from '../fieldHelpers';\n\nexport const ObjectFieldTemplate = ({\n title,\n description,\n properties,\n formData,\n uiSchema,\n schema,\n fieldPathId,\n}: ObjectFieldTemplateProps) => {\n const isRoot = !fieldPathId?.path?.length;\n const uiOptions = uiSchema?.['ui:options'] as Record<string, unknown> | undefined;\n const hasCollapsed = uiOptions?.collapsed !== undefined;\n const collapsed = !!uiOptions?.collapsed;\n const disableCollapse = !!uiOptions?.disableCollapse;\n\n // Detect if this object is a direct child of an array (array item)\n // In that case, ArrayFieldItemTemplate already provides the card/panel wrapper\n const lastPathSegment = fieldPathId?.path?.at(-1);\n const isArrayItem = typeof lastPathSegment === 'number';\n\n // Skip hidden object/array subtrees (options.hidden: true on a container).\n // RJSF's `ui:widget: 'hidden'` only short-circuits leaf fields; it still recurses\n // into objects/arrays, which mounts hundreds of unused subtrees (e.g. _metadata_\n // arrays populated by sync actions). Hidden LEAVES are kept — they render as\n // `<input type=\"hidden\">` and their mount-phase onChange writes the schema default\n // into formData, which is required for sibling `options.dependencies` to resolve\n // (e.g. hubspot's `*_hidden` helper fields with `default: \"true\"`).\n //\n // Container detection accepts implicit shapes too: `type` may be omitted (json-editor\n // infers object from `properties`) or be a union (`['object', 'null']`).\n type ChildSchema = { type?: string | string[]; properties?: unknown; items?: unknown };\n const childSchemas = (schema as { properties?: Record<string, ChildSchema> }).properties;\n const isContainerSchema = (s: ChildSchema | undefined): boolean => {\n if (!s) return false;\n if (s.properties || s.items) return true;\n if (Array.isArray(s.type)) return s.type.includes('object') || s.type.includes('array');\n return s.type === 'object' || s.type === 'array';\n };\n const visibleProperties = properties.filter((prop) => {\n if (uiSchema?.[prop.name]?.['ui:widget'] !== 'hidden') return true;\n return !isContainerSchema(childSchemas?.[prop.name]);\n });\n\n // Hidden-but-mounted fields (hidden leaves, hidden template-watch helpers) need their\n // wrapper div hidden too, otherwise the empty wrapper is still a flex item and tw:gap-4\n // adds phantom spacing.\n const isHiddenMount = (name: string): boolean => {\n const childUi = uiSchema?.[name];\n return childUi?.['ui:widget'] === 'hidden' || isHiddenTemplateWatch(childUi);\n };\n\n const renderChildren = (props: typeof visibleProperties) =>\n props.map((prop) => (\n <div key={prop.name} className={isHiddenMount(prop.name) ? 'tw:hidden' : undefined}>\n {prop.content}\n </div>\n ));\n\n if (isRoot) {\n return (\n <div className=\"tw:flex tw:flex-col tw:gap-4 tw:[&>div:empty]:hidden\">\n {renderChildren(visibleProperties)}\n </div>\n );\n }\n\n const childrenContent = renderChildren(visibleProperties);\n\n // Collapsible nested object when options.collapsed is explicitly set\n if (hasCollapsed && !disableCollapse) {\n const data = (formData ?? {}) as Record<string, unknown>;\n const hasValues = Object.values(data).some(\n (v) => v !== undefined && v !== null && v !== '' && v !== false,\n );\n const defaultExpanded = hasValues ? !collapsed : true;\n\n return (\n <CollapsiblePanel\n className=\"tw:rounded-lg\"\n headerClassName=\"tw:rounded-lg\"\n header={title || 'Settings'}\n defaultExpanded={defaultExpanded}\n bodyClassName=\"tw:flex tw:flex-col tw:gap-4 tw:[&>div:empty]:hidden\"\n >\n {description}\n {childrenContent}\n </CollapsiblePanel>\n );\n }\n\n // Array items render flat — the parent ArrayFieldItemTemplate provides the wrapper\n if (isArrayItem) {\n return (\n <div className=\"tw:flex tw:flex-col tw:gap-4 tw:[&>div:empty]:hidden\">{childrenContent}</div>\n );\n }\n\n return (\n <div className=\"tw:rounded-lg tw:border tw:border-solid tw:border-neutral-200 tw:bg-white tw:p-4\">\n {title && (\n <h3 className=\"tw:mb-2 tw:text-base tw:font-medium tw:text-neutral-800\">{title}</h3>\n )}\n {description && <p className=\"tw:mb-3 tw:text-xs tw:text-neutral-400\">{description}</p>}\n <div className=\"tw:flex tw:flex-col tw:gap-4 tw:[&>div:empty]:hidden\">{childrenContent}</div>\n </div>\n );\n};\n","import type { WidgetProps } from '@rjsf/utils';\n\nimport { Checkbox } from '../../../components/Checkbox';\n\nexport const CheckboxWidget = ({\n id,\n value,\n onChange,\n disabled,\n readonly,\n label,\n hideLabel,\n}: WidgetProps) => {\n const checked = !!value;\n\n return (\n <Checkbox id={id} checked={checked} onCheckedChange={onChange} disabled={disabled || readonly}>\n {hideLabel ? undefined : label}\n </Checkbox>\n );\n};\n","import type { WidgetProps } from '@rjsf/utils';\n\nimport { DateInput } from '../../DateInput';\n\nexport const DateWidget = ({\n id,\n value,\n onChange,\n onBlur,\n onFocus,\n disabled,\n readonly,\n placeholder,\n rawErrors,\n}: WidgetProps) => {\n // Parse YYYY-MM-DD as a local date to avoid UTC-offset day shift\n const dateValue = (() => {\n if (!value) return null;\n const parts = (value as string).split('-').map(Number);\n const [year, month, day] = parts;\n if (parts.length !== 3 || parts.some(Number.isNaN)) return null;\n if (year === undefined || month === undefined || day === undefined) return null;\n return new Date(year, month - 1, day);\n })();\n const isValid = dateValue && !Number.isNaN(dateValue.getTime());\n\n return (\n <DateInput\n id={id}\n value={isValid ? dateValue : null}\n onValueChange={(date) => {\n if (!date) {\n onChange(undefined);\n return;\n }\n // Store as ISO date string (YYYY-MM-DD)\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n onChange(`${year}-${month}-${day}`);\n }}\n onBlur={() => onBlur(id, value)}\n onFocus={() => onFocus(id, value)}\n disabled={disabled || readonly}\n placeholder={placeholder || 'Select a date'}\n state={rawErrors?.length ? 'error' : 'default'}\n variant=\"secondary\"\n />\n );\n};\n","import type { WidgetProps } from '@rjsf/utils';\n\nimport { Combobox } from '../../../components/Combobox';\nimport type { LabeledItem } from '../../../components/Combobox/types';\nimport { buildDynamicOptions } from '../fieldHelpers';\nimport { useRootFormData } from '../RootFormDataContext';\n\n/**\n * Widget for fields using json-editor's enumSource/watch pattern.\n * Reads options dynamically from the root form data based on watched paths.\n */\nexport const DynamicSelectWidget = ({\n value,\n onChange,\n disabled,\n readonly,\n options: widgetOptions,\n}: WidgetProps) => {\n const data = useRootFormData();\n\n const watch = widgetOptions.watch as Record<string, string> | undefined;\n const enumSource = widgetOptions.enumSource;\n\n const dynamicItems: LabeledItem[] = watch ? buildDynamicOptions(watch, enumSource, data) : [];\n\n // Ensure the current value is always in the options list (e.g. stored config value while the watched source is not loaded yet)\n const stringValue = value == null ? '' : String(value);\n const matched = dynamicItems.find((item) => item.value === stringValue);\n const fallbackItem =\n !matched && stringValue !== '' ? { value: stringValue, label: stringValue } : null;\n const selectedItem = matched ?? fallbackItem;\n const items = fallbackItem ? [fallbackItem, ...dynamicItems] : dynamicItems;\n\n return (\n <Combobox\n variant=\"secondary\"\n items={items}\n value={selectedItem}\n disabled={disabled || readonly}\n onValueChange={(selected) => onChange(selected?.value ?? '')}\n />\n );\n};\n","import type { WidgetProps } from '@rjsf/utils';\n\nimport { NumberInput } from '../../../blocks/NumberInput';\n\nexport const NumberWidget = ({\n id,\n value,\n onChange,\n onBlur,\n onFocus,\n disabled,\n readonly,\n placeholder,\n schema,\n rawErrors,\n}: WidgetProps) => {\n return (\n <NumberInput\n id={id}\n value={value ?? null}\n onValueChange={(num) => onChange(num ?? undefined)}\n onBlur={() => onBlur(id, value)}\n onFocus={() => onFocus(id, value)}\n disabled={disabled || readonly}\n placeholder={placeholder}\n min={schema.minimum}\n max={schema.maximum}\n step={schema.multipleOf}\n state={rawErrors?.length ? 'error' : 'default'}\n variant=\"secondary\"\n />\n );\n};\n","import type { WidgetProps } from '@rjsf/utils';\n\nimport { PasswordInput } from '../../../blocks/PasswordInput';\n\nexport const PasswordWidget = ({\n id,\n value,\n onChange,\n onBlur,\n onFocus,\n disabled,\n readonly,\n placeholder,\n rawErrors,\n}: WidgetProps) => {\n const stringValue = value == null ? '' : String(value);\n\n return (\n <PasswordInput\n id={id}\n value={stringValue}\n onValueChange={onChange}\n onBlur={() => onBlur(id, value)}\n onFocus={() => onFocus(id, value)}\n disabled={disabled || readonly}\n placeholder={placeholder}\n allowPasswordToggle\n state={rawErrors?.length ? 'error' : 'default'}\n variant=\"secondary\"\n />\n );\n};\n","import type { WidgetProps } from '@rjsf/utils';\n\nimport { RadioGroup } from '../../../components/RadioGroup';\n\nexport const RadioWidget = ({ id, value, onChange, disabled, readonly, options }: WidgetProps) => {\n const enumOptions = (options.enumOptions ?? []) as { value: string; label: string }[];\n\n return (\n <RadioGroup\n id={id}\n value={value ?? ''}\n onValueChange={onChange}\n disabled={disabled || readonly}\n orientation=\"vertical\"\n >\n {enumOptions.map((opt) => (\n <RadioGroup.Item key={opt.value} value={opt.value}>\n {opt.label}\n </RadioGroup.Item>\n ))}\n </RadioGroup>\n );\n};\n","import type { WidgetProps } from '@rjsf/utils';\n\nimport { Combobox } from '../../../components/Combobox';\nimport type { LabeledItem } from '../../../components/Combobox/types';\n\nexport const SelectWidget = ({\n value,\n schema,\n onChange,\n disabled,\n readonly,\n options,\n placeholder,\n required,\n}: WidgetProps) => {\n const enumOptions = (options.enumOptions ?? []) as { value: unknown; label: string }[];\n const isBoolean = schema.type === 'boolean';\n\n // Map values (including booleans) to string keys so the Combobox can match them\n const items: LabeledItem[] = enumOptions.map((o) => ({\n value: String(o.value ?? ''),\n label: o.label,\n }));\n\n const selectedItem = items.find((item) => item.value === (value == null ? '' : String(value)));\n\n return (\n <Combobox\n variant=\"secondary\"\n items={items}\n value={selectedItem ?? null}\n allowClear={!required}\n disabled={disabled || readonly}\n placeholder={placeholder}\n onValueChange={(selected) => {\n const selectedValue = selected?.value ?? '';\n if (isBoolean) {\n onChange(selectedValue === 'true');\n return;\n }\n onChange(selectedValue);\n }}\n />\n );\n};\n","import { useEffect, useRef } from 'react';\nimport type { WidgetProps } from '@rjsf/utils';\n\nimport { TextInput } from '../../TextInput';\nimport { resolveByPath } from '../fieldHelpers';\nimport { useRootFormData } from '../RootFormDataContext';\n\n/**\n * Renders a watched value as text.\n *\n * - Objects and arrays are serialized as JSON; anything else goes through `String`.\n * - `null` and `undefined` render as an empty string.\n */\nconst stringify = (value: unknown): string => {\n if (value == null) return '';\n if (typeof value === 'object') return JSON.stringify(value);\n return String(value);\n};\n\n/**\n * Resolves a json-editor `template` string by substituting watched variables.\n * e.g. template=\"{{val}}\" with watch={ val: \"some.path\" } → resolves \"some.path\" from form data.\n */\nconst resolveTemplate = (\n template: string,\n watch: Record<string, string>,\n rootFormData: Record<string, unknown>,\n): string => {\n return template.replace(/\\{\\{(\\w+)\\}\\}/g, (_, varName: string) => {\n const watchPath = watch[varName];\n if (!watchPath) return '';\n return stringify(resolveByPath(watchPath, rootFormData));\n });\n};\n\n/**\n * Widget for json-editor's `template`/`watch` pattern (without `enumSource`).\n * Computes a value from watched form data paths and keeps the field in sync.\n *\n * - With `options.hidden` it renders nothing — a helper for cross-object dependencies.\n * - Without it, the value is shown in a read-only input; `FieldTemplate` supplies the label.\n */\nexport const TemplateWatchWidget = ({\n id,\n value,\n onChange,\n disabled,\n readonly,\n rawErrors,\n options: widgetOptions,\n}: WidgetProps) => {\n const data = useRootFormData();\n\n const watch = widgetOptions.watch as Record<string, string> | undefined;\n const template = widgetOptions.template as string | undefined;\n\n const computed = watch && template ? resolveTemplate(template, watch, data) : stringify(value);\n\n const lastSetRef = useRef<string>(stringify(value));\n\n useEffect(() => {\n if (computed !== lastSetRef.current) {\n lastSetRef.current = computed;\n onChange(computed);\n }\n }, [computed, onChange]);\n\n if (widgetOptions.hidden) {\n return null;\n }\n\n return (\n <TextInput\n id={id}\n value={computed}\n readOnly\n disabled={disabled || readonly}\n state={rawErrors?.length ? 'error' : 'default'}\n variant=\"secondary\"\n />\n );\n};\n","import type { WidgetProps } from '@rjsf/utils';\n\nimport { Textarea } from '../../../blocks/Textarea';\n\nexport const TextareaWidget = ({\n id,\n value,\n onChange,\n onBlur,\n onFocus,\n disabled,\n readonly,\n placeholder,\n options,\n rawErrors,\n}: WidgetProps) => {\n const rows = (options.rows as number) ?? 5;\n const stringValue = value == null ? '' : String(value);\n\n return (\n <Textarea\n id={id}\n value={stringValue}\n onValueChange={onChange}\n onBlur={() => onBlur(id, value)}\n onFocus={() => onFocus(id, value)}\n disabled={disabled || readonly}\n placeholder={placeholder}\n minRows={rows}\n state={rawErrors?.length ? 'error' : 'default'}\n variant=\"secondary\"\n />\n );\n};\n","import type { ChangeEvent } from 'react';\nimport type { WidgetProps } from '@rjsf/utils';\n\nimport { TextInput } from '../../TextInput';\n\nexport const TextWidget = ({\n id,\n value,\n onChange,\n onBlur,\n onFocus,\n disabled,\n readonly,\n placeholder,\n schema,\n options,\n rawErrors,\n}: WidgetProps) => {\n const stringValue = value == null ? '' : typeof value === 'object' ? '' : String(value);\n const shouldTrim = !!options.trim;\n\n return (\n <TextInput\n id={id}\n value={stringValue}\n onChange={(e: ChangeEvent<HTMLInputElement>) => {\n const v = e.target.value;\n onChange(shouldTrim ? v.trim() : v);\n }}\n onBlur={() => onBlur(id, value)}\n onFocus={() => onFocus(id, value)}\n disabled={disabled || readonly}\n placeholder={placeholder}\n type={schema.format === 'email' ? 'email' : 'text'}\n state={rawErrors?.length ? 'error' : 'default'}\n variant=\"secondary\"\n />\n );\n};\n","/**\n * Default RJSF registry: design system widgets, custom fields, and templates.\n * Host-coupled entries (sync actions, SSH form) default to no-op stubs — the\n * host app injects its implementations via the RjsfSchemaEditor `widgets` and\n * `fields` props under the same registry keys.\n */\nimport type { RegistryFieldsType, RegistryWidgetsType, TemplatesType } from '@rjsf/utils';\n\nimport { CodeEditorField } from './fields/CodeEditorField';\nimport { GridObjectField } from './fields/GridObjectField';\nimport { InfoField } from './fields/InfoField';\nimport { TableArrayField } from './fields/TableArrayField';\nimport { TabsObjectField } from './fields/TabsObjectField';\nimport { ArrayFieldItemTemplate } from './templates/ArrayFieldItemTemplate';\nimport { ArrayFieldTemplate } from './templates/ArrayFieldTemplate';\nimport { DescriptionFieldTemplate } from './templates/DescriptionFieldTemplate';\nimport { ErrorListTemplate } from './templates/ErrorListTemplate';\nimport { FieldTemplate } from './templates/FieldTemplate';\nimport { ObjectFieldTemplate } from './templates/ObjectFieldTemplate';\nimport { CheckboxWidget } from './widgets/CheckboxWidget';\nimport { CodeEditorWidget } from './widgets/CodeEditorWidget';\nimport { DateWidget } from './widgets/DateWidget';\nimport { DynamicSelectWidget } from './widgets/DynamicSelectWidget';\nimport { NumberWidget } from './widgets/NumberWidget';\nimport { PasswordWidget } from './widgets/PasswordWidget';\nimport { RadioWidget } from './widgets/RadioWidget';\nimport { SelectWidget } from './widgets/SelectWidget';\nimport { TemplateWatchWidget } from './widgets/TemplateWatchWidget';\nimport { TextareaWidget } from './widgets/TextareaWidget';\nimport { TextWidget } from './widgets/TextWidget';\n\n// Rendered for host-coupled entries when the host app doesn't inject an implementation\nconst StubWidget = () => null;\nconst StubField = () => null;\n\nexport const defaultFields: RegistryFieldsType = {\n tableArray: TableArrayField,\n tabsObject: TabsObjectField,\n gridObject: GridObjectField,\n codeEditor: CodeEditorField,\n info: InfoField,\n sshForm: StubField,\n};\n\nexport const defaultWidgets: RegistryWidgetsType = {\n // Override RJSF defaults with design system components\n TextWidget,\n UpDownWidget: NumberWidget,\n TextareaWidget,\n PasswordWidget,\n SelectWidget,\n CheckboxWidget,\n RadioWidget,\n // RJSF maps standard formats to dedicated widgets\n EmailWidget: TextWidget,\n URLWidget: TextWidget,\n DateWidget,\n DateTimeWidget: TextWidget,\n // Custom widgets mapped via uiSchema\n 'code-editor': CodeEditorWidget,\n 'dynamic-select': DynamicSelectWidget,\n 'template-watch': TemplateWatchWidget,\n // Host-coupled widgets — injected by the host app\n 'test-connection': StubWidget,\n 'sync-action': StubWidget,\n 'async-select': StubWidget,\n 'async-multi-select': StubWidget,\n};\n\nexport const defaultTemplates: Partial<TemplatesType> = {\n FieldTemplate,\n ObjectFieldTemplate,\n DescriptionFieldTemplate,\n ArrayFieldTemplate,\n ArrayFieldItemTemplate,\n ErrorListTemplate,\n};\n","import type { UiSchema } from '@rjsf/utils';\n\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\ntype JsonSchema = Record<string, any>;\n\n/**\n * Resolves a $ref reference against the schema definitions, merging any\n * sibling overrides (title, options, etc.) on top of the resolved schema.\n */\nconst resolveRef = (\n propSchema: JsonSchema,\n definitions: Record<string, JsonSchema> | undefined,\n): JsonSchema => {\n if (!propSchema.$ref || !definitions) return propSchema;\n const refPath = String(propSchema.$ref).replace('#/definitions/', '');\n const resolved = definitions[refPath];\n if (!resolved) return propSchema;\n // oxlint-disable-next-line no-unused-vars\n const { $ref, ...overrides } = propSchema;\n return { ...resolved, ...overrides };\n};\n\n/**\n * Walks a JSON Schema and generates a RJSF uiSchema based on custom `format` and `options` properties.\n * This maps the legacy @json-editor/json-editor conventions to RJSF widget references.\n */\nexport const generateUiSchema = (\n schema: JsonSchema,\n readOnly = false,\n definitions?: Record<string, JsonSchema>,\n globalConfig?: Record<string, unknown>,\n /** When true, password fields render as plain text inputs (protected default branch). */\n hasProtectedDefaultBranch = false,\n): UiSchema => {\n const uiSchema: UiSchema = {};\n const defs = definitions ?? (schema.definitions as Record<string, JsonSchema> | undefined);\n\n if (readOnly) {\n uiSchema['ui:disabled'] = true;\n }\n\n const properties = schema.properties as Record<string, JsonSchema> | undefined;\n if (!properties) {\n // Even without direct properties, the schema may have allOf/if-then-else\n // that define conditional properties needing uiSchema mappings.\n // Fall through to combiner/conditional processing below.\n } else {\n for (const [key, rawPropSchema] of Object.entries(properties)) {\n const propSchema = resolveRef(rawPropSchema, defs);\n const format = propSchema.format as string | undefined;\n const type = (propSchema.type ?? (propSchema.properties ? 'object' : undefined)) as\n | string\n | undefined;\n const options = propSchema.options as Record<string, unknown> | undefined;\n\n const fieldUi: UiSchema = {};\n\n // Hidden fields\n if (options?.hidden) {\n fieldUi['ui:widget'] = 'hidden';\n }\n\n // Table-format arrays → custom table field\n if (type === 'array' && format === 'table') {\n fieldUi['ui:field'] = 'tableArray';\n }\n\n // Checkbox-format arrays → RJSF checkboxes widget\n if (type === 'array' && format === 'checkbox') {\n fieldUi['ui:widget'] = 'checkboxes';\n }\n\n // Radio-format → radio buttons widget\n if (format === 'radio' && propSchema.enum) {\n fieldUi['ui:widget'] = 'radio';\n }\n\n // Tabs/categories-format objects → tabbed layout\n if (\n type === 'object' &&\n (format === 'tabs' || format === 'tabs-top' || format === 'categories')\n ) {\n fieldUi['ui:field'] = 'tabsObject';\n }\n\n // Grid-format objects → responsive grid layout\n if (type === 'object' && (format === 'grid' || format === 'grid-strict')) {\n fieldUi['ui:field'] = 'gridObject';\n }\n\n // Info-format → static informational display\n if (format === 'info') {\n fieldUi['ui:field'] = 'info';\n if (options?.alert_type) {\n fieldUi['ui:options'] = {\n ...fieldUi['ui:options'],\n alertType: options.alert_type as string,\n };\n }\n }\n\n // Custom format → widget mapping\n if (type === 'button' && format === 'test-connection') {\n fieldUi['ui:widget'] = 'test-connection';\n fieldUi['ui:options'] = (options ?? {}) as UiSchema['ui:options'];\n } else if (type === 'button' && format === 'sync-action') {\n fieldUi['ui:widget'] = 'sync-action';\n fieldUi['ui:options'] = (options ?? {}) as UiSchema['ui:options'];\n } else if ((type === 'string' || type === 'object') && format === 'editor') {\n // Objects need ui:field (RJSF ignores ui:widget on object types)\n if (type === 'object') {\n fieldUi['ui:field'] = 'codeEditor';\n } else {\n fieldUi['ui:widget'] = 'code-editor';\n }\n fieldUi['ui:options'] = {\n editor: (options?.editor ?? {}) as Record<string, unknown>,\n // A JSON editor stores parsed keys, so `#` prefixes really are encrypted here.\n // Fields whose JSON is not Keboola configuration (a query filter tree, a payload\n // template) opt out with `encryption_hint: false` — encrypting a key there would\n // hand the component ciphertext it cannot use.\n encryptionHint: options?.encryption_hint !== false,\n };\n } else if (type === 'object' && format === 'ssh-editor') {\n fieldUi['ui:field'] = 'sshForm';\n fieldUi['ui:options'] = { only_keys: !!options?.only_keys };\n } else if (type === 'string' && format === 'password') {\n // On protected branches, render password fields as plain text inputs\n if (!hasProtectedDefaultBranch) {\n fieldUi['ui:widget'] = 'password';\n }\n } else if (type === 'string' && format === 'textarea') {\n fieldUi['ui:widget'] = 'textarea';\n if (options?.input_height) {\n fieldUi['ui:options'] = {\n ...fieldUi['ui:options'],\n rows: parseInputHeightToRows(String(options.input_height)),\n };\n }\n } else if (type === 'string' && format === 'trim') {\n fieldUi['ui:options'] = {\n ...fieldUi['ui:options'],\n trim: true,\n };\n } else if (isDynamicSelectSchema(propSchema)) {\n fieldUi['ui:widget'] = 'dynamic-select';\n fieldUi['ui:options'] = {\n ...fieldUi['ui:options'],\n watch: propSchema.watch as Record<string, string>,\n enumSource: propSchema.enumSource as unknown[],\n tags: !!options?.tags,\n };\n } else if (isMultiSelectSchema(propSchema)) {\n // Multi-select MUST be checked before async-select — arrays with options.async\n // would otherwise match isAsyncSelectSchema and render as single-select.\n const items = propSchema.items as JsonSchema | undefined;\n const itemsOptions = items?.options as Record<string, unknown> | undefined;\n fieldUi['ui:widget'] = 'async-multi-select';\n fieldUi['ui:options'] = {\n async: options?.async ?? itemsOptions?.async ?? null,\n creatable: !!options?.creatable || !!options?.tags,\n placeholder: String(\n (options?.inputAttributes as Record<string, string>)?.placeholder ?? '',\n ),\n // Pass dynamic source from items for enumSource/watch multi-selects\n ...(items?.watch && { watch: items.watch as Record<string, string> }),\n ...(items?.enumSource && { enumSource: items.enumSource }),\n };\n } else if (isAsyncSelectSchema(propSchema)) {\n fieldUi['ui:widget'] = 'async-select';\n fieldUi['ui:options'] = {\n async: options?.async ?? null,\n creatable: !!options?.creatable,\n placeholder: String(\n (options?.inputAttributes as Record<string, string>)?.placeholder ?? '',\n ),\n };\n }\n\n // Template/watch pattern (without enumSource) → computed fields.\n //\n // - Runs after the hidden check, so it replaces ui:widget=\"hidden\".\n // - `ui:options.hidden` survives that replacement and decides rendering: set → an invisible\n // helper that only keeps its value in sync; absent → a read-only field.\n // - Objects and arrays are always the hidden variant. RJSF ignores `ui:widget` on them, so\n // the widget never runs and could not suppress its own subtree.\n if (isTemplateWatchSchema(propSchema)) {\n fieldUi['ui:widget'] = 'template-watch';\n fieldUi['ui:options'] = {\n ...fieldUi['ui:options'],\n watch: propSchema.watch as Record<string, string>,\n template: propSchema.template as string,\n hidden: !!options?.hidden || isContainerType(propSchema),\n };\n }\n\n // Boolean with enum_titles → render as select instead of checkbox\n if (type === 'boolean' && options?.enum_titles) {\n fieldUi['ui:widget'] = 'select';\n }\n\n // Collapsed state for arrays/objects (collapsed:false = collapsible but expanded by default)\n if (options?.collapsed !== undefined) {\n fieldUi['ui:options'] = {\n ...fieldUi['ui:options'],\n collapsed: !!options.collapsed,\n };\n }\n\n // Prevent collapsing\n if (options?.disable_collapse) {\n fieldUi['ui:options'] = {\n ...fieldUi['ui:options'],\n disableCollapse: true,\n };\n }\n\n // Conditional visibility based on other field values\n if (options?.dependencies) {\n fieldUi['ui:options'] = {\n ...fieldUi['ui:options'],\n dependencies: options.dependencies as Record<string, unknown>,\n };\n }\n\n // Grid break — forces a new row in grid layouts\n if (options?.grid_break) {\n fieldUi['ui:options'] = {\n ...fieldUi['ui:options'],\n gridBreak: true,\n };\n }\n\n // Disabled field (options.enabled: false)\n if (options?.enabled === false) {\n fieldUi['ui:disabled'] = true;\n }\n\n // Global config: disable fields that have pre-filled values from image_parameters\n const globalValue = globalConfig?.[key];\n if (globalValue !== undefined) {\n if (typeof globalValue !== 'object' || globalValue === null || Array.isArray(globalValue)) {\n // Leaf value — disable this field\n fieldUi['ui:disabled'] = true;\n }\n // Nested objects are handled by the recursive call below\n }\n\n // Forward tooltip/documentation options\n if (options?.tooltip) {\n fieldUi['ui:help'] = String(options.tooltip);\n }\n\n // Forward documentation link\n if ((options?.documentation as Record<string, unknown>)?.link) {\n fieldUi['ui:options'] = {\n ...fieldUi['ui:options'],\n documentation: options?.documentation as { link: string; tooltip?: string },\n };\n }\n\n // Forward placeholder from inputAttributes\n if (\n (options?.inputAttributes as Record<string, string>)?.placeholder &&\n !fieldUi['ui:widget']\n ) {\n fieldUi['ui:placeholder'] = String(\n (options?.inputAttributes as Record<string, string>)?.placeholder,\n );\n }\n\n // Forward enum_titles as RJSF enumNames for proper select labels\n if (options?.enum_titles && propSchema.enum) {\n fieldUi['ui:options'] = {\n ...fieldUi['ui:options'],\n enumNames: options.enum_titles as string[],\n };\n }\n\n // Array control options\n if (type === 'array') {\n const arrayOpts: Record<string, boolean> = {};\n if (options?.disable_array_add) arrayOpts.addable = false;\n if (options?.disable_array_delete) arrayOpts.removable = false;\n if (options?.disable_array_reorder) arrayOpts.orderable = false;\n if (Object.keys(arrayOpts).length > 0) {\n fieldUi['ui:options'] = {\n ...fieldUi['ui:options'],\n ...arrayOpts,\n };\n }\n\n // Forward item-level enum_titles through RJSF's items uiSchema channel —\n // optionsList pairs them with the typed items.enum values for multiselect widgets\n const itemsEnumTitles = (propSchema.items?.options as Record<string, unknown> | undefined)\n ?.enum_titles;\n if (Array.isArray(itemsEnumTitles)) {\n fieldUi.items = { 'ui:options': { enumNames: itemsEnumTitles as string[] } };\n }\n }\n\n // Recursively process nested objects\n if (type === 'object' && propSchema.properties) {\n const nestedGlobal =\n globalValue && typeof globalValue === 'object' && !Array.isArray(globalValue)\n ? (globalValue as Record<string, unknown>)\n : undefined;\n const nested = generateUiSchema(\n propSchema,\n readOnly,\n defs,\n nestedGlobal,\n hasProtectedDefaultBranch,\n );\n Object.assign(fieldUi, nested);\n }\n\n // Recurse into array items so nested format:\"table\" etc. get mapped\n if (type === 'array' && propSchema.items?.properties) {\n const itemsUi = generateUiSchema(\n propSchema.items as JsonSchema,\n readOnly,\n defs,\n undefined,\n hasProtectedDefaultBranch,\n );\n if (Object.keys(itemsUi).length > 0) {\n fieldUi.items = itemsUi;\n }\n }\n\n // Warn about unhandled enumSource/watch (ones not caught by isDynamicSelectSchema)\n if ((propSchema.enumSource || propSchema.watch) && !fieldUi['ui:widget']) {\n console.warn(\n `[RJSF] Property \"${key}\" uses enumSource/watch which is not yet supported. It will render as a plain input.`,\n );\n }\n\n if (Object.keys(fieldUi).length > 0) {\n uiSchema[key] = fieldUi;\n }\n }\n\n // Generate ui:order from propertyOrder (RJSF's built-in property sorting)\n const orderedEntries = Object.entries(properties)\n .filter(([, prop]) => prop.propertyOrder !== undefined)\n .sort(\n ([, a], [, b]) =>\n (a.propertyOrder ?? Number.MAX_SAFE_INTEGER) -\n (b.propertyOrder ?? Number.MAX_SAFE_INTEGER),\n );\n\n if (orderedEntries.length > 0) {\n uiSchema['ui:order'] = [...orderedEntries.map(([key]) => key), '*'];\n }\n } // end of: if (properties)\n\n // Handle allOf/anyOf/oneOf\n for (const combiner of ['allOf', 'anyOf', 'oneOf'] as const) {\n const schemas = schema[combiner] as JsonSchema[] | undefined;\n if (schemas) {\n for (const subSchema of schemas) {\n const subUi = generateUiSchema(\n subSchema,\n readOnly,\n undefined,\n undefined,\n hasProtectedDefaultBranch,\n );\n Object.assign(uiSchema, subUi);\n }\n }\n }\n\n // Handle if/then/else — generate uiSchema for conditional branches\n for (const branch of ['if', 'then', 'else'] as const) {\n const branchSchema = schema[branch] as JsonSchema | undefined;\n if (branchSchema?.properties) {\n const branchUi = generateUiSchema(\n branchSchema,\n readOnly,\n undefined,\n undefined,\n hasProtectedDefaultBranch,\n );\n Object.assign(uiSchema, branchUi);\n }\n }\n\n return uiSchema;\n};\n\nconst isDynamicSelectSchema = (schema: JsonSchema): boolean => {\n return !!(schema.enumSource && schema.watch && schema.type === 'string');\n};\n\nconst isTemplateWatchSchema = (schema: JsonSchema): boolean => {\n return !!(schema.template && schema.watch && !schema.enumSource);\n};\n\n/**\n * Whether a schema describes an object or an array.\n *\n * - `properties` or `items` imply the type even when json-editor omits it.\n * - `type` may be a union, e.g. `['object', 'null']`.\n */\nconst isContainerType = (schema: JsonSchema): boolean => {\n if (schema.properties || schema.items) return true;\n const { type } = schema;\n if (Array.isArray(type)) return type.includes('object') || type.includes('array');\n return type === 'object' || type === 'array';\n};\n\nconst isAsyncSelectSchema = (schema: JsonSchema): boolean => {\n return !!(schema.options?.async || schema.options?.creatable);\n};\n\nconst isMultiSelectSchema = (schema: JsonSchema): boolean => {\n const items = schema.items as JsonSchema | undefined;\n return !!(\n items &&\n schema.uniqueItems &&\n schema.type === 'array' &&\n schema.format !== 'checkbox' &&\n !Array.isArray(items) &&\n ['string', 'number', 'integer'].includes(items.type as string) &&\n (items.enum || items.enumSource || (schema.options as Record<string, unknown>)?.tags)\n );\n};\n\n/**\n * Cleans up non-standard properties from a schema before passing to RJSF/AJV.\n * RJSF is strict about unknown keywords, and our schemas contain json-editor-specific\n * extensions (format: 'button', options, etc.).\n */\n/** Convert CSS height like \"100px\" to approximate textarea rows */\nconst parseInputHeightToRows = (height: string): number => {\n const px = parseInt(height, 10);\n if (Number.isNaN(px) || px <= 0) return 5;\n // ~20px per row is a reasonable approximation\n return Math.max(2, Math.round(px / 20));\n};\n\nconst CUSTOM_FORMATS = [\n 'table',\n 'editor',\n 'ssh-editor',\n 'trim',\n 'textarea',\n 'grid',\n 'grid-strict',\n 'tabs',\n 'tabs-top',\n 'categories',\n 'info',\n 'select',\n 'checkbox',\n 'json',\n 'button',\n 'radio',\n];\n\nexport const sanitizeSchema = (\n schema: JsonSchema,\n definitions?: Record<string, JsonSchema>,\n /** When true, skip adding additionalProperties:false. Used for if/then/else\n * sub-schemas where it would break JSON Schema conditional semantics. */\n isConditionalBranch = false,\n): JsonSchema => {\n const cleaned = { ...schema };\n const defs = definitions ?? (cleaned.definitions as Record<string, JsonSchema> | undefined);\n\n // Strip empty enum arrays — they serve as placeholders for values loaded by\n // sync actions, but AJV rejects all values against enum:[].\n // This also fixes CLI/MCP validation which uses the schema to validate input.\n if (Array.isArray(cleaned.enum) && cleaned.enum.length === 0) {\n delete cleaned.enum;\n }\n\n if (\n Array.isArray(cleaned.enum) &&\n cleaned.enum.length > 0 &&\n (cleaned.type === 'string' || cleaned.type === 'integer' || cleaned.type === 'number')\n ) {\n if (cleaned.default === undefined) {\n // The old json-editor always pre-selected the first enum value on render.\n cleaned.default = cleaned.enum[0];\n } else if (!cleaned.enum.includes(cleaned.default)) {\n // Drop an out-of-enum default. RJSF injects the schema default into missing\n // fields, so keeping it would persist an invalid value on save; without a\n // default the field stays absent and the component's runtime default applies.\n delete cleaned.default;\n }\n }\n\n // Infer type:\"object\" when properties exist but type is missing\n if (cleaned.properties && !cleaned.type) {\n cleaned.type = 'object';\n }\n\n // Strip non-standard json-editor `required: true` from individual properties.\n // The parent's property loop promotes it to the parent required array before calling sanitizeSchema.\n if (cleaned.required === true) {\n delete cleaned.required;\n }\n\n // Strip non-standard format values that AJV would reject\n if (CUSTOM_FORMATS.includes(cleaned.format as string)) {\n delete cleaned.format;\n }\n\n // Remove button-type pseudo-properties (they aren't real data fields)\n // They're rendered as widgets but shouldn't be in the schema for validation\n const properties = cleaned.properties as Record<string, JsonSchema> | undefined;\n if (properties) {\n const sanitizedProps: Record<string, JsonSchema> = {};\n const required = (cleaned.required as string[]) ?? [];\n const sanitizedRequired: string[] = [];\n\n for (const [key, rawPropSchema] of Object.entries(properties)) {\n // Resolve $ref before processing\n const propSchema = resolveRef(rawPropSchema, defs);\n\n if (propSchema.type === 'button') {\n // Convert button pseudo-type to string so RJSF accepts it.\n // The uiSchema maps these to custom widgets (test-connection, sync-action).\n // Preserve propertyOrder and description so the field sorts and renders correctly.\n sanitizedProps[key] = {\n type: 'string',\n title: propSchema.title,\n ...(propSchema.propertyOrder !== undefined && {\n propertyOrder: propSchema.propertyOrder,\n }),\n ...(propSchema.description !== undefined && { description: propSchema.description }),\n };\n continue;\n }\n\n // Boolean with enum_titles → add oneOf so RJSF select shows custom labels instead of Yes/No.\n // The mapping must follow the schema's `enum` array so titles[i] pairs with enum[i];\n // fall back to [true, false] when no enum is provided (legacy json-editor convention).\n if (propSchema.type === 'boolean' && propSchema.options?.enum_titles) {\n const titles = propSchema.options.enum_titles as string[];\n const sanitized = sanitizeSchema(propSchema, defs);\n const enumValues = (propSchema.enum as boolean[] | undefined) ?? [true, false];\n sanitized.oneOf = enumValues.map((value, index) => ({\n const: value,\n title: titles[index] ?? (value ? 'Yes' : 'No'),\n }));\n sanitizedProps[key] = sanitized;\n if (required.includes(key) || propSchema.required === true) {\n if (!sanitizedRequired.includes(key)) sanitizedRequired.push(key);\n }\n continue;\n }\n\n sanitizedProps[key] = sanitizeSchema(propSchema, defs);\n\n if (required.includes(key) || propSchema.required === true) {\n if (!sanitizedRequired.includes(key)) sanitizedRequired.push(key);\n }\n }\n\n cleaned.properties = sanitizedProps;\n if (sanitizedRequired.length > 0) {\n cleaned.required = sanitizedRequired;\n }\n\n // Prevent RJSF from rendering \"additional properties\" UI for data fields\n // not defined in the schema (e.g. legacy/renamed properties in stored configs).\n // Skip for:\n // - conditional branches (if/then/else) where it breaks JSON Schema semantics\n // - schemas with if/then/else where conditional branches may define extra properties\n if (!isConditionalBranch && cleaned.additionalProperties === undefined && !cleaned.if) {\n cleaned.additionalProperties = false;\n }\n }\n\n // Recursively handle allOf/anyOf/oneOf\n // Sub-schemas inside combiners that contain if/then/else are processed normally,\n // but their if/then/else branches get the isConditionalBranch flag.\n for (const combiner of ['allOf', 'anyOf', 'oneOf'] as const) {\n const schemas = cleaned[combiner] as JsonSchema[] | undefined;\n if (schemas) {\n cleaned[combiner] = schemas.map((s) => sanitizeSchema(s, defs));\n }\n }\n\n // Recursively handle if/then/else conditional schemas.\n // These sub-schemas must NOT get additionalProperties:false because:\n // - On `if`: it would change the condition semantics (requiring no other properties)\n // - On `then`/`else`: it would reject all properties not redefined in the branch\n for (const branch of ['if', 'then', 'else'] as const) {\n const branchSchema = cleaned[branch] as JsonSchema | undefined;\n if (branchSchema) {\n cleaned[branch] = sanitizeSchema(branchSchema, defs, true);\n }\n }\n\n // Handle array items\n if (cleaned.items && typeof cleaned.items === 'object' && !Array.isArray(cleaned.items)) {\n cleaned.items = sanitizeSchema(cleaned.items as JsonSchema, defs);\n }\n\n return cleaned;\n};\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport type { IChangeEvent } from '@rjsf/core';\nimport Form from '@rjsf/core';\nimport type { RegistryFieldsType, RegistryWidgetsType } from '@rjsf/utils';\nimport validator from '@rjsf/validator-ajv8';\n\nimport { debounce } from '../../utils/debounce';\n\nimport type { RenderMarkdown } from './markdownContext';\nimport { RenderMarkdownProvider } from './markdownContext';\nimport { defaultFields, defaultTemplates, defaultWidgets } from './registry';\nimport { RootFormDataProvider } from './RootFormDataContext';\nimport { generateUiSchema, sanitizeSchema } from './schemaUtils';\n\nconst defaultRenderMarkdown: RenderMarkdown = (source) => source;\n\n/**\n * Produces a canonical JSON string with sorted keys at every level.\n * This ensures two objects with the same data but different key ordering\n * produce the same string. Also normalizes undefined → omitted (via JSON.stringify).\n */\nconst stableStringify = (obj: unknown): string =>\n JSON.stringify(obj, (_key, val) => {\n if (val && typeof val === 'object' && !Array.isArray(val)) {\n const sorted: Record<string, unknown> = {};\n for (const key of Object.keys(val).sort()) {\n sorted[key] = val[key];\n }\n return sorted;\n }\n return val;\n });\n\nexport const RjsfSchemaEditor = ({\n schema,\n value,\n onChange,\n readOnly,\n inForm,\n globalConfig,\n onRegisterValidate,\n widgets,\n fields,\n renderMarkdown,\n hasProtectedDefaultBranch = false,\n}: {\n schema: Record<string, unknown>;\n value: Record<string, unknown>;\n onChange: (value: Record<string, unknown>) => void;\n readOnly: boolean;\n inForm?: boolean;\n /** Pre-filled values from image_parameters.global_config — matching fields are disabled. */\n globalConfig?: Record<string, unknown> | null;\n /** Called with a validate function that triggers RJSF schema validation and shows errors inline.\n * Returns true when valid, false when there are errors. */\n onRegisterValidate?: (validate: () => boolean) => void;\n /** Host-app widgets merged over the built-in registry (e.g. sync-action, async-select). */\n widgets?: RegistryWidgetsType;\n /** Host-app fields merged over the built-in registry (e.g. sshForm). */\n fields?: RegistryFieldsType;\n /** Renders markdown help texts (tooltips, sync-action results). Defaults to plain text. */\n renderMarkdown?: RenderMarkdown;\n /** When true, password fields render as plain text inputs (protected default branch). */\n hasProtectedDefaultBranch?: boolean;\n}) => {\n const schemaJs = useMemo(() => sanitizeSchema(schema), [schema]);\n const uiSchema = useMemo(\n () =>\n generateUiSchema(\n schema,\n readOnly,\n undefined,\n globalConfig ?? undefined,\n hasProtectedDefaultBranch,\n ),\n [schema, readOnly, globalConfig, hasProtectedDefaultBranch],\n );\n\n const mergedWidgets = useMemo(() => ({ ...defaultWidgets, ...widgets }), [widgets]);\n const mergedFields = useMemo(() => ({ ...defaultFields, ...fields }), [fields]);\n\n // --- Uncontrolled mode: Form manages its own state ---\n // We pass `initialFormData` instead of `formData` so RJSF's\n // getSnapshotBeforeUpdate sees formData=undefined → reuses internal\n // state → no resets on parent re-renders or store echoes.\n const initialDataRef = useRef<Record<string, unknown>>(value);\n const formDataRef = useRef<Record<string, unknown>>(initialDataRef.current);\n const [formKey, setFormKey] = useState(0);\n\n // Validation stays quiet until the host asks for it (see onRegisterValidate) — a config\n // saved before its schema gained a constraint would otherwise open covered in errors.\n // From the first ask on, RJSF revalidates on blur so the errors clear as the fields are\n // fixed rather than sticking until something remounts the form. Blur rather than change:\n // a full AJV pass over a component schema on every keystroke is a lot to spend inside a\n // code-editor field.\n const [hasValidated, setHasValidated] = useState(false);\n\n // Root form data provided via context so that DynamicSelectWidget, TemplateWatchWidget etc.\n // can reactively read the latest form data — including hidden objects like _metadata_\n // that RJSF's internal processing might not preserve in ObjectFieldTemplate.formData.\n const [rootFormData, setRootFormData] = useState<Record<string, unknown>>(initialDataRef.current);\n\n // Tracks the form data produced by RJSF after filling in schema defaults during mount.\n // RJSF may add default values that weren't in the stored config, creating a diff.\n // This baseline is captured during mount-phase onChange events and used as a secondary\n // check in debouncedOnChange — if the data only contains mount-phase defaults (matches\n // the baseline), it won't propagate to the store as \"unsaved changes\".\n const mountedFormDataJsonRef = useRef<string | null>(null);\n\n // Primary defense: skip onChange during mount phase via effect timing.\n // Re-arms when formKey changes (Form remounts).\n const isInitialMountRef = useRef(true);\n useEffect(() => {\n isInitialMountRef.current = false;\n }, [formKey]);\n\n // Stable refs to avoid recreating callbacks when parent props change\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n const valueRef = useRef(value);\n valueRef.current = value;\n\n // Tracks canonical JSON of the last value we sent to the store so we can\n // distinguish our own echo from genuine external changes.\n const lastSentJsonRef = useRef<string | null>(null);\n\n // Stable debounced callback — uses refs so the debounce timer is never recreated.\n const debouncedOnChange = useMemo(\n () =>\n debounce((data: Record<string, unknown>) => {\n const dataJson = stableStringify(data);\n const storeJson = stableStringify(valueRef.current);\n if (dataJson !== storeJson) {\n // Secondary defense: if no data has been sent to the store yet AND the data\n // matches what RJSF produced during mount (stored data + schema defaults),\n // don't propagate. This catches late mount-phase onChange events that slip\n // past isInitialMountRef (e.g. RJSF firing onChange in a setState callback\n // after the useEffect has already run). The lastSentJsonRef check ensures\n // this only applies to the very first propagation — once the user has made\n // a real change, reverting back to the mount state must still propagate.\n if (\n lastSentJsonRef.current === null &&\n mountedFormDataJsonRef.current &&\n dataJson === mountedFormDataJsonRef.current\n ) {\n return;\n }\n lastSentJsonRef.current = dataJson;\n onChangeRef.current(data);\n }\n }, 100),\n [],\n );\n\n // Cancel any pending write when the editor unmounts\n useEffect(() => () => debouncedOnChange.cancel(), [debouncedOnChange]);\n\n // Detect external value changes during render (not in useEffect,\n // to avoid a flash of stale data). On genuine external change,\n // bump formKey to remount Form with new initialFormData.\n const [prevValue, setPrevValue] = useState(value);\n if (value !== prevValue) {\n setPrevValue(value);\n const incomingJson = stableStringify(value);\n if (incomingJson !== stableStringify(prevValue)) {\n if (lastSentJsonRef.current && lastSentJsonRef.current === incomingJson) {\n // Our own debounced update echoing back from the store — ignore\n lastSentJsonRef.current = null;\n } else {\n // Genuine external change (sync action, external reset, etc.). The incoming value\n // wins and Form remounts from it, so a still-pending debounced write describes a\n // form the user can no longer see — letting it land would put the host store and\n // the visible form out of sync, with the echo detection hiding the difference.\n debouncedOnChange.cancel();\n lastSentJsonRef.current = null;\n initialDataRef.current = value;\n formDataRef.current = value;\n isInitialMountRef.current = true;\n mountedFormDataJsonRef.current = null;\n setFormKey((k) => k + 1);\n }\n }\n }\n\n const handleChange = useCallback(\n (e: IChangeEvent) => {\n if (!e.formData) return;\n formDataRef.current = e.formData as Record<string, unknown>;\n setRootFormData(e.formData as Record<string, unknown>);\n\n // Primary defense: suppress mount-phase onChange via effect timing.\n // Also capture the form data as the mounted baseline for secondary defense.\n if (isInitialMountRef.current) {\n mountedFormDataJsonRef.current = stableStringify(e.formData);\n return;\n }\n\n debouncedOnChange(e.formData as Record<string, unknown>);\n },\n [debouncedOnChange],\n );\n\n const debouncedOnChangeRef = useRef(debouncedOnChange);\n debouncedOnChangeRef.current = debouncedOnChange;\n\n // Ref to setRootFormData so formContext stays stable (useMemo with empty deps)\n const setRootFormDataRef = useRef(setRootFormData);\n setRootFormDataRef.current = setRootFormData;\n\n // Stable formContext — uses refs instead of direct onChange dep so the\n // object reference never changes. This prevents RJSF's\n // getSnapshotBeforeUpdate from firing on every parent re-render.\n const formContext = useMemo(\n () => ({\n setFormData: (data: unknown) => {\n // Shallow-merge with existing data — the old json-editor's root.setValue()\n // only updated properties present in the new value, preserving the rest.\n const merged = { ...formDataRef.current, ...(data as Record<string, unknown>) };\n initialDataRef.current = merged;\n formDataRef.current = merged;\n setRootFormDataRef.current(merged);\n debouncedOnChangeRef.current.cancel();\n lastSentJsonRef.current = stableStringify(merged);\n onChangeRef.current(merged);\n isInitialMountRef.current = true;\n mountedFormDataJsonRef.current = null;\n setFormKey((k) => k + 1);\n },\n getFormData: () => formDataRef.current,\n }),\n [], // stable — uses refs for all external values\n );\n\n // Expose programmatic validation to the parent via callback ref.\n // RJSF Form.validateForm() validates current formData, updates error state, and returns validity.\n const formRef = useRef<InstanceType<typeof Form>>(null);\n useEffect(() => {\n if (onRegisterValidate) {\n onRegisterValidate(() => {\n setHasValidated(true);\n return formRef.current?.validateForm() ?? true;\n });\n }\n }, [onRegisterValidate, formKey]);\n\n return (\n <div className=\"json-editor\">\n <RenderMarkdownProvider value={renderMarkdown ?? defaultRenderMarkdown}>\n <RootFormDataProvider value={rootFormData}>\n <Form\n ref={formRef}\n schema={schemaJs}\n key={formKey}\n initialFormData={initialDataRef.current}\n uiSchema={uiSchema}\n validator={validator}\n onChange={handleChange}\n widgets={mergedWidgets}\n fields={mergedFields}\n templates={defaultTemplates}\n formContext={formContext}\n disabled={readOnly}\n liveValidate={hasValidated ? 'onBlur' : undefined}\n showErrorList={false}\n noHtml5Validate\n tagName={inForm ? 'div' : 'form'}\n >\n {/* Hide default submit button */}\n <></>\n </Form>\n </RootFormDataProvider>\n </RenderMarkdownProvider>\n </div>\n );\n};\n"]}