@jackuait/blok 0.6.0-beta.0 → 0.6.0-beta.10

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 (286) hide show
  1. package/README.md +16 -169
  2. package/bin/blok.mjs +10 -0
  3. package/dist/blok.mjs +2 -2
  4. package/dist/chunks/{blok-Bu9S3SsR.mjs → blok-Buf0btS7.mjs} +2267 -2024
  5. package/dist/chunks/{i18next-loader-CKuXJ0Av.mjs → i18next-loader-CVf_ZfwA.mjs} +1 -1
  6. package/dist/chunks/{index-jtZaryNw.mjs → index-C6jsfLLp.mjs} +1 -1
  7. package/dist/chunks/{inline-tool-convert-CFjyrH30.mjs → inline-tool-convert-BKKEoOqB.mjs} +710 -570
  8. package/dist/chunks/{messages-C5b7hr_E.mjs → messages-1fC8IMyX.mjs} +16 -2
  9. package/dist/chunks/{messages-CQj2JU2j.mjs → messages-7QoX8DkW.mjs} +23 -9
  10. package/dist/{messages-LvFKBBPa.mjs → chunks/messages-7W4d0DwD.mjs} +15 -1
  11. package/dist/{messages-Bn253WWC.mjs → chunks/messages-9SihnaXQ.mjs} +14 -0
  12. package/dist/{messages-Bf6Y3_GI.mjs → chunks/messages-B1Aww8q7.mjs} +16 -2
  13. package/dist/{messages-pA5TvcAj.mjs → chunks/messages-BB5z9Uba.mjs} +14 -0
  14. package/dist/chunks/{messages-wdqp4610.mjs → messages-BC86qLvI.mjs} +17 -3
  15. package/dist/chunks/{messages-o24dK6CU.mjs → messages-BELRf6DU.mjs} +16 -2
  16. package/dist/chunks/{messages-CUZ1x1QD.mjs → messages-BFG6Wlgy.mjs} +16 -2
  17. package/dist/{messages-B5puUm7R.mjs → chunks/messages-BL0tXcDf.mjs} +15 -1
  18. package/dist/chunks/{messages-zS1AXZ0y.mjs → messages-BMXCuEKO.mjs} +19 -5
  19. package/dist/{messages-CyDU5lz9.mjs → chunks/messages-BMv4xwIr.mjs} +16 -2
  20. package/dist/chunks/{messages-BeUhMpsr.mjs → messages-BSbjsyHY.mjs} +25 -11
  21. package/dist/chunks/{messages-JGsXAReJ.mjs → messages-BU2nlrLK.mjs} +16 -2
  22. package/dist/chunks/{messages-srxrv8Yh.mjs → messages-BWF-zUpY.mjs} +17 -3
  23. package/dist/{messages-CXHd9SUK.mjs → chunks/messages-BYyy6Wqf.mjs} +14 -0
  24. package/dist/chunks/{messages-DOlC_Tty.mjs → messages-BdeLo0N9.mjs} +24 -10
  25. package/dist/chunks/{messages-B5jGUnOy.mjs → messages-Bmu_S7GM.mjs} +14 -0
  26. package/dist/chunks/{messages-BmKCChWZ.mjs → messages-BoJc_p1r.mjs} +14 -0
  27. package/dist/chunks/{messages-CvaqJFN-.mjs → messages-BogRq8lt.mjs} +15 -1
  28. package/dist/chunks/{messages-NP1myMGI.mjs → messages-BrPFGbM-.mjs} +14 -0
  29. package/dist/chunks/{messages-D00OjS2n.mjs → messages-C2htQ_3F.mjs} +24 -10
  30. package/dist/chunks/{messages-BiExzWJv.mjs → messages-C99mq906.mjs} +15 -1
  31. package/dist/chunks/{messages-CkFT2gle.mjs → messages-C9eaarcK.mjs} +20 -6
  32. package/dist/chunks/{messages-BrJHUxQL.mjs → messages-CJdUsQ-c.mjs} +15 -1
  33. package/dist/chunks/messages-CKI54h6O.mjs +62 -0
  34. package/dist/{messages-CrsJ1TEJ.mjs → chunks/messages-CLhcMlTc.mjs} +15 -1
  35. package/dist/{messages-CnvW8Slp.mjs → chunks/messages-CMkNSDTo.mjs} +17 -3
  36. package/dist/{messages-BlpqL8vG.mjs → chunks/messages-CQwpzUFp.mjs} +19 -5
  37. package/dist/chunks/{messages-Cu08aLS3.mjs → messages-CVw84KdI.mjs} +21 -7
  38. package/dist/chunks/{messages-B9Oba7sq.mjs → messages-CY8_RyFE.mjs} +15 -1
  39. package/dist/chunks/{messages-B5hdXZwA.mjs → messages-CZygwLwM.mjs} +15 -1
  40. package/dist/chunks/{messages-CVeWVKsV.mjs → messages-CnwibSvh.mjs} +14 -0
  41. package/dist/chunks/{messages-DbVquYKN.mjs → messages-CqWJcCbY.mjs} +14 -0
  42. package/dist/{messages-Dg92dXZ5.mjs → chunks/messages-CvGLfqmV.mjs} +14 -0
  43. package/dist/{messages-AHESHJm_.mjs → chunks/messages-CzTufCHu.mjs} +14 -0
  44. package/dist/chunks/{messages-Cj-t1bdy.mjs → messages-CznZadDf.mjs} +15 -1
  45. package/dist/chunks/{messages-DMQIHGRj.mjs → messages-D-ZtY5v0.mjs} +14 -0
  46. package/dist/chunks/{messages-rRSHQDCX.mjs → messages-D1Hv8XGo.mjs} +14 -0
  47. package/dist/chunks/{messages-0tDXLuyH.mjs → messages-D5C3J9qr.mjs} +15 -1
  48. package/dist/chunks/{messages-RvMHb2Ht.mjs → messages-D5iv1Kox.mjs} +16 -2
  49. package/dist/{messages-zSzDzXej.mjs → chunks/messages-DBRw-7Zc.mjs} +16 -2
  50. package/dist/chunks/{messages-CeCjVKMW.mjs → messages-DBn76jVV.mjs} +16 -2
  51. package/dist/chunks/{messages-C7I_AVH2.mjs → messages-DJDG55Vq.mjs} +16 -2
  52. package/dist/{messages-DDLgIPDF.mjs → chunks/messages-DLfR5bMd.mjs} +16 -2
  53. package/dist/{messages-CbhuIWRJ.mjs → chunks/messages-DT4dP5uK.mjs} +15 -1
  54. package/dist/chunks/{messages-B66ZSDCJ.mjs → messages-DhLKYm2j.mjs} +15 -1
  55. package/dist/{messages-BPqWKx5Z.mjs → chunks/messages-Diu6jAaR.mjs} +17 -3
  56. package/dist/{messages-BA0rcTCY.mjs → chunks/messages-DnIhyAJk.mjs} +18 -4
  57. package/dist/chunks/{messages-DV6shA9b.mjs → messages-DnXLrlHh.mjs} +14 -0
  58. package/dist/chunks/{messages-DcKOuncK.mjs → messages-DprmQg6V.mjs} +16 -2
  59. package/dist/{messages-CJoBtXU6.mjs → chunks/messages-DqM1LFg5.mjs} +14 -0
  60. package/dist/chunks/{messages-Cyi2AMmz.mjs → messages-DvFLX36Q.mjs} +25 -11
  61. package/dist/chunks/{messages-DnbbyJT3.mjs → messages-Dz9L52ol.mjs} +16 -2
  62. package/dist/chunks/{messages-GC2PhgV3.mjs → messages-Dzwxv9v1.mjs} +23 -9
  63. package/dist/chunks/{messages-Q4kc_ZtL.mjs → messages-JELdtT6E.mjs} +15 -1
  64. package/dist/{messages-DY94ykcE.mjs → chunks/messages-LPVfA-8K.mjs} +14 -0
  65. package/dist/{messages-Cr-RJ7YB.mjs → chunks/messages-O5tQus_0.mjs} +14 -0
  66. package/dist/chunks/{messages-CbMyJSzS.mjs → messages-Q7AO_FLv.mjs} +17 -3
  67. package/dist/chunks/{messages-2_xedlYw.mjs → messages-R3hUSvr3.mjs} +15 -1
  68. package/dist/{messages-CUy1vn-b.mjs → chunks/messages-Xq8UmkVs.mjs} +14 -0
  69. package/dist/chunks/{messages-BBJgd5jG.mjs → messages-Z9nEU2xK.mjs} +16 -2
  70. package/dist/chunks/{messages-Cm9aLHeX.mjs → messages-_ErNTNhk.mjs} +15 -1
  71. package/dist/chunks/{messages-JZUhXTuV.mjs → messages-_ncGrKHh.mjs} +16 -2
  72. package/dist/chunks/{messages-ftMcCEuO.mjs → messages-kep5wtm4.mjs} +15 -1
  73. package/dist/chunks/{messages-DteYq0rv.mjs → messages-uKX8WBaD.mjs} +16 -2
  74. package/dist/chunks/{messages-Bdv-IkfG.mjs → messages-w7v1GNaE.mjs} +15 -1
  75. package/dist/cli.mjs +50 -0
  76. package/dist/full.mjs +15 -15
  77. package/dist/locales.mjs +102 -88
  78. package/dist/{messages-C5b7hr_E.mjs → messages-1fC8IMyX.mjs} +16 -2
  79. package/dist/{messages-CQj2JU2j.mjs → messages-7QoX8DkW.mjs} +23 -9
  80. package/dist/{chunks/messages-LvFKBBPa.mjs → messages-7W4d0DwD.mjs} +15 -1
  81. package/dist/{chunks/messages-Bn253WWC.mjs → messages-9SihnaXQ.mjs} +14 -0
  82. package/dist/{chunks/messages-Bf6Y3_GI.mjs → messages-B1Aww8q7.mjs} +16 -2
  83. package/dist/{chunks/messages-pA5TvcAj.mjs → messages-BB5z9Uba.mjs} +14 -0
  84. package/dist/{messages-wdqp4610.mjs → messages-BC86qLvI.mjs} +17 -3
  85. package/dist/{messages-o24dK6CU.mjs → messages-BELRf6DU.mjs} +16 -2
  86. package/dist/{messages-CUZ1x1QD.mjs → messages-BFG6Wlgy.mjs} +16 -2
  87. package/dist/{chunks/messages-B5puUm7R.mjs → messages-BL0tXcDf.mjs} +15 -1
  88. package/dist/{messages-zS1AXZ0y.mjs → messages-BMXCuEKO.mjs} +19 -5
  89. package/dist/{chunks/messages-CyDU5lz9.mjs → messages-BMv4xwIr.mjs} +16 -2
  90. package/dist/{messages-BeUhMpsr.mjs → messages-BSbjsyHY.mjs} +25 -11
  91. package/dist/{messages-JGsXAReJ.mjs → messages-BU2nlrLK.mjs} +16 -2
  92. package/dist/{messages-srxrv8Yh.mjs → messages-BWF-zUpY.mjs} +17 -3
  93. package/dist/{chunks/messages-CXHd9SUK.mjs → messages-BYyy6Wqf.mjs} +14 -0
  94. package/dist/{messages-DOlC_Tty.mjs → messages-BdeLo0N9.mjs} +24 -10
  95. package/dist/{messages-B5jGUnOy.mjs → messages-Bmu_S7GM.mjs} +14 -0
  96. package/dist/{messages-BmKCChWZ.mjs → messages-BoJc_p1r.mjs} +14 -0
  97. package/dist/{messages-CvaqJFN-.mjs → messages-BogRq8lt.mjs} +15 -1
  98. package/dist/{messages-NP1myMGI.mjs → messages-BrPFGbM-.mjs} +14 -0
  99. package/dist/{messages-D00OjS2n.mjs → messages-C2htQ_3F.mjs} +24 -10
  100. package/dist/{messages-BiExzWJv.mjs → messages-C99mq906.mjs} +15 -1
  101. package/dist/{messages-CkFT2gle.mjs → messages-C9eaarcK.mjs} +20 -6
  102. package/dist/{messages-BrJHUxQL.mjs → messages-CJdUsQ-c.mjs} +15 -1
  103. package/dist/messages-CKI54h6O.mjs +62 -0
  104. package/dist/{chunks/messages-CrsJ1TEJ.mjs → messages-CLhcMlTc.mjs} +15 -1
  105. package/dist/{chunks/messages-CnvW8Slp.mjs → messages-CMkNSDTo.mjs} +17 -3
  106. package/dist/{chunks/messages-BlpqL8vG.mjs → messages-CQwpzUFp.mjs} +19 -5
  107. package/dist/{messages-Cu08aLS3.mjs → messages-CVw84KdI.mjs} +21 -7
  108. package/dist/{messages-B9Oba7sq.mjs → messages-CY8_RyFE.mjs} +15 -1
  109. package/dist/{messages-B5hdXZwA.mjs → messages-CZygwLwM.mjs} +15 -1
  110. package/dist/{messages-CVeWVKsV.mjs → messages-CnwibSvh.mjs} +14 -0
  111. package/dist/{messages-DbVquYKN.mjs → messages-CqWJcCbY.mjs} +14 -0
  112. package/dist/{chunks/messages-Dg92dXZ5.mjs → messages-CvGLfqmV.mjs} +14 -0
  113. package/dist/{chunks/messages-AHESHJm_.mjs → messages-CzTufCHu.mjs} +14 -0
  114. package/dist/{messages-Cj-t1bdy.mjs → messages-CznZadDf.mjs} +15 -1
  115. package/dist/{messages-DMQIHGRj.mjs → messages-D-ZtY5v0.mjs} +14 -0
  116. package/dist/{messages-rRSHQDCX.mjs → messages-D1Hv8XGo.mjs} +14 -0
  117. package/dist/{messages-0tDXLuyH.mjs → messages-D5C3J9qr.mjs} +15 -1
  118. package/dist/{messages-RvMHb2Ht.mjs → messages-D5iv1Kox.mjs} +16 -2
  119. package/dist/{chunks/messages-zSzDzXej.mjs → messages-DBRw-7Zc.mjs} +16 -2
  120. package/dist/{messages-CeCjVKMW.mjs → messages-DBn76jVV.mjs} +16 -2
  121. package/dist/{messages-C7I_AVH2.mjs → messages-DJDG55Vq.mjs} +16 -2
  122. package/dist/{chunks/messages-DDLgIPDF.mjs → messages-DLfR5bMd.mjs} +16 -2
  123. package/dist/{chunks/messages-CbhuIWRJ.mjs → messages-DT4dP5uK.mjs} +15 -1
  124. package/dist/{messages-B66ZSDCJ.mjs → messages-DhLKYm2j.mjs} +15 -1
  125. package/dist/{chunks/messages-BPqWKx5Z.mjs → messages-Diu6jAaR.mjs} +17 -3
  126. package/dist/{chunks/messages-BA0rcTCY.mjs → messages-DnIhyAJk.mjs} +18 -4
  127. package/dist/{messages-DV6shA9b.mjs → messages-DnXLrlHh.mjs} +14 -0
  128. package/dist/{messages-DcKOuncK.mjs → messages-DprmQg6V.mjs} +16 -2
  129. package/dist/{chunks/messages-CJoBtXU6.mjs → messages-DqM1LFg5.mjs} +14 -0
  130. package/dist/{messages-Cyi2AMmz.mjs → messages-DvFLX36Q.mjs} +25 -11
  131. package/dist/{messages-DnbbyJT3.mjs → messages-Dz9L52ol.mjs} +16 -2
  132. package/dist/{messages-GC2PhgV3.mjs → messages-Dzwxv9v1.mjs} +23 -9
  133. package/dist/{messages-Q4kc_ZtL.mjs → messages-JELdtT6E.mjs} +15 -1
  134. package/dist/{chunks/messages-DY94ykcE.mjs → messages-LPVfA-8K.mjs} +14 -0
  135. package/dist/{chunks/messages-Cr-RJ7YB.mjs → messages-O5tQus_0.mjs} +14 -0
  136. package/dist/{messages-CbMyJSzS.mjs → messages-Q7AO_FLv.mjs} +17 -3
  137. package/dist/{messages-2_xedlYw.mjs → messages-R3hUSvr3.mjs} +15 -1
  138. package/dist/{chunks/messages-CUy1vn-b.mjs → messages-Xq8UmkVs.mjs} +14 -0
  139. package/dist/{messages-BBJgd5jG.mjs → messages-Z9nEU2xK.mjs} +16 -2
  140. package/dist/{messages-Cm9aLHeX.mjs → messages-_ErNTNhk.mjs} +15 -1
  141. package/dist/{messages-JZUhXTuV.mjs → messages-_ncGrKHh.mjs} +16 -2
  142. package/dist/{messages-ftMcCEuO.mjs → messages-kep5wtm4.mjs} +15 -1
  143. package/dist/{messages-DteYq0rv.mjs → messages-uKX8WBaD.mjs} +16 -2
  144. package/dist/{messages-Bdv-IkfG.mjs → messages-w7v1GNaE.mjs} +15 -1
  145. package/dist/tools.mjs +2005 -1267
  146. package/dist/vendor.LICENSE.txt +1 -1
  147. package/package.json +15 -14
  148. package/src/cli/commands/migration.ts +16 -0
  149. package/src/cli/commands/migrationContent.ts +6 -0
  150. package/src/cli/index.ts +47 -0
  151. package/src/cli/utils/output.ts +10 -0
  152. package/src/components/block-tunes/block-tune-delete.ts +3 -2
  153. package/src/components/blocks.ts +23 -6
  154. package/src/components/constants/data-attributes.ts +2 -0
  155. package/src/components/i18n/locales/am/messages.json +15 -1
  156. package/src/components/i18n/locales/ar/messages.json +14 -0
  157. package/src/components/i18n/locales/az/messages.json +14 -0
  158. package/src/components/i18n/locales/bg/messages.json +14 -0
  159. package/src/components/i18n/locales/bn/messages.json +25 -11
  160. package/src/components/i18n/locales/bs/messages.json +15 -1
  161. package/src/components/i18n/locales/cs/messages.json +14 -0
  162. package/src/components/i18n/locales/da/messages.json +14 -0
  163. package/src/components/i18n/locales/de/messages.json +14 -0
  164. package/src/components/i18n/locales/dv/messages.json +15 -1
  165. package/src/components/i18n/locales/el/messages.json +15 -1
  166. package/src/components/i18n/locales/en/messages.json +14 -0
  167. package/src/components/i18n/locales/es/messages.json +14 -0
  168. package/src/components/i18n/locales/et/messages.json +14 -0
  169. package/src/components/i18n/locales/fa/messages.json +15 -1
  170. package/src/components/i18n/locales/fi/messages.json +15 -1
  171. package/src/components/i18n/locales/fil/messages.json +20 -6
  172. package/src/components/i18n/locales/fr/messages.json +15 -1
  173. package/src/components/i18n/locales/gu/messages.json +15 -1
  174. package/src/components/i18n/locales/he/messages.json +14 -0
  175. package/src/components/i18n/locales/hi/messages.json +23 -9
  176. package/src/components/i18n/locales/hr/messages.json +14 -0
  177. package/src/components/i18n/locales/hu/messages.json +14 -0
  178. package/src/components/i18n/locales/hy/messages.json +16 -2
  179. package/src/components/i18n/locales/id/messages.json +19 -5
  180. package/src/components/i18n/locales/it/messages.json +14 -0
  181. package/src/components/i18n/locales/ja/messages.json +14 -0
  182. package/src/components/i18n/locales/ka/messages.json +15 -1
  183. package/src/components/i18n/locales/km/messages.json +16 -2
  184. package/src/components/i18n/locales/kn/messages.json +16 -2
  185. package/src/components/i18n/locales/ko/messages.json +14 -0
  186. package/src/components/i18n/locales/ku/messages.json +16 -2
  187. package/src/components/i18n/locales/lo/messages.json +15 -1
  188. package/src/components/i18n/locales/lt/messages.json +15 -1
  189. package/src/components/i18n/locales/lv/messages.json +15 -1
  190. package/src/components/i18n/locales/mk/messages.json +16 -2
  191. package/src/components/i18n/locales/ml/messages.json +16 -2
  192. package/src/components/i18n/locales/mn/messages.json +16 -2
  193. package/src/components/i18n/locales/mr/messages.json +24 -10
  194. package/src/components/i18n/locales/ms/messages.json +17 -3
  195. package/src/components/i18n/locales/my/messages.json +16 -2
  196. package/src/components/i18n/locales/ne/messages.json +24 -10
  197. package/src/components/i18n/locales/nl/messages.json +15 -1
  198. package/src/components/i18n/locales/no/messages.json +16 -2
  199. package/src/components/i18n/locales/pa/messages.json +15 -1
  200. package/src/components/i18n/locales/pl/messages.json +14 -0
  201. package/src/components/i18n/locales/ps/messages.json +17 -3
  202. package/src/components/i18n/locales/pt/messages.json +14 -0
  203. package/src/components/i18n/locales/ro/messages.json +15 -1
  204. package/src/components/i18n/locales/ru/messages.json +14 -0
  205. package/src/components/i18n/locales/sd/messages.json +16 -2
  206. package/src/components/i18n/locales/si/messages.json +23 -9
  207. package/src/components/i18n/locales/sk/messages.json +15 -1
  208. package/src/components/i18n/locales/sl/messages.json +16 -2
  209. package/src/components/i18n/locales/sq/messages.json +16 -2
  210. package/src/components/i18n/locales/sr/messages.json +16 -2
  211. package/src/components/i18n/locales/sv/messages.json +16 -2
  212. package/src/components/i18n/locales/sw/messages.json +16 -2
  213. package/src/components/i18n/locales/ta/messages.json +21 -7
  214. package/src/components/i18n/locales/te/messages.json +40 -26
  215. package/src/components/i18n/locales/th/messages.json +19 -5
  216. package/src/components/i18n/locales/tr/messages.json +15 -1
  217. package/src/components/i18n/locales/ug/messages.json +16 -2
  218. package/src/components/i18n/locales/uk/messages.json +15 -1
  219. package/src/components/i18n/locales/ur/messages.json +15 -1
  220. package/src/components/i18n/locales/vi/messages.json +25 -11
  221. package/src/components/i18n/locales/yi/messages.json +16 -2
  222. package/src/components/i18n/locales/zh/messages.json +15 -1
  223. package/src/components/icons/index.ts +104 -83
  224. package/src/components/modules/api/blocks.ts +35 -2
  225. package/src/components/modules/api/history.ts +64 -0
  226. package/src/components/modules/api/index.ts +2 -0
  227. package/src/components/modules/api/readonly.ts +11 -1
  228. package/src/components/modules/blockEvents/composers/markdownShortcuts.ts +12 -1
  229. package/src/components/modules/blockManager/blockManager.ts +7 -0
  230. package/src/components/modules/blockManager/operations.ts +3 -2
  231. package/src/components/modules/blockManager/types.ts +3 -1
  232. package/src/components/modules/blockManager/yjs-sync.ts +12 -2
  233. package/src/components/modules/index.ts +3 -0
  234. package/src/components/modules/normalizeInlineImages.ts +263 -0
  235. package/src/components/modules/readonly.ts +11 -0
  236. package/src/components/modules/rectangleSelection.ts +19 -3
  237. package/src/components/modules/saver.ts +7 -3
  238. package/src/components/modules/toolbar/blockSettings.ts +3 -3
  239. package/src/components/modules/toolbar/index.ts +72 -14
  240. package/src/components/modules/toolbar/plus-button.ts +24 -3
  241. package/src/components/modules/toolbar/settings-toggler.ts +3 -5
  242. package/src/components/modules/ui.ts +46 -68
  243. package/src/components/modules/uiControllers/controllers/blockHover.ts +49 -61
  244. package/src/components/modules/uiControllers/controllers/keyboard.ts +17 -11
  245. package/src/components/modules/uiControllers/handlers/click.ts +0 -12
  246. package/src/components/modules/yjs/index.ts +23 -0
  247. package/src/components/ui/toolbox.ts +41 -6
  248. package/src/components/utils/placeholder.ts +16 -0
  249. package/src/components/utils/popover/components/popover-item/popover-item-default/popover-item-default.const.ts +2 -1
  250. package/src/components/utils/popover/components/popover-item/popover-item-default/popover-item-default.ts +6 -1
  251. package/src/components/utils/popover/index.ts +1 -0
  252. package/src/components/utils/popover/popover-abstract.ts +11 -1
  253. package/src/components/utils/popover/popover-desktop.ts +27 -8
  254. package/src/components/utils/popover/popover-registry.ts +188 -0
  255. package/src/components/utils/sanitizer.ts +23 -2
  256. package/src/components/utils/tooltip.ts +2 -24
  257. package/src/styles/main.css +22 -0
  258. package/src/tools/paragraph/index.ts +12 -4
  259. package/src/tools/table/data-normalizer.ts +1 -0
  260. package/src/tools/table/index.ts +283 -346
  261. package/src/tools/table/table-add-controls.ts +353 -47
  262. package/src/tools/table/table-cell-blocks.ts +95 -7
  263. package/src/tools/table/table-cell-selection.ts +648 -0
  264. package/src/tools/table/table-core.ts +21 -32
  265. package/src/tools/table/table-grip-visuals.ts +96 -0
  266. package/src/tools/table/table-heading-toggle.ts +127 -0
  267. package/src/tools/table/table-operations.ts +475 -0
  268. package/src/tools/table/table-resize.ts +27 -6
  269. package/src/tools/table/table-restrictions.ts +64 -0
  270. package/src/tools/table/table-row-col-action-handler.ts +190 -0
  271. package/src/tools/table/table-row-col-controls.ts +265 -211
  272. package/src/tools/table/table-row-col-drag.ts +4 -4
  273. package/src/tools/table/table-row-col-popover.ts +225 -0
  274. package/src/tools/table/types.ts +4 -0
  275. package/src/types-internal/blok-modules.d.ts +2 -0
  276. package/types/api/blocks.d.ts +8 -0
  277. package/types/api/history.d.ts +33 -0
  278. package/types/api/index.d.ts +1 -0
  279. package/types/api/readonly.d.ts +12 -2
  280. package/types/index.d.ts +10 -0
  281. package/types/tools/table.d.ts +67 -0
  282. package/types/tools-entry.d.ts +4 -0
  283. package/types/utils/popover/popover-item.d.ts +6 -0
  284. package/types/utils/popover/popover.d.ts +7 -0
  285. package/dist/chunks/messages-CySyfkMU.mjs +0 -48
  286. package/dist/messages-CySyfkMU.mjs +0 -48
@@ -19,6 +19,8 @@ const CELL_CLASSES = [
19
19
  'min-h-[2em]',
20
20
  'outline-none',
21
21
  'leading-normal',
22
+ 'text-sm',
23
+ 'cursor-text',
22
24
  ];
23
25
 
24
26
  /**
@@ -130,7 +132,7 @@ export class TableGrid {
130
132
  * those widths and the new column is added in px mode. This prevents
131
133
  * existing columns from shrinking when the table is in percent mode.
132
134
  */
133
- public addColumn(table: HTMLElement, index?: number, colWidths?: number[]): boolean {
135
+ public addColumn(table: HTMLElement, index?: number, colWidths?: number[], newColWidth?: number): boolean {
134
136
  const rows = table.querySelectorAll(`[${ROW_ATTR}]`);
135
137
  const oldColCount = this.getColumnCount(table);
136
138
  const hasValidColWidths = colWidths !== undefined && colWidths.length === oldColCount;
@@ -141,7 +143,7 @@ export class TableGrid {
141
143
  }
142
144
 
143
145
  if (usePx) {
144
- this.addColumnPx(rows, oldColCount, index);
146
+ this.addColumnPx(rows, oldColCount, index, newColWidth);
145
147
 
146
148
  return true;
147
149
  }
@@ -169,24 +171,15 @@ export class TableGrid {
169
171
  }
170
172
 
171
173
  /**
172
- * Add column in px mode: keep existing widths, add new column at half the average width
174
+ * Add column in px mode: keep existing widths, add new column at given width or half the average
173
175
  */
174
- private addColumnPx(rows: NodeListOf<Element>, oldColCount: number, index?: number): void {
175
- const firstRow = rows[0];
176
- const firstRowCells = firstRow?.querySelectorAll(`[${CELL_ATTR}]`);
177
- const totalWidth = Array.from(firstRowCells ?? []).reduce(
178
- (sum, node) => sum + (parseFloat((node as HTMLElement).style.width) || 0),
179
- 0
180
- );
181
-
182
- const newColWidth = oldColCount > 0
183
- ? Math.round((totalWidth / oldColCount / 2) * 100) / 100
184
- : 0;
176
+ private addColumnPx(rows: NodeListOf<Element>, oldColCount: number, index?: number, newColWidth?: number): void {
177
+ const computedWidth = newColWidth ?? this.computeHalfAvgPxWidth(rows, oldColCount);
185
178
 
186
179
  rows.forEach(row => {
187
180
  const cells = row.querySelectorAll(`[${CELL_ATTR}]`);
188
181
  const isAppend = index === undefined || index >= cells.length;
189
- const cell = this.createCell(`${newColWidth}px`);
182
+ const cell = this.createCell(`${computedWidth}px`);
190
183
 
191
184
  if (!isAppend) {
192
185
  row.insertBefore(cell, cells[index]);
@@ -198,6 +191,19 @@ export class TableGrid {
198
191
  });
199
192
  }
200
193
 
194
+ private computeHalfAvgPxWidth(rows: NodeListOf<Element>, oldColCount: number): number {
195
+ const firstRow = rows[0];
196
+ const firstRowCells = firstRow?.querySelectorAll(`[${CELL_ATTR}]`);
197
+ const totalWidth = Array.from(firstRowCells ?? []).reduce(
198
+ (sum, node) => sum + (parseFloat((node as HTMLElement).style.width) || 0),
199
+ 0
200
+ );
201
+
202
+ return oldColCount > 0
203
+ ? Math.round((totalWidth / oldColCount / 2) * 100) / 100
204
+ : 0;
205
+ }
206
+
201
207
  /**
202
208
  * Add column in % mode: shrink existing columns slightly and add new column at half the average width
203
209
  */
@@ -236,7 +242,6 @@ export class TableGrid {
236
242
  */
237
243
  public deleteColumn(table: HTMLElement, index: number): void {
238
244
  const rows = table.querySelectorAll(`[${ROW_ATTR}]`);
239
- const unit = this.detectWidthUnit(table);
240
245
 
241
246
  rows.forEach(row => {
242
247
  const cells = row.querySelectorAll(`[${CELL_ATTR}]`);
@@ -245,23 +250,7 @@ export class TableGrid {
245
250
  return;
246
251
  }
247
252
 
248
- const removedWidth = parseFloat((cells[index] as HTMLElement).style.width) || 0;
249
-
250
253
  cells[index].remove();
251
-
252
- // Redistribute removed width to remaining cells
253
- const remaining = row.querySelectorAll(`[${CELL_ATTR}]`);
254
-
255
- if (remaining.length > 0 && removedWidth > 0) {
256
- const extra = removedWidth / remaining.length;
257
-
258
- remaining.forEach(cell => {
259
- const el = cell as HTMLElement;
260
- const currentWidth = parseFloat(el.style.width) || 0;
261
-
262
- el.style.width = `${Math.round((currentWidth + extra) * 100) / 100}${unit}`;
263
- });
264
- }
265
254
  });
266
255
  }
267
256
 
@@ -0,0 +1,96 @@
1
+ export const GRIP_HOVER_SIZE = 16;
2
+
3
+ /**
4
+ * Dot positions for vertical layout (2 cols × 3 rows) — used by row grips.
5
+ */
6
+ const VERTICAL_DOTS: [number, number][] = [
7
+ [2, 2], [8, 2],
8
+ [2, 7], [8, 7],
9
+ [2, 12], [8, 12],
10
+ ];
11
+
12
+ /**
13
+ * Dot positions for horizontal layout (3 cols × 2 rows) — used by column grips.
14
+ */
15
+ const HORIZONTAL_DOTS: [number, number][] = [
16
+ [2, 2], [7, 2], [12, 2],
17
+ [2, 8], [7, 8], [12, 8],
18
+ ];
19
+
20
+ /**
21
+ * Creates an SVG element with a dot grid pattern for the drag handle affordance.
22
+ * Column grips get a horizontal 3×2 layout; row grips get a vertical 2×3 layout.
23
+ */
24
+ export const createGripDotsSvg = (orientation: 'horizontal' | 'vertical'): SVGElement => {
25
+ const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
26
+ const isHorizontal = orientation === 'horizontal';
27
+
28
+ svg.setAttribute('width', isHorizontal ? '14' : '10');
29
+ svg.setAttribute('height', isHorizontal ? '10' : '14');
30
+ svg.setAttribute('viewBox', isHorizontal ? '0 0 14 10' : '0 0 10 14');
31
+ svg.setAttribute('fill', 'currentColor');
32
+ svg.classList.add(
33
+ 'opacity-0',
34
+ 'transition-opacity',
35
+ 'duration-150',
36
+ 'text-gray-400',
37
+ 'pointer-events-none'
38
+ );
39
+
40
+ const positions = isHorizontal ? HORIZONTAL_DOTS : VERTICAL_DOTS;
41
+
42
+ for (const [cx, cy] of positions) {
43
+ const circle = document.createElementNS('http://www.w3.org/2000/svg', 'circle');
44
+
45
+ circle.setAttribute('cx', String(cx));
46
+ circle.setAttribute('cy', String(cy));
47
+ circle.setAttribute('r', '1.5');
48
+ svg.appendChild(circle);
49
+ }
50
+
51
+ return svg;
52
+ };
53
+
54
+ /**
55
+ * Expand a grip element to the hover state.
56
+ * Column grips expand height; row grips expand width.
57
+ */
58
+ export const expandGrip = (grip: HTMLElement, type: 'col' | 'row'): void => {
59
+ if (type === 'col') {
60
+ Object.assign(grip.style, { height: `${GRIP_HOVER_SIZE}px` });
61
+ } else {
62
+ Object.assign(grip.style, { width: `${GRIP_HOVER_SIZE}px` });
63
+ }
64
+
65
+ grip.classList.add('bg-gray-200');
66
+ grip.classList.remove('bg-gray-300');
67
+
68
+ const svg = grip.querySelector('svg');
69
+
70
+ if (svg) {
71
+ svg.classList.remove('opacity-0');
72
+ svg.classList.add('opacity-100');
73
+ }
74
+ };
75
+
76
+ /**
77
+ * Collapse a grip element back to its idle pill size.
78
+ * Column grips shrink height; row grips shrink width.
79
+ */
80
+ export const collapseGrip = (grip: HTMLElement, type: 'col' | 'row', pillSize: number): void => {
81
+ if (type === 'col') {
82
+ Object.assign(grip.style, { height: `${pillSize}px` });
83
+ } else {
84
+ Object.assign(grip.style, { width: `${pillSize}px` });
85
+ }
86
+
87
+ grip.classList.remove('bg-gray-200');
88
+ grip.classList.add('bg-gray-300');
89
+
90
+ const svg = grip.querySelector('svg');
91
+
92
+ if (svg) {
93
+ svg.classList.add('opacity-0');
94
+ svg.classList.remove('opacity-100');
95
+ }
96
+ };
@@ -0,0 +1,127 @@
1
+ import { twMerge } from '../../components/utils/tw';
2
+
3
+ /**
4
+ * Matches the default popover item container styling from popover-item-default.const.ts
5
+ */
6
+ const TOGGLE_ROW_CLASSES = [
7
+ 'flex',
8
+ 'items-center',
9
+ 'select-none',
10
+ 'border-none',
11
+ 'bg-transparent',
12
+ 'rounded-md',
13
+ 'p-[var(--item-padding)]',
14
+ 'text-text-primary',
15
+ 'mb-px',
16
+ 'cursor-pointer',
17
+ 'can-hover:hover:bg-item-hover-bg',
18
+ ];
19
+
20
+ /**
21
+ * Matches the default popover item icon styling
22
+ */
23
+ const ICON_WRAPPER_CLASSES = [
24
+ 'flex',
25
+ 'items-center',
26
+ 'justify-center',
27
+ 'w-[26px]',
28
+ 'h-[26px]',
29
+ 'mr-2',
30
+ '[&_svg]:w-icon',
31
+ '[&_svg]:h-icon',
32
+ ];
33
+
34
+ /**
35
+ * Matches the default popover item title styling
36
+ */
37
+ const LABEL_CLASSES = [
38
+ 'mr-auto',
39
+ 'truncate',
40
+ 'text-sm',
41
+ 'font-medium',
42
+ 'leading-5',
43
+ ];
44
+
45
+ const TRACK_CLASSES = [
46
+ 'relative',
47
+ 'w-[34px]',
48
+ 'h-[20px]',
49
+ 'rounded-full',
50
+ 'transition-colors',
51
+ 'duration-200',
52
+ 'shrink-0',
53
+ ];
54
+
55
+ const THUMB_CLASSES = [
56
+ 'absolute',
57
+ 'top-[2px]',
58
+ 'w-4',
59
+ 'h-4',
60
+ 'rounded-full',
61
+ 'bg-white',
62
+ 'shadow-sm',
63
+ 'transition-[left]',
64
+ 'duration-200',
65
+ ];
66
+
67
+ interface HeadingToggleOptions {
68
+ icon: string;
69
+ label: string;
70
+ isActive: boolean;
71
+ onToggle: (isActive: boolean) => void;
72
+ }
73
+
74
+ /**
75
+ * Creates a toggle switch element for heading row/column controls.
76
+ * Returns an HTML element suitable for use as a PopoverItemType.Html item.
77
+ */
78
+ export const createHeadingToggle = (options: HeadingToggleOptions): HTMLElement => {
79
+ const { icon, label, isActive, onToggle } = options;
80
+
81
+ const state = { active: isActive };
82
+
83
+ const row = document.createElement('div');
84
+
85
+ row.className = twMerge(TOGGLE_ROW_CLASSES);
86
+
87
+ // Icon
88
+ const iconWrapper = document.createElement('div');
89
+
90
+ iconWrapper.className = twMerge(ICON_WRAPPER_CLASSES);
91
+ iconWrapper.innerHTML = icon;
92
+ row.appendChild(iconWrapper);
93
+
94
+ // Label
95
+ const labelEl = document.createElement('span');
96
+
97
+ labelEl.className = twMerge(LABEL_CLASSES);
98
+ labelEl.textContent = label;
99
+ row.appendChild(labelEl);
100
+
101
+ // Toggle switch
102
+ const track = document.createElement('div');
103
+
104
+ track.className = twMerge(TRACK_CLASSES);
105
+
106
+ const thumb = document.createElement('div');
107
+
108
+ thumb.className = twMerge(THUMB_CLASSES);
109
+ track.appendChild(thumb);
110
+ row.appendChild(track);
111
+
112
+ const applyState = (): void => {
113
+ track.style.backgroundColor = state.active ? '#3b82f6' : '#d1d5db';
114
+ thumb.style.left = state.active ? '16px' : '2px';
115
+ };
116
+
117
+ applyState();
118
+
119
+ row.addEventListener('click', (e) => {
120
+ e.stopPropagation();
121
+ state.active = !state.active;
122
+ applyState();
123
+ onToggle(state.active);
124
+ });
125
+
126
+ return row;
127
+ };