@jackuait/blok 0.10.0-beta.6 → 0.10.0-beta.8

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 (448) hide show
  1. package/codemod/migrate-editorjs-to-blok.js +0 -2
  2. package/codemod/test.js +0 -6
  3. package/dist/blok.mjs +2 -2
  4. package/dist/chunks/_basePickBy-DISiGhsr.mjs +410 -0
  5. package/dist/chunks/_baseUniq-gAuHRtRF.mjs +1045 -0
  6. package/dist/chunks/_getTag-Aj56Wgor.mjs +26 -0
  7. package/dist/chunks/arc-D-pL2Ftf.mjs +80 -0
  8. package/dist/chunks/architecture-YZFGNWBL-CuqTb_ae.mjs +3 -0
  9. package/dist/chunks/architectureDiagram-Q4EWVU46-DS7mqjL2.mjs +4066 -0
  10. package/dist/chunks/array-BsrkCVSZ.mjs +6 -0
  11. package/dist/chunks/blockDiagram-DXYQGD6D-BTtcn4NG.mjs +3259 -0
  12. package/dist/chunks/{blok-BdlR_lX6.mjs → blok-CRvF-xVm.mjs} +2142 -2171
  13. package/dist/chunks/c-C6JXJf5K.mjs +5 -0
  14. package/dist/chunks/c4Diagram-AHTNJAMY-Y4Dcwcoo.mjs +2956 -0
  15. package/dist/chunks/ccount-C9Y7nqDe.mjs +10 -0
  16. package/dist/chunks/channel-Cln-eWE0.mjs +5 -0
  17. package/dist/chunks/chunk-2KRD3SAO-DkM7qh-k.mjs +20 -0
  18. package/dist/chunks/chunk-336JU56O-B17AtzlK.mjs +49 -0
  19. package/dist/chunks/chunk-426QAEUC-D6UAVUog.mjs +13 -0
  20. package/dist/chunks/chunk-4BX2VUAB-CgIkjF7Z.mjs +19 -0
  21. package/dist/chunks/chunk-4TB4RGXK-BUP4eON3.mjs +3250 -0
  22. package/dist/chunks/chunk-55IACEB6-zZ-IgaSt.mjs +8 -0
  23. package/dist/chunks/chunk-5FUZZQ4R-DsZnJYxM.mjs +3786 -0
  24. package/dist/chunks/chunk-5PVQY5BW-CORl9dnu.mjs +1692 -0
  25. package/dist/chunks/chunk-67CJDMHE-m0UKdcSH.mjs +20 -0
  26. package/dist/chunks/chunk-7N4EOEYR-DKNajFZd.mjs +29 -0
  27. package/dist/chunks/chunk-AA7GKIK3-BeLhNzKa.mjs +24 -0
  28. package/dist/chunks/chunk-BSJP7CBP-CJExmx8a.mjs +83 -0
  29. package/dist/chunks/chunk-CIAEETIT-CTikoJ19.mjs +20 -0
  30. package/dist/chunks/{chunk-Byubey_H.mjs → chunk-D6kmoKXy.mjs} +5 -5
  31. package/dist/chunks/chunk-EDXVE4YY-DjInnnwb.mjs +26 -0
  32. package/dist/chunks/chunk-ENJZ2VHE-CIl5FRDA.mjs +566 -0
  33. package/dist/chunks/chunk-FMBD7UC4-DjV0W7UE.mjs +5 -0
  34. package/dist/chunks/chunk-FOC6F5B3-LmHCCWYY.mjs +20 -0
  35. package/dist/chunks/chunk-ICPOFSXX-BHZIN46A.mjs +3290 -0
  36. package/dist/chunks/chunk-K5T4RW27-BPZ6fFnW.mjs +16370 -0
  37. package/dist/chunks/chunk-KGLVRYIC-S1OQdW76.mjs +20 -0
  38. package/dist/chunks/chunk-LIHQZDEY-CjtyJlI6.mjs +55 -0
  39. package/dist/chunks/chunk-ORNJ4GCN-CdO0hAge.mjs +25 -0
  40. package/dist/chunks/chunk-OYMX7WX6-ApX8eV4o.mjs +2038 -0
  41. package/dist/chunks/chunk-QZHKN3VN-BGFuA6-k.mjs +12 -0
  42. package/dist/chunks/chunk-U2HBQHQK-B88ZUOTL.mjs +1875 -0
  43. package/dist/chunks/chunk-X2U36JSP-1VS5TyCr.mjs +68 -0
  44. package/dist/chunks/chunk-XPW4576I-BMupdrvo.mjs +1146 -0
  45. package/dist/chunks/chunk-YZCP3GAM-BQ7eEsm2.mjs +60 -0
  46. package/dist/chunks/chunk-ZZ45TVLE-D1xks9zd.mjs +33 -0
  47. package/dist/chunks/classDiagram-6PBFFD2Q-C59BZJxp.mjs +30 -0
  48. package/dist/chunks/classDiagram-v2-HSJHXN6E-7a0qeMsE.mjs +30 -0
  49. package/dist/chunks/clone-Ckjt1LtE.mjs +8 -0
  50. package/dist/chunks/{constants-Cp8O0UfP.mjs → constants-BOZ5plBi.mjs} +49 -50
  51. package/dist/chunks/core-Bm6DWt7D.mjs +4501 -0
  52. package/dist/chunks/cose-bilkent-S5V4N54A-Bpcs2jA_.mjs +2246 -0
  53. package/dist/chunks/cpp-BdjvAny0.mjs +16 -0
  54. package/dist/chunks/csharp-YHxeHpeH.mjs +3 -0
  55. package/dist/chunks/css-DdLevFaX.mjs +3 -0
  56. package/dist/chunks/cytoscape.esm-BvD8wo00.mjs +18108 -0
  57. package/dist/chunks/dagre-CGNbYTKq.mjs +1536 -0
  58. package/dist/chunks/dagre-KV5264BT-DUD9ikgN.mjs +298 -0
  59. package/dist/chunks/dart-DrPWqfcC.mjs +3 -0
  60. package/dist/chunks/defaultLocale-ChuSeAxU.mjs +201 -0
  61. package/dist/chunks/diagram-5BDNPKRD-CZGfTYEe.mjs +112 -0
  62. package/dist/chunks/diagram-G4DWMVQ6-CuS0-h95.mjs +546 -0
  63. package/dist/chunks/diagram-MMDJMWI5-C-AEApYz.mjs +234 -0
  64. package/dist/chunks/diagram-TYMM5635-CiwAJVMq.mjs +144 -0
  65. package/dist/chunks/dist-Ctq-pyfb.mjs +59 -0
  66. package/dist/chunks/dockerfile-C68ALcaN.mjs +3 -0
  67. package/dist/chunks/engine-javascript-CJpnSvzf.mjs +2373 -0
  68. package/dist/chunks/erDiagram-SMLLAGMA-DeH5yck2.mjs +1712 -0
  69. package/dist/chunks/flowDiagram-DWJPFMVM-Cr6dwmQ5.mjs +4175 -0
  70. package/dist/chunks/ganttDiagram-T4ZO3ILL-K-divBg_.mjs +3083 -0
  71. package/dist/chunks/gitGraph-7Q5UKJZL-Dl-vQzrq.mjs +3 -0
  72. package/dist/chunks/gitGraphDiagram-UUTBAWPF-UytPZv72.mjs +792 -0
  73. package/dist/chunks/go-Fm5N96DN.mjs +3 -0
  74. package/dist/chunks/graphlib-Cye9EPNq.mjs +223 -0
  75. package/dist/chunks/graphql-BSnqmqgO.mjs +11 -0
  76. package/dist/chunks/html-BLNeZvnp.mjs +10 -0
  77. package/dist/chunks/{i18next-loader-oDO9ZKUV.mjs → i18next-loader-CwsYu0n6.mjs} +2 -2
  78. package/dist/chunks/info-OMHHGYJF-BOejJvJR.mjs +3 -0
  79. package/dist/chunks/infoDiagram-42DDH7IO-DuYnDbF3.mjs +29 -0
  80. package/dist/chunks/init-C6T-mugb.mjs +15 -0
  81. package/dist/chunks/ishikawaDiagram-UXIWVN3A-CHc59dLn.mjs +719 -0
  82. package/dist/chunks/java-83DWBpzu.mjs +5 -0
  83. package/dist/chunks/javascript-CBgeF1Xx.mjs +3 -0
  84. package/dist/chunks/journeyDiagram-VCZTEJTY-CD25C4_n.mjs +885 -0
  85. package/dist/chunks/json-BI17y-1H.mjs +3 -0
  86. package/dist/chunks/kanban-definition-6JOO6SKY-CTCT6N_p.mjs +980 -0
  87. package/dist/chunks/{katex-NjLaA6AJ.mjs → katex-CmTPfM0f.mjs} +1 -1
  88. package/dist/chunks/kotlin-DjnvsrfO.mjs +3 -0
  89. package/dist/chunks/latex-24n3TcOR.mjs +5 -0
  90. package/dist/chunks/{lightweight-i18n-DTySD6f6.mjs → lightweight-i18n-Cvv8CWh4.mjs} +13 -0
  91. package/dist/chunks/line-Dct5pMmw.mjs +34 -0
  92. package/dist/chunks/linear-BRCpMvtr.mjs +289 -0
  93. package/dist/chunks/lua-DV0fuZWx.mjs +5 -0
  94. package/dist/chunks/markdown-BqQYT45f.mjs +3 -0
  95. package/dist/chunks/{mdast-util-math-yS0EygZV.mjs → mdast-util-math-BlK2Zu-1.mjs} +1 -1
  96. package/dist/chunks/mermaid-parser.core-CA3DKkuk.mjs +57 -0
  97. package/dist/chunks/mermaid-vF0cEnZ0.mjs +3 -0
  98. package/dist/chunks/mermaid.core-CA8nc1sZ.mjs +989 -0
  99. package/dist/{messages-BYQ769S5.mjs → chunks/messages-8IHf7ZP3.mjs} +26 -1
  100. package/dist/chunks/{messages-DRv4g-IA.mjs → messages-A_MkXDlG.mjs} +26 -1
  101. package/dist/chunks/{messages-vN4T4r67.mjs → messages-B0vPBsWq.mjs} +26 -1
  102. package/dist/chunks/{messages-BDXl53cy2.mjs → messages-B2N4fUi72.mjs} +26 -1
  103. package/dist/chunks/{messages-DopbvJlg.mjs → messages-B4UMuyjT.mjs} +31 -6
  104. package/dist/{messages-uCsQjz7M.mjs → chunks/messages-B9kmbUWV.mjs} +26 -1
  105. package/dist/{messages-JK9Okzsy2.mjs → chunks/messages-BA8Iv99Y2.mjs} +26 -1
  106. package/dist/chunks/{messages-yszqJukE.mjs → messages-BAsb5CgZ.mjs} +26 -1
  107. package/dist/{messages-CEEzfqMO2.mjs → chunks/messages-BDZA10kl2.mjs} +29 -4
  108. package/dist/{messages-BeI2HORe2.mjs → chunks/messages-BE6lHKwf.mjs} +26 -1
  109. package/dist/{messages--cUQf9JX.mjs → chunks/messages-BQYvBqm2.mjs} +27 -2
  110. package/dist/{messages-CsiGzUSP2.mjs → chunks/messages-BSghd0ez.mjs} +26 -1
  111. package/dist/chunks/{messages-BXn9Vzbx2.mjs → messages-BUVhHx0q2.mjs} +26 -1
  112. package/dist/chunks/{messages-5ArOv8cj.mjs → messages-BVjoM7P0.mjs} +26 -1
  113. package/dist/chunks/{messages-CvlMT1e62.mjs → messages-BXM80fdr2.mjs} +26 -1
  114. package/dist/chunks/{messages-BlcRm2I3.mjs → messages-BYlSMRkd.mjs} +26 -1
  115. package/dist/chunks/{messages-bmwto4UV.mjs → messages-BYxLFj7y.mjs} +26 -1
  116. package/dist/chunks/{messages-SSDr5fGF2.mjs → messages-BeFqtIrc2.mjs} +26 -1
  117. package/dist/{messages-CD8K1g_t2.mjs → chunks/messages-Bfnq1xv4.mjs} +26 -1
  118. package/dist/chunks/{messages-B5fKJXd6.mjs → messages-BhzzNkN-.mjs} +26 -1
  119. package/dist/{messages-Dq_v7slw2.mjs → chunks/messages-BjadX8jR2.mjs} +26 -1
  120. package/dist/{messages-x353UCBI.mjs → chunks/messages-Bp8qin1R.mjs} +26 -1
  121. package/dist/{messages-hrSlVSHp.mjs → chunks/messages-Bphq_Bt3.mjs} +33 -8
  122. package/dist/chunks/{messages-CF_PfacZ.mjs → messages-Bxvi1ebN.mjs} +26 -1
  123. package/dist/chunks/{messages-DdmWzF5M.mjs → messages-C0HvoMPb.mjs} +27 -2
  124. package/dist/chunks/{messages-C5aCWL7B.mjs → messages-C3aX3q0H.mjs} +26 -1
  125. package/dist/{messages-DbZsJAff.mjs → chunks/messages-C6Mpiacw.mjs} +26 -1
  126. package/dist/{messages-PvMdmlxI.mjs → chunks/messages-C7VGpihw.mjs} +28 -3
  127. package/dist/chunks/{messages-DGD6BiGd.mjs → messages-CKBhDGI3.mjs} +28 -3
  128. package/dist/chunks/{messages-BaoJwsEZ.mjs → messages-COO5xmcA.mjs} +26 -1
  129. package/dist/chunks/{messages-Dz3UhEco2.mjs → messages-CSJ_zb3a2.mjs} +26 -1
  130. package/dist/chunks/{messages-CjVPwkVy.mjs → messages-CSL-6xfb2.mjs} +26 -1
  131. package/dist/{messages-B4lhNMKm2.mjs → chunks/messages-CVdpweyf2.mjs} +28 -3
  132. package/dist/chunks/{messages-DQ5ng0_t2.mjs → messages-Cdf0W9H02.mjs} +26 -1
  133. package/dist/{messages-Bug6Du35.mjs → chunks/messages-Ck81cQkn2.mjs} +26 -1
  134. package/dist/chunks/{messages-DUGEqDEG.mjs → messages-Cmf6NhSC.mjs} +26 -1
  135. package/dist/chunks/{messages-BMq9k_lI.mjs → messages-Cs81Z_Bh.mjs} +26 -1
  136. package/dist/{messages-B3Yhiycb2.mjs → chunks/messages-Cu-Wevxs2.mjs} +27 -2
  137. package/dist/{messages-DIKCwGog.mjs → chunks/messages-D3zojZ94.mjs} +30 -5
  138. package/dist/{messages-Bdk4ocMI.mjs → chunks/messages-D55HRx5O2.mjs} +26 -1
  139. package/dist/{messages-CvvbLyTy2.mjs → chunks/messages-D9N2MvQx2.mjs} +26 -1
  140. package/dist/{messages-C5Uufygq.mjs → chunks/messages-DG-4DPmP.mjs} +26 -1
  141. package/dist/{messages-C8f1I5EQ2.mjs → chunks/messages-DGL1ySqb2.mjs} +27 -2
  142. package/dist/chunks/{messages-D8-N0FmU.mjs → messages-DJoNVjqP.mjs} +27 -2
  143. package/dist/chunks/{messages-CcyIKgGU.mjs → messages-DMVXnAYj.mjs} +30 -5
  144. package/dist/chunks/{messages-CZ5Sbf8U.mjs → messages-DOuS1Qge.mjs} +26 -1
  145. package/dist/chunks/{messages-BXSXk3oS2.mjs → messages-DWu1r4gc2.mjs} +28 -3
  146. package/dist/{messages-KqWQKmIu2.mjs → chunks/messages-DlLXpgWM2.mjs} +27 -2
  147. package/dist/{messages-DQN1y6E9.mjs → chunks/messages-DlonA3wa.mjs} +28 -3
  148. package/dist/chunks/{messages-DVKifYlq.mjs → messages-Dr0Ekmbz.mjs} +49 -24
  149. package/dist/{messages-DACg1XAu.mjs → chunks/messages-DzTk8bJ5.mjs} +26 -1
  150. package/dist/{messages-BOE2mzCj2.mjs → chunks/messages-FWfsxpBz.mjs} +26 -1
  151. package/dist/{messages-CBPiFbEf2.mjs → chunks/messages-G416eyjY.mjs} +26 -1
  152. package/dist/chunks/{messages-DZwCufSb.mjs → messages-Je5YvxiY.mjs} +26 -1
  153. package/dist/chunks/{messages-DN-194c32.mjs → messages-JyvWu4rf2.mjs} +26 -1
  154. package/dist/chunks/{messages-CqgEz7C5.mjs → messages-KdawW5Na.mjs} +26 -1
  155. package/dist/{messages-X80Nh0ib.mjs → chunks/messages-MxpWO1db.mjs} +27 -2
  156. package/dist/chunks/{messages-CnQydQJd2.mjs → messages-NEqrrYvE2.mjs} +26 -1
  157. package/dist/{messages-DkvQ-6HC2.mjs → chunks/messages-RInp1ytX.mjs} +28 -3
  158. package/dist/chunks/{messages-DSO2U-ul.mjs → messages-TRUuyiFB.mjs} +26 -1
  159. package/dist/chunks/{messages-BhcYsC_M2.mjs → messages-aZcy0JQq2.mjs} +26 -1
  160. package/dist/chunks/{messages-ByAqzAhB.mjs → messages-iS34FHFB.mjs} +26 -1
  161. package/dist/{messages-12_eyAo-.mjs → chunks/messages-ihCjSFJI2.mjs} +26 -1
  162. package/dist/{messages-mipkPgwQ2.mjs → chunks/messages-jfVpL9c-2.mjs} +26 -1
  163. package/dist/{messages-Cb3wXGnc.mjs → chunks/messages-p1mbe__S.mjs} +27 -2
  164. package/dist/chunks/{messages-Dgng6KN8.mjs → messages-rCd0Rrw6.mjs} +28 -3
  165. package/dist/{messages-Dj79y02X.mjs → chunks/messages-xuqyb6Ff2.mjs} +26 -1
  166. package/dist/chunks/{micromark-extension-math-CCEGWpdz.mjs → micromark-extension-math-BbkUb36G.mjs} +2 -2
  167. package/dist/chunks/mindmap-definition-QFDTVHPH-hNnyBkEP.mjs +1013 -0
  168. package/dist/chunks/objectWithoutProperties-D0XxKB4n.mjs +23 -0
  169. package/dist/chunks/one-light-DmNO_Y4X.mjs +4 -0
  170. package/dist/chunks/ordinal-B-kolV-i.mjs +65 -0
  171. package/dist/chunks/packet-4T2RLAQJ-B5ZMgwzZ.mjs +3 -0
  172. package/dist/chunks/path-rIMjg_tH.mjs +85 -0
  173. package/dist/chunks/php-DmXKyPwJ.mjs +18 -0
  174. package/dist/chunks/pie-ZZUOXDRM-B9l6y0XJ.mjs +3 -0
  175. package/dist/chunks/pieDiagram-DEJITSTG-Gw-fsc6U.mjs +179 -0
  176. package/dist/chunks/python-DfwfY9t5.mjs +3 -0
  177. package/dist/chunks/quadrantDiagram-34T5L4WZ-CQ5fGYI5.mjs +1960 -0
  178. package/dist/chunks/r-BD2D7qEW.mjs +5 -0
  179. package/dist/chunks/radar-PYXPWWZC-D5kYmUaB.mjs +3 -0
  180. package/dist/chunks/requirementDiagram-MS252O5E-DjWKB42c.mjs +2224 -0
  181. package/dist/chunks/rough.esm-cmMIcj7N.mjs +1353 -0
  182. package/dist/chunks/ruby-DdOo03Kg.mjs +33 -0
  183. package/dist/chunks/rust-DEDueB5R.mjs +3 -0
  184. package/dist/chunks/sankeyDiagram-XADWPNL6-BIN2evSB.mjs +909 -0
  185. package/dist/chunks/scala-CsjqvxE4.mjs +3 -0
  186. package/dist/chunks/sequenceDiagram-FGHM5R23-CQz2lMoS.mjs +4181 -0
  187. package/dist/chunks/shellscript-Bh5zEpnQ.mjs +3 -0
  188. package/dist/chunks/sql-D9CrOi1i.mjs +3 -0
  189. package/dist/chunks/src-DVJl6f6s.mjs +2149 -0
  190. package/dist/chunks/stateDiagram-FHFEXIEX-BIBFsF65.mjs +218 -0
  191. package/dist/chunks/stateDiagram-v2-QKLJ7IA2-BZUmAVw7.mjs +28 -0
  192. package/dist/chunks/swift-Dpyt0s2c.mjs +3 -0
  193. package/dist/chunks/timeline-definition-GMOUNBTQ-CzvQ7Lav.mjs +1084 -0
  194. package/dist/chunks/{tools-DGOsJbHH.mjs → tools-CnqCfv2L.mjs} +2116 -1268
  195. package/dist/chunks/treeView-SZITEDCU-BNtnNxpI.mjs +3 -0
  196. package/dist/chunks/treemap-W4RFUUIX-DYENULz2.mjs +3 -0
  197. package/dist/chunks/typescript-DO5cd4m8.mjs +5 -0
  198. package/dist/chunks/vennDiagram-DHZGUBPP-B0DmLQqe.mjs +1876 -0
  199. package/dist/chunks/vitesse-dark-CcorSKT2.mjs +4 -0
  200. package/dist/chunks/wardley-RL74JXVD-ByNHVBTb.mjs +3 -0
  201. package/dist/chunks/wardleyDiagram-NUSXRM2D-CzoKesUw.mjs +594 -0
  202. package/dist/chunks/xml-g8kXXALs.mjs +5 -0
  203. package/dist/chunks/xychartDiagram-5P7HB3ND-CixwR8r2.mjs +2017 -0
  204. package/dist/chunks/yaml-CrNNZyLb.mjs +3 -0
  205. package/dist/cli.mjs +1 -1
  206. package/dist/full.mjs +3 -3
  207. package/dist/locales.mjs +80 -67
  208. package/dist/markdown.mjs +385 -393
  209. package/dist/{chunks/messages-9l49jauY.mjs → messages-5jvKxQNu2.mjs} +26 -1
  210. package/dist/{messages-CkySRhtd2.mjs → messages-7QD-X6XT2.mjs} +26 -1
  211. package/dist/{chunks/messages-Btr121zI2.mjs → messages-96iaAUds2.mjs} +27 -2
  212. package/dist/{chunks/messages-BAP2OAQk.mjs → messages-B19o-Teb.mjs} +28 -3
  213. package/dist/{messages-DJU4YLij.mjs → messages-B1ZUQagA.mjs} +26 -1
  214. package/dist/{messages-Dg2CDXZi2.mjs → messages-B7ieAJBd2.mjs} +26 -1
  215. package/dist/{messages-CByBLxWk.mjs → messages-BECMxmfX.mjs} +26 -1
  216. package/dist/{messages-CwCEcbWG.mjs → messages-BIHc0KHY.mjs} +27 -2
  217. package/dist/{messages-D8WvwU42.mjs → messages-BIoeoik5.mjs} +26 -1
  218. package/dist/{messages-D38h5XlF.mjs → messages-BJeGJksD.mjs} +26 -1
  219. package/dist/{messages-Cd23UgLV2.mjs → messages-BRZX964b2.mjs} +27 -2
  220. package/dist/{chunks/messages-B9N__q552.mjs → messages-BTQPpoM42.mjs} +29 -4
  221. package/dist/{messages-CUzBNjnc.mjs → messages-BYNcD6uR.mjs} +26 -1
  222. package/dist/{messages-DjWfVYHS2.mjs → messages-BYmmMDrN2.mjs} +26 -1
  223. package/dist/{chunks/messages-DkTxBa1V.mjs → messages-BbYq1pk-.mjs} +26 -1
  224. package/dist/{chunks/messages-BHhbHLoq.mjs → messages-BiUGXvYr2.mjs} +26 -1
  225. package/dist/{messages-So3SHdIc2.mjs → messages-BiiongNz2.mjs} +26 -1
  226. package/dist/{chunks/messages-BxBID_0B.mjs → messages-Bm0Feca1.mjs} +30 -5
  227. package/dist/{messages-C2veeQpU.mjs → messages-BmAn22OX.mjs} +26 -1
  228. package/dist/{messages-KbYSpNrE.mjs → messages-Bq3F2Tp_.mjs} +26 -1
  229. package/dist/{chunks/messages-Dux1S0-D2.mjs → messages-BsycN_JI2.mjs} +26 -1
  230. package/dist/{messages-DRU_IgoW.mjs → messages-BwHs4cm1.mjs} +30 -5
  231. package/dist/{messages-Cv-DKlZd.mjs → messages-CJTy6JZt.mjs} +26 -1
  232. package/dist/{chunks/messages-D7n_wJK7.mjs → messages-CR_L_UtK.mjs} +26 -1
  233. package/dist/{messages-DnhEzmXJ2.mjs → messages-CSUHBs4c2.mjs} +26 -1
  234. package/dist/{messages-C_HmWyXc2.mjs → messages-CWIXvnDf2.mjs} +26 -1
  235. package/dist/{messages-KSxF8eib.mjs → messages-CcF4y-E4.mjs} +26 -1
  236. package/dist/{chunks/messages-CL3mCbi6.mjs → messages-Ce6KVEbT.mjs} +27 -2
  237. package/dist/{chunks/messages-C-jA6Rf7.mjs → messages-Ci0KqX-J.mjs} +33 -8
  238. package/dist/{chunks/messages-DMyRdafk2.mjs → messages-CjbnogEC.mjs} +26 -1
  239. package/dist/{chunks/messages-BlO_37l_.mjs → messages-CmB406HW.mjs} +28 -3
  240. package/dist/{messages-Cho2VTAX.mjs → messages-CqXtJTpU.mjs} +26 -1
  241. package/dist/{messages-CWEL1WDy2.mjs → messages-D0aw5_0k2.mjs} +28 -3
  242. package/dist/{messages-CgEDVri-2.mjs → messages-D8FQWulF2.mjs} +26 -1
  243. package/dist/{chunks/messages-B5aAzExz.mjs → messages-DBiVgUs2.mjs} +27 -2
  244. package/dist/{chunks/messages-DYizZHT2.mjs → messages-DIJlIqlQ2.mjs} +26 -1
  245. package/dist/{messages-BPL7riv-.mjs → messages-DLX_iBDJ.mjs} +26 -1
  246. package/dist/{messages-vptt-pVF.mjs → messages-DLlc9QPw.mjs} +26 -1
  247. package/dist/{chunks/messages-876bKyUj2.mjs → messages-DMr62KiO2.mjs} +26 -1
  248. package/dist/{chunks/messages-CgedvWCf.mjs → messages-DPA-mMWC2.mjs} +27 -2
  249. package/dist/{messages-vcoib5Ga.mjs → messages-DTh9a8mR.mjs} +26 -1
  250. package/dist/{chunks/messages-DgEGJECT.mjs → messages-DY4IqlhY.mjs} +26 -1
  251. package/dist/{chunks/messages-CdzF0Hvl.mjs → messages-DYTTu0O12.mjs} +26 -1
  252. package/dist/{messages-rbox5gSb2.mjs → messages-DbySKTKt2.mjs} +28 -3
  253. package/dist/{chunks/messages-BGCQCeWd.mjs → messages-Ddnj2iTG2.mjs} +26 -1
  254. package/dist/{chunks/messages-CNEJxD8q2.mjs → messages-DkLU_rWm.mjs} +26 -1
  255. package/dist/{chunks/messages-FYl9woii2.mjs → messages-Dl3Sv6Rq2.mjs} +27 -2
  256. package/dist/{messages-Clsh86WQ.mjs → messages-Dl5Y2-Ia.mjs} +49 -24
  257. package/dist/{chunks/messages-CKRJDX0K2.mjs → messages-DnG0ef8t2.mjs} +28 -3
  258. package/dist/{chunks/messages-CyxDkx8a.mjs → messages-DnGJD4TL.mjs} +26 -1
  259. package/dist/{chunks/messages-DnJHflSh.mjs → messages-Dnp9N6RU2.mjs} +26 -1
  260. package/dist/{chunks/messages-Jps5Tc77.mjs → messages-Dvn35ksS.mjs} +26 -1
  261. package/dist/{messages-ChTWmxS8.mjs → messages-Dw__BcTj.mjs} +26 -1
  262. package/dist/{messages-D7juvhHp.mjs → messages-Dy-Y_nEI.mjs} +26 -1
  263. package/dist/{messages-CNNcKuGH.mjs → messages-E_ZuzGDt.mjs} +26 -1
  264. package/dist/{chunks/messages-DJO0ERQT.mjs → messages-F2xRoY1w.mjs} +26 -1
  265. package/dist/{messages-DqJTZbwt.mjs → messages-Smt4GBbj.mjs} +31 -6
  266. package/dist/{chunks/messages-D8dKkyII2.mjs → messages-aMXpHt5X2.mjs} +26 -1
  267. package/dist/{chunks/messages-DWD0ry9x.mjs → messages-aWZH50vu2.mjs} +28 -3
  268. package/dist/{chunks/messages-BbfLRqLh2.mjs → messages-dv19AkyJ.mjs} +26 -1
  269. package/dist/{chunks/messages-Dw2rmKMi2.mjs → messages-hWwSRF-2.mjs} +26 -1
  270. package/dist/{messages-En8LDjUB.mjs → messages-j7o5rT9s.mjs} +26 -1
  271. package/dist/{chunks/messages-NJsvFwJj.mjs → messages-nUVjeh7K.mjs} +27 -2
  272. package/dist/{messages-Cg1CF4pw.mjs → messages-nlhESX9t.mjs} +26 -1
  273. package/dist/{messages-CSl0Wla62.mjs → messages-rk-A1Wa42.mjs} +28 -3
  274. package/dist/{messages-nOe1gJYu.mjs → messages-xh2eOLvs.mjs} +26 -1
  275. package/dist/{messages-B_sKqaeK.mjs → messages-ynAe7ewZ.mjs} +26 -1
  276. package/dist/react.mjs +26 -25
  277. package/dist/tools.mjs +2 -2
  278. package/dist/vendor.LICENSE.txt +4065 -316
  279. package/package.json +2 -1
  280. package/src/components/constants/data-attributes.ts +0 -2
  281. package/src/components/i18n/locales/am/messages.json +26 -1
  282. package/src/components/i18n/locales/ar/messages.json +26 -1
  283. package/src/components/i18n/locales/az/messages.json +26 -1
  284. package/src/components/i18n/locales/bg/messages.json +26 -1
  285. package/src/components/i18n/locales/bn/messages.json +26 -1
  286. package/src/components/i18n/locales/bs/messages.json +28 -3
  287. package/src/components/i18n/locales/cs/messages.json +30 -5
  288. package/src/components/i18n/locales/da/messages.json +33 -8
  289. package/src/components/i18n/locales/de/messages.json +31 -6
  290. package/src/components/i18n/locales/dv/messages.json +26 -1
  291. package/src/components/i18n/locales/el/messages.json +26 -1
  292. package/src/components/i18n/locales/en/messages.json +13 -0
  293. package/src/components/i18n/locales/es/messages.json +27 -2
  294. package/src/components/i18n/locales/et/messages.json +30 -5
  295. package/src/components/i18n/locales/fa/messages.json +26 -1
  296. package/src/components/i18n/locales/fi/messages.json +26 -1
  297. package/src/components/i18n/locales/fil/messages.json +49 -24
  298. package/src/components/i18n/locales/fr/messages.json +27 -2
  299. package/src/components/i18n/locales/gu/messages.json +26 -1
  300. package/src/components/i18n/locales/he/messages.json +26 -1
  301. package/src/components/i18n/locales/hi/messages.json +26 -1
  302. package/src/components/i18n/locales/hr/messages.json +28 -3
  303. package/src/components/i18n/locales/hu/messages.json +27 -2
  304. package/src/components/i18n/locales/hy/messages.json +26 -1
  305. package/src/components/i18n/locales/id/messages.json +26 -1
  306. package/src/components/i18n/locales/it/messages.json +27 -2
  307. package/src/components/i18n/locales/ja/messages.json +26 -1
  308. package/src/components/i18n/locales/ka/messages.json +26 -1
  309. package/src/components/i18n/locales/km/messages.json +26 -1
  310. package/src/components/i18n/locales/kn/messages.json +26 -1
  311. package/src/components/i18n/locales/ko/messages.json +26 -1
  312. package/src/components/i18n/locales/ku/messages.json +26 -1
  313. package/src/components/i18n/locales/lo/messages.json +26 -1
  314. package/src/components/i18n/locales/lt/messages.json +26 -1
  315. package/src/components/i18n/locales/lv/messages.json +26 -1
  316. package/src/components/i18n/locales/mk/messages.json +26 -1
  317. package/src/components/i18n/locales/ml/messages.json +26 -1
  318. package/src/components/i18n/locales/mn/messages.json +26 -1
  319. package/src/components/i18n/locales/mr/messages.json +26 -1
  320. package/src/components/i18n/locales/ms/messages.json +28 -3
  321. package/src/components/i18n/locales/my/messages.json +26 -1
  322. package/src/components/i18n/locales/ne/messages.json +26 -1
  323. package/src/components/i18n/locales/nl/messages.json +28 -3
  324. package/src/components/i18n/locales/no/messages.json +29 -4
  325. package/src/components/i18n/locales/pa/messages.json +26 -1
  326. package/src/components/i18n/locales/pl/messages.json +27 -2
  327. package/src/components/i18n/locales/ps/messages.json +26 -1
  328. package/src/components/i18n/locales/pt/messages.json +27 -2
  329. package/src/components/i18n/locales/ro/messages.json +27 -2
  330. package/src/components/i18n/locales/ru/messages.json +26 -1
  331. package/src/components/i18n/locales/sd/messages.json +26 -1
  332. package/src/components/i18n/locales/si/messages.json +26 -1
  333. package/src/components/i18n/locales/sk/messages.json +28 -3
  334. package/src/components/i18n/locales/sl/messages.json +28 -3
  335. package/src/components/i18n/locales/sq/messages.json +27 -2
  336. package/src/components/i18n/locales/sr/messages.json +26 -1
  337. package/src/components/i18n/locales/sv/messages.json +28 -3
  338. package/src/components/i18n/locales/sw/messages.json +26 -1
  339. package/src/components/i18n/locales/ta/messages.json +26 -1
  340. package/src/components/i18n/locales/te/messages.json +26 -1
  341. package/src/components/i18n/locales/th/messages.json +26 -1
  342. package/src/components/i18n/locales/tr/messages.json +26 -1
  343. package/src/components/i18n/locales/ug/messages.json +26 -1
  344. package/src/components/i18n/locales/uk/messages.json +26 -1
  345. package/src/components/i18n/locales/ur/messages.json +26 -1
  346. package/src/components/i18n/locales/vi/messages.json +26 -1
  347. package/src/components/i18n/locales/yi/messages.json +26 -1
  348. package/src/components/i18n/locales/zh/messages.json +26 -1
  349. package/src/components/icons/index.ts +38 -0
  350. package/src/components/modules/api/ui.ts +0 -3
  351. package/src/components/modules/ui.ts +0 -13
  352. package/src/stories/EditorModes.stories.ts +0 -60
  353. package/src/styles/main.css +44 -2
  354. package/src/tools/callout/emoji-picker/index.ts +3 -2
  355. package/src/tools/code/code-keyboard.ts +16 -9
  356. package/src/tools/code/constants.ts +26 -3
  357. package/src/tools/code/dom-builder.ts +40 -5
  358. package/src/tools/code/highlight-applier.ts +229 -0
  359. package/src/tools/code/index.ts +141 -1
  360. package/src/tools/code/mermaid-loader.ts +45 -0
  361. package/src/tools/code/shiki-loader.ts +135 -0
  362. package/src/tools/table/core/table-commands.ts +16 -0
  363. package/src/tools/table/core/table-controller.ts +29 -0
  364. package/src/tools/table/core/table-events.ts +17 -0
  365. package/src/tools/table/index.ts +194 -11
  366. package/src/tools/table/table-cell-blocks.ts +9 -6
  367. package/src/tools/table/table-cell-clipboard.ts +6 -1
  368. package/src/tools/table/table-cell-placement-picker.ts +133 -0
  369. package/src/tools/table/table-cell-selection.ts +174 -19
  370. package/src/tools/table/table-core.ts +321 -113
  371. package/src/tools/table/table-map.ts +279 -0
  372. package/src/tools/table/table-model.ts +901 -1
  373. package/src/tools/table/table-operations.ts +78 -44
  374. package/src/tools/table/table-resize.ts +19 -17
  375. package/src/tools/table/table-row-col-drag.ts +24 -10
  376. package/src/tools/table/types.ts +24 -2
  377. package/types/data-attributes.d.ts +0 -1
  378. package/types/tools/code.d.ts +2 -0
  379. /package/dist/chunks/{am-CS-JjQ0N.mjs → am-BxlkYGsI.mjs} +0 -0
  380. /package/dist/chunks/{ar-Dt4XzR5U.mjs → ar-9vlpr9V8.mjs} +0 -0
  381. /package/dist/chunks/{az-CaDTXby8.mjs → az-ON63W_FP.mjs} +0 -0
  382. /package/dist/chunks/{bg-D1pLog-R.mjs → bg-CtXWTP5w.mjs} +0 -0
  383. /package/dist/chunks/{bn-Db_ae60m.mjs → bn-BERvhXM4.mjs} +0 -0
  384. /package/dist/chunks/{bs-DJTg1R9e.mjs → bs-CBg8NVPG.mjs} +0 -0
  385. /package/dist/chunks/{cs-_Gc21gSL.mjs → cs-DeQddxS7.mjs} +0 -0
  386. /package/dist/chunks/{da-xDB8uhCd.mjs → da-DyTo-ec_.mjs} +0 -0
  387. /package/dist/chunks/{de-B6gVjh1Z.mjs → de-Cu7545m1.mjs} +0 -0
  388. /package/dist/chunks/{default-DIfXCS2E.mjs → default-qigT1Xpq.mjs} +0 -0
  389. /package/dist/chunks/{el-ClbRSnOs.mjs → el-oiubLRBq.mjs} +0 -0
  390. /package/dist/chunks/{es-CuY9rnLK.mjs → es-DZUC6Klv.mjs} +0 -0
  391. /package/dist/chunks/{et-BLu5lDVc.mjs → et-CDeklAog.mjs} +0 -0
  392. /package/dist/chunks/{fa-P3gnrZH8.mjs → fa-Cafp7_Li.mjs} +0 -0
  393. /package/dist/chunks/{fi-B8PVHLjq.mjs → fi-BD_V_aVW.mjs} +0 -0
  394. /package/dist/chunks/{fil-B9JII5iF.mjs → fil-Crsfbtx4.mjs} +0 -0
  395. /package/dist/chunks/{fr-BWLDZdcc.mjs → fr-BGGc04Zv.mjs} +0 -0
  396. /package/dist/chunks/{gu-BH3R_s4c.mjs → gu-Vg_BgCTp.mjs} +0 -0
  397. /package/dist/chunks/{he-CCmeCVR_.mjs → he-DTY9chlZ.mjs} +0 -0
  398. /package/dist/chunks/{hi-BBav00DN.mjs → hi-DChMXk0x.mjs} +0 -0
  399. /package/dist/chunks/{hr-B5ZX0r9G.mjs → hr-BWVgNU8k.mjs} +0 -0
  400. /package/dist/chunks/{hu-1jgDa3YU.mjs → hu-B37awHXA.mjs} +0 -0
  401. /package/dist/chunks/{hy-LX4Kp2PE.mjs → hy-DGC_GDHh.mjs} +0 -0
  402. /package/dist/chunks/{i18next-KNC_XV5x.mjs → i18next-CXx5niYF.mjs} +0 -0
  403. /package/dist/chunks/{id-CcG40D1H.mjs → id-V7cw6La2.mjs} +0 -0
  404. /package/dist/chunks/{it-Cb8_K72W.mjs → it-DrTGP8Rn.mjs} +0 -0
  405. /package/dist/chunks/{ja-ipCH91mv.mjs → ja-DS4pbJEG.mjs} +0 -0
  406. /package/dist/chunks/{ka-BRvREIgq.mjs → ka-BueyosRh.mjs} +0 -0
  407. /package/dist/chunks/{km-BJwVw7Fg.mjs → km-B0K891yW.mjs} +0 -0
  408. /package/dist/chunks/{kn-BPgUazCC.mjs → kn-BQ__skg8.mjs} +0 -0
  409. /package/dist/chunks/{ko-CQLzxe7k.mjs → ko-BuPxi_7e.mjs} +0 -0
  410. /package/dist/chunks/{ku-BHhHu8Iz.mjs → ku-nQjwPRw2.mjs} +0 -0
  411. /package/dist/chunks/{lo-DsTgYblY.mjs → lo-K5NVFoq1.mjs} +0 -0
  412. /package/dist/chunks/{lt-CDzHJm71.mjs → lt-D3xD6Eb2.mjs} +0 -0
  413. /package/dist/chunks/{lv-MLLIAnIX.mjs → lv-DH13mzZj.mjs} +0 -0
  414. /package/dist/chunks/{micromark-factory-space-WwmyBO_J.mjs → micromark-factory-space-y4SDWQKm.mjs} +0 -0
  415. /package/dist/chunks/{mk-DQdmUquZ.mjs → mk-Bb48BcDA.mjs} +0 -0
  416. /package/dist/chunks/{ml-DqehZnra.mjs → ml-BHPEj1kD.mjs} +0 -0
  417. /package/dist/chunks/{mn-4cFkKFjW.mjs → mn-BNGzpdI6.mjs} +0 -0
  418. /package/dist/chunks/{mr-DWiztOP4.mjs → mr-D5PgU-cH.mjs} +0 -0
  419. /package/dist/chunks/{ms-BSz-iSnc.mjs → ms-DPkxqKz5.mjs} +0 -0
  420. /package/dist/chunks/{my-DbtbM1MW.mjs → my-DZGcyfxy.mjs} +0 -0
  421. /package/dist/chunks/{native-CzYG0YgY.mjs → native-D0cfLXsM.mjs} +0 -0
  422. /package/dist/chunks/{ne-CqALWw_f.mjs → ne-BU_Wh4Wv.mjs} +0 -0
  423. /package/dist/chunks/{nl-D_ra6RvH.mjs → nl-DtAPk1mK.mjs} +0 -0
  424. /package/dist/chunks/{no-Cg_kz_jl.mjs → no-CdW3n3BY.mjs} +0 -0
  425. /package/dist/chunks/{notifier-BOwxj_Ok.mjs → notifier-CuvTt9pe.mjs} +0 -0
  426. /package/dist/chunks/{pa-NLAsNqwY.mjs → pa-BacCHz87.mjs} +0 -0
  427. /package/dist/chunks/{pl-NHKp4YDg.mjs → pl-8zBJbmhZ.mjs} +0 -0
  428. /package/dist/chunks/{ps-D1zEqNeg.mjs → ps-c6nGXD-W.mjs} +0 -0
  429. /package/dist/chunks/{pt-DBtqbUEB.mjs → pt-B5yR8Qhr.mjs} +0 -0
  430. /package/dist/chunks/{ro-lqr63ai5.mjs → ro-Nscylsqb.mjs} +0 -0
  431. /package/dist/chunks/{ru-BycNnDyN.mjs → ru-DxERQkVJ.mjs} +0 -0
  432. /package/dist/chunks/{sd-DpHpIN9Z.mjs → sd-5z-QY3q9.mjs} +0 -0
  433. /package/dist/chunks/{si-BwiwaC7N.mjs → si-DTL0mzrx.mjs} +0 -0
  434. /package/dist/chunks/{sk-CqRHT2Gp.mjs → sk-DrGczTvY.mjs} +0 -0
  435. /package/dist/chunks/{sl-DA348uQ_.mjs → sl-D8nJjig4.mjs} +0 -0
  436. /package/dist/chunks/{sq-D7JNgve1.mjs → sq-C74Hm3YL.mjs} +0 -0
  437. /package/dist/chunks/{sr-D8RK6Kwp.mjs → sr-DAwB05Gj.mjs} +0 -0
  438. /package/dist/chunks/{sv-dwgT67ZG.mjs → sv-BkHBsN4y.mjs} +0 -0
  439. /package/dist/chunks/{sw-ZRRJnkem.mjs → sw-BBQLTq_z.mjs} +0 -0
  440. /package/dist/chunks/{ta-5x4L5Krl.mjs → ta-DRRzdKky.mjs} +0 -0
  441. /package/dist/chunks/{te-BZpEimwA.mjs → te-CedXLsKM.mjs} +0 -0
  442. /package/dist/chunks/{th-Bhr-33kv.mjs → th-DDOlGA0W.mjs} +0 -0
  443. /package/dist/chunks/{tr-6tSNKGNB.mjs → tr-ClgvwOlL.mjs} +0 -0
  444. /package/dist/chunks/{ug-_e-jvr2b.mjs → ug-bXxwiinM.mjs} +0 -0
  445. /package/dist/chunks/{uk-DooSc2Ja.mjs → uk-Dp46o_VT.mjs} +0 -0
  446. /package/dist/chunks/{ur-rb-krkIO.mjs → ur-MfEEhdFq.mjs} +0 -0
  447. /package/dist/chunks/{vi-CQkLn2AQ.mjs → vi-bt-3LPGO.mjs} +0 -0
  448. /package/dist/chunks/{zh-CXQ40Q2_.mjs → zh-Dgyb5Ly8.mjs} +0 -0
@@ -83,6 +83,12 @@ export class TableController {
83
83
  case 'set-col-widths':
84
84
  return this.handleSetColWidths(command.widths ? [...command.widths] : undefined);
85
85
 
86
+ case 'merge-cells':
87
+ return this.handleMergeCells(command.minRow, command.maxRow, command.minCol, command.maxCol);
88
+
89
+ case 'split-cell':
90
+ return this.handleSplitCell(command.row, command.col);
91
+
86
92
  case 'replace-all':
87
93
  return this.handleReplaceAll(command.data);
88
94
  }
@@ -223,6 +229,29 @@ export class TableController {
223
229
  };
224
230
  }
225
231
 
232
+ private handleMergeCells(minRow: number, maxRow: number, minCol: number, maxCol: number): TableDomainEvent {
233
+ const result = this.model.mergeCells({ minRow, maxRow, minCol, maxCol });
234
+
235
+ return {
236
+ type: 'cells-merged',
237
+ minRow,
238
+ maxRow,
239
+ minCol,
240
+ maxCol,
241
+ blocksToRelocate: result.blocksToRelocate,
242
+ };
243
+ }
244
+
245
+ private handleSplitCell(row: number, col: number): TableDomainEvent {
246
+ this.model.splitCell(row, col);
247
+
248
+ return {
249
+ type: 'cell-split',
250
+ row,
251
+ col,
252
+ };
253
+ }
254
+
226
255
  private handleReplaceAll(data: TableData): TableDomainEvent {
227
256
  this.model.replaceAll(data);
228
257
 
@@ -81,6 +81,21 @@ export interface ColWidthsChangedEvent {
81
81
  readonly widths: readonly number[] | undefined;
82
82
  }
83
83
 
84
+ export interface CellsMergedEvent {
85
+ readonly type: 'cells-merged';
86
+ readonly minRow: number;
87
+ readonly maxRow: number;
88
+ readonly minCol: number;
89
+ readonly maxCol: number;
90
+ readonly blocksToRelocate: readonly string[];
91
+ }
92
+
93
+ export interface CellSplitEvent {
94
+ readonly type: 'cell-split';
95
+ readonly row: number;
96
+ readonly col: number;
97
+ }
98
+
84
99
  export interface ModelReplacedEvent {
85
100
  readonly type: 'model-replaced';
86
101
  }
@@ -99,4 +114,6 @@ export type TableDomainEvent =
99
114
  | BlockRemovedFromCellEvent
100
115
  | CellBlocksSetEvent
101
116
  | ColWidthsChangedEvent
117
+ | CellsMergedEvent
118
+ | CellSplitEvent
102
119
  | ModelReplacedEvent;
@@ -25,9 +25,10 @@ import {
25
25
  } from './table-cell-clipboard';
26
26
  import type { CellColorMode } from './table-cell-color-picker';
27
27
  import { TableCellSelection } from './table-cell-selection';
28
- import { TableGrid, ROW_ATTR, CELL_ATTR } from './table-core';
28
+ import { TableGrid, ROW_ATTR, CELL_ATTR, CELL_ROW_ATTR, CELL_COL_ATTR } from './table-core';
29
29
  import {
30
30
  applyCellColors,
31
+ applyCellPlacements,
31
32
  applyPixelWidths,
32
33
  computeHalfAvgWidth,
33
34
  computeInitialColWidth,
@@ -54,7 +55,7 @@ import { TableRowColControls } from './table-row-col-controls';
54
55
  import type { RowColAction } from './table-row-col-controls';
55
56
  import { registerAdditionalRestrictedTools } from './table-restrictions';
56
57
  import { TableScrollHaze } from './table-scroll-haze';
57
- import type { ClipboardBlockData, LegacyCellContent, TableCellsClipboard, TableData, TableConfig } from './types';
58
+ import type { CellPlacement, ClipboardBlockData, LegacyCellContent, TableCellsClipboard, TableData, TableConfig } from './types';
58
59
 
59
60
  const DEFAULT_ROWS = 3;
60
61
  const DEFAULT_COLS = 3;
@@ -200,6 +201,120 @@ export class Table implements BlockTool {
200
201
  this.scrollHaze = null;
201
202
  }
202
203
 
204
+ /**
205
+ * Rebuild the <tbody> from the current model state.
206
+ * Generates a new table via createGridFromModel (with correct colspan/rowspan),
207
+ * transplants existing block holders into the new cells, and swaps the tbody.
208
+ */
209
+ private rebuildTableBody(): void {
210
+ const gridEl = this.gridElement;
211
+
212
+ if (!gridEl) {
213
+ return;
214
+ }
215
+
216
+ const oldTbody = gridEl.querySelector('tbody');
217
+
218
+ if (!oldTbody) {
219
+ return;
220
+ }
221
+
222
+ // Collect all existing block holders by ID before replacing tbody
223
+ const blockHolders = new Map<string, HTMLElement>();
224
+
225
+ oldTbody.querySelectorAll('[data-blok-id]').forEach(el => {
226
+ const id = el.getAttribute('data-blok-id');
227
+
228
+ if (id) {
229
+ blockHolders.set(id, el as HTMLElement);
230
+ }
231
+ });
232
+
233
+ // Build new table from model (has correct colspan/rowspan structure)
234
+ const newTable = this.grid.createGridFromModel(this.model);
235
+ const newTbody = newTable.querySelector('tbody');
236
+
237
+ if (!newTbody) {
238
+ return;
239
+ }
240
+
241
+ // Move block holders from old cells to new cells
242
+ const content = this.model.snapshot().content;
243
+
244
+ this.mountBlockHoldersInNewTbody(content, newTbody, blockHolders);
245
+
246
+ // Replace old tbody with new
247
+ oldTbody.replaceWith(newTbody);
248
+ }
249
+
250
+ /**
251
+ * Mount block holders into the new tbody cells based on model content.
252
+ * Extracted to keep rebuildTableBody under nesting depth limit.
253
+ */
254
+ private mountBlockHoldersInNewTbody(
255
+ content: TableData['content'],
256
+ newTbody: Element,
257
+ blockHolders: Map<string, HTMLElement>
258
+ ): void {
259
+ content.forEach((rowData, r) => {
260
+ rowData.forEach((cellContent, c) => {
261
+ if (typeof cellContent === 'string') {
262
+ return;
263
+ }
264
+
265
+ if (cellContent.mergedInto) {
266
+ return;
267
+ }
268
+
269
+ const newCell = newTbody.querySelector(
270
+ `[${CELL_ROW_ATTR}="${r}"][${CELL_COL_ATTR}="${c}"]`
271
+ );
272
+
273
+ if (!newCell) {
274
+ return;
275
+ }
276
+
277
+ const container = newCell.querySelector(`[${CELL_BLOCKS_ATTR}]`);
278
+
279
+ if (!container) {
280
+ return;
281
+ }
282
+
283
+ cellContent.blocks.forEach(blockId => {
284
+ const holder = blockHolders.get(blockId);
285
+
286
+ if (holder) {
287
+ container.appendChild(holder);
288
+ }
289
+ });
290
+ });
291
+ });
292
+ }
293
+
294
+ /**
295
+ * Check if the model's content contains any merged cells.
296
+ */
297
+ private modelHasMerges(): boolean {
298
+ const snapshot = this.model.snapshot();
299
+
300
+ return snapshot.content.some(row =>
301
+ row.some(cell =>
302
+ typeof cell !== 'string' && ((cell.colspan ?? 1) > 1 || (cell.rowspan ?? 1) > 1)
303
+ )
304
+ );
305
+ }
306
+
307
+ /**
308
+ * Create a flat grid (no merge handling) using createGrid.
309
+ * Extracted from render() to keep it readable.
310
+ */
311
+ private createFlatGrid(): HTMLTableElement {
312
+ const rows = this.initialContent?.length || this.config.rows || DEFAULT_ROWS;
313
+ const cols = this.initialContent?.reduce((max, row) => Math.max(max, row?.length ?? 0), 0) || this.config.cols || DEFAULT_COLS;
314
+
315
+ return this.grid.createGrid(rows, cols, this.model.colWidths);
316
+ }
317
+
203
318
  /**
204
319
  * Initialize all visual subsystems on a grid element.
205
320
  * Shared by rendered(), setData(), and onPaste() to ensure consistent
@@ -309,12 +424,14 @@ export class Table implements BlockTool {
309
424
 
310
425
  this.isNewTable = (this.initialContent?.length ?? 0) === 0;
311
426
 
312
- const rows = this.initialContent?.length || this.config.rows || DEFAULT_ROWS;
313
- const cols = this.initialContent?.reduce((max, row) => Math.max(max, row?.length ?? 0), 0) || this.config.cols || DEFAULT_COLS;
427
+ const hasContent = (this.initialContent?.length ?? 0) > 0;
428
+ const hasMerges = hasContent && this.modelHasMerges();
314
429
 
315
- const gridEl = this.grid.createGrid(rows, cols, this.model.colWidths);
430
+ const gridEl = hasMerges
431
+ ? this.grid.createGridFromModel(this.model)
432
+ : this.createFlatGrid();
316
433
 
317
- if ((this.initialContent?.length ?? 0) > 0) {
434
+ if (hasContent && !hasMerges) {
318
435
  this.grid.fillGrid(gridEl, this.initialContent ?? []);
319
436
  }
320
437
 
@@ -388,7 +505,9 @@ export class Table implements BlockTool {
388
505
 
389
506
  if (this.readOnly) {
390
507
  mountCellBlocksReadOnly(gridEl, content, this.api, this.blockId ?? '');
391
- applyCellColors(gridEl, this.model.snapshot().content);
508
+ const snap = this.model.snapshot();
509
+ applyCellColors(gridEl, snap.content);
510
+ applyCellPlacements(gridEl, snap.content);
392
511
  this.initScrollHaze();
393
512
 
394
513
  return;
@@ -430,7 +549,9 @@ export class Table implements BlockTool {
430
549
  }
431
550
 
432
551
  this.initSubsystems(gridEl);
433
- applyCellColors(gridEl, this.model.snapshot().content);
552
+ const snapInit = this.model.snapshot();
553
+ applyCellColors(gridEl, snapInit.content);
554
+ applyCellPlacements(gridEl, snapInit.content);
434
555
 
435
556
  if (this.isNewTable) {
436
557
  this.cellSelection?.selectRange({ minRow: 0, maxRow: 0, minCol: 0, maxCol: 0 });
@@ -541,7 +662,9 @@ export class Table implements BlockTool {
541
662
  }
542
663
 
543
664
  if (this.readOnly) {
544
- applyCellColors(gridEl, this.model.snapshot().content);
665
+ const snapRO = this.model.snapshot();
666
+ applyCellColors(gridEl, snapRO.content);
667
+ applyCellPlacements(gridEl, snapRO.content);
545
668
 
546
669
  return;
547
670
  }
@@ -602,7 +725,9 @@ export class Table implements BlockTool {
602
725
  this.rowColControls.restoreVisibleGrips(savedGripIndices.col, savedGripIndices.row);
603
726
  }
604
727
 
605
- applyCellColors(gridEl, this.model.snapshot().content);
728
+ const snapSet = this.model.snapshot();
729
+ applyCellColors(gridEl, snapSet.content);
730
+ applyCellPlacements(gridEl, snapSet.content);
606
731
  }
607
732
 
608
733
  public onPaste(event: HTMLPasteEvent): void {
@@ -695,7 +820,9 @@ export class Table implements BlockTool {
695
820
  }, true);
696
821
 
697
822
  this.initSubsystems(gridEl);
698
- applyCellColors(gridEl, this.model.snapshot().content);
823
+ const snapPaste = this.model.snapshot();
824
+ applyCellColors(gridEl, snapPaste.content);
825
+ applyCellPlacements(gridEl, snapPaste.content);
699
826
  }
700
827
  }
701
828
 
@@ -1183,6 +1310,38 @@ export class Table implements BlockTool {
1183
1310
  });
1184
1311
  }
1185
1312
 
1313
+ private handleCellPlacementChange(cells: HTMLElement[], placement: CellPlacement): void {
1314
+ const gridEl = this.gridElement;
1315
+
1316
+ if (!gridEl) {
1317
+ return;
1318
+ }
1319
+
1320
+ this.runTransactedStructuralOp(() => {
1321
+ for (const cell of cells) {
1322
+ const coord = getCellPosition(gridEl, cell);
1323
+
1324
+ if (!coord) {
1325
+ continue;
1326
+ }
1327
+
1328
+ this.model.setCellPlacement(coord.row, coord.col, placement === 'top-left' ? undefined : placement);
1329
+
1330
+ const blocksContainer = cell.querySelector<HTMLElement>(`[${CELL_BLOCKS_ATTR}]`);
1331
+
1332
+ if (!blocksContainer) {
1333
+ continue;
1334
+ }
1335
+
1336
+ if (placement === 'top-left') {
1337
+ blocksContainer.removeAttribute('data-blok-cell-placement');
1338
+ } else {
1339
+ blocksContainer.setAttribute('data-blok-cell-placement', placement);
1340
+ }
1341
+ }
1342
+ });
1343
+ }
1344
+
1186
1345
  private collectCellBlockData(
1187
1346
  cells: HTMLElement[],
1188
1347
  ): Array<{ row: number; col: number; blocks: ClipboardBlockData[]; color?: string; textColor?: string }> {
@@ -1333,6 +1492,30 @@ export class Table implements BlockTool {
1333
1492
  onColorChange: (cells, color, mode) => {
1334
1493
  this.handleCellColorChange(cells, color, mode);
1335
1494
  },
1495
+ onPlacementChange: (cells, placement) => {
1496
+ this.handleCellPlacementChange(cells, placement);
1497
+ },
1498
+ getCellPlacement: (row, col) => {
1499
+ return this.model.getCellPlacement(row, col);
1500
+ },
1501
+ canMergeCells: (range) => {
1502
+ return this.model.canMergeCells(range);
1503
+ },
1504
+ onMergeCells: (range) => {
1505
+ this.runTransactedStructuralOp(() => {
1506
+ this.model.mergeCells(range);
1507
+ this.rebuildTableBody();
1508
+ });
1509
+ },
1510
+ isMergedCell: (row, col) => {
1511
+ return this.model.isMergedCell(row, col);
1512
+ },
1513
+ onSplitCell: (row, col) => {
1514
+ this.runTransactedStructuralOp(() => {
1515
+ this.model.splitCell(row, col);
1516
+ this.rebuildTableBody();
1517
+ });
1518
+ },
1336
1519
  });
1337
1520
  }
1338
1521
 
@@ -1,6 +1,6 @@
1
1
  import type { API } from '../../../types';
2
2
 
3
- import { CELL_ATTR, ROW_ATTR } from './table-core';
3
+ import { CELL_ATTR, ROW_ATTR, CELL_COL_ATTR } from './table-core';
4
4
  import type { TableModel } from './table-model';
5
5
  import type { LegacyCellContent, CellContent } from './types';
6
6
  import { isCellWithBlocks } from './types';
@@ -330,6 +330,12 @@ export class TableCellBlocks {
330
330
  * Get the number of columns in the table (based on first row)
331
331
  */
332
332
  private getColumnCount(): number {
333
+ const colgroup = this.gridElement.querySelector('colgroup');
334
+
335
+ if (colgroup) {
336
+ return colgroup.querySelectorAll('col').length;
337
+ }
338
+
333
339
  const firstRow = this.gridElement.querySelector('[data-blok-table-row]');
334
340
 
335
341
  return firstRow?.querySelectorAll('[data-blok-table-cell]').length ?? 0;
@@ -346,9 +352,7 @@ export class TableCellBlocks {
346
352
  return null;
347
353
  }
348
354
 
349
- const cells = rowEl.querySelectorAll('[data-blok-table-cell]');
350
-
351
- return (cells[col] as HTMLElement | undefined) ?? null;
355
+ return rowEl.querySelector<HTMLElement>(`[${CELL_COL_ATTR}="${col}"]`) ?? null;
352
356
  }
353
357
 
354
358
  /**
@@ -368,11 +372,10 @@ export class TableCellBlocks {
368
372
  return;
369
373
  }
370
374
 
371
- const cells = row.querySelectorAll(`[${CELL_ATTR}]`);
372
375
  const normalizedRow: CellContent[] = [];
373
376
 
374
377
  rowData.forEach((cellContent, colIndex) => {
375
- const cell = cells[colIndex] as HTMLElement | undefined;
378
+ const cell = row.querySelector<HTMLElement>(`[${CELL_COL_ATTR}="${colIndex}"]`);
376
379
 
377
380
  if (!cell) {
378
381
  return;
@@ -1,5 +1,5 @@
1
1
  import type { SanitizerConfig } from '../../../types/configs/sanitizer-config';
2
- import type { ClipboardBlockData, TableCellsClipboard } from './types';
2
+ import type { CellPlacement, ClipboardBlockData, TableCellsClipboard } from './types';
3
3
  import { mapToNearestPresetColor } from '../../components/utils/color-mapping';
4
4
  import { clean } from '../../components/utils/sanitizer';
5
5
 
@@ -33,6 +33,7 @@ interface CellEntry {
33
33
  blocks: ClipboardBlockData[];
34
34
  color?: string;
35
35
  textColor?: string;
36
+ placement?: CellPlacement;
36
37
  }
37
38
 
38
39
  /**
@@ -73,6 +74,10 @@ export function serializeCellsToClipboard(entries: CellEntry[]): TableCellsClipb
73
74
  if (entry.textColor !== undefined) {
74
75
  cells[r][c].textColor = entry.textColor;
75
76
  }
77
+
78
+ if (entry.placement !== undefined) {
79
+ cells[r][c].placement = entry.placement;
80
+ }
76
81
  }
77
82
 
78
83
  return { rows, cols, cells };
@@ -0,0 +1,133 @@
1
+ import type { I18n } from '../../../types/api';
2
+ import type { CellPlacement } from './types';
3
+
4
+ interface PlacementPickerOptions {
5
+ i18n: I18n;
6
+ currentPlacement: CellPlacement | undefined;
7
+ onPlacementSelect: (placement: CellPlacement) => void;
8
+ }
9
+
10
+ interface PlacementPickerResult {
11
+ element: HTMLDivElement;
12
+ }
13
+
14
+ const PLACEMENTS: CellPlacement[] = [
15
+ 'top-left', 'top-center', 'top-right',
16
+ 'middle-left', 'middle-center', 'middle-right',
17
+ 'bottom-left', 'bottom-center', 'bottom-right',
18
+ ];
19
+
20
+ const I18N_KEYS: Record<CellPlacement, string> = {
21
+ 'top-left': 'tools.table.placementTopLeft',
22
+ 'top-center': 'tools.table.placementTopCenter',
23
+ 'top-right': 'tools.table.placementTopRight',
24
+ 'middle-left': 'tools.table.placementMiddleLeft',
25
+ 'middle-center': 'tools.table.placementMiddleCenter',
26
+ 'middle-right': 'tools.table.placementMiddleRight',
27
+ 'bottom-left': 'tools.table.placementBottomLeft',
28
+ 'bottom-center': 'tools.table.placementBottomCenter',
29
+ 'bottom-right': 'tools.table.placementBottomRight',
30
+ };
31
+
32
+ const V_ALIGN: Record<string, string> = {
33
+ top: 'flex-start',
34
+ middle: 'center',
35
+ bottom: 'flex-end',
36
+ };
37
+
38
+ const H_ALIGN: Record<string, string> = {
39
+ left: 'flex-start',
40
+ center: 'center',
41
+ right: 'flex-end',
42
+ };
43
+
44
+ export const createCellPlacementPicker = (options: PlacementPickerOptions): PlacementPickerResult => {
45
+ const current = options.currentPlacement ?? 'top-left';
46
+ const wrapper = document.createElement('div');
47
+
48
+ wrapper.style.padding = '8px';
49
+
50
+ const grid = document.createElement('div');
51
+
52
+ grid.style.display = 'grid';
53
+ grid.style.gridTemplateColumns = 'repeat(3, 1fr)';
54
+ grid.style.gap = '3px';
55
+
56
+ const label = document.createElement('div');
57
+
58
+ label.style.textAlign = 'center';
59
+ label.style.fontSize = '11px';
60
+ label.style.marginTop = '6px';
61
+ label.style.color = 'var(--blok-text-secondary, #707684)';
62
+ label.textContent = options.i18n.t(I18N_KEYS[current]);
63
+
64
+ for (const placement of PLACEMENTS) {
65
+ const [vKey, hKey] = placement.split('-');
66
+ const cell = document.createElement('div');
67
+
68
+ cell.setAttribute('data-placement', placement);
69
+ cell.style.width = '32px';
70
+ cell.style.height = '26px';
71
+ cell.style.borderRadius = '3px';
72
+ cell.style.display = 'flex';
73
+ cell.style.flexDirection = 'column';
74
+ cell.style.alignItems = H_ALIGN[hKey];
75
+ cell.style.justifyContent = V_ALIGN[vKey];
76
+ cell.style.padding = '3px';
77
+ cell.style.cursor = 'pointer';
78
+ cell.style.gap = '1px';
79
+
80
+ if (placement === current) {
81
+ cell.setAttribute('data-active', 'true');
82
+ cell.style.outline = '2px solid var(--blok-color-primary, #388AE5)';
83
+ cell.style.outlineOffset = '-2px';
84
+ cell.style.backgroundColor = 'var(--blok-item-focus-bg, rgba(35, 131, 226, 0.14))';
85
+ } else {
86
+ cell.style.backgroundColor = 'var(--blok-bg-light, #eff2f5)';
87
+ }
88
+
89
+ const line1 = document.createElement('div');
90
+
91
+ line1.style.width = '14px';
92
+ line1.style.height = '2px';
93
+ line1.style.borderRadius = '1px';
94
+ line1.style.backgroundColor = 'currentColor';
95
+ line1.style.opacity = '0.6';
96
+
97
+ const line2 = document.createElement('div');
98
+
99
+ line2.style.width = '9px';
100
+ line2.style.height = '2px';
101
+ line2.style.borderRadius = '1px';
102
+ line2.style.backgroundColor = 'currentColor';
103
+ line2.style.opacity = '0.3';
104
+
105
+ cell.appendChild(line1);
106
+ cell.appendChild(line2);
107
+
108
+ cell.addEventListener('click', () => {
109
+ grid.querySelectorAll('[data-placement]').forEach(el => {
110
+ const element = el as HTMLElement;
111
+ element.removeAttribute('data-active');
112
+ element.style.outline = '';
113
+ element.style.outlineOffset = '';
114
+ element.style.backgroundColor = 'var(--blok-bg-tertiary, #f0f0f0)';
115
+ });
116
+
117
+ cell.setAttribute('data-active', 'true');
118
+ cell.style.outline = '2px solid var(--blok-color-primary, #388AE5)';
119
+ cell.style.outlineOffset = '-2px';
120
+ cell.style.backgroundColor = 'var(--blok-item-focus-bg, rgba(35, 131, 226, 0.14))';
121
+ label.textContent = options.i18n.t(I18N_KEYS[placement]);
122
+
123
+ options.onPlacementSelect(placement);
124
+ });
125
+
126
+ grid.appendChild(cell);
127
+ }
128
+
129
+ wrapper.appendChild(grid);
130
+ wrapper.appendChild(label);
131
+
132
+ return { element: wrapper };
133
+ };