@mieweb/ui 0.7.1 → 0.7.2

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 (462) hide show
  1. package/dist/CsvBlock-LVJARITD.cjs +15 -0
  2. package/dist/{CsvBlock-2A5VEDD3.cjs.map → CsvBlock-LVJARITD.cjs.map} +1 -1
  3. package/dist/CsvBlock-VTYNQ75L.js +6 -0
  4. package/dist/{CsvBlock-D6PWAJ5X.js.map → CsvBlock-VTYNQ75L.js.map} +1 -1
  5. package/dist/HtmlPreviewBlock-F33P37UD.cjs +15 -0
  6. package/dist/{HtmlPreviewBlock-SYXCV5RH.cjs.map → HtmlPreviewBlock-F33P37UD.cjs.map} +1 -1
  7. package/dist/HtmlPreviewBlock-N4PPVJLJ.js +6 -0
  8. package/dist/{HtmlPreviewBlock-PEHTJ6C3.js.map → HtmlPreviewBlock-N4PPVJLJ.js.map} +1 -1
  9. package/dist/MermaidBlock-G5X4FPUN.cjs +15 -0
  10. package/dist/{MermaidBlock-AFXNP5NK.cjs.map → MermaidBlock-G5X4FPUN.cjs.map} +1 -1
  11. package/dist/MermaidBlock-HUT53CRG.js +6 -0
  12. package/dist/{MermaidBlock-7NK3AVK2.js.map → MermaidBlock-HUT53CRG.js.map} +1 -1
  13. package/dist/SurveyBlock-ORTPGA5T.cjs +15 -0
  14. package/dist/{SurveyBlock-6KRNKFH5.cjs.map → SurveyBlock-ORTPGA5T.cjs.map} +1 -1
  15. package/dist/SurveyBlock-PM3ZMWWR.js +6 -0
  16. package/dist/{SurveyBlock-NNDGXGG4.js.map → SurveyBlock-PM3ZMWWR.js.map} +1 -1
  17. package/dist/ag-grid.cjs +13 -13
  18. package/dist/ag-grid.js +2 -2
  19. package/dist/brands/index.cjs +7 -7
  20. package/dist/brands/index.js +2 -2
  21. package/dist/{chunk-4DMZAVB2.js → chunk-23AYDOCH.js} +3 -3
  22. package/dist/{chunk-4DMZAVB2.js.map → chunk-23AYDOCH.js.map} +1 -1
  23. package/dist/{chunk-MAMY5HTT.cjs → chunk-26DPQUSB.cjs} +22 -22
  24. package/dist/{chunk-MAMY5HTT.cjs.map → chunk-26DPQUSB.cjs.map} +1 -1
  25. package/dist/{chunk-TRZXK57D.js → chunk-2DW4PUJD.js} +3 -3
  26. package/dist/{chunk-TRZXK57D.js.map → chunk-2DW4PUJD.js.map} +1 -1
  27. package/dist/{chunk-OX2RIVN7.js → chunk-3D4ITDLO.js} +4 -4
  28. package/dist/{chunk-OX2RIVN7.js.map → chunk-3D4ITDLO.js.map} +1 -1
  29. package/dist/{chunk-PJAQDAMZ.cjs → chunk-3IAA3KCE.cjs} +15 -6
  30. package/dist/chunk-3IAA3KCE.cjs.map +1 -0
  31. package/dist/chunk-3PXOIAF6.js +3 -0
  32. package/dist/{chunk-DHKYGVP7.js.map → chunk-3PXOIAF6.js.map} +1 -1
  33. package/dist/{chunk-6D5F7EDM.js → chunk-3SRBIXQX.js} +18 -17
  34. package/dist/chunk-3SRBIXQX.js.map +1 -0
  35. package/dist/{chunk-Q2EWNXIB.cjs → chunk-3SZQRMHM.cjs} +9 -9
  36. package/dist/{chunk-Q2EWNXIB.cjs.map → chunk-3SZQRMHM.cjs.map} +1 -1
  37. package/dist/{chunk-JLBT76WH.js → chunk-3YSIZ2CK.js} +14 -5
  38. package/dist/chunk-3YSIZ2CK.js.map +1 -0
  39. package/dist/{chunk-NIEIRA5A.cjs → chunk-4AE2L6AO.cjs} +13 -13
  40. package/dist/{chunk-NIEIRA5A.cjs.map → chunk-4AE2L6AO.cjs.map} +1 -1
  41. package/dist/{chunk-PFWHWIXS.cjs → chunk-54OW6ZPL.cjs} +124 -3
  42. package/dist/chunk-54OW6ZPL.cjs.map +1 -0
  43. package/dist/{chunk-FJH7P5WG.js → chunk-5BDCQBYW.js} +6 -6
  44. package/dist/{chunk-FJH7P5WG.js.map → chunk-5BDCQBYW.js.map} +1 -1
  45. package/dist/{chunk-XP6HELVG.cjs → chunk-5IDYOJHO.cjs} +13 -13
  46. package/dist/{chunk-XP6HELVG.cjs.map → chunk-5IDYOJHO.cjs.map} +1 -1
  47. package/dist/{chunk-3CJBUAJ4.js → chunk-5U6GETAW.js} +3 -3
  48. package/dist/{chunk-3CJBUAJ4.js.map → chunk-5U6GETAW.js.map} +1 -1
  49. package/dist/{chunk-HEH3QXOQ.js → chunk-5Y5FSR4N.js} +3 -3
  50. package/dist/{chunk-HEH3QXOQ.js.map → chunk-5Y5FSR4N.js.map} +1 -1
  51. package/dist/{chunk-MSRU3XBH.cjs → chunk-6ECKH4DJ.cjs} +7 -7
  52. package/dist/{chunk-MSRU3XBH.cjs.map → chunk-6ECKH4DJ.cjs.map} +1 -1
  53. package/dist/{chunk-MV3MTHWQ.js → chunk-6EWJGRC3.js} +3 -3
  54. package/dist/{chunk-MV3MTHWQ.js.map → chunk-6EWJGRC3.js.map} +1 -1
  55. package/dist/{chunk-AES2BKEW.cjs → chunk-6J7UGYT5.cjs} +10 -10
  56. package/dist/{chunk-AES2BKEW.cjs.map → chunk-6J7UGYT5.cjs.map} +1 -1
  57. package/dist/{chunk-7WMSUXOQ.js → chunk-6OCYG6J2.js} +4 -4
  58. package/dist/{chunk-7WMSUXOQ.js.map → chunk-6OCYG6J2.js.map} +1 -1
  59. package/dist/{chunk-JCNPVK74.cjs → chunk-6OQE4ZMG.cjs} +8 -8
  60. package/dist/{chunk-JCNPVK74.cjs.map → chunk-6OQE4ZMG.cjs.map} +1 -1
  61. package/dist/{chunk-KBEKQMVY.cjs → chunk-6QVI6DAO.cjs} +5 -5
  62. package/dist/{chunk-KBEKQMVY.cjs.map → chunk-6QVI6DAO.cjs.map} +1 -1
  63. package/dist/{chunk-CVC4NWFA.cjs → chunk-7AMOKHTW.cjs} +4 -4
  64. package/dist/{chunk-CVC4NWFA.cjs.map → chunk-7AMOKHTW.cjs.map} +1 -1
  65. package/dist/{chunk-44CK4CT2.cjs → chunk-7EB7665B.cjs} +13 -13
  66. package/dist/{chunk-44CK4CT2.cjs.map → chunk-7EB7665B.cjs.map} +1 -1
  67. package/dist/{chunk-BB4WQ4LV.cjs → chunk-ABAOZASX.cjs} +8 -8
  68. package/dist/{chunk-BB4WQ4LV.cjs.map → chunk-ABAOZASX.cjs.map} +1 -1
  69. package/dist/{chunk-6LFG4JFF.js → chunk-AFGADE3B.js} +3 -3
  70. package/dist/{chunk-6LFG4JFF.js.map → chunk-AFGADE3B.js.map} +1 -1
  71. package/dist/{chunk-UOOH356R.cjs → chunk-AIJAFPGJ.cjs} +5 -5
  72. package/dist/{chunk-UOOH356R.cjs.map → chunk-AIJAFPGJ.cjs.map} +1 -1
  73. package/dist/{chunk-43GBCUSQ.js → chunk-AQ564XO7.js} +6 -6
  74. package/dist/chunk-AQ564XO7.js.map +1 -0
  75. package/dist/{chunk-CYMZ2QS5.js → chunk-BCJFOSZX.js} +2 -2
  76. package/dist/{chunk-CYMZ2QS5.js.map → chunk-BCJFOSZX.js.map} +1 -1
  77. package/dist/{chunk-T3C4RNJ4.js → chunk-BJKAVWED.js} +3 -3
  78. package/dist/{chunk-T3C4RNJ4.js.map → chunk-BJKAVWED.js.map} +1 -1
  79. package/dist/{chunk-MKWGKASO.js → chunk-BMRQ4VME.js} +4 -4
  80. package/dist/{chunk-MKWGKASO.js.map → chunk-BMRQ4VME.js.map} +1 -1
  81. package/dist/{chunk-T42BCIUA.js → chunk-BMSG4NBH.js} +4 -4
  82. package/dist/{chunk-T42BCIUA.js.map → chunk-BMSG4NBH.js.map} +1 -1
  83. package/dist/{chunk-QA6ZDHFP.js → chunk-BOOJDRJO.js} +35 -11
  84. package/dist/chunk-BOOJDRJO.js.map +1 -0
  85. package/dist/{chunk-C2544GKZ.js → chunk-BX5ZODPF.js} +4 -4
  86. package/dist/{chunk-C2544GKZ.js.map → chunk-BX5ZODPF.js.map} +1 -1
  87. package/dist/{chunk-IYIYL2SQ.js → chunk-CEQJGUAS.js} +3 -3
  88. package/dist/{chunk-IYIYL2SQ.js.map → chunk-CEQJGUAS.js.map} +1 -1
  89. package/dist/{chunk-6ZYE6JUK.cjs → chunk-CKRRJO7T.cjs} +11 -11
  90. package/dist/{chunk-6ZYE6JUK.cjs.map → chunk-CKRRJO7T.cjs.map} +1 -1
  91. package/dist/{chunk-WO5CAOAN.js → chunk-DCBMTFLE.js} +3 -3
  92. package/dist/{chunk-WO5CAOAN.js.map → chunk-DCBMTFLE.js.map} +1 -1
  93. package/dist/{chunk-J7Z7467B.js → chunk-DLBV42JD.js} +4 -4
  94. package/dist/{chunk-J7Z7467B.js.map → chunk-DLBV42JD.js.map} +1 -1
  95. package/dist/{chunk-MUYTGWGE.js → chunk-DVOQ3JNO.js} +3 -3
  96. package/dist/{chunk-MUYTGWGE.js.map → chunk-DVOQ3JNO.js.map} +1 -1
  97. package/dist/{chunk-LJ2ZWIX6.js → chunk-DWIF6VXZ.js} +124 -3
  98. package/dist/chunk-DWIF6VXZ.js.map +1 -0
  99. package/dist/{chunk-IHTRKWBG.js → chunk-EGWWTIWS.js} +119 -75
  100. package/dist/chunk-EGWWTIWS.js.map +1 -0
  101. package/dist/{chunk-UM6NA7HL.js → chunk-EKRT7K2K.js} +4 -4
  102. package/dist/{chunk-UM6NA7HL.js.map → chunk-EKRT7K2K.js.map} +1 -1
  103. package/dist/{chunk-WGPMTW36.cjs → chunk-EPQPUFS6.cjs} +7 -7
  104. package/dist/{chunk-WGPMTW36.cjs.map → chunk-EPQPUFS6.cjs.map} +1 -1
  105. package/dist/{chunk-J3BU3JBX.js → chunk-FDUA6OGN.js} +3 -3
  106. package/dist/{chunk-J3BU3JBX.js.map → chunk-FDUA6OGN.js.map} +1 -1
  107. package/dist/{chunk-JHYFHEHS.js → chunk-FDV7EQWH.js} +4 -4
  108. package/dist/{chunk-JHYFHEHS.js.map → chunk-FDV7EQWH.js.map} +1 -1
  109. package/dist/{chunk-KQAXXJ4G.cjs → chunk-FF235PKY.cjs} +7 -7
  110. package/dist/{chunk-KQAXXJ4G.cjs.map → chunk-FF235PKY.cjs.map} +1 -1
  111. package/dist/{chunk-FZJBFJJR.js → chunk-FJ7YPVKV.js} +3 -3
  112. package/dist/{chunk-FZJBFJJR.js.map → chunk-FJ7YPVKV.js.map} +1 -1
  113. package/dist/{chunk-5MAGWW5X.cjs → chunk-FKLUSYFP.cjs} +11 -11
  114. package/dist/{chunk-5MAGWW5X.cjs.map → chunk-FKLUSYFP.cjs.map} +1 -1
  115. package/dist/{chunk-ZGSC2CB2.js → chunk-GTHNWP4P.js} +36 -5
  116. package/dist/chunk-GTHNWP4P.js.map +1 -0
  117. package/dist/{chunk-6AHYYWVB.js → chunk-H3HF36ZL.js} +5 -5
  118. package/dist/{chunk-6AHYYWVB.js.map → chunk-H3HF36ZL.js.map} +1 -1
  119. package/dist/{chunk-YZT62IMX.js → chunk-HIDV32ZX.js} +5 -5
  120. package/dist/{chunk-YZT62IMX.js.map → chunk-HIDV32ZX.js.map} +1 -1
  121. package/dist/{chunk-BIT27PPD.js → chunk-HS25RPDW.js} +3 -3
  122. package/dist/{chunk-BIT27PPD.js.map → chunk-HS25RPDW.js.map} +1 -1
  123. package/dist/{chunk-BWYYA3LQ.cjs → chunk-I2ECTLON.cjs} +5 -5
  124. package/dist/{chunk-BWYYA3LQ.cjs.map → chunk-I2ECTLON.cjs.map} +1 -1
  125. package/dist/{chunk-DUPR6FEL.js → chunk-I3WGZPI6.js} +4 -4
  126. package/dist/{chunk-DUPR6FEL.js.map → chunk-I3WGZPI6.js.map} +1 -1
  127. package/dist/{chunk-TN33E2VN.cjs → chunk-IJYTASQQ.cjs} +15 -15
  128. package/dist/{chunk-TN33E2VN.cjs.map → chunk-IJYTASQQ.cjs.map} +1 -1
  129. package/dist/{chunk-BT3ZQJGT.cjs → chunk-IUDY6S7I.cjs} +6 -6
  130. package/dist/{chunk-BT3ZQJGT.cjs.map → chunk-IUDY6S7I.cjs.map} +1 -1
  131. package/dist/{chunk-TR2OJKQ4.cjs → chunk-JTSKPDPH.cjs} +8 -8
  132. package/dist/{chunk-TR2OJKQ4.cjs.map → chunk-JTSKPDPH.cjs.map} +1 -1
  133. package/dist/{chunk-XCLQZ4FV.js → chunk-KFLDXJEE.js} +3 -3
  134. package/dist/{chunk-XCLQZ4FV.js.map → chunk-KFLDXJEE.js.map} +1 -1
  135. package/dist/{chunk-4LVPQ44A.js → chunk-LMBXJZLG.js} +9 -5
  136. package/dist/chunk-LMBXJZLG.js.map +1 -0
  137. package/dist/{chunk-A2QVQF54.cjs → chunk-M26KJKZG.cjs} +4 -4
  138. package/dist/{chunk-A2QVQF54.cjs.map → chunk-M26KJKZG.cjs.map} +1 -1
  139. package/dist/{chunk-ZHBANUBI.cjs → chunk-MJWFNV3L.cjs} +31 -27
  140. package/dist/chunk-MJWFNV3L.cjs.map +1 -0
  141. package/dist/{chunk-UFYXU7KV.js → chunk-MWPPOX6F.js} +4 -4
  142. package/dist/{chunk-UFYXU7KV.js.map → chunk-MWPPOX6F.js.map} +1 -1
  143. package/dist/{chunk-ZDEYV373.cjs → chunk-MYFZYUPR.cjs} +35 -11
  144. package/dist/chunk-MYFZYUPR.cjs.map +1 -0
  145. package/dist/{chunk-MCCO4A23.js → chunk-NGLI2MSM.js} +256 -45
  146. package/dist/chunk-NGLI2MSM.js.map +1 -0
  147. package/dist/{chunk-FCBQP2U4.cjs → chunk-NPKPCYAT.cjs} +142 -16
  148. package/dist/chunk-NPKPCYAT.cjs.map +1 -0
  149. package/dist/{chunk-T3RWXOCM.js → chunk-NU6QKULE.js} +3 -3
  150. package/dist/{chunk-T3RWXOCM.js.map → chunk-NU6QKULE.js.map} +1 -1
  151. package/dist/{chunk-QUUFKGDF.cjs → chunk-OAHORW4N.cjs} +130 -86
  152. package/dist/chunk-OAHORW4N.cjs.map +1 -0
  153. package/dist/{chunk-BYUV3IZV.cjs → chunk-OGPJ3LRF.cjs} +4 -4
  154. package/dist/{chunk-BYUV3IZV.cjs.map → chunk-OGPJ3LRF.cjs.map} +1 -1
  155. package/dist/{chunk-XL7TTKHP.js → chunk-OLFTGCGD.js} +7 -7
  156. package/dist/{chunk-XL7TTKHP.js.map → chunk-OLFTGCGD.js.map} +1 -1
  157. package/dist/{chunk-BX6BTDTR.js → chunk-OQWZYKJM.js} +3 -3
  158. package/dist/{chunk-BX6BTDTR.js.map → chunk-OQWZYKJM.js.map} +1 -1
  159. package/dist/{chunk-JBB25LFB.js → chunk-OTQ72WX3.js} +3 -3
  160. package/dist/{chunk-JBB25LFB.js.map → chunk-OTQ72WX3.js.map} +1 -1
  161. package/dist/{chunk-AFKKJEV5.cjs → chunk-OZOSWBSI.cjs} +4 -4
  162. package/dist/{chunk-AFKKJEV5.cjs.map → chunk-OZOSWBSI.cjs.map} +1 -1
  163. package/dist/{chunk-KJPOFUF5.cjs → chunk-P2VTQ5AR.cjs} +10 -10
  164. package/dist/{chunk-KJPOFUF5.cjs.map → chunk-P2VTQ5AR.cjs.map} +1 -1
  165. package/dist/{chunk-ZAIEQWRA.js → chunk-P6L74SKG.js} +5 -5
  166. package/dist/{chunk-ZAIEQWRA.js.map → chunk-P6L74SKG.js.map} +1 -1
  167. package/dist/{chunk-QASIWBXU.cjs → chunk-P7UMS4E6.cjs} +7 -7
  168. package/dist/{chunk-QASIWBXU.cjs.map → chunk-P7UMS4E6.cjs.map} +1 -1
  169. package/dist/chunk-PAM5UUBL.cjs +740 -0
  170. package/dist/{chunk-UTYUT5YY.cjs.map → chunk-PAM5UUBL.cjs.map} +1 -1
  171. package/dist/{chunk-NVHAQOHH.cjs → chunk-PLMXN23Q.cjs} +10 -10
  172. package/dist/chunk-PLMXN23Q.cjs.map +1 -0
  173. package/dist/{chunk-KOCTIB6U.js → chunk-PS5INHGC.js} +3 -3
  174. package/dist/{chunk-KOCTIB6U.js.map → chunk-PS5INHGC.js.map} +1 -1
  175. package/dist/{chunk-Y2S6QMKU.js → chunk-PTZB2GKL.js} +3 -3
  176. package/dist/{chunk-Y2S6QMKU.js.map → chunk-PTZB2GKL.js.map} +1 -1
  177. package/dist/{chunk-7VF6WO7H.cjs → chunk-Q5VBO3I5.cjs} +310 -99
  178. package/dist/chunk-Q5VBO3I5.cjs.map +1 -0
  179. package/dist/{chunk-BLPCYP4D.cjs → chunk-QI2SB6U3.cjs} +29 -29
  180. package/dist/{chunk-BLPCYP4D.cjs.map → chunk-QI2SB6U3.cjs.map} +1 -1
  181. package/dist/{chunk-EZKRAW2X.js → chunk-QUUBTNMH.js} +3 -3
  182. package/dist/{chunk-EZKRAW2X.js.map → chunk-QUUBTNMH.js.map} +1 -1
  183. package/dist/{chunk-5BQE6BEL.js → chunk-QYSUYB3S.js} +13 -9
  184. package/dist/chunk-QYSUYB3S.js.map +1 -0
  185. package/dist/{chunk-MZPF2QGM.cjs → chunk-RBS3GHDZ.cjs} +15 -15
  186. package/dist/{chunk-MZPF2QGM.cjs.map → chunk-RBS3GHDZ.cjs.map} +1 -1
  187. package/dist/{chunk-KJ5BSGEO.cjs → chunk-RS5VA6QU.cjs} +17 -13
  188. package/dist/chunk-RS5VA6QU.cjs.map +1 -0
  189. package/dist/{chunk-CKD554XR.cjs → chunk-RUEEDOE3.cjs} +5 -5
  190. package/dist/{chunk-CKD554XR.cjs.map → chunk-RUEEDOE3.cjs.map} +1 -1
  191. package/dist/{chunk-372IIHUA.cjs → chunk-RYQ3S3KO.cjs} +53 -53
  192. package/dist/{chunk-372IIHUA.cjs.map → chunk-RYQ3S3KO.cjs.map} +1 -1
  193. package/dist/{chunk-RHYIFIT5.js → chunk-RZFSJD67.js} +3 -3
  194. package/dist/{chunk-RHYIFIT5.js.map → chunk-RZFSJD67.js.map} +1 -1
  195. package/dist/{chunk-NQME7MCK.js → chunk-RZJXCI53.js} +191 -204
  196. package/dist/chunk-RZJXCI53.js.map +1 -0
  197. package/dist/{chunk-DFCZPVG4.cjs → chunk-S3MKIDYG.cjs} +8 -8
  198. package/dist/{chunk-DFCZPVG4.cjs.map → chunk-S3MKIDYG.cjs.map} +1 -1
  199. package/dist/chunk-S5RVSXDV.cjs +45 -0
  200. package/dist/chunk-S5RVSXDV.cjs.map +1 -0
  201. package/dist/{chunk-XDFDVF2O.js → chunk-SH6B4MG5.js} +4 -4
  202. package/dist/{chunk-XDFDVF2O.js.map → chunk-SH6B4MG5.js.map} +1 -1
  203. package/dist/chunk-SVSHA7XV.js +487 -0
  204. package/dist/chunk-SVSHA7XV.js.map +1 -0
  205. package/dist/{chunk-KL2S36FM.js → chunk-TNUL4LGG.js} +6 -6
  206. package/dist/{chunk-KL2S36FM.js.map → chunk-TNUL4LGG.js.map} +1 -1
  207. package/dist/chunk-TQONQSJO.js +42 -0
  208. package/dist/chunk-TQONQSJO.js.map +1 -0
  209. package/dist/{chunk-V25Z5GR6.cjs → chunk-TU36DBH2.cjs} +9 -9
  210. package/dist/{chunk-V25Z5GR6.cjs.map → chunk-TU36DBH2.cjs.map} +1 -1
  211. package/dist/{chunk-FQ3UCZUX.cjs → chunk-U3JU6BI5.cjs} +7 -7
  212. package/dist/{chunk-FQ3UCZUX.cjs.map → chunk-U3JU6BI5.cjs.map} +1 -1
  213. package/dist/{chunk-VCO2IZOG.js → chunk-UA7E7PDS.js} +3 -3
  214. package/dist/{chunk-VCO2IZOG.js.map → chunk-UA7E7PDS.js.map} +1 -1
  215. package/dist/{chunk-OOYEHBYJ.js → chunk-UUI7WXI5.js} +142 -16
  216. package/dist/chunk-UUI7WXI5.js.map +1 -0
  217. package/dist/{chunk-SNEQXSC5.cjs → chunk-VA7QN4DX.cjs} +2 -2
  218. package/dist/{chunk-SNEQXSC5.cjs.map → chunk-VA7QN4DX.cjs.map} +1 -1
  219. package/dist/{chunk-I2W24RHW.js → chunk-VE6OUO7X.js} +3 -3
  220. package/dist/{chunk-I2W24RHW.js.map → chunk-VE6OUO7X.js.map} +1 -1
  221. package/dist/{chunk-STPK44AU.js → chunk-VNWJTCBQ.js} +3 -3
  222. package/dist/{chunk-STPK44AU.js.map → chunk-VNWJTCBQ.js.map} +1 -1
  223. package/dist/{chunk-ZNZZCB2M.cjs → chunk-VPIYTQCV.cjs} +9 -9
  224. package/dist/{chunk-ZNZZCB2M.cjs.map → chunk-VPIYTQCV.cjs.map} +1 -1
  225. package/dist/{chunk-DLNJLCNO.cjs → chunk-VTKXM7IE.cjs} +4 -4
  226. package/dist/{chunk-DLNJLCNO.cjs.map → chunk-VTKXM7IE.cjs.map} +1 -1
  227. package/dist/{chunk-VPNURIAY.cjs → chunk-VVI32P7L.cjs} +10 -10
  228. package/dist/{chunk-VPNURIAY.cjs.map → chunk-VVI32P7L.cjs.map} +1 -1
  229. package/dist/{chunk-PWHK7SWN.cjs → chunk-VWCMOWGH.cjs} +150 -149
  230. package/dist/chunk-VWCMOWGH.cjs.map +1 -0
  231. package/dist/{chunk-EUUQVDXX.cjs → chunk-W4Q4UEXA.cjs} +14 -14
  232. package/dist/{chunk-EUUQVDXX.cjs.map → chunk-W4Q4UEXA.cjs.map} +1 -1
  233. package/dist/{chunk-ZVSW2KS6.js → chunk-WRYZ2752.js} +3 -3
  234. package/dist/{chunk-ZVSW2KS6.js.map → chunk-WRYZ2752.js.map} +1 -1
  235. package/dist/{chunk-U3ABLVYH.cjs → chunk-WUNWHOLA.cjs} +6 -6
  236. package/dist/{chunk-U3ABLVYH.cjs.map → chunk-WUNWHOLA.cjs.map} +1 -1
  237. package/dist/{chunk-RH43XBNV.cjs → chunk-WWJIW2IH.cjs} +4 -4
  238. package/dist/{chunk-RH43XBNV.cjs.map → chunk-WWJIW2IH.cjs.map} +1 -1
  239. package/dist/chunk-X4LBUPJO.cjs +511 -0
  240. package/dist/chunk-X4LBUPJO.cjs.map +1 -0
  241. package/dist/{chunk-4GXECTPS.cjs → chunk-XB54G7WS.cjs} +37 -3
  242. package/dist/chunk-XB54G7WS.cjs.map +1 -0
  243. package/dist/{chunk-IUFDGB5O.js → chunk-XMCIXHGH.js} +3 -3
  244. package/dist/{chunk-IUFDGB5O.js.map → chunk-XMCIXHGH.js.map} +1 -1
  245. package/dist/{chunk-KAKH2UZA.js → chunk-XO3WLK65.js} +3 -3
  246. package/dist/{chunk-KAKH2UZA.js.map → chunk-XO3WLK65.js.map} +1 -1
  247. package/dist/{chunk-IWDQPSJN.cjs → chunk-XS35KPBZ.cjs} +211 -223
  248. package/dist/chunk-XS35KPBZ.cjs.map +1 -0
  249. package/dist/{chunk-DEZ7XSTG.cjs → chunk-XXVUHLQN.cjs} +7 -7
  250. package/dist/{chunk-DEZ7XSTG.cjs.map → chunk-XXVUHLQN.cjs.map} +1 -1
  251. package/dist/{chunk-3GGET5LK.cjs → chunk-YGA35Z2P.cjs} +7 -7
  252. package/dist/{chunk-3GGET5LK.cjs.map → chunk-YGA35Z2P.cjs.map} +1 -1
  253. package/dist/{chunk-GOKC4CCZ.cjs → chunk-YMHOF6WA.cjs} +8 -8
  254. package/dist/{chunk-GOKC4CCZ.cjs.map → chunk-YMHOF6WA.cjs.map} +1 -1
  255. package/dist/{chunk-OXYFTCRW.cjs → chunk-YP5T6NZD.cjs} +4 -4
  256. package/dist/{chunk-OXYFTCRW.cjs.map → chunk-YP5T6NZD.cjs.map} +1 -1
  257. package/dist/{chunk-EL2RSQTJ.cjs → chunk-YVL3XATO.cjs} +5 -5
  258. package/dist/{chunk-EL2RSQTJ.cjs.map → chunk-YVL3XATO.cjs.map} +1 -1
  259. package/dist/{chunk-PVUDXJAI.js → chunk-YXCE2HSK.js} +4 -4
  260. package/dist/{chunk-PVUDXJAI.js.map → chunk-YXCE2HSK.js.map} +1 -1
  261. package/dist/{chunk-ST2RE5UB.cjs → chunk-Z5KFXHDP.cjs} +6 -6
  262. package/dist/{chunk-ST2RE5UB.cjs.map → chunk-Z5KFXHDP.cjs.map} +1 -1
  263. package/dist/{chunk-DAPZPT5N.cjs → chunk-ZBI52NP2.cjs} +13 -13
  264. package/dist/{chunk-DAPZPT5N.cjs.map → chunk-ZBI52NP2.cjs.map} +1 -1
  265. package/dist/{chunk-4Z6ZZKIY.js → chunk-ZIUADGAR.js} +3 -3
  266. package/dist/{chunk-4Z6ZZKIY.js.map → chunk-ZIUADGAR.js.map} +1 -1
  267. package/dist/{chunk-LOTMAKUG.cjs → chunk-ZZJ4ZVYR.cjs} +11 -11
  268. package/dist/{chunk-LOTMAKUG.cjs.map → chunk-ZZJ4ZVYR.cjs.map} +1 -1
  269. package/dist/collabKit-QZL4P5T5.js +48 -0
  270. package/dist/collabKit-QZL4P5T5.js.map +1 -0
  271. package/dist/collabKit-UF7E6V3N.cjs +72 -0
  272. package/dist/collabKit-UF7E6V3N.cjs.map +1 -0
  273. package/dist/components/Alert/index.cjs +6 -6
  274. package/dist/components/Alert/index.js +2 -2
  275. package/dist/components/AlertDialog/index.cjs +5 -5
  276. package/dist/components/AlertDialog/index.js +4 -4
  277. package/dist/components/AudioPlayer/index.cjs +7 -7
  278. package/dist/components/AudioPlayer/index.js +2 -2
  279. package/dist/components/AudioRecorder/index.cjs +7 -7
  280. package/dist/components/AudioRecorder/index.js +2 -2
  281. package/dist/components/Autocomplete/index.cjs +5 -5
  282. package/dist/components/Autocomplete/index.js +4 -4
  283. package/dist/components/Avatar/index.cjs +6 -6
  284. package/dist/components/Avatar/index.js +2 -2
  285. package/dist/components/Badge/index.cjs +4 -4
  286. package/dist/components/Badge/index.js +2 -2
  287. package/dist/components/Breadcrumb/index.cjs +4 -4
  288. package/dist/components/Breadcrumb/index.js +2 -2
  289. package/dist/components/Button/index.cjs +4 -4
  290. package/dist/components/Button/index.js +2 -2
  291. package/dist/components/Card/index.cjs +16 -16
  292. package/dist/components/Card/index.d.cts +8 -3
  293. package/dist/components/Card/index.d.ts +8 -3
  294. package/dist/components/Card/index.js +2 -2
  295. package/dist/components/Checkbox/index.cjs +5 -5
  296. package/dist/components/Checkbox/index.js +2 -2
  297. package/dist/components/CollabStatus/index.cjs +21 -0
  298. package/dist/components/CollabStatus/index.cjs.map +1 -0
  299. package/dist/components/CollabStatus/index.d.cts +222 -0
  300. package/dist/components/CollabStatus/index.d.ts +222 -0
  301. package/dist/components/CollabStatus/index.js +4 -0
  302. package/dist/components/CollabStatus/index.js.map +1 -0
  303. package/dist/components/Collapsible/index.cjs +5 -5
  304. package/dist/components/Collapsible/index.js +2 -2
  305. package/dist/components/CountryCodeDropdown/index.cjs +6 -6
  306. package/dist/components/CountryCodeDropdown/index.js +3 -3
  307. package/dist/components/DateInput/index.cjs +5 -5
  308. package/dist/components/DateInput/index.d.cts +3 -1
  309. package/dist/components/DateInput/index.d.ts +3 -1
  310. package/dist/components/DateInput/index.js +4 -4
  311. package/dist/components/Dropdown/index.cjs +10 -10
  312. package/dist/components/Dropdown/index.d.cts +1 -1
  313. package/dist/components/Dropdown/index.d.ts +1 -1
  314. package/dist/components/Dropdown/index.js +4 -4
  315. package/dist/components/FloatingWindow/index.cjs +5 -5
  316. package/dist/components/FloatingWindow/index.js +3 -3
  317. package/dist/components/Input/index.cjs +4 -4
  318. package/dist/components/Input/index.js +2 -2
  319. package/dist/components/Label/index.cjs +4 -4
  320. package/dist/components/Label/index.js +2 -2
  321. package/dist/components/Markdown/index.cjs +17 -17
  322. package/dist/components/Markdown/index.js +8 -8
  323. package/dist/components/MediaEditor/index.cjs +16 -16
  324. package/dist/components/MediaEditor/index.d.cts +34 -1
  325. package/dist/components/MediaEditor/index.d.ts +34 -1
  326. package/dist/components/MediaEditor/index.js +11 -11
  327. package/dist/components/MediaPlayer/index.cjs +6 -6
  328. package/dist/components/MediaPlayer/index.js +3 -3
  329. package/dist/components/Modal/index.cjs +10 -10
  330. package/dist/components/Modal/index.js +2 -2
  331. package/dist/components/Pagination/index.cjs +5 -5
  332. package/dist/components/Pagination/index.js +2 -2
  333. package/dist/components/PhoneInput/index.cjs +5 -5
  334. package/dist/components/PhoneInput/index.js +3 -3
  335. package/dist/components/Progress/index.cjs +7 -7
  336. package/dist/components/Progress/index.js +2 -2
  337. package/dist/components/QuickAction/index.cjs +7 -7
  338. package/dist/components/QuickAction/index.js +2 -2
  339. package/dist/components/Radio/index.cjs +5 -5
  340. package/dist/components/Radio/index.js +2 -2
  341. package/dist/components/RecordButton/index.cjs +5 -5
  342. package/dist/components/RecordButton/index.js +2 -2
  343. package/dist/components/RichTextEditor/index.cjs +10 -10
  344. package/dist/components/RichTextEditor/index.js +7 -7
  345. package/dist/components/SchedulePicker/index.cjs +11 -11
  346. package/dist/components/SchedulePicker/index.js +2 -2
  347. package/dist/components/ScrollArea/index.cjs +4 -4
  348. package/dist/components/ScrollArea/index.js +2 -2
  349. package/dist/components/Select/index.cjs +5 -5
  350. package/dist/components/Select/index.js +3 -3
  351. package/dist/components/Separator/index.cjs +4 -4
  352. package/dist/components/Separator/index.js +2 -2
  353. package/dist/components/Sheet/index.cjs +11 -11
  354. package/dist/components/Sheet/index.d.cts +1 -1
  355. package/dist/components/Sheet/index.d.ts +1 -1
  356. package/dist/components/Sheet/index.js +2 -2
  357. package/dist/components/Skeleton/index.cjs +7 -7
  358. package/dist/components/Skeleton/index.js +2 -2
  359. package/dist/components/Slider/index.cjs +6 -6
  360. package/dist/components/Slider/index.js +2 -2
  361. package/dist/components/Spinner/index.cjs +6 -6
  362. package/dist/components/Spinner/index.js +2 -2
  363. package/dist/components/SuperChat/index.cjs +46 -46
  364. package/dist/components/SuperChat/index.d.cts +4 -4
  365. package/dist/components/SuperChat/index.d.ts +4 -4
  366. package/dist/components/SuperChat/index.js +9 -9
  367. package/dist/components/SuperChat/plugins/index.cjs +10 -10
  368. package/dist/components/SuperChat/plugins/index.d.cts +3 -3
  369. package/dist/components/SuperChat/plugins/index.d.ts +3 -3
  370. package/dist/components/SuperChat/plugins/index.js +4 -4
  371. package/dist/components/Switch/index.cjs +5 -5
  372. package/dist/components/Switch/index.js +2 -2
  373. package/dist/components/Table/index.cjs +10 -10
  374. package/dist/components/Table/index.js +2 -2
  375. package/dist/components/Tabs/index.cjs +8 -8
  376. package/dist/components/Tabs/index.js +2 -2
  377. package/dist/components/Text/index.cjs +5 -5
  378. package/dist/components/Text/index.d.cts +1 -1
  379. package/dist/components/Text/index.d.ts +1 -1
  380. package/dist/components/Text/index.js +2 -2
  381. package/dist/components/Textarea/index.cjs +4 -4
  382. package/dist/components/Textarea/index.js +2 -2
  383. package/dist/components/ThemeProvider/index.cjs +9 -9
  384. package/dist/components/ThemeProvider/index.js +3 -3
  385. package/dist/components/Toggle/index.cjs +4 -4
  386. package/dist/components/Toggle/index.js +2 -2
  387. package/dist/components/Tooltip/index.cjs +3 -3
  388. package/dist/components/Tooltip/index.js +2 -2
  389. package/dist/datavis.cjs +7 -7
  390. package/dist/datavis.js +3 -3
  391. package/dist/esheet.cjs +18 -18
  392. package/dist/esheet.js +15 -15
  393. package/dist/hooks/index.cjs +34 -22
  394. package/dist/hooks/index.d.cts +31 -3
  395. package/dist/hooks/index.d.ts +31 -3
  396. package/dist/hooks/index.js +3 -3
  397. package/dist/index.cjs +3422 -1875
  398. package/dist/index.cjs.map +1 -1
  399. package/dist/index.d.cts +212 -22
  400. package/dist/index.d.ts +212 -22
  401. package/dist/index.js +918 -124
  402. package/dist/index.js.map +1 -1
  403. package/dist/kerebron.cjs +60 -17
  404. package/dist/kerebron.cjs.map +1 -1
  405. package/dist/kerebron.d.cts +39 -1
  406. package/dist/kerebron.d.ts +39 -1
  407. package/dist/kerebron.js +60 -17
  408. package/dist/kerebron.js.map +1 -1
  409. package/dist/styles.css +1 -1
  410. package/dist/tailwind-preset.cjs +4 -4
  411. package/dist/tailwind-preset.js +1 -1
  412. package/dist/{types-BYnLjEFg.d.ts → types-B2RLmdVd.d.cts} +3 -1
  413. package/dist/{types-BYnLjEFg.d.cts → types-B2RLmdVd.d.ts} +3 -1
  414. package/dist/{types-CyCwYBlr.d.ts → types-BoTeTPdH.d.ts} +1 -1
  415. package/dist/{types-CBh8Zlje.d.cts → types-DyIB9HYT.d.cts} +1 -1
  416. package/dist/{useAnchoredPosition-nXdSFKHf.d.cts → useAnchoredPosition-C7PNglzD.d.cts} +6 -2
  417. package/dist/{useAnchoredPosition-nXdSFKHf.d.ts → useAnchoredPosition-C7PNglzD.d.ts} +6 -2
  418. package/dist/{useTranscriptEdits-Hy0Vm-H8.d.cts → useTranscriptEdits-CGzlemHT.d.cts} +16 -3
  419. package/dist/{useTranscriptEdits-C2BbMU37.d.ts → useTranscriptEdits-D32bLs0l.d.ts} +16 -3
  420. package/dist/utils/index.cjs +15 -11
  421. package/dist/utils/index.d.cts +6 -1
  422. package/dist/utils/index.d.ts +6 -1
  423. package/dist/utils/index.js +2 -2
  424. package/package.json +30 -12
  425. package/dist/CsvBlock-2A5VEDD3.cjs +0 -15
  426. package/dist/CsvBlock-D6PWAJ5X.js +0 -6
  427. package/dist/HtmlPreviewBlock-PEHTJ6C3.js +0 -6
  428. package/dist/HtmlPreviewBlock-SYXCV5RH.cjs +0 -15
  429. package/dist/MermaidBlock-7NK3AVK2.js +0 -6
  430. package/dist/MermaidBlock-AFXNP5NK.cjs +0 -15
  431. package/dist/SurveyBlock-6KRNKFH5.cjs +0 -15
  432. package/dist/SurveyBlock-NNDGXGG4.js +0 -6
  433. package/dist/chunk-43GBCUSQ.js.map +0 -1
  434. package/dist/chunk-4GXECTPS.cjs.map +0 -1
  435. package/dist/chunk-4LVPQ44A.js.map +0 -1
  436. package/dist/chunk-5BQE6BEL.js.map +0 -1
  437. package/dist/chunk-6D5F7EDM.js.map +0 -1
  438. package/dist/chunk-7VF6WO7H.cjs.map +0 -1
  439. package/dist/chunk-DHKYGVP7.js +0 -3
  440. package/dist/chunk-F3SOEIN2.js +0 -11
  441. package/dist/chunk-F3SOEIN2.js.map +0 -1
  442. package/dist/chunk-FCBQP2U4.cjs.map +0 -1
  443. package/dist/chunk-IHTRKWBG.js.map +0 -1
  444. package/dist/chunk-IWDQPSJN.cjs.map +0 -1
  445. package/dist/chunk-JLBT76WH.js.map +0 -1
  446. package/dist/chunk-KJ5BSGEO.cjs.map +0 -1
  447. package/dist/chunk-LJ2ZWIX6.js.map +0 -1
  448. package/dist/chunk-MCCO4A23.js.map +0 -1
  449. package/dist/chunk-NQME7MCK.js.map +0 -1
  450. package/dist/chunk-NVHAQOHH.cjs.map +0 -1
  451. package/dist/chunk-OOYEHBYJ.js.map +0 -1
  452. package/dist/chunk-OR5DRJCW.cjs +0 -13
  453. package/dist/chunk-OR5DRJCW.cjs.map +0 -1
  454. package/dist/chunk-PFWHWIXS.cjs.map +0 -1
  455. package/dist/chunk-PJAQDAMZ.cjs.map +0 -1
  456. package/dist/chunk-PWHK7SWN.cjs.map +0 -1
  457. package/dist/chunk-QA6ZDHFP.js.map +0 -1
  458. package/dist/chunk-QUUFKGDF.cjs.map +0 -1
  459. package/dist/chunk-UTYUT5YY.cjs +0 -240
  460. package/dist/chunk-ZDEYV373.cjs.map +0 -1
  461. package/dist/chunk-ZGSC2CB2.js.map +0 -1
  462. package/dist/chunk-ZHBANUBI.cjs.map +0 -1
package/dist/kerebron.cjs CHANGED
@@ -2,16 +2,41 @@
2
2
 
3
3
  var react = require('react');
4
4
  var editor = require('@kerebron/editor');
5
- var AdvancedEditorKit = require('@kerebron/editor-kits/AdvancedEditorKit');
6
5
  var web = require('@kerebron/wasm/web');
6
+ var AdvancedEditorKit = require('@kerebron/editor-kits/AdvancedEditorKit');
7
7
  var jsxRuntime = require('react/jsx-runtime');
8
8
  var CodeEditorKit = require('@kerebron/editor-kits/CodeEditorKit');
9
9
 
10
10
  // src/components/RichEditor/RichEditor.tsx
11
+ var unsafeExtensions = ["autocomplete", "hover"];
12
+ var SafeAdvancedEditorKit = class {
13
+ constructor(forCollab) {
14
+ this.forCollab = forCollab;
15
+ }
16
+ forCollab;
17
+ name = "advanced-editor";
18
+ getExtensions() {
19
+ const dropped = [...unsafeExtensions];
20
+ if (this.forCollab) dropped.push("history");
21
+ return new AdvancedEditorKit.AdvancedEditorKit().getExtensions().filter(
22
+ (extension) => !("name" in extension && dropped.includes(extension.name))
23
+ );
24
+ }
25
+ };
26
+ async function createEditorKits(config) {
27
+ if (!config) return [new SafeAdvancedEditorKit(false)];
28
+ const { HuddleYjsKit, defaultWsUrl } = await import('./collabKit-UF7E6V3N.cjs');
29
+ const url = config.wsUrl ?? defaultWsUrl();
30
+ return [
31
+ new SafeAdvancedEditorKit(true),
32
+ new HuddleYjsKit(url, config.params ?? {}, config.WebSocketPolyfill)
33
+ ];
34
+ }
11
35
  var RichEditor = ({
12
36
  value = "",
13
37
  onChange,
14
- showPreview = false
38
+ showPreview = false,
39
+ collab
15
40
  }) => {
16
41
  const editorRef = react.useRef(null);
17
42
  const editorInstance = react.useRef(null);
@@ -20,13 +45,9 @@ var RichEditor = ({
20
45
  const [md, setMd] = react.useState("");
21
46
  react.useEffect(() => {
22
47
  if (!editorRef.current) return;
23
- const editor$1 = editor.CoreEditor.create({
24
- element: editorRef.current,
25
- uri: "file:///untitled.md",
26
- assetLoad: web.createAssetLoad("/kerebron-wasm"),
27
- editorKits: [new AdvancedEditorKit.AdvancedEditorKit()]
28
- });
29
- editorInstance.current = editor$1;
48
+ const element = editorRef.current;
49
+ let disposed = false;
50
+ let editor$1 = null;
30
51
  const onTransaction = async () => {
31
52
  if (!editorInstance.current) return;
32
53
  try {
@@ -38,15 +59,37 @@ var RichEditor = ({
38
59
  console.error("Failed to save markdown:", err);
39
60
  }
40
61
  };
41
- editor$1.addEventListener("transaction", onTransaction);
42
- if (value) {
43
- editor$1.loadDocumentText("text/x-markdown", value).then(() => onTransaction()).catch((err) => console.error("Failed to load markdown:", err));
44
- } else {
45
- void onTransaction();
46
- }
62
+ const setup = async () => {
63
+ const editorKits = await createEditorKits(collab);
64
+ if (disposed) return;
65
+ editor$1 = editor.CoreEditor.create({
66
+ element,
67
+ uri: "file:///untitled.md",
68
+ assetLoad: web.createAssetLoad("/kerebron-wasm"),
69
+ editorKits
70
+ });
71
+ editorInstance.current = editor$1;
72
+ editor$1.addEventListener("transaction", onTransaction);
73
+ const joinRoom = () => {
74
+ if (collab && editor$1 && !disposed) {
75
+ editor$1.run.changeRoom?.(collab.room);
76
+ }
77
+ };
78
+ if (value) {
79
+ await editor$1.loadDocumentText("text/x-markdown", value);
80
+ await onTransaction();
81
+ joinRoom();
82
+ } else {
83
+ void onTransaction();
84
+ joinRoom();
85
+ }
86
+ };
87
+ setup().catch((err) => console.error("Failed to set up editor:", err));
47
88
  return () => {
48
- editor$1.removeEventListener("transaction", onTransaction);
49
- editor$1.destroy();
89
+ disposed = true;
90
+ editorInstance.current = null;
91
+ editor$1?.removeEventListener("transaction", onTransaction);
92
+ editor$1?.destroy();
50
93
  };
51
94
  }, []);
52
95
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/RichEditor/RichEditor.tsx","../src/components/RichEditor/CodeEditor.tsx"],"names":["useRef","useState","useEffect","editor","CoreEditor","createAssetLoad","AdvancedEditorKit","jsx","jsxs","CodeEditorKit"],"mappings":"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","file":"kerebron.cjs","sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\n\nimport { CoreEditor } from '@kerebron/editor';\nimport { AdvancedEditorKit } from '@kerebron/editor-kits/AdvancedEditorKit';\nimport { createAssetLoad } from '@kerebron/wasm/web';\n\nexport interface RichEditorProps {\n /** Initial markdown content to load into the editor. */\n value?: string;\n /** Called with the editor's markdown content whenever it changes. */\n onChange?: (value: string) => void;\n /** Whether to render the live markdown output preview. Defaults to `false`. */\n showPreview?: boolean;\n}\n\nconst RichEditor: React.FC<RichEditorProps> = ({\n value = '',\n onChange,\n showPreview = false,\n}) => {\n const editorRef = useRef<HTMLDivElement>(null);\n const editorInstance = useRef<CoreEditor | null>(null);\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n const [md, setMd] = useState<string>('');\n\n useEffect(() => {\n if (!editorRef.current) return;\n\n // Initialize the editor\n const editor = CoreEditor.create({\n element: editorRef.current,\n uri: 'file:///untitled.md',\n assetLoad: createAssetLoad('/kerebron-wasm'),\n editorKits: [new AdvancedEditorKit()],\n });\n\n editorInstance.current = editor;\n\n // Listen to transactions and update markdown preview\n const onTransaction = async () => {\n if (!editorInstance.current) return;\n\n try {\n const buffer =\n await editorInstance.current.saveDocument('text/x-markdown');\n const markdown = new globalThis.TextDecoder().decode(buffer);\n setMd(markdown);\n onChangeRef.current?.(markdown);\n } catch (err) {\n console.error('Failed to save markdown:', err);\n }\n };\n\n editor.addEventListener('transaction', onTransaction);\n\n // Seed initial content, then populate the preview once on mount.\n if (value) {\n editor\n .loadDocumentText('text/x-markdown', value)\n .then(() => onTransaction())\n .catch((err) => console.error('Failed to load markdown:', err));\n } else {\n void onTransaction();\n }\n\n // Cleanup on unmount\n return () => {\n editor.removeEventListener('transaction', onTransaction);\n editor.destroy();\n };\n // Initial `value` is intentionally only applied on mount (uncontrolled).\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <div>\n <div>\n <div ref={editorRef} className=\"kb-component\" />\n </div>\n\n {showPreview && (\n <div>\n <div>\n <h5>Markdown Output</h5>\n <pre>{md}</pre>\n </div>\n </div>\n )}\n </div>\n );\n};\n\nRichEditor.displayName = 'RichEditor';\n\nexport { RichEditor };\n","import React, { useEffect, useRef } from 'react';\n\nimport { CoreEditor } from '@kerebron/editor';\nimport { CodeEditorKit } from '@kerebron/editor-kits/CodeEditorKit';\nimport { createAssetLoad } from '@kerebron/wasm/web';\n\nexport interface CodeEditorProps {\n /** Initial source code to load into the editor. */\n value?: string;\n /** Called with the editor's contents whenever they change. */\n onChange?: (value: string) => void;\n /** Language/grammar to use for syntax highlighting. Defaults to `typescript`. */\n lang?: string;\n}\n\nconst CodeEditor: React.FC<CodeEditorProps> = ({\n value = '',\n onChange,\n lang = 'typescript',\n}) => {\n const editorRef = useRef<HTMLDivElement>(null);\n const editorInstance = useRef<CoreEditor | null>(null);\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n useEffect(() => {\n const root = editorRef.current;\n if (!root) return;\n\n const applySelectLabel = () => {\n root.querySelectorAll('select.codejar-select').forEach((element) => {\n if (!element.getAttribute('aria-label')) {\n element.setAttribute('aria-label', 'Code editor language');\n }\n });\n };\n\n applySelectLabel();\n const observer = new MutationObserver(() => applySelectLabel());\n observer.observe(root, { childList: true, subtree: true });\n return () => observer.disconnect();\n }, []);\n\n useEffect(() => {\n if (!editorRef.current) return;\n\n // Initialize the editor\n const editor = CoreEditor.create({\n element: editorRef.current,\n uri: 'file:///untitled.ts',\n assetLoad: createAssetLoad('/kerebron-wasm'),\n editorKits: [new CodeEditorKit(lang)],\n });\n\n editorInstance.current = editor;\n\n // Surface edits to callers.\n const onTransaction = async () => {\n if (!editorInstance.current) return;\n\n try {\n const buffer = await editorInstance.current.saveDocument('text/plain');\n onChangeRef.current?.(new globalThis.TextDecoder().decode(buffer));\n } catch (err) {\n console.error('Failed to read code:', err);\n }\n };\n\n editor.addEventListener('transaction', onTransaction);\n\n // Seed initial content on mount.\n if (value) {\n editor\n .loadDocumentText('text/plain', value)\n .catch((err) => console.error('Failed to load code:', err));\n }\n\n // Cleanup on unmount\n return () => {\n editor.removeEventListener('transaction', onTransaction);\n editor.destroy();\n };\n // Initial `value`/`lang` are intentionally only applied on mount.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <div>\n <div>\n <div ref={editorRef} className=\"kb-component\" />\n </div>\n </div>\n );\n};\n\nCodeEditor.displayName = 'CodeEditor';\n\nexport { CodeEditor };\n"]}
1
+ {"version":3,"sources":["../src/components/RichEditor/editorKits.ts","../src/components/RichEditor/RichEditor.tsx","../src/components/RichEditor/CodeEditor.tsx"],"names":["AdvancedEditorKit","useRef","useState","useEffect","editor","CoreEditor","createAssetLoad","jsx","jsxs","CodeEditorKit"],"mappings":"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","file":"kerebron.cjs","sourcesContent":["/**\n * Editor kit assembly for {@link RichEditor}, for both plain and collaborative\n * (Yjs) mode.\n *\n * Both modes start from {@link AdvancedEditorKit} and drop the extensions that\n * are unsafe for our usage — see {@link unsafeExtensions} — then collaborative\n * mode adds the Yjs pieces on top.\n *\n * The Yjs pieces live in `collabKit.ts` behind a dynamic `import()`, so\n * `@kerebron/extension-yjs`, `yjs` and `y-protocols` remain truly optional\n * peers — plain-mode consumers never load them.\n */\nimport type { EditorKit } from '@kerebron/editor';\nimport { AdvancedEditorKit } from '@kerebron/editor-kits/AdvancedEditorKit';\n\nexport interface CollabConfig {\n /** Room id — one shared document per room (e.g. a post id). */\n room: string;\n /**\n * WebSocket base URL for the Yjs relay. Defaults to\n * `<ws|wss>://<location.host>/yjs`. The room id is appended by the provider.\n */\n wsUrl?: string;\n /** Extra query params for the socket (e.g. `{ token }` for auth). */\n params?: Record<string, string>;\n /**\n * Custom WebSocket implementation handed to the Yjs provider — e.g. a\n * loopback socket for demos/tests, or a polyfill outside the browser.\n * Defaults to `globalThis.WebSocket`.\n */\n WebSocketPolyfill?: typeof globalThis.WebSocket;\n}\n\n/**\n * Extensions dropped from {@link AdvancedEditorKit}, and why.\n *\n * `autocomplete` and `hover` debounce their DOM handlers (200ms) and then call\n * `dispatchMeta`, which reads `this.editor.state` with no guard that the editor\n * is still alive. Any teardown or document swap inside that debounce window\n * lands the deferred call on a dead view and throws\n * `null.matchesNode()` inside ProseMirror's `EditorView.updateStateInner`,\n * leaving the view permanently broken. Two ways to hit it:\n * - remount (e.g. a `key` change) while the pointer is over the editor, which\n * fires the debounced `onMouseLeave` after the view is destroyed;\n * - a Yjs remote update replacing the document tree under a pending callback.\n * The first applies to *every* editor, so both extensions come out in both\n * modes. No functional cost — autocomplete popups and node-hover tooltips are\n * compositor conveniences, not required for editing.\n *\n * `history` is collab-only: ExtensionYjs supplies its own CRDT-aware undo/redo\n * and the editor throws `Extension conflict: yjs vs history` if both are\n * present. Plain mode keeps it, so undo/redo still works there.\n */\nconst unsafeExtensions = ['autocomplete', 'hover'] as const;\n\n/** {@link AdvancedEditorKit} minus {@link unsafeExtensions} (and, for collab\n * mode, minus `history`). */\nclass SafeAdvancedEditorKit implements EditorKit {\n name = 'advanced-editor';\n constructor(private readonly forCollab: boolean) {}\n\n getExtensions() {\n const dropped: string[] = [...unsafeExtensions];\n if (this.forCollab) dropped.push('history');\n\n return new AdvancedEditorKit()\n .getExtensions()\n .filter(\n (extension) =>\n !('name' in extension && dropped.includes(extension.name))\n );\n }\n}\n\n/** MarkYChange + ExtensionYjs live in `collabKit.ts` (lazy-loaded). */\n\n/**\n * Build the editor kits for a session. Pass `config` to join a collaborative\n * room; omit it for a plain local editor.\n *\n * Async because collaborative mode lazy-loads the Yjs kit (and its optional\n * peer deps) on first use; plain mode resolves immediately.\n */\nexport async function createEditorKits(\n config?: CollabConfig\n): Promise<EditorKit[]> {\n if (!config) return [new SafeAdvancedEditorKit(false)];\n\n const { HuddleYjsKit, defaultWsUrl } = await import('./collabKit');\n const url = config.wsUrl ?? defaultWsUrl();\n return [\n new SafeAdvancedEditorKit(true),\n new HuddleYjsKit(url, config.params ?? {}, config.WebSocketPolyfill),\n ];\n}\n","import React, { useEffect, useRef, useState } from 'react';\n\nimport { CoreEditor } from '@kerebron/editor';\nimport { createAssetLoad } from '@kerebron/wasm/web';\n\nimport { createEditorKits, type CollabConfig } from './editorKits';\n\nexport type { CollabConfig } from './editorKits';\n\nexport interface RichEditorProps {\n /** Initial markdown content to load into the editor. */\n value?: string;\n /** Called with the editor's markdown content whenever it changes. */\n onChange?: (value: string) => void;\n /** Whether to render the live markdown output preview. Defaults to `false`. */\n showPreview?: boolean;\n /**\n * Enable live collaborative editing (Yjs) for the given room. When set, the\n * editor connects to the `/yjs` websocket relay and every peer in the same\n * `room` co-edits one shared document. Uncontrolled like `value` — remount via\n * `key` to switch rooms.\n */\n collab?: CollabConfig;\n}\n\nconst RichEditor: React.FC<RichEditorProps> = ({\n value = '',\n onChange,\n showPreview = false,\n collab,\n}) => {\n const editorRef = useRef<HTMLDivElement>(null);\n const editorInstance = useRef<CoreEditor | null>(null);\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n const [md, setMd] = useState<string>('');\n\n useEffect(() => {\n if (!editorRef.current) return;\n const element = editorRef.current;\n\n // Set on cleanup so async continuations (kit loading and the\n // `loadDocumentText` chain) don't touch the editor after `destroy()`.\n let disposed = false;\n let editor: CoreEditor | null = null;\n\n // Listen to transactions and update markdown preview\n const onTransaction = async () => {\n if (!editorInstance.current) return;\n\n try {\n const buffer =\n await editorInstance.current.saveDocument('text/x-markdown');\n const markdown = new globalThis.TextDecoder().decode(buffer);\n setMd(markdown);\n onChangeRef.current?.(markdown);\n } catch (err) {\n console.error('Failed to save markdown:', err);\n }\n };\n\n // Initialize the editor. Both modes drop the teardown-unsafe extensions;\n // collaborative mode additionally swaps `history` for the Yjs CRDT sync\n // and lazy-loads the Yjs kit (see `editorKits.ts` for why).\n const setup = async () => {\n const editorKits = await createEditorKits(collab);\n if (disposed) return;\n\n editor = CoreEditor.create({\n element,\n uri: 'file:///untitled.md',\n assetLoad: createAssetLoad('/kerebron-wasm'),\n editorKits,\n });\n\n editorInstance.current = editor;\n editor.addEventListener('transaction', onTransaction);\n\n // Seed initial content, then populate the preview once on mount.\n //\n // In collaborative mode we still load the local markdown first, then join\n // the room: the Yjs binding seeds an *empty* shared document from this\n // content on the first join, and overwrites the editor with the shared\n // content when the room already has edits — so the stored markdown is the\n // starting point without ever double-inserting.\n const joinRoom = () => {\n if (collab && editor && !disposed) {\n (\n editor.run as Record<string, (...args: unknown[]) => boolean>\n ).changeRoom?.(collab.room);\n }\n };\n\n if (value) {\n await editor.loadDocumentText('text/x-markdown', value);\n await onTransaction();\n joinRoom();\n } else {\n void onTransaction();\n joinRoom();\n }\n };\n\n setup().catch((err) => console.error('Failed to set up editor:', err));\n\n // Cleanup on unmount\n return () => {\n disposed = true;\n editorInstance.current = null; // makes onTransaction's guard effective\n editor?.removeEventListener('transaction', onTransaction);\n editor?.destroy();\n };\n // Initial `value`/`collab` are intentionally only applied on mount\n // (uncontrolled). Remount via `key` to switch rooms.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <div>\n <div>\n <div ref={editorRef} className=\"kb-component\" />\n </div>\n\n {showPreview && (\n <div>\n <div>\n <h5>Markdown Output</h5>\n <pre>{md}</pre>\n </div>\n </div>\n )}\n </div>\n );\n};\n\nRichEditor.displayName = 'RichEditor';\n\nexport { RichEditor };\n","import React, { useEffect, useRef } from 'react';\n\nimport { CoreEditor } from '@kerebron/editor';\nimport { CodeEditorKit } from '@kerebron/editor-kits/CodeEditorKit';\nimport { createAssetLoad } from '@kerebron/wasm/web';\n\nexport interface CodeEditorProps {\n /** Initial source code to load into the editor. */\n value?: string;\n /** Called with the editor's contents whenever they change. */\n onChange?: (value: string) => void;\n /** Language/grammar to use for syntax highlighting. Defaults to `typescript`. */\n lang?: string;\n}\n\nconst CodeEditor: React.FC<CodeEditorProps> = ({\n value = '',\n onChange,\n lang = 'typescript',\n}) => {\n const editorRef = useRef<HTMLDivElement>(null);\n const editorInstance = useRef<CoreEditor | null>(null);\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n useEffect(() => {\n const root = editorRef.current;\n if (!root) return;\n\n const applySelectLabel = () => {\n root.querySelectorAll('select.codejar-select').forEach((element) => {\n if (!element.getAttribute('aria-label')) {\n element.setAttribute('aria-label', 'Code editor language');\n }\n });\n };\n\n applySelectLabel();\n const observer = new MutationObserver(() => applySelectLabel());\n observer.observe(root, { childList: true, subtree: true });\n return () => observer.disconnect();\n }, []);\n\n useEffect(() => {\n if (!editorRef.current) return;\n\n // Initialize the editor\n const editor = CoreEditor.create({\n element: editorRef.current,\n uri: 'file:///untitled.ts',\n assetLoad: createAssetLoad('/kerebron-wasm'),\n editorKits: [new CodeEditorKit(lang)],\n });\n\n editorInstance.current = editor;\n\n // Surface edits to callers.\n const onTransaction = async () => {\n if (!editorInstance.current) return;\n\n try {\n const buffer = await editorInstance.current.saveDocument('text/plain');\n onChangeRef.current?.(new globalThis.TextDecoder().decode(buffer));\n } catch (err) {\n console.error('Failed to read code:', err);\n }\n };\n\n editor.addEventListener('transaction', onTransaction);\n\n // Seed initial content on mount.\n if (value) {\n editor\n .loadDocumentText('text/plain', value)\n .catch((err) => console.error('Failed to load code:', err));\n }\n\n // Cleanup on unmount\n return () => {\n editor.removeEventListener('transaction', onTransaction);\n editor.destroy();\n };\n // Initial `value`/`lang` are intentionally only applied on mount.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <div>\n <div>\n <div ref={editorRef} className=\"kb-component\" />\n </div>\n </div>\n );\n};\n\nCodeEditor.displayName = 'CodeEditor';\n\nexport { CodeEditor };\n"]}
@@ -1,5 +1,36 @@
1
1
  import React__default from 'react';
2
2
 
3
+ /**
4
+ * Editor kit assembly for {@link RichEditor}, for both plain and collaborative
5
+ * (Yjs) mode.
6
+ *
7
+ * Both modes start from {@link AdvancedEditorKit} and drop the extensions that
8
+ * are unsafe for our usage — see {@link unsafeExtensions} — then collaborative
9
+ * mode adds the Yjs pieces on top.
10
+ *
11
+ * The Yjs pieces live in `collabKit.ts` behind a dynamic `import()`, so
12
+ * `@kerebron/extension-yjs`, `yjs` and `y-protocols` remain truly optional
13
+ * peers — plain-mode consumers never load them.
14
+ */
15
+
16
+ interface CollabConfig {
17
+ /** Room id — one shared document per room (e.g. a post id). */
18
+ room: string;
19
+ /**
20
+ * WebSocket base URL for the Yjs relay. Defaults to
21
+ * `<ws|wss>://<location.host>/yjs`. The room id is appended by the provider.
22
+ */
23
+ wsUrl?: string;
24
+ /** Extra query params for the socket (e.g. `{ token }` for auth). */
25
+ params?: Record<string, string>;
26
+ /**
27
+ * Custom WebSocket implementation handed to the Yjs provider — e.g. a
28
+ * loopback socket for demos/tests, or a polyfill outside the browser.
29
+ * Defaults to `globalThis.WebSocket`.
30
+ */
31
+ WebSocketPolyfill?: typeof globalThis.WebSocket;
32
+ }
33
+
3
34
  interface RichEditorProps {
4
35
  /** Initial markdown content to load into the editor. */
5
36
  value?: string;
@@ -7,6 +38,13 @@ interface RichEditorProps {
7
38
  onChange?: (value: string) => void;
8
39
  /** Whether to render the live markdown output preview. Defaults to `false`. */
9
40
  showPreview?: boolean;
41
+ /**
42
+ * Enable live collaborative editing (Yjs) for the given room. When set, the
43
+ * editor connects to the `/yjs` websocket relay and every peer in the same
44
+ * `room` co-edits one shared document. Uncontrolled like `value` — remount via
45
+ * `key` to switch rooms.
46
+ */
47
+ collab?: CollabConfig;
10
48
  }
11
49
  declare const RichEditor: React__default.FC<RichEditorProps>;
12
50
 
@@ -20,4 +58,4 @@ interface CodeEditorProps {
20
58
  }
21
59
  declare const CodeEditor: React__default.FC<CodeEditorProps>;
22
60
 
23
- export { CodeEditor, type CodeEditorProps, RichEditor, type RichEditorProps };
61
+ export { CodeEditor, type CodeEditorProps, type CollabConfig, RichEditor, type RichEditorProps };
@@ -1,5 +1,36 @@
1
1
  import React__default from 'react';
2
2
 
3
+ /**
4
+ * Editor kit assembly for {@link RichEditor}, for both plain and collaborative
5
+ * (Yjs) mode.
6
+ *
7
+ * Both modes start from {@link AdvancedEditorKit} and drop the extensions that
8
+ * are unsafe for our usage — see {@link unsafeExtensions} — then collaborative
9
+ * mode adds the Yjs pieces on top.
10
+ *
11
+ * The Yjs pieces live in `collabKit.ts` behind a dynamic `import()`, so
12
+ * `@kerebron/extension-yjs`, `yjs` and `y-protocols` remain truly optional
13
+ * peers — plain-mode consumers never load them.
14
+ */
15
+
16
+ interface CollabConfig {
17
+ /** Room id — one shared document per room (e.g. a post id). */
18
+ room: string;
19
+ /**
20
+ * WebSocket base URL for the Yjs relay. Defaults to
21
+ * `<ws|wss>://<location.host>/yjs`. The room id is appended by the provider.
22
+ */
23
+ wsUrl?: string;
24
+ /** Extra query params for the socket (e.g. `{ token }` for auth). */
25
+ params?: Record<string, string>;
26
+ /**
27
+ * Custom WebSocket implementation handed to the Yjs provider — e.g. a
28
+ * loopback socket for demos/tests, or a polyfill outside the browser.
29
+ * Defaults to `globalThis.WebSocket`.
30
+ */
31
+ WebSocketPolyfill?: typeof globalThis.WebSocket;
32
+ }
33
+
3
34
  interface RichEditorProps {
4
35
  /** Initial markdown content to load into the editor. */
5
36
  value?: string;
@@ -7,6 +38,13 @@ interface RichEditorProps {
7
38
  onChange?: (value: string) => void;
8
39
  /** Whether to render the live markdown output preview. Defaults to `false`. */
9
40
  showPreview?: boolean;
41
+ /**
42
+ * Enable live collaborative editing (Yjs) for the given room. When set, the
43
+ * editor connects to the `/yjs` websocket relay and every peer in the same
44
+ * `room` co-edits one shared document. Uncontrolled like `value` — remount via
45
+ * `key` to switch rooms.
46
+ */
47
+ collab?: CollabConfig;
10
48
  }
11
49
  declare const RichEditor: React__default.FC<RichEditorProps>;
12
50
 
@@ -20,4 +58,4 @@ interface CodeEditorProps {
20
58
  }
21
59
  declare const CodeEditor: React__default.FC<CodeEditorProps>;
22
60
 
23
- export { CodeEditor, type CodeEditorProps, RichEditor, type RichEditorProps };
61
+ export { CodeEditor, type CodeEditorProps, type CollabConfig, RichEditor, type RichEditorProps };
package/dist/kerebron.js CHANGED
@@ -1,15 +1,40 @@
1
1
  import { useRef, useState, useEffect } from 'react';
2
2
  import { CoreEditor } from '@kerebron/editor';
3
- import { AdvancedEditorKit } from '@kerebron/editor-kits/AdvancedEditorKit';
4
3
  import { createAssetLoad } from '@kerebron/wasm/web';
4
+ import { AdvancedEditorKit } from '@kerebron/editor-kits/AdvancedEditorKit';
5
5
  import { jsxs, jsx } from 'react/jsx-runtime';
6
6
  import { CodeEditorKit } from '@kerebron/editor-kits/CodeEditorKit';
7
7
 
8
8
  // src/components/RichEditor/RichEditor.tsx
9
+ var unsafeExtensions = ["autocomplete", "hover"];
10
+ var SafeAdvancedEditorKit = class {
11
+ constructor(forCollab) {
12
+ this.forCollab = forCollab;
13
+ }
14
+ forCollab;
15
+ name = "advanced-editor";
16
+ getExtensions() {
17
+ const dropped = [...unsafeExtensions];
18
+ if (this.forCollab) dropped.push("history");
19
+ return new AdvancedEditorKit().getExtensions().filter(
20
+ (extension) => !("name" in extension && dropped.includes(extension.name))
21
+ );
22
+ }
23
+ };
24
+ async function createEditorKits(config) {
25
+ if (!config) return [new SafeAdvancedEditorKit(false)];
26
+ const { HuddleYjsKit, defaultWsUrl } = await import('./collabKit-QZL4P5T5.js');
27
+ const url = config.wsUrl ?? defaultWsUrl();
28
+ return [
29
+ new SafeAdvancedEditorKit(true),
30
+ new HuddleYjsKit(url, config.params ?? {}, config.WebSocketPolyfill)
31
+ ];
32
+ }
9
33
  var RichEditor = ({
10
34
  value = "",
11
35
  onChange,
12
- showPreview = false
36
+ showPreview = false,
37
+ collab
13
38
  }) => {
14
39
  const editorRef = useRef(null);
15
40
  const editorInstance = useRef(null);
@@ -18,13 +43,9 @@ var RichEditor = ({
18
43
  const [md, setMd] = useState("");
19
44
  useEffect(() => {
20
45
  if (!editorRef.current) return;
21
- const editor = CoreEditor.create({
22
- element: editorRef.current,
23
- uri: "file:///untitled.md",
24
- assetLoad: createAssetLoad("/kerebron-wasm"),
25
- editorKits: [new AdvancedEditorKit()]
26
- });
27
- editorInstance.current = editor;
46
+ const element = editorRef.current;
47
+ let disposed = false;
48
+ let editor = null;
28
49
  const onTransaction = async () => {
29
50
  if (!editorInstance.current) return;
30
51
  try {
@@ -36,15 +57,37 @@ var RichEditor = ({
36
57
  console.error("Failed to save markdown:", err);
37
58
  }
38
59
  };
39
- editor.addEventListener("transaction", onTransaction);
40
- if (value) {
41
- editor.loadDocumentText("text/x-markdown", value).then(() => onTransaction()).catch((err) => console.error("Failed to load markdown:", err));
42
- } else {
43
- void onTransaction();
44
- }
60
+ const setup = async () => {
61
+ const editorKits = await createEditorKits(collab);
62
+ if (disposed) return;
63
+ editor = CoreEditor.create({
64
+ element,
65
+ uri: "file:///untitled.md",
66
+ assetLoad: createAssetLoad("/kerebron-wasm"),
67
+ editorKits
68
+ });
69
+ editorInstance.current = editor;
70
+ editor.addEventListener("transaction", onTransaction);
71
+ const joinRoom = () => {
72
+ if (collab && editor && !disposed) {
73
+ editor.run.changeRoom?.(collab.room);
74
+ }
75
+ };
76
+ if (value) {
77
+ await editor.loadDocumentText("text/x-markdown", value);
78
+ await onTransaction();
79
+ joinRoom();
80
+ } else {
81
+ void onTransaction();
82
+ joinRoom();
83
+ }
84
+ };
85
+ setup().catch((err) => console.error("Failed to set up editor:", err));
45
86
  return () => {
46
- editor.removeEventListener("transaction", onTransaction);
47
- editor.destroy();
87
+ disposed = true;
88
+ editorInstance.current = null;
89
+ editor?.removeEventListener("transaction", onTransaction);
90
+ editor?.destroy();
48
91
  };
49
92
  }, []);
50
93
  return /* @__PURE__ */ jsxs("div", { children: [
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/RichEditor/RichEditor.tsx","../src/components/RichEditor/CodeEditor.tsx"],"names":["useRef","useEffect","CoreEditor","createAssetLoad","jsx"],"mappings":"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","file":"kerebron.js","sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\n\nimport { CoreEditor } from '@kerebron/editor';\nimport { AdvancedEditorKit } from '@kerebron/editor-kits/AdvancedEditorKit';\nimport { createAssetLoad } from '@kerebron/wasm/web';\n\nexport interface RichEditorProps {\n /** Initial markdown content to load into the editor. */\n value?: string;\n /** Called with the editor's markdown content whenever it changes. */\n onChange?: (value: string) => void;\n /** Whether to render the live markdown output preview. Defaults to `false`. */\n showPreview?: boolean;\n}\n\nconst RichEditor: React.FC<RichEditorProps> = ({\n value = '',\n onChange,\n showPreview = false,\n}) => {\n const editorRef = useRef<HTMLDivElement>(null);\n const editorInstance = useRef<CoreEditor | null>(null);\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n const [md, setMd] = useState<string>('');\n\n useEffect(() => {\n if (!editorRef.current) return;\n\n // Initialize the editor\n const editor = CoreEditor.create({\n element: editorRef.current,\n uri: 'file:///untitled.md',\n assetLoad: createAssetLoad('/kerebron-wasm'),\n editorKits: [new AdvancedEditorKit()],\n });\n\n editorInstance.current = editor;\n\n // Listen to transactions and update markdown preview\n const onTransaction = async () => {\n if (!editorInstance.current) return;\n\n try {\n const buffer =\n await editorInstance.current.saveDocument('text/x-markdown');\n const markdown = new globalThis.TextDecoder().decode(buffer);\n setMd(markdown);\n onChangeRef.current?.(markdown);\n } catch (err) {\n console.error('Failed to save markdown:', err);\n }\n };\n\n editor.addEventListener('transaction', onTransaction);\n\n // Seed initial content, then populate the preview once on mount.\n if (value) {\n editor\n .loadDocumentText('text/x-markdown', value)\n .then(() => onTransaction())\n .catch((err) => console.error('Failed to load markdown:', err));\n } else {\n void onTransaction();\n }\n\n // Cleanup on unmount\n return () => {\n editor.removeEventListener('transaction', onTransaction);\n editor.destroy();\n };\n // Initial `value` is intentionally only applied on mount (uncontrolled).\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <div>\n <div>\n <div ref={editorRef} className=\"kb-component\" />\n </div>\n\n {showPreview && (\n <div>\n <div>\n <h5>Markdown Output</h5>\n <pre>{md}</pre>\n </div>\n </div>\n )}\n </div>\n );\n};\n\nRichEditor.displayName = 'RichEditor';\n\nexport { RichEditor };\n","import React, { useEffect, useRef } from 'react';\n\nimport { CoreEditor } from '@kerebron/editor';\nimport { CodeEditorKit } from '@kerebron/editor-kits/CodeEditorKit';\nimport { createAssetLoad } from '@kerebron/wasm/web';\n\nexport interface CodeEditorProps {\n /** Initial source code to load into the editor. */\n value?: string;\n /** Called with the editor's contents whenever they change. */\n onChange?: (value: string) => void;\n /** Language/grammar to use for syntax highlighting. Defaults to `typescript`. */\n lang?: string;\n}\n\nconst CodeEditor: React.FC<CodeEditorProps> = ({\n value = '',\n onChange,\n lang = 'typescript',\n}) => {\n const editorRef = useRef<HTMLDivElement>(null);\n const editorInstance = useRef<CoreEditor | null>(null);\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n useEffect(() => {\n const root = editorRef.current;\n if (!root) return;\n\n const applySelectLabel = () => {\n root.querySelectorAll('select.codejar-select').forEach((element) => {\n if (!element.getAttribute('aria-label')) {\n element.setAttribute('aria-label', 'Code editor language');\n }\n });\n };\n\n applySelectLabel();\n const observer = new MutationObserver(() => applySelectLabel());\n observer.observe(root, { childList: true, subtree: true });\n return () => observer.disconnect();\n }, []);\n\n useEffect(() => {\n if (!editorRef.current) return;\n\n // Initialize the editor\n const editor = CoreEditor.create({\n element: editorRef.current,\n uri: 'file:///untitled.ts',\n assetLoad: createAssetLoad('/kerebron-wasm'),\n editorKits: [new CodeEditorKit(lang)],\n });\n\n editorInstance.current = editor;\n\n // Surface edits to callers.\n const onTransaction = async () => {\n if (!editorInstance.current) return;\n\n try {\n const buffer = await editorInstance.current.saveDocument('text/plain');\n onChangeRef.current?.(new globalThis.TextDecoder().decode(buffer));\n } catch (err) {\n console.error('Failed to read code:', err);\n }\n };\n\n editor.addEventListener('transaction', onTransaction);\n\n // Seed initial content on mount.\n if (value) {\n editor\n .loadDocumentText('text/plain', value)\n .catch((err) => console.error('Failed to load code:', err));\n }\n\n // Cleanup on unmount\n return () => {\n editor.removeEventListener('transaction', onTransaction);\n editor.destroy();\n };\n // Initial `value`/`lang` are intentionally only applied on mount.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <div>\n <div>\n <div ref={editorRef} className=\"kb-component\" />\n </div>\n </div>\n );\n};\n\nCodeEditor.displayName = 'CodeEditor';\n\nexport { CodeEditor };\n"]}
1
+ {"version":3,"sources":["../src/components/RichEditor/editorKits.ts","../src/components/RichEditor/RichEditor.tsx","../src/components/RichEditor/CodeEditor.tsx"],"names":["useRef","useEffect","CoreEditor","createAssetLoad","jsx"],"mappings":";;;;;;;;AAqDA,IAAM,gBAAA,GAAmB,CAAC,cAAA,EAAgB,OAAO,CAAA;AAIjD,IAAM,wBAAN,MAAiD;AAAA,EAE/C,YAA6B,SAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA;AAAA,EAAqB;AAAA,EAArB,SAAA;AAAA,EAD7B,IAAA,GAAO,iBAAA;AAAA,EAGP,aAAA,GAAgB;AACd,IAAA,MAAM,OAAA,GAAoB,CAAC,GAAG,gBAAgB,CAAA;AAC9C,IAAA,IAAI,IAAA,CAAK,SAAA,EAAW,OAAA,CAAQ,IAAA,CAAK,SAAS,CAAA;AAE1C,IAAA,OAAO,IAAI,iBAAA,EAAkB,CAC1B,aAAA,EAAc,CACd,MAAA;AAAA,MACC,CAAC,cACC,EAAE,MAAA,IAAU,aAAa,OAAA,CAAQ,QAAA,CAAS,UAAU,IAAI,CAAA;AAAA,KAC5D;AAAA,EACJ;AACF,CAAA;AAWA,eAAsB,iBACpB,MAAA,EACsB;AACtB,EAAA,IAAI,CAAC,MAAA,EAAQ,OAAO,CAAC,IAAI,qBAAA,CAAsB,KAAK,CAAC,CAAA;AAErD,EAAA,MAAM,EAAE,YAAA,EAAc,YAAA,EAAa,GAAI,MAAM,OAAO,yBAAa,CAAA;AACjE,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,KAAA,IAAS,YAAA,EAAa;AACzC,EAAA,OAAO;AAAA,IACL,IAAI,sBAAsB,IAAI,CAAA;AAAA,IAC9B,IAAI,aAAa,GAAA,EAAK,MAAA,CAAO,UAAU,EAAC,EAAG,OAAO,iBAAiB;AAAA,GACrE;AACF;ACrEA,IAAM,aAAwC,CAAC;AAAA,EAC7C,KAAA,GAAQ,EAAA;AAAA,EACR,QAAA;AAAA,EACA,WAAA,GAAc,KAAA;AAAA,EACd;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,SAAA,GAAY,OAAuB,IAAI,CAAA;AAC7C,EAAA,MAAM,cAAA,GAAiB,OAA0B,IAAI,CAAA;AACrD,EAAA,MAAM,WAAA,GAAc,OAAO,QAAQ,CAAA;AACnC,EAAA,WAAA,CAAY,OAAA,GAAU,QAAA;AAEtB,EAAA,MAAM,CAAC,EAAA,EAAI,KAAK,CAAA,GAAI,SAAiB,EAAE,CAAA;AAEvC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,UAAU,OAAA,EAAS;AACxB,IAAA,MAAM,UAAU,SAAA,CAAU,OAAA;AAI1B,IAAA,IAAI,QAAA,GAAW,KAAA;AACf,IAAA,IAAI,MAAA,GAA4B,IAAA;AAGhC,IAAA,MAAM,gBAAgB,YAAY;AAChC,MAAA,IAAI,CAAC,eAAe,OAAA,EAAS;AAE7B,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GACJ,MAAM,cAAA,CAAe,OAAA,CAAQ,aAAa,iBAAiB,CAAA;AAC7D,QAAA,MAAM,WAAW,IAAI,UAAA,CAAW,WAAA,EAAY,CAAE,OAAO,MAAM,CAAA;AAC3D,QAAA,KAAA,CAAM,QAAQ,CAAA;AACd,QAAA,WAAA,CAAY,UAAU,QAAQ,CAAA;AAAA,MAChC,SAAS,GAAA,EAAK;AACZ,QAAA,OAAA,CAAQ,KAAA,CAAM,4BAA4B,GAAG,CAAA;AAAA,MAC/C;AAAA,IACF,CAAA;AAKA,IAAA,MAAM,QAAQ,YAAY;AACxB,MAAA,MAAM,UAAA,GAAa,MAAM,gBAAA,CAAiB,MAAM,CAAA;AAChD,MAAA,IAAI,QAAA,EAAU;AAEd,MAAA,MAAA,GAAS,WAAW,MAAA,CAAO;AAAA,QACzB,OAAA;AAAA,QACA,GAAA,EAAK,qBAAA;AAAA,QACL,SAAA,EAAW,gBAAgB,gBAAgB,CAAA;AAAA,QAC3C;AAAA,OACD,CAAA;AAED,MAAA,cAAA,CAAe,OAAA,GAAU,MAAA;AACzB,MAAA,MAAA,CAAO,gBAAA,CAAiB,eAAe,aAAa,CAAA;AASpD,MAAA,MAAM,WAAW,MAAM;AACrB,QAAA,IAAI,MAAA,IAAU,MAAA,IAAU,CAAC,QAAA,EAAU;AACjC,UACE,MAAA,CAAO,GAAA,CACP,UAAA,GAAa,MAAA,CAAO,IAAI,CAAA;AAAA,QAC5B;AAAA,MACF,CAAA;AAEA,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,MAAM,MAAA,CAAO,gBAAA,CAAiB,iBAAA,EAAmB,KAAK,CAAA;AACtD,QAAA,MAAM,aAAA,EAAc;AACpB,QAAA,QAAA,EAAS;AAAA,MACX,CAAA,MAAO;AACL,QAAA,KAAK,aAAA,EAAc;AACnB,QAAA,QAAA,EAAS;AAAA,MACX;AAAA,IACF,CAAA;AAEA,IAAA,KAAA,EAAM,CAAE,MAAM,CAAC,GAAA,KAAQ,QAAQ,KAAA,CAAM,0BAAA,EAA4B,GAAG,CAAC,CAAA;AAGrE,IAAA,OAAO,MAAM;AACX,MAAA,QAAA,GAAW,IAAA;AACX,MAAA,cAAA,CAAe,OAAA,GAAU,IAAA;AACzB,MAAA,MAAA,EAAQ,mBAAA,CAAoB,eAAe,aAAa,CAAA;AACxD,MAAA,MAAA,EAAQ,OAAA,EAAQ;AAAA,IAClB,CAAA;AAAA,EAIF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,4BACG,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,SACC,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,KAAK,SAAA,EAAW,SAAA,EAAU,gBAAe,CAAA,EAChD,CAAA;AAAA,IAEC,WAAA,oBACC,GAAA,CAAC,KAAA,EAAA,EACC,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,QAAG,QAAA,EAAA,iBAAA,EAAe,CAAA;AAAA,sBACnB,GAAA,CAAC,SAAK,QAAA,EAAA,EAAA,EAAG;AAAA,KAAA,EACX,CAAA,EACF;AAAA,GAAA,EAEJ,CAAA;AAEJ;AAEA,UAAA,CAAW,WAAA,GAAc,YAAA;ACzHzB,IAAM,aAAwC,CAAC;AAAA,EAC7C,KAAA,GAAQ,EAAA;AAAA,EACR,QAAA;AAAA,EACA,IAAA,GAAO;AACT,CAAA,KAAM;AACJ,EAAA,MAAM,SAAA,GAAYA,OAAuB,IAAI,CAAA;AAC7C,EAAA,MAAM,cAAA,GAAiBA,OAA0B,IAAI,CAAA;AACrD,EAAA,MAAM,WAAA,GAAcA,OAAO,QAAQ,CAAA;AACnC,EAAA,WAAA,CAAY,OAAA,GAAU,QAAA;AAEtB,EAAAC,UAAU,MAAM;AACd,IAAA,MAAM,OAAO,SAAA,CAAU,OAAA;AACvB,IAAA,IAAI,CAAC,IAAA,EAAM;AAEX,IAAA,MAAM,mBAAmB,MAAM;AAC7B,MAAA,IAAA,CAAK,gBAAA,CAAiB,uBAAuB,CAAA,CAAE,OAAA,CAAQ,CAAC,OAAA,KAAY;AAClE,QAAA,IAAI,CAAC,OAAA,CAAQ,YAAA,CAAa,YAAY,CAAA,EAAG;AACvC,UAAA,OAAA,CAAQ,YAAA,CAAa,cAAc,sBAAsB,CAAA;AAAA,QAC3D;AAAA,MACF,CAAC,CAAA;AAAA,IACH,CAAA;AAEA,IAAA,gBAAA,EAAiB;AACjB,IAAA,MAAM,QAAA,GAAW,IAAI,gBAAA,CAAiB,MAAM,kBAAkB,CAAA;AAC9D,IAAA,QAAA,CAAS,QAAQ,IAAA,EAAM,EAAE,WAAW,IAAA,EAAM,OAAA,EAAS,MAAM,CAAA;AACzD,IAAA,OAAO,MAAM,SAAS,UAAA,EAAW;AAAA,EACnC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAAA,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,UAAU,OAAA,EAAS;AAGxB,IAAA,MAAM,MAAA,GAASC,WAAW,MAAA,CAAO;AAAA,MAC/B,SAAS,SAAA,CAAU,OAAA;AAAA,MACnB,GAAA,EAAK,qBAAA;AAAA,MACL,SAAA,EAAWC,gBAAgB,gBAAgB,CAAA;AAAA,MAC3C,UAAA,EAAY,CAAC,IAAI,aAAA,CAAc,IAAI,CAAC;AAAA,KACrC,CAAA;AAED,IAAA,cAAA,CAAe,OAAA,GAAU,MAAA;AAGzB,IAAA,MAAM,gBAAgB,YAAY;AAChC,MAAA,IAAI,CAAC,eAAe,OAAA,EAAS;AAE7B,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,MAAM,cAAA,CAAe,OAAA,CAAQ,aAAa,YAAY,CAAA;AACrE,QAAA,WAAA,CAAY,UAAU,IAAI,UAAA,CAAW,aAAY,CAAE,MAAA,CAAO,MAAM,CAAC,CAAA;AAAA,MACnE,SAAS,GAAA,EAAK;AACZ,QAAA,OAAA,CAAQ,KAAA,CAAM,wBAAwB,GAAG,CAAA;AAAA,MAC3C;AAAA,IACF,CAAA;AAEA,IAAA,MAAA,CAAO,gBAAA,CAAiB,eAAe,aAAa,CAAA;AAGpD,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,MAAA,CACG,gBAAA,CAAiB,YAAA,EAAc,KAAK,CAAA,CACpC,KAAA,CAAM,CAAC,GAAA,KAAQ,OAAA,CAAQ,KAAA,CAAM,sBAAA,EAAwB,GAAG,CAAC,CAAA;AAAA,IAC9D;AAGA,IAAA,OAAO,MAAM;AACX,MAAA,MAAA,CAAO,mBAAA,CAAoB,eAAe,aAAa,CAAA;AACvD,MAAA,MAAA,CAAO,OAAA,EAAQ;AAAA,IACjB,CAAA;AAAA,EAGF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,uBACEC,GAAAA,CAAC,KAAA,EAAA,EACC,QAAA,kBAAAA,IAAC,KAAA,EAAA,EACC,QAAA,kBAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,SAAA,EAAW,SAAA,EAAU,cAAA,EAAe,GAChD,CAAA,EACF,CAAA;AAEJ;AAEA,UAAA,CAAW,WAAA,GAAc,YAAA","file":"kerebron.js","sourcesContent":["/**\n * Editor kit assembly for {@link RichEditor}, for both plain and collaborative\n * (Yjs) mode.\n *\n * Both modes start from {@link AdvancedEditorKit} and drop the extensions that\n * are unsafe for our usage — see {@link unsafeExtensions} — then collaborative\n * mode adds the Yjs pieces on top.\n *\n * The Yjs pieces live in `collabKit.ts` behind a dynamic `import()`, so\n * `@kerebron/extension-yjs`, `yjs` and `y-protocols` remain truly optional\n * peers — plain-mode consumers never load them.\n */\nimport type { EditorKit } from '@kerebron/editor';\nimport { AdvancedEditorKit } from '@kerebron/editor-kits/AdvancedEditorKit';\n\nexport interface CollabConfig {\n /** Room id — one shared document per room (e.g. a post id). */\n room: string;\n /**\n * WebSocket base URL for the Yjs relay. Defaults to\n * `<ws|wss>://<location.host>/yjs`. The room id is appended by the provider.\n */\n wsUrl?: string;\n /** Extra query params for the socket (e.g. `{ token }` for auth). */\n params?: Record<string, string>;\n /**\n * Custom WebSocket implementation handed to the Yjs provider — e.g. a\n * loopback socket for demos/tests, or a polyfill outside the browser.\n * Defaults to `globalThis.WebSocket`.\n */\n WebSocketPolyfill?: typeof globalThis.WebSocket;\n}\n\n/**\n * Extensions dropped from {@link AdvancedEditorKit}, and why.\n *\n * `autocomplete` and `hover` debounce their DOM handlers (200ms) and then call\n * `dispatchMeta`, which reads `this.editor.state` with no guard that the editor\n * is still alive. Any teardown or document swap inside that debounce window\n * lands the deferred call on a dead view and throws\n * `null.matchesNode()` inside ProseMirror's `EditorView.updateStateInner`,\n * leaving the view permanently broken. Two ways to hit it:\n * - remount (e.g. a `key` change) while the pointer is over the editor, which\n * fires the debounced `onMouseLeave` after the view is destroyed;\n * - a Yjs remote update replacing the document tree under a pending callback.\n * The first applies to *every* editor, so both extensions come out in both\n * modes. No functional cost — autocomplete popups and node-hover tooltips are\n * compositor conveniences, not required for editing.\n *\n * `history` is collab-only: ExtensionYjs supplies its own CRDT-aware undo/redo\n * and the editor throws `Extension conflict: yjs vs history` if both are\n * present. Plain mode keeps it, so undo/redo still works there.\n */\nconst unsafeExtensions = ['autocomplete', 'hover'] as const;\n\n/** {@link AdvancedEditorKit} minus {@link unsafeExtensions} (and, for collab\n * mode, minus `history`). */\nclass SafeAdvancedEditorKit implements EditorKit {\n name = 'advanced-editor';\n constructor(private readonly forCollab: boolean) {}\n\n getExtensions() {\n const dropped: string[] = [...unsafeExtensions];\n if (this.forCollab) dropped.push('history');\n\n return new AdvancedEditorKit()\n .getExtensions()\n .filter(\n (extension) =>\n !('name' in extension && dropped.includes(extension.name))\n );\n }\n}\n\n/** MarkYChange + ExtensionYjs live in `collabKit.ts` (lazy-loaded). */\n\n/**\n * Build the editor kits for a session. Pass `config` to join a collaborative\n * room; omit it for a plain local editor.\n *\n * Async because collaborative mode lazy-loads the Yjs kit (and its optional\n * peer deps) on first use; plain mode resolves immediately.\n */\nexport async function createEditorKits(\n config?: CollabConfig\n): Promise<EditorKit[]> {\n if (!config) return [new SafeAdvancedEditorKit(false)];\n\n const { HuddleYjsKit, defaultWsUrl } = await import('./collabKit');\n const url = config.wsUrl ?? defaultWsUrl();\n return [\n new SafeAdvancedEditorKit(true),\n new HuddleYjsKit(url, config.params ?? {}, config.WebSocketPolyfill),\n ];\n}\n","import React, { useEffect, useRef, useState } from 'react';\n\nimport { CoreEditor } from '@kerebron/editor';\nimport { createAssetLoad } from '@kerebron/wasm/web';\n\nimport { createEditorKits, type CollabConfig } from './editorKits';\n\nexport type { CollabConfig } from './editorKits';\n\nexport interface RichEditorProps {\n /** Initial markdown content to load into the editor. */\n value?: string;\n /** Called with the editor's markdown content whenever it changes. */\n onChange?: (value: string) => void;\n /** Whether to render the live markdown output preview. Defaults to `false`. */\n showPreview?: boolean;\n /**\n * Enable live collaborative editing (Yjs) for the given room. When set, the\n * editor connects to the `/yjs` websocket relay and every peer in the same\n * `room` co-edits one shared document. Uncontrolled like `value` — remount via\n * `key` to switch rooms.\n */\n collab?: CollabConfig;\n}\n\nconst RichEditor: React.FC<RichEditorProps> = ({\n value = '',\n onChange,\n showPreview = false,\n collab,\n}) => {\n const editorRef = useRef<HTMLDivElement>(null);\n const editorInstance = useRef<CoreEditor | null>(null);\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n const [md, setMd] = useState<string>('');\n\n useEffect(() => {\n if (!editorRef.current) return;\n const element = editorRef.current;\n\n // Set on cleanup so async continuations (kit loading and the\n // `loadDocumentText` chain) don't touch the editor after `destroy()`.\n let disposed = false;\n let editor: CoreEditor | null = null;\n\n // Listen to transactions and update markdown preview\n const onTransaction = async () => {\n if (!editorInstance.current) return;\n\n try {\n const buffer =\n await editorInstance.current.saveDocument('text/x-markdown');\n const markdown = new globalThis.TextDecoder().decode(buffer);\n setMd(markdown);\n onChangeRef.current?.(markdown);\n } catch (err) {\n console.error('Failed to save markdown:', err);\n }\n };\n\n // Initialize the editor. Both modes drop the teardown-unsafe extensions;\n // collaborative mode additionally swaps `history` for the Yjs CRDT sync\n // and lazy-loads the Yjs kit (see `editorKits.ts` for why).\n const setup = async () => {\n const editorKits = await createEditorKits(collab);\n if (disposed) return;\n\n editor = CoreEditor.create({\n element,\n uri: 'file:///untitled.md',\n assetLoad: createAssetLoad('/kerebron-wasm'),\n editorKits,\n });\n\n editorInstance.current = editor;\n editor.addEventListener('transaction', onTransaction);\n\n // Seed initial content, then populate the preview once on mount.\n //\n // In collaborative mode we still load the local markdown first, then join\n // the room: the Yjs binding seeds an *empty* shared document from this\n // content on the first join, and overwrites the editor with the shared\n // content when the room already has edits — so the stored markdown is the\n // starting point without ever double-inserting.\n const joinRoom = () => {\n if (collab && editor && !disposed) {\n (\n editor.run as Record<string, (...args: unknown[]) => boolean>\n ).changeRoom?.(collab.room);\n }\n };\n\n if (value) {\n await editor.loadDocumentText('text/x-markdown', value);\n await onTransaction();\n joinRoom();\n } else {\n void onTransaction();\n joinRoom();\n }\n };\n\n setup().catch((err) => console.error('Failed to set up editor:', err));\n\n // Cleanup on unmount\n return () => {\n disposed = true;\n editorInstance.current = null; // makes onTransaction's guard effective\n editor?.removeEventListener('transaction', onTransaction);\n editor?.destroy();\n };\n // Initial `value`/`collab` are intentionally only applied on mount\n // (uncontrolled). Remount via `key` to switch rooms.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <div>\n <div>\n <div ref={editorRef} className=\"kb-component\" />\n </div>\n\n {showPreview && (\n <div>\n <div>\n <h5>Markdown Output</h5>\n <pre>{md}</pre>\n </div>\n </div>\n )}\n </div>\n );\n};\n\nRichEditor.displayName = 'RichEditor';\n\nexport { RichEditor };\n","import React, { useEffect, useRef } from 'react';\n\nimport { CoreEditor } from '@kerebron/editor';\nimport { CodeEditorKit } from '@kerebron/editor-kits/CodeEditorKit';\nimport { createAssetLoad } from '@kerebron/wasm/web';\n\nexport interface CodeEditorProps {\n /** Initial source code to load into the editor. */\n value?: string;\n /** Called with the editor's contents whenever they change. */\n onChange?: (value: string) => void;\n /** Language/grammar to use for syntax highlighting. Defaults to `typescript`. */\n lang?: string;\n}\n\nconst CodeEditor: React.FC<CodeEditorProps> = ({\n value = '',\n onChange,\n lang = 'typescript',\n}) => {\n const editorRef = useRef<HTMLDivElement>(null);\n const editorInstance = useRef<CoreEditor | null>(null);\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n useEffect(() => {\n const root = editorRef.current;\n if (!root) return;\n\n const applySelectLabel = () => {\n root.querySelectorAll('select.codejar-select').forEach((element) => {\n if (!element.getAttribute('aria-label')) {\n element.setAttribute('aria-label', 'Code editor language');\n }\n });\n };\n\n applySelectLabel();\n const observer = new MutationObserver(() => applySelectLabel());\n observer.observe(root, { childList: true, subtree: true });\n return () => observer.disconnect();\n }, []);\n\n useEffect(() => {\n if (!editorRef.current) return;\n\n // Initialize the editor\n const editor = CoreEditor.create({\n element: editorRef.current,\n uri: 'file:///untitled.ts',\n assetLoad: createAssetLoad('/kerebron-wasm'),\n editorKits: [new CodeEditorKit(lang)],\n });\n\n editorInstance.current = editor;\n\n // Surface edits to callers.\n const onTransaction = async () => {\n if (!editorInstance.current) return;\n\n try {\n const buffer = await editorInstance.current.saveDocument('text/plain');\n onChangeRef.current?.(new globalThis.TextDecoder().decode(buffer));\n } catch (err) {\n console.error('Failed to read code:', err);\n }\n };\n\n editor.addEventListener('transaction', onTransaction);\n\n // Seed initial content on mount.\n if (value) {\n editor\n .loadDocumentText('text/plain', value)\n .catch((err) => console.error('Failed to load code:', err));\n }\n\n // Cleanup on unmount\n return () => {\n editor.removeEventListener('transaction', onTransaction);\n editor.destroy();\n };\n // Initial `value`/`lang` are intentionally only applied on mount.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <div>\n <div>\n <div ref={editorRef} className=\"kb-component\" />\n </div>\n </div>\n );\n};\n\nCodeEditor.displayName = 'CodeEditor';\n\nexport { CodeEditor };\n"]}